网站首页 > 技术文章 正文
一、视图
什么是视图?
数据库中储存的是我们所需要的数据,而视图中存放的是sql的查询语句。当我们使用视图的时候,客户端会运行视图中的查询语句并创建一张临时表。但是当数据库和客户端断开连接的时候,这些临时表将不会被保存,保存的是视图中的sql语句。
2、如何创建视图
在查询编辑器中编写sql语句(create view 视图名称(视图列1,视图列2) as select查询语句),然后点击视图,右击选择刷新,新的视图表格就会出现在视图中
3、视图的作用
- 可以节省数据库的存储空间。因为视图存放的是sql语句,临时表中数据不需要被存储。
 - 如果数据库中数据进行了更改,数据视图会自动更新。
 - sql语句需要频繁使用而且查找数据规模很庞大的时候可以保存为视图
 
4、注意事项
- 避免在视图的基础上再创建视图,因为这会降低sql性能和效率。
 - 不能在视图里插入数据,不然会报错
 
二、子查询
1、子查询定义
子查询其实是一次性的视图,在from子句中直接写定义视图的sql查询语句,一个select语句中嵌套了另外一个select语句。当sql语句中有子查询的时候,将会运行括号里面的子查询然后再运行括号外的语句。
2、子查询关键字
示例:现在新建两张表,表1,表2如下
any/some:是任意一个 ,表示有任何一个满足就返回true
结果均为:
all:是所有,表示全部都满足才返回true
结果为:
"=ANY"与"IN"相同
结果均为
"<>ALL"与"NOT IN"相同
结果均为
3、子查询的作用
偶尔使用的select语句→子查询
频繁使用的select语句→视图
4、注意事项
- 通俗意义上讲a>3all(b)=a/3>all(b),但是在sql语句中,前者a>3*all(b)是错误的,因为all(b)所得的数据不是一个数值,而是一个集合,为n行数据。
 - 避免使用多层嵌套查询
 - 为子查询设定名称时需要使用as关键字,as关键字可以省略。但为了方便自己和别人看懂,尽量不要省略,为子查询设定恰当的名称。
 
三、标量子查询
1、定义
标量子查询,是返回单一值的子查询。因此,标量子查询的返回值可以用在=或者<>这样需要单一值的比较运算符之中。where子句后不能使用聚合函数,但可以使用标量子查询。
标量子查询不仅仅局限于where子句中,通常任何需要使用单一值的地方都可以使用标量子查询
示例1:
示例2:
2、作用
(1)偶尔使用的select语句
→①单行/多行(子查询);
→②单一值(标量子查询)in,any,all,between
(2)频繁使用的select语句→视图
3、注意事项
标量子查询绝对不能返回多行结果。也就是说,如果子查询返回了多行结果,那么它就不再是标量子查询,而仅仅是一个普通的子查询了,因此不能被用在=或者<>等需要单一输入值的运算符当中,也不能用在select等子句当中。
四、关联子查询
1、什么是关联子查询?
关联子查询比较的是组内数据,不是全部数据
注:关联条件一定要写在子查询里面,上面的s2仅在子查询里有效,s2能看到外面的s1,而s1看不到子查询的s2。
2、关联子查询的作用
在每个组里进行比较时,需要使用关联子查询,关联子查询是在子查询里有一个关联条件。
(1)偶尔使用的select语句
→①单行/多行(子查询);
→②单一值(标量子查询)in,any,all,between
→③在每个组里比较(关联子查询)关联条件
(2)频繁使用的select语句→视图
五、如何用SQL解决业务问题?
问题:哪些学生的成绩比课程0002的全部成绩里的任意一个高呢?
1.解析问题,翻译成大白话:
- 课程0002的全部成绩
 - 某个学生的成绩大于任意一个第1步里的成绩,就符合条件
 
2.分析思路:
- select 查询结果(成绩))
 - from 从哪张表中查找数据(score表)
 - where 查询条件 (课程号=0002)
 - group by 分组(无)
 - having 对分组结果指定条件(无)
 - order by 对查询结果排序(无)
 - limit 从查询结果中取出指定行(无)
 
六、各种函数
猜你喜欢
- 2025-09-03 数据库教程-SQL Server多条件模糊查询
 - 2025-09-03 数据库教程-SQL Server海量数据的快速存储
 - 2025-09-03 数据库教程-SQL Server数据字典查询及导出
 - 2025-09-03 利用VBA+SQL查询Excel工作表数据(基本查询)
 - 2025-09-03 紫金桥组态软件基于内置SQL查询历史数据的方法
 - 2025-09-03 【开源推荐】SQL 审核查询平台Archery v1.7.9 发布,数据可归档
 - 2025-09-03 SQL - 通过TSQL代码方式进行简单的数据查询 153
 - 2025-09-03 利用VBA+SQL查询Excel工作表数据(分组查询)
 - 2025-09-03 这才是数据分析全流程,而不是跑个SQL
 - 2025-09-03 见过最惊艳的 SQL 查询语句是什么?揭秘高效查询的奥秘
 
- 最近发表
 - 
- 聊一下 gRPC 的 C++ 异步编程_grpc 异步流模式
 - [原创首发]安全日志管理中心实战(3)——开源NIDS之suricata部署
 - 超详细手把手搭建在ubuntu系统的FFmpeg环境
 - Nginx运维之路(Docker多段构建新版本并增加第三方模
 - 92.1K小星星,一款开源免费的远程桌面,让你告别付费远程控制!
 - Go 人脸识别教程_piwigo人脸识别
 - 安卓手机安装Termux——搭建移动服务器
 - ubuntu 安装开发环境(c/c++ 15)_ubuntu安装c++编译器
 - Rust开发环境搭建指南:从安装到镜像配置的零坑实践
 - Windows系统安装VirtualBox构造本地Linux开发环境
 
 
- 标签列表
 - 
- cmd/c (90)
 - c++中::是什么意思 (84)
 - 标签用于 (71)
 - 主键只能有一个吗 (77)
 - c#console.writeline不显示 (95)
 - pythoncase语句 (88)
 - es6includes (74)
 - sqlset (76)
 - apt-getinstall-y (100)
 - node_modules怎么生成 (87)
 - chromepost (71)
 - flexdirection (73)
 - c++int转char (80)
 - mysqlany_value (79)
 - static函数和普通函数 (84)
 - el-date-picker开始日期早于结束日期 (76)
 - js判断是否是json字符串 (75)
 - c语言min函数头文件 (77)
 - asynccallback (87)
 - localstorage.removeitem (77)
 - vector线程安全吗 (73)
 - java (73)
 - js数组插入 (83)
 - mac安装java (72)
 - 无效的列索引 (74)
 
 
