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 = 'QWERT@qq.com';
-- 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;

  

posted @ 2020-09-14 17:49  gygtech  Views(188)  Comments(0Edit  收藏  举报