SQL高级查询相关

来源:互联网 发布:淘宝众筹服务商 编辑:程序博客网 时间:2024/04/30 20:20
/*高级查询*/
  
  /*子查询*/
  USE northwind
  SELECT orderid, customerid
   FROM orders AS or1
   WHERE 20 < (SELECT quantity FROM [order details] AS od
   WHERE or1.orderid = od.orderid
   AND od.productid = 23)
  --当子查询的结果唯一的时候,可使用比较运算符
  --不唯一的时候,不可使用比较,必须使用集合运算符
  --集合运算符:not in/in
  --gid in(1001)合法
  USE pubs
   SELECT au_lname, au_fname FROM authors
  WHERE 100 IN
  (SELECT royaltyper FROM titleauthor
  WHERE titleauthor.au_ID = authors.au_id
  )
  
  /*exists*/
  USE pubs
  SELECT au_lname, au_fname
  FROM authors
  WHERE exists
   (SELECT *
   FROM publishers
   WHERE authors.city = publishers.city)
  --EXISTS 用于检查子查询返回的行是否存在
  --该子查询实际上并不返回任何数据,而是返回 TRUE 或 FALSE
  
  /*union*/
  --Union 操作符:将两个或更多个 SELECT 语句的结果合并为一个结果集。
  --使用 ALL 子句表示不删除重复的行。
  --集合特性——唯一性,无序性
  --每个union select必须结构相同,列类型,数目,次序,数据类型相同
  
  /*distinct*/
  USE pubs
  SELECT AVG(DISTINCT price)
  FROM titles
  WHERE type = 'business'
  --如果使用 DISTINCT,那么在计算总和、平均值或计数之前,先消除重复的值。
  --如果使用 DISTINCT 关键字,表达式必须只包含列名。而不能包含算术表达式。
  
  /*table类型变量*/
  
  declare @mtab table(mid int,mname varchar(10))
  insert into @mtab
  print '更新之前'
  select * from @mtab
  update @mtab set mid=1009 where mid=1001
  print '更新之后'
  select * from @mtab
 
原创粉丝点击