31
Les interrogations simples

SELECT {* | Expression [Alias] [,...] } FROM Table [WHERE Condition] [ORDER BY { Expression | Alias } [ ASC | DESC ] [NULLS FIRST | NULLS LAST ] [,...]

Embed Size (px)

Citation preview

Page 1: SELECT {* | Expression [Alias] [,...] } FROM Table [WHERE Condition] [ORDER BY { Expression | Alias } [ ASC | DESC ] [NULLS FIRST | NULLS LAST ] [,...]

Les interrogations

simples

Page 2: SELECT {* | Expression [Alias] [,...] } FROM Table [WHERE Condition] [ORDER BY { Expression | Alias } [ ASC | DESC ] [NULLS FIRST | NULLS LAST ] [,...]

IV-2

SELECT {* | Expression [Alias] [,...] } FROM Table [WHERE Condition] [ORDER BY { Expression | Alias }

[ ASC | DESC ] [NULLS FIRST | NULLS LAST ]

[,...] ] ;

{ } choisir un élément dans la liste [ ] optionnel [,...] l’élément précédent peut être répété ASC souligné, indique une valeur par

défaut si en MAJUSCULE écrire ce mot tel quel si en minuscule substituer une valeur

appropriée si en Italique, c’est un identifiant.

Syntaxe de SELECT

Page 3: SELECT {* | Expression [Alias] [,...] } FROM Table [WHERE Condition] [ORDER BY { Expression | Alias } [ ASC | DESC ] [NULLS FIRST | NULLS LAST ] [,...]

IV-3

SELECT sur toutes les colonnes

Sélection de toutes les colonnes:

* : indique que l'on désire toutes les colonnes.

id nom ville

40 Comptabilité Montréal

30 Ventes Québec

20 Recherches Sherbrooke

Table departement

SELECT *

FROM departement;

Id nom ville

40 Comptabilité Montréal

30 Ventes Québec

20 Recherches Sherbrooke

Page 4: SELECT {* | Expression [Alias] [,...] } FROM Table [WHERE Condition] [ORDER BY { Expression | Alias } [ ASC | DESC ] [NULLS FIRST | NULLS LAST ] [,...]

IV-4

Une expression est :◦ une colonne, une constante ou une

fonction

ou◦ un ensemble d’une ou plusieurs

colonnes, constantes et/ou fonctions combinées au moyen d’opérateurs.

Exemple : ◦ SELECT id_employe + 5 FROM employe;

Opérateurs :◦ Arithmétiques : + - * / ()◦ Caractères: || (concaténation)◦ Dates : + -

Les expressions

Page 5: SELECT {* | Expression [Alias] [,...] } FROM Table [WHERE Condition] [ORDER BY { Expression | Alias } [ ASC | DESC ] [NULLS FIRST | NULLS LAST ] [,...]

IV-5

SELECT sur une colonne Si l’on ne désire qu’une

colonne en particulier :

SELECT nom

FROM departement;

nom

Comptabilité

Ventes

Recherches

Page 6: SELECT {* | Expression [Alias] [,...] } FROM Table [WHERE Condition] [ORDER BY { Expression | Alias } [ ASC | DESC ] [NULLS FIRST | NULLS LAST ] [,...]

IV-6

Select sur plusieurs colonnes Pour sélectionner plusieurs

colonnes :

SELECT nom,ville

FROM departement;

nom ville

Comptabilité Montréal

Ventes Québec

Recherches Sherbrooke

Page 7: SELECT {* | Expression [Alias] [,...] } FROM Table [WHERE Condition] [ORDER BY { Expression | Alias } [ ASC | DESC ] [NULLS FIRST | NULLS LAST ] [,...]

IV-7

Faire afficher la liste de tous les employés ainsi que leur salaire actuel et une prévision de leur salaire augmenté de 15%.

SELECT nom, salaire, salaire*1.15

FROM employe

Utilisation d’expressionavec opérateur arithmétique

nom salaire salaire*1.15

Roy 5000,00 5750,00Cabana 2450,00 2817,50Bourque 2850,00 3277,50 .... .... ....

Page 8: SELECT {* | Expression [Alias] [,...] } FROM Table [WHERE Condition] [ORDER BY { Expression | Alias } [ ASC | DESC ] [NULLS FIRST | NULLS LAST ] [,...]

IV-8

Si on utilise un « alias de colonne » il sera utilisé comme entête dans le rapport

SELECT nom, salaire, salaire*1.15 calcul

FROM employe;

Utilisation d'alias

nom salaire calcul

Roy 5000,00 5750,00Cabana 2450,00 2817,50Bourque 2850,00 3277,50 .... .... ....

Page 9: SELECT {* | Expression [Alias] [,...] } FROM Table [WHERE Condition] [ORDER BY { Expression | Alias } [ ASC | DESC ] [NULLS FIRST | NULLS LAST ] [,...]

On peut utiliser un alias complexe (espace, accent, case ou mot réservé) si on utilise les " ".◦ Exemple :

SELECT

Nom “Nom du département”FROM

departement;

9

Utilisation d’alias

nom ville

Comptabilité Montréal

Ventes Québec

Recherches Sherbrooke

Page 10: SELECT {* | Expression [Alias] [,...] } FROM Table [WHERE Condition] [ORDER BY { Expression | Alias } [ ASC | DESC ] [NULLS FIRST | NULLS LAST ] [,...]

Pour sélectionner des rangées en particuliers :

SELECT

nom,ville

FROMdepartement

WHEREville = 'Montréal';

10

Clause WHERESélection des rangées

nom ville

Comptabilité Montréal

Ventes Québec

Recherches Sherbrooke

nom ville

Comptabilité Montréal

Page 11: SELECT {* | Expression [Alias] [,...] } FROM Table [WHERE Condition] [ORDER BY { Expression | Alias } [ ASC | DESC ] [NULLS FIRST | NULLS LAST ] [,...]

IL est possible qu’un SELECT ne retourne aucune rangée.

Afin de sélectionner une seule rangée, une méthode efficace est de faire un WHERE sur la clé primaire.

11

WHERE (suite)

Page 12: SELECT {* | Expression [Alias] [,...] } FROM Table [WHERE Condition] [ORDER BY { Expression | Alias } [ ASC | DESC ] [NULLS FIRST | NULLS LAST ] [,...]

Condition simple: se compose d’une expression, d’un opérateur de comparaison (ou autre) et d’une expression.

Opérateurs de comparaison : =, <>, <, >, <=, >= (<> , != et ^= testent l’inégalité)

Autres : IN (liste) BETWEEN min AND max

LIKE masque IS NULL

Exemple : SELECT

nomFROM

employeWHERE

id >= 10;

12

Condition simple

Page 13: SELECT {* | Expression [Alias] [,...] } FROM Table [WHERE Condition] [ORDER BY { Expression | Alias } [ ASC | DESC ] [NULLS FIRST | NULLS LAST ] [,...]

Permet de vérifier si une valeur fait partie d'une liste de valeurs, d’un ensemble

SELECT nom

FROMdepartement

WHERE ville IN ('Montréal','Québec','Longueuil');

13

L'opérateur IN

Page 14: SELECT {* | Expression [Alias] [,...] } FROM Table [WHERE Condition] [ORDER BY { Expression | Alias } [ ASC | DESC ] [NULLS FIRST | NULLS LAST ] [,...]

Attention de ne pas confondre le = et le IN.

Le = ne fonctionne que pour une comparaison avec une valeur.

Exemple :…WHERE

id= 10 ANDsalaire = commission;

14

Opérateur IN versus =

Page 15: SELECT {* | Expression [Alias] [,...] } FROM Table [WHERE Condition] [ORDER BY { Expression | Alias } [ ASC | DESC ] [NULLS FIRST | NULLS LAST ] [,...]

SELECT nom

FROM departement

WHERE id BETWEEN 30 AND 70;

est équivalent à

…WHERE

id >= 30 AND id<= 70;

Donc le BETWEEN est inclusif.

15

BETWEEN ... AND ...

Page 16: SELECT {* | Expression [Alias] [,...] } FROM Table [WHERE Condition] [ORDER BY { Expression | Alias } [ ASC | DESC ] [NULLS FIRST | NULLS LAST ] [,...]

Syntaxe: LIKE Masque Les masques: % : signifie n'importe quelle chaîne de caractères _ : signifie n'importe quel caractère autre : signifie le caractère indiqué.

Pour avoir la liste des employés dont le nom commence par la lettre R (la case est

importante):

SELECT nom

FROM employe

WHERE nom LIKE 'R%';

16

L'opérateur LIKE

Page 17: SELECT {* | Expression [Alias] [,...] } FROM Table [WHERE Condition] [ORDER BY { Expression | Alias } [ ASC | DESC ] [NULLS FIRST | NULLS LAST ] [,...]

Pour les employés dont le nom se termine par A:

SELECT idFROMemployeWHERE nom LIKE '%A';

Pour la liste des employés dont le nom commence par la lettre J suivie d'exactement 3 caractères:

SELECT nom

FROM employe

WHERE nom LIKE 'J_ _ _';

IV-17

L'opérateur LIKE (suite)

Page 18: SELECT {* | Expression [Alias] [,...] } FROM Table [WHERE Condition] [ORDER BY { Expression | Alias } [ ASC | DESC ] [NULLS FIRST | NULLS LAST ] [,...]

NULL signifie absence de valeur (ou valeur inconnue) Ne pas confondre 0 (zéro) et

NULL

2 + 0 => 2 2 + NULL => NULL

18

L'opérateur IS NULL

Page 19: SELECT {* | Expression [Alias] [,...] } FROM Table [WHERE Condition] [ORDER BY { Expression | Alias } [ ASC | DESC ] [NULLS FIRST | NULLS LAST ] [,...]

Afficher la liste de tous les employés qui n'ont pas de commission

SELECT nom

FROMemploye

WHERE commission IS NULL;

Afficher la liste de tous les employés qui touchent une commission

SELECT nom

FROMemploye

WHERE commission IS NOT NULL;

19

Exemple IS NULL

Page 20: SELECT {* | Expression [Alias] [,...] } FROM Table [WHERE Condition] [ORDER BY { Expression | Alias } [ ASC | DESC ] [NULLS FIRST | NULLS LAST ] [,...]

valeur de A condition résultat

10 A IS NULL faux

10A IS NOT

NULLvrai

nul A IS NULL vrai

nulA IS NOT

NULLfaux

10 A = NULLinconnu (faux)

10 A <> NULLinconnu (faux)

nul A = NULLinconnu (faux)

nul A <> NULLinconnu (faux)

20

NULL et les opérateurs de comparaisons

Page 21: SELECT {* | Expression [Alias] [,...] } FROM Table [WHERE Condition] [ORDER BY { Expression | Alias } [ ASC | DESC ] [NULLS FIRST | NULLS LAST ] [,...]

Il est parfois utile qu’une requête puisse retourner une valeur prédéterminée lorsque le champ d’une colonne est nul.

NVL(Nom_Colonne, Valeur) ◦ Nom_Colonne: le nom de la colonne de la table.◦ Valeur : valeur retournée si le champ est nul.

Exemple :

SELECT NVL(commission,0)

FROM employe;

Retournera soit la commission ou 0 si la commission est nulle.

21

Fonction NVL

Page 22: SELECT {* | Expression [Alias] [,...] } FROM Table [WHERE Condition] [ORDER BY { Expression | Alias } [ ASC | DESC ] [NULLS FIRST | NULLS LAST ] [,...]

SELECT nom

FROM employe

WHERE NVL(commission,0) < 1000;

Retournera le nom des employésdont la commission est inférieureà1000.

22

Exemple fonction NVL

Page 23: SELECT {* | Expression [Alias] [,...] } FROM Table [WHERE Condition] [ORDER BY { Expression | Alias } [ ASC | DESC ] [NULLS FIRST | NULLS LAST ] [,...]

Opérateurs sur les dates : on peut additionner ou soustraire des jours à une date : + et –

'6-mar-87' + 2 = '8-mar-87' '6/03/87' - 4 = '2/03/87'

On peut soustraire les dates ‘03-01-93' - ‘25-12-92' = 9

Le résultat est en jours.

On peut entrer une date en spécifiant le format:

SELECT nom

FROMemploye

WHERE date_embauche =

(TO_DATE(’03/11/1989’, ‘DD/MM/YYYY’));

23

Calcul sur les dates

Page 24: SELECT {* | Expression [Alias] [,...] } FROM Table [WHERE Condition] [ORDER BY { Expression | Alias } [ ASC | DESC ] [NULLS FIRST | NULLS LAST ] [,...]

On peut spécifier le format d’affichage d’une date :

Exemple :

SELECT TO_CHAR(date_embauche, ‘DD/MM/YYYY’)

FROMemploye

WHERE employe= 7980;

24

Format d’affichage des dates

Page 25: SELECT {* | Expression [Alias] [,...] } FROM Table [WHERE Condition] [ORDER BY { Expression | Alias } [ ASC | DESC ] [NULLS FIRST | NULLS LAST ] [,...]

Voici deux conditions simples utilisées avec AND, OR

SELECT nom

FROM employe

WHERE id_department = 20 ANDposte != ‘Commis’)

OU

SELECT nom

FROM employe

WHERE (id_departement = 20 AND Poste != ‘Commis’)OR(id_departement = 30 AND Poste != ‘Vendeur’);

25

Select avec conditions multiples

Page 26: SELECT {* | Expression [Alias] [,...] } FROM Table [WHERE Condition] [ORDER BY { Expression | Alias } [ ASC | DESC ] [NULLS FIRST | NULLS LAST ] [,...]

26

NULL et les opérateurs logiques

vrai

NOT VRAI FAUX NUL

Faux vrai nul

AND VRAI FAUX NUL

VRAI vrai faux nul

FAUX faux faux faux

NUL nul faux nul

OR VRAI FAUX NUL

VRAI vrai vrai vrai

FAUX vrai faux nul

NUL vrai nul nul

Page 27: SELECT {* | Expression [Alias] [,...] } FROM Table [WHERE Condition] [ORDER BY { Expression | Alias } [ ASC | DESC ] [NULLS FIRST | NULLS LAST ] [,...]

Faire afficher la liste des employés qui touchent une commission plus élevée que 5% de leur salaire.

SELECT nom

FROM employe

WHERE commission> 0.05 * salaire

Opérateurs : + - * / ()

27

Expressions numériquesdans la clause WHERE

Page 28: SELECT {* | Expression [Alias] [,...] } FROM Table [WHERE Condition] [ORDER BY { Expression | Alias } [ ASC | DESC ] [NULLS FIRST | NULLS LAST ] [,...]

Dans la BD, les rangées d’une table sont dans un ordre quelconque. ORDER BY permet de les classer.

SELECT

*FROM

departementWHERE

id > 10ORDER BY

nom

28

Ordre des rangées

Id nom ville

40 Comptabilité Montréal

30 Ventes Québec

20 Recherches Sherbrooke

Id nom ville

40 Comptabilité Montréal

20 Recherches Sherbrooke

30 Ventes Québec

Page 29: SELECT {* | Expression [Alias] [,...] } FROM Table [WHERE Condition] [ORDER BY { Expression | Alias } [ ASC | DESC ] [NULLS FIRST | NULLS LAST ] [,...]

Attention, l’allias peut être utilisé dans le ORDER BY mais pas ailleurs.

Exemple:

SELECT nom "NomDept"

FROM departement

ORDER BY "NomDept";

29

Alias et ORDER BY

Page 30: SELECT {* | Expression [Alias] [,...] } FROM Table [WHERE Condition] [ORDER BY { Expression | Alias } [ ASC | DESC ] [NULLS FIRST | NULLS LAST ] [,...]

Faire afficher la liste des employés, leur salaire, leur commission et le pourcentage du salaire qui vient de la commission pour les employés qui touchent une commission plus élevée que 5% de leur salaire. Faire afficher en ordre décroissant du pourcentage du salaire.

SELECT nom,salaire,commission,commission/salaire

FROM employe

WHERE commission > 0.05 * salaire

ORDER BY commission/salaire DESC;

DESC = descendant, ASC = Ascendant

30

Expressions numériquesdans la clause ORDER BY

Page 31: SELECT {* | Expression [Alias] [,...] } FROM Table [WHERE Condition] [ORDER BY { Expression | Alias } [ ASC | DESC ] [NULLS FIRST | NULLS LAST ] [,...]

La liste de valeurs peut être le résultat d'un SELECT (SELECT imbriqué).

SELECT id

FROM employe

WHERE id_departement IN

(SELECT id FROM departementWHERE ville =‘Montréal’);

31

L'opérateur IN et les SELECT imbriqués