目錄
多表查詢?
【8】多表連接——內連接
🙂等值連接
🙂自然連接
🙂非等值連接?
【9】多表連接——外連接
【10】交叉連接不考
【11】聯合查詢
【12】擴展多表連接
【13】嵌套查詢
🙂
多表查詢?
【8】多表連接——內連接
- 等值連接(=)(且包含自然連接--兩個字段在一張表中)
- 非等值連接(< > 等)
- 關于自然連接必須用別名
- 用別名必須全部都用別名
🙂等值連接
--查詢選課學生及其選課情況//兩張表
--select student.sno , student.sname,scores.grade,scores.course
--from student
--join scores on student.sno = scores.sno--select student.sno 學號,student.sname 姓名,classes.DEPT
--from student
--join classes on student.classno=classes.classno
--查詢--查詢選課學生及其選課情況//三個個張表
--select student.sno,sname,ssex,student.classno,dept,scores.course,grade//相同的列需要指定表
--from student
--join scores on student.sno=scores.sno
--join classes on student.classno=classes.classno--在上面基礎上查詢在80以上的同學
--where的寫法
--select student.sno,sname,ssex,student.classno,dept,scores.course,grade
--from student,classes,scores
--where student.sno = scores.sno
--and student.classno=classes.classno
--and grade>80---取別名的寫法
--select s.sno,sname,ssex,s.classno,dept,o.course,grade
--from student s,classes c,scores o
--where s.sno = o.sno
--and s.classno=c.classno
--and grade>80
?
🙂自然連接
--自然連接
--查詢與某某學生同學的同學的學生的學號,姓名和性別student
--select s1.sno,s1.sname,s1.ssex
--from student s1
--join student s2 on s1.sno=s2.sno
--where s2.sno='王曾'
🙂非等值連接?
--查詢比大學英語分數高的學科
--select s1.course,s2.course
--from scores s1
--join scores s2 on s1.course>s2.course
--where s2.course='大學英語'//查詢某個人
//查詢全部人數,計算總的。
【9】多表連接——外連接
?
🙂左外連接🙂右外連接🙂全外連接?
--查看全部學生的課程情況
--全部學生是主表
--select *
--from student left join scores
--on student.sno=scores.sno--查看沒有課程成績的學生
--select *
--from student left join scores
--on student.sno=scores.sno
--where scores.grade=null
【10】交叉連接不考
沒有實際意義,任意兩個表都可以交叉連接
select student.sno,sname,grade,course
from scores cross join student
//?不考
?
【11】聯合查詢
--select count(sno) from student
--union
--select count(grade) from scores
【12】擴展多表連接
--把楊磊的分數加5分
--update scores
--set grade=grade+5
--from student join scores
--on student.sno=scores.sno
--where student.sname='楊磊'
?
【13】嵌套查詢
?in/not int/=的子查詢?
🆗🆗?
--例1查詢和某某同班的同學
--select * from student
--where sno in(select sno from student where sname='余強')
--例2查詢學習大學英語的人數
--select count(*) from student
--where student.sno in(select student.sno from scores join student on scores.sno=student.sno where course='大學英語')
----連接查詢搞一下
--select count(*) from student
--join scores on student.sno=scores.sno
--where course='大學英語'
?
?< > 等比較運算符的any / all子查詢
?
🆗🆗
--例1查詢高于大學英語這門成績的平局分的同學信息
--select avg(grade) from scores
--where course='大學英語'
----49.397576--select student.sno,student.sname,scores.grade from student
--join scores on student.sno=scores.sno
--where course='大學英語'
--and grade>=49.397576
--and classno='物流06106'--select * from student
--join scores on student.sno=scores.sno
--where grade>(select avg(grade) from scores where course='大學英語')
//管他呢,查出來就行,考試過了就行啊啊啊啊啊啊啊----例2查詢成績比77高的同學信息
--select * from scores
--where grade >all(select grade from scores where grade=77 and course='大學英語')
?
?exists子查詢
🆗🆗?
--例子查詢選修大學英語的同學
select * from student
where exists(select scores.course from student join scores on student.sno=scores.sno where course='大學英語')
?
??數據操作使用子查詢
感謝大家,有補充可以在評論區留言!當然因為我們學校期末考試很水,所以以上這些足夠應付期末考試,希望大家可以結合自己的情況好好復習!!