內容簡介 |
1,Demo ,函數練習,涉及的用戶有scott。2,Demo 聚合函數、分組、字符串連接。
技術與環境 |
操作系統: |
windows |
語言類別: |
SQL之PL/SQL |
thankyou: | sunshine, 謝謝你的默默付出 | 數據庫: |
Oracle |
學習軟件: |
Oracle 10g |
||
課程總策划: |
yuanbo |
English name: |
sunshine |
個人主頁: |
http://www.cnblogs.com/ylbtech/ |
||
科研團隊: |
ylbtech |
教研團隊: |
ylbtech |
1,Demo ,函數練習,涉及的用戶有scott |
--============================================ ---ylb:Oracle --15:29 2011-12-30 --1,函數練習,涉及的用戶有scott --============================================ --1,例:提取 7654 號雇員姓名的 2-4位 SQL> select substr(ename,2,3) from emp where empno=7654; --2,round函數的使用。 SELECT ROUND(2.3) FROM DUAL; SELECT ROUND(2.6) FROM DUAL; --3,to_char --以貨幣形式顯示sal列 SELECT TO_CHAR(SAL,'$99,999,999') FROM EMP; SELECT TO_CHAR(SAL,'L99,999,999') FROM EMP; SELECT TO_CHAR(SAL,'L00,000,000') FROM EMP; --顯示時間 SELECT TO_CHAR(SYSDATE,'YYYY-MM-DD HH:MI:SS') FROM DUAL; SELECT TO_CHAR(SYSDATE,'YYYY"年"MM"月"DD"日"') FROM DUAL; --4,to_date --查找入職時間在1981-4-01后的員工: SELECT * FROM EMP WHERE HIREDATE>TO_DATE('1981-4-01','YYYY-MM-DD'); --5,nvl函數 --求員工的年薪 SELECT SAL*12+NVL(COMM,0) FROM EMP; --6.找出收取佣金的員工的不同工作. SELECT DISTINCT JOB FROM EMP WHERE COMM IS NOT NULL; --7.找出各月倒數第3天受雇的所有員工. SELECT * FROM EMP WHERE HIREDATE=LAST_DAY(HIREDATE)-2; --8.找出早於27年前受雇的員工. SELECT * FROM EMP WHERE FLOOR(FLOOR(MONTHS_BETWEEN(SYSDATE,HIREDATE))/12)>27 --9.以首字母大寫的方式顯示所有員工的姓名. SELECT INITCAP(ENAME) FROM EMP; --10.顯示正好為5個字符的員工的姓名. SELECT ENAME FROM EMP WHERE LENGTH(ENAME)=5; --11.顯示不帶有"T"的員工的姓名. SELECT ENAME FROM EMP WHERE ENAME NOT LIKE '%T%'; --12.顯示所有員工的姓名,用a替換所有"A" SELECT REPLACE(ENAME,'A','a') FROM EMP; --13.顯示滿10年服務年限的員工的姓名和受雇日期. SELECT * FROM EMP WHERE FLOOR(FLOOR(MONTHS_BETWEEN(SYSDATE,HIREDATE))/12)>10; --14.顯示所有員工的姓名、加入公司的年份和月份 --,按受雇日期所在月排序 --,若月份相同則將最早年份的員工排在最前面. SELECT TO_CHAR(HIREDATE,'YYYY-MM') FROM EMP; --15.顯示在一個月為30天的情況所有員工的日薪金,忽略余數. --16.找出在(任何年份的)2月受聘的所有員工。 --p:17.對於每個員工,顯示其加入公司的天數. SELECT TRUNC(SYSDATE-HIREDATE) FROM EMP; --18.以年月日的方式顯示所有員工的服務年限. (大概) --19 decode()函數: 顯示員工編號,姓名,月薪及月薪等級: 要求800= 初級 1600= 中級 3000= 高級 其余月薪顯示其他 SELECT DECODE(SAL,800,'初級','其它') FROM EMP; -- SELECT DECODE(SAL,800,'初級', DECODE(SAL,1600,'中級', DECODE(SAL,3000,'高級','其它'))) FROM EMP; --20sign函數 顯示員工編號,姓名,月薪及月薪等級: 要求1----999 初級 1000----2999 中級 3000----3999 高級 4000----超級 SELECT DECODE(SIGN(SAL-1000),-1,'初級','其它') FROM EMP; -- SELECT DECODE(SIGN(SAL-1000),-1,'初級', DECODE(SIGN(SAL-3000),-1,'中級', DECODE(SIGN(SAL-4000),-1,'高級','超級'))) FROM EMP;
2,Demo 聚合函數、分組、字符串連接 |
--======================================================== --ylb:Oracle --17:13 2011-12-30 --1,基於scott用戶 --2,聚合函數 --3,分組 --4,聚合函數和分組的結合 --5,字符串連接 --======================================================== 1,運行產生表格, set pagesize 30; set linesize 120; 2,字段連接。使用||符號 SQL> select '編號:'||empno||',姓名:'||ename 情況 from emp; 3,分組函數: count group by max min等 <1> count : 計數 a.統計表記錄數 SQL> select count(*) from emp; b.統計comm字段不為空的記錄數 SQL> select count(*) from emp; 總結:count(列)不計算null <2> group by ... having .... 分組篩選 一旦涉及group by,記住兩點:1,select后面只能跟分組列及聚合函數,2,where前 group by中 having在后,順序不能變,where篩選的是記錄,having篩選的是組。 --例子: 將班級中及格的同學按性別分組,找到平均分在80分以上的組 select 性別,count(*),sum(成績),avg(成績),max(成績),min(年齡) from 學生表 where 成績>=60 group by 性別 having avg(成績)>80 a. 統計每個部門的最高工資 SQL> select deptno,max(sal) from emp group by deptno; b. 統計每個部門的最高工資 ,顯示其中最高工資大於2900的部門 SQL> select max(sal) ,deptno from emp group by deptno having max(sal)>2900; ---- -- ---- c. 統計工資在2900元以上的所有員工所在部門的最高工資 , 顯示其中最高工資大於4000的部門 SQL> select deptno,max(sal) from emp where sal>2900 group by deptno having max(sal)>4000; <3> max min avg a.顯示所有員工中的最高工資 SQL> select max(sal),ename from emp; b.顯示不同工種的最高工資 SQL> select max(sal),job from emp group by job; c.顯示不同部門的平均工資,並保留兩位小數 SQL> select deptno,round(avg(sal),2) from emp group by deptno; <4> distinct 消除重復記錄 SQL> select distinct job from emp;
![]() |
作者:ylbtech 出處:http://ylbtech.cnblogs.com/ 本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。 |