Télécharger la présentation
La présentation est en train de télécharger. S'il vous plaît, attendez
1
CONCEPTS BD - Synthèse journée 1 :
Matin : TP analyse >> création schéma relationnel BD_HOTEL AM : création de la BD sous phpMyAdmin 4.4 en ligne > Schéma relationnel corrigé sur vos lecteurs réseaux DISII / TSDI + TP1_BD_Hotel corrigée et remplie exportée en .sql > TP1_Hotel sur > Votre BD exportée : savoir importer dans autres SGBD > TP matin 2 : requêtes SQL sur papier > TP am 2 : requêtes SQL sur BD en ligne sur
2
CONCEPTS BD - Synthèse journée 1 :
NOTIONS FONDAMENTALES A RETENIR Schéma relationnel Clé primaire / clé secondaire (ou étrangère) - conventions PK_ et FK_ Liaison et mise en relation (concepteur) Champs 1 enregistrement = 1 ligne de données de la table Cardinalités Propriétés : INDEX / AUTO INCREMENT / UNSIGNED / INTERCLASSEMENT Méthodologie : Dictionnaire des données Cohérence des données dans les tables : relation impossible si données incohérentes Commencer par créer les tables les + périphériques pour finir par les tables les plus centrales
3
INTERROGER DES BASES DE DONNEES AVEC LE LANGAGE SQL
4
Formateur : Céline WALTZER
LE LANGAGE SQL Définition : Structured Query Language Usages : langage informatique normalisé permettant d'effectuer des requêtes ou de gérer des SGBD DDL (Data Definition Language) DML (Data Manipulation Language) DCL (Data Control Language) TCL (Transaction Control Language) SQL est le langage des BD relationnelles permettant toutes les actions suivantes : DDL : Ordres SQL pour créer, modifier ou supprimer les objets d'une BD (tables, contraintes…) DML : Ordres SQL permettant d’ajouter, de modifier, de supprimer ou d’extraire des données dans les tables DCL : Ordres SQL permettant de définir les privilèges des utilisateurs / gestion de la sécurité et des droits d'accès TCL : ordres permettant de gérer les transactions des 3 premiers / Traitements locaux des données (création de procédures) >> extension aujourd'hui à l'orienté objet Contextes d'utilisation : le langage SQL peut être utilisé des manières suivantes : Transmettre des instructions SQL via ODBC Transmettre des instructions SQL via un autre langage de programmation (ex : instructions incluses dans du code source) Utiliser le langage SQL directement dans le SGBD pour exécuter des actions ou créer des procédures stockées Formateur : Céline WALTZER
5
Formateur : Céline WALTZER
LES NORMES SQL… Le langage SQL est normalisé depuis Cette norme s'est enrichie au fil du temps. La 1ère norme SQL-86 ou SQL-1 était le résultat de compromis entre constructeurs (fortement influencée par IBM). Environ 100 pages En 1989 d'importantes révisions furent apportées concernant l'intégrité référentielle. La 2ème norme SQL-2 ou SQL92 définissait 4 niveaux de conformité (volume de 600 pages environ). niveau d'entrée (entry level) : renommage colonnes de résultats, utilisation mots-clés pour relation… niveau "transitional level" : abandonné - niveau intermédiaire (intermediate level) : nouveaux types de données, algèbre relationnelle, modification schéma BD niveau supérieur (full SQL level) : gestion relations temporaires, types de données supplémentaires… Les langages SQL des différents éditeurs sont tous conformes au 1er niveau, et possèdent beaucoup de caractéristiques relevant des niveaux supérieurs. A partir de 1993 des groupes de travail se penchèrent sur les améliorations et extensions à apporter à la précédente norme. C'est seulement en 1999 que la nouvelle norme est apparue. Ce retard est dû aux difficultés des nombreux éditeurs à se mettre d'accord sur la normalisation des nouveaux points (cela implique de remettre en question les manières de pensée et organisation des SGBD). Les modifications apportées forçaient les éditeurs à assurer la compatibilité des BD de leurs clients. Les apports de SQL-99 : développement procédural, requêtes récursives, déclencheurs (règles déclenchées par événements), quelques fonctions orienté objet. La norme SQL:2003 introduit des fonctions pour la manipulation XML, des fonctions de fenêtrage, Les apports de SQL:2008 : extraction de sous-tableaux, limitation du nombre de lignes, ajout de fonctions de fenêtrage… Aujourd'hui la plupart des SGBD respectent l'intégralité des normes SQL-2 et SQL-3. Pour plus d'informations sur les normes SQL : Pour plus d'informations sur la norme SQL 3 : 2011 – norme SQL:2011 2011 Formateur : Céline WALTZER
6
Client MySQL en ligne de commande
Etablir une connexion au serveur MySQL : mysql> mysql –h serveurdistant –u user –p pwd Afficher les bases de données existantes : mysql> show databases; Sélectionner une des BD : mysql> use nomdelaBD; Afficher les tables d'une BD : mysql> show tables; Afficher les caractéristiques d'une table (structure): mysql> describe nomdelatable; Lister les enregistrements d'une table : mysql> select * from nomdelatable; Quitter / stopper la connexion : mysql> exit ou quit Astuces avec le client en ligne de commande : CTRL + A : pour aller au début de la ligne de commande CTRL + E : pour aller à la fin de la ligne de commande Flèche vers le haut : pour retrouver les commandes saisies précédemment CTRL + K : supprime le reste des caractères de la commande à partir du curseur Interruption d'une requête avec \c Finir chaque ligne de commande avec un ; Pour avoir de l'aide saisir le symbole : ? ou taper : help contents Sensible à la casse pour les noms de BD, tables et champs Pas sensible à la casse pour les commandes Formateur : Céline WALTZER
7
Formateur : Céline WALTZER
TYPES DE DONNEES SQL-2 NUMERIQUE NUMERIC (ou DECIMAL) Pour les types réels NUMERIC, DECIMAL, DEC et FLOAT, on doit spécifier le nombre de chiffres significatifs et la précision des décimales après la virgule INTEGER (ou INT) SMALLINT FLOAT REAL DOUBLE PRECISION BIT ALPHA-NUM CHAR Ces types de données sont codés sur 2 octets (EBCDIC ou ASCII) et on doit spécifier la longueur de la chaîne VARCHAR NCHAR Ces types de données sont codés sur 4 octets (UNICODE) et on doit spécifier la longueur de la chaîne. NVARCHAR TEMPOREL DATE TIME TIMESTAMP INTERVAL TABLEAU COMPARATIF Formateur : Céline WALTZER
8
Formateur : Céline WALTZER
REQ – SELECTIONS 1/9 L'ordre SELECT possède 6 clauses différentes. Seules les 2 premières sont obligatoires. L'ordre des clauses est important et ne peut être modifié. On y indique les colonnes ou expressions à retourner SELECT … FROM … WHERE … GROUP BY … HAVING … ORDER BY … On y indique les tables participant à l'interrogation Pour préciser les enregistrements à retourner parmi les réponses Pour déterminer des regroupements dans les réponses Pour préciser quels groupes doivent être sélectionnés Précise l'ordre croissant ou décroissant d'affichage par champ ATTENTION A LA CASSE !!! La table "Clients" Ou "clients" Ou "CLIENTS" Sont 3 tables différentes Formateur : Céline WALTZER
9
Formateur : Céline WALTZER
REQ – CLAUSE SELECT 2/9 OBLIGATOIRE Pour extraire toutes les colonnes SELECT * FROM nomdelatable Pour extraire sans doublons SELECT DISTINCT champ1 FROM … Pour afficher un autre titre dans les résultats SELECT champ1 AS nouveaunom FROM … Ambiguïté de noms de colonnes : nomdelatable.nomdelacolonne Attention au SELECT * : Peut utiliser beaucoup de bande passante (si enregistrements lourds et nombreux) ne pas faire confiance en l'ordre des champs retournés utilisé juste pour tester En ce qui concerne le mot-clé AS le nom qui suit ne peut pas dépasser 30 caractères. Si le nouveau nom contient des séparateurs (espace ou caractère spécial), ou s'il est identique à un mot-clé SQL réservé il doit être mis entre "guillemets". Ce nom constituera le nouveau titre de la colonne lors de l'affichage des résultats de la sélection. Ces noms ne peuvent pas être utilisés dans les autres clauses d'un SELECT. AMBIGUITE DE NOMS DE COLONNES / CHAMPS Si 2 champs ont les mêmes noms mais appartiennent à des tables différentes il faut préciser les noms de la manière suivante : nomdelatable.nomdelacolonne EX : clients.adresse / fournisseur.adresse Le nom de la table peut être omis quand il n'y a pas d'ambiguité Formateur : Céline WALTZER
10
Formateur : Céline WALTZER
REQ – CLAUSE FROM 3/9 OBLIGATOIRE Pour spécifier la ou les tables d'où seront extraits les champs (participent à l'interrogation) SELECT champ1, champ2, champ3, champ4 FROM nomdelatable1, nomdelatable2 ,… WHERE… Si plusieurs tables = produit cartésien des tables Utile pour joindre les infos de différentes tables Si précision des colonnes de « recollement » on effectue une jointure Possibilité de créer des synonymes (évite ambiguïtés) Possibilité de donner des synonymes aux noms de tables temporairement pour la sélection : FROM nomdelatable1 [synonyme1], … On utilise les synonymes pour lever certaines ambiguïtés : Par exemple quand la même table est utilisée de plusieurs façons dans la même requête Quand on a donné un synonyme à une table elle n'est plus reconnue sous son nom d'origine dans la requête. Exemple : Select civilite, nom, prenom, libelle FROM clients CL, categorie CAT where CL.categorie = CAT.categorie Formateur : Céline WALTZER
11
Formateur : Céline WALTZER
REQ – CLAUSE WHERE 4/9 FACULTATIVE Permet de spécifier quels sont les enregistrements à retourner parmi tous ceux trouvés : SELECT … FROM … WHERE condition WHERE champ1 = valeur WHERE champ1 != valeur WHERE champ1 < valeur WHERE champ1 > valeur WHERE champ1 <= valeur WHERE champ1 >= valeur WHERE champ1 BETWEEN valeur1 AND valeur2 WHERE champ1 LIKE '%valeur%' WHERE champ1 NOT LIKE '%valeur%' WHERE champ1 IN (valeur1, valeur2, valeur3) WHERE champ1 IS NULL WHERE champ1 IS NOT NULL Pour l'opérateur BETWEEN : La condition est vraie si la valeur est comprise entre valeur1 et valeur2 (bornes incluses) Pour l'opérateur IN( … , … , … ) : La condition est vraie si la valeur du champ1 est égale à l'une des expressions de la liste entre parenthèses Pour l'opérateur LIKE : Compare 2 chaines de caractères LIKE 'mul%' : mot commençant par mul-… LIKE '%tion' : mot se terminant par …-tion LIKE '%mati%' : mot contenant …-mati-… Caractères joker : _ pour remplacer un caractère / % pour remplacer une chaine de caractères de longueur quelconque, y compris de longueur nulle IS NULL / IS NOT NULL Permet de tester la valeur "null" d'un champ On ne pourra jamais tester la valeur "null" d'un champ avec l'expression where champ=null Select nom, prenom from Clients where adresse is null; Select nom, prenom from Clients where adresse=""; Ces 2 requêtes peuvent toutes 2 fonctionner. Cela dépend des propriétés du champ de la BD. Si le champ accepte les valeurs NULL la 1ère requête fonctionnera mais pas la 2ème Si le champ n'accepte pas les valeurs NULL, même si l'utilisateur n'a pas saisi d'adresse le champ est rempli par un caractère vide (espace) et donc seule la 2ème requête fonctionnera. Il faut donc connaitre les propriétés du champ de la table (NULL autorisé ou non) afin de savoir quelle condition utiliser. Les opérateurs logiques AND / OR / NOT : Ils permettent de combiner plusieurs conditions. L'opérateur AND est prioritaire par rapport à l'opérateur OR. L'opérateur NOT placé devant une condition en inverse le sens. Des parenthèses peuvent être utilisées autour de chaque prédicat pour imposer une priorité, ou simplement pour rendre plus claire l’expression logique. EX : SELECT Nom, Prenom FROM Clients WHERE Dept = 68 AND Age >= 40 SELECT Nom, Prenom FROM Clients WHERE (Dept = 68 OR Dept = 67) AND condition2 OR condition2 Formateur : Céline WALTZER
12
Formateur : Céline WALTZER
REQ – CLAUSE GROUP BY 5/9 FACULTATIVE Permet de regrouper les enregistrements qui ont une valeur en commun : à utiliser pour effectuer des sous-totaux SELECT nom FROM clients (WHERE condition) GROUP BY nom SELECT nom, count(nom) FROM clients … GROUP BY nom SELECT nom, count(nom) FROM clients GROUP BY nom WITH ROLLUP >> ressemble à DISTINCT Cette clause regroupe en une seule ligne toutes les lignes (enregistrements) ayant la même valeur pour le champ spécifié par le GROUP BY. Pour que la requête soit juste le champ spécifié dans la clause GROUP BY se retrouve aussi dans la clause SELECT Concernant les résumés de données / agrégations, la ligne contenant la valeur NULL est automatiquement ajoutée pour afficher les agrégats. Pour plus de précisions sur les résumés de données (agrégations) consulter la page : >> permet de faire des regroupements avec fonction de calcul >> permet de faire des regroupements avec fonction de calcul et résultats intermédiaires (agrégations) Formateur : Céline WALTZER
13
Formateur : Céline WALTZER
REQ – CLAUSE HAVING 6/9 FACULTATIVE Se place après la clause GROUP BY et sert à préciser quels groupes doivent être affichés: SELECT nom, count(nom) FROM adherents GROUP BY nom HAVING count(nom) >=2 Formateur : Céline WALTZER
14
Formateur : Céline WALTZER
REQ – CLAUSE ORDER BY 7/9 FACULTATIVE Permet de trier en ordre croissant et décroissant : SELECT … FROM … WHERE condition ORDER BY ASC / DESC EX : liste les clients par ordre alphabétique SELECT nom, prenom, ville FROM Clients ORDER BY nom ASC Lister les clients du département 67 par ordre alphabétique WHERE departement = 67 Formateur : Céline WALTZER
15
REQ – LIMITER L’AFFICHAGE 8/9
Il est possible de limiter le nombre de lignes à afficher (ex : que les 5 plus hauts montants) : SELECT … FROM … WHERE condition LIMIT 0,5 ou TOP 5 Pour Oracle il est possible de le faire avec ROWNUM MySQL SQL Server Formateur : Céline WALTZER
16
Formateur : Céline WALTZER
REQ – CASE (contrôle) 9/9 FACULTATIVE Correspond à la structure SWITCH…CASE… et existe depuis la norme SQL2 : SELECT nom, prenom, CASE department WHEN 67 THEN ‘Bas-Rhin’ WHEN 68 THEN ‘Haut-Rhin’ END Dept_adherent FROM adherents SELECT nom, prenom, CASE WHEN CP LIKE '67%' THEN ‘Bas-Rhin’ WHEN CP LIKE '68%' THEN ‘Haut-Rhin’ END Dept_adherent FROM adherents Il existe encore les structures de contrôle suivantes : IF / CASE / LOOP / LEAVE / ITERATE / REPEAT / WHILE Voir sur le site : Formateur : Céline WALTZER
17
UTILISATION DE FONCTIONS
Fonctions de groupe pouvant être utilisée dans la clause SELECT ou HAVING : AVG moyenne SUM somme MIN renvoie + petite valeur MAX renvoie + grande valeur VARIANCE variance STDDEV écart type COUNT(*) compte nb lignes COUNT(colonne) compte nb valeurs non nulles de la colonne COUNT(DISTINCT colonne) compte nb valeurs non nulles différentes TABLEAU COMPARATIF EX : SELECT COUNT(*) FROM Clients >> renvoie le nb de clients (enregistrements de la table clients) SELECT SUM(Montant) FROM Facture WHERE IDClient = 54 >> renvoie le montant total des achats du client N°54 SELECT Nom, Prenom FROM Clients WHERE AGE = (SELECT MAX(AGE) FROM Clients) >> renvoie le nom et prénom du client le plus âgé Formateur : Céline WALTZER
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.