zoukankan      html  css  js  c++  java
  • Mysql-5 表联结

    1、联结

      a、SQL最强大的功能之一就是能在数据检索查询的执行中联结表

      b、数据是存储在关系表中的,关系表的设计原则是保证把信息分解为多个表,一类数据一个表,各表通过某些常用的值互相关联

    2、表连接

      a、两个表之间的关联关系通过外键来关联

      b、外键是某个表中的一列,它包含另外一个表的主键值,定义了两个表之间的关系

    3、创建联结

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

        select v_name,p_name,p_price from crashsource.v,crashsource.p where crashsource.v.v_id=crashsource.p.v_id order by v_name,p_name;

        说明:筛选数据库crashsource 表 v、表p中v_id = p_id  且通过v_name、p_name排序

    4、内联结

      a、内部联结也称为等值联结,它基于两个表之间的相等测试。

        select v_name,p_name,p_price from crashsource.v INNER JOIN crashsource.p ON crashsource.v.v_id=crashsource.p.v_id;

        说明:select 与之前的select 语句相同,但from 子句不同,这里两个表之间的关系是from 子句的组成部分,

                             以INNER JOIN指定,在使用这种语法时,联结条件用特定的ON子句而不是where 子句,传递给ON

             的实际条件与传递给where 的相同

    5、多表联结

      a、SQL对一条select 语句中客园联结的表的数目没有限制,创建联结的基本规则也相同,首先列出所有表,如何定义表之间的关系

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

         select prod_name,vend_name,prod_price,quantity

         where products.vend_id = vendors.vend_id

         AND orderitems.prod_id = products.prod_id

         AND order_name = 2005;

        说明:本例子显示编号为2005 的订单中的物品,订单物品存储在orderitems表中,每个产品按其产品id存储,它引用products表中的产品。

           这些产品通过供应商id联结到vendors表中相应的供应商,供应商ID存储在每个产品的记录中,这里的from子句列出了3个表,而where

          子句定义了着两个联结条件,而第三个联结条件用来过滤出订单2005中的物品

    6、给表指定别名

      a、别名除了用于列名和计算字段外,客园给表起别名,给表其别名的作用是

        -1、缩短SQL语句

        -2、允许在单条select 语句中多次使用相同的表

       select cust_name,cust_contact from customers AS c,order AS o,orderitems AS oi where c.cust_id =o.cust_id 

       AND oi.order_num=o.order_num 

       AND prod_id = 'TNT1';

         说明:from 子句中3个表都创建了别名,customers AS c,建立作为customers 的别名,这使得,客园使用c来代替customers

    7、自联结

      a、自联结为在同一个表中做联结操作

      select p1.prod_id,p1.prod_name from products as p1,products as p2

      where p1.vend_id = p2.vend_id and p2.prod_id = 'DTNT1';

      说明:发现某物品(其id为DTNT1)存在问题,因为想知道生产该物品的供应商生产的其他物品是否也存在问题,此产线要求首先

      找到生产ID为DTNT1的物品的供应商,然后找出这个供应商生产的其他物品

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

    8、外连接

      分类:左联结、右联结

      a、左联结:以左边表为基准,按照过滤条件查找右边表的记录,如果匹配列,那么就组合成一行,并显示结果,如果没有匹配列,

             那么只显示左边表的字段,右边表中不存在的字段用空值来表示;

      b、右联结:作用和左联结相反,以右边表为基准,去匹配左边的表,如果左边表字段为空,那么就用控制来表示;

      course表

      course 表结构

      

       course 表内容

      

           stu表

      stu 表结构

      

       stu表内容

      

       

       实例——左链接

      以左边表作为基准

      select * from stu left join course on stu.id=course.stu_id;

      

       以右边表作为基准

      select * from stu right join course on stu.id=course.stu_id;

      

    9、联合查询

      a、利用UNION关键字

      b、客园将多条select 语句组合起来,将他们的结果组合成单个结果集

        说明:union 关键字只是Mysql 执行两天select 语句,并把输出组合成单个查询结果

      注意:union 必须由两条或两条意思的select 语句组成,语句之间用关键字union分隔;union中的每个

            查询必须包含相同的列,列数据类型必须兼容

  • 相关阅读:
    C语言(北京理工大学MOOC 上)
    四则运算、进制转换、变量内存分配
    C语言(挑战ACM-ICPC,DEVFORGE学编程社区)
    迭代公式求平方根
    C语言(数据结构,DEVFORGE学编程社区)
    C语言(复杂数据,DEVFORGE学编程社区)
    C语言(字符串,DEVFORGE学编程社区)
    c语言(北京理工大学mooc 下)
    华中农业大学mooc编程题
    Java通过POI读取Excel
  • 原文地址:https://www.cnblogs.com/feihan/p/14290244.html
Copyright © 2011-2022 走看看