MySQL:数据查询语言(DQL)

12/31/2023 后端数据库MySQL

目录


参考:


# MySQL:数据查询语言(DQL)

# 3.1 简单查询

语法:

SELECT 字段名 
FROM 表名;
1
2
  • 如果要查询表中的所有字段,可用“ * ”代替。如:SELECT * FROM 表名;

  • 对表名、字段名起别名,在需要添加别名的表名、表达式、字段等后加 as 跟上所起的名称,as关键字,可省略

一些简单的查询语句

-- 查看当前所有数据库: 
SHOW databases-- 进去数据库:
use 库名;

-- 查看当前所在数据库: 
SELECT DATABASE();

-- 查看数据库中的表: 
SHOW TABLES;

-- 查看指定数据库中的表(不在表所在的数据库中也能查询):
show TABLES FROM 数据库名;
1
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 表名;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

# 3.2 条件查询

条件运算符

条件运算符:>、>、=、!=、>=、<=、<=>(安全等于)、 <>(不等于)

逻辑运算符

逻辑运算符:&&--AND、||--OR、!--NOT

模糊查询

  1. LIKE:一般搭配通配符使用,可以判断字符型或数值型。

  2. 通配符:‘%’ 任意多个字符,‘_’ 任意单个字符。

  3. ESCAPE'$':指明 $ 这个符号为通配符。

区间查询

between and:从什么到什么

如:从1到10 between 1 and 10

# 3.3 排序查询

语法:

SELECT 查询列表 
FROM 表名 
WHERE 筛选条件 
ORDER BY 排序条件【ASC/DESC
1
2
3
4
  • ACS:升序,如果不写则MySQL默认升序排序

  • DESC:降序

除了LIMIT语句外,排序查询一般放在最后。

# 3.4 分组函数

语法:

SELECT 查询列表 
FROM 表名 
GROUP BY 分组字段 【HAVING 筛选条件】分组后的筛选条件
1
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 查询列表 
FROM1 别名 【连接类型】 JOIN2 别名 ON 连接条件
1
2

内连接

  1. ​ 等值连接:连接条件为一个等式;
  2. ​ 非等值连接:连接条件为一个范围;
  3. ​ 自连接:连接条件来自同一个表中;

外连接

外连接的查询结果为主表中的所有记录

  • 如果从表中有和它匹配的,则显示匹配的值

  • 如果从表中没有和它匹配的,则显示NULL

  • 外连接查询结果 = 内连接查询结果 + 主表中有而从表中没有的记录

左外连接(LEFT JOIN):左边的表是主表

右外连接(RIGHT JOIN):右边的表是主表

交叉连接(CROSS JOIN):实现笛卡尔乘积

# 3.6 子查询

在查询中(或其他语句中)嵌套查询,嵌套的查询称为子查询

特点:

  1. 子查询都放在小括号内。

  2. 子查询可以放在from后面、select后面、where后面、having后面,但一般放在条件的右侧。

  3. 子查询优先于主查询执行,主查询使用了子查询的执行结果。

  4. 子查询根据查询结果的行数不同分为以下两类:

    • 单行子查询(标量子查询)

      • 结果集只有一行。

      • 一般搭配单行操作符使用:> < = <> >= <= 。

      • 非法使用子查询的情况:a、子查询的结果为一组值 b、子查询的结果为空。

    • 多行子查询(列子查询)

      • 结果集有多行。

      • 一般搭配多行操作符使用:any、all、in、not in。in: 属于子查询结果中的任意一个就行;any和all往往可以用其他查询代替。

各个关键字所支持的子查询

  • select 标量子查询

  • from 表子查询:将子查询的结果充当一张表,要求必须起别名

  • where / having 标量子查询、列子查询 ※

# 3.7 分页查询

放在查询语句的最后

LIMIT
1

# 3.8 联合查询

语法: 查询语句1 union 查询语句2 union ....

将多条查询语句的结果合并为一个结果

应用场景:要查询的结果来自多个表,且多个表没有直接关系,但查询的信息一致时

特点:

  1. 查询的列数一致;
  2. 查询的类型和顺序一致
  3. 使用union自动去重(取消去重 union all)
上次更新时间: 9/25/2024, 1:17:45 AM