Oracle:基本SQL


/*
--以下代碼是對emp表進行顯示寬度設置
col empno for 9999;
col ename for a10;
col job for a10;
col mgr for 9999;
col hiredate for a12;
col sal for 9999;
col comm for 9999;
col deptno for 99;
set pagesize 20;
 
--創建新表new_emp,復制emp表中的結構和數據到new_emp表中
create table xxx
as
select * from emp;
 
--刪除xxx表
drop table xxx purge;
*/
 
oracle數據庫服務器由二個部分組成:
A)數據庫(物理概念,底層是數據庫專用文件的集合)
B)數據庫實例(邏輯概念,只能能通過數據庫實例操作數據庫)
 
SQL
A) DML(數據操縱語言,例如:insert,update,delete,SELECT)
B)DDL(數據定義語言,例如:create table,drop table,alter table)
C) DCL(數據控制語言,例如:grant授予,revoke收權)
D) TCL(事務控制語言,例如:rollback,commit,事務開始)
 
-------------------------------------------------------------------------------------
 
以scott用戶和123456密碼進入oracle數據庫實例
sqlplus scott/123456;
 
退出sqlplus環境
exit
 
查詢scott用戶下的所有表
select * from tab;
 
查詢當前用戶是誰
show user;
 
設置顯示的列寬(字符型、日期型),10個字符寬度,a表示字符型
col ename for a12;
a12:表示顯示寬度為12個字符,a大小寫不敏感
 
執行最近一次的SQL語句,並不是SQLPLUS命令
/表示最近執行過的SQL語句
col ename for a10,它不是SQL語句,而是oracle提供的專用SQLPLUS工具中的命令
 
清屏
host cls;
 
SQLPLUS命令,可以簡寫,分號可省略
SQL語句,不可簡寫,必須以分號結束
 
查詢emp表的結構
desc emp;
 
數字型:number
字符型:varchar2
日期型:date
 
查詢emp表的所有內容
select * from emp;
 
設置顯示的列寬(數字型),9表示數字型,一個9表示一個數字位,四個9表示四個數字位
col empno for 999999;
col表示:column
empno表示:列名
for表示:format
999999:表示顯示6個字符寬度,只用於數字
 
設置在一頁中最多顯示20條記錄
set pagesize 20;
 
查詢emp表的員工編號,姓名,工資,部門號
select empno,ename,job,deptno from emp;
 
查詢emp表的不重復的工作
select distinct job from emp;
 
select distinct job,sal from emp;
最終由job和sal的笛卡爾積決定
 
查詢員工的編號,姓名,月薪,年薪(月薪*12)
select empno,ename,sal,sal*12 from emp;
 
修改最近的一條SQL語句
edit;
 
查詢員工的編號,姓名,月薪,年薪,年收入(年薪+獎金有空值)
 
NULL運算數字=NULL
 
解決null的問題,使用NVL()函數,NVL(a,b):如果a是空,用b替代
 
null!=0
null!=空白字符串
 
使用別名,查詢員工的編號,姓名,月薪,年薪,年收入(年薪+獎金)
 
select empno "編號",ename "姓名",sal "月薪",sal*12 "年薪",sal*12+NVL(comm,0) "年收入"
from emp;//正確
 
使用字符串連接符號,輸出"hello world",使用dual表
 
dual表是oracle為了拼一些語言,而設計的一個啞表。
因為oracle語法,有select子句,必須有from子句
 
顯示系統當前時間
select now()這是mysql的語法
select sysdate from dual;
 
使用字符串連接符號,顯示如下格式信息:xxxx的薪水是yyyy
select ename || '的薪水' || sal "薪水情況" from emp;
 
保存SQL語句到文件,並創建sql文件
spool d:\1234.sql;
 
保存SQL語句及其執行的結果
spool off;
 
執行文件中的sql語句,該文件必須是*.sql文件
@ d:\1234.sql;
 
單行注釋
--
 
多行注釋
/**/
 
SQL vs SQLPLUS
 
SQL
1)語言
2)ANSI標准
3)關健字不可縮寫
4)必須是分號結束
5)更新表中的數據
 
SQLPLUS
1)環境,命令
2)是Oracle的特征之一
3)關健字可縮寫
4)分號可有可無
5)不能更新表中的數據
 
HTML:<!-- -->
JSP: <%-- --%>
XML: <!-- -->
Pros:#
Java:
 A)//
 B)/* */
 C)/** */
MySQL:#
Oracle:
 A)--
 B)/* */
JS:
 A)//
 B)/* */
CSS:
 /* */
-------------------------------------------------------------------------------------
查詢20號部門的員工
select * from emp where deptno=20;
 
查詢姓名是SMITH的員工,字符串值,大小寫敏感
select * from emp where ename='SMITH';
不敏感:表名、字段名,'A'
敏感:字符串常量值
 
查詢1980年12月17日入職的員工,"17-12月-80"滿足oracle默認日期格式(DD-MON-RR表示2位的年份)
select * from emp where hiredate='17-12月-80';
 
查詢工資大於1500的員工
select * from emp where sal > 1500;
 
查詢薪水在1300到1600之間的員工,包括1300和1600
select * from emp where sal between 1300 and 1600;
 
查詢入職時間在"20-2月-81"到"23-1月-82"之間的員工
select * from emp where hiredate between '20-2月-81' and '23-1月-82';
 
查詢20號或30號部門的員工
select * from emp where deptno in(20,30);
select * from emp where deptno = 20 or deptno = 30;
 
查詢姓名以"S"開頭的員工
select * from emp where ename like 'S%';
 
%表示:0個,1個,多個字符
 
_表示:1個字符
 
查詢姓名以"N"結束的員工,%表示0個,或多個字符
select * from emp where ename like '%N';
 
查詢姓名是4個字符的員工,_下划線只能表示1個字符
select * from emp where ename like '____';
 
查詢員工姓名中含有'_'的員工,讓\后的字符回歸本來意思【like '%\_%' escape '\'】
select * from emp where ename like '%a%';
 
查詢佣金為null的員工
select * from emp where comm is null;
 
查詢無佣金且工資大於1500的員工
select * from emp where sal>1500 and comm is null;
 
查詢工資是1500或,3000或5000的員工
select * from emp where sal in (1500,3000,5000);
 
查詢職位是"MANAGER"或職位不是"ANALYST"的員工(方式一)
select * from emp where job='MANAGER' or not job = 'ANALYST';
 
查詢職位是"MANAGER"或職位不是"ANALYST"的員工(方式二)
select * from emp where job='MANAGER' or job !='ANALYST';
 
查詢員工信息(編號,姓名,月薪,年薪),按月薪升序排序,默認升序
select empno 編號,ename 姓名,sal 月薪,sal*12 年薪 from emp order by sal;
 
查詢員工信息,按入職日期降序排序
select * from emp order by hiredate desc;
 
查詢員工信息,按佣金升序或降序排列,null值看成最大值
select * from emp order by comm desc;
select * from emp order by comm asc;
 
查詢員工信息,按工資降序排列,相同工資的員工再按入職時間升序排列
select * from emp order by sal asc,hiredate desc;
 
查詢20號部門,且工資大於1500,按職入時間降序排列
select * from emp where deptno=20 and sal>1500 order by hiredate asc;
-------------------------------------------------------------------------------------
測試lower/upper/initcap函數
 
測試concat/substr函數,從1開始 字符串連接,截取
select concat('hello','world') from dual; 引號需要小寫,一般可以使用||來連接
select 'hello' || 'world' from dual;
select substr('helloworld',1,5) from dual;
 
測試length/lengthb函數,前提是,裝oracle時,編碼方式為UTF-8,一個中文占3個Byte長度
select length('hahahahah寶貝') from dual;
select lengthb('hahahahah寶貝') from dual;
 
測試instr/lpad/rpad函數 計算w所在位置,從左邊填充,從右邊填充
select instr('woaini','a') from dual;
select lpad('a',10,'@') from dual;
select rpad('a',10,'*') from dual;
 
測試trim/replace函數 去處指定字符,替換指定字符
select trim('w' from 'wwwwwhahawwww') from dual;
select replace('foryangjin','yangjin','baobei') from dual;
 
測試round/trunc/mod函數 四舍五入,截取,取余
select round(95.126999,3) from dual;
select trunc(95.126999,1) from dual;
select mod(100,3) from dual;
測試round作用於當前時間(month)
select round(sysdate,'month') from dual;
 
測試trunc作用於當前時間(month)
12-3月-13
select trunc(sysdate,'month') from dual;
 
測試trunc作用於當前時間(year)
select trunc(sysdate,'year') from dual;
 
round和trunc除了用在數值型,也能用在日期型。
 
測試sysdate,默認情況下,只顯示日期部份,格式為:日-月-2位的年
select sysdate from dual;
 
顯示昨天,今天,明天的日期,日期類型只能+-數值
select sysdate-1 昨天,sysdate 今天,sysdate+1 明天 from dual;
 
以年和月形式顯示員工近似工齡,只能日期-日期=數值
select ename 姓名,(sysdate-hiredate)/365 近似年工齡,(sysdate-hiredate)/30 近似月工齡 from emp;
 
使用months_between函數,計算到年底還有多少個月
select months_between('31-12月-13',sysdate) from dual;
 
使用months_between函數,以精確月形式顯示員工工齡
select ename 姓名,months_between(sysdate,hiredate) as 員工精確工齡 from emp;
 
測試add_months函數
select add_months(sysdate,1) from dual;
 
測試next_day函數,從今天開始算,下一個星期三是多少號?【中文平台】
select next_day(sysdate,'星期日') from dual;
 
測試last_day函數,本月最后一天是多少號?
select last_day(sysdate) from dual;
 
測試last_day函數,下一個月最后一天是多少號?
select last_day(add_months(sysdate,1)) from dual;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM