MySQL/MariaDB DML操作之Select

前言

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

DML操作

DML.jpg

DML之select

投影查询

select col_name,[col_name1,...] from table_name;

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

条件查询

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

 聚合查询

AVG():平均值 
SUM():总和
MAX():最大值
MIN():最小值
COUNT():记录总数

子句修饰符

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

select执行流程

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

连接查询

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

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子句的子查询

①用于比较表达式中的子查询
要求子查询只能返回单个结果				
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中的子查询

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在子查询优化方面并不成熟,所以尽量避免使用子查询

联合查询

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

select statement union select statement

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

select实战

表结构

1.jpg

2.jpg

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

3.jpg

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

4.jpg

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

5.jpg

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

6.jpg

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

7.jpg

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

8.jpg

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

9.jpg

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

10.jpg

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

11.jpg

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

12.jpg

The end

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

原创文章,作者:书生,如若转载,请注明出处:http://www.178linux.com/4064

(0)
书生书生
上一篇 2015-05-07 09:30
下一篇 2015-05-07 09:41

相关推荐

  • Linux的哲学思想

    Linux的哲学思想 一切皆文件 在linux中所有的一切,都是可以通过ls进行查询的到的,甚至可以说ll查看详细信息时表现形式为文件,所有的设备,所有的文件不论后缀,只是一个单纯文件通过vim可以编辑一切 单一目的的小程序,组合小程序完成复杂任务 在linux中,每一个命令都是对应一个功能,通过不同的参数来完成不同的要求,通过繁多的小的命令来完成大型的要求…

    Linux干货 2016-10-30
  • 关于大型网站技术演进的思考(十二)–网站静态化处理—缓存(4)

    原文出处: 夏天的森林   上篇我补充了下SSI的知识,SSI是一个十分常见的技术,记得多年前我看到很多门户网站页面的后缀是.shtml,那么这就说明很多门户网站都曾经使用过SSI技术,其实现在搜狐网站也还在用shtml,如下图所示: 由此可见SSI在互联网的应用还是非常广泛的。其实互联网很多网页如果我们按照动静分离策略拆分,绝…

    2015-03-11
  • CentOS程序安装的3种方式{ 源码包安装 | rpm包安装 | yum安装;}

    CentOS程序安装的3种方式{ 源码包安装 | rpm包安装 | yum安装;} CentOS软件安装主要由3种方式,第一种是源码包安装,需要从网站下载并解压之后通过手动编译的方式安装,过程相对比较复杂;第二种是rpm包安装,通过rmp这个包管理器实现程序的安装、升级、卸载等操作,rpm包管理器是RPM Package Manager的简称,功能非常强大,…

    Linux干货 2016-08-24
  • (一)Linux发行版及基础命令简述

    计算机 Linux 发行版 命令 帮助

    2017-12-11
  • 磁盘文件挂载与卸载

    挂载(mount)何为挂载?挂载指将文件系统与根文件系统的某个现存的目录建立起来的关联关系,这样我们就可以将目录作为访问磁盘文件的入口,进行存取交互。挂载点:挂载点指的是被挂载的对象,通常挂载点是一个目录,不过有时候也有文件作为挂载点格式:mount 设备 挂载点 ;此挂载方法味临时挂载,只在当前的shell中有效,退出则清除挂载关联设备文件在/dev/sd…

    Linux干货 2017-04-24
  • linux文件权限详解

    基本命令 1.cut : cat /etc/passwd | cut -d’:’ -f7| uniq -c| sort -nr 2.authconfig 修改加密方式 –passalgo=sha256 — update 3.scp 上传文件 -r dir ip:path 传目录 file ip:path传文件 …

    Linux干货 2017-04-03