zoukankan      html  css  js  c++  java
  • 07:表联结MySQL笔记7

    本篇大纲

    表联结

    笛卡尔积

    内部联结

    外联结

    自联结

    联合查询

    01:联结

    • SQL最强大的功能之一就是能在数据检索查询的执行中联结表
    • 数据是存储在关系中的,关系表的设计原则是保证把信息分解为多个表,一类数据一个表,各表通过某些常用的值互相关联

    02:表关联

    • 两个表之间的关联关系通过外键来关联
    • 外键是某个表中的一列,它包含另一个表的主键值,定义了两个表之间的联系

    03:创建联结

    • 创建联结,指定要联结的所有表以及他们如何关联的

    image.png

    04:笛卡尔乘积

    • 笛卡尔积是由没有联结条件的表关系返回的结果,检索出的行的数目将是第一个表中的行数乘以第二个表中的行数

    image.png

    说明:从上面的输出中可知,相应的笛卡尔积不是我们所想要的,这里返回了数据用每个供应商匹配了每个产品,它包括了供应商不正确的产品,实际上有的供应商根本没有产品

    05:内联结

    • 内联结也成为等值联结,它基于两个表之间的相等测试

    image.png

    06:内联结(说明)

    • 上述语句中的select与前面的select语句相同,但from子句不同,这里两个表之间的关系是from子句的组成部分,以Inner Join指定。在使用这种语法时,联结条件用特定的ON子句而不是where子句。传递给ON的实际条件与传递给where的相同

    07:多表联结

    • SQL对一条select语句中可以联结的表的数目没有限制,创建联结的基本规则也相同

    首先列出所有表,然后定义表直接的关系

    image.png

    多表联结(说明)

    • 本例子显示编号为20005的订单中的物品。订单物品储存在orderitems表中,每个产品按其产品ID储存,它引用products表中的产品。这些产品通过供应商ID联结到vendors表中相应的供应商,供应商ID储存在每个产品的记录中。这里的from子句列出了3个表,而where子句定义了这两个联结条件,而第三个联结条件用来过滤出订单20005中的物品

    08:多表联结性能问题

    • 注意:MySQL在运行时关联指定的每个表以处理联结,这种处理可能非常消耗资源,因此不要联结不必要的表,联结的表越多,性能下降越厉害

    09:给表指定别名

    • 别名除了用于列名和计算字段外,可以给表起别名,给表起别名的作用是:
    1. 缩短SQL语句
    2. 运行在单条SELECT语句中多次使用相同的表

    10:给表指定别名(实例)

    • from 子句中3个表都创造了别名

    customers AS c,建立c作为customers的别名。这使得,可以使用c来代替customers

    image.png

    11:自联结

    • 自联结为在同一个表中做联结操作
    • 例1:假如发现某物品(其ID为DTNTR)存在问题,因此想知道生产该物品的供应商生产的其他物品是否也在

    问题。此查询要求首先找到生产ID为DTNTR的物品供应商,然后找出这个供应商生产的其他物品

    注意:自联结的执行效率高于子查询

    image.png

    12:外联结

    • 外联结分为:
    • 左联结
    • 右联结

    13:左联结

    以左边表为基准,按照过滤条件查找右边表的记录,如果匹配到,那么就组合成一行,并显示结果,如果没有匹配到,那么只显示左边表额度字段,右边表中不存在的字段用空值来表示

    14:右联结

    作用和左联结刚好相反,以右边表为基准,去匹配左边的表,如果左边表字段为空,那么就用空值来表示

    15:实例

    image.png

    image.png

    image.png

    image.png

    16:联合查询

    • 利用UNION关键字
    • 可以将多条select语句组合起来,将它们的结果组合成单个结果集

    17:联合查询(实例)

    把两个查询结合在一起使用

    image.png

    联合查询(说明)

    • UNION关键字指示MySQL执行两条SELECT语句,并把输出结果组合成单个查询结果
    • 注意:UNION必须由两条或两条以上的select语句组成,语句之间用关键字
    • UNION分割;UNION中的每个查询必须包含相同的列;列数据类型必须兼容

     

  • 相关阅读:
    virtualenv
    linux基础命令:
    middleware
    scrapy-redis
    kubernetes 应用快速入门
    linux expect spawn的用法
    Linux 内存分析工具—free命令
    kubeadm安装kubenetes1.15.4集群
    kubenetes基本概念和术语
    docker-machine使用
  • 原文地址:https://www.cnblogs.com/kelly11/p/13188863.html
Copyright © 2011-2022 走看看