在開發過程中,通常需要將數據分散在多個表中,通過關聯這些表可以輕松地查詢和管理數據。在MySQL中,主表關聯多個表是非常常見的需求。下面我們就來一步步實現。
CREATE TABLE user ( user_id int(11) NOT NULL AUTO_INCREMENT, name varchar(255) DEFAULT NULL, email varchar(255) DEFAULT NULL, created_at datetime DEFAULT NULL, updated_at datetime DEFAULT NULL, PRIMARY KEY (user_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE order ( order_id int(11) NOT NULL AUTO_INCREMENT, user_id int(11) DEFAULT NULL, amount decimal(7,2) DEFAULT NULL, created_at datetime DEFAULT NULL, updated_at datetime DEFAULT NULL, PRIMARY KEY (order_id), FOREIGN KEY (user_id) REFERENCES user (user_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE product ( product_id int(11) NOT NULL AUTO_INCREMENT, name varchar(255) DEFAULT NULL, price decimal(7,2) DEFAULT NULL, created_at datetime DEFAULT NULL, updated_at datetime DEFAULT NULL, PRIMARY KEY (product_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE order_product ( order_id int(11) NOT NULL, product_id int(11) NOT NULL, quantity int(11) DEFAULT NULL, PRIMARY KEY (order_id,product_id), FOREIGN KEY (order_id) REFERENCES order (order_id), FOREIGN KEY (product_id) REFERENCES product (product_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
代碼中定義了四個表:user、order、product和order_product。其中,order表和product表分別與order_product表關聯,而order表與user表也有關聯。這樣可以通過order_product表來查詢訂單中的具體商品,而用戶信息則通過user表與order表中的數據關聯。
下面我們來模擬一個查詢操作,查詢某個用戶在某段時間內的訂單以及訂單中的所有商品:
SELECT * FROM user u INNER JOIN order o ON o.user_id = u.user_id INNER JOIN order_product op ON op.order_id = o.order_id INNER JOIN product p ON p.product_id = op.product_id WHERE u.user_id = 1 AND o.created_at >= '2022-01-01' AND o.created_at< '2022-03-01'
以上SQL語句查詢了user表中user_id為1的用戶在2022年1月1日到2月28日期間的所有訂單,以及這些訂單中的所有商品信息。使用INNER JOIN連接各個表之間的關聯,最終將所需數據查詢出來。
下一篇網站變灰css