•create user 用戶名 identified by 密碼 創建用戶
•drop user 用戶名 刪除用戶名 刪除用戶時如果已經創建表必須指定cascade
•grant connect to 用戶名 增加權限
•--增加注釋
comment on table t_student is '學員基本信息表';
comment on column t_student.sex is '性別';
comment on column t_student.birthday is '出生日期';
•/*修改表結構
1)、修改數據類型、非空約束、增加主鍵、默認值等等
2)、修改列的名字
*/
alter table t_student
modify name null;
•alter table t_student
modify sex varchar2(12);
•alter table t_student
modify sex default null;
•alter table t_student
modify sex varchar2(12) default null;
•alter table t_student
modify id number constraint pk_t_student_id primary key;
•alter table t_student
rename column sex to ssex;
•--修改表名
ALTER TABLE old_table_name RENAME TO new_table_name;
/*新增列*/
alter table t_student
add classid number not null;
•/*刪除列*/
alter table t_student
drop column classid;
•--刪除表結構
drop table t_student;
•Oracle分析函數的語法與作用:
rank ( ) over ( [query_partition_clause]order_by_clause )
dense_rank ( ) over ([query_partition_clause] order_by_clause )
rownumber ( ) over ( [query_partition_clause]order_by_clause )
可實現按指定的字段分組排序,對於相同分組字段的結果集進行排序,其中partition by 為分組字段,order by 指定排序字段
over不能單獨使用,要和分析函數:rank(),dense_rank(),row_number()等一起使用
•
select * from (
select deptno,sal,ename, dense_rank( ) over(order by sal desc) pm from emp)
where pm<=11查詢工資前11名人的信息(考慮第11和12人的工資相等的情況)
13、-----rank(),dense_rank()與row_number():求排序
rank()值相同時排名相同,其后排名跳躍不連續
RANK() OVER(PARTITION BY DEPTNO ORDER BY SAL DESC) RW
select * from (
select deptno,sal,ename, rank()over(order by sal desc) pm from emp)
where pm<=11
dense_rank()值相同時排名相同,其后排名連續不跳躍
DENSE_RANK() OVER(PARTITION BY DEPTNO ORDER BY SAL DESC) RW
select * from (
select deptno,sal,ename, dense_rank()over(order by sal desc) pm from emp)
where pm<=11
row_number()值相同時排名不相等,其后排名連續不跳躍
ROW_NUMBER() OVER(PARTITION BY DEPTNO ORDER BY SAL DESC) RW
select * from (
select deptno,sal,ename, row_number()over(order by sal desc) pm from emp)
where pm<=11
14、-lag()與lead():求之前或之后的第N行
lag和lead函數可以在一次查詢中取出同一字段的前n行的數據和后n行的值。這種操作可以使用對相同表的表連接來實現,不過使用lag和lead有更高的效率。
lag/lead(arg1,arg2,arg3)
第一個參數是列名,
第二個參數是偏移的offset,
第三個參數是超出記錄窗口時的默認值。
舉例如下:
SQL> select * from kkk;
ID NAME
---------- --------------------
1 1name
2 2name
3 3name
4 4name
5 5name
SQL> select id,name,lag(name,1,0) over(order by id) from kkk;
ID NAME LAG(NAME,1,0)OVER(ORDERBYID)
---------- -------------------- ----------------------------
1 1name 0
2 2name 1name
3 3name 2name
4 4name 3name
5 5name 4name
SQL> select id,name,lead(name,1,0) over(order by id) from kkk;
ID NAME LEAD(NAME,1,0)OVER(ORDERBYID)
---------- -------------------- -----------------------------
1 1name 2name
2 2name 3name
3 3name 4name
4 4name 5name
5 5name 0
SQL> select id,name,lead(name,2,0) over(order by id) from kkk;
ID NAME LEAD(NAME,2,0)OVER(ORDERBYID)
---------- -------------------- -----------------------------
1 1name 3name
2 2name 4name
3 3name 5name
4 4name 0
5 5name 0
SQL> select id,name,lead(name,1,'linjiqin') over(order by id) from kkk;
ID NAME LEAD(NAME,1,'ALSDFJLASDJFSAF')
---------- -------------------- ------------------------------
1 1name 2name
2 2name 3name
3 3name 4name
4 4name 5name
5 5name linjiqin
1、(神諭、甲骨文公司)提供的一款關系型數據庫管理系統 使用表格作為存儲數據的基本單元
2、在命令行取消設置折痕 set linesize 數字
3、在命令行設置每頁顯示數據長度 set pagesize 數字
4、命令行中的編輯操作
ed 文件名,回車,點擊是,
然后在記事本里輸入查詢語句比如:select * from emp
保存退出,最后在命令行輸入 @文件名
點擊回車,就會執行記事本里面的語句
5、查詢不在當前用戶下的表必須在表的前面加上用戶名,在數據庫中用戶名也叫模式名稱
6、連接操作:
切換用戶
connect 用戶名/密碼 as sysdba
查看當前用戶
show user
7、使用'||'可以連接查詢結果
select '編號是:' || empno || '的姓名是:'|| ename 員工信息 from emp
8、數據庫不在本機切換用戶的方式
coun /connect 用戶名/密碼 服務名 as sysdba
9、查看數據字典包含的字段
desc dba_users
10、查詢數據字典包含的用戶
select username from dba_users
11、由於數據庫用戶有些事預制的,所以狀態是鎖定的,查看oracle用戶的狀態:
select username,account_status from dba_users;
12、對於狀態是鎖定的用戶,啟用用戶的語句
alter user 用戶名 account unlock
13、管理員數據字典
dba_tablespaces, dba_users
14、普通用戶數據字典
user_tablespaces,user_users
15、設置默認或臨時的表空間
alter user 用戶名
default/temporary
tablespace 表空間名
16、創建表空間語法
create temporary | tablespace tablespace_name(表空間名) tempfile | datafile 數據文件名file.dbf size 大小
17、查看默認/臨時表空間
select default_tablespace,temporary _tablespace from dba_user where username='system'(管理員的)
select default_tablespace,temporary _tablespace from user_user where username='cotts'(普通用戶的)
18、default_tablespace默認表空間
temporary _tablespace臨時表空間
19、查詢表空間
select tablespace_name from dba_tablespaces
select tablespace_name from user_tablespaces(普通用戶)
20、創建永久表空間
create tablespace test1_tablespace datafile 'test1file.dbf' size 10M
21、創建臨時表空間
create temporary tablespace temptest1_tablespace tempfile 'tempfile.dbf' size 10M
22、查詢永久表空間包含的字段
desc dba_data_files
23、查詢臨時表空間包含的字段
desc dba_temp_files
24、設置聯機或脫機狀態
alter tablespace tablespace_name(表空間名) online /offline
25、查看表空間的狀態
select status from dba_tablespaces where tablespace_name='TEST1_TABLESPACE'
26、設置只讀或可讀寫的狀態
alter tablespace tablespace_name(表空間名) read only / read write read write默認
27、往表空間增加數據文件
create tablespace tablespace_name(表空間名) add datafile 數據文件名file.dbf size 大小
28、刪除表空間的數據文件
create tablespace tablespace_name(表空間名) drop datafile 數據文件名_file.dbf
29、刪除表空間 (保留數據)
drop tablespace tablespace_name(表空間名)
30、刪除表空間 (不保留數據)
drop tablespace tablespace_name(表空間名) including contents
31、查詢一個用戶下的所有表
select * from tab
32、windows調用本機操作系統的命令 host dir
33、復制一個文件 host copy 原文件名 新文件名
34、表空間
表空間是存儲數據庫對象的容器,表和表空間之間的關系就相當於文件和文件夾一樣,每次創建數據庫的時候,系統默認的創建一個system系統表空間一個數據庫可以有一個system表空間,也可以包含若干個
35、常用的字符類型 char、varchar、varchar2
Varchar2(n):oracle自行定義的類型,兼容性特別,在企業中一般都是用varchar2
char(n) 用於標識固定長度的字符串,n表示該字符串最大的保存字符個數。當實際保存數據小於n,在右邊使用空格補齊
Varchar(n):可變字符串,n表示該字符串中最大保存字符的個數,當實際保存數據的個數小於n的時候,則會按照實際長度進行保存
36、number:可以用來存儲整數和小數
Number(參數):表示最大參數位數的數字
Number(參數1,參數2):參數1代表有效數字的最大位數,參數2代表小數的位數, 整數的最大位數(參數1-參數2)。
37、SQL語句:結構化查詢語言,是專門為操作數據庫而建立所做的命令集,功能齊全的數據庫語言,通過SQL完成對數據庫的任何操作,每一種數據庫都不太一樣,都可以使用同一個Sql語句對數據庫進行基本操作,掌握SQL語言就可以操作任何的數據庫,學習的重點
38、DDL數據庫定義語句,用來創建,修改刪除表
create 、 drop 、 alter
DML數據操作語句,用來操作表的數據。插入。修改,刪除
insert、update、5 delete
DCL(TCL)事務控制語句,用來管理數據庫的事務
commit、 rollback
DQL數據查詢語句,用來查詢所需要的數據(重點)
Select
39、創建表的格式
create table 表名(
列名1 數據類型 primary key,
列名2 數據類型,
列名n 數據類型
);
40、查看表結構
desc 表名
41、修改格式
update 表名 set 列名1=該列新值,列名2=該列新值……
Where 條件;
注意;where前面沒有逗號
根據where條件修改表中的數據,沒有where條件,可以修改表中所有的數據
42、刪除語句
delete from 表名 where 條件
根據where條件刪除表中對應數據,沒有where條件刪除表中所有數據
43、向表中所有的列插入數據
insert into 表名 values(列值1,列值2…...)
插入的字符串類型必須單引號
44、查詢表中所有數據
select * from 表名
修改表名的方法:alter table old_table_name rename to new_table_name
45、向指定的列插入數據表名()中列名必須跟values中列值一一對應。沒有插入值默認為空
insert into 表名(列名1,列名2…..) values(列值1,列值2….)
插入的字符串必須單引號
46、truncate 刪除表中數據
truncate table 表名
直接刪除表中所有的數據。而且使用truncate刪除的數據,永遠都不能還原。但是刪除速度是最快
47、刪除表
drop table 表名
48、去掉重復的列值 distinct
select distinct id,name,sal from number3;去重3個字段 distinct必須放在開頭
49、查詢某些列的所有數據
select 列名1,列名2,列名3…………...from 表名
查詢指定行數的數據
SELECT <字段列表> from <table_name> WHERE ROWNUM<行數;
示例:
select * from emp where rownum<=10;--查詢前10行記錄
復制表
CREATE TABLE <table_name> as <SELECT 語句>
(需注意的是復制表不能復制表的約束);
示例:
create table test as select * from emp;
如果只復制表的結構不復制表的數據則:
create table test as select * from emp where 1=2;
50、刪除表中字段(批量刪除) alter table 表名 drop(字段1,字段2,..)也可以單個刪除
刪除表中的字段(單個刪除) alter table 表名 drop column 字段名
51、oracle下修改字段長度的語法
alter table 表名 modify 字段名 類型(長度);
52、修改字段名語法
alter table 表名 rename column 原字段名 to 新字段名
53、向表中添加新字段
alter table 表名 add (字段1 類型 [NOT NULL],字段2 類型 [NOT NULL],....)
54、給表起別名
在多表的連接查詢中,建議每一張都起一個別名,通過別名指向對應的表中的列,避免出現多個表之間列名一致
select 別名.列名1,別名2.列名2,別名3.列名3......
from 表名 別名
55、使用as給列起別名
select 列名1 as 別名1,列名2 as 別名2.....from 表名
56、使用空格給列起別名
select 列名1 別名1,列名2 別名2....
from 表名
57、排序
對查詢返回的結果,根據某一個列或者某幾個列進行升序或者降序
格式1:
select 列名/* from 表名
where 條件
order by 列名 desc/asc
格式2:
select 列名 /* from 表名
where 條件
order by 列名1 asc/desc,列名2 asc/desc
desc降序 asc升序、默認值
排序永遠是最后被執行的
58、可以使用別名進行排序
select 列名1 別名1,列名2 別名2 from 表名
where 條件
order by 別名 desc/asc
59、帶條件的查詢
select 列名/* from 表名
where條件
60、可以使用序號進行排序
select ename,empno,sal
from emp
order by 3 desc
用的是sal排序
61、關系運算符:>,>=,<,<=,=(等於),!=(不等於)或者<>(不等於)
判斷該列列值是否為null為null: is null 不為null: is not null
62、模糊查詢: like是,包含的意思
%:指代0個或多個字符
_:指代任意一個字符
not like 不包含,不是的 意思
63、nvl函數 專門處理空值的問題
64、使用‘+’連接數字和null返回的結果也為null
65、nvl(數字/列名,數值);如果該列的列值為null,返回數值;如果該列的列值不為null,則返回該列的列值 nvl(列名,0)
66、nvl2(數字/列,返回結果一 (不為null顯示),返回結果二(為null顯示))
67、nullif(表達式一,表達式二)
判斷表達式是否相等,如果相等返回null,不相等返回表達式一
68、select case 列/數值 then 表達式1 then 顯示結果1
then 表達式2 then 顯示結果2
…
else 表達式n
end 別名
from 表名
如果數值/列等於表達式1則顯示結果1 如果等於表達式2則顯示結果2,如果都不等於。則執行表達式n
69、select decode(列/表達式,值1,輸出結果1,值2,輸出結果2….默認值) 別名
from 表名
如果表達式/列的值等於值1,輸出結果1,如果等於值2,輸出結果2,如果兩者都不滿足輸出默認值 所有條件都要判斷否則顯示為null
70、select coalesce(表達式1,表達式 2,表達式3….表達式n)
coalesce主要對null進行操作,如果表達式1為null,顯示表達式2的內容,如果表達式2為null,顯示表達式3的內容,如果執行到最后還是null,那么最終結果就顯示null
71、邏輯運算符: and 與 ,or或 ,not非
72、between 初值 and 終值 求出初值到終值之間滿足條件的列值
73、where 列名 in(列值1,列值2,列值3...)
在什么范圍
74、where 列名 not in (列值1,列值2...)
不在什么范圍
75、any
where 列名 =any(列值1,列值2,列值3...)
與in相同(然而<>any不等價於not in
where 列名 >any(列值1,列值2,列值3...)
比子查詢結果中最小的要大(包含了>=any)
76、some和any用法相同
where 列名 <any(列值1,列值2,列值3...)
比子查詢結果中最大的要小(包含列<=any)
77、<>any返回的是表中的全部數據
<all比子查詢中最小的還要小(包含了<=all)
78、all
<>all等價於not in(但是=all並不等價於in)
>all比子查詢中值最大的還要大(還包含了>=all)
79、空數據判斷exists
SQL提供的判斷子查詢是否有數據返回,如果有數據返回,exists結構則返回true,否則返回false
select * from emp
where exists(select * from emp where empno=9999)沒有結果返回
select * from emp
where exists(select * from emp )
80、not exists
select * from emp
where not exists(select * from emp where empno=9999)
select * from emp
where not exists(select * from emp )沒有結果返回
81、聚合函數(分組函數)
count()數據總數 sum()求和 max() 最大值 min()最小值 avg()平均值
count(*/列名):*,求出該表中總的數據的條數; 列名,查詢該列不為null的列值的個數
sum(列名):求出該列所有列值的累加之和
max(列名);求出該列的最大值
min(列名):求出該列的最小值
avg(列名):求出該列的平均值
median(列):求出中間值
variance(列):返回方差
stddev(列):返回標准差
82、多字段分組
格式:
select 分組字段1,分組字段2,列名/聚合函數 from 表名
where 條件
group by 分組字段1,分組字段2...
order by 列名/聚合函數/別名 asc/desc
select d.dname,d.loc,d.deptno, nvl(count(e.empno),0),nvl(max(e.sal),0) 最高工資,nvl(min(e.sal),0) 最低工資,nvl(round(avg(e.sal),2),0) 平均工資
from emp e,dept d
where d.deptno=e.deptno(+)
group by d.dname,d.loc,d.deptno
83、字符處理函數
lower(字符串/列名);把字符串/列值中所有的大寫字母改成小寫字母
dual:虛擬表,專門用來進行測試的表
upper(列名/字符串):把列值/字符串中所有的小寫字母改成大寫字母
length(列名/字符串):統計當前列值/字符串中字符的個數
select ename,job,lower(ename),lower(job) from emp
select upper('ximenchunxue') from dual
select ename,length(ename) from emp
84、給出一個整數並返回與之對應的字符串 CHR(數字)
返回與指定字符對應的十進制數字 ASCII('字符')
首字母大寫函數 INITCAP(列/字符串)
85、在左或右填充指定長度的字符串
LPAD('列/字符串',總長度,'填充字符')
RPAD('列/字符串',總長度,'填充字符')
還可以組合使用
86、查找函數
instr(列/字符串,查找的字符串,開始位置,出現位置)
87、替換函數
replace(列名/字符串,指定字符,新的字符串)
select replace('ename','e','-') from dual
88、substr(參數1,參數2,參數3):截取字符串
參數1:列名/字符串,指定要截取的列或者字符串
參數2;如果為正數表示從正數的標號開始截取,起始是1,比如參數2(5),從第五個字母開始截取。反之如果為負數表示從倒數第幾個字符開始截取,比如參數2(-3),表示從倒數第三個字符開始截取。
參數3:表示要截取字符的個數
沒有參數3表示截取所有
89、求出emp表中ename的最后3個字符(兩種方法)
第一種方法
select substr('ename',-3,3) from emp
第二種方法
select substr('ename',length('ename')-2,3) from emp
90、TRIM(列名/字符串):刪除列刪除列值/字符串兩端的空格
select trim(' liu ying ') from emp
91、去掉左或右的空格
LTRIM('字符串')
RTRIM('字符串')
92、連接(串聯)字符串:
使用|| 連接多個字符串
93、concat(字符串1,字符串2):
串聯字符串
94、to_char();把其他類型的數據轉換為字符類型
95、數值處理函數
sqrt(數值);求出平方根
mod(參數1,參數2):求出余數
floor(數值);向下取整截斷 (變小)
ceil(數值):向上取整 (變大)
power(底數,指數):求出乘方
abs(數值):求出絕對值
round(數值,位數):四舍五入函數
如果位數為正數,保留幾位小數,如果位數為0,則只保留正數,如果位數為負數,則表示小數點前第幾位進行四舍五入。如果不指定位數則從小數點后面四舍五入
sign(數值):標記性函數,如果數值是正數,返回值是1,如果數值是0,返回值是0,如果數值是負數,返回值是-1
96、trunc:截取函數
trunc(數值,參數):如果參數為正數,表示保留幾位小數,如果參數為0,表示舍棄所有的小數,如果參數為負數,表示對小數點前第幾位舍棄。如果不指定參數,表示從小數點后面全部舍棄。
97、 having 子句
跟group by 結合使用,對分組以后的數據進行再次過濾
格式1:
select 列名/聚合函數 from 表名
where 條件 ;對表中所有數據進行過濾
group by 列名
having 子句;對分組后的數據進行過濾
order by 列名/別名/聚合函數 asc /desc
98、也可以和多字段分組結合
格式2:
select 字段1,字段2...,列名/聚合函數 from 表名
where 條件 ;對表中所有數據進行過濾
group by 字段1,字段2...
having 子句;對分組后的數據進行過濾
order by 列名/別名/聚合函數 asc /desc
列出至少有一個員工的部門編號,名稱,並統計這些部門的平均工資,最高工資,最低工資
select d.dname,d.deptno,round(avg(e.sal),2), max(e.sal),min(e.sal)
from dept d ,emp e
where d.deptno=e.deptno(+)
group by d.dname,d.deptno
having count(e.empno)>1
分析:首先執行where條件,對表中所有的數據進行過濾,然后執行group by,根據某一組對余下的數據進行分組,之后使用having子句對分組后的數據再次進行過濾。最后使用order by 進行排序
having子句中經常跟聚合函數結合使用
99、案例:顯示非銷售人員的工作名稱以及從事同一工作的員工的月工資總和,並且要滿足從事同一工作的員工的月工資總和大於5000,輸出結果按月工資總和升序排列
select distinst job ,sum(sal) 月工資總和 from emp
where job<>'clerk'
group by job
having sum(sal)>5000
order by 月工資總和
100、from子句中子查詢
要求查出每個部門編號,名稱,地址,部門人數,平均工資
select d.deptno,d.dname,temp.count,temp.avg
from dept d,(select deptno dno,count(sal) count,round(avg(sal),2) avg
from emp
group by deptno) temp
where d.deptno=temp.dno(+)
思想:把聚合函數和列值分開查詢先查詢聚合函數,對查詢的結果起別名,最后查詢列值,temp表可以看成一個臨時表,temp是臨時表的別名
案例、查詢出所有在銷售部門sales的員工的編號,姓名,職位,獎金,基本工資,入職日期,部門最高工資,部門最低工資
select e.empno,e.ename,e.sal,e.comm,e.job,e.hiredate,
temp.max,temp.min
from emp e,(select deptno dno,max(sal) max,min(sal) min from emp group by deptno) temp
where e.deptno=(select deptno from dept where dname ='SALES')
and e.deptno=temp.dno
思想:把聚合函數和列值分開查詢先查詢聚合函數,對查詢的結果起別名,最后查詢列值,temp表可以看成一個臨時表,temp是臨時表的別名
案例、查詢出所有薪資高於公司平均薪資的員工編號,姓名,職位,入職日期,所在部門名稱,地址,、上級領導姓名公司的工資等級,部門人數,平均工資,平均服務年限
select e.empno,e.ename,e.hiredate,d.dname,d.loc,m.ename,s.grade,temp.count,temp.avg,temp.avgyear
from emp e,dept d,salgrade s,emp m,(select deptno dno ,count(empno) count, round(avg(sal),2) avg,
round(avg(months_between(sysdate,hiredate)/12),2) avgyear from emp group by deptno) temp
where e.sal > (select avg(sal) from emp)
and e.deptno=d.deptno and e.sal between s.losal and s.hisal
and e.deptno=temp.dno and e.mgr=m.empno(+)
101、select子句查詢和from子句查詢:
from子句是把聚合函數放到from中
select 子句是把聚合函數放到select語句里面
102、with子句
使用with子句將emp表中的數據定義為臨時表
with e as(select * from emp) select * from e;
103、查詢中每個部門的編號,名稱,地址,人數,平均工資
with e as(select deptno dno,count(empno) count, round(avg(sal),2) avg
from emp
group by deptno)
select d.deptno,d.dname,d.loc,e.count,e.avg
from e,dept d
where d.deptno=e.dno(+)
104、每個部門工資最高的員工編號,姓名,職位,入職日期,工資,部門編號,部門名稱,按照部門編號升序
with x as(select deptno dno,max(sal) max from emp group by deptno)
select e.empno,e.ename,e.job,e.hiredate,e.sal,d.dname,d.deptno
from x,emp e,dept d
where e.deptno=x.dno
and x.max=e.sal
and d.deptno=x.dno
order by d.deptno
105、約束
設計表的時候,提前添加一些限制(條件),只有滿足這些條件的數據可以插入到表中,這些限制(條件)就是約束,只能滿足這些約束的數據可以真正保存到表中
1.主鍵約束
2.唯一約束
3.檢查約束
4.默認值約束
5.外鍵約束
6.非空約束
106、主鍵約束
被主鍵約束修飾的列,該列的列值必須非空而且唯一,通過主鍵約束來避免表的數據出現冗余(重復的數據)
1.一個表中只能有一個主鍵(約束)
2.使用主鍵修飾一個列或者多個列的組合值,修飾多個列的組合值,稱為聯合主鍵或者復合主鍵
106、創建表的時候指定主鍵名字
create table worker2(
id number(4) constraint pk_w2_id primary key,
name varchar2(50)
)
107、創建表的時候設置聯合主鍵
create table worker3(
id number(4),
name varchar2(50),
age number(3),
address varchar2(50),
constraint pk_w3_id_name
primary key(id,name)
)
108、修改表的時候設置主鍵約束
alter table 表名
add constraint 約束名
primary key(列名1,列名2...)
109、刪除主鍵
只能用來刪除主鍵
格式:
alter table 表名 drop primary key
可以刪除大部分約束
格式:
alter table 表名 drop constraint 約束名
110、唯一約束
用來指定一個列或者多個列的組合值具有唯一性,防止在該列中輸入重復的列值,一張表中可以有多個唯一約束
1.使用唯一約束修飾的列,該列的列值可以為空值
2.不能使用唯一約束修飾主鍵所在的列。
111、修改表的時候設置唯一約束
格式:
alter table 表名
add constraint 約束名
unique(列名1,列名2,列名3...)
112、主鍵約束和唯一約束的區別
1.一張表中只有一個主鍵約束,但是可以有多個唯一約束
2.主鍵約束修飾的列,該列的列值必須不能為null,而被唯一約束修飾的列,該列列值可以為null
113、刪除唯一約束
alter table 表名
drop constraint 約束名
114、檢查約束
用於限定某列的值必須要滿足什么條件,只有滿足特定條件的數據才可以插入進去,避免用戶輸入一些非法的數據
1、創建表的時候設置檢查約束
create table worker10(
id number(4) primary key,
name varchar2(50) unique,
sex char(2) check(sex in('男','女')),
age number(3),
email varchar2(50)
)
2、修改表的時候指定檢查約束
格式:
alter table 表名
add constraint 約束名 check(約束名)
115、刪除檢查約束
格式:
alter table 表名
drop constraint 約束名
116、默認值約束
系統默認為列設置的數值,如果在執行insert語句中,該列沒有插入列值,使用默認值作為該列的列值,而且每一個列只能設置一個默認值。
117、創建表時候設置默認值約束
create table worker14(
id number(4) primary key,
name varchar2(50),
age number(3) default 20,
salary number(7,2) default 5000
)
118、修改表時候設置默認值
alter table 表名
modify 列名 數據類型
default 默認值
119、刪除默認值:
--使用modify 把默認值設置為null
alter table 表名
modify 列名 數據類型
default null
120、非空約束
該列的列值不能為空(null)
121、創建表的時候設置非空約束
create table worker15(
id number(4) primary key,
name varchar2(50) not null unique,
age number(3),
address varchar2(50)
)
122、修改表的時候設置非空約束
使用modify,可以設置多個列的非空約束
alter table 表名
modify(列名1 not null)
modify(列名2 not null)
....
modify(列名n not null)
123、刪除非空約束
使用modify,可以刪除多個列的非空約束
alter table 表名
modify(列名1 null)
modify(列名2 null)
……
modify(列名n null)
124、外鍵約束
用於維護兩張表之間的關聯關系,被外鍵約束所修飾的列該列的列值必須跟與之關聯另外一張表中,主鍵所在的列的列值對應
子表:外鍵所在的表,稱為子表
父表/主表:沒有外鍵的表,稱為父表。
當執行插入操作的時候,要先往主表中插入數據,然后在往子表中插入數據
外鍵的作用就是維護兩張表之間的關聯的關系,外鍵所修飾的列值,必須參照與之關聯的主表中主鍵所在的列的列值
125、序列
序列是oracle中的一個數據庫對象,通過序列可以生成自動增長的數字,經常使用序列生成的數字作為主鍵所在列的列值
創建序列的格式
create sequence 序列名
126、nextval:第一次使用nextval返回是默認值(如果不設置默認值,默認情況返回是1),之后每次調用nextval都生成一個自增的數字
select id_seq1.nextval from dual
currval:獲得序列當前的值
select id_seq3.currval from dual
127、序列的初始值
start with 初值
第一次使用nextval的時候,返回的就是初值
增長的步長(每次使用nextval,生成數據的增量,默認步長是1 increment by 增量
序列最大值 : maxvalue 最大值
序列最小值: minvalue 最小值
create sequence id_seq4
start with 100
increment by 10
minvalue 1
maxvalue 100000000
128、索引
索引是建立在表中列上的數據庫對象,用於提高數據查詢的速度,而且索引一旦被創建以后就會被oracle系統指定進行維護,在查詢語句中不需要指定使用的是哪一個索引
create table worker12(
id number(4) primary key,
name varchar2(50) unique
)
1)一種提高查詢效率的機制,提高索引可以最大化提高查詢的速度
2)主鍵所修飾的列,系統會默認添加一個索引。
3)使用唯一約束修飾的列,系統會默認添加一個索引
129、索引的創建
格式
create index 索引名名稱
on 表名(列名)
刪除索引
drop index索引名稱
130、索引的優點和缺點
優點:提高查詢速度
缺點:
1.索引會占用磁盤空間
2.索引會提高查詢數據的速度,但是減緩了對數據的修改(insert ,update,delete)速度
131、事物
把對表的一系列操作封裝到一個事務中,要么一起成功,要么一起失敗
commit:提交事物,執行commit把之前對表中所有的操作,真實發生修改,在數據庫底層真正修改數據。
rollback:回退(回滾)之前所有未提交(commit)的操作。撤銷之前沒有提交修改的操作(insert。update,delete)
132、關聯查詢
所需要查詢的數據來源於多張表,通過關聯查詢,在同一條SQL語句查詢多張表的信息
格式
select 別名1.*/列名,別名2.*/列名...
from 表1 別名1,表2 別名2
where 關聯條件
笛卡爾積:在關聯查詢中,如果沒有加入關聯條件,兩張表中數據會進行任意的組合,這種現象稱為笛卡爾積。笛卡爾積是數學中的一個概念在關聯查詢中,必須要避免出現笛卡爾積。
關聯條件:必須先查看兩張表之間的關聯關系,然后在編寫關聯條件
133、內連接;只查詢兩張表中有關系的數據,不查詢沒有關聯關系的數據。之前寫的所有的關聯查詢都屬於內連接
1.等值連接:關聯條件中是以=進行連接,稱為等值連接。
2.非等值連接:關聯條件不是以=連接,稱為非等值連接
自連接:把一張表看成兩張表,自己跟自己進行連接
另外一種內連接(很少見)
格式
select 別名1.*/列名,別名2.*/列名
from 表名1 別名1 inner join 表名2 別名2
on 關聯條件
where 條件
134、使用Oracle的專用語法實現外連接
外連接:既要查詢兩張表中有關聯關系的數據,還要查詢沒有關聯關系的數據。
在Oracle中可以在關聯條件中加入(+)來實現外連接操作
oracle外連接專用語法只能應用oracle數據庫,不能應用於其它的數據庫
oracle外連接是在對方的關聯條件后面加上(+)
135、標准SQL外連接查詢(重點):使用標准SQL語句 實現外連接查詢操作,可以匹配任意的數據庫
左外連接查詢:以左表為主,查詢左表中所有的數據,以及與之關聯的右表中的數據
格式:
select 別名1.*/列名,別名2.*/列名
from 左表 別名1 left(outer)join 右表 別名2
on 關聯條件
where 條件
右外連接查詢:以右表為主,查詢右表中所有的數據,以及與之有關聯的左表中的數據
格式:
select 別名1.*/列名,別名2.*/別名
from 左表 別名1 right(outer) join 右表 別名2
on 關聯條件
where 條件
全外連接:連接與之關聯的所有表中所有的數據
格式:
select 別名1.*/列名,別名2.*/列名
from 表1 別名1 full (outer) join 表2 別名2
on 關聯條件
where 條件
136、交叉連接cross join
格式:
select 別名1.*/列名,別名2.*/列名
from 表1 別名1 cross join 表2 別名2
where 條件
交叉連接作用於兩個關系上,並且第一個關系的每個元組與第二個關系的所有元組進行連接這樣的操作形式與笛卡爾積是完全相同的
137、自然連接 natural join
運算作用於兩個關系最終會通過兩個關系產生一個關系作為結果,自然連接只考慮那些在兩個關系模式中都出現的屬性上取值相同的元組對
格式:
select 別名1.*/列名,別名2.*/列名
from 表1 別名1 natural join 表2 別名2
where 條件
select * from emp natural join dept
自然連接自動匹配關聯數據消除笛卡爾積是內連接的方式
138、Using子句
格式:
select 別名1.*/列名,別名2.*/列名
from 表1 別名1 join 表2 Using(關聯列名稱)
where 條件
select * from emp join dept using(deptno)
using不使用關聯字段也可以消除笛卡爾積
139、on子句
在SQL:1999語法中由用戶手工設置關聯條件
格式:
select 別名1.*/列名,別名2.*/列名
from 表1 別名1 join 表2 on(關聯條件)
where 條件
select * from emp e join salgrade s on(e.sal between s.losal and s.hisal)
140、日期函數
主要用於處理date類型的數據
常見的日期格式
年月日;yyy-mm-dd
(y:年份 m:月份 d:幾號)
年月日時分秒;yyy-mm-dd hh24:mi:ss
hh24: 24小時制,小時
mi: 分鍾
s: 秒鍾
系統默認的日期格式
dd-mon月-yy
eg:11-11月-11 2011-11-11
sysdate:指代當前的系統時間
select sysdate from dual
修改日期時間格式
先輸入alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss'
然后輸入select sysdate from dual;
141、to_char()函數:把date類型的數據轉換為char類型數據進行顯示
to_char(date數據,'日期格式')
select sysdate,to_char(sysdate,'yyyy-mm-dd hh24:mm:ss') from dual
142、
to_char()函數中主要轉變數字:
9 顯示 一位數字
, 顯示 千位符
. 顯示 小數點
0 顯示 前導0
L 根據語言環境,自動選擇貨幣
$ 顯示 美元符號
select to_char(9568436.635,'000,000,000,000.000000') from dual
select to_char(9568436.635,'L999,999,999.999') 顯示貨幣,
to_char(9568436.635,'$999,999,999.999') 顯示美元
from dual;
143、months_between(d1,d2):兩個日期d1和d2之間間隔了多少個月
select empno,enmae,job,sal,hiredate,
months_between(sysdate,hiredate)
from emp
add_moths(d1,數字):d1之后數字個月
案例3個月后的今天
select sysdate,add_months(sysdate,3) from dual
數字為負數表示之前
144、下一個指定日期
next_day(日期,星期數)
求出指定日期當月的最后一天
last_day(日期)
145、時間日期分割,或計算給定兩個日期的間隔
extract(格式from數據)
select
extract(year from systimestamp)years ,
extract(month from systimestamp)months ,
extract(day from systimestamp)days,
extract(hour from systimestamp)hours ,
extract(minute from systimestamp)minutes,
extract(second from systimestamp)seconds
from dual;
146、將字符串轉變為時間戳 to__timestamp()
select to_timestamp('2015-12-10 12:25:30','yyyy-mm-dd hh24:mi:ss')
from dual
147、將制定數據類型轉變為數字型 to_number(列/字符串)
select to_number('10')*to_number('21')
from dual;
148、to_date()函數:把char類型數據轉換為date類型的數據,經常用於跟insert語句結合使用
to_date('日期格式字符串','日期格式')
149、使用默認的日期格式插入數據
insert into emp(empno,ename,hiredate) values(6911,'孫權','21-12月-16')
150、視圖
1)視圖是一張虛擬表,通過視圖查看一張或者多張表中的數據。
2) 視圖中不存儲任何物理數據,視圖是查看數據的窗口。所以刪除一個視圖,對表中的數據沒有任何影響。
3) 視圖中的數據都是來源於表,是在視圖被使用的動態生成的。
通過視圖可以集中,簡化,定義數據的顯示,用戶可以通過視圖來訪問表中的數據,而不需要直接查詢表。
151、創建視圖的格式
create view 視圖名as 查詢語句
案例:查詢emp表中所有的數據,查詢結果作為視圖emp_view1
create view emp_view1 as select * from emp
152、修改視圖的格式
create or replace view 視圖名稱 as 查詢語句
例:查詢emp表中工資高於1000所有員工的編號,姓名,職位,工資,查詢結果修改視圖emp_view1
create or replace view emp_view1 as select empno,ename,job,sal from emp
where sal > 1000
153、通過視圖修改(insert ,update,delete)表中數據
create view dept_view3 as select * from dept
154、通過視圖插入語句
insert into dept_view3 values(70,'財務','杭州')
155、通過視圖修改語句
update dept_view3 set loc = '蘇州'
where dname = '測試'
通過視圖刪除語句
delete from dept_view3
where deptno in(50,60,70)
156、只讀視圖:只能通過該類視圖查看表中的數據,不能通過視圖修改表中的數據
格式:
create view 視圖名稱 as
查詢語句
with read only
157、刪除視圖
格式:drop view 視圖名稱
drop view emp_view1
158、根據舊表創建新表
create table 新表 as select * from 舊表
159、oracle數據庫默認端口號:1521
MySQL默認端口號:3306
SQL Server默認端口號:1433
Https默認 端口:443
HTTP默認端口:80
FTP默認端口:21
SOCKS代理協議服務器常用端口號:1080
Telnet(遠程登錄)協議代理服務器常用端口:23
TOMCAT默認的端口號:8080
ORACLE EMCTL默認的端口號:1158
MS SQL*SERVER數據庫monitor:1434
QQ默認的端口號:1080
Oracle XDB FTP服務,默認的端口號:2100
Oracle XDB( XML 數據庫),默認的端口號:8080
WebLogic,默認的端口號:7001
Webshpere應用程序,默認的端口號:9080
JBOSS,默認的端口號:8080
webshpere管理工具,默認的端口號:9090
DB2 默認端口號為:5000
PostgreSQL默認端口號為:5432
200 - 請求成功
301 - 資源(網頁等)被永久轉移到其它URL
404 - 請求的資源(網頁等)不存在
500 - 內部服務器錯誤
select e.empno 員工編號,e.ename 員工姓名,
to_char(e.hiredate,'yyyy-mm-dd') 入職日期,e.job 工作,m.ename 領導姓名,
e.sal 月工資,(e.sal+ nvl(e.comm,0))*12 年薪,s.grade 工資等級,d.deptno 部門編號,
d.loc 地址,d.dname 部門名稱
from emp e,dept d,salgrade s,emp m
where d.deptno=e.deptno and e.mgr=m.empno
and e.sal between s.losal and s.hisal and
e.sal between 1500 and 3500
and to_char(e.hiredate,'yyyy')= '1981'
order by 年薪 desc, 工作 desc
160、集合運算
集合運算時一種二目運算符,包括交,差,並,笛卡爾積
union all(並集)
返回若干個查詢結果全部內容,重復的元組也會顯示
select * from dept
union all
select * from dept where deptno=10;
結果為5條數據(有1條重復)
union(並集)
返回若干個查詢結果全部內容,重復的元組不會顯示
select * from dept
union
select * from dept where deptno=10;
結果4條數據
intersect(交集)
返回若干個查詢結果相同中的部分
select * from dept
intersect
select * from dept where deptno=10;
結果為1條數據
minus(差集)
返回若干個查詢結果中不同的部分
select * from dept
minus
select * from dept where deptno=10
結果為3條數據
161、分析函數
函數名稱([參數])over(
partition by 子句 字段,..
Order by 子句 字段,…[asc | desc] [nulls first | nulls last]
windowing子句);
函數名稱: 類似於count(),sun()等
over子句: 為分析函數指明一個查詢結果集,此語句 在select中使用
partition by 子句: 將一個簡單的結果分為N組(或者分區),而后按照不同的組對數據進行統計
order by子句: 明確指明數據在每個組中的排列順序,分析函數的結果與順序無關
nulls first | nulls last: 表示返回數據行中包含null值出現在排列序列的前還是尾
windowing子句(代名詞): 給出在定義變化固定的數據窗口方法,分析函數將對此數據進行操作
1、desc v$controlfile
查看控制文件
select file#,status,name from v$controlfile;
查看控制文件狀態路徑
2、desc v$datafile
查看數據文件
select file#,status,name from v$datafile;
查看數據文件狀態路徑
3、desc v$logfile
查看日志文件
select member from v$logfile;
查看日志文件狀態路徑
4、設置命令行不輸出字符不退出
set sqlblanklines on
5、select * from emp where empno=#定義變量輸出
6、list(簡寫l)查看緩沖區的命令,然后輸出對應的行號會執行對應的語句
7、change(簡寫C) C/n/m 表示用m替換n /執行緩沖區的文
8、刪除緩沖區的文件 del 2刪除第二行 del 5 8第五行到第八行
9、追加緩沖區文件 a 語句
10、save 地址 保存語句
11、獲取文件的內容 get 地址
12、引用記事本編輯緩沖取 edit
13、col 字段 heading "編號" 對字段設置標簽
14、intersect返回共有的字段值
select * from emp
insersect
select * from dept
15、insert into emp(id,name) select id,name from d;
把查到的數據插入到emp表中
16、col dname format a10 格式化輸出