废话不多,不深入写原理,直接上例子:
--函数说明:
--DECLARE 声明变量
--WHILE 循环
--INSERT 增加表数据
--@@rowcount 返回SQL语句执行后受影响的行数
--CASE WHEN THEN ELSE END 判断条件给予赋值
-------------构造测试数据 BEGIN------------------
DECLARE @table1 TABLE ( id INT , NAME VARCHAR(20) , sex VARCHAR(2) )
DECLARE @table2 TABLE ( id INT , NAME VARCHAR(20) , sex VARCHAR(2) )
DECLARE @n INT
SET @n = 1
WHILE @n <= 5
BEGIN
INSERT INTO @table1 ( id , NAME , sex )
VALUES ( @n , '小' + CONVERT(VARCHAR(10), @n) + '君' ,
CASE (10 + @n)%2 WHEN 1 THEN '女' ELSE '男' END
)
INSERT INTO @table2 ( id , NAME , sex )
VALUES ( @n , '小' + CONVERT(VARCHAR(10), @n) + '君' ,
CASE (10 + @n)%2 WHEN 1 THEN '女' ELSE '男' END
)
SET @n = @n + @@rowcount
END
WHILE @n <= 10
BEGIN
INSERT INTO @table2 ( id , NAME , sex )
VALUES ( @n , '小' + CONVERT(VARCHAR(10), @n) + '君' ,
CASE (10 + @n)%2 WHEN 1 THEN '女' ELSE '男' END
)
SET @n = @n + @@rowcount
END
-------------构造测试数据 END------------------
--1、RIGHT JOIN 只查询b表在a表中没有的数据
SELECT * FROM @table1 a RIGHT JOIN @table2 b ON a.id = b.id WHERE a.id IS NULL
--2、LEFT JOIN 只查询a表和b表中相同的数据
SELECT * FROM @table1 a LEFT JOIN @table2 b ON a.id = b.id
--3、这中写法与 LEFT JOIN 查询的数据相同
SELECT * FROM @table1 a ,@table2 b WHERE a.id = b.id
--4、这中写法查询b表的全部数据,a表与b表关联,a表中没有的数据显示为NULL
SELECT * FROM @table1 a RIGHT JOIN @table2 b ON a.id = b.id