標籤:一句話 統計 replace 第一個 進入 dbf 並且 管理 lan
一.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 把員工表中的職位顯示成中文
select ename,job,decode(job,
‘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:-安裝-體繫結構-基本查詢