#### 13.2.11.1子查询作为标量操作数

在最简单的形式中，子查询是返回单个值的标量子查询。标量子查询是一个简单的操作数，您几乎可以在任何单个列值或文字合法的地方使用它，并且您可以期望它具有所有操作数都具有的特征：数据类型、长度，以及它可以是的指示`无效的`等等例如：

```
CREATE TABLE t1 (s1 INT, s2 CHAR(5) NOT NULL);
INSERT INTO t1 VALUES(100, 'abcde');
SELECT (SELECT s2 FROM t1);
```

这个函数中的子查询[`选择`](select.html)返回单个值(`“abcde”`)它的数据类型是[`烧焦`](char.html)，长度为5，字符集和排序规则等于[`创建表格`](create-table.html)时间，并指示该列中的值可以`无效的`。不会复制标量子查询所选值的可空性，因为如果子查询结果为空，则结果为空`无效的`.对于刚才显示的子查询，如果`t1`如果是空的，结果将是`无效的`尽管`s2`是`非空`.

在一些上下文中，标量子查询无法使用。如果语句只允许文本值，则不能使用子查询。例如`限度`需要文字整型参数，并且[`加载数据`](load-data.html)需要文本字符串文件名。不能使用子查询提供这些值。

当你在下面的章节中看到一些例子，其中包含了相当简朴的结构`（从t1中选择第1列）`，想象一下，您自己的代码包含更加多样化和复杂的结构。

假设我们制作两张桌子：

```
CREATE TABLE t1 (s1 INT);
INSERT INTO t1 VALUES (1);
CREATE TABLE t2 (s1 INT);
INSERT INTO t2 VALUES (2);
```

然后表演一个[`选择`](select.html):

```
SELECT (SELECT s1 FROM t2) FROM t1;
```

结果是`2.`因为有一场争吵`t2`包含列的`s1`它的价值是`2.`.

在MySQL 8.0.19及更高版本中，前面的查询也可以这样编写，使用[`桌子`](table.html):

```
SELECT (TABLE t2) FROM t1;
```

标量子查询可以是表达式的一部分，但请记住括号，即使子查询是为函数提供参数的操作数也是如此。例如：

```
SELECT UPPER((SELECT s1 FROM t1)) FROM t2;
```

在MySQL 8.0.19和更高版本中，使用`从t2中选择上部（（表t1））`.
