MySQL基础第二篇

1.7入门查询

—基本查询

—select 列名 from 表名

select  name  from  student

—列的顺序可以自己调整

select address ,id,age,name,from student

—可以使用 * 作为列名 代表所有列都查询,但是不建议使用*性能低 会造成索引丢失

select * from student

—别名操作

select id as 编号 ,name as 姓名  from student

—别名的 as  可以省略

select id  编号  ,name 名字    from student

1.3去重查询

查询所有学生的地址

select  distinct  address  from student

1.4where条件

where 哪里

—逻辑表达式

select * from student where id=5

select * from student where id>=5

select* from student where id !=5

—多条件查询 and并且   or或者

—查询编号5以下并且年龄大于30岁

select * from student where id<5 and age>30

—查询地址在北京并且年龄小于20

select * from student where address='北京' and age<20

- 查询年龄大于30或者是德玛西亚居民

select * from student where age>30 or address='德玛西亚'

-- 查询年龄是20-40岁之间的

select * from student where age>20 and age<40

select *from student where age between 20 and 40

-- 查询年龄是 18 20 23 26 27 33 的学生

select * from student where age=18 or age=20 or age=23 or age=26 or age=27 or age=33

select * from student where age in (18,20,23,26,27,33)

-- 模糊查询 like 以及通配符% _ 使用

-- 只是用like 不结合通配符代表等于

select * from student where name like '张三'

-- _下划线代表匹配一位

select * from student where name like '张_'

select * from student where name like '张__'

-- %百分号代表匹配多位

select * from student where name like '张%'

select * from student where name like '%张%'1.5排序查询order by

-- 我们可以自己指定查询顺序 order by 列名 规则 asc升序

select * from student order by age asc

-- asc升序可以不写 也就是说 默认就是升序

select * from student order by age

-- desc降序规则

select * from srudent order by age desc

-- 有的时候 我们需要指定第二排序规则

select * from student order by age desc,id desc

1.6分页查询

-- 分页查询 limit 只写一个数字代表从索引0开始查询N个

select * from student limit 3

select * from student limit 3,3

使用页面数与索引进行换算

查询第一页 每页五条数据   limit 0,5

查询第二页 每页五条数据   limit 5,5

查询第三页 每页五条数据   limit 10,5

查询第四页 每页五条数据   limit 15,5

查询第五页 每页五条数据   limit 20,5

1.7聚合函数查询

-- 所有学生的平均年龄

select avg(age) from student

-- 所有学生的最大年龄

select max(age) from student

-- 所有学生的总和年龄

select sum(age) from student

-- count(*) count(id) count(1) 学生数量

select count(*) from student

1.8分组查询

-- group by 列名 会将当前列数据一样的视为一组

select address ,count(*) from student group by address

-- 查询每个年龄学生数量

select age,count(*)from student group by age

-- 查询每个地区的最大年龄

select address, max(age) from student group by address

-- 分组查询还可以添加一个分组条件 having

-- 查询人数超过2个地区的平均年龄

select address,avg(age) from student group by address having count(*)>2

-- 查询平均年龄在28+地区的人数

select address,count(*) from student group by address having avg(age)>28

1.10SQL语句的执行顺序

1.from 执行笛卡尔积

FROM 才是 SQL 语句执行的第一步,并非 SELECT 。对FROM子句中的前两个表执行笛卡尔积(交叉联 接),生成虚拟表VT1,获取不同数据源的数据集。

FROM子句执行顺序为从后往前、从右到左,FROM 子句中写在最后的表(基础表 driving table)将被最 先处理,即最后的表为驱动表,当FROM 子句中包含多个表的情况下,我们需要选择数据最少的表作为基础 表。

2. ON 应用ON过滤器

对虚拟表VT1 应用ON筛选器,ON 中的逻辑表达式将应用到虚拟表 VT1中的各个行,筛选出满足ON 逻辑 表达式的行,生成虚拟表 VT2 。

3.JOIN 添加外部行

如果指定了OUTER JOIN保留表中未找到匹配的行将作为外部行添加到虚拟表 VT2,生成虚拟表 VT3。保 留表如下:

LEFT OUTER JOIN把左表记为保留表

RIGHT OUTER JOIN把右表记为保留表

FULL OUTER JOIN把左右表都作为保留表

在虚拟表 VT2表的基础上添加保留表中被过滤条件过滤掉的数据,非保留表中的数据被赋予NULL值,最后 生成虚拟表 VT3。

如果FROM子句包含两个以上的表,则对上一个联接生成的结果表和下一个表重复执行步骤1~3,直到处理完 所有的表为止。

4. WHERE 应用WEHRE过滤器

对虚拟表 VT3应用WHERE筛选器。根据指定的条件对数据进行筛选,并把满足的数据插入虚拟表 VT4。

由于数据还没有分组,因此现在还不能在WHERE过滤器中使用聚合函数对分组统计的过滤。 同时,由于还没有进行列的选取操作,因此在SELECT中使用列的别名也是不被允许的

5.GROUP BY 分组

按GROUP BY子句中的列/列表将虚拟表 VT4中的行唯一的值组合成为一组,生成虚拟表VT5。如果应用了 GROUP BY,那么后面的所有步骤都只能得到的虚拟表VT5的列或者是聚合函数(count、sum、avg等)。 原因在于最终的结果集中只为每个组包含一行。

同时,从这一步开始,后面的语句中都可以使用SELECT中的别名。

6.AGG_FUNC 计算聚合函数

计算 max 等聚合函数。SQL Aggregate 函数计算从列中取得的值,返回一个单一的值。常用的 Aggregate 函数包涵以下几种:

AVG:返回平均值

COUNT:返回行数

FIRST:返回第一个记录的值

LAST:返回最后一个记录的值

MAX: 返回最大值

MIN:返回最小值

SUM: 返回总和

7.WITH 应用ROLLUP或CUBE

对虚拟表 VT5应用ROLLUP或CUBE选项,生成虚拟表 VT6。

CUBE 和 ROLLUP 区别如下:

CUBE 生成的结果数据集显示了所选列中值的所有组合的聚合

ROLLUP 生成的结果数据集显示了所选列中值的某一层次结构的聚合。

8.HAVING 应用HAVING过滤器

对虚拟表VT6应用HAVING筛选器。根据指定的条件对数据进行筛选,并把满足的数据插入虚拟表VT7。

HAVING 语句在SQL中的主要作用与WHERE语句作用是相同的,但是HAVING是过滤聚合值,在 SQL 中增 加 HAVING 子句原因就是,WHERE 关键字无法与聚合函数一起使用,HAVING子句主要和GROUP BY子句 配合使用。

9.SELECT 选出指定列

将虚拟表 VT7中的在SELECT中出现的列筛选出来,并对字段进行处理,计算SELECT子句中的表达式,产 生虚拟表 VT8。

10.DISTINCT 行去重

将重复的行从虚拟表 VT8中移除,产生虚拟表 VT9。DISTINCT用来删除重复行,只保留唯一的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值