第一篇:黑馬程序員c語言教程:ORACLE的啟動和關閉
一、ORACLE的啟動和關閉
1、在單機環境下
要想啟動或關閉ORACLE系統必須首先切換到ORACLE用戶,如下 suProduction on Fri Oct 31 13:53:53 2003 Copyright(c)1982, 2002, Oracle Corporation.All rights reserved.SQL> connect / as sysdba Connected to an idle instance.SQL> startup^C SQL> startup ORACLE instance started.--MartriWang@gmail.com 10/05/2007--create pfile='/u01/oracle/dbs/init.ora' from spfile='u01/oracle/dbs/Spfile.ora';create Spfile='Spfile_name' FROM PFILE='pfile_name';
orapwd file=
entries=
2、在雙機環境下
要想啟動或關閉ORACLE系統必須首先切換到root用戶,如下 su - root a、啟動ORACLE系統 hareg -y oracle b、關閉ORACLE系統 hareg -n oracle--MartriWang@gmail.com 22/05/2007----查找、刪除重復記錄:
法一: 用Group by語句 此查找很快的select count(num), max(name)from student--查找表中num列重復的,列出重復的記錄數,并列出他的name屬性
group by num
having count(num)>;1--按num分組后找出表中num列重復,即出現次數大于一次
delete from student(上面Select的)
這樣的話就把所有重復的都刪除了。-----慎重
法二:當表比較大(例如10萬條以上)時,這個方法的效率之差令人無法忍受,需要另想辦法:
----執行下面SQL語句后就可以顯示所有DRAWING和DSNO相同且重復的記錄
SELECT * FROM EM5_PIPE_PREFAB
WHERE ROWID!=(SELECT MAX(ROWID)FROM EM5_PIPE_PREFAB D--D相當于First,Second
WHERE EM5_PIPE_PREFAB.DRAWING=D.DRAWING AND
EM5_PIPE_PREFAB.DSNO=D.DSNO);
----執行下面SQL語句后就可以刪除所有DRAWING和DSNO相同且重復的記錄
DELETE FROM EM5_PIPE_PREFAB
WHERE ROWID!=(SELECT MAX(ROWID)FROM EM5_PIPE_PREFAB D
WHERE EM5_PIPE_PREFAB.DRAWING=D.DRAWING AND
EM5_PIPE_PREFAB.DSNO=D.DSNO);Oracle數據庫有哪幾種啟動方式
說明:
有以下幾種啟動方式:
1、startup nomount 非安裝啟動,這種方式啟動下可執行: 重建控制文件、重建數據庫
讀取init.ora文件,啟動instance,即啟動SGA和后臺進程,這種啟動只需要init.ora文件。
2、startup mount dbname 安裝啟動,這種方式啟動下可執行: 數據庫日志歸檔、數據庫介質恢復、使數據文件聯機或脫機,重新定位數據文件、重做日志文件。
執行“nomount”,然后打開控制文件,確認數據文件和聯機日志文件的位置,但此時不對數據文件和日志文件進行校驗檢查。
3、startup open dbname 先執行“nomount”,然后執行“mount”,再打開包括Redo log文件在內的所有數
據庫文件,這種方式下可訪問數據庫中的數據。
4、startup,等于以下三個命令 startup nomount alter database mount alter database open
5、startup restrict 約束方式啟動
這種方式能夠啟動數據庫,但只允許具有一定特權的用戶訪問 非特權用戶訪問時,會出現以下提示: ERROR:
ORA-01035: ORACLE 只允許具有 RESTRICTED SESSION 權限的用戶使用
6、startup force 強制啟動方式
當不能關閉數據庫時,可以用startup force來完成數據庫的關閉 先關閉數據庫,再執行正常啟動數據庫命令
7、startup pfile=參數文件名 帶初始化參數文件的啟動方式
先讀取參數文件,再按參數文件中的設置啟動數據庫
例:startup pfile=E:Oracleadminoradbpfileinit.ora
8、startup EXCLUSIVE
第二篇:黑馬程序員c語言教程:Oracle簡介
9.通過子查詢建表 通過子查詢建表的例子
SQL>CREATE TABLE emp_41 AS SELECT id, last_name, userid, start_date FROM s_emp WHERE dept_id = 41;SQL> CREATE TABLE A as select * from B where 1=2;只要表的結構.10.用子查詢建表的注意事項
可以關連多個表及用集合函數生成新表,注意選擇出來的字段必須有合法的字段名稱,且不能重復。
用子查詢方式建立的表,只有非空NOT NULL的約束條件能繼承過來, 其它的約束條件和默認值都沒有繼承過來.根據需要,可以用alter table add constraint ……再建立其它的約束條件,如primary key等.11.Foreign Key的可選參數ON DELETE CASCADE 在創建Foreign Key時可以加可選參數: ON DELETE CASCADE它的含義是如果刪除外鍵主表里的內容,子表里相關的內容將一起被刪除.如果沒有ON DELETE CASCADE參數,子表里有內容,父表里的主關鍵字記錄不能被刪除掉.12.如果數據庫表里有不滿足的記錄存在,建立約束條件將不會成功.13.給表創建和刪除同義詞的例子 SQL> CREATE SYNONYM d_sum 2 FOR dept_sum_vu;SQL> CREATE PUBLIC SYNONYM s_dept 2 FOR alice.s_dept;SQL> DROP SYNONYM s_dept;
十、ORACLE里的數據字典
1.什么是數據字典?ORACLE的數據字典是數據庫的重要組成部分之一,它隨著數據庫 的產生而產生, 隨著數據庫的變化而變化, 體現為sys用戶下所有的一些表和視圖.2.數據字典里存了以下內容: 用戶信息
用戶的權限信息
所有數據對象信息表的約束條件統計分析數據庫的視圖等 不能手工修改數據字典里的信息.16
J2EE @ zxw 3.常用的數據字典
Dictionary 存放所有數據表,視圖,同義詞名稱和解釋 Dict_columns 數據字典里字段名稱的和解釋 Dba_users 用戶 Dba_tablespaces 表空間
Dba_data_files 數據庫的文件 Dba_free_space 空閑表空間 Dba_rollback_segs 回滾段
User_objects 數據對象 User_constraints 約束條件 User_sequences 序列號 User_views 視圖 User_indexes 索引 User_synonyms 同義詞
Session_roles 用戶的角色 User_role_privs 用戶的角色權限 User_sys_privs 用戶的系統權限 User_tab_privs 用戶的表級權限 V$session 實時用戶情況 V$sysstat 實時系統統計 V$sesstat 實時用戶統計 V$sgastat 實時SGA使用 V$locked_object 實時鎖 V$controlfile 控制文件 V$logfile 日志文件 V$parameter 參數文件 4.數據字典的分類 數據字典四大類別
User_ 用戶下所有數據庫對象
All_ 用戶權限范圍內所有的數據庫對象 Dba_ 所有的數據庫對象
V$Content$nbsp;統計分析數據庫的視圖 賦于oem_monitor權限非DBA用戶也可查詢V$*視圖
5.查詢數據字典
SQL> select * from dictionary where instr(comments,'index')>0;SQL> select constraint_name, constraint_type, 2 search_condition, r_constraint_name 3 from user_constraints 4 where table_name = ‘&table_name';十一.控制數據、INSERT(往數據表里插入記錄的語句)SQL> insert into 表名(字段名1, 字段名2, ……)values(值1, 值2, ……);SQL> insert into 表名(字段名1, 字段名2, ……)select(字段名1, 字段名2, ……)from 另外的表名 where 條件;可以用&標記變量的方法多次輸入記錄
快速插入數據的方法, 一般用于大于128M的數據轉移 SQL> insert /*+ append */ into 表名
select * from 另外的用戶名.另外的表名 WHERE 條件;SQL> commit;注意事項:
用INSERT /*+ APPEND */ 的方法會對target_tablename產生級別為6的獨占鎖,如果運行此命令時還有對target_tablename的DML操作會排隊在它后面, 對OLTP系統在用的表操作是不合適的。17
J2EE @ zxw 2.插入字符串類型的字段的注意事項: 字符串類型的字段值必須用單引號括起來, 例如: ’GOOD DAY’
如果字段值里包含單引號’ 需要進行字符串轉換, 我們把它替換成兩個 單引號’ ’
字符串類型的字段值超過定義的長度會出錯, 最好在插入前進行長度校驗 ‘’ 標記是NULL, user 標明當前用戶
日期字段的字段值可以用當前數據庫的系統時間SYSDATE, 精確到秒
用字符串轉換成日期型函數TO_DATE(‘2001-08-01’,’YYYY-MM-DD’)TO_DATE()還有很多種日期格式, 可以參看ORACLE DOC.年-月-日 小時:分鐘:秒 的格式YYYY-MM-DD HH24:MI:SS NSERT時最大可操作的字符串長度小于等于4000個單字節, 如果要插入更長的字符串, 請考慮字段用CLOB類型, 方法借用ORACLE里自帶的DBMS_LOB程序包.3、UPDATE(修改數據表里記錄的語句)SQL> UPDATE 表名 SET 字段名1=值1, 字段名2=值2, …… WHERE 條件;如果修改的值N沒有賦值或定義時, 將把原來的記錄內容清為NULL, 最好在修改前進行非空校驗;值N超過定義的長度會出錯, 最好在插入前進行長度校驗.新功能,可以修改子查詢后的結果集
例子:SQL> update(select * from s_dept)set id=50 where id=60;
4、DELETE(刪除數據表里記錄的語句)SQL> DELETE FROM 表名 WHERE 條件;注意:刪除記錄并不能釋放ORACLE里被占用的數據塊表空間.它只把那些 被刪除的數據塊標成unused.如果確實要刪除一個大表里的全部記錄, 可以用 TRUNCATE 命令, 它可以釋放占用的數據塊表空間
SQL> TRUNCATE TABLE 表名;此操作不可回退.5、SQL語句的分類 數據定義語言(DDL):create、alter、drop(創建、修改結構、刪除)(其他:rename)數據操縱語言(DML):insert、delete、select、update(增、刪、查、改)(其他:truncate)
數據控制語言(DCL):grant、revoke(授權、回收)、set role 事務控制:commit、rollback、savepoint(其他:lock table、set constraint、set transaction)
審計控制:audit、noaudit 系統控制:alter system 會話控制:alter session 其他語句:comment(添加注釋)、explain plan、analyze、validate、call
6、ORACLE里事務控制 Commit 提交事務 Rollback 回退事務
Savepoint 設置斷點, 在事務中標記位置, 事務結束, 斷點釋放
事務結束的情況遇到commit或者rollback遇到DDL和DCL語句發現錯誤,如死鎖用戶退出
SQL*PLUS系統重啟或崩潰 7.DML操作的注意事項 18
J2EE @ zxw 以上SQL語句對表都加上了行級鎖, 確認完成后, 必須加上事物處理結束的命令COMMIT 才能正式生效, 否則改變不一定寫入數據庫里.行級鎖也未能得到釋放.如果想撤回這些操作, 可以用命令 ROLLBACK 復原.在運行INSERT, DELETE 和 UPDATE 語句前最好估算一下可能操作的記錄范圍, 應該把它限定在較小(一萬條記錄)范圍內,.否則ORACLE處理這個事物用到很大的回退段.程序響應慢甚至失去響應.如果記錄數上十萬以上這些操作, 可以把這些SQL語句分段分次完成, 其間加上COMMIT 確認事物處理.太過頻繁的commit不好
第三篇:黑馬程序員c語言教程:Oracle概念(推薦)
七、在執行SQL語句時綁定變量
1.接收和定義變量的SQL*PLUS命令 ACCEPT DEFINE UNDEFINE & 2.綁定變量SQL語句的例子(1)SQL> select id, last_name, salary from s_emp where dept_id = &department_number;Enter value for department_number: 10 old 1: select id, last_name, salary from s_emp where dept_id=&department_number;new 1: select id, last_name, salary from s_emp where dept_id= 10 SQL> SET VERIFY OFF | ON;可以關閉和打開提示確認信息old 1和new 1的顯示.3.綁定變量SQL語句的例子(2)SQL> select id, last_name, salary from s_emp where title = '&job_title';Enter value for job_title: Stock Clerk 11
J2EE @ zxw SQL> select id, last_name, salary from s_emp where hiredate >to_date('&start_hire_date','YYYY-MM-DD');Enter value for start_hire_date : 2001-01-01 把綁定字符串和日期類型變量時,變量外面要加單引號 也可綁定變量來查詢不同的字段名 輸入變量值的時候不要加;等其它符號 4.ACCEPT的語法和例子
SQL> ACCEPT variable [datatype] [FORMAT] [PROMPT text] [HIDE] 說明: variable 指變量名 datatype 指變量類型,如number,char等 format 指變量顯示格
式 prompt text 可自定義彈出提示符的內容text hide 隱藏用戶的輸入符號 使用ACCEPT的例子:
ACCEPT p_dname PROMPT 'Provide the department name: ' ACCEPT p_salary NUMBER PROMPT 'Salary amount: ' ACCEPT pswd CHAR PROMPT 'Password: ' HIDE ACCEPT low_date date format 'YYYY-MM-DD' PROMPT“Enter the low date range('YYYY-MM-DD'):” 4.DEFINE的語法和例子
SQL> DEFINE variable = value 說明: variable 指變量名 value 指變量值
定義好了變良值后, 執行綁定變量的SQL語句時不再提示輸入變量
使用DEFINE的例子:
SQL> DEFINE dname = sales SQL> DEFINE dname DEFINE dname = “sales”(CHAR)SQL> select name from dept where lower(name)='&dname';NAME-------------------------sales sales SQL> UNDEFINE dname SQL> DEFINE dname Symbol dname is UNDEFINED 5.SQL*PLUS里傳遞參數到保存好的*.sql文件里 SQL> @ /路徑名/文件名 參數名1[,參數名2, ?.] SQL> start /路徑名/文件名 參數名1[,參數名2, ?.] 注意事項: 一次最多只能獲取9個&變量, 變量名稱只能是從&1,&2到&9 變量名后不要加特殊的結束符號
如果在SQL*PLUS里要把&符號保存在ORACLE數據庫里,要修改sql*plus環境變量define SQL> set define off;
八、概述數據模型和數據庫設計 1.系統開發的階段: Strategy and Analysis Design Build and Document Transition Production 12
J2EE @ zxw 2.數據模型
Model of system in client's mind Entity model of client's model Table model of entity model Tables on disk 3.實體關系模型(ERM)概念
ERM(entity relationship modeling)實體 存有特定信息的目標和事件 例如: 客戶,訂單等 屬性 描述實體的屬性 例如: 姓名,電話號碼等 關系 兩個實體間的關系 例如:訂單和產品等 實體關系模型圖表里的約定
Dashed line(虛線)可選參數 “may be”
Solid line(實線)必選參數 “must be”
Crow's foot(多線)程度參數 “one or more”
Single line(單線)程度參數 “one and only one” 4.實體關系模型例子
每個訂單都必須有一個或幾個客戶
每個客戶可能是一個或幾個訂單的申請者 5.實體關系的類型
1:1 一對一 例如: 的士和司機 M:1 多對一 例如: 乘客和飛機 1:M 一對多 例如: 員工和技能 6.校正實體關系的原則
屬性是單一值的, 不會有重復
屬性必須依存于實體, 要有唯一標記
沒有非唯一屬性依賴于另一個非唯一的屬性 7.定義結構時的注意事項 減少數據冗余
減少完整性約束產生的問題 確認省略的實體,關系和屬性 8.完整性約束的要求
Primary key 主關鍵字 唯一非NULL Foreign key 外鍵 依賴于另一個Primary key,可能為NULL Column 字段名 符合定義的類型和長度
Constraint 約束條件 用戶自定義的約束條件,要符合工作流要求 例如: 一個銷售人員的提成不能超過它的基本工資
Candidate key 候選主關鍵字 多個字段名可組成候選主關鍵字, 其組合是唯一和非NULL的
9.把實體關系圖映射到關系數據庫對象的方法 把簡單實體映射到數據庫里的表
把屬性映射到數據庫里的表的字段, 標明類型和注釋 把唯一標記映射到數據庫里的唯一關鍵字 把實體間的關系映射到數據庫里的外鍵 13
J2EE @ zxw 其它的考慮: 設計索引,使查詢更快
建立視圖,使信息有不同的呈現面, 減少復雜的SQL語句 計劃存儲空間的分配 重新定義完整性約束條件
10.實體關系圖里符號的含義 PK 唯一關鍵字的字段 FK 外鍵的字段
FK1,FK2 同一個表的兩個不同的外鍵
FK1,FK1 兩個字段共同組成一個外鍵 NN 非null字段 U 唯一字段
U1,U1 兩個字段共同組成一個唯一字段
九、創建表
1.ORACLE常用的字段類型 ORACLE常用的字段類型有
VARCHAR2(size)可變長度的字符串, 必須規定長度 CHAR(size)固定長度的字符串, 不規定長度默認值為1
NUMBER(p,s)數字型p是位數總長度, s是小數的長度, 可存負數 最長38位.不夠位時會四舍五入.DATE 日期和時間類型
LOB 超長字符, 最大可達4G CLOB 超長文本字符串 BLOB 超長二進制字符串
BFILE 超長二進制字符串, 保存在數據庫外的文件里是只讀的.數字字段類型位數及其四舍五入的結果 原始數值1234567.89 數字字段類型位數 存儲的值 Number 1234567.89 Number 12345678 Number 錯
Number(9,1)1234567.9 Number(9,3)錯 Number(7,2)錯
Number(5,-2)1234600 Number(5,-4)1230000 Number(*,1)1234567.9 2.創建表時給字段加默認值 和約束條件 創建表時可以給字段加上默認值
例如 : 日期字段 DEFAULT SYSDATE 這樣每次插入和修改時, 不用程序操作這個字段都能得到動作的時間 14
J2EE @ zxw 創建表時可以給字段加上約束條件 例如: 非空 NOT NULL 不允許重復 UNIQUE 關鍵字 PRIMARY KEY 按條件檢查 CHECK(條件)外鍵 REFERENCES 表名(字段名)3.創建表的例子
CREATE TABLE DEPT(EPTNO NUMBER(2)CONSTRAINT PK_DEPT PRIMARY KEY, DNAME VARCHAR2(14), LOC VARCHAR2(13));CREATE TABLE region(ID number(2)NOT NULL PRIMARY KEY, postcode number default '0' NOT NULL, areaname varchar2(30)default ' ' NOT NULL);4.創建表時的命名規則和注意事項
表名和字段名的命名規則:必須以字母開頭,可以含符號A-Z,a-z,0-9,_,$,# 大小寫不區分
不用SQL里的保留字, 一定要用時可用雙引號把字符串括起來. 用和實體或屬性相關的英文符號長度有一定的限制 注意事項: 建表時可以用中文的字段名, 但最好還是用英文的字段名
創建表時要把較小的不為空的字段放在前面, 可能為空的字段放在后面 建表時如果有唯一關鍵字或者唯一的約束條件,建表時自動建了索引 一個表的最多字段個數也是有限制的,254個.5.約束名的命名規則和語法
約束名的命名規則約束名如果在建表的時候沒有指明,系統命名規則是SYS_Cn(n是數字)約束名字符串的命名規則同于表和字段名的命名規則 6.使用約束時的注意事項
約束里不能用系統函數,如SYSDATE和別的表的字段比較 可以用本表內字段的比較
想在事務處理后, 做約束的檢查
SQL> alter session set constraints deferred.7.由實體關系圖到創建表的例子 s_dept 前提條件:已有region表且含唯一關鍵字的字段id SQL> CREATE TABLE s_dept(id NUMBER(7)CONSTRAINT s_dept_id_pk PRIMARY KEY, name VARCHAR2(25)CONSTRAINT s_dept_name_nn NOT NULL, region_id NUMBER(7)CONSTRAINT s_dept_region_id_fk REFERENCES region(id), CONSTRAINT s_dept_name_region_id_uk UNIQUE(name, region_id));8.較復雜的創建表例子 15
J2EE @ zxw SQL> CREATE TABLE s_emp(id NUMBER(7)CONSTRAINT s_emp_id_pk PRIMARY KEY, last_name VARCHAR2(25)CONSTRAINT s_emp_last_name_nn NOT NULL,first_name VARCHAR2(25), userid VARCHAR2 CONSTRAINT s_emp_userid_nn NOT NULL CONSTRAINT s_emp_userid_uk UNIQUE, start_date DATE DEFAULT SYSDATE, comments VARCHAR2(25), manager_id NUMBER(7), title VARCHAR2(25), dept_id NUMBER(7)CONSTRAINT s_emp_dept_id_fk REFERENCES s_dept(id), salary NUMBER(11,2), commission_pct NUMBER(4,2)CONSTRAINT s_emp_commission_pct_ck CHECK(commission_pct IN(10,12.5,15,17.5,20)));
第四篇:黑馬程序員c語言教程:Oracle指令
---------------------------order by的用法
--員工信息按照姓名正序排列
select * from emp order by ename asc;--員工信息按照倒敘排列
select * from emp order by ename desc;--也可以是多個字段組合排列。例如:員工信息按照部門正序排列,并且按照姓名倒敘排列
select * from emp order by deptno asc,ename desc
---------------------------function的用法--把所有姓名變成小寫
select lower(ename)from emp;--把所有姓名變成大寫
select upper(ename)from emp;--求所有人名中包含'a'的員工信息不區分大小寫
select * from emp where lower(ename)like '%a%'--截取子字符串,比如求Hello的一部分 select substr('hello',2,2)from dual;select substr(ename,2,2)from emp;--求Hello的一部分,并指明長度
--求ascii碼對應的字符 select chr(65)from dual--求字符對應的ascii碼
select ascii('中')from dual--四舍五入
select round(12.456,2)from dual select round(12.456,-1)from dual--四舍五入小數點后面多少位
--四舍五入小數點前面多少位
---------------------------important!日期轉換函數
---------------------------將當前日期轉換成1981-03-12 12:00:00這種形式的字符串
select to_char(sysdate,'YYYY-MM-DD HH24:MI:SS')from dual;
--將1981-03-12 12:00:00字符串轉換成日期
select to_date('1981-03-12 12:00:00','YYYY-MM-DD HH24:MI:SS')from
dual;
--將每個人的薪水轉換成固定格式的字符串
select to_char(sal,'$999,999,999.99')from emp;--將固定格式的字符串轉換成數值
select to_number('$8,000.00','$999,999,999.99')from dual;
--當null參與計算時候,可以用nvl這個函數。比如求每個人一年總共的收入 select ename,sal*12+comm from emp
---------------------------group function組函數
--求所有人的薪水的總和,平均值,最大值,最小值
select sum(sal),avg(sal),max(sal),min(sal)from emp;--求總的行數
select count(*)from emp;--求總的行樹,(可以指定具體的字段)但如果字段有null值的時候需要小心使用 select count(comm)from emp;
--也可以過濾掉重復的行之后統計行數
select count(distinct deptno)from emp--可以指明按照哪個字段進行分組.比如;分部門統計最高薪水
select deptno,max(sal)from emp where deptno is not null group by deptno--也可以按照多個字段來分組統計,比如:分部門和崗位,統計最高薪水和行數 select deptno,job,max(sal),count(*)from emp group by deptno,job
---------------------------重要:出現在select列表中的字段,如果沒有在組函數中,那么必須出現在group by 子句中。
-------------------------select ename,deptno,job,max(sal),count(*)from emp group by deptno,job
--求薪水最高的員工姓名
select * from emp where sal=(select max(sal)from emp);delete from emp where ename='TEST2' update emp set deptno=10 where deptno=99 select * from dept insert into dept(deptno,dname,loc)values('10','ACCOUNTING','NEW YORK');--having從句的用法
--求平均薪水是2000以上的部門
select deptno,avg(sal)as avg_sal from emp group by deptno
having avg(sal)>2000-------------------------
第五篇:黑馬程序員c語言教程:Oracle指令
--sql structured query language
--DML--Data Manipulation Language--數據操作語言
query information(SELECT), add new rows(INSERT), modify existing rows(UPDATE), delete existing rows(DELETE), perform a conditional update or insert operation(MERGE), see an execution plan of SQL(EXPLAIN PLAN), and lock a table to restrict access(LOCK TABLE).--DDL--Data Definition Language--數據定義語言
create, modify,drop, or rename objects(CREATE,ALTER,DROP,RENAME), remove all rows from a database object without dropping the structure(TRUNCATE), manage access privileges(GRANT,REVOKE), audit database use(AUDIT,NOAUDIT)and add a description about an object to the dictionary(COMMENT).--Transaction Control事務控制語句 save the changes(COMMIT)or discard the changes(ROLLBACK)made by DML statements.Also included in the transaction-control statements are statements to set a point or marker in the transaction for possible rollback(SAVEPOINT)and to define the properties for the transaction(SET TRANSACTION).Used to manage the properties of the database.There isonly one statement in this category(ALTER SYSTEM).--DCL--Data Control Language--與開發關系不是很密切,用于權限的分配與回收 grant,revoke,data control
--Session Control control the session properties(ALTER SESSION)and to enable/disable roles(SET ROLE).--System Control
-------------------------select的用法
--每個員工的所有信息
select * from emp--每個人的部門編號,姓名,薪水
select deptno,ename,sal from emp;--每個人的年薪
select ename,sal*12 from emp;--計算2*3的值
select 2*3 from emp;--計算2*3的值(dual)select 2*3 from dual;select * from dual;--得到當前時間
select sysdate from dual--可以給列起別名,比如求每個人的年薪
select ename,sal*12 salperyear from emp;--如果別名中有空格,需要用雙引號
select ename,sal*12 “sal per year” from emp;--如果沒有內容,則為空 select comm from emp;--當空字段參與計算,則結果是null--例如:計算每個人的全年的收入包括月薪和年終獎 select ename,sal*12+comm from emp;--可以將多個字符串拼在一起。比如:求每個人的薪水,格式為smith-sal-123 select ename||'-sal-'||sal from emp;--如果字符串中有單引號,需要用另外一個單引號轉義,比如:這樣一個字符串: he's friend select ename||'''s sal is'||sal from emp;
---------------------------distinct 關鍵詞的用法--求有哪些個部門
select distinct deptno from emp--可以用來修飾多個字段。比如:求有哪些個部門和job的組合 select distinct deptno,job from emp
-------------------------where關鍵詞的用法
--可以是數值類型的等值判斷。比如:求10這個部門的所有員工 select * from emp where deptno=20--可以是字符串類型的等值判斷。比如:求叫KING的這個人的信息 select * from emp where ename = 'KING'--也可以是不等值判斷。比如:求薪水小于2000的員工信息 select * from emp where sal<2000;
--字符串也可以做不等值判斷,比如:求所有ename大于'CBA'的員工信息。select * from emp where ename>'CBA';--求部門不是10的員工
select * from emp where deptno <> 10;--求薪水在800和1500之間的員工信息
select * from emp where sal >=800 and sal <=1500;--也可以寫成
select * from emp where sal between 800 and 1500--這樣寫則不可以
-----------------------------select * from emp where 800<=sal<=1500--where...in..的用法。比如:求薪水是800或者1500或正2000的員工信息 select * from emp where sal=800 or sal=1500 or sal=2000--相當于寫成這樣
select * from emp where sal in(1500,800,2000,1500,1500,1500,1500);--再比如求姓名是KING,SMITH,AA的員工信息
select * from emp where ename in('KING','SMITH','AA')--求入職時間在20-2月-81之后的員工信息
select * from emp where hiredate < '23-5月-87';
---------------------------and or not的用法
--求薪水大于1000或者部門在20這個部門的員工信息 select * from emp where sal>1000 and deptno=20--求薪水不是800或者不是1500或者不是3000的員工信息 select * from emp where sal not in(800,1500,3000)--也可以這樣來寫
select * from emp where sal <>800 and sal <> 1500 and sal<>3000
---------------------------like的用法
--求名字中包含ALL這三個字符的員工信息
select * from emp where ename like '%E%';--求名字中的第二個字母是A的員工
select * from emp where ename like '_A%';--特殊字符需要轉義。比如:求員工中包含特殊字符%的員工信息 select * from emp where ename like '%%%' escape ''
---------------------------null的用法
--求沒有年終獎的員工
select * from emp where comm is null--求有年終獎的員工
select * from emp where comm is not null