數據庫基礎sql語句總結(以Oracle爲主介紹,並與mysql,sql server做對比)一

本篇博客說明:

本篇博客主要總結了數據庫中表的創建,內容的增、刪、改、查,並說明了在不同的數據庫中對應的sql語句的寫法。
其中所有示例引用表均以下面的數據庫表爲基礎演示,
數據字典的.sql文件下載地址:

http://pan.baidu.com/s/1ge8OY4b

執行腳本:

1.Oracle中執行腳本:
win+R->運行->sqlplus:輸入正確的用戶名和密碼下後,@腳本路徑或者@+”直接鼠標拖入文件“。
2.MySql中執行腳本:
source 腳本路徑
3.Sql Server中執行腳本:
cmd窗口中:osql -S 127.0.0.1 -U sa -P sa -i d:\test.sql
說明:osql爲SQL Server的命令,要在cmd中執行該命令,一般安裝完SQL Server後該命令對應的路徑會自動添加到系統環境變量中。 -S 表示要連接的數據庫服務器 -U表示登錄的用戶ID,-P表示登錄密碼 -i表示要執行的腳本文件路徑。

先介紹下SQL語句的分類
1.DML(數據操作語言):SELECT,INSERT,DELETE,UPDATE
2.DDL(數據定義語言):CREATE,DROP,ALTER,TRUNCATE等
3.DCL(數據控制語言):COMMIT,ROLLBACK,SAVEPOINT等

—-事務:單位時間內的一系列的操作。這些操作要麼全部成功,要麼全部失敗。
–提交事務:COMMIT,將對錶中數據的操作(增,刪,改)保存到表中。
–回退事務:ROLLBACK,將數據還原到最初或最後一次提交的狀態。

1.當出現了DDL語句時,數據庫會自動提交事務。
2.當正常結束Oracle語句時,Oracle會自動提交事務。
3.當異常結束Oracle語句時,Oracle會自動回退事務。

一.創建,刪除表

    CREATE TABLE 表名(
列名 數據類型[(長度)] [約束],
列名 數據類型[(長度)] [約束],
……
列名 數據類型[(長度)] [約束]
);
**--------------**Oracle中常用的數據類型:****

 1. 數字類型:NUMBER
    整數------NUMBER(6),長度可以省略,省略則默認爲38位的數字。
    浮點數-----NUMBER(8,2),浮點數的長度**不能省略**,表示整個數字長爲8位,其中有兩位小數。
 2. 字符類型:**默認單位爲字節,且必須指定長度**
    CHAR-----保存固定長度的字符串,當內容的長度不足時,使用**空格在內容的後面補齊長度**。
    VARCHAR2-----VARCHAR2(8 CHAR)保存可變長度的字符串(但是不能超過上限),如果內容的長度不夠,不使用空格補齊長度。上面表示8個字符長度的字符,VARCHAR(8)表示8個字節長度的字符。
                (*這裏爲什麼不用VARCHAR而要用VARCHAR2:VARCHAR2是oracle獨用的數據類型它會      在任何版本中向上和向下兼容,但VARCHAR是標準sql提供的數據類型可能在下幾個版本的JDK中隨着sql標準的變化而改變。。。VARCHAR2把所有字符都佔兩字節處理(一般情況下),VARCHAR只對漢字和全角等字符佔兩字節,數字,英文字符等都是一個字節)*
 3. 日期類型-----DATE,表示日期+時間。不能指定長度。

 **查看錶的結構**

DESC 表名/視圖名


**刪除表**----刪除表的同時也刪除表中所有的數據。並且刪除的數據無法回退。

DROP TABLE 表名


**表中字段的約束**
1.主鍵約束------PRIMARY KEY,不能重複,不能爲NULL。通過主鍵可以在表中找到唯一的一行數據。
2.非空約束------NOT NULL。 表示該列值不能爲空。
3.檢查約束-----CHECK。添加或者修改列中的數據時,檢查列中的數據是否合法。
4.默認值-------DEFAULT。當沒有向列中添加值時,自動爲列添加數據。
5.唯一約束-----UNIQUE。表示爲列的值可以爲NULL,但不能重複。
6.外鍵約束-----FOREIGN KEY
例如下面代碼:

CREATE TABLE TEST(
T_ID NUMBER(5) PRIMARY KEY, // 表示長度爲5的整數,爲主鍵約束
T_NAME VARCHAR2(10 CHAR) NOT NOLL, //表示長度爲10個字符的可變長字符串,爲非空約束
T_SEX CHAR(1 CHAR) DEFAULT ‘女’, //表示長度爲1個字符的字符,默認值爲‘女’ T
T_AGE NUMBER(2) CHECK(T_AGE>=20 AND T_AGE<=50), //表示長度爲2的整數,檢查約束在20到50之間的才能插入或者更改。
T_BIRTHDAY DATE //表示一個日期類型的字段
CONSTRAINT T_SID_S FOREIGN KEY(T_NAME) REFERENCES S(S_NAME),//表示以自己的T_NAME作爲外鍵參照S表中的S_NAME主鍵

增、刪、改sql語句

一.添加數據:INSERT INTO 語句。

1.向表中添加一行新數據,並向新行中所有的列賦值。
格式:INSERT INTO 表名 VALUES(值,值,……);
例:INSERT INTO TEST VALUES(1,’張三’,’男’,TO_DATE(‘1986-10-20’,’YYYY-MM-DD’));

2.向表中添加一行新數據,並向新行中指定的列賦值。
格式:INSERT INTO 表名(列名,列名,……) VALUES(值,值,……);
例:INSERT INTO TEST(T_NAME,T_ID) VALUES(‘BB’,2);

3.將其它表中的數據複製到指定的列中
格式:INSERT INTO 表名[(列名,列名,……)] SELECT語句;
例:INSERT INTO TEST(T_ID,T_NAME,T_BIRTHDAY) SELECT EMPLOYEE_ID,LAST_NAME,HIRE_DATE FROM EMPLOYEES;

注意:如果表存在外鍵約束,添加數據時,應該先添加主表數據,再添加子表的數據。

二.修改數據:UPDATE語句

格式:UPDATE 表名 SET 列名=值[,列名=值,……] [WHERE 條件];
例:

UPDATE TEST SET T_BIRTHDAY=SYSDATE WHERE T_BIRTHDAY IS NULL;
UPDATE TEST SET T_NAME='ABC',T_SEX='女' WHERE T_ID=1;

三.刪除數據:DELETE語句

格式:DELETE [FROM] 表名 [WHERE 條件];
例:

DELETE FROM TEST WHERE T_ID=2;

注意:刪除*TEST表中T_NAME*內所有的數據

UPDATE TEST SET T_NAME=NULL;

查詢表

1.基本的SELECT語句:

SELECT 列名[,列名,……]|*
FROM 表名

注意:
1.Oracle中的SELECT語句的FROM子句不能省略。
2.SQL語句不區分大小寫。
3.SQL語句可以寫成一行或多行。
4.通常情況下,sqlplus中的SQL語句使用分號表示結束。
4.只能直接使用半角的標點符號。
5.工作中不建議使用*查詢表中所有列,查詢效率低。

2.算術運算符+、-、*、/

注意:Oracle中“+”只有加法運算的功能,沒有連接符的功能。

SELECT FROM DUAL; 5/2 – Oracle中的結果爲:2.5,MySQL中的結果是2.5,SQL Server中的結果爲:2

3.列別名

格式:列名 列別名 或者 列名 AS 列別名

注意:
Oracle中會將英文的列名變成大寫。其他數據庫不會。
當列別名區分大小寫,或者列別名中包含了特殊字符,或者列別名爲關鍵字時,需要將列別名放到一對雙引號中。
–關係數據庫中雙引號通常用於表示別名。
–關係數據庫中單引號表示字符串。

SELECT LAST_NAME AS "USER",JOB_ID,SALARY,SALARY*12 AS 年薪
FROM EMPLOYEES;

4.連接符

Oracle中連接兩個字符串可以用“||”表示,或者用CONCAT(“”,”“)表示連接(只能連接兩個參數,多連需要函數嵌套使用)。
MySql中用“+”連接,不同類型用CONCAT()函數連接(可以同時連接多個參數)。
SQL SERVER中用“+”連接,不同類型用如下“SELECT ‘AAA’ + CAST(111 AS CHAR)”。

5.DISTINCT關鍵字

作用:屏蔽查詢結果中重複的數據。

SELECT DISTINCT JOB_ID
FROM EMPLOYEES;

注意
1.通常情況下:一個SELECT中只能出現一個DISTINCT關鍵字。
2.通常情況下:DISTINCT只能出現在關鍵字與第一個列之間。

6.數據過濾:WHERE

格式:

SELECT    ###       3
FROM      ###      1
[WHERE 條件]      2--條件的結果**一定爲boolean類型**

–條件爲數字類型:查詢employees表中所有在50號部門工作的員工,顯示last_name,salary,department_id

SELECT LAST_NAME,SALARY,DEPARTMENT_ID
FROM EMPLOYEES
WHERE DEPARTMENT_ID=50;

—-條件爲字符串類型:值必須出現在一對單引號中,並且查詢英文時區分大小寫。
—-查詢employees表中last_name爲fay的員工,顯示:employee_id,last_name,hire_date

SELECT EMPLOYEE_ID,LAST_NAME,HIRE_DATE
FROM EMPLOYEES
WHERE LAST_NAME='Fay';

—-條件爲日期類型:值必須出現在一對單引號中,並且值必須爲Oracle默認爲日期格式:DD-MON-RR
—-查詢employees表中1997-8-17入職員工的last_name,job_id,salary

SELECT LAST_NAME,JOB_ID,SALARY,HIRE_DATE
FROM EMPLOYEES
WHERE HIRE_DATE='17-8月-97';

注意:WHERE子句中不能使用列別名。

——比較運算符:>,>=,<,<=,=,!=,<>
——查詢employees表中年薪大於1000的員工,顯示:last_name,job_id,salary,年薪

SELECT LAST_NAME,JOB_ID,SALARY,SALARY*12 AS 年薪
FROM EMPLOYEES
WHERE SALARY*12>1000;

–查詢employees表中97年之後入職員工的last_name,hire_date

SELECT LAST_NAME,HIRE_DATE
FROM EMPLOYEES
WHERE HIRE_DATE>='1-1月-97';

——特殊的比較運算符
——BETWEEN..AND:查詢指定範圍內的數據(包含了邊界值)
–查詢employees表中工資在6000-12000之間的員工,顯示:last_name,salary

SELECT LAST_NAME,SALARY
FROM EMPLOYEES
WHERE SALARY BETWEEN 6000 AND 12000;

—–IN(值列表):查詢匹配列表中任意一個值相等的數據。只能判斷是否相等。
—–查詢employees表中在20或50號部門工作的員工,顯示:last_name,departmnet_id

SELECT LAST_NAME,DEPARTMENT_ID
FROM EMPLOYEES
WHERE DEPARTMENT_ID IN(20,50);

—–LIKE:模糊查詢
%:任意長度的任意字符。
_:一個長度的任意字符。

SELECT LAST_NAME
FROM EMPLOYEES
WHERE LAST_NAME LIKE '%n_';

–使用ESCAPE聲明一個符號,聲明LIKE中此符號後面的一個下劃線或百分號,不是轉義字符,而是查詢的內容。
–查詢employees表job_id中包含A_的員工,顯示:last_name.job_id

SELECT LAST_NAME,JOB_ID
FROM EMPLOYEES
WHERE JOB_ID LIKE '%A/_%' ESCAPE '/';

—–IS NULL/IS NOT NULL
—–NULL:與類型無關,表示未知或不確定的值。

SELECT LAST_NAME,SALARY,DEPARTMENT_ID
FROM EMPLOYEES
WHERE DEPARTMENT_ID IS NULL;

—–邏輯運算符:AND OR NOT
—–查詢employees表中工資在6000-12000之間的員工,顯示:last_name,salary

SELECT LAST_NAME,SALARY
FROM EMPLOYEES
WHERE SALARY BETWEEN 6000 AND 12000;
SELECT LAST_NAME,SALARY
FROM EMPLOYEES
WHERE SALARY>=6000 AND SALARY<=12000;

–查詢employees表中在20或50號部門工作的員工,顯示:last_name,departmnet_id

SELECT LAST_NAME,DEPARTMENT_ID
FROM EMPLOYEES
WHERE DEPARTMENT_ID IN(20,50);
SELECT LAST_NAME,DEPARTMENT_ID
FROM EMPLOYEES
WHERE DEPARTMENT_ID=20 OR DEPARTMENT_ID=50;

—–NOT關鍵字:查詢表中不在某個範圍內的數據。
—–查詢employees表中工資不在6000-12000之間的員工信息

SELECT LAST_NAME,SALARY
FROM EMPLOYEES
WHERE NOT SALARY BETWEEN 6000 AND 12000;
SELECT LAST_NAME,SALARY
FROM EMPLOYEES
WHERE NOT(SALARY>=6000 AND SALARY<=12000);

—–排序:ORDER BY子句
格式如下:1.升序:ASC關鍵字,默認爲升序排序 2.降序:DESC關鍵字

SELECT         3
FROM           1
[WHERE]        2
[ORDER BY 列名/第幾列] ASC/DESC  4
SELECT LAST_NAME,SALARY
FROM EMPLOYEES
ORDER BY SALARY DESC;
SELECT LAST_NAME,SALARY*12 AS 年薪
FROM EMPLOYEES
ORDER BY 年薪 DESC;
SELECT LAST_NAME,SALARY*12 AS 年薪
FROM EMPLOYEES
ORDER BY 2 DESC; //表示按照查詢結果的第二列降序排序

注意:ORDER BY 一定是放在sql語句的最後面,且是最後執行的(因此ORDER BY中可以用列的別名),只有在MySql中ORDER BY 的後面可以加limit

—–多列排序
—–查詢employees表中所有員工的last_name,job_id,department_id,salary。結果根據department_id升序排序,salary降序排序。

SELECT LAST_NAME,JOB_ID,DEPARTMENT_ID,SALARY
FROM EMPLOYEES
ORDER BY DEPARTMENT_ID ASC NULLS FIRST,SALARY DESC;

**注意:
–Oracle認爲NULL是最大的。
–SQL Server認爲NULL是最小的。**

—–NULLS FIRST/NULLS LAST:在不影響排序規則的前提下,將NULL放在結果的最前/後面。

SELECT LAST_NAME,SALARY*12 AS 年薪
FROM EMPLOYEES
ORDER BY 2 NULLS LAST DESC; //表示按照查詢結果的第二列降序排序

—–單行函數:每個字段的每條記錄經過旦行函數輸出一條記錄
—-字符類型單行函數

SELECT LAST_NAME,UPPER(LAST_NAME)--大寫
FROM EMPLOYEES;

SELECT LAST_NAME,LOWER(LAST_NAME)--小寫
FROM EMPLOYEES;

—–獲得字節數,字符數

SELECT LENGTH('中國')--獲得字符數
FROM DUAL;

SELECT LENGTHB('中國')--獲得字節數
FROM DUAL;

—–從指定位置截取字符串,直到字符串的最後

SELECT SUBSTR(LAST_NAME,3) AS A
FROM EMPLOYEES;

—–從指定的位置開始截取指定長度的字符串

SELECT SUBSTR(LAST_NAME,3,2) AS A
FROM EMPLOYEES;

—–從倒數第N位開始截取字符串,直到字符串的最後(Oracle獨有)

SELECT SUBSTR(LAST_NAME,-3) AS A
FROM EMPLOYEES;

—–從倒數第N位開始截取指定長度的字符串(Oracle獨有)

SELECT SUBSTR(LAST_NAME,-3,2) AS A
FROM EMPLOYEES;

—–在第一個參數中查找第二個參數首次出現的位置,沒找到返回0

SELECT LAST_NAME,INSTR(LAST_NAME,'A')
FROM EMPLOYEES;
SELECT LAST_NAME
FROM EMPLOYEES
WHERE INSTR(LAST_NAME,'a')!=0;

—–LPAD()/RPAD():顯示第一個參數的值,使用第二個參數設置第一個參數顯示的長度,如果第一個參數長度不夠,使用第三個參數在第一個參數的左/右面補齊長度。

SELECT LPAD(EMPLOYEE_ID,6,0),LAST_NAME
FROM EMPLOYEES;

—–TRIM():去掉字符串兩端的字符

SELECT TRIM('   FEGCXFDF  ') AS A ---------去掉字符串兩端的空格
FROM DUAL;

SELECT TRIM('AABBBBABBBAA','A') AS A----------去掉字符串兩端指定的字符'A'
FROM DUAL;

—–數字類型單行函數
—-四捨五入

SELECT ROUND(256.987),ROUND(256.987,2),ROUND(256.987,0),ROUND(256.987,-1)
FROM DUAL;

—-截斷數字

SELECT TRUNC(256.987),TRUNC(256.987,2),TRUNC(256.987,0),TRUNC(256.987,-1)
FROM DUAL;

—-取餘數

SELECT MOD(15,2)
FROM DUAL;

—–日期類型單行函數
—-SYSDATE:獲得當前數據庫服務器的日期+時間

SELECT SYSDATE-200
FROM DUAL;

MySQL中: SQL Server中
–now():日期+時間 –getDate():日期+時間
–currdate():日期

注意:
1.日期+天數=日期
2.日期-天數=日期
3.日期-日期=天數
4.日期不能加日期

—-查詢employees表中所有員工的last_name,hire_date,天數

SELECT LAST_NAME,HIRE_DATE,(SYSDATE-HIRE_DATE) AS 月數
FROM EMPLOYEES;

—-MONTHS_BETWEEN():求兩個日期相差的月數

SELECT LAST_NAME,HIRE_DATE,MONTHS_BETWEEN(SYSDATE,HIRE_DATE) AS 月數
FROM EMPLOYEES;

—-ADD_MONTHS():在日期上加上指定的月數

SELECT ADD_MONTHS(SYSDATE,24)
FROM EMPLOYEES;

—-NEXT_DAY():獲得指定日期下一個星期X的日期

SELECT NEXT_DAY(SYSDATE,3)------這個3表示下一個星期二,從周天記爲1.
FROM DUAL;

SELECT NEXT_DAY(SYSDATE,'星期二')
FROM DUAL;

—–類型轉換單行函數
—-自動轉換:效率低

SELECT LAST_NAME,SALARY
FROM EMPLOYEES
WHERE SALARY>10000;

—–手動轉換
1.字符串與日期可以相互轉換
2.字符串與數字可以相互轉換
3.日期與數字不能相互轉換

ORCLE中日期的格式化(TO_DATE)可參考:

http://www.cnblogs.com/ajian/archive/2009/03/25/1421063.html

—-TO_CHAR(D,F):將日期類型D根據模板F轉換爲字符類型的值

SELECT LAST_NAME,TO_CHAR(HIRE_DATE,'YYYY-MM-DD')
FROM EMPLOYEES;

SELECT TO_CHAR(SYSTEM,'YYYY-MM-DD HH24:MI:SS DAY DY') //24表示24小時制,DAY表示這個星期的第幾天全寫,        //DY是這周第幾天簡寫   
FROM DUAL;

SELECT TO_CHAR(SYSDATE,'D DD DDD') // D表示當週第幾天(週日爲1),DD表示當月第幾天,DDD表示當年第幾天。
FROM DUAL;

SELECT LAST_NAME,TO_CHAR(HIRE_DATE,'FMYYYY"年"MM"月"DD"日"') //表示以"XX年XX月XX日"形式輸出格式,FM起到點去掉月份前面0的作用,如不加FM,爲08月,加FM,爲8FROM EMPLOYEES;

—-查詢所有星期二入職的員工的last_name,hire_date(格式如:1999-1-1 星期二)

SELECT LAST_NAME,TO_CHAR(HIRE_DATE,'FMYYYY-MM-DD DAY')
FROM EMPLOYEES
WHERE TO_CHAR(HIRE_DATE,'DAY')='星期二';

SELECT LAST_NAME,TO_CHAR(HIRE_DATE,'FMYYYY-MM-DD DAY')
FROM EMPLOYEES
WHERE TO_CHAR(HIRE_DATE,'D')='3';

—–TO_CHAR(N,F):將數據類型N根據模板F轉換爲字符類型的值

SELECT 
       TO_CHAR(25653.9874,'FM$999,999.00'),
       TO_CHAR(25653.9874,'FML999,999.00') //L表示顯示當地的貨幣符號,即爲oracle產地的地方貨幣符號
FROM DUAL;

—–TO_DATE(C,F):根據模板F將字符類型C轉換爲日期類型的值。

SELECT TO_DATE('2017-1-27','YYYY-MM-DD')-SYSDATE
FROM DUAL;

SELECT TO_DATE('2017-1-27','YYYY-MM-DD')
FROM DUAL;

—–TO_NUMBER(C,F):根據模板F將字符類型C轉換爲數字類型的值。

SELECT TO_NUMBER('$50,000.00','$99,999.00')
FROM DUAL;

—–通用單行函數
—-NVL():當第一個參數不爲NULL,返回第一個參數。當第一個參數爲NULL,返回第二個參數。兩個參數的類型必須一致。—–SQL SERVER 中用IFNULL()函數表示

SELECT LAST_NAME,NVL(TO_CHAR(COMMISSION_PCT,'FM$0.00'),'沒有佣金')
FROM EMPLOYEES;

—–關係數據庫中,當算術運算中出現NULL,結果一定爲NULL
—-查詢employees表中所有員工的last_name,salary,commission_pct,年薪,年收入(年薪+年薪*佣金)

SELECT LAST_NAME,SALARY,COMMISSION_PCT,SALARY*12 AS 年薪,(SALARY*12)+(SALARY*12*NVL(COMMISSION_PCT,0)) AS 年收入
FROM EMPLOYEES;

—–分支選擇:CASE表達式,DECODE()函數
—-查詢employees表中所有員工的last_name,job_id,salary,新工資。如果job_id是IT_PROG時,工資增加10%。如果job_id是ST_CLERK時,工資增加15%。如果job_id是SA_REP時,工資增加20%。其它職位工資不變。

SELECT LAST_NAME,JOB_ID,SALARY,
CASE
WHEN JOB_ID='IT_PROG' THEN TO_CHAR(SALARY*1.1,'FM$999,999.00')
WHEN JOB_ID='ST_CLERK' THEN TO_CHAR(SALARY*1.15,'FM$999,999.00')
WHEN JOB_ID='SA_REP' THEN TO_CHAR(SALARY*1.2,'FM$999,999.00')
ELSE '工資不變'
END AS 新工資
FROM EMPLOYEES;

—-只能判斷是否相等

SELECT LAST_NAME,JOB_ID,SALARY,
CASE JOB_ID
WHEN 'IT_PROG' THEN TO_CHAR(SALARY*1.1,'FM$999,999.00')
WHEN 'ST_CLERK' THEN TO_CHAR(SALARY*1.15,'FM$999,999.00')
WHEN 'SA_REP' THEN TO_CHAR(SALARY*1.2,'FM$999,999.00')
ELSE '工資不變'
END AS 新工資
FROM EMPLOYEES;

—-DECODE()函數:只能判斷是否相等。

SELECT LAST_NAME,JOB_ID,SALARY,
DECODE(
    JOB_ID,
    'IT_PROG',SALARY*1.1,
    'ST_CLERK',SALARY*1.15,
    'SA_REP',SALARY*1.2,
    SALARY
)AS 新工資
FROM EMPLOYEES;

—–查詢employees表中所有員工的last_name,hire_date入職那天是星期幾(顯示漢字),並按日期升序排序

SELECT LAST_NAME,TO_CHAR(HIRE_DATE,'YYYY-MM-DD') AS 入職時間,TO_CHAR(HIRE_DATE,'DAY') AS 星期
FROM EMPLOYEES
ORDER BY TO_CHAR(HIRE_DATE-1,'D') ASC;  //因爲星期日是1,要想按星期一最小來排序,需要-1

SELECT LAST_NAME,TO_CHAR(HIRE_DATE,'YYYY-MM-DD') AS 入職時間,TO_CHAR(HIRE_DATE,'DAY') AS 星期,TO_CHAR(HIRE_DATE,'D') AS A
FROM EMPLOYEES
ORDER BY 
CASE
WHEN TO_CHAR(HIRE_DATE,'D')='1' THEN 7
WHEN TO_CHAR(HIRE_DATE,'D')='2' THEN 1
WHEN TO_CHAR(HIRE_DATE,'D')='3' THEN 2
WHEN TO_CHAR(HIRE_DATE,'D')='4' THEN 3
WHEN TO_CHAR(HIRE_DATE,'D')='5' THEN 4
WHEN TO_CHAR(HIRE_DATE,'D')='6' THEN 5
WHEN TO_CHAR(HIRE_DATE,'D')='7' THEN 6
END ASC;

—–視圖
格式:

CREATE [OR REPLACE] VIEW 視圖名
AS
SELECT語句;

視圖的作用
1.簡化查詢
2.提高數據庫安全性

–視圖中沒有數據,視圖的數據來自於表。

—–序列:產生一個數字。通常用於自動生成主鍵。

CREATE SEQUENCE 序列名
[INCREMENT BY integer] --序列每次增加N/減少N,默認爲1
[START WITH  integer]  --超始值,默認爲0
[ MAXVALUE integer| NOMAXVALUE ] --最大值爲N/沒有最大值(默認)
[ MINVALUE integer | NOMINVALUE ] --最小值爲N/沒有最小值
[ CYCLE | NOCYCLE ] --循環/不循環(默認)
[ CACHE integer | NOCACHE ] --當服務器啓動時將序列的後N個值存入緩存中(默認)/當服務器啓動時不將序列的值存入緩存中
[ ORDER | NOORDER ]

注意:序列的值不能ROLLBACK

—-序列的屬性:
1.NEXTVAL:獲得序列的下一個值,調用此屬性時序列的值一定發生改變。
2.CURRVAL:獲得序列當前值。調用此屬性時序列的值不變。

CREATE SEQUENCE STU_ID_SEQ;
INSERT INTO STUDENTS(STU_ID,STU_NAME) VALUES(STU_ID_SEQ.NEXTVAL,'AA');

—–索引:提高查詢效率。降低增刪改的效率。
特點:
自動創建:當表中有主鍵或唯一約束時,Oracle會爲對應的列添加唯一索引。
手動創建:
CREATE INDEX 索引名 ON 表名(列名[,列名,……]);

CREATE INDEX EMP_NAME_INDEX ON EMPLOYEES(LAST_NAME);

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章