SQL基础查询

一、基本查询语句:
     ♠ 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 子句 --- 执行顺序为从左到右排序,消耗资源
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值