欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MySQL數(shù)據(jù)庫高級查詢和多表查詢

 更新時間:2020年08月04日 14:43:43   作者:Jack_黃  
這篇文章主要介紹了MySQL數(shù)據(jù)庫高級查詢和多表查詢,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

MySQL多表查詢

添加練習表

-- 用戶表(user)
CREATE TABLE `user`(
	`id` INT AUTO_INCREMENT PRIMARY KEY COMMENT '用戶id(主鍵)',
	`username` VARCHAR(50) COMMENT '用戶姓名', 
	`age` CHAR(3) COMMENT '用戶年齡'
);

-- 訂單表(orders)
CREATE TABLE `orders`(
	`id` INT AUTO_INCREMENT PRIMARY KEY COMMENT '訂單id(主鍵)',
	`price` DOUBLE COMMENT '訂單價格',
	`user_id` INT COMMENT '用戶id(外鍵)'
);

-- 給已經(jīng)存在的表添加外鍵,語法如下
-- alter table 表名 add constraint [外鍵名字] foreign key (外鍵字段) references 父表(主鍵字段);
ALTER TABLE orders ADD CONSTRAINT user_fk FOREIGN KEY (user_id) REFERENCES `user` (id);

-- 向user表中添加數(shù)據(jù)
INSERT INTO USER VALUES(1,'第一',11);
INSERT INTO USER VALUES(2,'小二',12);
INSERT INTO USER VALUES(3,'張三',33);
INSERT INTO USER VALUES(4,'李四',24);
INSERT INTO USER VALUES(5,'王五',17);
INSERT INTO USER VALUES(6,'趙六',36);
INSERT INTO USER VALUES(7,'七七',18);
INSERT INTO USER VALUES(8,'粑粑',NULL);

-- 向orders 表中插入數(shù)據(jù)
INSERT INTO orders VALUES(111,1314,3);
INSERT INTO orders VALUES(112,122,3);
INSERT INTO orders VALUES(113,15,4);
INSERT INTO orders VALUES(114,315,5);
INSERT INTO orders VALUES(115,1014,NULL);
INSERT INTO orders VALUES(116,666,6);
INSERT INTO orders VALUES(117,1111,1);
INSERT INTO orders VALUES(118,8888,NULL);

在這里插入圖片描述

在這里插入圖片描述

笛卡爾積

  • 笛卡爾乘積是指在數(shù)學中,兩個集合X和Y的笛卡爾積(Cartesian product),又稱直積,表示為X × Y,第一個對象是X的成員而第二個對象是Y的所有可能有序?qū)Φ钠渲幸粋€成員。(笛卡爾積)百度百科
  • 什么笛卡爾積,如下所示
SELECT * FROM `user`,`orders`;

在這里插入圖片描述

  • 像如上圖查出來的數(shù)據(jù),對我們程序員是沒啥用的。
  • 哪如何消除笛卡爾積呢?需要主外鍵的約束,去重復數(shù)據(jù)。
SELECT * FROM `user` AS u,`orders` AS o WHERE u.`id`=o.`user_id`;

在這里插入圖片描述

1.內(nèi)連接

1.1隱式內(nèi)連接

  • from 后面直接出現(xiàn)多表表名,這個屬于隱式內(nèi)連接
  • select * from 表a,表b where a.id = b.a_id;
SELECT * FROM `user` AS u,`orders` AS o WHERE u.`id`=o.`user_id`;

在這里插入圖片描述

1.2顯示內(nèi)連接(推薦使用)

  • 使用 inner join 來鏈接表,后面 on 跟條件。(inner 可以省略)
  • select * from 表a inner join 表b on a.id = b.a_id;
  • 查詢成年用戶和訂單數(shù)據(jù);
SELECT * FROM `user` u JOIN `orders` o ON u.`id`=o.`user_id` WHERE age >= 18;

在這里插入圖片描述

2.外連接

  • 外鏈接可以顯示單表的全部數(shù)據(jù),包括null;

2.1右外鏈接

  • 顯示右邊表的全部數(shù)據(jù)
  • 使用 right outer join 來鏈接表,后面 on 跟條件。(outer 可以省略)
  • select * from 表a right outer join 表b on a.id=b.a_id;
SELECT * FROM `user` u RIGHT JOIN `orders` o ON u.`id`=o.`user_id`;

在這里插入圖片描述

左邊表數(shù)據(jù)(user)

在這里插入圖片描述

右邊表數(shù)據(jù)(orders)

在這里插入圖片描述

2.2左外鏈接(推薦使用)

  • 顯示左邊表的全部數(shù)據(jù)
  • 使用 left outer join 來鏈接表,后面 on 跟條件。(outer 可以省略)
  • select * from 表a left outer join 表b on a.id=b.a_id;
SELECT * FROM `user` u LEFT JOIN `orders` o ON u.`id`=o.`user_id`;

在這里插入圖片描述

左邊表數(shù)據(jù)(user)

在這里插入圖片描述

右邊表數(shù)據(jù)(orders)

在這里插入圖片描述

3.子查詢

  • 子查詢,嵌套的感覺。查詢出來的結(jié)果給另外一個查詢當條件使用。
  • 查詢年齡最大的用戶的訂單數(shù)據(jù)
SELECT * FROM orders o WHERE o.`user_id` IN (
	SELECT u.`id` FROM `user` u WHERE u.`age` IN(
		SELECT MAX(u.`age`) FROM `user` u
	)
);

在這里插入圖片描述

4.全連接(MySQL不支持)

  • 全連接,左右兩張表的全部數(shù)據(jù)包括null。相當于右外鏈接和左外鏈接的結(jié)合。
  • select * from 表a full outer join 表b on a.id=b.a_id;(MySQL不支持,不做演示)

MySQL其它文章,請看下面鏈接

MySQL DDL 語句

MySQL CRUD 語句

MySQL 聚合函數(shù)

MySQL 多表查詢

END…

到此這篇關(guān)于MySQL數(shù)據(jù)庫高級查詢和多表查詢的文章就介紹到這了,更多相關(guān)MySQL高級查詢和多表查詢內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

最新評論