oracle 授权 增删改查权限_Oracle增删改查与函数
SQL -- 結構化查詢語言 關系型數據庫
分類: DDL DML DCL DQL TCL
Oracle 的數據類型:
字符 char() varchar2()
數字 number(p,s)
時間 date timestamp
文件 clob blob 二維表 table
創建表 CREATE
create table 表名 ( 列名 數據類型 [約束], 列名 類型 ... --表的結構) ;
約束: not null , primary key , foreign key , unique , check
表 列 column 字段 filed 屬性
行 row 記錄 row
create alter drop
--------------------------------------------------------------------------
修改表 ALTER
注: 前提 就是表中還沒有任何數據
增加字段(列)
alter table 表名 add 列名 數據類型 ;
alter table 表名 add 列名 數據類型 not null ; --匿名約束
alter table 表名 add 列名 數據類型 default 默認值 ;
修改字段
alter table 表名 modify 列名 新的數據類型 ;
alter table 表名 modify 列名 新的數據類型 default 默認值 ;
修改字段名
alter table 表名 rename column 舊的列名 to 新的列名 ;
增加約束
alter table 表名 add constraint 約束名 約束的關鍵字 (列名) ;
--命名約束
alter table 表名 modify 列名 數據類型 not null ;
刪除字段
alter table 表名 drop column 列名 ;
刪除約束
alter table 表名 drop constraint 約束名 ;
修改表的名字
alter table 舊的表名 rename to 新的表名 ;
rename 舊的表名 to 新的表名 ;
SQL DML 語句
增刪改查
簡單查詢:
select 從數據庫表中提取信息。 語法:
select * | 列名 | 表達式 from 表名 where 過濾條件 order by 列名 ;
* --代表所有列
列名 --指定列,多列用逗號分隔
表達式 -- 常量 變量 函數等組成表達式
order by 默認升序 ASC ,降序 DESC
select stuname, age, classno from infos where seat<5 orader by age desc ;
增加數據 插入數據 insert 語法:
insert into 表名【(列名1,列名2,列名3...) 】 values (值1,值2,值3 ...) ;
時間函數
to_date() 將時間進行格式化輸入
格式化字符 YYYY 年 year
MM 月 month
DD 日 day
hh24 24小時 hh12 12小時
MI 分
SS 秒
to_date('2020-02-26 11:28:35','yyyy-mm-dd hh24:mi:ss')
insert int infos values (...) ;
注意: 對數據的增刪改,需要提交 commit 指令;
常量 == 字面量 值
select 執行的結果,獲取得是一個 結果集
創建表的另外一個種方式 根據結果集創建表
crate table 表名 ( --結構);
insert into 表名 as select ... from ... ;
--向表中插入一個結果集
修改數據 update 更新 語法:
update 表名 set 列名=值, 列名=值 ... where 條件 ;
刪除數據 delete 刪除 語法:
delete from 表名 where 條件;
清空表中的所有數據
delete from 表名; --DML rollback回滾 安全
truncate table 表名; --DDL 不能回滾 不安全
drop table 表名 ; --- 刪除表
補充: 設置sqlplus 環境
SQL> show linesize ;
SQL> set linesize 120 ; -- 設置每行寬度120個字符
SQL> col 列名 format a20 ; --設置列寬20個字符長度
SQL 增刪改查 insert delete update select
用戶SCOTT 口令 tiger 過期
雇員表 EMP
部門表 DEPT
薪水等級表 SALGRADE
SQL語句 操作符
算術運算 + 、 - 、 * 、 / --算術表達式
--復雜的運算使用 函數 來實現
問題: 每名員工的年終獎是2000元,請顯示基本工資在2000元以上的員工的月工資,年總工資。
select ename 姓名 , sal "薪水", (sal*12+2000) as "年總工資" from emp where sal > 2000;
關系運算 = 等于 > 大于 < 小于 >= 大于等于 <= 小于等于 != 不等于 -- <> ^=
select ename 姓名 , sal "薪水", (sal*12+2000) as "年總工資" from emp where sal > 2000;
--通常作為where條件從句的一部分進行判斷
邏輯運算 and 與 、 or 或 、 not 非
高級查詢
消除重復的行
distinct
空值的判斷:
is null , is not null
in操作
in (集合) , not in (集合)
between ... and ...
sal between 1000 and 2000 --- sal>=1000 and sal<=2000
模糊查詢 like
通配符 % :表示零個或者多個任意字符 -- *
通配符 _ : 代表一個任意字符 -- ?
like 'S%' 以S開頭的所有字符串
like '_S%' 第二個字符是S的所有字符串
字符串連接 ||
'Hello' || 'World' = 'HelloWorld'
集合運算:
select 執行結果就是一個集合
交集 intersect 返回兩個查詢共有的記錄
并集 union [all] 返回各個查詢的所有記錄 [包括重復的記錄]
補集 minus 返回第一個查詢減去第二個查詢剩余的記錄
----------------------------------------------------------------------------------------
重難點
連接查詢 (多表查詢)
問題: 請查詢出工資大于2000元的員工的,姓名,部門,工作,工資。
笛卡爾集 select * from a cross join b ; -- select * from a, b ;
select ename, dname, job, sal from emp, dept where emp.deptno=dept.deptno and sal>2000;
內連接:
inner join
滿足連接條件的左右兩表的記錄都選取出來,不滿足連接條件的記錄不選取。
select e.ename, d.dname, e.job, e.sal from emp e, dept d where e.deptno=d.deptno and e.sal>2000;
--多表查詢
select e.ename, d.dname, e.job, e.sal from emp e inner join dept d on e.deptno=d.deptno where e.sal>2000;
外連接:
問題: 查詢出公司所有部門及員工的姓名、工作、工資。
部門名稱、姓名、工作、工資
outer join
滿足連接條件的左右兩表的記錄都選取出來,不滿足連接條件的記錄也可能選取出來。
左(外)連接
left join
select d.dname, e.ename, e.job, e.sal from emp e left join dept d on e.deptno=d.deptno;
右連接
right join
select d.dname, e.ename, e.job, e.sal from emp e right join dept d on e.deptno=d.deptno;
oralce 私有的寫法:
select d.dname, e.ename, e.job, e.sal from emp e ,dept d where e.deptno(+)=d.deptno;
子查詢
在select 、update 、 delete 等語句內部可以出現的 select 語句 。內部的語句 嵌套的select 語句 子查詢
位置劃分:
1、內部嵌套的select語句結果可以作為外部語句條件從句 where 的一部分。
2、內部嵌套的select語句可以作為外部查詢等語句的臨時表
類型劃分:
1、單行子查詢: 最多一行記錄
2、多行子查詢: 可能有多行記錄
案例1: 查詢出銷售部(SALES) 下面的員工的姓名,工作,工資。
select ename, job, sal from emp where deptno = (select deptno from dept where dname='SALES' );
案例2:查詢出emp表中比任意一個銷售員("SALESMAN") 工資低的員工姓名、工作、工資。
select ename, job, sal from emp where sal < any [all] (select sal from emp where job='SALESMAN');
-- 多行子查詢 需要用到 any , all , in , not in 等關鍵字 ,any 任意 , all 所有
偽列: oracle 表的附加列,不能(增刪改)存儲數據,只能用于查詢(查)。
rowid 返回的是行的物理地址。 插入記錄時生成, 可以快速定位行。
rownumber 為結果集的每一行標識一個行號。 查詢時生成,可以限制查詢返回行數。
案例3: 查詢出員工表中前5名的員工的姓名,工作,工資。
select rownum, ename, job, sal from emp where rownum<=5;
案例4: 查詢出工資最高的前5名的員工的姓名,工作,工資。
select * from (select ename,job,sal from emp order by sal desc ) where rownum<=5 ;
分頁查詢
select * from (select rownum r, ename, job, sal from emp ) t where t.r>=6 and t.r<=10 ;
子查詢練習題:
1.創建一查詢,顯示與Blake在同一部門工作的雇員的姓名和受雇日期,但是Blake不包含在內。
select ename, hiredate from emp where deptno = (select deptno from emp where ename='Blake') and ename!='Blake' ;
2.顯示位置在Dallas的部門內的雇員姓名、編號以及工作。
select ename, empno, job from emp where deptno in (select deptno from dept where loc='Dallas') ;
3.顯示被King直接管理的雇員的姓名以及工資。
select ename, sal from emp where mgr = (select empno from emp where ename='King') ;
4.創建一查詢,顯示能獲得與Scott一樣工資和獎金的其他雇員的姓名、受雇日期以及工資。
select ename, hiredate, sal from emp where sal = (select sal from emp where ename='Scott')
and comm = (select comm from emp where ename='Scott') ;
select 高級查詢 distinct , is null , in , between ... and ... , like % _ , ||
集合查詢: 交集intersect 并集union 補集 minus
連接查詢 -- 多表查詢
內連接 inner join ... on
外連接 outer join
左外連接 left join
右外連接 right join
子查詢:
按位置:
1、 子查詢作為外部條件從句的一部分 where ...
2、 子查詢作為外部查詢的臨時表 from ...
按返回:
1.單行子查詢
2.多行子查詢 any , all , in , not in
-----------------------------------------------------------------------------------
Oracle 函數
通俗地說就是封裝了實現特定功能的代碼塊。 目的是為了代碼重用
定義了一個名字叫fun的函數
public static int fun(int x, int y){
System.out.println("實現累加從"+x+"到"+y);
int relust = 0;
for (int i =x ; i<=y ; i ++ ){
relust += i ;
}
System.out.println("累加的計算完成,結果是:"+ relust);
return relust ;
}
oracle 內置的函數:
單行函數: mod(x,y) -- 了解
字符函數 : ASCII(x) , length(x)
數字函數 : power(x,y)
時間函數 : ADD_MONTHS(d,n) last_day(d) round(d,fmt) , EXTRACT(fmt from d) ,between_months(d,d)
轉換函數 : TO_CHAR(d|n[,fmt]) , TO_DATE(x [,fmt]) , TO_NUMBER(x[,fmt])
其他的單行函數:
NVL(x,value) NVL2(x,value1,value2)
--注意 空值是不能進行運算的
聚合函數 -- 熟練掌握
avg() 求平均值
sum() 求和
min() 求最小值
max() 求最大值
count() 數據統計
分組 group by
select ... from ... where ... group by 分組的依據 ;
案例: 計算公司里每個崗位(JOB) 的人數。
select job, count(empno) from emp group by job ;
案例:提取顯示一下公司里平均工資大于2000的部門(部門的編號)。
案例: 提取顯示一下公司里(不包括總經理'PRESIDENT')平均工資大于2000的部門(部門的編號)。
select deptno, avg(sal) from emp where job!='PRESIDENT' group by deptno having avg(sal)>2000;
-- 分組前過濾 where 分組后過濾用 having
案例: 提取顯示一下公司里(不包括總經理'PRESIDENT')平均工資大于2000的部門的名稱(部門的名稱)。
select dname from dept where deptno in (select deptno, avg(sal) from emp where job!='PRESIDENT' group by deptno having avg(sal)>2000) ;
select ename, dname from emp cross join dept where sal>2000 order by sal desc,ename desc; ----笛卡爾集?
select ename, dname,sal from emp , dept where emp.deptno(+)=dept.deptno and sal>2000 order by sal desc,ename desc; ----右連接
select ename, dname,sal from emp , dept where emp.deptno=dept.deptno(+) and sal>2000 order by sal desc,ename desc; -----左連接
檢索所有的員工的姓名,以及他經理的姓名?
select e.ename, m.ename from emp e , emp m where e.mgr=m.empno; --自連接
select e.ename, m.ename from emp e inner join emp m on e.mgr=m.empno; -- 標準的自連接寫法
查詢薪水大于崗位平均薪水的員工?
select * from emp e where sal > (select avg(sal) from emp where job=e.job ) ; -- 相關子查詢
查詢工資子大于3000的員工所在的部門名稱?
exists (select ... from ...) 存在子查詢
--子查詢返回的是 布爾值 ture , false
select dname from dept d where exists (select * from emp where sal>3000 and deptno=d.deptno) ;
其他函數
nullif(expr1, expr2) -- expr1等于expr2 返回空,否則返回exp1
select ename, job, nullif(length(ename),length(job)) from emp;
coalesce(expr1,expr2,expr3...exprn) -- 從左開始遇到第一個表達式非空就返回
select ename,job, coalesce(comm, sal, 10 ) from emp;
條件表達式函數:
case [expr] when ... then ...
when ... then ...
else ...
end
------------------------------------------------------
select ename,sal,case deptno when 10 then 'dept10'
when 20 then 'dept20'
when 30 then 'dept30'
else 'other' end department
from emp ;
select ename,sal,case when deptno =10 then 'dept10'
when deptno =20 then 'dept20'
when deptno =30 then 'dept30'
else 'other' end department
from emp;
-----------------------------------------------------------------------
總結
以上是生活随笔為你收集整理的oracle 授权 增删改查权限_Oracle增删改查与函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于回忆的网名好听不易撞的网名532个
- 下一篇: wps xml转换表格_这功能WPS卖近