0% ont trouvé ce document utile (0 vote)
52 vues42 pages

Cours SQL

Cours SQL de facultée

Transféré par

ahmed.mokchaha
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
52 vues42 pages

Cours SQL

Cours SQL de facultée

Transféré par

ahmed.mokchaha
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
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 Marseille Obtenir 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 te David 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 “produit Ré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_id SQL 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 paris Pour 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 nulle SQL 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 < 26 id 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 35 Combiner 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 2 SQL 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 Paris SQL 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-14 SQL 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 Lille SQLIS 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 NULL Exemple 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 38 Lamanié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 az SQL 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éfaut Exemple 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 nom Ré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 145 SQL 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?_client Ré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 39 SQL 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