3.多表查询
3.1 什么是多表查询
- DQL: 查询多张表,获取到需要的数据
- 比如 我们要查询家电分类下 都有哪些商品,那么我们就需要查询分类与商品这两张表
3.2 数据准备
3.2.1 创建db3_2数据库
--
创建
db3_2
数据库
,
指定编码
CREATE DATABASE
db3_2
CHARACTER SET
utf8;
|
3.2.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.2.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.3 笛卡尔积
交叉连接查询
,
因为会产生笛卡尔积
,
所以 基本不会使用
3.3.1 语法格式
SELECT
字段名
FROM
表
1,
表
2
|
3.3.2 使用交叉连接查询 商品表与分类表
SELECT
*
FROM
category , products;
|
3.3.3 观察查询结果,产生了笛卡尔积 (得到的结果是无法使用的)
3.3.4 笛卡尔积
- 假设集合A={a, b},集合B={0, 1, 2},则两个集合的笛卡尔积为{(a, 0), (a, 1), (a, 2), (b, 0), (b, 1), (b, 2)}。