SQL进阶教程之1.8谓词

谓词

  • 是一种特殊函数,返回布尔值true/false/
  • 分为全称量词和存在量词
    • 全称量词:所有x都满足条件P
    • 存在量词:存在一个极其以上x满足条件P
  • SQL一般不存在全称量词,而是用“不存在满足条件P的x”来表示

用法1:查询表中“不”存在的数据
适用情况:找出表中不存在的项目
案例:找出各会议未参会的人员
知识点:先把所有可能性找出来,然后用not exists排除某条件,not exists 可以相当于except

表meetings
排除参加会议的人得到未参会人员

用法2:全称量化
适用情况:找出表中所有不满足某条件的项
案例1:找出没有一个科目分数不满50分的学生
知识点:同样,先把所有可能性找出来,然后用not exists排除某条件,not exists 可以相当于except

表testscores
排除相应条件以外的学生

案例2:找出所有数学在80分,语文在50分以上的学生

排除多条件

案例3:找出完成工序1的工程,后面的工程就算完成也不属于符合这类条件

表project

方法1:groupby 分组后聚合,having筛选得到满足条件的工程

方法1:条件限定

方法2:双重否定,not exists 是第一层否定,status<>限定条件构成第二重否定,双重否定表肯定,即是得到等于限定条件的数据

方法2:双重否定表肯定

用法3:对列进行量化
适用情况:行可以增减,但列删减会有影响
案例1:查询”都是1“的行
知识点:any/all等比较谓词用法,比所有都大或小

表arraytbl
找出所有列都为1的行

案例2:查询”存在9“的行
知识点:用in表示或的关系,即存在1个及其以上相应值

找出存在9的行

案例3:查询”均为null“的行
知识点:由于null不是数值,要先coalesce所有列后再用is null限定条件

找出所有列都为null的行

你可能感兴趣的:(SQL进阶教程之1.8谓词)