MySql之多表查询

3/7/2017来源:SQL技巧人气:2635

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    条件