赞
踩
在之前的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
用于检索数据表中符合条件的记录
搜索条件可以由一个或多个逻辑表达式组成,结果一般为真或假
搜索条件一般由 逻辑操作符、比较操作符组成
多个条件查询使用 and 连接
逻辑操作符:
比较操作符:
like 有两个占位符:
通配符 %:匹配0或0个以上的字符。
占位符 _: 匹配一个字符。如:
# 这里的只要条件包含三就满足要求 前面和后面任意字符
select * from student where name like '%三%';
# 这里的前后都有且只能有一个字符才满足条件
select * from student where name like '_三_';
多表查询分为两种方式分别为:内连接(inner join)和外连接 (out join)
外连接又分为两种:左外连接(left join) 和右外连接(right join)
语法:
# 这里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
以左表为基础,将右表拼接
语法:
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
以右表为基础,将左表拼接
语法:
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
笛卡尔积: 简单的排列组合
在mysql中会将第一个表的数据与第二个表的数据每个都连起来,若第一个表n条数据 第二个表m条数据,那么获得的数据为 n*m 条数据
这样数据会非常大,查询起来会及其低效,所以慎用。
select *
from student,sc;
指定查询记录按一个或多个条件进行排序
关键字: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;
- 第一个参数:指定第一个返回记录行的偏移量(即从哪一行开始返回),注意:初始行的偏移量为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;
- 对所有的数据进行分组统计
- 分组的依据字段可以有多个,并依次分组
- 与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;
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。