数据库查询语言–DQL
首先我们在数据库先创建测试表
USE test;
CREATE TABLE IF NOT EXISTS s(
id INT,#学号
NAME VARCHAR(20),#姓名
age INT,#年龄
sex VARCHAR(5),#性别
address VARCHAR(100),#地址
math INT,#数学
english INT#英语
);
DROP TABLE IF EXISTS s;
INSERT INTO s (id,NAME,age,sex,address,math,english) VALUES
(1,'李华',18,'男','杭州',80,80),
(2,'小明',19,'男','深圳',75,60),
(3,'大雾',31,'男','美国',76,93),
(4,'王炸',27,'男','美国',65,NULL),
(5,'张三',16,'女','上海',90,98),
(6,'李四四',32,'男','上海',80,81);
select 字段列表
from 表名列表
where 条件列表
group by 分组字段
having 分组之后的条件
order by 排序
limit 分页限定
直接上干货
1.基础查询
查询该表中所有字段对应的数据
Select * from 表名;
##查询该表中所有字段对应的数据
Select 字段1,字段2,... from 表名;
##查询 姓名 和 年龄
SELECT NAME,age FROM s=;
##些公司会要求查询语句不能出现*,必须写字段名加注释
##查询姓名 和 年龄
SELECT
NAME,#姓名
age #年龄
FROM
s;#学生表
2 去重查询
Select distinct 字段1,字段2,… from 表名
SELECT address FROM s;--有重复地名
SELECT DISTINCT address FROM s;
3.求和查询
Select distinct 字段1,字段2,(字段1+字段2),… from 表名
## 查询数学和英语成绩的总和
SELECT NAME,math,english,(math + english) FROM s;
##当字段中有null值参与运算时,结果也为null,可以使用ifnull()
SELECT NAME,math,english,(math + IFNULL(english,0)) FROM s;
##math+english 起别名
SELECT NAME math,english,(math + IFNULL(english,0)) '总成绩' FROM s;
SELECT NAME math,english,(math + IFNULL(english,0)) AS '总成绩' FROM s;
4.条件查询
where子句后面跟的条件
运算符
-
>, < , >= , <= , = , <>
-
BETWEEN … AND
-
IN(集合)
-
LIKE:模糊查询
占位符 :
_ :一个任意字符
%:多个任意字符 -
IS NULL
-
AND 或 &&
-
OR 或 ||
-
NOT 或 !
-- 查询年龄大于20的学生信息
SELECT * FROM s WHERE age >20;
-- 查询年龄大于20的学生信息,包括20岁
SELECT * FROM s WHERE age>=20;
-- 查询年龄等于20的学生信息
SELECT * FROM s WHERE age = 20;
-- 查询年龄不等于20岁的学生信息
SELECT * FROM s WHERE age != 20;
SELECT * FROM s WHERE age <>20;
-- 查询年龄大于等于20 小于等于30的学生信息
SELECT * FROM s WHERE age>=20 && age<=30;
SELECT * FROM s WHERE age>=20 AND age<=30;
SELECT * FROM s WHERE age BETWEEN 20 AND 30;
-- 查询年龄 16 ,18 ,19 的学生信息
SELECT * FROM s WHERE age = 16 OR age = 18 OR age = 19;
SELECT * FROM s WHERE age = 16 || age = 18 || age = 19;
SELECT * FROM s WHERE age IN (16,18,19);
-- 查询没有英语成绩的学生信息
SELECT * FROM s WHERE english IS NULL;
-- 查询有英语成绩的学生信息
SELECT * FROM s WHERE english IS NOT NULL;
5.模糊查询(like)
大多数搜索框都是模糊查询。
# like 查询
-- 查询 姓李的学生信息
SELECT * FROM s WHERE NAME LIKE '李%';
-- 查询第二字为炸的学生信息
SELECT * FROM s WHERE NAME LIKE '_炸%';
-- 查询名字中包含明字的学生信息
SELECT * FROM s WHERE NAME LIKE '%明%';
-- 查询名字是3个字的学生信息
SELECT * FROM s WHERE NAME LIKE '___';
6.排序查询
排序查询有升序和降序
- ASC :升序 (默认)
- DESC: 降序
语法: order by 排序字段1,排序方式1 ,排序字段2,排序方式2
-- 查询学生信息,并按照数学成绩升序排列
SELECT * FROM s ORDER BY math;
SELECT * FROM s ORDER BY math ASC;
-- 查询学生信息,并按照数学成绩降序排列
SELECT * FROM s ORDER BY math DESC;
-- 查询学生信息,并按照数学成绩升序排列,如果数学成绩相同就按英语成绩升序排列
SELECT * FROM s ORDER BY math ASC ,english ASC ;
SELECT * FROM s WHERE english IS NOT NULL ORDER BY math ASC ,english ASC ;
7.聚合函数
聚合函数就是将一列数据作为一个整体,进行纵向计算
语法:`select 聚合函数(列名)[别名] from 表名
常见的几种聚合函数 统计、最大值、最小值、求和、计算平均值
- 统计:count:计算个数
SELECT count(id) FROM s;
- max:计算最大值
-- 求学生中数学成绩最高分
SELECT MAX(math) FROM s;
- min:计算最小值
-- 求学生中英语成绩最低分
SELECT MIN(IFNULL(english,0)) FROM s;
- sum:求和
-- 求学生的学生数学总成绩
SELECT SUM(math) FROM s;
- avg:计算平均值
-- 求学生的学生数学平均分
SELECT AVG(math) FROM s;
``
8.分组查询(group by)
语法: group by 分组字段
```sql
##分组之后查询的字段:分组字段,聚合函数
SELECT * FROM s GROUP BY sex;-- 没有任何意义结果:查出局部数据
-- 按照性别分组,分别查询男,女同学的数学平均分
SELECT * FROM s GROUP BY sex;-- 没有任何意义
SELECT sex,AVG(math) FROM s GROUP BY sex;
-- 按照性别分组,分别查询男,女同学的数学平均分,及相应性别对应的人数
SELECT sex,AVG(math),COUNT(id) FROM s GROUP BY sex;
-- 分组前添加一些限定条件
-- 按照性别分组,分别查询男,女同学的英语平均分,及相应性别对应的人数,分组要求:分数小于60的不参与统计
SELECT sex,AVG(IFNULL(english,0)),COUNT(id) FROM s WHERE english >60 GROUP BY sex;
SELECT sex,AVG(IFNULL(english,0)),COUNT(id) FROM s GROUP BY sex HAVING english >60;-- 错误,因为条件是分组前的条件,having只对分组后的结果进行条件添加
-- 按照性别分组,分别查询男,女同学的英语平均分,及相应性别对应的人数,分组要求:分数小于60的不参与统计,并且只查看人数大于2的分组数据
SELECT sex,AVG(IFNULL(english,0)),COUNT(id) FROM s WHERE english >60 GROUP BY sex HAVING COUNT(id)>2;
-- 另一种写法
SELECT sex,AVG(IFNULL(english,0)),COUNT(id) 人数 FROM s WHERE english >60 GROUP BY sex HAVING 人数>2;
- 分页查询(limit)
分页公式:开始的索引 = (当前页码-1)* 每页显示的条数
-- 每页显示2条数据
SELECT * FROM s LIMIT 0,2;-- 第1页
SELECT * FROM s LIMIT 2,2;-- 第2页
SELECT * FROM s LIMIT 4,2;-- 第3页
SELECT * FROM s LIMIT 6,2;-- 第4页
以上就是数据库查询语言的基本语法和例子
欢迎酷爱编程的你们和我一起讨论学习!
加油!