day13 sql 多表查詢

2021-10-09 17:38:35 字數 4206 閱讀 2250

多表的查詢介紹

(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 a inner join b on 條件;(效率更高)

(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

右外連線

select * from a right outer join b on 條件;

以右表為主,右表中的資料全部輸出,左表中如果沒有同等的資料則補null

# 外連線

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)查詢每乙個演員演什麼角色

(2)查詢每乙個演員演什麼角色有什麼許可權

(1)什麼叫子查詢?

select的巢狀:乙個select的查詢結果作為另乙個select查詢語法的一部分

(2)案例

在商品表中查詢屬於電子分類的商品

select *from product where cid =

1select cid from category where cname=

'電子'

select *from product where cid =

(select cid from category where cname=

'電子'

)

在商品表中查詢屬於家電分類和化妝品分類的商品

在商品表中查詢屬於化妝品分類的商品 (select查詢之後得到一張表)

SQL 多表查詢

不同的 sql join inner join 內連線 如果表中至少有乙個匹配,也從左表返回所有的行 left join 左連線 即使右表中沒有匹配,也從右表返回所有的行 right join 右連線 即使左表中沒有匹配,也從右表返回所有的行 full join 全連線 只有其中乙個表中存在匹配也從...

SQL 多表查詢

join操作符 1.笛卡爾積,rxs 可直接轉換為sql語句 2.等值連線,記作 可直接轉換為sql語句 3.自然連線,記作 可轉換為sql語句 4.左外連線和右外連線的表示方法及轉換為sql 注意若多個關係有同名屬性,則用 關係名.屬性名 指出重名屬性 連線也可以與投影,選擇等結合使用。1.查詢選...

SQL 查詢(二 多表查詢)

使用外來鍵作為橋梁連線連個表進行查詢。笛卡爾積select e.fname,e.lname,d.name from employee e join department d 在from子句中包含了兩個表,並使用join關鍵字隔開。當查詢中沒有指定兩個表如何連線時會產生笛卡爾積,即兩張表的所有置換 1...