多表查詢
第1章 多表關係實戰
1.1 實戰1:省和市
方案1:多張表,一對多
方案2:一張表,自關聯一對多
1.2 實戰2:使用者和角色 (比如演員和扮演人物)
多對多關係
1.3 實戰3:角色和許可權 (比如公司職位和開除等許可權)
多對多關係
1.4 實戰4:客戶和聯絡人(可選)
一對多:一個客戶服務於多個聯絡人
第2章 多表查詢
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)
);
2.1 初始化資料
分類
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','JACK JONES',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',3);
INSERT INTO products (pid, pname,price,flag,category_id) VALUES('9','相宜本草',200,'1',3);
2.2 多表查詢
- 交叉連線查詢(基本不會使用-得到的是兩個表的乘積) [瞭解]
語法:select * from A,B;
- 內連線查詢(使用的關鍵字 inner join -- inner可以省略)
隱式內連線:select * from A,B where 條件;
顯示內連線:select * from A inner join B on 條件;
- 外連線查詢(使用的關鍵字 outer join -- outer可以省略)
左外連線:left outer join
select * from A left outer join B on 條件;
右外連線:right outer join
select * from A right outer join B on 條件;
1.查詢哪些分類的商品已經上架
隱式內連線
SELECT * FROM category c , products p
WHERE c.cid = p.category_id and p.flag = '1';
內連線
SELECT * FROM category c
INNER JOIN products p ON c.cid = p.category_id WHERE p.flag = '1';
2.查詢所有分類的商品個數
左外連線
INSERT INTO category(cid,cname) VALUES(4,'奢侈品');
SELECT cname,COUNT(category_id) FROM category c
LEFT OUTER JOIN products p ON c.cid = p.category_id GROUP BY cname;
2.3 子查詢
子查詢:一條select語句結果作為另一條select語法一部分(查詢條件,查詢結果,表等)。
select ....查詢欄位 ... from ...表.. where ... 查詢條件
3 子查詢, 查詢“化妝品”分類商品詳情
隱式內連線
SELECT * FROM products p , category c
WHERE p.category_id=c.cid AND c.cname = '化妝品';
子查詢
作為查詢條件
SELECT * FROM products p
WHERE p.category_id = ( SELECT c.cid FROM category c WHERE c.cname='化妝品' ); ##作為另一張表 SELECT * FROM products p , (SELECT * FROM category WHERE cname='化妝品') c WHERE p.category_id = c.cid;
查詢“化妝品”和“家電”兩個分類商品詳情
SELECT * FROM products p
WHERE p.category_id in ( SELECT c.cid FROM category c WHERE c.cname='化妝品' or c.name='家電' );
歡迎關注公眾號:菜鳥永恆 點滴記錄,共同進步。
立志想成為大牛的菜鳥一枚,將會記錄Java技術知識,,不妨來掃描二維碼關注一下!
歡迎加小編微信 拉你進新建的技術交流群
聽說關注的人都變美變帥了
覺得我的文章寫得不錯,不妨點一下好看並分享給朋友!