美文网首页
MySQL多表查询

MySQL多表查询

作者: lily_5945 | 来源:发表于2020-12-25 15:32 被阅读0次

首先我们来了解一下表与表之间的关系:一对一、一对多、多对多。
这里我们把多表查询分为四个学习模块:连接查询、合并结果集、子查询和自然连接

一、连表查询

  • 交叉连接:又名笛卡尔积,使用交叉连接会产生笛卡尔积
    假设集合A={a, b},集合B={0, 1, 2},则两个集合的笛卡尔积为{(a, 0), (a, 1), (a, 2), (b, 0), (b, 1), (b, 2)
    同时查询到两个表就是笛卡尔积:select * from 表1,表2 ;
  • 给查询结果器取别名:select * from 表1 别名1;(取了别名后,要查询表的字段需要用 别名.字段 来查询)
  • 如何保证多表联查时数据正确:在查询时要把主键和外键保持一致
  • 内连接:查询两个表的交集,解决笛卡尔积现象,查询正确需要的数据
# 隐式内连接,使用where条件消除笛卡尔积,多个表在后面加and
select * from 表1,表2 WHERE 表1.字段 = 表2.字段;
# 显示内连接,多个表在JOIN ...ON 后面添加 JOIN ... ON,如果还有条件,直接在后面写where、and 
select * from 表1 JOIN 表2 ON 表1.字段 = 表2.字段; 
# 以下是三个表student 、score 、course  的两种方法的查询例子
select st.name,sc.score,c.name from student st, score sc, course c WHERE st.id= sc.sid AND sc.cid=c.cid;
select st.name,sc.score,c.name from student st JOIN score sc ON st.id=sc.sid JOIN course c ON sc.cid=c.cid;
  • 外连接之左外连接:左边表中的数据全部查出来,右表当中,只查满足条件的数据
select * from 表1  LEFT OUTER JOIN 表2 ON 表1.字段 = 表2.字段;  #OUTER 可省略
select * from student st LEFT OUTER JOIN score sc ON st.sid=sc.sid;
  • 外连接之右外连接:右边表中的数据全部查出来,左边表中,只查满足条件的数据
select * from 表1 RIGHT OUTER JOIN 表2 ON 表1.字段=表2.字段;  #OUTER 可省略
select * from student st RIGHT OUTER JOIN score sc ON st.sid=sc.sid;

二、子查询

  • 什么是子查询:将一个查询结果作为另一个查询的对象,即两个以上的select语句。也就是SQL语句嵌套
select * from (select * from 表名) as 别名
select * from where 带select语句的条件
  • 出现位置和注意事项
    1,where后,把select查询出来的结果当做另一个select的条件值
    2,from后,把查询出的结果当做一个新表
    3,注意,查询的虚拟表必须要取别名

三、合并结果集

  • 什么是合并结果集:把两个select语句的查询结果合并到一起
  • 注意事项:被合并的两个结果:列数、列类型必须相同
  • 合并结果集的两种方式
# UNION,合并时去除重复的记录
select * from 表1 UNION select * from 表2;
# UNION ALL,合并时不去除重复记录
select * from 表1 UNION ALL select * from 表2;

四、自然连接

释义:
1,连接查询会产生无用笛卡尔集,我们通常使用主外键关系来去除它,而自然连接无需你去给出主外键等式,他会自动找到这一等式。也就是说不用去写条件。

select * from 表1 NATURAL JOIN 表2;

要求:
1,两张连接的表中列名称和类型完全一致的列作为条件;
2,会去除相同的列;
3,如果有两个相同的字段名,其中一个相同的字段内容不同,则查询的数据是空的;

相关文章

  • 2018-03-20

    MYSQL查询语句 MYSQL复杂操作语句 MYSQL多表查询方法 函数部分

  • SQLAlchemy(四)

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

  • 深入浅出MySQL(五)

    多表查询 MySQL中的多表联查 MySQL中多表查询分为三种形式: 笛卡尔积的形式 内连接的形式 外连接的形式 ...

  • mysql数据库-多表查询

    今日任务 完成对MYSQL数据库的多表查询及建表的操作 教学目标 掌握MYSQL中多表的创建及多表的查询 掌握MY...

  • Mysql-多表查询as索引

    1、Mysql多表查询2、information_schema 虚拟库3、索引 1、多表查询 方法(1) 根据需求...

  • 4/30day45_MySql多表

    回顾 MySQL多表查询&权限 今日目标 一 多表查询【重点...】 同时查询多张表获取到需要的数据组成完整的信息...

  • MySQL学习笔记二之单表查询与多表查询

    title: MySQL学习笔记二之单表查询与多表查询tags: MySQL 数据库categories: MyS...

  • MySQL 多表操作

    day07-多表操作 今日任务 完成对MYSQL数据库的多表查询及建表的操作 教学目标 掌握MYSQL中多表的创建...

  • MySQL 多表查询

    测试表 --建表--学生表CREATETABLE`Student`(`s_id`VARCHAR(20),`s_na...

  • MySql多表查询

    1、嵌套 2、联结

网友评论

      本文标题:MySQL多表查询

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