oracle数据库相关知识,Oracle数据库相关知识点复习
一.Oracle數據庫中常用的數據類型varchar2(長度)可變長字符串char(長度)定長number()表示整數或者浮點數number(8) number(8,2)clog字符的大對象blog二進制的大對象二.數據庫查詢1)SELECT語句從表中提取查詢數據.語法為SELECT [DISTINCT] {column1,column2,…} FROM tablename WHERE {conditions} GROUP BY {conditions} ORDER BY {expressions} [ASC/DESC];說明:SELECT子句用于指定檢索數據庫的中哪些列,FROM子句用于指定從哪一個表或視圖中檢索數據。2)WHERE子句。WHERE子句用來選擇符合條件的的記錄.like '...'通配查詢_,%between ... and ... ,表示結果在這之間,between and是一個閉區間。!=,<>,^=,這三個都可以表示不等于。in (va1,val2,...)判斷結果是否在這個集合中存在 。like '...'字符串通配查詢,'%'表示0或多個字符,'_'表示一個字符。... and ...表示只有兩個條件同時滿足... or ...表示條件只要滿足其中之一就可以all ...是要求都滿足條件。not .....,則是可以與以上的條件產生反效果。... is null使用來判斷值是不是空。3) ORDER BY子句ORDER BY子句使得SQL在顯示查詢結果時將各返回行按順序排列,返回行的排列順序由ORDER BY子句指定的表達式的值確定。ASC(默認,升序)DESC(降序)order by目標列名(別名) 排序順序(不寫排序順序,會默認為升序排序)例:select first_name from s_emp order by first_name;select first_name from s_emp order by first_name desc;三.SQL常用的命令分類及例子數據定義語言:create(創建)、alter(更改)和drop(刪除)命令。數據操縱語言:insert(插入)、select(選擇)、delete(刪除)和update(更新)命令。事務控制語言:commit(提交)、savepoint(保存點)和rollback(回滾)命令。數據控制語言:grant(授予)和revoke(回收)。1.數據定義語言舉例:SQL> create table myTab(no number(4),name varchar2(20));創建一個名為myTab的表,包含兩列no和name;SQL> alter table myTab modify (name varchar2(25));修改myTab中的name列,使此列能容納25個字符;SQL> alter table myTab add (tel_no varchar2(20));給表myTab增加一列tel_no;SQL> alter table myTab drop column tel_no;刪除表myTab的tel_no列;SQL> drop table myTab;刪除表myTab;SQL> truncate table myTab;刪除表myTab中的所有行(截斷表),注意:不可以回滾。2.數據操縱語言舉例:SQL> insert into myTab values(‘001’,’John’);向表myTab中插入一行數據;SQL> select distinct salary “薪水” from s_emp where salary>1500 order by sal desc;選擇表中salary大于1500的數據,以別名“薪水”顯示并按照salary的降序進行排列輸出;SQL> create table empa as select empno,ename,job,sal from emp;從emp表中選擇“empno,ename,job,sal”四列的數據建立新表empa;SQL> create table empa as select * from emp where 1=2;使用一個假條件根據現有表emp創建一個只包含結構的空表empa;SQL> delete from empa where sal<1500;刪除表empa中sal小于1500的行;SQL> update empa set sal=1500 where sal<1500;更新,將表empa中sal小于1500的行的sal值全部改為1500。3.事務控制語言舉例:SQL> commit;用于提交并結束事務處理;SQL> savepoint mark1;保存點類似于標記,用來標記事務中可以應用回滾的點;SQL> rollback to savepoint mark1;回滾到保存點mark1。四.Oracle數據庫函數注意:dual表(虛表)是專門用于函數測試和運算的.1.字符函數字符是大小寫敏感的轉小寫lower(字段名)轉大寫upper(字段名)首字母大寫initcap(字段名)字符串拼接concat(字段1,字段2)截取子串substr(字段名,起始位置,取字符個數)例: select first_name,substr(first_name,2,2) sub from s_emp;(從名字的第二個字符開始取兩個字符)select first_name,substr(first_name,-2,2) sub from s_emp;(從名字的倒數第二個字符開始取兩個字符)2.數值函數四舍五入函數round(數據,保留到小數點后幾位)1表示保留到小數點后一位,-1表示保留到小數點前一位。例:select round(15.36,1) from dual;截取數值函數trunc(數據,保留到小數點后幾位)例:select trunc(123.456,1) from dual;截取到小數點后一位,注意:與round函數不同,不會四舍五入。3.日期函數缺省日期格式,日-月-年dd-mon-rr修改當前會話的日期格式,會按照指定的格式輸出日期alter session set nls_date_format='yyyy mm dd hh24:mi:ss';返回當前日期sysdate例:select sysdate from dual;4.不同數據類型間轉換函數將日期轉成字符tochar(date,'日期格式')日期格式要用有效格式,格式大小寫敏感 'yyyy mm dd hh24:mi:ss'(標準日期格式),'year'(年的全拼),'month'(月的全拼),'day'(星期的全拼),'ddspth' (日期的全拼)例:select to_char(sysdate,'yyyy mm dd hh24:mi:ss')from dual;select to_char(sysdate,'year month day ddspth')from dual;將字符串轉成日期to_date('...','日期格式')例:select to_char(to_date('2006 11 03','yyyy mm dd'),'dd-month-yy') from dual;五.表連接(關聯查詢)等值連接select table1.column1,table2.column2from table1 t1,table2 t2where t1.column3=t2.column4;表連接時,當表與表之間有同名字段時,可以加上表名或表的別名,加以區分,使用時要用表名.字段名或表別名.字段名(列名)。當表的字段名是唯一時,可以不用加上表名或表的別名。注意:當為表起了別名,就不能再使用表名.字段名了。例如:select e.first_name ||’ ’|| e.last_name name,d.name dept_namefrom s_emp e, s_dept dwhere e.dept_id=d.id;非等值連接select [表別名1.字段名1],[表別名2.字段名2],...from表1表別名1,表2表別名2where表別名1.字段名3 .....表別名2.字段名4....可以使比較運算符,也可以使其他的除了'='的運算符例:select first_name, salaryfrom s_empwhere salary between 1000 and 2000;自連接把一個表的兩個字段關系轉換成兩個表字段之間的關系.select [表別名1.字段名1],[表別名2.字段名2],...from表1表別名1,表1表別名2where表別名1.字段名3=表別名2.字段名4;例:select a.first_name ename,b.first_name cnamefrom s_emp a,s_emp bwhere a.manager_id=b.id;外連接使用一張表中的所有記錄去和另一張表中的記錄按條件匹配(空值也會匹配)這個表中的所有記錄都會顯示。//想在哪邊模擬記錄就在哪邊加上(+)1. LEFT OUTER JOIN:左外連接SELECT e.last_name, e.dept_id, d.nameFROM s_emp eLEFT OUTER JOIN s_dept dON (e.dept_id = d.id);等價于SELECT e.last_name, e.dept_id, d.nameFROM s_emp e, s_dept dWHERE e.dept_id=d.id(+);結果為:所有員工及對應部門的記錄,包括沒有對應部門編號dept_id的員工記錄。2. RIGHT OUTER JOIN:右外連接SELECT e.last_name, d.nameFROM s_emp eRIGHT OUTER JOIN s_dept dON (e.dept_id = d.id);等價于SELECT e.last_name,d.nameFROM s_emp e, s_dept dWHERE e.dept_id(+)=d.id;結果為:所有員工及對應部門的記錄,包括沒有任何員工的部門記錄。3. FULL OUTER JOIN:全外關聯SELECT e.dept_id,d.idFROM s_emp eFULL OUTER JOIN s_dept dON (e.dept_id = d.id);結果為:所有員工及對應部門的記錄,包括沒有對應部門編號department_id的員工記錄和沒有任何員工的部門記錄。六.組函數group by把select的結果集分成幾個小組,這個group by子句可以跟在select語句后或是having前面。group by子句也會觸發排序操作,會按分組字段排序。select [組函數或分組的字段名]... from表名group by [字段名1],[字段名2],.....;例:select avg(salary) from s_emp group by dept_id;注意:組函數會忽略空值,但是count(*)除外,他會把空記錄也記錄在內。avg和sum這兩個函數的參數只能是number型的。以下所提到的函數可以使用任意類型做參數。max(..),min(..)求最大值和最小值,count(*)統計表中記錄數。例:select max(b.name),avg(a.salary), max(c.name)from s_emp a,s_dept b,s_region cwhere a.dept_id=b.idand b.region_id=c.idgroup by b.id;注意:只要寫了group by子句,select后就只能用group by之后的字段或者是組函數。having子句可以過濾組函數結果或是分組的信息,并且寫在group by子句后。七.子查詢可以嵌在sql語句中的select語句。在select語句中嵌套子查詢時,會先執行子查詢。一般的會將子查詢放在運算符的右邊。注意:在使用子查詢時,要注意這個運算符是單行的(也就是只能是單值),還是多行運算符(范圍,多值)。配合使用子查詢返回的結果必須符合運算符的用法。例:select first_name||' '||last_name namefrom s_empwhere title in (select title from s_empwhere dept_id=42);查詢和42部門員工職位相同的所有員工的姓名八.約束針對表中的字段進行定義的。primary key(主鍵約束PK)保證實體的完整性,保證記錄的唯一主鍵約束,唯一且非空,并且每一個表中只能有一個主鍵,有兩個字段聯合作為主鍵時,將兩個字段放在一起唯一標識記錄,叫做聯合主鍵。主鍵約束的定義:第一種定義形式:create table test(c number primary key );列級約束第二種定義形式:create table test(c number , primary key(c) ) ;表級約束create table test(c1 number constraints?? pk_c1 primary key );此約束有名字: pk_c1create table?? test(c number , c2 number , primary key (c ,c1) ) ;用表級約束可以實現聯合主鍵foreign key(外鍵約束FK)保證引用的完整性,外鍵約束,外鍵的取值是受另外一張表中的主鍵或唯一鍵的約束,不能夠取其他值,只能夠引用主鍵或唯一鍵的值,被引用的表,叫做parent table(父表),引用方的表叫做child table(子表),要想創建子表,就要先創建父表,記錄的插入也是如此,先父表后子表,刪除記錄,要先刪除子表記錄,后刪除父表記錄,要修改記錄,如果要修改父表的記錄要保證沒有被子表引用。要刪表時,要先刪子表,后刪除父表。(可以通過使用cascade constraints選項來刪除父表)carete?? table???? parent(c1 number primary key );create?? table??? child (c number primary key ,?? c2 number references parent(c1));或表級約束定義:create?? table child( c number primary key , c2 number , foreign key(c2) references parent(c1));非空約束(not null)這是一個列級約束,在建表時,在數據類型的后面加上not null,也就是在插入時不允許插入空值。例:create table student(id number primary key,name varchar2(32) not null,address varchar2(32));unique唯一約束唯一約束,允許為空,要求插入的記錄中的值是唯一的。例:create table student(id number,name varchar2(32),address varchar2(32),primary key (id),unique (address));check約束檢查約束,可以按照指定條件,檢查記錄的插入。check中不能使用偽列,不能使用函數,不能引用其他字段。例:create table sal (a1 number , check(a1>1000));九.數據字典數據字典是由系統維護的,包含數據庫的信息數據字典示圖user_XXXXX用戶示圖all_XXXXX所有示圖dba_XXXXX數據庫中所有示圖v$_XXXXX動態性能示圖dict或dictionary表示數據字典的數據字典。user_constraints用戶的表中約束的表其中有constraints_name字段存放的是約束名,constraint_type字段存放的是約束的類型,r_constraints_name字段表示外鍵引用自何處.user_cons_column表,是用戶的列級約束表,column_name字段存放的是約束字段的名字,position字段存放的是約束在聯合鍵中的位置.十.事務transaction原子操作,也就是不可分割的操作,必須一起成功一起失敗。事務的結束動作就是commit,DDL,DCL語句執行會自動提交commit。sqlplus正常退出是會做提交動作的commit;,當系統異常推出是,會執行回滾操作rollback;。一個沒有結束的事務,叫做活動的事務(active transaction),活動的事務中修改的數據,只有本會話才能看見。十一.Oracle中的偽列偽列就像Oracle中的一個表列,但實際上它并未存儲在表中。偽列可以從表中查詢,但是不能插入、更新或刪除它們的值。常用的偽列:rowid和rownum。rowid:數據庫中的每一行都有一個行地址,rowid偽列返回該行地址。可以使用rowid值來定位表中的一行。通常情況下,rowid值可以唯一地標識數據庫中的一行。rowid偽列有以下重要用途:1)能以最快的方式訪問表中的一行;2)能顯示表的行是如何存儲的。3)可以作為表中行的唯一標識。如:SQL> select rowid,ename from emp;rownum:對于一個查詢返回的每一行,rownum偽列返回一個數值代表的次序。rownum偽列特點:1) 有個特點要么等于1要么小于某個值, 不能直接等于某個值,不能大于某個值。2)常用于分頁顯示。返回的第一行的rownum值為1,第二行的rownum值為2,依此類推。通過使用rownum偽列,用戶可以限制查詢返回的行數。如:SQL>select * from emp where rownum<11;從emp表中提取10條記錄。十二.序列(sequence)create sequence序列名;(不帶參數時默認為從1開始每次遞增1,oracle中為了提高產生序列的效率一般一次性產生20個序列放入當前會話的序列池中備用以加快效率)sequence的參數:increment by n起始值start with n遞增量maxvalue n最大值minvalue n最小值cycle|no cycle循環cache n緩存(第一次取時會一次取多少個id存起來)查看sequence示圖:desc??? user_sequences ;select?? sequence_name , cache_size , last_number from user_sequences?? where?? sequence_name like 's_';select序列名.currval from?? dual查看當前的序列數select序列名.nextval from?? dual查看下一個序列數,它會自動給當前的序列加1刪除序列sequencedrop sequence序列名;十三.視圖(View)視圖就相當于一條select語句,定義了一個視圖就是定義了一個sql語句,視圖不占空間,使用視圖不會提高性能,但是能簡化sql語句創建視圖:creating views視圖名;如:create or replace views test as select * from test1 where c1=1;create or replace:如果view存在就覆蓋,不存在才創建。force|no force:基表存在時使用,不存在時則創建該表。注意:向視圖中插入數據時,會直接插進基表中,查看視圖中的數據時,相當于就是執行創建時的select語句。刪除視圖:drop views視圖名;試圖的約束:with read only視圖只讀約束with check option不允許插入與where條件不符的記錄,類似于check約束的功能.create view test_ccas select * from testwhere c1>10with check option;十四.索引(index)建立索引的目的就是為了加快查詢速度,建立索引后會使DML操作效率慢,但是對用戶查詢會提高效率。刪除一個表時,相對應的索引也會刪除。另外,索引是會進行排序。創建一個索引:create index索引名on表名(字段名);create index test_index on test(c1);刪除索引:drop index test_index;注意:創建索引就是為了減少物理讀,索引會減少掃描的時間。在經常要用到where的子句的字段,應該使用索引,另外還要看所查詢的數據與全部數據的百分比,表越大,查詢的記錄越少,索引的效率就越高.
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的oracle数据库相关知识,Oracle数据库相关知识点复习的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 老年人理财有什么误区?需要注意什么?
- 下一篇: 大学生信用卡怎么办 看看你有没有资格申请