1. 程式人生 > >MySQL資料庫進階

MySQL資料庫進階

UNION操作符

  UNION操作符用於連線兩個以上的SELECT語句的結果組合到一個結果集合中。多個SELECT語句會刪除重複的資料。
  語法

SELECT expression1, expression2, ... expression_n
FROM tables
[WHERE conditions]
UNION [ALL | DISTINCT]
SELECT expression1, expression2, ... expression_n
FROM tables
[WHERE conditions];
  • expression1, expression2, … expression_n: 要檢索的列。
  • tables: 要檢索的資料表。
  • WHERE conditions: 可選, 檢索條件。
  • DISTINCT: 可選,刪除結果集中重複的資料。預設情況下 UNION
  • 操作符已經刪除了重複資料,所以 DISTINCT 修飾符對結果沒啥影響。
  • ALL: 可選,返回所有結果集,包含重複資料。
    UNION 例項
/*從 "Websites" 和 "apps" 表中選取所有不同的country(只有不同的值)*/
SELECT country FROM Websites
UNION
SELECT country FROM apps
ORDER BY country;

  UNION ALL例項

/*使用 UNION ALL 從 "Websites" 和 "apps" 表中選取所有的country(也有重複的值)*/
SELECT country FROM Websites UNION ALL SELECT country FROM apps ORDER BY country;

  帶有 WHERE 的 SQL UNION ALL

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

排序 ORDER BY子句

  語法

SELECT field1, field2,...fieldN table_name1, table_name2...
ORDER BY field1, [field2...][ASC [DESC]]
  • 你可以使用任何欄位來作為排序的條件,從而返回排序後的查詢結果。
  • 你可以設定多個欄位來排序。
  • 關鍵字來設定查詢結果是按升序或降序排列。預設情況下,它是按升序排列。
  • 你可以新增WHERE…LIKE子句來設定條件。
  • ASC是指定列按升序排列,DESC則是指定列按降序排列。
SELECT * from runoob_tbl ORDER BY submission_date ASC;/*使用 ORDER BY 子句來讀取MySQL 資料表 runoob_tbl 中的資料*/

  asc是指定列按升序排列,desc則是指定列按降序排列。

分組 GROUP BY語句

  GROUP BY語句根據一個或多個列對結果集進行分組。
  可以使用 COUNT, SUM, AVG,等函式
  GROUP BY語法

SELECT column_name, function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name;

  例項

SELECT name, COUNT(*) FROM employee_tbl GROUP BY name;/*使用GROUP BY語句 將資料表按名字進行分組,並統計每個人有多少條記錄*/

  WITH ROLLUP 可以實現在分組統計資料基礎上再進行相同的統計(SUM,AVG,COUNT…)

SELECT name, SUM(singin) as singin_count FROM  employee_tbl GROUP BY name WITH ROLLUP;

  可以使用 coalesce 來設定一個可以取代 NUll 的名稱,coalesce 語法:

select coalesce(a,b,c);

  引數說明:如果a==null,則選擇b;如果b==null,則選擇c;如果a!=null,則選擇a;如果a b c 都為null ,則返回為null(沒意義)。

SELECT coalesce(name, '總數'), SUM(singin) as singin_count FROM  employee_tbl GROUP BY name WITH ROLLUP;

連線的使用 JOIN

  JOIN 按照功能大致分為如下三類:

  • INNER JOIN(內連線,或等值連線):獲取兩個表中欄位匹配關係的記錄。
  • LEFT JOIN(左連線):獲取左表所有記錄,即使右表沒有對應匹配的記錄。
  • RIGHT JOIN(右連線): 與 LEFT JOIN 相反,用於獲取右表所有記錄,即使左表沒有對應匹配的記錄。
    資料庫結構及資料下載

INNER JOIN

  使用INNER JOIN(也可以省略 INNER 使用 JOIN,效果一樣)來連線以上兩張表來讀取runoob_tbl表中所有runoob_author欄位在tcount_tbl表對應的runoob_count欄位值

SELECT a.runoob_id, a.runoob_author, b.runoob_count FROM runoob_tbl a INNER JOIN tcount_tbl b ON a.runoob_author = b.runoob_author;

  以上 SQL 語句等價於

SELECT a.runoob_id, a.runoob_author, b.runoob_count FROM runoob_tbl a, tcount_tbl b WHERE a.runoob_author = b.runoob_author;

LEFT JOIN

  LEFT JOIN 會讀取左邊資料表的全部資料,即便右邊表無對應資料。
  以 runoob_tbl 為左表,tcount_tbl 為右表,

SELECT a.runoob_id, a.runoob_author, b.runoob_count FROM runoob_tbl a LEFT JOIN tcount_tbl b ON a.runoob_author = b.runoob_author;

RIGHT JOIN

  RIGHT JOIN 會讀取右邊資料表的全部資料,即便左邊邊表無對應資料。
  以 runoob_tbl 為左表,tcount_tbl 為右表

SELECT a.runoob_id, a.runoob_author, b.runoob_count FROM runoob_tbl a RIGHT JOIN tcount_tbl b ON a.runoob_author = b.runoob_author;

NULL 值處理

  三大運算子:

  • IS NULL: 當列的值是 NULL,此運算子返回 true。
  • IS NOT NULL: 當列的值不為 NULL, 運算子返回 true。
    注意:NULL 值與任何其它值的比較(即使是 NULL)永遠返回 false,即 NULL = NULL 返回false 。
  • <=>: 比較操作符(不同於=運算子),當比較的的兩個值為 NULL 時返回 true。
SELECT * FROM runoob_test_tbl WHERE runoob_count IS NULL;
SELECT * from runoob_test_tbl WHERE runoob_count IS NOT NULL;

正則表示式 REGEXP 操作符

  查詢name欄位中以’st’為開頭的所有資料:

SELECT name FROM person_tbl WHERE name REGEXP '^st';

  查詢name欄位中以’ok’為結尾的所有資料:

SELECT name FROM person_tbl WHERE name REGEXP 'ok$';

  查詢name欄位中包含’mar’字串的所有資料:

SELECT name FROM person_tbl WHERE name REGEXP 'mar';

  查詢name欄位中以母音字元開頭或以’ok’字串結尾的所有資料:

SELECT name FROM person_tbl WHERE name REGEXP '^[aeiou]|ok$';

相關推薦

Mysql資料庫之(分表分庫,主從分離)

前言:資料庫的優化是一個程式設計師的分水嶺,作為小白我也得去提前學習這方面的資料的 (一)  三正規化和逆正規化   聽起正規化這個遲非常專業我來舉個簡單的栗子:   第一正規化就是:  把能夠關聯的每條資料都拆分成一個表   第二正規化就是:把能夠關聯的每條資料寫在一個表格中去

MySQL資料庫

UNION操作符   UNION操作符用於連線兩個以上的SELECT語句的結果組合到一個結果集合中。多個SELECT語句會刪除重複的資料。   語法 SELECT expression1, expression2, ... expression_n FR

資料庫MySQL 調優》

1、EXPLAIN 做MySQL優化,我們要善用EXPLAIN檢視SQL執行計劃。 Or   語句 EXPLAIN  語句  兩者都行 下面來個簡單的示例,標註(1、2、3、4、5)我們要重點關注的資料:   &nbs

MySQL學習

inf primary 文件 rom 主鍵約束 fault 文本文件 delet 介紹 存儲引擎 MyISAMMySQL 5.0 之前的默認數據庫引擎,最為常用。擁有較高的插入,查詢速度,但不支持事務 InnoDB事務型數據庫的首選引擎,支持ACID事務,支持行級鎖定, M

03 mysql補充 ()

color 增加字段 div char ren tab mys var 表名 增加字段 alter table tb1 add age int first; 增加到第一 alter table tb1 add sex int after id; # 改變位置,id是字

mysql 開發篇系列 5 SQL 優化

其它 目的 block 垂直拆分 例如 info 分析 設計 plain 一. 使用sql提示 sql 提示(sql hint)是優化數據庫的一個重要手段, 是在sql語句中加入一些人為的提示來達到優化操作的目的。   1.1 use index

mysql 開發篇系列 6 鎖問題

訪問 vcc 不同 gin 存儲引擎 rhs 出現 詳細 方法 一.概述   在數據庫中,數據是屬於共享資源,為了保證並發訪問的一致性,有效性,產生了鎖。接下來重點討論mysql鎖機制的特點,常見的鎖問題,以及解決mysql鎖問題的一些方法或建議。 相比其他數據庫,mysq

mysql 開發篇系列 12 鎖問題(隔離級別下鎖的差異)

padding 排它 改變 level order 並發 aci delete 恢復 1. innodb在不同隔離級別下的一致性讀及鎖的差異   不同的隔離級別下,innodb處理sql 時采用的一致性讀策略和需要的鎖是不同的,同時,數據恢復和復制機制的特點,也對一些sql

mysql 開發篇系列 14 鎖問題(避免死鎖,死鎖查看分析)

mysq cit 優化 業務流程 update span tro isp 問題 一. 概述   通常來說,死鎖都是應用設計問題,通過調整業務流程,數據庫對象設計,事務大小,以及訪問數據庫的sql語句,絕大部分死鎖都可以避免,下面介紹幾種避免死鎖的常用 方法.  1. 在應

mysql 開發篇系列 23 應用層優化與查詢緩存

http lang 單位 tro source 局限 pooling 內存不足 unit 一.概述       前面章節介紹了很多數據庫的優化措施,但在實際生產環境中,由於數據庫服務器本身的性能局限,就必須要對前臺的應用來進行優化,使得前臺訪問數據庫的壓力能夠減到最小。  

mysql 開發篇系列 34 工具篇 mysqlcheck(MyISAM表維護工具)

alt 1.4 width pwd table 方式 選項 ble 優化 一.概述 mysqlcheck客戶端工具可以檢查和修復MyISAM表,還可以優化和分析表。實際上,它集成了mysql工具中check,repair,analyze,optimize功

mysql 開發篇系列 55 權限與安全(安全事項 )

應該 htm set 傳輸 深入 weight 本地 圖片 dmi 一. 操作系統層面安全     對於數據庫來說,安全很重要,本章將從操作系統和數據庫兩個層面對mysql的安全問題進行了解。   1. 嚴格控制操作系統賬號和權限     在數據庫服務器上要嚴格控制操作系統

mysql 開發篇系列 54 許可權與安全(賬號管理的各種許可權操作 下)

1. 檢視許可權 -- 如果host值不是%, 就要加上host值,下面檢視bkpuser使用者許可權(6個許可權, 限本地連線) SHOW GRANTS FOR bkpuser@localhost;      -- 如果host值是%, 就只要輸入使用者名稱,下面檢視z1使用者許可權(

mysql 開發篇系列 51 許可權與安全(許可權表user,db詳細介紹 )

一.概述   mysql 的許可權系統主要用來對連線到資料庫的使用者進行許可權驗證,以此來判斷此使用者是否屬於合法使用者,以及合法使用者給予的相應資料庫許可權。下面將介紹許可權系統的工作原理,以及將要熟練掌握賬號的管理和使用方法(mysql版本 5.7)。   1.1  許可權系統的

mysql 開發篇系列 40 mysql日誌之二進位制日誌下以及查詢日誌

一.binlog 二進位制其它選項   在二進位制日誌記錄了資料的變化過程,對於資料的完整性和安全性起著非常重要作用。在mysql中還提供了一些其它引數選項,來進行更小粒度的管理。   1.1 binlog-do-db=db_name     該選項告訴主伺服器,當前db_name庫會更新記錄到二進位制日誌中

mysql 開發篇系列 41 mysql日誌之慢查詢日誌

一.概述          慢查詢日誌記錄了所有的超過sql語句( 超時引數long_query_time單位 秒),獲得表鎖定的時間不算作執行時間。慢日誌預設寫入到引數datadir(資料目錄)指定的路徑下。預設檔名是[hostname]_slow.log,預設超時是10秒,預設不開啟慢查詢日誌。下面檢視慢

mysql 開發篇系列 42 邏輯備份與恢復

一.概述          在作何資料庫裡,備份與恢復都是非常重要的。好的備份方法和備份策略將會使得資料庫中的資料更加高效和安全。對於DBA來說,進行備份或恢復操作時要考慮的因素大概有如下: (1) 確定要備份的表的儲存引擎是事務型(innodb)還是非事務型。兩種不同的儲存引擎備份方式在處理資料一致性方面

mysql 開發篇系列 43 邏輯備份與恢復(基於時間和位置的不完全恢復)

一. 概述          在上篇講到了邏輯備份,使用mysqldump工具來備份一個庫,並使用完全恢復還原了資料庫。在結尾也講到了誤操作是不能用完全恢復的。解決辦法是:我們需要恢復到誤操作之前的狀態,然後跳過誤操作語句。再恢復後面執行的語句,完成我們的恢復,這種恢復叫“不完全恢復”。在mysql 中,不完

mysql 開發篇系列 44 物理備份與恢復( 熱備份xtrabackup 工具介紹)

一.概述   物理備份和恢復又分為冷備份和熱備份。與邏輯備份相比,它最大優點是備份和恢復的速度更快。因為物理備份的原理都是基於檔案的cp。   1.1 冷備份    冷備份就是停掉資料庫服務。這種物理備份一般很少使用,因為很多應用是不允許長時間停機的。恢復操作大概是:首先停掉mysql服務, 在作業系統級別恢

mysql 開發篇系列 45 xtrabackup 安裝與使用者許可權說明(系統使用者和mysql使用者)

一. 安裝說明   安裝XtraBackup 2.4 版本有三種方式:            (1) 儲存庫安裝Percona XtraBackup(推薦)            (2 )下載的rpm或apt包安裝Percona XtraBackup。            (3) 原始碼編譯和安裝。  Pe