MySQL-7:多表查询

今日内容

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,458评论 6 513
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,030评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,879评论 0 358
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,278评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,296评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,019评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,633评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,541评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,068评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,181评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,318评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,991评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,670评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,183评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,302评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,655评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,327评论 2 358

推荐阅读更多精彩内容

  • ORACLE自学教程 --create tabletestone ( id number, --序号usernam...
    落叶寂聊阅读 1,083评论 0 0
  • 1. 了解SQL 1.1 数据库基础 ​ 学习到目前这个阶段,我们就需要以某种方式与数据库打交道。在深入学习MyS...
    锋享前端阅读 1,073评论 0 1
  • 数据库的概述 1.数据库的作用:仓库,存储数据。 2.关系型的数据库,保存实体与实体之间的关系。 3.常见的数据库...
    三万_chenbing阅读 906评论 0 3
  • 和外婆刚刚通过电话,老人家精神很好。我是相当佩服外婆的,八十五岁,独自生活在自己的小房子里,虽然亲戚们都在附近,但...
    风之女孩阅读 510评论 0 1
  • 1. 很多人觉得:把一件事坚持到底,得靠强大的意志力。自己之所以半途而废,是因为意志力不坚定。但事实上,人的意志力...
    共剪西窗烛阅读 852评论 1 1