MySQL全面瓦解6:查詢的基本操作
概述
提到查詢,就回到我們第四篇的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、查詢數據的時候,應遵循應需而查,查詢需要的字段即可,切勿隨意的使用*,數據量大的時候性能差距就明顯了。