資料庫中的表,是乙個二維物件,由行和列構成;列是表的元資料,行是表的資料;所以,表與表之間做連線操作,無非是表的行和列與其他表的行和列之間的關係。
資料庫中常有交叉連線、內連線、外連線、半連線、反半連線、自然連線等概念,這些連線方式,代表了不同的含義。
其中,交叉連線、內連線、外連線可以歸屬為一類;自然連線是內連線的一種。
半連線、反半連線,是子查詢中的內容,可以歸屬為一類。
我們以兩個表為列,來說明不同型別的連線之間的關係。 x
表,有n行m
列;y表,有k行s
列。 表x
和表y之間的關係,可能的情況是:
假設表x和表
y結構與資料如下:
表
x,n行m
列
表
y,k行s
列
num | name
-----+------
1 | a
2 | b
3 | c
num | value
-----+-------
1 | ***
3 | yyy
5 | zzz
如果表x和表
y之間的連線,可能的情況有三種:
連線
名稱
連線結果
說明
示例
行
列
交叉連線
cross join
笛卡爾集
n*k
m+s
列出資料行之間的乘積和列之間的加和;連線語句不帶有連線條件
select * from xcross joiny;
連線結果,3行*3行=9行,2列+2列=4列:
num|
name
|num|
value
-----+------+-----+-------
1 | a|1 | ***
1 | a|3 | yyy
1 | a|5 | zzz
2 | b|1 | ***
2 | b|3 | yyy
2 | b|5 | zzz
3 | c|1 | ***
3 | c|3 | yyy
3 | c|5 | zzz
內連線inner join
又稱 ****** join
n*k中滿足條件的行
m+s或去除重複的列
列出與連線條件匹配的資料行
分類:根據連線條件符號:
等值連線[1]
不等值連線[2]
重複列去除,稱為自然連線[3]
select * from xinner joiny
on x.num = y.num;
連線結果:
num| name |num| value
-----+------+-----+-------
1 | a|1 | ***
3 | c|3 | yyy
內連線有重複的num列
select * from xnatural inner joiny;
連線結果:
num| name | value
-----+------+-------
1 | a|***
3 | c|yyy
自然連線沒有重複的num列
外連線outer join
不滿足連線條件的行
+內連線方式得到的行
取決於「查詢列」和「
using
」子句
返回到查詢結果集合中的不止包含符合連線條件的行,而且還包括左表(左外連線[4]
時)、右表(右外連線[5]
時)或兩個邊接表(全外連線[6]
)中的所有資料行
select * from xleft joinyusing(num);
num | name | value
-----+------+-------
1 | a| ***
2 | b|
3 | c| yyy
多出第二行,不滿足連線條件,但在x表中
using
子句消除了num重複列
select * from xright joiny on x.num = y.num;
num | name | num | value
-----+------+-----+-------
1 | a|1 | ***
3 | c|3 | yyy
||5 | zzz
多出第三行,不滿足連線條件,但在y表中
select * from xfull joiny on x.num = y.num;
num | name | num | value
-----+------+-----+-------
1 | a|1 | ***
2 | b||
3 | c|3 | yyy
||5 | zzz
多出第二行,不滿足連線條件,但在x表中
多出第四行,不滿足連線條件,但在y表中
[1]在連線條件中使用等於號
(=)運算子比較被連線列的列值,其查詢結果中列出被連線表中的所有列,包括其中的重複列
[2]在連線條件使用除等於運算子以外的其它比較運算子比較被連線的列的列值。這些運算子包括
>
、>=
、<=
、<
、!>
、!<
和<>
[3]在連線條件中使用等於
(=)運算子比較被連線列的列值,但它使用選擇列表指出查詢結果集合中所包括的列,並刪除連線表中的重複列
[4]結果集中,行比內連線多出左表中不滿足連線條件的行,稱為左外連線;右外連線與此對稱,正好相反
[5]結果集中,行比內連線多出右表中不滿足連線條件的行,稱為右外連線
[6]結果集中,行比內連線多出左表、右表中不滿足連線條件的行,稱為全外連線
資料庫表的連線查詢 子查詢
語法 select from 表1 cross join 表2 例如 select from offices cross join users 語法 select 需要查詢的列名列表 from 表1 join 表2 on 表1.關聯列名 表2.關聯列名 例如 select users.uid,use...
資料庫中的連線查詢
資料庫中的各個表中存放著不同的資料,使用者往往需要用多個表中的資料來組合 提煉出所需要的資訊。如果乙個查詢需要對多個表進行操作,就稱為 連線查詢。連線查詢的結果集或結果表,稱為表之間的連線連線。查詢實際上是通過各個表之間共同列的關聯性來查詢資料的,它是關聯式資料庫查詢最主要的特徵。連線查詢分為等值連...
Jdbc資料庫連線查詢表
data reportdemo.mdb connection conn drivermanager.getconnection url,statement stmtnew conn.createstatement 9 firebird url jdbc firebirdsql host name p...