oracle 查询表字段_SQL基础----(四)复杂的子查询(select within select)

(一) 关键知识点

1.1 消化阶梯

18a3c4225ae4b275a0ec8db06d83f450.png
任何知识点,均可遵循此消化路径

1.2 功能点

1.2.1 视图

  • 案例

d4a933247e4fc8e940993b225710481f.png

42587b1a5a095cd2bc00eba3fd0309df.png

78a3b38c5050c4ef06cb1594a6fbb07a.png
选中视图,右键刷新,将会呈现新创建的视图

531c98ba568c7d6b05b65e2a1c9133b3.png
选中具体视图,右键弹出功能菜单,选择对应功能项
  • 注意事项

(1) 视图中存放的是sql语句,非表的实际数据,节省存储空间,动态更新较便捷;

(2) from子句中,视图名代替表名,运行时动态创建出一张临时表;

(3) 频繁/复杂的sql语句,保存成视图,可反复使用,节省存储空间;

(4) 避免:级联多级视图(降低效率),视图中插入数据(报错);

1.2.2 子查询

1.2.2.1 概况

  • 常规子查询(临时表)

d085074d9237a12ef69324a0ddf4a004.png
临时表“按性别汇总”,动态创建,动态删除,语句运行后自动消失;
  • 特殊子查询 (in,any,some,all)

8dbcf7fbb7876ee055924ecacea7a024.png

859dab597a099202766f2576f2f5a99b.png
any,任意一个,与some等价

5cbf11b003d35248d48a654571e51331.png
all,全部
  • 注意事项

(1) 确保逻辑运算的优先级,可以使用括号;

(2) 尽量避免子查询的层层嵌套,拖累效率;

(3) 子查询,可以嵌入select/from/where子句(目标对象:常量,字段,字段的运算);

(4) 注意子查询的功效,条件判断的值域一般不需要内外表字段的关联,组内判断需要关联子查询;

(5) 必须提前过滤异常值,直接用in,all,any比较会导致整体结果异常;

特殊处理:Null,>0则过滤掉异常值;字母顺序,name<=all(name)表示升序第一个字符,

(6)分组子句,在没有汇总函数时,未起作用,虽然不报语法错误;

(7)子查询的逻辑核心,是拆分问题,逐步回答(select within select);

1.2.2.2 标量子查询 (完成数值间比较)

  • 案例

d8c50ae03b34c0c59a07ddd15db00c69.png
单值,进行简单查询

746e7169a6725e0156916ad3bf78364b.png
结合关键字(in,any,some,all),进行复杂查询
  • 注意事项

(1) 有且仅能返回一行一列的结果,即单个值

1.2.2.2 关联子查询 (多表字段关联,单表数值比较)

  • 案例

9e879cfa7220949eda2b6b96cb3dff86.png

8f845532dd46c41b03a8269ee4209426.png
内外表关联,借助where子句实现;s2 仅在子查询里有效;
  • 注意事项

(1) 对单表中数据进行比较时,使用单表关联自身的关联子查询 ;

(2) 注意表的有效范围,正确访问;

(3) 注意表的关联条件,大因素相同,才成立的过滤条件;

(4) 关联子查询,一定注意是否需要包含与自身相比,注意过滤,或者条件中的等于号;

1.3 功能函数

  • 汇总函数

fc66b85cc342adbe0d22be1d8387ef37.png
  • 字符串函数

3f79faa4fbe5b94d1f68aa1588900f7d.png
  • 日期函数

6d50770543806b8e0daf8abd613a8357.png
  • 算术函数

51cc97aa5cd8cc66d8ab71aa10f0e221.png
round中-n,表示完成取整后的整数,最后一位抹掉零头

(二)SQL ZOO实操

42c369ecff4a8943c99ba0872927d650.png

844eef097490b9db90d2583af4301e5e.png

c4105004a6b48bd02d3951877babe949.png

2d4a17a044369bdfd605b3ac8c332567.png
between通过修改边界,或者用大于,小于拼接

fe8082a7051f5cac7e416fa136b901d8.png
注意,相乘,不会修改原始小数点的位置;必须放大倍数,取整才行;3%不等价于3.00% round(population/(select population from world where name = &amp;amp;amp;#39;Germany&amp;amp;amp;#39;),2)*100 等价于3.00%

2b081e9f4bf930cfc00f4c91f860eddb.png

996ac5ba9bcd7a677b63b48ad665e548.png
使用关联子查询时,需要严格注意关联条件的选择

48bc12afbbeadfb9aa198c6d8d213727.png
方法一:字符name = all()与关联,结合的使用

4dd936e7bc3529bdd3019b4b34b6343a.png
方法二:采用关联,排序和limit 1

4cb81bf54cbce2c033e147dab9ea8926.png
方法三:普通排序,手动比对结果一致,但是与系统正确结果相比未匹配成功

b49d27c156645aabe45df9dc6537dbc7.png
未有汇总需求,group by分组子句不建议使用

afed76339894a919331661ef8d934cc6.png
利用w1.name&amp;amp;lt;&amp;amp;gt;w2.name 不跟自身相比,all返回多行值,可以把3倍放到子查询中,或者左侧
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值