作者frank99977 (嘻)
看板Database
標題Re: [SQL ] 初學者的join問題...
時間Sun Jun 24 01:27:39 2007
那如果照你這樣說,如果不是OUTER JOIN
這樣用JOIN或者直接把欄位挑出來再加WHERE都可以做了喔?
感謝大大回答這麼詳細
※ 引述《grence (多想兩分鐘 = =")》之銘言:
: 標題: Re: [SQL ] 初學者的join問題...
: 時間: Sat Jun 23 23:54:02 2007
:
: ※ 引述《frank99977 (嘻)》之銘言:
: : 現在如果有兩個table t1跟t2
: : 假設t1裡有name,t2裡有phone
: : 而且也有PK跟FK
: : select t1.name, t2.phone
: : from t1,t2
: : where ....
: : 跟
: : select t1.name,t2.phone
: : from t1 inner join t2
: : on ....
: : where .....
: : 請問一下
: : 這兩個出來結果會一樣嗎?
:
: 一樣,where 就是 inner join
: outer join才會有些微的差別,借用此例
:
: select t1.name,t2.phone
: from t1 left join t2
: on ....
: where .....
:
: 此時以左邊的 t1為主,若 t1有name,t2沒phone,會select出
:
: name phone
: --
: john null
:
: 另外,from 2個 table以上會做卡氏積,一般資料庫課程都會提到,
: 剛開始也許無法體會這所代表的意義,練習使用 self join解問題可能會有所體會...
: 在本版有看過一個很有印象的例子....忘了哪篇 囧>
:
: 問題大概是這樣,一個儲存結構如下:
: 班級 姓名 成績
: A XXX 90
: A YYY 85
: A ZZZ 88
: A VVV 70
: B HHH 74
: B MMM 88
: B KKK 72
: B NNN 79
: ...
: ...
: 找出每班的前三名。答案應該還在版上 囧a..
:
: 可能還會覺得奇怪,為什麼有 where還要有 inner join?
: 我以為是因為....跟卡氏積有關係,on剔除重複的「錯誤」資料
: where 用來從「正確」資料找出你想要的;
: 這樣可以保持SQL 語法的彈性
:
: SELECT *
: FROM TABLE1
: JOIN TABLE2 ON....
: WHERE ....
:
: TABLE1 跟 TABLE2 JOIN 起來會有很多欄位,
: 只要在第一句把 *換掉就可以輕鬆換撈別的欄位
: 只要在 WHERE子句改變條件就可以撈出其它的「正確」資料
: 在 FROM子句(我是把JOIN當成FROM下的東西,忘了這觀念對不對…用的很開心就是XD)
: 裡加入(JOIN)別的 TABLE也是一、兩行就搞定的事
:
: 有這習慣在改前端應用程式或是後端資料庫裡的 SQL會愉快不少
:
: 感覺不管什麼程式語言都很注重彈性,必需要方便更改才會流行、易用。
:
: --
:
※ 發信站: 批踢踢實業坊(ptt.cc)
: ◆ From: 61.229.212.136
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.120.218.133