Oracle SQL:SELECT

个人学习笔记,仅供参考

select 后面跟着的

  • <目标列表达式>:可以是列名、算术表达式、字符串常量"xxxx"、聚集函数
  • <目标列表达式>可以用到的聚集函数:遇到空值,除了Count*之外,都跳过空值只处理非空值
    Lower()\Upper() 转换大小写

    Count 统计一列中值的个数

    1、使用COUNT(*)对表中行的数目进行计数,不管表的列中包含的是空值( NULL ) 还是非空值,不忽略NULL值。 

    2、使用COUNT( 列名 ) 对特定列中具有值的行进行计数,忽略NULL值。

    Sum 求一列值的总和(数值型)
    Avg 求一列值的平均(数值型)AVG()函数忽略列值为NULL的行。
    Max、Min 求最大最小值

  • DISTINCT:写在查询的列名前面,表示该列去除重复值,DISTINCT后面必须使用列名,不能用于计算或表达式。DISTINCT只能用于COUNT(distinct xxx)函数,DISTINCT不能用于COUNT( * )。
  • TOP:表示输出查询表的前多少条记录,后面可以加数字“ TOP 5” 输出前五条,也可以加百分比“ TOP 50 PERCENT ” 表示输出前百分之五十

from 后面跟着的

  • AS语句:给表起别别名,也可以用在select后面给列起别名

where 后面跟着的

  • where主要是在什么时候用呢?这一列不是随便取的,是有条件的取出某些值的时候
  • 条件运算符,注意是字符串加单引号,数字就不用处理
    =等于
    <>或者写作!=不等于

    >  、<

    大于、小于
    >=  、 <=大于等于、小于等于
    AND\OR\NOT 条件并列/条件选择
    IN(某个集合)NOT IN 只要是在该集合中就可以
    (NOT) BETWEEN……AND……

    在某个范围内(但是是包括还是不包括

    不同的数据库处理方式不同)

    LIKE(一般和通配符一起用)NOT LIKE

    搜索某种模式
    Escape<换码字符> 当like后面的字符串中需要转置的时候ESCAPE'\'
    IS NULL\IS NOT NULL 空值查询
  • LIKE子句:因为like后面的模式是要结合通配符的,所以先说通配符知识
    通配符描述
    %代表零个或多个字符
    _仅替代一个字符
    [charlist] 表示从这个list中任选一个字符

    [^charlist]

    或者

    [!charlist]

    不在字符列中的任何单一字符
    这里演示一下[charlist]用法,假如我想查找不以C/A/R开头的人的信息,可以这样写 NOT LIKE '[CAR]%' 。另外根据数据的编码方式不同,一个汉字ASCII需要两个'_',GBK需要一个
  • 'like'什么时候等价于'='?当Like后面不是模糊查询的时候

Group by 语句

  • 有Group by的函数必然有聚集函数
  • 聚集函数只存在于SELECT子句或者Group by 的HAVING子句中
  • Having子句的应用场景:分组后,有些不满足要求的组不予输出,比如“查询选修了三门以上课程的学生学号”,having后的聚集函数是对于分组后的每一个组进行聚集。
  • WHERE子句和HAVING子句的作用对象不同,前者是整张表,后者是一个个小组

Order by 语句

  • 一般是放在一个查询语句的最后,因为它是对整体结果(也就是对上面已经查找完毕的表)进行排序操作的
  • 升序ASC 降序DESC 默认升序 ——ORDER BY XXXX DESC/ASC
  • 可以对多列进行排序,且排序的升降序可以不同,当前面一列有完全相同的值时(包括nulls),才会让下一列的值进行排序。
  • 对空值的排序NULLS FIRST \ NULLS LAST

等值连接和非等值连接:界定标准--WHERE子句后的连接字段之间的连接符号——如果是等号--等值,其他符号(大于小于betweenand等等)都是非等值,连接字段名字不必相同但是必须可比

嵌套循环连接算法:在连接条件‘表1.列名1=表2.列名2’,先从表1提取一个元组,找到列名1,然后遍历表2元组的列名2,找到满足条件表1.列名1=表2.列名2的元组,提取所需信息

自然连接:连接多表的输出中去掉重复的列

自身连接:记得取别名,一般在from子句中

外连接:表1 Left(right) Outer Join 表2 On(表1.列名1=表2.列名2)——去除结果中的重复值,也可以用Using(列名)

嵌套查询:外层查询|父查询、内层查询|子查询(不能有ORDER BY 子句)

        不相关子查询:子查询的查询条件不依赖于外层查询——直接把子查询拿出来,也能够运行

        相关子查询:子查询的查询条件依赖于外层查询,整个查询语句成为相关嵌套查询——直接拿出子查询运行会报错,因为子查询中的条件包含外层查询的数据。

                例子:找出每个学生超过他所选课平均成绩的课的课程号

        带有ANY(任意一个)或ALL(所有)谓词的子查:与>\<\>=\<=\!匹配使用,但其实可以等价到max、min、in中.解释一下,就比如xxx<ANY(一个集合),相当于xxx只需要小于这个集合中最大的那个值就可以

=!=<<=>>=
ANYIN--<MAN<=MAN>MIX>=MIX
ALL--NOT IN<MIN<=MIN>MAX>=MAX

        带有EXISTS(NOT EXIST)的子查询:只返回存在还是不存在(boolen--true--false)

                例子:查询所有选修了一号课程的同学姓名——课程号=1这个信息是Exists的

        所有IN\比较运算\ANY和ALL都可以用带EXIST的子查询替代,大部分时候都需要全称量词和存在之间的转换。!这部分比较难,很难懂,我现在也不是很懂,准备问一下老师。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Karon_NeverAlone

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值