Intégration du P7 dans l’épreuve E41 19/01/2017 N.FREYDIERE – J.P.MINIER - A.ZURITA Intégration du P7 dans l’épreuve E41 Supports théoriques Le Tableau évènement-résultat Le SQL Le tableur & les algorithmes 19 Janvier 2017 Formation BTS CG – Parc Chabrières
Exemple de requêtes dans l'épreuve E41 2. Le SQL N.FREYDIERE – J.P.MINIER - A.ZURITA Exemple de requêtes dans l'épreuve E41 Exemple de requêtes en comptabilité, Extraire les soldes des clients qui n'ont pas réglé leur facture depuis plus de 4 mois pour préparer le tableau des créances douteuses, Exemple en social Extraire les salaires bruts des salariés de l'année 2016, classé par salarié pour un calcul de l'intéressement, Extraire les données pour connaître le montant moyen des salaires moyens Exemple en fiscalité, Pour remplir une rubrique d’une déclaration CA3, extraire les soldes des comptes "ventes de service encaissées"
A – La structure de base des requêtes N.FREYDIERE – J.P.MINIER - A.ZURITA A – La structure de base des requêtes 2. Le SQL Etape 1 : SELECT indique les données que l’on veut afficher (colonnes) Etape 2 : FROM indique dans quelle(s) table(s) chercher les données Etape 3 : WHERE Indique les données que l’on veut afficher selon certains critères (Restriction) Exemple : afficher les chansons créées en 2003 SELECT Nomchanson, AnneeCreation FROM Chanson WHERE AnneeCreation=2003 ; Nomchanson AnneeCreation Ailleurs land 2003 … Chanson (Numchanson, Nomchanson, AnneeCreation, #Numinterprete, #Numalbum) Album (Numalbum, NomAlbum) Interprete(NumInterprete, NomInterprete, PrenomInterprete)
A – La structure de base des requêtes N.FREYDIERE – J.P.MINIER - A.ZURITA A – La structure de base des requêtes 2. Le SQL Etape 4 : ORDER BY affiche les données selon un certain ordre. Par défaut, l'ordre sera ascendant, sinon il faudra rajouter DESC si l'on veut classer par ordre descendant. Exemple : Afficher le nom des chansons créées après 1990, de la plus récente à la plus ancienne, puis par ordre alphabétique : SELECT Nomchanson, AnneeCreation FROM Chanson WHERE AnneeCreation >= 1991 ORDER BY AnneeCreation DESC, Nomchanson ; Nomchanson AnneeCreation … Bouge 1994 Le Cor Casser la voix 1991 Chanson (Numchanson, Nomchanson, AnneeCreation, #Numinterprete, #Numalbum) Album (Numalbum, NomAlbum) Interprete(NumInterprete, NomInterprete, PrenomInterprete)
A – La structure de base des requêtes N.FREYDIERE – J.P.MINIER - A.ZURITA A – La structure de base des requêtes 2. Le SQL Synthèse SELECT affiche, en colonne, les attributs suivants FROM depuis la table WHERE pour laquelle on restreindra la sélection ORDER BY avec un affichage des données triées avec un attribut Remarques : Les opérateurs (SELECT…) s'écrivent toujours en majuscule L'usage veut que les requêtes se terminent pas un point-virgule mais ce n'est pas indispensable Le type d'attribut (Numérique, Texte…) est important car il aura une influence sur la requête : Si c'est du texte, il faut des guillemets, sinon, mettre des chiffres (dates,…)
B – Les requêtes avec sélection N.FREYDIERE – J.P.MINIER - A.ZURITA B – Les requêtes avec sélection 2. Le SQL La restriction WHERE peut être multiple, avec différentes sélections Sélection 1 : OR, AND expriment les conditions OU et ET Exemple : Afficher les chansons des interprètes n°1 ou n°4 pour des chansons créees après 1993 SELECT Nomchanson, AnneeCreation, NumInterprete FROM Chanson WHERE NumInterprete=1 OR NumInterprete=4 AND AnneeCreation>1993 ; Chanson (Numchanson, Nomchanson, AnneeCreation, #Numinterprete, #Numalbum) Album (Numalbum, NomAlbum) Interprete(NumInterprete, NomInterprete, PrenomInterprete)
B – Les requêtes avec sélection N.FREYDIERE – J.P.MINIER - A.ZURITA B – Les requêtes avec sélection 2. Le SQL La restriction WHERE peut être multiple, avec différentes sélections Sélection 1 : OR, AND expriment les conditions OU et ET Sélection 2 : BEETWEEN… AND sélectionne un intervalle Exemple : Afficher des noms de chanson créées en 2015 et 2016. Plusieurs possibilités de réponses (pour cette requête, on suppose que la date est de format jj/mm/aaaa) : SELECT AnneeCreation, Nomchanson FROM Chanson WHERE AnneeCreation BETWEEN 01/01/2015 AND 31/12/2016 ; Autres possibilités WHERE AnneeCreation >= 01/01/2015 AND AnneeCreation <= 31/12/2016 ; WHERE year(AnneeCreation) = 2015 OR year(AnneeCreation) = 2016 ; WHERE year(AnneeCreation) IN (2015, 2016) ; Chanson (Numchanson, Nomchanson, AnneeCreation, #Numinterprete, #Numalbum) Album (Numalbum, NomAlbum) Interprete(NumInterprete, NomInterprete, PrenomInterprete)
B – Les requêtes avec sélection N.FREYDIERE – J.P.MINIER - A.ZURITA B – Les requêtes avec sélection 2. Le SQL La restriction WHERE peut être multiple, avec différentes sélections Sélection 1 : OR, AND expriment les conditions OU et ET Sélection 2 : BEETWEEN… AND sélectionne un intervalle de temps Sélection 3 : LIKE permet de rechercher des caractères génériques Exemple : Afficher les chansons qui commencent par un L : SELECT Nomchanson FROM Chanson WHERE Nomchanson LIKE "L*" ; Remarques : Opérateur utile quand on a des données mal orthographiées ex : LIKE "bourg*" permet de trouver Bourg-en-Bresse, Bourg en Bresse… Opérateur utile quand, par exemple, on recherche tous les clients de l'Ain, WHERE CodePostal LIKE "01*"
B – Les requêtes avec sélection N.FREYDIERE – J.P.MINIER - A.ZURITA B – Les requêtes avec sélection 2. Le SQL La restriction WHERE peut être multiple, avec différentes sélections Sélection 1 : OR, AND expriment les conditions OU et ET Sélection 2 : BEETWEEN… AND sélectionne un intervalle de temps Sélection 3 : LIKE permet de rechercher des caractères génériques Sélection 4 : NULL (ou IS NOT NULL) sélectionne les attributs nuls Exemple : Afficher les chansons qui n’ont pas de nom SELECT Nomchanson, AnneeCreation FROM Chanson WHERE Nomchanson IS NULL ; Remarque : On aurait pu utiliser IS NOT NULL pour n’afficher que les occurrences qui ont un nom de chanson renseigné NULL est un champ vide, ce qui n’est pas pareil que la valeur zéro. Si on veut un nombre différent de zéro (chiffre), WHERE AnneeCreation <>0
C – Les requêtes opération N.FREYDIERE – J.P.MINIER - A.ZURITA C – Les requêtes opération 2. Le SQL Opération 1 : création d'un attribut avec une fonction Comme avec le tableur, il est possible de réaliser des opérations avec des opérateurs. Les plus courantes sont : SUM : calcule la somme des valeurs d’un attribut (de type numérique) AVG : calcule la moyenne des valeurs d'un attribut (de type numérique) COUNT : compte le nombre de valeur d’un champ. Dans les sujets, le memento SQL sera fourni .
C – Les requêtes opération N.FREYDIERE – J.P.MINIER - A.ZURITA C – Les requêtes opération 2. Le SQL Opération 1 : création d'un attribut avec une fonction Syntaxe : Créer un nouvel attribut qui n'existe pas dans le schéma relationnel exemple : compter le nombre de chansons de la base de données COUNT(NomChanson) Donner un nom à cet attribut sinon le logiciel affichera un nombre (ex : 10) mais sans que l'on sache à quoi il correspond mais c'est facultatif AS nombre_de_chansons Nombre de chansons 10 Remarques : AS est suivi d'un titre de colonne, écrit sans espace. Si l'on veut des espaces dans le titre, on met le titre entre [Nombre de chansons] COUNT(Nomchanson) est un attribut qui pourra s'afficher si on le veut (il sera alors inscrit dans SELECT). Il peut aussi être utilisé dans des calculs ex : COUNT(Nomchanson) * 15 €
C – Les requêtes opération N.FREYDIERE – J.P.MINIER - A.ZURITA C – Les requêtes opération 2. Le SQL Opération 1 : création d'un attribut avec une fonction Opération 2 : GROUP BY permet de faire des opérations en faisant des regroupements avec des sous-groupes Exemple : Afficher le nombre de chansons regroupées par n° d’interprète : SELECT NumInterprete, Count(Nomchanson) AS [Nombre de chansons], FROM Chanson GROUP BY NumInterprete ; NumInterprete Nombre de chansons 1 2 3 … GROUP BY permet de définir pour quel attribut on veut le total des chansons
C – Les requêtes opération N.FREYDIERE – J.P.MINIER - A.ZURITA C – Les requêtes opération 2. Le SQL Opération 3 : HAVING permet d’appliquer une restriction dans le cas d’un regroupement des résultats (ne s’utilise qu’après Group By) Exemple : Afficher le nombre de chansons, regroupées par N° interprète, pour lesquelles les interprètes ont chanté plus de 2 chansons SELECT NumInterprete, Count(Nomchanson) AS [Nombre de chansons], FROM Chanson GROUP BY NumInterprete HAVING [Nombre de chansons] >2 ; ou HAVING Count(Nomchanson) >2 NumInterprete Nombre de chansons 2 3 5 7 …
D – Les requêtes avec plusieurs relations N.FREYDIERE – J.P.MINIER - A.ZURITA D – Les requêtes avec plusieurs relations 2. Le SQL Syntaxe Solution 1 On indique les relations à utiliser en faisant une jointure : FROM relation1 INNER JOIN relation2 Puis on indique les champs à joindre : ON relation1.attribut de jointure = relation2.attribut de jointure Solution 2, plus simple On indique les tables que l'on va utiliser FROM relation1, relation2 WHERE relation1.attribut = relation2.attribut Chanson (Numchanson, Nomchanson, AnneeCreation, #Numinterprete, #Numalbum) Album (Numalbum, NomAlbum) Interprete(NumInterprete, NomInterprete, PrenomInterprete)
D – Les requêtes avec plusieurs relations N.FREYDIERE – J.P.MINIER - A.ZURITA D – Les requêtes avec plusieurs relations 2. Le SQL Exemple : Afficher les chansons avec leur interprète : SELECT Nomchanson, NomInterprete, PrenomInterprete FROM Chanson, Interprete WHERE Chanson.NumInterprete = Interprete.NumInterprete Le résultat de la requête est le suivant : Nomchanson NomInterprete Prenominterprete En passant Goldman Jean-Jacques C'est pas vrai Bouge Gall France
N.FREYDIERE – J.P.MINIER - A.ZURITA Conclusion 2. Le SQL ACCESS est un support d’étude intéressant pour faire comprendre le SQL (requêtes avec l’assistant puis en SQL) mais ne pas l’utiliser pour réaliser une SP
N.FREYDIERE – J.P.MINIER - A.ZURITA Conclusion 2. Le SQL ACCESS : intéressant mais ne pas l’utiliser pour une SP Langage SQL : normalisé mais avec des libertés dans la rédaction. Tolérance pour la correction Exemple pour les dates : 01/01/17 ou #01/01/17# sur ACCESS Exemple pour l'opérateur AS qui peut être suivi de [crochets avec espace] sur ACCESS Suivi de texte_avec _underscore sur Mysql ou Oracle Suivi de "guillemets avec espace"
N.FREYDIERE – J.P.MINIER - A.ZURITA Conclusion 2. Le SQL ACCESS : intéressant mais ne pas l’utiliser pour une SP Langage SQL : normalisé mais avec des libertés dans la rédaction. Tolérance pour la correction Présentation des sujets : relations et extraits de tables Service (num, libelle) Qualification (num, libelle, niveau)