Учебное пособие Санкт-Петербург «бхв-петербург»


SELECT pilot_name, hobbies->'sports' AS sports



Pdf көрінісі
бет52/256
Дата18.11.2022
өлшемі1.88 Mb.
#465124
түріУчебное пособие
1   ...   48   49   50   51   52   53   54   55   ...   256
sql osnovi yazika

SELECT pilot_name, hobbies->'sports' AS sports
FROM pilot_hobbies
WHERE hobbies->'sports' @> '[ "футбол" ]'::jsonb;
pilot_name |
sports
------------+----------------------------------
Ivan
| ["футбол", "плавание"]
Boris
| ["футбол", "плавание", "теннис"]
(2 строки)
70


4.6. Типы JSON
В этом решении мы выводим только информацию о спортивных предпочтениях пи-
лотов. Внимательно посмотрите, как используются одинарные и двойные кавычки.
Операция -> служит для обращения к конкретному ключу 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
71




Достарыңызбен бөлісу:
1   ...   48   49   50   51   52   53   54   55   ...   256




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

    Басты бет