Mysql -- DQL详解
一、前言
在之前的mysql基础里提了一下DQL语法,这里细讲一下
二、基础语法
select [all|distinct] #全部|去重
{*|table.*|[table.field [as alias1] [,table.field2 [as alias2]][,...]}
from table_name [as table_alias][left|out|inner join table_name2] #联合查询[where ...] #指定结果需要满足的条件[group by ...] #指定结果按照那几个字段来分组[having ...] #过滤分组的记录必须满足的次要条件[order by ...] #指定查询记录安一个或者多个条件排序[limit {[offset,]row_count | row_count offset offset}]; #指定查询的记录从哪条到哪条
三、子句执行顺序
- 查询时,需要基于表的操作,所以第一步先执行 from
- 要进行多表查询,需要先确定哪两个字段符合,所以第二步执行 on
- 进行多表查询 确定表 第三步执行join 将两个表组合
- 表确定后,需要进行条件筛选,所以第四步执行 where
- 然后需要对数据进行分组,所以第五步执行 group by
- 分组后需要对分组后的数据再次进行过滤,所以第六步是执行 having
- 过滤完后需要选择获取的字段 所以第七步是执行 select
- 查询完获得结果进行去重 所以第八步是执行 distinct
- 查询完后在进行对获取到的数据进行排序 所以第九步是排序 order by
- 最后将所获得的结果进行截取获取 所以第十步是 limit
执行顺序就是
from > on > join > where > group by > having > select >distinct > order by >limit
四、where条件语句
用于检索数据表中符合条件的记录
搜索条件可以由一个或多个逻辑表达式组成,结果一般为真或假
搜索条件一般由 逻辑操作符、比较操作符组成
多个条件查询使用 and 连接
逻辑操作符:
比较操作符:
like 有两个占位符:
通配符 %:匹配0或0个以上的字符。
占位符 _: 匹配一个字符。如:
# 这里的只要条件包含三就满足要求 前面和后面任意字符
select * from student where name like '%三%';
# 这里的前后都有且只能有一个字符才满足条件
select * from student where name like '_三_';
五、多表查询
多表查询分为两种方式分别为:内连接(inner join)和外连接 (out join)
外连接又分为两种:左外连接(left join) 和右外连接(right join)
区别:
5.1、内连接
语法:
# 这里inner join 也可以写成join join默认就为内连接
select 表一.字段,表二.字段...
from 表一
inner join 表二 on 表一.字段=表二.字段
例如:
select stu.sname,stu.sage,stu.ssex,sca.cid,sca.score ,scb.cid ,scb.score
from student stu
inner join sc sca on stu.sid = sca.sid
join sc scb on stu.sid = scb.sid
5.2、外连接
5.2.1、左外连接
以左表为基础,将右表拼接
语法:
select 表一.字段,表二.字段...
from 表一
left join 表二 on 表一.字段=表二.字段
例如:
select stu.sname,stu.sage,stu.ssex,sca.cid,sca.score ,scb.cid ,scb.score
from student stu
left join sc sca on stu.sid = sca.sid
5.2.2、右外连接
以右表为基础,将左表拼接
语法:
select 表一.字段,表二.字段...
from 表一
right join 表二 on 表一.字段=表二.字段
例如:
select stu.sname,stu.sage,stu.ssex,sca.cid,sca.score ,scb.cid ,scb.score
from student stu
right join sc sca on stu.sid = sca.sid
5.3、笛卡尔积
笛卡尔积: 简单的排列组合
在mysql中会将第一个表的数据与第二个表的数据每个都连起来,若第一个表n条数据 第二个表m条数据,那么获得的数据为 n*m 条数据
这样数据会非常大,查询起来会及其低效,所以慎用。
select *
from student,sc;
六、order by 排序
指定查询记录按一个或多个条件进行排序
关键字:desc 降序
asc 升序
语法:
# 升序
select * from 表 order by 字段 asc;
#降序
select * from 表 order by 字段 desc;
如:
# 将课程降序升序
select * from sc order by course;
# 若课程一样按照成绩降序
select * from sc order by course asc , score desc;
七、limit 分页
- 第一个参数:指定第一个返回记录行的偏移量(即从哪一行开始返回),注意:初始行的偏移量为0。
- 第二个参数:返回具体行数。
# 返回前m条记录
select * from 表 limit m;
# 返回从第n条记录后的m条记录
select * from 表 limit n,m;# 若每页为m条记录 从第a页查询就是
select * from 表 limit (a-1)*m,m;
例子:
#返回前五条记录
select * from result limit 5;
# 返回6-10条记录
select * from result limit 5,5;
八、group by 分组
- 对所有的数据进行分组统计
- 分组的依据字段可以有多个,并依次分组
- 与having结合使用,进行分组后的数据筛选
- 一般group by 与聚合函数结合使用
语法:
select 字段,聚合函数(字段) from 表 group by 字段 having 条件;
例如:
# 查询成绩表 以学科id分组 查询每门学科的平均值 条件为平均值大于90
select subjectno ,avg(studentresult) avg_sorce
from result
group by subjectno
having avg_sorce > 90;
Mysql -- DQL详解相关推荐
- pandas读写MySQL数据库详解及实战
pandas读写MySQL数据库详解及实战 SQLAlchemy是Python中最有名的ORM工具. 关于ORM: 全称Object Relational Mapping(对象关系映射). 特点是操纵 ...
- Mysql Explain 详解
Mysql Explain 详解 一.语法 explain < table_name > 例如: explain select * from t3 where id=3952602; 二. ...
- MySQL存储过程详解 mysql 存储过程
mysql存储过程详解 1. 存储过程简介 我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的S ...
- mysql存储过程详解[转]
mysql存储过程详解[转] 1. 存储过程简介 我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功 ...
- mysql-win安装教程,WINDOWS下安装MYSQL教程详解
1.下载安装包 2.配置环境变量 2.1 解压所下载的压缩包 2.2 环境变量 win 10 电脑 这么进去 3.生成data文件 在你解压的目录下,eg:F:\Program Files\mysql ...
- MySQL Explain详解,分析语句为何运行慢
MySQL Explain详解 在日常工作中,我们会有时会开慢查询去记录一些执行时间比较久的SQL语句,找出这些SQL语句并不意味着完事了,些时我们常常用到explain这个命令来查看一个这些SQL语 ...
- 史上最简单MySQL教程详解(进阶篇)之存储过程(一)
史上最简单MySQL教程详解(进阶篇)之存储过程(一) 史上最简单MySQL教程详解(进阶篇)之存储过程(一) 什么是存储过程 存储过程的作用 如何使用存储过程 创建存储过程 DELIMITER改变分 ...
- 史上最简单MySQL教程详解(进阶篇)之存储引擎介绍及默认引擎设置
什么是存储引擎? MySQL存储引擎种类 MyISAM 引擎 InnoDB引擎 存储引擎操作 查看存储引擎 存储引擎的变更 修改默认引擎 什么是存储引擎? 与其他数据库例如Oracle 和SQL Se ...
- mysql 实例复制_MYSQL教程MySQL 复制详解及简单实例
<MysqL教程MysqL 复制详解及简单实例>要点: 本文介绍了MysqL教程MysqL 复制详解及简单实例,希望对您有用.如果有疑问,可以联系我们. MysqL 复制详解及简单实例 主 ...
最新文章
- linux nas解决方案_阿里产品总监:四大 Linux 支持的 NAS 解决方案
- .NET 和 Mono 的一点历史
- 你还在使用IE6浏览器么?
- 华为鸿蒙系统议论文素材,【图片】华为鸿蒙系统的厉害之处在于 你可能非用不可
!【手机吧】_百度贴吧...
- LKMs:Loadable Kernel Modules
- semaphore性能问题_SQL Server性能调整– RESOURCE_SEMAPHORE等待
- 海康威视4路播放封装----安卓开发
- 佛大计算机控制系统期末试卷,[设计]统考计算机模拟练习试题及答案基础知识...
- python自动生成字幕脚本_自动生成字幕软件?
- html给文字设置自己下载的字体
- 仿制苏宁易购—静态网页
- 机器学习——决策树(ID3)的实现
- Oracle 12C Sharding部署和测试
- unity build-in管线中的PBR材质Shader分析研究
- 王老六计算机,crc校验和累加和校验哪个好
- 身份证号码的正则验证
- 主成分分析(principal component analysis, PCA)公式
- 二分查找的魔鬼细节详解
- 企业网路神警上网行为监管系统
- java集合到线程的考试_成都汇智动力-Java SE考试编程题总结