MySQL之多表查询

1合并结果集,使用关键字union和union all,其区别是union会去掉合并中重复的部分而union all不会去掉重复的列。使用这个关键字的要求结果姐的列和类型必须相同。

定义两个表如下所示:a和b,两个表分别有一个整型的id和一个字符串的name。

1.1使用union all

SELECT * FROM a UNION ALL SELECT * FROM b;

1.2使用union

SELECT * FROM a UNION SELECT * FROM b;

2内连接

2.1这个是带有方言的方式,在oracle可能不适合

SELECT * FROM emp,dept WHERE emp.deptno=dept.deptno;

2.2这个是最标准的内连接的书写方式,建议用这个

SELECT * FROM emp e INNER JOIN dept d ON e.deptno=d.deptno;

2.3 natural join不需要on他自动根据两个表相同的字段自动匹配

SELECT * FROM emp NATURAL  JOIN dept d ;

 

3外链接

外链接分为左外连接,和右外连接。MySQL不支持全外连接。

3.1左外连接,是指以左表为主,当两个表进行连接的时候,右边的表的值没有时,会以左边的表为主,即会把左边所有的值都列出来,右表没有的补null。

SELECT * FROM emp e LEFT JOIN dept d ON e.deptno=d.deptno;

3.2右外连接和左外连接相反,他是以右表为主,当两个表进行连接的时候,左边的表没有值的时候,会以右表为准,即会把右表所有的值都列出来,左表没有的补null。

SELECT * FROM emp e RIGHT JOIN dept d ON e.deptno=d.deptno;

3.3全外连接,mysql不支持全外连接,但是可以通过将左外连接和右外连接结合起来,即union,即可得到全外连接。

SELECT * FROM emp e RIGHT JOIN dept d ON e.deptno=d.deptno
UNION
SELECT * FROM emp e LEFT JOIN dept d ON e.deptno=d.deptno;

4子查询

可以通过查看select关键字的个数来作为判断
  4.1. 出现的位置:
    where后作为条件存在(一般是多行单列)
    from后作为表存在(多行多列)

  4.2. 条件
    单行单列:SELECT * FROM 表1 别名1 WHERE 列1 [=、>、<、>=、<=、!=] (SELECT 列 FROM 表2 别名2 WHERE 条件)
    多行单列:SELECT * FROM 表1 别名1 WHERE 列1 [IN, ALL, ANY] (SELECT 列 FROM 表2 别名2 WHERE 条件)
   单行多列:SELECT * FROM 表1 别名1 WHERE (列1,列2) IN (SELECT 列1, 列2 FROM 表2 别名2 WHERE 条件)
    多行多列:SELECT * FROM 表1 别名1 , (SELECT ....) 别名2 WHERE 条件

5MySQL的关键字查询的顺序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值