Vous êtes sur la page 1sur 11

Pierre Parrend – Bases de Données Avancées, Module A

Bases de Données Avancées – Module A

IUT Lumière, License CE-STAT


2006-2007
Pierre Parrend

Memo : Fonctions SQL

I. Sélectionner des données

SQL Opération Syntaxe Exemple


SELECT Sélectionner toutes les SELECT * FROM table; Afficher tout le contenu
colonnes de la table de la table stagiaires:
SELECT *
FROM stagiaires;
Séléctionner seulement SELECT colonne1, Afficher le nom et le
certaines colonnes colonne2, ... prenom des stagiaires:
FROM table; SELECT nom, prenom
FROM stagiaires;
DISTINCT Eliminer les doublons SELECT DISTINCT afficher les différents
colonne1 code postal des profs:
FROM table; SELECT DISTINCT
code from prof;
WHERE restreindre le nombre SELECT * afficher la liste des
de lignes renvoyées avec FROM table stagiaires qui habitent
une condition WHERE condition1 Nice:
AND condition2 ...; SELECT *
FROM stagiaires
WHERE ville ='Nice';
Les opérateurs de Les conditions sont SELECT * Afficher les évaluations
comparaison posées gràce aux FROM table dont la note est
opérateurs WHERE colonne1 supérieur à 15:
suivants: opérateur colonne2; SELECT *
= égal FROM evaluations
!= ou WHERE note > 15;
différent
< SELECT *
inférieur FROM table
> WHERE colonne1
supérieur opérateur valeur;
<=
inférieur ou égal
>=
supérieur ou égal

CE-STAT, IUT Lumière 2006-2007


Pierre Parrend – Bases de Données Avancées, Module A

BETWEEN Définir un intervalle SELECT * FROM table Afficher les évalutions


d'application dont la note est
WHERE colonne comprise entre 10 et 15:
BETWEEN expression1 SELECT *
AND expression2; FROM évaluations
WHERE note
BETWEEN 10 AND
15;
IN Chercher une valeur SELECT * FROM table Afficher les évaluations
dans une liste de choix. dont la note est
WHERE colonne IN comprise entre 10 et 15:
( expression1, SELECT *
expression2, ...); FROM évaluation
WHERE note IN(10,
11, 12, 13, 14, 15);
LIKE Comparer les chaines SELECT * from table Afficher la liste des
de caractères où chaine WHERE colonne LIKE stagiaires qui ont un
peut contenir des 'chaine' ; nom commençant par
caractères jokers: "Du" et dont le code
SELECT * FROM table commence par 06 et
_ remplace 1 caractère WHERE colonne LIKE finit par 00.
'ch_ine' ; SELECT *
SELECT * FROM FROM stagiaires
% remplace une chaîne table
de caratère de longueur WHERE colonne WHERE nom
quelconque. LIKE 'c%' ; LIKE 'Du%'
AND code LIKE
'06_00';
NULL Savoir si le champs a été SELECT * FROM table Afficher la liste des
saisi ou non WHERE colonne1 IS stagiaires dont le nom
NULL est saisi mais pas encore
AND colonne2 IS NOT l'adresse:
NULL ; SELECT * FROM
stagiaires
WHERE nom IS NOT
NULL
AND adresse IS NULL;

CE-STAT, IUT Lumière 2006-2007


Pierre Parrend – Bases de Données Avancées, Module A

II. Jointures

SQL Opération Syntaxe Exemple


INNER JOIN Jointure interne (INNER SELECT Afficher la liste des
JOIN): permet de table1.colonne1, matières suivies du nom
regrouper les données table2.colonne2, ... du professeur qui les
présentes dans deux FROM table1 INNER enseigne:
tables si elles ont un JOIN table2
champ commun. USING(colonne) SELECT titre, nom
WHERE condition; FROM matieres JOIN
prof USING(id_prof);
<=>

SELECT <=>
table1.colonne1, SELECT titre, nom
table2.colonne2, ... FROM matieres, prof
FROM table1, table2 WHERE
WHERE table1.colonne matieres.id_prof=prof.id_
= table2.colonne prof;
[AND condition];

Rq: il n'est nécessaire de


mettre le nom de la table
devant le nom colonne
que si les deux tables ont
une colonne du même
nom.

Rq: par défaut la jointure


est une jointure interne, il
suffit donc de mettre
JOIN plutôt qu'INNER
JOIN.

Rq: si la colonne qui sert


de jointure ne porte pas le
même nom dans les deux
tables, on peut utiliser la
syntaxe suivante:

SELECT
table1.colonne1,
table2.colonne2, ...
FROM table1 JOIN
table2 USING(colonne1
= colonne2)
WHERE condition;
CROSS JOIN Jointure croisée: permet SELECT Obtenir la liste de tous les
de faire le produit table1.colonne1, couples professeur
cartésien de deux tables. table2.colonne2, ... -matière possibles:
FROM table1 CROSS SELECT nom, titre
JOIN table2 FROM prof CROSS

CE-STAT, IUT Lumière 2006-2007


Pierre Parrend – Bases de Données Avancées, Module A

WHERE condition; JOIN matieres;


LEFT OUTER JOIN Jointure avec tous les SELECT Lister tous les professeurs
éléments de la table de table1.colonne1, suivi de la matière qu'ils
gauche même ceux qui table2.colonne2, ... enseignent ou d'u blanc
n'ont pas de FROM table1 LEFT s'ils n'enseigne tpas pour
correspondance dans la OUTER JOIN table2 l'instant.
table de droite. USING(colonne) SELECT nom, titre
WHERE condition; FROM prof LEFT
OUTER JOIN matieres
USING(id_prof);
RIGHT OUTER JOIN Jointure avec tous les SELECT lister les matieres avec le
éléments de la table de table1.colonne1, nom des professeurs qui
droite même ceux qui table2.colonne2, ... les enseigne ainsi que les
n'ont pas de FROM table1 RIGHT matiers qui sont pour
correspondance dans la OUTER JOIN table2 l'instant sans enseignant.
table de gauche. USING(colonne) SELECT titre, nom
WHERE condition; FROM prof RIGHT
OUTER JOIN matieres
USING(id_prof);
FULL OUTER JOIN Union des deux SELECT Faire une liste complète
précédentes jointures: table1.colonne1, des matièers et des
permet d'obtenir tous les table2.colonne2, ... professeurs.
éléments des deux tables FROM table1 FULL SELECT titre, nom
même lorsqu'il n'y a pas OUTER JOIN table2 FROM prof FULL
de correspondance. USING(colonne) OUTER JOIN matieres
WHERE condition; USING(id_prof);
JOINTURE PAR Toutes les requêtes sur SELECT Affichez la lite des
INEGALITE les jointures précédentes table1.colonne1, professeurs dont l'indice
sont des jointures par table2.colonne2, ... de rémunération est
égalité entre les deux FROM table1 JOIN supérieure à celle de
colonnes qui servent de table2 USING(colonne1 STICCA Lucie.
jointure. Les jointures par op colonne2)
inégalité se font grâce à WHERE condition; SELECT prof.nom,
un des opérateurs prof.indice
suivants: <, >, <=, >=, <=> FROM prof JOIN prof p
<>, !=, BETWEEN, IN, USING (prof.indice >
LIKE SELECT p.indice)
table1.colonne1, AND p.nom='STICCA'
table2.colonne2, ... AND p.prenom='Lucie';
FROM table1, table2
WHERE table1.colonne
op table2.colonne
[AND condition];
AUTOJOINTURE C'est la jointure d'une SELECT table.colonne1,
table sur elle-même, elle t.colonne2, ...
est utilisée lorsque l'on FROM table, table t
souhaite comprarer un WHERE table.colonne op
ensemble t.colonne
d'enregistrement à un [AND condition];
enregistrement de cette
table.

CE-STAT, IUT Lumière 2006-2007


Pierre Parrend – Bases de Données Avancées, Module A

III.Requêtes Imbriquées

SQL Opération Syntaxe Exemple


Sous-requête renvoyant Le résulat de la sous- SELECT colonne1, Afficher la liste des profs
une seule valeur requête est considéré colonne2 qui ont un indice égal à
comme une constante. FROM table1 celui de STICCA Lucie:
WHERE colonne = SELECT nom, indice
(SELECT colonne3 FROM prof
FROM WHERE indice =
table2 (SELECT indice
FROM prof
WHERE condition); WHERE
nom='STICCA'
AND
prenom='Lucie';
Sous-requête renvoyant Permet de comparer la SELECT colonne1, Comptez le nombre
un ensemble de valeurs valeur d'une colonne avec colonne2 d'évaluations effectuées
l'ensemble de valeurs FROM table1 par des stagiaires qui sont
renvoyé par la sous- WHERE colonne IN des filles:
requête. Cette (SELECT colonne3 SELECT COUNT(*)
comparaison se fait avec FROM FROM evaluations
les opérateurs IN, ANY table2 WHERE id_stagiaire IN
ou ALL. (SELECT
WHERE condition) id_stagiaire
FROM
stagiaires
WHERE
sexe='F');
Sous-requête renvoyant Permet de comparer SELECT colonne1, Chercher sil y a un prof
plusieurs colonnes simultanément plusieurs colonne2 qui est aussi stagiaire:
colonnes avec le résultat FROM table1 SELECT nom, prenom
de la sous-requête. WHERE colonne1, FROM prof
colonne2 = WHERE(nom, prenom) =
(SELECT
colonne3, colonne4 (SELECT
FROM table2 nom, prenom
WHERE FROM stagiaires);
condition)
Sous-requête existentielle Affiche le résultat de la SELECT colonne1, Affichez les noms et
première requête si la colonne2 prenoms des profs qui ont
colonne existe dans la FROM table1 le meilleur indice:
seconde requête. On WHERE colonne SELECT nom, prenom,
utilise les mots clefs: EXISTS indice
EXISTS et NOT EXISTS (SELECT FROM prof p1
colonne3 WHERE NOT EXISTS
FROM table2 ( SELECT *
WHERE FROM prof
condition); p2
WHERE
p2.indice >p1.indice);

CE-STAT, IUT Lumière 2006-2007


Pierre Parrend – Bases de Données Avancées, Module A

IV.Opérateurs et Fonctions

SQL Opération Syntaxe Exemple


Les opérateurs logiques AND: ET logique où la SELECT * FROM table Afficher la liste des
condition1 et la WHERE condition1 stagiaires dont le nom est
condition2 doivent être AND condition2; saisi mais pas encore
vérifiées l'adresse ou qui ont un
SELECT * FROM table identifiant >150:
OR: OU logique où il WHERE condition1 OR
suffit que l'une des condition2; SELECT * FROM
conditions au moins soit stagiaires
vérifiée SELECT * FROM WHERE (nom IS NOT
nom_table NULL AND adresse IS
NOT: NON logique qui WHERE colonne1 NOT NULL)
permet de tester le IN (expression1, OR id_stagiaire > 150;
contraire d'une condition expression2) ;
Fonctions et opérateurs Effectuer des calculs sur Ramener les notes sur 10
arithmétiques des attributs au lieu de 20 et les
arrondir à un chiffre après
+ addition la virgule:
- soustraction SELECT ROUND(note /
* multiplication 2, 2)
/ division FROM evaluations;

ABS (val) valeur absolue


de val
ROUND ( val, nb)
arrondi de val à nb
chiffres après la virgule
TRUNC ( val, nb)
renvoie val tronqué à nb
chiffres après la virgule

Fonctions et opérateurs chaîne1 || chaîne2 : SELECT colonne1 '=>' Afficher la liste des noms
sur les chaînes de concatène les deux colonne2 et prenoms des stagiaires
caractères chaînes FROM table; séparés par un .
SELECT nom '.' prenom
FROM stagiaires;

SELECT Afficher la liste des noms


CONCAT ( chaine1, CONCAT(colonne1, et prenoms des stagiaires
chaine2 ) colonne2) collés l'un à l'autre.
FROM table; SELECT CONCAT
(nom, prenom)
FROM stagiaires;

INITCAP ( chaine) met le Afficher la liste des noms


premier caratère de SELECT des stagiaires avec la
chaque mot de chaîne en INITCAP(nom_colonne) première lettre en
majuscule et le reste du FROM table; majuscule.
mot en minuscules. SELECT INITCAP(nom)

CE-STAT, IUT Lumière 2006-2007


Pierre Parrend – Bases de Données Avancées, Module A

FROM stagiaires;
SELECT
UPPER (chaine) met tous
UPPER(nom_colonne) Afficher les noms des
les caratères de la chaine
FROM table; stagiaires en majuscules.
en lettres majuscules.
SELECT UPPER(nom)
LOWER (chaine) met FROM stagiaires;
tous les caractères de la SELECT
chaine en lettres LOWER(nom_colonne)
minuscules. FROM table; Afficher les noms des
stagiaires en majuscules.
SELECT LOWER(nom)
SELECT FROM stagiaires;
LENGHT(chaine)
LENGHT(colonne)
renvoie la longueur de
FROM table; Afficher la longueur des
chaine.
noms des stagiaires.
REPLACE SELECT LENGHT(nom)
(nom_champs, SELECT REPLACE FROM stagiaires;
ancienne_chaine, (colonne,
nouvelle_chaine) 'ancienne_chaîne',
remplace dans le champs 'nouvelle_chaîne') SELECT REPLACE
nom_champs, les FROM stagiaires; (nom, 'Dupont', 'Durand')
occurences FROM stagiaires;
d'ancienne_chaine par
nouvelle_chaine.

Fonctions et opérateurs =, !=, <, >, <=, >= SELECT * Lister les stagiaires dont
sur les dates permettent de comparer FROM table la date de naissance est
deux dates entre elles WHERE colonne_date < postérieure au
date; 01/01/1980:
SELECT *
FROM stagiaires
WHERE datenaiss >
SELECT date2 - date1 '1980-01-01';
FROM table;
Afficher le nom et l'âge
des stagiaires au 1er mars
2003:
SELECT nom, ('2003-
03-01' - datenaiss)/365
AS "Age"
FROM stagiaires;

CE-STAT, IUT Lumière 2006-2007


Pierre Parrend – Bases de Données Avancées, Module A

V. Ordonner des données

SQL Opération Syntaxe Exemple


La clause ORDER BY permet de classer le SELECT colonne1, Faire une liste des élèves
résultat d'un select par colonne2, ... par ordre alphabétique:
ordre croissant (ASC) ou FROM table SELECT nom, prenom
décroissant (DESC) ORDER BY colonne1 ; FROM stagiaires
(ordre croissant par ORDER BY nom,
défaut) prenom ASC;

SELECT colonne1, Faire une liste des


colonne2, ... matières par coefficients
FROM nom_table croissants:
ORDER BY colonne1, SELECT titre, coeff
colonne2 DESC ; FROM matieres
ORDER BY coeff;
AS Permet de renommer une SELECT colonne1, Afficher les prix horaires
en-tête de colonne du colonne2 AS nets, sachant qu'il y a
résultat. nouveau_nom_colonne 10% de différence entre
FROM nom_table; la valeur brute et la
Ce mot clef est très valeur nette:
pratique pour donner un SELECT
nom de colonne pour un ROUND((prix_horaire*1
résultat de calcul. 10/100),2) AS "Prix
Nets"
FROM remuneration;

VI.Grouper les données

SQL Opération Syntaxe Exemple


GROUP BY Permet de subdiviser une SELECT colonne1, Comptez le nombre
table en plusieurs count(colonne2) d'étudiant par option:
groupes. Chaque groupe FROM nom_table SELECT option, count(*)
regroupe l'ensemble des GROUP BY FROM stagiaires
lignes ayant la même nom_champs1; GROUP BY option;
valeur pour le champ
spécifié
HAVING Permet de préciser les SELECT colonne1, Comptez le nombre
conditions dans lesquelles count(colonne2) d'étudiant pour les
le GROUP BY doit FROM table options Bureautique et
s'exécuter. Elle GROUP BY colonne1, Infographie:
fonctionne de la même colonne2, ...; SELECT option, count(*)
façon que la clause HAVING condition; FROM stagiaires
WHERE. GROUP BY option
HAVING option in
('Bureautique',
'Infographie');
Les Fonctions de groupe AVG : calcule la SELECT Afficher la moyenne des

CE-STAT, IUT Lumière 2006-2007


Pierre Parrend – Bases de Données Avancées, Module A

moyenne des valeurs AVG(champs_numérique notes des évaluations


contenues dans ) SELECT AVG(note)
champs_numérique FROM nom_table; FROM évaluations;

Compter le nombre de
COUNT: compte le SELECT stagiaires:
nombre de lignes du COUNT(nom_colonne|*) SELECT COUNT(*)
résultat de la requête FROM stagiaires;
FROM nom_table;

MIN : sélectionne la plus Afficher le coefficient


petite valeur contenu SELECT MIN( minimum des matières:
dans le champs nom_champs) SELECT
nom_champs FROM nom_table; MIN(coefficient) FROM
matieres;
MAX: sélectionne la plus SELECT MAX(
grande valeur contenu nom_champs) Afficher le coefficient
dans le champs FROM nom_table; maximum des matières:
nom_champs SELECT
SELECT SUM( MAX(coefficient) FROM
SUM: calcule la somme nom_champs) matieres;
des valeurs de FROM nom_table;
nom_champs Calculer la somme des
coefficients des matières:
SELECT STDDEV( SELECT
nom_champs) SUM(coefficient FROM
STDDEV: calcule l'écart- FROM table; matieres);
type des valeurs de
nom_champ Calculer l'écart-type des
SELECT notes:
VARIANCE(nom_champ SELECT STDDEV(note)
s) FROM evaluations;
VARIANCE: calcule la FROM table;
variance des valeurs de Calculer la variance des
nom_champs notes:
SELECT
VARIANCE(note)
FROM evaluations;

CE-STAT, IUT Lumière 2006-2007


Pierre Parrend – Bases de Données Avancées, Module A

VII.Opérateurs ensemblistes

SQL Opération Syntaxe Exemple


UNION le résultat contiendra le requête1 UNION Afficher la liste de toutes
résulat de requête1 + le requête2 les personnes présentes
résultat de requête dans l'établissement:
SELECT nom, prenom
FROM prof
UNION
SELECT nom, prenom
FROM stagiaires;
INTERSECT le résultat contiendra les requête1 INTERSECT Afficher la liste des profs
lignes communes aux requête2: qui sont aussi stagiaires:
deux requêtes SELECT nom, prenom
FROM prof
INTERSECT
SELECT nom, prenom
FROM stagiaires;
EXCEPT résultat de requête1 - requete1 EXCEPT Afficher la liste des profs
résultat de requête2 requête2 qui ne sont pas stagiaires:
SELECT nom, prenom
FROM prof
EXCEPT
SELECT nom, prenom
FROM stagiaires;

VIII.Insérer des Données

SQL Opération Syntaxe Exemple


INSERT Ajouter un nouvel INSERT INTO table Insérer un stagaire dont
enregistrement à une ( colonne1, colonne2, ...) on connait seulement
table. VALUES l'identifiant, le nom et le
( valeur_colonne1, prénom:
valeur_colonne2, ...); INSERT INTO stagiaires
VALUES(100,
Si l'on ne précise aucune 'STICCA','Lucie');
colonne, par défaut la
liste des colonnes sera la
liste complète des Insérer un stagiaire dont
champs de la table. Par on connait tous les
contre dans ce cas-là, il renseignements:
faut bien donner une INSERT INTO stagiaires
valeur pour tous les VALUES(100, 'STICCA',
champs de la table dans 'Lucie', '62, Impasse du 8
le VALUES. Mai 1945','06700', 'Saint
Laurent du Var', '04 98
INSERT INTO table 08 44 93', 'F', '1976-07-
VALUES 24', 'Programmation');
( valeur_colonne1,

CE-STAT, IUT Lumière 2006-2007


Pierre Parrend – Bases de Données Avancées, Module A

valeur_colonne2, ...);

IX.Modifier des Données

SQL Opération Syntaxe Exemple


UPDATE Modifier le contenu d'un UPDATE table Modifier l'enregistrement
ou plusieurs SET colonne1 = de STICCA Lucie qui
enregistrements. nouvelle_valeur1, vient de déménager:
colonne2 = UPDATE stagiaires
nouvelle_valeur2, ... SET adresse=' 32 bd
WHERE condition; Auguste Gal',
code='06300',
ville='Nice'
WHERE nom='STICCA'
AND prenom='Lucie';

X. Supprimer des Données

SQL Opération Syntaxe Exemple


DELETE Supprimer une ou DELETE FROM table Effacer la ligne de la
plusieurs lignes d'une WHERE condition; table stagiaires
table. Attention, si concernant STICCA
aucune condition n'est Lucie:
spécifiée, le contenu DELETE FROM
entier de la table sera stagiaires
effacé. WHERE nom='STICCA'
et prenom='Lucie';

Effacer tout le contenu de


la table stagiaires:
DELETE FROM
stagiaire

CE-STAT, IUT Lumière 2006-2007