1. 程式人生 > >Oracle資料庫SQL語句(上)

Oracle資料庫SQL語句(上)

一、 建立表空間

create tablespace itheima
datafile 'C:\itheima.dbf'
size 100m
autoextend on
next 10m;

二、 建立使用者

create user itshunzi
identified by root
default tablespace itheima;

三、 給使用者授權

grant dba to itshunzi;  -- 授予“itshunzi”使用者超級管理員許可權

四、解鎖scott使用者

alter user scott account unlock;

– 解鎖scott使用者密碼

alter user scott identified by tiger;

–建立序列

create sequence seq_user;

– 刪除序列

drop sequence seq_user;

– 從虛表中查詢資料

select seq_user.nextval from dual;
select seq_user.currval from dual;

–建立表

create table tab_user(
   id number(11) primary key,
   username varchar2(20),
   password varchar2(20)
);

– 向表中新增資料

insert into tab_user values(
   seq_user.nextval,
   'zhangsan',
   '123456'
);

insert into tab_user values(
   seq_user.nextval,
   'lisi',
   '123456'
);
commit;

* 注:在Oracle資料庫中,預設執行增刪改的時候,不會自動提交事務,需要手動提交。

– 新增一列

alter table tab_user add(address varchar2(32));
commit;

– 修改某一列的屬性

alter table tab_user modify(address varchar2(50));
commit;

– 修改某一列的名稱

alter table tab_user rename column address to addr;
commit;

– 刪除表

drop table tab_user;
commit;

– 修改表資料

update tab_user set password = '456789' where id = 1;
commit; 

– 刪除表資料

delete from tab_user where id = 1;
commit;

– 數值函式(round – 四捨五入)

select round(35.55) from dual;
select round(35.55,-1) from dual;

– 日期函式(sysdate:當前時間,hiredate:入職時間,months_between:求月份函式)

-- 查詢每位員工入職的天數
select ename,sysdate - hiredate from emp;
-- 查詢每位員工入職的週數
select ename,round((sysdate - hiredate)/7) from emp;
-- 查詢每位員工入職的月數
select ename,round(months_between(sysdate,hiredate)) from emp;
-- 查詢每位員工入職的年數
select ename,round(months_between(sysdate,hiredate)/12) from emp;

– 轉換函式

-- 日期轉字串(to_char)
select empno,ename,to_char(hiredate,'yyyy-mm-dd hh24-mi-ss') from emp;
-- 字串轉日期(to_date)
select to_date('1995-07-17 23:59:59','yyyy-mm-dd hh24-mi-ss') from dual;

–通用函式

--空值處理函式:(nvl)  comm:獎金,存在空值的情況
select ename,nvl(comm,0),sal*12 + nvl(comm,0) from emp;

-- case when函式
select e.empno,
       case 
         when e.job = 'clerk' then '業務員'
          when e.job = 'manager' then '經理'
           when e.job = 'analyst' then '分析員'
             when e.job = 'president' then '總裁'
               when e.job = 'salesman' then '銷售'
                 else
                   '無業'
                   end
from emp e;

– 分組函式

select count(ename),deptno from emp group by deptno;(正確寫法)
select ename,count(ename),deptno from emp group by deptno;(錯誤寫法)
-- *注:在分組查詢中,查詢的欄位只能包含分組條件欄位和聚合函式,不能包含其他的內容

– *分頁查詢(rownum)

-- 1.查詢 emp 錶帶有 rownum 列
select rownum,t.* from emp t;
-- 2.查詢 emp 表中前五條資料
select rownum ,t.* from emp t where rownum<6;
-- 3.查詢 emp 表中工資排名前五的資料
select ttt.* from (
       select rownum r,tt.* from(
              select t.* from emp t  order by sal desc) tt) ttt
where r<6 and r>0;

-- 注:分組查詢的rownum是一個偽列,表示的是查詢結果的行數,他是根據select查詢出來的,先於分組條件的執行,所以分組之後,rownum的順序會被打亂

–Oracle資料庫書寫格式

SELECT   ......  
FROM     ......  
WHERE    ......  
GROUP BY ......  
HAVING   ......  
ORDER BY ......

注:(1)where 子句的作用是在對查詢結果進行分組前,將不符合where條件的行去掉,即在分組之前過濾資料,條件中不能包含聚組函式,使用where條件顯示特定的行。 (2)having 子句的作用是篩選滿足條件的組,即在分組之後過濾資料,條件中經常包含聚組函式,使用having 條件顯示特定的組,也可以使用多個分組標準進行分組