MySQL——DQL语言

172 阅读5分钟

1 基础查询

select 查询列表

from 表名

2 条件查询

where 筛选条件

筛选条件的分类

  • 简单条件运算符

 > < = <> != >= <= <=>安全等于 

  • 逻辑运算符

&& and 

|| or 

! not 

  • 模糊查询 

like:一般搭配通配符使用,可以判断字符型或数值型 

通配符:%任意多个字符,_任意单个字符

between ... and ... 范围查询,在and前后两个值之间 (包含边界)

in  等于值列表中的一个

is null /is not null:用于判断null值

3 排序查询

order by 排序列表

特点

  1. **asc :**升序,如果不写默认升序      ** desc:**降序 
  2. 排序列表 支持 单个字段、多个字段、函数、表达式、别名 
  3. order by的位置一般放在查询语句的最后

4 常见函数

单行函数

  • 字符函数
  1. concat:连接 
  2. substr:截取子串 
  3. upper:变大写 
  4. lower:变小写 
  5. replace:替换 
  6. length:获取字节长度 
  7. trim:去前后空格 
  8. lpad:左填充 
  9. rpad:右填充 
  10. instr:获取子串第一次出现的索引
  • 数学函数
  1. ceil:向上取整 
  2. round:四舍五入 
  3. mod:取模 
  4. floor:
  5. 向下取整 
  6. truncate:截断 
  7. rand:获取随机数,返回0-1之间的小数
  • 日期函数
  1. now:返回当前日期+时间 
  2. year:返回年 
  3. month:返回月 
  4. day:返回日 
  5. date_format:将日期转换成字符 
  6. curdate:返回当前日期 
  7. str_to_date:将字符转换成日期 
  8. curtime:返回当前时间 
  9. hour:小时 
  10. minute:分钟 
  11. second:秒 
  12. datediff:返回两个日期相差的天数 
  13. monthname:以英文形式返回月
  • 其他函数
  1. version 当前数据库服务器的版本 
  2. database 当前打开的数据库 
  3. user当前用户 
  4. password('字符'):返回该字符的密码形式 
  5. md5('字符'):返回该字符的md5加密形式
  • 流程控制函数
  1. if(条件表达式,表达式1,表达式2):如果条件表达式成立,返回表达式1,否则返回表达式2 

分组函数

  • 分类
  1. max 最大值 
  2. min 最小值 
  3. sum 和 
  4. avg 平均值 
  5. count 计算个数

分组查询

select 分组函数,分组后的字段

from 表 

 【where 筛选条件】 

group by 分组的字段 

【having 分组后的筛选】 

【order by 排序列表】

连接查询

SQL99语法:内连接 

语法:

select 查询列表 

from 表1 别名 

【inner】 join 表2 别名 on 连接条件 

where 筛选条件 

group by 分组列表 

having 分组后的筛选 

order by 排序列表 

limit 子句;

特点: 

  1. 表的顺序可以调换;
  2. 内连接的结果=多表的交集;
  3. n表连接至少需要n-1个连接条件。

SQL99语法:外连接

语法: 

select 查询列表 

from 表1 别名 

left|right|full【outer】 join 表2 别名 on 连接条件 

where 筛选条件 

group by 分组列表 

having 分组后的筛选 

order by 排序列表 

limit 子句;

特点: 

  1. 查询的结果=主表中所有的行,如果从表和它匹配的将显示匹配行,如果从表没有匹配的则显示null;
  2. left join 左边的就是主表,right join 右边的就是主表 full join 两边都是主表;
  3. 一般用于查询除了交集部分的剩余的不匹配的行。

SQL99语法:交叉连接

语法: 

select 查询列表 

from 表1 别名 

cross join 表2 别名;

特点: 

  1. 类似于笛卡尔乘积

子查询

含义

嵌套在其他语句内部的select语句称为子查询或内查询, 外面的语句可以是insert、update、delete、select等,一般select作为外面语句较多 外面如果为select语句,则此语句称为外查询或主查询。

分类

  • 按出现位置

select后面:

    仅仅支持标量子查询

from后面: 

    表子查询 

where或having后面:

    标量子查询

    列子查询 

    行子查询

  • 按结果集的行列
  1. 标量子查询(单行子查询):结果集为一行一列 
  2. 列子查询(多行子查询):结果集为多行一列 
  3. 行子查询:结果集为多行多列 
  4. 表子查询:结果集为多行多列

分页查询

select 查询列表 

from 表 

limit 【offset,】size; 

注意: 

  1. offset代表的是起始的条目索引,默认从0卡死 
  2. size代表的是显示的条目数

公式:

假如要显示的页数为page,每一页条目数为size 

select 查询列表 

from 表 

limit (page-1)*size,size;

联合查询

含义

union:合并、联合,将多次查询结果合并成一个结果

语法

查询语句1 

union 【all】 

查询语句2 union 【all】 

...

意义

  1. 将一条比较复杂的查询语句拆分成多条语句
  2. 适用于查询多个表的时候,查询的列基本是一致

特点

  1. 要求多条查询语句的查询列数必须一致 
  2. 要求多条查询语句的查询的各列类型、顺序最好一致 
  3. union 去重,union all包含重复项

查询总结

语法:

select 查询列表 ⑦ 

from 表1 别名 ① 

连接类型 join 表2 ② 

on 连接条件 ③ 

where 筛选 ④ 

group by 分组列表 ⑤ 

having 筛选 ⑥ 

order by排序列表 ⑧ 

limit 起始条目索引,条目数; ⑨

注:本文借鉴了尚硅谷公开课的内容,若有错误或不妥之处还望提醒。