0 évaluation0% ont trouvé ce document utile (0 vote) 52 vues42 pagesCours SQL
Copyright
© © All Rights Reserved
Formats disponibles
Téléchargez aux formats PDF ou lisez en ligne sur Scribd
SOE SELECT
utilisation la plus courante de SQL consiste a lire des données issues de la base de données. Cela
steffectue grace a la commande SELECT. qui retourne des enregistrements dans un tableau de.
Fésultat. Cette commande peut selectionner une ou plusieurs colonnes d'une table.
Commande basique
Luutilisation basique de cette commande s'effectue de la maniére suivante
Cette requete va sélectionner (SELECT) le champ « nom_du_champ » provenant (FROM) du
tableau appelé « nom_du_tableau ».
Exemple
Imaginons une base de données appelée « cli
entreprise:
Jnt » qui contient des informations sur les clients d'une
Table « client » :
identifiant prenom| nom vitie
a Pierre Dupena Pars
2 Sabrina Durand Nantes:
3 Julien Martin Lyen
4 Davia Bernard Marseille
5 Marie Leroy Grenoble
Si font veut avoir la liste de toutes les villes des clients, Il suffit d'eftectuer la requéte suivante :
Résultat :
ville
Paris
Nantes
Lyon
MarseilleObtenir plusieurs colonnes
Avec la méme table client il est pessible de tire plusieurs colonnes @ Ia fois. Il sufit tout simplement
de séparer ea noms des champs souhaités par une virgule. Pour obtenir los prénoms et les noma
Ses chores dl faut alors fnine le requote sutverte«+ Joindre un autre tableau aux résultats
« Filtrer pour ne sélectionner que certains enregistrements
«+ Classer les résultats
+ Grouper les résultats pour faire uniquement des statistiques (note moyenne, prix le plus élevé
~)
Un requéte SELECT peut devenir assez longue. Juste a titre informatif, voici une requéte SELECT
qui posséde presque toutes les commandes possibles -
SELECT *
FROM table
WHERE condition
GROUP BY expression
HAVING condition
{UNION | INTERSECT | EXCEPT }
ORDER BY expression
LIMIT count
OFFSET start
Anoter : cette requéte imaginaire sert principale d'aide-mémoire pour savoir dans quel ordre sont
utilisé chacun des commandes au sein d'une requéte SELECT.SQL DISTINCT
\Cuueanon de Ia commande SELECT on SQL permet ae lire tomes lee connéee c'une ou plusieurs
colonnes. Cette commande peut potenticllement afficher des lanes en doubles. Pour éviter des.
Fedondances dans lex résultats il faut simplement ajowter DISTINGT apres te mot SELECT
‘Commande basique
utilisation basique de cette commande consiste alors & eflectuer la requéte suivante =
Cette requéte sélectionne le champ < ma_colonne » de la table « nom_du_tableau » en évitant de:
Requéte pour Oracie
Four le Syst@me de Gestion de Bases de Données (SGBD) Oracte, cete requéte est remplacée par
Ia commande « UNIQUE = =
‘SELECT UNIQUE ma_colenne
FROM nom du tables
Exemple
Frenons le cas concret dune table « client » qui contient des noms et prénams
igontinant pronom nom
1 Fiera: Bupond
z ‘Sabrina Bemard
= Davia ‘Durand
a Piewe: Leroy
iS Leroy
En utisant seulement SELECT tous les noms sont retournés, or la table contient plusieurs fois teDavid
Marie
Ce résultat affiche volontairement qu'une seule fois le prénom « Pierre » grace a utilisation de la
commande DISTINCT qui n’affiche que les résultats distincts.
Intérét
utilisation de la commande DISTINCT est és pratique pour éviter les résultats en doubles.
‘Cependant, pour optimiser les performances il est préférable d'utiliser la commande SQL GROUP BY
lorsque c'est possible.SQL AS (alias)
Dans le langage SQL il est possible dutiliser des alias pour renommer temporairement une colonne
ou une table dans une requéte. Cette astuce est particuliérement utile pour faciliter la lecture des
requétes.
Intéréts et utilités
Alias sur une colonne
Permet de renommer le nom d'une colonne dans les résultats d'une requéte SQL. C’est pratique
pour avoir un nom facilement identifiable dans une application qui doit ensuite exploiter les résultats
d'une recherche.
Cas concrets d'utilisations :
Une colonne qui s’appelle normalement c_iso_3166 peut étre renommée « code_pays » (cf. le
code ISO 3166 correspond au code des pays), ce qui est plus simple a comprendre dans le
reste du code par un développeur.
Une requéte qui utilise la commande UNION sur des champs aux noms différents peut étre
ambigu pour un développeur. En renommant les champs avec un méme nom il est plus simple
de traiter les résultats.
Lorsqu’une fonction est utilisé, le nom d'une colonne peut-étre un peu complexe. Il est ainsi
possible de renommer la colonne sur laquelle il y a une fonction SQL. Exemple : SELECT
COUNT(*) AS nombre_de_resultats FROM ‘table’.
Lorsque plusieurs colonnes sont combinées il est plus simple de renommer la nouvelle
colonne qui est une concaténation de plusieurs champs.Alias sur une table
Permet d'attribuer un autre nom a une table dans une requéte SQL. Cela peut aider a avoir des
noms plus court, plus simple et plus facilement compréhensible. Ceci est particuliérement vrai
lorsqu’il y a des jointures.
Syntaxe
Alias sur une colonne
La syntaxe pour renommer une colonne de colonel acl est la suivante
SELECT colonnel AS cl, colonne2
FROM ~table*
Cette syntaxe peut également s'afficher de la fagon suivante
SELECT colonnel ci, colonne2
FROM “table*
Anoter : a choisiril est préférable d'utiliser la commande « AS » pour que ce soit plus explicite (plus
simple a lire qu'un simple espace), d'autant plus que c'est recommandé dans le standard ISO pour
concevoir une requéte SQL.Alias sur une table
La syntaxe pour renommer une table dans une requéte est la suivante =
SELECT *
FROM “nom_table” AS t1
Cette requéte peut également s’écrire de la facon suivante :
SELECT *
FROM *table"t1
Exemple
Renommer une colonne
Imaginons une site d'e-commerce qui possdde une table de produits. Ces produits sont disponibles
dans une méme table dans plusieurs langues , dont le francais. Le nom du produit peut ainsi tre
disponible dans la colonne « nom_fr_fr», «nom_en_gb » ou «nom_en_us ». Pour utiliser l'un ou
autre des titres dans le reste de application sans avoir & se soucier du nom de la colonne, il est
possible de renommer la colonne de son choix avec un nom générique. Dans notre cas, la requéte
pourra ressemble a ceci =
SELECT p_id, p_nom_fr_fr AS nom, p_description_fr_fr AS description,
pLprix_euro AS prix
FROM “produitRésultat :
id inom description prix,
1 Ecran Ecran de grandes tailles. 399.99
2 Clavier Clavier sans fil. 27
3 Souris Souris sans fil. 24
4 \Ordinateur portable | Grande autonomie et et sacoche offerte. |700
Comme nous pouvons le constater les colonnes ont été renommées.
Renommer une ou plusieurs tables
Imaginons que les produits du site e-commerce soit répartis dans des catégories. Pour récupérer la
liste des produits en méme temps que la catégorie auquel il appartient il est possible d'utiliser une
requéte SQL avec une jointure. Cette requéte peut ufiliser des alias pour éviter utiliser & chaque
fois le nom des tables.
La requéte ci-dessous renomme la table « produit » en « p » et la table « produit_categorie » en « pc
» (plus court et donc plus rapide a écrire) =
SELECT pid, p_nom_fr_fr, pe_id, pc_nom_fr_fr
FROM “produit” AS p
LEFT JOIN *produit_categorie’ AS pc ON pc.pc_id = p.p_fk_category_idSQL WHERE
La commande WHERE dans une requéte SQL permet d'extraire les lignes d'une base de données
qui respectent une condition. Cela permet d’obtenir uniquement les informations désirées.
Syntaxe
La commande WHERE s'utilise en complément a une requéte utilisant SELECT. La fagon la plus
simple de utiliser est la suivante :
SELECT nom_colonnes
FROM nom_table
WHERE condition
Exemple
Imaginons une base de données appelée « client » qui contient le nom des clients, le nombre de
commandes qu'ls ont effectués et leur ville =
id nom nbr_commande ville
1 Paul 3 paris
2 Maurice Qo rennes
3 Joséphine 1 toulouse
4 Gérard 7 parisPour obtenir seulement la liste des clients qui habitent a Paris, il faut effectuer la requéte suivante :
SELECT *
FROM client
WHERE ville = ‘paris’
Résultat :
id nom nbr_commande inbr_commande
1 Paul 3 paris
4 Gérard 7 paris
Attention : dans notre cas tout est en minuscule donc il n'y a pas eu de probléme. Cependant, si un
table est sensible ala casse, i faut faire attention aux majuscules et minuscules.
Opérateurs de comparaisons
|l existe plusieurs opérateurs de comparaisons. La liste ci-jointe présente quelques uns des
opérateurs les plus couramment utilisés.Opérateur Description
= Egale
<> Pas égale
le Pas égale
> [Supérieur a
< Inférieur a
>= Supérieur ou égale a
<= Inférieur ou égale a
IN Liste de plusieurs valeurs possibles
BETWEEN Valeur comprise dans un intervalle donnée (utile pour les nombres ou dates)
LIKE Recherche en spécifiant le début, milieu ou fin d'un mot.
IS NULL. Valeur est nulle
IS NOT NULL Valeur n'est pas nulleSQL AND & OR
Une requéte SQL peut étre restreinte a l'aide de la condition WHERE. Les opérateurs logiques AND:
et OR peuvent étre utilisées au sein de la commande WHERE pour combiner des conditions.
Syntaxe d'utilisation des opérateurs AND et OR
Les opérateurs sont & ajoutés dans la condition WHERE. Ils peuvent étre combinés a I'infini pour
filtrer les données comme souhaités.
Lopérateur AND permet de s'assurer que la condition ET la condition2 sont vrai =
SELECT nom_colennes
FROM nom_table
WHERE condition1 AND conditzon2
Lopérateur OR vérifie quant a lui que la condition OU la condition2 est vrai
SELECT nom_colonnes FROM nom_table
WHERE conditiond OR condition?
Ces opérateurs peuvent étre combinés l'infini et mélangés. 'exemple ci-dessous filtre les résultats
de la table « nom_table » si condition ET condition2 OU condition est vrai
SELECT nom_colonnes FROM nom_table
WHERE condition1 AND (condition? OR condition3)
Attention - il faut penser & utiliser des parenthéses lorsque c'est nécessaire. Cela permet d’éviter les
erreurs car et ca améliore la lecture d'une requéte par un humain.Exemple de données
Pour illustrer les prochaines commandes, nous allons considérer la table « produit » suivante :
id nom categorie ‘stock prix
1 ordinateur informatique 5 950
2 clavier informatique 32 35
3 souris informatique 16 30
4 crayon fourniture 147 2
Opérateur AND
Lopérateur AND permet de joindre plusieurs conditions dans une requéte. En gardant la méme table
que précédemment, pour filtrer uniquement les produits informatique qui sont presque en rupture de
‘stock (moins de 20 produits disponible) il faut exécuter la requéte suivante :
SELECT * FROM produit
WHERE categorie = ‘informatique’ AND stock < 26id nom categorie stock prix
1 ordinateur informatique 5 1950
3 sours informatique 16 30
Opérateur OR
Pour filtrer les données pour avoir uniquement les données sur les produits « ordinateur » ou «
Clavier » il faut effectuer la recherche suivante :
SELECT * FROM produit
WHERE nom = ‘ordinateur’ OR nom = "clavier'
Résultats
id nom categorie stock prix
1 ordinateur informatique 5 1950
2 clavier informatique 32 35Combiner AND et OR
| ne faut pas oublier que les opérateurs peuvent étre combinés pour effectuer de puissantes
recherche. II est possible de filtrer les produits « informatique » avec un stock inférieur a 20 et les
produits « fourniture » avec un stock inférieur a 200 avec la recherche suivante ;
SELECT * FROM produit
WHERE (categorie = ‘informatique’ AND stock < 20 )
OR ( categorie = 'fourniture' AND stock < 200 )
Résultats
id nom categorie ‘stock prix
1 ordinateur informatique 5 1950
2 clavier informatique 32 35
4 crayon Hourniture 147 2SQL IN
Lopérateur logique IN dans SQL s'utilise avec la commande WHERE pour vérifier si une colonne est
egale @ une des valeurs comprise dans set de valeurs determines C'est une methode simple pour
Verifier si une colonne est égale @ une valeur OU une autre valeur OU une autre valeur et ainsi de
Suite, sans avowr A ulliser de multiple fois Papérateur OR.
Syntaxe
Pour chercher toutes les lignes ot Ia. colonne « nom_colonne ~ est égale a ‘valeur 1 OU ‘valeur 2’ ou
“valour 5°
ost possible d'utilicer la syntaxe suvante
A savoir: ontre los parentheses
@ajouter encore d'autres valeurs.
ny @ pas de limite du nombre d’anguments. Il est possible
Cone syntaxe peut étre associge & lopérateur NOT pour recherche toutes les lignes qui ne sont pas
égales A lune des valeurs stipulées.
Simplicité de Vopérateur IN
La syntaxe utilisée avec lopérateur est plus simple que d'utliser une succession d'epérateur OR.
Four le montrer concrétement avec un exemple, voici 2 requétes qui retournerons les memes
recuitats, rune Utlise Foperateur IN, tandis que autre utilise plusieurs OR.
Requéte avec plusieurs OR
Requéte équivalent avec l'opérateur IN
MERE premom 2N ( ‘Mauricet, ‘Maret, ‘Thimess! >3 {65 28 Avenue de Corouaille 27220 Mousseaux-Newville
4 |67 41 Rue Marcel de la Provoté |76430 Graimbouville
5 {68 18 Avenue de Navarre 75009 Paris
Si 'ont souhaite obtenir les enregistrements des adresses de Paris et de Graimbouville, il est
possible d'utiliser la requéte suivante :
‘SELECT *
‘FROM adresse
WHERE addr_ville IN ( ‘Paris’, 'Graimbouville’ )
Résultats
id jid_utilisateur |addr_rue addr_code postal —_jaddr_ville
2 |43 21 Rue du Moulin Collet 75006 Paris
4 |67 41 Rue Marcel de la Provolé |76430 Graimbouville
5/68 18 Avenue de Navarre 75009 ParisSQL BETWEEN
Lopérateur BETWEEN est utilisé dans une requéte SQL pour sélectionner un intervalle de données
dans une requéte utilisant WHERE. Liintervalle peut tre constitué de chaines de caractéres, de
nombres ou de dates. L'exemple le plus concret consiste par exemple a récupérer uniquement les
enregistrements entre 2 dates définies.
syntaxe
Lutiisation de la commande BETWEEN s’effectue de la maniére suivante :
SELECT >
FROM table
WHERE nos_colonne BETWEEN ‘valeur1" AND “valeur2"
Larequéte suivante retournera toutes les lignes dont la valeur de la colonne « nom_colonne » sera
comprise entre valeur et valeur2.
Exemple : filtrer entre 2 dates
Imaginons une table « utilisateur » qui contient les membres d'une application en ligne.
id nom [date_inscription
q1 Maurice 2012-03-02
2 Simon 2012-03-05
3 |Ghloé 2012-04-14
4 Marie 2012-04-15
5 |Clémentine 2012-04-26‘Si ont sounaite obtenir les membres qui se sont inscrit entre le 1 avril 2012 et le 20 avril 2012 il est
possible d'offectuer la requéte suivante :
AGERE date anccraption BETWEEN ‘2022-04-02 AND “2012-04-20"
Résultat =
id nom
3 Ghioé
4 Mario
xemple : filtrer entre 2 entiers
'Si ont sounaite obtenir tous les résultats dont lidentifiant n'est pas situé entre 4 et 10, il faudra alors
utiliser la requéte suivante =
SELECT *
FROM utilisateur
WHERE id NOT BETWEEN 4 AND 19
Résultat :
id nom date_inscription
Maurice 2012-03-02
2 Simon 2012-03-05
3 Chloé 2012-04-14SQL LIKE
Lopérateur LIKE est utilisé dans la clause WHERE des requétes SQL. Ce mot-clé permet d'effectuer
une recherche sur un modéle particulier. II est par exemple possible de rechercher les
enregistrements dont la valeur d'une colonne commence par telle ou telle lettre. Les modéles de
recherches sont multiple.
syntaxe
La syntaxe a utiliser pour utiliser opérateur LIKE est la suivante -
SELECT >
FROM table
WHERE colonne LIKE modele
Dans cet exemple le « modéle » n'a pas été défini, mais il ressemble trés généralement a l'un des
exemples suivants ©
LIKE ‘Sa’ : le caractére «% » est un caractére joker qui remplace tous les autres caractéres.
Ainsi, ce modéle permet de rechercher toutes les chaines de caractére qui se termine par un «
a».
LIKE ‘a%" : ce modéle permet de rechercher toutes les lignes de « colonne » qui commence
parun« a>».
LIKE '%a%" : ce modéle est utilisé pour rechercher tous les enregistrement qui utilisent le
caractére «a
LIKE ‘pa%on’ : ce modéle permet de rechercher les chaines qui commence par « pa » et qui
se terminent par « on », comme « pantalon » ou « pardon >».
LIKE ‘a_c’ : peu utilisé, le caractére « _ » (underscore) peut étre remplacé par n'importe quel
caractére, mais un seul caractére uniquement (alors que le symbole pourcentage « % » peut
étre remplacé par un nombre incalculable de caractéres . Ainsi, ce modéle permet de
retoumer les lignes « aac », « abc » ou méme « azc >.Exemple
Imaginons une table « client » gui contient les enregistrement d
id nom ville
1 Léon Lyon
2 |Odette Nico
= Vivien Nantes
a [Etienne Lille
Obtenir les résultats qui commencent par « N »
Si Font souhaite obtenir uniquement les clients des villes qui commencent par un « No», ilest
possible d'utiliser la requéte suivante
Avec cette requéte, seul les enregistrements suivants seront retournés =
id nom ville
2 [Odette Nice
3 Vivien Nantes
Obtenir les résultats terminent par « e »
Requéte :
Résultat:
id nom ville
2 [Odette Nice
a Etienne LilleSQLIS NULL/ 1S NOT NULL
Dans le langage SQL. lopérateur |S permet de filtrer les résultats qui contiennent la valeur NULL
Cet opérateur est indispensable car la valeur NULL est une valeur inconnue et ne peut par
conséquent pas étre fitrée par les opérateurs de comparaison (cf. égal, inférieur, supérieur ou
différent).
Syntaxe
Pour filtrer les résultats ou les champs d'une colonne sont a NULL il convient d'utiliser la syntaxe
‘suivante ©
SELECT *
FROM “cable”
WHERE nom_colonne IS NULL
ATfinverse, pour fitrer les résultats et obtenir uniquement les enregistrements qui ne sont pas null, il
convient dutiiser la syntaxe suivante :
SELECT *
FROM “table”
WHERE nom_colonne IS NOT NULLExemple
Imaginons une application qui posséde une table contenant les utilisateurs. Cette table posséde 2
colonnes pour associer les adresses de livraison et de facturation 4 un utilisateur (grace a une clé
étrangére). Si cet utilisateur n'a pas d’adresse de facturation ou de livraison, alors le champ reste &
NULL.
Table « utilisateur »
id |nom date_inscription —_fk_adresse_livraison_id |fk_adresse_facturation_id
23° |Grégoire 2019-02-12 12 12
24 |Sarah 2013-02-17 NULL NULL
25 Anne 2013-02-21 13 14
26 |Frédérique 2013-03-02 NULL NULL
Exemple 1: utilisateurs sans adresse de livraison
ll est possible d’obtenir la liste des utilisateurs qui ne possédent pas d’adresse de livraison en
utilisant la requéte SQL suivante -SELECT *
FROM “utildcateur®
WIERE °fk_adresse_livraison_id” IS NULL
Résultat :
id__[nom date_inscripfion _|fk_adresse livraison id _|fK_adresse_facturation id
24 |Sarah 2013-02-17 NULL NULL
26 _ | Frédérique 2013-03-02 NULL NULL
Les enregistrements retournés montrent bien que seul les utilisateurs ayant la valeur NULL pour le
champ de l'adresse de livraison.
ateurs avec une adresse de livraison
Exemple 2 : ut
Pour obtenir uniquement les utilisateurs qui possédent une adresse de livraison il convient de lancer
la requéte SQL suivante :
FROM “utildcateur®
WiERE °fk_adresse_livraison_id” IS NOT NULL
Résultat :
id [nom date_inscription _[fk_adresse_livraison_id _|fk_adresse_facturation_id
23 |Grégoire 2013-02-12 12 12
25 [Anne 2013-02-21 43 14
Les lignes retournés sont exclusivement celles qui n’ont pas une valeur NULL pour le champ de
Vadresse de livraison.SQL GROUP BY
La commande GROUP BY est utiisée en SQL pour grouper plusieurs résultats et utiliser une fonction
de totaux sur un groupe de résultat. Sur une table qui contient toutes les ventes d'un magasin, il est
par exemple possible de liste regrouper les ventes par clients identiques et d'obtenirle coiit total des
achats pour chaque client.
Syntaxe d'utilisation de GROUP BY
De facon général, la commande GROUP BY sutilse de la facon suivante:
SELECT colonne1, fonction(colonne2)
FROM table
GROUP BY colonnet
Anoter : cette commande doit toujours sutiliser aprés la commande WHERE et avant la commande
HAVING.Exemple d'utilisation
Prenons en considération une table « achat » qui résume les ventes d'une boutique
id [client tarif [date
1 Pierre 102 2012-10-23
2 [Simon 47 2012-10-27
3 [Marie 18 2012-11-05
4 Mario 20. [2012-11-14
5 Pierre 160 2012-12-03
Ce tableau contient une colonne qui sert d'identifiant pour chaque ligne, une autre qui contient le
nom du client, le coat de la vente et la date d'achat
Pour obtenir le coat total de chaque client en regroupant les commandes des mémes clients, il faut
utiliser la requéte suivante =
SELECT client. SUM(tarif?
FROM achat
GROUP BY client
La fonction SUMO permet d’additionner la valeur de chaque tarif pour un méme client. Le résultat
sera done le suivant =
client SUM(tarif)
Pierre 262
Simon a7
Marie 38Lamaniére simple de comprendre le GROUP BY c'est tout simplement d’assimiler qu'il va éviter de
précontor plusiours fois los mémes lignes. C'est une méthode pour éviter les doublons.
Juste a titre informatif, voici co qu'on obtiont de la requéte sans utilisor GROUP BY.
Requéte =
SELECT client, SUM(earif)
Résultat :
client SUM(tarif)
Pierre 262
Simon 47
Marie 38
Marie 38
Pierre 262
Utilisation d’autres fonctions de statistiques
Il existe plusieurs fonctions qui peuvent étre utilisées pour manipuler plusieurs enregistrements, il
‘agit des fonctions d’agrégations statistiques, les principales sont les suivantes =
+ AVGOQ pour calculer la moyenne d'un set de valeur. Permet de connaftre le prix du panier
moyen pour de chaque client
+ COUNTO pour compter le nombre de lignes concernées. Permet de savoir combien d’achats a
€té effectué par chaque client
+ MAX( pour récuperer la plus haute valeur. Pratique pour savoir achat le plus cher
+ MINQ pour récupérer la plus petite valeur. Utile par exemple pour connaitre la date du premier
achat d'un client
+ SUMO pour calculer la somme de plusieurs lignes. Permet par exemple de connaiftre le total
de tous les achats d'un client
Ces petites fonctions se révélent rapidement indispensable pour travailler sur des données.SQL HAVING
La condition HAVING en SQL est presque similaire a WHERE ala seule différence que HAVING
permet de filtrer en utilisant des fonctions telles que SUM(), COUNT(), AVG), MIN) ou MAX().
syntaxe
utilisation de HAVING s'utilise de la maniére suivante =
SELECT colonel, SUM(colenne2)
FROM nom_table
GROUP BY colonne1
HAVING fonction(colonne2) operateur valeur
Cela permet donc de SELECTIONNER les colonnes DE la table « nom_table » en GROUPANT les
lignes qui ont des valeurs identiques sur la colonne « colonne’" et que la condition de HAVING soit
respectée
Important : HAVING est trés souvent utilisé en méme temps que GROUP BY bien que ce ne soit
pas obligatoire.Exemple
Pour utiliser un exemple concret, imaginons une table « achat » qui contient les achats de différents
clients avec le coat du panier pour chaque achat.
id client tarif \date_achat
1 Pierre 102 2012-10-23
2 Simon a7 2012-10-27
3 Marie 18 2012-11-05
4 Marie 20 2012-11-14
5 Pierre 160 2012-12-03
Si dans cette table on souhaite récupérer la liste des clients qui ont commandé plus de AOE, toute
commandes confondu alors il est possible d’utiliser la requéte suivante :
SELECT client, SUM(tarif)
FROM achat
GROUP BY client
HAVING SUM(tarif) > 40
Résultat :
client SUM(arif)
Pierre 162
‘Simon azSQL ORDER BY
La commande ORDER BY permet de trier les lignes dans un résultat dune requéte SQL. Il est
possible de trier les données sur une ou plusieurs colonnes, par ordre ascendant ou descendant.
syntaxe
Une requéte ot |'ont souhaite filtrer ordre des résultats utilise la commande ORDER BY de la sorte
SELECT colonnel, colonne?
FROM table
ORDER BY colonne
Par défaut les résultats sont classés par ordre ascendant, toutefois il est possible dinverser l'ordre
en utilisant le suffixe DESC aprés le nom de la colonne. Par ailleurs, il est possible de trier sur
plusieurs colonnes en les séparant par une virgule. Une requéte plus élaboré ressemblerais alors
cela:
SELECT colonnel, colenne2, colonne?
FROM table
ORDER BY colonnel DESC, colonne? ASC
A noter : il n'est pas obligé dutiiser le suffixe « ASC » sachant que les résultats sont toujours classé
par ordre ascendant par défaut. Toutefois, c'est plus pratique pour mieux s'y retrouver, surtout si on a
oublié ordre par défautExemple
Pour l'ensemble de nos exemple, nous allons prendre un base « utilisateur » de test, qui contient les
données suivantes :
id nom prenom date inscription —_|tarif_total
1 Durand Maurice 2012-02-05 145
2 Dupond Fabrice 2012-02-07 65
3 Durand Fabienne 2012-02-13 190
4 Dubois Chloé 2012-02-16 198
5 Dubois Simon 2012-02-23 27
Pour récupérer la liste de ces utiisateurs par ordre alphabétique du nom de famille, il est possible
dutiliser la requéte suivante >
SELECT *
FROM utilisateur
ORDER 8Y nomRésultat -
id inom Prenom date_inscription _[tarif_total
a Dubois Chios 2012-02-16 [os
5 Dubois Simon [2012-02-23 27
2 Dupond Fabrice [2012-02-07 65
1 Durand Maurice 2012-02-05 145
a Durand Fabienne [2012-02-13 la0
En utilisant deux méthodes de tri, il est possible de retourner les utilisateurs par ordre alphabétique
ET pour ceux qui ont le méme nom de famille, les trier par ordre décroissant d'inscription. La requéte
serait alors la suivante :
date_anscription DESC
id [nom Prenom [date_inscription _|tarif_total
5 Dubois ‘Simon [2012-02-23 le7
a Dubois Chloé [2012-02-16 [se
2 Dupond Fabrice [2012-02-07 es
3 Durand Fabienne [2012-02-13 [s0
1 Durand ‘Maurice [2012-02-05 145SQL UNION
Lacommande UNION de SQL permet de metire bout-a-bout les résultats de plusieurs requétes
utilisant elles-méme la commande SELECT. C'est donc une commande qui permet de concaténer les
résultats de 2 requétes ou plus. Pour l'utiliser il est nécessaire que chacune des requétes 4
concaténer retournes le méme nombre de colonnes, avec les mémes types de données et dans le
méme ordre.
A savoir : par défaut, les enregistrements exactement identiques ne seront pas répétés dans les
résultats. Pour effectuer une union dans laquelle méme les lignes dupliquées sont affichées il faut
plutét utiliser la commande UNION ALL.
Syntaxe
Lasyntaxe pour unir les résultats de 2 tableaux sans afficher les doublons est la suivante :
SELECT * FROM tabled
UNION
SELECT * FROM table?Schéma explicatif
union de 2 ensembles A et B est un concept qui consiste & obtenir tous les éléments qui
correspondent a la fois a l'ensemble A ou a l'ensemble B. Cela se résume trés simplement par un
petit schéma oi la zone en bleu correspond a la Zone que ont souhaite obtenir (dans notre cas:
tous les éléments),
‘Union de 2 ensembles
Exemple
Imaginons une entreprise qui posséde plusieurs magasins et dans chacun de ces magasins ily a
une table qui liste les clients. -
La table du magasin n°1 s'appelle « magasin1_client » et contient les données suivantes =prenom nom ville date_naissance __|total_achat
Léon Dupuis Paris 1983-03-06 135
Marie Berard Paris 1993-07-03 78
Sophie Dupond Marseille 1986-02-22 27
Marcel Martin Paris 1976-11-24 39
Latable du magasin n°2 s‘appelle « magasin2_client » et contient les données suivantes :
prenom nom vile date_naissance _|total_achat
Marion Leroy Lyon 1982-10-27 285
Paul Moreau Lyon 1976-04-19 138
Marie Berard Paris 1993-07-03 75
Marcel Martin Paris 1976-11-24 39
‘Sachant que certains clients sont présents dans les 2 tables, pour éviter de retourner plusieurs fois
les mémes enregistrement, il convient dutiliser la requéte UNION. La requéte SQL est alors la
suivante =
SELECT * FROM magazind client
UNION
SELECT * FROM magasin?_clientRésultat
prenom, nom ville date_naissance —_|total_achat
Léon Dupuis Paris 1983-03-06 435
Marie Bemard Paris 1993-07-03 75
Sophie Dupond Marseille 1986-02-22 27
Marcel Martin Paris 1976-11-24 39
Marion Leroy Lyon 1982-10-27 1285
Paul Moreau Lyon 1976-04-19 433
Le résultat de cette requéte montre bien que les enregistrements des 2 requétes sont mis bout-a-
bout mais sans inclure plusieurs fois les mémes lignes.SQL INTERSECT
Lacommande SQL INTERSECT permet d'obtenir l'intersection des résultats de 2 requétes. Cette
commande permet donc de récupérer les enregistrements communs a 2 requétes. Cela peut s'avérer
utile lorsqu’il faut trouver s'il y a des données similaires sur 2 tables distinctes.
A savoir : pour l'utliser convenablement il faut que les 2 requétes retourne le méme nombre de
colonnes, avec les mémes types et dans le méme ordre.
Syntaxe
Lasyntaxe a adopter pour utiliser cette commande est la suivante =
SELECT * FROM tablel
INTERSECT
SELECT * FROM table?
Dans cet exemple, il faut que les 2 tables soient similaires (mémes colonnes, mémes types et méme
ordre). Le résultat correspondra aux enregistrements qui existent dans tablel et dans table2.syntaxe
La syntaxe 4 adopter pour utiliser cette commande est la suivante:
Dans cot exemple. il faut que les 2 tables soient similaires (mémes colonnes. mémes types ot méme.
ordre). Le résultat correspondra aux enregistrements qui existent dans table ot dans table2.
Schéma explica’
Uintersection de 2 ensembles A et B correspond aux éléments qui sont présent dans A et dans B. et
seulement ceux-la. Cela peut étre représenté par un schéma explicatif simple ou Mintersection de A et
B correspond a la zone en bleu.
Intorsection de 2 ensembles
exemple
Prenons exemple de 2 magasins qui appartiennent au méme groupe. Chaque magasin posséde sa
‘table do clionts.
La table du magasin n°1 est « magasin1_client »
prenom nem [ville fdate_naissance _|fotal_achat
Léon Dupuis’ Paris 1983-03-06 135
Marie Berard Paris 1993-07-03 75[Sophie Dupond Marseille 1986-02-22 27
Marcel Martin Paris 1976-11-24 Ey
La table du magasin n°2 est « magasin2_client » :
prenom nom ville date_naissance __|total_achat
Marion Leroy Lyon 1982-10-27 lags
Paul Moreau Lyon 1976-04-19 133
Marie Bemard Paris 1993-07-03 75
Marcel Martin Paris 1976-11-24 [a9
Pour abtenir la liste des clients qui sont présents de fagon identiques dans ces 2 tables, il est
possible dutiliser la commande INTERSECT de la fagon suivante =
SELECT * FROM magasini_client
INTERSECT
SELECT * FROM magasin2_client
Résultat >
prenom nom ville date_naissance __|total_achat
Marie Bemard Paris 1993-07-03 75,
Marcel Martin Paris 1976-11-24 39SQL INSERT INTO
insertion de données dans une table s'effectue a l'aide de la commande INSERT INTO. Cette
‘commande permet au choix d'inclure une seule ligne a la base existante ou plusieurs lignes d'un
‘coup.
Insertion d'une ligne & la fois
Pour insérer des données dans une base. il y a 2 syntaxes principales =
+ Insérer une ligne en indiquant les informations pour chaque colonne existante (en respectant
Fordro)
+ Insérer une ligne en spécifiant les colonnes que vous souhaiter compléter. II ost possible
d'ingérer une ligne en renseigner seulement une partie des colonnes.
Insérer une ligne en spécifiant toutes les colonnes
(La symtaxe pour remplir une ligne avec cette méthode est la suivante
WALUES (‘valeur 1". ‘valeur 2°...)
Cette syntaxe posséde les avantages et inconvénients suivants =
Obliger de remplir toutes les données, tout en respectant l'ordre des colonnes.
I n'y a pas le nom de colonne, donc les fautes de frappe sont limitées. Par ailleurs, les
colonnes peuvent étre renommées sans avoir a changer la requéte
+ Cordre des colonnes doit resté identique sinon certaines valeurs prennent le risque d’étre
complétée dans la mauvaise colonne
Insérer une ligne en spécifiant seulement les colonnes souhaitées
‘Cotte deuxiéme solution est trés similaire, excepts qu'il faut indiquer lo nom des colonnes avant <
VALUES ». La syntaxe est la suivante:
(mom_coionne 1, nom_cotenne 2, -
WALUES (‘valeur 1". ‘valeur 2". ...)
A noter : il ost possible de ne pas renseigner toutes les colonnes. De plus, ordre des colennes n'est
pas important.Insertion de plusieurs lignes A la fois
lest possible d’ajouter plusiours lignes 4 un tableau avec une seule requéte. Pour ce faire, il
convient d'utiliser la syntaxe suivante
INSERT INTO client (prenom, nom, ville, ag)
CoRévecca’ “Saine-Dadier-aes-Bo1s. 249.
(C Hilaire’, ‘Savary’, ‘Conie-Nolitard", 58);
Anoter : lorsque le champ a remplir est de type VARCHAR ou TEXT il faut indiquer le texte entre
guillemet simple. En revanche, lorsque la colonne est un numérique tel que INT ou BIGINT il n'ya
pas besoin d'utiiser de guillemet, il suffit juste d'indiquer le nombre.
Un tel exemple sur une table vide va créer le tableau suivant :
id /prenom inom ville age
1 Rébecca |Armand Saint-Didier-des-Bois 24
2 |Aimée Hebert |Marigny-le-Chatel 36
3 Marielle Ribeiro |Mailléres 27
4 Hilaire Savary |Conie-Molitard 58
Vous aimerez peut-être aussi