zoukankan      html  css  js  c++  java
  • 数据库

    1.一个表A关联另一个表B有多条数据的情况,取B表的一条数据  取出A表的集合然后用exists

    exists       (sql       返回结果集,为真)   
    not       exists       (sql       不返回结果集,为真) 
    如下: 
    表A 
    ID   NAME   
    1       A1 
    2       A2 
    3       A3 

    表B 
    ID   AID   NAME 
    1       1       B1 
    2       2       B2   
    3       2       B3 

    表A和表B是1对多的关系   A.ID   =>   B.AID 

    SELECT   ID,NAME   FROM   A   WHERE   EXIST   (SELECT   *   FROM   B   WHERE   A.ID=B.AID) 
    执行结果为 
    1       A1 
    2       A2 
    原因可以按照如下分析 
    SELECT   ID,NAME   FROM   A   WHERE   EXISTS   (SELECT   *   FROM   B   WHERE   B.AID=1) 
    ---> SELECT   *   FROM   B   WHERE   B.AID=1有值,返回真,所以有数据

    SELECT   ID,NAME   FROM   A   WHERE   EXISTS   (SELECT   *   FROM   B   WHERE   B.AID=2) 
    ---> SELECT   *   FROM   B   WHERE   B.AID=2有值,返回真,所以有数据

    SELECT   ID,NAME   FROM   A   WHERE   EXISTS   (SELECT   *   FROM   B   WHERE   B.AID=3) 
    ---> SELECT   *   FROM   B   WHERE   B.AID=3无值,返回假,所以没有数据

    NOT   EXISTS   就是反过来 
    SELECT   ID,NAME   FROM   A   WHERE NOT   EXIST   (SELECT   *   FROM   B   WHERE   A.ID=B.AID) 
    执行结果为 
    3       A3 
    =========================================================================== 
    EXISTS   =   IN,意思相同不过语法上有点点区别,好像使用IN效率要差点,应该是不会执行索引的原因 
    SELECT   ID,NAME   FROM   A    WHERE ID   IN   (SELECT   AID   FROM   B) 

    NOT   EXISTS   =   NOT   IN   ,意思相同不过语法上有点点区别 
    SELECT   ID,NAME   FROM   A   WHERE ID NOT   IN   (SELECT   AID   FROM   B) 

  • 相关阅读:
    linux命令行 238
    C语言语法分析器 238
    有穷自动机的构造与识别 238
    简单词法分析实验报告238许锦沛 238
    javascript获得鼠标的坐标值
    滚动条颜色设置(IE、chrome浏览器)
    获取元素的页面位置,兼容各浏览器
    js闭包的作用
    javascrpt绑定事件之匿名函数
    javascript 函数及作用域
  • 原文地址:https://www.cnblogs.com/moondear/p/10766679.html
Copyright © 2011-2022 走看看