创建高级连接
检索每个顾客的名称和所有的订单号(一)
Customers
表代表顾客信息含有顾客 id cust_id
和 顾客名称 cust_name
cust_id | cust_name |
---|---|
cust10 | andy |
cust1 | ben |
cust2 | tony |
cust22 | tom |
cust221 | an |
cust2217 | hex |
Orders
表代表订单信息含有订单号 order_num
和顾客 id cust_id
order_num | cust_id |
---|---|
a1 | cust10 |
a2 | cust1 |
a3 | cust2 |
a4 | cust22 |
a5 | cust221 |
a7 | cust2217 |
【问题】使用 INNER JOIN 编写 SQL 语句,检索每个顾客的名称( Customers
表中的 cust_name
)和所有的订单号( Orders
表中的 order_num
),最后根据顾客姓名 cust_name
升序返回。
SELECT cust_name, order_num
FROM Customers
INNER JOIN Orders
USING(cust_id)
ORDER BY cust_name
检索每个顾客的名称和所有的订单号(二)
Orders
表代表订单信息含有订单号 order_num
和顾客 id cust_id
order_num | cust_id |
---|---|
a1 | cust10 |
a2 | cust1 |
a3 | cust2 |
a4 | cust22 |
a5 | cust221 |
a7 | cust2217 |
Customers
表代表顾客信息含有顾客 id cust_id
和 顾客名称 cust_name
cust_id | cust_name |
---|---|
cust10 | andy |
cust1 | ben |
cust2 | tony |
cust22 | tom |
cust221 | an |
cust2217 | hex |
cust40 | ace |
【问题】检索每个顾客的名称( Customers
表中的 cust_name
)和所有的订单号(Orders 表中的 order_num
),列出所有的顾客,即使他们没有下过订单。最后根据顾客姓名 cust_name
升序返回。
SELECT cust_name, order_num
FROM Customers
LEFT JOIN Orders
USING(cust_id)
ORDER BY cust_name
返回产品名称和与之相关的订单号
Products
表为产品信息表含有字段 prod_id
产品 id、 prod_name
产品名称
prod_id | prod_name |
---|---|
a0001 | egg |
a0002 | sockets |
a0013 | coffee |
a0003 | cola |
a0023 | soda |
OrderItems
表为订单信息表含有字段 order_num
订单号和产品 id prod_id
prod_id | order_num |
---|---|
a0001 | a105 |
a0002 | a1100 |
a0002 | a200 |
a0013 | a1121 |
a0003 | a10 |
a0003 | a19 |
a0003 | a5 |
【问题】使用外连接(left join、 right join、full join)联结 Products
表和 OrderItems
表,返回产品名称( prod_name
)和与之相关的订单号( order_num
)的列表,并按照产品名称升序排序。
SELECT prod_name, order_num
FROM Products
LEFT JOIN OrderItems
USING(prod_id)
ORDER BY prod_name
返回产品名称和每一项产品的总订单数
Products
表为产品信息表含有字段 prod_id
产品 id、 prod_name
产品名称
prod_id | prod_name |
---|---|
a0001 | egg |
a0002 | sockets |
a0013 | coffee |
a0003 | cola |
a0023 | soda |
OrderItems
表为订单信息表含有字段 order_num
订单号和产品 id prod_id
prod_id | order_num |
---|---|
a0001 | a105 |
a0002 | a1100 |
a0002 | a200 |
a0013 | a1121 |
a0003 | a10 |
a0003 | a19 |
a0003 | a5 |
【问题】
使用 OUTER JOIN 联结 Products
表和 OrderItems
表,返回产品名称( prod_name
)和每一项产品的总订单数(不是订单号),并按产品名称升序排序。
SELECT prod_name, COUNT(order_num) AS orders
FROM Products
LEFT JOIN OrderItems
USING(prod_id)
GROUP BY prod_name
ORDER BY prod_name
列出供应商及其可供产品的数量
有 Vendors
表含有 vend_id
(供应商 id)
vend_id |
---|
a0002 |
a0013 |
a0003 |
a0010 |
有 Products
表含有 vend_id
(供应商 id)和 prod_id(供应产品 id)
vend_id | prod_id |
---|---|
a0001 | egg |
a0002 | prod_id_iphone |
a00113 | prod_id_tea |
a0003 | prod_id_vivo phone |
a0010 | prod_id_huawei phone |
【问题】列出供应商( Vendors
表中的 vend_id
)及其可供产品的数量,包括没有产品的供应商。你需要使用 OUTER JOIN 和 COUNT() 聚合函数来计算 Products
表中每种产品的数量,最后根据 vend_id 升序排序。
注意: vend_id
列会显示在多个表中,因此在每次引用它时都需要完全限定它。
SELECT vend_id, COUNT(prod_id) AS prod_id
FROM Vendors
LEFT JOIN Products
USING(vend_id)
GROUP BY vend_id
ORDER BY vend_id
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论