当前位置:   article > 正文

MySQL数据库中对多表进行联合查询

MySQL数据库中对多表进行联合查询

 

目录

1:创建学生表

2:创建score表

3:向student表中添加数据

4:向score表中插入数据

5:分别查询两表

6:按要求完成以下查询

a:查询student表的所有记录

b:查询student表的第2条到4条记录

c:从student表查询所有学生的学号(id)、姓名(name) 和院系(department)的信息

d:从student表中查询计算机系和英语系的学生的信息

e:从student表中查询年龄30~35岁的学生信息

f:从student表中查询每个院系有多少人

g:从score表中查询每个科目的最高分

h:查询李四的考试科目(c_name) 和考试成绩(grade)

i:用连接的方式查询所有学生的信息和考试信息

j:计算每个学生的总成绩

k:计算每个考试科目的平均成绩

l:查询计算机成绩低于95的学生信息

m:查询同时参加计算机和英语考试的学生的信息

n:将计算机考试成绩按从高到低进行排序

o:从student表和score表中查询出学生的学号,然后合并查询结果

p:查询姓张或者姓王的同学的姓名、院系和考试科目及成绩

q:查询都是湖南的学生的姓名、年龄、院系和考试科目及成绩


1:创建学生表
  1. mysql> create table student(
  2. -> id int(10) not null unique primary key,
  3. -> name varchar(20) not null,
  4. -> sex varchar(4),
  5. -> birth year,
  6. -> department varchar(20),
  7. -> address varchar(50)
  8. -> );
  9. Query OK, 0 rows affected, 1 warning (0.00 sec)
2:创建score表
  1. mysql> create table score(
  2. -> id int(10) not null unique primary key auto_increment,
  3. -> stu_id int(10) not null,
  4. -> c_name varchar(20),
  5. -> grade int(10)
  6. -> );
  7. Query OK, 0 rows affected, 3 warnings (0.01 sec)
3:向student表中添加数据
  1. mysql> insert into student values(901,'张老大','男',1985,'计算机系','北京市海淀区');
  2. Query OK, 1 row affected (0.00 sec)
  3. mysql> insert into student values(902,'张老二','男',1986,'中文系','北京市昌平区');
  4. Query OK, 1 row affected (0.01 sec)
  5. mysql> insert into student values(903,'张三','女',1990,'中文系','湖南省永州市');
  6. Query OK, 1 row affected (0.01 sec)
  7. mysql> insert into student values(904,'李四','男',1990,'英语系','辽宁省皋新市');
  8. Query OK, 1 row affected (0.00 sec)
  9. mysql> insert into student values(905,'王五','女',1991,'英语系','福建省厦门市');
  10. Query OK, 1 row affected (0.01 sec)
  11. mysql> insert into student values(906,'王六','男',1988,'计算机系','湖南省衡阳市');
  12. Query OK, 1 row affected (0.00 sec)
  13. mysql>
4:向score表中插入数据
  1. mysql> insert into score values(null,901,'计算机系',98);
  2. Query OK, 1 row affected (0.01 sec)
  3. mysql> insert into score values(null,901,'英语',80);
  4. Query OK, 1 row affected (0.00 sec)
  5. mysql> insert into score values(null,902,'计算机',65);
  6. Query OK, 1 row affected (0.00 sec)
  7. mysql> insert into score values(null,902,'中文',88);
  8. Query OK, 1 row affected (0.00 sec)
  9. mysql> insert into score values(null,903,'中文',95);
  10. Query OK, 1 row affected (0.01 sec)
  11. mysql> insert into score values(null,904,'计算机',70);
  12. Query OK, 1 row affected (0.01 sec)
  13. mysql> insert into score values(null,904,'英语',92);
  14. Query OK, 1 row affected (0.00 sec)
  15. mysql> insert into score values(null,905,'英语',94);
  16. Query OK, 1 row affected (0.00 sec)
  17. mysql> insert into score values(null,906,'计算机',90);
  18. Query OK, 1 row affected (0.00 sec)
  19. mysql> insert into score values(null,906,'英语',85);
  20. Query OK, 1 row affected (0.00 sec)
5:分别查询两表
  1. mysql> select *from student;
  2. +-----+-----------+------+-------+--------------+--------------------+
  3. | id | name | sex | birth | department | address |
  4. +-----+-----------+------+-------+--------------+--------------------+
  5. | 901 | 张老大 | 男 | 1985 | 计算机系 | 北京市海淀区 |
  6. | 902 | 张老二 | 男 | 1986 | 中文系 | 北京市昌平区 |
  7. | 903 | 张三 | 女 | 1990 | 中文系 | 湖南省永州市 |
  8. | 904 | 李四 | 男 | 1990 | 英语系 | 辽宁省皋新市 |
  9. | 905 | 王五 | 女 | 1991 | 英语系 | 福建省厦门市 |
  10. | 906 | 王六 | 男 | 1988 | 计算机系 | 湖南省衡阳市 |
  11. +-----+-----------+------+-------+--------------+--------------------+
  12. 6 rows in set (0.00 sec)
  13. mysql> select *from score;
  14. +----+--------+--------------+-------+
  15. | id | stu_id | c_name | grade |
  16. +----+--------+--------------+-------+
  17. | 1 | 901 | 计算机系 | 98 |
  18. | 2 | 901 | 英语 | 80 |
  19. | 3 | 902 | 计算机 | 65 |
  20. | 4 | 902 | 中文 | 88 |
  21. | 5 | 903 | 中文 | 95 |
  22. | 6 | 904 | 计算机 | 70 |
  23. | 7 | 904 | 英语 | 92 |
  24. | 8 | 905 | 英语 | 94 |
  25. | 9 | 906 | 计算机 | 90 |
  26. | 10 | 906 | 英语 | 85 |
  27. +----+--------+--------------+-------+
  28. 10 rows in set (0.00 sec)
6:按要求完成以下查询
a:查询student表的所有记录
  1. mysql> select *from student;
  2. +-----+-----------+------+-------+--------------+--------------------+
  3. | id | name | sex | birth | department | address |
  4. +-----+-----------+------+-------+--------------+--------------------+
  5. | 901 | 张老大 | 男 | 1985 | 计算机系 | 北京市海淀区 |
  6. | 902 | 张老二 | 男 | 1986 | 中文系 | 北京市昌平区 |
  7. | 903 | 张三 | 女 | 1990 | 中文系 | 湖南省永州市 |
  8. | 904 | 李四 | 男 | 1990 | 英语系 | 辽宁省皋新市 |
  9. | 905 | 王五 | 女 | 1991 | 英语系 | 福建省厦门市 |
  10. | 906 | 王六 | 男 | 1988 | 计算机系 | 湖南省衡阳市 |
  11. +-----+-----------+------+-------+--------------+--------------------+
  12. 6 rows in set (0.00 sec)
b:查询student表的第2条到4条记录
  1. mysql> select *from student limit 1,3;
  2. +-----+-----------+------+-------+------------+--------------------+
  3. | id | name | sex | birth | department | address |
  4. +-----+-----------+------+-------+------------+--------------------+
  5. | 902 | 张老二 | 男 | 1986 | 中文系 | 北京市昌平区 |
  6. | 903 | 张三 | 女 | 1990 | 中文系 | 湖南省永州市 |
  7. | 904 | 李四 | 男 | 1990 | 英语系 | 辽宁省皋新市 |
  8. +-----+-----------+------+-------+------------+--------------------+
  9. 3 rows in set (0.00 sec)
c:从student表查询所有学生的学号(id)、姓名(name) 和院系(department)的信息
  1. mysql> select id,name,department from student;
  2. +-----+-----------+--------------+
  3. | id | name | department |
  4. +-----+-----------+--------------+
  5. | 901 | 张老大 | 计算机系 |
  6. | 902 | 张老二 | 中文系 |
  7. | 903 | 张三 | 中文系 |
  8. | 904 | 李四 | 英语系 |
  9. | 905 | 王五 | 英语系 |
  10. | 906 | 王六 | 计算机系 |
  11. +-----+-----------+--------------+
  12. 6 rows in set (0.00 sec)
d:从student表中查询计算机系和英语系的学生的信息
  1. mysql> select *from student where department='计算机系' or department='英语系';
  2. +-----+-----------+------+-------+--------------+--------------------+
  3. | id | name | sex | birth | department | address |
  4. +-----+-----------+------+-------+--------------+--------------------+
  5. | 901 | 张老大 | 男 | 1985 | 计算机系 | 北京市海淀区 |
  6. | 904 | 李四 | 男 | 1990 | 英语系 | 辽宁省皋新市 |
  7. | 905 | 王五 | 女 | 1991 | 英语系 | 福建省厦门市 |
  8. | 906 | 王六 | 男 | 1988 | 计算机系 | 湖南省衡阳市 |
  9. +-----+-----------+------+-------+--------------+--------------------+
  10. 4 rows in set (0.00 sec)
e:从student表中查询年龄30~35岁的学生信息
  1. mysql> select *,year(now())-birth as age from student where birth < 1992 and birth > 1987;
  2. +-----+--------+------+-------+--------------+--------------------+------+
  3. | id | name | sex | birth | department | address | age |
  4. +-----+--------+------+-------+--------------+--------------------+------+
  5. | 903 | 张三 | 女 | 1990 | 中文系 | 湖南省永州市 | 33 |
  6. | 904 | 李四 | 男 | 1990 | 英语系 | 辽宁省皋新市 | 33 |
  7. | 905 | 王五 | 女 | 1991 | 英语系 | 福建省厦门市 | 32 |
  8. | 906 | 王六 | 男 | 1988 | 计算机系 | 湖南省衡阳市 | 35 |
  9. +-----+--------+------+-------+--------------+--------------------+------+
  10. 4 rows in set (0.00 sec)
f:从student表中查询每个院系有多少人
  1. mysql> select department,count(*) as number from student group by (department);
  2. +--------------+--------+
  3. | department | number |
  4. +--------------+--------+
  5. | 计算机系 | 2 |
  6. | 中文系 | 2 |
  7. | 英语系 | 2 |
  8. +--------------+--------+
  9. 3 rows in set (0.00 sec)
g:从score表中查询每个科目的最高分
  1. mysql> select c_name,max(grade) as max_grade from score group by c_name;
  2. +-----------+-----------+
  3. | c_name | max_grade |
  4. +-----------+-----------+
  5. | 计算机 | 98 |
  6. | 英语 | 94 |
  7. | 中文 | 95 |
  8. +-----------+-----------+
  9. 3 rows in set (0.00 sec)
h:查询李四的考试科目(c_name) 和考试成绩(grade)
  1. mysql> select c_name,grade from score inner join student on score.stu_id=student.id where student.name='李四';
  2. +-----------+-------+
  3. | c_name | grade |
  4. +-----------+-------+
  5. | 计算机 | 70 |
  6. | 英语 | 92 |
  7. +-----------+-------+
  8. 2 rows in set (0.01 sec)
i:用连接的方式查询所有学生的信息和考试信息
  1. mysql> select * from score inner join student on score.stu_id=student.id;
  2. +----+--------+-----------+-------+-----+-----------+------+-------+--------------+--------------------+
  3. | id | stu_id | c_name | grade | id | name | sex | birth | department | address |
  4. +----+--------+-----------+-------+-----+-----------+------+-------+--------------+--------------------+
  5. | 1 | 901 | 计算机 | 98 | 901 | 张老大 | 男 | 1985 | 计算机系 | 北京市海淀区 |
  6. | 2 | 901 | 英语 | 80 | 901 | 张老大 | 男 | 1985 | 计算机系 | 北京市海淀区 |
  7. | 3 | 902 | 计算机 | 65 | 902 | 张老二 | 男 | 1986 | 中文系 | 北京市昌平区 |
  8. | 4 | 902 | 中文 | 88 | 902 | 张老二 | 男 | 1986 | 中文系 | 北京市昌平区 |
  9. | 5 | 903 | 中文 | 95 | 903 | 张三 | 女 | 1990 | 中文系 | 湖南省永州市 |
  10. | 6 | 904 | 计算机 | 70 | 904 | 李四 | 男 | 1990 | 英语系 | 辽宁省皋新市 |
  11. | 7 | 904 | 英语 | 92 | 904 | 李四 | 男 | 1990 | 英语系 | 辽宁省皋新市 |
  12. | 8 | 905 | 英语 | 94 | 905 | 王五 | 女 | 1991 | 英语系 | 福建省厦门市 |
  13. | 9 | 906 | 计算机 | 90 | 906 | 王六 | 男 | 1988 | 计算机系 | 湖南省衡阳市 |
  14. | 10 | 906 | 英语 | 85 | 906 | 王六 | 男 | 1988 | 计算机系 | 湖南省衡阳市 |
  15. +----+--------+-----------+-------+-----+-----------+------+-------+--------------+--------------------+
  16. 10 rows in set (0.00 sec)
j:计算每个学生的总成绩
  1. mysql> select name,sum(grade) from score inner join student on score.stu_id=student.id group by name;
  2. +-----------+------------+
  3. | name | sum(grade) |
  4. +-----------+------------+
  5. | 张老大 | 178 |
  6. | 张老二 | 153 |
  7. | 张三 | 95 |
  8. | 李四 | 162 |
  9. | 王五 | 94 |
  10. | 王六 | 175 |
  11. +-----------+------------+
  12. 6 rows in set (0.00 sec)
k:计算每个考试科目的平均成绩
  1. mysql> select c_name,avg(grade) as '平均成绩' from score group by c_name;
  2. +-----------+--------------+
  3. | c_name | 平均成绩 |
  4. +-----------+--------------+
  5. | 计算机 | 80.7500 |
  6. | 英语 | 87.7500 |
  7. | 中文 | 91.5000 |
  8. +-----------+--------------+
  9. 3 rows in set (0.00 sec)
l:查询计算机成绩低于95的学生信息
  1. mysql> select stu.id,stu.name,stu.sex,stu.birth,stu.department,sc.c_name,sc.grade from sccore as sc inner join student as stu on stu.id=sc.stu_id where c_name='计算机' and grade<<95;
  2. +-----+-----------+------+-------+--------------+-----------+-------+
  3. | id | name | sex | birth | department | c_name | grade |
  4. +-----+-----------+------+-------+--------------+-----------+-------+
  5. | 902 | 张老二 | 男 | 1986 | 中文系 | 计算机 | 65 |
  6. | 904 | 李四 | 男 | 1990 | 英语系 | 计算机 | 70 |
  7. | 906 | 王六 | 男 | 1988 | 计算机系 | 计算机 | 90 |
  8. +-----+-----------+------+-------+--------------+-----------+-------+
  9. 3 rows in set (0.00 sec)
m:查询同时参加计算机和英语考试的学生的信息
  1. mysql> select a.* from score as sc inner join (select stu.* from student as stu inner join score as sc on sc.stu_id=stu.id where sc.c_name='计算机') as a on a.id=sc.stu_id where sc.c_name='英语';
  2. +-----+-----------+------+-------+--------------+--------------------+
  3. | id | name | sex | birth | department | address |
  4. +-----+-----------+------+-------+--------------+--------------------+
  5. | 901 | 张老大 | 男 | 1985 | 计算机系 | 北京市海淀区 |
  6. | 904 | 李四 | 男 | 1990 | 英语系 | 辽宁省皋新市 |
  7. | 906 | 王六 | 男 | 1988 | 计算机系 | 湖南省衡阳市 |
  8. +-----+-----------+------+-------+--------------+--------------------+
  9. 3 rows in set (0.00 sec)
n:将计算机考试成绩按从高到低进行排序
  1. mysql> select stu.id,stu.name,stu.sex,stu.birth,stu.department,stu.address,sc.c_name,sc.grade from score sc inner join student stu on sc.stu_id=stu.id where sc.c_name='计算机' order by grade desc;
  2. +-----+-----------+------+-------+--------------+--------------------+-----------+-------+
  3. | id | name | sex | birth | department | address | c_name | grade |
  4. +-----+-----------+------+-------+--------------+--------------------+-----------+-------+
  5. | 901 | 张老大 | 男 | 1985 | 计算机系 | 北京市海淀区 | 计算机 | 98 |
  6. | 906 | 王六 | 男 | 1988 | 计算机系 | 湖南省衡阳市 | 计算机 | 90 |
  7. | 904 | 李四 | 男 | 1990 | 英语系 | 辽宁省皋新市 | 计算机 | 70 |
  8. | 902 | 张老二 | 男 | 1986 | 中文系 | 北京市昌平区 | 计算机 | 65 |
  9. +-----+-----------+------+-------+--------------+--------------------+-----------+-------+
  10. 4 rows in set (0.00 sec)
o:从student表和score表中查询出学生的学号,然后合并查询结果
  1. mysql> select id from student union select stu_id from score;
  2. +-----+
  3. | id |
  4. +-----+
  5. | 901 |
  6. | 902 |
  7. | 903 |
  8. | 904 |
  9. | 905 |
  10. | 906 |
  11. +-----+
  12. 6 rows in set (0.00 sec)
p:查询姓张或者姓王的同学的姓名、院系和考试科目及成绩
  1. mysql> select stu.name,stu.department,sc.c_name,sc.grade from student as stu inner join
  2. score as sc on sc.stu_id=stu.id where stu.name like '张%' or stu.name like '王%';
  3. +-----------+--------------+-----------+-------+
  4. | name | department | c_name | grade |
  5. +-----------+--------------+-----------+-------+
  6. | 张老大 | 计算机系 | 计算机 | 98 |
  7. | 张老大 | 计算机系 | 英语 | 80 |
  8. | 张老二 | 中文系 | 计算机 | 65 |
  9. | 张老二 | 中文系 | 中文 | 88 |
  10. | 张三 | 中文系 | 中文 | 95 |
  11. | 王五 | 英语系 | 英语 | 94 |
  12. | 王六 | 计算机系 | 计算机 | 90 |
  13. | 王六 | 计算机系 | 英语 | 85 |
  14. +-----------+--------------+-----------+-------+
  15. 8 rows in set (0.00 sec)
q:查询都是湖南的学生的姓名、年龄、院系和考试科目及成绩
  1. mysql> select name,(year(now())-birth) as age,department,c_name,grade from score,(select *from student where address like '湖南%') as stu where stu.id=stu_id;
  2. +--------+------+--------------+-----------+-------+
  3. | name | age | department | c_name | grade |
  4. +--------+------+--------------+-----------+-------+
  5. | 张三 | 33 | 中文系 | 中文 | 95 |
  6. | 王六 | 35 | 计算机系 | 计算机 | 90 |
  7. | 王六 | 35 | 计算机系 | 英语 | 85 |
  8. +--------+------+--------------+-----------+-------+
  9. 3 rows in set (0.00 sec)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/435274
推荐阅读
相关标签
  

闽ICP备14008679号