oracle 數據庫

ORACLE

SQL(Structured Query Language)結構化查詢語言

DML   數據操縱語言

SQL    DCL   數據控制語言,控制權限

       DDL   數據定義語言  例如:CREATE,DROP,ALTER,DELETE

ORACLE安裝

              Sys  超級管理員

  System system

              Scott tiger

       

Oracle端口號:1521

Oracle只有一個database,通過不同的用戶給表分類。

sqlplus

Select * from tab;查詢當前用戶有哪些表。

set linesize 300;顯示一行顯示300個字符。

Set pagesize 50;顯示一頁50

簡單查詢語句:

Select [distinct] <列名> [[as] 別名] from <表名> [[as] 別名]

[where <查詢條件>]

[order by <排序列名> [asc | desc]]

distinct 去掉查詢結果中重複列  字段名不能加’ ’(引號)

select ‘name:’ || ename form emp

            字符串連接

Between 1500 and 3000 結果包含了15003000

Between ….and….也可用於日期

In:

Select empno,ename from emp where empno in(2011,2001,2300)

通配符:’ -’代表一個字符,‘%’代表0到多個字符。

sqlplus 中,ed d:/a  表示打開或創建一個sql文件,

             @ d:/a   表示執行此文件

單行函數

字符函數:接收字符輸入並輸出。

  upper: 將小寫字符轉換成大寫

   select upper(‘jack’) from dual;

oracle有一張特殊的表:dual,完成一項功能使用

  initcap:將單詞第一個字母轉換成大寫

    select initcap(lower(ename)) from emp;   嵌套使用函數。

  Concat:字符串連接

Select concat(‘name:’,ename) from emp;    相當於使用‘ ||

  length: 長度

select length(‘hello’) from dual;

  substr: 截取字符串

substr(‘word’,3)  從第三個開始截取

substr(‘helloword’,1,3) :其中爲索引,3爲長度

索引可從0開始,也可從1開始

Substr(‘helloword’,-3)  從後向前數截取3

  Replace:替換

Select replace(ename,’s’,’9’) from emp;

數字函數:

  round:四捨五入

    select round(2473.125) from dual; 無小數保留

round(2736.3567,2) 保留兩位小數

round(2173.34,-2) 精確到兩小點前兩位

  trunc(2649.34,2)保留兩位小數,其餘位截去

日期函數:

日期-數字=日期    日期+數字=日期    日期-日期=數字

  round((sysdate-hiredate)/7) 求員工入職大約有幾個星期

  month_betweed(sysdate,hiredate)  求員工入職有幾個月

  add_months(sysdate,1) 加一個月

  next_day(sysdate,’星期一’) 求出給定日期的下星期一是號

  last_day(sysdate)  這個月的最後一天是幾號

轉換函數:

  to_char(hiredate) 轉換成字符串

  to_char(hiredate,’yy-mm-dd’) 轉換成日期形式

  to_char(hiredate,’fmyyyy-mm-dd’)  其中fmformat去掉前導0

  to_char(sal,’$99.999,99’)

  to_number(‘34235’)

  to_date(’12-28-2012’,’mm-dd-yyyy’)  轉換成日期

通用函數:

Oracle中空值參加四則運算,結果爲null

  select ename,sal*12+nvl(comm,0) from emp;

多表查詢:

   找關聯字段作關聯條件

(1) 找出幾張表 (2)消除迪卡爾積  (3)確定查詢內容

 一張表當兩張表用時不是一回事

 “什麼的什麼“用時需消除迪卡爾積

表連接:

(1) oracle特有的方式

+“號在”=“號左邊是右連接,在“=”號右邊是右連接

以哪張表爲基準就是要求其表內容全部顯示出來。

select e.ename,m.ename from emp e,emp m where e.mgr = m.empno(+);

(2)通用表連接  sql1999

  交叉連接,產生迪卡爾積。

   select * from emp cross join dept;

  自然連接:自動匹配關聯字段,有且只有一個字段名稱相同,且是關聯字段

   select * from emp natural join dept;

select * from emp join dept using(deptno); 若有多個相同字段,用using明確指定哪個字段(字段名稱)

select * from emp join dept on(emp.deptno=dept.deptno);

                 明確指定要關聯的字段,字段名不一樣時

  左連接:

select e.ename,m.ename from emp e left join emp m on(e.mgr=m.empno);

組函數和分組函數:

   count():統計函數,查個數

   select deptno from emp group by depno;

          只有分組條件才能作爲查詢字段

   Select deptno,count(ename) from emp group by deptno; 可以用分組函數

   Select d.dname,avg(e.sal) from emp e right join dept d using(deptno) group by d.dname;

 子查詢:在查詢結果當成一張表,再在這張表的基礎上查詢

   例:要求顯示出平均工資大於2000的部門編號和平均工資

      注意:分組條件不能出現在where條件中,只能用having

      select deptno,avg(sal) from emp group by deptno having avg(sal)>2000;

where條件必須放在group by

select job,sum(sal) from emp where job <> ‘saleman’

group by job

having sum(sal) > 5000

order by sum(sal) desc;

組函數嵌套時,即便是分組條件也不能作爲查詢字段,不能查詢任何字段

分頁:

   Sqlserver’top’

   Mysql用‘limit

   Oracle 用僞例(rownum,rowid

 “id”:惟一標識

  Rownum一定要從1開始。

select * from (select rownum r,ename from emp where rownum<=10) where r>=5;

  查詢emp表中第5至第10條記錄。

分頁必要的條件:

(1) 每一頁的起始位置  firstIndex

(2) 每一頁顯示幾條記錄 maxResult

創建表:

  create table myemp as select * from emp; 表的複製

  desc emp;查詢表結構

  create table myemp as select * from emp where 1=2; 複製表結構

插入數據:

  Insert into<表名> [(字段1,字段2…)]  values(<1><2>…)

更新數據:

  Update <表名> set <更新字段的值> where <更新條件>

常用數據類型:

  Char:表示字符類型,長度限制255字節,效率高,長度固定。 中文佔3個字節

  varchar2 :表示字符類型,長度限制255字節,節約空間,長度可變。

  Clob:大文本類型,可以存放在4G,  mysql :text

  number: number(n)表示整數,長度爲N,可以使用INTEGER

         number(m,n)表示一個小數,小數長度爲n,整數長度爲m-n,可以使用float

  date:表示日期類型,需要按照標準的日期格式。

  blob :表示二進制類型,4G

修改表結構:

Alter table t-user modify(username,varchar(12));只能修改成更大的

截斷表:

Truncate 用來刪除表中的數據,不能回退,delete 可以回退。

數據庫的完整性 惟一性+正確性

 主鍵約束:primary key 

(1)…(2)…(3)alter table t_user add constraint PK-USER-ID primary key(id);

 惟一約束 :unique

        區別:主鍵約束不允許插入案值,而惟一性約束允許插入空值上。

             Oracle允許插入無數個空值。

        Alter table t_user add constraint UQ_USER_USERNAME unique(username);

 非空約束:not null

 檢查性約束:(1)列後+check(age>0 and age<120)

             (2) alter table t_user add constraint CK_USER_SEX check(email like ‘%@%’);

三大範式:

(1) 確保每一個字段都具有原子性,不能再分割的。

(2) 確保表的每一個字段都依賴於主鍵(每張表只描述一個實體)

(3) 確保表中的每一個字段都不傳遞依賴於主鍵

關係型數據庫(主外鍵關係)

 一對一:1、在一對多的基礎上外鍵加惟一性約束

2、一張表的主鍵既是主鍵又是另外一張表的外鍵 

         3.在多對多的基礎上外鍵全部加惟一性約束(不會用)

 一對多:

多對一:在多的一端加外鍵

多對多: 一定要有中間表,並且大部分情況下使用聯合主鍵。 Primary key(cid,tid)

 

 先創建主表再創建從表。

 先插入主表的數據再插入從表的數據。

 先刪除從表的數據,再刪除主表的數據。

外鍵約束:

(1) create table t_student (id integer primary key,name varchar2(12),cid integer,foreign key(cid) references t_class(id))

(2) alter table t_student add constraint FK_STUDENT_CID foreign key(cid) reference t_class(id)

 

主鍵生成策略:

SQL SERVER : identify(自增長)

   Mysql :  increment  uuid(三十二位的字符串)

Oracle :  sequence(序列當成一張虛擬的表

    

Create  sequence

(需要有create sequenceacreate any sequence權限)

[increment by n]—每次加N

[start with n] ----n開始計數

[NOMAXVALUE]----不設置最大值

[NOCYCLE]----一直累加,不循環

[maxvalue 999999999] ----最大值

[minvalue 1]----最小值

[cycle]-----循環

[cache]-----緩存

     Create table t_user(id integer primary key,username varchar2(12));

 Create sequence t_user;

     Insert into t_user values(sq.nextVal,’admin’); 

視圖:一張虛擬的表,用來查詢(oracle中做成一張直實的表)

  Create view v_score as select ....

    Sqlserver  的視圖只能查不能改

    Oracle 的視圖默認允許修改,原始表數據跟着修改。

Oracle數據庫創建用戶

 1用超級管理員登入

 2 create user 用戶名 identified by 密碼

    改密碼  alter user用戶名 identified by 密碼

權限管理:

Grant 權限 to 用戶名

 類  用戶

     權限

角色:權限的集合

兩個通常用的角色:connect,resource

加鎖與解鎖:

Alter user 用戶名 account lock/unlock;

Oracle備份文件的導出與導入:

CMD中進入一個文件夾,輸入exp

    導入數據;imp

 Exp  wangke/8888@orcl file=d:/abc/beifen.dmp fully=y(所有文件)/tables=(t_user);

Mysql區別:

端口號:3306

   通過不同的database來管理表

text  大文本數據類型

分頁用limit:    limit 0,3;

                 索引     幾條記錄     索引從0開始

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