Oracle數據庫操作基本語法


 

創建表

SQL>create table classes(

       classId number(2),

       cname varchar2(40)

       birthday date

       );

添加一個字段

SQL>alter table student     add (classId number(2));

 

修改字段長度

SQL>alter table student modify(xm varchar2(30));

 

修改字段的類型/或是名字(不能有數據)

SQL>alter table student modify(xm char(30));

 

刪除一個字段

SQL>alter table student drop column sal;

 

修改表的名字

SQL>rename student to stu;

 

刪除表

SQL>drop table student;

 

插入所有字段數據

SQL>insert into student values (‘001’,’salina’,’女’,’01-5月-05’,10)

 

修改日期輸入格式

SQL>alter session set nls_date_format = ‘yyyy-mm-dd’;       //臨時生效,重啟后不起錯用

SQL>insert into student values (‘001’,’salina’,’女’,to_date(’01-5 -05’,’yyyy-mm-dd’),10)

SQL>insert into student values (‘001’,’salina’,’女’,to_date(’01/5 -05’,’yyyy/mm/dd’),10)

 

 

 

插入部分字段

SQL>insert into student (xh,xm,sex) values(‘001’,’lison’,’女’);

 

插入空值

SQL>insert into student (xh,xm,sex,birthday) values(‘021’,’BLYK’,’男’,null);

 

一條插入語句可以插入多行數據

SQL> insert into kkk (Myid,myname,mydept) select empno ,ename,deptno from emp where deptno=10;

 

 

查詢空值/(非空)的數據

SQL>select * from student where brithday is null(/not null);

 

修改(更新)數據

SQL>update student set sal=sql/2 where sex =’男’

 

更改多項數據

SQL> update emp set (job,sal,comm)=(select job,sal,comm from emp where ename='SMITH') where ename='SCOTT';

 

刪除數據

  1. 1.       保存還原點

SQL>savepoint aa;

  1. 2.       刪除數據

【1】      SQL>delete from student; //刪除表的數據

【2】      SQL>drop table student;  //刪除表的結構和數據

【3】      SQL>delete from student where xh=’001’; //刪除一條記錄

【4】      SQL>truncate table student;  //刪除表中的所有記錄,表結構還在,不寫日志,無法扎找回的記錄,速度快

 

查看表結構

SQL>desc student;

 

查詢指定列

SQL>select sex,xh,xm from student;

 

如何取消重復

SQL>select distinct deptno,job from student;

 

打開顯示操作時間的開關

SQL>set timing on;

 

 

為表格添加大的數據行(用於測試反應時間)

SQL>insert into users (userid,username,userpss) select * from users;

 

統計表內有多少條記錄

SQL>select count(*) from users;

 

屏蔽列內相同數據

SQL>select distinct deptno,job from emp;

 

查詢指定列的某個數據相關的數據

SQL>select deptno,job,sal from emp where ename=’smith’;

 

使用算數表達式

SQL>select sal*12 from emp;

 

使用類的別名

SQL>select ename “姓名”,sal*12 as “年收入” from emp

 

處理null(空)

SQL>select sal*13+nvl(comm,0)*13 “年工資”,ename,comm from emp;

 

連接字符串(||

SQL>select ename || ‘is a’ || job from emp;

 

Where子句的使用

【1】SQL>select ename,sal from emp where sal>3000;   //number的范圍確定

【2】SQL>select ename,hiredate from emp where hiredate>’1-1月-1982’; //日期格式的范圍確定

【3】SQL>select ename,sal from emp where sal>=2000 and sal<=2500;      //組合條件

 

Like操作符:’%’、’_’

SQL>select ename,sal from emp where ename like ‘S%’;              //第一個字符【名字第一個字符為S的員工的信息(工資)】

SQL>select ename,sal from emp where ename like ‘__O%’;          //其它字符【名字第三個字符為O的員工的信息(工資)】

 

批量查詢

SQL>select * from emp where in(123,456,789);       //查詢一個條件的多個情況的批量處理

 

查詢某個數據行的某列為空的數據的相關數據

SQL >select * from emp where mgr is null;

 

條件組合查詢(與、或)

SQL>select * from emp where (sal>500 or job=’MANAGER’) and ename like ‘J%’;

 

Order by 排序

【1】SQL>select * from emp order by sal (asc);       //從低到高[默認]

【2】SQL>select * from emp order by sal desc;      //從高到低

【3】SQL>select * from emp order by deptno (asc),sal  desc;     //組合排序

【4】SQL>select ename,sal*12 “年薪” from emp order by “年薪” (asc);

SQL> select ename,(sal+nvl(comm,0))*12 as "年薪" from emp order by "年薪";

 

資料分組(max、min、avg、sum、count

SQL>select max(sal),min(sal) from emp;

SQL>select ename,sal from emp where sal=(select max(sal)  from emp); //子查詢,組合查詢

SQL> select * from emp where sal>(select avg(sal) from emp); //子查詢,組合查詢

SQL> update emp set sal=sal*1.1 where sal<(select avg(sal) from emp) and hiredate<'1-1月-1982';      //將工資小於平均工資並且入職年限早於1982-1-1的人工資增加10%

 

Group by 和 having 子句

//group by用於對查詢出的數據進行分組統計

//having 用於限制分組顯示結果

SQL>select avg(sal),max(sal),deptno from emp group by deptno;        //顯示每個部門的平均工資和最低工資

SQL>select avg(sal),max(sal),deptno from emp group by deptno;        //顯示每個部門的平均工資和最低工資

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

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

 

多表查詢

笛卡爾集:規定多表查詢的條件是至少不能少於:表的個數-1

SQL> select a1.ename,a1.sal,a2.dname from emp a1,dept a2 where a1.deptno=a2.deptno;

SQL> select a1.dname,a2.ename,a2.sal from dept a1,emp a2 where a1.deptno=a2.deptno and a1.deptno=10;     //顯示部門編號為10的部門名、員工名和工資

SQL> select a1.ename,a1.sal,a2.grade from emp a1,salgrade a2 where a1.sal between a2.losal and a2.hisal;

SQL> select a1.ename,a1.sal,a2.dname from emp a1,dept a2 where a1.deptno=a2.deptno order by a1.deptno;                   //多表排序

SQL> select worker.ename,boss.ename from emp worker,emp boss where worker.mgr=boss.empno;       //     自連接(多表查詢的特殊情況)

SQL> select worker.ename,boss.ename from emp worker,emp boss where worker.mgr=boss.empno and worker.ename='FORD';

 

子查詢

SQL> select * from emp where deptno=(select deptno from emp where ename='SMITH');

SQL> select distinct job from emp where deptno=10;

 

SQL> select * from emp where job in (select distinct job from emp where deptno=10);   

// 如何查詢和部門10的工作相同的雇員的名字、崗位、工資、部門號。

SQL> select ename ,sal,deptno from emp where sal>all (select sal from emp where deptno=30);//如何查詢工資比部門30的所有員工的工資高的員工的姓名、工資和部門號

SQL> select ename ,sal,deptno from emp where sal>(select max(sal) from emp where deptno=30);

SQL> select * from emp where (deptno,job)=(select deptno,job from emp where ename='SMITH');

 

內嵌視圖

//當在from子句中使用子查詢的時候,必須給子查詢指定別名

SQL>select a2.ename,a2.sal,a2.deptno,a1.mysal from emp a2,(select deptno,avg(sal) (as ) mysal from emp group by deptno) a1 where a2.deptno=a1.deptno and a2.sal>a1.mysal;

 

 

分頁

SQL >select a1.*,rownum rn from (select * from emp) a1;//orcle為表分配的行號

SQL> select * from (select a1.*,rownum rn from (select * from emp) a1 where rownum<=10) where rn>=6;

//查詢內容的變化

  1. 所有的改動(指定查詢列)只需更改最里面的子查詢
  2. (排序)只需更改最里面的子查詢

 

 

子查詢(用查詢結果創建新表)

SQL> create table mytable (id,name,sal,job,deptno) as select empno,ename,sal,job,deptno from emp;

 

合並查詢

union(求並集), union  all  , intersect(取交集),   minus (差集)

SQL> select ename,sal,job from emp where sal>2500;

SQL> select ename,sal,job from emp where job='MANAGER';

 

SQL> select ename,sal,job from emp where sal>2500 union select ename,sal,job from emp where job='MANAGER';    // union(求並集)

 

Java連接數據庫

 

事務

SQL>commit;        //事務            (第一次創建,第二次提交)當退出數據庫時,系統自動提交事務

SQL>savepoint a1;              //創建保存點                     (保存點的個數沒有限制)

SQL>rollback to aa;    //使用保存點回滾到aa

SQL>rollback;           //回滾到事務創建開始

只讀事務

SQL>set transaction read only

 

Java中的事務

Ct.setAutoCommit(false);    //設置事務自動提交為否

Ct.commit();          //提交事務

 

 

字符函數

lower(char)將字符串轉換為小寫的格式

upper(char)將字符串裝換為大寫的格式

length(char)返回字符串的長度

substr(char,m,n)取字符串的子串

 

SQL>select lower(ename) from emp;

SQL>select ename from emp where length(ename)=5;

                                                                                                    

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM