MySQL: 多表查詢
阿新 • • 發佈:2021-07-15
1 什麼是多表查詢
DQL: 查詢多張表, 獲取到需要的資料
比如: 查詢家電分類下, 都有哪些商品, 那麼, 我們就需要查詢分類與商品這兩張表
2 資料準備
1) 建立 db3_2 資料庫
-- 建立 db3_2 資料庫,指定編碼 CREATE DATABASE db3_2 CHARACTER SET utf8;
2)建立分類表與商品表
#分類表 (一方 主表) CREATE TABLE category ( cid VARCHAR(32) PRIMARY KEY , cname VARCHAR(50) ); #商品表 (多方 從表)CREATE TABLE products( pid VARCHAR(32) PRIMARY KEY , pname VARCHAR(50), price INT, flag VARCHAR(2), #是否上架標記為:1表示上架、0表示下架 category_id VARCHAR(32), -- 新增外來鍵約束 FOREIGN KEY (category_id) REFERENCES category (cid) );
3) 插入資料
#分類資料 INSERT INTO category(cid,cname) VALUES('c001','家電'); INSERT INTO category(cid,cname) VALUES('c002','鞋服'); INSERT INTO category(cid,cname) VALUES('c003','化妝品'); INSERT INTO category(cid,cname) VALUES('c004','汽車'); #商品資料 INSERT INTO products(pid, pname,price,flag,category_id) VALUES('p001','小米電視機',5000,'1','c001'); INSERT INTO products(pid, pname,price,flag,category_id) VALUES('p002','格力空調',3000,'1','c001'); INSERT INTO products(pid, pname,price,flag,category_id) VALUES('p003','美的冰箱',4500,'1','c001'); INSERT INTO products (pid, pname,price,flag,category_id) VALUES('p004','籃球鞋',800,'1','c002'); INSERT INTO products (pid, pname,price,flag,category_id) VALUES('p005','運動褲',200,'1','c002'); INSERT INTO products (pid, pname,price,flag,category_id) VALUES('p006','T 恤',300,'1','c002'); INSERT INTO products (pid, pname,price,flag,category_id) VALUES('p007','衝鋒衣',2000,'1','c002'); INSERT INTO products (pid, pname,price,flag,category_id) VALUES('p008','神仙水',800,'1','c003'); INSERT INTO products (pid, pname,price,flag,category_id) VALUES('p009','大寶',200,'1','c003');
3 笛卡爾積
交叉連線查詢,因為會產生笛卡爾積,所以基本不會使用
1) 語法格式
SELECT 欄位名 FROM 表1, 表2;
2) 使用交叉連線查詢 商品表與分類表
SELECT * FROM category , products;
3) 觀察查詢結果,產生了笛卡爾積 (得到的結果是無法使用的)
4)笛卡爾積圖解
假設集合A={a, b},集合B={0, 1, 2},則兩個集合的笛卡爾積為{(a, 0), (a, 1), (a, 2), (b, 0), (b, 1), (b, 2)}。