如表
-------------------------------------------------
table1 | table2 |
-------------------------------------------------
id name |id score |
1 lee |1 90 |
2 zhang |2 100 |
4 wang |3 70 |
-------------------------------------------------
以下均在查詢分析器中執行
一、外串連
1.概念:包括左向外聯結、右向外聯結或完整外部聯結
2.左串連:left join 或 left outer join
(1)左向外聯結的結果集包括 left outer 子句中指定的左表的所有行,而不僅僅是聯結列所匹配的行。如果左表的某行在右表中沒有匹配行,則在相關聯的結果集行中右表的所有挑選清單列均為空白值(null)。
(2)sql語句
select * from table1 left join table2 on table1.id=table2.id
-------------結果-------------
id name id score
------------------------------
1 lee 1 90
2 zhang 2 100
4 wang null null
------------------------------
注釋:包含table1的所有子句,根據指定條件返回table2相應的欄位,不符合的以null顯示
3.右串連:right join 或 right outer join
(1)右向外聯結是左向外聯結的反向聯結。將返回右表的所有行。如果右表的某行在左表中沒有匹配行,則將為左表返回空值。
(2)sql語句
select * from table1 right join table2 on table1.id=table2.id
-------------結果-------------
id name id score
------------------------------
1 lee 1 90
2 zhang 2 100
null null 3 70
------------------------------
注釋:包含table2的所有子句,根據指定條件返回table1相應的欄位,不符合的以null顯示
4.完整外部聯結:full join 或 full outer join
(1)完整外部聯結返回左表和右表中的所有行。當某行在另一個表中沒有匹配行時,則另一個表的挑選清單列包含空值。如果表之間有匹配行,則整個結果集行包含基表的資料值。
(2)sql語句
select * from table1 full join table2 on table1.id=table2.id
-------------結果-------------
id name id score
------------------------------
1 lee 1 90
2 zhang 2 100
4 wang null null
null null 3 70
------------------------------
注釋:返回左右串連的union(見上左、右串連)
二、內串連
1.概念:內聯結是用比較子比較要聯結列的值的聯結
2.內串連:join 或 inner join
3.sql語句
select * from table1 join table2 on table1.id=table2.id
-------------結果-------------
id name id score
------------------------------
1 lee 1 90
2 zhang 2 100
------------------------------
注釋:只返回合格table1和table2的列
4.等價(與下列執行效果相同)
a:select a.*,b.* from table1 a,table2 b where a.id=b.id
b:select * from table1 cross join table2 where table1.id=table2.id (註:cross join後加條件只能用where,不能用on)
三、交叉串連(完全)
1.概念:沒有 where 子句的交叉聯結將產生聯結所涉及的表的笛卡爾積。第一個表的行數乘以第二個表的行數等於笛卡爾積結果集的大小。(table1和table2交叉串連產生3*3=9條記錄)
2.交叉串連:cross join (不帶條件where...)
3.sql語句
select * from table1 cross join table2
-------------結果-------------
id name id score
------------------------------
1 lee 1 90
2 zhang 1 90
4 wang 1 90
1 lee 2 100
2 zhang 2 100
4 wang 2 100
1 lee 3 70
2 zhang 3 70
4 wang 3 70
------------------------------
注釋:返回3*3=9條記錄,即笛卡爾積
4.等價(與下列執行效果相同)
a:select * from table1,table2 轉自:http://323229113.blog.163.com/blog/static/2185362820070172553209/ 附:常用的彙總函式select Count(*) from table2 查詢記錄數 3select Sum(Score) from table2 查詢累加值 260
select Min(Score) from table2 查詢最小值 70
select Max(Score)from table2 查詢最大值 100
select AVG(Score) from table2 查詢平均值 86