玩轉Mysql系列 – 第6篇:select查詢基礎篇

  • 2019 年 10 月 4 日
  • 筆記

這是Mysql系列第6篇。

環境:mysql5.7.25,cmd命令中進行演示。

DQL(Data QueryLanguage):數據查詢語言,通俗點講就是從數據庫獲取數據的,按照DQL的語法給數據庫發送一條指令,數據庫將按需求返回數據。

DQL分多篇來說,本文屬於第1篇。

基本語法

select 查詢的列 from 表名;  

注意:

select語句中不區分大小寫,SELECT和select、FROM和from效果一樣。

查詢的結果放在一個表格中,表格的第1行稱為列頭,第2行開始是數據,類屬於一個二維數組。

查詢常量

select 常量值1,常量值2,常量值3;  

如:

mysql> select 1,'b';  +---+---+  | 1 | b |  +---+---+  | 1 | b |  +---+---+  1 row in set (0.00 sec)  

查詢表達式

select 表達式;  

如:

mysql> select 1+2,3*10,10/3;  +-----+------+--------+  | 1+2 | 3*10 | 10/3   |  +-----+------+--------+  |   3 |   30 | 3.3333 |  +-----+------+--------+  1 row in set (0.00 sec)  

查詢函數

select 函數;  

如:

mysql> select mod(10,4),isnull(null),ifnull(null,'第一個參數為空返回這個值'),ifnull(1,'第一個參數為空返回這個值,否知返回第一個參數');  +-----------+--------------+-----------------------------------------------------+--------------------------------------------------------------------------------+  | mod(10,4) | isnull(null) | ifnull(null,'第一個參數為空返回這個值')             | ifnull(1,'第一個參數為空返回這個值,否知返回第一個參數')                       |  +-----------+--------------+-----------------------------------------------------+--------------------------------------------------------------------------------+  |         2 |            1 | 第一個參數為空返回這個值                            | 1                                                                              |  +-----------+--------------+-----------------------------------------------------+--------------------------------------------------------------------------------+  1 row in set (0.00 sec)  

說明一下:

mod函數,對兩個參數取模運算。

isnull函數,判斷參數是否為空,若為空返回1,否則返回0。

ifnull函數,2個參數,判斷第一個參數是否為空,如果為空返回第一個參數的值,否則返回第一個參數的值。

查詢指定的字段

select 字段1,字段2,字段3 from 表名;  

如:

mysql> drop table if exists test1;  Query OK, 0 rows affected (0.01 sec)    mysql> create table test1(a int not null comment '字段a',b varchar(10) not null default '' comment '字段b');  Query OK, 0 rows affected (0.01 sec)    mysql> insert into test1 values(1,'a'),(2,'b'),(3,'c');  Query OK, 3 rows affected (0.01 sec)  Records: 3  Duplicates: 0  Warnings: 0    mysql> select a,b from test1;  +---+---+  | a | b |  +---+---+  | 1 | a |  | 2 | b |  | 3 | c |  +---+---+  3 rows in set (0.00 sec)  

說明:

test1表有兩個字段a、b,select a,b from test1;用於查詢test1中兩個字段的數據。

查詢所有列

select * from 表名  

說明:

*表示返回表中所有字段。

如:

mysql> select * from test1;  +---+---+  | a | b |  +---+---+  | 1 | a |  | 2 | b |  | 3 | c |  +---+---+  3 rows in set (0.00 sec)  

列別名

在創建數據表時,一般都會使用英文單詞或英文單詞縮寫來設置字段名,在查詢時列名都會以英文的形式顯示,這樣會給用戶查看數據帶來不便,這種情況可以使用別名來代替英文列名,增強閱讀性。

語法:

select 列 [as] 別名 from 表;  

使用雙引號創建別名:

mysql> select a "列1",b "列2" from test1;  +------+------+  | 列1  | 列2  |  +------+------+  |    1 | a    |  |    2 | b    |  |    3 | c    |  +------+------+  3 rows in set (0.00 sec)  

使用單引號創建別名:

mysql> select a '列1',b '列2' from test1;;  +------+------+  | 列1  | 列2  |  +------+------+  |    1 | a    |  |    2 | b    |  |    3 | c    |  +------+------+  3 rows in set (0.00 sec)  

不用引號創建別名:

mysql> select a 列1,b 列2 from test1;  +------+------+  | 列1  | 列2  |  +------+------+  |    1 | a    |  |    2 | b    |  |    3 | c    |  +------+------+  3 rows in set (0.00 sec)  

使用as創建別名:

mysql> select a as 列1,b as 列 2 from test1;  ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '2 from test1' at line 1  mysql> select a as 列1,b as '列 2' from test1;  +------+-------+  | 列1  | 列 2  |  +------+-------+  |    1 | a     |  |    2 | b     |  |    3 | c     |  +------+-------+  3 rows in set (0.00 sec)  

別名中有特殊符號的,比如空格,此時別名必須用引號引起來。

懵逼示例,看效果:

mysql> select 'a' 'b';  +----+  | a  |  +----+  | ab |  +----+  1 row in set (0.00 sec)    mysql> select 'a' b;  +---+  | b |  +---+  | a |  +---+  1 row in set (0.00 sec)    mysql> select 'a' "b";  +----+  | a  |  +----+  | ab |  +----+  1 row in set (0.00 sec)    mysql> select 'a' as "b";  +---+  | b |  +---+  | a |  +---+  1 row in set (0.00 sec)  

認真看一下第1個和第3個返回的結果(列頭和數據),是不是懵逼狀態,建議這種的最好使用as,as後面跟上別名。

表別名

select 別名.字段,別名.* from 表名 [as] 別名;  

如:

mysql> select t.a,t.b from test1 as t;  +---+---+  | a | b |  +---+---+  | 1 | a |  | 2 | b |  | 3 | c |  +---+---+  3 rows in set (0.00 sec)    mysql> select t.a as '列 1',t.b as 列2 from test1 as t;  +-------+------+  | 列 1  | 列2  |  +-------+------+  |     1 | a    |  |     2 | b    |  |     3 | c    |  +-------+------+  3 rows in set (0.00 sec)    mysql> select t.* from test1 as t;  +---+---+  | a | b |  +---+---+  | 1 | a |  | 2 | b |  | 3 | c |  +---+---+  3 rows in set (0.00 sec)    mysql> select * from test1 as t;  +---+---+  | a | b |  +---+---+  | 1 | a |  | 2 | b |  | 3 | c |  +---+---+  3 rows in set (0.00 sec)  

總結

  • 建議別名前面跟上as關鍵字
  • 查詢數據的時候,避免使用select *,建議需要什麼字段寫什麼字段