🍃 1. 子查询表达式有四种类型
,分别为表格
(tabular)、柱形
(columnar)、行
(row)、和标量
(scalar)。
🍃 2. 表格子查询:子查询返回一张表,该子查询必须出现在SQL-92中规定的使用位置,即出现在FROM
子句中。
🍃 3. 柱状子查询:子查询返回一张仅包含一列的表,这是原SQL-86和SQL-89中的一种重要类型,因为IN
、<比较操作符>ALL
和<比较操作符>{ANY|SOME}
谓词,将单个列转换成一列由AND或者OR连接的比较运算的语言能力。
🍃 4. 行子查询:行子查询返回单行。在使用行的地方都可以使用此类子查询。这种子查询是嵌入式SQL中使用的单例SELECT语句的基础。这类子查询现在用的并不多。
🍃 5. 标量子查询:标量子查询返回单个标量值。它可以用在任何可使用标量值的地方,即可用于SELECT或WHERER子句中。如果标量子查询返回空结果,则转换为NULL。如果标量子查询返回多行,将返回基数违规错误。
1. 表格子查询
🍂 表子查询:返回一张多行多列的表,可以理解其为一张一次性的视图。此种子查询出现在FROM
子句中,执行的时候内部子查询优先执行
。
🍂子查询查询结果可以作为一张表和别表关联查询。
- 创建产品(
product
)表,插入数据:⏬
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for product
-- ----------------------------
DROP TABLE IF EXISTS `product`;
CREATE TABLE `product` (
`product_id` char(4) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
`product_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
`product_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
`sale_price` int(11) NULL DEFAULT NULL,
`purchase_price` int(11) NULL DEFAULT NULL,
`regist_date` date NULL DEFAULT NULL,
PRIMARY KEY (`product_id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of product
-- ----------------------------
INSERT INTO `product` VALUES ('0001', 'T恤', '衣服', 1000, 500, '2009-09-20');
INSERT INTO `product` VALUES ('0002', '打孔器', '办公用品', 500, 320, '2009-09-11');
INSERT INTO `product` VALUES ('0003', '运动T恤', '衣服', 4000, 2800, NULL);
INSERT INTO `product` VALUES ('0004', '菜刀', '厨房用具', 3000, 2800, '2009-09-20');
INSERT INTO `product` VALUES ('0005', '高压锅', '厨房用具', 6800,