sql 鏈結 查詢

2022-07-20 00:18:19 字數 1689 閱讀 8808

通過連線運算子可以實現多個表查詢。連線是關聯式資料庫模型的主要特點,是它區別於其它型別 資料庫管理系統的乙個標誌。
內連線就是用比較運算子比較要用連線列的值的連線。join或者inner join。

可以看一看這一篇文章,作者總結的很好:sql連線查詢總結和練習

內連線是應用程式中用的普遍的"連線"操作,它一般都是預設連線型別。內連線基於連線謂詞將兩張表(如 a 和 b)的列組合在一起,產生新的結果表。查詢會將 a 表的每一行和 b 表的每一行進行比較,並找出滿足連線謂詞的組合。當連線謂詞被滿足,a 和 b 中匹配的行會按列組合(併排組合)成結果集中的一行。連線產生的結果集,可以定義為首先對兩張表做笛卡爾積(交叉連線) -- 將 a 中的每一行和 b 中的每一行組合,然後返回滿足連線謂詞的記錄。實際上 sql 產品會盡可能用其他方式去實現連線,笛卡爾積運算是非常沒效率的. 

sql語法:

select *fron table1 join table2  on table1.條件列名 = table2.條件列名。  返回符合匹配條件的兩表列

等價於:

select a* ,b* from table1 a ,table2 b where a.條件列名 =b.條件列名

select *form table1 cross join table2 where table1.條件列名 = table2.條件列名

所以這個效率是很低的,

外連線並不要求連線的兩表的每一條記錄在對方表中都一條匹配的記錄. 連線表保留所有記錄 -- 甚至這條記錄沒有匹配的記錄也要保留. 外連線可依據連線表保留左表, 右表或全部表的行而進一步分為左外連線, 右外連線和全連線.

外連線分為左連線(left join 或left outer join)、右連線(right join 或者 right outer join)、和完整外部連線 (full join 或者 full outer join)

左外連線會返回左表的所有記錄和右表中匹配記錄的組合(如果右表中無匹配記錄, 來自於右表的所有列的值設為 null). 如果左表的一行在右表中存在多個匹配行, 那麼左表的行會複製和右表匹配行一樣的數量, 並進行組合生成連線結果.

顯示的就是press中的所有列和能匹配的列

右外連線, 亦簡稱右連線, 它與左外連線完全類似, 只不過是作連線的表的順序相反而已.右連線操作返回右表的所有行和這些行在左表中匹配的行(沒有匹配的, **於左表的列值設為 null).

全連線是左右外連線的並集. 連線表包含被連線的表的所有記錄, 如果缺少匹配的記錄, 即以 null 填充.。一些資料庫系統(如 mysql)並不直接支援全連線, 但它們可以通過左右外連線的並集(參: union)來模擬實現

自身連線是指同乙個表自己與自己進行連線。既可以用內連線,也可以用外連線。
例如:select * from   authors a1 left join authors a2 on a2.press_id = a1.id
其他:

union 操作符用於合併兩個或多個 select 語句的結果集。請注意,union 內部的 select 語句必須擁有相同數量的列。列也必須擁有相似的資料型別。

sql鏈結查詢

自然連線 使用乙個表連線它自身的操作。就是乙個表中的字段連線表中的另外乙個欄位的查詢 等值連線 內連線 inner join 多個表中的連線查詢,查詢結果只返回匹配的查詢條件 外連線 outer join 什麼是外連線 外連線是指查詢出符合連線條件的資料同時還包含孤兒資料。左外鏈結包含左表的孤兒資料...

sql的鏈結查詢

1 建立部門表 2create table dept 3id int primary key auto increment,4name varchar 20 5 67insert into dept name values 開發部 市場部 財務部 89 建立員工表 10create table em...

oracle查詢鏈結數 sql命令

select t.osuser,t.status,t.logon time from v session t select t.osuser,t.status,t.logon time from v session t where t.osuser admin select t.osuser,t.s...