Cours langage SQL interroger une base

Cours langage SQL interroger une base, tutoriel & guide de travaux pratiques en pdf.

Classer le résultat d’une interrogation

Les lignes constituant le résultat d’un SELECT sont obtenues dans un ordre indéterminé. On peut,
dans un SELECT, demander que le résultat soit classé dans un ordre ascendant ou descendant, en
fonction du contenu d’une ou plusieurs colonnes (jusqu’à 16 critères de classement possibles). Les
critères de classement sont spécifiés dans une clause ORDER BY dont la syntaxe est la suivante :
ORDER BY {nom_col1 | num_col1 [DESC] [, nom_col2 | num_col2 [DESC],…]}
Le classement se fait d’abord selon la première colonne spécifiée dans l’ORDER BY puis les lignes
ayant la même valeur dans la première colonne sont classées selon la deuxième colonne de l’ORDER BY, etc… Pour chaque colonne, le classement peut être ascendant (par défaut) ou descendant (DESC).
L’ORDER BY peut faire référence à une colonne par son nom ou par sa position dans la liste des
colonnes présentes derrière le SELECT (la première colonne sélectionnée a le numéro 1, la deuxième a le numéro 2, …).
Exercice : Donner tous les employés classés par fonction, et pour chaque fonction classés par
salaire décroissant
Remarque : Dans un classement les valeurs NULL sont toujours en tête quel que soit l’ordre du
classement (ascendant ou descendant).

Jointure externe

Lorsqu’une ligne d’une table figurant dans une jointure n’a pas de correspondant dans les autres
tables, elle ne satisfait pas au critère d’équi-jointure et donc ne figure pas dans le résultat de la
jointure.
Une option permet de faire figurer dans le résultat les lignes satisfaisant la condition d’équi-jointure
plus celles n’ayant pas de correspondant. Cette option s’obtient en accolant (+) au nom de colonne
de la table dans laquelle manquent des éléments, dans la condition d’équi-jointure.
Exercice : Le département 40 ne figurait pas dans le résultat du SELECT précédent. Faites-le figurer dans le résultat du SELECT suivant.
Le (+) peut s’interpréter comme l’ajout d’une ligne fictive dont toutes les colonnes ont la valeur
NULL, et qui réalise la correspondance avec les lignes de l’autre table qui n’ont pas de correspondant réel. Dans l’exemple ci-dessus, la valeur de nom associée au département 40 est la valeur NULL.
Exercice : Retrouver les départements n’ayant aucun employé.

Les sous-interrogations
Une caractéristique puissante de SQL est la possibilité qu’un critère de recherche employé dans une clause WHERE (expression à droite d’un opérateur de comparaison) soit lui-même le résultat d’un SELECT ; c’est ce qu’on appelle une sous-interrogation.

Sous-interrogation ramenant une seule valeur
Exercice : Quels sont les employés ayant la même fonction que coda ?
Remarques
· une sous-interrogation qui ne ramène aucune ligne se termine avec un code d’erreur.
· une sous-interrogation ramenant plusieurs lignes provoquera aussi, dans ce cas, une erreur (pour traiter correctement ce cas, voir paragraphe ci-dessous)

Sous-interrogation ramenant plusieurs lignes
Une sous-interrogation peut ramener plusieurs lignes à condition que l’opérateur de comparaison
admette à sa droite un ensemble de valeurs. Les opérateurs permettant de comparer une valeur à un ensemble de valeurs sont :
· l’opérateur IN
· les opérateurs obtenus en ajoutant ANY ou ALL à la suite d’un opérateur de comparaison classique (=, !=, >, >=, <, <=)
· ANY: la comparaison est vraie si elle est vraie pour au moins un des éléments de
l’ensemble.
· ALL: la comparaison sera vraie si elle est vraie pour tous les éléments de l’ensemble.
Exercice : Quels sont les employés gagnant plus que tous les employés du département 30.
Sous-interrogation ramenant plusieurs colonnes
Il est possible de comparer le résultat d’un SELECT ramenant plusieurs colonnes à une liste de
colonnes. La liste de colonnes figurera entre parenthèses à gauche de l’opérateur de comparaison.
Exercice : Quels sont les employés ayant même fonction et même supérieur que CODD?

Sous-interrogation synchronisée avec l’interrogation principale

Dans les exemples précédents, la sous-interrogation était évaluée d’abord, puis le résultat pouvait
être utilisé pour exécuter l’interrogation principale. SQL sait également traiter une sous interrogation
faisant référence à une colonne de la table de l’interrogation principale. Le traitement dans ce cas est plus complexe car il faut évaluer la sous-interrogation pour chaque ligne de l’interrogation principale.
Exercice : Quels sont les employés ne travaillant pas dans le même département que leur supérieur hiérarchique ?
Il a fallu ici renommer la table emp de l’interrogation principale pour pouvoir la référencer dans la sous-interrogation.
n_sup IS NOT NULL est nécessaire car dans le cas de JOUBERT la colonne n_sup est NULL et la sous requête ne ramène alors aucune valeur.

Sous-interrogation ramenant au moins une ligne

L’opérateur EXISTS permet de construire un prédicat vrai si la sous-interrogation qui suit ramène au moins une ligne.
Exercice : Quels sont les employés travaillant dans un département qui a procédé à des embauches depuis le début de l’année 94 ?
Remarque : On peut inverser le sens de l’opérateur EXISTS en le faisant précéder de NOT.

Sous-interrogations multiples
Un SELECT peut comporter plusieurs sous-interrogations, soit imbriquées, soit au même niveau dans différents prédicats combinés par des AND ou des OR.
Exercice : Liste des employés du département 10 ayant même fonction que quelqu’un du département de DUPONT.

Le traitement des structures d’arbre
Il est possible de représenter selon le modèle relationnel des listes ou des structures d’arbre. Pour
cela, il suffit d’introduire dans la relation un attribut représentant un lien vers l’élément suivant ou le
prédécesseur dans la liste ou l’arbre :
Relation(clé, … , clé du prédécesseur)
C’est le cas dans la table emp où chaque ligne contient un « pointeur » vers le supérieur hiérarchique : n_sup. Chaque employé a un seul supérieur hiérarchique. Par contre, un employé peut être le supérieur hiérarchique de plusieurs employés. Le lien n_sup définit donc une structure d’arbre.

Parcours d’un arbre
En utilisant la clé num et le lien vers le supérieur hiérarchique n_sup, il est possible de parcourir l’arbre hiérarchique implicitement décrit par la table emp. SQL permet d’obtenir comme résultat d’un
SELECT les lignes dans l’ordre de parcours de l’arbre (ou de la liste). Pour cela il faut :
définir comment se fait le lien entre une ligne et la précédente, en indiquant la colonne clé et la colonne lien dans une clause CONNECT BY :
CONNECT BY nom_col_1 = PRIOR nom_col_2
Le mot clé PRIOR , accolé à l’une ou l’autre des colonnes, définit le sens du parcours.
· définir un (ou plusieurs) point de départ, par une clause START WITH placée après la clause
CONNECT BY.
Un arbre (ou une liste) sera construit à partir de chaque ligne répondant au prédicat. En l’absence de clause START WITH, un arbre sera construit à partir de chaque ligne.
Exercice : Quels sont toutes les personnes dont CODD est le supérieur hiérarchique (CODD compris) ?

Niveau : LEVEL
Il est possible d’obtenir pour chaque ligne le niveau correspondant dans l’arbre ou dans la liste, la première ligne sélectionnée étant de niveau 1. Ce niveau s’obtient dans la variable LEVEL, que l’on
peut utiliser dans le SELECT comme résultat. Cette variable peut aussi être présente dans un prédicat.
Exercice : Donner la liste des subordonnés de JOUBERT, avec pour chacun d’eux son niveau.
Sélection de lignes Clause WHERE
Le prédicat de la clause WHERE permet d’éliminer certaines lignes. Mais le parcours de l’arbre n’est pas interrompu lorsqu’une ligne ne répondant pas au prédicat est rencontrée.
Exercice : Quelles sont toutes les personnes dont JOUBERT est le supérieur hiérarchique (JOUBERT compris et CODD non compris) ?
CODD ne figure pas dans le résultat , mais tous ses subordonnés y figurent.

SQL : Interroger une base
· Introduction
· Interroger simplement une base
· Sélection de colonnes ou projection
· Sélection de lignes ou restriction
· Valeurs NULL
· Nom de colonne 8
· Classer le résultat d’une interrogation
· Requêtes avancées
· les jointures
· Equi-jointure
· Jointure d’une table à elle-même
· Autres jointures
· Jointure externe
· Les sous-interrogations
· Le traitement des structures d’arbre
· Les expressions et fonctions
· Fonctions de conversion
· Autres fonctions
· Sélection des groupes
· Fonction de groupe à deux niveaux
SQL : Modifier une base
· Ajout de lignes
· Modification de lignes
· Suppression de lignes
SQL : Définir une base
· Les tables
· Les vues
· Les index 3
· Créer d’un index
· Supprimer un index
· Les clusters
· Droits d’accès aux tables
· Droits d’accès aux vues
Gestion des transactions
Dictionnaire de données
· Description du dictionnaire de données
· Vues décrivant les objets de l’utilisateur
· Vues décrivant les objets auxquels l’utilisateur a accès
· Synonymes
Références bibliographiques

Cours gratuitTélécharger le cours complet

Télécharger aussi :

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *