mysql查詢總結

2021-09-18 01:56:42 字數 1324 閱讀 1981

最近在複習mysql查詢操作,課本上有兩個例子感覺理解起來略顯晦澀,特記錄下來:

查詢選修了全部課程的學生姓名

查詢至少選秀了學生201215122選修的全部課程的學生號碼

對於第乙個問題,它可以等價於不存在一門課程是該學生沒有選的。

那麼首先,我們可以分析到開始一定是查詢學生的姓名:

select sname

from student

where + 條件

那麼條件是什麼呢?「不存在一門課他沒有選」

not exists + 有課程他沒有選修,也就是要把course中的所有課程拿出來找,找到他沒有選修過的。

select * from course

where + 條件

這個條件又是什麼呢?

只要在最後乙個select 中  

select * from sc

where sno= student.sno

and cno= course.cno

將這個同學通過 sc 表 和  crouse的 課程連線一遍,找到連線不上的,即: 沒有選修的,  這樣就找到了一門課這個學生沒有選修, 存在沒有選修的課,那麼該學生被pass掉了。

最後我們可以構造以下sql語句:

select sname

from student

where not exists

(select *

from course

where not exists

(select *

from sc

where sno = student.sno

and cno = course.cno))

第二個問題,變換後,它等價於:不存在這樣的課程y,學生201215122選修了y,而學生x沒有選

select distinct sno

from sc s1

where not exists // 不存在

( select *

from sc s2

where s2.sno='201215122' and not exists // 201215122選了,y學生沒有選(對於被20121522選了的cno)

( select * //這門課在x中沒被選擇

from sc s3

where s1.sno=s3.sno and s3.cno=s2.cno //在x的選課列表中搜尋這門課

) );

mysql查詢總結

sql語句並不是按照 的順序來執行的 下面是 的執行順序 先找錶 然後找錶的關聯條件 然後進行關聯 關聯之後進行where處理 然後在進行字段選取,然後進行分組,排序,最後進行顯示limit 子查詢 就是一組巢狀的select查詢 缺點 子查詢執行效率非常低下,疑問子查詢比普通的關聯查詢 join ...

MySQL 總結MySQL模糊查詢

create table student id char 36 primary key,name varchar 8 not null age int 3 default0,mobile char 11 address varchar 150 insert into student values 9...

MySql模糊查詢總結

在mysql中如何使用模糊查詢呢?在where子句中,可以對datetime char varchar欄位型別的列用like子句配合萬用字元選取那些 很像.的資料記錄,以下是可使用的萬用字元 零或者多個字元 單一任何字元 下劃線 特殊字元 在某一範圍內的字元,如 0 9 或者 aeth 不在某範圍內...