DQL
其他资料教程:https://kdocs.cn/l/cqp2s5cTZgct
基础查询
演示代码
CREATE TABLE stu (
id INT,-- 编号
NAME VARCHAR (20),-- 姓名
age INT,-- 年龄
sex VARCHAR (5), -- 性 别
address VARCHAR (100),-- 地址
math DOUBLE (5, 2),-- 数学成绩
english DOUBLE (5, 2),-- 英语成绩
hire_date date-- 入学时间
);
INSERT INTO stu(id,NAME,age,sex,address,math,english,hire_date)
VALUES
(1,'码云',55,'男','杭州',66,78,'1995-09-01'),
(2,'马化腾',55,'女','深圳',66,48,'1895-02-01'),
(3,'马斯克',55,'男','香港',23,78,'1995-03-01'),
(4,'流白',55,'男','湖南',66,58,'1994-09-04'),
(5,'留情',55,'女','湖南',66,NULL,'1595-09-01'),
(6,'刘德华',55,'男','香港',76,78,'1695-09-02'),
(7,'张学友',55,'男','香港',64,28,'1795-09-05'),
(8,'德玛西亚',55,'女','南京',96,78,'1195-09-09');
-- =====================查询操作=================
-- 查询name 和 age两列
SELECT name,age from stu;
-- 查询 所有
SELECT * FROM stu;
-- 查询 所有的address
SELECT address FROM stu;
-- 进行去重操作
SELECT DISTINCT address FROM stu;
-- 利用as 起别名查询数学和英语成绩
SELECT name,math as 数学成绩,english as 英语成绩 FROM stu;
条件查询
模糊查询
-- 条件查询 ================== -- 1.查询年龄大于20岁的学员信息 SELECT * FROM stu WHERE age > 20; -- 2.查询年龄大于等于20的学员信息 SELECT * from stu WHERE age >= 20; -- 3.查询年龄大于等于20岁, 并且 年龄 小于等于30岁的学员信息 SELECT * from stu WHERE age >= 20 && age <= 30; SELECT * from stu WHERE age >= 20 AND age <= 30; -- 建议使用and SELECT * from stu WHERE age BETWEEN 20 and 30; -- 使用between -- 4查询入学日期在 ‘1998-09-01’ 到 ‘1999-09-01’ 之间的学员信息 SELECT * FROM stu WHERE hire_date BETWEEN '1998-09-01' AND '1999-09-01'; -- 5查询年龄等于18岁的学员信息 SELECT * FROM stu WHERE age = 18; -- 6 查询年龄不等于18岁的学员信息 SELECT * FROM stu WHERE age <> 18; -- 7.查询年龄等于18岁 或者 年龄等于20岁 或者 年龄等于22岁的学员信息 SELECT * FROM stu WHERE age = 18 or age = 20 or age = 22; SELECT * FROM stu WHERE age in (18,20,22); -- 8.查询英语成绩为null 的学员信息 -- 注意: null值的比较不能使用 = != .需要使用 is is not SELECT * FROM stu WHERE english = null; -- 这种事错误的 SELECT * FROM stu WHERE english is null; SELECT * FROM stu WHERE english is not null; -- 模糊查询 like ================ /* 通配符: 1. _:代表单个任意字符 2. %:代表任意个数字符 */ -- 1.查询姓 ’马‘的学员信息 SELECT * FROM stu WHERE name like '马%'; -- 2.查询 第二个字是 ’花‘ 的学员信息 SELECT * FROM stu WHERE name like '_花%'; -- 3.查询名字中包含 ’德‘ 的学员信息 SELECT * FROM stu WHERE name like '%德%';
排序查询
/*
排序查询
ASC :升序排序(默认值)
DESC: 降序排序
*/
-- 1.查询学生信息,按照年龄升序排列
SELECT * FROM stu ORDER BY age;
-- 2。查询学生信息,按照数学成绩降序排列
SELECT * FROM stu ORDER BY math DESC;
-- 3. 查询学生信息,按照数学成绩降序排列,如果数学成绩一样,再按照英语成绩升序排列
SELECT * FROM stu ORDER BY math desc,english asc;
聚合函数
分组查询
/** 分组函数 SELECT 字段列表 FROM 表名【WHERE 分组条件限定】GROUP BY分组字段名 【HAVING 分组后条件过滤】 **/ -- 1.查询男同学和女同学各自的数学平均分 SELECT sex, avg(math) from stu GROUP BY sex; SELECT sex, age, avg(math) from stu GROUP BY sex; -- 查询不是分组的字段和不是聚合函数字段 -- 2/查询 男同学和女同学各自的数学平均分,以及各自人数 SELECT sex, avg(math) as '数学平均成绩',count(*) as '人数' from stu GROUP BY sex; -- 3,查询男同学和女同学各自的数学平均分,以及各自人数,要求:分数低于70分的不参与分组 SELECT sex, avg(math) as '数学平均成绩',count(*) as '人数' from stu WHERE math>70 GROUP BY sex; -- 4,查询男同学和女同学各自的数学平均分,以及各自人数,要求:分数低于70分的不参与分组,分组之后人数大于2 SELECT sex, avg(math) as '数学平均成绩',count(*) num from stu WHERE math>70 GROUP BY sex having num >2;
分页查询
/**
分页查询
SELECT 字段列表 FROM 表名 LIMIT 起始索引,查询条目数
**/
-- 1.从0开始查询,查询3条数据
select * from stu limit 0,3;
-- 2.每页显示3条数据,查询第1页数据
select * from stu limit 0,3;
-- 3.每页显示3条数据,查询第2页数据
select * from stu limit 3,3; -- 起始下标从0开始,第二页下表从3开始
-- 4.每页显示3条数据,查询第3页数据
select * from stu limit 6,3;
-- 起始索引 = (当前页码-1) * 每页显示的条数