mysql的高阶语句

mysql的高阶语句

数据库的权限一般是很小的,我们在工作使用最多的场景就是查

排序 分组 子查询 视图 多表连接查询(左连接 右连接 内连接)别名

使用select语句,使用order by

查看: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 name,score from info where sex='女' ORDER BY id desc;

只有第一个参数出现相同值的时候,第二个才会按照要求排序

区间判断查询和去重查询:

AND/or

且   或

大于70而且小于等于90:SELECT * from info where score > 70 and score <=90;

大于80或者小于90:SELECT * from info where score > 80 or score < 90;

嵌套条件:select * from info where score > 70 and (score > 75 and score < 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语句

一般是结合聚合函数一块使用

count():统计有多少行

sum():把列的值相加求和

avg():对列的值求平均数

max():过滤出列的最大值

min():过滤出列的最小值

分组的时候可以按照一个字段,也可以按照多个字段对结果进行分组处理

根据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,name from info group by sex;

如何使用group by实现条件过滤(后面跟上having语句实现条件过滤):select avg(score),address from info group by address having avg(score) > 60;

按照地址分组,求成绩的平均值,然后>50,按照id的降序排列: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 order by id desc limit 3;

通配符:主要用于替换字符串中的部分字符,通过部分字符的匹配将相关的结果查询出来

通配符和like一起使用,使用where语句一起来完成查询

%:表示0个,1个,或者多个

_:表示单个字符

以山为开头:select * from info where address like 山%

以路为结尾:select * from info where address like %路

表示内容当中包含:%c%

表示单个字符:select * from info where name like '刘__';

select * from info where name like '_树_';

通配符可以结合在一块使用

设置别名:alias >> AS

在mysql查询时,表的名字或者字段名太长,可以使用别名来进行替代。方便书写。增加可读性

例如:select name 姓名,score 成绩 from info;

create table test as select * from info;

创建了一个表,test,test的数据结构从info复制过来,但是约束不会被复制

desc test;

使用as复制表,约束不会被复制过来

作业:

通过as创建,主键没了,外键在不在,索引在不在?

create table test1 as select * from info where score >=60

通过as创建,主键没了,外键在不在,索引在不在?

可以给表起别名,但是要注意别名不能和数据库中的其他表名冲突

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

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