Exemples d’instructions SELECT avec différents types de champs
Un simple SELECT utilisant uniquement les noms des champs :
SELECT cust_id, cust_name, phone
FROM customers
WHERE city = 'London'
Requête avec concaténation et appel de fonction dans la liste des champs :
SELECT
'Mr./Mrs. ' || lastname,
street,
zip,
upper(city)
FROM contacts
WHERE date_last_purchase(id) = current_date
Une requête avec deux sous-requêtes :
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
La requête suivante fait la même chose que la précédente, mais en utilisant des jointures (JOIN) au lieu de sous-requêtes :
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
Cette requête utilise une construction CASE
pour déterminer le traitement correct, par exemple, lors de l’envoi de messages à une personne spécifique :
SELECT
CASE upper(sex)
WHEN 'F' THEN 'Mrs.'
WHEN 'M' THEN 'Mr.'
ELSE ''
END AS title,
lastname,
address
FROM employees
Interrogation à l’aide d’une fonction de fenêtre, qui permet d’obtenir les employés classés par ordre de salaire.
SELECT
id,
salary,
name,
DENSE_RANK() OVER(ORDER BY salary) AS EMP_RANK
FROM employees
ORDER BY salary;
Interroger une procédure stockée :
SELECT *
FROM interesting_transactions(2010, 3, 'S')
ORDER BY amount
Sélection de champs dans une table dérivée : une table dérivée est une instruction SELECT
entre crochets dont le résultat est utilisé dans la requête ci-dessus comme s’il s’agissait d’une table ou d’une vue normale.
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
Interroger la variable contextuelle CURRENT_TIME
:
SELECT current_time FROM rdb$database
Pour ceux qui ne sont pas familiers avec RDB$DATABASE
: c’est une table système qui existe toujours dans toutes les bases de données Firebird, et qui contient toujours une seule ligne.Et bien que cette table n’ait pas été créée spécifiquement dans ce but, il est devenu courant pour les développeurs de Firebird d’interroger cette table si vous voulez exécuter une requête qui n’est liée à aucune table, dans laquelle le résultat est dérivé d’expressions spécifiées dans la liste de champs de l’instruction SELECT.
Par exemple :
SELECT
power(12, 2) AS twelve_squared,
power(12, 3) AS twelve_cubed
FROM rdb$database
Enfin, un exemple de requête à la table RDB$DATABASE
elle-même, qui peut être utilisée pour obtenir l’encodage par défaut de cette base de données :
SELECT rdb$character_set_name FROM rdb$database