一條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 ...