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

sql查询练习

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

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

CREATE DATABASE Unicersity;

创建学生表: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)
);

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

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 |
+--------+------------+-------+
  1. 查询班级是’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 |
+-------+-------+-------+
  1. 查询所有学号为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   |
+-------+--------+-------+---------------------+---------+
  1. 查询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 |
+--------+------+
  1. 查询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    |
+-------+-------+-------+
  1. 查询和"李军"同性别的所有同学的 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 |
+--------+-------+
| 曾华   ||
| 李军   ||
| 王尼玛 ||
+--------+-------+
  1. 查询所有选修’计算机导论’课程的’男’同学的成绩表
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    |
+-------+-------+-------+

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

猜你喜欢

转载自blog.csdn.net/weixin_43705953/article/details/107111915