MySQL高级SQL语句(2)

目录

一:通配符

查询名字是明结尾的记录

 查询address里青后面跟着一个字符的记录

 查看南后面1个字符的名字记录

 通配符%和_结合使用

 二:子查询

相同表查询

 不同表/多表查询

​编辑 子查询的多层嵌套

语法

查询分数大于80的记录

 insert语句使用子查询

 update语句使用子查询

 delete语句使用子查询

​编辑 删除分数不是大于等于80的记录

 exists判断子查询是否为空

询如果存在分数等于100的记录则计算class的字段数 

 查询如果存在分数等于50的记录则计算class的字段数

将结果集作为一张表进行查询

 三:MySQL视图

概念

作用场景

作用范围

视图功能

视图和表的区别和联系

区别

联系

视图的案例

满足80分的学生展示在视图中

修改原表数据

 通过视图修改原表

四:NULL值

null值与空值的区别

 统计数量,检测null是否会加入统计中

 将class表中其中一条数据修改为空值' '

 统计数量,检测空值是否被添加到统计中

 查询null的值

  查询不为null的值 

 五:连接查询

内连接

语法格式

案例

左连接

右连接

 总结


前言:本章是MySQL高级SQL语句(开端)的续篇,我们接着来学习在工作中需要用到的语句

一:通配符

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

通常通配符都是跟LIKE 一起使用的,并协同WHERE子句共同来完成查询任务。常用的通配符有俩个,分别为以下

%:百分号表示零个、一个或多个字符
_:下划线表示单个字符
like:模糊查询

查询名字是明结尾的记录

select id,name from class where name like '%明';

 

 查询address里青后面跟着一个字符的记录

select id,address from class where address like '青_';

 查看南后面1个字符的名字记录

select id,address from class where address like '南_';

 为了下面实验我添加两条数据

 通配符%和_结合使用

select id,name from class where name like '圣%_'

 二:子查询

子查询也被称作内查询或者嵌套查询,是指在一个查询语句里面还嵌套着另一个查询语句。子查询语句是先于主查询语句被执行的,其结果作为外层的条件返回给主查询进行下一步的查询过滤

ps:子语句可以与主语句所查询的表相同,也可以是不同表

相同表查询

select name,score from class where id in (select id from class where score >80);
 
主语句:select name,score from class where id
子语句(集合):select id from class where score >80
 
in:将主表和子表关联/连接的语法
ps:子语句中的sql语句是为了,最后过滤出一个结果集,用于主语句的判断条件

 

 

 不同表/多表查询

在创建一个class1表

create table class1 (id int);
insert into class1 values(1),(2),(3);

 

select id,name,score from class where id in (select * from class1);

 子查询的多层嵌套

子查询不仅可以在 SELECT 语句中使用,在 INERT、UPDATE、DELETE 中也同样适用。在嵌套的时候,子查询内部还可以再次嵌套新的子查询,也就是说可以多层嵌套

语法

<表达式> [NOT] IN <子查询>
IN 用来判断某个值是否在给定的结果集中,通常结合子查询来使用

当表达式与子查询返回的结果集中的某个值相等时,返回 TRUE,否则返回 FALSE。 若启用了 NOT 关键字,则返回值相反。需要注意的是,子查询只能返回一列数据,如果需 求比较复杂,一列解决不了问题,可以使用多层嵌套的方式来应对。 多数情况下,子查询都是与 SELECT 语句一起使用的

查询分数大于80的记录

select name,score from class where id in (select id from class where score >80);

 

 insert语句使用子查询

子查询还可以用在 INSERT 语句中。子查询的结果集可以通过 INSERT 语句插入到其他的表中

create table class2 like class;
insert into class2 select * from class where id in (select id from class);

 update语句使用子查询

update语句也可以使用子查询,update内的子查询,在set更新内容时,可以是单独的一列,也可以是多列

将id=3小王的分数改为61

update class2 set score=61 where id in (select * from class1 where id=3);

 

update clas
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值