MYSQL学习笔记(自用) 第二章

第二章

第一节. 内连接| 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

你可能感兴趣的:(MYSQL学习笔记,mysql)