oracle數據庫中的SQL語言基礎

1、登錄SQL plus

使用系統用戶登錄:

首先系統用戶有:sys和system,這兩個用戶權限較高;

其中sys權限要高于system,必須以管理員或系統操作人員的權限才能登錄;

system可以直接登錄;

sysman用于操作企業管理器來使用,是管理人員級別用戶;

Scott:默認的密碼是tiger;上述三種的密碼為系統設置的默認密碼;

2、查看登錄用戶:show user命令

SQL plus中輸入的命令不需要用“;”結尾;但是對于SQL語句要用“;”結尾,表示一個命令的結束;

dba_user數據字典:是數據庫提供的表,用于查看數據庫的信息;

Scott 用戶:默認是被鎖定的,則需要使用時,必須解鎖;

啟用用戶的語句:alter user username account unlock;

在將Scott用戶解鎖后,即可使用Scott用戶登錄SQL plus:connect scott/tiger

3、表空間

表空間概述

理解表空間:表空間是數據庫的邏輯存儲空間;可以理解為在數據庫中開辟的一個空間,用于存儲數據庫的對象;一個數據庫可以由多個表空間來構成;表空間是由一個或多個數據文件構成的;數據文件的位置和大小可由用戶自行定義;

表空間的分類:

永久表空間——永久化存儲的對象,例如表、視圖、存儲過程等; ?

臨時表空間——數據庫操作當中中間執行的過程,當執行結束后,該存放的內容就會被釋放,不會進行永久性保存;(每個用戶只有一個臨時表空間)

UNDO表空間——事務所修改數據的舊址,即被修改之前的數據;(便于對數據的回滾)

查看用戶的表空間

dba_tablespaces和user_tablespaces數據字典:前者是系統管理員級的用戶來查看的字典,后者是普通用戶的字典;

dba_users和user_users數據字典:同樣,前者是系統管理員級的用戶字典,后者是普通用戶級的字典;

設置用戶的默認或臨時表空間

ALTER USER username DEFAULT|TEMPORARY TABLESPACE tablespace_name(普通用戶沒有修改默認表空間的權限,要想修改,則必須利用管理員級別的用戶為普通用戶設置表空間,或者為其設置權限)

alter user system default tablespace system;將用戶修改為system用戶

創建表空間:create [temporary] tablespace tablespace_name tempfile|datafile 'xx.dbf' size xx;(永久表空間和臨時表空間)

修改表空間:

%修改表空間的狀態:

# 設置聯機或脫機狀態alter tablespace tablespace_name online|offline;(表空間的狀態默認是聯機狀態)

# 設置只讀或可讀寫狀態 alter tablespace tablespace_name read only|read write;(表空間必須是聯機在線狀態)

%修改數據文件:

增加數據文件 alter tablespace tablespace_name add datafile 'xx.dbf' size xx;

刪除數據文件?alter tablespace tablespace_name drop datafile 'filename.dbf';(不能刪除創建表空間時的第一個數據文件,要想刪除該文件,則需刪除整個表空間)

刪除表空間:

drop tablespace tablespace_name [INCLUDING CONTENTS];(【】里面的表示刪除表空間的同時刪除表空間中的數據文件)

4、操作表

# 認識表

表都是存放在表空間中;表是存儲數據的最基本的單位;在Oracle中表都是二維結構,行(記錄)和列(域或者字段)構成;

約定:每一列數據必須具有相同數據類型;列名唯一;每一行數據的唯一性;

# 數據類型

字符型 CHAR(N)(n最大值是2000)、NCHAR(N)(n最大值是1000)均是固定長度的類型,其中NCHAR是按照Unicode格式存放數據的,一般用來存儲漢字;

VARCHAR2(N)(n最大值是4000)和NVARCHAR2(N)(n最大值是2000)是可變長度的數據類型,區別也是后者是按Unicode格式存放數據;

數值型 NUMBER(p, s)p是指有效數字,s是小數點后的位數;

FLOAT(n)主要用于存儲二進制數據,能表示的二進制的位數是126位;當將二進制轉換成十進制,將這個數*0.30103;

日期型 DATE 范圍是公元前4712年1月1日到公元9999年12月31日,可以直接精確到秒;

TIMESTAMP時間戳類型,能精確到小數秒;

其他類型(存放大對象的數據)BLOB存放的是4G的數據,是以二進制的形式存放的;

CLOB也是4GB,是以字符串的形式存放的;

# 管理表

%創建表:(table_name在同一個用戶下表名要是唯一的)

create table table_name

(

column_name datatype , ...

);

%修改表:(修改表的結構)

添加字段:alter table table_name add column_name datatype;

更改字段的數據類型:alter table table_name modify column_name datatype;(修改數據長度或者直接更改數據類型)

刪除字段:alter table table_name drop column column_name;

修改字段名:alter table table_name RENAME COLUMN column_name TO new_column_name;(表字段中的數據類型不變)

修改表名:RENAME table_name TO new_table_name;

%刪除表

TRUNCATE TABLE table_name;(刪除表中的全部數據,而不是刪除這個表,即截斷表,該方式的速度遠遠快于delete方式);

DROP TABLE table_name;(刪除整張表)

5、操作表中的數據

#添加數據

INSERT語句:INSERT INTO table_name (column1, column2, ...) VALUES(value1, value2, ...);

ps:獲取當前的日期的函數sysdate;

復制表數據:

在建表時復制CREATE TABLE table_new AS SELECT column1, ... | * FROM table_old;

在添加時復制INSERT INTO table_new [(column1, ...)] SELECT column1, ... |* FROM table_old;

#修改數據

UPDATE語句:UPDATE table_name SET column1=value1, ... [WHERE conditions];

#刪除數據

DELETE語句:DELETE FROM table_name [WHERE conditions];

6、約束

約束的作用:定義規則、確保數據的完整性;

約束名是唯一的

#非空約束

在創建表時設置非空約束CREATE TABLE table_name(column_name datatype NOT NULL, ...);

在修改表時添加非空約束ALTER TABLE table_name MODIFY column_name datatype NOT NULL;(設置非空約束之前最好確保表中沒有空值數據)

在修改表時去除非空約束ALTER TABLE table_name MODIFY column_name datatype?NULL;

#主鍵約束

確保表中每一行數據的唯一性;非空、唯一;

一張表只能設計一個主鍵約束,主鍵約束可以由多個字段構成(聯合主鍵或復合主鍵)

在創建表時設置主鍵約束:CREATE TABLE table_name(column_name datatype PRIMARY KEY, ...);

或者CONSTRAINT constraint_name PRIMARY KEY(column_name1, ...);(多個字段構成聯合主鍵)(該子句位于所有字段寫完之后再設置約束,即稱為表級約束)

在修改表時添加主鍵約束:ALTER TABLE table_name ADD CONSTRAINT constraint_name PRIMARY KEY(column_name1, ...);

更改約束名稱ALTER TABLE table_name RENAME CONSTRAINT old_name TO new_name;

刪除主鍵約束ALTER TABLE table_name?DISABLE|ENABLE CONSTRAINT constraint_name;(禁用/啟用約束);

ALTER TABLE table_name?DROP CONSTRAINT constraint_name;(直接刪除約束)

ALTER TABLE table_name?DROP PRIMARY KEY[CASCADE](因為一張表只有一個主鍵約束,所以可以直接通過primary key關鍵字刪除主鍵約束)(CASCADE表示級聯刪除,當有外鍵約束時,可以刪除其他表引用該主鍵約束的地方)

#外鍵約束:主從表的關系

在創建表時設置外鍵約束:CREATE TABLE table1 (column_name datatype REFERENCES table2 (column_name), ...);(列級約束)

表級外鍵約束:CONSTRAINT constraint_name FOREIGN KEY(column_name) REFERENCES table_name(column_name) [ON DELETE CASCADE];(同樣,該子句位于所有字段寫完之后再設置約束,即稱為表級約束)

設置外鍵約束時,主表的字段必須是主鍵;主從表中相應的字段必須是同一個數據類型;從表中外鍵字段的值必須來自主表中的相應字段的值,或者為null值;

在修改表時添加外鍵約束:ALTER TABLE table_name?ADD CONSTRAINT constraint_name?FOREIGN KEY(column_name) REFERENCES table_name(column_name) [ON DELETE CASCADE];

刪除外鍵約束:(禁用/啟用約束)ALTER TABLE table_name DISABLE|ENABLE CONSTRAINT constraint_name;

ALTER TABLE table_nameDROP CONSTRAINT constraint_name;(直接徹底刪除約束)

#唯一約束

作用:保證字段值的唯一性

唯一約束和主鍵約束的區別:主鍵字段值必須是非空的,唯一約束允許有一個空值;主鍵在每張表中只能有一個,而唯一約束在每張表中可以有多個;

在創建表時設置唯一約束:CREATE TABLE table_name(column_name datatype UNIQUE, ...);(列級約束)

(表級約束)?CONSTRAINT constraint_name UNIQUE?(column_name1);當要設置多個字段約束為唯一約束,要寫多個這樣的子句,而不是直接接多個字段名;即每一個唯一約束都有其唯一的約束名字;

在修改表時添加主鍵約束:ALTER TABLE table_name ADD CONSTRAINT constraint_name UNIQUE(column_name);

刪除唯一約束:ALTER TABLE table_name DISABLE|ENABLE CONSTRAINT constraint_name;(禁用/啟用約束);

ALTER TABLE table_name DROP CONSTRAINT constraint_name;(直接刪除約束)

#檢查約束

作用:表中的值更具有實際意義;

在創建表時設置檢查約束:CREATE TABLE table_name(column_name datatype CHECK(expressions), ...);(列級約束)(檢查約束會自動為其生成檢查約束的名稱)

(表級約束) CONSTRAINT constraint_name CHECK(expressions);

在修改表時添加檢查約束:ALTER TABLE table_name ADD CONSTRAINT constraint_name?CHECK(expressions);

刪除檢查約束:ALTER TABLE table_name DISABLE|ENABLE CONSTRAINT constraint_name;(禁用/啟用約束);

ALTER TABLE table_name DROP CONSTRAINT constraint_name;(直接刪除約束)

總結:五種約束

其中只有主鍵約束是在每張表中只能有一個,但是可以由多個字段構成;

外鍵約束是唯一一個涉及兩張表之間的關系;

在創建表時設置約束,只有非空約束是只能在列級設置,不能在表級設置,其他的約束既可以在表級設置也可以在列級設置;并且設置非空約束時,非空約束是沒有名字的;

在修改表時添加約束,與其他約束不同的是,非空約束用到的語句實際是修改字段的語句,即ALTER TABLE table_name MODIFY column_name datatype NOT NULL;

更改約束的名稱,除了非空約束,其他的約束都可以改名;當不知道約束名稱時,可以通過數據字典(user_constraints)來查看,可以根據需查看的表的名稱來查看這張表中所具有的約束的名稱、類型、和狀態等信息;RENAME CONSTRAINTS old_name TO new_name;(將該語句加在更改表的語句后面ALTER TABLE table_name);

刪除約束,對于非空約束是特殊的,仍然用到的是修改字段的語句;將非空約束改為可以為空,ALTER TABLE table_name MODIFY column_name datatype NULL;其他的約束,可以有禁用和徹底刪除兩種情況,即DISABLE|ENABLE CONSTRAINT constraint_name;和DROP CONSTRAINT constraint_name;;當刪除主鍵約束時,可以通過DROP PRIMARY KEY來刪除;

7、查詢語句

# 基本查詢語句:

PS:以下是基于一張表的查詢

SELECT [DISTINCT] column_name1, ...|* FROM table_name [WHERE conditions];(DISTINCT表示不顯示重復的數據)

#在SQL PLUS中的設置格式

%更改字段名(更改的只是查詢之后的結果的字段名,并不是真正將表中的字段名進行修改):COLUMN column_name HEADING new_name;(其中COLUMN可以簡寫成COL)

%設置結果顯示的格式:COLUMN column_name FORMAT dataformat;

dataformat的格式:對于字符型時,只能設置其顯示的長度,字符型用a表示,例如a10,表示字符型的長度為10;

對于數值類型的,用“9”代表一個數字,例如9999.9表示4位整數一位小數;還可以為其加上美元$符號

%清除之前設置過的格式:COLUMN column_name CLEAR;

#查詢表中的所有字段及指定字段

%查詢所有字段:SELECT * table_name;

%查詢指定字段:SELECT column_name1, column_name2, ... FROM table_name;

#給字段設置別名

更改的只是查詢之后的結果顯示的字段名,并不是真正將表中的字段名進行修改;在上述SQL PLUS設置別名的方法中,一次只能為一個字段設置別名;該方法可以一次為多個字段同時設置別名;

SELECT column_name AS new_name, ... FROM table_name;(AS可以省略,用空格隔開即可)

#運算符和表達式

表達式=操作數+運算符

oracle中的操作數可以有變量。常量和字段;

算術運算符(+、 -、 *、 /)

比較運算符(>、 >=、 <、 <=、 =、 <>)

邏輯運算符(and、or、not)

#帶條件的查詢 where子句

%帶一個條件的查詢:條件一般都是使用比較運算符連接的表達式

%多條件的查詢:使用邏輯運算符和比較運算符連接的表達式

當有多個運算符時,運算符之間是有優先級的;邏輯運算符的優先級從高到低是not、and、or;比較運算符的優先級高于邏輯運算符;

#模糊查詢 LIKE

like關鍵字也可以歸結到比較運算符

通配符的使用(_、%),其中一個“_”只能代替一個字符;%可以代替0到多個任意字符

#范圍查詢

BETWEEN... AND..

IN/NOT IN()括號中的是具體的值,而不是范圍,類似于集合的概念,判斷是否處于該集合中;

#對查詢的結果進行排序

SELECT .. FROM ...[WHERE...] ORDER BY column1 DESC/ASC, ...;

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容