C++學習之ORACLE③

1.集合運算符

查詢部門號是10和20的員工信息: ?思考有幾種方式解決該問題??

  1. SQL> ?select * from emp where deptno in(10, 20)????
  2. SQL> ?select * from emp where deptno=10 or deptno=20 ??
  3. 集合運算:

Select *?from emp where deptno=10 加上

Select *?from emp where deptno=20

集合運算所操作的對象是兩個或者多個集合,而不再是表中的列(select一直在操作表中的列)

2.集合運算應用

  1. 參與運算的各個集合必須列數相同,且類型一致
  2. 采用第一個集合的表頭作為最終使用的表頭。 (列名別名也只能在第一個集合上起)
  3. 可以使用括號()先執行后面的語句。

3.insert語句基本用法

使用 INSERT 語句向表中插入數據。其語法為:

INSERT INTO table [(column?[, column...])]

VALUES (value [, value...]);

如果:values后面的值,涵蓋了表中的所有列,那么table的列名可以省略不寫。

SQL> ?desc emp; ? 查看員工表的結構,得到所有的列名。

SQL> ?insert into?emp values?(1001, 'Tom', 'Engineer', 7839, sysdate, 5000, 200, 10 ) ???

SQL> ?insert into emp values (1005, 'Bone', 'Raphealy', 7829, to_date('17-12月-82', 'DD-MON-RR'), NULL, 300, 20); ?

如果:插入的時候沒有插入所有的列,就必須顯式的寫出這些列的名字。

SQL> ?insert into emp(empno, ename, sal, deptno) values(1002, 'Marry', 6000, 20); ?

注意:字符串和日期都應該使用 ' ' 號引用起來。

沒有寫出的列自動填NULL, 這種方式稱之為“隱式插入空值”。

?“顯式插入空值”: SQL> ?insert into emp(empno, ename, sal) values(1003, 'Jim', null); ??

SQL> insert into dept values(1, '1name', '1loc');

SQL> insert into dept(deptno, dname, loc) values(2, '2name', '2loc');

SQL> insert into dept(deptno, loc, dname) values(3, '3loc', '3name');

SQL> insert into dept(deptno, dname) values(4, '4name');

4.地址符

使用 INSERT 語句向表中插入數據。其語法為:

INSERT INTO table [(column?[, column...])]

VALUES (value [, value...]);

如果:values后面的值,涵蓋了表中的所有列,那么table的列名可以省略不寫。

SQL> ?desc emp; ? 查看員工表的結構,得到所有的列名。

SQL> ?insert into?emp values?(1001, 'Tom', 'Engineer', 7839, sysdate, 5000, 200, 10 ) ???

SQL> ?insert into emp values (1005, 'Bone', 'Raphealy', 7829, to_date('17-12月-82', 'DD-MON-RR'), NULL, 300, 20); ?

如果:插入的時候沒有插入所有的列,就必須顯式的寫出這些列的名字。

SQL> ?insert into emp(empno, ename, sal, deptno) values(1002, 'Marry', 6000, 20); ?

注意:字符串和日期都應該使用 ' ' 號引用起來。

沒有寫出的列自動填NULL, 這種方式稱之為“隱式插入空值”。

?“顯式插入空值”: SQL> ?insert into emp(empno, ename, sal) values(1003, 'Jim', null); ??

SQL> insert into dept values(1, '1name', '1loc');

SQL> insert into dept(deptno, dname, loc) values(2, '2name', '2loc');

SQL> insert into dept(deptno, loc, dname) values(3, '3loc', '3name');

SQL> insert into dept(deptno, dname) values(4, '4name');

5.批量處理

一次插入多條數據。

SQL> ?create table emp10 as select * from emp where 1=2; 創建一張表,用于測試。

SQL> ?select * from tab; ? 可以查看多了一張新表emp10,但select * from emp10?結果為空

SQL> ?desc emp10; ?? 發現該表的結構和emp表的結構完全相同。

一次性將emp表中所有10號部門的員工,放到新表emp10中來。

SQL> ?insert into?emp10 select * from emp where deptno=10 ; ???

一次性將 emp表中的指定列插入到表emp10中。

注意:insert的列名,要和select的列名一致

SQL> ?insert into emp10(empno, ename, sal, deptno)

???select empno, ename, sal, deptno ?from emp

???where deptno=10; ? 注意沒有values關鍵字了。且列名必須一一對應

總結: 子查詢可以出現在DML的任何語句中,不只是查詢套查詢。

6.更新數據和刪除數據操作

對于更新操作來說,一般會有一個“where”條件,如果沒有這限制條件,更新的就是整張表。

SQL> ?update?emp10 set sal=4000, comm=300 where?ename = 'CLARK'; ??( 或 where empno=7782;?)

注意:若沒有where限定,那么會將所有的員工的sal都設置成4000,comm設置成300;

SQL> ?update emp10 set comm = null where empno=1000; ?? 這個操作是否能成功呢?

SQL> ?select *?from emp where comm = null 這個查詢可以成功嗎?

主語句、子語句操作的可以不是同一張表。

涉及問題: 數據完整性問題——約束。 (插入、更新、刪除都可能造成表數據的變化)

約束:主鍵約束、外鍵約束、唯一約束、非空約束。 (簡單了解。后面約束章節講解)

7.事務

數據庫事務,是由有限的數據庫操作序列組成的邏輯執行單元,這一系列操作要么全部執行,要么全部放棄執行。

數據庫事務由以下的部分組成:

  1. 一個或多個DML語句
  2. 一個 DDL(Data Definition Language – 數據定義語言) 語句
  3. 一個 DCL(Data Control Language – 數據控制語言) 語句

?事務的特點:要么都成功,要么都不執行

8.課程小結

事務4大特性

  1. 原子性?(Atomicity):事務中的全部操作在數據庫中是不可分割的,要么全部完成,要么均不執行。
  2. 一致性?(Consistency):幾個并行執行的事務,其執行結果必須與按某一順序串行執行的結果相一致。
  3. 隔離性 (Isolation):事務的執行不受其他事務的干擾,當數據庫被多個客戶端并發訪問時,隔離它們的操作,防止出現:臟讀、幻讀、不可重復讀。
  4. 持久性?(Durability):對于任意已提交事務,系統必須保證該事務對數據庫的改變不被丟失,即使數據庫出現故障。?

9.表的創建

數據庫的對象:表、視圖、索引、序列、同義詞

:存儲過程、存儲函數、觸發器、包、包體、數據庫鏈路(datalink)、快照。(12個)

基本的數據存儲集合,由行和列組成。

視圖 從表中抽出的邏輯上相關的數據集合。

序列 提供有規律的數值。

索引 提高查詢的效率

同義詞 給對象起別名

10.修改表列

基本的數據存儲集合,由行和列組成。

表名和列名遵循如下命名規則:

  1. 必須以字母開頭
  2. 必須在 1–30 個字符之間
  3. 必須只能包含 A–Z, a–z, 0–9, _, $, 和 #
  4. 必須不能和用戶定義的其他對象重名
  5. 必須不能是Oracle 的保留字
  6. Oracle默認存儲表名是都是大寫

11.清空表

delete from 表名 (沒有where?條件) 也可以清空一張表

  1. delete 逐條刪除表“內容”,truncate 先摧毀表再重建

(由于delete使用頻繁,Oracle對delete優化后delete快于truncate)

  1. delete 是DML語句,truncate 是DDL語句。DML語句可以閃回(flashback)和回滾rollback,DDL語句不可以閃回和回滾。

(閃回: 做錯了一個操作并且commit了,對應的撤銷行為。了解)

  1. 由于delete是逐條操作數據,所以delete會產生碎片,truncate不會產生碎片。

(同樣是由于Oracle對delete進行了優化,讓delete不產生碎片)。兩個數據之間的數據被刪除,刪除的數據——碎片,整理碎片,數據連續,行移動。

  1. delete不會釋放空間,truncate 會釋放空間。用delete刪除一張10M的表,空間不會釋放。而truncate會。所以當確定表不再使用,應使用truncate。

12.刪除表和重命名表

當表被刪除:

  1. 數據和結構都被刪除
  2. 所有正在運行的相關事務被提交
  3. 所有相關索引被刪除
  4. DROP TABLE 語句不能回滾,但是可以閃回

SQL> ?select * from tab?? 查看當前用戶下有哪些表。 拷貝保存表名。

SQL> ?drop table testsp?? 將測試保存點的表刪除。

SQL> ?select * from tab?? 再次查詢跟剛剛保存的表名比對,少了testsp,但多了另外一張命名復雜的表。

Oracle的回收站:

1. 查看回收站:show recyclebin??(sqlplus 命令) 那個復雜的命名即是testsp在回收站中的名字。

SQL> select * from testsp?? 這樣是不能訪問的。

SQL> select * from "BIN$+vu2thd8TiaX5pA3GKHsng==$0" ? 要使用“回收站中的名字”

2. 清空回收站:purge recyclebin?

SQL> drop table test1 purge? 表示直接刪除表,不經過回收站。

將表從回收站里恢復,涉及“閃回”的知識,作為了解性知識點。

注意:并不是所有的用戶都有“回收站”,對于沒有回收站的用戶(管理員)來說,刪除操作是不可逆的。

13.約束概念和分類

Not Null 非空約束

例如:人的名字,不允許為空。

2. Unique 唯一性約束

例如:電子郵件地址,不可以重復。

3. Check 檢查性約束

如:人的性別,只能填男或者女;工作后薪水滿足的條件應該大于0。

4. Primary Key 主鍵約束

主鍵是唯一標識表中某一行數據的列,主鍵約束隱含Not null + Unique。

一個表只能有一個主鍵,但是主鍵可以是某一列,也可以是多列組成表的主鍵,比如說可以用員工名和部門號兩列組成emp表的主鍵。將某兩個列作為主鍵必須用表級約束

constraint 約束名?primary key (列1,列2)

5. Foreign Key 外鍵約束

例如:部門表dept和員工表emp,不應該存在不屬于任何一個部門的員工。用來約束兩張表的關系。

一個表(子表)的外鍵必須是其他某個表(父表)具有唯一約束的列(一般都用主鍵),子表外鍵的值必須滿足能在的列中存在,或者為NULL

這里邊就涉及到一個問題,就是是父表的鍵值被刪除,這時候子表里邊的外鍵值應該怎么辦?有以下三種方案:

  1. 不允許刪除(restrict默認)
  2. 子表里邊的數據跟著刪除(cascade)
  3. 子表里邊的數據設置為空(set null)

多數情況下,使用SET NULL方法,防止子表列被刪除,數據出錯。

所以這里邊也涉及到刪除表的時候的順序:

1) 先將子表的內容刪除,然后再刪除父表。

2) 將子表外鍵一列設置為NULL值,斷開引用關系,然后刪除父表。

14.約束舉例說明

15.視圖

16.序列

17.索引

18.同義詞

19.SQL和sqlplus區分

20.上午課程

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

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

相關文章

人工智能之數學基礎:復矩陣

本文重點 復矩陣是線性代數中以復數為元素的矩陣,是實矩陣在復數域上的自然推廣。與實矩陣相比,復矩陣在數學性質、運算規則和應用場景上具有獨特性,尤其在量子力學、信號處理、控制理論等領域發揮關鍵作用。 復矩陣的定義與表示 定義:復矩陣指的是元素含有復數的矩陣。…

華清遠見成都中心嵌入式學習總結

一、Linux 基礎入門 課程首先介紹了 Linux 系統的六大特性,包括開源、免費、可裁剪等核心優勢。重點講解了文件系統結構,強調根目錄(/)作為唯一入口的樹狀結構。通過實操學習了 pwd、ls、cd 等基礎命令,掌握了絕對路徑…

linux安裝ollama

倆種方式都可 一、linux通過docker安裝ollama鏡像 1.下載安裝ollama鏡像 # 安裝 Docker sudo yum install docker sudo systemctl start docker#docker查看所有容器 docker ps -a # 查看所有容器# docker查看指定容器 docker ps -a |grep ollama# 創建模型存儲目錄&#xff…

Redis 學習目標

🎯 Redis 學習目標(開發者視角) ? 一、學習完成后能掌握的核心能力: 分類具體內容📦 基礎能力熟練掌握 Redis 五大數據結構(String、List、Hash、Set、ZSet),會用也會選對場景&am…

gerrit配置及使用git-lfs

gerrit服務器端配置 下載git-lfs插件 登錄Dashboard [Jenkins] (gerritforge.com),下載對應版本的插件 配置gerrit 將下載的lfs.jar插件放到${GERRIT_SITE}/plugins/下面為所有倉庫啟用git-lfs 此步驟需要修改 All-projects 倉庫配置,步驟如下 1、克隆倉…

深入理解 Linux PATH 環境變量:配置與優化!!!

深入理解 Linux PATH 環境變量:配置與優化 🚀 歡迎來到 Linux 環境變量的奇妙世界!今天我們來聊聊那個讓命令行如魚得水的幕后英雄——PATH 環境變量!😎 通過這篇博客,你將學會如何配置它、優化它&#xff…

如何在AMD MI300X 服務器上部署 DeepSeek R1模型?

DeepSeek-R1憑借其深度推理能力備受關注,在語言模型性能基準測試中可與頂級閉源模型匹敵。 AMD Instinct MI300X GPU可在單節點上高效運行新發布的DeepSeek-R1和V3模型。 用戶通過SGLang優化,將MI300X的性能提升至初始版本的4倍,且更多優化將…

簡化DB操作:Golang 通用倉庫模式

介紹 本代碼包提供一個用于數據庫操作的通用倉庫 (GenericRepository),利用 Golang 和 GORM (Go ORM) 實現。該倉庫設計用于簡化數據庫的 CRUD (創建、讀取、更新、刪除) 操作,支持批處理、沖突處理、分頁查詢等高級功能。 主要功能 創建記錄 (Create…

JavaWeb 課堂筆記 —— 08 請求響應

本系列為筆者學習JavaWeb的課堂筆記,視頻資源為B站黑馬程序員出品的《黑馬程序員JavaWeb開發教程,實現javaweb企業開發全流程(涵蓋SpringMyBatisSpringMVCSpringBoot等)》,章節分布參考視頻教程,為同樣學習…

雙引擎驅動:解密音視頻體驗的QoS技術底座與QoE感官革命

QoS 定義:QoS(Quality of Service,服務質量)衡量音視頻傳輸技術層面的性能表現,聚焦網絡傳輸和系統處理能力,通過客觀指標量化服務質量。核心指標 碼率/帶寬:數據傳輸速率上限,直接…

Stable Diffusion + Contronet,調參實現LPIPS最優(帶生成效果+指標對比)——項目學習記錄

目錄 前言 一、數據集:圖像文本,部分選取于DeepFashion 二、優化一,img2img 三、優化二,微調sd參數 四、優化三,dreamshaper優化 五、優化四,sdv1.5contronet 六、問題探索歷程 1. 從 SDXL 到輕量化模…

SQL 不走索引的常見情況

在 SQL 查詢中&#xff0c;即使表上有索引&#xff0c;某些情況下數據庫優化器也可能決定不使用索引。以下是常見的不走索引的情況&#xff1a; 1. 使用否定操作符 NOT IN ! 或 <> NOT EXISTS NOT LIKE 2. 對索引列使用函數或運算 -- 不走索引 SELECT * FROM user…

數據庫主從延遲全解析:原因、影響與解決之道

目錄 一、引言&#xff1a;理解數據庫主從架構 二、數據庫主從延遲的定義與測量 2.1 主從延遲的技術定義 2.2 如何測量主從延遲 2.3 主從延遲對系統的影響 三、主從延遲的常見原因分析 3.1 網絡延遲因素 3.1.1 網絡質量與帶寬限制 3.1.2 地理位置分布造成的延遲 3.2 …

分治-歸并系列一>翻轉對

目錄 題目&#xff1a;解析&#xff1a;策略一&#xff1a; 代碼&#xff1a;策略二&#xff1a; 代碼&#xff1a; 題目&#xff1a; 鏈接: link 這題和逆序對區別點就是&#xff0c;要找到前一個元素是后一個元素的2倍 先找到目標值再&#xff0c;繼續堆排序 解析&#xff1…

從0到1打造一套適合自己接單的腳手架05自動化創建表

上一篇我們是手動創建的表&#xff0c;感覺不方便&#xff0c;后續如果要做成產品在部署的時候一個個的創建表太麻煩了&#xff0c;我們讓ai來自動創建表&#xff0c;輸入如下提示詞 現在這種單獨去navicate執行也不方便&#xff0c;我希望是有一個目錄里存放的表結構的語句&a…

minio改成https+域名訪問

思路有兩個&#xff1a; 方式一&#xff1a;通過nginx反向代理&#xff0c;將https配置在nginx&#xff0c;內部的MinIO還是使用HTTP&#xff1b;方式二&#xff1a;MinIO服務端直接配置成HTTPS&#xff1b; 注意&#xff1a; 私鑰需要命名為&#xff1a;private.key 公鑰需要…

VS Code構建C/C++開發環境(Windows with MinGW and CMake)

文章目錄 目的編譯工具鏈基礎開發與調試基于CMake開發與調試關于settings.json總結 目的 在Windows上進行C/C開發目前最最常用的IDE就是微軟的 Visual Studio &#xff0c;只是對我來說早些年的VS實在是太卡了&#xff0c;留下了不好的印象。后來沒怎么用過&#xff0c;現在下…

一組可能的機器學習問題列表

線性回歸與多項式擬合的關系最小二乘法在機器學習中的應用梯度下降是如何實現的貝葉斯分類器的應用場景高斯分布與判定在哪里用到模型的評估有哪些參數誤差中的偏差和方差定義訓練集分組的快捷方式如何度量模型性能查準率查全率的定義roc,aux的含義正則化是什么意思k均值用來解…

linux下io操作詳細解析

在 Linux 系統下&#xff0c;IO&#xff08;輸入/輸出&#xff09;操作是程序與外部設備&#xff08;如文件、網絡等&#xff09;交互的重要方式。Linux 提供了豐富的系統調用和庫函數來支持各種 IO 操作。以下是對 Linux 下 IO 操作的詳細解析&#xff0c;包括文件 IO、網絡 I…

wsl2+ubuntu22.04安裝blender教程(詳細教程)

本章教程介紹,如何在Windows操作系統上通過wsl2+ubuntu安裝blender并運行教程。Blender 是一款免費、開源的 ??3D 創作套件??,廣泛應用于建模、動畫、渲染、視頻編輯、特效制作等領域。它由全球開發者社區共同維護,支持跨平臺(Windows、macOS、Linux),功能強大且完全…