SQL集合运算

SQL集合运算主要包括两个方面:

  • 行方向(竖)的表的加减法,就是使用UNOIN(并集)、INTERSECT(交集)、EXCEPT(差集)等集合运算符进行集合运算。
  • 列方向(横)的联结,主要是INNER JOIN、OUTER JOIN、CROSS JOIN。

表的加法—UNION:

SELECT shohin_id,shohin_mei
    FROM Shohin
UNION
SELECT shohin_id,shohin_mei
    FROM Shohin2 ;

集合运算的注意事项:

  • 作为运算对象的记录的列数必须相同
  • 作为运算对象的记录中列的类型必须一直
  • 可以使用任何SELECT语句,但ORDER BY子句只能在最后使用一次

注意:集合运算符会除去重复的记录。但是使用ALL选项,可以保留重复行。

SELECT shohin_id, shohin_mei
    FROM Shohin
UNION ALL
SELECT shohin_id, shohin_mei
    FROM Shohin;

选取表中公共部分—INTERSECT:

SELECT shohin_id,shohin_mei
    FROM Shohin
INTERSECT
SELECT shohin_id,shohin_mei
    FROM Shohin2
ORDER BY shohin_id;

记录的减法—EXCEPT:

SELECT shohin_id,shohin_mei
    FROM Shohin
EXCEPT
SELECT shohin_id,shohin_mei
    FROM Shohin2
ORDER BY shohin_id;

联结就是将其他表中的列添加过来,进行“添加列”的集合运算。

内联结—INNER JOIN:

SELECT TS.trnpo_id,TS.tempo_mei,TS.shohin_id,S.shohin_mei,S.hanbai_tanka
    FROM TenpoShohin AS TS INNER JOIN Shohin AS S
        ON TS.shohin_id = S.shohin_id;

ON后面是联结条件。

-- 内联结和WHERE子句结合使用
SELECT TS.trnpo_id,TS.tempo_mei,TS.shohin_id,S.shohin_mei,S.hanbai_tanka
    FROM TenpoShohin AS TS INNER JOIN Shohin AS S
        ON TS.shohin_id = S.shohin_id
    WHERE TS.tenpo_id = '000A';

我们只想知道东京店(000A)的信息时,可以像之前学习的那样在WHERE子句中添加条件。

外联结—OUTER JOIN:

SELECT TS.trnpo_id,TS.tempo_mei,TS.shohin_id,S.shohin_mei,S.hanbai_tanka
    FROM TenpoShohin AS TS OUIER JOIN Shohin AS S
        ON TS.shohin_id = S.shohin_id;

-- 外联结中使用LEFT、RIGHT来指定主表。使用二者所得到的结果完全相同。
SELECT TS.trnpo_id,TS.tempo_mei,TS.shohin_id,S.shohin_mei,S.hanbai_tanka
    FROM TenpoShohin AS TS LEFT INNER JOIN Shohin AS S
        ON TS.shohin_id = S.shohin_id;

交叉联结—CROSS JOIN:

交叉联结使用较少,得到的结果是列数相加,行数相乘的结果。

自联结:

假如你发现某物品(其ID未DTNTR)存在问题,因此想知道生产该物品的供应商生产的其他物品是否也存在这些问题。因此查询要求首先找到生产ID为DTNTR的供应商,然后找出这个供应商的其他物品。

通过子查询解决上面问题:

这里写图片描述

通过子查询实现相同查询:

SELECT p1.prod_id, p2.prod_name
FROM products AS p1, products AS p2
WHERE p1.vend_id = p2.vend_id
    AND p2.prod_id = 'DTNTR';

WHERE(通过匹配p1的vend_id和p2中的vend_id)首先联结两个表,然后按第二个表中的prod_id过滤数据,返回所需的数据。

自联结就是先表示成两个表,然后通过指定联结条件和过滤条件进行内联结。

猜你喜欢

转载自blog.csdn.net/u014465934/article/details/80562734