FROM中子查询

 select e.ename,subq.loc
     from emp e,
      (select deptno,loc from dept where loc in('NEW YORK','DALLAS') ) subq
   where e.deptno=subq.deptno;
ENAME      LOC
---------- -------------
CLARK      NEW YORK
KING       NEW YORK
MILLER     NEW YORK
……
SQL> select ename,job,sal,rownum
    from (select ename,job,sal from emp order by sal)
     where rownum<=3;
ENAME      JOB              SAL     ROWNUM
---------- --------- ---------- ----------
SMITH      CLERK            800          1
JAMES      CLERK            950          2
ADAMS      CLERK           1100        3

 

《ps》 主要解决主查询中读取子查询中的列信息,类似  select aaa,bbb from A, B;

### SQL Server 中子查询的使用方法与示例 #### 子查询概述 子查询是在另一个 `SELECT`、`INSERT`、`UPDATE` 或 `DELETE` 语句内部执行的查询。这种结构允许更灵活的数据检索方式,尤其是在处理多表关联的情况下[^2]。 #### 使用等于运算符 (`=`) 的子查询 当需要匹配单个值时,可以使用等号运算符。例如,在两个表格之间基于某一字段相等关系获取特定记录: ```sql SELECT column1 FROM table1 WHERE column1 = (SELECT column2 FROM table2 WHERE condition); ``` 此命令会先执行括号内的子查询部分,得到唯一的结果并与外部查询条件对比,从而筛选符合条件的数据行[^1]。 #### IN 运算符的应用场景 如果希望从一组可能的值中挑选,则可采用 `IN` 关键字配合子查询实现这一目标。比如寻找属于某几个分类的商品列表: ```sql SELECT ProductID,ProductName FROM Products WHERE CategoryID IN ( SELECT DISTINCT CategoryID FROM Categories WHERE CategoryName LIKE 'Beverages%' ); ``` 这段代码表示选取那些类别名称以 "Beverages" 开头的产品信息[^4]。 #### ANY/SOME 及 ALL 运算符详解 对于涉及范围判断的操作,如大于最小值小于最大值等情况,可以通过 `ANY`/`SOME` 和 `ALL` 来简化逻辑表达。考虑如下情况——找出价格高于任意一款饮料类产品的商品: ```sql SELECT p.ProductName,p.UnitPrice FROM Products AS p WHERE UnitPrice > ANY( SELECT UnitPrice FROM Products WHERE CategoryID = 1 /*假设 Beverages 类别的 ID 是 1 */ ); ``` 这里利用了 `ANY` 关键词使得只要有一个满足即可成立;而如果是要求全部都超过的话则应该替换为 `ALL`。 #### 实际应用案例展示 为了更好地理解这些概念的实际用途,下面给出一个具体的例子:统计各城市客户订单数量最多的前两名供应商及其供应次数。 ```sql WITH TopSuppliersPerCity AS ( SELECT c.City, s.CompanyName Supplier, COUNT(o.OrderID) OrderCount, RANK() OVER(PARTITION BY c.City ORDER BY COUNT(o.OrderID) DESC) RankNum FROM Customers c JOIN Orders o ON c.CustomerID = o.CustomerID JOIN [Order Details] od ON o.OrderID = od.OrderID JOIN Products p ON od.ProductID = p.ProductID JOIN Suppliers s ON p.SupplierID = s.SupplierID GROUP BY c.City, s.CompanyName ) SELECT City,Supplier,OrderCount FROM TopSuppliersPerCity tspc WHERE RankNum <= 2; ``` 上述脚本通过窗口函数 `RANK()` 计算了每座城市的顶级供货商排名,并最终限定了只取前两位作为输出结果[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值