查询数据

查询数据

基本语法
select 字段列表/* from 表名 [where条件];

完整语法

select [select选项] 字段列表[字段别名]/* from 数据源 [where条件子句] [group by子句] [having子句] [order by子句] [limit子句];

Select选项

select选项:select对查出来的结果的处理方式

all:默认的,保留所有的结果

distinct:去重,将查询结果中重复的数据去除(所有字段都相同视为重复)

 

字段别名

字段别名:当数据进行查询出来的时候,有时候名字并不一定就满足需求(多表查询的时候,会有同名字段),需要对字段进行重命名,即别名。

语法

字段名 [as] 别名;

 

数据源

数据源:数据的来源,关系型数据库的来源都是数据表,本质上只要保证数据类似二维表,最终都可以作为数据源。

 

数据源分为多种:单表数据源,多表数据源。查询语句。

 

单表数据源:select * from 表名;

 

多表数据源:select * from 表名1,表名2...;

 

从一张表中取出一条记录,去另外一张表中匹配所有记录,而且全部保留(记录数和字段数),将这种结果称之为:笛卡尔积(交叉连接)。笛卡尔积没什么卵用,所以应该尽量避免。

 

子查询:数据的来源是一条查询语句(查询语句的结果是二维表)

select * from (select 语句) as 表名;

 

where子句

Where子句:用来判断数据,筛选数据。

Where子句返回结果:0或者10代表false1代表true

 

判断条件:

比较运算符:><>=<=!=<>=likebetween andin/not in

逻辑运算符:&&(and)||(or)!(not)

 

where原理:where是唯一一个直接从磁盘获取数据的时候就开始判断的条件。从磁盘取出一条记录,开始进行where判断,判断的结果如果成立,保存到内存;如果失败,直接放弃。

 

 

group by子句

group by:分组的意思,根据某个字段进行分组(相同的放一组,不同的分到不同的组)

 

基本语法:group by 字段名;

 

分组的意思:是为了统计数据(按组统计:按分组字段进行数据统计)。

SQL提供了一系列统计函数:(分组一般就会用到下面的聚合函数)

Count():统计分组后的记录数,每一组有多少记录

Max():统计每组中最大的值

Min():统计每组中最小的值

Avg():统计每组中的平均值

Sum():统计每组中的和

 

Count函数:里面可以使用两种参数:*代表统计记录,字段名代表统计对应的字段(Null不统计)。

 

分组会自动排序:根据分组字段:默认升序。

group by 字段 [asc|desc]--对分组的结果合并之后的整个结果进行排序

 

多字段分组:先根据一个字段进行分组,然后对分组后的结果再次按照其他字段进行分组。

 

有一个函数:可以对分组的结果中的某个字段进行字符串连接(保留该组所有的某个字段):

group_concat();

 

回溯统计:with rollup。任何一个分组后都会有一个小组,最后都需要向上级分组进行汇报统计,根据当前分组的字段。这就是回溯统计。回溯统计的时候会将分组字段置空。

 

多字段回溯:考虑第一层分组会有此回溯,第二次分组要看第一次分组的组数,组数是多少,回溯就是多少,然后加上第一层回溯即可。

having子句

having子句:与where子句一样,进行条件判断的。

 

where是针对磁盘数据进行判断,进入到内存之后,会进行分组操作,分组结果就需要having来处理。

 

Having 能做where能做的几乎所有事情,但是where却不能做having能做的很多事情。

 

1. 分组统计的结果或者说统计函数都只有having能够使用。

 

2. having能够使用字段别名,where不能,因为where是从磁盘中读取数据,而名字只可能是字段名,别名是在字段进入到内存后才会产生。

 

Order by子句

Order by:排序,根据某个字段进行升序或者降序排序,依赖校对集。

 

使用基本语法

Order by 字段名 [asc|desc]; --asc是升序(默认的),desc是降序

 

 

注意:分组和排序不能一概而论,分组是为了统计,排序是为了让数据有顺序。

 

排序可以进行多字段排序,先根据某个字段进行排序,然后排序好的内部,再按照某个数据进行再次排序。

 

 

limit子句

limit子句是一种限制结果的语句:限制数量。

 

limit有两种使用方式:

 

方案1:只用来限制长度(数据量)。limit 数据量;

 

方案2:限制起始位置,限制数量。limit 起始位置,长度;

 

limit方案2,主要用来实现数据的分页:为用户节省时间,提交服务器的响应效率,减少资源的浪费。

对于用户来讲:可以点击的分页按钮:1,2,3,4

对于服务器来讲:根据用户选择的页码来获取不同的数据:limit offset,length;

 

length:每页显示的数据量:基本不变

offsetoffset =(页码-1) *每页显示量

 

 

猜你喜欢

转载自blog.csdn.net/lz1170063911/article/details/80508575