SELECT 字段1,字段2... FROM 表名 WHERE 條件 GROUP BY field HAVING 篩選 ORDER BY field LIMIT 限制條數
SELECT * FROM 表名;
SELECT 字段1,字段2 FROM 表名;
SELECT DISTINCT 字段 FROM 表名;
SELECT 字段1, 字段2*12 FROM 表名; # 將字段2 的值 *12 後輸出 SELECT 字段1, 字段2*12 AS 別名 FROM 表名; SELECT 字段1, 字段2*12 別名 FROM 表名;
CONCAT() 函數用於鏈接字符串 SELECT CONCAT('姓名: ',字段1,' 年薪: ', 字段2*12) AS Annual_salary FROM 表名; CONCAT_WS() 第一個參數爲分隔符 SELECT CONCAT_WS(':',字段1,字段2*12) AS 別名 FROM 表名;
1. 比較運算符:> < >= <= <> !=
2. between 80 and 100 值在10到20之間
3. in(80,90,100) 值是80或90或100
4. like 'eg%' 能夠是%或_, %表示任意多字符 _表示一個字符 like 'e__n' :
5. 邏輯運算符:在多個條件直接可使用邏輯運算符 and or not
SELECT 字段1 FROM 表名 WHERE 字段2='值';
and 和 or 同級別的時候, and 會先進行判斷, 其次輪到 or正則表達式
可使用 ()框選後進行順序的調整數據庫
where a and b or c 先計算 a and b。 而後是在計算 or c函數
where a and (b or c) 先計算 b or c。 而後是在計算 and apost
SELECT 字段,字段2 FROM 表名 WHERE 字段='值' AND 字段>值;
左右都包含等於 >= 值1 and <=值2
spa
SELECT 字段1,字段2 FROM 表名 WHERE 字段 BETWEEN 值1 AND 值2;
判斷某個字段是否爲NULL不能用等號,須要用IScode
SELECT 字段1,字段2 FROM 表名 WHERE 字段2 IS NULL;
SELECT 字段1,字段2 FROM 表名 WHERE 字段1=值1 OR 字段2=值2 OR 字段3=值3; SELECT 字段1,字段2 FROM 表名 WHERE 字段1 IN (值1,值2,值3) ; SELECT 字段1,字段2 FROM 表名 WHERE 字段1 NOT IN (值1,值2,值3) ;
通配符’%’ SELECT * FROM 表名 WHERE 字段 LIKE '值%'; 通配符’_’ SELECT * FROM 表名 WHERE 字段 LIKE '值__';
1.select * from 表名 where 字段 regexp '^ale'; #匹配以ale開頭的員工信息 2.select * from 表名 where 字段 regexp 'on$'; #匹配以on結尾的員工信息 3.select * from 表名 where 字段 regexp 'n{1,2}'; #匹配字段裏面包含1到2個n的員工信息 小結:對字符串匹配的方式 where 字段 = 'egon'; where 字段 like 'yua%'; where 字段 regexp 'on$';
select * from 表名 where 字段>值; select * from 表名 having 字段>值;
# 執行優先級從高到低:where > group by > 聚合函數 > having >order by
# where和having的區別
1. Where 是一個約束聲明,使用Where約束來自數據庫的數據,Where是在結果返回以前起做用的 (先找到表,按照where的約束條件,從表(文件)中取出數據),Where中不能使用聚合函數
2. Having 是一個過濾聲明,是在查詢返回結果集之後對查詢結果進行的過濾操做,可繼續使用聚合函數 (先找到表,按照where的約束條件,從表(文件)中取出數據,而後group by分組, 若是沒有group by則全部記錄總體爲一組,而後執行聚合函數,而後使用having對聚合的結果進行過濾),
3. where的優先級比having的優先級高
4. having能夠放到group by以後,而where只能放到group by 以前。
select depart_id,count(id) from employee group by depart_id having depart_id = 3; # group 後只能使用 having select max(salary) 最大工資 from employee where id>2 group by depart_id having count(id)>3; # where 只能使用在 group 以前 # having 中可使用聚合函數
咱們按照 字段1 分組,那麼select查詢的字段只能是 字段1,想要獲取組內的其餘相關信息,須要藉助函數regexp
select 字段1 from 表名 group by 字段1;
select post,group_concat(name) from employee group by post; # 按照崗位分組,並查看組內成員名 select post,group_concat(name) as emp_members FROM employee group by post; # 起別名
select post,count(id) as count from employee group by post; #按照崗位分組,並查看每一個組有多少人
通常查詢出來的數據有大量重複的時候基於分組能夠更好的摺疊數據orm
關鍵字的執行優先級blog
from
where
group by
having
select
distinct
order by
limit排序
1.找到表:from
2.拿着where指定的約束條件,去文件/表中取出一條條記錄
3.將取出的一條條記錄進行分組group by,若是沒有group by,則總體做爲一組
4.若是有聚合函數,則將組進行聚合
5.將4的結果過濾:having
6.查出結果:select
7.去重
8.將6的結果按條件排序:order by
9.將7的結果限制顯示條數
按單列排序 SELECT * FROM employee ORDER BY salary; SELECT * FROM employee ORDER BY salary ASC; SELECT * FROM employee ORDER BY salary DESC; 按多列排序:先按照age排序,若是年紀相同,則按照薪資排序 SELECT * from employee ORDER BY age, salary DESC; ===========order by========== 1.select * from employee order by salary; #若是不指定,默認就是升序 2.select * from employee order by salary asc; # 升 3.select * from employee order by salary desc; # 降 #先按照年齡升序,當年齡相同的太多,分不清大小時,在按照工資降序 4.select * from employee order by age asc, salary desc;
先from找到表
再用where的條件約束去表中取出記錄
而後進行分組group by,沒有分組則默認一組
而後進行聚合
最後select出結果
select count(*) from employee; select count(*) from employee where depart_id=1; select max(salary) from employee; select min(salary) from employee; select avg(salary) from employee; select sum(salary) from employee; select sum(salary) form employee WHERE depart_id=3;
格式
limit n,m n 從第幾條數據開始 ,默認爲 0 ,爲 0 時可忽略不寫 m 取出數據數量,不包含第n個數據
=========limit:限制打印幾條========= select * from 表名 limit 3; #打印前三條 # 像這樣表示的:指的是從哪開始,日後取幾條 (這樣的操做通常用來分頁) select * from 表名 limit 0,3; # 取出 第 1,2,3 條數據 select * from 表名 limit 3,4; # 取出 第 4,5,6,7 條數據 select * from 表名 order by 字段 desc limit 3; #查看後三條