进阶Mysql数据库----Mysql高级语句,你离sql高手只差这篇文章(详细图解)

一、按关键字排序

使用ORDER BY语句来实现排序

语法:

select column1,column2,… from 库名 order by column1,column,… asc | desc;

  • 排序可针对一个或多个字段

ASC:升序,默认排序方式

在这里插入图片描述

DESC:降序

select * from student order by age desc;

在这里插入图片描述

  • ORDER BY的语法结构
select * from student order by age;

按多字段排序

select * from student order by age desc,results desc;

在这里插入图片描述

二、对结果进行分组

GROUP BY分组

  • 使用GROUP BY语句来实现分组

  • 通常结合聚合函数一起使用

  • 可以按一个或多个字段对结果进行分组

语法:

select count(字段名1),字段名2 from 表名 group by 字段名2 ;

例:

select count(name),age from student group by age ;

在这里插入图片描述

GROUP BY结合ORDER BY

select count(name),age from student group by age  order by age desc;

在这里插入图片描述

三、限制结果条目

  • 使用limit语句限制条目
  • limit语法结构

只返回select查询结果的第一行或第几行

语法:

select column1,column2,… from 库名 limit 位置偏移量

例:

select * from student limit 3;
select * from student limit 3,3;

在这里插入图片描述

四、设置别名

  • 使用AS语句设置别名,关键字AS可省略

  • 设置别名时,保证不能与库中其他表或字段名称冲突

  • 别名的语法结构

列的别名:

select 列名 as 列名别名 from 库名;

表的别名:

select 列名 from 库名 as 库名别名;

例:

select t.id as 编号,t.name as 名字, t.age as 年龄, results as 成绩 from student as t;

在这里插入图片描述

五、通配符的使用

  • 用于替换字符串中的部分字符
  • 通常配合like一起使用,并协同where完成查询
  • 常用通配符
  • %:表示0个,1个或多个
  • _:表示单个字符

例:

select * from  student as t  where name like 'z%' ;
- %:表示0个,1个或多个

select * from  student as t  where name like 'zc_' ;
- _:表示单个字符

在这里插入图片描述

六、子查询

  • 也称作内查询或者嵌套查询
  • 先于主查询被执行,其结果将作为外层查询的条件
  • 在增删改查中都可以使用子查询
  • 支持多层嵌套
  • IN语句是用来判断某个值是否在给定的结果集中
  • 子查询的用法

例:

 select t.id as 编号,t.name as 名字, t.age as 年龄, results as  成绩 from student 
 as t where t.results in ( select results from student where results >= 60 ) ;

在这里插入图片描述
查询结合降序使用:

例:

select t.id as 编号,t.name as 名字, t.age as 年龄, results as  成绩 from student as t where t.results in ( select results from student where results >= 60 ) order by results desc;

在这里插入图片描述

插入语句结合子查询

例:

insert into newstudent select * from student where id in (select id from student);

在这里插入图片描述
#update / delete 等语句同理, where条件可以从子查询语句中获取。

update语法:

update 表名 set 要修改的字段=要修改成的结果值 where 条件字段1 in (select 需要被取的字段 from 表名
where 条件字段 >=条件值);

delete 语法:

delete from 表名 where 字段1 in(select 字段1 from (select * from 表名where 字段>=值 ) a);

七、NULL值

  • 表示缺失的值
  • 与数字0或者空白(spaces)是不同的
  • 使用IS NULL或IS NOT NULL进行判断
  • NULL值和空值的区别
  • 空值长度为0,不占空间;NULL值的长度为NULL,占用空间
  • IS NULL无法判断空值
  • 空值使用“=”或者“<>”来处理
  • COUNT()计算时,NULL会忽略,空值会加入计算

插入空值

 alter table student add class varchar(16); 
 # 插入一个空字段
 
 select * from student;
 #查询表内容
 
 insert into student (id,name,age,results,class) values(12,'hd',18,81,'');
 #插入一列空值,非NULL值

在这里插入图片描述
在这里插入图片描述

null的用法

例:

select * from student  where class is null;
# is null 就是为null的意思
select * from student  where class is not  null;
# is not null 就是不为空的意思

在这里插入图片描述

八、正则表达式

  • 根据指定的匹配模式匹配记录中符合要求的特殊字符
  • 使用REGEXP关键字指定匹配模式
  • 常用匹配模式
字符说明
^匹配开始字符
$匹配结束字符
.匹配任意单个或多个任意字符
*匹配任意个前面的字符
+匹配前面字符至少1次
p1|p2匹配p1或p2
[…]匹配字符集中括号内的任
[^…]匹配不在括号内的任何字
{n}匹配前面的字符串n次
{n,m}匹配前面的字符串至少n

以z开头的姓名:(^)

例:

select * from student where name regexp '^z' ;

在这里插入图片描述
以n结尾的姓名:

例:

select * from student where name   regexp 'n$' ;

在这里插入图片描述
匹配单个字符(.)

例:

select * from student where name regexp 'zc.' ;

在这里插入图片描述
匹配前面字符至少1次(+)

例:

select * from student where name regexp 'zc+' ;

在这里插入图片描述
匹配p1或p2(p1|p2)

例:

 select * from student  where name regexp 'z|c';

在这里插入图片描述
匹配字符集中括号内的任何字符([…])

例:

select * from student  where name regexp '[zics]';

在这里插入图片描述
匹配前面的字符串n次{n}

例:

select * from student  where name regexp 'c{3}';

在这里插入图片描述
匹配前面的字符串至少n次,至多m次({n,m})

例:

select * from student  where name regexp 'c{1,3}';

在这里插入图片描述

九、算术运算符

字符说明
+加法
-减法
*乘法
/除法
%取余数

例:

select 5+2 as addition,8-5 as subtraction,6*7 as multiplication,8/2 as division,9%4 as remainder;

在这里插入图片描述

比较运算符

  • 字符串的比较默认不区分大小写,可使用binary来区分
  • 常用比较运算符
运算符说明
=等于
>大于
<小于
>=大于或等于
<=小于或等于
!=或<>不等于
IN在集合中
LIKE通配符匹配
IS NULL判断一个值是否为NULL
IS NOT NULL判断一个值是否不为NULL
BETWEEN AND两者之间
GREATEST两个或多个参数时返回最大值
LEAST两个或多个参数时返回最小值

例:

 select 2=4,2='2','e'='e',(4+4)=(5+3),'n'=NULL;

在这里插入图片描述

select 2>4,2<'2', 'e'>='e',(4+4)<=(5+3);
                 
select 2!=4,null is null,null is not null,2 between 1 and 4;

select greatest (5,8,12),least (1,5,4);     

在这里插入图片描述
从以上查询可以看出:

①如果两者都是整数,则按整数值进行比较

②如果一个整数一个字符串,则会自动将字符串转换为数字,再进行比较

③如果两者都是字符串,则按照字符串进行比较

④如果两者中至少有一个值是NULL,则比较的结果是NULL

十、逻辑运算符

  • 又称为布尔运算符

  • 用来判断表达式的真假

  • 常用的逻辑运算符

运算符说明
NOT或!逻辑非
AND或&&逻辑与
OR或||逻辑或
XOR逻辑异或

《逻辑非》

例:

select not 2,!3,not 0,!(4-4);

在这里插入图片描述
《逻辑与》

例:

 select 2 and 3,4 && 0,0 && NULL,1 and NULL;

在这里插入图片描述

十一、位运算符

  • 对二进制数进行计算的运算符
  • 常用的位运算符
运算符说明
运算符说明
&按位与
|按位或
~按位取反
^按位异或
<<按位左移
>>按位右移

例:

select 4&5,4|5,4&~3,3^4,2<<2,2>>1;

在这里插入图片描述

十二、连接查询

MySQL的连接查询,通常都是将来自两个或多个表的行结合起来,基于这些表之间的共同字段,进行数据的拼接,首先,要确定一个主表作为结果集,然后将其他表的行有选择性的连接到选定的主表结果集上,使用较多的连接查询包括:内连接、左连接和右连接。

JOIN 按照功能大致分为如下三类:

  • INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录。
  • LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录。
  • RIGHT JOIN(右连接): 与 LEFT JOIN 相反,用于获取右表所有记录,即使左表没有对应匹配的记录。

实验环境:
在这里插入图片描述

内连接及示意图

在这里插入图片描述
例:

select a.id,a.name,b.results from student a  INNER JOIN newstudent b on a.id = b.id;

在这里插入图片描述
以上sql如果用where来写的话就是这样,效果一样

select a.id,a.name,b.results from student a , newstudent b where  a.id = b.id;

在这里插入图片描述

左连接及示意图

MySQL left join 与 join 有所不同。 MySQL LEFT JOIN 会读取左边数据表的全部数据,即便右边表无对应数据。
在这里插入图片描述

例:

select a.id,a.name,b.results from student a LEFT JOIN newstudent b on a.id = b.id;

在这里插入图片描述

右连接及示意图

MySQL RIGHT JOIN 会读取右边数据表的全部数据,即便左边边表无对应数据。

在这里插入图片描述

例:

select a.id,a.name,b.results from student a RIGHT JOIN newstudent b on a.id = b.id;

在这里插入图片描述

十三、函数

数学函数

函数含义
abs(x)返回x的绝对值
rand()返回0到1的随机数
mod(x,y)返回x除以y以后的余数
power(x,y)返回x的y次方
round(x)返回离x最近的整数
round(x,y)保留x的y位小数四舍五入后的值
sqrt(x)返回x的平方根
truncate(x,y)返回数字x截断为y位小树的值
ceil(x)返回大于或等于x的最小整数
floor(x)返回小于或等于x的最大整数
greatest(x1,x2…)返回集合中最大的值
least(x1,x2…)返回集合中最小的值

常用的数学函数举例说明

select abs(-12),rand(),rand(),mod(4,5),power(2,6); 

select round(2.4),round(2.5),round(2.4235,2),sqrt(2),truncate(2.4652,2);

select ceil(2.2),floor(2.8),greatest(1,2,3,4,5),least(1,2,3,4,5);

执行结果如下图:
在这里插入图片描述

聚合函数

对表中数据记录进行集中概括而设计的一类函数

函数含义
avg()返回指定列的平均值
count()返回指定列中非NULL值的个数
min()返回指定看列的最小值
max()返回指定列的最大值
sum()返回指定列的所有值之和

聚合函数举例:

select avg(age) from student;
# 平均值
select sum(results) from student;
# 总和
select min(results) from student;
# 最小值
select max(results) from student;
# 最大值
select count(*) from stundet;
# 总行数

在这里插入图片描述
在这里插入图片描述

字符串函数

函数含义
length(x)返回字符串x的长度
trim()返回去除指定格式的值
concat(x,y)将提供的参数x和y拼接成一个字符串
upper(x)将字符串x的所有字母变成大写字母
lower(x)将字符串x的所有字母变成小写字母
left(x,y)返回字符串x的前y个字符
right(x,y)返回字符串x的后y个字符
repeat(x.y)将字符串x重复y次
space(x)返回x个空格
replace(x,y,z)将字符串z替代字符串x中的字符串y
strcmp(x,y)比较x和y,返回的值可以位-1,0,1
substring(x,y,z)获取从从字符串x中的第y个位置开始长度为z的字符串
reverse(x)将字符串x反转

举例说明:

select length('abc'),trim(  'ab' ),concat('ab','cd'),upper('abc'),lower('ABC');

select left('abcd',2),right('abcd',2),repeat('abc',3);

select space(2),replace('abcde','e','g'),strcmp('a','b'),strcmp('a','a'),strcmp('b','a');

select substring('abcdefg',3,3),reverse('abcdefg');

在这里插入图片描述

日期时间函数

函数含义
curdate()返回当前时间的年月日
curtime()返回当前时间的时分秒
now()返回当前时间的日期和时间
month()返回日期x中的月份值
week(x)返回日期x是年度第几个星期
hour(x)返回x中的小时值
minute(x)返回x中的分钟值
second(x)返回x中的秒钟值
dayofweek(x)返回x是星期几,1星期日,2星期1
dayofmonth(x)计算日期x是本月的第几天
dayofyear(x)计算日期x是本年的第几天

例:

select curdate(),curtime(),now(),month('2021-02-07'),week('2020-02-07'); 

select hour('22:15:45'),minute('22:15:45'),second('22:15:45');    

select dayofweek('2020-02-07'),dayofmonth('2020-02-07'),dayofyear('2020-02-07');

在这里插入图片描述

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值