where in的用法 SQL 数据查询

where in的用法 SQL 数据查询

使用   IN   的子查询  
  通过   IN(或   NOT   IN)引入的子查询结果是一列零值或更多值。子查询返回结果之后,外部查询将利用这些结果。  
    
  下列查询会找到所有曾出版过商业书籍的出版商的名称。  
    
  USE   pubs  
  SELECT   pub_name  
  FROM   publishers  
  WHERE   pub_id   IN  
        (SELECT   pub_id  
        FROM   titles  
        WHERE   type   =   'business')  
   
  下面是结果集:  
   
  pub_name                                                                    
  ----------------------------------------    
  Algodata   Infosystems                                            
  New   Moon   Books                                                        
   
  (2   row(s)   affected)  
   
  该语句分两步进行评估。首先,内部查询返回出版过商业书籍的出版商的标识号(1389   和   0736)。然后,这些值被代入外部查询中,在   publishers   中查找与上述标识号相配的名字。  
   
  USE   pubs  
  SELECT   pub_name  
  FROM   publishers  
  WHERE   pub_id   in   ('1389',   '0736')  
   
  使用联接而不使用子查询处理该问题及类似问题的一个不同之处在于,联接使您可以在结果中显示多个表中的列。例如,如果要在结果中包括商业书籍的书名,就必须使用联接来查询。  
   
  USE   pubs  
  SELECT   pub_name,   title  
  FROM   publishers   INNER   JOIN   titles   ON   publishers.pub_id   =   titles.pub_id  
        AND   type   =   'business'  
   
  下面是结果集:  
   
  pub_name                               title                                                                                            
  ----------------------   -------------------------------------------------    
  Algodata   Infosystems       The   Busy   Executive's   Database   Guide                                
  Algodata   Infosystems       Cooking   with   Computers:   Surreptitious   Balance          
                                            Sheets                                                            
  New   Moon   Books                   You   Can   Combat   Computer   Stress!                                        
  Algodata   Infosystems       Straight   Talk   About   Computers                                            
   
  (4   row(s)   affected)  
   
  该查询显示出联接产生四行,而不是像前面的子查询那样产生两行。  
   
  下面是查询的另一个示例,它既可用子查询亦可用联接来表达。该查询查找所有住在   California,并且收到的某本书的版税低于   30   %   的第二作者的姓名。  
   
  USE   pubs  
  SELECT   au_lname,   au_fname  
  FROM   authors  
  WHERE   state   =   'CA'  
        AND   au_id   IN  
              (SELECT   au_id  
              FROM   titleauthor  
              WHERE   royaltyper   <   30  
                    AND   au_ord   =   2)  
   
  下面是结果集:  
   
  au_lname                                                                   au_fname                            
  ----------------------------------------   --------------------    
  MacFeather                                                               Stearns                              
   
  (1   row(s)   affected)  
   
  评估内部查询后,产生符合子查询限定条件的三个作者的   ID   号。然后评估外部查询。注意,在内部和外部查询的   WHERE   子句中,都可以包括多个条件。  
   
  使用联接,同一查询可以用如下方式表示:  
   
  USE   pubs  
  SELECT   au_lname,   au_fname  
  FROM   authors   INNER   JOIN   titleauthor   ON   authors.au_id   =   titleauthor.au_id  
  WHERE   state   =   'CA'  
        AND   royaltyper   <   30  
        AND   au_ord   =   2  
   
  联接总是可以表示为子查询。子查询经常(但不总是)可以表示为联接。这是因为联接是对称的:可以以任意顺序将表   A   联接到表   B,而且会得到相同的答案。而对子查询来说,情况则并非如此。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值