Oracle從入門到入土第一天
Oracle第一天
一學習目標
- Oracle介紹
- Oracle安裝
- Oracle體系結構
- 基本查詢
- 條件查詢
- 單行函數
- 多行函數
- 練習j
二、Oracle介紹
? mysql關係型的資料庫 , 表於表的關係:外鍵 , 埠號:3306 redis:非關係型資料庫 ,key - value , 埠號:6379
Oracle :關係型的資料庫 , 埠號:1521?
收費:19萬左右, 每年交服務費
效率高, 安全
Oracle的版本:8I 9I 10G 11G 12C
職位:DBA(資料庫管理員) , javaEE開發工程師
三、Oracle安裝
1) 安裝虛擬機: 解壓到沒有中文的路徑之下
解壓到沒有中文的路徑下 -- xxx.vmx 文件,雙擊打開
2) 在虛擬中安裝oracle資料庫
資料庫的口令: orcl, 此口令是為 sys ,system
3)配置虛擬網卡:必須配置靜態的ip地址
選擇是僅主機模式, 如果改變了ip地址:修改配置文件,重啟服務()
4)安裝plsql工具
安裝路徑絕對不能有:小括弧,空格,特殊符號
5) 解決中文亂碼的問題
-- 環境變數的名稱: NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
-- 查詢服務端的密碼
select userenv(language) from dual;
四、Oracle體系結構
資料庫:只有一個資料庫 實例:後台運行的一個進程 表空間:邏輯存儲單位 數據文件:物理存儲單位 用戶:面向用戶管理,都會對應一個表空間,向表空間中添加數據,都是保存到數據文件中
五、介紹scott用戶和scott用戶下的表
? Oracle公司(甲骨文):埃里森, 軟體開發實驗室
? scott的第一位程序員, pointbase
? scott用戶,密碼:tiger
-- 解鎖用戶 -- alter user 用戶名 account unlock; alter user scott account unlock--- 重置密碼 -- alter user 用戶名 identified by 密碼; alter user scott identified by tiger;
六、基本查詢
-- dual :是一張虛表, 為了完善查詢的語法結構,只有一行一列
-- 別名:如果是數字開頭或者純數字必須加雙引號
-- 字元串使用單引號,別名使用雙引號
select
length(abc) "長度",
length(abc) as "長度",
length(abc) as 長度,
length(abc) as 123 from dual;
-- 消除重複的記錄
select distinct job from emp;
-- 四則運算:+ - * / -- 連接符號:||
select concat(a , b) from dual;
select concat(concat(a , b),c) from dual;
select a || b|| c from dual;
select 1 + 1 from dual;
-- 查詢員工的年薪: nvl(comm,0)
select sal * 12 + nvl(comm,0),nvl(comm,0) from emp;
七、條件查詢
-- 查詢有獎金的員工
select * from emp where comm > 0;
select * from emp where comm is not null and comm != 0;
-- 查詢沒有獎金的員工
select * from emp where comm is null or comm = 0;
-- not 取反
select * from emp where not(comm is not null and comm != 0);
-- 查詢1981年入職的員工
select * from emp where to_char(hiredate,yyyy) = 1981;
select * from emp where hiredate >= to_date(1981-01-01,yyyy-mm-dd)
and hiredate <= to_date(1981-12-31,yyyy-mm-dd);
select * from emp where hiredate between to_date(1981-01-01,yyyy-mm-dd)
and to_date(1981-12-31,yyyy-mm-dd) ;
--- 函數:to_char to_date
-- to_char (p1,p2):將日期轉換為字元串
-- p1:要轉換的日期
-- p2:轉換的格式
select sysdate,to_char(sysdate,yyyy-mm-dd hh24:mi:ss day) from dual;
-- to_date(p1,p2):將字元串轉換為日期
-- p1:要轉換的字元串
-- p2:轉換的格式
select 2018-07-06 11:11:11 ,
to_date(2018-07-06 11:11:11 ,yyyy-mm-dd hh24:mi:ss) from dual;
-- upper: 轉換為大寫 lower :轉換為小寫
select * from emp where upper(ename) like upper(%M%);
-- 排序
-- 查詢所有員工按照工資升序
select * from emp order by sal asc;
-- 查詢所有員工按照工資降序
select * from emp order by sal desc;
-- 查詢所有員工按照獎金升序排序(null值放到前面)
select * from emp order by nvl(comm,0) asc;
select * from emp order by comm asc nulls first;
-- 查詢所有員工按照獎金降序排序(null值放到後面)
select * from emp order by comm desc nulls last;
八、單行函數
-- 單行函數
select length(ename) from emp;
--字元串函數
-- concat
-- length
-- substr(str, p1 ,p2): str:截取的字元串 ,p1:開始的索引 ,p2:截取的長度
-- 起始索引用0和1是一樣的
select substr(abcjavadef , 4, 4 ) from dual;
select substr(abcjavadef , 1, 3 ) from dual;
select substr(abcjavadef , 0, 3 ) from dual;
-- replace(str ,p1,p2) : 替換 str:要替換的字元串 p1:被替換的 p2:替換成的
select replace(abcdefa , a ,z) from dual;
-- trim() 去除兩側的空白
select trim( abc ),ltrim( abc ),rtrim( abc ) from dual;
-- upper lower
--日期函數
-- 兩個日期相減 == 天數
select sysdate - hiredate from emp;
-- 周數
select (sysdate - hiredate) / 7 from emp;
-- 月數:months_between
select months_between(sysdate , hiredate) from emp;
-- 修改月份: add_months
select add_months(sysdate ,-12) from dual;
--數值函數
-- round () 四捨五入
select round(2.666) from dual;
-- trunc() 截取
select trunc(2.666,1) from dual;
-- mod() 模運算符(求余)
select mod(3,10) from dual;
--轉換函數
-- to_char to_date
-- to_char to_number
select 1 ,to_char(1),1,to_number(1) from dual;
select 1 + 1 from dual;
--通用函數
-- nvl
九、多行函數
-- 多行函數(聚合函數,分組函數)(count, avg, max ,min ,sum)
-- 分組後能顯示的列:分組函數和在group by語句中出現的列
select
count(1),deptno, avg(sal),max(sal) ,min(sal) ,sum(sal)
from emp group by deptno;
-- 查詢大於4個人的部門
-- 在where中不能加分組函數,where 必須放到group by前面
-- having 在分組的基礎上進一步的篩選
select count(1),deptno from emp group by deptno having count(1) > 4;
練習
?
1. 查詢和smith相同部門的員工姓名和僱用日期
select ename,hiredate from emp where deptno=(select deptno from emp where ename=upper(smith))
2. 查詢工資比公司平均工資高的員工的員工號,姓名和工資。
select empno,ename,sal from emp where sal> (select avg(sal) from emp)
?
3. 查詢各部門中工資比本部門平均工資高的員工的員工號, 姓名和工資
select empno,ename,sal,deptno from emp where sal>(select avg(sal) from emp where deptno=20)and deptno!=20
?
4. 查詢和姓名中包含字母U的員工在相同部門的員工的員工號和姓名
select empno,ename from emp where deptno=(select deptno from emp where ename like %U%)
?
5. 查詢領導是King的員工姓名和工資
select ename,sal from emp where mgr= (select empno from emp where ename=KING)
?
推薦閱讀:
TAG:甲骨文(Oracle) | 計算機科學 | Java程序員 |