mysql 組合查詢:什么是組合查詢?如何創建組合查詢

什么是組合查詢

多數sql查詢都只包含從一個或多個表中返回數據的單條 select 語句。mysql也允許執行多個查詢(多條 SELECT 語句),并將結果作為單個查詢結果集返回。這些組合查詢通常稱為并(union)或復合查詢(compound query)。

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

1.在單個查詢中從不同的表返回類似結構的數據;

2.對單個表執行多個查詢,按單個查詢返回數據。

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

如何創建組合查詢

可用 UNION 操作符來組合數條SQL查詢。利用 UNION ,可給出多條SELECT 語句,將它們的結果組合成單個結果集。

使用UNION

UNION 的使用很簡單。所需做的只是給出每條 SELECT 語句,在各條語句之間放上關鍵字 UNION。

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

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

輸入:

select?vend_id,prod_id,prod_price?from?products?where?prod_price?<p>輸出:</p><p><img src="https://img.php.cn//upload/image/394/590/322/1494569145446483.png" title="1494569145446483.png" alt="QQ截圖20170512092240.png"></p><p>輸入:</p><pre class="brush:sql;toolbar:false">select?vend_id,prod_id,prod_price?from?products?where?vend_id?in?(1001,1002);

輸出:

mysql 組合查詢:什么是組合查詢?如何創建組合查詢

分析:第一條 SELECT 檢索價格不高于 5 的所有物品。第二條 SELECT 使用 IN 找出供應商 1001 和 1002 生產的所有物品。

為了組合這兩條語句,按如下進行:

輸入:

select?vend_id,prod_id,prod_price?from?products?where?prod_price?<p>輸出:</p><p><img src="https://img.php.cn//upload/image/570/812/656/1494569176701745.png" title="1494569176701745.png" alt="QQ截圖20170512092629.png"></p><p>分析:這條語句由前面的兩條 SELECT 語句組成,語句中用 UNION 關鍵字分隔。 UNION 指示MySQL執行兩條 SELECT 語句,并把輸出組合成單個查詢結果集。</p><p>作為參考,這里給出使用多條 WHERE 子句而不是使用 UNION 的相同查詢:</p><p>輸入:</p><pre class="brush:sql;toolbar:false">select?vend_id,prod_id,prod_price?from?products?where?prod_price?<p>在這個簡單的例子中,使用 UNION 可能比使用 WHERE 子句更為復雜。但對于更復雜的過濾條件,或者從多個表(而不是單個表)中檢索數據的情形,使用 UNION 可能會使處理更簡單。</p>

? 版權聲明
THE END
喜歡就支持一下吧
點贊10 分享