当前位置:   article > 正文

Mysql -- DQL详解_mysql dql

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}];		#指定查询的记录从哪条到哪条
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

三、子句执行顺序

  • 查询时,需要基于表的操作,所以第一步先执行 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 '_三_';
  • 1
  • 2
  • 3
  • 4

五、多表查询

多表查询分为两种方式分别为:内连接(inner join)和外连接 (out join)
外连接又分为两种:左外连接(left join) 和右外连接(right join)

区别:

在这里插入图片描述

5.1、内连接

语法:

# 这里inner join 也可以写成join  join默认就为内连接
select 表一.字段,表二.字段...
from 表一
inner join 表二 on 表一.字段=表二.字段
  • 1
  • 2
  • 3
  • 4

例如:

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
  • 1
  • 2
  • 3
  • 4

5.2、外连接

5.2.1、左外连接

以左表为基础,将右表拼接

语法:

select 表一.字段,表二.字段...
from 表一
left join 表二 on 表一.字段=表二.字段
  • 1
  • 2
  • 3

例如:

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
  • 1
  • 2
  • 3

5.2.2、右外连接

以右表为基础,将左表拼接

语法:

select 表一.字段,表二.字段...
from 表一
right join 表二 on 表一.字段=表二.字段
  • 1
  • 2
  • 3

例如:

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
  • 1
  • 2
  • 3

5.3、笛卡尔积

笛卡尔积: 简单的排列组合
在mysql中会将第一个表的数据与第二个表的数据每个都连起来,若第一个表n条数据 第二个表m条数据,那么获得的数据为 n*m 条数据
这样数据会非常大,查询起来会及其低效,所以慎用。

select * 
from student,sc;
  • 1
  • 2

六、order by 排序

指定查询记录按一个或多个条件进行排序
关键字:

desc 降序
asc 升序

语法:

# 升序
select * fromorder by 字段 asc;
#降序
select * fromorder by 字段 desc;
  • 1
  • 2
  • 3
  • 4

如:

# 将课程降序升序
select * from sc order by course;
# 若课程一样按照成绩降序
select * from sc order by course asc , score desc;
  • 1
  • 2
  • 3
  • 4

七、limit 分页

  • 第一个参数:指定第一个返回记录行的偏移量(即从哪一行开始返回),注意:初始行的偏移量为0。
  • 第二个参数:返回具体行数。
# 返回前m条记录
select * fromlimit m;
# 返回从第n条记录后的m条记录
select * fromlimit n,m;

# 若每页为m条记录 从第a页查询就是
select * fromlimit (a-1)*m,m;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

例子:

#返回前五条记录
select * from result limit 5;
# 返回6-10条记录
select * from result limit 5,5;
  • 1
  • 2
  • 3
  • 4

八、group by 分组

  • 对所有的数据进行分组统计
  • 分组的依据字段可以有多个,并依次分组
  • 与having结合使用,进行分组后的数据筛选
  • 一般group by 与聚合函数结合使用
    语法:
select 字段,聚合函数(字段) fromgroup by 字段 having 条件;
  • 1

例如:

# 查询成绩表 以学科id分组 查询每门学科的平均值 条件为平均值大于90
select subjectno ,avg(studentresult) avg_sorce 
from result 
group by subjectno
having avg_sorce > 90;
  • 1
  • 2
  • 3
  • 4
  • 5
本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/189177
推荐阅读
相关标签
  

闽ICP备14008679号