1. 創建TableSpace、用戶及給用戶分派權限
可以通過Oracle客戶端工具Enterprise Manager Console連接相應數據庫,通過圖形化操作來完成,這裏我記錄通過sqlplus連接到Oracle,通過命令來完成創建TableSpace、用戶及給用戶分派權限:
create tablespace testall datafile 'c:\oracle\product\oradata\datafile.dbf' size 100M;
create user kylin identified by ADMIN default tablespace testall;
grant connect,resource,dba to kylin;
2.簡單的表操作
以上面創建的用戶連接到數據庫,創建一個表,向表中插入一條數據,查詢數據,刪除表,如下所示:
create table student(
name varchar2(20),
age number(3)
);
insert into student values('Kobe Bryant',32);
select * from student;
desc student;
drop table student;
3.用Scott用戶登錄,練習一組查詢語句
select empno,ename,job,sal,sal*12+200 from emp;
select empno,hiredate, hiredate+10 from emp;
select ename||' is a '||job from emp;
select ename||' ''s annual salary is '|| sal*12 from emp;
select empno as employeeId, ename name, job "Job",sal*12 "Annual Salary" from emp;
select empno "Empno",ename "Ename",sal, comm, ename||' - '|| comm, sal+comm from emp;
用DISTINCT 去除重複行
select deptno from emp;
select distinct deptno from emp;
select distinct deptno, job from emp;
查詢結果排序ORDER BY,ASC(升序,缺省),DESC(降序)
select * from emp order by sal;
select * from emp order by sal desc;
select ename,sal,deptno from emp;
select ename,sal,deptno from emp order by sal desc,deptno;
select ename,sal,deptno from emp order by sal desc,deptno desc;
條件查詢
select * from emp where ename='SMITH';
select * from emp where deptno=10;
select * from emp where sal >= 3000;
select * from emp where sal >= 3000;
獲取當前系統時間:
比較查詢
select * from emp where sal between 1200 and 1900;
select * from emp where ename in ('SCOTT','WARD');
select * from emp where deptno <> 30;
模糊查詢(%表示一個或多個字符,_表示一個字符,對於特殊字符可以用ESCAPE來查找)
select * from emp where ename like 'S%';
select * from emp where ename like '_A%';
select * from emp where ename like '%\_%' escape '\';
空值判斷
select * from emp where comm is null;
select * from emp where comm is not null;
邏輯運算符
select * from emp where sal>2000 and deptno=20;
select * from emp where sal>2000 or deptno=20;
select * from emp where ename not in('SIMITH','JONES','KING','SCOTT');
4.Oracle主要數據類型
char | 字符型,最大長度2000B,缺省長度1B |
nchar | 基於NLS(National Language Support)的字符型,最大長度2000B,缺省長度1B |
varchar2 | 可變長度字符型,最大長度4000B |
nvarchar2 | 基於NLS,其餘同varchar2 |
varchar | 同varchar2 |
number(m,n) | 數值型,m爲總位數,n爲小樹位數,m最大爲38 |
date | 日期型,保存日期和時間 |
long | 變長字符型,最大長度2GB,不支持對字符串進行搜索 |
raw | 變長二進制數據類型,最大長度2000B |
long raw | 變長二進制數據類型,最大長度2GB |
blob | 二進制大對象類型,最大長度4GB |
clob | 字符大對象類型,最大長度4GB |
nclob | 基於NLS,同nclob |
bfile | 在數據庫外部保存的大型二進制文件的大對象類型,最大長度4GB |
5.函數
字符函數
函數 | 功能 | 用法 | 返回結果 |
lower() | 轉化爲小寫 | lower(KOBE BRYANT) | kobe bryant |
upper() | 轉化爲大寫 | upper(kobe bryant) | KOBE BRYANT |
initcap() | 字母首字母大寫 | initcap(KOBE BRYANT) | Kobe Bryant |
concat() | 字符串連接 | concat('Kobe','Bryant') | Kobe Bryant |
substr() | 字符串截取 | substr('Kobe Bryant',6,6) | Bryant |
length() | 返回字符串長度 | length('Kobe Bryant') | 11 |
instr() | 定位字符串 | instr('Kobe Bryant','be') | 3 |
lpad() | 左側填充 | lpad('kobe',10,'*') | ******kobe |
rpad() | 右側填充 | rpad('kobe',10,'*') | kobe****** |
trim() | 過濾首尾空格 | trim(' Kobe Bryant ') | Kobe Bryant |
replace() | 替換 | replace('Kobe Bryant','Kobe','Kylin') | Kylin Bryant |
SQL語句:
select empno,lower(ename),job from emp;
select empno,initcap(ename),job from emp;
select concat('Kobe','Bryant') from dual;
select substr('Kobe Bryant',6,6) from dual;
select length('Kobe Bryant') from dual;
select instr('Kobe Bryant','be') from dual;
select lpad('kobe',10,'*') from dual;
select rpad('kobe',10,'*') from dual;
select trim(' Kobe Bryant ') from dual;
select replace('Kobe Bryant','Kobe','Kylin') from dual;
數值函數
函數 | 用法 | 功能 | 返回結果 |
abs() | 取絕對值 | abs(-3.14) | 3.14 |
round() | 四捨五入 |
round(3.1415) round(3.1415,3) round(314.1592,-2) |
3 3.142 300 |
trunc() | 截斷 | trunc(3.1415,3) | 3.141 |
ceil() | 向上取整 | ceil(3.14) | 4 |
floor() | 向下取整 | floor(3.14) | 3 |
sign() | 判斷數值正負 |
sign(-3.14) sign(0) sign(3.14) |
-1 0 1 |
sin() | 三角函數 | sin(3.14) | .001592653 |
power() | 冥運算 | power(4.5,2) | |
sqrt() | 開平方根 | sqrt(9) | 3 |
mod() | 取模 | mod(10,3) | 1 |
exp() | 基數爲e的冥運算 | exp(1) |
|
相關SQL語句
select ename,sign(sal-1250) "Salary Info" from emp;
select sin(3.14) from dual;
日期類型相關函數
函數 | 功能 | 用法 | 返回結果 |
add_months(x,y) | 計算在日期x上加上y個月後的日期 | add_months(sysdate,2) | |
last_day(x) | 返回日期x當月最後一天的日期 | last_day(sysdate) | |
months_between(x,y) | 返回日期x和y之間相差的月數 | months_between(sysdate,sysdate) | |
round(x,y) | 將日期x四捨五入到y所指定的日期單位(月或年)的第一天 |
round(sysdate,'month') round(sysdate,'year') |
01-10月 -10 01-1月 -11 |
trunc(x,y) | 將日期x截斷到y所指定的日期單位(月或年)的第一天 |
trunc(sysdate,'month') trunc(sysdate,'year') |
01-10月 -10 01-1月 -10 |
next_day(x,y) | 計算指定日期x後的第一個星期幾(由參數y指定)對應的日期 | next_day(sysdate,星期二) |
相關測試SQL語句
select add_months(sysdate,2) from dual;
select last_day(sysdate) from dual;
select ename,months_between(sysdate,hiredate) from emp;
select round(sysdate,'month') from dual;
select round(sysdate,'year') from dual;
select trunc(sysdate,'month') from dual;
select trunc(sysdate,'year') from dual;
select next_day(sysdate,'星期二') from dual;
轉換函數
如下圖所示,爲常用幾個轉換函數
常用日期格式符:
格式符 | 說明 | 舉例 |
yyyy | 年份 | 2010 |
mm | 用數字顯示月份 | 10 |
dd | 在當月中是第幾天 | 5 |
day | 星期幾 | 星期日 |
am/pm | 顯示上午或下午 | 上午 |
hh/hh12/hh24 | 小時 | 7:41 21:41 |
mi | 分鐘 | 41 |
ss | 秒 | 46 |
除上述格式符外,Oracle中日期模式還常用:"- : ; /",如要顯示其他文本字符串則需要使用雙引號括起來;也可以模式串的開頭使用"fm"標記以去掉數字前面的零。
SQL描述
select empno,ename,job, to_char(hiredate,'yyyy-mm-dd') from emp;
select to_char(sysdate,'yyyy-mm-dd hh:mi,ss am') from dual;
select to_char(sysdate,'yyyy"年"mm"月"dd"日" hh:mi,ss am') from dual;
select to_date('2010-10-02','yyyy-mm-dd') from dual;
常用數字描述符:
格式符 | 說明 |
9 | 代表一位數字 |
0 | 代表一位數字,強制顯示0 |
$ | 放置一個美元符 |
L | 放置一個本地貨幣符 |
. | 小數點 |
, | 千位指示符 |
SQL示例:
select to_char(123123.123456) from dual;
select to_char(123456.123456,'$999,999.0000000') from dual;
select to_number('123456') from dual;
select to_number('985,365.1245','999,999.000000') from dual;