1. 程式人生 > 其它 >MySQL: 多表查詢

MySQL: 多表查詢

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)}。

    

4 多表查詢 -內連線查詢 // TODO

5 多表查詢 - 外連線查詢 // TODO