sql demo
This commit is contained in:
@@ -36,7 +36,7 @@ LPAD,RPAD补位函数,若补位小于原长度,一律从左往右截
|
||||
要求显示指定内容指定位数,若不足则补充若干指定字符以达到要显示的长度
|
||||
SELECT ENAME,rPAD(SAL,5,'$') FROM EMP_XWBING;
|
||||
|
||||
SUBSTR截取字符串
|
||||
SUBSTR 截取字符串
|
||||
截取给定字符串,从指定位置开始截取指定个字符,在数据库中,下标都是从1开始的!!!
|
||||
SELECT SUBSTR('think in java',5,3) FROM dual;
|
||||
SELECT SUBSTR('think in java',-4,3) FROM dual;
|
||||
@@ -54,7 +54,7 @@ SELECT INSTR('think in java','in',2,2)FROM dual;
|
||||
|
||||
SELECT ENAME,SAL,DEPTNO FROM emp_xwbing WHERE LOWER(ENAME)='smith';
|
||||
SELECT ename,sal FROM emp_xwbing WHERE LENGTH(ename)=5;
|
||||
SELECT ename,sal FROM emp_xwbing WHERE substr(ename,1,1)='A';
|
||||
SELECT ename,sal FROM emp_xwbing WHERE SUBSTR(ename,1,1)='A';
|
||||
|
||||
|
||||
数字函数
|
||||
@@ -143,7 +143,7 @@ CREATE TABLE STUDENT_XWBING(ID NUMBER(4),NAME CHAR(20),GENDER CHAR(1));
|
||||
INSERT INTO STUDENT_XWBING VALUES(1000,'李莫愁','f');
|
||||
insert into student_xwbing values(1001,'林平之',NULL);
|
||||
insert into student_xwbing(id,name) values(1002,'张无忌');
|
||||
SELECT *FROM student_xwbing;
|
||||
SELECT * FROM student_xwbing;
|
||||
UPDATE student_xwbing SET gender='m' WHERE gender IS NULL;
|
||||
UPDATE student_xwbing SET gender=NULL WHERE gender='m';
|
||||
|
||||
@@ -157,9 +157,10 @@ SELECT ENAME,SAL,COMM FROM EMP_XWBING;
|
||||
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
|
||||
SELECT ENAME,SAL,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,NVL2(BOUNS,'有奖金','无奖金') FROM EMP_XWBING;
|
||||
IF(ISNULL(p1),p2,p3) 若p1为null
|
||||
SELECT ENAME,SAL,IF(ISNULL(BOUNS),'无奖金','有奖金') FROM EMP_XWBING;//MYSQL ISNULL(字段) true返回1
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
SELECT 子句中 可以对字段加别名,别名前加空格或as,若希望别名区分大小写或者包含空格,可以使用双引号将别名括起来
|
||||
SELECT ENAME,SAL*12 SAL FROM EMP_XWBING;
|
||||
SELECT ename,sal*12 AS "s al" FROM emp_xwbing;
|
||||
SELECT ENAME,SAL*12 SAL FROM EMP_XWBING;
|
||||
SELECT ename,sal*12 AS "S al" FROM emp_xwbing;
|
||||
|
||||
查询条件:
|
||||
<>不等于
|
||||
@@ -8,7 +8,7 @@ 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
|
||||
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');
|
||||
@@ -24,16 +24,16 @@ IN(list), NOT IN(list)
|
||||
判断是否在列表中,常用在子查询中
|
||||
SELECT * FROM EMP_XWBING WHERE JOB IN('CLERK','SALESMAN');
|
||||
|
||||
BETWEEN...AND...之间
|
||||
BETWEEN AND 之间
|
||||
SELECT sal FROM emp_xwbing WHERE sal BETWEEN 1500 AND 3000;
|
||||
|
||||
IS NULL ,IS NOT NULL
|
||||
|
||||
ANY,ALL 需要配合> >= < <= 一个列表使用,常用于判断子查询的结果
|
||||
SELECT * FROM emp_xwbing WHERE sal>all(2800,3000,1800);
|
||||
|
||||
IS NULL,IS NOT NULL
|
||||
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;
|
||||
|
||||
ANY,ALL 需要配合> >= < <= 一个列表使用,常用于判断子查询的结果
|
||||
SELECT * FROM emp_xwbing WHERE sal>ALL(2800,3000,1800);
|
||||
|
||||
|
||||
|
||||
DISTINCT 过滤重复,必须跟在SELECT后面.可以对多列去重,去重原则是这些列的组合没有重复
|
||||
SELECT DISTINCT job FROM emp_xwbing;
|
||||
@@ -51,49 +51,47 @@ 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
|
||||
SELECT * FROM emp_xwbing ORDER BY field(字段,'','');//mysql
|
||||
|
||||
|
||||
|
||||
|
||||
聚合函数又称多行函数:用来统计结果的
|
||||
max,min 统计最大值,最小值
|
||||
MAX,MIN 统计最大值,最小值
|
||||
查看最高工资?
|
||||
SELECT max(sal),min(sal) FROM emp_xwbing;
|
||||
SELECT MAX(sal),MIN(sal) FROM emp_xwbing;
|
||||
|
||||
avg,sum 统计平均值与总和
|
||||
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 统计的是记录条数,而不关注具体该字段的取值,
|
||||
COUNT 统计的是记录条数,而不关注具体该字段的取值,
|
||||
统计表中记录数,常使用 COUNT(*)
|
||||
查看公司员工人数?
|
||||
SELECT count(ename) FROM emp_xwbing;
|
||||
统计表中记录数,常使用couont (*)
|
||||
SELECT count(*) FROM emp_xwbing;
|
||||
SELECT COUNT (*) FROM emp_xwbing;
|
||||
|
||||
所有聚合函数忽略NULL值
|
||||
SELECT avg(nvl(comm,0)),sum(comm) FROM emp_xwbing;
|
||||
SELECT AVG(nvl(comm,0)),SUM(comm) FROM emp_xwbing;
|
||||
|
||||
|
||||
|
||||
|
||||
分组:
|
||||
GROUP BY 子句
|
||||
GROUP BY 子句允许将结果集按照给定的字段值相同的额记录看作一组,然后配合聚合函数对每组记录进行统计
|
||||
GROUP BY 子句允许将结果集按照给定的字段值相同的记录看作一组,然后配合聚合函数对每组记录进行统计
|
||||
查看每个部门的最高工资?
|
||||
SELECT deptno FROM emp_xwbing GROUP BY deptno;
|
||||
当SELECT中含有聚合函数时,凡不在聚合函数中的单独字段都必须出现在GROUP BY子句中
|
||||
SELECT MAX (sal),deptno FROM emp_xwbing GROUP BY deptno;
|
||||
当SELECT中含有聚合函数时,凡不在聚合函数中的单独字段都必须出现在 GROUP BY 子句中
|
||||
查看每个职位的平均工资和工资总和?
|
||||
SELECT avg(sal), sum(sal) FROM emp_xwbing GROUP BY job;
|
||||
SELECT AVG(sal), SUM(sal) FROM emp_xwbing GROUP BY job;
|
||||
查看每个部门各有多少人?
|
||||
SELECT count(ename),deptno FROM emp_xwbing GROUP BY deptno;
|
||||
SELECT COUNT(*),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;
|
||||
HAVING子句:HAVING必须跟在 GROUP BY 子句之后,可以使用聚合函数作为过滤条件.使之可以对分组进行过滤,将满足条件的分组保留,不满足的去掉
|
||||
SELECT AVG(sal),deptno FROM emp_xwbing GROUP BY deptno HAVING AVG(sal)>2000;
|
||||
|
||||
|
||||
|
||||
@@ -114,7 +112,7 @@ SELECT e.ename,e.deptno,d.dname FROM emp_xwbing e,dept_xwbing d WHERE e.deptno=d
|
||||
|
||||
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 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部门员工信息?
|
||||
@@ -136,7 +134,7 @@ SELECT E.ENAME ,M.ENAME BOSS FROM EMP_XWBING E,EMP_XWBING M WHERE E.MGR=M.EMPN
|
||||
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;
|
||||
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' ;
|
||||
|
||||
|
||||
@@ -29,20 +29,20 @@ SELECT * FROM EMP_XWBING;
|
||||
多行单列:常用在WHERE中(配合 IN,ANY,ALL)
|
||||
多行多列:常用在WHERE中作为表看待
|
||||
|
||||
查看比clerk和salesman部门工资都高的额员工?
|
||||
查看比clerk和salesman部门工资都高的员工?
|
||||
SELECT ename,sal FROM emp_xwbing WHERE sal>ALL(SELECT deptno FROM emp_xwbing WHERE job='SALESMAN' OR job='CLERK');
|
||||
查看和clerk相同部门的其他职位员工?
|
||||
SELECT ename FROM emp_xwbing WHERE deptno in (SELECT deptno FROM emp_xwbing WHERE JOB='CLERK');
|
||||
|
||||
EXISTS 关键字
|
||||
用在WHERE中,其后要根一个子查询,作用是若子查询至少可以查询出一条记录,那么exisets表达式返回真,NOT EXISTS则起到相反的作用,查不到数据则返回真
|
||||
用在WHERE中,其后要根一个子查询,作用是若子查询至少可以查询出一条记录,那么exisets表达式返回真,NOT EXISTS 则起到相反的作用,查不到数据则返回真
|
||||
产看有员工的部门?
|
||||
SELECT d.deptno,d.dname,d.loc FROM dept_xwbing d WHERE EXISTS(SELECT *FROM EMP_XWBING e WHERE e.deptno=d.deptno);
|
||||
没有下属的员工?
|
||||
SELECT n.ENAME FROM EMP_XWBING n WHERE NOT EXISTS(SELECT *FROM EMP_XWBING m WHERE N.EMPNO=M.MGR);
|
||||
|
||||
查询列出最低薪水高于部门30的最低薪水的部门的最低薪水?
|
||||
SELECT min(sal),deptno FROM emp_xwbing GROUP BY deptno having min(sal)>(SELECT min(sal) FROM emp_xwbing WHERE deptno=30 );
|
||||
SELECT min(sal),deptno FROM emp_xwbing GROUP BY deptno having min(sal)>(SELECT min(sal) FROM emp_xwbing WHERE deptno=30);
|
||||
|
||||
子查询在FROM部分:
|
||||
查看高于自己所在部门平均工资的员工信息?
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
CREATE OR REPLACE VIEW V_EMP_10_XWBING AS SELECT empno id,ename,sal*12 salary ,deptno FROM EMP_XWBING WHERE deptno=10 WITH READ ONLY;
|
||||
CREATE OR REPLACE VIEW V_EMP_10_XWBING AS SELECT empno id,ename,sal*12 salary ,deptno FROM EMP_XWBING WHERE deptno=10 WITH READ ONLY;
|
||||
CREATE OR REPLACE VIEW V_EMP_10_XWBING AS SELECT empno id,ename,sal*12 salary ,deptno FROM EMP_XWBING WHERE deptno=10 WITH CHECK OPTION;
|
||||
视图:
|
||||
数据库对象之一
|
||||
|
||||
Reference in New Issue
Block a user