mysql 高阶语句

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;

可以给表起别名,但是要注意别名不难和时间库中的其他表名冲突。

列的别名在结果中可以显示,但是表名在结果中没有显示,只能用于查询。

你可能感兴趣的:(mysql,数据库)