第12-13课 创建表的联结创建联结内联结联结多个表外联结自联结使用带聚集函数的联结小结

sql中最强大的功能之一就是表的联结。

为什么使用联结? 因为在关系表中,数据是存储在各个表中的。如何一次检索出各个表中的数据,答案就是使用联结啦。

创建联结

select vend_name, prod_name,prod_price
from vendors,products
where vendors.vend_id = products.vend_id;

注意,联结产生的是笛卡尔积,所以需要使用where语句。

内联结

就是上一段代码中的等值联结,基于两个表之间的相等测试。

select vend_name, prod_name,prod_price
from vendors inner join products
on vendors.vend_id = products.vend_id;

联结多个表

显示订单2007中的物品:

select prod_name,vend_name, prod_price,quantity
from orderitems,products,vendors
where products.vend_id = vendors.vend_id
and orderitems.prod_id = products.prod_id
and order_num = 20007;

使用联结实现十一课中的例子:

 select cust_name, cust_contact
 from customers, orders,orderitems
 where orders.cust_id = customers.cust_id
 and orders.order_num = orderitems.order_num
and prod_id = 'RGAN01';

外联结

外联结用来处理那些需要包括没有关联的那些行的查询 比如: 对每个顾客下的订单进行计数,包括哪些至今尚未下订单的顾客

select customers.cust_id, orders.order_num
from customers left outer join orders
on customers.cust_id = orders.cust_id;
select customers.cust_id, orders.order_num
from customers right outer join orders
on customers.cust_id = orders.cust_id;

自联结

同一个表自己跟自己的联结

select c1.cust_id, c1.cust_name,c1.cust_contact
from customers as c1, customers as c2
where c1.cust_name = c2.cust_name
and c2.cust_contact = 'Jim Jones';

使用带聚集函数的联结

select customers.cust_id, count(orders.order_num) as num_ord
from customers left outer join orders
on customers.cust_id = orders.cust_id
group by customers.cust_id;

小结

  • 注意联结的类型,大多数情况都是内联结,偶尔用到外联结
  • 必须提供联结条件,不然得出的是笛卡尔积,里面包含了不正确的数据
  • 在一个联结中可以包含多个表

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏逍遥剑客的游戏开发

边缘高亮效果(三)

1492
来自专栏AI科技大本营的专栏

无人驾驶汽车系统入门:基于深度学习的实时激光雷达点云目标检测及ROS实现

近年来,随着深度学习在图像视觉领域的发展,一类基于单纯的深度学习模型的点云目标检测方法被提出和应用,本文将详细介绍其中一种模型——SqueezeSeg,并且使用...

2181
来自专栏IT派

Github 推荐项目 | 用 TensorFlow 简单地实现 StarGAN

StarGAN 是一种新颖且可扩展的方法,可以仅使用一个模型来执行多个域的图像到图像的转换。StarGAN 这样一个统一的模型体系架构让开发者可以同时训练单个网...

831
来自专栏iOSDevLog

vid2vid 视频到视频转换vid2vid

Pytorch实现了我们的高分辨率(例如2048x1024)逼真的视频到视频转换方法。

5101
来自专栏SnailTyan

非极大值抑制(Non-Maximum Suppression)

1. 什么是非极大值抑制 非极大值抑制,简称为NMS算法,英文为Non-Maximum Suppression。其思想是搜素局部最大值,抑制极大值。NMS算法在...

4680
来自专栏量子位

GitHub上大热的Deep Photo终于有TensorFlow版了!

王小新 编译整理 量子位 出品 | 公众号 QbitAI Prisma这个应用,你可能很熟悉。这是一个能将不同的绘画风格,迁移到照片中,形成不同艺术风格的图片。...

3986
来自专栏机器之心

业界 | Facebook开源Mask R-CNN的PyTorch 1.0基准,比mmdetection更快、更省内存

项目地址:https://github.com/facebookresearch/maskrcnn-benchmark

2113
来自专栏null的专栏

简单易学的机器学习算法——Label Propagation

一、社区划分的概述 对于社区,没有一个明确的定义,有很多对社区的定义,如社区是指在一个网络中,有一组节点,它们彼此都相似,而组内的节点与网络中的其他节点则不相似...

9178
来自专栏ATYUN订阅号

Keras和PyTorch的视觉识别与迁移学习对比

在上一篇文章中,我们简述了Keras和PyTorch的区别,旨在帮助你选择更适合你需求的框架。现在,我们进行实战进行。我们将让Keras和PyTorch互相较量...

8884
来自专栏用户2442861的专栏

利用 word2vec 训练的字向量进行中文分词

http://blog.csdn.net/itplus/article/details/17122431

1102

扫码关注云+社区

领取腾讯云代金券