ORACLE簡單操作語句(增刪改查),和代碼例子
//創建用戶 :
create user c##名字 identified by 密碼 ;
//命名規則 :
1 名字必須以字母開頭,
2 長度不能超過30個字符(60字節),
3 不能使用oracle的保留字<
4 只能使用a-z,A-Z, 0-9,$,#,_,等...
//切換當前用戶 :
connect 用戶名/密碼@網絡服務器(orcl);
//oracle數據類型 :
number : 整型值 插入值的時候 直接 (22,33,4,45,...就行)
varchar2 : 字符型 插入值的時候 '必須用單引號括起來';
number :
number(5,2);//一共5位數字,其中有兩位是小數,范圍是(-10^38 ~ 10^38);
number(5);//就是規定有五位數字,沒有小數 默認是number(5,0);
char :
//查詢快,但是浪費空間
char:定長,2000字符(4000字節),字符串char(5);//可以設置5可 但是內容必須是 '內容',用單引號括起來
varchar2 :
varchar2:變長,4000字符(8000字節);
varchar2(20 byte);//規定能寫20個字符 但是只能是byte類型(字節型),但是內容必須是 '內容',用單引號括起來
clob :
clob(characterlarge object);//字符型大對象,最大4G
date :
date;//時間格式,values()賦值的時候,可以用這個更改格式 : to_date('20-2-81','DD-MON-RR');
blob :
blob://二進制數據電影,圖片,音樂,4G不會放到數據庫裡面,文件服務器
//創建表單 :
在當前用戶下創建表單
create table 表名字(id number(5,2), name varchar2(20 byte));//創建一個表單,裡面有兩列,第一列是id 是數值型 切共有5位數字,並有兩位是小數,三位是整數 ,第二列是name 字符型,能輸入20個字節,必須是字節
//更改表名字 :
rename 舊表名 to 新表名;
zeng :
//增 :
//創建用戶 :
create user c##名字 identified by 密碼 ;
//命名規則 :
1 名字必須以字母開頭,
2 長度不能超過30個字符(60字節),
3 不能使用oracle的保留字<
4 只能使用a-z,A-Z, 0-9,$,#,_,等...
//為用戶授權 : 權限
grant connect,resource,unlimited tablespace to c##名字 container=all;//所有權限
//grant 權限 to c##用戶名:
connect:鏈接(登陸) 權限
resource:數據/源 權限 (對數據的 增 刪 改 查 )
unlimited tablespace : 表空間 權限
// grant 權限 傳遞
grant 權限 to 用戶名 with grant option;//它也就有給別人權力的權力,但是權力不能超過他自己(本身)
//設置用戶使用的表空間 :
alter user 用戶名 default tablespace users;
alter user 用戶名 temporary tablespace temp;//臨時表空間
//創建表單 :
create table 表名(屬性 number(5,0)/*數據類型五位數,且沒有小數*/ , 屬性 varchar2(4 byte)/*數據類型,字符型,只能輸入4位,必須是字節格式*/)
//往表裡面添加行(內容) :
insert into 用戶名.表名(屬性1,屬性2.../*可選的*/)values(值,值...);
//往表單裡添加一個字段 : (添加一個列/屬性)
alter table 表名 add ("名字" number(3)/*類型,規定內容格式*/);
//多個插入 :
insert into 新表名(字段名) select 列 from 表名 where 行限定條件(不是所有數據,年齡段,某個部門)//
如 : insert into emp(id) select age from emp where id = 33;//把emp表中 id列值為33,對應的那些age的值,添加到emp表的id列中
//備份表 :
create table 表名 as select * from 表名;
//模擬中的數據復制 :
insert into 表1(屬性1,屬性2...) select * from 表2;//表1後面屬性個數是多少,表2就必須是多少,而且數據類型也必須完全相同 , 然後把表2裡面列的數據類型的值,添加到和表1中對應列的數據類型相同的那一列的後面(追加行 )
1 insert into emp (id/*我這個id是number(5)類型,並且只能寫5個數字*/) select * from emp2;//表2 裡面必須有一個number(5)類型的列,並且也只能寫5個數字
2 insert into emp (id/*我這個id是number類型*/) select hao from emp2;//hao這個列 必須和id列的數據類型完全相同,然後把hao那一列的數據,在id哪一列的後面,追加
shan :
//刪 :
//刪除用戶和表 :
//刪除用戶 只能用sys用戶才能刪除,因為只有sys用戶有刪除別的用戶的權利
drop user 用戶名 cascade;//用戶和表一起刪除
//刪除表 :
drop table 用戶名.表名;//刪除表
//刪除權限 :
revoke 操作名(權限) on 表名 from 用戶名;
//刪除一個表的字段 : (刪除一個列/屬性)
alter table 表名 drop column 列名; //強烈建議不要對成熟的系統這麼做
//刪除行 : 不定條數
delete from 表名 where 行限定條件;
限定條件 如 : name那一列為Kay的 全部刪除
delete from emp where name = 'Kay';
//刪除表的數據
truncate table 表名; //相當於刪除表和數據然後重建表.
gai :
//改 :
//更改表名字 :
rename 舊表名 to 新表名;
//切換當前用戶 :
connect 用戶名/密碼@網絡服務器(orcl);
//更改字段(列)的類型或者名字 :
alter table 表名 modify (屬性 類型);
如 : alter table student modify (sex number(1));
//更改列上的值 :
update 表名 set 列名=列值改變量(+-*/), 字段2,字段3, where 行限定條件;
如 : update 表名 set 列名='值' where id='B0002'(限定條件,id為B0002的 都會把前面指定的屬性的值更改);
1 update 表名 set (job,sal,comm/*列名*/)= (select job,sal,comm from/*查看三個列*/ emp where ename='clock'/*ename為'clock'*/) where ename ="scott"/*enamel為'Scott'的*/;//
1 --> update 表名 set (job,sal,comm)= (select job,sal,comm from emp where ename='clock') where ename ="scott";//先查ename為'clock'的(區分大小寫),獲取job,sal,comm,對應的值,再把這些值更改(賦值)到 ename為'scott' 對應的job,sal,comm的列值中
cha :
//查 :
//查看當前登陸用戶 :
show user;
//查看當前用戶下所有的表單 :
select * from user_tables;
//查看你能管理的所有用戶 :
select * from all_users;
//查看數據庫裡面的所有用戶 :
select * from dba_users;//前提是 你登陸的是sys或system號(用戶);
//查看數據庫裡面的所有表
select 表名 from dba_tables;//數據庫所有表,包括系統表,前提是 你登陸的是sys或system號(用戶);
//查看表頭 :
desc 表名;//查看表頭(也就是列)
where_and :
//篩選數據,多選, 查詢空值 (後面只能用null 這是一個語句)
select * from 表名 where 列(屬性) is not null;//不為空的
select * from 表名 where 列(屬性) is null;//為空的
//查看某列的屬性為空(不為空)的所有數據
where_and_or :
or : 或者 或
>,>=,<,<=,= : 大於,大於等於,小於,小於等於,等於;
select * from 表 where (列 >/*</>/=(大於或等於或小於)*/值 or 列 = 值) and 列 like 'j%';//
如 : select * from emp where (id>20 or age = 19)and name like 'j%';//查看emp表中 id列的值大於20或age列的值為19的 並且 name列的值以j開頭的所有的行的屬性
//指定查詢 :
select 列限定(就是列) from 表限定(就是表) where 行限定(就是一行中某一個屬性); //數據限定條件區分大小寫,java限定大小寫,select什麼就輸出什麼
1 select id,name from emp where job = 'CLERK';//查看 job(列)為'CLERK'的哪一行(或多行)的id值和name值
2 select * from 表 where 列(列限定/表頭) < 7800 and 列>2000;//(*就代表輸出所有列的屬性) 輸出 某表中 某列上的值小於7800 且 某列的值大於2000 的所有列的屬性
//查詢特定列 :
select 列1,列2,列3... from 表 where 行限定;(行限定 : 就是某一列上的值 )
如 :
select id,name from emp where sex = '男';//查看性別為'男'的 id和name屬性
distinct :
//單列查詢 : (去除重復)
select distinct 列限定 from 表名 where 行限定(z只能單行查詢)
like :
//匹配字符查詢 : (就是篩選)
% : 匹配多個字符 有兩個意思 1 可以匹配任意位字符
2 可以匹配每位上面的任意字符
_ : 匹配一個字符
1 select * from 表名 where 限定列 like ''%k%';//查看某個表中某個列的屬性值,包含k的所有的行的屬性
2 select * from 表名 where 限定列 like '__k%';//兩個下劃線(代表兩位) 查看某個表的某個列的值, 值的第三位是k的所有的行的屬性
in :
//枚舉查詢
select * from 表 where 列 in(值(1),值(2),值(3)...);//輸出某表中 某列的值為 1 或者 2 或者 3 的所有的行的屬性
select * from emp id in(22,42,66);//輸出emp表中 id 列的值為22或42或66的所有的行的屬性
in_and :
>,>=,<,<=,= : 大於,大於等於,小於,小於等於,等於;
select * from 表 where 列 in(值(1),值(2),值(3)) and 列 >/</=(大於或小於或等於) 值;
如 : select * from emp where id in(22,33,44) and age >19;//查看emp表中 id列的值為22或33或44 並且 age(年齡)列的值 大於19的 所有的行的屬性
//對查看到值進行運算 :
+*-/ : 運算查看的值(查是查 算是算 不是一回事,並不會改變表單裡面的值,只是更改了輸出方式)//但是 該列的數據類型必須是數字(number類型)
select 列+20 '年終獎' , name from 表名;
select 列+(加/減/乘/除)20(加減乘除對應的值) '年終獎'(給算好的結果(輸出時候的列)起個名字) ,name from 表名;
select sal+20 '年終獎' , name from emp;//查看emp表中的sal值和name值 ,並且把sal的值都加20 然後起個列名為年終獎
nvl :
//!!!!重點 : 如果 某列某行 有個空值 , 那麼運算結果肯定為空值
nvl(列,0) : 把某列上的空值 賦值為0
select 運算列1 + nvl(運算列2,0)*12 "年工資",列 from 表;
select sal(工資) + nvl(jiang(獎金列),0) '年工資' ,name from emp;//查看emp表中的sal列,和jiang列,和name列 , 並把sal列的值和jiang列的值相加(有的人獎金為空 , 就是沒有,然後通過nvl(),就把空值賦值為0),然後算出來的結果起名(輸出時候的列名)為 年工資 ,
order_by :
desc :
//給查到的數據,進行從大到小排序(是查到後,在排序,和表內容沒關系)
select * from 表名 order by 列 desc;//某列從大到小排序(只是輸出的時候排序而已)
asc :
//給查到的數據,進行從小到大排序(是查到後,在排序,和表內容沒關系)
select * from 表 order by 列 asc;//某表的某列輸出的時候從小到大排序(只是輸出的時候排序)
as : (起名)
select 列,列*12 + nvl(列*12,0) as sy, 列 from emp order by sy 排序(asc/desc);//查看某個表的某些列,並對某些列進行了算數操作,並給算的結果起個別名 叫 sy列 ,然後再給這個sy列進行排序 asc(從小到大)/desc(從大到小)
//子查詢 : 分頁
//幾個查詢運算,只能是number類型 ,返回值也都為int類型
max :
max();//獲取某一列的最大值 返回值為int類型
如 : max(id);//獲取id那一列的最大值
min :
min();//獲取某一列的最小值 返回值為int類型
如 : min(id);//獲取id那一列的最小值
avg :
avg();//獲取某一列的平均值 返回值為int類型
如 : avg(id);//獲取id那一列的平均值
sum :
sum();//獲取某一列的值的總和 返回值為int類型
如 : sum(id);//獲取id那一列的值的總和
count :
conut();//當前列下有多少個值 返回值為int類型
如 : conut(id);//獲取id那一列有幾個值
group_by :
//以單列為標准分組
group by ;//以某一列為標准,進行分組 分組標准必須是查詢條件中的列
select 操作(列),操作(列).... ,分組列 from 表 group by 分組列;//分組列就是以某個列為標准分組,去除這一列的重復數據(是把相同數據的行,分為一組)
select avg(sal),max(sal),deptno from emp group by deptno;
//以多列為標准分組
group by ;//以某幾個列為標准,進行分組 分組標准必須是查詢條件中的列
select 操作(列),操作(列).... ,分組列1,分組列2 from 表 group by 分組列1,分組列2;//以多列為標准進行分組,就是分組列1進行分組(把相同的數據分為一組,並且 每個組裡面不能有分組列2相同的數據 , 如 : id , name 每個id分組裡面,不能有相同的name)
select min(sal),avg(sal),max(sal),deptno,job from emp group by deptno,job;
having :
having ;//對統計結果進行過濾
select 操作(列),操作(列).... ,分組列 from 表 group by 分組列 having 操作(列) 比較符 值;//就是限定條件 但是是對結果集進行的限定查詢, 先分組,在從分組的基礎上,進行限定
select avg(sal),max(sal),deptno from emp emp group by deptno having avg(sal)>2000;(平均工資低於2000的部門號和平均工資)
//為用戶授權 : 權限
grant connect,resource,unlimited tablespace to c##名字 container=all;//所有權限
//grant 權限 to c##用戶名;
connect:鏈接(登陸) 權限
resource:數據/源 權限
unlimited tablespace : 表空間 權限
//設置用戶使用的表空間 :
alter user 用戶名 default tablespace users;
alter user 用戶名 temporary tablespace temp;//臨時表空間