DQL:查询表中数据

1. 基础查询

  (1) 查询整表

  SELECT * FROM 表名; -- 不推荐使用"*",不方便阅读

  (2) 选择性查询

  SELECT 列名,列名,列名 FROM 表名;

  (3) 去重查询

  SELECT DISTINCT 列名 FROM 表名;

  

  (4) 带多列名的去重查询

  SELECT DISTINCT 列名,列名 FROM 表名; /* 和单列名去重查询区别,
    要同时满足多个列名组合起来的非独一性才能算重复,两个结果完全一样才算重复 */

  

 

  (5) 计算数值数据

  SELECT 列名,列名,列名 + 列名 FROM 表名; -- 注意,NULL加任何值都为NULL。数值可以加减乘除取余。

  

 

  (6) 带修正的计算数据

  SELECT 列名,列名,列名 + IFNULL(列名,指定数据) FROM 表名; /*如果遇到指定列中为NULL,
    那么将NULL设置为指定数据 */

  

 

  (7) 为列名起别名

  SELECT 列名 AS '别名', 列名 AS '别名' FROM 表名; -- AS 是可以用空格来替代

  

 

 

2. 条件查询

  (1) 比较

  SELECT 列名 FROM 表名 WHERE 列名 > 条件值; -- 查询大于条件值的数据
  SELECT 列名 FROM 表名 WHERE 列名 < 条件值; -- 查询小于条件值的数据
  SELECT 列名 FROM 表名 WHERE 列名 >= 条件值; -- 查询大于等于条件值的数据
  SELECT 列名 FROM 表名 WHERE 列名 <= 条件值; -- 查询小于等于条件值的数据
  SELECT 列名 FROM 表名 WHERE 列名 = 条件值; -- 查询等于条件值的数据
  SELECT 列名 FROM 表名 WHERE 列名 <> 条件值; -- 查询不等于条件值的数据
  SELECT 列名 FROM 表名 WHERE 列名 != 条件值; -- 查询不等于条件值的数据,MySQL特有。

  (2) 范围

  SELECT 列名 FROM 表名 WHERE 列名 BETWEEN 条件值1 AND 条件值2;  /* 
    查询大于等于条件值1~小于等于条件值2的数据 */
  SELECT 列名 FROM 表名 WHERE 列名 IN (条件值1,条件值2); /* 
    查询列名和集合中的条件值匹配的数据 */

  (3) 空值

  SELECT 列名 FROM 表名 WHERE 列名 IS NULL; /* 查询指定列为NULL的数据。
    NULL很特殊,不能结合运算符。 */
  SELECT 列名 FROM 表名 WHERE 列名 IS NOT NULL;  -- 查询指定列不为NULL的数据。

   (4) 逻辑运算符

  SELECT 列名 FROM 表名 WHERE 列名=条件值 AND 列名=条件值; -- 同时符合所有条件的值被查询
  SELECT 列名 FROM 表名 WHERE 列名=条件值 OR 列名=条件值; -- 符合任一条件的值都被查询
  SELECT 列名 FROM 表名 WHERE 列名 NOT IN (条件值1,条件值2);  /* 
    查询除了条件值外任何数据,NOT后面任何条件都取反 */

  (5) 模糊查询

  SELECT 列名 FROM 表名 WHERE 列名 LIKE '条件值%'; -- 类似于通配符,"%"代表任意个数字符
  SELECT 列名 FROM 表名 WHERE 列名 LIKE '条件值_'; /* 类似于通配符,"_"代表任意个数字符,
    这两种排列可以混合放置到任何位置 */

  

   

 

3. 排序查询

  (1) 基础排序

  SELECT 列名 FROM 表名 ORDER BY 列名;

  (2) 指定排列顺序

  SELECT 列名 FROM 表名 ORDER BY 列名 排序方式 , 列名 排序方式; /* 
    组合排序,前面的列名 排序方式优先级高,在相同的条件下,判断下一级的数据优先级 */
  SELECT 列名 FROM 表名 ORDER BY 列名 ASC; -- 升序,也是默认的排序方式
  SELECT 列名 FROM 表名 ORDER BY 列名 DESC; -- 降序

   

 

 

4. 聚合函数

  聚合函数就是将纵向数据作为整体进行运算,给出结果。

  但是计算时是排除NULL空值的,尽量不要计算包含空值的列,会导致结果与预期偏差。

  (1) 无视空值

  SELECT COUNT(列名) FROM 表名; -- 计算一列数据的非空个数
  SELECT MAX(列名) FROM 表名; -- 计算一列数据的非空最大值
  SELECT MIN(列名) FROM 表名; -- 计算一列数据的非空最小值
  SELECT SUM(列名) FROM 表名; -- 计算一列数据的非空数之和
  SELECT AVG(列名) FROM 表名; -- 计算一列数据的非空数平均值

  (2) 处理空值

  SELECT COUNT(IFNULL(列名,替换值)) FROM 表名; -- 计算一列数据的个数

5. 分组查询

  分组查询的原理就是将指定的列相同的内容进行分组,然后对分组后的指定数据进行聚合计算。

  要查询的数据必须要有共性的,否则非共性的数据查询出来是无意义的。

  (1)普通分组

  SELECT 列名,聚合函数(列名)  FROM 表名 GROUP BY 分组列名;

  

  (2) 限制分组

  带有数据限定的分组,使用 WHERE 和 HAVING 对结果前后进行处理。

  SELECT 列名,聚合函数(列名)  FROM 表名 WHERE 列名 运算符 条件值 
   GROUP BY 分组列名 HAVING 列名/聚合函数(列名) 运算符 条件值;

  WHERE 子句是分组前将数据进行处理;HAVING 子句是分组处理后对结果进行处理。

  因为 WHERE 是分组前处理原始数据,故不可处理聚合函数;而 HAVING 两种数据都可以处理。

  

6. 分页查询

  将查询出来的数据分为多组显示,指定每组的开始数据索引和每页显示多少数据完成。

  每页开始的索引计算公式是:每页开始索引 = (当前页码 - 1) * 每页显示条数。

  第一页开始索引是从 0 开始的,每页开始索引是按照查询出的数据的序号排的。

  注意:LIMIT 子句是MySQL的特有语句,其他数据库软件实现分页也有不同的语句。

  SELECT 列名 FROM 表名 LIMIT 每页开始索引,每页几条数据;

  

猜你喜欢

转载自www.cnblogs.com/NyanKoSenSei/p/11474072.html