相關免費學習推薦:
連線到MySQL時不會由資料庫開啟,所以首先要做的就是開啟一個資料庫:
USE user
USE後面加上想要開啟的資料庫,如果不知道資料庫的名字,使用SHOW DATABASES檢視,使用SHOW TABLES可以檢視一個資料庫中的表,當然也可以檢視表中的列SHOW user_id FROM user,它對每個欄位返回一行,行中包含欄位名、資料型別、是否允許NULL 、鍵資訊、預設值以及其他資訊(DESCRIBE user是上面語句的快捷方式)
為了使用SELECT 檢索表資料,必須至少給出兩條資訊——想選擇什麼,以及從什麼地方選擇。
所需的列名在SELECT 關鍵字之後給出,FROM 關鍵字指出從其中檢索資料的表名。
要想從一個表中檢索多個列,使用相同的SELECT 語句。唯一的不同是必須在SELECT 關鍵字後給出多個列名,列名之間必須以逗號分隔。
使用DISTINCT關鍵字可以只檢索出不同值的行,重複的不會再顯示(注意: DISTINCT 關鍵字應用於所有列而不僅是前置它的列)
SELECT 語句返回所有匹配的行,它們可能是指定表中的每個行。為了返回第一行或前幾行,可使用LIMIT 子句。
LIMIT 5 ,5 指示MySQL返回從行5開始的5行。第一個數為開始位置,第二個數為要檢索的行數。
為了明確地排序用SELECT 語句檢索出的資料,可使用ORDER BY 子句。ORDER BY 子句取一個或多個列的名字,據此對輸出進行排序。
為了按多個列排序,只要指定列名,列名之間用逗號分開即可。
資料排序不限於升序排序(從A 到Z )。這只是預設的排序順序,還可以使用ORDER BY 子句以降序(從Z 到A )順序排序。為了進行降序排序,必須指定DESC 關鍵字。(DESC 關鍵字只應用到直接位於其前面的列名)
本章將講授如何使用SELECT 語句的WHERE 子句指定搜尋條件。在SELECT 語句中,資料根據WHERE 子句中指定的搜尋條件進行過濾。WHERE 子句在表名(FROM 子句)之後給出。在同時使用ORDER BY 和WHERE 子句時,應該讓ORDER BY 位於WHERE 之後。WHERE子句操作符如下圖所示:
本章講授如何組合WHERE 子句以建立功能更強的更高階的搜尋條件。我們還將學習如何使用NOT 和IN 操作符。
AND操作符計算次序高於OR操作符
本章介紹什麼是萬用字元、如何使用萬用字元以及怎樣使用LIKE 操作符進行通配搜尋,以便對資料進行復雜過濾。
為在搜尋子句中使用萬用字元,必須使用LIKE 操作符。LIKE 指示MySQL,後跟的搜尋模式利用萬用字元匹配而不是直接相等匹配進行比較。
最常使用的萬用字元是百分號(% )。在搜尋串中,% 表示任何字元出現任意次數 。( 根據MySQL的設定方式,搜尋可以是區分大小寫的。如果區分大小寫)。
另一個有用的萬用字元是下劃線(_ )。下劃線的用途與% 一樣,但下劃線只匹配單個字元而不是多個字元。
正如所見,MySQL的萬用字元很有用。但這種功能是有代價的:萬用字元搜尋的處理一般要比前面討論的其他搜尋所花時間更長。這裡給出一些使用萬用字元要記住的技巧。
1.不要過度使用萬用字元。如果其他操作符能達到相同的目的,應該使用其他操作符。
2.在確實需要使用萬用字元時,除非絕對有必要,否則不要把它們用在搜尋模式的開始處。把萬用字元置於搜尋模式的開始處,搜尋起來是最慢的。
3.仔細注意萬用字元的位置。如果放錯地方,可能不會返回想要的資料。
我們從一個非常簡單的例子開始。下面的語句檢索列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’ 。
為搜尋兩個串之一(或者為這個串,或者為另一個串),使用|,如下所示:
SELECT prod_name
FROM products
WHERE prod_name REGEXP ‘1000|2000’
ORDER BY prod_name;
如果你只想匹配特定的字元,怎麼辦?可通過指定一組用[和]括起來的字元來完成,如下所示:
SELECT prod_name
FROM products
WHERE prod_name REGEXP ‘[123] Ton’
ORDER BY prod_name;
字元集合也可以被否定,即,它們將匹配除指定字元外的任何東西。為否定一個字元集,在集合的開始處放置一個^即可。因此,儘管[123] 匹配字元1 、2 或3 ,但[^123] 卻匹配除這些字元外的任何東西。
SELECT prod_name
FROM products
WHERE prod_name REGEXP ‘[1-5] Ton’
ORDER BY prod_name;
正規表示式語言由具有特定含義的特殊字元構成。我們已經看到. 、[ ] 、| 和- 等,還有其他一些字元。請問,如果你需要匹配這些字元,應該怎麼辦呢?例如,如果要找出包含. 字元的值,怎樣搜尋?為了匹配特殊字元,必須用\\為前導。\\- 表示查詢- ,\\. 表示查詢. 。
SELECT vend_nameFROM vendorsWHERE vend_name REGEXP '\\.'ORDER BY vend_name;
正規表示式內具有特殊意義的所有字元都必須以這種方式跳脫。這包括. 、| 、[ ] 以及迄今為止使用過的其他特殊字元。
存在找出你自己經常使用的數位、所有字母字元或所有數位字母字元等的匹配。為更方便工作,可以使用預定義的字元集,稱為字元類 (characterclass)。
目前為止使用的所有正規表示式都試圖匹配單次出現。如果存在一個匹配,該行被檢索出來,如果不存在,檢索不出任何行。但有時需要對匹配的數目進行更強的控制。例如,你可能需要尋找所有的數,不管數中包含多少數位,或者你可能想尋找一個單詞並且還能夠適應一個尾隨的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;
目前為止的所有例子都是匹配一個串中任意位置的文字。為了匹配特定位置的文字,需要使用下表列出的定位符。
例如,如果你想找出以一個數(包括以小數點開始的數)開始的所有產品,怎麼辦?簡單搜尋[0-9\.] (或[[:digit:]\. ])不行,因為它將在文字內任意位置查詢匹配。解決辦法是使用^定位符,如下所示:
SELECT prod_nameFROM productsWHERE prod_name REGEXP '^[0-9\\.]'ORDER BY prod_name;
儲存在表中的資料都不是應用程式所需要的。我們需要直接從資料庫中檢索出轉換、計算或格式化過的資料;而不是檢索出資料,然後再在客戶機應用程式或報告程式中重新格式化。這就是計算欄位發揮作用的所在了。與前面各章介紹過的列不同,計算欄位並不實際存在於資料庫表中。計算欄位是執行時在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時不會由資料庫開啟,所以首先要做的就是開啟一個資料庫:
USE user
USE後面加上想要開啟的資料庫,如果不知道資料庫的名字,使用SHOW DATABASES檢視,使用SHOW TABLES可以檢視一個資料庫中的表,當然也可以檢視表中的列SHOW user_id FROM user,它對每個欄位返回一行,行中包含欄位名、資料型別、是否允許NULL 、鍵資訊、預設值以及其他資訊(DESCRIBE user是上面語句的快捷方式)
為了使用SELECT 檢索表資料,必須至少給出兩條資訊——想選擇什麼,以及從什麼地方選擇。
所需的列名在SELECT 關鍵字之後給出,FROM 關鍵字指出從其中檢索資料的表名。
要想從一個表中檢索多個列,使用相同的SELECT 語句。唯一的不同是必須在SELECT 關鍵字後給出多個列名,列名之間必須以逗號分隔。
使用DISTINCT關鍵字可以只檢索出不同值的行,重複的不會再顯示(注意: DISTINCT 關鍵字應用於所有列而不僅是前置它的列)
SELECT 語句返回所有匹配的行,它們可能是指定表中的每個行。為了返回第一行或前幾行,可使用LIMIT 子句。
LIMIT 5 ,5 指示MySQL返回從行5開始的5行。第一個數為開始位置,第二個數為要檢索的行數。
為了明確地排序用SELECT 語句檢索出的資料,可使用ORDER BY 子句。ORDER BY 子句取一個或多個列的名字,據此對輸出進行排序。
為了按多個列排序,只要指定列名,列名之間用逗號分開即可。
資料排序不限於升序排序(從A 到Z )。這只是預設的排序順序,還可以使用ORDER BY 子句以降序(從Z 到A )順序排序。為了進行降序排序,必須指定DESC 關鍵字。(DESC 關鍵字只應用到直接位於其前面的列名)
本章將講授如何使用SELECT 語句的WHERE 子句指定搜尋條件。在SELECT 語句中,資料根據WHERE 子句中指定的搜尋條件進行過濾。WHERE 子句在表名(FROM 子句)之後給出。在同時使用ORDER BY 和WHERE 子句時,應該讓ORDER BY 位於WHERE 之後。WHERE子句操作符如下圖所示:
本章講授如何組合WHERE 子句以建立功能更強的更高階的搜尋條件。我們還將學習如何使用NOT 和IN 操作符。
AND操作符計算次序高於OR操作符
本章介紹什麼是萬用字元、如何使用萬用字元以及怎樣使用LIKE 操作符進行通配搜尋,以便對資料進行復雜過濾。
為在搜尋子句中使用萬用字元,必須使用LIKE 操作符。LIKE 指示MySQL,後跟的搜尋模式利用萬用字元匹配而不是直接相等匹配進行比較。
最常使用的萬用字元是百分號(% )。在搜尋串中,% 表示任何字元出現任意次數 。( 根據MySQL的設定方式,搜尋可以是區分大小寫的。如果區分大小寫)。
另一個有用的萬用字元是下劃線(_ )。下劃線的用途與% 一樣,但下劃線只匹配單個字元而不是多個字元。
正如所見,MySQL的萬用字元很有用。但這種功能是有代價的:萬用字元搜尋的處理一般要比前面討論的其他搜尋所花時間更長。這裡給出一些使用萬用字元要記住的技巧。
1.不要過度使用萬用字元。如果其他操作符能達到相同的目的,應該使用其他操作符。
2.在確實需要使用萬用字元時,除非絕對有必要,否則不要把它們用在搜尋模式的開始處。把萬用字元置於搜尋模式的開始處,搜尋起來是最慢的。
3.仔細注意萬用字元的位置。如果放錯地方,可能不會返回想要的資料。
我們從一個非常簡單的例子開始。下面的語句檢索列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’ 。
為搜尋兩個串之一(或者為這個串,或者為另一個串),使用|,如下所示:
SELECT prod_name
FROM products
WHERE prod_name REGEXP ‘1000|2000’
ORDER BY prod_name;
如果你只想匹配特定的字元,怎麼辦?可通過指定一組用[和]括起來的字元來完成,如下所示:
SELECT prod_name
FROM products
WHERE prod_name REGEXP ‘[123] Ton’
ORDER BY prod_name;
字元集合也可以被否定,即,它們將匹配除指定字元外的任何東西。為否定一個字元集,在集合的開始處放置一個^即可。因此,儘管[123] 匹配字元1 、2 或3 ,但[^123] 卻匹配除這些字元外的任何東西。
SELECT prod_name
FROM products
WHERE prod_name REGEXP ‘[1-5] Ton’
ORDER BY prod_name;
正規表示式語言由具有特定含義的特殊字元構成。我們已經看到. 、[ ] 、| 和- 等,還有其他一些字元。請問,如果你需要匹配這些字元,應該怎麼辦呢?例如,如果要找出包含. 字元的值,怎樣搜尋?為了匹配特殊字元,必須用\\為前導。\\- 表示查詢- ,\\. 表示查詢. 。
SELECT vend_nameFROM vendorsWHERE vend_name REGEXP '\\.'ORDER BY vend_name;
正規表示式內具有特殊意義的所有字元都必須以這種方式跳脫。這包括. 、| 、[ ] 以及迄今為止使用過的其他特殊字元。
存在找出你自己經常使用的數位、所有字母字元或所有數位字母字元等的匹配。為更方便工作,可以使用預定義的字元集,稱為字元類 (characterclass)。
目前為止使用的所有正規表示式都試圖匹配單次出現。如果存在一個匹配,該行被檢索出來,如果不存在,檢索不出任何行。但有時需要對匹配的數目進行更強的控制。例如,你可能需要尋找所有的數,不管數中包含多少數位,或者你可能想尋找一個單詞並且還能夠適應一個尾隨的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;
目前為止的所有例子都是匹配一個串中任意位置的文字。為了匹配特定位置的文字,需要使用下表列出的定位符。
例如,如果你想找出以一個數(包括以小數點開始的數)開始的所有產品,怎麼辦?簡單搜尋[0-9\.] (或[[:digit:]\. ])不行,因為它將在文字內任意位置查詢匹配。解決辦法是使用^定位符,如下所示:
SELECT prod_nameFROM productsWHERE prod_name REGEXP '^[0-9\\.]'ORDER BY prod_name;
儲存在表中的資料都不是應用程式所需要的。我們需要直接從資料庫中檢索出轉換、計算或格式化過的資料;而不是檢索出資料,然後再在客戶機應用程式或報告程式中重新格式化。這就是計算欄位發揮作用的所在了。與前面各章介紹過的列不同,計算欄位並不實際存在於資料庫表中。計算欄位是執行時在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其它相關文章!