目录
数据库 高阶语句
使用select 语句,用order by来对进行排序
区间判断查询和去重查询
如何对结果进行分组查询group by语句
limit 限制输出的结果记录,查看表中的指定行
通配符
设置别名:alias 简写就是 as
使用select 语句,用order by来对进行排序
数据库的权限一般是很小的,我们在工作使用最多的场景是查
id int(4) primary key,
name varchar(10) not null,
score decimal(5,2),
address varchar(20),
sex char(3) not NULL
);
select * from info;
使用select 语句,用order by来对进行排序
ASC
#升序排列,默认就是升序,可以不加
desc
#降序排列,需要添加
格式 举例
select id,name from info order by id;
#升序查看id那一列
select id,name from info order by id desc;
#降序查看id那一列
select id,name,score from info order by name desc;
#最好用数据排序比较合适,但不绝对
order by 结合where 条件过滤
select name,score from info where address='南京西路' order by score desc;
#根据名字,成绩查询地址那一列是南京西路,降序过滤,只有第一个参数出现相同值时,第二个才会按照要求排序
#举例:查id姓名成绩,根据性别都是女,按照id进行降序排列
select id,name,score from info where sex='女' order by id desc;
区间判断查询和去重查询
AND / or
#且 或
select * from info where score > 70 and score <=90;
#例 查询score 列 大于70 且 小于等于90 的数据
举例
#大于80或者小于90
select * from info where score > 80 AND score <90;
#查询score列大于80且小于90的数据
select * from info where score > 80 or score <90;
#大于80或小于90
嵌套条件
select * from info where score > 70 and ( score >75 and score <90 );
#大于70且大于75且小于90
select * from info where score > 70 or ( score >75 and score <90 );
#大于70或大于75且小于90
#嵌套条件,满足性别是男,然后进行筛选成绩 80-90
select * from info where sex='男' and (score >80 and score <90);
#去重查询
select distinct address from info;
select distinct sex from info;
#根据地址address去重,然后过滤成绩=90且性别是男
select distinct address from info where sex='男' and score =90;
如何对结果进行分组查询group by语句
对结果进行分组查询group by语句,一般是结合聚合函数一块使用
count() 统计有多少行
sum()列的值相加,求和
avg() 列的值求平均数
max() 过滤出列的最大值
min() 过滤出列的最小值
分组的时候可以按照一个字段,也可以按照多个字段对结果进项分组处理
select * from info;
举例格式
select count(name),sex from info group by sex;
#统计name 列 对结果进行分组查询
#根据where 条件删选,score >= 80
select count(name),sex,score from info where score >= 80 group by sex;
#求和;以地址为分组,对score求和
select sum(score),address from info group by address;
#算出男生女生平均成绩
select avg(score),sex from info group by sex;
#分别求出男生组和女生组的成绩最低的姓名
select min(score),sex from info group by sex;
#group by 实现条件过滤,后面跟上having语句实现条件过滤
select avg(score),address from info group by address having avg(score) >
按照地址分组,求成绩的平均值,然后>50,按照id的降序排列
select avg(score),address,id from info group by address having avg(score) >50 order by id desc;
select avg(score),address,id from info group by address having avg(score) >50 order by id desc;
统计name 的行数,计算出学生的个数把成绩也查出来按照统计出来的学生个数升序排列按照地址分组,学生的成绩大于等于70分
select count(name),score,address from info group by address having score >= 70 order by count(name);
按照性别分组,求出男生和女生的最大成绩,最大成绩是否超过75分,满足条件的过滤出来
select max(score),sex from info group by sex having max(score) > 75;
使用聚合函数必须要加group by 要选用有多个重复值的列,group by的过滤条件要用having语句过滤
limit 限制输出的结果记录,查看表中的指定行
select * from info;
select * from info limit 3;
#只看前三行
#看2行到5行
select * from info limit 1,4;
#看6到7行
select * from info limit 5,3;
select * from info order by id desc limit 3;
#快速查询后几行,将最后几行降序方式到前几行,再用limit只查看前三行
通配符
#通配符主要用于替换字符串中的部分字符,通过部分字符的匹配向相关的结果查询出来
#通配符和like一起使用,使用where语句一起来完成查询
# % 表示0个,1个或者多个
# _ 表示单个字符
select * from info where address like '山%';
#以山为结尾
select * from info where address like '%路';
#以路为结尾
select * from info where address like '%山%';
#中间有山
select * from info where name like '杨_婷';
select * from info where name like '%婷';
select * from info where address like '山%__';
#通配符可以结合在一块使用
设置别名:alias 简写就是 as
#设置别名的目的是在mysql查询时,表的名字或者字段名太长,可以使用别名替代,方便书写,也可以增加可读性
#可以给表起别名,但是要注意别名不能和数据库其他的表名互相冲突
#列的别名在结果中可以显示,但是表的别名在结果中没有显示,只能用于查询
格式 举例
select name as 姓名, score as 成绩 from info;
select name 姓名,score 成绩 from info;
#可以不加as
create table test as select * from info;
#创建了一个表,叫test ,test的数据结构完整的从info复制过来,但是约束不会被复制
desc test;
#使用as复制表,约束不会被复制过来。
create table test1 as select * from info where score >=60;
#创建一个表,通过as复制info表,但只有score那列 大于等于60 才会被复制
#以这种方式创建的表主键在不在,外键在不在,索引在不在?
#都不在
#通过as创建,主键没了,外键没了,外键在不在,索引在不在?
#都不在