学习目标:
- 一个月掌握MySQL入门知识
学习内容与笔记:
选择列、选择行、排序、统计
- 选择列
- 查询所有列
USE cjgl;
SELECT * FROM xs;
- 查询指定列
要求:输出的时候,专业名改为专业
SELECT 姓名,学号,专业名 AS 专业 FROM xs;
- 查询经过计算的列
SELECT 学号,姓名,year(now())-year(出生时间) AS 年龄 FROM xs;
- 消除重复行
SELECT DISTINCT 学号 FROM xs;
- 限制返回的行数
(1)直接限制返回行数
SELECT 学号 FROM xs LIMIT 3;
(2)限制从第 i+1 行开始,返回 j 行
SELECT 学号 FROM xs LIMIT 2,5;
- 选择行
- WHERE 表达式比较(搭配AND/OR/XOR/NOT使用)
XOR:满足其中一个条件,且不满足另一个,类似:||
SELECT * FROM xs WHERE 专业名 = '计科' AND 性别 = '女';
- BETWEEN AND范围比较
SELECT * FROM xs WHERE 出生时间 BETWEEN '2000-1-1' AND '2001-12-12';
- 确定集合:查找选择想要的内容
SELECT 学号,课程号 FROM cj WHERE 课程号 IN ('1','2');
- 模糊查找:不确定的部分用%表示
SELECT 学号,姓名 FROM xs WHERE 姓名 LIKE '小%';
- 空值判断:WHERE 某某 IS NULL;
- 排序
- 对查询结果进行排序:升序ASC ,降序DESC
SELECT * FROM xs WHERE 专业名='计科' ORDER BY 出生时间 DESC;
- 聚合函数
(1)SUM() / AVG():和 / 平均值
SELECT SUM(成绩) AS 总分, AVG(成绩) AS 平均分 FROM cj WHERE 学号='10001';
(2)BINARY_CHECKSUM():进行二进制校验值
(3)COUNT():求项数
SELECT COUNT(*) AS 学生总数 FROM xs;
(4)GROUPING():产生一个附加列
(5)MAX() / MIN():最大值 / 最小值
SELECT MAX(成绩) AS 最高分, MIN(成绩) AS 最低分 FROM cj WHERE 课程号='1';
- 分组统计查询
(1)GROUP BY:分组
//按照性别进行分组
SELECT 学号,姓名,性别 FROM xs group by 性别;
//按照专业人数进行分组
SELECT 专业名,COUNT(*) AS 学生人数 FROM xs GROUP BY 专业名;
//按照学号进行分组
SELECT 学号, COUNT(*) AS 选课门数 FROM cj GROUP BY 学号;
(2)HAVING:GROUP BY 进行分组后,再用HAVING进行筛选!
SELECT 学号 , AVG(成绩) AS 平均成绩 FROM cj GROUP BY 学号 HAVING AVG(成绩)>70;
(3)WITH ROLLUP:在所有记录的最后加上一条记录,起到总计的作用。
SELECT 专业名, COUNT(*) AS 人数 FROM xs GROUP BY 专业名 WITH ROLLUP;
SELECT 专业名, COUNT(*) AS 人数,GROUP_CONCAT(姓名) 该专业学生姓名 FROM xs GROUP BY 专业名 WITH ROLLUP;
- 用查询结果生成新表
CREATE TABLE jkxs SELECT 学号,姓名,性别 FROM xs WHERE 专业名='计科';
- 合并结果表
将新建的jkxs、rgxs、sjxs信息合并到学生表xs中。
SELECT * FROM xs
UNION ALL SELECT * FROM rjxs
UNION ALL SELECT * FROM jkxs
UNION ALL SELECT * FROM sjxs;