1. 程式人生 > >MySQL SELECT語句詳解(查詢)

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路徑

在DOS視窗中鍵入下面語句
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查詢語句
語句示例
解釋說明
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_nameORDER 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。