玩轉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 *,建議需要什麼字段寫什麼字段