標籤:sequence like 分組函數 worker 分組 最大值 info 表名 查詢
什麼是串連:
使用串連可以從多個表中查詢資料。
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