oracle筆記1:-安裝-體系結構-基本查詢
一.Oracle數據庫的安裝(安裝在虛擬機的xp系統裏)
1.安裝虛擬機
2.虛擬機內安裝xp系統,以下步驟在虛擬機內進行
3.雙擊setup.exe,在出現的界面中設置口令,及確認口令(此口令即為system賬號的密碼),點擊下一步
4.先決條件檢查,將"用戶已驗證前面的復選框打勾,下一步
5.概要界面,點擊安裝
6.安裝完成後,自動運行配置向導
7.口令管理界面,點擊"口令管理"解鎖SCOTT和HR兩個賬戶
8.回到口令管理界面,點擊確定,安裝完成,點擊退出.
9.設置虛擬機:編輯--虛擬網絡編輯器--添加網絡,添加後會自動分配IP(如,192.168.9.0)
10.此時,本機上會多出一塊虛擬網卡(網絡和共享中心),設置該網卡的IP與虛擬機的ip在同一網段(如192.168.9.1)
11.設置xp系統中ip保持在同一網段(如192.168.9.2)
12.設置虛擬機的網絡適配器,自定義為剛才添加的網卡;虛擬機-設置-網絡適配器-自定義
13.修改oracal的兩個核心配置文件:C:\oracle\product\10.2.0\db_1\NETWORK\ADMIN
該文件下,listener.ora文件和tnsnames.ora文件中的ip都改為與xp系統ip一致,port=1521
14.測試sqlplus客戶端連接服務器,將sqlplus所在的整個文件夾(instanclient_12_1),copy至一個沒有中文,沒有空格的路徑裏
15.打開DOS窗口,進入該文件夾,輸入命令:sqlplus system/密碼@遠程IP:1521/orcl;若使用powershell,則輸入.\sqlplus system/密碼@遠程IP:1521/orcl
遠程IP:XP系統的ip;密碼為安裝時輸入的密碼
16.quit,退出
17.測試並連接pl/sql developer.安裝pl/sql,註意安裝路徑不能有中文,不能有空格,一直下一步直到安裝完成;
18.點擊快捷方式,出現登陸界面,點擊"cancel",進入界面
19.tools--preferences,修改oracle home為:D:\instantclient_12_1;
修改OCIlibrary為,D:\instantclient_12_1/oci.dll;
20.copy oracle的核心文件tnsnames至一個沒有中文和空格的路徑裏,然後添加至系統環境變量,變量名:TNS_ADMIN,變量值為:D:\instantclient_12_1
21.使用system賬戶進入系統;
22.進入數據庫後,重置及解鎖SCOTT賬戶,命令如下:alter user scott identified by tiger account unlock;對於HR賬戶同樣操作;
註:
--解決中文亂碼問題
--1.查看服務器端編碼
select userenv(‘language‘) from dual;
--2.查看以下語句執行後的第一個參數與服務器端編碼是否一致
select * from V$NLS_PARAMETERS;
--3.若不一致,添加環境變量:變量名:NLS_LANG,變量值:第1步查到的值
--4.重啟pl/sql Devloper
二.Oracle數據庫的體系結構
1.數據庫:oracle數據庫是數據的物理存儲,包括數據文件ora或者dbf,控制文件,聯機文件,日誌文件,參數文件.oracle數據庫在一個操作系統中只有一個庫,這是與其它數據庫的區別之處;
2.實例:一個實例由一系列的後臺進程和內存結構組成,一個數據庫可以有n個實例,一般只設置一個;
3.數據文件(dbf):數據庫的物理存儲單位;
4.表空間:數據文件的邏輯映射.一個數據庫在邏輯上被劃分成一個或多個表空間;表空間由磁盤上的一個或多個數據文件(datafile)組成,一個數據文件只能屬於一個表空間.
5.用戶:用戶是在實例下建立的,不同實例中可以建相同名字的用戶.
三.基本查詢語句(SCOTT賬戶)
select * from emp;
1.--去重 distinct
select distinct job from emp;
select job from emp;
2.--字符串連接 || 每個員工的信息用一句話顯示:“員工編號是XXXX,姓名是XXX,職位是XXX”
select ‘員工編號是‘ || empno || ‘,姓名是‘ || ename || ‘,職位是‘ || job from emp;
3.--四則運算
select sal*12 from emp;
4.--條件查詢
4.1--查詢工資大於等於1500並且小於等於3000的員工
select * from emp where sal >= 1500 and sal <= 3000;
4.2--between and 含頭含尾
select * from emp where sal between 1500 and 3000;
4.3--查詢工資不大於1500 not
select * from emp where not sal > 1500;
4.4--查詢員工編號是 7566,7788,7369 in
select * from emp where empno in(7566,7788,7369);
4.6--查詢獎金為空的員工信息 is
select * from emp where comm is null;
5.--模糊查詢 like
--通配符%,占位符_
--查詢員工姓名中第二個字符帶m的,此時,Oracle數據庫大小寫敏感的
select * from emp where ename like ‘_M%‘;
6.--查詢員工姓名中帶_,需要轉義 escape 註:%/&/中文字符不可作為轉義字符使用
select * from emp where ename like ‘%a_%‘ escape ‘a‘;
7.--排序 order by asc desc
--按照獎金的降序排序
select * from emp order by comm desc nulls last;
select 1+1 from dual;
8.--單行函數
--字符函數:
lower()轉小寫;
upper()轉大寫;
initcap()首字母大寫;
replace()替換;
substr()截取;
length()長度;
concat()連接;
select lower(‘ABC‘) from dual;
select upper(‘abc‘) from dual;
select initcap(‘abcd‘) from dual;
select replace(‘abcdef‘,‘ab‘,‘MM‘) from dual;
select substr(‘abcdef‘,0,3) from dual;--從第1個開始取(含),取3個;
select substr(‘abcdef‘,1,3)from dual;--從第1個開始取(含),取3個;
select substr(‘abcdef‘,2,3) from dual;--從第2個開始取(含),取3個;
select length(‘abcdefg‘) from dual;
select concat(‘abc‘,‘def‘) from dual;
select ‘abc‘||‘def‘ from dual;
9.--數值函數
round()四舍五入
trunc()去尾/截斷
mod()取模
select round(12.56,1) from dual;--12.6
select round(12,-1) from dual;--10
select round(16,-1) from dual;--20
select trunc(12.56,-1) from dual;--10
select trunc(16.5,-1) from dual;--10
select mod(10,3) from dual;--1
10.--日期函數
10.1--當前系統時間 sysdate
select sysdate from dual;
10.2--兩個日期的月份差months_between
select ename, round(months_between(sysdate,hiredate)) from emp;
10.3--add_months n個月後的時間
select add_months(sysdate,4) from dual;
11--轉換函數
--字符轉數字
select ‘12‘+‘12‘ from dual;
select to_number(‘12‘)+to_number(‘12‘) from dual;
12-- 查詢 ‘1980-12-17‘入職的員工
select * from emp where to_char(hiredate,‘yyyy-MM-dd‘) = ‘1980-12-17‘;
select * from emp where hiredate = to_date(‘1980-12-17‘,‘yyyy-MM-dd‘);
13--通用函數 nvl
--null如果參與運算,則結果恒為null,需使用nvl函數將其轉為0
select empno,ename,comm,sal*12+nvl(comm,0) from emp;
14--翻譯函數 decode 把員工表中的職位顯示成中文
‘CLERK‘,‘店員‘,
‘SALESMAN‘,‘銷售員‘,
‘其它‘) from emp;
select ename, job,
case job when ‘CLERK‘ then ‘店員‘
when ‘SALESMAN‘ then ‘銷售員‘
else ‘其他‘
end
from emp;
15.--組函數
--計算每個部門的平均工資
select deptno, trunc(avg(sal)) from emp group by deptno having avg(sal) > 2000;
16.--統計每個部門的人數,無人部門顯示為0
SELECT D.DEPTNO, COUNT(E.DEPTNO)FROM EMP E
RIGHT JOIN DEPT D
ON E.DEPTNO = D.DEPTNO
GROUP BY D.DEPTNO;
oracle筆記1:-安裝-體系結構-基本查詢