Учебно-практическое пособие москва 2017 ббк


SET schedule[ 1 ] = 2, schedule[ 2 ] = 3



Pdf көрінісі
бет44/243
Дата21.07.2022
өлшемі3,05 Mb.
#147663
түріУчебно-практическое пособие
1   ...   40   41   42   43   44   45   46   47   ...   243
Байланысты:
Язык SQL. Базовый курс

SET schedule[ 1 ] = 2, schedule[ 2 ] = 3
WHERE pilot_name = 'Petr';
UPDATE 1
А можно было бы, используя срез (slice) массива, сделать и так:
UPDATE pilots
SET schedule[ 1:2 ] = ARRAY[ 2, 3 ]
WHERE pilot_name = 'Petr';
UPDATE 1
В вышеприведенной команде запись 1:2 означает индексы первого и последнего эле-
ментов диапазона массива. Нотация с использованием ключевого слова ARRAY — это
альтернативный способ создания массива (он соответствует стандарту SQL). Таким
образом, присваивание новых значений производится сразу целому диапазону эле-
ментов массива.
SELECT * FROM pilots;
pilot_name | schedule
------------+-----------
Boris
| {3,5,6,7}
Pavel
| {1,2,5,6}
Ivan
| {1,3,6,7}
Petr
| {2,3,5,7}
(4 строки)
Теперь продемонстрируем основные операции, которые можно применять к масси-
вам, выполняя выборки из таблиц.
Получим список пилотов, которые летают каждую среду:
SELECT * FROM pilots
WHERE array_position( schedule, 3 ) IS NOT NULL;
49


pilot_name | schedule
------------+-----------
Boris
| {3,5,6,7}
Ivan
| {1,3,6,7}
Petr
| {2,3,5,7}
(3 строки)
Функция array_position возвращает индекс первого вхождения элемента с указанным
значением в массив. Если же такого элемента нет, она возвратит NULL.
Выберем пилотов, летающих по понедельникам и воскресеньям:
SELECT *
FROM pilots
WHERE schedule @> '{ 1, 7 }'::integer[];
pilot_name | schedule
------------+-----------
Ivan
| {1,3,6,7}
(1 строка)
Оператор @> означает проверку того факта, что в левом массиве содержатся все эле-
менты правого массива. Конечно, при этом в левом массиве могут находиться и дру-
гие элементы, что мы и видим в графике этого пилота.
Еще аналогичный вопрос: кто летает по вторникам и/или по пятницам? Для получе-
ния ответа воспользуемся оператором &&, который проверяет наличие общих эле-
ментов у массивов, т. е. пересекаются ли их множества значений. В нашем примере
число общих элементов, если они есть, может быть равно одному или двум. Здесь мы
также использовали нотацию с ключевым словом ARRAY, а не '{ 2, 5 }'::integer[]. Вы
можете применять ту, которая принята в рамках выполнения вашего проекта.


Достарыңызбен бөлісу:
1   ...   40   41   42   43   44   45   46   47   ...   243




©engime.org 2024
әкімшілігінің қараңыз

    Басты бет