第二章
第一节. 内连接| Inner joins[在多张表格中检索数据]
SELECT order_id, orders.customer_id, first_name, last_name
FROM orders
INNER JOIN customers
ON orders.customer_id = customers.customer_id
SELECT order_id, o.customer_id, first_name, last_name
FROM orders o
INNER JOIN customers c
ON o.customer_id = c.customer_id
## 让代码更简洁
第一节. 作业练习
SELECT order_id, p.product_id, quantity, oi.unit_price
FROM order_items oi
INNER JOIN products p
ON oi.product_id = p.product_id
第二节. 跨数据库连接| Joining Across Databases
SELECT *
FROM order_items oi
JOIN sql_inventory.products p
ON oi.product_id = p.product_id
第三节. 自链接| Self Joins
USE sql_hr;
SELECT
e.employee_id,
e.first_name,
m.first_name AS manager
FROM employees e
JOIN employees m
ON e.reports_to = m.employee_id
第四节. 多表连接| Joinning Multiple Tables
USE sql_store;
SELECT
o.order_id,
o.order_date,
c.first_name,
c.last_name,
os.name AS status
FROM orders o
JOIN customers c
ON o.customer_id = c.customer_id
JOIN order_statuses os
ON o.status = os.order_status_id
第二章 第一~四节. 作业练习
USE sql_invoicing;
Select
p.payment_id,
p.client_id,
c.name,
c.address,
c.city,
pm.name AS payment_method
FROM payments p
JOIN clients c
ON p.client_id = c.client_id
JOIN payment_methods pm
ON p.payment_method = pm.payment_method_id
第五节. 复合连接条件| Compound Join Conditions
USE sql_store;
SELECT*
FROM order_items oi
JOIN order_item_notes oin
ON oi.order_id = oin.order_id
AND oi.product_id = oin.product_id
第六节. 隐式连接语法| Implict Join Syntax
USE sql_store;
SELECT *
FROM orders o
JOIN customers c
ON o.customer_id = c.customer_id
## Implpicit Join Syntax
SELECT*
FROM orders o, customers c
WHERE o.customer_id = c.customer_id
第七节. 外连接| Outer Joins
SELECT
c.customer_id,
c.first_name,
o.order_id
FROM customers c
RIGHT JOIN orders o
ON c.customer_id = o.customer_id
ORDER BY c.customer_id
## 当使用LEFT JOIN, 左表的所有数据都会被返回
## 当使用RIGHT JOIN, 右表的所有数据都会被返回
## 此例中,LEFT JOIN将返回customers表中所有数据,RIGHT JOIN将返回orders表中所有数据
第七节. 作业练习
SELECT
p.product_id,
p.name,
oi.quantity
FROM products p
LEFT JOIN order_items oi
ON p.product_id = oi.product_id
第八节. 多表外连接|Outer Join Between Multiple Tables
SELECT
c.customer_id,
c.first_name,
o.order_id,
sh.name AS shipper
FROM customers c
LEFT JOIN orders o
ON c.customer_id = o.customer_id
LEFT JOIN shippers sh
ON o.shipper_id = sh.shipper_id
ORDER BY c.customer_id
第八节. 作业练习
SELECT
o.order_date,
o.order_id,
c.first_name,
sh.name AS shipper,
os.name AS status
FROM orders o
LEFT JOIN customers c
ON o.customer_id = c.customer_id
LEFT JOIN shippers sh
ON o.shipper_id = sh.shipper_id
LEFT JOIN order_statuses os
ON o.status = os.order_status_id
第九节. 自外连接| Self Outer Joins
USE sql_hr;
SELECT
e.employee_id,
e.first_name,
m.first_name AS manager
FROM employees e
LEFT JOIN employees m
ON e.reports_to = m.employee_id
第十节. USING子句|The USING Clause
USE sql_store;
SELECT
o.order_id,
c.first_name,
sh.name AS shipper
FROM orders o
JOIN customers c
-- ON o.customer_id = c.customer_id
USING (customer_id)
LEFT JOIN shippers sh
USING (shipper_id)
SELECT *
FROM order_items oi
JOIN order_item_notes oin
USING (order_id, product_id)
第十节. 作业练习
USE sql_invoicing;
Select
i.invoice_date AS date,
c.name,
p.amount,
pm.name
FROM invoices i
JOIN clients c
USING (client_id)
JOIN payments p
USING (invoice_id)
JOIN payment_methods pm
ON p.payment_method = pm.payment_method_id
第十一节. 自然连接| Natural Joins
##不建议使用
USE sql_store;
SELECT
o.order_id,
c.first_name
FROM orders o
NATURAL JOIN customers c
第十二节. 交叉连接| Cross Joins
SELECT
c.first_name,
p.name AS product
FROM customers c
CROSS JOIN products p
## 可以尝试使用场景:当有不同SIZE的衣服,以及不同颜色的衣服,想要找到所有SIZE和颜色组合可以使用CROSS JOIN
第十三节. 联合|Unions
SELECT
order_id,
order_Date,
'Active' AS status
FROM orders
WHERE order_Date >= '2019-01-01'
UNION
SELECT
order_id,
order_Date,
'Archived' AS status
FROM orders
WHERE order_Date < '2019-01-01'
第十三节. 作业练习
SELECT
customer_id,
first_name,
points,
'Bronze' AS type
FROM customers
WHERE points < 2000
UNION
SELECT
customer_id,
first_name,
points,
'SILVER' AS type
FROM customers
WHERE points > 2000 AND points <3000
UNION
SELECT
customer_id,
first_name,
points,
'GOLD' AS type
FROM customers
WHERE points > 3000