MySQL 教程 2.4

MySQL UNION 操作符

本教程為大家介紹 MySQL?UNION?操作符的語法和實例。

描述

MySQL UNION 操作符用于連接兩個以上的 SELECT 語句的結果組合到一個結果集合,并去除重復的行。

UNION 操作符必須由兩個或多個 SELECT 語句組成,每個 SELECT 語句的列數和對應位置的數據類型必須相同。

語法

MySQL UNION 操作符語法格式:

SELECT column1, column2, ...
FROM table1
WHERE condition1
UNION
SELECT column1, column2, ...
FROM table2
WHERE condition2
[ORDER BY column1, column2, ...];

參數說明:

  • column1,?column2, ... 是你要選擇的列的名稱,如果使用?*?表示選擇所有列。
  • table1,?table2, ... 是你要從中查詢數據的表的名稱。
  • condition1,?condition2, ... 是每個?SELECT?語句的過濾條件,是可選的。
  • ORDER BY?子句是一個可選的子句,用于指定合并后的結果集的排序順序。

實例

1. 基本的 UNION 操作:

SELECT city FROM customers
UNION
SELECT city FROM suppliers
ORDER BY city;

以上 SQL 語句將選擇客戶表和供應商表中所有城市的唯一值,并按城市名稱升序排序。

2. 使用過濾條件的 UNION:

SELECT product_name FROM products WHERE category = 'Electronics'
UNION
SELECT product_name FROM products WHERE category = 'Clothing'
ORDER BY product_name;

以上 SQL 語句將選擇電子產品和服裝類別的產品名稱,并按產品名稱升序排序。

3. UNION 操作中的列數和數據類型必須相同:

SELECT first_name, last_name FROM employees
UNION
SELECT department_name, NULL FROM departments
ORDER BY first_name;

以上 SQL 語句中,departments 表中的 department_name 列被映射到了 employees 表中的 last_name 列,但是列數和數據類型必須相同。

4. 使用 UNION ALL 不去除重復行:

SELECT city FROM customers
UNION ALL
SELECT city FROM suppliers
ORDER BY city;

以上 SQL 語句使用 UNION ALL 將客戶表和供應商表中的所有城市合并在一起,不去除重復行。

UNION 操作符在合并結果集時會去除重復行,而 UNION ALL 不會去除重復行,因此 UNION ALL 的性能可能更好,但如果你確實希望去除重復行,可以使用 UNION。


演示數據庫

在本教程中,我們將使用 RUNOOB 樣本數據庫。

下面是選自 "Websites" 表的數據:

mysql> SELECT * FROM Websites;
+----+--------------+---------------------------+-------+---------+
| id | name         | url                       | alexa | country |
+----+--------------+---------------------------+-------+---------+
| 1  | Google       | https://www.google.cm/    | 1     | USA     |
| 2  | 淘寶          | https://www.taobao.com/   | 13    | CN      |
| 3  | 菜鳥教程      | http://www.runoob.com/    | 4689  | CN      |
| 4  | 微博          | http://weibo.com/         | 20    | CN      |
| 5  | Facebook     | https://www.facebook.com/ | 3     | USA     |
| 7  | stackoverflow | http://stackoverflow.com/ |   0 | IND     |
+----+---------------+---------------------------+-------+---------+

下面是 "apps" APP 的數據:

mysql> SELECT * FROM apps;
+----+------------+-------------------------+---------+
| id | app_name   | url                     | country |
+----+------------+-------------------------+---------+
|  1 | QQ APP     | http://im.qq.com/       | CN      |
|  2 | 微博 APP | http://weibo.com/       | CN      |
|  3 | 淘寶 APP | https://www.taobao.com/ | CN      |
+----+------------+-------------------------+---------+
3 rows in set (0.00 sec)


SQL UNION 實例

下面的 SQL 語句從 "Websites" 和 "apps" 表中選取所有不同的country(只有不同的值):

實例

SELECT country FROM Websites
UNION
SELECT country FROM apps
ORDER BY country;

執行以上 SQL 輸出結果如下:

注釋:UNION 不能用于列出兩個表中所有的country。如果一些網站和APP來自同一個國家,每個國家只會列出一次。UNION 只會選取不同的值。請使用 UNION ALL 來選取重復的值!


SQL UNION ALL 實例

下面的 SQL 語句使用 UNION ALL 從 "Websites" 和 "apps" 表中選取所有的country(也有重復的值):

實例

SELECT country FROM Websites
UNION ALL
SELECT country FROM apps
ORDER BY country;

執行以上 SQL 輸出結果如下:


帶有 WHERE 的 SQL UNION ALL

下面的 SQL 語句使用 UNION ALL 從 "Websites" 和 "apps" 表中選取所有的中國(CN)的數據(也有重復的值):

實例

SELECT country, name FROM Websites
WHERE country='CN'
UNION ALL
SELECT country, app_name FROM apps
WHERE country='CN'
ORDER BY country;

執行以上 SQL 輸出結果如下:

UNION 語句:用于將不同表中相同列中查詢的數據展示出來;(不包括重復數據)

UNION ALL 語句:用于將不同表中相同列中查詢的數據展示出來;(包括重復數據)

使用形式如下:

SELECT 列名稱 FROM 表名稱 UNION SELECT 列名稱 FROM 表名稱 ORDER BY 列名稱;
SELECT 列名稱 FROM 表名稱 UNION ALL SELECT 列名稱 FROM 表名稱 ORDER BY 列名稱;

?

MySQL ORDER BY(排序) 語句

我們知道從 MySQL 表中使用?SELECT?語句來讀取數據。

如果我們需要對讀取的數據進行排序,我們就可以使用 MySQL 的?ORDER BY?子句來設定你想按哪個字段哪種方式來進行排序,再返回搜索結果。

MySQL?ORDER BY(排序)?語句可以按照一個或多個列的值進行升序(ASC)或降序(DESC)排序。

語法

以下是 SELECT 語句使用?ORDER BY?子句將查詢數據排序后再返回數據:

SELECT column1, column2, ...
FROM table_name
ORDER BY column1 [ASC | DESC], column2 [ASC | DESC], ...;

參數說明:

  • column1,?column2, ... 是你要選擇的列的名稱,如果使用?*?表示選擇所有列。
  • table_name?是你要從中查詢數據的表的名稱。
  • ORDER BY column1 [ASC | DESC], column2 [ASC | DESC], ...?是用于指定排序順序的子句。ASC?表示升序(默認),DESC?表示降序。

更多說明:

  • 你可以使用任何字段來作為排序的條件,從而返回排序后的查詢結果。
  • 你可以設定多個字段來排序。
  • 你可以使用 ASC 或 DESC 關鍵字來設置查詢結果是按升序或降序排列。 默認情況下,它是按升序排列。
  • 你可以添加 WHERE...LIKE 子句來設置條件。

實例

以下是一些 ORDER BY 子句的使用實例。

1. 單列排序:

SELECT * FROM products
ORDER BY product_name ASC;

以上 SQL 語句將選擇產品表 products 中的所有產品,并按產品名稱升序 ASC 排序。

2. 多列排序:

SELECT * FROM employees
ORDER BY department_id ASC, hire_date DESC;

以上 SQL 語句將選擇員工表 employees 中的所有員工,并先按部門 ID 升序 ASC 排序,然后在相同部門中按雇傭日期降序 DESC 排序。

3. 使用數字表示列的位置:

SELECT first_name, last_name, salary
FROM employees
ORDER BY 3 DESC, 1 ASC;

以上 SQL 語句將選擇員工表 employees 中的名字和工資列,并按第三列(salary)降序 DESC 排序,然后按第一列(first_name)升序 ASC 排序。

4. 使用表達式排序:

SELECT product_name, price * discount_rate AS discounted_price
FROM products
ORDER BY discounted_price DESC;

以上 SQL 語句將選擇產品表 products 中的產品名稱和根據折扣率計算的折扣后價格,并按折扣后價格降序 DESC 排序。

5. 使用 NULLS FIRST 或 NULLS LAST 處理 NULL 值:

SELECT product_name, price
FROM products
ORDER BY price DESC NULLS LAST;

以上 SQL 語句將選擇產品表 products 中的產品名稱和價格,并按價格降序 DESC 排序,將 NULL 值排在最后。

ORDER BY 子句是一個強大的工具,可以根據不同的業務需求對查詢結果進行排序。在實際應用中,注意選擇適當的列和排序順序,以獲得符合期望的排序效果。


在命令提示符中使用 ORDER BY 子句

以下將在 SELECT 語句中使用 ORDER BY 子句來讀取 MySQL 數據表 runoob_tbl 中的數據:

實例

嘗試以下實例,結果將按升序及降序排列。

SQL 排序

mysql> use RUNOOB; Database changed mysql> SELECT * from runoob_tbl ORDER BY submission_date ASC; +-----------+---------------+---------------+-----------------+ | runoob_id | runoob_title | runoob_author | submission_date | +-----------+---------------+---------------+-----------------+ | 3 | 學習 Java | RUNOOB.COM | 2015-05-01 | | 4 | 學習 Python | RUNOOB.COM | 2016-03-06 | | 1 | 學習 PHP | 菜鳥教程 | 2017-04-12 | | 2 | 學習 MySQL | 菜鳥教程 | 2017-04-12 | +-----------+---------------+---------------+-----------------+ 4 rows in set (0.01 sec) mysql> SELECT * from runoob_tbl ORDER BY submission_date DESC; +-----------+---------------+---------------+-----------------+ | runoob_id | runoob_title | runoob_author | submission_date | +-----------+---------------+---------------+-----------------+ | 1 | 學習 PHP | 菜鳥教程 | 2017-04-12 | | 2 | 學習 MySQL | 菜鳥教程 | 2017-04-12 | | 4 | 學習 Python | RUNOOB.COM | 2016-03-06 | | 3 | 學習 Java | RUNOOB.COM | 2015-05-01 | +-----------+---------------+---------------+-----------------+ 4 rows in set (0.01 sec)

讀取 runoob_tbl 表中所有數據并按 submission_date 字段的升序排列。


在 PHP 腳本中使用 ORDER BY 子句

你可以使用 PHP 函數的 mysqli_query() 及相同的 SELECT 帶上 ORDER BY 子句的命令來獲取數據。

該函數用于執行 SQL 命令,然后通過 PHP 函數 mysqli_fetch_array() 來輸出所有查詢的數據。

實例

嘗試以下實例,查詢后的數據按 submission_date 字段的降序排列后返回。

MySQL ORDER BY 測試:

<?php $dbhost = 'localhost'; // mysql服務器主機地址 $dbuser = 'root'; // mysql用戶名 $dbpass = '123456'; // mysql用戶名密碼 $conn = mysqli_connect($dbhost, $dbuser, $dbpass); if(! $conn ) { die('連接失敗: ' . mysqli_error($conn)); } // 設置編碼,防止中文亂碼 mysqli_query($conn , "set names utf8"); $sql = 'SELECT runoob_id, runoob_title, runoob_author, submission_date FROM runoob_tbl ORDER BY submission_date ASC'; mysqli_select_db( $conn, 'RUNOOB' ); $retval = mysqli_query( $conn, $sql ); if(! $retval ) { die('無法讀取數據: ' . mysqli_error($conn)); } echo '<h2>菜鳥教程 MySQL ORDER BY 測試<h2>'; echo '<table border="1"><tr><td>教程 ID</td><td>標題</td><td>作者</td><td>提交日期</td></tr>'; while($row = mysqli_fetch_array($retval, MYSQLI_ASSOC)) { echo "<tr><td> {$row['runoob_id']}</td> ". "<td>{$row['runoob_title']} </td> ". "<td>{$row['runoob_author']} </td> ". "<td>{$row['submission_date']} </td> ". "</tr>"; } echo '</table>'; mysqli_close($conn); ?>

輸出結果如下圖所示:

MySQL 排序我們知道從 MySQL 表中使用 SQL SELECT 語句來讀取:

MySQL 拼音排序

如果字符集采用的是 gbk(漢字編碼字符集),直接在查詢語句后邊添加 ORDER BY:

SELECT * 
FROM runoob_tbl
ORDER BY runoob_title;

如果字符集采用的是 utf8(萬國碼),需要先對字段進行轉碼然后排序:

SELECT * 
FROM runoob_tbl
ORDER BY CONVERT(runoob_title using gbk);

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/716755.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/716755.shtml
英文地址,請注明出處:http://en.pswp.cn/news/716755.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Python降維數據庫之umap使用詳解

概要 在數據科學和機器學習領域,數據通常是高維度的,而高維度數據不僅難以可視化,還會增加建模的復雜性。降維是一種處理高維數據的關鍵技術,而Python UMAP(Uniform Manifold Approximation and Projection)是一種強大的降維工具,它在保留數據結構的同時,將高維數據映…

uni-app引用外部js文件

全局引用 在App.vue文件中添加如下代碼 這樣在全局所有頁面中都可以直接使用該外部js中的函數 onLaunch: function() {var script document.createElement(script);script.src "https://www.test.com/api/testapi.js";document.body.appendChild(script); }, 單…

【IDEA+通義靈碼插件】實現屬于你的大模型編程助手

目錄 1.前言 2.下載安裝 3.解釋代碼 4.生成單元測試 5.生成注釋 6.智能補全 1.前言 大模型到底該以一種什么方式落地&#xff0c;從而嵌入我們的工作當中&#xff0c;助力我們工作效率的提升&#xff0c;其實最好的方式也許就是虛擬助手的方式&#xff0c;就像鋼鐵俠的&…

【OpenCV基礎(三)】Ubuntu系統下EasyPR環境配置

環境配置 1、資源下載2、環境配置2.1、1、將EasyPR壓縮包拷貝到Ubuntu 三種方法任選一種2.2、解壓得到EasyPR文件夾(文件夾一層進入后EasyPR資源內容)2.3、終端命令修改權限**chmod -R 777 ./ EasyPR**2.4、查找EasyPR/include/easypr/config.h&#xff0c;使用gedit方式打開2.…

uni-app app實現web-view H5圖片長按下載

問題和使用場景描述&#xff1a; uniapp app web-view中圖片無法長按保存&#xff0c;IOS下是正常的&#xff0c;但是Android下長按無反應 解決方案&#xff1a; 下載mui.min.js&#xff0c;放到項目中的static下(下載見最上面的壓縮包) 在static目錄下新建script.js mui.…

vue2本地開發環境正常,生產環境下this.$router.push({ name: ‘login‘ })不跳轉

如果在Vue.js 2中在本地開發環境下正常運行,但在生產環境下使用??this.$router.push({ name: login })??不起作用,可能有幾個原因需要檢查和解決: 路由配置問題: 確保你的路由配置正確,特別是確保在生產環境中,路由的配置和本地開發環境一致。檢查是否正確設置了name…

基于springboot+vue的智能學習平臺系統

博主主頁&#xff1a;貓頭鷹源碼 博主簡介&#xff1a;Java領域優質創作者、CSDN博客專家、阿里云專家博主、公司架構師、全網粉絲5萬、專注Java技術領域和畢業設計項目實戰&#xff0c;歡迎高校老師\講師\同行交流合作 ?主要內容&#xff1a;畢業設計(Javaweb項目|小程序|Pyt…

SAP PP學習筆記 - 豆知識07 - 如何查看BOM一覽

SAP標準提供了CS03&#xff0c;只能查詢單個的BOM&#xff0c;如果想查看一覽&#xff0c;只能自己寫SQVI 查詢。 有其他高招的童鞋&#xff0c;請賜教啊。 1&#xff0c;SQVI 工具 SAP MM學習筆記18- SQVI 工具_sap sqvi-CSDN博客 輸入查詢名&#xff0c;然后點擊 登錄 2&a…

#QT(DEMO2-登錄界面)

1.IDE&#xff1a;QTCreator 2.實驗&#xff1a;DEMO登錄 3.記錄 Line Edit輸入不換行 密碼框輸入如下設置: 運行效果 4.代碼

Vue.js+SpringBoot開發在線課程教學系統

目錄 一、摘要1.1 系統介紹1.2 項目錄屏 二、研究內容2.1 課程類型管理模塊2.2 課程管理模塊2.3 課時管理模塊2.4 課程交互模塊2.5 系統基礎模塊 三、系統設計3.1 用例設計3.2 數據庫設計 四、系統展示4.1 管理后臺4.2 用戶網頁 五、樣例代碼5.1 新增課程類型5.2 網站登錄5.3 課…

五、西瓜書——集成學習

1.個體與集成 集成學習通過將多個學習器進行結合,常可獲得比單一學習器顯著優越的泛化性能&#xff0c;這對“弱學習器”(weak learner)尤為明顯因此集成學習的很多理論研究都是針對弱學習器進行的而基學習器有時也被直接稱為弱學習器。 要獲得好的集成個體學習器應“好而不同”…

武漢灰京文化:多樣化推廣與創新引領游戲行業

作為專業的游戲推廣服務商&#xff0c;武漢灰京文化注重多樣化的推廣策略&#xff0c;通過與各大媒體、社交平臺和游戲社區建立緊密的合作關系&#xff0c;為游戲企業提供全方位的推廣服務。他們通過精確的廣告投放、內容創作和社交媒體互動等方式&#xff0c;將游戲信息傳播給…

【C++】STL學習之旅——初識STL,認識string類

string類 1 STL 簡介2 STL怎么學習3 STL缺陷4 string4.1 初識 string4.2 初步使用構造函數成員函數 5 小試牛刀Thanks?(&#xff65;ω&#xff65;)&#xff89;謝謝閱讀&#xff01;&#xff01;&#xff01;下一篇文章見&#xff01;&#xff01;&#xff01; 1 STL 簡介 …

解讀OWASP軟件保障成熟度模型SAMM

OWASP軟件保證成熟度模型&#xff08;SAMM&#xff09;可為所有類型的組織分析和改進其軟件安全態勢提供有效和可衡量的方法。OWASP SAMM支持完整的軟件生命周期&#xff0c;包括開發和獲取&#xff0c;并且與技術和過程無關。 1. 簡介 OWASP軟件保證成熟度模型&#xff08;SA…

數據結構 第3章 棧、隊列和數組(一輪習題總結)

第3章 棧、隊列和數組 3.1 棧3.2 隊列3.3 棧與隊列的應用3.4 數組和特殊矩陣 3.1 棧&#xff08;1 10 11 20&#xff09; 3.2 隊列&#xff08;6 12 14 17&#xff09; 3.3 棧與隊列的應用&#xff08;6 11&#xff09; 3.4 數組和特殊矩陣 3.1 棧 T1 棧和隊列具有相同的邏輯…

Java的基本數據類型和引用數據類型

Java的基本數據類型和引用數據類型 Java中的基本數據類型包括整數類型、浮點類型、字符類型和布爾類型&#xff0c;而引用數據類型主要包括類、接口、數組和枚舉。具體介紹如下&#xff1a; 基本數據類型&#xff1a; 整數類型&#xff1a;包括byte、short、int、long&#…

k8s-prometheus監控部署 22

新建項目倉庫并上傳部署prometheus所需的鏡像 開始部署 修改svc訪問方式為LoadBalancer 查看用戶名和密碼 訪問grafana監控頁面 http://192.168.182.103/?????? 修改可視化模板 官方監控模板&#xff1a;https://grafana.com/grafana/dashboards 訪問prometheus監控頁面…

1. vue3-環境準備

1、安裝node.js 如果開發環境上面沒有安裝node.js&#xff0c;需要到node.js官方網站下載node.js。下載安裝后&#xff0c;可以通過npm --version查看nodejs版本 2. 開發工具 開發工具建議使用vscode

知識圖譜1——neo4j

2024年要搞知識圖譜&#xff0c;因此沒有辦法&#xff0c;只能將我之前固守的JDK1.8&#xff0c;升級到JDK21&#xff0c;因為JDK21也是LTS版本&#xff0c;neo4j高版本就不支持JDK8&#xff0c;因此沒有辦法&#xff0c;只有升級了。寫這篇只是一個搭建筆記&#xff0c;我的初…

AJAX 學習筆記(Day3)

「寫在前面」 本文為黑馬程序員 AJAX 教程的學習筆記。本著自己學習、分享他人的態度&#xff0c;分享學習筆記&#xff0c;希望能對大家有所幫助。推薦先按順序閱讀往期內容&#xff1a; 1. AJAX 學習筆記&#xff08;Day1&#xff09; 目錄 3 AJAX 原理 3.1 XMLHttpRequest 3…