多表的查詢介紹
- (1)初始化資料
- (2)實際項目中,資料儲存于多個表,如果需要的資料來自多個表,就要使用多表查詢
-
(3)查詢的分類
》1:交叉連接配接查詢(了解)
》2:内連接配接查詢
隐式内連接配接,顯式内連接配接***
》3:外連接配接查詢
左外連接配接, 右外連接配接
》4:子查詢
# 初始化資料
create database day13_3;
use database day13_3;
create table category (
cid int primary key ,
cname varchar(50)
);
create table products(
pid int primary key ,
pname varchar(50),
price int,
flag varchar(2), #是否上架标記為:1表示上架、0表示下架
category_id int,
constraint products_fk foreign key (category_id) references category (cid)
);
#分類
insert into category(cid,cname) values('1','家電');
insert into category(cid,cname) values('2','服飾');
insert into category(cid,cname) values('3','化妝品');
#商品
insert into products(pid, pname,price,flag,category_id) values('1','聯想',5000,'1',1);
insert into products(pid, pname,price,flag,category_id) values('2','海爾',3000,'1',1);
insert into products(pid, pname,price,flag,category_id) values('3','雷神',5000,'1',1);
insert into products (pid, pname,price,flag,category_id) values('4','傑克瓊斯',800,'1',2);
insert into products (pid, pname,price,flag,category_id) values('5','真維斯',200,'1',2);
insert into products (pid, pname,price,flag,category_id) values('6','花花公子',440,'1',2);
insert into products (pid, pname,price,flag,category_id) values('7','勁霸',2000,'1',2);
insert into products (pid, pname,price,flag,category_id) values('8','香奈兒',800,'1',2);
insert into products (pid, pname,price,flag,category_id) values('9','相宜本草',200,'1',2);
多表的查詢-交叉連接配接查詢
(1)什麼交叉連接配接查詢
交叉連接配接查詢是将兩張表相乘: A和B —> A * B
(2)什麼是笛卡爾集
兩張表相乘的結果,不論資料是否正确
(3)多表查詢的本質
多表查詢可以了解成在笛卡爾集的基礎上進行條件篩選
(4)案例:查詢每個分類以及該分類的所有商品
select * from category,products;
多表的查詢-内連接配接
-
(1)什麼是内連接配接查詢?
求的是多張表的交集
本質就是在笛卡爾集上加條件
-
(2)分類
隐式内連接配接:select * from A,B where 條件;
顯式内連接配接:select * from Ainner joinBon條件;(效率更高)
(3)差別
》使用關鍵字 inner join
》前者在笛卡爾集的基礎上篩選,後者在原始表上篩選
(4)練習:省市
select * from A,B where 條件;
select * from category c,products p where c.cid = p.category_id;
顯式内連接配接:select * from A inner join B on 條件;(效率更高)
select * from category c inner join products p on c.cid = p.category_id;
select * from province,city;
select * from province p inner join city c on p.pid = c.pid_fk;
多表的查詢-外連接配接
-
(1)什麼是外連接配接查詢?
兩個表中選一個表将資料全部輸出,另一個表沒有對應資料則輸出NULL
-
(2)分類
左外連接配接
select * from A left outer join B on 條件;
以左表為主,左表中的資料全部輸出,右表中如果沒有同等的資料則補NULL
右外連接配接
以右表為主,右表中的資料全部輸出,左表中如果沒有同等的資料則補NULLselect * from A right outer join B on 條件;
# 外連接配接
select * from province p inner join city c on p.pid = c.pid_fk;
# 左外連接配接
select * from province p left outer join city c on p.pid = c.pid_fk;
# 右外連接配接
select * from province p right outer join city c on p.pid = c.pid_fk;
子查詢
-
(1)什麼叫子查詢?
select的嵌套:一個select的查詢結果作為另一個select查詢文法的一部分
-
(2)案例
在商品表中查詢屬于電子分類的商品
select *from product where cid = 1
select cid from category where cname='電子'
select *from product where cid = (select cid from category where cname='電子')