zoukankan      html  css  js  c++  java
  • postgresql----IN&&EXISTS

    一.IN && NOT IN

    WHERE expression IN (subquery)

    右边圆括号内是返回一个字段的子查询结果集,左边的表达式(或字段)对查询结果每一行进行一次运算和比较,如果结果集中存在相等的行,则IN结果为'TRUE',否则为'FALSE';

    WHERE expression NOT IN (subquery)

    NOT IN与IN正相反,如果结果集中不存在相等的行结果为'TRUE',否则为'FALSE'。

    测试表:

    test=# d tbl_test 
       Table "public.tbl_test"
     Column |  Type   | Modifiers 
    --------+---------+-----------
     f      | integer | 
    
    test=# d tbl_insert
             Table "public.tbl_insert"
     Column |         Type          | Modifiers 
    --------+-----------------------+-----------
     a      | integer               | 
     b      | integer               | 
     c      | character varying(12) |
     
     
     test=# select * from tbl_test ;
     f 
    ---
     1
     3
     5
    (3 rows)
    
    test=# select * from tbl_insert;
     a | b |   c   
    ---+---+-------
    | 1 | 11
    | 2 | 22
    | 3 | 33
    | 4 | 44
    | 5 | 51
    | 6 | 1
    | 6 | 61
    | 6 | 661
    | 7 | 3%1
    | 8 | 3%_1
    | 8 | 3_%_1
    | 7 | abc
    | 7 | ABc
    | 7 | aBC
    (14 rows)

    示例1.查询tbl_insert表,且a字段值在tbl_test表字段f中的行

    test=# select * from tbl_insert where a in (select f from tbl_test);
     a | b | c  
    ---+---+----
    | 1 | 11
    | 3 | 33
    | 5 | 51
    (3 rows)

    示例2.查询tbl_insert表,且a字段值比tbl_test表字段f小1的行

    test=# select * from tbl_insert where a+1 in (select f from tbl_test);
     a | b | c  
    ---+---+----
    | 2 | 22
    | 4 | 44
    (2 rows)

    示例3.查询tbl_insert表,且a字段值不在tbl_test表字段f中的行

    test=# select * from tbl_insert where a not in (select f from tbl_test);
     a | b |   c   
    ---+---+-------
    | 2 | 22
    | 4 | 44
    | 6 | 1
    | 6 | 61
    | 6 | 661
    | 7 | 3%1
    | 8 | 3%_1
    | 8 | 3_%_1
    | 7 | abc
    | 7 | ABc
    | 7 | aBC
    (11 rows)

    示例4.查询tbl_insert表,且a字段值等于5或7的行

    test=# select * from tbl_insert where a in (5,7);
     a | b |  c  
    ---+---+-----
    | 5 | 51
    | 7 | 3%1
    | 7 | abc
    | 7 | ABc
    | 7 | aBC
    (5 rows)

    二.EXISTS && NOT EXISTS

    WHERE EXISTS (subquery)

    括号内同样是一个子查询,如果子查询有返回结果,则EXISTS结果为'TRUE',否则为'FALSE'。

    WHERE NOT EXISTS(subquery)

    NOT EXISTS与EXISTS正好相反,如果子查询没有返回结果,为'TRUE',否则'FALSE'。

    示例1.查询tbl_insert表,且a字段值在tbl_test表字段f中的行

    test=# select * from tbl_insert where exists (select null from tbl_test where tbl_test.f=tbl_insert.a);
     a | b | c  
    ---+---+----
    | 1 | 11
    | 3 | 33
    | 5 | 51
    (3 rows)

    示例2.查询tbl_insert表,且a字段值不在tbl_test表字段f中的行

    test=# select * from tbl_insert where not exists (select null from tbl_test where tbl_test.f=tbl_insert.a);
     a | b |   c   
    ---+---+-------
    | 2 | 22
    | 4 | 44
    | 6 | 1
    | 6 | 61
    | 6 | 661
    | 7 | 3%1
    | 8 | 3%_1
    | 8 | 3_%_1
    | 7 | abc
    | 7 | ABc
    | 7 | aBC
    (11 rows)

    PS:NOT IN的效率非常低,如果可以的话建议使用NOT EXISTS。

  • 相关阅读:
    githubz在add ssh key报错 Key is invalid. Ensure you've copied the file correctly 解决办法
    iOS 更改状态栏颜色
    iOS 加载图片选择imageNamed 方法还是 imageWithContentsOfFile?
    iOS UIWebView加载网页、文件、HTML
    XXX is undefine,全局搜索却只得到一个结果
    接口调用报错,全局搜索却找不到?vscode vue
    elementui下拉框选择一次以后再选,多项被选中的情况
    VUE+ elementui 表单rules validator 邮箱验证、电话号码验证、身份证验证、账号验证
    JS 验证input内容框 Demo(复制可测试)
    Vscode setting.json个人设置(包含保存格式化,空格、换行,标点符号自动增删)
  • 原文地址:https://www.cnblogs.com/dancesir/p/9065929.html
Copyright © 2011-2022 走看看