一、实验目的:
熟练掌握数据表的连接查询、嵌套查询和集合查询,为后续学习作准备。
二、实验属性(验证性)
熟练掌握SQL管理控制台的使用;
掌握表的复杂查询操作。
三、 实验仪器环境与要求
PC机,MySQL SQLyog。
四、 实验要求
1.复习教材第三章,熟悉SQL语句;
2.掌握多表查询语句的一般格式;
3.掌握多表无条件、有条件查询及查询结果排序与分组;
4.掌握多表连接、嵌套和集合查询语句的一般格式及各种使用方法。
五、实验原理
SQL语言基本应用。
六、 实验步骤:
1、启动MySQL SQLyog;
2、附加数据库;
(1)表Student:
(2)表Course:
(3)表SC:
3、 验证如下例子:
SELECT Student.*, SC.* FROM Student, SC WHERE Student.Sno = SC.Sno;
SELECT Student.Sno, Student.Sname, Course.Cname, SC.Grade FROM Student, SC, Course WHERE Student.Sno = SC.Sno AND Sc.Cno = Course.Cno ORDER BY Sc.Sno, Sc.Cno DESC;
SELECT FIRST.Cno, FIRST.Cpno, SECOND.Cname, SECOND.Ccredit FROM Course FIRST, Course SECOND WHERE FIRST.Cpno = SECOND.Cno;
SELECT SECOND.Sname FROM Student FIRST, Student SECOND WHERE FIRST.Sage = SECOND.Sage AND First.Sname = ‘张林林‘ AND SECOND.Sdept = ‘计算机系‘;
SELECT Cno FROM Course WHERE Cno NOT IN ( SELECT Cno FROM Student, SC WHERE Student.Sname = ‘王位‘ AND Student.Sno = SC.Sno);
SELECT Sage, Sname FROM Student WHERE Sno IN ( SELECT Sno FROM Course, SC WHERE Course.Cno = ‘4‘ AND Course.Cno = SC.Cno);
SELECT Sname,Sage FROM Student WHERE Sage>ALL (SELECT Sage FROM Student WHERE Ssex=‘女‘) AND Ssex=‘男‘;
SELECT Sname,Sage FROM Student WHERE Sage<=ALL (SELECT Sage FROM Student WHERE Sdept=‘数学系‘) AND Sdept<>‘数学系‘ ;
SELECT Sname,Sdept FROM Student,Sc WHERE Sc.Cno=‘1‘ AND Student.Sno=Sc.Sno;
SELECT Sname,Sdept FROM Student WHERE NOT EXISTS (SELECT* FROM Course WHERE NOT EXISTS (SELECT* FROM Sc WHERE Sno=Student.Sno AND Cno=Course.Cno));
该数据库里没有学生选修了所有课程。
1. 查询计算机科学系的学生或年龄不大于20岁的学生信息。
SELECT * FROM Student WHERE Sdept=‘计算机科学系‘ UNION SELECT * FROM Student WHERE Sage<=20;
2. 查询数学系中年龄不大于20岁的学生。
SELECT* FROM Student WHERE Sdept =‘数学系‘ AND Sage<=20;
3. 查询数学系的学生与年龄不大于20岁的学生的差集。
SELECT * FROM Student WHERE Sdept=‘数学系‘ EXCEPT SELECT * FROM Student WHERE Sage<=20;
由于MySQL 不支持 EXCEPT 运算符,所以在sqlyog中报错
故可有如下更改,有同样的效果
SELECT * FROM Student WHERE Sdept=‘数学系‘ AND Sage>20;
以上均已试验且查询成功,欢迎各位大佬留言指正!
原文:https://www.cnblogs.com/Blogwjl/p/14777395.html