【sql】sql中with as 介紹與使用jsqlparser解析sql

文章目錄

    • 一. 定義
    • 二. 用法
    • 三. 解析

一. 定義

with A as (select * from class)

也就是將重復用到的大批量 的SQL語句,放到with as 中,加一個別名,在后面用到的時候就可以直接用。對于大批量的SQL數據,起到優化的作用。

with子句的返回結果存到用戶的臨時表空間中,只做一次查詢,反復使用,提高效率。

?

二. 用法

  1. with子句只能被select查詢塊引用
  2. 在同級select前有多個查詢定義的時候,第1個用with,后面的不用with,并且用逗號隔開。
  3. 最后一個with 子句與下面的查詢之間不能有逗號,只通過右括號分割,with 子句的查詢必須用括號括起來。

-- 針對一個別名
-- –相當于建了個e臨時表with e as (select * from scott.emp e where e.empno=7499)
select * from e;-- –針對多個別名,相當于建了e、d臨時表with
e as (select * from scott.emp),
d as (select * from scott.dept)
select * from e, d where e.deptno = d.deptno;

?

三. 解析


<dependency>  <groupId>com.github.jsqlparser</groupId>  <artifactId>jsqlparser</artifactId>  <version>4.9</version>  
</dependency>

官網文檔:

https://jsqlparser.github.io/JSqlParser/usage.html#parse-a-sql-statements

//去除 with語法下的別名
private static Set<String> removeWithAlias(String sql, Set<String> tables) {  if (sql.contains("with ")) {  PlainSelect select = null;  try {  select = (PlainSelect) CCJSqlParserUtil.parse(sql);  List<WithItem> withItemsList = select.getWithItemsList();  List<String> withAlias = withItemsList.stream()  .map(withItem -> withItem.getAlias().getName())  .collect(Collectors.toList());  return tables.stream().filter(t -> !withAlias.contains(t))  .collect(Collectors.toSet());  } catch (Exception e) {  e.printStackTrace();  }  }  return tables;  
}

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/12946.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/12946.shtml
英文地址,請注明出處:http://en.pswp.cn/web/12946.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Broad Learning System (BLS) 寬度學習系統

寬度學習&#xff08;Broad Learning System, BLS&#xff09;是一種有效的神經網絡學習框架&#xff0c;旨在通過擴展網絡的寬度而不是深度來提高學習能力和效率。與傳統的深度學習相比&#xff0c;寬度學習通過堆疊多層特征節點和增強節點來構建網絡&#xff0c;從而避免了深…

oracle 臨時表

oracle 臨時表 conn scott/tiger --會話內保留行 drop table tmp1; CREATE GLOBAL TEMPORARY TABLE tmp1 ON COMMIT PRESERVE ROWS AS SELECT * FROM emp;SELECT TABLESPACE_NAME,CURRENT_USERS FROM V$SORT_SEGMENT;SELECT * FROM TMP1; INSERT INTO TMP1 SELECT * FROM…

Maven依賴管理項目構建

Maven依賴管理項目構建工具 目錄 文章目錄 Maven依賴管理項目構建工具目錄一、Maven簡介1、為什么學習Maven1.1、Maven是一個依賴管理工具1.2、Maven是一個構建工具1.3、結論 2. Maven介紹3. Maven軟件工作原理模型圖&#xff08;了解&#xff09; 二、Maven安裝和配置1. Mave…

PostgreSQL擴展之PGroonga:多語言全文搜索

簡介 PGroonga 是一個 PostgreSQL 擴展&#xff0c;它增加了基于 Groonga 的全文搜索索引方法。雖然原生的 PostgreSQL 支持全文索引&#xff0c;但它僅限于基于字母和數字的語言。PGroonga 提供了更廣泛的字符支持&#xff0c;使其成為 PostgreSQL 支持的語言的超集&#xff…

(實測驗證)Gitee代碼托管嘗試(一)——克隆/下載

一、登錄 Gitee&#xff08;碼云&#xff09;代碼托管平臺&#xff1a; Gitee - 基于 Git 的代碼托管和研發協作平臺 新建個人賬戶如下&#xff1a; 二、SSH 公鑰設置 1、在git安裝目錄打開“git-cmd.exe”; 2、通過命令 ssh-keygen 生成 SSH Key&#xff1a; ssh-keygen …

Linux進程概念總結

這里總結下Linux進程概念總結? 馮諾依曼&#xff1a; CPU 運算器與控制器RAM 內存&#xff08;存儲器&#xff09;Cache 緩存&#xff08;一種技術&#xff09;不屬于馮諾依曼體系結構。ROM 磁盤&#xff08;輸入輸出設備&#xff09;磁盤 既可以從硬盤讀取數據也可以向硬盤…

3-3 基于RYU的流量風暴事件原理與響應策略

在傳統網絡中&#xff0c;存在著一定的廣播流量&#xff0c;占據了一部分的網絡帶寬。同時&#xff0c;在有環的拓撲中&#xff0c;如果不運行某些協議&#xff0c;廣播數據還會引起網絡風暴&#xff0c;使網絡癱瘓。 如有以下的一個網絡拓撲結構&#xff08;3_2_topoplus.py) …

零基礎學Java第十四天之枚舉

枚舉 1、理解 枚舉&#xff08;Enumeration&#xff0c;通常簡寫為enum&#xff09;在編程語言中是一種特殊的數據類型&#xff0c;它允許你為變量定義一組命名的常量。這些常量通常表示一組有限的值&#xff0c;比如一周的七天、顏色的集合或者狀態的集合等。枚舉類型的主要目…

es 分詞器(五)之elasticsearch-analysis-jieba 8.7.0

es 分詞器&#xff08;五&#xff09;之elasticsearch-analysis-jieba 8.7.0 今天咱們就來講一下es jieba 8.7.0 分詞器的實現&#xff0c;以及8.x其它版本的實現方式&#xff0c;如果想直接使用es 結巴8.x版本&#xff0c;請直接修改pom文件的elasticsearch.version版本號即可…

再談畢業論文設計投機取巧之IVR自動語音服務系統設計(信息與通信工程專業A+其實不難)

目錄 舉個IVR例子格局打開&#xff0c;萬物皆能IVR - 把《民法典》搬上IVR IVR系統其實可鹽可甜。還能可圈可點。 戎馬一生&#xff0c;歸來依然IVR。 舉個IVR例子 以下是IVR系統的一個例子。 當您撥打電話進入IVR系統。 首先檢驗是否為工作時間。 如是&#xff0c;您將被送入…

基于51單片機的自動澆花器電路

一、系統概述 自動澆水灌溉系統設計方案&#xff0c;以AT89C51單片機為控制核心&#xff0c;采用模塊化的設計方法。 組成部分為&#xff1a;5V供電模塊、土壤濕度傳感器模塊、ADC0832模數轉換模塊、水泵控制模塊、按鍵輸入模塊、LCD顯示模塊和聲光報警模塊&#xff0c;結構如…

垃圾分類管理系統java項目

文章目錄 垃圾分類管理系統一、項目演示二、項目介紹三、系統部分功能截圖四、部分代碼展示五、底部獲取項目&#xff08;9.9&#xffe5;帶走&#xff09; 垃圾分類管理系統 一、項目演示 垃圾分類管理系統 二、項目介紹 系統角色&#xff1a;管理員、用戶 1、登錄、注冊功能…

機器人非線性系統反饋線性化與解耦

機器人非線性系統的反饋線性化和解耦是控制理論中的兩個重要概念&#xff0c;它們分別用于簡化系統分析和設計過程&#xff0c;提高控制系統的性能。 首先&#xff0c;反饋線性化是一種將非線性系統轉化為線性系統的技術。在機器人控制中&#xff0c;由于機器人本身是一個強耦…

?python使用selenium進行Web自動化測試?

什么是selenium Selenium 是 ThoughtWorks 提供的一個強大的基于瀏覽器的 Selenium 是一個用于 Web 應用程序測試的工具&#xff0c;測試直接自動運行在瀏覽器中&#xff0c;就像真正的用戶在手工操作一樣。支持的瀏覽器包括 IE、Chrome 和 Firefox 等。這個工具的主要功能包…

2024042001-計算機網絡 - 物理層

計算機網絡 - 物理層 計算機網絡 - 物理層 通信方式帶通調制 通信方式 根據信息在傳輸線上的傳送方向&#xff0c;分為以下三種通信方式&#xff1a; 單工通信&#xff1a;單向傳輸半雙工通信&#xff1a;雙向交替傳輸全雙工通信&#xff1a;雙向同時傳輸 帶通調制 模擬信號…

C++基礎——繼承(下)

一、繼承與靜態成員 基類定義了static 靜態成員&#xff0c;則整個繼承體系里面只有一個這樣的成員。無論派生出多少個子 類&#xff0c;都只有一個 static 成員實例 。 class person { public:person(const char* name "lisi"):_name(name){} public:string _name;…

那些年我與c++的叫板(一)--string類自實現

引子&#xff1a;我們學習了c中的string類&#xff0c;那我們能不能像以前數據結構一樣自己實現string類呢&#xff1f;以下是cplusplus下的string類&#xff0c;我們參考參考&#xff01; 廢話不多說&#xff0c;直接代碼實現&#xff1a;&#xff08;注意函數之間的復用&…

Nacos+GateWay 搭建微服務架構

文章目錄 1.當前項目架構分析1.請求多個模塊的方式1.請求renren-fast模塊開發環境生產環境 2.請求sunliving-commodity模塊1.使用環境變量資源路徑的方式2.開發環境 dev.env.js3.生產環境 prod.env.js 3.文件上傳請求 sunliving-service模塊1.請求后端接口&#xff08;開發環境…

當服務實例出現故障時,Nacos如何處理?

當服務實例出現故障時&#xff0c;Nacos的應對策略 在微服務架構日益盛行的今天&#xff0c;服務之間的穩定性與可靠性成為了我們架構師們不得不面對的重要課題。尤其是在面對服務實例出現故障時&#xff0c;如何確保整個系統的穩定運行&#xff0c;成為了我們首要考慮的問題。…

匯聚榮科技:拼多多上架商品后需要做頁面推廣嗎?

在電商平臺上&#xff0c;商品的曝光率和銷量往往成正比。那么&#xff0c;當您在拼多多上架了新品&#xff0c;是不是就意味著坐等訂單呢?答案顯然是否定的。商品一旦上架&#xff0c;接下來需要做的就是通過有效的頁面推廣來增加商品的可見度&#xff0c;吸引潛在買家的注意…