Oracle資料庫——基本使用《上》
阿新 • • 發佈:2018-12-01
1、【使用者操作】
--建立表空間
create tablespace mollen
datafile 'c:\myorcldb\mollen'
size 100m
autoextend on
next 10m;
--刪除表空間
drop tablespace mollen;
--建立使用者
create user mollen --建立使用者
identified by mollen --設定密碼
default tablespace mollen; --指定表空間
--給使用者授權
--connet:連線角色,基本角色
--resource:開發者角色
--dba:超級管理員角色
--給mollen使用者授予dba角色
grant dba to mollen;
2、【表操作】
--建立一個user表
create table tab_user(
id number(20),
uname varchar2(10)
);
--新增一列
alter table tab_user add (gender number(1));
--修改列型別
alter table tab_user rename column gender to sex;
--刪除一列
alter table tab_user drop column sex;
--新增一條資料
insert into tab_user (id,uname) values(1,'小李');
commit;
--修改一條記錄
update tab_user set uname = '小馬' where id = 1;
commit;
-------【刪除表操作】------------
--刪除表中全部記錄
delete from tab_user;
--刪除表結構
drop table tab_user;
--先刪再建:資料量大效率高
truncate table tab_user;
-------------【序列】---------
--預設1開始,依次遞增,用於主鍵賦值
--dual:虛表,補全語法
create sequence s_iuser;
select s_iuser.nextval from dual;
--新增一條記錄
insert into tab_user(uid,uname) values(s_user.nextval,'小張');
commit;
3、【scott使用者,密碼tiger】
--解鎖scott使用者
alter user scott account unlock;
--解鎖scoot使用者密碼(可用於密碼重置)
alter user scott identified by tiger;
4、【函式】
--字元函式
select upper('yes') from dual; --YES
select lower('YES') from dual; --yes
--數值函式
select round(56.16,-2) from dual; --四捨五入,後面引數表示保留幾位
select trunc(56.16,-1) from dual; --直接擷取,不再看後面是否大於5
select mod(10,3) from dual;--求餘數
--日期函式
--查詢emp表中所有員工入職天數
select sysdate-e.hiredate from emp e;
--查詢明天此刻
select sysdate+1 from dual;
--查詢出emp表中所有員工入職幾個月
select months between (sysdate,e.hiredate) from emp e;
--查詢出emp表中所有員工入職幾年
select months between(sysdate,e.hiredate)/12 from emp e;
--查詢出emp表中所有員工入職幾周
select round((sysdate-e.hiredate)/7) from emp e;
--轉換函式
--日期轉字串
select to_char(sysdate,'fm yyyy-mm-dd hh24:mi:ss') from dual;
--字串轉日期
select to_date('2018-6-7 16:39:50','fm yyyy-mm-dd hh24:mm-ss') from dual;
--通用函式
--算出emp表中所有員工的底薪
--獎金裡面有null值,如果null值和任意數字做算術運算,
select e.sal*12+nvl(e.comm,0) from emp e;
--多行函式【聚合函式】:作用於多行,返回一個值。
select count(1) from emp; ---查詢總數量
select sum(sal) from emp; --工資總和
select max(sal) from emp; --最低工資
select avg(sal) from emp; --平均工資
5、【條件表示式】
--條件表示式的通用寫法,mysql和oracle通用
--給emp表中員工起中文名
select e.ename,
case e.ename
when 'SMITH' then '大王'
when 'ALLEN' then '小王'
when 'WARD' then '三王'
--else '無名'
end
from emp e;
--判斷emp表中員工工資,如果高於15000顯示高收入,
--8000到15000顯示中等收入
--其餘顯示低收入
select e.sal,
case
when e.sal>3000 then '高收入'
when e.sal>1500 then '中等收入'
else '低收入'
end
from emp e;
---oracle中除了起別名,都用單引號。
---oracel專用條件表示式
select e.ename,
decode(e.ename,
'SMITH','大王',
'ALLEN','小王',
'WARD','三王',
'無名')"中文名"
from emp e;
6、【分組查詢】
--分組查詢中,出現再group by後面的原始列,才能出現再select後面
--沒有出現再group by後面的列,想在select後面,必須加上聚合函式
--聚合函式有一個特性,可以把多行記錄變成一個值
--查詢出部門平均工資大於2000的
select
e.deptno, --group by 欄位
avg(e.sal) --e.ename 聚合函式
from
emp e
group by
e.deptno
having
avg(e.sal)>2000;
--查詢每個部門工資高於800的員工的平均工資
select
e.deptno,
avg(e.sal) asal
from
emp e
where
e.sal>800
group by
e.deptno
having
avg(e.sal)>2000;
7、【多表查詢的一些概念】
--笛卡兒積
select
*
from
emp e,dept d
where
e.deptno =d.deptno
--等值連線
select
*
from
emp e,dept d
where
e.deptno = d.deptno;
--內連線
select
*
from
emp e
inner join
dept d
on
e.deptno = d.deptno;
--查詢出所有部門,以及部門下的員工資訊(外連線)
select
*
from
emp e
right join
dept d
on
e.deptno = d.deptno;
--查詢所有員工資訊,以及員工所屬部門
select
*
from
emp e
left join
dept d
on
e.deptno = d.deptno;
--oracle專用外連線
select
*
from
emp e,dept d
where
e.deptno(+) =d.deptno;
--查詢出員工姓名,員工領導姓名
--自連線:自連線其實就是站在不同的角度把一張表堪稱多張表
select
e1.ename ,e2.ename
from
emp e1,emp e2
where
e1.mgr = e2.empno;
--查詢出員工姓名,員工部門名稱,員工領導姓名,員工領導部門名稱
select
e1.ename,d1.dname,e2.ename,d2.dname
from
emp e1,emp e2,dept d1,dept d2
where
e1.mgr = e2.empno
and
e1.deptno = d1.deptno
and
e2.deptno=d2.deptno;
---子查詢
--子查詢返回一個值
--查詢出工資和scott一樣的員工資訊
select * from emp where sal in
(select sal from emp where ename = 'SCOTT')
--子查詢返回一個集合
--查詢出工資和10號部門任意員工一樣的員工資訊
select * from
emp
where
sal
in
(select sal from emp where deptno = 10);
--子查詢返回一張表
--查詢出每個部門最低工資,和最低工資員工姓名,和員工所在部門名稱
--1.先查詢出每個部門最低工資
select deptno,min(sal) msal from emp group by deptno;
--2.三表聯查,得到最終結果
select
t.deptno,t.msal,e.ename,d.dname
from
(select deptno,min(sal) msal from emp group by deptno) t,
emp e,
dept d
where
t.deptno = e.deptno
and
t.msal = e.sal
and
e.deptno = d.deptno;
8、【oracle中的分頁】
--rownum 行號:當我們做select操作的時候,
--每查詢出一行記錄,就會再該行上加一個行號
--行號從1開始,一次遞增,不能跳著走
--排序操作會影響rownum的順序
select rownum,e.* from emp e order by e.sal desc;
--如果涉及到排序,但是還要使用rownum的話,我們可以再次巢狀查詢
select rownum , t.* from(
select rownum,e.*from emp e order by e.sal desc) t;
--emp表工資倒敘排列後,每頁五條記錄,查詢第二頁
--rownnum行號不能寫上大於一個正數。
select * from
(select rownum rn,tt.* from
(select * from emp order by sal desc) tt
where rownum<11)
where
rn>5;