主頁 > 知識庫 > MySQL數(shù)據(jù)庫高級查詢和多表查詢

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

熱門標(biāo)簽:許昌外呼增值業(yè)務(wù)線路 廣東400企業(yè)電話申請流程 宜賓全自動外呼系統(tǒng)廠家 新鄉(xiāng)智能外呼系統(tǒng)好處 地圖標(biāo)注客戶付款 石家莊400電話辦理公司 咸陽防封電銷卡 臨沂做地圖標(biāo)注 申請400電話電話價格

MySQL多表查詢

添加練習(xí)表

-- 用戶表(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ù)學(xué)中,兩個集合X和Y的笛卡爾積(Cartesian product),又稱直積,表示為X × Y,第一個對象是X的成員而第二個對象是Y的所有可能有序?qū)Φ钠渲幸粋€成員。(笛卡爾積)百度百科
  • 什么笛卡爾積,如下所示
SELECT * FROM `user`,`orders`;

  • 像如上圖查出來的數(shù)據(jù),對我們程序員是沒啥用的。
  • 哪如何消除笛卡爾積呢?需要主外鍵的約束,去重復(fù)數(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é)果給另外一個查詢當(dāng)條件使用。
  • 查詢年齡最大的用戶的訂單數(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。相當(dāng)于右外鏈接和左外鏈接的結(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)文章希望大家以后多多支持腳本之家! 

您可能感興趣的文章:
  • MySQL多表查詢的具體實例
  • MySQL多表查詢詳解下
  • MySQL多表查詢詳解上
  • 淺談MySQL使用笛卡爾積原理進(jìn)行多表查詢
  • MySQL 四種連接和多表查詢詳解

標(biāo)簽:鎮(zhèn)江 鷹潭 臺灣 日照 北京 貴州 阜新 合肥

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《MySQL數(shù)據(jù)庫高級查詢和多表查詢》,本文關(guān)鍵詞  MySQL,數(shù)據(jù)庫,高級,查詢,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《MySQL數(shù)據(jù)庫高級查詢和多表查詢》相關(guān)的同類信息!
  • 本頁收集關(guān)于MySQL數(shù)據(jù)庫高級查詢和多表查詢的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章