首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > 其他数据库 >

内联接、外连接[左连接、右连接、全连接]、交叉连接、自连接

2012-07-19 
内连接、外连接[左连接、右连接、全连接]、交叉连接、自连接内连接、外连接[左连接、右连接、全连接]、交叉连接、自

内连接、外连接[左连接、右连接、全连接]、交叉连接、自连接

内连接、外连接[左连接、右连接、全连接]、交叉连接、自连接

  记得有一次面试官问我sql有哪些连接,我比较常用左连接,内连接用的很少。只记得这两种连接。

其实那时侯就在实际运用中,写过一些业务逻辑较复杂的存储过程了。但是,毕竟是在被人刷掉的面试中,难免会有些介怀。

下面我们创建两个表做连接结果测试,来说明各种连接的特性![本篇内容只考虑等值连接]

连接操作的共性:第一步均为将所有参与操作的表进行了一个笛卡尔积,然后才依据各连接条件进行记录筛选。

CREATE TABLE table_1

(

  id INT IDENTITY(1,1) PRIMARY KEY,

  name VARCHAR(50),

  classid INT

)
GO

INSERT INTO table_1(name,classid) SELECT '苹果',1
UNION ALL SELECT '香蕉',1
UNION ALL SELECT '草莓',1
UNION ALL SELECT '西瓜',1
UNION ALL SELECT '樱桃',1
UNION ALL SELECT '荔枝',1
UNION ALL SELECT '芒果',1
UNION ALL SELECT '木瓜',1 --table_2没有此项
UNION ALL SELECT '香梨',1 --table_2没有此项
GO

CREATE TABLE table_2
(

  id INT IDENTITY(1,1) PRIMARY KEY,

  name VARCHAR(50),

  classid INT

)
GO

INSERT INTO table_2(name,classid) SELECT '苹果',1
UNION ALL SELECT '香蕉',1
UNION ALL SELECT '草莓',1
UNION ALL SELECT '西瓜',1
UNION ALL SELECT '樱桃',1
UNION ALL SELECT '荔枝',1
UNION ALL SELECT '芒果',1
UNION ALL SELECT '龙眼',1 --table_1没有此项
UNION ALL SELECT '芭乐',1 --table_1没有此项
UNION ALL SELECT '榴莲',1 --table_1没有此项

GO

SELECT a.*,b.* FROM table_1 a,table_2 b WHERE a.[name]=b.[name] --写法一

?SELECT a.*,b.* FROM table_1 a JOIN table_2 b ON a.[name]=b.[name] --写法二

SELECT a.*,b.* FROM table_1 a INNER JOIN table_2 b ON a.[name]=b.[name] --写法三

SELECT a.*,b.* FROM table_1 a LEFT JOIN table_2 b ON a.[name]=b.[name] --左连接写法一
SELECT a.*,b.* FROM table_1 a LEFT OUTER JOIN table_2 b ON a.[name]=b.[name] --左连接写法二

SELECT a.*,b.* FROM table_1 a RIGHT JOIN table_2 b ON a.[name]=b.[name] --右连接写法一
SELECT a.*,b.* FROM table_1 a RIGHT OUTER JOIN table_2 b ON a.[name]=b.[name] --右连接写法二

SELECT * FROM table_1 a RIGHT JOIN table_2 b ON a.[name]=b.[name] --全连接写法一
SELECT a.*,b.* FROM table_1 a RIGHT OUTER JOIN table_2 b ON a.[name]=b.[name] --全连接写法二

SELECT a.*,b.* FROM table_1 a CROSS JOIN table_2 b --交叉连接

SELECT a.*,b.* FROM table_1 a,table_2 b --内连接

--因为都是用笛卡尔积运算,所以结果一致。

SELECT a.*,b.* FROM table_1 a,table_1 b WHERE a.[name]=b.[name] --连接的两表是同一个表,别称不一样


SELECT a.*,b.* FROM table_1 a LEFT JOIN table_1 b ON a.[name]=b.[name] --左连接写法

--......

?

热点排行