※ 引述《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