最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL使用組合查詢的示例代碼

 更新時間:2024年03月01日 11:54:21   作者:M?malloc  
本文主要介紹了MySQL使用組合查詢的示例代碼,如何使用UNION操作符來組合SELECT語句,文中通過示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

??本章講述如何利用UNION操作符將多條SELECT語句組合成一個結(jié)果集。

??組合查詢

前言

多數(shù)SQL查詢都只包含從一個或多個表中返回數(shù)據(jù)的單條SELECT語句。MySQL也允許執(zhí)行多個查詢 (多條SELECT語),并將結(jié)果作為單個查詢結(jié)果集返回。這些組合查詢通常稱為并 (union)或復(fù)合查詢**(compound query)**.

有兩種基本情況,其中需要使用組合查詢:

  • 在單個查詢中從不同的表返回類似結(jié)構(gòu)的數(shù)據(jù);
  • 對單個表執(zhí)行多個查詢,按單個查詢返回數(shù)據(jù)。

組合查詢和多個WHERE條件

多數(shù)情況下,組合相同表的兩個查詢完成的工作與具有多個WHERE子句條件的單條查詢完成的工作相同。換句話說,任何具有多個WHERE子的SELECT語句都可以作為一個組合查詢給出,在以下段落中可以看到這一點這兩種技術(shù)在不同的查詢中性能也不同。因此,應(yīng)該試一下這兩種技術(shù),以確定對特定的查詢哪一種性能更好。

??創(chuàng)建組合查詢

??可用UNION操作符來組合數(shù)條SOL查詢。利用UNION,可給出多條SELECT語句,將它們的結(jié)果組合成單個結(jié)果集

舉一個例子,假如需要價格小于等于5的所有物品的一個列表,而且還想包括供應(yīng)商1001和1002生產(chǎn)的所有物品(不考慮價格)。當(dāng)然,可以利用WHERE子來完成此工作,不過這次我們將使用UNION。

正如所述,創(chuàng)建UNION涉及編寫多條SELECT語句。首先來看單條語句:

輸入

SELECT vend_id,prod_id,prod_price FROM products
	WHERE prod_price <= 5;

輸出

在這里插入圖片描述

輸入

SELECT vend_id, prod_id, prod_price FROM products
	WHERE vend_id IN (1001,1002);

輸出

在這里插入圖片描述

分析

??第一條SELECT檢索價格不高于5的所有物品。第二條SELECT使用IN找出供應(yīng)商1001和1002生產(chǎn)的所有物品。

為了組合這兩條語句,按如下進(jìn)行:

輸入

SELECT vend_id, prod_id, prod_price FROM products
	WHERE prod_price <= 5
		UNION SELECT vend_id, prod_id, prod_price FROM products
			WHERE vend_id IN (1001,1002);

輸出

在這里插入圖片描述

分析

這條語句由前面的兩條SELECT語句組成,語句中用UNION關(guān)鍵字分隔。UNION指示MySQL執(zhí)行兩條SELECT語句,并把輸出組合成單個查詢結(jié)果集。

作為參考,這里給出使用多條WHERE子句而不是使用UNION的相同查詢:

SELECT vend_id, prod_id, prod_price FROM products
	WHERE prod_price &lt;= 5
		OR vend_id IN (1001,1002);

在這個簡單的例子中,使用UNION可能比使用WHERE子句更為復(fù)雜但對于更復(fù)雜的過濾條件,或者從多個表(而不是單個表)中檢索數(shù)據(jù)的情形,使用UNION可能會使處理更簡單。

??UNION規(guī)則

正如所見,并是非常容易使用的。但在進(jìn)行并時有幾條規(guī)則需要注意。

  • UNION必須由兩條或兩條以上的SELECT語句組成,語句之間用關(guān)鍵字UNION分隔(因此,如果組合4條SELECT語句,將要使用3個UNION關(guān)鍵字)。
  • UNION中的每個查詢必須包含相同的列、表達(dá)式或聚集函數(shù)(不過各個列不需要以相同的次序列出)。
  • 列數(shù)據(jù)類型必須兼容:類型不必完全相同,但必須是DBMS可以隱含地轉(zhuǎn)換的類型(例如,不同的數(shù)值類型或不同的日期類型)。

如果遵守了這些基本規(guī)則或限制,則可以將并用于任何數(shù)據(jù)檢索任務(wù)。

??包含或取消重復(fù)的行

在上述所用的樣例SELECT語句。我們注意到在分別執(zhí)行時,第一條SELECT語句返回4行,第二條SELECT語句返回5行。但在用UNION組合兩條SELECT語句后,只返回了8行而不是9行。

UNION從查詢結(jié)果集中自動去除了重復(fù)的行(換句話說,它的行為與單條SELECT語句中使用多個WHERE子條件一樣)。因為供應(yīng)商1002生產(chǎn)的一種物品的價格也低于5,所以兩條SELECT語句都返回該行。在使用UNION時,重復(fù)的行被自動取消

這是UNION的默認(rèn)行為,但是如果需要,可以改變它。事實上,如果想返回所有匹配行,可使用UNION ALL而不是UNION。

請看下面的例子:

輸入

SELECT vend_id, prod_id, prod_price FROM products
	WHERE prod_price <= 5
		UNION ALL 
			SELECT vend_id, prod_id, prod_price FROM products
				WHERE vend_id IN (1001,1002);

輸出

在這里插入圖片描述

分析

使用UNIONALL,MySOL不取消重復(fù)的行。因此這里的例子返回9行,其中有一行出現(xiàn)兩次。

UNION與WHERE

本篇文章開始時說過,UNION幾乎總是完成與多個WHERE條件相同的工作。UNIONALL為UNION的一種形式,它完成WHERE子句完成不了的工作。如果確實需要每個條件的匹配行全部出現(xiàn)(包括重復(fù)行),則必須使用UNIONALL而不是WHERE

??對組合查詢結(jié)果排序

提示

SELECT語句的輸出用ORDER BY子排序。在用UNION組合查詢時只能使用一條ORDER BY子句,它必須出現(xiàn)在最后一條SELECT語句之后對于結(jié)果集,不存在用一種方式排序一部分,而又用另一種方式排序另部分的情況,因此不允許使用多條ORDER BY子句。

下面的例子排序前面UNION返回的結(jié)果:

輸入

SELECT vend_id, prod_id, prod_price FROM products
	WHERE prod_price <= 5
		UNION 
			SELECT vend_id, prod_id, prod_price FROM products
				WHERE vend_id IN (1001,1002)
					ORDER BY vend_id, prod_price;

輸出

在這里插入圖片描述

分析

這條UNION在最后一條SELECT語后使用了ORDER BY子句雖然ORDER BY子句似乎只是最后一條SELECT語句的組成部分,但實際上MySQL將用它來排序所有SELECT語句返回的所有結(jié)果。

組合不同的表

為使表述比較簡單,本章例子中的組合查詢使用的均是相同的表。但是其中使用UNION的組合查詢可以應(yīng)用不同的表。

如何鞏固學(xué)習(xí)

提示:在學(xué)習(xí)的過程中,我們需要先自行進(jìn)行思考,而不是一遇到不會的就放棄思考直接看答案,如果最后遇到真的不會的題目,我們可以適當(dāng)?shù)倪M(jìn)行觀看答案,看自己的思路是否正確,在作出正確的判斷

本文小結(jié)

本篇文章講授如何用UNION操作符來組合SELECT語句。利用UNION,可把多條查詢的結(jié)果作為一條組合查詢返回,不管它們的結(jié)果中包含還是不包含重復(fù)。使用UNION可極大地簡化復(fù)雜的WHERE子句,簡化從多個表中檢索數(shù)據(jù)的工作。

到此這篇關(guān)于MySQL使用組合查詢的示例代碼的文章就介紹到這了,更多相關(guān)MySQL 組合查詢內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • MySQL子查詢的使用詳解下篇

    MySQL子查詢的使用詳解下篇

    子查詢是在查詢語句里面再嵌套一個查詢,這是因為我們在提取數(shù)據(jù)的時候有很多不知道的數(shù)據(jù)產(chǎn)生了依賴關(guān)系。本文為大家總結(jié)了一下MySQL數(shù)據(jù)庫子查詢語法規(guī)則,感興趣的可以了解一下
    2022-08-08
  • MySQL 5.0.96 for Windows x86 32位綠色精簡版安裝教程

    MySQL 5.0.96 for Windows x86 32位綠色精簡版安裝教程

    這篇文章主要介紹了MySQL 5.0.96 for Windows x86 32位綠色精簡版安裝教程,需要的朋友可以參考下
    2017-10-10
  • MySQL的join buffer原理

    MySQL的join buffer原理

    這篇文章主要介紹了MySQL的join buffer原理,幫助大家更好的理解和學(xué)習(xí)使用MySQL數(shù)據(jù)庫,感興趣的朋友可以了解下
    2021-04-04
  • MySQL SHOW STATUS語句的使用

    MySQL SHOW STATUS語句的使用

    這篇文章主要介紹了MySQL SHOW STATUS語句的使用,幫助大家更好的理解和使用MySQL數(shù)據(jù)庫,感興趣的朋友可以了解下
    2020-12-12
  • MySQL8新特性:降序索引詳解

    MySQL8新特性:降序索引詳解

    在數(shù)據(jù)庫中我們一般都會對一些字段進(jìn)行索引操作,這樣可以提升數(shù)據(jù)的查詢速度,下面這篇文章主要給大家介紹了關(guān)于MySQL8新特性:降序索引的相關(guān)資料,需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-07-07
  • mysql解決時區(qū)相關(guān)問題

    mysql解決時區(qū)相關(guān)問題

    這篇文章主要介紹了mysql如何解決時區(qū)相關(guān)問題,本篇文章將從數(shù)據(jù)庫參數(shù)入手,逐步介紹時區(qū)相關(guān)內(nèi)容。感興趣的朋友可以了解下
    2020-08-08
  • MySQL 數(shù)據(jù)庫如何解決高并發(fā)問題

    MySQL 數(shù)據(jù)庫如何解決高并發(fā)問題

    這篇文章主要介紹了MySQL 如何處理高并發(fā),幫助大家更好的優(yōu)化MySQL數(shù)據(jù)庫,感興趣的朋友可以了解下
    2020-09-09
  • MySQL存儲過程終止執(zhí)行的三種常見方法

    MySQL存儲過程終止執(zhí)行的三種常見方法

    在 MySQL 存儲過程(PROCEDURE)開發(fā)中,我們常常遇到這樣的需求:在執(zhí)行過程中,如果某些條件不滿足,就要立即終止剩余邏輯,避免無效或錯誤的操作,所以本文給大家介紹了MySQL存儲過程終止執(zhí)行的三種常見方法,需要的朋友可以參考下
    2025-11-11
  • MySQL中字段類型為longtext的值導(dǎo)出后顯示二進(jìn)制串方式

    MySQL中字段類型為longtext的值導(dǎo)出后顯示二進(jìn)制串方式

    這篇文章主要介紹了MySQL中字段類型為longtext的值導(dǎo)出后顯示二進(jìn)制串方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • MySQL中索引優(yōu)化distinct語句及distinct的多字段操作

    MySQL中索引優(yōu)化distinct語句及distinct的多字段操作

    這篇文章主要介紹了MySQL中索引優(yōu)化distinct語句及distinct的多字段操作方法,distinct語句去重功能的使用是MySQL入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2016-01-01

最新評論

耿马| 乡宁县| 平定县| 靖西县| 清苑县| 托里县| 临泉县| 兴国县| 旅游| 温州市| 榆林市| 孝感市| 北辰区| 元谋县| 石楼县| 余干县| 周至县| 五台县| 方城县| 北宁市| 常宁市| 林口县| 苍山县| 河北省| 滦南县| 汤原县| 南安市| 屏南县| 卓尼县| 绥化市| 乡宁县| 乌鲁木齐市| 通河县| 永清县| 读书| 台北市| 会东县| 甘谷县| 固安县| 东兰县| 额尔古纳市|