DQL没有条件的简单查询
-- 查询表中所有数据
SELECT 字段名1, 字段名2, ... FROM 表名;
SELECT * FROM 表名;
-- 查询表中指定列数据
SELECT 字段名1, 字段名2 FROM 表名;
-- 别名查询
SELECT 字段名1 AS 别名, 字段名2 AS 别名... FROM 表名;
SELECT 字段名1 别名, 字段名2 别名... FROM 表名;
SELECT 字段名1 AS 别名, 字段名2 AS 别名... FROM 表名 AS 表别名;
SELECT 字段名1 别名, 字段名2 别名... FROM 表名 表别名;
-- 清除重复值
SELECT DISTINCT 字段名,字段名,.. FROM 表名;
注意:
DISTINCT重复值判断是判断每个字段的值是否都相同,如果都相同则重复,如果有一个及以上字段值不同则不重复
DQL查询结果参与运算
-- 某列数据和固定值运算
SELECT 列名1 + 固定值 FROM 表名;
-- 某列数据和其他列数据参与运算
SELECT 列名1 + 列名2 FROM 表名;
注意:
参与运算的必须是数值类型
DQL条件查询
-- 条件查询
SELECT 字段名... FROM 表名 WHERE 条件;
比较运算符
>
大于
<
小于
<=
小于等于
>=
大于等于
=
等于
<>
、!=
不等于
SELECT * FROM student WHERE math>80;
逻辑运算符
and(&&)
多个条件同时满足 一假即假
or(||)
多个条件其中一个满足 一真即真
not(!)
不满足 取反
SELECT * FROM student WHERE age>35 AND sex='男';
in关键字
in
里面的每个数据都会作为一次条件,只要满足条件的就会显示
SELECT * FROM 表名 WHERE 字段 in (值1, 值2, 值3);
范围
SELECT * FROM student WHERE age BETWEEN 值1 AND 值2
注意:
age BETWEEN 80 AND 100
相当于age>=80 && age<=100
DQL模糊查询
SELECT * FROM 表名 WHERE 字段名 LIKE '通配符字符串';
通配符
%
: 表示零个一个多个字符(任意多个字符)
_
: 表示一个字符
DQL查询结果排序
SELECT 字段 FROM 表名 ORDER BY 排序的字段 [ASC|DESC];
参数说明
ASC:升序排序(默认)
DESC:降序排序
-- 单列排序
SELECT * FROM student ORDER BY age DESC;
-- 多列排序
SELECT 字段名 FROM 表名 WHERE 字段=值 ORDER BY 字段名1 [ASC|DESC], 字段名2 [ASC|DESC];
DQL聚合函数
聚合函数分类及作用
count
:在根据指定的列统计的时候,如果这一列中有null的行,该行 不会被统计在其中。按照列去统计有多少行数据。
sum
: 计算指定列的数值和,如果不是数值类型,那么计算结果为0
max
: 计算指定列的最大值
min
: 计算指定列的最小值
avg
: 计算指定列的平均值
使用
SELECT 聚合函数(字段) FROM 表名;
注意:
- 在mysql中null值和任何值相加为null
- 在sql语句中我们可以使用数据库提供的函数ifnull(列名, 默认值)来解决上述问题
DQL查询分组
SELECT ... FROM ... GROUP BY 列名,列名...
注意:
- having必须和group by 一起使用
- having和where的用法一模一样,where怎么使用having就怎么使用
- where不能使用的,having也可以使用
- where后面不可以使用聚合函数
- having后面可以使用聚合函数
DQL分页查询
SELECT * FROM 表名 LIMIT offset,row_count;
参数说明
offset:分页查询的索引,对应数据表第offset条数据
row_count:表示每页显示row_count条数据
示例
-- 第一页: LIMIT 0,5; 跳过0条,显示5条
SELECT * FROM student LIMIT 0,5;
-- 第二页: LIMIT 5,5; 跳过5条,显示5条
SELECT * FROM student LIMIT 5,5;
-- 第三页: LIMIT 10,5; 跳过10条,显示5条
SELECT * FROM student LIMIT 10,5;
注意:
如果第一个参数是0可以简写:
SELECT * FROM student LIMIT 0,5;
SELECT * FROM student LIMIT 5;
LIMIT 10,5; -- 不够5条,有多少显示多少
DQL多表查询
表连接查询
内连接
什么是内连接
用左边表的记录去匹配右边表的记录,如果符合条件的则显示。
内连接查询的结果:两表的公共部分。
隐式内连接
看不到JOIN
关键字,条件使用WHERE
指定
SELECT 列名 , 列名 .... FROM 表名1,表名2,.... WHERE 表名1.列名 = 表名2.列名;
显式内连接
使用INNER JOIN ... ON
语句, 可以省略INNER
-- 两张表连接
SELECT * FROM 表名1 JOIN 表名2 ON 条件
-- 两张以上表连接
SELECT * FROM 表名1 INNER JOIN 表名2 INNER JOIN 表名3 INNER JOIN 表名4 ..... ON 多个条件;
左外连接
什么是左外连接
用左边表去右边表中查询对应记录,不管是否找到,都将显示左边表中全部记录。
用法
使用LEFT OUTER JOIN ... ON
,OUTER
可以省略
SELECT * FROM 表1 LEFT OUTER JOIN 表2 ON 条件;
右外连接
什么是右外连接
用右边表去左边表查询对应记录,不管是否找到,右边表全部记录都将显示。
用法
使用RIGHT OUTER JOIN ... ON
,OUTER
可以省略
SELECT * FROM 表1 RIGHT OUTER JOIN 表2 ON 条件;
注意
注意:
左外连接和右外连接均以LEFT/RIGHT OUTER JOIN作为分界,左边的为左表,右边的为右表
子查询
什么是子查询
一条查询语句的结果作为另一条查询语句的一部分。
子查询结果单行单列
SELECT 查询字段 FROM 表 WHERE 字段=(子查询);
子查询结果多行单列
SELECT 查询字段 FROM 表 WHERE 字段 IN (子查询);
子查询结果多行多列
SELECT 查询字段 FROM (子查询) 表别名 WHERE 条件;
注意:
当查询结果是多行多列时,通常将查询结果作为表进行连接查询