基本语法:
select 字段列表 / * from 表名 [where 条件];
完整语法:
select [select 选项] 字段列表 [字段别名] / * from 数据源 [where 条件]
[group by 子句] [having 子句] [order by 子句] [limit 子句]
select 选项
select 选项:select对查出来的结果的处理方式
all:默认,保留所有的结果
distinct:去重,查出来的结果,将重复去除(所有字段相同)
字段别名
字段别名:当数据进行查询的时候,有时候名字并不一定就满足需求(多表查询的时候,会有同名字段),需要对字段名进行重命名:别名
语法:
字段名[as] 别名;
数据源
数据源:
1、数据的来源,关系型数据库的来源都是数据;
2、本质上只要保证数据类似二维表,最终都可以作为数据源
数据源分为多种:单表数据源,多表数据源,查询语句
单表数据源:select * from 表名
多表数据源:select * from 表名1,表名2 …;
从一张表中取出一条记录,去另外一张表中匹配所有记录,而且全部保留:(记录数和字段数),将这种结果成为: 笛卡尔积(交叉连接): 笛卡尔积没什么卵用, 所以应该尽量避免.
子查询:
数据的来源是一条查询语句(查询语句的结果的二维表)
select * from (select 语句)as 表名;
where子句
where子句:用来判断数据,筛选数据
where子句返回结果:0或者1,0代表false,1代表true
判断条件:
比较运算符:>,<,=,>=,<=,!=,<>(不等号),like,between and ,in / not in
逻辑运算符:&&(and),||(or),!(not)
where 原理:
1、where是唯一一个直接从磁盘获取数据的时候就开始判断的条件
2、从磁盘取出一条记录,开始进行判断
3、判断的结果如果成立保存到内存,如果失败直接放弃
条件查询1: 要求找出学生id为1或者3或者5的学生
条件查询2: 查出区间落在170,180身高之间的学生:
select * from my_student where height between 170 and 180
between 本身是闭区间,between左边的值必须小于或者等于右边的值
group by 语句
group by : 分组的意思,根据某个字段进行分组(相同的放一组,不同的分到不同的组)
根据性别分组
分组的意义:是为了统计数据(按组统计:按照分组字段进行数据统计)
SQL提供了一系列的统计函数
count():统计分组后的记录数:每一组有多少记录
max(): 统计每组中最大的值
min():统计每组中最小的值
avg();统计平均值
sum();统计和
条件查询3: 分组统计: 身高高矮,年龄平均和总年龄
count函数
可以用两个参数:*代表统计记录,字段名代表统计对应的字段(NUll 不统计)
分组会自动排序:
根据分组字段:默认升序
group by 字段[asc|desc];
对分组的结果然后合并之后的整个结果进行排序
多字段分组:
先根据一个字段分组,然后对分组后的结果再次按照其他字段进行分组
条件查询3: 分组统计数量:先男女,后年龄
有一个函数:可以对分组的结果中的某个字段进行字符串连接(保留该组所有的某个字段)
group_concat(字段);
回溯统计: with rollup:
任何一个分组后都会有一个小组, 最后都需要向上级分组进行汇报统计: 根据当前分组的字段. 这就是回溯统计: 回溯统计的时候会将分组字段置空.
多字段回溯:
考虑第一层分组会有此回溯: 第二次分组要看第一次分组的组数, 组数是多少,回溯就是多少,然后加上第一层回溯即可.
Having子句
Having子句: 与where子句一样: 进行条件判断的.
Where是针对磁盘数据进行判断: 进入到内存之后,会进行分组操作: 分组结果就需要having来处理.
Having能做where能做的几乎所有事情, 但是where却不能做having能做的很多事情.
1、分组统计的结果或者说统计函数都只有having能够使用.
2、Having能够使用字段别名: where不能: where是从磁盘取数据,而名字只可能是字段名: 别名是在字段进入到内存后才会产生.
– 求出所有班级人数大于等于2的学生人数
Order by子句
Order by: 排序,根据某个字段进行升序或者降序排序,依赖校对集
基本语法:
Order by 字段名 [asc|desc]; – asc是升序(默认的),desc是降序
排序可以进行多字段排序: 先根据某个字段进行排序, 然后排序好的内部,再按照某个数据进行再次排序:
Limit子句
Limit子句是一种限制结果的语句: 限制数量.
Limit有两种使用方式
方案1: 只用来限制长度(数据量): limit 数据量;
方案2: 限制起始位置,限制数量: limit 起始位置,长度;