MySQL:数据查询语言(DQL)
目录
参考:
# MySQL:数据查询语言(DQL)
# 3.1 简单查询
语法:
SELECT 字段名
FROM 表名;
2
如果要查询表中的所有字段,可用“ * ”代替。如:SELECT * FROM 表名;
对表名、字段名起别名,在需要添加别名的表名、表达式、字段等后加 as 跟上所起的名称,as关键字,可省略
一些简单的查询语句
-- 查看当前所有数据库:
SHOW databases;
-- 进去数据库:
use 库名;
-- 查看当前所在数据库:
SELECT DATABASE();
-- 查看数据库中的表:
SHOW TABLES;
-- 查看指定数据库中的表(不在表所在的数据库中也能查询):
show TABLES FROM 数据库名;
2
3
4
5
6
7
8
9
10
11
12
13
14
查询语句中常用的函数
-- 去重
SELECT DISTINCT 字段名 FROM 表名;
-- "+":做加法运算
# 直接运算
SELECT 数值+数值;
# 先试图将字符转换成数值,如果转换成功,则继续运算;否则转换成0,再做运算
SELECT 字符+数值;
# 只要其中一个为null,结果都为null
SELECT NULL+值;
-- concat函数:拼接字符
SELECT CONCAT(字符1,字符2,字符3,...);
-- ifnull函数:判断某字段或表达式是否为null,如果为null 返回指定的值,否则返回原本的值
SELECT IFNULL(某字段或表达式,指定的值) FROM 表名;
-- isnull函数:判断某字段或表达式是否为null,如果是,则返回1,否则返回0
SELECT ISNULL(某字段或表达式) FROM 表名;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 3.2 条件查询
条件运算符
条件运算符:>、>、=、!=、>=、<=、<=>(安全等于)、 <>(不等于)
逻辑运算符
逻辑运算符:&&--AND、||--OR、!--NOT
模糊查询
LIKE:一般搭配通配符使用,可以判断字符型或数值型。
通配符:‘%’ 任意多个字符,‘_’ 任意单个字符。
ESCAPE'$':指明 $ 这个符号为通配符。
区间查询
between and:从什么到什么
如:从1到10 between 1 and 10
# 3.3 排序查询
语法:
SELECT 查询列表
FROM 表名
WHERE 筛选条件
ORDER BY 排序条件【ASC/DESC】
2
3
4
ACS:升序,如果不写则MySQL默认升序排序
DESC:降序
除了LIMIT语句外,排序查询一般放在最后。
# 3.4 分组函数
语法:
SELECT 查询列表
FROM 表名
GROUP BY 分组字段 【HAVING 筛选条件】分组后的筛选条件
2
3
组函数类型:
- count:计算个数
- 一般选择非空的列:主键
- count(*)
- max:计算最大值
- min:计算最小值
- sum:计算和
- avg:计算平均值
特点: 1、以上五个分组函数都忽略null值,除了 count(*)。 2、sum和avg一般用于处理数值型,max、min、count可以处理任何数据类型。 3、都可以搭配distinct使用,用于统计去重后的结果。 4、count的参数可以支持:字段、、常量值,一般放1 注意:
聚合函数的计算,排除null值。
解决方案:
选择不包含非空的列进行计算
IFNULL函数
# 3.5 连接查询
语法:
SELECT 查询列表
FROM 表1 别名 【连接类型】 JOIN 表2 别名 ON 连接条件
2
内连接
- 等值连接:连接条件为一个等式;
- 非等值连接:连接条件为一个范围;
- 自连接:连接条件来自同一个表中;
外连接
外连接的查询结果为主表中的所有记录
如果从表中有和它匹配的,则显示匹配的值
如果从表中没有和它匹配的,则显示NULL
外连接查询结果 = 内连接查询结果 + 主表中有而从表中没有的记录
左外连接(LEFT JOIN):左边的表是主表
右外连接(RIGHT JOIN):右边的表是主表
交叉连接(CROSS JOIN):实现笛卡尔乘积
# 3.6 子查询
在查询中(或其他语句中)嵌套查询,嵌套的查询称为子查询
特点:
子查询都放在小括号内。
子查询可以放在from后面、select后面、where后面、having后面,但一般放在条件的右侧。
子查询优先于主查询执行,主查询使用了子查询的执行结果。
子查询根据查询结果的行数不同分为以下两类:
单行子查询(标量子查询)
结果集只有一行。
一般搭配单行操作符使用:> < = <> >= <= 。
非法使用子查询的情况:a、子查询的结果为一组值 b、子查询的结果为空。
多行子查询(列子查询)
结果集有多行。
一般搭配多行操作符使用:any、all、in、not in。in: 属于子查询结果中的任意一个就行;any和all往往可以用其他查询代替。
各个关键字所支持的子查询
select 标量子查询
from 表子查询:将子查询的结果充当一张表,要求必须起别名
where / having 标量子查询、列子查询 ※
# 3.7 分页查询
放在查询语句的最后
LIMIT
# 3.8 联合查询
语法: 查询语句1 union 查询语句2 union ....
将多条查询语句的结果合并为一个结果
应用场景:要查询的结果来自多个表,且多个表没有直接关系,但查询的信息一致时
特点:
- 查询的列数一致;
- 查询的类型和顺序一致
- 使用union自动去重(取消去重 union all)