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中的每个

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

原文地址:https://www.cnblogs.com/feihan/p/14290244.html