SQL基础--基础查询的使用

来源:互联网 发布:韩国音乐软件 编辑:程序博客网 时间:2024/04/30 04:46

如果遇到没有创建的表影响运行使用

->点我进入表的创建与数据插入
或者评价反馈

DQL查询语句

SELECT子句中可以使用函数或表达式
那么结果集中对应的该字段名就是这个函数或表示式
可读性差,为此可以为字段添加别名
那么结果集就会以这个别名作为该字段的名字
别名的本身不区分大小写,而且不能含有空格,
若希望别名区分大小写或含有空格,
那么可以在别名上使用双引号括起来

 SELECT ename,sal*12 "sal" FROM emp_swm

查看工资高于1000的职位是:CLERK或SALESMAN

SELECT ename,sal,job FROM emp_swm
WHERE sal>1000 AND (job=’CLERK’ OR job=’SALESMAN’)

AND的优先级高于OR,可以通过括号

来提高OR的优先级

LIKE用于模糊匹配字符串,支持两个通配符

_:单一的一个字符
%:任意个字符

查看名字第二个字母是A最后一个字母是N的?

SELECT ename FROM emp_swm
WHERE ename LIKE ‘_A%N’

IN和NOT IN

判断是否在列表中或不在列表中

  SELECT ename,job FROM emp_swm  WHERE job IN('MANAGER','CLERK')  SELECT ename,job,deptno FROM emp_swm  WHERE deptno NOT IN(10,20)

IN和NOT IN 常用来判断子查询的结果

BETWEEN…AND…

判断在一个区间范围内

工资在1500到3000之间的员工

SELECT ename,sal FROM emp_swm
WHERE sal BETWEEN 1500 AND 3000

IS NULL 和IS NOT NULL

空值不能使用 = 比较,只能用IS NULL 和IS NOT NULL

查询哪些员工的奖金数据为NULL

SELECT ename,sal,comm FROM emp_swm
WHERE comm IS NULL

ANY,ALL

  ANY和ALL是配合>,>=,<=一个列表使用的  >ANY(list):大于列表中的最小的  >ALL(list):大于列表中的最大的  <ANY(list):小于列表中的最大的  <ALL(list):小于列表中的最小的  ANY和ALL常用于子查询。  SELECT empno,ename,job,sal,deptno  FROM emp_swm WHERE sal<ALL(2500,3000,4000)

使用函数或者表达式的结果作为过滤条件

SELECT ename, sal, job
FROM emp_swm
WHERE ename = UPPER(‘scott’);
SELECT ename, sal, job
FROM emp_swm
WHERE sal * 12 >50000;

DISTINCT 关键字

对结果集,中指定字段值重复的记录进行去重

查看公司有哪些职位

SELECT DISTINCT job FROM emp_swm

多字段去重,是对这些字段值的组合进行去重

比如 job+deptno 的组合不会有重复的
SELECT DISTINCT job,deptno FROM emp_swm

排序

ORDER BY 子句

ORDER BY 可以根据其后指定的字段
对结果集按照该字段的值进行升序或者降序排列
ASC:升序,不写默认就是升序
DESC:降序。

查看公司的工资排名:

  SELECT ename,sal FROM emp_swm  ORDER BY sal DESC

ORDER BY 按照多个字段排序,

ORDER BY 首先按照第一个字段的排序方式
对结果集进行排序,当第一个字段有重复值时
才会按照第二个字段排序方法进行排序,以此类推
每个字段都可以单独指定排序方式
SELECT ename,sal,deptno
FROM emp_swm
ORDER BY sal DESC,deptno ASC

排序的字段中含有NULL值,NULL被作为最大值

SELECT ename,comm FROM emp_swm
ORDER BY comm DESC

聚合函数

聚合函数又叫多行函数,分组函数
聚合函数是对结果集某些字段的值进行统计的。

MAX,MIN

求给定字段的最大值和最小值

查看公司的最高公司与最低公司是多少?

SELECT MAX(sal),MIN(sal)
FROM emp_swm

AVG,SUM

求平均值和综合
SELECT AVG(sal),SUM(sal)
FROM emp_swm

COUNT函数

COUNT函数不是对给定的字段的值进行统计的
而是对给定字段不为NULL的记录数统计的
实际上所有聚合函数都忽略NULL值统计
SELECT COUNT(comm) FROM emp_swm

查看表的记录数可以使用COUNT(*)

SELECT COUNT(*) FROM emp_swm

查看平均绩效

  SELECT AVG(NVL(comm,0)),SUM(comm)  FROM emp_swm  SELECT SUM(comm)/14 FROM emp_swm

WHERE 中不能使用聚合函数作为过滤条件原因是过滤时机不对。

WHERE 是在数据库检索表中数据时,
对数据逐条过滤,以决定是否查看出该数据是可用的,所以WHERE用来确定结果集的数据.

使用聚合函数的结果作为过滤条件,

那么一定是数据从表中查询完毕(WHERE在查询过程中发挥作用)得到结果集,并且分组完毕,才进行聚合函数统计结果,得到后才可以对分组进行过滤,这个过滤时机是在WHERE 之后进行的。

聚合函数的过滤条件要在 HAVING 子句中使用

HAVING 必须跟在 GROUP BY 子句之后
HAVING 是用来过滤分组的
SELECT AVG(sal),deptno FROM emp_swm
GROUP BY deptno HAVING AVG(sal)>2000

查看平均工资高于2000的部门最高工资和最低工资分别是多少?

SELECT MAX(sal),MIN(sal),deptno FROM emp_swm
GROUP BY deptno HAVING AVG(sal)>2000

分组

GROUP BY 子句

GROUP BY可以将结果集按照其后
指定的字段值相同的记录看做一组
然后配合聚合函数进行更细分的统计工作

查看每个部分的平均工资?

SELECT AVG(sal),deptno FROM emp_swm
GROUP BY deptno

查看每个职位的最高工资?

SELECT MAX(sal),job FROM emp_swm
GROUP BY job

GROUP BY也可以根据多个字段分组

分组原则为这几个字段值都相同的记录看做一组

查看同部门同职位的平均工资?

SELECT AVG(sal),deptno,job FROM emp_swm
GROUP BY deptno,job

当SELECT子句中含有聚合函数时

那么凡不再聚合函数中的其他单独字段
都必须出现在GROUP BY子句中,反之亦然

查看部门的平均工资,前期是该部门的平均工资高于2000

SELECT AVG(sal),deptno FROM emp_swm
WHERE AVG(sal)>2000
GROUP BY deptno

0 0
原创粉丝点击