美文网首页
mysql基本操作

mysql基本操作

作者: 扎Zn了老Fe | 来源:发表于2023-08-20 00:10 被阅读0次

    查询数据

    SELECT 语法结构

    SELECT (DISTINCT) column_name1, column_name2,.....,aggregate_function(column_name) FROM table_name ORDER BY  column_name1, column_name2,....(LIMIT 0,5);
    
    • SELECT 命令可以读取一条或者多条记录。
    • 你可以使用星号(*)来代替其他字段,SELECT语句会返回表的所有字段数据
    • 你可以使用 WHERE 语句来包含任何条件。
    • 你可以使用 LIMIT 属性来设定返回的记录数。
    • 你可以通过OFFSET指定SELECT语句开始查询的数据偏移量。默认情况下偏移量为0。

    过滤数据

    值比较符号=、<>、 !=、<、<=、>、>=、IS [NOT] NULL

    范围(BETWEEN AND), IN(范围, 范围) NOT IN(范围, 范围)

    LIKE过滤

    语法结构:

    SELECT field1, field2,...fieldN 
    FROM table_name
    WHERE field1 LIKE condition1;
    
    模式 描述 示例
    _ 表示任意单个字符。类似于正则表达式中的星号 "." 'a' //三位且中间字母是a的 <br />'a' //两位且结尾字母是a的 <br />'a' //两位且开头字母是a的
    % 表示任意字符,类似于正则表达式中的星号 ""* '%a' //以a结尾的数据 <br />'a%' //以a开头的数据 <br />'%a%' //含有a的数据
    [...] 字符集合。匹配所包含的任意一个字符。例如, '[abc]' 可以匹配 "plain" 中的 'a'。
    [^...] 负值字符集合。匹配未包含的任意字符。例如, '[^abc]' 可以匹配 "plain" 中的'p'。

    示例:

    SELECT prod_id, prod_name FROM products WHERE prod_name  LIKE 'jet%';  //搜索prod_name字段中包含jet字符串的所有数据
    

    正则表达式过滤

    模式 描述 示例
    ^ 匹配输入字符串的开始位置 查找name字段中以'st'为开头的所有数据:<br />mysql> SELECT name FROM person_tbl WHERE name REGEXP '^st';
    $ 匹配输入字符串的结束位置 查找name字段中以'ok'为结尾的所有数据:<br />mysql> SELECT name FROM person_tbl WHERE name REGEXP 'ok$';
    \ 匹配特殊字符。 查找name字段中包含.的所有数据:<br />mysql> SELECT name FROM person_tbl WHERE name REGEXP '\\.';
    [...] 字符集合。匹配所包含的任意一个字符。例如, '[abc]' 可以匹配 "plain" 中的 'a'。 查找name字段包含:ak, ek,ik, ok, uk等所有数据:<br />mysql> SELECT name FROM person_tbl WHERE name REGEXP '[aeiou]k';
    [^...] 负值字符集合。匹配未包含的任意字符。例如, '[^abc]' 可以匹配 "plain" 中的'p'。 <br />
    . 匹配除 "\n" 之外的任何单个字符。要匹配包括 '\n' 在内的任何字符,请使用像 '[.\n]' 的模式。 查找name字段中以'ok'为结尾的所有数据:
    * 匹配前面的子表达式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"。* 等价于{0,}。 <br />
    + 匹配前面的子表达式一次或多次。例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等价于 {1,}。 <br />
    {n} n 是一个非负整数。匹配确定的 n 次。例如,'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的两个 o。
    {n,m} m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。 <br />
    p1|p2|p3 匹配 p1 或 p2 或 p3。例如,'z|food' 能匹配 "z" 或 "food"。'(z|f)ood' 则匹配 "zood" 或 "food"。 查找name字段中以元音字符开头或以'ok'字符串结尾的所有数据:<br />mysql> SELECT name FROM person_tbl WHERE name REGEXP '^[aeiou]|ok$';

    示例:

    SELECT prod_name FROM products WHERE prod_name REGXP '[1-5] Ton' ORDER BY prod_name;
    SELECT vend_name FROM vendors WHERE vend_name REGEXP '\\.' ORDER BY vend_name;
    

    [NOT] EXISTS

    判断子查询是否存在。语法结构:

    SELECT column_name1, column_name2,... FROM table_name_1 WHERE [conditions] and [NOT] EXISTS (SELECT * FROM table_name_2 where [conditons]);
    

    执行过程:
    1、首先进行外层查询,在表table_name_1中查询满足条件的column1;
    2、接下来进行内层查询,将满足条件的column1带入内层的表table_name_2中进行查询;
    3、如果内层的表table_name_2满足查询条件,则返回true,该条数据保留;如果内层的表table_name_2不满足查询条件,则返回false,该条数据不保留;
    4、最终将数据进行返回;
    示例:

    select * from student s where exists( select * from classinfo c where s.classid = c.classid);
    

    函数

    • 拼接字段:Concat
    • 别名:AS, 会创建新的列
    • 算术计算:+,-,*,/
    • 文本处理函数:Ltrim(), RTrim(), Lower(), Upper(), Left(), Right(), - Length(),<br />日期和时间处理函数:Date(), Year(), Month(), Day(), Hour()
    • 汇总数据:AVG(), COUNT(), MAX(), MIN(), SUM() 忽略列值为NULL的行,可以加DISTINCT参数。

    分组

    GROUP BY语句根据一个或多个列对结果集进行分组,如果想要对分组的结果进一步过滤,可以使用HAVING。<br />语法结构:

    SELECT column_name1, column_name2……,aggregate_function(column_name)
    FROM table_name
    [WHERE conditions]
    GROUP BY column_name1,column_name2…… [HAVING conditions];
    

    执行流程:<br />1.首先进行外层查询,根据WHERE条件过滤出数据;<br />2.对第一步所得数据按照GROUP BY后面跟的字段进行分组,分组顺序与字段顺序保持一致;<br />3.HAVING子句筛选满足第二条件的数据; 如果HAVING中有使用SELECT中聚合函数生成的字段,那等SELECT完之后再执行过滤;<br />4.执行SELECT, 返回指定的字段;

    示例:

    SELECT order_num, SUM(quantity*item_price) AS ordertotal FROM orderitems
    GROUP BY order_num
    HAVING SUM(quantity*item_price) >= 50
    ORDER BY ordertotal;
    

    增删改数据

    INSERT INTO customers(cust_name, cust_address, cust_city, cust_state, cust_zip, cust_country) VALUES(...);
    
    UPDATE customers SET cust_name = 'The Fudds', cust_email = 'elmer@fudd.com' WHERE cust_id = 10005;
    
    DELETE FROM  customers WHERE cust_id = 10006;
    

    表定义操作

    创建和删除表

    SHOW DATABASES;                                        //显示数据库;
    USE <数据库名>;                                         //使用数据库;
    SHOW TABLES;                                           //显示库下面所有表;
    DROP TABLE <表名>;                                      //删除表
    
    ALTER TABLE <表名> ADD <新字段名><数据类型>[约束条件];    //添加字段
    ALTER TABLE <表名> DROP <字段名>;                       //删除字段
    ALTER TABLE <表名> CHANGE <旧字段名> <新字段名> <新数据类型>;//修改字段定义
    ALTER TABLE <表名> MODIFY <字段名> <新数据类型>;//修改字段定义, 跟CHANGE区别是不能重命名字段
    
    
    

    参考:

    1.几种MySQL中的联接查询操作方法总结Mysql脚本之家<br />http://www.jb51.net/article/64006.htm<br />3.第8篇 MySQL 多表连接查询

    相关文章

      网友评论

          本文标题:mysql基本操作

          本文链接:https://www.haomeiwen.com/subject/tzptsdtx.html