文档章节

MySQL必知必会-13MySQL高级联结

z
 zhiliubai
发布于 2017/03/18 12:38
字数 780
阅读 4
收藏 0
使用表别名
   
   
  1. SELECT
  2. cust_name,
  3. cust_contact
  4. FROM
  5. customers AS c,
  6. orders AS o,
  7. orderitems AS oi
  8. WHERE
  9. c.cust_id = o.cust_id
  10. AND oi.order_num = o.order_num
  11. AND prod_id = 'TNT2';
表别名不仅能用于WHERE子句,它还可以用于SELECT的列表、ORDER BY子句以及语句的其他部分。
与表别名不一样,表别名不反馈到客户机。

连接:
第一种:内部联结或等值联结
第二种:自联结
第三种:自然联结
第四种:外部联结

自联结
使用子查询的方式
   
   
  1. SELECT
  2. vend_id,
  3. prod_id,
  4. prod_name
  5. FROM
  6. products
  7. WHERE
  8. vend_id = (
  9. SELECT
  10. vend_id
  11. FROM
  12. products
  13. WHERE
  14. prod_id = 'DTNTR'
  15. );
使用自联结的方式,
   
   
  1. SELECT
  2. p1.vend_id,
  3. p1.prod_id,
  4. p1.prod_name
  5. FROM
  6. products AS p1,
  7. products AS p2
  8. WHERE
  9. p1.vend_id = p2.vend_id
  10. AND p2.prod_id = 'DTNTR';

自联结通常作为外部语句来替代从相同表中检索数据时使用的子查询语句。虽然最终的结果是相同的,但有时候处理联结远比处理子查询快得多。
通常用于解决相同表子查询的问题。

自然联结
无论何时对表进行联结,应该至少有一个列出现在不止一个表中(被联结的列)。标准的联结返回所有数据,甚至相同的列多次出现。自然链接排除多次出现,使每个列只返回一次。
自然联结是这样一种联结,其中你对选择那些唯一的列。这一般是通过对标使用通配符(SELECT *),对所有其他表的列使用明确的子集来完成。
   
   
  1. SELECT
  2. c.*, o.order_num,
  3. o.order_date,
  4. oi.prod_id,
  5. oi.quantity,
  6. OI.item_price
  7. FROM
  8. customers AS c,
  9. orders AS o,
  10. orderitems AS oi
  11. WHERE
  12. c.cust_id = o.cust_id
  13. AND oi.order_num = o.order_num
  14. AND prod_id = 'FB';
我们建立的每个内部联结都是自然联结,很可能永远都不会用到不是自然联结的内部联结。

外部联结
联结中包含那些相关表中没有关联的行。这种类型的联结称为外部联结。
即匹配的列出来,没有匹配的也列出来。
   
   
  1. SELECT
  2. customers.cust_id,
  3. orders.order_num
  4. FROM
  5. customers
  6. LEFT OUTER JOIN orders ON customers.cust_id = orders.cust_id;
在使用OUTER JOIN语法时,必须使用RIGHT或LEFT关键字指定包括其所有行的表(RIGHT指出的是OUTER JOIN右边的表,而LEFT指出的是OUTER JOIN左边的表)
左外部联结和右外部联结只是顺序上不同而已。两种类型的外部链接可互换使用,而究竟使用哪一种纯粹是根据方便而定。

使用带聚集函数的联结
   
   
  1. SELECT
  2. customers.cust_name,
  3. customers.cust_id,
  4. COUNT(orders.order_num) AS num_ord
  5. FROM
  6. customers
  7. INNER JOIN orders ON customers.cust_id = orders.cust_id
  8. GROUP BY
  9. customers.cust_id;
此SELECT语句使用INNER JOIN将customers和orders表互相关联。
GROUP BY子句按客户分组数据,因此,函数调用COUNT(orders.order_num)对每个客户的订单计数,将它作为num_ord返回。

这个例子使用左外部联结来包含所有客户,甚至包含哪些没有任何下订单的客户。
   
   
  1. SELECT
  2. customers.cust_name,
  3. customers.cust_id,
  4. COUNT(orders.order_num) AS num_ord
  5. FROM
  6. customers
  7. LEFT OUTER JOIN orders ON customers.cust_id = orders.cust_id
  8. GROUP BY
  9. customers.cust_id;

一个联结中可以包含多个表,甚至对于每个联结都可以采用不同的联结类型。

本文转载自:http://blog.csdn.net/zoroday/article/details/60767336

z
粉丝 0
博文 26
码字总数 0
作品 0
广州
私信 提问
《MySQL必知必会》笔记1

2016/2/21 数据库:保存有组织的数据的容器(通常是一个文件或一组文件) 数据库管理系统(DBMS):用于访问数据库。 表:某种特定类型数据的结构化清单。相同的数据库中表的名字是唯一的 模...

fxdhdu
2016/03/01
18
0
5本数据库经典之作,没看过的都白学了!

  【IT168 评论】1、 《数据库系统实现》   内容简介:书中对数据库系统实现原理进行了深入阐述,并具体讨论了数据库管理系统的三个主要成分――存储管理器、查询处理器和事务管理器的实...

it168网站
2017/11/13
0
0
MySQL快速入门

继恶补了C++基础之后,又来恶补MySQL了,花了将近一天的时间啃完了<MySQL必知必会>这本书,整理了有点糙的读书笔记。 1.SHOW语句的使用: 2.SELECT查询语句: 3.LIMIT子句限定显示结果行数:...

waffle930
2016/10/04
86
0
mysql 联结,级联查询总结区分

其实我对 数据库的级联或者联结查询一直都是会用,项目能查询出来自己想要的结果即可。 毕竟SQL使用复杂的查询毕竟比较少,而且不难使用。 至于区分他们,我还真的有点模糊。 在看 《SQL必知...

之渊
2018/10/17
61
0
自学书籍.MySQL必知必会 - 联结表

关系表: 1.关系表的设计就是要保证把信息分解成多个表,一类数据一个表,各表通过某些常用的值(即关系设计中的关系)互相关联 2.外键为某个表中的一列,它包含另一个表中的主键值,定义了两个表之...

满满李
2016/04/18
34
0

没有更多内容

加载失败,请刷新页面

加载更多

rime设置为默认简体

转载 https://github.com/ModerRAS/ModerRAS.github.io/blob/master/_posts/2018-11-07-rime%E8%AE%BE%E7%BD%AE%E4%B8%BA%E9%BB%98%E8%AE%A4%E7%AE%80%E4%BD%93.md 写在开始 我的Arch Linux上......

zhenruyan
今天
5
0
简述TCP的流量控制与拥塞控制

1. TCP流量控制 流量控制就是让发送方的发送速率不要太快,要让接收方来的及接收。 原理是通过确认报文中窗口字段来控制发送方的发送速率,发送方的发送窗口大小不能超过接收方给出窗口大小。...

鏡花水月
今天
10
0
OSChina 周日乱弹 —— 别问,问就是没空

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @tom_tdhzz :#今日歌曲推荐# 分享容祖儿/彭羚的单曲《心淡》: 《心淡》- 容祖儿/彭羚 手机党少年们想听歌,请使劲儿戳(这里) @wqp0010 :周...

小小编辑
今天
1K
11
golang微服务框架go-micro 入门笔记2.1 micro工具之micro api

micro api micro 功能非常强大,本文将详细阐述micro api 命令行的功能 重要的事情说3次 本文全部代码https://idea.techidea8.com/open/idea.shtml?id=6 本文全部代码https://idea.techidea8....

非正式解决方案
今天
5
0
Spring Context 你真的懂了吗

今天介绍一下大家常见的一个单词 context 应该怎么去理解,正确的理解它有助于我们学习 spring 以及计算机系统中的其他知识。 1. context 是什么 我们经常在编程中见到 context 这个单词,当...

Java知其所以然
昨天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部