本文內容: 完整語法 去重選項 欄位別名 數據源 where group by having order by limit 首發日期:2018-04-11 完整語法: select 去重選項 欄位列表 [as 欄位別名] from 數據源 [where子句] [group by 子句] [havin... ...
本文內容:
- 完整語法
- 去重選項
- 欄位別名
- 數據源
- where
- group by
- having
- order by
- limit
首發日期:2018-04-11
完整語法:
select 去重選項 欄位列表 [as 欄位別名] from 數據源 [where子句] [group by 子句] [having子句] [order by 子句] [limit子句];
去重選項::
- 去重選項就是是否對結果中完全相同的記錄(所有欄位數據都相同)進行去重:
- all:不去重
- distinct:去重
- 語法:select 去重選項 欄位列表 from 表名;
示例:
create table student(name varchar(15),gender varchar(15)); insert into student(name,gender) values("lilei","male"); insert into student(name,gender) values("lilei","male"); select * from student; select distinct * from student;
欄位別名:
- 欄位別名是給查詢結果中的欄位另起一個名字
- 欄位別名只會在當次查詢結果中生效。
- 欄位別名一般都是輔助瞭解欄位意義(比如我們定義的名字是name,我們希望返回給用戶的結果顯示成姓名)、簡寫欄位名
- 語法:select 欄位 as 欄位別名 from 表名;
示例:
create table student(name varchar(15),gender varchar(15)); insert into student(name,gender) values("lilei","male"); insert into student(name,gender) values("lilei","male"); select * from student; select name as "姓名",gender as "性別" from student;
數據源:
- 事實上,查詢的來源可以不是“表名”,只需是一個二維表即可。那麼數據來源可以是一個select結果。
- 數據源可以是單表數據源,多表數據源,以及查詢語句
-- 示例 select name from (select * from student) as d;
where子句:
- where子句是用於篩選符合條件的結果的。
where幾種語法:
- 基於值:
- = : where 欄位 =值 ;查找出對應欄位等於對應值的記錄。(相似的,<是小於對應值,<=是小於等於對應值,>是大於對應值,>=是大於等於對應值,!=是不等於)
- like:where 欄位 like 值 ;功能與 = 相似 ,但可以使用模糊匹配來查找結果。
- 基於值的範圍:
- in: where 欄位 in 範圍;查找出對應欄位的值在所指定範圍的記錄。
- not in : where 欄位 in 範圍;查找出對應欄位的值不在所指定範圍的記錄。
- between x and y :where 欄位 between x and y;查找出對應欄位的值在閉區間[x,y]範圍的記錄。
- 條件複合:
- or : where 條件1 or 條件2… ; 查找出符合條件1或符合條件2的記錄。
- and: where 條件1 and 條件2… ; 查找出符合條件1並且符合條件2的記錄。
- not : where not 條件1 ;查找出不符合條件的所有記錄。
- &&的功能與and相同;||與or功能類似,!與not 功能類似。
補充:
- where是從磁碟中獲取數據的時候就進行篩選的。所以某些在記憶體是才有的東西where無法使用。(欄位別名什麼的是本來不是“磁碟中的數據”(是在記憶體這中運行時才定義的),所以where無法使用,一般都依靠having來篩選).
select name as n ,gender from student where name ="lilei"; -- select name as n ,gender from student where n ="lilei"; --報錯 select name as n ,gender from student having n ="lilei";
group by 子句:
-- 示例 select name,gender,count(name) as "組員" from student as d group by name; select name,gender,count(name) as "組員" from student as d group by name,gender;
補充:
- 實際上,group by 的作用主要是統計(使用情景很多,比如說統計某人的總分數,學生中女性的數量。。),所以一般會配合一些統計函數來使用:
- count(x):統計每組的記錄數,x是*時代表記錄數,為欄位名時代表統計欄位數據數(除去NULL)
- max(x):統計最大值,x是欄位名
- min(x):統計最小值,x是欄位名
- avg(x):統計平均值,x是欄位名
- sum(x):統計總和,x是欄位名
- group by 欄位 後面還可以跟上asc或desc,代表分組後是否根據欄位排序。
having子句:
- having功能與where類似,不過having的條件判斷發生在數據在記憶體中時,所以可以使用在記憶體中才發生的數據,如“分組”,“欄位別名”等。
- 語法:select 欄位列表 from 表名 having 條件;【操作符之類的可以參考where的,增加的只是一些“記憶體”中的篩選條件】
-- 示例 select name as n ,gender from student having n ="lilei"; select name,gender,count(*) as "組員" from student as d group by name,gender having count(*) >2 ;-- 這裡只顯示記錄數>2的分組
order by 子句:
- order by 可以使查詢結果按照某個欄位來排序
- 語法:select 欄位列表 from 表名 order by 欄位 [asc|desc];
- 欄位可以有多個,從左到右,後面的排序基於前面的,(比如:先按name排序,再按gender排序,後面的gender排序是針對前面name排序時name相同的數據)
- asc代表排序是遞增的
- desc代表是遞減的
- 也可以指定某個欄位的排序方法,比如第一個欄位遞增,第二個遞減。只需要在每個欄位後面加asc或desc即可(雖然預設不加是遞增,但還是加上更清晰明確)。
-- 示例 select * from student order by name; select * from student order by name,gender; select * from student order by name asc,gender desc;
limit子句:
- limit是用來限制結果數量的。與where\having等配合使用時,可以限制匹配出的結果。但凡是涉及數量的時候都可以使用limit(這裡只是強調limit的作用,不要過度理解)
- 語法:select 欄位列表 from 表名 limit [offset,] count;
- count是數量
- offset是起始位置,offset從0開始,可以說是每條記錄的索引號
-- 示例 select * from student limit 1; select * from student limit 3,1; select * from student where name ="lilei" limit 1; select * from student where name ="lilei" limit 3,1;