1. 程式人生 > 實用技巧 >mysql - 簡單查詢

mysql - 簡單查詢

-- distinct 
select distinct user_email from `user`;


-- order by 欄位1 desc/asc[, 欄位2 desc/asc]
-- 預設是asc
select * from `user` order by user_gender desc, user_id asc limit 10;


-- limit N:返回N條記錄
select * from `user` limit 10;

-- offset M:跳過 M 條記錄, 預設 M=0, 單獨使用不起作用
select * from `user` order by user_id asc limit 10 offset 10;

-- limit M, N:跳過M條記錄,返回N條記錄,相當於limit N offset M;
select * from `user` order by user_id asc limit 10, 20;

-- 簡單分頁
#當前第幾頁
set @page_number = 2;
#每頁條數
set @page_size = 10;
set @offset1 = (@page_number-1)*@page_size;
-- select * from `user` order by user_id asc limit @page_size offset @offset1;
-- select * from `user` order by user_id asc limit @offset1, @page_size;

-- 分頁效能優化 ?


-- between and
select * from `user` where user_gender between 0 and 1 limit 10;


-- where
-- and/or
-- = 、 <>/!=、 >、 <、 >=、 <= 
-- binary 關鍵字來設定 WHERE 子句的字串比較是區分大小寫的。
select * from `user` where binary user_email = '[email protected]';
-- where like 匹配/模糊匹配,會與 % 和 _ 結合使用。
-- %:表示任意 0 個或多個字元。可匹配任意型別和長度的字元,有些情況下若是中文,請使用兩個百分號(%%)表示。
-- _:表示任意單個字元。匹配單個任意字元,它常用來限制表示式的字元長度語句。
-- '%a'     //以a結尾的資料
-- 'a%'     //以a開頭的資料
-- '%a%'    //含有a的資料
-- '_a_'    //三位且中間字母是a的
-- '_a'     //兩位且結尾字母是a的
-- 'a_'     //兩位且開頭字母是a的


-- MySQL union 操作符
-- MySQL union 操作符用於連線兩個以上的 SELECT 語句的結果組合到一個結果集合中。多個 SELECT 語句會刪除重複的資料。
select * from `user` where user_id between 10 and 30
union #union all / union   包含重複/刪除重複
select * from `user` where user_id between 20 and 40;


-- group by 和 聚合函式
-- group by X, Y
-- 聚合函式
-- max()
-- min()
-- sum()
-- count()
-- avg()
select user_idcard, user_gender from `user` group by user_idcard, user_gender;
#計算總數
select user_idcard, count(user_idcard) as 'count' from `user` group by user_idcard;
#求和
select user_gender, sum(user_gender) as 'sum' from `user` group by user_gender;
#計算平局值
select user_gender, avg(user_gender) as avg from `user` group by user_gender;
-- with rollup 可以實現在分組統計資料基礎上再進行相同的統計(SUM,AVG,COUNT…)。
-- 其中記錄 NULL 表示所有的次數。
select coalesce(user_idcard, '總數'), count(user_gender)  as 'count' from `user` group by user_idcard with rollup;
-- having
select user_gender, sum(user_gender) as 'sum' from `user` group by user_gender having sum(user_gender) > 20;


-- INNER JOIN(內連線,或等值連線):獲取兩個表中欄位匹配關係的記錄。
-- LEFT JOIN(左連線):獲取左表所有記錄,即使右表沒有對應匹配的記錄。
-- RIGHT JOIN(右連線): 與 LEFT JOIN 相反,用於獲取右表所有記錄,即使左表沒有對應匹配的記錄。
select * from `user` u inner join `educational` e on u.user_id = e.user_id limit 10;
select * from `user` u, educational e where u.user_id = e.user_id limit 10;

select * from `user` u left join `educational` e on u.user_id = e.user_id limit 10;
select * from `user` u right join `educational` e on u.user_id = e.user_id limit 10;