zoukankan      html  css  js  c++  java
  • MySQL学习笔记(二)

    在MySQL学习笔记(二)中讲了MySQL的基础知识,现在说说MySQL的核心的部分,查询:SELECT语句。

    1. 查询所有字段: SELECT * FROM <表名>;

    2. 查询指定字段: SELECT <line1,line2,...> FROM <表名>;

    3. 指定记录查询: SELECT <line1,line2,...> FROM <表名> WHERE <查询条件>;

    WHERE条件判断符有以下这些:

    =,<>、!=,<,<=,>,=>,BETWEEN

    4. 带IN关键词的查询,就是在查询条件中使用IN关键词。

    例如:SELECT line1,line2 FROM tab1 WHERE line1 IN(100,200);

    当然,也可以在IN前面加上NOT进行相反的条件查询。

    5. 带BETWEEN AND的范围查询,就是在查询条件中使用BETWEEN AND关键词。

    例如:SELECT line1,line2 FROM tab1 WHERE line1 BETWEEN 100 AND 200;

    相似的,也可以在BETWEEN前面加上NOT进行相反的条件查询。

    6. 带LIKE的字符匹配查询:(1)匹配任意长度的字符使用‘%’,当然也包括零字符。

    例如,需要查找在tab1中所有以‘a’开头的line1,SQL语句如下:

    SELECT line1 FROM tab1 WHERE line1 LIKE ‘a%’;

    需要查找在tab1中所有包含‘b’的line1记录,SQL语句如下:

    SELECT line1 FROM tab1 WHERE line1 LIKE ‘%b%’;

    (2)匹配一个长度的任意字符,使用下划线‘_’,例如:

    SELECT line1 FROM tab1 WHERE line1 LIKE ‘_c%’;

    7. 空值查询(IS NULL 或者 IS NOT NULL):SELECT line1 FROM tab1 WHERE line1 IS NULL;

    8. 多条件查询。

    (1)AND关键词:SELECT <line1,line2,...> FROM <表名> WHERE <查询条件1> AND <查询条件2> [AND ...];

    (2)OR关键词:SELECT <line1,line2,...> FROM <表名> WHERE <查询条件1> OR <查询条件2> [AND ...];

    这两个关键词是可以一起使用的,但是AND的优先级要比OR高,使用时要确保逻辑正确。

    9. 去重条件查询:SELECT DISTINCT <字段名> FROM <表名>;

    10. 对查询结果排序:使用ORDER BY子句。例如:

    (1)对line1进行排序:SELECT line1 FROM tab1 ORDER BY line1;

    (2)先按line1排序,再按line2排序:SELECT * FROM tab1 ORDER BY line1,line2;

       另外,也可以指定排序,如ASC(升序,默认排序方式),(DESC)降序。

       例如需对line1降序,对line2升序:SELECT * FROM tab1 ORDER BY line1 DESC, line2;

    11. 分组查询。使用GROUP BY关键词,语法为:[GROUP BY 字段] [HAVING <条件表达式>]

    (1) 与集合函数一起使用时,如MAX( )、MIN( )、COUNT( )、SUM( )、AVG( )等。可以加上AS关键词,给这些集合函数取一个别名,如MAX(line1) AS max

       例如以line1分组并统计分组中的数量:SELECT line1,COUNT(*) AS Total FROM tab1 GROUP BY line1;

       如果需要详细的显示出分组中的各字段的名字,可以使用GROUP_CONCAT()关键词。

    使用如:SELECT line1,GROUP_CONCAT(line2),COUNT(*) AS Total FROM tab1 GROUP BY line1;

       当然也可以使用多个字段分组,形如GROUP BY line1,line2;

    (2)使用HAVING关键词过滤分组。

    例如:SELECT line1,COUNT(*) AS Total FROM tab1 GROUP BY line1 HAVING COUNT(line1)>100;

    (3)使用WITH ROLLUP统计数量,它会在分组的最后一列加一条统计上面记录总和的记录。

    例如:SELECT line1,COUNT(*) AS Total FROM tab1 GROUP BY line1 WITH ROLLUP;

    (4)使用LIMIT限制查询结果,语法:LIMIT [位置偏移量, ] <行数>;

    例如,返回前3条记录:SELECT * FROM tab1 LIMIT 3;

    从第5条记录起,返回接下来的2条记录: SELECT * FROM tab1 LIMIT 4,2;

    12. 子查询。子查询是指一个查询语句中嵌套在另一个查询语句内部的查询。在SELECT语句中,先查询子句的结果,将其作为外层的查询的过滤条件。常用的操作符有ANY(SOME)、ALL、IN、EXISTS。当然,子查询中可以添加到SELECT、UPDATE、DELETE语句中。

    (1)带ANY、SOME关键词(即满足其中任一条件)的子查询:

    SELECT line1 FROM tab1 WHERE line1 > ANY(SELECT line2 FROM tab2);

    (2)带ALL关键词(满足内层的所有条件)的子查询:

    SELECT line1 FROM tab1 WHERE line1 > ALL(SELECT line2 FROM tab2);

    (3)带(NOT) EXISTS关键字(系统对子查询进行运算以判断是否返回行,EXISTS是一个布尔型值,如果为false则不再对外层语句进行查询)的子查询。

    例如:SELECT * FROM tab1 WHERE EXISTS (SELECT lin1 FROM tab2 WHERE lin1>10);

    (4)带(NOT)IN关键词的子查询:

    SELECT line1 FROM tab1 WHERE line2 IN (SELECT lin1 FROM tab2 WHERE lin2> 10);

    (5)使用比较运算符的子查询:

    SELECT line1 FROM tab1 WHERE line1=(SELECT lin1 FROM tab2 WHERE lin2= 'one');

    13. UNION合并查询的结果。合并的前提是这些表的列数与数据类型必须相同,其返回的行都是唯一不重复的。当使用UNION ALL时,允许有重复的结果,其查询效率相对较高。

    语法: SELECT line1,...  FROM tab1 UNION [ALL]  SELECT line1,...  FROM tab1;

    14. 使用正则表达式查询。MySQL中使用REGEXP关键词指定字符的匹配模式。关于正则表达式,请看另一篇博文《正则表达式的使用》,这里只举几个例子说明:

    (1)查询特定字符(这里以‘s’为例)开头的记录:

    SELECT * FROM tab1 WHERE line1 REGEXP '^s';

    (2)查询指定字符之外(这里以查询‘a-o’之外的字符为例)的字符:

    SELECT * FROM tab1 WHERE line1 REGEXP '[^a-o]';

  • 相关阅读:
    vue笔记四
    vue笔记三(组件)
    vue笔记二
    Linux04——手动修改IP和关闭防火墙服务
    Linux03——磁盘分区和挂载
    Linux02——解压和压缩
    Linux01——常用命令
    Springmvc-crud-07(springmvc标签错误)
    Springmvc-crud-06(路径忘记加上“/”错误)
    Springmvc-crud-05(路径错误)
  • 原文地址:https://www.cnblogs.com/lingerhk/p/4394805.html
Copyright © 2011-2022 走看看