【多表查询 多表查询 多表查询】

多表查询

查询语法:
  SELECT
   列表名称
  FROM
   表明列表
  WHERE
   …
 笛卡尔积:
  有两个集合A,B,取这两个集合的所有组成情况
  要完成多表查询,需要消除无用的数据
 多表查询分类:
  1、内连接查询:
   1、隐式内连接:使用where消除无用的数据
    例子:
     SELECT
      t1.name,
      t1.gender,
      t2.name
     FROM
      emp t1,
      dept t2
     WHERE
      t1.dept_id=t2.id;
      
   2、显式内连接:
    语法:SELECT 字段列表 FROM 表名1 INNER JOIN 表名2 ON 条件;
     SELECT 字段列表 FROM 表名1 JOIN 表名2 ON 条件;(INNER可省略)
   
   3、内连接查询:
    1、从哪些表查询数据
    2、条件是什么
    3、查询哪些字段
  2、外连接查询:
   1、左外连接:
    语法:select 字段列表 from 表1 left [outer] join on 条件
    查询的是左表所有所有数据以及其交集部分
   2、右外连接:
    语法:select 字段列表 from 表1 right [outer] join on 条件
    查询的是右表所有所有数据以及其交集部分
  3、子查询:
   概念:查询中嵌套查询,称嵌套查询为子查询
    SELECT * FROM emp WHERE emp.salary=(SELECT MAX(salary) FROM emp);
   子查询不同情况:
    1、子查询的结果是单行单列的:
     子查询可以作为条件,使用运算符判断:>、>=、=、<=、<
    2、子查询的结果是多行单列的:
     使用运算符in来判断
     SELECT * FROM emp WHERE dept_id IN(SELECT id FROM dept WHERE NAME='财务部‘ OR NAME=’市场部‘);
    3、子查询的结果是多行多列的:
     子查询可以作为一张虚拟表
     查询员工入职某日期之后的员工信息和部门信息
     SELECT * FROM dept t1,(SELECT * FROM emp WHERE emp.join_date>‘2011-11-11’) t2 WHERE t1.id=t2.dept_id;

猜你喜欢

转载自blog.csdn.net/RSssr/article/details/109728488