六 SQL 表連線 簡介

2021-10-13 13:07:08 字數 3462 閱讀 2802

表連線:進行多表檢索最常用的技術,使用join關鍵字將乙個或者多個表按照彼此間的關係連線為乙個結果集。

資料準備:建立客戶表

mysql,mssqlserver,db2:

create table t_customer (

fid int not null ,

fname varchar(20) not null ,

fage int,primary key (fid))

oracle:

create table t_customer (

fid number (10) not null ,

fname varchar2(20) not null ,

fage number (10),primary key (fid))

mysql,mssqlserver,db2:

create table t_ordertype (

fid int not null ,

fname varchar(20) not null,

primary key (fid))

建立訂單表

oracle:

create table t_ordertype (

fid number (10) not null ,

fname varchar2(20) not null,

primary key (fid))

mysql,db2:

create table t_order (

fid int not null ,

fnumber varchar(20) not null ,

fprice decimal(10,2),

fcustomerid int,

ftypeid int,

primary key (fid))

mssqlserver:

create table t_order (

fid int not null ,

fnumber varchar(20) not null ,

fprice numeric(10,2),

fcustomerid int,

ftypeid int,

primary key (fid))

oracle:

create table t_order (

fid number (10) not null ,

fnumber varchar2(20) not null ,

fprice numeric(10,2),

fcustomerid number (10),

ftypeid int,

primary key (fid))

插入資料

insert into t_customer(fid,fname,fage)values(1,"tom",21);

insert into t_customer(fid,fname,fage)values(2,"mike",24);

insert into t_customer(fid,fname,fage)values(3,"jack",30);

insert into t_customer(fid,fname,fage)values(4,"tom",25);

insert into t_customer(fid,fname,fage)values(5,"linda",null);

insert into t_ordertype(fid,fname)values(1,"marketorder");

insert into t_ordertype(fid,fname)values(2,"limitorder");

insert into t_ordertype(fid,fname)values(3,"stop order");

insert into t_ordertype(fid,fname)values(4,"stoplimit order");

insert into t_order(fid,fnumber,fprice,fcustomerid, ftypeid)values(1,"k001",100,1,1);

insert into t_order(fid,fnumber,fprice,fcustomerid, ftypeid)values(2,"k002",200,1,1);

insert into t_order(fid,fnumber,fprice,fcustomerid, ftypeid)values(3,"t003",300,1,2);

insert into t_order(fid,fnumber,fprice,fcustomerid, ftypeid)values(4,"n002",100,2,2);

insert into t_order(fid,fnumber,fprice,fcustomerid, ftypeid)values(5,"n003",500,3,4);

insert into t_order(fid,fnumber,fprice,fcustomerid, ftypeid)values(6,"t001",300,4,3);

insert into t_order(fid,fnumber,fprice,fcustomerid, ftypeid)values(7,"t002",100,null,1);

如:需要查詢姓名為mike的客戶的訂單號和票價。

若sql不支援表連線,那麼完成這個功能的第乙個任務將是在t_customer 表中檢索姓名為mike的客戶的fid值:

select fid from t_customer where fname="mike"
這個sql語句返回2,也就是姓名為mike 的客戶的fid值為2,這樣就可以到t_order中檢索fcustomerid等於2 的記錄:

select fnumber,fprice from t_order where fcustomerid=2
執行結果:

fnumber fprice

n002 100.00

使用上述方法,不但檢索速度慢,且當資料複雜時,還很繁瑣,大大降低檢索效率,而使用sql中的表連線可簡化開發,並且由於資料庫系統會對錶連線進行查詢優化,所以使用表連線進行資料的檢索會非常快速。

表連線就像連線兩張資料表的連線,線的兩端是分別在兩張表的特定欄位上的。在這裡的例子中t_customer表的fid欄位和t_order表的fcustomerid欄位就是關聯關係的兩個端點。在使用表連線的時候必須顯式的指定這個關聯關係。

sql中使用join 關鍵字來使用表連線。

表連線有多種不同的型別,被主流資料庫系統支援的有交叉連線(cross join)、內連線(inner join)、外連線(outter join),在有的資料庫系統中還支援聯合連線(union join)。

六 SQL 表連線 內連線

內連線組合兩張表,並且基於兩張表中的關聯關係來連線它們。使用內連線需要指定表中哪些字段組成關聯關係,並且需要指定基於什麼條件進行連線。內連線的語法如下 inner join table name on condition其中table name 為被關聯的表名,condition則為進行連線時的條件...

六 SQL 表連線 交叉連線

與內連線比起來,交叉連線非常簡單,因為它不存在on子句。交叉連線會將涉及到的所有表中的所有記錄都包含在結果集中。交叉連線,定義方式分為隱式連線和顯式連線。隱式連線 只要在select語句的from語句後將要進行交叉連線的表名列出即可,這種方式可以被幾乎任意資料庫系統支援。如 將t customer表...

六 SQL 表連線 全外部連線

全外部連線並不是所有資料庫系統都支援,最常使用的mysql就不支援全外部連線。全外部連線 是左外部連線和右外部連線的合集,因為即使在右表中不存在匹配連線條件的資料,左表中的所有記錄也將被放到結果集中,同樣即使在左表中不存在匹配連線條件的資料,右表中的所有記錄也將被放到結果集中。如 使用全外部連線查詢...