“一天学会MYSQL数据库“查询练习

    技术2024-03-15  94

    sql查询练习

    来自B站课程 "一天学会MYSQL数据库"1的大刘课程的全部练习题,老师有些单词拼的不对,我自己重新修改了字段名,整理如下

    新建一个查询练习用的数据库 University

    CREATE DATABASE University;

    创建学生表:students(学号, 姓名, 性别, 出生日期, 所在班级)

    CREATE TABLE students( s_num VARCHAR(20) PRIMARY KEY COMMENT'学生学号', s_name VARCHAR(20) NOT NULL COMMENT'学生姓名 不能为空', s_sex VARCHAR(10) NOT NULL COMMENT'学生性别', s_birthday DATETIME COMMENT'学生生日', s_class VARCHAR(20) COMMENT'学生所在的班级' );

    创建教师表:teachers(教师编号,教师名字,教师性别,出生日期,职称,所在部门)

    CREATE TABLE teachers( t_num VARCHAR(20) PRIMARY KEY COMMENT'教师编号', t_name VARCHAR(20) NOT NULL COMMENT'教师姓名', t_sex VARCHAR(20) NOT NULL COMMENT'教师性别', t_birthday DATETIME COMMENT'教师生日', t_title VARCHAR(20) NOT NULL COMMENT'教师职称', t_department VARCHAR(20) NOT NULL COMMENT'教师所在的部门' );

    创建课程表:courses(课程号,课程课程名称,教师编号)

    CREATE TABLE courses( c_num VARCHAR(20) PRIMARY KEY COMMENT'课程号', c_name VARCHAR(20) NOT NULL COMMENT'课程名称', t_num VARCHAR(20) NOT NULL COMMENT '教师编号 外键关联teacher表', FOREIGN KEY(t_num) references teachers(t_num) );

    创建成绩表:scores(学号,课程号,成绩)

    CREATE TABLE scores ( s_num VARCHAR(20) NOT NULL COMMENT '成绩表的编号 依赖学生学号', c_num VARCHAR(20) NOT NULL COMMENT '课程号 依赖于课程表中的c_id', score decimal, foreign key(s_num) references students(s_num), foreign key(c_num) references courses(c_num), PRIMARY KEY(s_num,c_num) );

    分别向表中添加数据

    --学生表数据 INSERT INTO students VALUES('101','曾华','男','1977-09-01','95033'); INSERT INTO students VALUES('102','匡明','男','1975-10-02','95031'); INSERT INTO students VALUES('103','王丽','女','1976-01-23','95033'); INSERT INTO students VALUES('104','李军','男','1976-02-20','95033'); INSERT INTO students VALUES('105','王芳','女','1975-02-10','95031'); INSERT INTO students VALUES('106','陆军','男','1974-06-03','95031'); INSERT INTO students VALUES('107','王尼玛','男','1976-02-20','95033'); INSERT INTO students VALUES('108','张全蛋','男','1975-02-10','95031'); INSERT INTO students VALUES('109','赵铁柱','男','1974-06-03','95031'); --教师表数据 INSERT INTO teachers VALUES('804','李诚','男','1958-12-02','副教授','计算机系'); INSERT INTO teachers VALUES('856','张旭','男','1969-03-12','讲师','电子工程系'); INSERT INTO teachers VALUES('825','王萍','女','1972-05-05','助教','计算机系'); INSERT INTO teachers VALUES('831','刘冰','女','1977-08-14','助教','电子工程系'); --添加课程表 INSERT INTO courses VALUES('3-105','计算机导论','825'); INSERT INTO courses VALUES('3-245','操作系统','804'); INSERT INTO courses VALUES('6-166','数字电路','856'); INSERT INTO courses VALUES('9-888','高等数学','831'); --添加成绩表 INSERT INTO scores VALUES('103','3-245','86'); INSERT INTO scores VALUES('105','3-245','75'); INSERT INTO scores VALUES('109','3-245','68'); INSERT INTO scores VALUES('103','3-105','92'); INSERT INTO scores VALUES('105','3-105','88'); INSERT INTO scores VALUES('109','3-105','76'); INSERT INTO scores VALUES('103','6-166','85'); INSERT INTO scores VALUES('105','6-166','79'); INSERT INTO scores VALUES('109','6-166','81');

    几张表的数据展现

    mysql> select* from students; +-------+--------+-------+---------------------+---------+ | s_num | s_name | s_sex | s_birthday | s_class | +-------+--------+-------+---------------------+---------+ | 101 | 曾华 || 1977-09-01 00:00:00 | 95033 | | 102 | 匡明 || 1975-10-02 00:00:00 | 95031 | | 103 | 王丽 || 1976-01-23 00:00:00 | 95033 | | 104 | 李军 || 1976-02-20 00:00:00 | 95033 | | 105 | 王芳 || 1975-02-10 00:00:00 | 95031 | | 106 | 陆军 || 1974-06-03 00:00:00 | 95031 | | 107 | 王尼玛 || 1976-02-20 00:00:00 | 95033 | | 108 | 张全蛋 || 1975-02-10 00:00:00 | 95031 | | 109 | 赵铁柱 || 1974-06-03 00:00:00 | 95031 | | 110 | 刘表 || NULL | NULL | +-------+--------+-------+---------------------+---------+ mysql> select* from teachers; +-------+--------+-------+---------------------+---------+--------------+ | t_num | t_name | t_sex | t_birthday | t_title | t_department | +-------+--------+-------+---------------------+---------+--------------+ | 804 | 李诚 || 1958-12-02 00:00:00 | 副教授 | 计算机系 | | 825 | 王萍 || 1972-05-05 00:00:00 | 助教 | 计算机系 | | 831 | 刘冰 || 1977-08-14 00:00:00 | 助教 | 电子工程系 | | 856 | 张旭 || 1969-03-12 00:00:00 | 讲师 | 电子工程系 | +-------+--------+-------+---------------------+---------+--------------+ mysql> select * from courses; +-------+------------+-------+ | c_num | c_name | t_num | +-------+------------+-------+ | 3-105 | 计算机导论 | 825 | | 3-245 | 操作系统 | 804 | | 6-166 | 数字电路 | 856 | | 9-888 | 高等数学 | 831 | +-------+------------+-------+ mysql> select * from scores; +-------+-------+-------+ | s_num | c_num | score | +-------+-------+-------+ | 101 | 3-105 | 90 | | 102 | 3-105 | 91 | | 103 | 3-105 | 92 | | 103 | 3-245 | 86 | | 103 | 6-166 | 85 | | 104 | 3-105 | 89 | | 105 | 3-105 | 88 | | 105 | 3-245 | 75 | | 105 | 6-166 | 79 | | 109 | 3-105 | 76 | | 109 | 3-245 | 68 | | 109 | 6-166 | 81 | +-------+-------+-------+

    开始 练习 1.查询student表中所有的记录

    mysql> select* from students; +-------+--------+-------+---------------------+---------+ | s_num | s_name | s_sex | s_birthday | s_class | +-------+--------+-------+---------------------+---------+ | 101 | 曾华 || 1977-09-01 00:00:00 | 95033 | | 102 | 匡明 || 1975-10-02 00:00:00 | 95031 | | 103 | 王丽 || 1976-01-23 00:00:00 | 95033 | | 104 | 李军 || 1976-02-20 00:00:00 | 95033 | | 105 | 王芳 || 1975-02-10 00:00:00 | 95031 | | 106 | 陆军 || 1974-06-03 00:00:00 | 95031 | | 107 | 王尼玛 || 1976-02-20 00:00:00 | 95033 | | 108 | 张全蛋 || 1975-02-10 00:00:00 | 95031 | | 109 | 赵铁柱 || 1974-06-03 00:00:00 | 95031 | | 110 | 刘表 || NULL | NULL | +-------+--------+-------+---------------------+---------+

    2.查询student表中所有记录的s_name,s_sex和s_class列

    mysql> SELECT s_num,s_name,s_class FROM students; +-------+--------+---------+ | s_num | s_name | s_class | +-------+--------+---------+ | 101 | 曾华 | 95033 | | 102 | 匡明 | 95031 | | 103 | 王丽 | 95033 | | 104 | 李军 | 95033 | | 105 | 王芳 | 95031 | | 106 | 陆军 | 95031 | | 107 | 王尼玛 | 95033 | | 108 | 张全蛋 | 95031 | | 109 | 赵铁柱 | 95031 | | 110 | 刘表 | NULL | +-------+--------+---------+

    3.查询教师所有的单位但是不重复的t_department列

    mysql> SELECT distinct(t_department) FROM teachers; +--------------+ | t_department | +--------------+ | 计算机系 | | 电子工程系 | +--------------+ 2 rows in set (0.00 sec)

    4.查询score表中成绩在60-80之间所有的记录

    注意:BETWEEN… ADN… 是包含边界的

    mysql> SELECT * FROM scores WHERE score BETWEEN 61 AND 79; mysql> SELECT * FROM scores WHERE score >60 and score < 80; +-------+-------+-------+ | s_num | c_num | score | +-------+-------+-------+ | 105 | 3-245 | 75 | | 105 | 6-166 | 79 | | 109 | 3-105 | 76 | | 109 | 3-245 | 68 | +-------+-------+-------+

    5.查询score表中成绩为85, 86, 或者88的记录

    mysql> SELECT * FROM scores WHERE score IN(85, 86, 88); +-------+-------+-------+ | s_num | c_num | score | +-------+-------+-------+ | 103 | 3-245 | 86 | | 103 | 6-166 | 85 | | 105 | 3-105 | 88 | +-------+-------+-------+

    6.查询student表中’95031’班或者性别为’女’的同学记录

    mysql> SELECT * FROM students WHERE s_class = '95031' OR s_sex = '女'; +-------+--------+-------+---------------------+---------+ | s_num | s_name | s_sex | s_birthday | s_class | +-------+--------+-------+---------------------+---------+ | 102 | 匡明 || 1975-10-02 00:00:00 | 95031 | | 103 | 王丽 || 1976-01-23 00:00:00 | 95033 | | 105 | 王芳 || 1975-02-10 00:00:00 | 95031 | | 106 | 陆军 || 1974-06-03 00:00:00 | 95031 | | 108 | 张全蛋 || 1975-02-10 00:00:00 | 95031 | | 109 | 赵铁柱 || 1974-06-03 00:00:00 | 95031 | +-------+--------+-------+---------------------+---------+ 6 rows in set (0.00 sec)

    7.以class降序查询student表中所有的记录

    mysql> SELECT * FROM students ORDER BY s_class desc; +-------+--------+-------+---------------------+---------+ | s_num | s_name | s_sex | s_birthday | s_class | +-------+--------+-------+---------------------+---------+ | 101 | 曾华 || 1977-09-01 00:00:00 | 95033 | | 103 | 王丽 || 1976-01-23 00:00:00 | 95033 | | 104 | 李军 || 1976-02-20 00:00:00 | 95033 | | 107 | 王尼玛 || 1976-02-20 00:00:00 | 95033 | | 102 | 匡明 || 1975-10-02 00:00:00 | 95031 | | 105 | 王芳 || 1975-02-10 00:00:00 | 95031 | | 106 | 陆军 || 1974-06-03 00:00:00 | 95031 | | 108 | 张全蛋 || 1975-02-10 00:00:00 | 95031 | | 109 | 赵铁柱 || 1974-06-03 00:00:00 | 95031 | | 110 | 刘表 || NULL | NULL | +-------+--------+-------+---------------------+---------+

    8.以c_num升序.score降序插叙scores表中所有的数据

    mysql> SELECT * FROM scores ORDER BY c_num ASC, score DESC; +-------+-------+-------+ | s_num | c_num | score | +-------+-------+-------+ | 103 | 3-105 | 92 | | 105 | 3-105 | 88 | | 109 | 3-105 | 76 | | 103 | 3-245 | 86 | | 105 | 3-245 | 75 | | 109 | 3-245 | 68 | | 103 | 6-166 | 85 | | 109 | 6-166 | 81 | | 105 | 6-166 | 79 | +-------+-------+-------+

    9.查询’95031’班的学生人数

    mysql> SELECT COUNT(s_num) FROM students WHERE s_class = '95031'; +--------------+ | COUNT(s_num) | +--------------+ | 5 | +--------------+

    10.查询score表中的最高分数的学生号和课程号.

    mysql> SELECT c_num, s_num FROM scores WHERE score = (SELECT MAX(score) FROM scores); +-------+-------+ | c_num | s_num | +-------+-------+ | 3-105 | 103 | +-------+-------+

    11.查询每门课的平均成绩

    mysql> select c_num, avg(score) from scores group by c_num; +-------+-------------------+ | c_num | avg(score) | +-------+-------------------+ | 3-105 | 85.33333333333333 | | 3-245 | 76.33333333333333 | | 6-166 | 81.66666666666667 | +-------+-------------------+

    12,查询score表中至少有2名学生选修的,并且以3开头的课程的平均分

    mysql> select c_num, avg(score) from scores group by c_num having count(s_num)>=2 -> and c_num like "3%"; +-------+-------------------+ | c_num | avg(score) | +-------+-------------------+ | 3-105 | 87.66666666666667 | | 3-245 | 76.33333333333333 | +-------+-------------------+ 2 rows in set (0.00 sec)

    13.查询分数大于70但是小于90的s_num列:

    mysql> select s_num, c_num from scores where score > 70 and score < 90 ; +-------+-------+ | s_num | c_num | +-------+-------+ | 103 | 3-245 | | 103 | 6-166 | | 104 | 3-105 | | 105 | 3-105 | | 105 | 3-245 | | 105 | 6-166 | | 109 | 3-105 | | 109 | 6-166 | +-------+-------+

    14.多表查询 s_name , scores .

    mysql>select s_name,students.s_num, c_num, score from students, scores where students.s_num = scores.s_num; +--------+-------+-------+-------+ | s_name | s_num | c_num | score | +--------+-------+-------+-------+ | 王丽 | 103 | 3-105 | 92 | | 王丽 | 103 | 3-245 | 86 | | 王丽 | 103 | 6-166 | 85 | | 王芳 | 105 | 3-105 | 88 | | 王芳 | 105 | 3-245 | 75 | | 王芳 | 105 | 6-166 | 79 | | 赵铁柱 | 109 | 3-105 | 76 | | 赵铁柱 | 109 | 3-245 | 68 | | 赵铁柱 | 109 | 6-166 | 81 | +--------+-------+-------+-------+

    15.查询所有学生的s_num, c_name, score 数据来自三个表

    mysql> select students.s_num, c_name ,score from students, courses, scores -> where students.s_num = scores.s_num and scores.c_num = courses.c_num; +-------+------------+-------+ | s_num | c_name | score | +-------+------------+-------+ | 103 | 计算机导论 | 92 | | 103 | 操作系统 | 86 | | 103 | 数字电路 | 85 | | 105 | 计算机导论 | 88 | | 105 | 操作系统 | 75 | | 105 | 数字电路 | 79 | | 109 | 计算机导论 | 76 | | 109 | 操作系统 | 68 | | 109 | 数字电路 | 81 | +-------+------------+-------+

    16.查询所有的学生 s_name , c_name, sc_degree列 , 将上面的s_num 换成s_name

    mysql> select students.s_name, c_name ,score from students, courses, scores -> where students.s_num = scores.s_num and scores.c_num = courses.c_num; +--------+------------+-------+ | s_name | c_name | score | +--------+------------+-------+ | 王丽 | 计算机导论 | 92 | | 王丽 | 操作系统 | 86 | | 王丽 | 数字电路 | 85 | | 王芳 | 计算机导论 | 88 | | 王芳 | 操作系统 | 75 | | 王芳 | 数字电路 | 79 | | 赵铁柱 | 计算机导论 | 76 | | 赵铁柱 | 操作系统 | 68 | | 赵铁柱 | 数字电路 | 81 | +--------+------------+-------+ 查询班级是’95031’班学生每门课的平均分 mysql>select avg(score) from scores ->where s_num in (select s_num from students where s_class = '95031') ->group by c_num; +-------+-------------------+ | c_no | AVG(sc.sc_degree) | +-------+-------------------+ | 3-105 | 82.0000 | | 3-245 | 71.5000 | | 6-166 | 80.0000 | +-------+-------------------+

    18.查询选修"3-105"课程的成绩高于’109’号同 学’3-105’成绩 的所有同学的姓名 学号 成绩

    mysql> select students.s_num ,students.s_name ,score from students ,scores -> where c_num = '3-105' and score> (select score from scores where s_num = '109' and c_num ='3-105') and students.s_num = scores.s_num; +-------+--------+-------+ | s_num | s_name | score | +-------+--------+-------+ | 101 | 曾华 | 90 | | 102 | 匡明 | 91 | | 103 | 王丽 | 92 | | 104 | 李军 | 89 | | 105 | 王芳 | 88 | +-------+--------+-------+

    19.查询成绩 高于学号为’109’, 课程号为’3-105’的成绩的所有记录

    mysql> SELECT * FROM scores WHERE score >(SELECT score FROM scores WHERE s_num = '109' AND c_num = '3-105'); +-------+-------+-------+ | s_num | c_num | score | +-------+-------+-------+ | 103 | 3-105 | 92 | | 103 | 3-245 | 86 | | 103 | 6-166 | 85 | | 105 | 3-105 | 88 | | 105 | 6-166 | 79 | | 109 | 6-166 | 81 | +-------+-------+-------+ 查询所有学号为108. 101 的同学同年出生的所有学生的s_num,s_name和s_birthday mysql> SELECT * FROM students WHERE YEAR(s_birthday) -> IN (SELECT YEAR(s_birthday) FROM students WHERE s_num IN('108','101')); +-------+--------+-------+---------------------+---------+ | s_num | s_name | s_sex | s_birthday | s_class | +-------+--------+-------+---------------------+---------+ | 101 | 曾华 || 1977-09-01 00:00:00 | 95033 | | 102 | 匡明 || 1975-10-02 00:00:00 | 95031 | | 105 | 王芳 || 1975-02-10 00:00:00 | 95031 | | 108 | 张全蛋 || 1975-02-10 00:00:00 | 95031 | +-------+--------+-------+---------------------+---------+

    21.查询 张旭 教师任课的学生的成绩

    mysql> select * from students where s_num IN (SELECT s_num FROM scores WHERE c_num = (SELECT c_num FROM courses WHERE t_num = (SELECT t_num FROM teachers WHERE t_name='张旭'))); +-------+--------+-------+---------------------+---------+ | s_num | s_name | s_sex | s_birthday | s_class | +-------+--------+-------+---------------------+---------+ | 103 | 王丽 || 1976-01-23 00:00:00 | 95033 | | 105 | 王芳 || 1975-02-10 00:00:00 | 95031 | | 109 | 赵铁柱 || 1974-06-03 00:00:00 | 95031 | +-------+--------+-------+---------------------+---------+

    22.查询选修课程的同学人数多余 5 人的教师姓名

    mysql> INSERT INTO scores VALUES('101','3-105','90'); --为了效果,添加几条数据 Query OK, 1 row affected (0.03 sec) mysql> INSERT INTO scores VALUES('102','3-105','91'); Query OK, 1 row affected (0.01 sec) mysql> INSERT INTO scores VALUES('104','3-105','89'); Query OK, 1 row affected (0.01 sec) mysql> SELECT * FROM teachers WHERE t_num IN (SELECT t_num FROM courses WHERE c_num IN (SELECT c_num FROM scores GROUP BY c_num HAVING COUNT(s_num) > 5)); +-------+--------+-------+---------------------+---------+--------------+ | t_num | t_name | t_sex | t_birthday | t_title | t_department | +-------+--------+-------+---------------------+---------+--------------+ | 825 | 王萍 || 1972-05-05 00:00:00 | 助教 | 计算机系 | +-------+--------+-------+---------------------+---------+--------------

    23.查询95033班和95031班全体学生的记录

    mysql> SELECT * FROM students WHERE s_class IN('95031','95033') ORDER BY s_class ; +-------+--------+-------+---------------------+---------+ | s_num | s_name | s_sex | s_birthday | s_class | +-------+--------+-------+---------------------+---------+ | 102 | 匡明 || 1975-10-02 00:00:00 | 95031 | | 105 | 王芳 || 1975-02-10 00:00:00 | 95031 | | 106 | 陆军 || 1974-06-03 00:00:00 | 95031 | | 108 | 张全蛋 || 1975-02-10 00:00:00 | 95031 | | 109 | 赵铁柱 || 1974-06-03 00:00:00 | 95031 | | 101 | 曾华 || 1977-09-01 00:00:00 | 95033 | | 103 | 王丽 || 1976-01-23 00:00:00 | 95033 | | 104 | 李军 || 1976-02-20 00:00:00 | 95033 | | 107 | 王尼玛 || 1976-02-20 00:00:00 | 95033 | +-------+--------+-------+---------------------+---------+

    24.查询存在85分以上成绩的课程c_num

    mysql> SELECT * FROM scores where score > 85; +-------+-------+-------+ | s_num | c_num | score | +-------+-------+-------+ | 101 | 3-105 | 90 | | 102 | 3-105 | 91 | | 103 | 3-105 | 92 | | 103 | 3-245 | 86 | | 104 | 3-105 | 89 | | 105 | 3-105 | 88 | +-------+-------+-------+

    25.查出所有’计算机系’ 教师所教课程的成绩表

    mysql> SELECT * FROM scores WHERE c_num IN (SELECT c_num FROM courses WHERE t_num IN (SELECT t_num FROM teachers WHERE t_department = '计算机系')); +-------+-------+-------+ | s_num | c_num | score | +-------+-------+-------+ | 103 | 3-245 | 86 | | 105 | 3-245 | 75 | | 109 | 3-245 | 68 | | 101 | 3-105 | 90 | | 102 | 3-105 | 91 | | 103 | 3-105 | 92 | | 104 | 3-105 | 89 | | 105 | 3-105 | 88 | | 109 | 3-105 | 76 | +-------+-------+-------+

    26.查询’计算机系’与’电子工程系’ 不同职称的教师的name和title

    mysql> SELECT * FROM teachers WHERE t_department = '计算机系' AND t_title NOT IN (SELECT t_title FROM teachers WHERE t_department = '电子工程系') -> UNION -> SELECT * FROM teachers WHERE t_department = '电子工程系' AND t_title NOT IN (SELECT t_title FROM teachers WHERE t_department = '计算机系'); +-------+--------+-------+---------------------+---------+--------------+ | t_num | t_name | t_sex | t_birthday | t_title | t_department | +-------+--------+-------+---------------------+---------+--------------+ | 804 | 李诚 || 1958-12-02 00:00:00 | 副教授 | 计算机系 | | 856 | 张旭 || 1969-03-12 00:00:00 | 讲师 | 电子工程系 | +-------+--------+-------+---------------------+---------+--------------+

    27, 查询选修编号为"3-105"课程且成绩至少高于选修编号为’3-245’同学的c_num,s_num和score,并且按照score从高到地次序排序

    mysql> select * from scores where c_num = '3-105' AND score > ANY(SELECT score FROM scores WHERE c_num = '3-245' ) ORDER BY score desc ; +-------+-------+-------+ | s_num | c_num | score | +-------+-------+-------+ | 103 | 3-105 | 92 | | 102 | 3-105 | 91 | | 101 | 3-105 | 90 | | 104 | 3-105 | 89 | | 105 | 3-105 | 88 | | 109 | 3-105 | 76 | +-------+-------+-------+

    28.查询选修编号为"3-105"且成绩高于选修编号为"3-245"课程的同学c_num .s_num 和score

    mysql> SELECT * FROM scores WHERE score > ALL (select score from scores WHERE c_num = '3-245') AND c_num= '3-105'; +-------+-------+-------+ | s_num | c_num | score | +-------+-------+-------+ | 101 | 3-105 | 90 | | 102 | 3-105 | 91 | | 103 | 3-105 | 92 | | 104 | 3-105 | 89 | | 105 | 3-105 | 88 | +-------+-------+-------+

    29查询所有教师和同学的 name ,sex, birthday

    mysql> SELECT s_name AS name, s_sex AS sex, s_birthday AS birthday FROM students -> UNION -> SELECT t_name AS name, t_sex AS sex, t_birthday AS birthday FROM teachers; +--------+-----+---------------------+ | name | sex | birthday | +--------+-----+---------------------+ | 曾华 || 1977-09-01 00:00:00 | | 匡明 || 1975-10-02 00:00:00 | | 王丽 || 1976-01-23 00:00:00 | | 李军 || 1976-02-20 00:00:00 | | 王芳 || 1975-02-10 00:00:00 | | 陆军 || 1974-06-03 00:00:00 | | 王尼玛 || 1976-02-20 00:00:00 | | 张全蛋 || 1975-02-10 00:00:00 | | 赵铁柱 || 1974-06-03 00:00:00 | | 李诚 || 1958-12-02 00:00:00 | | 王萍 || 1972-05-05 00:00:00 | | 刘冰 || 1977-08-14 00:00:00 | | 张旭 || 1969-03-12 00:00:00 | +--------+-----+---------------------+

    30.查询所有’女’教师和’女’学生的name,sex,birthday

    mysql> SELECT s_name AS name, s_sex AS sex, s_birthday AS birthday FROM students WHERE s_sex = '女' -> UNION -> SELECT t_name AS name, t_sex AS sex, t_birthday AS birthday FROM teachers WHERE t_sex = '女'; +------+-----+---------------------+ | name | sex | birthday | +------+-----+---------------------+ | 王丽 || 1976-01-23 00:00:00 | | 王芳 || 1975-02-10 00:00:00 | | 王萍 || 1972-05-05 00:00:00 | | 刘冰 || 1977-08-14 00:00:00 | +------+-----+---------------------+

    31.查询成绩比该课程平均成绩低的同学的成绩表

    mysql> select * from scores as a where score< -> (select avg(score) from scores as b where b.c_num = a.c_num group by c_num) ; +-------+-------+-------+ | s_num | c_num | score | +-------+-------+-------+ | 105 | 3-245 | 75 | | 105 | 6-166 | 79 | | 109 | 3-105 | 76 | | 109 | 3-245 | 68 | | 109 | 6-166 | 81 | +-------+-------+-------+

    32.查询所有任课教师的t_name 和 t_depart(要在课程表中可以查得到)

    mysql> SELECT * FROM teachers WHERE t_num IN(SELECT t_num FROM courses); +-------+--------+-------+---------------------+---------+--------------+ | t_num | t_name | t_sex | t_birthday | t_title | t_department | +-------+--------+-------+---------------------+---------+--------------+ | 804 | 李诚 || 1958-12-02 00:00:00 | 副教授 | 计算机系 | | 825 | 王萍 || 1972-05-05 00:00:00 | 助教 | 计算机系 | | 831 | 刘冰 || 1977-08-14 00:00:00 | 助教 | 电子工程系 | | 856 | 张旭 || 1969-03-12 00:00:00 | 讲师 | 电子工程系 | +-------+--------+-------+---------------------+---------+--------------+

    33.查出至少有2名男生的班号

    mysql> SELECT s_class FROM students WHERE s_sex = '男' GROUP BY s_class HAVING COUNT(s_num) > 1; +---------+ | s_class | +---------+ | 95033 | | 95031 | +---------+

    34.查询student 表中 不姓"王"的同学的记录

    mysql> SELECT * FROM students WHERE s_name NOT LIKE '王%'; +-------+--------+-------+---------------------+---------+ | s_num | s_name | s_sex | s_birthday | s_class | +-------+--------+-------+---------------------+---------+ | 101 | 曾华 || 1977-09-01 00:00:00 | 95033 | | 102 | 匡明 || 1975-10-02 00:00:00 | 95031 | | 104 | 李军 || 1976-02-20 00:00:00 | 95033 | | 106 | 陆军 || 1974-06-03 00:00:00 | 95031 | | 108 | 张全蛋 || 1975-02-10 00:00:00 | 95031 | | 109 | 赵铁柱 || 1974-06-03 00:00:00 | 95031 | +-------+--------+-------+---------------------+---------+ 查询student 中每个学生的姓名和年龄(当前时间 - 出生年份) mysql> SELECT s_name, YEAR(NOW()) - YEAR(s_birthday) AS age FROM students; +--------+------+ | s_name | age | +--------+------+ | 曾华 | 43 | | 匡明 | 45 | | 王丽 | 44 | | 李军 | 44 | | 王芳 | 45 | | 陆军 | 46 | | 王尼玛 | 44 | | 张全蛋 | 45 | | 赵铁柱 | 46 | | 刘表 | NULL | +--------+------+ 查询student中最大和最小的 s_birthday的值 mysql> select max(s_birthday),min(s_birthday) from students; +---------------------+---------------------+ | max(s_birthday) | min(s_birthday) | +---------------------+---------------------+ | 1977-09-01 00:00:00 | 1974-06-03 00:00:00 | +---------------------+---------------------+

    37.以班级号和年龄从大到小的顺序查询student表中的全部记录

    mysql> SELECt * FROM students ORDER BY s_class DESC, s_birthday; +-------+--------+-------+---------------------+---------+ | s_num | s_name | s_sex | s_birthday | s_class | +-------+--------+-------+---------------------+---------+ | 103 | 王丽 || 1976-01-23 00:00:00 | 95033 | | 104 | 李军 || 1976-02-20 00:00:00 | 95033 | | 107 | 王尼玛 || 1976-02-20 00:00:00 | 95033 | | 101 | 曾华 || 1977-09-01 00:00:00 | 95033 | | 106 | 陆军 || 1974-06-03 00:00:00 | 95031 | | 109 | 赵铁柱 || 1974-06-03 00:00:00 | 95031 | | 105 | 王芳 || 1975-02-10 00:00:00 | 95031 | | 108 | 张全蛋 || 1975-02-10 00:00:00 | 95031 | | 102 | 匡明 || 1975-10-02 00:00:00 | 95031 | | 110 | 刘表 || NULL | NULL | +-------+--------+-------+---------------------+---------+

    38.查询"男"教师 及其所上的课

    mysql> SELECT * FROM courses WHERE t_num IN (SELECT t_num FROM teachers WHERE t_sex = '男'); +-------+----------+-------+ | c_num | c_name | t_num | +-------+----------+-------+ | 3-245 | 操作系统 | 804 | | 6-166 | 数字电路 | 856 | +-------+----------+-------+

    39.查询最高分同学的s_num ,c_num 和 score

    mysql> SELECT * FROM scores WHERE score in (select MAX(score) FROM scores); +-------+-------+-------+ | s_num | c_num | score | +-------+-------+-------+ | 103 | 3-105 | 92 | +-------+-------+-------+ 查询和"李军"同性别的所有同学的 s_name mysql> SELECT s_name, s_sex FROM students WHERE s_sex = (SELECT s_sex FROM students WHERE s_name = '李军'); +--------+-------+ | s_name | s_sex | +--------+-------+ | 曾华 || | 匡明 || | 李军 || | 陆军 || | 王尼玛 || | 张全蛋 || | 赵铁柱 || | 刘表 || +--------+-------+

    41.查询和"李军"同性别并且同班的所有同学的s_name

    mysql> SELECT s_name, s_sex FROM students WHERE s_sex = (SELECT s_sex FROM students WHERE s_name = '李军') AND s_class = (SELECT s_class FROM students WHERE s_name = '李军'); +--------+-------+ | s_name | s_sex | +--------+-------+ | 曾华 || | 李军 || | 王尼玛 || +--------+-------+ 查询所有选修’计算机导论’课程的’男’同学的成绩表 mysql> select * from scores where -> s_num in (select s_num from students where s_sex ='男') -> and -> c_num in (select c_num from courses where c_name = '计算机导论'); +-------+-------+-------+ | s_num | c_num | score | +-------+-------+-------+ | 101 | 3-105 | 90 | | 102 | 3-105 | 91 | | 104 | 3-105 | 89 | | 109 | 3-105 | 76 | +-------+-------+-------+

    个人觉得很不错的SQL课程 https://www.bilibili.com/video/BV1Vt411z7wy ↩︎

    Processed: 0.040, SQL: 9