(数据库五)MySQL数据查询语言

DQL:数据查询语言
  --select:选择

1、查询:
          查询的内容与表无关时,select 查询内容;
          查询的内容与表有关时,select 查询内容 from tableName;
          查询指定字段:select colName1,colName2... from tableName;
          查询所有字段:select * from tableName;
          结果集:查询得到的结果
          ps:查询内容可以是所查表中指定字段,也可以是所查表中所有的字段或者函数

2、列别名用法:
          格式:select colName1 [as] 列别名,colName2 [as] 列别名... from tableName [where 条件]
          注意:列别名可以不加双引号或单引号,但如果列别名中带有空格的话,则必须将列别名加上双引号或单引号
          例如:select ename 姓名,sal '工 资' from emp

3、条件查询(where子句):
          关系运算符:>,>=,<,<=,=,!=,<>。
          作用:条件限制约束等操作,有过滤的作用。
          位置:from子句之后。
          格式:select colName1,colName2... from tableName where 条件。
          注:null在条件中,不能使用=或!=来判断,应该使用is或者is not,因为null与任何事物都不相等
          (1)范围查询:使用>,>=和<,<=来进行范围限制或between and来限制。
          格式:select colName1,colName2... from tableName where colName [not] between val1 and val2;
          注:between val1 and val2相当于闭区间[val1,val2]
          (2)集合作条件查询:同一个字段有多个值的情况下使用。
          使用:in|not in
          格式:select colName1,... from tableName where colName [not] in (元素1,元素2,....);
          注:in相当于or,not in相当于and,比较的都是同一字段
          集合的其他用法:all与any
          格式:
          select colName from tableName where colName>all(元素1,元素2,元素3......):大于集合中最大的元素。
          select colName from tableName where colName<all(元素1,元素2,元素3......):小于集合中最小的元素。
          select colName from tableName where colName>any(元素1,元素2,元素3......):大于集合中最小的元素。
          select colName from tableName where colName<any(元素1,元素2,元素3......):小于集合中最大的元素。
          注:在mysql中,集合函数(>all,>any,<all,<any)不适用与直接加数字,如:>any(10,20,30)是不允许的,但是我们可以将(10,20,30)转换为子查询
(3)模糊查询:like关键字
          格式:select colName from tableName where colName like value。
          通配符:
             %:0或0个以上的字符
              _:匹配一个字符。
          例如:查询列中带字母a的值
              select colName from tableName where colName like "%a%";

4、排序:当在查询表中数据时,记录较多需要进行排序时,可以使用order by子句。
          格式:select colName from tableName where 条件 order by colName 排序规则
          排序规则:
          升序:asc(默认)
          降序:desc
          注:当order by后是一个字段时,就按该字段的排序规则进行排序,如果order by后是多个排序规则,则会先按照第一个排序规则进行排序,在第一个排序结果相同时,会按照第二个排序规则进行排序

5、desc
          1)查询表结构 -- desc 表名
          2)排序的降序规则 -- order by 字段 desc
          如果设计表时,字段名叫desc,在使用该字段时,会出现错误,如果一定要使用desc为字段名,则需将该字段名进行转义:`字段名`

6、去重:对重复的记录进行去重操作
          关键字:distinct(必须写在select关键字后)
          格式:select distinct colName from tableName
          注:distinct可以对一个字段进行去重,也可以对多个字段进行去重(联合去重)

7、分组查询与分组函数(聚合函数)
          用途:查询表中的记录总数,或者查询表中以某字段分组进行查询,如每个部门的总工资,平均工资,总人数等,这种情况需要对表中的数据进行分组统计。
          用法:group by Field1[,Field2]。
          格式:select ... from tableName [where 条件] [group by子句] [order by子句]
          注:在分组查询时,select子句中的值如果含有组标志或组函数,就尽量不要含有非组标志或组函数,如果在select后边既有组函数,又有非组函数(普通字段),那么在oracle数据库中,该语句会出现错误,而在mysql数据库中,
该语句没有错误,但是查询结果不正确,所以我们要避免在select后面既有组函数,又有普通字段
          聚合函数:
          count(Filed):统计指定字段的记录数,*:统计指定表中有多少条记录,字段名:统计指定表中该字段不为空的个数
          sum(Filed):统计指定字段的和。
          avg(Filed):统计指定字段的平均值
          max(Filed):返回指定字段中的最大值。
          min(Filed):返回指定字段中的最小值。
          ifnull(field,value):如果field字段对应值不是null,就使用field的值,如果是null,就使用value。
          注:聚合函数会忽略null值,因此有时候需要使用函数ifnull()
          多字段分组:
          field1,  field2
          10        500
          20        600
          30        700
          注::多字段分组时,最多分组的数目为Filed1*Field2[*Filed3....]

8、having子句:
          用途:在分组查询时,有的时候可能需要再次使用条件进行过滤,这个时候不能where子句,应该使用having子句,having子句后可以使用聚合函数。
          位置:位于group by子句后 

          面试题:where和having的区别?
          1)where后面放的是字段名,having后面可以放聚合函数(where属于一次过滤,having是对分组结果二次过滤)
          2)书写位置:where放在group by之前,having group by之后
          3)执行顺序:where先执行,having后执行

总结:

一个基本的查询语句包含的子句有:
   select子句
   from子句
   where子句
   group by子句
   having子句
   order by子句
一个完整的查询语句:
   select..from..[where..][group by..][having..][order by..]

执行顺序:
    先执行from子句。
    再执行where子句
    然后group by子句
    再次having子句
    之后select子句
    最后order by子句

猜你喜欢

转载自blog.csdn.net/z774884795/article/details/84137153