MySQL SELECT語句詳解(查詢)
MySQL支援SQL標準,同時在SQL標準上面做了拓展,有不一樣的語法和資料庫特性。本文記錄MySQL資料庫的SQL語句,並不是針對SQL,雖有有很大的相似之處。
在學習和使用過程中的MySQL版本是:5.7.17。
本文針對MySQL4.1及其以上版本的使用。
一、MySQL引入的主題的主要變化過程:
4——InnoDB引擎,增加事務處理,並,改進全文字搜尋等。
4.1——函式庫、子查詢、整合幫助等的重要增加。
5——儲存過程、觸發器、遊標、檢視等的增加。
二、DOS視窗登入MySQL資料庫
首先使用cmd開啟DOS命令列介面,然後分成兩種情況:
1)沒有在環境變數中配置MySql Server的path路徑
配置方法如下:在系統環境變數的path變數名中新增下面路徑的bin目錄:C:\Program Files\MySQL\MySQL Server 5.7\bin
,這個路徑是具體情況而定,不管MySQL安裝在那個盤中,一定是MySQL Server 的bin目錄。配置了環境變數之後的使用方法見下面。
假如沒有配置環境變數,還可以這樣使用:
在DOS命令列中使用cd進入到上面路徑的bin目錄下,然後按照“配置了環境變數”的使用方法進行操作。
2)已經在環境變數中配置過MySQL Server的path路徑
mysql -h localhost -u root -p | 登入MySQl資料庫。-h表示主機名,這裡在本地;-u表示登入使用者;這裡是root用使用者;-p是使用者密碼 |
---|---|
show databases;回車 | 顯示當前使用者下已有的資料庫。MySQL資料庫中的命令必須以 ; 結尾 |
use + 資料庫名; | 使用該資料庫 |
show tables; | 顯示資料庫中的表 |
show columns from + 表名; | 顯示錶列,包括列名,各種完整性,資料型別等詳細資訊 |
exit;回車 | 退出資料庫登入 |
create user 'test'@'localhost' identified by '123456'; | root使用者下建立test使用者。@表示訪問的主機名,identified by表示密碼。localhost表示允許本機IP(127.0.0.1)訪問(使用區域網的主機IP使用下面一條語句) |
create user 'test_1'@'%' identified by '123456' | root使用者下建立test_1使用者。允許使用外網Ip訪問,本機當然可以 |
flush privileges; | root使用者下重新整理授權 |
三、MySQL語句詳解
在MySQL資料庫連線工具Navicat和DOS命令列中,都可以使用下面的MySQL語句來進行MySQL的操作。假如有表products。
語句示例 | 解釋說明 |
---|---|
SELECT prod_name FROM products; | SELECT表示查詢的列。可以有多列,列名之間使用“,”分割開來;FROM表示使用的表。 |
SELECT * FROM products; | 檢索所有的列。能夠檢索出表中未知的列 |
SELECT DISTINCT vend_id FROM products; | DISTINCT消除檢索中相同的行。如果DISTINCT後面跟了不止一個列,DISTINCT作用於每一個列,即DISTINCT的作用是消除不同的行。 |
SELECT prod_name FROM products LIMIT x, y; | LIMIT用於限制檢索出來的行數。意思是從第x行開始的y行。 |
SELECT products.prod_name FROM crashcourse.products; | 使用完全限定。product表示一張表,crashcourse表示一個數據庫,資料庫中有products表。 |
SELECT prod_name FROM products ORDER BY prod_name | ORDER BY子句表示使用列進行排序。預設的排序方向是英語字母升序排列,排序使用的列還可以是非檢索的列。 |
SELECT prod_id, prod_price, prod_name FROM products ORDER BY prod_price, prod_name; | ORDER BY子句按多個行進行排序。多個列排序時,排序完全按照語句中列的順序進行,即後面列的排序是在前面排序結果的基礎上面進行。ORDER BY子句位於FROM之後,LIMIT之前,位置不當會產生錯誤資訊。 |
SELECT prod_id, prod_price,prod_name FROM products ORDER BY prod_price DESC,prod_name; | 指定ORDER BY子句的排序方向。ASC指定為按照字母升序排列,預設的;DESC指定為降序排列。當有多個列排序時,一個DESC/ASC只作用於一個列。 |
SELECT products, prod_price FROM products WHERE prod_price = 2.50; | WHERE子句過濾資料。WHERE子句位於FROM之後,ORDER BY子句之前。 |
SELECT prod_name, prod_price FROM products WHERE prod_name = 'fuses'; | WHERE子句進行資料過濾。加上''表示字串。 |
SELECT prod_name,prod_price FROM products WHERE prod_price BETWEEN 5 AND 10; | BETWEEN進行範圍值檢查。第一個為開始值,第二個為結束值,該範圍中包括這兩個值。 |
SELECT prod_name FROM products WHERE prod_price IS NULL; | WHERE進行空值過濾。空值與欄位包含0、空字串或僅僅包含空格不同。 |
SELECT prod_id,prod_price,prod_name FROM products WHERE vend_id = 1003 AND prod_price <= 10; | AND操作符:用於WHERE子句中的關鍵詞,用來指示檢索滿足所有給定條件的行。過濾每增加一條就使用一個AND。 |
SELECT prod_name, prod_price FROM products WHERE vend_id = 1002 OR vend_id = 1003; | OR操作符:WHERE子句中使用的關鍵字,表示檢索匹配任意給定條件的行。 |
SELECT prod_name,prod_price FROM products WHERE vend_id = 1024 OR vend_id = 1003 AND prod_price >= 10; | AND操作符和OR操作符的計算次序:AND優先順序高於OR。建議:無論使用預設的優先順序次序還是使用括號改變計算優先次序,都建議使用括號,這樣子很明確。 |
SELECT prod_name,prod_price FROM products WHERE vend_id IN (1002, 1003) ORDER BY prod_name; | IN操作符:用在WHERE子句中指定要匹配的清單的關鍵字,功能和OR相當。使用IN關鍵字有如下優點: 1)IN執行速度比OR快。 2)使用IN更加清晰明瞭,使用較少的OR 3)IN可以包含其他SELECT語句,使得能夠更加動態建立WHERE子句。 |
SELECT prod_name, prod_price FROM products WHERE vend_id NOT IN (1002, 1003) ORDER BY prod_name; | NOT操作符:WHERE子句中用來否定後跟條件的關鍵字。MySQL支援使用NOT對IN,BETWEEN和EXISTS子句進行取反,這與多數其他DBMS允許使用NOT對各種條件取反有很大的差別。 |
SELECT prod_id,prod_name FROM products WHERE prod_name LIKE 'jet%'; | LIKE謂詞:用於WHERE子句中過濾資料,萬用字元搜尋模式放置到LIKE謂詞之後。 萬用字元搜尋模式:由萬用字元或者萬用字元和字面值共同組成的搜尋條件。萬用字元匹配從字串首端開始進行模式匹配,不是從串的中間某個位置開始匹配。 NULL:萬用字元不能匹配NULL 注意首尾空格:首尾空格在肉眼識別上面對串沒有區別,但是在計算機進行模式匹配時會有影響。 |
SELECT prod_id,prod_name FROM products WHERE prod_name LIKE '%anvil%'; | %(百分號)萬用字元:任意字元出現任意次數,可以是0次。 萬用字元使用技巧: 1)儘量不使用萬用字元,因為萬用字元執行起來很慢。 2)儘量1不要再搜尋模式開始處使用萬用字元,開始處的萬用字元搜尋起來是最慢的。 |
SELECT prod_id,prod_name FROM products WHERE prod_name LIKE '_ ton anvil'; | _(下劃線)萬用字元:匹配單個字元。 萬用字元使用技巧: 3)萬用字元不要放錯位置。 |
WHERE子句操作符
操作符 | 說明 |
---|---|
= | 等於 |
<> 或 != | 不等於 |
< | 小於 |
<= | 小於等於 |
> | 大於 |
>= | 大於等於 |
BETWEEN | 在指定的兩個值之間 |
注意:
1)關係資料庫設計理論認為,如果沒有明確規定檢索結果的排序方式,檢索結果沒有順序之分;MySQL中也沒有順序之分。
2)在SQL中,有的區分大小寫,有的不區分大小寫,所以應該按照規範書寫SQL語句。
3)在處理SQL語句時,會將所有的空格忽略掉。
4)mySQL第一行為行0。