美文网首页
MySQL-9复杂操作-查询

MySQL-9复杂操作-查询

作者: 金克拉拉拉拉 | 来源:发表于2017-12-14 17:02 被阅读0次

    1.数据查询

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

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

    --1.select选项 :select 对产出来的结果的处理方式

            all(默认),保留所有的结果 select * from 表名 === select all * from 表名

            destinct,去重 查出来的结果,将重复给去除(只发生在所有字段都相同的情况下)

    distinct 的使用

    2.字段别名 :当数据进行查询时,有时候名字并不一定满足需求(多表查询是,会有同名字段),需要对字段名进行重命名 :既别名

    --1.as  :字段名 as 别名

    --2.字段名 别名

    添加查询时添加别名的两种方式

    3.数据源

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

    数据源 分为多种,既单表数据源、多表数据源、查询语句

    --1.单表数据源:select * from 表名

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

    表1 my_default 7条数据 表2 king_class 2条数据

    select * from 表1,表2;

    多表数据源 14条数据

    从一张表中 取出一条记录,去另外一张表中匹配所有记录,且全部保留:(记录数和字段数),将这种结果 称之为笛卡尔集 既一种交叉连接 

    笛卡尔集一般并没有什么卵用,耗费相当多资源 ,需要尽量避免出现笛卡尔集

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

    select * from (select 语句) as 表名 ; 相当于将括号内select 语句 的查询结果起一个别名(as 表名)

    子查询1 子查询2

    4.where 子句 

    where 子句用来判断数据,筛选数据

    where 子句返回结果 0或者1 false or true

                基本运算符:> ,< ,>= 等等

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

                模糊查询 :like , %表示任意多个字符 ,_表示一个任意字符

                select * from students where name like '黄%'  (表示查询姓黄的学生)

                select * from students where name like '黄_'  (查询姓黄并且名字是一个字的学生)

                select * from students where name like “黄%” or name like "%静" (查询姓黄或叫静的学生)

                范围查询:between .......and..........(在...区间)(当存在多个and 时 ,将优先匹配between and),in/not in  

    where 是唯一一个直接从磁盘获取数据的时候就开始判断的条件,从磁盘取出一条记录,则开始进行where 判断,判断结果成立则加载进内存,如果不成立则放弃(从源头保证尽可能避免的无效数据占用内存);而其他的判断,都是后期对内存进行的判断

    --1.集合 in( )

    利用多个或找出符合条件的数据 利用集合in ( ) 完成查找

    --2.between A and B (在 A 到 B 之间)

    其中 between 本身是闭区间 且 左边的值必须小于右边的值

    在某范围区间 的实现

    5.Group by 子句 (根据某个字段进行分组,相同的放一组,不同的放不同的组)

    Group by 只会将同类型数据进行分组,且只展示该组第一个数据 

    在新MySQL 中 group by 字段 必须被 select 约束 

    按照字段分组,表示此字段相同的数据会被放在一个组中

    分组后,只能查询出相同的数据列,对于有差异的数据列无法出现在结果集中

    可以对分组后的数据进行统计,做聚合运算

    --1.基础语法

    select 列1,列2,聚合.......from 表名 group by 列1,列2,列3.。。

    select male as male ,count(*) from my_stu group by male; 基础使用1 基础使用2 group by 约束字段 male,age 并未被 select 严格声明 导致报错 同理报错2

    --2.having  对分组的结果进行筛选

    select male as male,count(*) from my_stu group by male having male = 0; select male as male,count(*) from my_stu group by having count(*)>2; 约束别名


    where 和 having 的区别

    where 对 from 后面指定的表进行筛选 ,属于筛选原始数据

    having 对group by  的结果进行筛选


    --3.分组的意义是为了统计数据(按照分组字段 进行数据统计)

    SQL 提供了一系列的统计函数:

    count () :统计分组后的记录数

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

    select count(*) from my_stu;

    max():统计最大值

    min ():最小值

    avg():平均值

    sum():和

    使用示例1 使用示例2

    --4.分组的排序

    group by 字段 [asc/desc] 分组 会自动排序,根据分组字段, 默认升序asc ,需要降序desc需要声明出

    对分组排序的结果 合并之后的整体结果进行排序  而不是对于分组内部的数据进行排序

    --5. 多字段分组 ,先班级,后男女

    当前表所有字段 其中主键id为逻辑主键 子增长

    查询每个班级 对应性别下有多少人 先按照班级排序 后按照性别排序

    select class_id,male,count(*) from my_stu group by class_id,male;

    以班级为条件 查询性别 总数,并以先班级后性别排序 以班级id为条件查询每班性别总数,并以先性别 后 班级排序

    --6.group_concat() 函数

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

    group_concat() 函数的使用 group_concat 其他两种使用方法

    --7.回溯统计 with rollup

    任何一个分组后 都会有一个小组 , 最后都需要向上级分组进行一次汇报统计:(根据当前分组的字段)

    这就是回溯统计:回溯统计时,会将分组字段至空

    单字段分组 回溯统计  

    既 查询每一个班级,然后按照班级排序 完成后进行一次回溯

    单字段分组 回溯统计 

    多字段分组 回溯统计

    既 先按照班级分组 班级又按照性别分组 ------->既性别会按照班级统计一次( x3 ),而班级会单独统计一次,

    既:第一层分组 会有一次回溯 ,第二次分组 需要考虑 上一层分组的组数  。。。。。。。。。。直到最后一层分组

    多字段分组 回溯统计

    6.order by 子句

    order by 排序 ,根据某个字段进行升序或者降序排序,依赖校对集(大小写等)

    基本语法:

    order by 字段1 [asc/desc],字段2[asc/desc].............. 其中 asc 是升序(默认操作) desc是降序

    order by 基本使用

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

    多字段排序,先按照class_id 升序排列 再按照 male 降序排列  都按照升序排列 班级降序排列, male 升序排列

    7.limit子句 

    是一种限制结果的子句:可以用来限制数量 多用于分页

    way1:只用来限制数据量 limit 数据量

    select * from my_stu limit 2;

    way2:限制起始位置 & 限制长度 多用于分页 既从指定的位置开始 向后找多少条数据

    select * from my_stu limit 2,2;

    两个参数分别对应偏移量和长度

    相关文章

      网友评论

          本文标题:MySQL-9复杂操作-查询

          本文链接:https://www.haomeiwen.com/subject/mchkwxtx.html