MySQL-7:多表查询

作者: Deque | 来源:发表于2019-04-03 00:40 被阅读0次

今日内容

1.多表查询

2.事务

3.DCL

多表查询:

  • 查询语法:
    select 
        列名列表
    from
        表名列表
    where....
  • 数据准备(数据库表以及数据的创建):

       # 新增数据
       INSERT INTO dept (NAME) VALUES('开发部'),('市场部'),('财务部');
       
       # 创建员工表
       CREATE TABLE emp(
        id INT PRIMARY KEY AUTO_INCREMENT,
        NAME VARCHAR(10),
        gender CHAR(1), -- 性别
        salary DOUBLE, -- 工资
        join_date DATE, -- 入职日期
        dept_id INT,
        FOREIGN KEY(dept_id) REFERENCES dept(id) -- 外键
       );
        
    # 新增数据
    INSERT INTO emp(NAME,gender,salary,join_date,dept_id) VALUES('孙悟空','男',7200,'2014-02-24',1);
    INSERT INTO emp(NAME,gender,salary,join_date,dept_id) VALUES('猪八戒','男',4200,'2015-03-15',2);
    INSERT INTO emp(NAME,gender,salary,join_date,dept_id) VALUES('沙师弟','男',3600,'2013-02-24',2);
    INSERT INTO emp(NAME,gender,salary,join_date,dept_id) VALUES('唐僧','男',9000,'2013-02-24',2);
    INSERT INTO emp(NAME,gender,salary,join_date,dept_id) VALUES('白骨精','男',5400,'2018-08-08',3);
    INSERT INTO emp(NAME,gender,salary,join_date,dept_id) VALUES('蜘蛛精','男',6100,'2019-01-01',1);
    
  • 笛卡尔积

    • 有两个集合a,b,取这两个集合的所以组成情况
    • 要完成多表查询,需要消除无用的数据
  • 多表查询分类
    1.内链接查询:
    (1)隐式内链接:使用 where 条件,消除无用的数据。

    • 例子:
-- 查询员工表的名称,性别。部门表的名称

-- 正规写法 方便添加注释(符合企业sql规范)
SELECT
   t1.name, -- 员工表的姓名
   t1.gender, -- 员工表的性别
   t2.name -- 部门表的名称
FROM
   emp t1,
   dept t2
WHERE
   t1.dept_id=t2.id;

(2)显式内链接

  • 语法:
    select 字段列表 from 表明 inner join 表明2 on 条件
  • 例如:
-- 查询员工表的名称,性别。部门表的名称(使用显式内链接) 
SELECT * FROM emp [INNER] JOIN dept ON emp.dept_id = dept.id;

-- INNER 是可选操作,可以直接使用 JOIN ON 如下:
SELECT * FROM emp JOIN dept ON emp.dept_id = dept.id;

(3)内链接查询注意事项:

  • 从哪些表中查询数据
  • 条件是什么?
  • 查询哪些字段?

2.外链接查询:
(1)左外连接:

  • 语法:select 字段列表 from 表1 left [outer] join 表2 on 条件
  • 查询的是左表所有数据以及其交集部分。


    左外连接,图片来自互联网
 -- 左外连接 (LEFT JOIN ON)
 SELECT
    t1.*,
    t2.name
 FROM
    emp t1
LEFT JOIN
    dept t2
 ON
    t1.dept_id = t2.id;

(2)右外连接:

  • 语法:select 字段列表 from 表1 right [outer] join 表2 on 条件
  • 查询的是右表所有数据以及其交集部分。


    右外连接,图片来自互联网
 -- 右外连接 (RIGHT JOIN ON)
SELECT
    t1.*,
    t2.name
FROM
    dept t2
RIGHT JOIN
    emp t1
 ON
    t1.dept_id = t2.id;

3.子查询:

  • 概念:查询中嵌套查询,称嵌套查询为子查询。
     -- 子查询
     -- 查询工资最高的员工的信息

     -- 1、查询最高的工资是多少?
     SELECT MAX(salary) FROM emp;

    -- 查询的结果是 9000

     -- 2.查询员工信息,并且工资等于最高的
     SELECT * FROM emp WHERE emp.salary=9000;
     
     -- 一条SQL就能完成
    SELECT * FROM emp WHERE emp.salary=(
        SELECT MAX(salary) FROM emp
        );

  • 子查询的不同情况
    1、子查询的结果是单行单列的:
    • 子查询可以作为条件,使用运算符(>、<、>=、<=、=)去判断。
-- 查询员工工资小于平均工资的人
SELECT * FROM emp WHERE emp.salary < (SELECT AVG(salary) FROM emp);

2、子查询的结果是多行单列的:

  • 可以使用运算符IN来判断
-- 查询‘财务部’和'市场部'所有的员工信息
-- 1、先查询财务部的id
SELECT id FROM dept WHERE name='财务部' OR name='市场部';
-- 2、再根据ID查询信息
SELECT * FROM emp WHERE dept_id = 3 OR dept_id=2;

-- 其中第二条语句可以改写成如下:(相当与上面这条 )
SELECT * FROM emp WHERE dept_id IN(3,2);

-- 子查询
SELECT * FROM emp WHERE dept_id IN(SELECT id FROM dept WHERE name='财务部' OR name='市场部');

3、子查询的结果是多行多列的:

  • 子查询可以作为一张虚拟表来进行查询
-- 多行多列
-- 例:查询员工入职日期是2015年-11-11之后的员工信息和部门信息(子查询)
-- 括号里的叫做虚拟表
SELECT * FROM dept t1,(SELECT * FROM emp WHERE emp.join_date > '2015-11-11') t2
WHERE t1.id = t2.dept_id;

-- 例:查询员工入职日期是2015年-11-11之后的员工信息和部门信息(普通内链接查询)
SELECT * FROM emp t1, dept t2 
WHERE t1.dept_id = t2.id AND t1.join_date > '2015-11-11';

事务

DCL

相关文章

  • MySQL-7:多表查询

    今日内容 1.多表查询 2.事务 3.DCL 多表查询: 查询语法: 数据准备(数据库表以及数据的创建): #...

  • SQLAlchemy(四)

    知识要点: 1.多表查询 2.原生SQL的查询 多表查询 在MySQL中我们讲了多表查询,在SQLAlchemy中...

  • python面试题01

    1、什么是多表关联查询,有几种多表关联的查询方式,分别是什么? 多表关联查询概念: 多表关联查询分类:1.1内连接...

  • 数据库基本操作3.0

    今日内容 多表查询 \\ 事务DCL 多表查询: 事务 DCL:

  • MySql : 三、 多表查询和事务

    前言 本篇主要介绍了数据库中多表查询以及事务相关的知识。 目录 一、多表查询二、子查询三、事务 一、多表查询 1....

  • Oracle详解(Ⅱ):世界上目前已知最好的关系型数据库

    多表查询 多表连接基本查询 使用一张以上的表做查询就是多表查询 这样会出现的结果就是:笛卡儿积连接查询的时候一般在...

  • spring-data-jpa 复杂查询:使用

    单表查询 多表查询

  • 4.MySQL多表&事务

    主要内容 1 . 多表查询2 . 事务3 . DCL 多表查询: 事务 DCL:

  • SQL语句常用命令整理---多表查询

    多表查詢之关连查询 多表数据连接查询,简称连接查询。本篇我们来一同学习多表连接查询的相关用法,主要內容有: 内连接...

  • sql多表查询

    普通多表查询 嵌套多表查询 链接多表查询 左链接(会将左表的内容全部输出,没有需要补NULL) 右链接(会将右表的...

网友评论

    本文标题:MySQL-7:多表查询

    本文链接:https://www.haomeiwen.com/subject/ipuobqtx.html