這是一種比較簡(jiǎn)單和簡(jiǎn)潔的寫法,像這樣同一個(gè)人有兩種行為的一般都要建立兩張表,進(jìn)行自身的對(duì)比。同時(shí)有的時(shí)候還要和其他表進(jìn)行連接
select student.sid, sname
from sc a,sc b,student
where a.sid=b.sidand a.cid=100and b.cid=200and student.sid=a.sid 這是一種比較保守的簡(jiǎn)單的思路,雖然代碼要復(fù)雜一些,但是思路很簡(jiǎn)單,
一般順著題目的意思一步一步的寫,就可以寫出來。
這里我們思路大概是這樣的,先找出學(xué)了100的學(xué)號(hào),然后找出學(xué)了200的學(xué)號(hào),
題目要求我們同時(shí)學(xué)了100和200的學(xué)號(hào),那么我們只需要將這兩張表和student表連接起來,自然也就是兩個(gè)課程都學(xué)了的表。然后選出學(xué)號(hào)和姓名就可以了。但是這里要注意表的連接,要注意重命名并且要注意on之后的條件,三張表的連接直接在后面寫join 就行了。
select stu.sid,stu.sname from student stu join (
select sid from sc where cid =100) c100 on stu.sid=c100.sid join (
select sid from sc where cid =200) c200 on stu.sid=c200.sid
查詢100課程比200課程成績(jī)高的所有學(xué)生的學(xué)號(hào)。
先來一個(gè)比較簡(jiǎn)單的寫法,和上面的有點(diǎn)像,做法也是先分別查詢出100課程和200課程的分?jǐn)?shù),然后將這兩張表通過sid連接起來,再利用一個(gè)where語句就可以是實(shí)現(xiàn)了
是不是很簡(jiǎn)單
select c100.sid from (
select sid,score from sc where cid=100) c100 join
(select sid,score from sc where cid=200) c200 on c100.sid=c200.sid
where c100.score>c200.score
第二種寫法同樣是涉及到自身的比較,那么高深一點(diǎn)的人就會(huì)馬上反應(yīng)會(huì)有一個(gè)表的自身對(duì)比將表變成兩張表,一張表用于100一張表用于200,下面我們來看看具體怎么實(shí)現(xiàn)的
select a.sid from sc a,sc b where a.sid=b.sidand a.cid=100and b.cid=200and a.score>b.score
這里我們利用一個(gè)語句就實(shí)現(xiàn)了,是不是很簡(jiǎn)單呢,所以一定要總結(jié)經(jīng)驗(yàn),看到這樣的題目我們第一反應(yīng)就是表的重命名