博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MySQL/MariaDB DML操作之Select
阅读量:6812 次
发布时间:2019-06-26

本文共 2555 字,大约阅读时间需要 8 分钟。

前言

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

DML操作

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
表结构

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

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

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

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

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

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

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

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

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

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

The end

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

本文转自 北城书生  51CTO博客,原文链接:http://blog.51cto.com/scholar/1643563

转载地址:http://bykzl.baihongyu.com/

你可能感兴趣的文章
用面向接口编程思想看找对象
查看>>
OC文件操作习题
查看>>
Nginx常用命令
查看>>
TWaver GIS在电信中的使用
查看>>
几款程序员常用的辅助编程工具
查看>>
ios 正则表达式语法参考
查看>>
《Java性能优化权威指南》读书笔记(二)
查看>>
几个比较大的在线提交系统(Online Judge)
查看>>
2.0 tar打包工具详解
查看>>
运动前后饮食注意事项(转)
查看>>
Mybatis缓存
查看>>
CentOS 6.5挂载NTFS格式硬盘
查看>>
Ehcache 整合Spring 使用页面、对象缓存
查看>>
网页全屏插件 screenfull.js
查看>>
PL/SQL 过程与函数的声明
查看>>
curl 获取 https 请求方法
查看>>
ubuntu-16.04 安装虚拟机工具时报错
查看>>
负载均衡设计
查看>>
Android 数据序列化总结
查看>>
Jedis下的ShardedJedis(分布式)使用方法(二)
查看>>