SQL 多表查詢 巢狀查詢

2021-10-11 02:25:13 字數 3082 閱讀 1171

多表查詢

1、結構:select from where

2、笛卡爾積查詢

select * from student,course

select * from student,sdept

3、查詢每個學院的學生情況

select * from student,sdept where student.deptno=sdept.deptno

4、查詢計算機學院所有的學生記錄

select * from student,sdept where student.deptno=sdept.deptno and sdept.dname='計算機與資訊工程學院'

select student.*,dname,addree,manger,telephone from student,sdept where student.deptno=sdept.deptno 

and sdept.dname='計算機與資訊工程學院'

5、使用join連線欄位的查詢

(1)內連線查詢select from 表1 inner join 表2 on 連線條件

查詢每個學院學生的基本情況

select * from student inner join sdept on student.deptno=sdept.deptno

查詢選修了課程的所有學生的姓名課程名稱以及成績

select sname,cname,grade from student inner join score on student.sno=score.sno inner join course on score.cno=course.cno

(2)使用自然連線的查詢 select from 表一 natural join sdept

例:查詢所有學院學生的情況

select * from student natural join sdept

例:查詢每個學生的基本資訊和成績資訊,去掉重複列

select * from student natural join score

(3)左外連線 select ...from 表1 left outer join 表2 on 連線條件

select * from student left outer join score on student.sno=course.sno

(4)左外連線 select ...from 表1 right  outer join sdept on 連線條件

select * from sdept right outer join course on sdept.deptno=course.institute

6、自身鏈結 select ...from 表 表名1,表 表名2

例;查詢與高天在同一院系的所有學生

select s2.* from student s1,student s2 where s1.deptno=s2.deptno and s1.sname='高天'

例;查詢與高天在同一院系的所有學生,不包括高天

select s2.* from student s1,student s2 where s1.deptno=s2.deptno and s1.sname='高天'

查詢學生表中年齡低於計算機學院最小年齡的所有學生姓名

select sname from student where sageselect sname from student where sage<(select min(sage)from student,sdept where student.deptno=sdept.deptno and dname='計算機與資訊工程學院')

一使用巢狀查詢

1.查詢通訊學院所有學生的基本情況

select * from student where deptno=(select deptno from sdept where dname like '%通訊%')

2.查詢選修了a001這門課程的所有學生資訊

select * from student where sno in(select sno from score  where cno='a001')

3.使用any 查詢選修了a001這門課程的所有學生資訊

select * from student where sno=any(select sno from score where cno='a001')

4.查詢編號為「04」院系中年齡小於「01」院系的最小年齡的學生資訊

select * from student where deptno='04' sage<(select min(sage) from student where deptno='01')

select * from student where deptno='04' sage5.查詢編號為「04」院系中年齡小於「01」院系的任何一位學生年齡的學生資訊

select * from student where deptno='04' sageselect * from student where deptno='04' sage<(select max(sage) from student where deptno='01')

6.查詢選修了c語言學生的學號和姓名

select sno,sname from student where sno in (select sno from score where cno=(select cno from course where cname='c語言'))

select student.sno,sname from student,course,score where student.sno=score.sno and score.cno=course.cnoand cname='c語言'

7.查詢學號為「0703020216」這名學生的總學分

select sum(ccredit) from course where cno in

(select cno from score where sno='0703020216')

8.查詢計算機學院的學生人數

select count(*) from student where deptno=

(select deptno from sdept where dname='計算機學院')

SQL 多表查詢

不同的 sql join inner join 內連線 如果表中至少有乙個匹配,也從左表返回所有的行 left join 左連線 即使右表中沒有匹配,也從右表返回所有的行 right join 右連線 即使左表中沒有匹配,也從右表返回所有的行 full join 全連線 只有其中乙個表中存在匹配也從...

SQL 多表查詢

join操作符 1.笛卡爾積,rxs 可直接轉換為sql語句 2.等值連線,記作 可直接轉換為sql語句 3.自然連線,記作 可轉換為sql語句 4.左外連線和右外連線的表示方法及轉換為sql 注意若多個關係有同名屬性,則用 關係名.屬性名 指出重名屬性 連線也可以與投影,選擇等結合使用。1.查詢選...

SQL 查詢(二 多表查詢)

使用外來鍵作為橋梁連線連個表進行查詢。笛卡爾積select e.fname,e.lname,d.name from employee e join department d 在from子句中包含了兩個表,並使用join關鍵字隔開。當查詢中沒有指定兩個表如何連線時會產生笛卡爾積,即兩張表的所有置換 1...