Want to create interactive content? It’s easy in Genially!

Get started free

SQL - Maîtriser et pratiquer

CHRISTOPHE

Created on May 8, 2020

Start designing with a free template

Discover more than 1500 professional designs like these:

Modern Zen Presentation

Newspaper Presentation

Audio tutorial

Pechakucha Presentation

Desktop Workspace

Decades Presentation

Psychology Presentation

Transcript

Apprendre et maîtriser

SQL

BTS

CG

commencer

//Les notions de base

Dans cette section, vous allez pouvoir reprendre les notions de base en lien avec le requêtage SQL. Vous pouvez consulter les notions présentées dans les pages suivantes ou vous rendre directement sur les exercices visés.

Aide //

Jeux //

01

requêtes simples

cas medical

cas stages

restrictions

cas COMPTOIR

cas gymnase

projection

calculs

cas bIBLIOTHEQUE

cas CONFISERIE

jointures

agrÉgats

SYNTHÈSE

//Créer des requêtes simples

Home

SELECT * FROM Client ; Le terme SELECT indique donc que nous souhaitons récupérer des données. Le caractère * indique que l'on veut tous les attributs de la table. Le terme FROM permet d'indiquer à partir de quelle table nous devons récupérer les données.

//Créer des requêtes simples

Home

Il est parfois utile de n'avoir que les premières lignes d'une table, pour comprendre son contenu par exemple. Dans ce cas, il est possible d'ajouter en fin de requête le terme LIMIT suivi du nombre de lignes souhaité. SELECT * FROM Client LIMIT 3;

//Créer des requêtes simples

Home

Ordre des résultats De même, on est souvent appelé à faire un tri des données (ascendant ou descendant). Le terme ORDER BY, à placer en fin de requête aussi, mais avant le LIMIT si nécessaire, permet de réaliser un tel tri. Il faut bien noter que le tri ne se fait qu'à l'affichage et que la table n'est en rien modifiée. De plus, celui-ci peut se faire sur tout type de données. Il est possible d'utiliser le terme DESC pour introduire un tri décroissant (plus grand au plus petit). SELECT * FROM Employe ORDER BY Nom DESC;

//Créer des requêtes simples

Home

Ordre des résultats Il est possible d'avoir plusieurs critères de tri. Pour cela, il faut séparer les différents attributs (nom ou position) par une virgule (,). La requête suivante permet donc d'avoir les employés triés d'abord par leur fonction, puis par leur nom. SELECT * FROM Employe ORDER BY Fonction, Nom; Voici la même requête que précédemment, avec les fonctions triées par ordre alphabétique décroissant. SELECT * FROM Employe ORDER BY Fonction DESC, Nom;

//Créer des requêtes simples

Home

Restriction Une restriction est une sélection de lignes d'une table, sur la base d'une condition à respecter, définie à la suite du terme WHERE. Cette condition peut être une combinaison de comparaisons à l'aide de AND, de OR et de NOT (attention donc aux parenthèses dans ce cas). Opérateurs classiques Nous disposons bien sûr de tous les opérateurs classiques de comparaison : =, <>, >, >=, <, <=. Cette requête permet de lister tous les employés ayant la fonction de représentant. SELECT * FROM Employe WHERE Fonction = "Représentant(e)";

//Créer des requêtes simples

Home

Restriction Si l'on souhaite le complément de cette requête, i.e. tous les employés qui ne sont pas représentants, on utilise le symbole <> pour indiquer une non-égalité (ce qui revient à faire NOT(Fonction = "Représentant(e)")). SELECT * FROM Employe WHERE Fonction <> "Représentant(e)"; Comme indiqué précédemment, il est possible de combiner des comparaisons. La requête suivante permet d'avoir les représentants masculins, avec un numéro d'employé inférieur strictement à 8. SELECT * FROM Employe WHERE Fonction = "Représentant(e)" AND TitreCourtoisie = "M." AND NoEmp < 8;

//Créer des requêtes simples

Home

Données manquantes Une donnée manquante en SQL est repérée par un NULL. Il y a plusieurs raisons, bonnes ou mauvaises, pour avoir des données manquantes, et il est parfois utile de tester leur présence. Pour cela, nous allons utiliser le terme IS NULL comme condition. Par exemple, pour lister les employés dont la région n'est pas renseignée, nous devons exécuter la requête suivante. SELECT * FROM Employe WHERE Region IS NULL; Au contraire, si l'on veut uniquement les employés pour lesquels l'information est présente, nous devrons utiliser la négation avec IS NOT NULL SELECT * FROM Employe WHERE Region IS NOT NULL;

//Créer des requêtes simples

Home

Opérateurs spécifiques Les deux premiers opérateurs définis ci-après sont particulièrement utiles pour limiter la taille de la requête. Le dernier est lui utile pour comparer une chaîne de caractères à une pseudo-chaîne. BETWEEN. Cet opérateur permet de définir un intervalle fermé dans lequel l'attribut doit avoir sa valeur. La condition suivante est équivalente à NoEmp >= 3 AND NoEmp <= 8. SELECT * FROM Employe WHERE NoEmp BETWEEN 3 AND 8;

//Créer des requêtes simples

Home

Opérateurs spécifiques IN Cet autre opérateur permet de définir une liste de valeurs entre parenthèses et séparées par des virgules. La condition suivante est équivalente à TitreCourtoisie = 'Mlle' OR TitreCourtoisie = 'Mme'. SELECT * FROM Employe WHERE TitreCourtoisie IN ('Mlle', 'Mme');

//Créer des requêtes simples

Home

Opérateurs spécifiques LIKE Comme précisé avant, l'opérateur LIKE permet de comparer une chaîne de caractère à une pseudo-chaîne, dans laquelle nous pouvons ajouter deux caractères spécifiques : % : une suite de caractères, éventuellement nulle _ : un et un seul caractère Par exemple, la requête suivante permet de récupérer les employés dont le nom commence par un "D". SELECT * FROM Employe WHERE Nom LIKE 'D%';

//Créer des requêtes simples

Home

Opérateurs spécifiques La requête suivante permet elle d'avoir tous les employés qui ont un prénom de 5 lettres. SELECT * FROM Employe WHERE Prenom LIKE '_____'; Il faut noter que l'opérateur LIKE est insensible à la casse. Il ne tient pas compte des minuscules/majuscules.

//Créer des requêtes simples

Home

Projection Une projection est une sélection de colonnes d'une table, sur la base d'une liste d'attributs placés après le SELECT et séparés par une virgule. La requête suivante permet d'avoir uniquement les noms et les prénoms des employés. SELECT Nom, Prenom FROM Employe;

//Créer des requêtes simples

Home

DoublonsLors d'une projection, on est souvent en présence de doublons dans les résultats, i.e. deux lignes ou plus identiques. Par exemple, lorsqu'on liste les fonctions des employés, on a plusieurs fois chaque fonction existante. SELECT Fonction FROM Employe ; Or, dans ce cas, on est souvent intéressé par la liste des valeurs uniques. Pour l'obtenir, il est possible d'ajouter le terme DISTINCT juste après le SELECT, pour supprimer ces doublons. SELECT DISTINCT Fonction FROM Employe ; Ceci fonctionne aussi lorsqu'on a indiqué plusieurs attributs dans le SELECT.

//Créer des requêtes simples

Home

Renommage Pour améliorer la présentation, il est possible de renommer un attribut (et on le verra plus tard le résultat de calcul), avec le terme AS placé après l'attribut à renommer et suivi du nouveau nom. SELECT DISTINCT Fonction AS "Fonctions existantes" FROM Employe ;

//Réaliser des calculs

Home

Calculs arithmétiques simplesIl est possible d'effectuer des calculs arithmétiques dans un SELECT, à l'aide des opérateurs classiques : +, -, *, /, (). Voici un premier exemple de calcul dans une requête. On additionne les unités en stock avec les unités commandées, pour chaque produit. SELECT *, UnitesStock + UnitesCom FROM Produit; Bien évidemment, on peut vouloir faire aussi un projection en même temps, en n'affichant que la référence du produit. SELECT RefProd, UnitesStock + UnitesCom FROM Produit ;

//Réaliser des calculs

Home

Arrondi Il est possible d'obtenir l'arrondi d'un réel grâce à la fonction ROUND(). Dans l'exemple ci-dessous, nous calculons une augmentation de 5% des prix des produits. SELECT RefProd, ROUND(PrixUnit * 1.05) AS "Nouveau Prix" FROM Produit; L'arrondi ci-dessus est à l'entier. Si l'on désire un arrondi à 2 décimales (et donc les centimes dans notre cas), il faut ajouter un 2 comme second paramètre de la fonction ROUND().

//Réaliser des jointures

Home

Produit cartésien On parle de produit cartésien quand on cherche à coupler toutes les lignes d'une table avec chaque ligne de l'autre table. Considérons que la table A à nbA lignes, et la table B nbB lignes. En résultat, nous obtenons donc une table avec nbA * nbB lignes. Ce qui peut vite faire beaucoup. Par exemple, la table Client fait 94 lignes, la table Commande 830. Le produit cartésien des deux tables produit une table de 78020 lignes. Il faut donc faire attention quand on fait une telle opération. Pour mieux comprendre le produit cartésien, on peut regarder la requête suivante. Elle associe chaque produit (84 lignes), avec chaque catégorie (8 lignes), ce qui fait une table résultat de 672 lignes. Vous remarquerez que la requête est un peu lente à être exécutée. SELECT * FROM Produit, Categorie;

//Réaliser des jointures

Home

Restriction sur produit cartésien Bien évidemment, dans un produit cartésien, toutes les lignes ne sont pas intéressantes dans le résultat. Celles qui nous intéresse est celles où il y a correspondance entre certains attributs de chaque table. Une jointure est finalement une restriction sur produit cartésien, celle-ci apparaissant dans le WHERE. Pour reprendre notre exemple précédent, pour faire correspondre chaque produit avec sa catégorie via une jointure à la main, nous allons réaliser la requête suivante. SELECT * FROM Produit, Categorie WHERE Produit.CodeCateg = Categorie.CodeCateg ;

//Réaliser des jointures

Home

Jointures multiples Nous allons comparer ici les requêtes permettant de réaliser de multiples jointures. Si nous souhaitons compter pour chaque client et pour chaque messager, le nombre de commandes passées, nous devons réaliser les requêtes suivantes. Dans ce type de jointure, nous devons déjà lister dans le FROM les tables nécessaires, puis dans le WHERE mettre les conditions de jointures. Il en résulte une requête plus facile à décoder dans la lecture des tables prises en compte. SELECT Societe, NomMess FROM Client Cl, Commande Co, Messager M WHERE Cl.CodeCli = Co.CodeCli AND Co.NoMess = M.NoMess ;

//Agrégats

Home

Utilisation classique Le premier exemple que nous allons voir est le dénombrement. Nous désirons le nombre de clients de la société, pour chaque pays d'origine. Donc, nous voudrions voir afficher l'attribut Pays en plus du compte. La requête suivante, erronée, est celle qu'on pourrait écrire en premier. SELECT Pays, COUNT(*) FROM Client ; Une fois exécutée, on se rend compte qu'elle ne renvoie qu'une seule ligne, avec un seul pays (celui en dernier dans la table) et le nombre total de clients. Pour être correct, il faut spécifier le critère d'agrégation (ici le pays) dans la clause GROUP BY, comme ci-dessous. SELECT Pays, COUNT(*) FROM Client GROUP BY Pays ;

//Agrégats

Home

Restriction sur agrégats Il arrive que nous souhaitions restreindre les résultats avec une condition sur un calcul d'agrégat. Par exemple, on peut vouloir chercher le nombre de clients par pays, uniquement pour les pays avec plus de 10 clients. Dans la requête suivante, il faudrait donc chercher à la main les pays avec plus de 10 clients, ce qui est à proscrire car non-automatique. Pour effectuer ces restrictions, il est nécessaire d'utiliser la clause HAVING, situé obligatoirement après le GROUP BY. Dans notre exemple, nous devons donc écrire la requête suivante. SELECT Pays, COUNT(*) FROM Client GROUP BY Pays HAVING COUNT(*) >= 10;

//Synthèse

Home

Placement des différentes clauses Nous avons maintenant vu tous les clauses existantes dans une requête SQL de type SELECT. Il est important de se souvenir de l'ordre d'apparition de celles-ci, tel que présenté ci-dessous. Si cet ordre n'est pas respecté, le moteur SGBD ne pourra pas traiter la requête et renverra une erreur.

SELECT attributs, calculs, agrégatsFROM tables WHERE conditions GROUP BY attributs HAVING conditions ORDER BY attributs LIMIT nombre;

//CAS STAGE

Dans cette application, vous allez être amné(e) à réaliser une série de requêtes. Utilisez la base STAGES.SQLITE Vous pouvez suivre la petit vidéo ci-dessous pour réaliser la requête demandée...

02

ACCUEIL

liste des requëtes

aide

SCHÉMA

Contact

//CAS CABINET MEDICAL

Dans cette application, vous allez être amné(e) à réaliser une série de requêtes. Utilisez la base CABINETMEDICAL.SQLITE Vous pouvez suivre la petit vidéo ci-dessous pour réaliser la requête demandée...

03

ACCUEIL

liste des requëtes

aide

SCHÉMA

Contact

//CAS GYMNASE2000

Dans cette application, vous allez être amné(e) à réaliser une série de requêtes. Utilisez la base GYMNASE2000.SQLITE Vous pouvez suivre la petit vidéo ci-dessous pour réaliser la requête demandée...

03

ACCUEIL

liste des requëtes

aide

SCHÉMA

Contact

//CAS COMPTOIR2000

Dans cette application, vous allez être amné(e) à réaliser une série de requêtes. Utilisez la base COMPTOIR2000.SQLITE Vous pouvez suivre la petit vidéo ci-dessous pour réaliser la requête demandée...

03

ACCUEIL

liste des requëtes

aide

SCHÉMA

Contact

//CAS BIBLIOTHEQUE

Dans cette application, vous allez être amné(e) à réaliser une série de requêtes. Utilisez la base BIBLIOTHEQUE Vous pouvez suivre la petit vidéo ci-dessous pour réaliser la requête demandée...

03

ACCUEIL

liste des requëtes

aide

SCHÉMA

Contact

//CAS CONFISERIE

Dans cette application, vous allez être amné(e) à réaliser une série de requêtes. Utilisez la base COMPTOIR2000.SQLITE Vous pouvez suivre la petit vidéo ci-dessous pour réaliser la requête demandée...

03

ACCUEIL

liste des requëtes

aide

SCHÉMA

Contact

04

//conclusion

“Qui trop se hâte reste en chemin”

Si tu penses ne pas avoir passé assez de temps sur ces exercices, tu peux reprendre les situations et te tester à nouveau. Si par contre, tu penses en avoir fait le tour, tu peux passer ton chemin... ET bonne route..

// Reviens nous voir quand tu veux, de nouvelles applications peuvent apparaître

crÉdits