• mysql数据库中表格的联合查询


    多表联合查询

    1. 环境准备:

     

    备注:三个表中至少有一个字段相同(字段表内信息可不完全一致,顺序也不必相同),从而起到三个表格相连的作用

    2. 多表联合查询方式:

    语法格式:select 标记1.字段名,标记2.字段名,标记1.字段名,标记3.字段名 from 表名1 标记1 ,表名2 标记2,表名3 标记 where 标记1.字段名=标记2.字段名 and 标记1.字段名=标记3.字段名;

    MariaDB [dazhu]> select c.id,c.name,c.chengji,j.jingyan,x.xinzi,x.gongsi from chengjibiao c,jianlibiao j,xinzibiao x where c.id=j.id and c.id=x.id;

    3.多表联合查询,同时为字段设置as别名:

    语法格式:select 标记1.字段名,标记2.字段名 as 别名A,标记1.字段名 as 别名1,标记3.字段名 as 别名c from 表名1 标记1 ,表名2 标记2,表名3 标记3  where 标记1.字段名=标记2.字段名 and 标记1.字段名=标记3.字段名;

    MariaDB [dazhu]> select c.id as '编号',c.name,c.chengji,j.jingyan,x.xinzi,x.gongsi as '单位' from chengjibiao c,jianlibiao j,xinzibiao x where c.id=j.id and c.id=x.id;
    ##这样,id和gongsi字段名就会分别被显示为‘编号’和‘单位’

    4.多表联合查询,外连接:

    一、左连接;

    以左边表格为主,包含所有左边表中的记录甚至是右边表中没有和它匹配的记录。因此可以用于查询未产生第二表格数据的第一表格内的元素信息!

    基本格式:select 字段/* from 左表 left 右表 on 左表字段=右表字段;

    二.右连接

    以右边表格为主,包含所有右边表中的记录.

    基本格式:select 字段/* from 左表 right 右表 on 左表字段=右表字段;

    实例:

    以左边为主
    select * from xueyuanbiao left join xinzibiao on xueyuanbiao.id = xinzibiao.id;
    ##出了可以查看学员就业情况之外,还可以查询出哪个学员没找到工作
    MariaDB [dazhu]> select c.id as "编号",c.name,c.chengji,x.name,x.xinzi as "biao c left join xinzibiao x on c.id=x.id;
    +--------+--------+---------+--------+--------+
    | 编号   | name   | chengji | name   | 薪资   |
    +--------+--------+---------+--------+--------+
    |      1 | 大傻   |      90 | 大傻   |  18000 |
    |      2 | 小二   |      95 | 小二   |  16000 |
    |      4 | 六六   |      86 | 六六   |  16000 |
    |      5 | 赵五   |     100 | 赵五   |  17000 |
    |      6 | 宇宇   |      73 | NULL   |   NULL |
    |      3 | 明明   |      80 | NULL   |   NULL |可以发现宇宇和明明可能还未找到工作;
    +--------+--------+---------+--------+--------+
    6 rows in set (0.00 sec)
    以右边为主
    MariaDB [dazhu]> select c.id as "编号",c.name,c.chengji,x.name,x.xinzi as "biao c right join xinzibiao x on c.id=x.id;
    +--------+--------+---------+--------+--------+
    | 编号   | name   | chengji | name   | 薪资   |
    +--------+--------+---------+--------+--------+
    |      1 | 大傻   |      90 | 大傻   |  18000 |
    |      2 | 小二   |      95 | 小二   |  16000 |
    |      4 | 六六   |      86 | 六六   |  16000 |
    |      5 | 赵五   |     100 | 赵五   |  17000 |只看找到工作的学员的曾经成绩;
    +--------+--------+---------+--------+--------+
    4 rows in set (0.00 sec)

    三.子查询

    有时候,当我们查询的时候,需要的条件是另外一个select语句的结果,这时就需要使用子查询。
    用于子查询的关键字包括in、not in、=、!=、exists、not exists等

    基本语法 :select 字段 from 表名 where 字段 in(条件(可以是字段元素也可以是select语句从其他表提取内容!))

    实例:

    MariaDB [dazhu]> select * from chengjibiao where id in(select id from xinzi
    
    ##先提取xinzibiao中的ID内容让后作为提取成绩表内容的条件id的参数!(可以理解为仅仅在成绩表一个表中偷取内容)
    +------+--------+---------+
    | id   | name   | chengji |
    +------+--------+---------+
    |    1 | 大傻   |      90 |
    |    2 | 小二   |      95 |
    |    4 | 六六   |      86 |
    |    5 | 赵五   |     100 |
    +------+--------+---------+
    4 rows in set (0.00 sec)
    MariaDB [dazhu]> select * from chengjibiao where id not in(select id from xinzibiao);
    +------+--------+---------+
    | id   | name   | chengji |
    +------+--------+---------+
    |    6 | 宇宇   |      73 |
    |    3 | 明明   |      80 |
    +------+--------+---------+
    2 rows in set (0.00 sec)
    ......同理,select * from chengjibiao where id = 1;

    四、记录联合;

    使用 union union all 关键字,将两个表的数据按照一定的查询条件查询出来后,将结果合并到一起显示。

    两者主要区别在于:union去重;union all 不去重,全部显示

    实例:

    MariaDB [dazhu]> select chengji from chengjibiao union all select xinzi from xinzibiao;
    +---------+
    | chengji |
    +---------+
    |      90 |
    |      95 |
    |      86 |
    |     100 |
    |      73 |
    |      80 |
    |   18000 |
    |   16000 |
    |   16000 |
    |   17000 |
    +---------+
    10 rows in set (0.00 sec)
    
    MariaDB [dazhu]> select chengji from chengjibiao union select xinzi from xinzibiao;
    +---------+
    | chengji |
    +---------+
    |      90 |
    |      95 |
    |      86 |
    |     100 |
    |      73 |
    |      80 |
    |   18000 |
    |   16000 |
    |   17000 |
    +---------+
    9 rows in set (0.00 sec)
  • 相关阅读:
    jmeter使用教程
    Jmeter的好搭档Badboy的安装与简单使用
    十大编程算法助程序员走上高手之路
    polyfillJS生成promise对象
    js+canvas实现滑动拼图验证码功能
    WebAssembly介绍
    解释器与编译器
    使用axios优雅的发起网络请求
    【javascript】script标签的async异步解析
    sass用法快速入门
  • 原文地址:https://www.cnblogs.com/dazhu-secure/p/13717120.html
Copyright © 2020-2023  润新知