Oracle資料庫SQL語句(上)
阿新 • • 發佈:2018-12-21
一、 建立表空間
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 條件顯示特定的組,也可以使用多個分組標準進行分組