SQL_DML语句基础知识(一)

来源:互联网 发布:网页美工急聘招聘 编辑:程序博客网 时间:2024/05/20 18:33

1.去除重复的行:

SELECT DISTINCT ename FROM emp;

2.连接表达式

SELECT ename||'的部门号是'||deptno FROM emp;

3.处理NULL

SELECT NVL(ename,'noname') FROM emp; --如果某行ename为空则显示noname,不为空则显示ename的值.

4.日期类型显示格式

如果表arwen中列birthday为date类型

SELECT TO_CHAR(birthday,'YYYY-MM-DD') FROM arwen

5.WHERE 子句中的BETWEEN ..AND

相当于大于等于且小于等于

6.LIKE模糊查询.%表示0到多个字符_表示单个字符

7.转义字符:

如果表中有%,_这样的符号需要用到转义字符\

假如表arwen中的ename是a%name.查找

SELECT * FROM arwen WHERE ename LIKE 'a\%name';

也可以这样写SELECT * FROM arwen WHERE ename LIKE 'as%name' ESCAPE 's'; --s可以替换成其他任何字符

8.多列排序:

排序中NULL被当作最大值处理

SELECT ename,deptno,sal FROM emp

ORDER BY ename ASC,sal DESC;      --ASC表示升序,默认都是按升序.DESC降序.此处表示先用名字排序.名字相同再用sal排序.

特殊情况:如果用UNION连接两个表,排序时不能指定列.只能用数字

SEELCT deptno,dname FROM dept

UNION

SELECT empno,ename FROM emp

ORDER BY 1 ;   --表示参照第一列来排序,如果写成2就是用第二列

9.分组函数

SELECT AVG(empno),SUM(empno),MAX(empno),MIN(empno),COUNT(empno) FROM emp;

--其中的分组函数分别表示平均值,总和,最大值,最小值,总行数

分组函数中NULL被忽略掉不在计算范围之类.所以如果empno为空则计算的不是整个表的总行数.而COUNT(*)总是表的总行数.

10.GROUP BY用法

上面的分组函数是应用于整个表,假如我们只计划表中某个部门的平均值等等.

SELECT deptno,AVG(sal) FROM emp

GROUP BY deptno;

如果想在大组中再分成小组计算.例如每个部门分组,再每个职位分组.

SELECT deptno,job,AVG(sal) avg_sal,FROM emp

GROUP BY ROLLUP(deptno,job);

 

DEPTNO                JOB              AGV_SAL    

-------------------------------------------------------------------

10                        CLERK            4500

10                         MANAGER      8500

10                                                 6500

20                          CLERK            5000

20                          MANAGER      9000 

20                                                  7000

                                                      6750

其中6500是部门10的平均工资,7000是部门20的平均工资.6750是两个部门的平均工资.

注意如果查询语句去年ROLLUP则加颜色的数字就不会出现.

SELECT deptno,job,AVG(sal) avg_sal,FROM emp

GROUP BY CUBE(deptno,job);

DEPTNO                JOB              AGV_SAL   

-------------------------------------------------------------------

10                        CLERK            4500

10                         MANAGER      8500

10                                                 6500

20                          CLERK            5000

20                          MANAGER      9000

20                                                  7000

                                                      6750

                              CLERK           4750

                               MANAGER     8750

 

如果只显示平均工资大于5000的职位:

SELECT deptno, job,AVG(sal) avg_sal  FROM emp

GROUP BY deptno,job

HAVING AVG(sal) >5000;

注意:如果HAVING改成WHERE会出错.WHERE子句中不能有分组函数

 

 

 

 

 

 

原创粉丝点击