MySQL是目前使用最廣泛的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),它支持多張表之間的關(guān)聯(lián)查詢。下面我們通過實(shí)例來了解一下MySQL中三張表的關(guān)聯(lián)查詢。
假設(shè)有三張表:
CREATE TABLE user ( id INT PRIMARY KEY, name VARCHAR(20), gender CHAR(1), age INT ); CREATE TABLE order ( id INT PRIMARY KEY, user_id INT, product VARCHAR(20), price FLOAT ); CREATE TABLE payment ( id INT PRIMARY KEY, order_id INT, payment_method VARCHAR(20), amount FLOAT );
其中user表存儲(chǔ)用戶信息,包括用戶ID、姓名、性別和年齡;order表存儲(chǔ)訂單信息,包括訂單ID、用戶ID、商品名稱和價(jià)格;payment表存儲(chǔ)支付信息,包括支付ID、訂單ID、支付方式和金額。
現(xiàn)在我們需要查詢所有用戶的所有訂單的支付信息。按照表的關(guān)聯(lián)關(guān)系,我們首先需要通過user表和order表關(guān)聯(lián)查詢出所有訂單的信息,再根據(jù)order表和payment表關(guān)聯(lián)查詢出所有訂單的支付信息。這可以通過左連接和內(nèi)連接來實(shí)現(xiàn)。
左連接:
SELECT user.name, order.product, payment.payment_method FROM user LEFT JOIN order ON user.id = order.user_id LEFT JOIN payment ON order.id = payment.order_id;
以上SQL語句表示先將user表和order表通過user.id = order.user_id進(jìn)行左連接,得到所有用戶的所有訂單信息;接著將order表和payment表通過order.id = payment.order_id也進(jìn)行左連接,得到所有訂單的支付信息。最終得到的結(jié)果是所有用戶的所有訂單的支付信息(包括未支付的訂單)。
內(nèi)連接:
SELECT user.name, order.product, payment.payment_method FROM user INNER JOIN order ON user.id = order.user_id INNER JOIN payment ON order.id = payment.order_id;
以上SQL語句表示先將user表和order表通過user.id = order.user_id進(jìn)行內(nèi)連接,得到所有有訂單的用戶信息;接著將order表和payment表通過order.id = payment.order_id也進(jìn)行內(nèi)連接,得到所有已支付訂單的支付信息。最終得到的結(jié)果是所有有訂單的用戶的已支付訂單的支付信息。