MySQL的高阶语句

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

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

create TABLE info (

id int(4) primary key,

NAME varchar(5) 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; 升序

select id,name from info order by id DESC; 降序

select id,name,score from info order by score DESC; 降序,by后面跟上要排序的列

排序尽可能用数字

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;

select id,name,score from info where sex='女' ORDER BY Score desc,id desc;

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

区间判断查询和去重查询

AND或者or进行条件判断

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);

select * from info where score > 70 or ( score > 75 and score <90);

分组

用嵌套条件,满足性别是男,然后筛选成绩80--90之间

select * from info where sex='男' and (score > 80 and score <90);

去重查询(面试会问)

select DISTINCT sex from info;

select DISTINCT address from info;

根据addres去重,然后过滤出成绩=90且,性别是男

select DISTINCT address from info where sex='男' and (score =90);

根据addres、name、score去重,然后过滤出成绩=90且,性别是男

select DISTINCT address,name,score from info where sex='男' and (score =90);

对结果进行分组查询 group by语句

一般结合聚合函数一起使用

count() 统计有几行

sum() 列的值相加求和

avg() 列的值求平均数

max() 过滤出列的最大值

min() 过滤出列的最小值

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

select count(name),sex from info group by sex;

根据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),address,score,name 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;

查看2-5行

select * from info limit 1,4;

倒叙查看最后三行

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 '%西';

包含川

select * from info where address like '%川%';

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

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

select * from info where name like '__大';

以四为开头,匹配后面两个字符

select * from info where address like '四%__';

通配符可以一起使用

设置别名alias

简写AS

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

select name 姓名,score 成绩 from info;

select name as 姓名,score as 成绩 from info as fmh where name='杨dd' and id = fmh.id;

as语句创表

CREATE table test as select * from info;

select * from test;

desc test;

desc info;

使用as复制表,约束不会被复制过来(as复制的没有主键)

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

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

相关推荐
Think Spatial 空间思维44 分钟前
【HTTPS基础概念与原理】TLS握手过程详解
数据库·网络协议·https
逝水如流年轻往返染尘1 小时前
MySQL表的增删查改
mysql
laowangpython1 小时前
MySQL基础面试通关秘籍(附高频考点解析)
数据库·mysql·其他·面试
mooyuan天天1 小时前
SQL注入报错“Illegal mix of collations for operation ‘UNION‘”解决办法
数据库·web安全·sql注入·dvwa靶场·sql报错
运维-大白同学2 小时前
go-数据库基本操作
开发语言·数据库·golang
R-sz2 小时前
通过从数据库加载MinIO配置并初始化MinioClient,spring boot之Minio上传
数据库·oracle
洛阳泰山2 小时前
Windows系统部署MongoDB数据库图文教程
数据库·windows·mongodb
医只鸡腿子2 小时前
3.2/Q2,Charls最新文章解读
数据库·数据挖掘·数据分析·深度优先·数据库开发
bang___bang_3 小时前
PostgreSQL内幕剖析——结构与架构
数据库·postgresql
龙俊亨3 小时前
达梦数据库查看各数据库表内容
数据库