1、 查询语句的介绍:

本篇主要介绍sql语句里的查询语句,这其中包括了查询语句中的子内容,也就是拓展的内容,这些内容代入到查询语句中将会有更多的反应。

2、 查询语句:

FROM命令:

	SELECT 字段1,字段2,字段3 FROM 表文件名
  1. 执行顺序:mysql共有7个查询命令,FROM命令永远是第一个执行的查询命令
  2. 执行作用:FROM命令相当于一个读取流,分则将硬盘上表文件加载到内存中生成一个【临时表】供后续查询命令使用

由于查询命令对临时表数据进行操作,因此查询命令执行时,不会修改表文件原有的数据

WHERE命令:

  1. 示例:
SELECT 字段1,字段2 FROM 表文件名 WHERE 字段2=
  1. 执行顺序:
    FROM–>WHERE–>SELECT
  2. WHERE作用:
    • 遍历临时表所有的数据和,每次得到一个数据和,根据数据和信息判断数据和是否需要被定位。
    • 在循环完毕后,WHERE命令将所有定位的数据行读取出来再内存中生成一个临时表进行保存

Group by 命令:

select * from 表文件名 group by 依据 
  1. 执行顺序
    FROM–>WHERE–>GROUP BY–>SELECT

  2. 书写顺序:
    SELECT 字段名,函数名,子查询
    ↓↓ FROM 表名称
    ↓↓ WHERE 定位数据行条件
    GROUP BY 分组字段

    如果同时出现WHERE与GROUP BY,那么GROUP BY应该在WHERE之后

  3. 执行原理:
    GROUP BY 执行时

    首先根据分组字段种类,将临时表中的数据行进行分类
    然后将具有相同特征的数据行读取出来保存到一个全新的临时表中

  4. 七各查询命令中,只有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 命令:

  • having的要求:通过统计临时表决定是否删除临时表
    select 字段名1,cunt(*) from 表文件名 group by 字段名1 having 依据
  1. 执行顺序:
    FROM–>WHERE–>GROUP BY–>【HAVING】–>SELECT

  2. 书写顺序:
    HAVING命令不能独立出现在查询语句,只能出现在GROUP BY后面

  3. 执行原理:
    HAVING命令在GROUP BY之后执行的。它负责将GROUP BY生成临时表中不满足条件的临时表从内存中删除掉

  4. 七个查询命令中,只有HAVING命令不会生成临时表,不但不生成,若条件不满足还会删除临时表

limit命令:

  • MySQL服务器中,表文件字段位置从1开始计算,表文件数据行位置从0开始计算
  1. 执行顺序:
    FROM --> WHERE --> GROUP BY --> HAVING --> SELECT --> ORDER BY --> LIMIT

  2. 书写顺序:
    SELECT 字段,函数,子查询
    FROM 表
    WHERE 定位数据行条件【逻辑运算/特殊运算符】
    GROUP BY 分组字段,多个分组字段以 ‘,’ 号隔开
    HAVING 对临时表进行删除判断条件
    ORDER BY 排序字段
    LIMIT 起始行位置,从起始行开始向下截取的行数

  3. 执行原理:
    从临时表中指定位置的数据行开始,向下截取指定数量的数据行。
    将截取出来的数据行保存到一个全新的临时表

SELECT命令:

  • 将经过了其他查询语句的结果临时表返回

3、 聚合函数:

用于对临时表指定字符按下【所有内容】进行统计的函数

  • 包含方法为: 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不需要,这点需知。

4、 子查询:

子查询的意思,就是在一个查询中嵌套一个或多个查询而已,至于查询出来的值其实得看外层查询中所需要的值。

子查询出现的地点可以是from命令中,也可以是having、where命令,这是不限定的,因为这些命令需要的始终是一个或某个值,而子查询通过筛选可以放出多个或一个值,这样就可以通过子查询来连接外层查询语句进行筛选。

举个例子:

SELECT
	*
FROMWHERE
	筛选字段IN (
		SELECT
			子查询筛选字段
		FROM
			子查询表
	)

该例子中使用where命令将筛选字段与子查询查询出来字段进行比对,或是筛选字段中包含了子查询查询出来的字段,那么则通过where命令进行筛选。

5、 连接查询:

1.需要被帮助表:
2.不要被帮助表:

执行原理:

  • 如果【需要被帮助表】中某行数据与【不需要被帮助表】所有的数据行都无法拼接为合法数据
  • 此时依然将这个数据作为一个独立的数据行存入到新的临时表

命令格式:

  1. 左外连接过滤方案/左外连接查询
    FROM 需要被帮助的表 LEFT JOIN 不需要被帮助的表
    ON 合法数据行定位条件

  2. 右外连接过滤方案/右外连接查询
    FROM 不需要被帮助的表 RIGHT JOIN 需要被帮助的表
    ON 合法数据行定位条件

  3. 内连接过滤方案/右外连接查询
    FROM 不需要被帮助的表 INNER JOIN 需要被帮助的表
    ON 合法数据行定位条件

在某些情况下连接查询是可以替代子查询的,因为子查询多了后会让sql命令变成难以阅读,所以能够使用连接查询尽力选择连接查询。至少我是这么认为的。

总结:

查询语句在sql中占了挺大一部分篇幅,因为在数据库中使用查询语句的次数远多于更新与删除命令。而查询语句比起其他语句要更加的复杂,可因为sql是数据库不可或缺的一部分,所以即使不懂,也必须得弄懂,以上。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐