AJAX的封裝和二次封裝
阿新 • • 發佈:2021-01-21
一、函式
-
內建函式
-
單行函式
字元函式,數字函式,日期函式,轉換函式
-
多行函式
-
統計函式(最大,最小,平均值,求和,計數)
-- 有多少員工(計數)
SELECT COUNT(*) FROM emp;
-- 最高工資
SELECT MAX(sal) FROM emp;
-- 最低工資
SELECT MIN(sal) FROM emp;
-- 平均工資
SELECT AVG(sal) FROM emp;
-- 求每個部門的最高,最低,平均工資,人數,工資總和
SELECT deptno,MAX(sal),MIN(sal),AVG(sal),SUM(sal),COUNT(*) FROM emp GROUP BY deptno HAVING deptno IS NOT NULL;
-- 刪除員工表裡部門為空的員工
DELETE FROM emp WHERE deptno IS NULL;-- group by having 過濾條件,having是在分組之後,根據其結果再過濾
-- 分組和統計是相關的,使用的比較多,having只能跟在分組後,不能單獨使用
-- SQL優化:儘量在分組前過濾資料,而不是在分組後過濾資料
-
nv1(x1,x2)函式:如果x1為null,則值為x2
-- 將員工中獎金為空的換成0
SELECT nv1(comm,0) FROM emp; -
nv3(x1,x2,x3)函式:如果值是x1,則返回x2,否則的話返回x3
-- 將員工有獎金的置為1,沒獎金的置為0
select nv2(comm,1,2) from emp;-- nvl是解決空值的問題,nvl2也是空值的問題,區別是nvl2當引數1不為空時提供了額外的
-
decode函式:相當於switch選擇語句
常用作報表的處理
-- 如果job = 'CLERK',則顯示為店員,如果job = 'SALESMAN',則顯示為業務員...
SELECT DECODE(job,'CLERK','店員','SALESMAN','業務員','MANAGER','經理','PRESIDENT','董事長','ANALYST','分析員','未知') FROM emp;
-- 60到80為普通,80到90為良好,90到100為優秀
SELECT decode(trunc(&cj/10),6,'普通',7,'普通',8,'良好',9,'優秀',10,'優秀','不及格') FROM dual;
-
-
sum和decode的應用:行轉列
CREATE TABLE t_score(NAME VARCHAR(10),course VARCHAR(10),score NUMBER(4,1));
INSERT INTO t_score VALUES('趙一','Java',100);
INSERT INTO t_score VALUES('趙一','C',96);
INSERT INTO t_score VALUES('趙一','C++',85);
INSERT INTO t_score VALUES('錢一','Java',95);
INSERT INTO t_score VALUES('錢一','C',84);
INSERT INTO t_score VALUES('錢一','C++',93);
SELECT NAME,SUM(score) 總成績, SUM(DECODE(course,'Java',score)) JAVA,SUM(DECODE(course,'C',score)) C,SUM(DECODE(course,'C++',score)) CPlus FROM t_score GROUP BY NAME;-- 用sum函式把多行資料統計起來,一個sum是一列
-
應用
-- 建一個居民收入表,1-12月,每月輸入它的工資,表中有居民姓名name
CREATE TABLE resident(NAME VARCHAR(6) NOT NULL,r_month number(2) NOT NULL,sal NUMBER(8) NOT NULL);
INSERT INTO resident VALUES('趙一',1,10000);
INSERT INTO resident VALUES('趙一',2,10500);
INSERT INTO resident VALUES('趙一',3,9000);
INSERT INTO resident VALUES('趙一',4,10030);
INSERT INTO resident VALUES('趙一',5,10500);
INSERT INTO resident VALUES('趙一',6,10000);
INSERT INTO resident VALUES('趙一',7,12000);
INSERT INTO resident VALUES('趙一',8,10500);
INSERT INTO resident VALUES('趙一',9,10800);
INSERT INTO resident VALUES('趙一',10,10900);
INSERT INTO resident VALUES('趙一',11,10010);
INSERT INTO resident VALUES('趙一',12,10800);
SELECT * FROM resident;
DROP TABLE resident;
-- 顯示每個人每月的工資,以列的形式顯示,2020我國的平均收入是40000元左右,顯示該居民是否達到或拖後腿
SELECT NAME,SUM(DECODE(r_month,1,sal)) 一月,
SUM(DECODE(r_month,2,sal)) 二月,
SUM(DECODE(r_month,3,sal)) 三月,
SUM(DECODE(r_month,4,sal)) 四月,
SUM(DECODE(r_month,5,sal)) 五月,
SUM(DECODE(r_month,6,sal)) 六月,
SUM(DECODE(r_month,7,sal)) 七月,
SUM(DECODE(r_month,8,sal)) 八月,
SUM(DECODE(r_month,9,sal)) 九月,
SUM(DECODE(r_month,10,sal)) 十月,
SUM(DECODE(r_month,11,sal)) 十一月,
SUM(DECODE(r_month,12,sal)) 十二月,
DECODE(TRUNC(SUM(sal)/40000),0,'拖後腿','合格') 是否合格
FROM resident r GROUP BY NAME;
-
-
SQL的遞迴
-
查出一個奶牛場某頭奶牛的所有後代和父輩
-- 第一代奶牛的父非為0
insert into cow values(1,0);
insert into cow values(100,1);
insert into cow values(101,1);
insert into cow values(800,100);
insert into cow values(902,101);
insert into cow values(2,0);
insert into cow values(302,2);
-- 找id為1的父輩和字輩
-- 從id為1開始,找兒子:當前id等於下一行的parent_id,找父親:當前id的parent_id等於下一個要找的id
SELECT * FROM cow START WITH ID=1 CONNECT BY PRIOR ID = parent_id;
-
二、作業
一個公司有很多部門有上級部門
一個員工有他所在的部門,根據員工編號找到他所在的所有上級部門。
編號 | 姓名 | 部門 |
---|---|---|
1 | 張三 | 301 |
2 | 李四 | 401 |
編號 | 名稱 | 上級部門 |
---|---|---|
301 | 財務部 | 11 |
11 | 集團中心 | 2 |
2 | 財務總監 | 0 |
顯示出張三的上級部門:財務部,集團中心,財務總監