1 Oracle 11g 安裝
- 下載安裝包
https://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html
1.1 主機連接oracle
使用oracleInstanceClient 連接oracle
- 解壓這兩個文件
- 配置path環境變量
2 oracle的一些基本概念
2.1 oracle服務器
- 是一個數據管理系統(RDBMS),它提供開放的,全面的,近乎完善的信息管理
- 由一個oracle數據庫和多個Oracle實例組成
2.2 oracle數據庫和oracle實例
- Oracle數據庫:位於硬盤上實際存放數據的文件,這些文件組織在一起,成爲一個邏輯的整體,即爲Oracle數據庫,因此oracler看來,數據庫 是指硬盤上文件的邏輯集合,必須要與內存裏實例合作,才能對外提供數據管理服務。
- oracle實例:位於物理內存裏的數據結構,它由一個共享的內存池和多個後臺進程所組成,共享的內存池可以被所有進程訪問,用戶如果要存取數據庫裏的數據,必有通過實例才能實現,不能直接讀取硬盤上的文件
- 區別:實例可以操作數據庫,在任何時刻一個實例只能與一個數據庫關聯,多數據情況下,一個數據庫上只能有一個實例對其進行操作
2.3 表空間和數據庫文件
- 表空間是由多個數據文件組成,數據文件只能屬於一個表空間
- 表空間爲邏輯概念,數據文件爲物理概念
2.4 段、區、塊
- 段存在於表空間中
- 段是區的集合
- 區是數據塊的集合
- 數據塊會被映射到磁盤塊中
3 oracle的基本查詢、過濾和排序
3.1 解決SqlPlus前臺程序出現中文亂碼的問題
- 在sqlplus中執行
select userenv('language') from dual
;查看當前數據庫的字符集爲:SIMPLIFIED CHINESE_CHINA.ZHS16GBK
。我們只需要把客戶端字符集和操作系統字符集都設置成這個就行了 - 在環境變量中查找一個名爲“
NLS_LANG
”的環境變量,如果找不到,則新建一個,把變量值賦值爲:“SIMPLIFIED CHINESE_CHINA.ZHS16GBK
”
3.2 基本查詢語句
spool:
- 保存sql語句到文件
spool off
寫入內容到文件
host cls: 清屏
show user 顯示當前登錄用戶
select * from tab; 當前用戶下的表
desc 查詢表的結構【desc emp;】
show linesize 顯示行寬
set linesize 150 設置列寬
col ename for a8 設置ename列寬,顯示8個字符,a表示字符
col sal for 9999 設置sal列顯示4個數字,9表示數字
/ 表示執行上一條語句
c Change 命令,輸錯語句時用【如:c /form/from】
* +
乘法和加法運算
【查詢員工信息: 員工號 姓名 月薪 年薪 獎金 年收入】
SQL>select empno,ename,sal,sal*12,comm,sal*12+comm
SQL中的null值
- 包含null的表達式都爲null
SQL> select empno,ename,sal,sal*12,comm,sal*12+nvl(comm,0) from emp
- null永遠 !=null
如:查詢獎金爲null的員工
SQL> select * from emp where comm=null;
SQL> select * from emp where comm is null;
【正確寫法】
as
列的別名
SQL> select empno as "員工號",ename "姓名"
ed 寫入進入緩存文件 file afiedt.buf
distinct
- 去除重複
SQL> select distinct deptno from emp;
SQL> select job deptno from emp;
- distinct作用於後面所有的列【瞭解】
SQL> select distinct deptno, job from emp;
concat 字符串連接
SQL> select concat('Hello',' World')
dual 僞表
SQL> select concat('Hello',' World') from dual;
SQL> select 3+2 from dual;
||
- 也表示字符串連接
SQL> select 'Hello'||' World' 字符串 from dual;
- 查詢員工信息:
***的薪水是****
SQL> select ename||'的薪水是'||sal 信息 from emp;
3.3 oracle過濾和排序
字符大小寫敏感
如查詢員工爲SMITH的信息
SQL> select * from emp where ename='SMITH';
SQL> select * from emp where ename='SMITh';
日期格式敏感
SQL> select * from v$nls_parameters;
【查看當前的日期格式】
SQL> alter session set NLS_DATE_FORMAT='yyyy-mm-dd';
【修改當前會話的日期格式】
查詢日期:
SQL> select * from emp where hiredate='17-12月-80';
SQL> select * from emp where hiredate='1980-12-17';
between and
查詢薪水1000~2000之間的員工,結果是包含1000和2000的
SQL> select * from emp where sal between 1000 and 2000;
注:含有邊界 小值在前 大值在後,下面寫是不合法的
in 在集合中
not in 不在集合中
- 查詢10和20號部門的員工
SQL> select * from emp where deptno in(10,20);
- 查詢不在10和20號部門的員工
SQL> select * from emp where deptno not in(10,20);
如果集合中含有null,不能使用not in; 但可以使用in
like 模糊查詢
- 查詢名字以S打頭的員工
SQL> select * from emp where ename like 'S%';
- 查詢名字是4個字的員工,4個下劃線即可
SQL> select * from emp where ename like '____'
- 查詢名字中含有下劃線的員工 需要轉意字符
SQL> select * from emp where ename like '%\_%' escape '\';
rollback 回滾 Oracle是自動開啓事務,不同mysql需要手動開啓
order by 排序
- 查詢員工信息 按照月薪排序
SQL> select * from emp order by sal;
- 按年薪降序排序【order by後面 + 列,表達式,別名,序號】
SQL> select empno,ename,sal,sal*12 from emp order by sal*12 desc;
SQL> select empno,ename,sal,sal*12 年薪 from emp order by 年薪 desc;別名
SQL> select empno,ename,sal,sal*12 年薪 from emp order by 4 desc;列數
- 按部門升序然後按工資降序排序員工信息
SQL> select * from emp order by deptno,sal desc
- 按部門降序然後按工資降序排序員工信息
SQL> select * from emp order by deptno desc,sal desc
- order by 作用於後面所有的列;desc只作用於離他最近的列
- 查詢員工信息 按照獎金降序排序,null值是最大,所以會排在最前面
SQL> select * from emp order by comm desc;
select * from emp order by comm desc nulls last;
set pagesize SQL> set pagesize 20 設置分頁大小