设为首页 收藏本站
查看: 773|回复: 0

[经验分享] MySQL--数据的查找

[复制链接]

尚未签到

发表于 2018-10-7 14:15:35 | 显示全部楼层 |阅读模式
- 基本查询  
| 查询所有列
  
select * from students;
  
| 指定条件查询
  
select * from students where is_delete=1;
  
| 查询指定列
  
select name, gender from students;
  
| 字段的顺序
  
select gender, name from students;
  
| as的使用
  
# 在查询指定列的同时,修改字段名显示
  
select 字段名 as 显示名 from 列表;
  
select name as 姓名, gender as 性别 from students;
  
# 在sql语句中暂时修改表名,减少代码量
  
select students.name, students.gender from students;
  
select s.name, s.gender from students as;
  
| 消除重复行
  
distinct 字段
  
select gender from students;
  
select distinct gender from students;
  
- 条件
  
| 比较运算符
  
>
  
select * from students where age > 18;
  
18 or height>=180;
  
not
  
select * from students where not (age>18 and gender=2);
  
| 模糊查询
  
--like
  
"%"
  
查找以某字符开头的名字
  
select name from students where name like "小%";
  
"_"
  
查询有几个字的名字
  
select name from students where name like "__";
  
select name from students where name like "___";
  
--rlike(支持正则)
  
select name from students where name rlike "^周";
  
select name from students where name rlike "^周.*伦$";
  
| 范围查询
  
-- in 表示在一个非连续范围内
  
select name from students where age in (18,34);
  
-- not in
  
select name , age from students where age not in (18,34);
  
【附:左右两个数字必须是表内含有的】
  
-- between ...and ... 表示在一个连续的范围内
  
select * from students where age between 18 and 34;
  
-- not between ...and.. 不需要加括号
  
select * from students where age not between 18 and 34;
  
【左右两个数字没有限制】
  
| 空判断
  
--判断is null  判断为空
  
select * from students where height is null;
  
--判断is not null 判断不为空
  
select * from students where height is not null;
  
- 排序
  
order by 字段
  
acs 升序 (没有asc也默认升序)
  
select * from students where (age between 18 and 34) and gender=1 order by age;
  
select * from students where (age between 18 and 34) and gender=1 order by age asc;
  
desc 降序
  
select * from students where (age between 18 and 34) and gender=2 order by height desc;
  
# 哪个排序操作在前,就先执行哪个
  
年龄从小到大,身高从高到矮的排序
  
select * from students order by age asc, height desc;
  
先对身高降序,如果体重相同,年龄升序
  
select * from students where (age between 18 and 34) and gender=2 order by height desc, age asc;
  
- 聚合函数
  
总数 (统计数量)
  
count
  
select * from students where gender=1;
  
select count(*) as 男生的人数 from students where gender=1;
  
select count(*) as 女生的人数 from students where gender=2;
  
# *的效率比选择的字段要高
  
select count(name) as 男生的人数 from students where gender=1;
  
最大值
  
max
  
select age from students;
  
select max(age) from students;
  
select max(height) from students where gender=2;
  
最小值
  
min
  
select sum(age) from students;
  
求和
  
sum
  
select sum(age) from students;
  
平均值
  
avg
  
select sum(age)/count(*) from students;
  
select avg(age) from students;
  
四舍五入 round(数字,保留位数)
  
select round(avg(age) ,2) from students where gender=1;
  
计算所有人的年龄,保留两位小数
  
select round(avg(age) ,2) from students;
  
- 分组
  
--group by
  
选择字段,
  
数据去重后分成一组
  
按照性别分组
  
select * from students group by gender; # 错误
  
select gender from students group by gender;
  
--group_concat
  
取出分组对应的
  
其他字段下的数据
  
select gender, group_concat(name) from students
  
group by gender;
  
select gender, group_concat(name, age) from students
  
group by gender;
  
--having
  
附加查询
  
每种性别的平均年龄
  
select gender, avg(age) from students
  
group by gender;
  
查询平均年龄超过30岁的性别
  
select gender, group_concat(name) from students
  
group by gender having avg(age)>30;
  
--with rollup
  
--在最后新增一行,记录当前列所有数的总和
  
select gender, count(*) from students group by gender with rollup;
  
-
  
分页
  
(limit start, count
  
0表示第一个)
  
1-操作
  
查询前5个数据
  
select * from students limit 0,5;
  
查询id4-8的数据
  
select * from students limit 3,5;
  
每页显示2个,第1,2,3个页面
  
select * from students limit 0,2;----每页数量*(页数-1)
  
select * from students limit 2,2;
  
select * from students limit 4,2;
  
每页显示2个,显示第3页的信息,按照年龄从小到大排序
  
select * from students limit 2*(4-1),2; 失败
  
select * from students limit 6,2 order by age asc; 失败
  
select * from students order by age asc limit 6,2 ;
  
2-加速查找
  
- 连表查询
  
-
  
inner join ...on..
  
内连接,取交集
  
--对inner join ...on...的理解
  
select * from goods inner join goods_brands
  
on goods.id=goods_brands.id;
  
分析:从goods某个范围内中查找数据,
  
而这个范围是含有goods_brands的交集,
  
且必须满足on后面的条件
  
--按照要求显示字段
  
select goods.name from goods inner join goods_brands
  
on goods.id=goods_brands.id;
  
--显示要求字段的同时,插入表中其他字段数据
  
select b.*,g.name from goods as g inner join goods_brands as b
  
on g.id=b.id;
  
--给数据表起短名字
  
select g.name from goods as g inner join goods_brands as b
  
on g.id=b.id;
  
-
  
left join ...on...
  
左连接以左边表为主
  
--左连接,以左表为基础,匹配另一个表数据,
  
--无数据用NULL表示
  
select b.*,g.name from goods as g left join goods_brands as b
  
on g.id=b.id;
  
--清除NULL的数据
  
select b.*,g.name from goods as g left join goods_brands as b
  
on g.id=b.id where b.name is not null;
  
-
  
自关联
  
(待补充)
  
create table areas(
  
    aid int primary key,
  
    atitle varchar(20),
  
    pid int
  
);
  
查询所有省份
  
select * from areas where pid is null;
  
查询山东省的所有市
  
select * from areas as city inner join areas as province
  
on city.pid=province.aid where province.atitle="山东省";
  
数据库导入数据命令——source 文件.sql
  
- 子查询
  
- 标量子查询
  
返回一个数据(一行一列)
  
select * from students height > avg(height); 失败
  
select * from students where height > select avg(height) from students;  失败
  
select * from students where height > (select avg(height) from students);
  
- 列级子查询
  
返回的结果是一列(一列多行)
  
select name from classes where id in (select cls_id from students);
  
- 行级子查询
  
返回结果是一行(一行多列)
  
select * from students where (height,age) = (select max(height),max(age) from students);
  
- 组合Union
  
-- 组合,自动处理重合
  
    select nickname from A union select name from B
  
-- 组合,不处理重合
  
    select nickname from A union all select name from B



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-614411-1-1.html 上篇帖子: MySQL--数据表操作 下篇帖子: MySQL--索引
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表