Oracle 基礎語句大全:從數據定義到復雜查詢

一、DDL(數據定義語言):定義數據庫結構
1. 創建表(CREATE TABLE)
-- 語法格式
CREATE TABLE [schema.]table_name (column1 datatype [CONSTRAINT constraint1],column2 datatype [DEFAULT default_value],-- 表級約束[CONSTRAINT primary_key PRIMARY KEY (column1)],[CONSTRAINT foreign_key FOREIGN KEY (column2) REFERENCES ref_table(ref_col)]
);-- 示例:創建員工表
CREATE TABLE hr.employees (emp_id NUMBER(6) PRIMARY KEY,emp_name VARCHAR2(50) NOT NULL,salary NUMBER(10,2) CHECK (salary > 0),hire_date DATE DEFAULT SYSDATE,dept_id NUMBER(4) REFERENCES hr.departments(dept_id)
);-- Oracle 特有數據類型
-- VARCHAR2(n):可變長度字符串,n為最大長度
-- NUMBER(p,s):數值型,p總位數,s小數位
-- DATE:日期時間類型,包含年月日時分秒
-- CLOB:大文本類型(最大4GB)
-- BLOB:二進制大對象
2. 修改表(ALTER TABLE)
-- 添加列
ALTER TABLE table_name ADD (new_column datatype [CONSTRAINT]);
ALTER TABLE hr.employees ADD (email VARCHAR2(100) UNIQUE);-- 修改列定義
ALTER TABLE table_name MODIFY (column_name datatype [NULL|NOT NULL]);
ALTER TABLE hr.employees MODIFY (salary NUMBER(12,2));-- 刪除列
ALTER TABLE table_name DROP COLUMN column_name;
ALTER TABLE hr.employees DROP COLUMN email;-- 添加約束
ALTER TABLE table_name ADD CONSTRAINT constraint_name PRIMARY KEY/UNIQUE/CHECK/Foreign KEY (...);
ALTER TABLE hr.employees ADD CONSTRAINT uk_emp_name UNIQUE (emp_name);
3. 刪除表(DROP TABLE)
-- 普通刪除
DROP TABLE table_name [CASCADE CONSTRAINTS]; -- 級聯刪除外鍵
DROP TABLE hr.temp_employees;-- 清空表數據但保留結構
TRUNCATE TABLE table_name; -- 比DELETE更快,不記錄日志
TRUNCATE TABLE hr.employees;
4. 創建索引(CREATE INDEX)
-- 普通索引
CREATE INDEX idx_table_column ON table_name(column1, column2);
CREATE INDEX idx_emp_salary ON hr.employees(salary);-- 唯一索引
CREATE UNIQUE INDEX idx_unique ON table_name(unique_column);-- 函數索引(Oracle 特有)
CREATE INDEX idx_emp_upper ON hr.employees(UPPER(emp_name));
5. 創建序列(CREATE SEQUENCE)
-- 語法
CREATE SEQUENCE [schema.]sequence_nameSTART WITH nINCREMENT BY nMINVALUE n | NOMINVALUEMAXVALUE n | NOMAXVALUECYCLE | NOCYCLECACHE n | NOCACHE;-- 示例:創建員工ID序列
CREATE SEQUENCE hr.emp_seqSTART WITH 1001INCREMENT BY 1MINVALUE 1NOMAXVALUENOCYCLECACHE 20;-- 使用序列
INSERT INTO hr.employees(emp_id, emp_name) 
VALUES (hr.emp_seq.NEXTVAL, '張三');
SELECT hr.emp_seq.CURRVAL FROM DUAL; -- 查詢當前值
二、DML(數據操作語言):操作表數據
1. 插入數據(INSERT)
-- 標準插入
INSERT INTO table_name (column1, column2) VALUES (value1, value2);
INSERT INTO hr.employees(emp_id, emp_name, salary) 
VALUES (1001, '張三', 8000);-- 插入查詢結果
INSERT INTO target_table SELECT * FROM source_table;
INSERT INTO hr.emp_backup SELECT * FROM hr.employees;-- 批量插入(Oracle 特有)
INSERT ALLINTO dept_emp VALUES (1001, 10)INTO dept_emp VALUES (1002, 20)
SELECT * FROM DUAL;
2. 更新數據(UPDATE)
-- 單表更新
UPDATE table_name SET column1 = value1, column2 = value2
WHERE condition;
UPDATE hr.employees SET salary = salary * 1.1
WHERE dept_id = 10 AND hire_date < '2020-01-01';-- 多表更新(Oracle 特有)
UPDATE hr.employees e
SET e.salary = (SELECT avg(salary) FROM hr.employees WHERE dept_id = e.dept_id)
WHERE e.salary < (SELECT avg(salary) FROM hr.employees WHERE dept_id = e.dept_id);
3. 刪除數據(DELETE)
-- 刪除符合條件的記錄
DELETE FROM table_name WHERE condition;
DELETE FROM hr.employees WHERE hire_date < '2015-01-01';-- 清空表(與TRUNCATE區別:DELETE可回滾,TRUNCATE不可回滾)
DELETE FROM hr.employees;
4. 查詢數據(SELECT)
-- 基礎查詢
SELECT column1, column2 FROM table_name WHERE condition;
SELECT emp_name, salary FROM hr.employees WHERE dept_id = 10;-- 去重與別名
SELECT DISTINCT dept_id FROM hr.employees;
SELECT emp_name AS "員工姓名", salary * 12 AS "年薪" FROM hr.employees;-- 排序與限制(Oracle 12c+支持LIMIT,傳統用ROWNUM)
SELECT * FROM hr.employees ORDER BY salary DESC, emp_name ASC;
SELECT * FROM hr.employees WHERE ROWNUM <= 10; -- 前10條-- 多表連接
-- 內連接
SELECT e.emp_name, d.dept_name
FROM hr.employees e INNER JOIN hr.departments d
ON e.dept_id = d.dept_id;-- 外連接
SELECT e.emp_name, d.dept_name
FROM hr.employees e LEFT JOIN hr.departments d
ON e.dept_id = d.dept_id;-- 子查詢
SELECT emp_name, salary
FROM hr.employees
WHERE salary > (SELECT avg(salary) FROM hr.employees);
三、TCL(事務控制語言):管理事務
-- 開始事務(隱式開始,無需命令)
BEGIN TRANSACTION; -- 非Oracle語法,Oracle自動開始事務-- 提交事務
COMMIT; -- 永久保存數據變更-- 回滾事務
ROLLBACK; -- 撤銷未提交的變更-- 設置保存點
SAVEPOINT savepoint_name;
UPDATE hr.employees SET salary = salary * 1.1 WHERE dept_id = 10;
SAVEPOINT dept10_updated;
UPDATE hr.employees SET salary = salary * 1.2 WHERE dept_id = 20;
ROLLBACK TO dept10_updated; -- 回滾到dept10_updated點,保留dept10的更新-- 自動提交(會話級設置)
SET AUTOCOMMIT ON; -- 每條DML后自動提交
四、DCL(數據控制語言):管理權限
1. 用戶管理
-- 創建用戶
CREATE USER username IDENTIFIED BY passwordDEFAULT TABLESPACE tablespace_nameQUOTA nG ON tablespace_name;
CREATE USER hr_user IDENTIFIED BY hr123DEFAULT TABLESPACE usersQUOTA 500M ON users;-- 修改密碼
ALTER USER username IDENTIFIED BY new_password;
ALTER USER hr_user IDENTIFIED BY hr456;-- 刪除用戶
DROP USER username [CASCADE]; -- CASCADE刪除用戶所有對象
DROP USER hr_user CASCADE;
2. 權限管理
-- 授予權限
-- 系統權限(如創建表、刪除用戶)
GRANT CREATE TABLE, ALTER USER TO username;
GRANT CREATE SESSION TO hr_user; -- 允許登錄數據庫-- 對象權限(表、視圖等)
GRANT SELECT, INSERT, UPDATE ON hr.employees TO hr_user;
GRANT ALL PRIVILEGES ON hr.departments TO hr_user;-- 授予角色
GRANT DBA, CONNECT TO username; -- DBA角色擁有全部權限-- 回收權限
REVOKE CREATE TABLE FROM username;
REVOKE UPDATE ON hr.employees FROM hr_user;
五、常用函數與表達式
1. 字符串函數
-- 拼接:CONCAT或||
SELECT CONCAT(emp_name, ' works in ') || dept_name
FROM hr.employees e, hr.departments d
WHERE e.dept_id = d.dept_id;-- 長度:LENGTH
SELECT emp_name, LENGTH(emp_name) FROM hr.employees;-- 大小寫轉換:UPPER, LOWER, INITCAP
SELECT UPPER(emp_name) FROM hr.employees;
SELECT INITCAP(emp_name) FROM hr.employees; -- 首字母大寫-- 截取:SUBSTR(start, length)
SELECT SUBSTR(emp_name, 1, 3) FROM hr.employees; -- 前3個字符-- 替換:REPLACE
SELECT REPLACE(emp_name, '張', '王') FROM hr.employees;
2. 數值函數
-- 四舍五入:ROUND(n, decimal)
SELECT ROUND(salary, -3) FROM hr.employees; -- 四舍五入到千位-- 取整:FLOOR, CEIL
SELECT FLOOR(3.7), CEIL(3.1) FROM DUAL; -- 3, 4-- 絕對值:ABS
SELECT ABS(-100) FROM DUAL; -- 100-- 冪運算:POWER(n, m)
SELECT POWER(2, 3) FROM DUAL; -- 8
3. 日期函數
-- 獲取當前日期:SYSDATE
SELECT SYSDATE FROM DUAL; -- 格式:2025-06-18 15:30:00-- 日期運算:加減天數
SELECT SYSDATE + 7 FROM DUAL; -- 一周后
SELECT hire_date, SYSDATE - hire_date AS "入職天數"
FROM hr.employees;-- 提取部分日期:EXTRACT
SELECT EXTRACT(YEAR FROM hire_date) AS "入職年份"
FROM hr.employees;-- 日期格式化:TO_CHAR(date, '格式')
SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') FROM DUAL; -- 2025-06-18 15:30:00
4. 轉換函數
-- 字符串轉日期:TO_DATE
SELECT TO_DATE('2025-01-01', 'YYYY-MM-DD') FROM DUAL;-- 數字轉字符串:TO_CHAR
SELECT TO_CHAR(salary, 'L999,999.00') FROM hr.employees; -- 帶貨幣符號格式化-- 日期轉數字:TO_NUMBER
SELECT TO_NUMBER(TO_CHAR(SYSDATE, 'YYYY')) FROM DUAL; -- 獲取年份數字
六、PL/SQL 基礎語句
1. 存儲過程(PROCEDURE)
-- 創建存儲過程:計算員工平均工資
CREATE OR REPLACE PROCEDURE hr.get_avg_salary(p_dept_id IN NUMBER,p_avg_salary OUT NUMBER
) AS
BEGINSELECT AVG(salary) INTO p_avg_salaryFROM hr.employeesWHERE dept_id = p_dept_id;IF p_avg_salary IS NULL THENp_avg_salary := 0;END IF;
END;
/-- 調用存儲過程
DECLAREv_avg_salary NUMBER;
BEGINhr.get_avg_salary(10, v_avg_salary);DBMS_OUTPUT.PUT_LINE('部門10平均工資:' || v_avg_salary);
END;
/
2. 函數(FUNCTION)
-- 創建函數:返回員工姓名
CREATE OR REPLACE FUNCTION hr.get_emp_name(p_emp_id IN NUMBER)
RETURN VARCHAR2 ASv_emp_name VARCHAR2(50);
BEGINSELECT emp_name INTO v_emp_nameFROM hr.employeesWHERE emp_id = p_emp_id;RETURN v_emp_name;
EXCEPTIONWHEN NO_DATA_FOUND THENRETURN '員工不存在';
END;
/-- 調用函數
SELECT hr.get_emp_name(1001) FROM DUAL;
3. 觸發器(TRIGGER)
-- 創建觸發器:記錄員工工資變更日志
CREATE OR REPLACE TRIGGER hr.log_salary_change
AFTER UPDATE OF salary ON hr.employees
FOR EACH ROW
BEGININSERT INTO hr.salary_log (emp_id, old_salary, new_salary, update_time)VALUES (:OLD.emp_id, :OLD.salary, :NEW.salary, SYSDATE);
END;
/
七、Oracle 特有功能語句
1. 分區表操作
-- 創建分區表(范圍分區)
CREATE TABLE hr.sales_history (sale_id NUMBER,sale_date DATE,amount NUMBER
)
PARTITION BY RANGE (sale_date) (PARTITION p_2024 VALUES LESS THAN (TO_DATE('2025-01-01', 'YYYY-MM-DD')),PARTITION p_2025 VALUES LESS THAN (TO_DATE('2026-01-01', 'YYYY-MM-DD')),PARTITION p_other VALUES LESS THAN (MAXVALUE)
);-- 新增分區
ALTER TABLE hr.sales_history ADD PARTITION p_2026 VALUES LESS THAN (TO_DATE('2027-01-01', 'YYYY-MM-DD'));
2. 物化視圖(Materialized View)
-- 創建物化視圖(自動刷新)
CREATE MATERIALIZED VIEW hr.dept_salary_summary
REFRESH COMPLETE ON DEMAND
AS
SELECT dept_id, AVG(salary) avg_sal, COUNT(*) emp_count
FROM hr.employees
GROUP BY dept_id;-- 手動刷新物化視圖
REFRESH MATERIALIZED VIEW hr.dept_salary_summary;
3. 閃回查詢(Flashback Query)
-- 查詢過去時間點的數據
SELECT * FROM hr.employees
AS OF TIMESTAMP SYSDATE - 1 -- 24小時前的數據-- 閃回刪除的表(回收站功能)
FLASHBACK TABLE hr.employees TO BEFORE DROP;
八、常用系統視圖與查詢
-- 查看用戶所有表
SELECT table_name FROM user_tables;-- 查看表結構
DESCRIBE hr.employees;
SELECT column_name, data_type, nullable
FROM user_tab_columns
WHERE table_name = 'EMPLOYEES';-- 查看用戶權限
SELECT * FROM user_sys_privs;
SELECT * FROM user_tab_privs;-- 查看數據庫性能視圖(需要DBA權限)
SELECT * FROM v$session;
SELECT * FROM v$instance;

總結:Oracle 基礎語句核心要點

  • DDL:掌握表、索引、序列的創建與修改,注意 Oracle 特有數據類型(如 VARCHAR2、NUMBER)和約束機制。
  • DML:查詢語句是核心,多表連接、子查詢和 ROWNUM 分頁是高頻場景。
  • TCL:事務控制是數據一致性的關鍵,SAVEPOINT 可實現部分回滾。
  • PL/SQL:存儲過程和函數用于封裝業務邏輯,觸發器實現數據變更自動化。
  • 特有功能:序列、分區表、物化視圖等是 Oracle 企業級能力的體現,需結合業務場景使用。

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

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

相關文章

【學習筆記】鎖+死鎖+gdb調試死鎖

【學習筆記】鎖死鎖gdb調試死鎖 一、互斥鎖&#xff08;std::mutex&#xff09; 最基本的鎖類型&#xff0c;提供排他性訪問&#xff0c;同一時間僅允許一個線程持有鎖。 #include <iostream> #include <mutex> #include <thread>std::mutex mtx; // 全局…

Flutter中將bytes轉換成XFile對象上傳

在Flutter中將字節數據(bytes)轉換為XFile對象并上傳可以通過以下步驟實現&#xff1a; 1.字節數據轉臨時文件 首先需要將字節數據寫入臨時文件&#xff0c;可以使用dart的File類實現&#xff1a; final tempDir await getTemporaryDirectory(); final file File(${tempDi…

餅圖:數據可視化的“切蛋糕”藝術

餅圖&#xff0c;作為數據可視化家族中最經典、最易識別的成員之一&#xff0c;其核心功能如同其名——像切分蛋糕一樣&#xff0c;直觀展示一個整體&#xff08;100%&#xff09;被劃分為若干組成部分的比例關系。 往期文章推薦: 20.用Mermaid代碼畫ER圖&#xff1a;AI時代的…

Flutter - 原生交互 - 相機Camera - 曝光,縮放,錄制視頻

曝光 Flutter上CupertinoSlider組件的樣式是iOS上的Slider,使用該組件控制曝光量, Camera插件提供的API是CameraController的 Future<double> setExposureOffset(double offset) async {... }最后調用iOS端的系統方法控制曝光值 - (void)setExposureTargetBias:(floa…

Python中布爾值在函數中的巧妙運用

在 Python 中&#xff0c;布爾值&#xff08;True 和 False&#xff09;不僅可以用于簡單的條件判斷&#xff0c;還可以在函數中發揮強大的作用。通過合理使用布爾值&#xff0c;你可以使函數更加靈活、高效且易于理解。今天&#xff0c;就讓我們一起深入探討如何在函數中巧妙運…

解決sql查詢中in查詢項過多時很慢的問題

最近遇到查詢一張大數據量表時&#xff0c;需要對一個字段做in查詢&#xff0c;in中的元素數量可能達到幾千個&#xff0c;即使對這個字段加上索引&#xff0c;速度也慢到無法接受 示例表結構如下&#xff1a; 表中有幾十萬的數據&#xff0c;且example_id和data_id字段加了聯…

Spring---Spring MVC 執行流程

SpringMVC執行流程分為兩個&#xff1a;前后端分離與視圖階段&#xff08;不分離&#xff09; 視圖階段&#xff08;JSP/Thymeleaf/Freemarker&#xff09; SpringMVC 前后端分離階段 SpringMVC中重要組建有哪些&#xff1f; 前端控制器&#xff08;DispatcherServlet&#x…

Llama 4模型卡片及提示詞模板

Llama 4模型卡片及提示詞模板 Llama 4 模型卡及提示格式介紹 Llama 4 模型概述 Llama 4 是一系列預訓練和指令微調的混合專家(Mixture-of-Experts, MoE)大語言模型,包含兩種規模:Llama 4 Scout和Llama 4 Maverick。該模型針對多模態理解、多語言任務、編碼、工具調用及智…

使用Advanced Installer軟件將winform程序打包成exe安裝文件

使用Advanced Installer軟件將winform程序打包成exe安裝文件_c#程序打包軟件-CSDN博客 軟件的下載連接 https://download.csdn.net/download/qq_20222919/87780646

NDS 中文游戲全集下載 任天堂NDS簡介NDS支持GBA游戲

這是一份關于任天堂NDS游戲及其平臺的簡介&#xff1a; 游戲全集打包下載 https://pan.quark.cn/s/8805da9a09c4 NDS 是什么&#xff1f; 全稱&#xff1a; Nintendo DS (NDS)類型&#xff1a; 由任天堂開發和發行的掌上游戲機。世代&#xff1a; 第七世代游戲機 (與PSP、Wii…

Kamailio rtpengine_subscribe_request

master 版本的 rtpengine 新增了函數 rtpengine_subscribe_request 應該是 siprec 增加的 改天做下測試 參考鏈接&#xff1a; https://lists.kamailio.org/mailman3/hyperkitty/list/sr-userslists.kamailio.org/thread/Q7YJDVBHZX4BIWG23VRVRYW7N5SAAUOR/ https://kamai…

Java八股文——計算機網絡「網絡模型篇」

什么是OSI七層模型&#xff1f; 面試官您好&#xff0c;OSI&#xff08;Open Systems Interconnection&#xff09;七層模型&#xff0c;是由國際標準化組織&#xff08;ISO&#xff09;提出的一個網絡互聯的開放式參考模型。 它是一個理論上的、概念性的框架&#xff0c;其核…

國產服務器【銀河麒麟v10】【CPU鯤鵬920】部署Nacos

目錄 準備工作開始安裝1. 下載nacos2. 啟動3. 檢查 結束 準備工作 環境要求&#xff1a;Linux虛擬機nacos2.3.2 安裝包 開始安裝 1. 下載nacos 方式1 wget https://github.com/alibaba/nacos/releases/download/2.3.2/nacos-server-2.3.2.tar.gz方式2 去官網自行下載所需版…

一款強大的音視頻處理工具--FFmpeg-2--常用音頻處理示例

1、查看音頻文件詳細信息 opus&#xff0c;wav&#xff0c;pcm等音頻格式都適用。 ffprobe -i 1.opus說明&#xff1a; Input 0, ogg, from ‘1.opus’: Input 0&#xff1a;表示這是第一個輸入文件。ogg&#xff1a;表示該文件封裝在Ogg容器格式中&#xff08;Opus通常封裝…

在 ArcPy 腳本中進行錯誤處理和調試

查看錯誤信息 當捕獲到錯誤后&#xff0c;查看詳細的錯誤信息對于定位問題和解決問題至關重要。 &#xff08;一&#xff09;打印錯誤消息 在 except 塊中&#xff0c;可以直接打印錯誤對象來獲取錯誤消息。例如&#xff1a; try:arcpy.CalculateField_management("in…

C++11標準(4)——并發庫(多線程)

歡迎來到博主的專欄:c雜談 博主ID&#xff1a;代碼小豪 文章目錄 thread的相關函數thisthread c11新增了與并發相關的庫&#xff0c;包含線程、以及互斥、同步等與線程安全相關的庫&#xff0c;與linux中所使用POSIX庫不同&#xff0c;并發庫是將其進行了封裝&#xff0c;不再是…

優化TCP/IP協議棧與網絡層

優化TCP/IP協議棧與網絡層 在高性能架構中,網絡性能往往成為系統吞吐量與響應速度的關鍵因素之一。而TCP/IP協議棧作為現代互聯網通信的核心,其默認配置在高并發場景下常常無法滿足大規模分布式系統的性能需求。因此,架構師在構建系統時,有必要對TCP/IP協議棧及其所在的網…

Nginx常見功能

Nginx 是一個高性能的 HTTP 和反向代理服務器&#xff0c;除了基本的 Web 服務功能外&#xff0c;它還支持許多高級功能。以下是 Nginx 常用的一些功能及其設置方法&#xff1a; 1. 反向代理 反向代理是 Nginx 最常用的功能之一&#xff0c;用于將客戶端請求轉發給后端服務器&a…

UniSAL:用于組織病理學圖像分類的統一半監督主動學習方法|文獻速遞-深度學習醫療AI最新文獻

Title 題目 UniSAL: Unified Semi-supervised Active Learning for histopathologicalimage classification UniSAL&#xff1a;用于組織病理學圖像分類的統一半監督主動學習方法 01 文獻速遞介紹 組織病理學圖像在癌癥篩查、診斷及治療決策中起著關鍵作用&#xff0c;有助…

智慧園區建設資料合集(Wordppt原件)

化工園區安全風險智能化管控平臺.docx 數字孿生賦能的智慧園區物聯網云平臺建設方案.pptx 園區智慧安防解決方案.docx 新型智慧園區規劃設計方案.pptx 新型智慧園區建設方案.docx 園區大數據治理解決方案.pptx 智慧產業園區綜合解決方案.docx 智慧工業園區大數據云平臺解決方案…