《实验五 数据查询——复杂查询》实验说明
一、 适用课程:《数据库原理与应用》 实验学时:3
二、实验目的:
(1) 掌握SELECT语句的语法格式;
(2) 熟练运用SELECT语句进行多表连接查询;
(3) 熟练运用SELECT语句进行各种复杂类型的查询。
三、实验内容:
完成各类多表连接查询、嵌套查询和集合查询等。
四、实验要求:
(1) 熟练掌握连接查询:
 交叉连接查询
 内连接查询:掌握内连接所对应的SQL语句的显示和隐式结构形式,包括:等值与非等值连接查询、自然连接查询、表的自身连接查询
 外连接查询
(2) 熟练掌握嵌套查询
 通过实验验证在子查询的SELECT语句中不能使用ORDER BY子句;
 体会相关与不相关子查询的差异;
 掌握几类谓词的用法:IN,NOT IN、带有比较运算符的子查询、带有ANY(SOME)或ALL谓词的查询、带有EXISTS谓词的查询;
(3) 熟练掌握集合查询。
五、实验环境和仪器(软件、硬件):
(1) 硬件环境:普通联网的PC机;
(2) 操作系统:Windows 2003 server/Win7;
(3) 数据库管理系统:MSySQL。
六、实验步骤(程序,流程等):(包含实验记录,提供的数据、图表等资料内容)
注意:使用实验二建立的数据库完成以下查询,保存上机过程中的所有SQL命令,实验结束请备份数据库。
文件名命名:姓名拼音+学号后三位_实验号,如xiebing131_5。
(一) 针对学生-课程数据库查询
1、多表连接查询与嵌套查询

  1. 查询每一门课的间接先修课(即先修课的先修课)。
    mysql> select C1.Cno,C2.Cno from tb_course C1,tb_course C2 where C1.Cpno=C2.Cno;
    ±----±----+
    | Cno | Cno |
    ±----±----+
    | 2 | 2 |
    | 3 | 4 |
    | 6 | 5 |
    | 1 | 6 |
    | 4 | 6 |
    | 5 | 6 |
    ±----±----+
    6 rows in set (0.04 sec)

  2. 查询每个学生选修课程的情况。
    mysql> select tb_student.Sno,Sname,Ssex,Sage,Sdept,Cno,Grade from tb_student,sc where tb_student.Sno=sc.Sno;
    ±----------±------±-----±-----±------±----±------+
    | Sno | Sname | Ssex | Sage | Sdept | Cno | Grade |
    ±----------±------±-----±-----±------±----±------+
    | 201215121 | 李勇 | 男 | 20 | CS | 2 | 91 |
    | 201215121 | 李勇 | 男 | 20 | CS | 3 | 88 |
    | 201215121 | 李勇 | 男 | 20 | CS | 4 | 95 |
    | 201215121 | 李勇 | 男 | 20 | CS | 5 | 97 |
    | 201215121 | 李勇 | 男 | 20 | CS | 6 | 92 |
    | 201215122 | 刘晨 | 女 | 19 | CS | 2 | NULL |
    | 201215122 | 刘晨 | 女 | 19 | CS | 3 | 98 |
    ±----------±------±-----±-----±------±----±------+
    7 rows in set (0.00 sec)

  3. 查询每个学生及其选修课程的情况包括没有选修课程的学生(用外连接)。
    mysql> select tb_student.Sno,Sname,Ssex,Sage,Sdept,Cno,Grade from tb_student left outer join sc on (tb_student.Sno=sc.Sno);
    ±------------±-------±-----±-----±------±-----±------+
    | Sno | Sname | Ssex | Sage | Sdept | Cno | Grade |
    ±------------±-------±-----±-----±------±-----±------+
    | 201215121 | 李勇 | 男 | 20 | CS | 2 | 91 |
    | 201215121 | 李勇 | 男 | 20 | CS | 3 | 88 |
    | 201215121 | 李勇 | 男 | 20 | CS | 4 | 95 |
    | 201215121 | 李勇 | 男 | 20 | CS | 5 | 97 |
    | 201215121 | 李勇 | 男 | 20 | CS | 6 | 92 |
    | 201215122 | 刘晨 | 女 | 19 | CS | 2 | NULL |
    | 201215122 | 刘晨 | 女 | 19 | CS | 3 | 98 |
    | 201215123 | 王敏 | 女 | 18 | MA | NULL | NULL |
    | 201215129 | 张立 | 男 | 19 | IS | NULL | NULL |
    | 32018070132 | 刘嘉芊 | 女 | 20 | CS | NULL | NULL |
    ±------------±-------±-----±-----±------±-----±------+
    10 rows in set (0.04 sec)

  4. 查询选修2号课程且成绩在90分以上的所有学生的学号、姓名。
    mysql> select tb_student.Sno,Sname from tb_student,sc where tb_student.Sno=sc.Sno and Cno=‘2’ and Grade>90;
    ±----------±------+
    | Sno | Sname |
    ±----------±------+
    | 201215121 | 李勇 |
    ±----------±------+
    1 row in set (0.01 sec)

  5. 查询学生20060711选修课程的总学分。
    mysql> select sum(Ccredit) from sc,tb_course where sc.Sno=‘201215121’ and sc.Cno=tb_course.Cno;
    ±-------------+
    | sum(Ccredit) |
    ±-------------+
    | 17 |
    ±-------------+
    1 row in set (0.01 sec)

  6. 查询每个学生选修课程的总学分。
    mysql> select Sname,Sum(Ccredit) from tb_student left join sc on sc.Sno=tb_student.Sno left join tb_course on tb_course.Cno=sc.Cno group by Sname;
    ±-------±-------------+
    | Sname | Sum(Ccredit) |
    ±-------±-------------+
    | 李勇 | 17 |
    | 刘晨 | 6 |
    | 刘嘉芊 | NULL |
    | 王敏 | NULL |
    | 张立 | NULL |
    ±-------±-------------+
    5 rows in set (0.01 sec)

  7. 查询每个学生的学号、姓名、选修的课程名及成绩。
    mysql> select tb_student.Sno,tb_student.Sname,Cname,Grade from tb_student left join sc on sc.Sno=tb_student.Sno left join tb_course on tb_course.Cno=sc.Cno;
    ±------------±-------±---------±------+
    | Sno | Sname | Cname | Grade |
    ±------------±-------±---------±------+
    | 201215121 | 李勇 | 数学 | 91 |
    | 201215121 | 李勇 | 信息系统 | 88 |
    | 201215121 | 李勇 | 操作系统 | 95 |
    | 201215121 | 李勇 | 数据结构 | 97 |
    | 201215121 | 李勇 | 数据库 | 92 |
    | 201215122 | 刘晨 | 数学 | NULL |
    | 201215122 | 刘晨 | 信息系统 | 98 |
    | 201215123 | 王敏 | NULL | NULL |
    | 201215129 | 张立 | NULL | NULL |
    | 32018070132 | 刘嘉芊 | NULL | NULL |
    ±------------±-------±---------±------+
    10 rows in set (0.00 sec)

  8. 查询与“刘晨”在同一个系学习的学生(分别用嵌套查询和连接查询)。
    /嵌套查询/
    mysql> select Sname from tb_student where Sdept in (select Sdept from tb_student where Sname=‘刘晨’) and Sname<>‘刘晨’;
    ±-------+
    | Sname |
    ±-------+
    | 李勇 |
    | 刘嘉芊 |
    ±-------+
    2 rows in set (0.04 sec)

/连接查询/
mysql> select S1.Sname from tb_student S1,tb_student S2 where S1.Sdept=S2.Sdept and S2.Sname=‘刘晨’ and S1.Sname<>‘刘晨’;
±-------+
| Sname |
±-------+
| 李勇 |
| 刘嘉芊 |
±-------+
2 rows in set (0.00 sec)

  1. 查询选修了课程名为“信息系统”的学生学号和姓名。
    mysql> select Sno,Sname from tb_student where Sno in(select Sno from sc where Cno in(select Cno from tb_course where Cname=‘信息系统’));
    ±----------±------+
    | Sno | Sname |
    ±----------±------+
    | 201215121 | 李勇 |
    | 201215122 | 刘晨 |
    ±----------±------+
    2 rows in set (0.01 sec)

  2. 查询其他系中比信息系任意一个(其中某一个)学生年龄小的学生姓名和年龄。
    mysql> select Sname,Sage from tb_student where Sage<any (select Sage from tb_student where Sdept=‘CS’) and Sdept<>‘CS’;
    ±------±-----+
    | Sname | Sage |
    ±------±-----+
    | 王敏 | 18 |
    | 张立 | 19 |
    ±------±-----+
    2 rows in set (0.00 sec)

  3. 查询其他系中比信息系所有学生年龄都小的学生姓名及年龄。分别用ALL谓词和集函数。
    /使用ALL谓词/
    mysql> select Sname,Sage from tb_student where Sage<all (select Sage from tb_student where Sdept=‘CS’) and Sdept<>‘CS’;
    ±------±-----+
    | Sname | Sage |
    ±------±-----+
    | 王敏 | 18 |
    ±------±-----+
    1 row in set (0.00 sec)

/使用聚集函数/
mysql> select Sname,Sage from tb_student where Sage<(select min(Sage) from tb_student where Sdept=‘CS’) and Sdept<>‘CS’;
±------±-----+
| Sname | Sage |
±------±-----+
| 王敏 | 18 |
±------±-----+
1 row in set (0.01 sec)

  1. 查询所有选修了1号课程的学生姓名。(分别用嵌套查询和连接查询)
    mysql> select Sname from tb_student where Sno in(select Sno from sc where Cno=‘1’);
    ±------+
    | Sname |
    ±------+
    | 王敏 |
    ±------+
    1 row in set (0.00 sec)

  2. 查询没有选修1号课程的学生姓名。
    mysql> select Sname from tb_student where Sno not in(select Sno from sc where Cno=‘1’);
    ±-------+
    | Sname |
    ±-------+
    | 李勇 |
    | 刘晨 |
    | 张立 |
    | 刘嘉芊 |
    ±-------+
    4 rows in set (0.00 sec)

  3. 查询选修了全部课程的学生姓名。
    mysql> select Sname from tb_student where not exists(select * from tb_course where not exists (select * from sc where Sno=tb_student.Sno and Cno=tb_course.Cno));
    Empty set (0.00 sec)

  4. 查询至少选修了学生95002选修的全部课程的学生号码。
    mysql> select distinct Sno from sc scx where not exists (select * from sc scy where scy.Sno='201215122’and not exists (select * from sc scz where scz.Sno=scx.Sno and scz.Cno=scy.Cno));
    ±----------+
    | Sno |
    ±----------+
    | 201215121 |
    | 201215122 |
    ±----------+
    2 rows in set (0.01 sec)

  5. 查询选修了课程1或者选修了课程2的学生姓名。
    ysql> select Sname from tb_student where Sno in (select Sno from sc where Cno=‘1’ union select Sno from sc where Cno=‘2’);
    ±------+
    | Sname |
    ±------+
    | 李勇 |
    | 刘晨 |
    | 王敏 |
    ±------+
    3 rows in set (0.00 sec)

  6. 查询既选修了课程1又选修了课程2的学生姓名。
    mysql> select Sname from tb_student where Sno in(select Sno from sc where Cno=‘1’ and sc.Sno in (select Sno from sc where Cno=‘2’));
    ±------+
    | Sname |
    ±------+
    | 王敏 |
    ±------+
    1 row in set (0.00 sec)

  7. 查询既选修了课程1不选修课程2的学生姓名。
    mysql> select Sname from tb_student where Sno in(select Sno from sc where Cno=‘1’ and Sno not in (select Sno from sc where Cno=‘2’));
    Empty set (0.00 sec)

2、综合查询

  1. 查询与课程名“数据库”先行课相同的课程号和课程名。
    mysql> select Cno,Cname from tb_course where Cpno in(select Cpno from tb_course where Cname=‘数据库’);
    ±----±---------+
    | Cno | Cname |
    ±----±---------+
    | 5 | 数据结构 |
    | 6 | 数据库 |
    ±----±---------+
    2 rows in set (0.01 sec)

  2. 查询成绩在85分以上的学生选课情况,要求显示学生姓名、课程名及成绩。
    mysql> select Sname,Cname,Grade from tb_student,tb_course,sc where Grade>85 and sc.sno=tb_student.sno and sc.cno=tb_course.cno;
    ±------±---------±------+
    | Sname | Cname | Grade |
    ±------±---------±------+
    | 李勇 | 操作系统 | 95 |
    | 李勇 | 数据结构 | 97 |
    | 李勇 | 数据库 | 92 |
    | 李勇 | 数学 | 91 |
    | 李勇 | 信息系统 | 88 |
    | 刘晨 | 信息系统 | 98 |
    ±------±---------±------+
    6 rows in set (0.00 sec)

  3. 查询总成绩大于500、总学分大于30的学生学号、总成绩和总学分。
    mysql> select Sno,sum(Grade),sum(Ccredit) from sc,tb_course where sc.cno=tb_course.cno group by Sno having sum(Grade)>500 and sum(Ccredit)>30;
    Empty set (0.00 sec)
    /查询总成绩400,总学分大于15的/
    mysql> select Sno,sum(Grade),sum(Ccredit) from sc,tb_course where sc.cno=tb_course.cno group by Sno having sum(Grade)>400 and sum(Ccredit)>15;
    ±----------±-----------±-------------+
    | Sno | sum(Grade) | sum(Ccredit) |
    ±----------±-----------±-------------+
    | 201215121 | 463 | 17 |
    ±----------±-----------±-------------+
    1 row in set (0.00 sec)

  4. 查询每门课程及其被选修的情况。
    mysql> select Sno,sc.Cno,Cname,Grade from tb_course,sc where sc.Cno=tb_course.Cno;
    ±----------±----±---------±------+
    | Sno | Cno | Cname | Grade |
    ±----------±----±---------±------+
    | 201215123 | 1 | DB_ios | 85 |
    | 201215121 | 4 | 操作系统 | 95 |
    | 201215121 | 5 | 数据结构 | 97 |
    | 201215121 | 6 | 数据库 | 92 |
    | 201215121 | 2 | 数学 | 91 |
    | 201215122 | 2 | 数学 | NULL |
    | 201215123 | 2 | 数学 | 80 |
    | 201215121 | 3 | 信息系统 | 88 |
    | 201215122 | 3 | 信息系统 | 98 |
    ±----------±----±---------±------+
    9 rows in set (0.00 sec)

  5. 查询所有学生都选修的课程号和课程名。
    mysql> select Cno,Cname from tb_course where Cno in(select distinct Cno from sc group by Cno having count()=(select count() from tb_student));
    Empty set (0.03 sec)
    /向sc表中插入数据之后/
    mysql> select Cno,Cname from tb_course where Cno in(select distinct Cno from sc group by Cno having count()=(select count() from tb_student));
    ±----±------+
    | Cno | Cname |
    ±----±------+
    | 2 | 数学 |
    ±----±------+
    1 row in set (0.00 sec)

  6. 查询信息系所有学生都选修的课程号和课程名。
    /试出来的….但是具体逻辑是什么意思其实我不清楚/
    mysql> select Cno,Cname from tb_course where Cno in(select distinct Cno from sc sc1 where sc1.Cno in(select distinct Cno from sc sc2 where sc2.Cno=Cno and sc2.Sno not in(select Sno from tb_student s1 where Sdept=‘CS’) and sc1.Sno in (select Sno from tb_student s2 where Sdept=‘CS’)));
    ±----±------+
    | Cno | Cname |
    ±----±------+
    | 2 | 数学 |
    ±----±------+
    1 row in set (0.00 sec)

  7. 查询没有选修“数据库”这门课程的学生学号和姓名。
    mysql> select Sno,Sname from tb_student where Sno not in(select Sno from sc where Cno in (select Cno from tb_course where Cname=‘数据库’));
    ±----------±-------+
    | Sno | Sname |
    ±----------±-------+
    | 201215122 | 刘晨 |
    | 201215123 | 王敏 |
    | 201215129 | 张立 |
    | 201807132 | 刘嘉芊 |
    ±----------±-------+
    4 rows in set (0.01 sec)

  8. 查询至少选修了“刘晨”所选全部课程的学生学号和姓名。
    mysql> select Sno,Sname from tb_student where Sno in(select Sno from sc scx where not exists(select * from sc scy where scy.Sno in(select Sno from tb_student where Sname=‘刘晨’) and not exists(select * from sc scz where scz.Sno=scx.Sno and scz.Cno=scy.Cno)));
    ±----------±------+
    | Sno | Sname |
    ±----------±------+
    | 201215121 | 李勇 |
    | 201215122 | 刘晨 |
    ±----------±------+
    2 rows in set (0.00 sec)

  9. 查询至少选修了数据库和操作系统的学生学号和姓名。
    mysql> select Sno,Sname from tb_student where Sno in(select Sno from sc scx where not exists(select * from sc scy where Cno in(select Cno from tb_course where Cname='数据库’or Cname=‘操作系统’) and not exists(select * from sc scz where scz.Sno=scx.Sno and scz.Cno=scy.Cno)));
    ±----------±------+
    | Sno | Sname |
    ±----------±------+
    | 201215121 | 李勇 |
    ±----------±------+
    1 row in set (0.00 sec)

  10. 查询选修了数据库但没选修操作系统的学生学号和姓名。
    /使用了视图/
    mysql> create view v_classdb as select Sno,Sname from tb_student where Sno in(select Sno from sc where Cno in(select Cno from tb_course where Cname=‘数据库’));
    Query OK, 0 rows affected (0.03 sec)

mysql> select Sno,Sname from v_classdb where Sno not in(select Sno from sc where Cno in(select Cno from tb_course where Cname=‘操作系统’));
±----------±-------+
| Sno | Sname |
±----------±-------+
| 201807132 | 刘嘉芊 |
±----------±-------+
1 row in set (0.02 sec)

(二)针对实验二建立的SPJ数据库查询

  1. 查询给工程J1供应红色零件的供应商号;
    mysql> select Sno from tb_spj,tb_p where Jno=‘J1’ and tb_spj.Pno=tb_p.Pno and Color=‘RED’;
    ±----+
    | Sno |
    ±----+
    | S1 |
    | S3 |
    ±----+
    2 rows in set (0.00 sec)

  2. 查询工程J1使用天津供应商供应的零件号;
    mysql> select Pno from tb_spj,tb_s where tb_s.Sno=tb_spj.Sno and Jno=‘J1’ and CITY=‘天津’;
    ±----+
    | Pno |
    ±----+
    | P1 |
    | P5 |
    ±----+
    2 rows in set (0.01 sec)

  3. 查询北京供应的且重量小于15的零件号和零件名;
    mysql> select distinct tb_p.Pno,Pname from tb_p,tb_s,tb_spj where Weight<15 and CITY=‘北京’ and tb_spj.Sno=tb_s.sno and tb_spj.Pno=tb_p.Pno;
    ±----±-------+
    | Pno | Pname |
    ±----±-------+
    | P3 | 螺丝刀 |
    | P1 | 螺母 |
    ±----±-------+
    2 rows in set (0.01 sec)

  4. 查询供应红色零件且状态大于20的供应商号和供应商名;
    mysql> select distinct tb_s.Sno,Sname from tb_s,tb_spj,tb_p where Color=‘RED’ and STATUS>20 and tb_spj.Sno=tb_s.Sno and tb_spj.Pno=tb_p.Pno;
    ±-----±-------+
    | Sno | Sname |
    ±-----±-------+
    | S3 | 东方红 |
    | S5 | 为民 |
    ±-----±-------+
    2 rows in set (0.00 sec)

  5. 查询给天津的工程供应齿轮零件的供应商号和供应商名;
    mysql> select distinct s.Sno,Sname from tb_s s,tb_j j,tb_p p,tb_spj spj where j.CITY=‘天津’ and PNAME=‘齿轮’ and spj.Sno=s.sno and spj.pno=p.pno and spj.jno=j.jno;
    ±-----±-------+
    | Sno | Sname |
    ±-----±-------+
    | S4 | 丰泰盛 |
    | S5 | 为民 |
    ±-----±-------+
    2 rows in set (0.00 sec)

  6. 查询由天津供应商供给天津工程的零件名;
    mysql> select distinct Pname from tb_p p,tb_spj spj,tb_s s,tb_j j where s.CITY=‘天津’ and j.city=‘天津’ and spj.sno=s.sno and spj.jno=j.jno and p.pno=spj.pno;
    ±------+
    | Pname |
    ±------+
    | 螺母 |
    | 齿轮 |
    ±------+
    2 rows in set (0.00 sec)

  7. 查询与供应商 S2 在同一城市的供应商号和供应商名;
    mysql> select sno,sname from tb_s where city in(select city from tb_s where sno=‘S2’);
    ±-----±-------+
    | sno | sname |
    ±-----±-------+
    | S2 | 盛锡 |
    | S3 | 东方红 |
    ±-----±-------+
    2 rows in set (0.00 sec)

  8. 查询与齿轮零件颜色相同的零件号和零件名;
    mysql> select pno,pname from tb_p where color in(select color from tb_p where pname=‘齿轮’);
    ±----±-------+
    | pno | pname |
    ±----±-------+
    | P1 | 螺母 |
    | P4 | 螺丝刀 |
    | P6 | 齿轮 |
    ±----±-------+
    3 rows in set (0.00 sec)

  9. 查询不使用零件号为P2的工程号和工程名。
    mysql> select Jno,Jname from tb_j where Jno not in(select Jno from tb_spj where Pno=‘P2’);
    ±----±---------+
    | Jno | Jname |
    ±----±---------+
    | J7 | 半导体厂 |
    | J3 | 弹簧厂 |
    | J5 | 机车厂 |
    | J1 | 三建 |
    | J6 | 无线电厂 |
    ±----±---------+
    5 rows in set (0.01 sec)

  10. 查询供应商S3没有供应的零件名。
    mysql> select Pname from tb_p where pno not in(select Pno from tb_spj where Sno=‘S3’);
    ±-------+
    | Pname |
    ±-------+
    | 螺栓 |
    | 螺丝刀 |
    | 凸轮 |
    | 齿轮 |
    ±-------+
    4 rows in set (0.00 sec)

  11. 查询不供应红色产品的厂家号和厂家名。
    mysql> select Sno,Sname from tb_s where Sno not in(select Sno from tb_spj where pno in(select pno from tb_p where color=‘RED’));
    ±-----±------+
    | Sno | Sname |
    ±-----±------+
    | S2 | 盛锡 |
    ±-----±------+
    1 row in set (0.00 sec)

  12. 查询没有使用天津生产的零件的工程号码。
    mysql> select Jno from tb_j where jno not in(select jno from tb_spj where sno in(select sno from tb_s where city=‘天津’));
    ±----+
    | Jno |
    ±----+
    | J6 |
    | J7 |
    | J5 |
    ±----+
    3 rows in set (0.00 sec)

  13. 查询未采用由London供应者提供颜色为Red零件的工程名。
    /London 改为北京 进行查询/
    mysql> select Jname from tb_j where Jno not in(select Jno from tb_spj,tb_s,tb_p where tb_spj.Sno=tb_s.Sno and tb_spj.Pno=tb_p.Pno and Color=‘Red’ and CITY=‘北京’);
    ±---------+
    | Jname |
    ±---------+
    | 半导体厂 |
    | 弹簧厂 |
    | 机车厂 |
    | 无线电厂 |
    | 一汽 |
    | 造船厂 |
    ±---------+
    6 rows in set (0.00 sec)

  14. 查询使用了全部零件的工程名
    mysql> select Jname from tb_j where not exists(select * from tb_p where not exists(select * from tb_spj where tb_spj.pno=tb_p.pno and tb_spj.jno=tb_j.jno));
    Empty set (0.00 sec)

  15. 查询供应了全部零件的供应商名。
    mysql> select Sname from tb_s where not exists(select * from tb_p where not exists(select * from tb_spj where tb_spj.pno=tb_p.pno and tb_spj.sno=tb_s.sno));
    Empty set (0.00 sec)

  16. 查询所有London供应商都供应的零件名。
    /伦敦改为北京进行查询/
    mysql> select Pname from tb_p where not exists(select * from tb_s where city=‘北京’ and not exists(select * from tb_spj where tb_spj.sno=tb_s.sno and tb_spj.pno=tb_p.pno));
    ±-------+
    | Pname |
    ±-------+
    | 螺丝刀 |
    ±-------+
    1 row in set (0.00 sec)

  17. 查询London的所有工程都使用的零件名。
    /伦敦改为北京进行查询/
    mysql> select Pname from tb_p where not exists(select * from tb_j where city=‘北京’ and not exists(select * from tb_spj where tb_spj.jno=tb_j.jno and tb_spj.pno=tb_p.pno));
    ±-------+
    | Pname |
    ±-------+
    | 螺母 |
    | 螺丝刀 |
    | 凸轮 |
    ±-------+
    3 rows in set (0.00 sec)

  18. 查询至少使用供应商S1所供应的全部零件的工程名。
    mysql> select Jname from tb_j where not exists(select * from tb_p where not exists(select * from tb_s where tb_s.sno=‘S1’ and not exists(select * from tb_spj where tb_spj.sno=tb_s.sno and tb_spj.pno=tb_p.pno and tb_spj.jno=tb_j.jno)));
    ±---------+
    | Jname |
    ±---------+
    | 半导体厂 |
    | 机车厂 |
    | 无线电厂 |
    ±---------+
    3 rows in set (0.00 sec)

  19. 查询至少供应了工程J3所使用的全部零件的供应商号和供应商名。
    mysql> select Sno,Sname from tb_s s where not exists(select * from tb_spj spj1 where spj1.Jno=‘J3’ and not exists(select * from tb_spj spj2 where spj1.pno=spj2.pno and s.sno=spj2.sno));
    Empty set (0.00 sec)

  20. 查询(至少)供应零件号为P1或P2的供应商名。
    mysql> select distinct Sname from tb_s,tb_spj where tb_spj.sno=tb_s.sno and (pno=‘P1’ or pno=‘P2’);
    ±-------+
    | Sname |
    ±-------+
    | 精益 |
    | 东方红 |
    | 为民 |
    ±-------+
    3 rows in set (0.00 sec)

  21. 查询(至少)供应零件号为P1、P2两种零件的供应商名。
    mysql> select Sname from tb_s where sno in(select Sno from tb_spj spj1 where pno=‘P1’ and spj1.Sno in(select Sno from tb_spj spj2 where pno=‘P2’));
    ±------+
    | Sname |
    ±------+
    | 精益 |
    ±------+
    1 row in set (0.01 sec)

  22. 查询供应零件号为P2但不供应P3的供应商名。
    mysql> select Sname from tb_s where sno in(select Sno from tb_spj spj1 where pno<>‘P1’ and spj1.Sno not in(select Sno from tb_spj spj2 where pno=‘P3’));
    ±-------+
    | Sname |
    ±-------+
    | 精益 |
    | 丰泰盛 |
    ±-------+
    2 rows in set (0.00 sec)

  23. 查询供应螺母但不供应齿轮的供应商名。
    mysql> select Sname from tb_s where Sno in(select Sno from tb_spj spj1 where Pno in(select Pno from tb_p where Pname=‘螺母’) and spj1.Sno not in(select Sno from tb_spj spj2 where spj2.Pno in (select Pno from tb_p where Pname=‘齿轮’)));
    ±-------+
    | Sname |
    ±-------+
    | 精益 |
    | 东方红 |
    ±-------+
    2 rows in set (0.00 sec)

七、实验报告的撰写要求:
(1) 提交命令文档和备份的数据库;
(2) 列出遇到的问题和解决办法;
(3) 列出没有解决的问题。
八、实验结果评析要求(用于综合性实验、模拟实训等):

mysql数据查询——复杂查询相关推荐

  1. MySQL数据通过SQL查询指定数据表的字段名及字段备注

    MySQL数据通过SQL查询指定数据表的字段名及字段备注 SELECT COLUMN_NAME,COLUMN_COMMENT FROM INFORMATION_SCHEMA.Columns WHERE ...

  2. MySQL数据操作与查询笔记 • 【目录】

    持续更新中- 我的大学笔记>>> 章节 内容 第1章 MySQL数据操作与查询笔记 • [第1章 MySQL数据库基础] 第2章 MySQL数据操作与查询笔记 • [第2章 表结构管 ...

  3. c mysql数据库函数库查询_Mysql数据库使用concat函数执行SQL注入查询

    SQL注入语句有时候会使用替换查询技术,就是让原有的查询语句查不到结果出错,而让自己构造的查询语句执行,并把执行结果代替原有查询语句查询结果显示出来. 例如:原本查询语句是 select userna ...

  4. MySQL数据库内连接查询inner join...on

    1. 连接查询介绍 连接查询可以实现多个表的查询,当查询的字段数据来自不同的表就可以使用连接查询来完成. 连接查询可以分为: 内连接查询 左连接查询 右连接查询 自连接查询 2. 内连接查询 查询两个 ...

  5. 《MySQL数据操作与查询》- 维护学生信息、老师信息和成绩信息 支持按多种条件组合查询学生信息和成绩信息

    综合项目需求 一.系统整体功能 系统需支持以下功能: 维护学生信息.老师信息和成绩信息 支持按多种条件组合查询学生信息和成绩信息 学生 Student(id,班级id,学号,姓名,性别,电话,地址,出 ...

  6. 《MySQL数据操作与查询》- 综合项目 - 航空售票系统

    Mysql & SqlServer综合项目需求 1.系统整体功能 系统需支持以下功能: 维护客户信息.航班信息和票务信息 支持客户按多种条件组合查询航班信息和票务信息 支持客户根据票务信息订购 ...

  7. python 查询mysql数据导出excl_python查询mysql并生成excel表

    需求说明 开发不愿意单独为某个项目做后台 并且运营那边需要合并多个表的数据 因此找上了我. 要求每周执行一次.月初也执行一次 要查询2个mysql数据库多个表并生成excel表 我的想法 找开发要sq ...

  8. mysql user表添加记录_《MySQL数据操作与查询》- 返校复习课练习题,创建数据库user_system,创建数据表user及user_ext...

    一.其它(共18题,100分) 1.创建数据库user_system CREATE DATABASE user_system 2.在数据库user_system中创建数据表user及user_ext, ...

  9. MySQL数据操作与查询笔记 • 【第7章 连接查询】

    全部章节   >>>> 本章目录 7.1 内连接查询 7.1.1 交叉连接(笛卡尔积) 7.1.2 内连接查询概要 7.1.3 内连接案例 7.1.4 自然连接 7.2 多表连 ...

  10. MySQL数据分组与查询

    一 . 多表连接查询: 连接是在多个表之间通过一定的连接条件,使表之间发生关联,进而能从多个表之间获得数据 N个表相连时,至少需要N-1个连接条件 笛卡尔积: select emp.empno,emp ...

最新文章

  1. java html提取_2020年全新Java学习路线,含配套资料,更易上手 - 打不过就跑吧
  2. 前端存储 (2) - sessionStorage ,localStorage
  3. 在浏览器地址栏输入url的后的过程
  4. idea中ssm自动配置
  5. 防火墙放开oracle远程,oracleMTS模式下防火墙如何开通
  6. Python数据的精度
  7. 京东物流系统架构演进中的最佳实践
  8. 几大图片加载框架比较
  9. MySQL初始密码忘记了怎么办
  10. 小程序-实现列表- 搜索功能的实现(6)
  11. XRouter 一个轻量级的Android路由框架,基于ARouter上进行改良,优化Fragment的使用,可结合XPage使用
  12. 不带头结点的单链表的创建(头插法和尾插法)
  13. cmd下查询公网ip地址
  14. 编辑距离算法原理及其实现
  15. NOIP 2012 普及组 复赛 culture 文化之旅
  16. 将本地docker镜像推送到阿里云仓库
  17. linux 锐捷客户端 脚本,基于802.1x的锐捷linux客户端认证方法(最新)
  18. js visibility
  19. 高校俱乐部发福利啦,晚了就没了,速度~
  20. CSDN的C1考试,质数问题,一不小心就错失得分

热门文章

  1. Redis学习笔记【04】 - 字符串
  2. 远程调试为何要亲历现场,也许也可以这样解决
  3. response对象的作用
  4. 简易 Python 脚本查询嵊泗船票
  5. mmdetection之cascade_rcnn快速训练自己数据教程(亲测!)
  6. 使用window便签功能实现桌面窗口置顶
  7. php定时任务每天零点执行,php执行定时任务
  8. linux安装百度云盘
  9. (一).NET的历史介绍
  10. php mysql批量删除_php批量删除操作代码分享