DQL常用语句总结

DQL常用语句总结

DQL语句:常用来查询数据库表中的数据

关键字:SELECT ... FROM ... WHERE

  1. 语法:

     select
     	字段列表
     from
     	表名列表
     where
     	条件列表
     group by
     	分组字段
     having
     	分组之后的条件
     order by
     	排序
     limit
     	分页限定
    
  2. 基础查询

     1. 多个字段的查询
     	select 字段名1,字段名2... from 表名;
     	* 注意:
     	如果查询所有字段,则可以使用*来替代字段列表。
     2. 去除重复:
     	distinct
     3. 计算列
     	一般可以使用四则运算计算一些列的值。(一般只会进行数值型的计算)
     	ifnull(表达式1,表达式2):如果第一个参数不为空,则返回表达式1,否则返回表达式2。
     	按以下例子看下该语句的运行顺序:
     	SELECT * FROM t_ds d WHERE IFNULL(d.c_flag,‘0’) = ‘1’
     	运行顺序是,查询d.c_flag='1’的数据,如果数据d.c_flag是null,那么d.c_flag的值当作’0’处理
    
     4. 起别名(具体可参考https://www.runoob.com/sql/sql-alias.html)
     	使用as,其中as也可以省略
     	--列的别名实例:
     	SELECT name AS n, country AS c FROM Websites;
     	执行输出结果为:
    

     	--表的别名实例:
     	SELECT w.name, w.url, a.count, a.date
     	FROM Websites AS w, access_log AS a
     	WHERE a.site_id=w.id and w.name="菜鸟教程";	
    

  1. 条件查询

     1. where子句后跟条件
     2. 运算符
     	* > 、< 、<= 、>= 、= 、<>
     	* BETWEEN...AND  
     	* IN( 集合) 
     	* LIKE:模糊查询
     		* 占位符:
     			* _:单个任意字符
     			* %:多个任意字符
     	* IS NULL  
     	* and  或 &&
     	* or  或 || 
     	* not  或 !
    
  2. 排序查询

     order by 子句
     order by 排序字段1 排序方式1 ,  排序字段2 排序方式2...
     ASC:升序,默认的。
     DESC:降序。
     注:若有多个排序条件,则当前边的条件值一样时,才会判断第二条件。
     select * from student order by sno,
    

5.聚合函数:将一列数据作为一个整体,进行纵向的计算。

     count:计算个数  -> 一般选择非空的列:主键   count(*)
     max:计算最大值
     min:计算最小值
     sum:计算和
     avg:计算平均值
     * 注:聚合函数的计算,排除null值。
     解决方案:	1. 选择不包含非空的列进行计算 2.IFNULL函数
  1. 分组查询:

     语法:group by 分组字段;
     注:1. 分组之后查询的字段:分组字段、聚合函数
        2. where 和 having 的区别?
     	(1)where 在分组之前进行限定,如果不满足条件,则不参与分组。having在分组之后进行限定,如果不满足结果,则不会被查询出来
     	(2) where 后不可以跟聚合函数,having可以进行聚合函数的判断。
    

例子:

按照性别分组。分别查询男、女同学的平均分,人数 要求:分数低于70分的人,不参与分组,分组之后。人数要大于2个人
SELECT sex , AVG(math),COUNT(id) FROM student WHERE math > 70 GROUP BY sex HAVING COUNT(id) > 2;
SELECT sex , AVG(math),COUNT(id) 人数 FROM student WHERE math > 70 GROUP BY sex HAVING 人数 > 2;