? ? ? ?因公司業(yè)務(wù)需求瞎颗,需要使用Oracle數(shù)據(jù)庫(kù)坐搔,因?yàn)橹岸际怯肕ySQL做簡(jiǎn)單的處理,現(xiàn)在特意找了個(gè)教程系統(tǒng)學(xué)習(xí)下Oracle數(shù)據(jù)庫(kù)漠嵌。這里記錄下學(xué)習(xí)過程:一咐汞,方便今后自己查閱;二儒鹿,激勵(lì)自己學(xué)下去化撕;三,也方便后來者有個(gè)參考约炎。
關(guān)于版本:感覺不重要植阴,Oracle的核心功能肯定不會(huì)怎么變的。這里還是說明下圾浅,本日志使用的Oracle版本是10g(11g也可以)掠手,至于更新的版本12c等,問題應(yīng)該都不大狸捕。
一喷鸽、基本查詢
1.查看當(dāng)前用戶:
????show user
2.查看當(dāng)前用戶下的表
????select * from tab;
????-->tab是管理員提供的表
3.查詢所有的員工信息
????select * from emp;
????補(bǔ):sqlplus提供的命令(不用加分號(hào)結(jié)束,當(dāng)然加了也沒事灸拍,一般長(zhǎng)詞還有縮寫)
????????--1.設(shè)置行寬
????????????set linesize 150
? ? ????--2.設(shè)置頁(yè)面大小(展示多少條記錄)
? ? ? ? ????set pagesize 30
????????--3.設(shè)置列寬
????????????col ename for a8
????????????col sal for 9999
????????--4.c命令:change,修改命令行敲錯(cuò)的代碼
????????--5.ed命令:edit魁衙,會(huì)打開系統(tǒng)默認(rèn)的記事本报腔,并將上一段sql命令放進(jìn)去
????????????????????????????修改完成后ctrl+s保存,關(guān)閉記事本剖淀。使用“/”執(zhí)行剛才的命令
????????--6.spool:輸出在sqlplus里的命令和結(jié)果
????????????SQL>spool c:\test.txt
????????????SQL>命令1
????????????SQL>結(jié)果1
????????????……
????????????SQL>命令n
????????????SQL>結(jié)果n
????????????SQL>spool off
????????????則這中間的所有信息都會(huì)被保存在c:\test.txt文件中
????????--7.save:保存上一條sql命令到本地
????????????SQL>命令1
????????????SQL>save c:\a.sql
????????????則命令1就被保存在a.sql里了
????????????SQL>@c:\a.sql
????????????可以執(zhí)行剛剛保存的命令
????????--8.清屏命令
????????????host cls:清除頁(yè)面上的顯示
????????--9.查看表結(jié)構(gòu)
????????????desc 表名/describe 表名
4.通過列名查詢
????select empno,ename,job,mgr,hiredate,sal,comm,deptno from emp;
????補(bǔ):sql優(yōu)化
????????????1. 盡量使用列名取代*: 9i之前纯蛾,可以列名號(hào)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?9i之后:? 可以認(rèn)為是一樣的
5.別名
????select empno as "員工號(hào)",ename "姓名",sal 月薪, sal*12 年薪 from emp
????注意:別名加雙引號(hào)和不加雙引號(hào)的區(qū)別:
? ? ? ? ? ? ? ?1)不加雙引號(hào)的別名中間不能有空格
????????????????對(duì)的: select empno as "員工號(hào)",ename "姓名",sal "月? 薪", sal*12 年薪 from emp;
????????????????錯(cuò)的: select empno as "員工號(hào)",ename "姓名",sal 月? 薪, sal*12 年薪 from emp;
? ?????????????2)不加雙引號(hào)的別名不能以數(shù)字開頭
????????????????對(duì)的: select empno as "1員工號(hào)" from emp;
????????????????錯(cuò)的: select empno as 1員工號(hào) from emp;
????補(bǔ):關(guān)于SQL中null值:
????????1. 包含null的表達(dá)式都為null,如果需要可以考慮濾空函數(shù)nvl或者nvl2
????????2. 在SQL中,null永遠(yuǎn)不等于null
????????????錯(cuò)的:where comm=null
????????????對(duì)的:where comm is null / where comm is not null
6.DISTINCT 去掉重復(fù)記錄
????select DISTINCT deptno from emp
????注意:DISTINCT作用于多列
? ? ? ? ? ? ? ?select DISTINCT deptno,job from emp
? ? ? ? ? ? ? ?這條命令只會(huì)去除deptno和job都相同的行
7.連接符||
????select concat('hello',' world') from dual纵隔;
????等價(jià)于
????select 'hello'||' world' from dual;
????注意:oracle的select必須跟from,但像select sysdate查詢?nèi)掌谠趺崔k翻诉?
? ? ? ? ? ? ? ?oracle提供了dual偽表,可以寫作select sysdate from dual
????--查詢員工信息: ***的職位是***
????select ename||'的職位是'||job from emp;