Mysql数据库进阶操作

as(起别名)

1.as:给字段起别名,在使用SQL语句显示结果的时候,往往可读性比较差,此时我们使用as给字段起别名。(神奇的是,as可以省略)
2.as:给表名起别名(-- 可以通过 as 给表起别名 select s.id,s.name,s.gender from students as s;)

distinct(消除重复)

distinct:性别显示去除重复(select distinct gender from 表名)

where条件(使用where语句进行查找,结果为True的会显示在结果中)

where后面支持多种运算符,进行条件的处理
1.比较运算符(>,<,=,>=,<=,不等于(!=或<>))
2.逻辑运算符(and,or,not)
3.模糊查询(like(模糊查询),%表示任意多个任意字符,_表示一个任意字符)
4.范围查询:连续范围查询(between…and…)和非连续范围查询(in(1,2,5))
5.空判断:is null 表示字段的记录为空的数据

排序

select * from 表名 order by 列1 asc|desc [,列2 asc|desc,...]
语法说明:

将行数据按照列1进行排序,如果某些行 列1 的值相同时,则按照 列2 排序,以此类推
asc从小到大排列,即升序(默认是按照升序排序)
desc从大到小排序,即降序
默认按照列值从小到大排列(即asc关键字)

分页

select * from 表名 limit start=0,count
说明:
从start开始,获取count条数据
start默认值为0
也就是当用户需要获取数据的前n条的时候可以直接写上 xxx limit n;

聚合函数(aggregation function)又称组函数

聚合函数一般情况下是对当前所在表的数据进行一个统计,不过在统计的时候默认忽略值为NULL的数据,必须使用IFNULL函数对NULL值进行转换,并且不允许嵌套使用。
1.count:select count(*)from 表名;
2.max(lie):表示求此列的最大值
3.min(列):表示求此列的最小值
4.sum(列):表示求此列的和
5.avg(列):表示求此列的平均值

分组(将一个数据集划分成一个小区域,然后针对若干个小区域进行数据处理)

·1.group by:将查询的结果按照一个或者多个字段进行分组,字段值相同的为同一组。
	需要注意的是Mysql数据库只能表示二维表结构,也就说明只能一行对应一列数据集,因此错误的语法(select * from 表名 group by 字段),分组之后一组中还有多组数据,是Mysql不被允许的。
2.group_concat(字段) + group by :可以通过这种方式查看分组的结果,使用group_concat放置一个分组中字段的集合。用逗号隔开。
3.group by + 聚合函数  可以对分组后的数据进行一些聚合函数来进行其余统计
4.group by +having ():having用来过滤分组数据,和where类似,但是只能用于group by。
5.group by + with rollup:在最后新增一行,来记录表中该字段对应的操作结果,一般都是汇总结果。

连接(当查询的结果来源多张表时,需要将多张表连接成一个大的数据集进行汇总显示)

查询的模式主要有三种:内连接,左连接和右连接。
# 对于外连接 outer关键字可以省略 
select * from 表1 inner或left或right join 表2 on 表1.列 运算符 表2.列
此处需要注意的是默认不用on条件的是笛卡尔积的结果。
同时可以给表名起别名(as)可以使得代码更方便。

自连接

1.导入sql语句:source 文件名.sql
例1:查询省的名称为“山西省”的所有城市(实现省级联动)
select * from areas as city
inner join areas as province on city.pid=province.aid
where province.atitle='山西省';
注意:一定要给表其别名(因为是自连接,同一张表名)

子查询

子查询是指在一个select语句中插入了另一个select语句。
分类:
	1.标量子查询(子查询返回的结果是一个数据:一列一行)
	2.列子查询(返回的结果是一列)
	3.行子查询(返回的结果是一行)
	例子1.查询班级学生的平均身高
select * from students where age > (select avg(age) from students);
	例子2:
查询还有学生在班的所有班级名字
找出学生表中所有的班级 id
找出班级表中对应的名字
select name from classes where id in (select cls_id from students);
	例子3:
需求: 查找班级年龄最大,身高最高的学生
行元素: 将多个字段合成一个行元素,在行级子查询中会使用到行元素
select * from students where (height,age) = (select max(height),max(age) from students);

三范式

第一范式:强调字段的原子性,即列不能拆分为其他字段了。
第二范式:首先必须是一范式,一是一个表必须有一个主键;而是其余的非主键的字段必须依赖于主键,而不能只依赖主键的一部分。
第三范式:首先必须是二范式,非主键字段必须直接依赖主键,不能存在传递依赖。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值