六、SQL–表连接①(简介)

表连接:进行多表检索最常用的技术,使用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)。

猜你喜欢

转载自blog.csdn.net/qq_41389678/article/details/112005011