我们接着上一篇继续学习哦
子查询
基于集合的子查询
通过IN
和 NOTIN
来指明集合
// 查询跟李勇在一个系的同学
// 首先确定李勇所在的系,然后最为查询条件
1> SELECT Sno, Sname, Sdept FROM student
2> WHERE Sdept IN (
3> SELECT Sdept FROM student WHERE Sname="李勇");
4>
5> go
Sno DSname DSdept
--------D----------D--------------------
16101132D李勇 D计算机系
16101321D张锦杰 D计算机系
(2 行受影响)
1>
// 如果想排除李勇
1> SELECT Sno, Sname, Sdept FROM student
2> WHERE Sdept IN (
3> SELECT Sdept FROM student WHERE Sname="李勇")
4> AND Sname!="李勇";
5> go
Sno DSname DSdept
--------D----------D--------------------
16101321D张锦杰 D计算机系
(1 行受影响)
1>
用IN形式的子查询就是向外层查询的WHERE语句返回一个值的集合
// 查询成绩小于 90的学生的信息
1> SELECT Sno,Sname,Sdept FROM student
2> WHERE Sno IN(
3> SELECT Sno FROM SC
4> WHERE grade < 90);
5> go
Sno DSname DSdept
--------D----------D--------------------
13212311D张海 D数学系
16101132D李勇 D计算机系
16101321D张锦杰 D计算机系
16123211D吴斌 D信息系
(4 行受影响)
1>
// 还可以使用内连接
1> SELECT student.Sno,Sname FROM student JOIN SC
2> ON student.Sno = SC.Sno WHERE grade < 90;
3> go
Sno DSname
--------D----------
13212311D张海
13212311D张海
16101132D李勇
16101132D李勇
16101321D张锦杰
16101321D张锦杰
16123211D吴斌
16123211D吴斌
16123211D吴斌
16123211D吴斌
(10 行受影响)
// 去掉重复即可
// 查找选修了c01并且是计算机系的结果
1> SELECT Sname, Sno, Sdept FROM student
2> WHERE Sno IN(
3> SELECT Sno FROM SC WHERE Cno = "c01")
4> AND Sdept = "计算机系";
5> go
Sname DSno DSdept
----------D--------D--------------------
李勇 D16101132D计算机系
张锦杰 D16101321D计算机系
// 查询选修了VB的课程的学生的信息
1> SELECT Sno,Sname FROM student
2> WHERE Sno IN(
3> SELECT Sno FROM SC
4> WHERE Cno IN (
5> SELECT Cno FROM course
6> WHERE Cname ="VB"));
7> go
Sno 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 C
4> ON SC.Cno = C.Cno
5> WHERE Cname="VB")
6> GROUP BY Sno;
7> go
学号 D选课门数 D平均成绩
--------D-----------D-----------
13212311D 3D 89
16101132D 3D 60
16123211D 4D 44
(3 行受影响)
// 子查询首先将SC于course左链接,查找选修了VB的学生的学号
1> SELECT Sno FROM SC JOIN course C
2> ON SC.Cno = C.Cno
3> WHERE Cname="VB";
4> go
Sno
--------
13212311
16101132
16123211
// 然后使用这些学号在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 = 20
2> WHERE Sno = "12122312";
3> go
(1 行受影响)