| 內容簡介 |
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/ 本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。 |
