赞
踩
本篇主要介绍sql语句里的查询语句,这其中包括了查询语句中的子内容,也就是拓展的内容,这些内容代入到查询语句中将会有更多的反应。
FROM命令:
SELECT 字段1,字段2,字段3 FROM 表文件名
由于查询命令对临时表数据进行操作,因此查询命令执行时,不会修改表文件原有的数据
WHERE命令:
SELECT 字段1,字段2 FROM 表文件名 WHERE 字段2=值
Group by 命令:
select * from 表文件名 group by 依据
执行顺序
FROM–>WHERE–>GROUP BY–>SELECT
书写顺序:
SELECT 字段名,函数名,子查询
↓↓ FROM 表名称
↓↓ WHERE 定位数据行条件
GROUP BY 分组字段
如果同时出现WHERE与GROUP BY,那么GROUP BY应该在WHERE之后
执行原理:
GROUP BY 执行时
首先根据分组字段种类,将临时表中的数据行进行分类
然后将具有相同特征的数据行读取出来保存到一个全新的临时表中
七各查询命令中,只有GROUP BY有机会再执行完毕后,一次生成多个临时表
group by命令其主要目的是对字段数据进行分组,分组可以是单个字段,也可以是多个字段。
1.多字段分组时,分组字段出现顺序对于最终查询结果是没有任何影响的。
GROUP BY 字段1,字段2 于 GROUP BY 字段2,字段1
2.多字段分组时,GROUP BY一次只能葛奴一个分组字段进行分组
GROUP BY 字段1,字段2 —— 该语句需要执行两次,一次分字段1,一次分字段2
3.多字段分组时,从第二个分组字段开始,操作的是上一个分组字段生成的临时表
GROUP BY 字段1,字段2 —— 当执行GROUP BY 字段2时,操作的临时表由GROUP BY 字段1生成的
order by 命令:
- sql命令的查询,默认是升序排序
select 字段名1,字段名2,字段名3 from 表文件名 order by 排序依据 desc(降序)
一般在查询语句的末尾使用
having 命令:
select 字段名1,cunt(*) from 表文件名 group by 字段名1 having 依据
执行顺序:
FROM–>WHERE–>GROUP BY–>【HAVING】–>SELECT
书写顺序:
HAVING命令不能独立出现在查询语句,只能出现在GROUP BY后面
执行原理:
HAVING命令在GROUP BY之后执行的。它负责将GROUP BY生成临时表中不满足条件的临时表从内存中删除掉
七个查询命令中,只有HAVING命令不会生成临时表,不但不生成,若条件不满足还会删除临时表
limit命令:
执行顺序:
FROM --> WHERE --> GROUP BY --> HAVING --> SELECT --> ORDER BY --> LIMIT
书写顺序:
SELECT 字段,函数,子查询
FROM 表
WHERE 定位数据行条件【逻辑运算/特殊运算符】
GROUP BY 分组字段,多个分组字段以 ‘,’ 号隔开
HAVING 对临时表进行删除判断条件
ORDER BY 排序字段
LIMIT 起始行位置,从起始行开始向下截取的行数
执行原理:
从临时表中指定位置的数据行开始,向下截取指定数量的数据行。
将截取出来的数据行保存到一个全新的临时表
SELECT命令:
用于对临时表指定字符按下【所有内容】进行统计的函数
包含方法为: max(字段)、min(字段)、sum(字段)、avg(字段)、count(字段)
1、max(字段): 返回指定字段下最大值
select max(字段名) from 表文件名 where 字段名 = 值
2、max(字段): 返回指定字段下最小值
select min(字段名) from 表文件名 where 字段名 = 值
3、sum(字段): 返回指定字段下所有数据相加之和
select sum(字段名) from 表文件名 where 字段名 = 值
4、avg(字段): 返回指定字段下所有的数据平均值
select avg(字段名) from 表文件名 where 字段名 = 值
5、count(字段): 返回指定字段下内容不等于null的数据个数
select avg(字段名) from 表文件名
count(*) //统计临时表下所有数据行个数,不考虑数据是否存在null
注:聚合函数,需要通过Group by进行分组后才可以使用,但count不需要,这点需知。
子查询的意思,就是在一个查询中嵌套一个或多个查询而已,至于查询出来的值其实得看外层查询中所需要的值。
子查询出现的地点可以是from命令中,也可以是having、where命令,这是不限定的,因为这些命令需要的始终是一个或某个值,而子查询通过筛选可以放出多个或一个值,这样就可以通过子查询来连接外层查询语句进行筛选。
举个例子:
SELECT
*
FROM
表
WHERE
筛选字段IN (
SELECT
子查询筛选字段
FROM
子查询表
)
该例子中使用where命令将筛选字段与子查询查询出来字段进行比对,或是筛选字段中包含了子查询查询出来的字段,那么则通过where命令进行筛选。
1.需要被帮助表:
2.不要被帮助表:
执行原理:
命令格式:
左外连接过滤方案/左外连接查询
FROM 需要被帮助的表 LEFT JOIN 不需要被帮助的表
ON 合法数据行定位条件
右外连接过滤方案/右外连接查询
FROM 不需要被帮助的表 RIGHT JOIN 需要被帮助的表
ON 合法数据行定位条件
内连接过滤方案/右外连接查询
FROM 不需要被帮助的表 INNER JOIN 需要被帮助的表
ON 合法数据行定位条件
在某些情况下连接查询是可以替代子查询的,因为子查询多了后会让sql命令变成难以阅读,所以能够使用连接查询尽力选择连接查询。至少我是这么认为的。
查询语句在sql中占了挺大一部分篇幅,因为在数据库中使用查询语句的次数远多于更新与删除命令。而查询语句比起其他语句要更加的复杂,可因为sql是数据库不可或缺的一部分,所以即使不懂,也必须得弄懂,以上。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。