to get the file

publicité
SQL
« Structured Query Language »
Le Langage de Définition et d’Exploitation
des Bases de Données Relationnelles
Master EISIS – Michel JOUBERT – LERTIM, Faculté de Médecine, Marseille - 2006
Bases de Données Relationnelles
Le Langage de Définition et d’Interrogation
des Bases de Données Relationnelles
Master EISIS – Michel JOUBERT – LERTIM, Faculté de Médecine, Marseille - 2006
Notion de Base de Données
• Ensemble Structuré de Données
–
–
–
–
centralisation des données
non redondance des données
intégrité des données
diffusion des données
• Systèmes de Gestion de Bases de Données (SGBD)
– interaction avec la base de données
– langage de définition
– langage de manipulation
Master EISIS – Michel JOUBERT – LERTIM, Faculté de Médecine, Marseille - 2006
Principe d’une Base de Données
Monde réel
Schéma
externe
Schéma
externe
Modélisation
Schéma
conceptuel
Schéma
externe
Niveau
externe
Schéma
physique
Base de
données
physique
Niveau
conceptuel
Niveau
interne
Master EISIS – Michel JOUBERT – LERTIM, Faculté de Médecine, Marseille - 2006
Mise en Oeuvre d'un SGBD
• Langage de Définition (DDL)
– spécification du schéma conceptuel
– correspondance entre schéma conceptuel et schéma interne
• Langage de Manipulation (DML)
– maintenance des données
– interrogation interactive
• sélections
• vues
– utilisation par des programmes
Master EISIS – Michel JOUBERT – LERTIM, Faculté de Médecine, Marseille - 2006
SGBD Relationnels
• Modèle : tables ou relations
– Lignes = n-uplets
– Colonnes = domaines de valeurs
• Schéma conceptuel
– Ensemble de tables
– Les clés primaires des tables
• Langage de manipulation
– SQL ("Structured Query Language")
– Interfaces graphiques
Master EISIS – Michel JOUBERT – LERTIM, Faculté de Médecine, Marseille - 2006
Schéma Conceptuel
Master EISIS – Michel JOUBERT – LERTIM, Faculté de Médecine, Marseille - 2006
Structured Query Language
Le Langage de Définition et d’Interrogation
des Bases de Données Relationnelles
Master EISIS – Michel JOUBERT – LERTIM, Faculté de Médecine, Marseille - 2006
SQL
• SQL est de fait :
– le langage de définition (DDL)
– et de manipulation (DML) des SGBD relationnels
• Définition des tables
–
–
–
–
Création
Mise à jour
Suppression
Création de clés et d'index
Master EISIS – Michel JOUBERT – LERTIM, Faculté de Médecine, Marseille - 2006
SQL – Exploitation des tables
• Modification du contenu des tables
– Insertion
– Mise à jour
– Suppression
• Exploration des tables
– Projection
– Sélection
– Jointure
• Fonctions supplémentaires
–
–
–
–
Tris (classements)
Expressions de colonnes
Regroupements
Fonctions de groupes
Master EISIS – Michel JOUBERT – LERTIM, Faculté de Médecine, Marseille - 2006
Algèbre Relationnelle
• Toute opération licite sur une ou plusieurs tables a
pour résultat une table
• Toute table produite par une opération peut être
réutilisée par une autre opération
• Cependant, les tables produites ne font pas partie du
schéma conceptuel de la base de données
– Production de nouvelles données (redondance)
– Pas de clés
Master EISIS – Michel JOUBERT – LERTIM, Faculté de Médecine, Marseille - 2006
Requête SQL
• Forme générale d’une requête SQL
– SELECT colonnes à afficher
– FROM tables à exploiter
– WHERE conditions sur des lignes
• SELECT et FROM sont obligatoires
• WHERE est facultatif
• Ordre logique
1 FROM tables à exploiter
2 SELECT valeurs (éventuellement calculées) à afficher
3 WHERE conditions à respecter
Master EISIS – Michel JOUBERT – LERTIM, Faculté de Médecine, Marseille - 2006
Projection
• Extraire un sous-ensemble de colonnes
• Exemples
– Afficher les
• nom,
• prénom et
• sexe
des patients
– Afficher
• L’identification du séjour
• Les SGOT et
• Les SGPT
des bilans hépatiques
Master EISIS – Michel JOUBERT – LERTIM, Faculté de Médecine, Marseille - 2006
SELECT "Nom", "Prénom", "Sexe"
FROM "Patient"
Master EISIS – Michel JOUBERT – LERTIM, Faculté de Médecine, Marseille - 2006
SELECT "IdSéjour", "SGOT", "SGPT"
FROM "BilanHép"
Master EISIS – Michel JOUBERT – LERTIM, Faculté de Médecine, Marseille - 2006
Sélection
• Extraire un sous-ensemble de lignes
• Mise en œuvre de WHERE
• Exemples
– Afficher les nom et prénom des patients de sexe féminin
– Afficher toutes les informations des séjours dont le motif était
C88.0
Master EISIS – Michel JOUBERT – LERTIM, Faculté de Médecine, Marseille - 2006
SELECT "Nom", "Prénom", "Sexe" FROM "Patient" WHERE ( ( "Sexe" = 'F' ) )
SELECT "Nom", "Prénom" FROM "Patient" WHERE ( ( "Sexe" = 'F' ) )
Affichage
inutile
Master EISIS – Michel JOUBERT – LERTIM, Faculté de Médecine, Marseille - 2006
SELECT *
FROM "Séjour"
WHERE ( "Motif" = 'C88.0' )
Toutes les
colonnes
Double
affichage
Master EISIS – Michel JOUBERT – LERTIM, Faculté de Médecine, Marseille - 2006
Critères de Sélection
• Opérateurs de comparaison usuels
– Egalité : = et inégalité : != ou <>
– Supérieur (ou égal) : > (ou >=) et inférieur (ou égal) : < (ou <=)
• Et des opérateurs spécifiques
–
–
–
–
(NOT) BETWEEN x AND y : teste si compris (hors) entre x et y
(NOT) IN : teste la présence (l'absence) dans une liste
LIKE : teste la ressemblance
IS (NOT) NULL : teste l'absence (la présence) d'information
• Combinaisons au moyen d’opérateurs booléens
– AND
– OR
– NOT
Master EISIS – Michel JOUBERT – LERTIM, Faculté de Médecine, Marseille - 2006
Les Opérateurs de Comparaison Usuels
• Ils s’appliquent à tous types de données à condition
de comparer des données de même type, par
exemple
– 01/07/2006 < 22/09/2006, antériorité
– Durand > Dupont, ordre alphabétique
• Exemple
– Quels sont les bilans hépatiques pratiqués avant le premier
février 1998 ?
Master EISIS – Michel JOUBERT – LERTIM, Faculté de Médecine, Marseille - 2006
SELECT *
FROM "BilanHép"
WHERE ( ( "Date" < {D '1998-02-01' } ) )
Master EISIS – Michel JOUBERT – LERTIM, Faculté de Médecine, Marseille - 2006
Les Opérateurs NULL et LIKE
• NULL permet de tester l’absence d’information
– Exemple :
• Rechercher le(s) patient(s) dont l’adresse n’est pas connue
• LIKE permet de rechercher une sous-chaîne de
caractères dans une donnée
– Exemple :
• Rechercher le(s) patient(s) dont le nom commence par la lettre P
Master EISIS – Michel JOUBERT – LERTIM, Faculté de Médecine, Marseille - 2006
SELECT "NumDossier", "Nom", "Prénom"
FROM "Patient"
WHERE ( ( "Adresse" IS NULL ) )
Master EISIS – Michel JOUBERT – LERTIM, Faculté de Médecine, Marseille - 2006
SELECT "NumDossier", "Nom", "Prénom"
FROM "Patient"
WHERE ( ( "Nom" LIKE 'P%' ) )
Master EISIS – Michel JOUBERT – LERTIM, Faculté de Médecine, Marseille - 2006
Combinaisons de Critères de Sélection
• Indiquer les formules de numération sanguine
présentant un nombre de GB inférieur à 5 et un
nombre de GR supérieur à 4,5
• Indiquer les séjours dont le motif est M32.9 ou M33.9
Master EISIS – Michel JOUBERT – LERTIM, Faculté de Médecine, Marseille - 2006
SELECT "IdSéjour", "Date", "GB", "GR"
FROM "NFS"
WHERE ( ( "GB" < 5 AND "GR" > 4.5 ) )
Master EISIS – Michel JOUBERT – LERTIM, Faculté de Médecine, Marseille - 2006
SELECT "IdSéjour", "NumDossier", "Motif"
FROM "Séjour"
WHERE ( ( "Motif" = 'M32.9' ) OR ( "Motif" = 'M33.9' ) )
Master EISIS – Michel JOUBERT – LERTIM, Faculté de Médecine, Marseille - 2006
Jointure
• Se réalise entre des tables ayant une colonne (domaine
de valeur) en commun
– Dans la clause WHERE, exemple
• SELECT "Patient"."NumDossier", "Patient"."Nom",
"Patient"."Prénom", "Séjour"."DateEntrée", "Séjour"."DateSortie"
FROM "Séjour", "Patient"
WHERE ( "Séjour"."NumDossier" = "Patient"."NumDossier" )
– Et/ou par des liens prédéfinis dans le schéma de la base,
exemple
• SELECT "Patient"."NumDossier", "Patient"."Nom",
"Patient"."Prénom", "Séjour"."DateEntrée", "Séjour"."DateSortie"
FROM "Patient" INNER JOIN "Séjour" ON
( "Patient"."NumDossier" = "Séjour"."NumDossier" )
Master EISIS – Michel JOUBERT – LERTIM, Faculté de Médecine, Marseille - 2006
SELECT "Patient"."NumDossier", "Patient"."Nom", "Patient"."Prénom",
"Séjour"."DateEntrée", "Séjour"."DateSortie"
FROM "Séjour", "Patient"
WHERE ( "Séjour"."NumDossier" = "Patient"."NumDossier" )
Jointure établie
automatiquement
Master EISIS – Michel JOUBERT – LERTIM, Faculté de Médecine, Marseille - 2006
SELECT "Patient"."NumDossier", "Patient"."Nom", "Patient"."Prénom",
"Séjour"."DateEntrée", "Séjour"."DateSortie"
FROM "Patient" INNER JOIN "Séjour" ON
( "Patient"."NumDossier" = "Séjour"."NumDossier" )
Jointure
imposée
Master EISIS – Michel JOUBERT – LERTIM, Faculté de Médecine, Marseille - 2006
In Fine : des Résultats Identiques
Master EISIS – Michel JOUBERT – LERTIM, Faculté de Médecine, Marseille - 2006
Right Join
Edition
Master EISIS – Michel JOUBERT – LERTIM, Faculté de Médecine, Marseille - 2006
SELECT "Séjour"."NumDossier", "BilanHép"."IdSéjour",
"BilanHép"."SGOT", "BilanHép"."SGPT"
FROM { OJ "BilanHép" "BilanHép" RIGHT OUTER JOIN "Séjour" ON
"BilanHép"."IdSéjour" = "Séjour"."IdSéjour" }
ORDER BY "Séjour"."NumDossier" ASC, "BilanHép"."IdSéjour" ASC
Master EISIS – Michel JOUBERT – LERTIM, Faculté de Médecine, Marseille - 2006
Left Join
• L'inverse de
RIGHT JOIN
Edition
Master EISIS – Michel JOUBERT – LERTIM, Faculté de Médecine, Marseille - 2006
Jointure Multiple
• Se réalise sur plusieurs tables que l’on peut « joindre »
deux à deux
– SELECT "Patient"."Nom", "Patient"."Prénom", "Séjour"."NumDossier",
"NFS"."GB", "NFS"."GR"
FROM ‘Patient’, ‘Séjour’, ‘NFS’
WHERE (‘Séjour’.’NumDossier’=‘Patient’.’NumDossier’) AND
(‘Séjour’.’IdSéjour’=‘NFS’.’IdSéjour’)
– SELECT "Patient"."Nom", "Patient"."Prénom", "Séjour"."NumDossier",
"NFS"."GB", "NFS"."GR"
FROM ("Patient" INNER JOIN "Séjour" ON "Patient"."NumDossier" =
"Séjour"."NumDossier") INNER JOIN "NFS" ON "Séjour"."IdSéjour" =
"NFS"."IdSéjour"
Master EISIS – Michel JOUBERT – LERTIM, Faculté de Médecine, Marseille - 2006
Exemple de Jointure Multiple
NumDossier peut être
sélectionné dans Patient
ou dans Séjour
Master EISIS – Michel JOUBERT – LERTIM, Faculté de Médecine, Marseille - 2006
Résultat d’une Jointure Multiple
Master EISIS – Michel JOUBERT – LERTIM, Faculté de Médecine, Marseille - 2006
Classement
• Présentation du résultat d'une requête selon un ordre
fixé par des valeurs de colonnes
• Exemple
– SELECT "Nom", "Prénom", "Sexe", "DateNaissance",
"NumDossier"
FROM "Patient"
ORDER BY "Nom" ASC, "Prénom" ASC
• Ordonnancement opéré selon l'ordre de gauche à
droite des champs indiqués
Master EISIS – Michel JOUBERT – LERTIM, Faculté de Médecine, Marseille - 2006
Exemple de Classement
Master EISIS – Michel JOUBERT – LERTIM, Faculté de Médecine, Marseille - 2006
SELECT "Nom", "Prénom", "Sexe", "DateNaissance", "NumDossier"
FROM "Patient"
ORDER BY "NumDossier" ASC
Master EISIS – Michel JOUBERT – LERTIM, Faculté de Médecine, Marseille - 2006
Expressions de Colonnes
• Avec des constantes et des données de même type
• Servent à effectuer des calculs et produire de
nouvelles données
• Arithmétiques
– +, -, *, /
– fonctions : ABS, SQRT, …
• Dates
– fonctions : YEAR, MONTH, …
• Chaînes de caractères
– & (concaténation)
– fonctions : CHR, REPLACE, …
Master EISIS – Michel JOUBERT – LERTIM, Faculté de Médecine, Marseille - 2006
Exemples d’Expressions de Colonnes
• Calcul de l’age des patients
– SELECT "Nom", "Prénom", 1999 - YEAR( "DateNaissance" )
FROM "Patient"
• Classement dans l’ordre décroissant
– SELECT "Nom", "Prénom", 1999 - YEAR( "DateNaissance" ) AS Age
FROM "Patient"
ORDER BY Age DESC;
Master EISIS – Michel JOUBERT – LERTIM, Faculté de Médecine, Marseille - 2006
SELECT "Nom", "Prénom", 1999 - YEAR( "DateNaissance" ) AS Age
FROM "Patient"
ORDER BY ( 1999 - YEAR( "DateNaissance" ) ) DESC
Age
Alias : Age
Master EISIS – Michel JOUBERT – LERTIM, Faculté de Médecine, Marseille - 2006
Age
Usage des « alias »
Master EISIS – Michel JOUBERT – LERTIM, Faculté de Médecine, Marseille - 2006
Regroupement
• Présentation des résultats d'une sélection regroupés
selon un critère
• Exemple : les différents motifs de séjour
– SELECT "Motif"
FROM "Séjour" "Séjour"
GROUP BY "Motif"
ORDER BY "Motif" ASC
Master EISIS – Michel JOUBERT – LERTIM, Faculté de Médecine, Marseille - 2006
SELECT "Motif"
FROM "Séjour"
GROUP BY "Motif"
ORDER BY "Motif" ASC
Master EISIS – Michel JOUBERT – LERTIM, Faculté de Médecine, Marseille - 2006
Fonctions de Groupes
• Sont généralement associées à la clause GROUP
BY d'une sélection
– AVG : moyenne
– COUNT(expr) : dénombre les lignes pour lesquelles "expr"
n'est pas null
– MAX : calcule le maximum
– MIN : calcule le minimum
– SUM : calcule la somme
– ......
• Mais pas obligatoirement
Master EISIS – Michel JOUBERT – LERTIM, Faculté de Médecine, Marseille - 2006
Exemples de Fonctions de Groupes
• Décompte des motifs de séjour
– SELECT "Motif", COUNT( "IdSéjour" )
FROM "Séjour"
GROUP BY "Motif"
ORDER BY COUNT( "IdSéjour" ) DESC
• Moyenne des Gamma GT
– SELECT AVG( "GammaGT" ) AS "Moyenne"
– FROM "BilanHép"
Master EISIS – Michel JOUBERT – LERTIM, Faculté de Médecine, Marseille - 2006
SELECT "Motif", COUNT( "IdSéjour" ) AS Nombre
FROM "Séjour"
GROUP BY "Motif"
ORDER BY COUNT( "IdSéjour" ) DESC
Nombre
NULL
Master EISIS – Michel JOUBERT – LERTIM, Faculté de Médecine, Marseille - 2006
SELECT AVG( "GammaGT" ) AS "Moyenne"
FROM "BilanHép"
Master EISIS – Michel JOUBERT – LERTIM, Faculté de Médecine, Marseille - 2006
Condition dans le Regroupement
• Les conditions de la clause HAVING opèrent sur les
lignes de la table produite
• Exemple
– SELECT "Motif", COUNT( "IdSéjour" )
FROM "Séjour"
GROUP BY "Motif" HAVING ( "Motif" IS NOT NULL )
ORDER BY COUNT( "IdSéjour" ) DESC
Master EISIS – Michel JOUBERT – LERTIM, Faculté de Médecine, Marseille - 2006
SELECT "Motif", COUNT( "IdSéjour" )
FROM "Séjour"
GROUP BY "Motif"
HAVING ( "Motif" IS NOT NULL )
ORDER BY COUNT( "IdSéjour" ) DESC
NULL
Master EISIS – Michel JOUBERT – LERTIM, Faculté de Médecine, Marseille - 2006
Notion de Vue
• Une vue est le résultat d'une requête
• Elle se présente comme une table
• Elle ne fait pas partie (du schéma) de la base de
données
• Pas de clé, pas d'index
• Exemple : les patients et les médecins qui les
soignent
Master EISIS – Michel JOUBERT – LERTIM, Faculté de Médecine, Marseille - 2006
Exemple de Vue
Alias
Master EISIS – Michel JOUBERT – LERTIM, Faculté de Médecine, Marseille - 2006
Bibliographie
• Livres
– SQL pour les nuls. A Taylor. First Interactive
– SQL. F Brouard. Campus Press
• Sites Internet
– Introduction aux bases de données
http://www.commentcamarche.net/bdd/bddintro.php3
– Conception de bases de données
http://nte-socio.univ-lyon2.fr/Marc_Grange/BDConception.htm
– Liste de sites sur les bases de données et les SGBD
http://sgbd.developpez.com/cours/
Master EISIS – Michel JOUBERT – LERTIM, Faculté de Médecine, Marseille - 2006
Téléchargement