تتيح لك دالة الجدول Values إنشاء مساحة تخزين مؤقتة تُملأ
أعمدتها بالقيم. وهي مفيدة للاختبارات السريعة أو لإنشاء بيانات تجريبية.
الدالة Values غير حساسة لحالة الأحرف؛ أي إن VALUES و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
تحتوي على قيم من أي نوع.
يمكن أيضًا استبدال الـ 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;
تتبع الأسماء المستعارة للأعمدة بعد AS t(col1, col2, ...) الصيغة القياسية في SQL
لتسمية أعمدة الجداول المشتقة. وإذا أُهملت، تُسمّى الأعمدة c1 وc2 وهكذا.