ORACLE資料庫入門再在屋裡坐會

来源:https://www.cnblogs.com/yjxFive/archive/2018/06/01/ORACLE.html
-Advertisement-
Play Games

一、資料庫簡介 資料庫概述 資料庫(database)是按照數據結構來組織,存儲和管理數據的倉庫,它產生與距今五十年前. 簡單來說是本身可視為電子化的文件櫃--存儲電子文件的處所,用戶可以對文件中的數據運行新增,截取,更新,刪除等操作。 常見的數據模型 1. 層次結構模型:層次結構模型實質上是一種有 ...


一、資料庫簡介

資料庫概述

  資料庫(database)是按照數據結構來組織,存儲和管理數據的倉庫,它產生與距今五十年前. 簡單來說是本身可視為電子化的文件櫃--存儲電子文件的處所,用戶可以對文件中的數據運行新增,截取,更新,刪除等操作。

常見的數據模型

  1. 層次結構模型:層次結構模型實質上是一種有根節點的定向有序的,IMS(Information ManagementSystem)是典型代表

  2. 網狀結構模型: 按照網狀數據結構建立的資料庫系統稱為網狀資料庫系統,其典型的代表為DBTG(Data Base Task Group)

  3. 關係結構模型: 關係數據結構把一些複雜的數據結構歸納為簡單的二元關係(即二維關係表形式),常見的有Oracle,MySQL,mssql等

主流的資料庫

  1. mssql -> 微軟 -> 只能運行在Windows平臺,體積比較龐大,占用許多系統資源,但使用方便,支持命令和圖形化管理(收費) -> 中型企業

  2. MySQL -> 甲骨文 -> 是個開源的資料庫server,可運行在多種平臺,特點是響應速度特別快,主要面向中小性企業 -> 中小型企業

  3. PostgreSQL -> 號稱<世界上最先進的開源資料庫>,可以運行在多種平臺下,是tb級資料庫,而且性能也很好 -> 中大型企業

  4. Oracle -> 甲骨文 -> 獲得最高認證級別的ISO標準安全認證,性能最高,保持開放平臺下的TPC-D和TPC-C的世界記錄,但價格不菲 -> 大型企業

  5. DB2 -> IMB -> DB2在企業級的應用廣泛,在全球的500家最大的企業中,相當一部分使用DB2資料庫伺服器(收費) -> 大型企業

  6. Access -> 微軟 -> Access是一種桌面資料庫,只適合數據量少的應用,在處理少量數據和單機訪問的資料庫時是很好的,效率也很高 -> 小型企業

二、ORACLE資料庫概述

  ORACLE資料庫系統是美國ORACLE公司(甲骨文)提供的以分散式資料庫為核心的一組軟體產品,是目前最流行的客戶/伺服器(CLIENT/SERVER)或B/S體繫結構的資料庫之一 -> 拉里 埃里森。

體系機構

  從嚴格意義上來講Oracle DataBase是有兩個部分組成。

  實例: 實例是資料庫啟動時初始化的一組進程和記憶體結構。

  資料庫: 資料庫則指的是用戶存儲資料庫的一些物理文件。

物理結構

物理結構包含三個數據文件:

  1) 控制文件 -> v$controlfile

  2) 數據文件 -> v$datafile

  3) 線上重做日誌文件 -> 日誌組(v$log),日誌組成員文件(v$logfile)

邏輯結構

功能: 資料庫如何使用物理空間。

組成: 表空間, 段, 區, 塊的組成層次。

  表空間(tablespace): 表空間從邏輯上是多個段的結合,在物理上是多個數據文件的集合,相當於在段和數據文件的對應中加入了一個中間層來解決多對多的關係. 表空間 TableSpace,是存儲結構中的最高層結構.建立一個表空間的時候, 需要指定存儲的文件. 一個表空間可以指定多個數據文件, 多個文件可以在不同的物理存儲上. 也就是說, 表空間是可以跨物理存儲的. 但是有一點就是, 表空間下一級對象數據段的存儲, 是不能指定存儲在那個文件里的。

  段(segment): 段就是包含所有數據的邏輯結構,數據段是與資料庫對象相對應,一般一個資料庫對象對應一個數據段,多個extent構成一個數據段,每個數據段實際上就是資料庫一個對象的代表,比較典型的段就是"表",稱為表段,還有索引段,撤銷段等等。

  區(extent): 是比比數據塊大一級的存儲結構,表示的是一連串連續的數據塊集合。

塊(block): 數據塊(block) 是 Oracle 數據信息的最小邏輯存儲單元,Oracle所有對數據的操作和空間分配,實際上都是針對數據塊 block 的操作。

三、用戶和表空間

用戶

1、系統用戶

  1)sys system(sys許可權高於system)

  2)sysman

  3)scott/tiger

2、用戶登錄

  語法一: 輸入用戶名:username/password

  eg:system/123456

  語法二: conn[ect] username/[password] [@server][as sysdba | sysoper]

  eg1:登錄帳號號,輸入:

    connect sys/123456 @orcl as sysdba

    其中,orcl是安裝時設置的伺服器名

  eg2:登錄帳號號,輸入:

    connect system/123456

  eg3:登錄帳號號,輸入:

    connect system/

  eg4:登錄sys帳號

    conn / as sysdba

  語法三: 打開DOS命令視窗,輸入: sqlplus username/password[as sysdba]

  eg1:登錄system帳號

    sqlplus system/123456 as sysdba

  eg2:登錄sys帳號

    sqlplus / as sysdba

    show user -> sys

3、斷開與當前資料庫的連接 -> disc

4、顯示用戶名 -> show user

5、查詢所有ORACLE提供的用戶

  1)select * from all_users

  2)select * from dba_users

6、斷開與當前資料庫的連接並會退出 -> exit

7、編輯指定或緩衝區的SQL腳本

      ed[it] 路徑 + 文件名

      tab : 返回當前賬號下所有的列表

8、執行 -> start | @ 路徑 + 文件名

9、將sqlplus屏幕中的內容輸出到指定的文件

      語法: 開始印刷 -> spool 路徑名+文件名

             結束印刷 -> spool off

10、設置/顯示寬度(linesize): 設置顯示行的寬度,預設為80個字元

  語法: set linesize 列數寬度 / show linesize

11、設置顯示頁數(pagesize): 設置每頁顯示的行數,預設是14行

  語法: set pagesize 行數 / show pagesize

12、設置列寬

  語法: col[umn] 列名 for[mat] 格式

其中格式有兩種情況:

  1)字元串型數據,an,以a開始,後面表示n個字元列寬

  2)數據型數據,9,表示一位列寬,跟多少個9,就表示占多少個列寬

13、啟用 / 禁用用戶

  語法: alter user 用戶名 account unlock(禁用) | lock(啟用)

註:

  1)數據表是綁定在用戶中的,可以通過數據字典tab查看當前用戶下的數據表(一個數據表(實例)中包含多個用戶,每個用戶下包含多張數據表)

         select * from tab ; -> 相當於MySQL中的show tables ;

  2)查看表 / 視圖結構 -> desc 表名 / 視圖

  3)l[ist] -> 顯示上一條SQL命令

    /  -> 執行上一條SQL命令

    r[un] -> 顯示並執行上一條SQL命令

  4)在11和12點中的設置只在當前會話中永久有效或永久失效,則配置一下文件:

    D:\app\Administrator\product\11.2.0\dbhome_1\sqlplus\admin\glogin.sql

  每次登錄用戶時都會載入此文件,可以此文件中進行配置,如下:

    set linesize 200

    set pagesize 20

  5)註釋

        -- 單行註釋

        /*多行註釋*/

  6)清屏 -> host doc命令/linux命令

    window系統 -> host cls

    linux系統 -> host clear

  7)臨時修改上一條SQL語句

    ed[it] -> 標記時,後面不要加分號,它是一個單純的SQL語句,然後執行上一條SQL命令: /

表空間

1、分類

  1)永久表空間

  2)臨時表空間

  3)UNDO表空間 -> 保存修改之前的數據,用於事務的回滾,撤銷操作

2、查看用戶的表空間

  1)系統管理員 -> dba_tablespaces

  2)普通用戶 -> user_tablespaces

  3)系統管理員 -> dba_users

  4)普通用戶 -> user_users

3、設置用戶的預設表空間和臨時表空間

  alter user username

  default|temporary

  tablespace tablespace_name

4、創建表空間

  create [temporary] tablespace

  tablespace_name

  tempfile|datafile 'xx.dbf' size xx

  eg1:創建一個永久表空間

    create tablespace test1_tablespace

    datafile 'testfile1.dbf' size 10M ;

  eg2:創建一個臨時表空間

    create temporary tablespace temp1_tablespace

    tempfile 'tempfile1.dbf' size 20M ;

  eg3:查看

    desc dba_data_files ; //永久表空間

    desc dba_temp_files ;       //臨時表空間

    select file_name from dba_data_files where tablespace_name = 'TEST1_TABLESPACE'     //註:表空間的名稱要大寫TEST1_TABLESPACE

5、修改表空間

  1)修改表空間的狀態

    a)設置兩計或離線狀態 -> alter tablespace tablespace_name online | offline;

      設置離線狀態 -> alter tablespace test1_tablespace offline

      設置聯機狀態 -> alter tablespace test1_tablespace online

    b)設置只讀或可讀寫狀態->alter tablespace tablespace_name

      read only | read write

      設置只讀狀態 -> alter tablespace test1_tablespace read only

      設置可讀寫狀態 -> alter tablespace test1_tablespace read write

    註: online狀態預設為read write

  2)修改數據文件

    a)增加數據文件 -> alter tablespace tablespace_name

      add datafile 'xx.dbf' size xx ;

      給表空間添加一個數據文件 -> alter tablespace test1_tablespace

      add datafile 'testfile2.dbf' size 10M ;

    b)刪除數據文件 -> alter tablespace tablespace_name

      drop datafile 'xx.dbf';

6、刪除表空間

  drop tablespace tablespace_name [including connects]

  註: including connects刪除表空間的同時, 把數據也刪除

四、用戶管理和常用的命令

用戶介紹

ORACLE用戶是學習ORACLE資料庫中的基礎知識,Oracle資料庫中預設為我們提供了30個用戶,我們可以通過all_users進行查詢。

系統常用的預設ORACLE用戶:

  1.sys用戶: 超級用戶,完全是個sysdba(管理資料庫的人),擁有dba, sysdba, sysoper等角色或許可權,是oracle許可權最高的用戶,登錄時不能用normal

  2.system用戶: 超級用戶, 預設是sysoper(操作資料庫的人),不過它也能以sysdba的許可權登錄,擁有普通dba角色許可權

  3.scott用戶: 是個演示用戶,是用來學習Oracle用的

常用命令

1、登錄命令  -> 用於登錄到Oracle資料庫

  用法 -> sqlplus 用戶名/密碼 [as sysdba]

註: 當用特權用戶登錄時,必須帶上sysdba

  普通用戶登錄 -> sqlplus scott/tiger

  sys用戶登錄 -> sqlplus sys/sys as sysdba

  操作系統的身份登錄 -> sqlplus conn/ as sysdba

2、連接命令(conn) -> 用於連接到Oracle資料庫,也可實現用戶的切換

  用法 -> conn 用戶名/密碼 [as/sysdba/sysoper]

  註: 當用特權用戶登錄時,必須帶上sysdba或sysoper

3、斷開連接(disc) -> 斷開當前資料庫的連接

  用法 -> disc

4、顯示用戶名(show user) -> 顯示當前用戶名

  用法 -> show user

5、退出(exit) -> 斷開與當前資料庫的連接並會退出

  用法 -> exit

6、編輯腳本(edit/ed) -> 編輯指定或緩衝區的SQL腳本

  用法 -> edit [文件名]

7、運行腳本(start/@) -> 運行指定的腳本

  用法 -> start/@ 文件名

8、印刷屏幕(spool) -> 將sqlplus屏幕中的內容輸出到指定的文件

  用法 -> 開始印刷(spool 文件名) 結束印刷(spool off)

9、顯示寬度(linesize) -> 設置顯示行的寬度,預設是80個字元

  用法 -> set linesize 120

10、顯示頁數(pagesize) -> 設置每頁顯示的行數,預設是14頁

  用法 -> set pagesize 20

用戶管理

1、創建用戶 

Oracle中需要創建用戶一定是要具有dba(資料庫管理員)許可權的用戶才能創建,而且創建的新用戶不具備任何許可權,連登錄都不行

語法:

  create user 新用戶名 identified by 密碼

  [default tablespace (表空間)]

  [temporary tablespace (臨時表空間)]

  [profile (資源文件名)]

  [quota(空間大小,單位M) on (表空間)]

  例 -> create user zs identified by 123456 -> 創建普通用戶zs ,密碼123456, 沒有指定用戶所屬的表空間,資源文件和臨時文件同時因為沒有指定quota(空間配額), zs用戶將不能在相應的表空間建立數據對象,在Oracle11G中,普通用戶預設表空間為Users, 臨時表空間為temp, 資源文件預設使用default

附:解析

  表空間: 表空間是資料庫中最大的邏輯單位,一個Oracle資料庫至少包含一個表空間, 就是名為system的系統表空間,一個用戶只屬於一個表空間,預設為Users

  臨時表空間: 臨時表空間主要用於order by 語句的排序以及其他一些中間操作如:讀取數據時 臨時存儲空間, Oracle從9i開始, 臨時表空間通用temp

  用戶資源文件: 用戶資源文件用來對用戶的資源存取進行限制, 包括CPU資源的使用, 密碼的使用策略等, 預設Default

管理表空間

查看表空間 -> dba sys v$ 開頭的對象要以dba身份訪問

  select * from v$tablespace -> 查看系統當前擁有的表空間

  select * from username,default_tablespace from user_users -> 查看當前用戶所屬的表空間

創建表空間

語法:

  create tablespace 表空間名

  datafile '文件路徑/文件名/dbf' -> 數據文件存放在打他datafile指定目錄中

  size 大小M -> 預設大小(M)

  autoextend on -> 自動擴展

  next 每次擴展M maxsize 最大擴展到M ;

刪除表空間

  刪除表空間及空間文件

  drop tablespace 表空間名 including contents and datafiles ;

管理資源文件

查看資源文件

  select * from daba_profiles where profile='資源文件名'

創建資源文件

語法一:

  create profile '資源文件名' limit ->創建資源文件

  sessions_per_user 3 -> 支持該用戶同時併發訪問量為3次

  failed_login_attempts 3 -> 密碼輸入如果錯誤3次

  password_lock_time unlimited ; -> 永久鎖定(dba可解鎖)

語法二:

  create user '用戶名' identified by 密碼 -> 創建用戶

  default tablespace '表空間名' -> 預設表空間

  profile '資源文件名' -> 預設用戶資源文件

  quota 大小(M) on '表空間名' -> 給用戶在表空間分配(M)配額

刪除資源文件

  drop profile 資源文件名

2、修改密碼

修改用戶密碼一般有兩種方式, 一種是通過password修改, 另一種是通過alter user實現, 如果要修改他人的密碼, 必須要具有相關許可權才可以。

用法:

  方式一: password [用戶名]

  方式二: alter user 用戶名 identified by 新密碼

3、用戶禁用/啟用

Oracle中想要禁用或啟用一個賬戶也同樣是使用alter user 命令來完成, 只是語法和修改密碼有所不同。

  禁用 -> alter user 用戶名 account lock

  啟用 -> alter user 用戶名 account unlock

4、刪除用戶 

Oracle中要刪除一個用戶,必須要具有dba的許可權,而且不能刪除當前用戶,如果要刪除的用戶所有數據對象, 那麼必須加上關鍵字cascade

用法:

  drop user 用戶名 [cascade]

用戶許可權與角色

1、許可權 

Oracle中許可權分為系統許可權和實體許可權

系統許可權: 系統規定用戶使用資料庫的許可權(系統許可權是對用戶而言)

授予系統許可權 -> 要實現授予系統許可權只能由DBA用戶授出

  查看ORACLE所有系統許可權

  select * from system_privilege_map

  用法 -> grant 系統許可權1[,系統許可權2] ... to 用戶名1[,用戶名2] ... [with admin option]

系統許可權回收 -> 系統許可權只能由DBA用戶回收

  用法 -> revoke 系統許可權 from 用戶名

實體許可權(對象許可權)

  某種許可權對用戶其他用戶的表或視圖的存取許可權(針對錶和視圖而言),主要包括select update insert alter index delete all其中all包括所有許可權

授予實體許可權

  用法 -> grant 實體許可權1[,實體許可權2] ... on 表名 to 用戶名1[,用戶名2] ...[with grant option]

實體許可權回收

  用法 -> revoke 實體許可權 on 表名 from 用戶名

查詢用戶擁有那些許可權(用戶都能使用)

  select * form user_tab_privs; -> 查詢授予用戶的對象許可權

  select * form user_role_privs; -> 查詢授予用戶的角色許可權

  select * form user_sys_privs; -> 查詢授予用戶的系統許可權

  select * form session_privs; -> 查詢當前用戶擁有的所有許可權

查看全部用戶擁有權(dba身份訪問)

  select * from dba_tab_privs; -> 查詢授予全部用戶的對象許可權

  select * from dba_role_privs; -> 查詢授予全部用戶的角色許可權

  select * from dba_sys_privs; -> 查詢授予全部用戶的系統許可權

2、角色

角色是一組許可權的結合,將角色賦給一個用戶,這個用戶就擁有了和這個角色中的所有許可權

角色分為 -> 預定義角色和自定義角色

系統預定義角色 ->預定義角色是在資料庫安裝後系統自動創建的一些常用的角色

  DBA: 擁有全部特權,是系統最高許可權,只有DBA才可以創建資料庫結構

  RESOURCE: 擁有resource許可權的用戶只可以創建實體, 不可以創建資料庫結構

  CONNECT: 擁有Connect許可權的用戶則可以登錄Oracle, 不可以創建實體, 不可以創建數據結構

註: 對於普通用戶: 授予 connect, resource 許可權

  對於 DBA 管理用戶: 授予 connect, resource, dba 許可權

  connect resource dba這些預定義角色主要是為了向後相容. 其主要是用於資料庫管理, oracle 建議用戶自己設計資料庫管理和安全的許可權規劃, 而不要簡單的使用這些預定角色, 將來的版本中這些角色可能不會作為預定義角色

  delete_catalog_role,  execute_catalog_role,  select_catalog_role 這些角色主要用於訪問數據字典視圖和包

  exp_full_database,imp_full_database這兩個角色用於數據導入導出工具的使用

自定義角色

  Oracle建議自定義自己的角色,可以更加靈活方便管理用戶

創建角色

  create role admin;

授權給角色

  grant connect,resource,to admin[with admin option];

  grant select,insert on 表名 to admin [with grant option];

將角色賦予用戶

  grant admin to 用戶[with admin option];

  grant role_name to role_name[with admin option];

撤銷角色許可權

  revoke connect from admin ;

刪除角色

  drop role admin ;

五、SQL語言與函數

SQL概述

SQL(Structure Query Language)機構化查詢語言, 是一種資料庫查詢和程式設計語言, 用於存取數據以及查詢,更新和管理關係資料庫系統, 同時也是數據腳本文件的擴展名

SQL語言的主要部分

  1)數據定義語言Data Definition Language(DDL) -> 用來建立資料庫,數據對象和定義序列(如:create drop alter等語句)

  2)數據操作語言Data Manipulation Language(DML) -> 用來插入, 修改, 刪除, 查詢, 可以修改資料庫中的數據(如:insert(插入) update(修改) delete(刪除)語句)

  3)數據查詢語言Data Query Language(DQL) -> 是SQL語言中, 負責進行數據查詢而不會對數據本身進行修改的語句,這是最基本的SQL語句(如: select(查詢))

  4)數據控制語言Data Controlling Language(DCL) -> 用來控制資料庫組件的存取允許,存取許可權等(如: grant revoke commit rollback等語句)

  5)事務控制語言Transactional Control Language(TCL) -> 用於維護數據的一致性包括commit(提交事務), rollback(回滾事務)和savepoint(設置保存點)3條語句

 概念

1、SQL

 結構化查詢語言,是一門用於操作資料庫的程式設計語言

2、資料庫

存放數據的倉庫

數據表: 存放數據的載體,在關係資料庫中,以二維表的形式存放數據

行: 是數據的集合 -> 記錄

列: 具有某種數據類型的數據

3、關鍵字(欄位)

關鍵字是關係模型中一個重要概念,它是邏輯結構,不是資料庫的物理部分

  1)候選關鍵字: 如果一個屬性集能惟一地標識表的一行而又不含多餘的屬性,那麼這個屬性集稱為侯選關鍵字

  2)主關鍵字(主鍵): 主關鍵字是被挑選出來, 作表的行的惟一標識的侯選關鍵字 一個表最多只可以有一個主關鍵字,主關鍵字又稱為主鍵

  3)公共關鍵字: 在關係資料庫中, 關係之間的聯繫是通過相容或相同的屬性註來表示的; 如果兩個關係中具有相容或相同的屬性或屬性組, 那麼這個屬性或屬性組被稱為這兩個關係的公共關鍵字

  4)外關鍵字(外鍵): 如果公共關鍵字在一個關係中是主關鍵字, 那麼這個公共關鍵字被稱為另一個關係的外關鍵字; 由此可見, 外關鍵字表示了兩個關係之間的聯繫;以另一個關係的外關鍵字作主關鍵字的表被稱為主表, 具有此外關鍵字的表被稱為主表的從表; 外關鍵字又稱作外鍵; 另外, 表間關係也是通過主鍵來實現的; 一個表可以有多少外鍵, 即可以跟另外多個表建立關係;

註:

  a)外鍵一般設置多的一邊,冗餘少

  b)外鍵關聯的欄位, 在另一張表一般是主鍵

  c)主鍵所在的表稱為主鍵表(主表) 外鍵所在的表稱為外鍵表(從表)

  d)外鍵與主鍵的數據類型要一致 

Oracle數據的數據類型

定義: 開闢空間, 指定空間存放的數據種類,規範數據符合實際

類型

1.字元類型

  1)char(長度): 1~2000 位元組 ->固定長度字元串,長度不夠的用空格補充

  2)varchar2(長度): 1~4000 位元組 ->可變長度字元串, 與 char類型相比, 使用 varchar2可以節省磁碟空間, 但查詢效率沒有 char 類型高

2.數值類型

  number(m,n): m(1~38)  n(-84~127) ->可以存儲正數 負數 零 定點數和精度為38位的浮點數, 其中, m代表精度, 代表數字的總位數; n表示小數點右邊素質的位數

3.日期類型

      date: 7位元組 ->用於存儲表中的日期和時間數據, 取值範圍是公元前4712年1月1日至公元9999 年12月31日, 7 個位元組分別表示世紀 年 月 日 時 分和秒

4.其他類型

  1)二進位數據類型:

    raw(1-2000位元組) ->可變長二進位數據, 在具體定義欄位的時候必須指明最大長度 n

    long raw(1-2GB) ->可變長二進位數據

  2)LOB數據類型

    CLOB(Character Large Object 1-4GB) ->只能存儲字元數據

    NCLOB(Native Character Large Object 1-4GB) ->保存本地語言字元集數據

    BLOB(Binary Large Object 1-4GB) ->以二進位信息保存數據

運算符

1. 算術運算符[+,-,*,/,mod(10,3)]

2. 關係運算符[>,>=,<,<=,!=,<>,=]BETWEEN…AND、IN、LIKE 和 IS NULL]

3. 邏輯運算符 and or not

4. 集合操作符 union,union all,minus,INTERSECT

  union:取出 2 個表數據合併,去除重覆記錄

  union all:取出 2 個表數據合併,保留重覆記錄

  minus:取出 2 個表中不同數據

  Intersect:取出 2 個表中共有數據【交集】

5. 連接操作符 ||

DDL語言(數據定義語言)

1、create table 命令

用於創建表, 在創建表時,經常會創建該表的主鍵、外鍵、唯一約束、Check 約束等

語法結構

create table 表名(

 [欄位名] [類型] [約束]

 ………..

primary key(column1,column2),

foreign key(column1,column2,…..column_n),

references tablename(column1,column2,…..column_n)

)

2、alter table 命令

對已經存在的表進行修改,可以新增或刪除欄位,修改欄位名或其類型和類型長度

修改表名: alter table old_table rename to new_table

修改欄位名:alter table table_name rename column old_column to new_column

添加欄位: alter table table_name add (new_column varhcar2(200) default‘null’,new_column2 number)

修改數據類型:alter table table_name modifiy (filedname varchar2(100))

刪除欄位:alter table table_name drop column column_name

添加主鍵alter table table_name add constraint pk_name primary key(column_id)

刪除主鍵:alter table table_name drop constraint pk_name

添加外鍵,檢查,唯一約束alter table table_name add constraint fk_name foreign key(column_id) references 主表(主鍵)

添加檢查約束: Alter table stu add constraint ck_sname check(length(sname)>=2)

添加唯一約束:alter table stu add constraint uq_sname unique(sname)

刪除外鍵:alter table table_name drop constraint fk_name

3、drop table命令

用於從資料庫中刪除表及全部數據

drop table table_name [purge];--purge:清除緩存

4、Truncate table 命令 

可以快速刪除表的記錄並釋放空間,不使用事務處理,速度快且效率高,但無法回滾事務:truncate table table_name

5、其他create命令

create index:創建數據表索引

create procedure:創建存儲過程

create function:創建用戶函數

create view:創建視圖

create trigger:創建觸發程式

create sequence: 創建序列

6、SEQUENCE

在 oracle 中 sequence 就是所謂的序列號,每次取的時候它會自動增加,一般用在需要按序列號排序的地方。

創建語法:

  create sequence sequence_marks

  increment by 1 --每次加幾個

  start with 1 --從 1 開始計數

  nomaxvalue --不設置最大值

  nocycle --一直累加,不迴圈

  cache 10 --使序列號預分配,預設 nocache

例子: select sequence_marks.currval from dual insert into table_name values(sequence_marks.nextval)

刪除 :drop sequence sequence_marks

DML語言 -> 數據操作語言

1、 INSERT 語句

Insert into table_name(column1,column2 … … .column_n) values (val1….)

插入多條:

insert into 表名(列名.....) select 列名.... from 源表名

insert into stu select 1,'abc' from dual union

select 2,'abcd' from dual;

2、UPDATE 語句

update table_name set column1=value,…. where [condition…]

3、DELETE 語句

Delete from table_name where [condition…]

DQL語言 -> 資料庫查詢語言

1、基本語法

SELECT column_list[*查詢所有數據]

[ INTO new_table ]

FROM table_source

[ WHERE search_condition ]

[ GROUP BY group_by_expression ]

[ HAVING search_condition ]

[ ORDER BY order_expression [ ASC | DESC ] ]

例子:

  SQL>select * from em--查詢所有數據

  SQL>select ename,job from em--查詢指定的欄位數據

  SQL> select * from emp where sal>1000--加條件

2、聚合函數

註:以下例子數據來自ORACLE自帶表“EMP”和“DEPT”

聚合函數對一組值執行計算並返回單一的值。聚合函數忽略空值。

聚合函數經常與 SELECT 語句的 GROUP BY 子句一同使用。不能在WHERE 子句中使用組函數。

  AVG(expression): 返回集合中各值的平均值

查詢所有人都的平均工資

  select avg(sal) from emp

  COUNT(expression): 以 Int32 形式返回集合中的項數

查詢工資低於 2000 的人數

  select count(*) from emp where sal<2000

  MAX(expression): 返回集合中的最大值

查詢最高工資

  select max(sal) from emp

  MIN(expression): 返回集合中的最小值

查詢最低工資

  select max(sal) from emp

  SUM(expression): 返回集合中所有值的總和

查詢部門編號為 20 的工資總和

  select sum(sal) from emp where deptno=20

3、排序函數

用於根據指定的列對結果集進行排序

ORDER BY 語句

查詢所有信息並按工資排序

  select * from emp order by sal

  升序(asc)

查詢所有信息並按工資升序排序

  select * from emp order by sal asc

  降序(desc)

查詢所有信息並按工資降序排序

  select * from emp order by sal desc

  ROWNUM 與 ORDER BY[ROWNUM:偽列,只能使用<,<=,!=]

4、分組函數

分組函數作用於一組數據,並對一組數據返回一個值。

GROUP BY 子句

查詢每個部門的平均工資

  select avg(sal) from emp group by deptno

  HAVING 子句

查詢部門的平均工資大於 2000

  select avg(sal) from emp group by deptno having avg(sal)>2000

5、連接查詢

連接查詢是關係資料庫中最主要的查詢,主要包括內連接、外連接和交叉連接等。通過連接運算符可以實現多個表查詢。

1)內連接

內連接也叫連接,是最早的一種連接。還可以被稱為普通連接或自然連接

  查詢工資最高的 5 個人信息

    select e.*,rownum 編號 from (select * from emp order by sal desc) e

    where rownum<=5

    [或 rownum!=6]

  這自然連接,內連接是從結果表中刪除與其他被連接表中沒有匹配行的所有行,所以內連接可能會丟失信息。

  等值連接:

    select * from emp inner join dept on emp.deptno=dept.deptno

    select * from emp,dept where emp.deptno=dept.deptno

  不等值連接:

    

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 區別: (1)#將傳入的數據都當成一個字元串,會對自動傳入的數據加一個雙引號。如:order by #user_id#,如果傳入的值是id,則解析成的sql為order by "id"。 (2)$將傳入的數據直接顯示生成在sql中。如:order by $user_id$,如果傳入的值是id,則解析 ...
  • 本文轉自:https://stackoverflow.com/questions/48135889/writing-nvarchar-to-a-text-file According to the Scripting.FileSystemObject documentation, the Creat ...
  • 查找列名等於某一字元串: select * from table where column like '%string%' 查找列名不等於某一字元串 select * from table where column not like '%string%' ...
  • 1 select t1.empno, t1.ename, t1.deptno, t1.sal 2 from emp t1 3 inner join ( 4 select t2.deptno, max(sal) max_sal 5 from emp t2 6 group by t2.deptno ) ... ...
  • 本文來自 網易雲社區 。 Join操作是資料庫和大數據計算中的高級特性,大多數場景都需要進行複雜的Join操作,本文從原理層面介紹了SparkSQL支持的常見Join演算法及其適用場景。 Join背景介紹 Join是資料庫查詢永遠繞不開的話題,傳統查詢SQL技術總體可以分為簡單操作(過濾操作-wher ...
  • 本文來自 網易雲社區 。 Dolphin 是猛獁平臺里的一個機器學習功能模塊,提供給數據科學家進行機器學習的演算法開發、模型訓練和服務發佈,提供分散式全功能深度學習框架,易學易用,高效靈活,支持 Tensorflow、MXNet、Caffe、Spark 等多種機器或深度學習框架,最大可能的挖掘出數據的 ...
  • 今天查詢表的時候報無效的數字。查看表,都是varchar。 最後發現在進行關聯表操作的時候,其中一個id的類型是number。正常情況下,字元串和數字的比較是可以的。這裡只能給數字加上to_char解決問題。 出現這個問題,一定是存在number欄位,仔細查看 ...
  • 一. DML觸發器; 二. DDL觸發器; 三. LOGON 觸發器; ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...