TP BDD - SQL
Mémo - SQL
I. La commande SELECT 2
1. Les options du SELECT 2
2. Les pseudonymes ou Alias 3
3. Les fonctions de calcul 3
4. Les fonctions de dates 4
II. Le TRI : ORDER BY 4
III. SELECTION 5
1. Les opérateurs logiques 5
2. Les opérateurs mathématiques 5
3. Les mots réservés 5
IV. JOINTURES 7
V. Les requêtes imbriquées 9
VI. Les fonctions de regroupement : GROUP
BY...HAVING 9
Les fonctions de calcul de regroupement : 10
VII. Les modifications d’une table et de son contenu ________
1. Modification d'une table : ALTER TABLE 11
2. Suppression d'une table 11
3. Suppression d'enregistrements d’une table : DELETE 11
4. Mise à jour d'enregistrement : UPDATE 12
5. Insertion d'enregistrement : INSERT INTO 12
6. Insertion à partir d'une autre table 12
VIII. Les opérations ensemblistes 13
1. Union de 2 tables 13
2. L'intersection de 2 tables 14
3. La différence de 2 tables 15
C. Bouby
1
TP BDD - SQL
I. La commande SELECT
SELECT <Champ>, <Champ2>,...,... FROM <Table> WHERE
<Condition>
1. Les options du SELECT
SELECT ALL / DISTINCT / DISTINCTROW/TOP/PERCENT <
Champ>, <Champ2>
FROM <Table>
WHERE <Condition>
SELECT prenom, nom FROM client;
Ces attributs se plaçant avant l'énumération des champs, portent
sur les enregistrements (tuples) eux mêmes. Ils permettent d'opérer
une sélection sur les enregistrements qui vont faire l'objet de la
clause WHERE.
ALL : sélectionne tous les enregistrements (commande par défaut si
omission).
DISTINCT : sélectionne les enregistrements pour lesquels il n'y a
pas de doublon dans la projection réalisée (champs choisis).
LIMIT : sélectionne un certain nombre d'enregistrements qui se
trouvent en haut ou en bas d'une plage déterminée par une clause
ORDER BY.
SELECT DISTINCT Nom
FROM Personne;
SELECT Nom
FROM Personne
LIMIT 3;
C. Bouby
2
TP BDD - SQL
2. Les pseudonymes ou Alias
AS : permet d’utiliser un Alias pour les tables ou les champs.
SELECT *
FROM nom_table AS t1;
SELECT colonne1 AS c1, colonne2
FROM table;
3. Les fonctions de calcul
• AVG() pour calculer la moyenne sur un ensemble
d’enregistrement
• COUNT() pour compter le nombre d’enregistrement sur une
table ou une colonne distincte
• MAX() pour récupérer la valeur maximum d’une colonne sur
un ensemble de ligne. Cela s’applique à la fois pour des
données numériques ou alphanumérique
• MIN() pour récupérer la valeur minimum de la même manière
que MAX()
• SUM() pour calculer la somme sur un ensemble
d’enregistrement
SELECT Count(*) AS Comptage
FROM Resultats;
C. Bouby
3
TP BDD - SQL
4. Les fonctions de dates
La fonction NOW() permet de retourner la date et l’heure du
système.
La fonction YEAR() permet d’extraire une année à partir d’une date.
La fonction MONTH() permet d’extraire le numéro de mois à partir
d’une date.
SELECT Nom, Prenom, DateP
FROM Personne
WHERE Year(DateP)=2012;
II. Le TRI : ORDER BY
SELECT <Champ>, ...,... FROM <Table> WHERE <Condition>
ORDER BY champ1 ASC /DESC , champ2 ASC /DESC ...
Elle sert à classer sur un ou plusieurs champs
ASC = Croissant ; DESC = Décroissant > par défaut ASC.
SELECT Nom,Prenom
FROM Personne
ORDER BY Nom,Prenom DESC;
C. Bouby
4
TP BDD - SQL
III. SELECTION
SELECT <Champ>, <Champ2> FROM <Relation> WHERE
<Condition>
Cette clause WHERE permet une restriction suivant une ou
plusieurs critères.
1. Les opérateurs logiques
AND : <Expr1> AND <Expr2> -> les deux expressions doivent être
vérifiées.
OR : <Expr1> OR <Expr2> -> ou inclusif, au moins une des deux
expressions doit être vérifiée (et/ou).
NOT : <Expr1> -opérateur- NOT <Expr2> -> effectue la négation
d'un opérateur ( AND Not, OR Not...).
2. Les opérateurs mathématiques
= > < >= <= <>
SELECT Nom, Prenom, Date
FROM Personne
WHERE Date>’2010-12-31’
And Date>’2010-01-01’;
3. Les mots réservés
BETWEEN : sélectionne plusieurs valeurs comprises entre deux
valeurs.
WHERE val BETWEEN n1 And n2;
SELECT Note
FROM Notes
WHERE Note BETWEEN 12 And 15;
C. Bouby
5
TP BDD - SQL
IN : sélectionne des valeurs qui appartiennent à une liste . Il peut
se combiner avec NOT pour exclure des valeurs
WHERE Champ1 In ("Nom1", "Mom2");
SELECT Nom, Prenom
FROM Eleve
WHERE Nom IN (‘Marc’, ‘Maxime’);
LIKE permet de chercher une valeur dans les champs d'une table.
%= n'importe quelle chaîne de caractères
_ = n'importe quel caractère
SELECT Nom, Prenom
FROM Personne
WHERE Nom LIKE ‘c%’;
C. Bouby
6
TP BDD - SQL
IV. JOINTURES
SELECT <Champ1>, <Champ2>,...,... FROM <Table1>
INNER JOIN/ LEFT JOIN / RIGHT JOIN <Table2> ON <Condition
jointure>
INNER JOIN <Table> ON <Champ1>=<Champ2> : permet de
sélectionner les enregistrements de deux tables jointes en
n'affichant pour les deux tables que les enregistrements qui ont une
correspondance pour leur champ commun (clé primaire et clé
étrangère).
LEFT JOIN <Table> ON <Champ1>=<Champ2> : permet de
sélectionner les enregistrements de deux tables jointes en affichant
pour la table de gauche (clé primaire) tous les enregistrements
même s'ils n'ont pas de correspondance dans la table de droite (clé
étrangère).
RIGHT JOIN <Table> ON <Champ1>=<Champ2> : permet de
sélectionner les enregistrements de deux tables jointes en affichant
pour la table de droite (clé étrangère) tous les enregistrements
même s'ils n'ont pas de correspondance dans la table de gauche (clé
primaire).
C. Bouby
7
TP BDD - SQL
SELECT Nom, Prenom, Adresse, ville,
code_postal
FROM Commune
INNER JOIN Personne
ON Commune.code_commune =
Personne.Code_commune;
Nom des personnes pour lequel on dispose du nom de leur
commune
SELECT Nom, Prenom, Adresse, ville,
code_postal
FROM Personne
LEFT JOIN Commune
ON Commune.code_commune =
Personne.Code_commune;
Nom de toutes les personnes même si l’on ne dispose pas du nom
de leur commune
SELECT Nom, Prenom, Adresse, ville,
code_postal
FROM Personne
RIGHT JOIN Commune
ON Commune.code_commune =
Personne.Code_commune;
Nom des personnes pour lesquelles on dispose du nom de leur
commune, plus ajout des lignes pour les communes sans personne
(avec nom, prenom, adresse vide de personne)
C. Bouby
8
TP BDD - SQL
V. Les requêtes imbriquées
Le principe des requêtes imbriquées consiste à exécuter une requête
à l’intérieur d’une autre requête. Une requête imbriquée est souvent
utilisée au sein d’une clause WHERE ou de HAVING pour remplacer
une ou plusieurs constantes
SELECT nom, prenom
FROM Table1
WHERE [Link] NOT IN
(SELECT nom
FROM Table2)
AND [Link] NOT IN
(SELECT prenom
FROM Table2);
VI. Les fonctions de regroupement : GROUP
BY...HAVING
Cette Clause est permet d'effectuer un calcul sur un champ donné
sur un groupe .
Ce regroupement est possible par la clause GROUP BY. Une fois le
regroupement réalisé, il ne reste plus qu'indiquer qu'elle opération
l'on veut réaliser après la clause SELECT.
SELECT <Champ1>, <Champ2>, COUNT(<Champ3>)...,... FROM
<Table1>
GROUP BY <Champ1>,<Champ2>
SELECT DateCA, Sum(CA) AS CA_total
FROM Resultats
GROUP BY DateCA;
C. Bouby
9
TP BDD - SQL
La clause HAVING est similaire à WHERE, elle supporte des
expressions de regroupement (moyenne, compte....). HAVING peut
sélectionner les enregistrements dont la projection réalisée par
SELECT dépend d'un regroupement GROUP BY.
SELECT <Champ1>, <Champ2>, COUNT(<Champ3>)...,... FROM
<Table1>
GROUP BY <Champ1>,<Champ2>
HAVING condition;
SELECT DateCA, Sum(CA) AS CA_total
FROM Resultats
WHERE Agence NOT LIKE ‘Est’
GROUP BY DateCA
HAVING Sum(CA)>2500;
La clause GROUP BY doit comporter au moins un champ précisé
dans le SELECT (si le champ est un calcul de regroupement, il n'est
pas mentionné).
Les fonctions de calcul de regroupement :
Avg : Moyenne
Count : Compte
First,Last : Premier et dernier
Min, Max : Minimum et maximum
Sum : Somme
C. Bouby
10
TP BDD - SQL
VII. Les modifications d’une table et de son
contenu
1. Modification d'une table : ALTER TABLE
ALTER TABLE <NomTable> [ADD [COLUMN <champ type
(taille)>]
DROP [COLUMN <champ> ]]
ALTER TABLE Personne
ADD COLUMN Naissance DATE;
ALTER TABLE Personne
DROP COLUMN Naissance;
2. Suppression d'une table
DROP TABLE <NomTable>
ou INDEX <index> ON <NomTable>
DROP TABLE Personne;
3. Suppression d'enregistrements d’une table :
DELETE
L'instruction DELETE supprime les enregistrements d’une table
répondant à la clause WHERE.
DELETE <NomTableSource> FROM <NomTable> WHERE
<critère>
DELETE FROM Personne
WHERE Nom=‘Truc‘;
C. Bouby
11
TP BDD - SQL
Mise à jour d'enregistrement : UPDATE
L'instruction UPDATE permet de modifier les valeurs des
champs d'une table spécifiée en fonction des critères définis.
UPDATE <NomTable> SET <Nouvelle_valeur> WHERE
condition
UPDATE Personne
SET Prenom=’Henri’
WHERE Nom=’Truc’;
4. Insertion d'enregistrement : INSERT INTO
INSERT INTO <NomTable> (<Champ>, <Champ2>…..)
VALUES (<Valeur1>, <Valeur2>….)
INSERT INTO Personne (Nom)
VALUES (‘Truc’);
5. Insertion à partir d'une autre table
INSERT INTO <NomTableDestination>
SELECT <Champ1>, <Champ2>….FROM
<NomTableSource>
WHERE <condition>
Pour que l'insertion soit valide il faut que les champs de la
table source aient le même type et la même longueur que la
table destination.
INSERT INTO Essai (Nom, Prenom)
SELECT Nom, Prenom
FROM Personne;
INSERT INTO Table3 ( Col1, Col2 )
SELECT Nom, Prenom
FROM Table1
WHERE Nom<’d’;
C. Bouby
12
TP BDD - SQL
VIII. Les opérations ensemblistes
1. Union de 2 tables
L'union de deux tables est une relation contenant chaque ligne de la
première table et chaque ligne de la seconde table. Elle rassemble le
contenu des deux tables, et en élimine les doublons.
Les champs mis en correspondance n'ont pas besoin de porter le
même nom
requete1 UNION [ALL] requete2
UNION ajoute effectivement le résultat de requete2 au résultat de
requete1 (bien qu'il n'y ait pas de garantie qu'il s'agisse de l'ordre
dans lequel les lignes sont réellement renvoyées). De plus, il élimine
les lignes dupliquées du résultat, de la même façon que DISTINCT,
sauf si UNION ALL est utilisée.
SELECT nom, prenom
FROM COPAIN
UNION
SELECT PersNom, PersPrenom
FROM PERS;
Pour que la requête union n'élimine pas les doublons, rajouter
l'opérateur ALL après UNION
SELECT nom, prenom
FROM COPAIN
UNION ALL
SELECT PersNom, PersPrenom
FROM PERS;
C. Bouby
13
TP BDD - SQL
2. L'intersection de 2 tables
L'intersection de deux tables est une relation contenant seulement
les lignes communes aux deux tables.
requete1 INTERSECT [ALL] requete2
INTERSECT renvoie toutes les lignes qui sont à la fois dans le
résultat de requete1 et dans le résultat de requete2. Les
lignes dupliquées sont éliminées sauf si INTERSECT ALL est utilisé.
2 autres méthodes : requêtes imbriquées , produit sélection :
• requêtes imbriquées
SELECT nom, prenom FROM Table1
WHERE [Link] IN
(SELECT nom
FROM Table2)
AND [Link]énom IN
(SELECT prenom
FROM Table2);
Cette syntaxe, qui fait appel à autant de sous requêtes qu'il
y a de colonnes.
• produit sélection :
SELECT DISTINCT [Link], [Link]
FROM Table1, Table2
WHERE [Link]=[Link]
AND [Link]=[Link];
L'opérateur DISTINCT est indispensable.
La commande INTERSECT de SQL2 n’existe pas en MySql
C. Bouby
14
TP BDD - SQL
3. La différence de 2 tables
La différence de deux tables est une relation contenant les
enregistrements de la première table qu'on ne retrouve pas dans la
seconde.
requete1 EXCEPT [ALL] requete2
EXCEPT renvoie toutes les lignes qui sont dans le résultat de
requete1 mais pas dans le résultat de requete2.
Les lignes dupliquées sont éliminées sauf si EXCEPT ALL est utilisé.
2 autres méthodes : requêtes imbriquées , jointure externe :
• requêtes imbriquées
En faisant appel à NOT IN ou NOT EXISTS
• Jointure externe
SELECT [Link], [Link]
FROM Table1
LEFT JOIN Table2
ON [Link] = [Link]
AND [Link] = [Link]
WHERE [Link] IsNull
AND [Link] IsNull;
La commande EXCEPT de SQL2 n’existe pas en MySQL
C. Bouby
15