تتيح لك دالة الجدول Values إنشاء مساحة تخزين مؤقتة تُملأ
أعمدتها بالقيم. وهي مفيدة للاختبارات السريعة أو لإنشاء بيانات تجريبية.
الصيغة
الصيغة الأساسية لدالة الجدول VALUES هي:
VALUES([structure,] values...)يُستخدم عادةً على النحو التالي:
VALUES(
['column1_name Type1, column2_name Type2, ...'],
(value1_row1, value2_row1, ...),
(value1_row2, value2_row2, ...),
...
)الوسائط
column1_name Type1, ...(اختياري). String يحدّد أسماء الأعمدة وأنواعها. إذا أُهمِل هذا الوسيط، فستُسمّى الأعمدةc1وc2وهكذا.(value1_row1, value2_row1). Tuples تحتوي على قيم من أي نوع.
القيمة المُعادة
- يُرجِع جدولًا مؤقتًا يحتوي على القيم المُمرَّرة.
أمثلة
SELECT *
FROM VALUES(
'person String, place String',
('Noah', 'Paris'),
('Emma', 'Tokyo'),
('Liam', 'Sydney'),
('Olivia', 'Berlin'),
('Ilya', 'London'),
('Sophia', 'London'),
('Jackson', 'Madrid'),
('Alexey', 'Amsterdam'),
('Mason', 'Venice'),
('Isabella', 'Prague')
) ┌─person───┬─place─────┐
1. │ Noah │ Paris │
2. │ Emma │ Tokyo │
3. │ Liam │ Sydney │
4. │ Olivia │ Berlin │
5. │ Ilya │ London │
6. │ Sophia │ London │
7. │ Jackson │ Madrid │
8. │ Alexey │ Amsterdam │
9. │ Mason │ Venice │
10. │ Isabella │ Prague │
└──────────┴───────────┘يمكن أيضًا استخدام VALUES مع قيم مفردة بدلًا من tuples. على سبيل المثال:
SELECT *
FROM VALUES(
'person String',
'Noah',
'Emma',
'Liam',
'Olivia',
'Ilya',
'Sophia',
'Jackson',
'Alexey',
'Mason',
'Isabella'
) ┌─person───┐
1. │ Noah │
2. │ Emma │
3. │ Liam │
4. │ Olivia │
5. │ Ilya │
6. │ Sophia │
7. │ Jackson │
8. │ Alexey │
9. │ Mason │
10. │ Isabella │
└──────────┘أو من دون تحديد مواصفات صف ('column1_name Type1, column2_name Type2, ...'
في الصيغة)، وفي هذه الحالة تُسمّى الأعمدة تلقائيًا.
على سبيل المثال:
-- tuples as values
SELECT *
FROM VALUES(
('Noah', 'Paris'),
('Emma', 'Tokyo'),
('Liam', 'Sydney'),
('Olivia', 'Berlin'),
('Ilya', 'London'),
('Sophia', 'London'),
('Jackson', 'Madrid'),
('Alexey', 'Amsterdam'),
('Mason', 'Venice'),
('Isabella', 'Prague')
) ┌─c1───────┬─c2────────┐
1. │ Noah │ Paris │
2. │ Emma │ Tokyo │
3. │ Liam │ Sydney │
4. │ Olivia │ Berlin │
5. │ Ilya │ London │
6. │ Sophia │ London │
7. │ Jackson │ Madrid │
8. │ Alexey │ Amsterdam │
9. │ Mason │ Venice │
10. │ Isabella │ Prague │
└──────────┴───────────┘-- single values
SELECT *
FROM VALUES(
'Noah',
'Emma',
'Liam',
'Olivia',
'Ilya',
'Sophia',
'Jackson',
'Alexey',
'Mason',
'Isabella'
) ┌─c1───────┐
1. │ Noah │
2. │ Emma │
3. │ Liam │
4. │ Olivia │
5. │ Ilya │
6. │ Sophia │
7. │ Jackson │
8. │ Alexey │
9. │ Mason │
10. │ Isabella │
└──────────┘عبارة VALUES القياسية في SQL
اعتبارًا من الإصدار 26.3، يدعم ClickHouse أيضًا عبارة VALUES القياسية في SQL كتعبير جدول
ضمن FROM، كما في PostgreSQL وMySQL وDuckDB وSQL Server. وتُعاد كتابة
هذه الصيغة داخليًا لاستخدام دالة الجدول values الموضحة أعلاه.
SELECT * FROM (VALUES (1, 'a'), (2, 'b'), (3, 'c')) AS t(id, val);┌─id─┬─val─┐
│ 1 │ a │
│ 2 │ b │
│ 3 │ c │
└────┴─────┘يمكن استخدامه ضمن CTEs:
WITH cte AS (SELECT * FROM (VALUES (1, 'one'), (2, 'two')) AS t(id, name))
SELECT * FROM cte;وفي عمليات JOIN:
SELECT t1.id, t1.val, t2.val2
FROM (VALUES (1, 'a'), (2, 'b')) AS t1(id, val)
JOIN (VALUES (1, 'x'), (2, 'y')) AS t2(id, val2) ON t1.id = t2.id;