一,单表查询:

语法: select 字段1,字段2... from 表名 where 条件 group by field having 筛选 order by field limit 限制条数

关键字优先级:

  from

  where

  group by

  having

  select

  distinct

  order by

  limit

 

(1).找到表:from

 

(2).拿着where指定的约束条件,去文件/表中取出一条条记录

 

(3).将取出的一条条记录进行分组group by,如果没有group by,则整体作为一组

 

(4).将分组的结果进行having过滤

 

(5).执行select

 

(6).去重

 

(7).将结果按条件排序:order by

 

(8).限制结果的显示条数

 

where约束:

1.比较运算符:>、<、>=、<=、<>、!=
2.between 80 and 100 :值在80到100之间
3.in(80,90,100)值是10或20或30
4.like 'xiaomagepattern': pattern可以是%或者_。%小时任意多字符,_表示一个字符
5.逻辑运算符:在多个条件直接可以使用逻辑运算符 and or not

group by 分组
  #1、首先明确一点:分组发生在where之后,即分组是基于where之后得到的记录而进行的
  #2、分组指的是:将所有记录按照某个相同字段进行归类,比如针对员工信息表的职位分组,或者按照性别进行分组等
  #3、为何要分组呢?
    取每个部门的最高工资
    取每个部门的员工数
    取男人数和女人数
  小窍门:‘每’这个字后面的字段,就是我们分组的依据
  #4、大前提: 可以按照任意字段分组,但是分组完毕后,比如group by post,只能查看post字段,如果想查看组内信息,需要借助于聚合函数


聚合函数
  max()求最大值
  min()求最小值
  avg()求平均值
  sum() 求和
  count() 求总个数 一般使用count(1)

having 过滤
  #!!!执行优先级从高到低:where > group by > having
  #1. Where 发生在分组group by之前,因而Where中可以有任意字段,但是绝对不能使用聚合函数。
  #2. Having发生在分组group by之后,因而Having中可以使用分组的字段,无法直接取到其他字段,可以使用聚合函数

order by 查询排序
  asc 升序
   desc 降序

limit 限制查询的记录数
  第一个参数起始位置,第二个参数显示的个数



二,多表查询
  外链接语法:select 字段列表 from 表1 inner|left|right join 表2 on 表1.字段 = 表2.字段;

(1)先看第一种情况交叉连接:不适用任何匹配条件。生成笛卡尔积
(2)内连接:只连接匹配的行
(3)外链接之左连接:优先显示左表全部记录
(4) 外链接之右连接:优先显示右表全部记录
(5) 全外连接:显示左右两个表全部记录(了解)

 子查询:

  (1)带in关键字的子查询

  (2)带比较运算符的子查询

    #比较运算符:=、!=、>、>=、<、<=、<>

  (3)带EXISTS关键字的子查询

    #EXISTS关字键字表示存在。在使用EXISTS关键字时,内层查询语句不返回查询的记录。而是返回一个真假值。True或False #当返回True时,外层查询语句  将进行查询;当返回值为False时,外层查询语句不进行查询