概述
提到查詢,就回到我們第四篇的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、查詢資料的時候,應遵循應需而查,查詢需要的欄位即可,切勿隨意的使用*,資料量大的時候效能差距就明顯了。