Cours SQL _____________ Base du langage SQL et des bases de données Auteur Tony

Cours SQL _____________ Base du langage SQL et des bases de données Auteur Tony Archambeau Site web http://sql.sh Date 24 mai 2014 Licence Mis à disposition selon les termes de la licence Creative Commons Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 4.0 International.. Vous êtes libres de reproduire, distribuer et communiquer cette création au public à condition de faire un lien vers http://sql.sh, de redistribuer dans les mêmes conditions et de ne pas faire d'utilisation commerciale du cours. 1/89 sql.sh Sommaire SQL SELECT..........................................................................................................................................3 SQL DISTINCT........................................................................................................................................6 SQL AS (alias).........................................................................................................................................8 SQL WHERE.........................................................................................................................................11 SQL AND & OR.....................................................................................................................................13 SQL IN...................................................................................................................................................15 SQL BETWEEN.....................................................................................................................................17 SQL LIKE...............................................................................................................................................19 SQL IS NULL / IS NOT NULL................................................................................................................21 SQL GROUP BY...................................................................................................................................23 SQL HAVING.........................................................................................................................................25 SQL ORDER BY....................................................................................................................................27 SQL LIMIT.............................................................................................................................................29 SQL CASE.............................................................................................................................................31 SQL UNION...........................................................................................................................................35 SQL UNION ALL....................................................................................................................................37 SQL INTERSECT..................................................................................................................................39 SQL EXCEPT / MINUS.........................................................................................................................41 SQL INSERT INTO................................................................................................................................43 SQL ON DUPLICATE KEY UPDATE....................................................................................................45 SQL UPDATE........................................................................................................................................48 SQL DELETE........................................................................................................................................49 SQL MERGE.........................................................................................................................................50 SQL TRUNCATE TABLE.......................................................................................................................51 SQL CREATE DATABASE....................................................................................................................52 SQL DROP DATABASE........................................................................................................................53 SQL CREATE TABLE............................................................................................................................54 SQL ALTER TABLE...............................................................................................................................56 SQL DROP TABLE................................................................................................................................58 Jointure SQL.........................................................................................................................................59 SQL INNER JOIN..................................................................................................................................60 SQL CROSS JOIN................................................................................................................................62 SQL LEFT JOIN....................................................................................................................................64 SQL RIGHT JOIN..................................................................................................................................66 SQL FULL JOIN....................................................................................................................................68 SQL SELF JOIN....................................................................................................................................70 SQL NATURAL JOIN.............................................................................................................................72 SQL Sous-requête.................................................................................................................................74 SQL EXISTS..........................................................................................................................................77 SQL ALL................................................................................................................................................79 SQL ANY / SOME..................................................................................................................................80 Index SQL.............................................................................................................................................82 SQL CREATE INDEX............................................................................................................................83 SQL EXPLAIN.......................................................................................................................................85 Commentaires en SQL..........................................................................................................................88 2/89 sql.sh SQL SELECT L’utilisation la plus courante de SQL consiste à lire des données issues de la base de données. Cela s’effectue grâce à la commande SELECT, qui retourne des enregistrements dans un tableau de résultat. Cette commande peut sélectionner une ou plusieurs colonnes d’une table. Commande basique L’utilisation basique de cette commande s’effectue de la manière suivante : SELECT nom_du_champ FROM nom_du_tableau Cette requête 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 « client » qui contient des informations sur les clients d’une entreprise. Table « client » : identifiant prenom nom ville 1 Pierre Dupond Paris 2 Sabrina Durand Nantes 3 Julien Martin Lyon 4 David Bernard Marseille 5 Marie Leroy Grenoble Si l’ont veut avoir la liste de toutes les villes des clients, il suffit d’effectuer la requête suivante : SELECT ville FROM client Résultat : ville Paris Nantes Lyon Marseille Grenoble 3/89 sql.sh Obtenir plusieurs colonnes Avec la même table client il est possible de lire plusieurs colonnes à la fois. Il suffit tout simplement de séparer les noms des champs souhaités par une virgule. Pour obtenir les prénoms et les noms des clients il faut alors faire la requête suivante: SELECT prenom, nom FROM client Résultat : prenom nom Pierre Dupond Sabrina Durand Julien Martin David Bernard Marie Leroy Obtenir toutes les colonnes d’un tableau Il est possible de retourner automatiquement toutes les colonnes d’un tableau sans avoir à connaître le nom de toutes les colonnes. Au lieu de lister toutes les colonnes, il faut simplement utiliser le caractère « * » (étoile). C’est un joker qui permet de sélectionner toutes les colonnes. Il s’utilise de la manière suivante : SELECT * FROM client Cette requête retourne exactement les mêmes colonnes qu’il y a dans la base de données. Dans notre cas, le résultat sera donc : identifiant prenom nom ville 1 Pierre Dupond Paris 2 Sabrina Durand Nantes 3 Julien Martin Lyon 4 David Bernard Marseille 5 Marie Leroy Grenoble Il y a des avantages et des inconvénient à l’utiliser. Pour en savoir plus sur le sujet il est recommandé de lire l’article avantage et inconvénient du sélecteur étoile. Cours avancé : ordre des commandes du SELECT Cette commande SQL est relativement commune car il est très fréquent de devoir lire les données issues d’une base de données. Il existe plusieurs commandes qui permettent de mieux gérer les données que l’ont souhaite lire. Voici un petit aperçu des fonctionnalités possibles qui sont abordées sur le reste du site: 4/89 sql.sh • 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 à 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 A noter : 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. 5/89 sql.sh SQL DISTINCT L’utilisation de la commande SELECT en SQL permet de lire toutes les données d’une ou plusieurs colonnes. Cette commande peut potentiellement afficher des lignes en doubles. Pour éviter des redondances dans les résultats il faut simplement ajouter DISTINCT après le mot SELECT. Commande basique L’utilisation basique de cette commande consiste alors à effectuer la requête suivante : SELECT DISTINCT ma_colonne FROM nom_du_tableau Cette requête sélectionne le champ « ma_colonne » de la table « nom_du_tableau » en évitant de retourner des doublons. Requête pour Oracle Pour le Système de Gestion de Bases de Données (SGBD) Oracle, cette requête est remplacée par la commande « UNIQUE » : SELECT UNIQUE ma_colonne FROM nom_du_tableau Exemple Prenons le cas concret d’une table « client » qui contient des noms et prénoms : identifiant prenom nom 1 Pierre Dupond 2 Sabrina Bernard 3 David Durand 4 Pierre Leroy 5 Marie Leroy En utilisant seulement SELECT tous les noms sont retournés, or la table contient plusieurs fois le même prénom (cf. Pierre). Pour sélectionner uniquement les prénoms uniques il faut utiliser la requête suivante : SELECT DISTINCT prenom FROM client Résultat : prenom Pierre Sabrina 6/89 sql.sh David Marie Ce résultat affiche volontairement qu’une seule fois le prénom « Pierre » grâce à l’utilisation de la commande DISTINCT qui n’affiche que les résultats distincts. Intérêt L’utilisation de la commande DISTINCT est trè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. 7/89 sql.sh SQL AS (alias) Dans le langage SQL il est possible d’utiliser 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 à 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 à une table dans une requête SQL. Cela peut aider à 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 colonne1 à c1 est la suivante : SELECT colonne1 AS c1, colonne2 FROM `table` Cette syntaxe peut également s’afficher de la façon suivante : SELECT colonne1 c1, colonne2 FROM `table` A noter : à choisir il est préférable d’utiliser la commande « AS » pour que ce soit plus explicite (plus simple à lire qu’un simple espace), d’autant plus que c’est recommandé dans le standard ISO pour concevoir une requête SQL. 8/89 sql.sh 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 façon suivante : SELECT * FROM `table`t1 Exemple Renommer une colonne Imaginons une site d’e-commerce qui possède une table de produits. Ces produits sont disponibles dans une même table dans plusieurs langues , dont le français. 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 l’autre des titres dans le reste de l’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 à ceci : SELECT p_id, p_nom_fr_fr AS nom, p_description_fr_fr AS description, p_prix_euro AS prix FROM `produit` Résultat : id nom description prix 1 Ecran Ecran de grandes tailles. 399.99 uploads/Industriel/cours-sql-sh-pdf.pdf

  • 31
  • 0
  • 0
Afficher les détails des licences
Licence et utilisation
Gratuit pour un usage personnel Attribution requise
Partager