我们接着上一篇继续学习哦
子查询
基于集合的子查询
通过IN
和 NOTIN
来指明集合
// 查询跟李勇在一个系的同学// 首先确定李勇所在的系,然后最为查询条件1> SELECT Sno, Sname, Sdept FROM student2> WHERE Sdept IN (3> SELECT Sdept FROM student WHERE Sname="李勇");4>5> goSno DSname DSdept--------D----------D--------------------16101132D李勇 D计算机系16101321D张锦杰 D计算机系(2 行受影响)1>// 如果想排除李勇1> SELECT Sno, Sname, Sdept FROM student2> WHERE Sdept IN (3> SELECT Sdept FROM student WHERE Sname="李勇")4> AND Sname!="李勇";5> goSno DSname DSdept--------D----------D--------------------16101321D张锦杰 D计算机系(1 行受影响)1>
用IN形式的子查询就是向外层查询的WHERE语句返回一个值的集合
// 查询成绩小于 90的学生的信息1> SELECT Sno,Sname,Sdept FROM student2> WHERE Sno IN(3> SELECT Sno FROM SC4> WHERE grade < 90);5> goSno DSname DSdept--------D----------D--------------------13212311D张海 D数学系16101132D李勇 D计算机系16101321D张锦杰 D计算机系16123211D吴斌 D信息系(4 行受影响)1>// 还可以使用内连接1> SELECT student.Sno,Sname FROM student JOIN SC2> ON student.Sno = SC.Sno WHERE grade < 90;3> goSno DSname--------D----------13212311D张海13212311D张海16101132D李勇16101132D李勇16101321D张锦杰16101321D张锦杰16123211D吴斌16123211D吴斌16123211D吴斌16123211D吴斌(10 行受影响)// 去掉重复即可
// 查找选修了c01并且是计算机系的结果1> SELECT Sname, Sno, Sdept FROM student2> WHERE Sno IN(3> SELECT Sno FROM SC WHERE Cno = "c01")4> AND Sdept = "计算机系";5> goSname DSno DSdept----------D--------D--------------------李勇 D16101132D计算机系张锦杰 D16101321D计算机系
// 查询选修了VB的课程的学生的信息1> SELECT Sno,Sname FROM student2> WHERE Sno IN(3> SELECT Sno FROM SC4> WHERE Cno IN (5> SELECT Cno FROM course6> WHERE Cname ="VB"));7> goSno DSname--------D----------13212311D张海16101132D李勇16123211D吴斌(3 行受影响)
//1> SELECT Sno 学号, COUNT(*) 选课门数, AVG(grade) 平均成绩2> FROM SC WHERE Sno IN (3> SELECT Sno FROM SC JOIN course C4> ON SC.Cno = C.Cno5> WHERE Cname="VB")6> GROUP BY Sno;7> go学号 D选课门数 D平均成绩--------D-----------D-----------13212311D 3D 8916101132D 3D 6016123211D 4D 44(3 行受影响)// 子查询首先将SC于course左链接,查找选修了VB的学生的学号1> SELECT Sno FROM SC JOIN course C2> ON SC.Cno = C.Cno3> WHERE Cname="VB";4> goSno--------132123111610113216123211// 然后使用这些学号在SC中查找分组统计// 最终得到结果
查询语句到此为止啦下面我们将学习数据库的插入和删除操作
插入数据
// 注意括号中的需要一一对应哦1> INSERT INTO student VALUES ('16201321', '呜呜呜',23, '女','经管');2> go(1 行受影响)1>
// 如果是只插入某几个字段,那么你要注意了哦,其他的字段是否定义为是可以为空1> INSERT INTO student(Sno,Sname) VALUES ('1620131', 'S哒的撒');2> go(1 行受影响)
更新数据
无条件更新
1> UPDATE student SET Sage = Sage + 1;2> go(8 行受影响)
有条件的更新
// 1> UPDATE student SET Sage = 202> WHERE Sno = "12122312";3> go(1 行受影响)