Примеры операторов SELECT с различными типами полей
Простой SELECT использующий только имена полей:
SELECT cust_id, cust_name, phone
FROM customers
WHERE city = 'London'
Запрос с конкатенацией и вызовом функции в списке полей:
SELECT
'Mr./Mrs. ' || lastname,
street,
zip,
upper(city)
FROM contacts
WHERE date_last_purchase(id) = current_date
Запрос с двумя подзапросами:
SELECT
p.fullname,
(SELECT name FROM classes c
WHERE c.id = p.class) AS class,
(SELECT name FROM mentors m
WHERE m.id = p.mentor) AS mentor
FROM pupils p
Следующий запрос делает то же самое, что и предыдущий, только с использованием соединения таблиц (JOIN) вместо подзапросов:
SELECT
p.fullname,
c.name AS class,
m.name AS mentor
FROM pupils p
JOIN classes c ON c.id = p.class
JOIN mentors m ON m.id = p.mentor
Этот запрос использует конструкцию CASE
для определения корректного обращения, например, при рассылке сообщений конкретному человеку:
SELECT
CASE upper(sex)
WHEN 'F' THEN 'Mrs.'
WHEN 'M' THEN 'Mr.'
ELSE ''
END AS title,
lastname,
address
FROM employees
Запрос с использованием оконной функции.Выводит сотрудников отранжированных по заработной плате.
SELECT
id,
salary,
name,
DENSE_RANK() OVER(ORDER BY salary) AS EMP_RANK
FROM employees
ORDER BY salary;
Запрос к хранимой процедуре:
SELECT *
FROM interesting_transactions(2010, 3, 'S')
ORDER BY amount
Выборка полей производной таблицы.Производная таблица – это заключённый в скобки оператор SELECT
, результат которого используется в запросе уровнем выше, как будто является обычной таблицей или представлением.
SELECT
fieldcount,
COUNT(relation) AS num_tables
FROM
(SELECT
r.rdb$relation_name AS relation,
COUNT(*) AS fieldcount
FROM rdb$relations r
JOIN rdb$relation_fields rf
ON rf.rdb$relation_name = r.rdb$relation_name
GROUP BY relation)
GROUP BY fieldcount
Запрос к контекстной переменной CURRENT_TIME
:
SELECT current_time FROM rdb$database
Для тех, кто не знаком с RDB$DATABASE
: это системная таблица, которая всегда существует во всех базах данных Firebird и всегда содержит только одну строку.И, хотя эта таблица не была создана специально для этой цели, стало распространённой практикой среди разработчиков Firebird выполнять запросы к этой таблице в случае, если нужно выполнить запрос, не привязанный ни к какой таблице, в котором результат получается из выражений, указанных в списке полей оператора SELECT.Например:
SELECT
power(12, 2) AS twelve_squared,
power(12, 3) AS twelve_cubed
FROM rdb$database
И, наконец, пример запроса к самой таблице RDB$DATABASE
, с помощью которого можно получить кодировку по умолчанию данной БД:
SELECT rdb$character_set_name FROM rdb$database