这里提供些测试语句方便练习上一篇 MySQL数据库建立多对多的数据表关系-学生课程表例子(附源码) 创建的表:
SELECT * FROM student;
#给表格添加列
ALTER TABLE student ADD COLUMN 列名 VARCHAR(30);
-- DML语句练习
#插入一条数据
INSERT INTO student(NAME,age,birthday) VALUES("郭靖",40,"1972-12-01");
#修改
UPDATE student SET age=41,NAME="黄蓉" WHERE id=9;
#删除
DELETE FROM student WHERE id=9;
-- DQL
SELECT NAME,age FROM student WHERE id=1;
# DISTINCT 去除重复,代表的是行数据的不同,而不是只针对某个列名
SELECT DISTINCT NAME,age FROM student;
# ------------- 学生课程表练习:-------------
SELECT * FROM student;
SELECT * FROM course;
#练习:多表关联查询-查询学生所有信息包括选课信息
#隐式内连接 - 便于理解
SELECT
*
FROM student t1,course t2, student_course_relation t1_t2
WHERE t1.`student_id`=t1_t2.`student_id` AND t2.`course_id`=t1_t2.`course_id`;
#显式内连接 - 效率更高
SELECT *
FROM student t1
JOIN student_course_relation t1_t2 ON t1.`student_id`=t1_t2.`student_id`
JOIN course t2 ON t2.`course_id`=t1_t2.`course_id`;
#练习:查询student表中所有数据且学生姓名不能重复 -- 这个使用group by 学生姓名实现即可
#练习1_1: 查询学生的所有信息及其所选课程,为了方便查看并按照学号(学生id)排序
SELECT *
FROM
student t1,
course t2,
student_course_relation t1_t2
WHERE
t1.`student_id` = t1_t2.`student_id` AND t2.`course_id` = t1_t2.`course_id` -- 隐式内连接
ORDER BY t1.`student_id` ASC; -- 学生id升序
#练习1_2: 查询学生的所有信息及其所选课程,为了方便查看并按照学号(学生id)排序 --- 显式内连接方式
SELECT
t1.`student_id`,t1.name,t1.`age`,t1.`id_no`,t1.`sex`,
t2.`NAME` course_name
FROM
student_course_relation t1_t2
JOIN student t1 ON t1_t2.`student_id`=t1.`student_id`
JOIN course t2 ON t1_t2.`course_id` = t2.`course_id` -- 多个join on
ORDER BY t1.`student_id` ASC; -- 学生id升序
#练习2:查询聂风选了哪些课程
#1 隐式内连接方式
SELECT
t1.*,
t2.`NAME` 课程名称
FROM
student t1,
course t2,
student_course_relation t1_t2
WHERE t1.name="聂风" AND t1.`student_id`=t1_t2.`student_id` AND t2.`course_id`=t1_t2.`course_id`;
#2 显式内连接方式
SELECT
t1.*,
t2.`NAME` 课程名称
FROM
student t1
JOIN student_course_relation t1_t2 ON t1.`student_id`=t1_t2.student_id
JOIN course t2 ON t2.`course_id` = t1_t2.`course_id`
WHERE t1.name="聂风";
#3 - 利用子查询的方式 - 这个稍稍麻烦
SELECT
t1.*,
t2.`NAME` 课程名称
FROM (
SELECT
t1.*
FROM
student t1 WHERE t1.name="聂风"
) t1
JOIN student_course_relation t1_t2 ON t1.`student_id`=t1_t2.student_id
JOIN course t2 ON t2.`course_id` = t1_t2.`course_id`;
#练习3:查询各个课程的选修人数并按照选修人数升序排序
#1 - 隐式内连接
SELECT
course.`course_id`,
course.`NAME`,
COUNT(t1_t2.`student_id`) 选修人数
FROM course, student_course_relation t1_t2
WHERE course.`course_id` = t1_t2.`course_id`
GROUP BY course.name
ORDER BY 选修人数 ASC,
course.`course_id` ASC; -- 第二排序条件
#2 - 显示内连接
SELECT
course.`course_id`,
course.`NAME`,
COUNT(t1_t2.`student_id`) 选修人数
FROM course
JOIN student_course_relation t1_t2 ON course.`course_id`=t1_t2.`course_id`
GROUP BY course.`NAME`
ORDER BY 选修人数 ASC,
course.`course_id` ASC; -- 第二排序条件
#练习3_2:查询课程选修人数>2的课程并按照选修人数升序排序
SELECT
course.`course_id`,
course.`NAME`,
COUNT(t1_t2.`student_id`) 选修人数
FROM course
JOIN student_course_relation t1_t2 ON course.`course_id`=t1_t2.`course_id`
GROUP BY course.`NAME`
HAVING 选修人数 > 2 -- HAVING对group by分组查询后的值进行处理
ORDER BY 选修人数 ASC,
course.`course_id` ASC; -- 第二排序条件
#练习4:查询选修“大学计算机基础”的学生信息
SELECT
t1.*,
t2.`NAME`
FROM student t1
JOIN student_course_relation t1_t2 ON t1.`student_id`=t1_t2.`student_id`
JOIN course t2 ON t2.`course_id`=t1_t2.`course_id`
WHERE t2.name = "大学计算机基础"
若对你有帮助,请点个赞吧,谢谢支持!
本文地址:https://www.jianshu.com/p/6420fe0008bb?v=1676339797057,转载请注明出处,谢谢。
网友评论