SELECT * FROM publishers  Where country = 'USA'

解决方案 »

  1.   

    假如你想这么复杂的话可以改成
    SELECT * 
    FROM publishers a 
    WHERE  EXISTS (Select 1 From publishers b  Where b.country =a.country  and  b.country = 'USA')
      

  2.   

    对问题的修改
    __________________________________
    SELECT * FROM publishers WHERE  EXISTS (Select country From publishers Where country = 'USA')1.上面的语句把所有的记录都显示出来了,我想应该只显示USA呀.
    2.我看有的时候写成Select 1 ......这个1是什么意思
    3.EXISTS与IN有什么区别
      

  3.   

    SELECT * FROM publishers WHERE  EXISTS (Select country From publishers Where country = 'USA')1.上面的语句把所有的记录都显示出来了,我想应该只显示USA呀.
    2.我看有的时候写成Select 1 ......这个1是什么意思
    3.EXISTS与IN有什么区别
    ---------------------------------
    1.如果只显示USA的,则不需要加exists而直接将country='USA'做为where条件,由于上面的语句当中 exists子句没有与主表形成任何联系(当前所选信息),从而这个子查询将直接进行,只要这个子查询能够返回记录exists表达式则为true,从而构成永真条件,由此查出的是所有记录,其它等同于
    if EXISTS (Select country From publishers Where country = 'USA')
    SELECT * FROM publishers WHERE  1=1
    else
    SELECT * FROM publishers WHERE  1=02.在使用exists是,由于对返回结果并不关心,只关心是否有结果存在,从而使用 1 这个常量代替返回值,这种方式最大的好处在于不用关心所引述的表当中是否存在某个字段3.exists通常使用在多关联的情况,即关联条件可能由多个字段形成,而in只能对其中一个字段在返回的结果集当中进行搜索。
    select * from table_A where user_no in(select user_no from table_user)
    此当中table_A和table_user只有一个字段user_no形成关联关系另若两表还多一个country相关联,即同时不仅需要的是user_no还需要country,则写法就有点麻烦了,不能直接用in,因为in子句不支持多列返回值从而改使用exists则能够解决问题
    select * from table_A where exists(select 1 from table_user where user_no=table_A.user_no and country=table_A.country)
      

  4.   

    使用 EXISTS 的子查询
    使用 EXISTS 关键字引入一个子查询时,就相当于进行一次存在测试。外部查询的 WHERE 子句测试子查询返回的行是否存在。子查询实际上不产生任何数据;它只返回 TRUE 或 FALSE 值。使用 EXISTS 引入的子查询语法如下:WHERE[NOT]EXISTS(subquery)下面的查询查找所有出版商业书籍的出版商的名称:USE pubs
    SELECT pub_name
    FROM publishers
    WHERE EXISTS
       (SELECT *
       FROM titles
       WHERE pub_id = publishers.pub_id
          AND type = 'business')下面是结果集:pub_name
    --------------------
    New Moon Books
    Algodata Infosystems(2 row(s) affected)若要确定该查询的结果,请按照顺序考虑每个出版商的名称。该值是否会使子查询至少返回一行?换句话说,该值是否会使存在测试的计算值为 TRUE?在此例中,第一个出版商的名称为 Algodata Infosystems,标识号为 1389。titles 表中是否有 pub_id 为 1389 并且 type 为 business 的行?如果有,那么 Algodata Infosystems 应为所选值之一。对其它每个出版商名称重复相同的过程。注意,使用 EXISTS 引入的子查询在以下几方面与其它子查询略有不同: EXISTS 关键字前面没有列名、常量或其它表达式。
    由 EXISTS 引入的子查询的选择列表通常几乎都是由星号 (*) 组成。由于只是测试是否存在符合子查询中指定条件的行,所以不必列出列名。 
    由于通常没有备选的、非子查询的表示法,所以 EXISTS 关键字很重要。尽管一些使用 EXISTS 表示的查询不能以任何其它方法表示,但所有使用 IN 或由 ANY 或 ALL 修改的比较运算符的查询都可以通过 EXISTS 表示。