Vous êtes sur la page 1sur 19

Introduction au SQL,

le langage des SGBD Relationnels


Langage de requtes (Structured Query Language ) Origine
1975 : QUEL 1976 : Structured English QUEry Langage (SEQUEL) par IBM 1981 : SQL par IBM

Standard ANSI-ISO, Normes SQL-86,89, SQL2-92 SGBDR : Oracle, Sybase, DB2, Ingres, MS SQL Server, MySQL, MS Access ... Mais des diffrences subsistent selon le SGBD utilis.
1

Plan du cours
Requtes de consultation de tables
Projection, Slection, Jointure Tri, Agrgation, Partitionnement

Requtes de Modification de tables


Ajout Suppression

Manipulation de tables, de vues et de bases de donnes


2

Projection
Syntaxe SQL : SELECT [UNIQUE1] liste_attributs2 FROM Table ;
quivalent AR : liste_attributs R(Table)
1

Permet d'liminer les doublons (on trouvera aussi DISTINCT) 2 On peut mettre une toile * pour demander tous les attributs On peut renommer un attribut en ajoutant AS NomAttribut

Projection - Exemples
Soit la relation tudiants(num, nom, prnom, ge, ville, CodePostal) Afficher toute la relation tudiant. SELECT * FROM tudiants; Donner les noms, les prnoms et les ges de tous les tudiants. SELECT nom, prnom, age FROM tudiants; Donner les numros des tudiants dans une colonne nomme Numro. SELECT #num AS Numro FROM tudiants;

Slection
Syntaxe SQL : SELECT * FROM table WHERE condition; quivalent AR : condition R(Table)

La condition peut tre forme sur des noms d'attributs ou des constantes avec des oprateurs de comparaison : =, >, <, <=, >=, <>1 des oprateurs logiques : AND, OR, NOT des oprateurs : IN, BETWEEN+AND, LIKE, EXISTS, IS _ qui remplace un caractre et % qui remplace une chane de caractres
1

La diffrence est parfois note !=


5

Slection Exemples
Sur la relation tudiants(Num, Nom, Prnom, Age, Ville, CodePostal)
Quels sont tous les tudiants gs de 20 ans ou plus ?

SELECT * FROM tudiants WHERE (Age >= 20);


Quels sont tous les tudiants gs de 19 23 ans ? SELECT * FROM tudiants WHERE Age IN (19, 20, 21, 22, 23); SELECT * FROM tudiants WHERE Age BETWEEN 19 AND 23;

Quels sont tous les tudiants habitant dans les Vosges ? SELECT * FROM tudiant WHERE CodePostal LIKE '88%' ;
Quels sont tous les tudiants dont la ville est inconnue/connue ? SELECT * FROM tudiants WHERE Ville IS NULL ; SELECT * FROM tudiants WHERE Ville IS NOT NULL ;
6

Produit Cartsien
Syntaxe SQL : SELECT * FROM table1 [Alias1], ..., tablen [Aliasn],
quivalent AR : Table1 ... Table n

-Jointure
Syntaxe SQL : SELECT * FROM table1 [Alias1], ..., tablen [Aliasn], WHERE condition;
quivalent AR : Table1 ...
Possibilit de Renommage des tables

Table n

Autre Syntaxe : SELECT * FROM table1 INNER JOIN table2 ON condition;


8

Jointure - Exemples
Soient les relations Produit (prod, nomProd, fournisseur, pu)
DtailCommande (cmd, prod, pu, qte, remise) Quels sont les numros de commande correspondant l'achat d'une table ?
SELECT DtailCommande.cmd FROM Produit, DtailCommande WHERE Produit.prod =DtailCommande.prod AND nomProd LIKE "%table%"; Mme requte, mais avec des alias pour les noms de relation : SELECT dc.num FROM Produit p, DtailCommande dc WHERE p.prod = dc.prod AND nomProd LIKE "%table%";
9

Jointures par requtes imbriques


Une jointure peut aussi tre effectue l'aide d'une sousrequte. SELECT * Sous-requte imbrique FROM Stock WHERE prod IN ( SELECT prod FROM Produit) Principe : Le mot-clef "IN" permet ici de slectionner les tuples prod appartenant la sous-requte.
!

La sous-requte ne doit retourner qu'une colonne ! Les tables de sous-requtes ne sont pas visibles depuis l'extrieur
10

Union, Intersection et Diffrence


Table1 Table2 : SELECT liste_attributs FROM table1 UNION SELECT liste_attributs FROM table2 ; SELECT liste_attributs FROM table1 INTERSECT SELECT liste_attributs FROM table2 ; SELECT liste_attributs FROM table1 EXCEPT SELECT liste_attributs FROM table2 ;
11

Table1 Table2 :

Table1 - Table2 :

Agrgation des rsultats


Il est possible d'utiliser des fonctions f d'agrgation dans le rsultat d'une slection. Syntaxe : SELECT f ( [ ALL | DISTINCT ] expression) FROM ... o f peut tre COUNT nombre de tuples SUM somme des valeurs d'une colonne AVG moyenne des valeurs d'une colonne MAX maximum des valeurs d'une colonne MIN minimum des valeurs d'une colonne Pour COUNT, on peut aussi utiliser COUNT(*) Seul COUNT prend en compte les valeurs NULL.
12

Fonctions d'agrgation - Exemples


Quelle est la meilleure note ?
Rsultats (de Pierre) SELECT MAX(Note) FROM Rsultats Quelle est la plus mauvaise note ? SELECT MIN(Note) FROM Rsultats 9 193 15

Matire
Maths Sc Nat Sc Phy Franais Sc Hum Anglais Sport

Coef
4 3 3 2 2 1 1

Note
15 9 12 13 11 10 12

Quelle la somme pondre des notes ?


SELECT SUM(Note*Coef) FROM Rsultats Quelle est la moyenne (pondre) de Pierre ? SELECT SUM(Note*Coef)/Sum(Coef) FROM Rsultats 12,06 Dans combien de matires Pierre a-t-il eu plus de 12 ? SELECT COUNT(*) FROM Rsultats WHERE Note > 12 2
13

Partitionnement des rsultats


Syntaxe GROUP BY liste_attributs HAVING condition avec fonction Cette clause regroupe les rsultats par valeur selon la condition
Dans l'ordre, on effectue la slection SELECT le partitionnement GROUP BY on retient les partitions intressantes HAVING on trie avec ORDER BY.

14

Partitionnement des rsultats - Exemples


Rsultats (de Pierre)

Matire
Maths Sc Nat Sc Phy Franais Sc Hum Anglais Sport

Coef
4 3 3 2 2 1 1

Note
15 9 12 13 11 10 12

Quelle est la note moyenne pour chaque coefficient ? SELECT coef, Avg(note) as Moyenne FROM Rsultats GROUP BY coef; Coef 1 2 3 4 Moyenne 11 12 10.5 15

Quels sont les coefficients auxquels participe une seule matire ?

SELECT coef
FROM Rsultats GROUP BY coef HAVING count(*)=1;

Coef 4
15

Cration de table
Syntaxe : CREATE TABLE nomTable ( Attribut Domaine [Contraintes ...], ... Attribut Domaine [Contraintes ...], [Contraintes ... ] )

16

Cration de table - Exemple


Crer la table Stock1(Pice, NbP, Fournisseur)
CREATE TABLE Stock1 ( Pice VARCHAR(20) NOT NULL, NbP INT, Fournisseur CHAR(20) NOT NULL, PRIMARY KEY (Pice, Fournisseur) )

17

Modification et Suppression de Relation


Modification de Schma de relation (Syntaxe variable !)
Exemple pour Oracle v6 : ALTER TABLE Table [ADD (dfinition_attribut | Contrainte), [dfinition_attribut | Contrainte] ... )] [MODIFY (dfinition_attribut [, dfinition_attribut ]... )] [DROP CONSTRAINT contrainte] Suppression complte d'une relation (et de son schma) :

DROP TABLE Table;


!

Attention, toutes les donnes de la table sont perdues !


18

Administration de Base de Donnes


Cration d'une base de donnes
Syntaxe : CREATE DATABASE NomBdd; Destruction totale d'une base de donnes Syntaxe : DROP DATABASE NomBdd;

19