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

Mysql深入了解聯(lián)表查詢的特點

 更新時間:2022年07月27日 10:53:29   作者:·~簡單就好  
這篇文章主要給大家介紹了關(guān)于MySQL聯(lián)表查詢的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用MySQL具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧

前言

為了減少對數(shù)據(jù)庫的查詢次數(shù),例如在互不關(guān)聯(lián)的表中為了減輕系統(tǒng)的壓力,我們可以通過union all關(guān)鍵詞將多個表查到的數(shù)據(jù)做一個聯(lián)查處理

(便于統(tǒng)計分析時使用到不同的數(shù)據(jù)而只用一次請求)

舉例:通過一條sql語句一次查詢查詢學(xué)生表中的性別為男的學(xué)生總數(shù)和教師表中的教師性別為男的教師總數(shù)

數(shù)據(jù)庫表準(zhǔn)備:

1、student表

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for student
-- ----------------------------
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student`  (
  `id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
  `name` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '',
  `birth` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '',
  `sex` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of student
-- ----------------------------
INSERT INTO `student` VALUES ('01', '趙雷', '1990-01-01', '男');
INSERT INTO `student` VALUES ('02', '錢電', '1990-12-21', '男');
INSERT INTO `student` VALUES ('03', '孫風(fēng)', '1990-05-20', '男');
INSERT INTO `student` VALUES ('04', '李云', '1990-08-06', '男');
INSERT INTO `student` VALUES ('05', '周梅', '1991-12-01', '女');
INSERT INTO `student` VALUES ('06', '吳蘭', '1992-03-01', '女');
INSERT INTO `student` VALUES ('07', '鄭竹', '1989-07-01', '女');
INSERT INTO `student` VALUES ('08', '王菊', '1990-01-20', '女');
SET FOREIGN_KEY_CHECKS = 1;

2、teacher表

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for teacher
-- ----------------------------
DROP TABLE IF EXISTS `teacher`;
CREATE TABLE `teacher`  (
  `id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
  `name` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '',
  `sex` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of teacher
-- ----------------------------
INSERT INTO `teacher` VALUES ('01', '張三', '男');
INSERT INTO `teacher` VALUES ('02', '李四', '女');
INSERT INTO `teacher` VALUES ('03', '王五', '男');
SET FOREIGN_KEY_CHECKS = 1;

一、傳統(tǒng)方法(查詢性能不佳)

對所查詢的數(shù)據(jù)封裝成一個表,在分別對表的數(shù)據(jù)查詢展示出來。

這種方法比較簡單但是會對數(shù)據(jù)庫的查詢次數(shù)大大提高

SELECT
	t1.學(xué)生男生總數(shù),
	t2.男教師總數(shù) 
FROM
	( SELECT count( id ) AS 學(xué)生男生總數(shù) FROM student WHERE student.sex = '男' ) t1,
	( SELECT count( id ) AS 男教師總數(shù) FROM teacher WHERE teacher.sex = '男' ) t2

二、使用union all將多個表聯(lián)合成一個表查詢

	select t.*  from
	( SELECT count(id) as a,0 as b FROM student WHERE student.sex = '男'
			union all
	SELECT 0 as a,count(id) as b FROM teacher WHERE teacher.sex = '男' ) t

1、此時a代表學(xué)生性別為男生的總?cè)藬?shù),b代表教師性別為男的總?cè)藬?shù)

2、此時我們只需對a和b分別求和,就能夠查詢出男學(xué)生和男教師的總?cè)藬?shù)

	select sum(t.a) as 學(xué)生男生總數(shù),sum(t.b) as 男教師總數(shù) from
	( SELECT count(id) as a,0 as b FROM student WHERE student.sex = '男'
			union all
	SELECT 0 as a,count(id) as b FROM teacher WHERE teacher.sex = '男' ) t

三、總結(jié)

當(dāng)我們使用union all多表聯(lián)合時,這樣對于互不關(guān)聯(lián)的數(shù)據(jù)我們也能夠一次就只能查詢多條我們需要的數(shù)據(jù),減少了請求次數(shù)一次查詢次數(shù),而且對數(shù)據(jù)庫的性能大大提升!

到此這篇關(guān)于Mysql深入了解聯(lián)表查詢的特點的文章就介紹到這了,更多相關(guān)Mysql聯(lián)表查詢內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • centos7下mysqldump定時備份數(shù)據(jù)庫的方法實現(xiàn)

    centos7下mysqldump定時備份數(shù)據(jù)庫的方法實現(xiàn)

    MySQL Dump是MySQL提供的方便導(dǎo)出數(shù)據(jù)庫數(shù)據(jù)的工具,本文主要介紹了centos7下mysqldump定時備份數(shù)據(jù)庫的方法實現(xiàn),感興趣的可以了解一下
    2023-08-08
  • MySQL 表的垂直拆分和水平拆分

    MySQL 表的垂直拆分和水平拆分

    這篇文章主要介紹了MySQL 表的垂直拆分和水平拆分,文中講解非常細(xì)致,幫助大家更好的理解和學(xué)習(xí)MySQL,感興趣的朋友可以了解下
    2020-07-07
  • 記一次MySQL的優(yōu)化案例

    記一次MySQL的優(yōu)化案例

    這篇文章主要介紹了記一次MySQL的優(yōu)化案例,幫助大家更好的理解和使用MySQL數(shù)據(jù)庫,感興趣的朋友可以了解下
    2020-10-10
  • Ubuntu下取消MySQL數(shù)據(jù)庫本機(jī)綁定限制方法

    Ubuntu下取消MySQL數(shù)據(jù)庫本機(jī)綁定限制方法

    在Ubuntu系統(tǒng)中,添加了MySQL賬戶,賦予了數(shù)據(jù)庫完全操作權(quán)限,并且允許數(shù)據(jù)庫從外部鏈接 但是,還是無法遠(yuǎn)程訪問MySQL數(shù)據(jù)庫
    2013-06-06
  • 詳解MySQL與Spring的自動提交(autocommit)

    詳解MySQL與Spring的自動提交(autocommit)

    這篇文章主要介紹了MySQL與Spring的自動提交(autocommit)的的相關(guān)資料,幫助大家更好的理解和使用MySQL與spring,感興趣的朋友可以了解下
    2021-01-01
  • 利用rpm安裝mysql 5.6版本詳解

    利用rpm安裝mysql 5.6版本詳解

    眾所周知MySQL在很多領(lǐng)域都被廣泛的使用,尤其是很多互聯(lián)網(wǎng)企業(yè),諸如騰訊,阿里等等。那么本文將主要介紹如何通過rpm方式來安裝Mysql,這是比較簡單的一種安裝方式,文中介紹的很詳細(xì),相信對于大家安裝mysql具有一定的參考借鑒價值,下面來一起看看吧。
    2016-11-11
  • MySQL 5.7.18 免安裝版配置教程

    MySQL 5.7.18 免安裝版配置教程

    這篇文章主要為大家詳細(xì)介紹了MySQL 5.7.18 免安裝版配置教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • mysql ifnull不起作用原因分析以及解決

    mysql ifnull不起作用原因分析以及解決

    這篇文章主要介紹了mysql ifnull不起作用原因分析以及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • 使用ORM新增數(shù)據(jù)在Mysql中的操作步驟

    使用ORM新增數(shù)據(jù)在Mysql中的操作步驟

    這篇文章主要介紹了使用ORM新增數(shù)據(jù)在Mysql中,但是在這需要注意需要大家新建ORM模型,具體搭建步驟及詳細(xì)過程跟隨小編一起看看吧
    2021-07-07
  • 關(guān)于SqlServer中datediff用法

    關(guān)于SqlServer中datediff用法

    datediff是SQL SERVER里面的用法,ORACLE沒有,主要作用是返回兩個日期之間的時間間隔,本文通過實例代碼給大家詳細(xì)講解,對datediff用法感興趣的朋友跟隨小編一起看看吧
    2022-11-11

最新評論