MySQL全面瓦解6:查詢的基本操作

翁智華發表於2020-11-06

概述

提到查詢,就回到我們第四篇的SQL語言分類了,DQL(Data QueryLanguage),也就是資料查詢語言,實際就是從資料庫中獲取資料的一種命令方式。我們給資料庫傳送一個查詢語句的命令,資料庫按需返回相應的資料。

select column_name1,column_name2,... from tname;

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

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

查詢單個欄位

配置欄位名稱,格式如下:

1 select column_name1 from tname;

 

 1 mysql> use test;
 2 Database changed
 3 
 4 mysql> select name from user3;
 5 +-------+
 6 | name  |
 7 +-------+
 8 | brand |
 9 | sol     |
10 +-------+
11 2 rows in set

 

查詢多個欄位

多個欄位使用逗號隔開,語法格式如下

1 select column_name1,column_name2,... from tname;

 

 1 mysql> use test;
 2 Database changed
 3 
 4 mysql> select id,age,name from user3;
 5 +----+-----+-------+
 6 | id | age | name  |
 7 +----+-----+-------+
 8 |  1 |  20 | brand |
 9 |  2 |  22 | sol   |
10 +----+-----+-------+
11 2 rows in set

 

查詢所有欄位

使用*號萬用字元來表示,語法格式如下

1 select * from tname;

 

 1 mysql> use test;
 2 Database changed
 3 
 4 mysql> select * from user3;
 5 +----+-----+-------+
 6 | id | age | name  |
 7 +----+-----+-------+
 8 |  1 |  20 | brand |
 9 |  2 |  22 | sol   |
10 +----+-----+-------+
11 2 rows in set

 

常量的查詢

對於常量值的查詢,可以不來源於表,格式如下

1 select const1,const2,const3;
1 mysql> select 100,'brand',1.5;
2 +-----+-------+-----+
3 | 100 | brand | 1.5 |
4 +-----+-------+-----+
5 | 100 | brand | 1.5 |
6 +-----+-------+-----+
7 1 row in set

 

表示式的查詢

sql的加減乘除等等表示式的查詢,格式如下:

1 select expression1,expression2,...;

 

1 mysql> select 1+2,1-2,1*7,17/2,17%2,(2+3)*5,8>5,7=4;
2 +-----+-----+-----+------+------+---------+-----+-----+
3 | 1+2 | 1-2 | 1*7 | 17/2 | 17%2 | (2+3)*5 | 8>5 | 7=4 |
4 +-----+-----+-----+------+------+---------+-----+-----+
5 |   3 |  -1 |   7 | 8.5  |    1 |      25 |   1 |   0 |
6 +-----+-----+-----+------+------+---------+-----+-----+
7 1 row in set

 

函式的查詢

可以在查詢中加上各種型別的系統函式或者使用者自定義函式,來簡化一些較複雜的查詢過程。格式如下:

1 select func1,func2,func3,...;

 

1 mysql> select abs(-6),round(5.7),length('brand'),now();
2 +---------+------------+-----------------+---------------------+
3 | abs(-6) | round(5.7) | length('brand') | now()               |
4 +---------+------------+-----------------+---------------------+
5 |       6 | 6          |               5 | 2020-11-06 21:07:41 |
6 +---------+------------+-----------------+---------------------+
7 1 row in set

 

表和欄位的查詢

查詢列名都會以列的定義名稱顯示,這樣顯示的時候檢視不方便,還容易暴露資料庫的資訊給業務,為了增強指令碼可閱讀性,我們經常使用欄位別名。

設定表的別名更主要的還是在於書寫查詢語句時候的便利,並避免多表查詢時的欄位混淆。格式如下:

1 select talias.column_name1 col1,talias.column_name2 col2 from  tname [as] talias;

 

 1 mysql> use test;
 2 Database changed
 3 
 4 mysql> select u.id as 主鍵,u.age as 年齡,u.name as 名稱 from user3 u;
 5 +------+------+-------+
 6 | 主鍵 | 年齡 | 名稱  |
 7 +------+------+-------+
 8 |    1 |   20 | brand |
 9 |    2 |   22 | sol   |
10 +------+------+-------+
11 2 rows in set

混合查詢

查詢具體表的欄位是可以跟表示式,常量等混合在一起的,這樣才能應付複雜的業務。

1 mysql> select '中國2020人口普查' as 標題,u.id as 主鍵,u.age as 年齡,u.name as 名稱,now() as 查詢時間,2020*rand() as 隨機數 from user3 u;
2 +------------------+------+------+-------+---------------------+--------------------+
3 | 標題             | 主鍵 | 年齡 | 名稱  | 查詢時間            | 隨機數             |
4 +------------------+------+------+-------+---------------------+--------------------+
5 | 中國2020人口普查 |    1 |   20 | brand | 2020-11-06 21:23:39 | 1236.3585094328582 |
6 | 中國2020人口普查 |    2 |   22 | sol   | 2020-11-06 21:23:39 | 344.21752367561453 |
7 +------------------+------+------+-------+---------------------+--------------------+
8 2 rows in set

1、本片只是查詢的基礎篇,後續會引出 查詢的過濾條件、排序、分頁、分組、正則匹配過濾,以及複雜查詢的效能優化等等。

2、查詢資料的時候,應遵循應需而查,查詢需要的欄位即可,切勿隨意的使用*,資料量大的時候效能差距就明顯了。

相關文章