-- 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;