Oracle: 四、函數,聚合函數,分組,字符串連接(中)


內容簡介

   1,Demo ,函數練習,涉及的用戶有scott2,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;

 

warn 作者:ylbtech
出處:http://ylbtech.cnblogs.com/
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。


免責聲明!

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



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