南大通用GBase8s 常用SQL语句(216)

ALL、ANY、SOME 子查询
下列示例返回所有包含一项的所有订单的订单编号,该项的总价大于订单编号 1023 中每项的总价。第一个 SELECT 使用 ALL 子查询,第二个 SELECT 通过使用 MAX 聚集函数产生相同的结果。
SELECT DISTINCT order_num FROM items
WHERE total_price > ALL (SELECT total_price FROM items
WHERE order_num = 1023);

    SELECT DISTINCT order_num FROM items
    WHERE total_price > SELECT MAX(total_price) FROM items
    WHERE order_num = 1023);

下列 SELECT 语句返回所有包含一项的所有订单的订单编号,该项的总价大于订单编号 1023 中至少一项的总价。第一个 SELECT 语句使用 ANY 关键字,而第二个 SELECT 语句使用 MIN 聚集函数:
SELECT DISTINCT order_num FROM items
WHERE total_price > ANY (SELECT total_price FROM items
WHERE order_num = 1023);

    SELECT DISTINCT order_num FROM items
    WHERE total_price > (SELECT MIN(total_price) FROM items
    WHERE order_num = 1023);

如果子查询恰好返回一个值,则您可在子查询中省略关键字 ANY、ALL 或 SOME。如果您省略 ANY、ALL 或 SOME,且子查询返回多个值,则您会收到错误。下一示例中的子查询仅返回一行,因为它使用聚集函数:
SELECT order_num FROM items
WHERE stock_num = 9 AND quantity =
(SELECT MAX(quantity) FROM items WHERE stock_num = 9);
另请参阅 ALL、ANY 和 SOME 子查询。
在 WHERE 子句中指定连接
您在 WHERE 子句中通过创建关系来连接两表,在来自一表的至少一列与来自另一表的至少一列之间连接。该连接创建临时的合成表,其中的满足连接条件的每一行对相连接形成单行。
连接

数据源

元素 描述 限制 语法
alias 为表或视图在 FROM 子句中声明的临时的可替代名称 请参阅 自连接;FROM 子句 标识符
column 要被连接的表或视图的列 必须在表或视图中存在 标识符
external 要从其检索数据的外部表 外部表必须存在 数据库对象名
synonym、table、view 在查询中要被连接的同义词、表或视图的名称 同义词和它指向的表或视图必须存在 数据库对象名
当指定的列的值之间相匹配时,来自该表或视图的列是连接的。当要被连接的列有相同的名称时,您必须以其数据源来限定每一列名称。
双表连接
您可创建双表连接、多表连接、自连接和外连接( GBase 8s 扩展语法)。下列样例展示双表连接:
SELECT order_num, lname, fname FROM customer, orders
WHERE customer.customer_num = orders.customer_num;
多表连接
多表连接是多于两个表的连接。它的结构类似于双表连接的结构,除了您在 WHERE 子句中有对于多于一对表的连接条件。当来自不同的表的列有相同的名称时,您必须以它的相关联的表或表别名来限定列名称,如在 table.column 中。要获取表名称的完整语法,请参阅 数据库对象名。
下列多表连接产生订购了一项的客户的公司名称及其库存编号和生产商代码:
SELECT DISTINCT company, stock_num, manu_code
FROM customer c, orders o, items i
WHERE c.customer_num = o.customer_num
AND o.order_num = i.order_num;
自连接
您可将表连接到自身。要这样做,您必须在 FROM 子句中列出该表名称两次,并为它指定两个不同的表别名。在 WHERE 子句中使用别名来引用这两个表中的每一个。下一示例是 stock 表上的自连接。它找到库存项的对,其单价差一个大于 2.5 的系数。字母 x 和 y 分别为 stock 表的两个别名。
SELECT x.stock_num, x.manu_code, y.stock_num, y.manu_code
FROM stock x, stock y WHERE x.unit_price > 2.5 * y.unit_price;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值