一、理解LEFT JOIN 和 ON多個條件的作用
LEFT JOIN 是一種查詢數據的方法,它能夠查詢到左表中的所有數據,而右表中沒有匹配數據的地方會顯示 NULL。而ON多個條件則是指一個JOIN操作需要多個條件進行匹配,這些條件通過AND或OR進行組合。
舉個例子,我們有兩個表:customers和orders,customers表中有id和name,orders表中有id、customer_id、order_date和total_price,如果我們想要查詢每一個客戶對應的最近一筆訂單的日期和金額,就需要使用LEFT JOIN和ON多個條件。
二、LEFT JOIN和ON多個條件的語法
LEFT JOIN的語法如下:
SELECT * FROM table1 LEFT JOIN table2 ON table1.id = table2.table1_id;
ON多個條件的語法如下:
SELECT * FROM table1 LEFT JOIN table2 ON table1.id = table2.table1_id AND table2.total_price > 100;
其中,「table1」和「table2」是兩個要進行JOIN操作的表,id和table1_id是它們之間的連接條件。同時,通過AND或OR進行多個條件的連接。
三、應用實例
下面,我們基於上述例子,來演示一下LEFT JOIN和ON多個條件的實際應用方法。
首先,我們需要創建兩個相應的表:
CREATE TABLE customers ( id INT PRIMARY KEY, name VARCHAR(255) NOT NULL ); INSERT INTO customers (id, name) VALUES (1, 'Alice'), (2, 'Bob'), (3, 'Charlie'), (4, 'David'), (5, 'Ella'); CREATE TABLE orders ( id INT PRIMARY KEY, customer_id INT NOT NULL, order_date DATE NOT NULL, total_price DECIMAL(12, 2) NOT NULL, FOREIGN KEY (customer_id) REFERENCES customers(id) ); INSERT INTO orders (id, customer_id, order_date, total_price) VALUES (101, 1, '2021-01-01', 100.00), (102, 1, '2021-02-01', 150.00), (103, 2, '2021-01-15', 200.00), (104, 3, '2021-02-28', 50.00), (105, 3, '2021-03-01', 75.00), (106, 4, '2021-04-01', 200.00);
接著,我們可以通過以下的SQL語句進行查詢每一個客戶對應的最近一筆訂單的日期和金額:
SELECT customers.name, MAX(orders.order_date) AS latest_order_date, orders.total_price FROM customers LEFT JOIN orders ON customers.id = orders.customer_id AND orders.order_date = ( SELECT MAX(order_date) FROM orders WHERE customer_id = customers.id ) GROUP BY customers.id ORDER BY customers.id;
結果如下:
+---------+-------------------+-------------+ | name | latest_order_date | total_price | +---------+-------------------+-------------+ | Alice | 2021-02-01 | 150.00 | | Bob | 2021-01-15 | 200.00 | | Charlie | 2021-03-01 | 75.00 | | David | NULL | NULL | | Ella | NULL | NULL | +---------+-------------------+-------------+
從結果可以看出,LEFT JOIN和ON多個條件成功地查詢出了每一個客戶對應的最近一筆訂單的日期和金額。
四、總結
LEFT JOIN和ON多個條件是SQL中常用的查詢方法,能夠滿足我們各種複雜的查詢需求,同時也讓SQL查詢變得更加強大和靈活。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/197527.html