在SQL中,数组是一种可以存储多个相同类型值的数据结构。不同数据库系统对数组的支持程度不同:
-- 创建包含数组列的表
CREATE TABLE products (
id SERIAL PRIMARY KEY,
name VARCHAR(100),
tags TEXT[],
prices NUMERIC(10,2)[]
);
-- 插入数组数据
INSERT INTO products (name, tags, prices)
VALUES ('Laptop', '{"electronics","portable"}', '{999.99,899.99}');
-- 查询包含特定元素的数组
SELECT * FROM products WHERE 'electronics' = ANY(tags);
-- 展开数组为行
SELECT id, name, unnest(tags) AS tag FROM products;
-- 创建包含JSON数组的表
CREATE TABLE orders (
id INT AUTO_INCREMENT PRIMARY KEY,
items JSON
);
-- 插入JSON数组
INSERT INTO orders (items)
VALUES ('[{"id":1,"name":"Keyboard"},{"id":2,"name":"Mouse"}]');
-- 查询JSON数组
SELECT id, JSON_EXTRACT(items, '$[*].name') AS item_names FROM orders;
-- 使用JSON_TABLE展开数组
SELECT o.id, j.item
FROM orders o,
JSON_TABLE(o.items, '$[*]' COLUMNS (
item JSON PATH '$'
)) AS j;
原因:未对数组列建立适当的索引
解决方案:
CREATE INDEX idx_tags ON products USING GIN(tags);
原因:数据库对数组大小有限制
解决方案:
max_array_length
配置原因:不同数据库数组实现方式不同
解决方案:
解决方案:
-- PostgreSQL数组聚合
SELECT department_id, array_agg(employee_name)
FROM employees
GROUP BY department_id;
-- MySQL JSON数组聚合
SELECT department_id, JSON_ARRAYAGG(employee_name)
FROM employees
GROUP BY department_id;
数组在SQL中是一个强大的特性,但需要根据具体数据库系统和应用场景合理使用。