您的位置:首页 > 数据库

SQL基础查询

2015-12-21 23:29 483 查看
一、基本查询语句:
♠ FROM 子句 --- 指定要从哪个表中查询。

♠ 使用别名
(1)在 SQL语句中可以通过使用列的别名改变标题的显示样式,或者表示计算结果的含义
(2)使用语法是列的别名跟在列名的后面,中间可以加“ AS ”也可以不加
(3)若别名中包含字符或空格,或者想区分大小写的时候,要用“”。(这里字符的意思是除了字母以外的字符)
例如:SELECT empno AS id, ename "NAME", sal*12 "Annual Salary" FROM emp_rs

♠ WHERE 子句 --- 添加过滤添加,只选出满足条件的记录
(1)用在 DML 语句中,也可以用在 SELECT语句中
(2)在 SELECT 中使用时,当数据库查询表中数据时,在每查询一条记录时,会先查看该记录是否满足条件,并将满足条件的记 录 查询出来
(3) WHERE 中也可以使用函数或者表达式的结果作为过滤条件

♠ SELECT子句 --- 如果只查询表的部分列,需要在SELECT后指定列名

二、查询条件:
♥ 使用 > ,< , >=, <= ,!= , <>, =
注意: != 等价于 <>
例如:SELECT ename,sal,job FROM emp_rs WHERE deptno <> 10

♥ AND,OR 关键字
AND --- 返回的结果必须满足多个条件
OR --- 返回的结果满足多个条件之一即可
注意: OR 的优先级低于 AND,可以使用()来提高优先级
例如: (1)SELECT * FROM emp_rs WHERE sal > 1000 AND job = 'SALESMAN' OR job = 'CLERK'
这里的 SQL 表示的意思:查询 job为 salesman 并且sal 大于 1000的数据,或者查询 job 为clerk 的数据
(2)SELECT * FROM emp_rs WHERE sal > 1000 AND ( job = 'SALESMAN' OR job = 'CLERK')
这里的 SQL 表示的意思:查询 sal大于 1000 并且job 为 salesman或者为 clerk

♥LIKE子句 --- 模糊查询
LIKE 需要借助两个通配符:
(1) % :表示0 到多个字符
(2) _ :标识单个字符
例如:LIKE ’_A%’ :查询的是第二个字母是 A 的所有数据

♥ BETWEEN…AND --- 查询某个值域范围条件的数据
例如:SELECT * FROM emp_rs WHERE sal BETWEEN 1500 AND 3000

♥ IN 和 NOT IN --- 常用于子查询中
IN(list) --- 用来取出符合列表范围中的数据,判断给定内容等于列表中的其中之一
NOT IN(list) --- 取出不符合此列表中的数据记录,判断给定内容不等于列表中的其中之一
例如:SELECT * FROM emp_rs WHERE job IN ('MANAGER','CLERK')

♥ALL 和 ANY --- 用于判断内容与列表中的值之间的比较,不能单独使用,需要配合操作符,一般用于子查询。
> ANY:大于列表中最小的
< ANY:小于列表中最大的
> ALL:大于列表中最大的
< ALL:小于列表中最小的

♥ DISTINCT 关键字 --- 过滤重复,
(1)可以去除指定字段值相同时的记录行,必须紧跟在 SELECT 之后。
(2)当对多个字段进行去重工作时,那么是对着几个字段值的组合去重
例如:查看公司有多少种职位
SELECT DISTINCT(job) FROM emp_rs
查看不重复的组合
SELECT DISTINCT job, deptno FROM emp_rs

三、排序:
♦ ORDER BY 子句 --- 用于排序查询出来的结果集
(1)可以对指定的字段按照升序或者降序排序。 必须出现在SELECT 中的最后一个子句。默认是升序( ASC )
(2)也可以进行多个字段排序,但是存在优先级问题,先按照第一个字段的方式排序,当第一个字段值有相同的记录,再按照第二个字段的方式排序
(3)每个字段可以单独指定升降序
例如:根据多个字段排序
SELECT ename, deptno, sal FROM emp_rs ORDER BY deptno, sal

四、聚合函数:
♣ 聚合函数:又称为多行函数,分组函数。可以将多条记录中的指定字段的值进行统计,然后得出一个结果。注意:聚合函数是忽略 NULL 值的,对于平均值效果最明显,可以使用 NVL 函数将NULL 替换来解决

♣ MAX( ) --- 取得列或表达式的最大值
MIN( ) --- 取得列或表达式的最小值
例如:SELECT MAX(sal), MIN(sal) FROM emp_rs

♣ AVG( ) --- 取得列或表达式的平均值 例如:SELECT AVG(sal) FROM emp_rs
SUM( ) --- 取得列或表达式的和值 例如:SELECT SUM(sal) FROM emp_rs
注意:它们都忽略 NULL 值。当某些字段为 NULL时,该记录将被忽略点。 AVG() 不能用于WHERE 中

♣ COUNT( ) --- 统计指定字段不为 NULL的记录条数
COUNT(*) --- 统计所有记录条数
注意:忽略 NULL值

五、分组:
♪ GROUP BY 子句 --- 为了配合聚合函数使用的
(1)使用 GROUP BY 子句后,分组可以更细致,就可以不在将整张表所有记录看作一组再进行统计了,可以将表中指定字段值相同的记录看作一组再进行每组统计。
(2) 当 SELECT子句中出现了分组函数,那么凡不在聚合函数的单独字段必须出现在 GROUP BY 子句中,但是反过来没有强制要求。
例如:每个部门的最高工资和最低工资
SELECT MAX(sal),MIN(sal),deptno FROM emp_rs GROUP BY deptno
(3)GROUP BY 子句也可以写多个字段,当按照多个字段分组时,是按照记录中这些字段值的组合相同的看做一组。
例如:查看每个部门每种职位总共多少人
SELECT COUNT(*),job,deptno FROM emp_rs GROUP BY deptno,job

♪ HAVING子句 --- 用来对分组后的结果进一步限制,必须放在 GROUP BY 的后面,不能单独存在。
HAVING与WHERE的区别:
(1)它们都用于在查询中添加过滤条件的,但是它们的过滤时机不同,先 WHERE 后HAVING 。
(2)WHERE 是在第一次从表中查询数据的时候进行过滤的。
(3)HAVING 是在查询出的数据中进行统计,然后使用统计结果再次进行过滤的。所以 WHERE 中不能使用组函数
(4)通俗点, Where 是在读取数据的过程中过滤,而 having 是在数据全部读取出来之后再过滤。

六、查询语句执行顺序:
♬ FROM 子句 --- 执行顺序为从后往前、从右到左
数据量较少的表尽量放在后面

♬ WHERE 子句 --- 执行顺序为自下而上、从右到左
将能过滤掉最大数据记录的条件写在 where 子句的最右

♬ GROUP BY 子句 --- 执行顺序从左往右分组
最好在 GROUP BY 前使用 WHERE 将不需要的记录在 GROUP BY之前过滤掉

♬ HAVING 子句 --- 消耗资源
尽量避免使用, HAVING 会在检索出所有记录之后才对结果进行过滤,需要排序等操作

♬ SELECT 子句 --- 少用 *号,尽量取字段名称
Oracle 在解析的过程中,通过查询数据字典将 * 号依次转换成所有的列名,消耗时间

♬ ORDER BY 子句 --- 执行顺序为从左到右排序,消耗资源
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: