在 SQL 里**“元组(tuple)”通常指一行数据(record)**,也就是由多个字段组成的一条记录。不同数据库对“元组”的使用方式略有差异,下面按常见场景说明。
WHERE 中匹配多个字段(行级匹配)比如想查 (部门=10 且 工资=5000) 或 (部门=20 且 工资=8000):
SELECT *
FROM emp
WHERE (deptno, sal) IN (
(10, 5000),
(20, 8000)
);
✅ 这在 Oracle / PostgreSQL 中支持
❌ MySQL 不支持这种写法(要用 OR)
MySQL 等价写法:
SELECT *
FROM emp
WHERE (deptno=10 AND sal=5000)
OR (deptno=20 AND sal=8000);
INSERT INTO emp (id, name, deptno)
VALUES
(1, 'Alice', 10),
(2, 'Bob', 20),
(3, 'Tom', 30);
每一行 () 就是一个元组
PostgreSQL 支持真正的元组类型:
SELECT (id, name) AS t
FROM emp;
返回的是一行中的“复合值”。
还可以比较:
SELECT *
FROM emp
WHERE (id, name) = (1, 'Alice');
CREATE TYPE person AS (
id int,
name text
);
SELECT ROW(1, 'Alice')::person;
Oracle 中用 OBJECT TYPE 类似元组:
CREATE TYPE t_emp AS OBJECT (
id NUMBER,
name VARCHAR2(50)
);
其实你每天都在用元组:
SELECT *
FROM a
JOIN b
ON a.id = b.id AND a.date = b.date;
这里的 (a.id, a.date) 就是“元组”
| 数据库 | 元组写法支持 | 说明 |
|---|---|---|
| PostgreSQL | ✅ 非常好 | 原生支持 |
| Oracle | ✅ 较好 | 对象类型 |
| MySQL | ❌ 不支持 (a,b) IN (...) |
用 OR |
| SQL Server | ❌ 不直接支持 | 用 AND/OR |
SQL 中的“元组”= 一行数据 = 多个字段的组合
可用于:匹配行、插入多行、PostgreSQL 行类型、JOIN 条件
如果你告诉我用的数据库(MySQL / PostgreSQL / Oracle 等),我可以直接给你最合适、可运行的写法。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。