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


SELECT pilot_name, hobbies->'sports' AS sports



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

SELECT pilot_name, hobbies->'sports' AS sports
FROM pilot_hobbies
WHERE hobbies->'sports' @> '[ "футбол" ]'::jsonb;
52


pilot_name |
sports
------------+----------------------------------
Ivan
| ["футбол", "плавание"]
Boris
| ["футбол", "плавание", "теннис"]
(2 строки)
В этом решении мы выводим только информацию о спортивных предпочтениях пи-
лотов. Внимательно посмотрите, как используются одинарные и двойные кавычки.
Операция «

>
» служит для обращения к конкретному ключу JSON-объекта.
При создании столбца с типом данных json или jsonb не требуется задавать структу-
ру объектов, т. е. конкретные имена ключей. Поэтому в принципе возможна ситуа-
ция, когда в разных строках в JSON-объектах будут использоваться различные набо-
ры ключей. В нашем примере структуры JSON-объектов во всех строках совпадают. А
если бы они не совпадали, то как можно было бы проверить наличие ключа? Проде-
монстрируем это.
Ключа «sport» в наших объектах нет. Что покажет вызов функции count?
SELECT count( * )
FROM pilot_hobbies
WHERE hobbies ? 'sport';
count
-------
0
(1 строка)
А вот ключ «sports» присутствует. Выполним ту же проверку:
SELECT count( * )
FROM pilot_hobbies
WHERE hobbies ? 'sports';
Да, так и есть. Такие записи найдены.
count
-------
4
(1 строка)
А как выполнять обновление JSON-объектов в строках таблицы? Предположим, что
пилот по имени Boris решил посвятить себя только хоккею. Тогда в базе данных мы
выполним такую операцию:
UPDATE pilot_hobbies
SET hobbies = hobbies || '{ "sports": [ "хоккей" ] }'
WHERE pilot_name = 'Boris';
UPDATE 1
Проверим, что получилось:


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




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

    Басты бет