sql學習筆記4 多表查詢

2021-07-02 07:11:11 字數 3460 閱讀 4059

將兩張表jion成乙個表進行查詢

如果, 兩個表的列明相同,可以用using

select e.fname, e.lname, d.name

from employee e inner

join department d

using(dept_id)

ansi標準的優點是:

- 連線條件和過濾條件被分隔到兩個字句中(on字句和where字句), 使查詢語句更易於理解;

- 每兩個表之間的連線條件都在他們自己的on自劇中列出, 這樣不容易錯誤滴忽略了某些連線條件

- 使用sql92連線語法的查詢語句可以在各種資料庫伺服器中通用.

不標準的語句:

select a.account_id, a.cust_id, a.open_date, a.product_cd  

from account as a, baranch as b, employee e

where a.open_emp_id = e.emp_id #鏈結條件

and e.start_date < '2007-01-01'

and e.assigned_branch_id = b.branch_id #鏈結條件

and (e.title = 'teller'

or e.title = 'head teller')

and b.name = 'woburn branch';

使用這種查詢不容易識別連線條件

select a.account_id, a.cust_id, a.open_date, a.product_cd  

from account as a inner

join employee as e

on a.open_emp_id = e.emp_id

inner

join branch as b

on e.assigned_branch_id = b.branch_id

where e.start_date < '2007-01-01'

and (e.title = 'teller'

or e.title = 'head teller')

and b.name = 'woburn branch';

branch表裡有account(賬戶的開戶支行)和employee(雇員所在支行)的表的外來鍵, 若要提取這兩個資訊需要對branch表進行兩次鏈結.

employee表包含了乙個指向自身的外來鍵, 即指向本表自身的的列(superiir_emp_id) . 該列指向了雇員的主管. 使用自連線, 可已在列出每個雇員姓名的同時列出主管的姓名

可以通過限定值的範圍實現對錶的鏈結,即不等鏈結

select e.emp_id, e.fname, e.lname, e.start_date

from employee as e

inner

join product as p

on e.start_date >= p.date_offered

and e.start_date <= p.date_retired

where p.name = 'no-fee checking'

該查詢鏈結沒有外來鍵關聯, 為了找出連個日期之間的資料.

還可以對自身使用不等鏈結. 例如, 找出employee表中的不同的兩個人為一行輸出

但是返現表中有重複, 每對名字都有一對名字相反的與之對應

select e1.fname, e1.lname,  'vs'

as vs , e2.fname, e2.lname

from employee as e1

inner

join employee as e2

on e1.emp_id < e2.emp_id

where e1.title='teller'

and e2.title='teller'

問題解決.

SQL學習筆記 多表查詢

溫故而知新。多表查詢 內連線 外連線和交叉連線 1 左外連 sql select from table1left jointable2ontable1.條件列名 table2.條件列名 注 table1表資訊全部顯示,符合條件的 table2 都會與 table1 對齊,不符合條件的 table2 ...

sql多表查詢學習

我們先建立乙個表 emp 15行 如果想查詢所有資料,很簡單 select from emp 這樣就能查詢到emp的所有資料 在了解多表查詢之前 我們應該先複習一下數學中笛卡爾積的概念 比如乙個集合有 1,2,3 三個元素 另乙個集合有 4,5,6 三個元素 他們的笛卡爾積 其實有3 3 9種情況 ...

SQL 多表查詢

不同的 sql join inner join 內連線 如果表中至少有乙個匹配,也從左表返回所有的行 left join 左連線 即使右表中沒有匹配,也從右表返回所有的行 right join 右連線 即使左表中沒有匹配,也從右表返回所有的行 full join 全連線 只有其中乙個表中存在匹配也從...