目录
前言:本章是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