zoukankan      html  css  js  c++  java
  • MySQL 多表查询

    1、现有两表如下

    # t_student
    +----+----------+------+------+-------+
    | id | name     | age  | sex  | class |
    +----+----------+------+------+-------+
    |  1 | zhangsan |   18 | boy  | 1     |
    |  2 | wangwu   |   20 | boy  | 1     |
    |  3 | zhaoliu  |   19 | boy  | 2     |
    |  4 | lisi     |   22 | girl | NULL  |
    +----+----------+------+------+-------+
    
    # t_course
    +------+-------+---------+
    | id   | score | subject |
    +------+-------+---------+
    |    1 |    80 | English |
    |    1 |    79 | Chinese |
    |    2 |    90 | English |
    |    2 |    56 | Chinese |
    |    3 |    77 | English |
    |    3 |   100 | Chinese |
    +------+-------+---------+

    2、子查询(一个查询嵌套另一个查询)

    • 标量 子查询(返回一个值)
      • 把一个 sql 执行返回的一个值,作为另一个 sql 的一个条件
      • 标量子查询可以使用符号 >,>=,<,<=,=,!=,<> 进行比较判断
    mysql> select * from t_course where id = (select id from t_student where name = "zhangsan");
    
    +------+-------+---------+
    | id   | score | subject |
    +------+-------+---------+
    |    1 |    80 | English |
    |    1 |    79 | Chinese |
    +------+-------+---------+
    • 列 子查询 (返回一个列)
      • 执行一个 sql 把返回的一个列作为另一个 sql 条件
      • 列子查询使用符号 in,not in
    # 查询出 1 班所有学生的成绩信息
    mysql> select * from t_course where id in (select id from t_student where class = 1);
    
    +------+-------+---------+
    | id   | score | subject |
    +------+-------+---------+
    |    1 |    80 | English |
    |    1 |    79 | Chinese |
    |    2 |    90 | English |
    |    2 |    56 | Chinese |
    +------+-------+---------+
    • 行 子查询 (返回一行多列)
    SELECT * FROM article WHERE (title,content,uid) = (SELECT title,content,uid FROM blog WHERE bid=2)
    • 表 子查询 (返回一个表)
      • 执行一个 sql 返回的是一个表
      • 如下实例中 a 为别名
    mysql> select name from (select * from t_student)a;
    +----------+
    | name     |
    +----------+
    | zhangsan |
    | wangwu   |
    | zhaoliu  |
    | lisi     |
    +----------+

    3、多表连接

    • 内连接查询(查询两个表都符合条件的数据)
      • 关键字 inner join
      • 基本格式如下
        • select 字段 from 表1 inner join 表2 on 表1.字段 = 表2.字段 
    # 查询出每个人的英语成绩分别是多少
    mysql> select a.name,b.score,b.subject from t_student a inner join t_course b on a.id = b.id where subject = "English";
    
    +----------+-------+---------+
    | name     | score | subject |
    +----------+-------+---------+
    | zhangsan |    80 | English |
    | wangwu   |    90 | English |
    | zhaoliu  |    77 | English |
    +----------+-------+---------+
    • 左连接查询(左边表中数据显示全部,以左表为准)
      • 关键字 left join
      • 基本格式如下
        • select 字段 from 表1 left join 表2 on 表1.字段 = 表2.字段
    mysql> select * from t_student a left join t_course b on a.id = b.id;
    
    +----+----------+------+------+-------+------+-------+---------+
    | id | name     | age  | sex  | class | id   | score | subject |
    +----+----------+------+------+-------+------+-------+---------+
    |  1 | zhangsan |   18 | boy  | 1     |    1 |    80 | English |
    |  1 | zhangsan |   18 | boy  | 1     |    1 |    79 | Chinese |
    |  2 | wangwu   |   20 | boy  | 1     |    2 |    90 | English |
    |  2 | wangwu   |   20 | boy  | 1     |    2 |    56 | Chinese |
    |  3 | zhaoliu  |   19 | boy  | 2     |    3 |    77 | English |
    |  3 | zhaoliu  |   19 | boy  | 2     |    3 |   100 | Chinese |
    |  4 | lisi     |   22 | girl | NULL  | NULL |  NULL | NULL    |
    +----+----------+------+------+-------+------+-------+---------+
    • 右连接查询(右边表中数据显示全部,以右表为准)
      • 关键字 right join
      • 基本格式如下
        • select 字段 from 表1 right join 表2 on 表1.字段 = 表2.字段
    mysql> select * from t_student a right join t_course b on a.id = b.id;
    
    +------+----------+------+------+-------+------+-------+---------+
    | id   | name     | age  | sex  | class | id   | score | subject |
    +------+----------+------+------+-------+------+-------+---------+
    |    1 | zhangsan |   18 | boy  | 1     |    1 |    80 | English |
    |    1 | zhangsan |   18 | boy  | 1     |    1 |    79 | Chinese |
    |    2 | wangwu   |   20 | boy  | 1     |    2 |    90 | English |
    |    2 | wangwu   |   20 | boy  | 1     |    2 |    56 | Chinese |
    |    3 | zhaoliu  |   19 | boy  | 2     |    3 |    77 | English |
    |    3 | zhaoliu  |   19 | boy  | 2     |    3 |   100 | Chinese |
    +------+----------+------+------+-------+------+-------+---------+
  • 相关阅读:
    JMETER接口测试问题三之Host of origin may not be blank
    JMETER接口测试问题解决二之后续接口请求依赖登录接口的操作
    JMETER接口测试问题一之请求超时报错
    jmeter接口测试之json提取器的使用方法二
    JMETER接口测试之Debug sample
    JMTER接口测试之JSON提取器
    EXCEL批量导入到Sqlserver数据库并进行两表间数据的批量修改
    Linq的整型或实体类null引发的报错问题
    SqlServer 统计1-12月份 每个月的数据(临时表)
    select2的多选下拉框上传
  • 原文地址:https://www.cnblogs.com/ZhengYing0813/p/12674518.html
Copyright © 2011-2022 走看看