MySQL之數據表查詢語句(SELECT)


定義:

MySQL表單查詢是指從一張表的數據中查詢所需的數據,主要有查詢所有字段、查詢指定字段、查詢指定記錄、查詢空值、多條件的查詢、對查詢結果進行排序等。

基本語法:

MySQL 從數據表中查詢數據的基本語句為 SELECT 語句,基本格式如下:

SELECT
{* | <字段列名>}
[
FROM <表 1>, <表 2>…
[WHERE <表達式>
[GROUP BY <group by definition>
[HAVING <expression> [{<operator> <expression>}…]]
[ORDER BY <order by definition>]
[LIMIT[<offset>,] <row count>]
]

其中,各條子句的含義如下:

  • {*|<字段列名>}包含星號通配符的字段列表,表示查詢的字段,其中字段列至少包含一個字段名稱,如果要查詢多個字段,多個字段之間要用逗號隔開,最后一個字段后不要加逗號。
  • FROM <表 1>,<表 2>…,表 1 和表 2 表示查詢數據的來源,可以是單個或多個。
  • WHERE 子句是可選項,如果選擇該項,將限定查詢行必須滿足的查詢條件。
  • GROUP BY< 字段 >,該子句告訴 MySQL 如何顯示查詢出來的數據,並按照指定的字段分組。
  • [ORDER BY< 字段 >],該子句告訴 MySQL 按什么樣的順序顯示查詢出來的數據,可以進行的排序有升序(ASC)和降序(DESC)。
  • [LIMIT[<offset>,]<row count>],該子句告訴 MySQL 每次顯示查詢出來的數據條數。

1、使用“*”查詢表中的全部內容

在 SELECT 語句中使用星號“*”通配符查詢所有字段。
SELECT 查詢記錄最簡單的形式是從一個表中檢索所有記錄,實現的方法是使用星號“*”通配符指定查找所有列的名稱。

語法格式如下:

SELECT * FROM 表名;

【實例 1】從 tb_students_info 表中檢索所有字段的數據,輸入的 SQL 語句和執行結果如下所示。

創建tb_students_info表

 

 

 查看

 

 

 向tb_students_info表中添加數據

單行添加(INSERT...VALUES)

 

INSERT...VALUES多行同時添加

 

 

 

 

 用SELECT * FROM進行查詢,查詢所有,顯示如下:

 

 

 由執行結果可知,使用星號“*”通配符時,將返回所有列,數據列按照創建表時的順序顯示。

注意:一般情況下,除非需要使用表中所有的字段數據,否則最好不要使用通配符“*”。使用通配符雖然可以節省輸入查詢語句的時間,但是獲取不需要的列數據通常會降低查詢和所使用的應用程序的效率。通配符的優勢是,當不知道所需列的名稱時,可以通過通配符獲取它們。

根據前面 SELECT 語句的格式,SELECT 關鍵字后面的字段名為將要查找的數據,因此可以將表中所有字段的名稱跟在 SELECT 關鍵字后面,如果忘記了字段名稱,可以使用 DESC 命令查看表的結構。

DESC查詢表的結構如下:

 

 

 【實例 2】查詢 tb_students_info 表中的所有數據,輸入的 SQL 語句和執行結果如下所示。

注意:使用“*”可以返回所有列的數值,但若不需要返回所有列的值,為了提高效率,一般采用 SELECT 字段名列表的形式。

2、查詢表中指定字段

查詢表中的某一個字段的語法格式為:

SELECT < 列名 > FROM < 表名 >;

【實例 3】查詢 tb_students_info 表中 name 列所有學生的姓名,輸入的 SQL 語句和執行結果如下所示。

 

 使用 SELECT 聲明可以獲取多個字段下的數據,只需要在關鍵字 SELECT 后面指定要查找的字段名稱,不同字段名稱之間用逗號“,”分隔開,最后一個字段后面不需要加逗號,語法格式如下:

SELECT <字段名1>,<字段名2>,…,<字段名n> FROM <表名>;

【實例 4】從 tb_students_info 表中獲取 id、name 和 height 三列,輸入的 SQL 語句和執行結果如下所示。

 

 3、MySQL WHERE條件查詢

在使用 MySQL SELECT語句時,可以使用 WHERE 子句來指定查詢條件,從 FROM 子句的中間結果中選取適當的數據行,達到數據過濾的效果。

語法格式如下:

SELECT <字段1>[,<字段2>..<字段n>] FROM <表名>

WHERE <查詢條件> {<判定運算1>,<判定運算2>,…}

其中,判定運算其結果取值為 TRUE、FALSE 和 UNKNOWN。

判定運算的語法分類如下:

  • <表達式1>{=|<|<=|>|>=|<=>|<>|!=}<表達式2>
  • <表達式1>[NOT]LIKE<表達式2>
  • <表達式1>[NOT][REGEXP|RLIKE]<表達式2>
  • <表達式1>[NOT]BETWEEN<表達式2>AND<表達式3>
  • <表達式1>IS[NOT]NULL

3.1 單一條件的查詢語句

【實例 5】在表 tb_students_info 中查詢身高為 170cm 的學生的姓名,輸入的 SQL 語句和行結果如下所示。

 

 【實例 6】查詢年齡小於 22 的學生的姓名,輸入的 SQL 語句和執行結果如下所示。

 

 3.2 多條件查詢

使用 SELECT 查詢時,可以增加查詢的限制條件,這樣可以使查詢的結果更加精確。MySQL 在 WHERE 子句中使用 AND 操作符限定只有滿足所有查詢條件的記錄才會被返回。

可以使用 AND 連接兩個甚至多個查詢條件,多個條件表達式之間用 AND 分開。

【實例 7】在 tb_students_info 表中查詢 age 大於 21,並且 height 大於等於 175 的學生的信息,輸入的 SQL 語句和執行結果如下所示。

 

 

注意:上例的 WHERE 子句中只包含一個 AND 語句,把兩個過濾條件組合在一起,實際上可以添加多個 AND 過濾條件,增加條件的同時增加一個 AND 關鍵字。

4、使用 LIKE 的模糊查詢

字符串匹配的語法格式如下:

SELECT <字段名>[,...<字段n>] FROM <表名>

WHERE <表達式1> [NOT] LIKE <表達式2>;

字符串匹配是一種模式匹配,使用運算符 LIKE 設置過濾條件,過濾條件使用通配符進行匹配運算,而不是判斷是否相等進行比較。

相互間進行匹配運算的對象可以是 CHAR、VARCHAR、TEXT、DATETIME 等數據類型。運算返回的結果是 TRUE 或 FALSE。

利用通配符可以在不完全確定比較值的情形下創建一個比較特定數據的搜索模式,並置於關鍵字 LIKE 之后。可以在搜索模式的任意位置使用通配符,並且可以使用多個通配符。MySQL 支持的通配符有以下兩種:

1) 百分號(%)

百分號是 MySQL 中常用的一種通配符,在過濾條件中,百分號可以表示任何字符串,並且該字符串可以出現任意次。

使用百分號通配符要注意以下幾點:

  • MySQL 默認是不區分大小寫的,若要區分大小寫,則需要更換字符集的校對規則。
  • 百分號不匹配空值。
  • 百分號可以代表搜索模式中給定位置的 0 個、1 個或多個字符。
  • 尾空格可能會干擾通配符的匹配,一般可以在搜索模式的最后附加一個百分號。

2) 下划線(_)

下划線通配符和百分號通配符的用途一樣,下畫線只匹配單個字符,而不是多個字符,也不是 0 個字符。

注意:不要過度使用通配符,對通配符檢索的處理一般會比其他檢索方式花費更長的時間。

【實例 8】在 tb_students_info 表中,查找所有以“T”字母開頭的學生姓名,輸入的 SQL 的語句和執行結果如下所示。

注意:在搜索匹配時,通配符“%”可以放在不同位置。

【實例 9】在 tb_students_info 表中,查找所有包含“e”字母的學生姓名,輸入的 SQL 的語句和執行結果如下所示。

 

 【實例 10】在 tb_students_info 表中,查找所有以字母“y”結尾,且“y”前面只有 4 個字母的學生的姓名,輸入的 SQL 語句和執行結果如下所示。

 

 5、日期字段作為條件的查詢

以日期字段作為條件,可以使用比較運算符設置查詢條件,也可以使用 BETWEEN AND 運算符查詢某個范圍內的值。

BETWEEN AND 用來查詢某個范圍內的值,該操作符需要兩個參數,即范圍的開始值和結束值,若字段值滿足指定的范圍查詢條件,則這些記錄被返回。

【實例 11】在表 tb_students_info 中查詢注冊日期在 2016-01-01 之前的學生的信息,輸入的 SQL 語句和執行結果如下所示。

 

 【實例 12】在表 tb_students_info 中查詢注冊日期在 2015-10-01 和 2016-05-01 之間的學生的信息,輸入的 SQL 語句和執行結果如下所示。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM