zoukankan      html  css  js  c++  java
  • EXISTS 与 NOT EXISTS 的用法及返回结果

    (1)SELECT * FROM `datatower-all`.TMP_DWD_POI t1
    WHERE EXISTS (
      SELECT 1 FROM `datatower-all`.DWD_POI t WHERE t.POI_GRP_PHYSICAL_ID='100111'
    )
    解析:当DWD_POI表中有POI_GRP_PHYSICAL_ID='100111'的记录时,返回TMP_DWD_POI表的所有记录;当DWD_POI表中没有POI_GRP_PHYSICAL_ID='100111'的记录时,则无记录返回。
    (主查询和exists的子查询无关联)

    (2)SELECT * FROM `datatower-all`.TMP_DWD_POI t1
    WHERE NOT EXISTS (
      SELECT 1 FROM `datatower-all`.DWD_POI t WHERE t.POI_GRP_PHYSICAL_ID='100111'
    )
    解析:当DWD_POI表中有POI_GRP_PHYSICAL_ID='100111'的记录时,则无记录返回;当DWD_POI表中没有POI_GRP_PHYSICAL_ID='100111'的记录时,返回TMP_DWD_POI表的所有记录。
    (主查询和exists的子查询无关联)

    (3)SELECT * FROM `datatower-all`.TMP_DWD_POI t1
    WHERE EXISTS (
      SELECT 1 FROM `datatower-all`.DWD_POI t WHERE t.SOURCE_ID = t1.SOURCE_ID AND t.SOURCE_SYS=t1.SOURCE_SYS
      AND t.POI_GRP_PHYSICAL_ID='100111'
    )
    解析:当DWD_POI表中有t.SOURCE_ID = t1.SOURCE_ID AND t.SOURCE_SYS=t1.SOURCE_SYS AND t.POI_GRP_PHYSICAL_ID='100111'的记录时,返回TMP_DWD_POI表中与DWD_POI表中SOURCE_ID相同,SOURCE_SYS相同,POI_GRP_PHYSICAL_ID='100111'的记录,相当于返回TMP_DWD_POI表相对于NOT EXISTS后子查询的交集。
    当DWD_POI表中没有t.SOURCE_ID = t1.SOURCE_ID AND t.SOURCE_SYS=t1.SOURCE_SYS AND t.POI_GRP_PHYSICAL_ID='100111'的记录时,则无记录返回。
    (主查询和exists的子查询有关联)

    (4)SELECT * FROM `datatower-all`.TMP_DWD_POI t1
    WHERE NOT EXISTS (
      SELECT 1 FROM `datatower-all`.DWD_POI t WHERE t.SOURCE_ID = t1.SOURCE_ID AND t.SOURCE_SYS=t1.SOURCE_SYS
      AND t.POI_GRP_PHYSICAL_ID='100111'
    )
    解析:当DWD_POI表中有t.SOURCE_ID = t1.SOURCE_ID AND t.SOURCE_SYS=t1.SOURCE_SYS AND t.POI_GRP_PHYSICAL_ID='100111'的记录时,返回TMP_DWD_POI表中除去与NOT EXISTS后子查询相同记录后的记录,相当于返回TMP_DWD_POI表相对于NOT EXISTS后子查询的补集。

    当DWD_POI表中没有t.SOURCE_ID = t1.SOURCE_ID AND t.SOURCE_SYS=t1.SOURCE_SYS AND t.POI_GRP_PHYSICAL_ID='100111'的记录时,返回TMP_DWD_POI表中所有记录。
    (主查询和exists的子查询有关联)
    判断主查询和exists的子查询是否有关联的方法:查看子查询的where条件中是否同时包含了子查询表的字段和主查询表的字段,若是,则说明进行了关联,若只有子查询表的字段,则说明未进行关联)

  • 相关阅读:
    数字音频技术:混音器
    android studio: 为现有项目添加C++支持
    android: requestLayout(), invalidate(), postInvalidate() 方法区别
    android: Canvas的drawArc()方法的几个误区
    MediaPlayer: MediaPlayer中的prepare方法和prepareAsync方法的区别
    MediaPlayer: 在不同控件之间实现视频的无缝切换的方法
    android studio: 让项目通过阿里云 maven jcenter 下载依赖资源
    android: ListView设置emptyView 误区
    Javascript继承
    TortoiseSVN 只取下或更新部分文件的方法(Sparse Update/Sparse Checkout)
  • 原文地址:https://www.cnblogs.com/nana-blog/p/6555235.html
Copyright © 2011-2022 走看看