MySql之多表查询

1、内连接

1).方言版

SELECT 
  e.empname,
  d.`deptname` 
FROM
  emp e,
  dept d 
WHERE e.`deptno` = d.`deptno` ;

2).标准版

SELECT 
  e.`empname`,
  d.`deptname` 
FROM
  emp e 
  INNER JOIN dept d 
    ON e.`deptno` = d.`deptno` ;

3).自然版

SELECT 
  e.`empname`,
  d.`deptname` 
FROM
  emp e natural 
  join dept d ;

2、外连接

1).左外连接:左表无论是否满足条件都会被查询出来,而右表只有满足条件的才能被查询出来。左表中不满足条件的记录,右表不分都为NULL。

SELECT 
  e.`empname`,
  d.`deptname` 
FROM
  emp e 
  LEFT OUTER JOIN dept d 
    ON e.`deptno` = d.`deptno` ;

2).右外连接:右表无论是否满足条件都会被查询出来,而左表只有满足条件的才能被查询出来。右表不满足条件的记录,左表部分都为NULL。

SELECT 
  e.`empname`,
  d.`deptname` 
FROM
  emp e 
  RIGHT OUTER JOIN dept d 
    ON e.`deptno` = d.`deptno` ;

3、子查询

查询中有查询(查看SELECT关键字的个数)

1).出现的位置

一种为where后作为条件存在,另一种为from后作为表存在(多行多列)

2).根据条件结果分类

.单行单列:SELECT   *    FROM   表1   别名1    WHERE    列1    [>    <    =   >=   <=   != ]  (SELECT  列   FROM   表2    别名2    WHERE    条件)
.多行单列:SELECT   *    FROM   表1   别名1    WHERE    列1    [IN   ANY    ALL ]  (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    条件
  



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值