数据库的权限一般是很小的,我们在工作使用最多的场景就是查
排序 分组 子查询 视图 多表连接查询(左连接 右连接 内连接)别名
使用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创建,主键没了,外键在不在,索引在不在?
可以给表起别名,但是要注意别名不能和数据库中的其他表名冲突
列的别名在结果中可以显示,但是表的别名在结果中没有显示,只能用于查询