技术标签: # 数据分析之SQL
with 语句相当于建立了一张 临时虚拟表
即利用with子句为子查询的数据集作为一个内存临时表. 在内存中解析,提高执行效率.,并且提高SQL语句的可读性,用完即销毁。
可以同时定义多个临时表
With
Subtable1 as (select 1...), //as和select中的括号都不能省略
Subtable2 as (select 2...), //后面的没有with,逗号分割,同一个主查询同级别地方,with子查询只能定义一次
…
Subtablen as (select n...) //与下面的实际查询之间没有逗号
Select ….
以下内容引用自Oracle with子句的简单介绍.
with
Q1 as (select product_id, product_name from products where rownum <= 10)
select * from Q1 ; //使用Q1
//查询结果
product_id product_name
1797 Inkjet C/8/HQ
2459 LaserPro 1200/8/BW
3127 LaserPro 600/6/BW
2254 HD 10GB /I
3334 HD 12GB /R
Q1为括号的子查询的别名,相当于在内存里建立了1张临时表. 下面的select 语句就直接检索这张临时表
with
Q1 as (select product_id, product_name from products where rownum <= 10)
delete from products where 1 =2 ;
select * from products where 1 =2;
在第4行上开始执行命令时出错:
with
Q1 as (select product_id, product_name from products where rownum <= 10)
delete from products where 1 =2
命令出错, 行: 17 列: 4
错误报告:
SQL 错误: ORA-00928: 缺失 SELECT 关键字
00928. 00000 - "missing SELECT keyword"
*Cause:
*Action:
未选择任何行
也就是说
with子句里其中1个内存临时表能被这个with子句内的其他内存临死表使用
WITH
Q1 AS (SELECT 3 + 5 S FROM DUAL),
Q2 AS (SELECT 3 * 5 M FROM DUAL),
Q3 AS (SELECT S, M, S + M, S * M FROM Q1, Q2)
SELECT * FROM Q3;
S M S+M S*M
---------- ---------- ---------- ----------
8 15 23 120
也就是 用完即销毁
WITH
Q1 AS (SELECT 3 + 5 S FROM DUAL),
Q2 AS (SELECT 3 * 5 M FROM DUAL),
Q3 AS (SELECT S, M, S + M, S * M FROM Q1, Q2)
SELECT * FROM Q3;
SELECT * FROM Q2;
结果
ORA-00942: 表或视图不存在
00942. 00000 - "table or view does not exist"
*Cause:
*Action:
行 42 列 15 出错
Q2 已经被with里的Q3检索过一次, 被删掉了
with
products as (select
product_id,
product_name
from products
where rownum <= 10)
select * from products ;
在行 21 上开始执行命令时出错:
with
products as (select product_id, product_name from products where rownum <= 10)
select * from products
命令出错, 行: 22 列: 54
错误报告:
SQL 错误: ORA-32039: 递归 WITH 子句必须具有列别名列表
//构造子查询
WITH r AS (
SELECT seller_id, item_id,
RANK() OVER(PARTITION BY seller_id ORDER BY order_date) AS ranking
FROM Orders),
second AS (
SELECT seller_id, item_id
FROM r
WHERE ranking = 2)
SELECT user_id AS seller_id,
IF(item_brand = favorite_brand, 'yes', 'no') AS 2nd_item_fav_brand
FROM Users
LEFT JOIN second //使用子查询
ON user_id = seller_id
LEFT JOIN Items
ON second.item_id = Items.item_id ```
文章浏览阅读4.1k次,点赞2次,收藏28次。本文实例为大家分享了Java实现简单订餐系统的具体代码,供大家参考,具体内容如下import java.util.Scanner;import java.util.*;public class OrderingMsg {public static void main(String[] args) {// 数据主体:一组订单信息String[] names = new String[4]; // 订..._java美每胃订餐系统
文章浏览阅读40次。今天用DB类写个新闻系统(点击查看DB类) 添加新闻主要代码<form action="news_add_up.asp?tabname=news" onSubmit="return isok(this)" method="post" name="upload" id="upload"> <table width="100%" border="0" class="df..._$hot_news= mymps_get_news
文章浏览阅读94次。命令模式Command_命令模式 李建忠
文章浏览阅读5.5k次。版权声明:本文由张戈原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/78来源:腾云阁 https://www.qcloud.com/community自从百度推荐全站 https 以来,一直就想让博客跟上这个节奏。可惜,国内所有的免费CDN都不支持https。所以要开启https势必要暴露网_cdn的http3开不开
文章浏览阅读1.4k次。卷积神经网络学习二:tinny_cnn程序试运行_对于卷积神经网络文件过多,怎样运行
文章浏览阅读202次。阿里的大模型“通义千问”今天开启内测,距百度“文心一言”发布差不多20天。今天看到消息后厚着脸皮找达摩院的朋友要邀请码,下午拿到后,赶紧测了一下。官方网址:https://tongyi.aliyun.com/chat刚好上次文心一言出来的时候测试过一次,有一些现成的case,于是又用这些case测了一轮,有一些随意,个人观点,仅供参考。帮我写一份招聘JD,第一步没问题,让继续写实习生JD的时候,大..._通义千问7b 微调 csdn
文章浏览阅读522次。awk系列3--比较全面在各大网站看到的 自己整理的awk学习实例[root@localhostopt]#catgrade.txtM.Tansley05/9948311Green84044J.Lulu06/9948317green92426P.Bunny02/99..._456mmmcon
文章浏览阅读879次,点赞5次,收藏10次。大部分传统的机器学习算法都可以实现分类任务,但这些模型关注的是将不同类别的数据分得开就行,也就是说它们的核心思想是让整个模型分类出错的损失越小越好。刚刚好有一种机器学习模型,它不仅关注分类能不能将不同类别的数据完全分得开,还关注分类得到的决策边界的间隔能不能最大化,即离该决策边界每个类别最近的数据点的距离能不能更远,这就是我们今天的主角 - - 支持向量机。_支持向量机 python
文章浏览阅读437次,点赞9次,收藏10次。输入一个高精度的正整数n,去掉其中任意s个数字后剩下的数字按原左右次序组成一个新的正整数。编程对给定的n和s,寻找一种方案使得剩下的数字组成的新数最小。时间限制: 1000 ms 内存限制: 65536 KB。每次删除第一个比下一个数字大的数字,如果没有就删除最后一个。1321:【例6.3】删数问题(Noip1994)理由是越高位替换成小的数字,得到的数字就会越小。(n不超过240位)输入数据均不需判错。_1321信息学奥赛一本通答案
文章浏览阅读295次。采用短作业优先调度算法调度程序学 号:姓 名:专 业:指导老师:日 期:目录一、实验题目3二、课程设计的目的3三、设计内容3四、设计要求3五、主要数据结构及其说明4六、程序运行结果5七、流程图7八、源程序文件9九、实验体会13十、参考文献13摘要在多道程序环境下,主存中有着多个进程,其数目往往多于处理机数目。这就要求系统能按某种算法,动态地把处理机分配给就绪队列中的一个进程..._os长作业与短作业
文章浏览阅读84次。---------------------- android培训、java培训、期待与您交流! ----------------------一、String类概述String类被final修饰,不能被继承。字符串一旦被初始化就不能被改变。字符串在内存中的存储请参考:http://www.cnblogs.com/heima/archive/2012/03/25/2417253.html..._java黑马程序员di13天代码
文章浏览阅读2.3k次。Subversion的分支通常用于在主干程序之外,对程序进行修改。这样 可以在不扰乱主干程序进行的开发、测试、发布流程之外,尝试一下新功能的研究、修改。如果觉得新功能没问题,可以将分支合并到主干程序中。 合并前,需要将分支提交(Commit),由此看来,合并操作好象是在服务端和本地客户端同时进行的操作。 合并时,要从主干的working copy的右键菜单开始,"From" Url是合_svn merge指令