mysql 高阶语句
数据库的权限一般是很小的,我们在工作中最多的场景就是查
排序 分组 子查询 视图 多表连接查询(左连接 右连接 内连接)别名
排序:
select * from info;
使用select语句,用order by来对表进行排序。
ASC:升序排列,默认就是升序,可以不加
desc:降序排序,需要添加。
select id,name,score from info ORDER BY id;
select id,name,score from info ORDER BY id desc;
order by 结合where条件进行过滤:
select name,score from info where address='nj' ORDER BY score desc;
select id,name,score from info where sex='v' ORDER BY score desc,id desc;
只有第一个参数出现相同值时,才会对第二个才会按照要求排序
区间判断查询和去重查询
AND/OR
且 或
select * from info;
select * from info where score > 70 and score
条件大于80或者小于90
select * from info where score > 80 or score < 90;
进行条件的嵌套:
select * from info where score > 70 and (score > 75 and score
嵌套条件,性别是男,然后进行筛选 成绩80-90
select * from info where sex='n' and (score >= 70 and score<90);
去重查询:
select distinct address from info;
根据地址去重,成绩等于90,性别男
select distinct address,name,score from info where score =90 and sex='n';
对结果进行分组查询group by语句
一般是结合聚合函数一块。
count() 统计有多少行
sum() 列的值相加,求和
avg() 列的值求平均数
max() 过滤出列的最大值
min() 过滤出列的最小值
分组的时候可以按照一个字段,也可以按照多个字段对结果进行分组处理。
select * from info;
select count(name),sex from info group by sex;
根据where条件筛选,score>=80
select count(name),sex,score,name from info where score>=80 group by sex;
求和:以地址为分组,对score求和。
select sum(score),sex,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语句实现条件过滤。不能用where
select avg(score),address from info GROUP BY address having avg(score) >50;
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 分组的条件,要选用有多个重复值的列。过滤条件要用having语句过滤
limit 限制输出的结果记录,查看表中的指定行。
select * from info limit 3; 只看前三行
select * from info limit 1,4; 查看第二行到第5行
select * from info ORDER BY id desc limit 3; 查看后三行
通配符:
通配符主要用于替换字符串中的部分字符,提供部分字符发匹配将相关的结果查询出来。
通配符和like一起使用,使用where语句一起来完成查询
%:表示0个,1个,或者多个
_:表示单个字符
select * from info where address like 's%';
以什么开头:c%
以什么为结尾:%C
包含:%c%
select * from info where name like 'h';
select * from info where address like 's%__' 通配符可以结合在一块使用。
设置别名: alias >> AS
在mysql 查询时,表的名字或者字段名太长,可以用别名来代替。方便书写,增加可读性
select name as 姓名,score 成绩 from info; as可加可不加。
select name 姓名,score 成绩 from info a where name='cc1' and id=a.id;
create table test as select * from info;
创建了一个表,test的数据结构从info复制过来,但是约束不会被复制。
通过as创建表,约束不见了,索引呢?
select * from test;
desc test;
使用as复制表,约束不会被复制过来。
desc info;
create table test1 as select * from info where score >=60;
通过as创建表,约束在不在?,索引呢?
select * from test1;
desc test1;
可以给表起别名,但是要注意别名不难和时间库中的其他表名冲突。
列的别名在结果中可以显示,但是表名在结果中没有显示,只能用于查询。