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

[经验分享] MySQL/MariaDB DML操作之Select

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-5-7 08:36:16 | 显示全部楼层 |阅读模式

前言

上文我们已经讲解了MySQL/MariaDB的基础知识和DDL相关操作,接下来我们来说一下MySQL/MariaDB的DML操作,因select查询较复杂也较重要,所以本文主要是对select查询的详解。

DML操作

wKiom1VJkm_hxly7AAMNR_G1grk976.jpg

DML之select

投影查询

1
2
3
4
select col_name,[col_name1,...] from table_name;

select * from table_name ;#显示全表
遍历整张数据表,但对系统资源消耗较大,再进行大数据量的查询时,禁止使用这类操作



条件查询

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
select col_name,[col_name1,...] from table_name where where_definition
#条件比较操作符
=    #等值比较
<=>  #等值比较,包括与NULL的安全比较
<>或!=  #不等值比较
<,<=,>,>=  #其它比较符
IN  #指定范围内值的存在性测试
BETWEEN … AND …  #在某取值范围内
IS NULL  #是否为空值
IS NOT NULL  #是否为非空
LIKE  #可使用通配符:%, _
RLIKE或REGEXP  #可使用正则表达式的模式
#逻辑操作符
AND
OR
NOT



聚合查询

1
2
3
4
5
AVG():平均值
SUM():总和
MAX():最大值
MIN():最小值
COUNT():记录总数



子句修饰符

1
2
3
4
GROUP BY #对符合条件的结果进行分组
HAVING: 对聚合查询的结果做过滤
ORDER BY col1[,col2] {ASC|DESC} #排序
LIMIT [Offset,]count #限制输出行数



select执行流程

1
FROM --> WHERE --> GROUP BY --> HAVING --> ORDER BY --> SELECT --> LIMIT



连接查询

事先将两张或多张表执行相应的join操作,而后根据join结果做查询

1
2
3
4
5
6
7
8
9
10
11
12
13
14
CROSS JOIN:笛卡尔积,交叉连接
select * from tab1,tab2;
INNER JOIN:内连接
#等值连接
select * from tab1 inner join tab2 on tab1.col_name = tab2.col_name
OUTER JOIN:外连接
LEFT OUTER JOIN:左外连接
select s.name as student,t.name as teacher from students as s lift join teachers as t
on s.TeacherID = t.TID;  
RIGHT OUTER JOIN:右外连接   
select s.name as student,t.name as teacher from students as s right join teachers as t
on s.TeacherID = t.TID;   
NATURAL JOIN:自然连接,等值连接
select tab1.col_name,tab2.col_name from tab1,tab2 where tab1.col_name = tab2.col_name;



子查询

基于某查询语句的结果再次进行的查询

用于where子句的子查询

1
2
3
4
5
6
7
①用于比较表达式中的子查询
要求子查询只能返回单个结果               
select Name,Age from students where Age > (select AVG(Age) from students);
②用于in中的子查询
判断是否存在于指定的列表中
select Name from students where StuID in (select TID from teschers);
③用于exists中子查询



用于from中的子查询

1
2
3
select alias.col,... from (select statement) as alias where clause

select s.Name from (select * from students where Age > 20) as s where s.Name like 's%';



注:MySQL/MariaDB在子查询优化方面并不成熟,所以尽量避免使用子查询

联合查询

将两外或多个返回值字段相同的查询的结果合并输出

1
2
3
select statement union select statement

select Name,Age from teachers where Age>=40 union select Name,Age from students where Age>=40;



select实战

1
表结构



wKioL1VJ3PvQAmUpAAKjBbhoib8087.jpg

wKiom1VJ26DRdh3NAAH7mRXXnIA739.jpg

1
以ClassID分组,显示每班的同学的人数



wKiom1VJ29vRLcI6AACq3EN5vzA400.jpg

1
以Gender分组,显示其年龄之和



wKiom1VJ3IvxA-sKAAB6Gyk75Go008.jpg

1
以ClassID分组,显示其平均年龄大于25的班级



wKioL1VJ35GhhSPVAACbXt1hYIs496.jpg

1
以Gender分组,显示各组中年龄大于25的学员的年龄之和



wKiom1VJ3zLDcN4pAAByhZBzhJE193.jpg

1
显示前5位同学的姓名、课程及成绩



wKioL1VJ40yxvGm1AAHMozrkQQU793.jpg

1
显示其成绩高于80的同学的名称及课程



wKioL1VJ4_bgzH7kAAGQ7rHbyT8098.jpg

1
求前8位同学每位同学自己两门课的平均成绩,并按降序排列



wKioL1VJ5puQXyfBAAFGckvbgUs609.jpg

1
显示每门课程课程名称及学习了这门课的同学的个数



wKiom1VJ6MOCvZFrAAEJAPED65E191.jpg

1
显示其年龄大于平均年龄的同学的名字



wKiom1VJ6cmgrkBJAACWDPkAnNo217.jpg

1
统计各班级中年龄大于全校同学平均年龄的人数



wKioL1VJ7U6AEN4MAACyOqVPhD8468.jpg

The end

好了,select查询就先说到这里了,看起来select就这么点东西,其实要真正用好并不容易,所以小伙伴们多加练习吧,后续文章还会继续讲解MySQL/MariaDB系列的知识,有兴趣的可继续关注哦。以上仅为个人学习整理,如有错漏,大神勿喷~~~



运维网声明 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-64429-1-1.html 上篇帖子: mysql server连接mysql-front方法 下篇帖子: MySQL 5.6 for Windows配置安装之解压缩版
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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