概述
提到查詢,就回到我們第四篇的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、查詢資料的時候,應遵循應需而查,查詢需要的字段即可,切勿随意的使用*,資料量大的時候性能差距就明顯了。
為幫助開發者們提升面試技能、有機會入職BATJ等大廠公司,特别制作了這個專輯——這一次整體放出。
大緻内容包括了: Java 集合、JVM、多線程、并發程式設計、設計模式、Spring全家桶、Java、MyBatis、ZooKeeper、Dubbo、Elasticsearch、Memcached、MongoDB、Redis、MySQL、RabbitMQ、Kafka、Linux、Netty、Tomcat等大廠面試題等、等技術棧!
歡迎大家關注公衆号【Java爛豬皮】,回複【666】,擷取以上最新Java後端架構VIP學習資料以及視訊學習教程,然後一起學習,一文在手,面試我有。
每一個專欄都是大家非常關心,和非常有價值的話題,如果我的文章對你有所幫助,還請幫忙點贊、好評、轉發一下,你的支援會激勵我輸出更高品質的文章,非常感謝!