Oracle?26ai的SQL語言增強(qiáng)特性
1. GROUP BY ALL 語法
用途:自動按 SELECT 列表中所有非聚合列分組,無需顯式列出所有列。
-- 傳統(tǒng)寫法:需要顯式列出所有非聚合列 SELECT department_id, job_id, AVG(salary) AS avg_sal FROM employees GROUP BY department_id, job_id; -- 26ai 新寫法:使用 GROUP BY ALL 自動包含所有非聚合列 SELECT department_id, job_id, AVG(salary) AS avg_sal FROM employees GROUP BY ALL;
適用場景:當(dāng) SELECT 列表有很多列時(shí),簡化代碼并避免遺漏。
2. QUALIFY 子句(窗口函數(shù)過濾)
用途:直接過濾窗口函數(shù)的結(jié)果,無需嵌套子查詢。
-- 傳統(tǒng)寫法:需要子查詢或 CTE
WITH ranked AS (
SELECT employee_id, first_name, salary,
RANK() OVER (ORDER BY salary DESC) AS salary_rank
FROM employees
)
SELECT * FROM ranked WHERE salary_rank <= 5;
-- 26ai 新寫法:使用 QUALIFY 直接過濾
SELECT employee_id, first_name, salary,
RANK() OVER (ORDER BY salary DESC) AS salary_rank
FROM employees
QUALIFY salary_rank <= 5;
-- 另一個(gè)示例:查找每個(gè)部門工資前 3 的員工
SELECT department_id, first_name, salary,
ROW_NUMBER() OVER (PARTITION BY department_id ORDER BY salary DESC) AS rn
FROM employees
QUALIFY rn <= 3;3. UUID() 函數(shù)(RFC 9562 版本 4)
用途:生成標(biāo)準(zhǔn) UUID,替代手動生成或調(diào)用外部函數(shù)。
-- 生成單個(gè) UUID
SELECT UUID() FROM dual;
-- 結(jié)果示例:550e8400-e29b-41d4-a716-446655440000
-- 插入數(shù)據(jù)時(shí)自動生成 UUID
CREATE TABLE users (
user_id RAW(16) DEFAULT UUID() PRIMARY KEY,
username VARCHAR2(50),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
INSERT INTO users (username) VALUES ('zhangsan');
-- user_id 自動填充為 UUID
-- 批量生成 UUID
SELECT UUID() AS id, first_name
FROM employees
WHERE department_id = 10;4. GROUP BY 支持列別名或位置編號
用途:使用 SELECT 列表中的別名或位置號進(jìn)行分組,更簡潔。
-- 傳統(tǒng)寫法:重復(fù)表達(dá)式或使用列名 SELECT SUBSTR(hire_date, 1, 4) AS hire_year, COUNT(*) AS cnt FROM employees GROUP BY SUBSTR(hire_date, 1, 4); -- 26ai 新寫法:使用列別名 SELECT SUBSTR(hire_date, 1, 4) AS hire_year, COUNT(*) AS cnt FROM employees GROUP BY hire_year; -- 使用位置編號(從 1 開始) SELECT department_id, job_id, AVG(salary) AS avg_sal FROM employees GROUP BY 1, 2; -- 按第 1 列(department_id)和第 2 列(job_id)分組 -- 混合使用別名和位置編號 SELECT department_id, job_id, AVG(salary) AS avg_sal FROM employees GROUP BY 1, job_id; -- 位置 1 和別名混用
5. 非位置 INSERT 子句(命名列插入)
用途:通過列名而非位置指定插入值,順序無關(guān),更清晰。
-- 傳統(tǒng)寫法:必須按列定義順序,VALUES 順序必須與列列表一致
INSERT INTO employees (employee_id, first_name, last_name, email, hire_date, job_id)
VALUES (207, 'John', 'Smith', 'jsmith', SYSDATE, 'IT_PROG');
-- 26ai 新寫法:命名列插入,可以任意順序指定
INSERT INTO employees (
employee_id => 207,
last_name => 'Smith',
first_name => 'John',
job_id => 'IT_PROG',
email => 'jsmith',
hire_date => SYSDATE
);
-- 批量插入時(shí)更清晰
INSERT ALL
INTO employees (employee_id => 208, last_name => 'Wang', first_name => 'Wei', job_id => 'SA_REP')
INTO employees (employee_id => 209, first_name => 'Li', last_name => 'Hua', job_id => 'MK_MAN')
SELECT 1 FROM dual;到此這篇關(guān)于Oracle 26ai的SQL語言增強(qiáng)特性的文章就介紹到這了,更多相關(guān)Oracle 26ai增強(qiáng)特性內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Oracle參數(shù)設(shè)置教程之set和reset的實(shí)用案例
最近在學(xué)習(xí)oracle,學(xué)習(xí)中遇到了一些覺著有必要記錄下的內(nèi)容,所以下面這篇文章主要給大家介紹了關(guān)于Oracle參數(shù)設(shè)置教程之set和reset實(shí)用案例的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來一起看看吧。2017-10-10
ORACLE數(shù)據(jù)庫事務(wù)隔離級別介紹
事務(wù)隔離級別:一個(gè)事務(wù)對數(shù)據(jù)庫的修改與并行的另一個(gè)事務(wù)的隔離程度2012-07-07
Oracle數(shù)據(jù)庫正則表達(dá)式使用場景代碼實(shí)例
這篇文章主要介紹了Oracle數(shù)據(jù)庫正則表達(dá)式使用場景代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-09-09
oracle數(shù)據(jù)庫臨時(shí)表代碼舉例總結(jié)
臨時(shí)表是一種特殊的表,當(dāng)需要對某一(也可以是多個(gè))表中的一批數(shù)據(jù)進(jìn)行反復(fù)的操作時(shí),通過為這批數(shù)據(jù)創(chuàng)建一個(gè)臨時(shí)表,可能會簡化操作并且有可能提高效率,這篇文章主要給大家介紹了關(guān)于oracle數(shù)據(jù)庫臨時(shí)表的相關(guān)資料,需要的朋友可以參考下2024-02-02
Oracle?數(shù)據(jù)庫中的全文搜索整體流程分析
Oracle 是一種功能強(qiáng)大的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),它提供了各種功能來處理和管理大量的數(shù)據(jù),這篇文章主要介紹了Oracle?數(shù)據(jù)庫中的全文搜索功能,需要的朋友可以參考下2024-04-04
如何保持Oracle數(shù)據(jù)庫的優(yōu)良性能
如何保持Oracle數(shù)據(jù)庫的優(yōu)良性能...2007-03-03

