This commit is contained in:
xiangwb
2017-12-15 16:37:33 +08:00
parent 88b5cef561
commit 56fecc25c8
3 changed files with 147 additions and 174 deletions
@@ -1,12 +1,12 @@
SELECT语句
SELECT是用来查询数据的语句DQL
查询某张表中的所有字段的记录:
SELECT *FROM EMP_XWBING;
查看指定字段的值:
查询某张表中的所有字段的记录:
SELECT * FROM EMP_XWBING;
查看指定字段的值:
SELECT ename,sal,job FROM EMP_XWBING;
DQL必须包含的部分是SELECT子句与FROM子句
SELCET用来确定查询的字段,可以使用的有:表的字段,函数,表达式FROM子句来确定查询的表
SELCET用来确定查询的字段,可以使用的有:表的字段,函数,表达式FROM子句来确定查询的表
SELECT中使用表达式
查看每个员工的年薪
@@ -14,17 +14,17 @@ SELECT ename,sal*12 from emp_xwbing;
字符串函数
1:concat(p1,p2) 连接字符串
1:concat(p1,p2) 连接字符串
select concat(ename,sal) from emp_xwbing;
2:连接字符串简便方式:||,相当与java里的-+号,拼接作用
2:连接字符串简便方式:||,相当与java里的-+号,拼接作用
select ename||':'||sal from emp_xwbing;
LENGTH(p)函数,获取字符串长度
LENGTH(p)函数,获取字符串长度
SELECT ename,LENGTH(ename) FROM emp_xwbing;
UPPER,LOWER,INITCAP
将字符串转换为全大写,全小写,首字母大写
dual:伪表,当查询的内容与任何一张表中的数据无关时,可以查询伪表
将字符串转换为全大写,全小写,首字母大写
dual:伪表,当查询的内容与任何一张表中的数据无关时,可以查询伪表
SELECT UPPER('hello'),INITCAP('wo de')
FROM dual;
@@ -32,20 +32,20 @@ TRIM,LTRIM,RTRIM去除字符串两边指定字符
SELECT TRIM('E'FROM'EELRERE') FROM DUAL;去单
SELECT LTRIM('DSFRRA','SD')FROM DUAL;随便
LPAD,RPAD补位函数,若补位小于原长度,一律从左往右截
要求显示指定内容指定位数,若不足则补充若干指定字符以达到要显示的长度
LPAD,RPAD补位函数,若补位小于原长度,一律从左往右截
要求显示指定内容指定位数,若不足则补充若干指定字符以达到要显示的长度
SELECT ENAME,rPAD(SAL,5,'$') FROM EMP_XWBING;
SUBSTR截取字符串
截取给定字符串,从指定位置开始截取指定个字符,在数据库中,下标都是从1开始的!!!
截取给定字符串,从指定位置开始截取指定个字符,在数据库中,下标都是从1开始的!!!
SELECT SUBSTR('think in java',5,3) from dual;
SELECT SUBSTR('think in java',-4,3) from dual;
INETR(char1,char2[,n[,m]])
查找char2在char1中的位置
n为从指定位置开始查找,可以不写,
m为第几次出现,可以不写
n,m不写默认都是1
n为从指定位置开始查找,可以不写,
m为第几次出现,可以不写
n,m不写默认都是1
SELECT INSTR('think in java','in')from dual;
SELECT INSTR('think in java','in',2,2)from dual;
@@ -58,19 +58,19 @@ select ename,sal from emp_xwbing where substr(ename,1,1)='A';
数字函数
ROUND(n,[,m])对n进行四舍五入,保留到小数点后m位
m可以不写的,不写默认值为0
m为0则保留到整数位,-1为10位数,以此类推
ROUND(n,[,m])对n进行四舍五入,保留到小数点后m位
m可以不写的,不写默认值为0
m为0则保留到整数位,-1为10位数,以此类推
SELECT ROUND(45.678,2) FROM DUAL;
SELECT ROUND(45.678) FROM DUAL;
SELECT ROUND(45.678,-1) FROM DUAL;
TRUNC(N[,M])用于截取,用法跟ROUND一样,只是不四舍五入
TRUNC(N[,M])用于截取,用法跟ROUND一样,只是不四舍五入
SELECT TRUNC(45.678,2) FROM DUAL;
SELECT TRUNC(45.678) FROM DUAL;
SELECT TRUNC(45.678,-1) FROM DUAL;
MOD(m,n) 取余,返回m除以n后余数,n为0则直接返回m
MOD(m,n) 取余,返回m除以n后余数,n为0则直接返回m
SELECT ename,sal,mod(sal,1000) from emp_xwbing;
CEIL(N)和 FLOOR(N)向上取整和向下取整
@@ -79,12 +79,12 @@ SELECT FLOOR(44.5)FROM DUAL;
日期类型
DATE:7个字节,保存世纪,年月日时分秒
TIMESTAMP:时间戳,比DATE多4个字节,可以保存秒以下的精度,前7个字节与DATE一致
关键字:
SYSDATE:对应一个内置函数,返回一个表示当前系统时间的DATE类型值
DATE:7个字节,保存世纪,年月日时分秒
TIMESTAMP:时间戳,比DATE多4个字节,可以保存秒以下的精度,前7个字节与DATE一致
关键字:
SYSDATE:对应一个内置函数,返回一个表示当前系统时间的DATE类型值
DATE默认只显示'DD-MON-RR'
SYSTIMEATAMP:同样的,返回的是表示当前系统时间的时间戳类型的值
SYSTIMEATAMP:同样的,返回的是表示当前系统时间的时间戳类型的值
select sysdate from dual;
select systimestamp from dual;
@@ -93,50 +93,50 @@ TO_DATE函数
SELECT TO_DATE('1992-9-1 23:22:11','yyyy-mm-dd hh24:mi:ss') from dual;
SELECT TO_DATE('1992年9月1日 23:22:11','yyyy"年"mm"月"dd"日" hh24:mi:ss') from dual;
DATE是可以比较大小的,越晚的越大
查看82年以后入职的员工?
DATE是可以比较大小的,越晚的越大
查看82年以后入职的员工?
select ename,hiredate from emp_xwbing where hiredate>to_date('1982-1-1','yyyy-mm-dd');
DATE之间可以做减法,差为相差的天数
DATE之间可以做减法,差为相差的天数
select ename,sysdate-hiredate from emp_xwbing;
select trunc(sysdate-to_date('1990-5-11','yyyy-mm-dd')) from dual;
DATE可以和一个数字进行加减运算,相当与加减了指定的天数,返回值为对应的日期
7天后是那天?
DATE可以和一个数字进行加减运算,相当与加减了指定的天数,返回值为对应的日期
7天后是那天?
SELECT SYSDATE+7 FROM DUAL;
TO_CHAR
常用于转换日期,可以将日期按照指定的日期格式转换为字符串
常用于转换日期,可以将日期按照指定的日期格式转换为字符串
SELECT TO_CHAR(SYSDATE,'YYYY-MM-DD HH24:MI:SS') FROM DUAL;
SELECT TO_DATE('1992-9-1 23:22:11','RR-mm-dd hh24:mi:ss') from dual;
SELECT TO_CHAR(TO_DATE('99-09-01','RR-MM-DD'),'YYYY-MM-DD') FROM DUAL;
LAST_DAY(date) 该函数返回给定日期所在月的最后一天
查看当月月底?
查看当月月底?
SELECT LAST_DAY(SYSDATE) FROM DUAL;
查看每个员工入职所在月月底?
查看每个员工入职所在月月底?
SELECT ENAME,LAST_DAY(HIREDATE) FROM EMP_XWBING;
ADD_MONTHS(date,i) 返回日期加上i个月后的日期值
查看每个员工入职20周年的纪念日?
查看每个员工入职20周年的纪念日?
SELECT ENAME,ADD_MONTHS(HIREDATE,12*20) FROM EMP_XWBING;
MONTHS_BETWEEN(DATE1,DATE2) 计算两个日期之间相差的月,计算方式是使用date1-date2的结果换算的
查看每个员工入职几个月?
MONTHS_BETWEEN(DATE1,DATE2) 计算两个日期之间相差的月,计算方式是使用date1-date2的结果换算的
查看每个员工入职几个月?
SELECT ENAME,TRUNC(MONTHS_BETWEEN(SYSDATE,HIREDATE)) FROM EMP_XWBING;
NEXT_DAY(DATE,I)
返回给定日期之后一周内的周几,1代表星期天
SELECT NEXT_DAY(SYSDATE,1) FROM DUAL;
LEAST,GREATEST 求最大值和最小值, 这组函数的参数不限数量,两个以上即可
LEAST,GREATEST 求最大值和最小值, 这组函数的参数不限数量,两个以上即可
SELECT LEAST(SYSDATE ,TO_DATE('2008-2-2','YYYY-MM-DD')) FROM DUAL;
查看82年以后入职员工的入职日期,若是82年以前的,则显示为:1982-01-01?
查看82年以后入职员工的入职日期,若是82年以前的,则显示为:1982-01-01?
SELECT ENAME,GREATEST(HIREDATE,TO_DATE('1982-01-01','YYYY-MM-DD')) FROM EMP_XWBING;
EXTRACT(date from datetime)提取指定日期指定时间分量的值
SELECT EXTRACT(YEAR FROM SYSDATE) FROM DUAL;
查看81年入职的员工?
查看81年入职的员工?
SELECT ENAME,HIREDATE FROM EMP_XWBING WHERE EXTRACT(YEAR FROM HIREDATE)=1981;
CREATE TABLE STUDENT_XWBING(ID NUMBER(4),NAME CHAR(20),GENDER CHAR(1));
@@ -151,15 +151,15 @@ update student_xwbing set gender=null where gender='m';
NULL的运算
null与字符串连接等于什么都没做
null与数字运算结果还是null
查看每个员工的收入?
查看每个员工的收入?
SELECT ENAME,SAL,COMM FROM EMP_XWBING;
NVL(P1,P1) 若p1为null,函数返回p2. 若不为null,函数返回p1自身。所以该函数的作用是将null替代换为非null值
查看每个员工的收入?
SELECT ENAME,SAL,nvl(COMM,0) FROM EMP_XWBING;
SELECT ENAME,SAL,IFNULL(COMM,0) FROM EMP_XWBING;//MYSQL
NVL2(P1,P2,P3) 若p1不为null值为p2,p1为null值为p3
查看每个员工的奖金情况?
SELECT ENAME,SAL,nvl2(COMM,'有奖金','无奖金') FROM EMP_XWBING;
SELECT ENAME,SAL,IF(ISNULL(COMM),'无奖金','有奖金') FROM EMP_XWBING;//MYSQL isnull(字段) true返回1
NVL(P1,P1) 若p1为null,函数返回p2. 若不为null,函数返回p1自身.所以该函数的作用是将null替代换为非null值
查看每个员工的收入?
SELECT ENAME,SAL,SAL+nvl(BOUNS,0) FROM EMP_XWBING;
SELECT ENAME,SAL,IFNULL(BOUNS,0) FROM EMP_XWBING;//MYSQL
NVL2(P1,P2,P3) 若p1不为null值为p2,p1为null值为p3
查看每个员工的奖金情况?
SELECT ENAME,SAL,nvl2(BOUNS,'有奖金','无奖金') FROM EMP_XWBING;
SELECT ENAME,SAL,IF(ISNULL(BOUNS),'无奖金','有奖金') FROM EMP_XWBING;//MYSQL isnull(字段) true返回1
@@ -1,141 +1,144 @@
select *from emp_xwbing;
select *from dept_xwbing;
select 子句中 可以对字段加别名,别名前加空格或as,若希望别名区分大小写或者包含空格,可以使用双引号将别名括起来
SELECT 子句中 可以对字段加别名,别名前加空格或as,若希望别名区分大小写或者包含空格,可以使用双引号将别名括起来
SELECT ENAME,SAL*12 SAL FROM EMP_XWBING;
select ename,sal*12 "s al"from emp_xwbing;
SELECT ename,sal*12 AS "s al" FROM emp_xwbing;
select *from emp_xwbing where deptno=20;
select *from emp_xwbing where job='CLERK';
查询条件:
查询条件:
<>不等于
select ename,sal from emp_xwbing where sal<2000;
select * from emp_xwbing where deptno<>10;
select * from emp_xwbing where hiredate<to_date('1981-1-1','yyyy-mm-dd');
SELECT ename,sal FROM emp_xwbing WHERE sal<2000;
SELECT * FROM emp_xwbing WHERE deptno<>10;
SELECT * FROM emp_xwbing WHERE hiredate<to_date('1981-1-1','yyyy-mm-dd');
AND OR 与和或 AND优先级高于or
select *from emp_xwbing where sal>1000 and job='CLERK';
SELECT *FROM emp_xwbing where sal>1000 OR job='CLERK';
select *from emp_xwbing where sal>1000 and (job='CLERK' OR JOB='SALESMAN');
SELECT * FROM emp_xwbing WHERE sal>1000 AND job='CLERK';
SELECT * FROM emp_xwbing WHERE sal>1000 OR job='CLERK';
SELECT * FROM emp_xwbing WHERE sal>1000 AND (job='CLERK' OR JOB='SALESMAN');
LIKE 模糊查询
%:0到多个字符
%:0到多个字符
_:表示单个字符
select ename from emp_xwbing where ename like '_A%';
select ename from emp_xwbing where ename like '_L_E%';
SELECT ename FROM emp_xwbing WHERE ename LIKE '_A%';
SELECT ename FROM emp_xwbing WHERE ename LIKE '_L_E%';
SELECT ENAME FROM EMP_XWBING WHERE ENAME LIKE '%E_';
IN(list), NOT IN(list)
判断是否在列表中,常用在子查询中
SELECT *FROM EMP_XWBING WHERE JOB IN('CLERK','SALESMAN');
判断是否在列表中,常用在子查询中
SELECT * FROM EMP_XWBING WHERE JOB IN('CLERK','SALESMAN');
BETWEEN...AND...之间
select sal from emp_xwbing where sal between 1500 and 3000;
SELECT sal FROM emp_xwbing WHERE sal BETWEEN 1500 AND 3000;
is null ,is not null
IS NULL ,IS NOT NULL
ANY,ALL 需要配合> >= < <= 一个列表使用,常用于判断子查询的结果
select *from emp_xwbing where sal>all(2800,3000,1800);
SELECT * FROM emp_xwbing WHERE sal>all(2800,3000,1800);
select *from emp_xwbing where comm is not null and sal>1300;
select *from emp_xwbing where hiredate>to_date('1981-1-1','yyyy-mm-dd') and sal*12>30000;
SELECT * FROM emp_xwbing WHERE comm IS NOT NULL AND sal>1300;
SELECT * FROM emp_xwbing WHERE hiredate>to_date('1981-1-1','yyyy-mm-dd') AND sal*12>30000;
DISTINCT 过滤重复,必须跟在select后面。可以对多列去重,去重原则是这些列的组合没有重复
select distinct job from emp_xwbing;
select distinct job,deptno from emp_xwbing;
排序:
order by子句,只能定义在select语句中的最后一个子句上。
排序结果集,可以按照指定的字段进行升序或将序排列
可以对多列进行排序,排序具有优先级,先按照第一个字段排序方式排序,当第一个字段有重复值时再按照第二个字段排序方式排序,以次类推
若排序字段里含有null,null被视为最大值
asc:升序,可以不写,默认为升序
desc:降序
select ename ,sal from emp_xwbing order by sal;
select ename ,sal,deptno from emp_xwbing order by deptno,sal desc;
select ename from emp_xwbing order by ename;
order by field(字段,'','');//mysql
DISTINCT 过滤重复,必须跟在SELECT后面.可以对多列去重,去重原则是这些列的组合没有重复
SELECT DISTINCT job FROM emp_xwbing;
SELECT DISTINCT job,deptno FROM emp_xwbing;
聚合函数又称多行函数:用来统计结果的
max,min 统计最大值,最小值
查看最高工资?
select max(sal),min(sal) from emp_xwbing;
排序:
ORDER BY 子句,只能定义在SELECT语句中的最后一个子句上.
排序结果集,可以按照指定的字段进行升序或将序排列
可以对多列进行排序,排序具有优先级,先按照第一个字段排序方式排序,当第一个字段有重复值时再按照第二个字段排序方式排序,以次类推
若排序字段里含有NULL,NULL被视为最大值
ASC:升序,可以不写,默认为升序
DESC:降序
SELECT ename ,sal FROM emp_xwbing ORDER BY sal;
SELECT ename ,sal,deptno FROM emp_xwbing ORDER BY deptno,sal DESC;
SELECT ename FROM emp_xwbing ORDER BY ename;
ORDER BY field(字段,'','');//mysql
聚合函数又称多行函数:用来统计结果的
max,min 统计最大值,最小值
查看最高工资?
SELECT max(sal),min(sal) FROM emp_xwbing;
avg,sum 统计平均值与总和
查看平均工资和工资总和
select trunc(avg(sal)) avg,sum(sal) sum from emp_xwbing;
SELECT trunc(avg(sal)) avg,sum(sal) sum FROM emp_xwbing;
count 统计的是记录条数,而不关注具体该字段的取值,
查看公司员工人数?
select count(ename) from emp_xwbing;
统计表中记录数,常使用couont(*)
select count(*)from emp_xwbing;
count 统计的是记录条数,而不关注具体该字段的取值,
查看公司员工人数?
SELECT count(ename) FROM emp_xwbing;
统计表中记录数,常使用couont (*)
SELECT count(*) FROM emp_xwbing;
所有聚合函数忽略null值
select avg(nvl(comm,0)),sum(comm) from emp_xwbing;
分组:
GROUP BY子句
GROUP BY子句允许将结果集按照给定的字段值相同的额记录看作一组,然后配合聚合函数对每组记录进行统计
查看每个部门的最高工资?
select deptno from emp_xwbing group by deptno;
当select中含有聚合函数时,凡不在聚合函数中的单独字段都必须出现在GROUP BY子句中
查看每个职位的平均工资和工资总和?
select avg(sal), sum(sal) from emp_xwbing group by job;
查看每个部门各有多少人?
select count(ename),deptno from emp_xwbing group by deptno;
查看每个部门的平均工资,前提是该部门平均工资高于2000?
select avg(sal),deptno from emp_xwbing where avg(sal)>2000 group by deptno;
where中不允许使用聚合函数作为过滤条件,原因在于过滤时机不同。where的过滤时机是在第一次从表中检索数据是添加过滤条件,用来确定那些数据可以被查出来,以确定结果集
HAVING子句:having必须跟在group by 子句之后,可以使用聚合函数作为过滤条件。使之可以对分组进行过滤,将满足条件的分组保留,不满足的去掉
select avg(sal),deptno from emp_xwbing group by deptno having avg(sal)>2000;
所有聚合函数忽略NULL值
SELECT avg(nvl(comm,0)),sum(comm) FROM emp_xwbing;
关联查询:
查询的结果集中字段来自多张表,联合多张表查询数据就是关联查询,在关联查询中需要在过滤条件中添加两张表中记录之间对应关系,这样的条件称为连接条件
n张表联合查询至少要有n-1个连接条件,不添加连接条件会产生迪卡尔积,除特殊情况下,该结果集通常是无意义的,并且由于数据量大,对系统资源消耗非常大。
查看每个员工的名字以及所在部门的名字?
select ename,dname from emp_xwbing,dept_xwbing where emp_xwbing.deptno=dept_xwbing.deptno;
分组:
GROUP BY 子句
GROUP BY 子句允许将结果集按照给定的字段值相同的额记录看作一组,然后配合聚合函数对每组记录进行统计
查看每个部门的最高工资?
SELECT deptno FROM emp_xwbing GROUP BY deptno;
当SELECT中含有聚合函数时,凡不在聚合函数中的单独字段都必须出现在GROUP BY子句中
查看每个职位的平均工资和工资总和?
SELECT avg(sal), sum(sal) FROM emp_xwbing GROUP BY job;
查看每个部门各有多少人?
SELECT count(ename),deptno FROM emp_xwbing GROUP BY deptno;
查看每个部门的平均工资,前提是该部门平均工资高于2000?
SELECT avg(sal),deptno FROM emp_xwbing WHERE avg(sal)>2000 GROUP BY deptno;
WHERE中不允许使用聚合函数作为过滤条件,原因在于过滤时机不同.WHERE的过滤时机是在第一次从表中检索数据是添加过滤条件,用来确定那些数据可以被查出来,以确定结果集
HAVING子句:having必须跟在 GROUP BY 子句之后,可以使用聚合函数作为过滤条件.使之可以对分组进行过滤,将满足条件的分组保留,不满足的去掉
SELECT avg(sal),deptno FROM emp_xwbing GROUP BY deptno having avg(sal)>2000;
关联查询:
查询的结果集中字段来自多张表,联合多张表查询数据就是关联查询,在关联查询中需要在过滤条件中添加两张表中记录之间对应关系,这样的条件称为连接条件
n张表联合查询至少要有n-1个连接条件,不添加连接条件会产生迪卡尔积,除特殊情况下,该结果集通常是无意义的,并且由于数据量大,对系统资源消耗非常大.
查看每个员工的名字以及所在部门的名字?
SELECT ename,dname FROM emp_xwbing,dept_xwbing WHERE emp_xwbing.deptno=dept_xwbing.deptno;
在关联查询中的过滤条件应当与连接体条件同时成立
查看sales部门的员工信息?
select ename,dname from emp_xwbing,dept_xwbing where emp_xwbing.deptno=dept_xwbing.deptno and dept_xwbing.dname='SALES';
查看sales部门的员工信息?
SELECT ename,dname FROM emp_xwbing,dept_xwbing WHERE emp_xwbing.deptno=dept_xwbing.deptno AND dept_xwbing.dname='SALES';
当查询过程中,出现字段在两张表中都有的情况时,必须明确该字段属于哪张表,表可以取别名
select e.ename,e.deptno,d.dname from emp_xwbing e,dept_xwbing d where e.deptno=d.deptno;
当查询过程中,出现字段在两张表中都有的情况时,必须明确该字段属于哪张表,表可以取别名
SELECT e.ename,e.deptno,d.dname FROM emp_xwbing e,dept_xwbing d WHERE e.deptno=d.deptno;
select e.ename ,d.dname from emp_xwbing e,dept_xwbing d where e.deptno=d.deptno and d.loc='NEW YORK';
查看平均工资高于2000的部门所在地?
select avg(e.sal), d.loc ,d.dname from emp_xwbing e,dept_xwbing d where e.deptno=d.deptno group by d.dname,d.loc having avg(e.sal)>2000;
SELECT e.ename,d.dname FROM emp_xwbing e,dept_xwbing d WHERE e.deptno=d.deptno AND d.loc='NEW YORK';
查看平均工资高于2000的部门所在地?
SELECT avg(e.sal), d.loc ,d.dname FROM emp_xwbing e,dept_xwbing d WHERE e.deptno=d.deptno GROUP BY d.dname,d.loc having avg(e.sal)>2000;
内连接:关联查询的另一种写法
查看sales部门员工信息?
select e.ename,d.dname from emp_xwbing e JOIN dept_xwbing d ON e.deptno=d.deptno where d.Dname='SALES';
内连接:关联查询的另一种写法
查看sales部门员工信息?
SELECT e.ename,d.dname FROM emp_xwbing e JOIN dept_xwbing d ON e.deptno=d.deptno WHERE d.dname='SALES';
外连接
外连接在进行关联查询时可以将不满足条件的记录也查询出来
外连接分为:左外连接,右外连接,全外连接
左外连接:以join左侧表作为驱动表,该表中所有记录全部会列出来,那么当某条记录不满足连接条件时,该记录中来自右侧表中字段的值为null
外连接分为:左外连接,右外连接,全外连接
左外连接:以join左侧表作为驱动表,该表中所有记录全部会列出来,那么当某条记录不满足连接条件时,该记录中来自右侧表中字段的值为NULL
SELECT e.ename,d.dname FROM emp_xwbing e LEFT JOIN dept_xwbing d ON e.deptno=d.deptno;
SELECT e.ename,d.dname FROM emp_xwbing e ,dept_xwbing d WHERE e.deptno=d.deptno(+);
SELECT e.ename,d.dname FROM emp_xwbing e LEFT|RIGHT|FULL JOIN dept_xwbing d ON e.deptno=d.deptno;
自连接
自连接指的是自己表中的记录对应自己表中的多条记录,建立的关联查询就是自连接
自连接设计用于解决数据相同,但是存在上下级关系的树状结构使用。
查看每个员工以及其上司的名字?
自连接指的是自己表中的记录对应自己表中的多条记录,建立的关联查询就是自连接
自连接设计用于解决数据相同,但是存在上下级关系的树状结构使用.
查看每个员工以及其上司的名字?
SELECT E.ENAME ,M.ENAME BOSS FROM EMP_XWBING E,EMP_XWBING M WHERE E.MGR=M.EMPNO(+);
JONES的手下?
SELECT E.ENAME FROM EMP_XWBING E,EMP_XWBING M WHERE E.MGR=M.EMPNO(+) and m.ename='JONES';
查看每个领导有几个手下?
SELECT count(e.mgr),m.ename FROM EMP_XWBING E,EMP_XWBING M WHERE E.MGR=M.EMPNO group by m.ename;
查看JONES的上司在哪个城市?
SELECT d.loc FROM EMP_XWBING E,EMP_XWBING M , dept_xwbing d WHERE E.MGR=M.EMPNO and m.deptno=d.deptno and e.ename='JONES' ;
JONES的手下?
SELECT E.ENAME FROM EMP_XWBING E,EMP_XWBING M WHERE E.MGR=M.EMPNO(+) AND m.ename='JONES';
查看每个领导有几个手下?
SELECT count(e.mgr),m.ename FROM EMP_XWBING E,EMP_XWBING M WHERE E.MGR=M.EMPNO GROUP BY m.ename;
查看JONES的上司在哪个城市?
SELECT d.loc FROM EMP_XWBING E,EMP_XWBING M , dept_xwbing d WHERE E.MGR=M.EMPNO AND m.deptno=d.deptno AND e.ename='JONES' ;
@@ -1,34 +1,4 @@
package com.xwbing.service;
import com.xwbing.util.RestMessage;
import org.apache.commons.lang3.StringUtils;
public class DemoService {
void setRemind(String id, String typeName, String remindDate, String type) {
RestMessage one = queryOne(id, typeName);
if (one != null) {
if (StringUtils.isNotEmpty(remindDate)) {
update();
} else {
delete();
}
} else {
if (StringUtils.isNotEmpty(remindDate)) {
save();
}
}
}
private RestMessage queryOne(String id, String typeName) {
return new RestMessage();
}
private void update() {
}
private void delete() {
}
private void save() {
}
}