SELECT p
FROM Player p
|
Java Platform, Enterprise Edition (Java EE) 8 Учебник по Java EE |
| Назад | Вперёд | Содержание |
Следующие запросы выполняются к сущности Player приложения roster, которая описана в приложении roster.
Здесь рассматриваются следующие темы:
Если вы не знакомы с языком запросов, эти простые запросы станут хорошей отправной точкой.
Здесь рассматриваются следующие темы:
SELECT p
FROM Player p
Полученные данные: все игроки.
Описание: предложение FROM объявляет переменную p, опуская необязательное ключевое слово AS. Если бы было включено ключевое слово AS, предложение было бы записано следующим образом:
FROM Player AS p
Элемент Player в схеме абстракций соответствует сущности Player.
Смотрите также: Идентификационные переменные.
SELECT DISTINCT p
FROM Player p
WHERE p.position = ?1
Полученные данные: игроки с позицией, указанной параметром запроса.
Описание: ключевое слово DISTINCT удаляет повторяющиеся значения.
Предложение WHERE фильтрует игроков путём проверки их position, персистентного поля сущности Player. Элемент ?1 обозначает входной параметр запроса.
Смотрите также: Входные параметры и Ключевое слово DISTINCT.
SELECT DISTINCT p
FROM Player p
WHERE p.position = :position AND p.name = :name
Полученные данные: игроки с указанными позицией и именем.
Описание: элементы position и name являются персистентными полями сущности Player. Предложение WHERE сравнивает значения этих полей с именованными параметрами запроса, установленными с помощью метода Query.setNamedParameter. Язык запросов обозначает именованный входной параметр, используя двоеточие (:), за которым следует идентификатор. Первый входной параметр — :position, второй — :name.
На языке запросов выражение может перемещаться по связанным объектам. Эти выражения являются основным отличием языка запросов персистентности Java от SQL. Запросы перемещают к связанным объектам, тогда как SQL объединяет таблицы.
Здесь рассматриваются следующие темы:
SELECT DISTINCT p
FROM Player p, IN (p.teams) t
Полученные данные: все игроки, играющие за команду (неважно какую).
Описание: предложение FROM объявляет две переменные: p и t. Переменная p представляет сущность Player, а переменная t представляет связанную сущность Team. Объявление для t ссылается на ранее объявленную переменную p. Ключевое слово IN означает, что teams является набором связанных сущностей. Выражение p.teams перемещается от Player к связанной с ним Team. Точка в выражении p.teams является оператором навигации.
Тот же запрос может быть написан с использованием оператора JOIN:
SELECT DISTINCT p
FROM Player p JOIN p.teams t
Или так:
SELECT DISTINCT p
FROM Player p
WHERE p.team IS NOT EMPTY
Используйте оператор предложения JOIN, чтобы перейти к однозначному полю отношений:
SELECT t
FROM Team t JOIN t.league l
WHERE l.sport ='football'
В этом примере запрос вернёт все команды из футбольной лиги.
SELECT DISTINCT p
FROM Player p, IN (p.teams) AS t
WHERE t.city = :city
Полученные данные: игроки, команды которых находятся в указанном городе.
Описание: этот запрос похож на предыдущий пример, но добавляет входной параметр. Ключевое слово AS в предложении FROM является необязательным. В предложении WHERE точка, предшествующая персистентной переменной city, является разделителем, а не оператором навигации. Строго говоря, выражения могут перемещаться к полям отношений (связанным объектам), но не к персистентным полям. Чтобы получить доступ к персистентному полю, выражение использует точку в качестве разделителя.
Выражения не могут выходить за пределы (или уточнять) полей отношений, которые являются коллекциями. В синтаксисе выражения поле со значением коллекции является терминальным символом. Поскольку поле teams является коллекцией, предложение WHERE не может указывать p.teams.city (недопустимое выражение).
Смотрите также: Выражения пути.
SELECT DISTINCT p
FROM Player p, IN (p.teams) t
WHERE t.league = :league
Полученные данные: игроки указанной лиги.
Описание: выражения в этом запросе перемещаются по двум отношениям. Выражение p.teams перемещается по отношению Player-Team, а выражение t.league перемещается по отношению Team-League.
В других примерах входными параметрами являются объекты String. В этом примере параметр является объектом типа League. Этот тип соответствует полю отношения league в выражении сравнения предложения WHERE.
SELECT DISTINCT p
FROM Player p, IN (p.teams) t
WHERE t.league.sport = :sport
Полученные данные: игроки, участвующие в указанном виде спорта.
Описание: персистентное поле sport принадлежит сущности League. Чтобы добраться до поля sport, запрос должен сначала перейти от сущности Player к Team (p.teams) а затем из Team в организацию League (t.league). Поскольку это не коллекция, за полем отношений league может следовать персистентное поле sport.
Каждое предложение WHERE должно указывать условное выражение одного из нескольких видов. В предыдущих примерах условные выражения — это выражения сравнения, которые проверяют равенство. Следующие примеры демонстрируют и другие виды условных выражений. Для описания всех условных выражений см. Выражение WHERE.
Здесь рассматриваются следующие темы:
SELECT p
FROM Player p
WHERE p.name LIKE 'Mich%'
Полученные данные: все игроки, чьи имена начинаются с "Mich".
Описание: выражение LIKE использует символы подстановки для выборки строк, соответствующих шаблону подстановки. В этом случае запрос использует выражение LIKE и подстановочный знак %, чтобы найти всех игроков, имена которых начинаются со строки «Mich». Например, «Michael» и «Michelle» оба соответствуют шаблону подстановочных знаков.
Смотрите также: Выражения LIKE.
SELECT t
FROM Team t
WHERE t.league IS NULL
Полученные данные: все команды, не связанные ни с одной лигой.
Описание: выражение IS NULL можно использовать для проверки, установлена ли связь между двумя сущностями. В этом случае запрос проверяет, связаны ли команды с какой-либо лигой, и возвращает команды, которые не имеют лигу.
Смотрите также: выражения сравнения NULL и значения NULL.
SELECT p
FROM Player p
WHERE p.teams IS EMPTY
Полученные данные: все игроки без команды.
Описание: поле отношения teams объекта Player является коллекцией. Если игрок не принадлежит ни к одной команде, коллекция teams пуста, а условное выражение равно TRUE.
Смотрите также: Выражения сравнения с пустой коллекцией.
SELECT DISTINCT p
FROM Player p
WHERE p.salary BETWEEN :lowerSalary AND :higherSalary
Полученные данные: игроки, зарплаты которых находятся в указанном диапазоне.
Описание: BETWEEN имеет три арифметических выражения: персистентное поле (p.salary) и два входных параметра (:lowerSalary и :higherSalary). Следующее выражение эквивалентно выражению BETWEEN:
p.salary >= :lowerSalary AND p.salary <= :higherSalary
Смотрите также: Выражения BETWEEN.
SELECT DISTINCT p1
FROM Player p1, Player p2
WHERE p1.salary > p2.salary AND p2.name = :name
Полученные данные: все игроки, чья зарплата выше зарплаты игрока с указанным именем.
Описание: предложение FROM объявляет две переменные (p1 и p2) типа Player. Две переменные необходимы, потому что предложение WHERE сравнивает зарплату одного игрока (p2) с зарплатой других игроков (p1).
Смотрите также: Идентификационные переменные.
В следующих примерах показано, как использовать выражения UPDATE и DELETE в запросах. UPDATE и DELETE работают с несколькими объектами в соответствии с условием/условиями, установленными в предложении WHERE. Предложение WHERE в запросах UPDATE и DELETE соответствует тем же правилам, что и запросы SELECT.
Здесь рассматриваются следующие темы:
UPDATE Player p
SET p.status = 'inactive'
WHERE p.lastPlayed < :inactiveThresholdDate
Описание: этот запрос устанавливает статус группы игроков в inactive, если последняя игра игрока была раньше даты, указанной в inactiveThresholdDate.
DELETE
FROM Player p
WHERE p.status = 'inactive'
AND p.teams IS EMPTY
Описание: Этот запрос удаляет всех неактивных игроков без команды.
| Назад | Вперёд | Содержание |
Copyright © 2017, Oracle и/или её дочерних компаний. Все права защищены.
Версия перевода 1.0.5 (Java EE Tutorial — русскоязычная версия)