詳解mysql常用功能

2020-11-24 18:00:52

欄目介紹mysql常用功能。

相關免費學習推薦:

一、基礎部分

  • 一、使用MySQL
    • 1.1、SELECT語句
    • 1.2、排序檢索資料
    • 1.3、過濾資料
    • 1.4、資料過濾
    • 1.5、用萬用字元進行過濾
    • 1.6、用正規表示式進行搜尋
      • 1.6.1 基本字元匹配
      • 1.6.2 進行OR 匹配
      • 1.6.3 匹配幾個字元之一
      • 1.6.4 匹配範圍
      • 1.6.5 匹配特殊字元
      • 1.6.6 匹配字元類
      • 1.6.7 匹配多個範例
      • 1.6.8 定位符
    • 1.7、建立計算欄位

一、使用MySQL

連線到MySQL時不會由資料庫開啟,所以首先要做的就是開啟一個資料庫:
USE user
USE後面加上想要開啟的資料庫,如果不知道資料庫的名字,使用SHOW DATABASES檢視,使用SHOW TABLES可以檢視一個資料庫中的表,當然也可以檢視表中的列SHOW user_id FROM user,它對每個欄位返回一行,行中包含欄位名、資料型別、是否允許NULL 、鍵資訊、預設值以及其他資訊(DESCRIBE user是上面語句的快捷方式)

1.1、SELECT語句

為了使用SELECT 檢索表資料,必須至少給出兩條資訊——想選擇什麼,以及從什麼地方選擇。
所需的列名在SELECT 關鍵字之後給出,FROM 關鍵字指出從其中檢索資料的表名。
要想從一個表中檢索多個列,使用相同的SELECT 語句。唯一的不同是必須在SELECT 關鍵字後給出多個列名,列名之間必須以逗號分隔。
使用DISTINCT關鍵字可以只檢索出不同值的行,重複的不會再顯示(注意: DISTINCT 關鍵字應用於所有列而不僅是前置它的列)
SELECT 語句返回所有匹配的行,它們可能是指定表中的每個行。為了返回第一行或前幾行,可使用LIMIT 子句。
LIMIT 5 ,5 指示MySQL返回從行5開始的5行。第一個數為開始位置,第二個數為要檢索的行數。

1.2、排序檢索資料

為了明確地排序用SELECT 語句檢索出的資料,可使用ORDER BY 子句。ORDER BY 子句取一個或多個列的名字,據此對輸出進行排序。
為了按多個列排序,只要指定列名,列名之間用逗號分開即可。
資料排序不限於升序排序(從A 到Z )。這只是預設的排序順序,還可以使用ORDER BY 子句以降序(從Z 到A )順序排序。為了進行降序排序,必須指定DESC 關鍵字。(DESC 關鍵字只應用到直接位於其前面的列名)

1.3、過濾資料

本章將講授如何使用SELECT 語句的WHERE 子句指定搜尋條件。在SELECT 語句中,資料根據WHERE 子句中指定的搜尋條件進行過濾。WHERE 子句在表名(FROM 子句)之後給出。在同時使用ORDER BY 和WHERE 子句時,應該讓ORDER BY 位於WHERE 之後。WHERE子句操作符如下圖所示:
在這裡插入圖片描述

1.4、資料過濾

本章講授如何組合WHERE 子句以建立功能更強的更高階的搜尋條件。我們還將學習如何使用NOT 和IN 操作符。
AND操作符計算次序高於OR操作符

1.5、用萬用字元進行過濾

本章介紹什麼是萬用字元、如何使用萬用字元以及怎樣使用LIKE 操作符進行通配搜尋,以便對資料進行復雜過濾。
為在搜尋子句中使用萬用字元,必須使用LIKE 操作符。LIKE 指示MySQL,後跟的搜尋模式利用萬用字元匹配而不是直接相等匹配進行比較。
最常使用的萬用字元是百分號(% )。在搜尋串中,% 表示任何字元出現任意次數 。( 根據MySQL的設定方式,搜尋可以是區分大小寫的。如果區分大小寫)。
另一個有用的萬用字元是下劃線(_ )。下劃線的用途與% 一樣,但下劃線只匹配單個字元而不是多個字元。
正如所見,MySQL的萬用字元很有用。但這種功能是有代價的:萬用字元搜尋的處理一般要比前面討論的其他搜尋所花時間更長。這裡給出一些使用萬用字元要記住的技巧。
1.不要過度使用萬用字元。如果其他操作符能達到相同的目的,應該使用其他操作符。
2.在確實需要使用萬用字元時,除非絕對有必要,否則不要把它們用在搜尋模式的開始處。把萬用字元置於搜尋模式的開始處,搜尋起來是最慢的。
3.仔細注意萬用字元的位置。如果放錯地方,可能不會返回想要的資料。

1.6、用正規表示式進行搜尋

1.6.1 基本字元匹配

我們從一個非常簡單的例子開始。下面的語句檢索列prod_name 包含文字1000 的所有行:
SELECT prod_name
FROM products
WHERE prod_name REGEXP ‘1000’
ORDER BY prod_name;

它告訴MySQL:REGEXP 後所跟的東西作為正規表示式(與文字正文1000 匹配的一個正規表示式)處理。

SELECT prod_name
FROM products
WHERE prod_name REGEXP ‘.000’
ORDER BY prod_name;

. 是正規表示式語言中一個特殊的字元。它表示匹配任意一個字元 ,因此,1000 和2000 都匹配且返回。
MySQL中的正規表示式匹配(自版本3.23.4後)不區分大小寫(即,大寫和小寫都匹配)。為區分大小寫,可使用BINARY 關鍵字,如WHERE prod_name REGEXP BINARY ‘JetPack .000’ 。

1.6.2 進行OR 匹配

為搜尋兩個串之一(或者為這個串,或者為另一個串),使用|,如下所示:
SELECT prod_name
FROM products
WHERE prod_name REGEXP ‘1000|2000’
ORDER BY prod_name;

1.6.3 匹配幾個字元之一

如果你只想匹配特定的字元,怎麼辦?可通過指定一組用[和]括起來的字元來完成,如下所示:
SELECT prod_name
FROM products
WHERE prod_name REGEXP ‘[123] Ton’
ORDER BY prod_name;
字元集合也可以被否定,即,它們將匹配除指定字元外的任何東西。為否定一個字元集,在集合的開始處放置一個^即可。因此,儘管[123] 匹配字元1 、2 或3 ,但[^123] 卻匹配除這些字元外的任何東西。

1.6.4 匹配範圍

SELECT prod_name
FROM products
WHERE prod_name REGEXP ‘[1-5] Ton’
ORDER BY prod_name;

1.6.5 匹配特殊字元

正規表示式語言由具有特定含義的特殊字元構成。我們已經看到. 、[ ] 、| 和- 等,還有其他一些字元。請問,如果你需要匹配這些字元,應該怎麼辦呢?例如,如果要找出包含. 字元的值,怎樣搜尋?為了匹配特殊字元,必須用\\為前導。\\- 表示查詢- ,\\. 表示查詢. 。

SELECT vend_nameFROM vendorsWHERE vend_name REGEXP '\\.'ORDER BY vend_name;

正規表示式內具有特殊意義的所有字元都必須以這種方式跳脫。這包括. 、| 、[ ] 以及迄今為止使用過的其他特殊字元。

1.6.6 匹配字元類

存在找出你自己經常使用的數位、所有字母字元或所有數位字母字元等的匹配。為更方便工作,可以使用預定義的字元集,稱為字元類 (characterclass)。
在這裡插入圖片描述

1.6.7 匹配多個範例

目前為止使用的所有正規表示式都試圖匹配單次出現。如果存在一個匹配,該行被檢索出來,如果不存在,檢索不出任何行。但有時需要對匹配的數目進行更強的控制。例如,你可能需要尋找所有的數,不管數中包含多少數位,或者你可能想尋找一個單詞並且還能夠適應一個尾隨的s (如果存在),等等。
在這裡插入圖片描述
在這裡插入圖片描述

SELECT prod_nameFROM productsWHERE prod_name REGEXP '\\([0-9] sticks?\\)'ORDER BY prod_name;正規表示式\\([0-9]sticks?\\) 需要解說一下。\\( 匹配(,[0-9] 匹配任意數位(這個例子中為1和5),sticks? 匹配stick 和sticks (s 後的? 使s 可選,因為? 匹配它前面的任何字元的0次或1次出現),\\) 匹配) 。沒有? ,匹配stick 和sticks 會非常困難。

以下是另一個例子。這次我們打算匹配連在一起的4位元數位:

SELECT prod_nameFROM productsWHERE prod_name REGEXP '[[:digit:]]{4}'ORDER BY prod_name;

1.6.8 定位符

目前為止的所有例子都是匹配一個串中任意位置的文字。為了匹配特定位置的文字,需要使用下表列出的定位符。
在這裡插入圖片描述

例如,如果你想找出以一個數(包括以小數點開始的數)開始的所有產品,怎麼辦?簡單搜尋[0-9\.] (或[[:digit:]\. ])不行,因為它將在文字內任意位置查詢匹配。解決辦法是使用^定位符,如下所示:

SELECT prod_nameFROM productsWHERE prod_name REGEXP '^[0-9\\.]'ORDER BY prod_name;

1.7、建立計算欄位

儲存在表中的資料都不是應用程式所需要的。我們需要直接從資料庫中檢索出轉換、計算或格式化過的資料;而不是檢索出資料,然後再在客戶機應用程式或報告程式中重新格式化。這就是計算欄位發揮作用的所在了。與前面各章介紹過的列不同,計算欄位並不實際存在於資料庫表中。計算欄位是執行時在SELECT 語句內建立的。
在MySQL的SELECT 語句中,可使用Concat() 函數來拼接兩個列。

SELECT Concat(vend_name, ' (', vend_country, ')')FROM vendorsORDER BY vend_name;

過刪除資料右側多餘的空格來整理資料,這可以使用MySQL的RTrim() 函數來完成,如下所示:

SELECT Concat(RTrim(vend_name), ' (', RTrim(vend_country), ')')FROM vendorsORDER BY vend_name;

別名 (alias)是一個欄位或值的替換名。別名用AS 關鍵字賦予。請看下面的SELECT 語句:

SELECT Concat(RTrim(vend_name), ' (', RTrim(vend_country), ')') ASvend_titleFROM vendorsORDER BY vend_name;


一、基礎部分

  • 一、使用MySQL
    • 1.1、SELECT語句
    • 1.2、排序檢索資料
    • 1.3、過濾資料
    • 1.4、資料過濾
    • 1.5、用萬用字元進行過濾
    • 1.6、用正規表示式進行搜尋
      • 1.6.1 基本字元匹配
      • 1.6.2 進行OR 匹配
      • 1.6.3 匹配幾個字元之一
      • 1.6.4 匹配範圍
      • 1.6.5 匹配特殊字元
      • 1.6.6 匹配字元類
      • 1.6.7 匹配多個範例
      • 1.6.8 定位符
    • 1.7、建立計算欄位

一、使用MySQL

連線到MySQL時不會由資料庫開啟,所以首先要做的就是開啟一個資料庫:
USE user
USE後面加上想要開啟的資料庫,如果不知道資料庫的名字,使用SHOW DATABASES檢視,使用SHOW TABLES可以檢視一個資料庫中的表,當然也可以檢視表中的列SHOW user_id FROM user,它對每個欄位返回一行,行中包含欄位名、資料型別、是否允許NULL 、鍵資訊、預設值以及其他資訊(DESCRIBE user是上面語句的快捷方式)

1.1、SELECT語句

為了使用SELECT 檢索表資料,必須至少給出兩條資訊——想選擇什麼,以及從什麼地方選擇。
所需的列名在SELECT 關鍵字之後給出,FROM 關鍵字指出從其中檢索資料的表名。
要想從一個表中檢索多個列,使用相同的SELECT 語句。唯一的不同是必須在SELECT 關鍵字後給出多個列名,列名之間必須以逗號分隔。
使用DISTINCT關鍵字可以只檢索出不同值的行,重複的不會再顯示(注意: DISTINCT 關鍵字應用於所有列而不僅是前置它的列)
SELECT 語句返回所有匹配的行,它們可能是指定表中的每個行。為了返回第一行或前幾行,可使用LIMIT 子句。
LIMIT 5 ,5 指示MySQL返回從行5開始的5行。第一個數為開始位置,第二個數為要檢索的行數。

1.2、排序檢索資料

為了明確地排序用SELECT 語句檢索出的資料,可使用ORDER BY 子句。ORDER BY 子句取一個或多個列的名字,據此對輸出進行排序。
為了按多個列排序,只要指定列名,列名之間用逗號分開即可。
資料排序不限於升序排序(從A 到Z )。這只是預設的排序順序,還可以使用ORDER BY 子句以降序(從Z 到A )順序排序。為了進行降序排序,必須指定DESC 關鍵字。(DESC 關鍵字只應用到直接位於其前面的列名)

1.3、過濾資料

本章將講授如何使用SELECT 語句的WHERE 子句指定搜尋條件。在SELECT 語句中,資料根據WHERE 子句中指定的搜尋條件進行過濾。WHERE 子句在表名(FROM 子句)之後給出。在同時使用ORDER BY 和WHERE 子句時,應該讓ORDER BY 位於WHERE 之後。WHERE子句操作符如下圖所示:
在這裡插入圖片描述

1.4、資料過濾

本章講授如何組合WHERE 子句以建立功能更強的更高階的搜尋條件。我們還將學習如何使用NOT 和IN 操作符。
AND操作符計算次序高於OR操作符

1.5、用萬用字元進行過濾

本章介紹什麼是萬用字元、如何使用萬用字元以及怎樣使用LIKE 操作符進行通配搜尋,以便對資料進行復雜過濾。
為在搜尋子句中使用萬用字元,必須使用LIKE 操作符。LIKE 指示MySQL,後跟的搜尋模式利用萬用字元匹配而不是直接相等匹配進行比較。
最常使用的萬用字元是百分號(% )。在搜尋串中,% 表示任何字元出現任意次數 。( 根據MySQL的設定方式,搜尋可以是區分大小寫的。如果區分大小寫)。
另一個有用的萬用字元是下劃線(_ )。下劃線的用途與% 一樣,但下劃線只匹配單個字元而不是多個字元。
正如所見,MySQL的萬用字元很有用。但這種功能是有代價的:萬用字元搜尋的處理一般要比前面討論的其他搜尋所花時間更長。這裡給出一些使用萬用字元要記住的技巧。
1.不要過度使用萬用字元。如果其他操作符能達到相同的目的,應該使用其他操作符。
2.在確實需要使用萬用字元時,除非絕對有必要,否則不要把它們用在搜尋模式的開始處。把萬用字元置於搜尋模式的開始處,搜尋起來是最慢的。
3.仔細注意萬用字元的位置。如果放錯地方,可能不會返回想要的資料。

1.6、用正規表示式進行搜尋

1.6.1 基本字元匹配

我們從一個非常簡單的例子開始。下面的語句檢索列prod_name 包含文字1000 的所有行:
SELECT prod_name
FROM products
WHERE prod_name REGEXP ‘1000’
ORDER BY prod_name;

它告訴MySQL:REGEXP 後所跟的東西作為正規表示式(與文字正文1000 匹配的一個正規表示式)處理。

SELECT prod_name
FROM products
WHERE prod_name REGEXP ‘.000’
ORDER BY prod_name;

. 是正規表示式語言中一個特殊的字元。它表示匹配任意一個字元 ,因此,1000 和2000 都匹配且返回。
MySQL中的正規表示式匹配(自版本3.23.4後)不區分大小寫(即,大寫和小寫都匹配)。為區分大小寫,可使用BINARY 關鍵字,如WHERE prod_name REGEXP BINARY ‘JetPack .000’ 。

1.6.2 進行OR 匹配

為搜尋兩個串之一(或者為這個串,或者為另一個串),使用|,如下所示:
SELECT prod_name
FROM products
WHERE prod_name REGEXP ‘1000|2000’
ORDER BY prod_name;

1.6.3 匹配幾個字元之一

如果你只想匹配特定的字元,怎麼辦?可通過指定一組用[和]括起來的字元來完成,如下所示:
SELECT prod_name
FROM products
WHERE prod_name REGEXP ‘[123] Ton’
ORDER BY prod_name;
字元集合也可以被否定,即,它們將匹配除指定字元外的任何東西。為否定一個字元集,在集合的開始處放置一個^即可。因此,儘管[123] 匹配字元1 、2 或3 ,但[^123] 卻匹配除這些字元外的任何東西。

1.6.4 匹配範圍

SELECT prod_name
FROM products
WHERE prod_name REGEXP ‘[1-5] Ton’
ORDER BY prod_name;

1.6.5 匹配特殊字元

正規表示式語言由具有特定含義的特殊字元構成。我們已經看到. 、[ ] 、| 和- 等,還有其他一些字元。請問,如果你需要匹配這些字元,應該怎麼辦呢?例如,如果要找出包含. 字元的值,怎樣搜尋?為了匹配特殊字元,必須用\\為前導。\\- 表示查詢- ,\\. 表示查詢. 。

SELECT vend_nameFROM vendorsWHERE vend_name REGEXP '\\.'ORDER BY vend_name;

正規表示式內具有特殊意義的所有字元都必須以這種方式跳脫。這包括. 、| 、[ ] 以及迄今為止使用過的其他特殊字元。

1.6.6 匹配字元類

存在找出你自己經常使用的數位、所有字母字元或所有數位字母字元等的匹配。為更方便工作,可以使用預定義的字元集,稱為字元類 (characterclass)。
在這裡插入圖片描述

1.6.7 匹配多個範例

目前為止使用的所有正規表示式都試圖匹配單次出現。如果存在一個匹配,該行被檢索出來,如果不存在,檢索不出任何行。但有時需要對匹配的數目進行更強的控制。例如,你可能需要尋找所有的數,不管數中包含多少數位,或者你可能想尋找一個單詞並且還能夠適應一個尾隨的s (如果存在),等等。
在這裡插入圖片描述
在這裡插入圖片描述

SELECT prod_nameFROM productsWHERE prod_name REGEXP '\\([0-9] sticks?\\)'ORDER BY prod_name;正規表示式\\([0-9]sticks?\\) 需要解說一下。\\( 匹配(,[0-9] 匹配任意數位(這個例子中為1和5),sticks? 匹配stick 和sticks (s 後的? 使s 可選,因為? 匹配它前面的任何字元的0次或1次出現),\\) 匹配) 。沒有? ,匹配stick 和sticks 會非常困難。

以下是另一個例子。這次我們打算匹配連在一起的4位元數位:

SELECT prod_nameFROM productsWHERE prod_name REGEXP '[[:digit:]]{4}'ORDER BY prod_name;

1.6.8 定位符

目前為止的所有例子都是匹配一個串中任意位置的文字。為了匹配特定位置的文字,需要使用下表列出的定位符。
在這裡插入圖片描述

例如,如果你想找出以一個數(包括以小數點開始的數)開始的所有產品,怎麼辦?簡單搜尋[0-9\.] (或[[:digit:]\. ])不行,因為它將在文字內任意位置查詢匹配。解決辦法是使用^定位符,如下所示:

SELECT prod_nameFROM productsWHERE prod_name REGEXP '^[0-9\\.]'ORDER BY prod_name;

1.7、建立計算欄位

儲存在表中的資料都不是應用程式所需要的。我們需要直接從資料庫中檢索出轉換、計算或格式化過的資料;而不是檢索出資料,然後再在客戶機應用程式或報告程式中重新格式化。這就是計算欄位發揮作用的所在了。與前面各章介紹過的列不同,計算欄位並不實際存在於資料庫表中。計算欄位是執行時在SELECT 語句內建立的。
在MySQL的SELECT 語句中,可使用Concat() 函數來拼接兩個列。

SELECT Concat(vend_name, ' (', vend_country, ')')FROM vendorsORDER BY vend_name;

過刪除資料右側多餘的空格來整理資料,這可以使用MySQL的RTrim() 函數來完成,如下所示:

SELECT Concat(RTrim(vend_name), ' (', RTrim(vend_country), ')')FROM vendorsORDER BY vend_name;

別名 (alias)是一個欄位或值的替換名。別名用AS 關鍵字賦予。請看下面的SELECT 語句:

SELECT Concat(RTrim(vend_name), ' (', RTrim(vend_country), ')') ASvend_titleFROM vendorsORDER BY vend_name;

以上就是詳解mysql常用功能的詳細內容,更多請關注TW511.COM其它相關文章!