1. 程式人生 > >oracle基礎知識2

oracle基礎知識2

需要 數字 insert add llb 修改表 into 分享圖片 記錄

什麽是連接:

使用連接可以從多個表中查詢數據。

Select table1.column,table2.column from table1, table2 where table1.column=table2.column

在where子句中寫連接的條件,是因為在多個表中有相同的列名

笛卡爾:若一個表有5行記錄,另一個表有6行記錄,則用笛卡爾計算:一共有5*6=30行記錄。

連接的類型:等值連接,不等連接,自連接,外連接。

如果兩個表中有相同的列可以使用等值連接把兩個表連在一起

技術分享圖片

使用等值連接的例子:select emp.ename,emp.empno,dept.deptno,dept.loc from emp,dept where emp.deptno=dept.deptno

使用表名是為了指定列在哪個表,同時也可以區分不同表的同一列名,一般情況下,我們可以使用表的別名來簡化查詢,如:select e.ename, e.empno, d.deptno, d.loc from emp e, dept d where e.deptno=d.deptno

非等值連接

如:select e.ename, e.sal, s.grade from emp e,salgrade s where e.sal between s.losal and s.hisal;

表的自連接:可以把一張表如emp表分成一個worker表和一個manager表,所以worker表中的mgr等於manager表中的empno。

如:select worker.ename, worker.mgr, ‘workers for’,manager.empno,manager.ename from worker,manmger where worker.mgr=manager.empno;

表的外連接:

外連接的運算符是(+)

外連接分為左連接和右連接

如:select table1.column, table2.column from table1, table2 where table1column(+)=table2.column

select table1.column, table2.column from table1, table2 where table1column=table2.column(+)

左連接是把加號放在等號的右邊,輸出的結果是由左邊的和右邊符合條件的共同組成

例子:select e.ename,d.depno,d.dname from emp e,dept d where e.deptno(+)=d.deptno

組函數:也叫做分組函數:分組函數就是運算一組記錄,每一組返回一個值(結果)。

包括:group by(將數據進行分組) 和having(包括或者排除被分組的記錄),除此之外還有avg,max,min,sum,count,方差,標準差等

數字類型的數據使用avg,sum函數,而min和max可以適用於任何類型的數據

如:Select avg(sal),max(sal),min(sal) from emp where job like ‘SALES%’;

Select min (hiredate),max(hiredate) from emp;

Group by 後面可以跟多個列,如:group by deptno,job

Having 後面跟的是分組函數,where不能跟分組函數

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

嵌套組函數:如:select max(avg(sal)) from emp group by deptno

子查詢的規則:子查詢要用括號括起來,子查詢放在比較運算符的右邊,子查詢中不要出現order by子句,對於多行子查詢要用多行運算符,單行子查詢用單行運算符,單行運算符:=,>,<,>=,<=, 多行子查詢的運算符:in,any,all

技術分享圖片

以上的子查詢是錯誤的是因為子查詢中會出現多個值,應該使用多行運算符,而等於號是單行運算符,所以以上的句子是錯誤的。

多行子查詢中用的any與all的區別:<any,意思是小於最大值,>any是大於最小值

>all意思是大於最大值,<all是小於最小值。

Insert 語句的用法: insert into table (column,column,…) values(…..,….,….)

如:insert into dept (deptno,dname,loc) values(50,’sjuhduie’,’chain’);

Update語句 用法:update table set column=values where 條件

如:update emp set deptno=20 where empno=7782;

技術分享圖片

所有的記錄被修改之後,只有commit之後才是真正的被修改成功了,rollback:相當於撤銷,回到上一步執行的命令,而savepoint:是能回歸到原先設定的位置。

數據庫的對象:table ,view,sequence:序列,index:索引,synonym:同義詞。

創建表:

create table 表名 as select * from 表名1,... ---復制和表名1一樣的表,包括數據

create table 表名 as select * from 表名1,... where 1=2 ---復制和表名1一樣的表,但沒有數據

create table 表名 as select 字段1,字段2... from 表名1,... ---復制表名1表中指定的字段,包括數據

create table 表名(新字段名1,新字段名2...) as select 字段1,字段2... from 表名1,... ---復制表名1表中指定的字段,包括數據,並且改變列名

創建一個新表 creat table 表名(column datatype),datatype是數據類型,可以都用varchar2(size)

其他用戶的表不能直接訪問,所以在使用其他用戶的表時需要加上用戶名作為前綴。如:select * from scott.emp;

建表:如果自己重新創建一個名為dept的表,則如下:

select table dept (deptno number(2),

dname varchar2(14),

loc varchar2(12))

確認創建的表:describe dept

查詢用戶有哪些表:select * from user_tables;查詢用戶有哪些類型的對象:select distinct object_type from user_objects;

常見的數據類型:VARCHAR2(size),CHAR(size),NUMBER,DATE LONG等

使用子查詢創建表:create table 表名 【column,column,..】as 子查詢,如:

修改表結構

1.增加字段

alter table 表名 add 字段名 數據類型 [default 默認值]

2.修改字段(數據類型以及默認值)

alter table 表名 modify 字段名 數據類型 [default 默認值]

3.修改字段名

alter table 表名 rename column 舊列名 to 新列名

4.刪除字段

alter table 表名 drop column 列名

修改表名

rename 舊表名 to 新表名

刪除表

drop table 表名

在表中加註釋:comment on table 表名 is ‘註釋‘’;例如:comment table emp is ‘empioyyee information’;

oracle基礎知識2