mysql高阶语句②

文章介绍了数据库中的子查询概念,包括其在SELECT、INSERT、UPDATE和DELETE语句中的应用,以及IN和NOTIN子查询的操作。此外,还讨论了视图的作用,它是数据库的虚拟表,用于简化查询和提高安全性。最后提到了连接查询的不同类型,如内连接、左连接和右连接,以及存储过程的概念,强调其在提升数据库性能中的作用。
摘要由CSDN通过智能技术生成

子查询

子查询也被称为内查询或者嵌套查询,是指在一个查询语句里面还嵌套着另一个查询语句

子查询语句是先于主查询语句执行的,其结果作为外城的条件返回给主查询进行下一步的查询过滤

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

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

查询分数大于80的数据

mysql> select name,score from ky29 where id in (select id from ky29 where score >80);
+----------+-------+
| name     | score |
+----------+-------+
| jiaoshou | 98.00 |
| tianqi   | 99.00 |
| wangwu   | 90.00 |
+----------+-------+
3 rows in set (0.02 sec)

select id,name,score from ky29 where id in (select * from ky30);

通过ky30里面的id来筛选出ky29的内容

mysql> select id,name,score from ky29 where id in (select * from ky30);
+------+--------+-------+
| id   | name   | score |
+------+--------+-------+
|    3 | lisi   | 60.00 |
|    1 | liuyi  | 80.00 |
|    2 | wangwu | 90.00 |
+------+--------+-------+
3 rows in set (0.00 sec)
​

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

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

insert into ky30 select * from ky29 where id in (select id from ky29);

将ky29里面的id插入到ky30中

update ky29 set score=50 where id not in (select id from ky30 where id=2);

delete from ky29 where id in (select id where score >80);

子查询:

in 将主表和子表关联(连接的语法)

not in 子查询返回结果集中的某一个值相同时,返回true 否二返回false,如果要启动not 则返回相反条件 写一个子查询的SQL

应用场景:insert update exists 判断此查询结果集是否为空

视图

优化操作+安全方案

查询方便:索引速度快、同时可以多表查询

数据库中的虚拟表,这张虚拟表不包含真实数据,只是做了正式数据的映射

针对不同的人(权限),提供不同结果集的表(以表格的形式展示)

视图是基本表之上建立的表,他的结构(即所定义的列)和内容(即所有数据行)都来自基本表,他依据基本表存在而存在,一个视图可以对应一个基本表,也可以对应多个基本表。视图是基本表的抽象和在逻辑意义上建立的信管系

单表创建视图

create v_score as select * from ky29 where score=80

null

select length(null) 返回的是null 表示空置

select length('') 返回的是0,表示一个空的字符串

select length('123')返回的是3,是字符串'123'的长度

连接查询

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

内连接查询:输出匹配共同数据/共同字段的数据内容 (inner join)

左连接查询:将两张表的内容进行匹配,按照SQL查询的顺序(左到右),输出左表的全部内容和右表的共同数据的内容(left join)

右连接查询:将两张表的内容进行匹配,按照SQL查询的顺序(右到左),输出右表的全部内容和左表的共同数据的内容(right join)

select a.id a.name from ky29 a inner join ky30 b on a.name=b.name

查找ky29和ky30里面相同的id和name内容 这里a和b指的是ky29和ky30的别名

select * from ky29 a left join ky30 b on a.name=b.name

显示ky29里面的所有内容与ky29和ky30里面的相同内容(左连接)

select * from ky29 a right join ky30 b on a.name=b.name

显示ky30的全部内容和两个表的相同内容

存储过程

1、存储过程是一组为了完成特定功能的SQL语句集合。两个点 第一 触发器

2、存储过程这个功能是从5.0版本才开始支持的,它可以加快数据库的处理速度,增强数据库在实际应用中的灵活性。存储过程在使用过程中是将常用或者复杂的工作预先使用sQL语句写好并用一个指定的名称存储起来,这个过程经编译和优化后存储在数据库服务器中。当需要使用该存储过程时,只需要调用它即可。操作数据库的传统SQL

语句在执行时需要先编译,然后再去执行,跟存储过程一对比,明显存储过程在执行上速度更快,效率更高

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值