MYSQL——表的加减法、联结

UNION:两表相加(并)

将下面两个表合并,以行为单位 union的用法:

SELECT shop_id,shop_cata FROM shopinfocopy
UNION
SELECT shohin_id,shohin_cata FROM shopinfo;

会去除重复的记录 1.合并的两个表,挑选出来的列数必须相同 2.相同位置的列的数据类型必须相同 3.可以使用任何select语句(where等),order by子句只能在最后使用一次 4.ALL UNION可以保留重复行

INTERSECT:表的公共部分(交)

MYSQL不支持此功能

SELECT shop_id,shop_cata FROM shopinfocopy
INTERSECT
SELECT shohin_id,shohin_cata FROM shopinfo;

EXCEPT:表的差集

MYSQL不支持此功能 表示在只第一个表不在第二个表的记录,减数与被减数位置不同结果不同 oracle使用minus

SELECT shop_id,shop_cata FROM shopinfocopy
EXCEPT
SELECT shohin_id,shohin_cata FROM shopinfo;

表的联结

以列为单位,将其他表中的列添加过来

内联结——INNER JOIN

1.from子句中可能会使用多张表,通过关键字INNER JOIN将表连接在一起,可以通过为表指定别名的方式使sql语句更加简洁 2.on关键字后面是联结键(两表共同的列),on要在from与where之间使用 3.select子句中的列需要指定是哪个表中的列

SELECT T.shopgood_id,T.shop_name,T.shohin_id,
S.shohin_name,S.sale_danjia
FROM shopinfo AS S INNER JOIN shopgood AS T
ON S.shohin_id=T.shohin_id;

内联结与where子句结合使用 挑选大阪店的信息

SELECT S.shohin_id,S.shohin_name,S.sale_danjia,
T.shopgood_id,T.shop_name,T.shohin_id
FROM shopinfo AS S INNER JOIN shopgood AS T
ON S.shohin_id=T.shohin_id
WHERE T.shopgood_id=000C;

外联结——OUTER JOIN

SELECT T.shopgood_id,T.shop_name,T.shohin_id,
S.shohin_name,S.sale_danjia
FROM shopinfo AS S LEFT OUTER JOIN shopgood AS T
ON S.shohin_id=T.shohin_id;

可以选出单张表的全部信息,使用left 和right指定主表(显示全部信息的表)

3张以上的表联结

SELECT T.shopgood_id,T.shop_name,T.shohin_id,
S.shohin_name,S.sale_danjia
FROM shopinfo AS S INNER JOIN shopgood AS T
    ON S.shohin_id=T.shohin_id
       INNER JOIN Zshop AS ZS
           ON T.shohin_id=ZS.shohin_id;

交叉联结:cross join

笛卡尔积,A表有m条记录,B表有n条记录,交叉联结之后得到m*n条记录,在实际中应用很少

SELECT T.shopgood_id,T.shop_name,T.shohin_id,S.shohin_name
FROM shopinfo AS S CROSS JOIN shopgood AS T;

一部分结果

经验分享 程序员 微信小程序 职场和发展