資料庫 資料庫表連線Join

2021-09-11 08:54:36 字數 4631 閱讀 3213

一條sql join語句對應著關係代數裡的乙個join操作,它對關聯式資料庫裡乙個或多個表的列進行合併。

ansi標準的sql規定了5種型別的join:inner,left outer,right outer, full outer和cross。

除此之外乙個表能夠對自身進行連線,即self-join。

以下兩表是後面章節描述所基於的**

名字部門id

rafferty

31jones

33heisenberg

33robinson

34smith

34williams

null

部門id

部門名31

sales

33engineering

34clerical

35marketing

cross join交叉連線返回連線中**各行的笛卡爾積,即[row1_1,row1_2]x[row2_1,row2_2]=>[(row1_1,row_2_1),(row1_1,row_2_2),(row1_2,row_2_1),(row1_2,row_2_2)]

select *

from employee cross join department;

select *

from employee, department;

職員表.職員名

職員表.部門id

部門表.部門名

部門表.部門id

rafferty

31sales

31jones

33sales

31heisenberg

33sales

31smith

34sales

31robinson

34sales

31williams

null

sales

31rafferty

31engineering

33jones

33engineering

33heisenberg

33engineering

33smith

34engineering

33robinson

34engineering

33williams

null

engineering

33rafferty

31clerical

34jones

33clerical

34heisenberg

33clerical

34smith

34clerical

34robinson

34clerical

34williams

null

clerical

34rafferty

31marketing

35jones

33marketing

35heisenberg

33marketing

35smith

34marketing

35robinson

34marketing

35williams

null

marketing

35交叉聯接本身並不應用任何謂詞來篩選聯接表中的行。交叉連線的結果可以通過使用where子句進行過濾,該子句隨後可能生成等效的內部連線。

內連線返回兩個鏈結表中同時含有相符列值的行的組合。

職員表.職員名

職員表.部門id

部門表.部門id

robinson

34clerical

jones

33engineering

smith

34clerical

heisenberg

33engineering

rafferty

31sales

內連線的隱式表示方式:在select語句的from子句中列出用於連線的表,並使用逗號分隔它們。如此,這種語句指定了交叉連線,where子句可以應用額外的篩選器謂詞

select *

from employee, department

where employee.departmentid = department.departmentid;

左向外聯接的結果集包括 left outer子句中指定的左表的所有行,而不僅僅是聯接列所匹配的行。如果左表的某行在右表中沒有匹配行,則在相關聯的結果集行中右表的所有選擇列表列均為空值。

職員表.職員名

職員表.部門id

部門表.部門名

部門表.部門id

jones

33engineering

33rafferty

31sales

31robinson

34clerical

34smith

34clerical

34williams

null

null

null

heisenberg

33engineering

33右向外聯接是左向外聯接的反向聯接。將返回右表的所有行。如果右表的某行在左表中沒有匹配行,則將為左表返回空值。

職員表.職員名

職員表.部門id

部門表.部門名

部門表.部門id

smith

34clerical

34jones

33engineering

33robinson

34clerical

34heisenberg

33engineering

33rafferty

31sales

31null

null

marketing

35完整外部聯接返回左表和右表中的所有行。當某行在另乙個表中沒有匹配行時,則另乙個表的選擇列表列包含空值。如果表之間有匹配行,則整個結果集行包含基表的資料值。

# outer 關鍵字可選

select *

from employee full outer join department

on employee.departmentid = department.departmentid;

職員表.職員名

職員表.部門id

部門表.部門名

部門表.部門id

smith

34clerical

34jones

33engineering

33robinson

34clerical

34williams

null

null

null

heisenberg

33engineering

33rafferty

31sales

31null

null

marketing

35使用自身**進行連線

select f.employeeid, f.lastname, s.employeeid, s.lastname, f.country

from employee f inner join employee s on f.country = s.country

where f.employeeid < s.employeeid

order by f.employeeid, s.employeeid;

Sql 資料庫 join 連線

sql裡面有兩個連線乙個是union,另乙個就是join 他們兩個的區別 union 連線的是行 是一行一行的連 而 join 連線的是列 字段 他們倆的區別暫時就就知道這點 join連線的使用的前提 1.必須要有至少乙個表 乙個表可以用自連線 2.必須要有相關聯的列 字段 主鍵外來鍵啥的。join...

資料庫查詢連線 JOIN 用法

工作中寫sql語句時需要用到在多個表之間各查詢點資料,然後組合,利用mybatis返回給乙個bean物件。現在把這幾個連線總結下,方便下次用時參考。下面是學生表student idname age 001aaa boy10 002bbb girl 10003 cccgirl 10004 dddboy...

資料庫 資料庫基礎5 表連線 多表連線

2 多表連線 表的數量 2 2 外部連線 前提 有時需要的資料不止在一張表中,需要多個表做結合的查詢就可以用表連線實現 1 第一種 where連線 select 表名1.列名1,表名2.列名1,表名1.列名2,表名2.列名2 from 表名1,表名2 where 表名1.列名1 表名2.列名1 2 ...