SQL-基础 --DQL

215 阅读4分钟

基础查询

image.png

-- 1、查询name和age两列
select name,age FROM stu;

-- 2、查询所有数据 查询所有数据的话 列名的列表可以用*代替(不推荐,一般在企业开发不让用*)
select * from stu;
select id,name,age,sex,address,math,english,hiredate FROM stu;

-- 3、去除重复记录(DISTINCTselect DISTINCT address FROM stu; 

-- 4、为列名取别名 (AS)  AS也可以省略不写 但是原始的之字段名必须与别名隔开至少一个空格
SELECT name as 姓名,math as 数学成绩, english as 英语成绩 FROM stu; 

条件查询

image.png

-- 1、查询年龄大于20岁的学员
select id,name,age,sex,address,math,english,hiredate FROM stu where age > 20;

-- 2、查询年龄大于等于20岁的学员
select id,name,age,sex,address,math,english,hiredate FROM stu where age >= 20;

-- 3、查询年龄大于等于20且小于等于30岁的学员(一下三种方式,推荐使用第三种)
select id,name,age,sex,address,math,english,hiredate FROM stu where age >= 20 && age <= 30;
select id,name,age,sex,address,math,english,hiredate FROM stu where age >= 20 and age <= 30;
select id,name,age,sex,address,math,english,hiredate FROM stu where age BETWEEN 20 and 30;

-- 4、查询入学时间日期在1998-09-01 到 1999-09-01之间的学员信息
select id,name,age,sex,address,math,english,hiredate FROM stu where hiredate BETWEEN '1998-09-01' AND '1999-09-01';

-- 5、查询年龄等于18岁的学员信息
select id,name,age,sex,address,math,english,hiredate FROM stu WHERE age = 18;

-- 6、查询年龄不等于18岁的学员信息
select id,name,age,sex,address,math,english,hiredate FROM stu where age != 18;
select id,name,age,sex,address,math,english,hiredate FROM stu where age <> 18;

-- 7、查询年龄等于18岁 或者 年龄等于20岁 或者 年龄等于22岁的学员
select id,name,age,sex,address,math,english,hiredate FROM stu where age = 18 || age = 20 || age = 22;
select id,name,age,sex,address,math,english,hiredate FROM stu where age = 18 OR age = 20 OR  age = 22;
select id,name,age,sex,address,math,english,hiredate FROM stu where age IN(18,20,22);

-- 8、查询英语成绩为null的学员
-- 注意:null值不能使用 = != 进行比较。 需要使用 is 和 is NOT 进行比较
select id,name,age,sex,address,math,english,hiredate FROM stu where english is null; 
select id,name,age,sex,address,math,english,hiredate FROM stu where english is NOT null;

模糊查询 LIKE

/*
 通配符:
 1、_ :表示单个任意字符
 2、% :表示多个任意字符
 */
 
 
 -- 1、查询姓马的学员
 select id,name,age,sex,address,math,english,hiredate FROM stu where name like '马%';
 
 -- 2、查询姓名第二个字是花的学员
 select id,name,age,sex,address,math,english,hiredate FROM stu where name like '_花%';
 
 -- 3、查询名字包含德的学员
 select id,name,age,sex,address,math,english,hiredate FROM stu where name like '%德%';

排序查询

image.png

-- 查询学生信息,按照年龄从小到大排序 (asc是默认排序,不写asc也会默认使用从小到大进行排序)

SELECT id,name,age,sex,address,math,english,hiredate from stu ORDER BY age ASC;

-- 查询学生信息,按照数学成绩从大到小进行排序 (desc)

SELECT id,name,age,sex,address,math,english,hiredate from stu ORDER BY math DESC;

-- 查询学生信息,按照数学成绩从大到小进行排序,如果数学成绩一样,那么英语成绩按照从小到大进行排序 (注意:这里必须要数学成绩一样,才会对英语成绩进行排序,不然第二个条件无效)

SELECT id,name,age,sex,address,math,english,hiredate from stu ORDER BY math DESC,english asc;

聚合函数 (null值不参与所有的聚合函数运算)

image.png

-- 统计全班人数 (count) -- 统计的列名的值不能为空
select count(id)FROM stu;

select count(*)from stu; -- 推荐这个写法

-- 查询数学成绩的最高分
SELECT MAX(math) FROM stu;

-- 查询数学成绩的最低分
select min(math) from stu;

-- 查询数学成绩的总分
select sum(math) from stu; 

-- 查询数学成绩的平均分
select AVG(math) from stu;

分组查询

image.png

-- 查询男同学和女同学各自的数学平均分成绩
SELECT sex,avg(math) FROM stu GROUP BY sex;

-- 查询男同学和女同学各自的数学平均成绩,以及各自的人数
select sex,count(*),avg(math) FROM stu GROUP BY sex;

-- 查询男同学和女同学各自的数学平均成绩,以及各自的人数 要求:分数小于70分不参与分组
select sex,count(*),avg(math) FROM stu where math > 70 GROUP BY sex;

-- 查询男同学和女同学各自的数学平均成绩,以及各自的人数 要求:分数小于70分不参与分组,分组之后人数大于2人
select sex,count(*),avg(math) FROM stu where math > 70 GROUP BY sex HAVING count(*) > 2;

分页查询

image.png

-- 从0开始查询,查询3条数据
SELECT * FROM stu limit 0,3;

-- 每页显示3条数据,查询第1页
SELECT * FROM stu limit 0,3;

-- 每页显示3条数据,查询第2页
SELECT * FROM stu limit 3,3;

-- 每页显示3条数据,查询第3页
SELECT * FROM stu LIMIT 6,3;

-- 起始索引 = (当前页码 - 1)* 每页显示页数