如果查詢需要針對兩個或者更多個表,則在需要涉及到表的連接操作(join)。
0.笛卡兒積
最簡單的連接方式是直接在from子句中加入兩個表,並且用join操作符隔開。形式為Table1 join Table2。下面是例子:
select e.fname, e.lname, d.name from employee e join department d;
產生108行數據,這是因為,對於單純使用join進行的是笛卡兒積運算。對於兩個表,分別由m和n個元組,進行笛卡爾積後將產生mXn個元組。但這個不是我們需要的結果,包含由很多不需要的數據。若要得到正確的結果,則需要內連接。
1.內連接
內連接根據相同屬性值進行連接。只需要在上面的表中加上on和所需要相等的屬性即可。
select e.fname, e.lname, d.name from employee e join department d on e.dept_id = d.dept_id;
結果正是想要的。其實,在join前可加inner這是默認情況。但對於良好習慣,應該加上,以指明這是什麼連接,這有助於代碼閱讀。對於on e.dept_id = d.dept_id可以用using(dept_id)來代替。
以上結果也可以用SQL92的標准進行操作
select e.fname, e.lname, d.name from employee e, department d where e.dept_id = d.dept_id;
對於兩種標准,選擇在於自己,各有優缺點。
2.自連接
不僅在同一查詢中多次包含同一個表,還可以對表自身進行連接。只需要取不同別名即可。
總結:對於連接操作方法挺好懂的,比較簡單,對於連接3個以上,連接子查詢,不等連接等類似。