亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

ORACLE百例試煉三

發布時間:2020-08-06 23:14:42 來源:網絡 閱讀:413 作者:月幕 欄目:關系型數據庫

Oracle系列《三》:表、(約束)索引、序列、視圖的使用



一、創建、刪除、修改表

建立表:Oracle中主要數據類型 VARCHAR2、NUMBER、DATE、CLOB(大量文本)、BLOB(圖片、音樂、電影) 


如果只能復制一張表的結構,但不復制內容,則加上一個不可能成立的條件即可,例如 

SQL> CREATE TABLE tmp AS (SELECT * FROM emp WHERE 1>2)  


例如創建表Person如下: 

 CREATE TABLE person(

  pid  VARCHAR2(18),  

  name  VARCHAR2(30),

  age  NUMBER(3),

  birthday DATE, 

 sex  VARCHAR(2)  DEFAULT 'M'

 );


如果發現創建表后需要添加特定的列,例如address列,則可以使用ALTER TABLE命令

  SQL> ALTER TABLE person ADD(address VARCHAR2(20));   

修改表中的列屬性  

  SQL> ALTER TABLE person MODIFY(address VARCHAR2(30)); 

 

 在數據庫程序開發中,很少去修改表結構,在IBM DB2中就沒有提供ALTER TABLE命令


在Oracle中提供RENAME命令對表進行重命名

  SQL> RENAME person to personer;


在Oracle中要清空一張表的數據,但又不能回滾,立即釋放資源

SQL> TRUNCATE TABLE personer; 

 (與DELETE區別:前者不能回滾,后者能回滾) 

(與DROP TABLE區別:前者刪除內容,后者刪除表)



二、表的約束

約束分類:主鍵約束、唯一約束、檢查約束、非空約束、外鍵約束  

語法:CONSTRAINT 約束名 約束類型(字段名)

添加約束如下: 

CREATE TABLE person(  

  pid  VARCHAR2(18), 

 name  VARCHAR2(30) NOT NULL

 age  NUMBER(3) CHECK(age BETWEEN 0 AND 150),  

 birthday DATE, 

 sex  VARCHAR(2) DEFAULT 'M' 

 CONSTRAINT person_pid_pk PRIMARY KEY(pid),  

 CONSTRAINT person_name_uk UNIQUE(name), 

 CONSTRAINT person_sex_ck CHECK(sex IN('M','F')) 

);  

以上約束可以采取自動命名和手動命名


現在要再添加一張表,使用主-外鍵約束 

CREATE TABLE book( 

  bid   NUMBER PRIMARY KEY,

  bname  VARCHAR(20),

  bprice  NUMBER(5,2),

  pid  VARCHAR2(18), 

 CONSTRAINT person_book_pid_fk FOREIGN KEY(pid) REFERENCES person(pid) 

);


這時候如果要刪除掉person表的話,就會出現錯誤,此時可以使用強制性的刪除手段 

DROP TABLE person CASCADE CONSTRAINT; 但是這種做法一般不用


如果在person 和 book 表中添加記錄,而在person表中進行刪除一條記錄時,假設該記錄的pid被 

book表引用,那么會出現刪除錯誤。如果希望一個表中的數據在刪除時,能自動刪除對應字表的記錄, 可以使用級聯刪除的操作  

(總結:主表數據被刪除,從表數據跟著刪除,在有主外約束的條件下)

CREATE TABLE book( 

  bid   NUMBER PRIMARY KEY,

  bname  VARCHAR(20),  

  bprice  NUMBER(5,2),  

  pid  VARCHAR2(18), 

 CONSTRAINT person_book_pid_fk FOREIGN KEY(pid) REFERENCES person(pid) ON DELETE CASCADE 

);



添加約束語法如下: 

ALTER TABLE 表名稱 ADD CONSTRAINT 約束名稱 約束類型(約束字段); 

約束類型命名規則: 

PRIMARY KEY:主鍵字段_PK 

UNIQUE:字段_UK 

CHECK:字段_CK 

FOREIGN KEY:父子段_子字段_FK


SQL> ALTER TABLE person ADD CONSTRAINT person_pid_PK PRIMARY KEY(pid); 

SQL> ALTER TABLE person ADD CONSTRAINT person_name_UK UNIQUE(name); 

SQL> ALTER TABLE person ADD CONSTRAINT person_age_CK CHECK(age BETWEEN 0 AND 150);  

SQL> ALTER TABLE book ADD CONSTRAINT person_book_pid_fk FOREIGN KEY(pid) REFERENCES person(pid) ON DELETE CASCADE;


刪除約束語法如下: 

ALTER TABLE 表名稱 DROP CONSTRAINT 約束名稱; 

 

 SQL> ALTER TABLE person DROP CONSTRAINT person_age_CK;

 SQL> ALTER TABLE book DROP CONSTRAINT person_book_pid_fk;


案例: 

主鍵約束添加刪除 

1、創建表的同時創建主鍵約束

一、無命名 create table accounts ( accounts_number number primary key, accounts_balance number );  

二、有命名 create table accounts ( accounts_number , accounts_balance number, constraint yy primary key(accounts_number) ); 


2、刪除表中已有的主鍵約束 

一、無命名 SELECT * FROM USER_CONS_COLUMNS WHERE TALBE_NAME='ACCOUNTS'

找出主鍵名 ALTER TABLE ACCOUNTS DROP CONSTRAINT SYS_C003063; 

二、有命名 ALTER TABLE ACCOUNTS DROP CONTRAINT yy; 


3、向表中添加主鍵約束 ALTER TABLE ACCOUNTS ADD CONSTRAINT PK_ACCOUNTS PRIMARY KEY(ACCOUNTS_NUMBER);


******ROWNUM為例*******

 

SQL> SELECT ROWNUM,empno,ename FROM emp; 

ROWNUM采用自動編號的形式出現

  

假如只想顯示前5條記錄,那么ROWNUM<=5 

SQL> SELECT ROWNUM,empno,ename FROM emp  WHERE ROWNUM<=5; 

 

但是如果要查詢5-10條的記錄的話,則查詢不出,只能采用子查詢的方式 

SQL> SELECT * FROM (

      SELECT ROWNUM m,empno,ename   FROM emp 

      WHERE ROWNUM<=10)     

tmp WHERE tmp.m>=5



集合操作:在Oracle中提供了3類集合操作:并、交、差

UNION:將多個查詢結果組合到一個查詢結果之中,沒有重復值 

UNION ALL:與UNICON不同的是包含重復值 

INTERSECT:返回多個查詢結果中相同的部分 

MINUS:返回兩個查詢結果的差集(不相同的部分

ORACLE百例試煉三

ORACLE百例試煉三

驗證UNION和UNION ALL 

SQL> CREATE TABLE emp20 AS SELECT * FROM emp WHERE deptno=20; (5條記錄)

 

SQL> SELECT * FROM emp UNION SELECT * FROM emp20; (14條記錄) 

SQL> SELECT * FROM emp UNION ALL SELECT * FROM emp20; (19條記錄)  


驗證MINUS 和 INTERSECT 

SQL> SELECT * FROM emp MINUS SELECT * FROM emp20; (9條記錄) 

SQL> SELECT * FROM emp INTERSECT SELECT * FROM emp20; (5條記錄)



Oracle中視圖的操作 

 

1、創建視圖 

CREATE VIEW 視圖名稱 AS 子查詢 這條子查詢是非常復雜的語句 

SQL> CREATE VIEW empv20 AS 

 SELECT empno,ename,job,hiredate  FROM emp 

 WHERE deptno=20; 


2、查詢視圖 

SQL> SELECT * FROM empv20; 

 

3、刪除視圖 

SQL> DROP VIEW empv20;  

如果要修改視圖,則要先刪除視圖,在Oracle為了方便用戶修改視圖,提供了一個替換的命令

CREATE OR REPLACE 視圖名稱 AS 子查詢


視圖可以封裝復雜的查詢,例如查詢部門名稱,部門的人數,平均工資以及最低工資的雇員 

SQL>  CREATE OR REPLACE VIEW empv20 AS 

 SELECT d.dname,ed.c,ed.a,e.ename FROM dept d,( 

 SELECT deptno,COUNT(empno) c, AVG(sal) a,MIN(sal) min  FROM emp 

 GROUP BY deptno) ed,emp e 

WHERE d.deptno=ed.deptno AND e.sal=ed.min; 

 

在開中發每次都寫這么長的SQL語句不方便,可以將其建立成視圖,以上紅色部門

  

4.如果對視圖進行更新操作,在視圖中不應該包含真實數據,按以下命令進行操作 

SQL> UPDATE empv20 SET deptno=30 WHERE empno=7369; 

發現視圖已經正常更新,因為emp表中7369編號已經修改為30了,所以在創建視圖是有條件的

 

SQL提供了兩個重要的參數  

WITH CHECK OPTION:不能更新視圖的創建條件 

SQL> CREATE OR REPLACE VIEW empv20 AS  SELECT * FROM emp WHERE deptno=20  WITH CHECK OPTION;

創建條件不能進行更新了,但其他字段仍然可以更新 

SQL> UPDATE empv20 SET ename='wilson' WHERE empno=7369;

  

所以這時可以使用視圖的第2個條件:創建只讀視圖 

SQL> CREATE OR REPLACE VIEW empv20 AS  SELECT * FROM emp WHERE deptno=20  WITH READ ONLY;


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

中山市| 易门县| 遂昌县| 开鲁县| 宁城县| 龙陵县| 阳信县| 武乡县| 墨竹工卡县| 惠来县| 彭山县| 富蕴县| 丰镇市| 准格尔旗| 南溪县| 同德县| 中宁县| 大宁县| 四平市| 鄂托克旗| 湖州市| 延庆县| 元氏县| 都江堰市| 宜良县| 丰顺县| 阳曲县| 定西市| 宜宾县| 通化县| 宣汉县| 新民市| 武汉市| 巩留县| 铁岭市| 汝南县| 射阳县| 铜梁县| 玛纳斯县| 鹤壁市| 墨竹工卡县|