sql兩表關聯查詢-九游会j9娱乐平台
1. sql 幾種聯表查詢方式
二、cross join(創建笛卡爾積) 對兩張表通過交叉聯合產生第三張返回結果集的表。相當於普通的連接。 三、inner join(內連接) 內連接就相當於普通的cross join,只是格式不一樣,inner join在後面有一個on子句(相當於where)的搜索條件,用於過濾返回的行。 四、outer join (外連接) select * from ta outer join tb on (ta.c1=tb.c1) outer join告訴dbms生成結果表,在此表中不僅帶有相關(ta.c1=tb.c1)行對,而且還有來自兩個源表中任一表的不匹配的行。 五、left outer join(左連接) right outer join(右連接) select * from ta left outer join tb on (ta.c1=tb.c1) select * from ta right outer join tb on (ta.c1=tb.c1) left outer join(left join) 告訴dbms生成包括聯合行和任何不匹配的行的結果表,但是不匹配的行系來自查詢的from子句中left outer join關鍵詞左邊的表中。 right outer join(right join)與left outer join(left join)剛好相反。 六、full outer join(全連接) full outer join 返回組合了left outer join 和right outer join結果的表。 以下是inner join及outer join的具體介紹: 在一個正規化的資料庫環境中, 我們常會碰到這款情形: 所需的資料並不是放在同一個資料表中, 在這個時候, 你就要用到 join。 當然join 如何將不同的資料庫的資料結合, 還要看你如何使用它, 一共有四種不同的 join 的方式, 在這篇文章中我們將為你介紹 inner join 及 outer join 以及其應用。 inner join (自然連接)inner join 應該是最常用的 join 方式, 它只會傳回符合 join 規則的紀錄, 還是先來看看語法: select <要選擇的欄位> from <主要資料表> <次要資料表> [on ] 現在我們利用 ms sql server 的內建資料庫看一個實例。 select proctid, proctname, supplierid from procts 從procts 產品資料表中取出三個欄位, 分別是產品代碼, 產品名稱, 供貨商代碼, 但查詢出來的結果保證讓你的老闆很不滿意, 因為供貨商代碼對於人類實在是無什麼意義, 這個時候 join 就可以幫上忙了, 藉由 join suppliers 這個資料表我們便可以查詢到供貨商名稱select proctid, proctname, suppliers.supplierid from procts 首先要拿掉 procts 資料表的 foreign key, 否則沒有法度在 procts 資料表新增一筆 supplierid 沒有對映到 suppliers 資料表的紀錄, 要知影一個資料表的 constraint 你可以執行 sql 內建的 sp_helpconstraint , 在 qa 執行 sp_helpconstraint procts 接下來刪除 fk_procts_suppliers 這個 foreign key alter table procts drop constraint fk_procts_suppliers 再來新增一筆紀錄於 procts 資料表, supplierid 使用 50 是因為它並沒有對映到 suppliers 資料表中的記錄 insert into procts (proctname,supplierid,categoryid) values ('test proct','50','1') 現在我們再執行頭前的查詢, 只是將 inner join 改為 left outer join select proctid, proctname, suppliers.supplierid from procts left outer join suppliers procts.suppliers = suppliers.supplierid 比較一下兩種 join 方式的查詢結果, 你應該就會知影其中的差別! 再來看看 right outer join, 請新增下底這筆記錄 insert into suppliers (companyname) values ('learnasp') 現在請使用 right out join 來作查詢, 比較看看查詢的結果和 inner join 有什麼不同! 尋找不相符紀錄 這里我們來看看如何使用 out join 來找不相符紀錄, 可能是有子紀錄卻沒有父紀錄或是顛倒過來 select suppliers.companyname from procts right join suppliers on procts.supplierid = suppliers.supplierid where procts.supplierid is null 執行結果你會找到一筆資料為 learnasp, 該筆供貨商資料存在, 但基本上已經沒有產品是來自這個供貨商, 想像一下如果不用 outer join 你要怎麼以一個 sql 指令完成同一查詢結果! 知道 outer join 的好用了吧! 再執行 select procts.proctname from procts left join suppliers on procts.supplierid = suppliers.supplierid where suppliers.supplierid is null 這個查詢結果你會發現 test proct 這項產品竟然找不到供貨商的資料!
2. sql兩表查詢用什麼命令
命令:
select
sql 資料庫查詢表格的命令:用select 語句
用法:
查詢某一列:select 列名稱 from 表名稱
查詢所有列:select * from 表名稱
注釋:
sql 語句對大小寫不敏感。select 等效於 select。
1、sql多表關聯查詢跟條件查詢大同小異,主要是要知道表與表之前的關系很重要;
2、userinfo(用戶信息表)表中有三個欄位分別為:user_di(用戶編號),user_name(用戶姓名),user_dep(用戶部門) 。(關系說明:userinfo表中的user_dep欄位和dep表中的dep_id欄位為主外鍵關系,userinfo表中的user_sex欄位和sex表中的sex_id欄位為主外鍵關系)。
3. sql查詢兩個表相同的數據
sql語句如下:
select * from table1
full join table2 on table1.xingming = table2.xingming
where
table1.xingming is null or table2.xingming is null
分析:
1、首先得出兩個表的並集
從結果中可以看出,表1中的趙二在表2中沒有相同xingming的記錄。
表2中的劉六在表1中沒有相同xingming的記錄。
本題還有其它多種解法,此處列出比較好理解的一種。
(3)sql兩表關聯查詢擴展閱讀:
使用自聯接
即使表在資料庫中沒有自反關系,也可將它與自身聯接。 例如,可使用自聯接查找生活在同一城市的作者對。
與任何聯接一樣,自聯接至少需要兩個表。 不同之處在於,不是向查詢中添加第二個表,而是添加同一個表的第二個實例。 這樣,可將表的第一個實例中的列與第二個實例中的同一列相比較,這樣可相互比較列中的值。查詢和視圖設計器為表的第二個實例分配一個別名。
例如,如果要創建自聯接來查找居住在 berkeley 內的所有作者對,可將表的第一個實例中的 city 列與第二個實例中的 city 列相比較。 所得到的查詢可能類似於:
select
authors.au_fname, authors.au_lname, authors1.au_fname as expr2, authors1.au_lname as expr3
from authors inner join authors authors1 on authors.city = authors1.city
where
authors.city = 'berkeley'
參考資料:
網路.full join
4. sql鏁版嵁搴撻噷鎬庝箞璁╀袱涓琛ㄦ兂鍏寵仈(鏁版嵁搴撲袱涓琛ㄥ備綍鍏寵仈)
鏈夊氱嶆柟娉曪細
1<宸﹁仈錛歴elect鍒楀悕fromgradeleftjoinclassongrade.gradeid=class.gradeid
2<鍙寵仈錛氫篃鏄涓鏍鳳紝鍙鏄痩eft鏀逛負right
3<騫崇駭鏌ヨ錛歴elect鍒楀悕fromgrade,classwheregrade.gradeid=class.gradeid
褰撶劧錛屽彲鑳借繕鏈夊埆鐨勬柟娉曪紝鏈夎繖浜涘熀鏈灝辮屼簡