创建数据库
create database z4;
使用创建的数据库
use z4;
创建数据表grade:
CREATE TABLE grade( id INT NOT NULL, sex CHAR(1), firstname VARCHAR(20) NOT NULL, lastname VARCHAR(20) NOT NULL, english FLOAT, math FLOAT, chinese FLOAT );
CREATE TABLE grade(
id INT NOT NULL,
sex CHAR(1),
firstname VARCHAR(20) NOT NULL,
lastname VARCHAR(20) NOT NULL,
english FLOAT,
math FLOAT,
chinese FLOAT
);
向数据表grade中插入几条数据:
INSERT INTO grade VALUES (1,'m','John','Smith',88.0,85.0,82.0), (2,'f','Adam','Smith',76.0,78.0,90.0), (3,'m','Allen','William',88.0,92.0,95.0), (4,'m','George','William',62.0,58.0,72.0), (5,'f','Alice','Davis',89.0,94.0,98.0), (6,'m','Kevin','Miller',77.0,88.0,99.0), (7,'f','Helen','Davis',79.0,83.0,91.0), (8,'m','Andrew','Johnson',81.0,86.0,88.0);
1、查询所有字段
select * from grade;
2、查询grade表中的id,firstname,lastname字段
select id,firstname,lastname from grade;
3、查询grade表中id大于4的学生姓名
select * from grade where id > 4;
4、查询grade表中女生的记录
select * from grade where sex='f';
5、查询grade表中id值为2,4,6的学生记录
select * from grade where id in (2,4,6);
6、查询grade表中math成绩在85到94之间的记录
select * from grade where math >= 85 and math <= 94;
方法二:
select * from grade where math between 85 and 94;
7、查询grade表中firstname以A开头的记录
select * from grade where firstname like 'A%';
8、查询grade表中firstname以A开头以e结尾的记录
select * from grade where firstname like 'A%e';
9、查询grade表中firstname包含l的记录
select * from grade where firstname like '%l%';
10、查询grade表中firstname以A开头后面有4个字符的记录
select * from grade where firstname like 'A____';
11、查询grade表中english在80到90之间的记录
select * from grade where english between 80 and 90;
12、查询grade表中math大于90 或者 chinese大于90的记录
select * from grade where math > 90 or chinese > 90;
13、查询grade表中id不是1、3、5、7的记录
select * from grade where id not in (1,3,5,7);
14、查询grade表中的性别有哪些
select distinct sex from grade;
15、查询grade表中的lastname有哪几种
select distinct lastname from grade;
16、求出表中所有记录的条数
select count(*) from grade;
17、求出表中英语成绩的80的记录的条数
select count(*) from grade where english = 80;
18、计算所有学生的数学成绩的和
select sum(math) from grade;
19、计算女生的数学成绩的和
select sum(math) from grade where sex = 'f';
20、计算英语成绩平均分
select avg(english) from grade;
21、计算男生的英语成绩平均分
select avg(english) from grade where sex = 'm';
22、求出数学成绩的最高分
select max(math) from grade;
23、求出男生中的数学最高分
select max(math) from grade where sex = 'm';
24、按照math成绩的升序进行排列
select * from grade order by math asc;
25、按照sex字段的升序和chinese字段的降序排列
select * from grade order by sex asc ,chinese desc;
26、查询数据表grade中的记录,按照sex字段进行分组
select sex,count(*) from grade group by sex;
27、将grade表按照lastname字段值分组,并计算每个分组中的学生数
select lastname,count(*) from grade group by lastname;
28、对grade表按照lastname字段分组,查出math字段和小于100的组
select lastname, min(math) from grade where math < 100 group by lastname;
29、查询grade表中的第3到第6条记录
select * from grade limit 4 offset 2;
方法二:
SELECT * FROM (
SELECT *, ROW_NUMBER() OVER (ORDER BY id) AS rn
FROM grade
) AS ranked_grade
WHERE rn BETWEEN 3 AND 6;
30、查询grade表中男生平均成绩(三科)大于85的记录
select * from grade where sex = 'm' and (english+math+chinese) / 3.0 >8.5;
知识点总结:
distinct
关键字在 SQL 中的用法非常直接,它用于从查询结果中去除重复的记录,只返回唯一的记录。但是,需要注意的是,DISTINCT
作用于查询结果中的所有选定列的组合上,而不是单独作用于某一列。
基本用法
假设有一个名为 students
的表,包含 id
, name
, 和 grade
列,你想要获取所有不同的学生名字(去除重复的名字):
select distinct firstname from grade;
这条查询将返回 students
表中所有不重复的学生名字。
注意事项
DISTINCT
作用于查询结果的所有选定列上,而不是单独作用于某一列。- 使用
DISTINCT
可能会影响查询性能,因为数据库需要额外的处理来去除重复的记录。 - 在某些情况下,如果你只需要从多列中去除重复的行,但只想要返回其中一列的值,你可能会使用
GROUP BY
而不是DISTINCT
,或者使用子查询结合DISTINCT
。 - 如果查询中包含了聚合函数(如
COUNT()
,SUM()
,AVG()
等),则DISTINCT
可以与这些函数一起使用来仅对唯一值进行聚合计算。例如,SELECT COUNT(DISTINCT name) FROM students;
将返回students
表中不同名字的数量。