La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Formation base de données et Langage SQL pour non-informaticiens

Présentations similaires


Présentation au sujet: "Formation base de données et Langage SQL pour non-informaticiens"— Transcription de la présentation:

1 Formation base de données et Langage SQL pour non-informaticiens

2 Langage SQL Participants et pré requis
Chargé de reporting ou d'analyse, assistant(e), toute personne ayant des besoins d'interrogation ou de mises à jour simples d'une base de données avec le langage SQL. Prérequis Aucune connaissance particulière. Formation commune à toutes les bases relationnelles (Oracle, SQL Server, DB2, PostGreSQL, MySQL, Access, SQL Lite...).

3 Langage SQL La Formatrice
Laure BERENGUER, consultante et formatrice indépendante

4 Langage SQL Objectif de la formation
Comprendre le principe et le contenu d'une base de données relationnelle Créer des requêtes pour extraire des données suivant différents critères Utiliser des calculs simples et des agrégations de données Réaliser des requêtes avec des jointures, pour restituer les informations de plusieurs tables Combiner les résultats de plusieurs requêtes

5 Langage SQL Le Sommaire
Introduction aux bases de données Page 6 Extraire les données d'une table Page 14 Calculs et fonctions intégrées Page 40 Interroger plusieurs tables : les Jointures Page 53 Utiliser des sous-requêtes Page 69 Annexes Page 81

6 Introduction aux bases de données
Langage SQL Introduction aux bases de données

7 Introduction bases de données A la fin de cette session, vous serez capable de :
Comprendre l’architecture d’une base de données relationnelle Reconnaître les tables Reconnaître les champs Introduction aux bases de données Qu'est-ce qu'une base et un serveur de base de données ? Lire un modèle relationnel. Composition d'une table. Notion de colonne et de types. Clé primaire et unicité. Liens entre les tables et intégrité référentielle. Métadonnées des tables, colonnes et clés. Outil pour interroger une base.

8 Qu'est-ce qu'une base et un serveur de base de données ?
Une base de données est un ensemble structuré et organisé (en tables) permettant le stockage de grandes quantités d'informations afin d'en faciliter l'exploitation (ajout, mise à jour, recherche et analyse des données).

9 Eléments constitutifs
Requêtes mono-tables Les tables Les champs (colonnes) et les types de données Les enregistrements (lignes) Requêtes multi-tables : Le modèle Physique de données (simplifié) indispensable Les clés Les relations Les 2 modèles associés sont : Le modèle conceptuel (MCD) Modèle fondamental qui rend compte des structures d’organisation, des informations et des contraintes. Il est indépendant de toute « réalité » physique Le modèle physique (MPD) Concerne le stockage physique, ainsi que l’accès aux données. Ce modèle intègre la réalité de l’entreprise (choix techniques, matériel, système d’exploitation) Les tables C’est l’unité fondamentale, qui stocke les données Les colonnes (champs) Représente la plus petite structure logique d’une base de données. C’est une structure verticale qui contient les valeurs sur chaque ligne de la table Chaque champ possède un type de données U NIQUE et représentatif Les lignes Collection de valeurs inscrites dans les colonnes successives d’une table. L’ensemble doit former un enregistrements unique Les clés 3 types de clés: Primaire (PK), étrangère (FK) et alternative (AK) Ces clés seront étudiées plus loin. Les relations Permettent d’unir deux tables entre elles (un client et ses commandes, un produit et ses fournisseurs, etc…) Elles sont la plupart du temps entre PK et FK Les index pour améliorer les temps de réponse

10 Base de données : Structure Les tables
La structure de la base (nom de tables) est une bonne indication de la facilité (ou non) avec laquelle on va pouvoir extraire Les données,

11 Base de données : Structure Les champs
Champs normalisés Le nom des champs est également un indicateur fiable pour se retrouver dans le méandre des données Le type de données doit être connu, Champs non normalisés

12 Base de données : Structure Les types de données courants
Texte Char(n), VarChar(n), nChar(n), nVarchar(n) 0 à 255 Char(10) : 10 octets sur le disque /et en mémoire même si la valeur du champ est « Paris » Varchar(10) : 5 octets sur disque/mémoire si le champ contient « Paris » Numérique (entier ou décimal) Int, Smallint, bigint selon la valeur maximale acceptée Decimal (x,y) : Decimal (5,2) indique 5 chiffres avant la virgule et une précision à 2 chiffres après la virgule Numeric (x,y) : Identique à Decimal Float : Réservé aux calculs scientifiques (très gourmand en mémoire) Date DateTime, SmallDateTime (« juste » la date, ou date jusqu’au centièmes de seconde) Excellent tableau récapitulatif sur SQL Server : CHAR = longueur de la chaine  0 à 255 (Taille Fixe) VARCHAR = longueur de la chaine 0 à (taille variable) exemple : CHAR(4)  valeur 'ab--' (il remplace par des blanc 2 a l’occurrence sur cette exemple) VARCHAR(4) valeur 'ab' (il s'adapte donc taille variable) Pour un Char(4) et varchar (4) l’espace requis en terme d’octets ne sera pas le même: ‘’ ‘ ‘ : 4 octets pour char et 1 pour varchar ‘ab’ ‘ab’ : 4 octets pour char et 2 pour varchar Les valeurs lues dans les colonnes de type CHAR(4) et VARCHAR(4) seront les mêmes dans tous les cas, car les espaces finaux sont retirés des valeurs issues de colonnes de type CHAR lors de la lecture.

13 Base de données : Conclusion
Une base de données est : Un ensemble de données organisées et reliées Dans (et entre) différentes tables composées De champs (dont certains clés primaires) De types numériques, textes ou dates Qui nous permet d’enregistrer, modifier et d’extraire de l’information ! Excellent tableau récapitulatif sur SQL Server : CHAR = longueur de la chaine  0 à 255 (Taille Fixe) VARCHAR = longueur de la chaine 0 à (taille variable) exemple : CHAR(4)  valeur 'ab--' (il remplace par des blanc 2 a l’occurrence sur cette exemple) VARCHAR(4) valeur 'ab' (il s'adapte donc taille variable) Pour un Char(4) et varchar (4) l’espace requis en terme d’octets ne sera pas le même: ‘’ ‘ ‘ : 4 octets pour char et 1 pour varchar ‘ab’ ‘ab’ : 4 octets pour char et 2 pour varchar Les valeurs lues dans les colonnes de type CHAR(4) et VARCHAR(4) seront les mêmes dans tous les cas, car les espaces finaux sont retirés des valeurs issues de colonnes de type CHAR lors de la lecture.

14 EXTRAIRE LES DONNEES D’UNE TABLE
Langage SQL EXTRAIRE LES DONNEES D’UNE TABLE

15 Extraire les données d'une table
Pour extraire les données d’une (ou plusieurs) table en SQL il faut : Bien connaître le modèle physique (MPD) du sous système de base de données, le contenu, les règles métiers.. Et bien savoir ce que l’on veut !! Il est souvent difficile (et même parfois impossible) d’obtenir des la DSI, des services informatiques, des développeurs… le modèle physique de données (parfois appelé Modèle relationnel) Malheureusement… Il est tout aussi impossible d’écrire des requêtes SQL sans l’avoir (ou du moins d’en avoir la partie « métier » ) !! Il est donc indispensable de le construire, ou de le « récupérer » à partir de collègues

16 SELECT et la syntaxe SQL
SELECT est la commande de base du SQL destinée à extraire des données 3 mots clés : SELECT Champ1, Champ2, Cette requête SQL va sélectionner et afficher (SELECT) le champ « nom_du_champ » FROM Table provenant (FROM) du tableau appelé « nom_du_tableau ». WHERE Champ3 =‘test’ Contenant (condition) quand le «nom_du_champ» est

17 SELECT et la syntaxe SQL (2)
3 types de select: SELECT * FROM Retourne et affiche l’ensemble des champs (colonnes) et des lignes. (A éviter) Retourne l’ensemble des champs (colonnes) et seulement les 100 premières lignes : permet de visualiser les données et ce que contient la table sans problématique de performance. SELECT TOP 100 * FROM SELECT DISTINCT ClientPays SELECT DISTINCT ClientPays Retourne la liste des pays des clients sans doublons (on affiche distinctement) Retourne la liste des pays des clients sans doublons (on affiche distinctement)

18 Filtrage des données : La clause DISTINCT
Le DISTINCT se fait sur l’ensemble des champs du Select

19 La commande SELECT : Exemples SQL server
Remarque  : Hormis avec le logiciel Microsoft Access, il n’y a AUCUN risque à effectuer une requête SELECT… sauf celui de « plomber » le système avec une requête trop longue !!!

20 La commande SELECT : Règles d’écritures : (erreurs surlignées en rouge) Les erreurs de code sont souvent les mêmes Les champs sélectionnés doivent être séparés d’une virgule (comme lorsque l’on énumère plusieurs exemples (sauf pour le dernier qui clôture) Lorsque l’on renomme un champ, calcul ou lorsque l’on met une condition : ne pas oublier de mettre des cotes Lorsque l’on fait un calcul (utilisation d’une fonction d’agrégation) = il faut bien remettre les autres champs du select dans le Group By

21 La commande SELECT : Exemples Oracle

22 Les commentaires en SQL
Introduits par « -- » (une seule ligne Entourés par /*,,,,,,,,,,*/ (plusieurs lignes)

23 La commande SELECT : Règles d’écritures : (erreurs surlignées en rouge) Où sont les erreurs ?
Ouvrir la requête : Ou_sont_erreurs_code.sql

24 La commande SELECT : SQL Server et la clause TOP (voir diapo suivante pour Oracle et MySQL)
Indispensable pour éviter de lancer une requête lourde (millions de lignes renvoyées)

25 La commande SELECT : Oracle et la clause RowNum MySQL et la clause LIMIT

26 La commande SELECT : Sensibilité à la casse (majuscule / minuscule)
Ces 2 requêtes produisent un résultat différent si le serveur (ou la base) est sensible a la casse ou La « collation «  est l’ordre de tri, mais aussi le respect de la casse et des accents Il se définit au niveau base de données

27 La commande SELECT : La clause WHERE : Les critères simples
Texte : =‘France’ <>’Spain’ Dates : Between ‘12/01/1950’ and ‘25/06/1970’ Numérique : =‘25’ >’50’ < ‘50’ <>’25’

28 La commande SELECT : La clause WHERE : (not) IN
select * from t_client where ClientPays Not in ('France','italy') Select * from Orders where Year in (‘2008’,2009,2012) and Month in ('april’, ‘october’)

29 La commande SELECT : La clause WHERE : (not)LIKE
Like = qui intègre les caractères A% qui commence par a %a qui termine par a %a% qui contient a Requête 1 : Tous les champs de la table Products dont le ‘productNumber’ commence par BK Requête 2 : Le nom et le et pays du client si le pays ne commence pas par ‘a’

30 La commande SELECT : La clause WHERE : Between Vs > & <
Cette commande avec AND à la place de between prendra trois fois plus de temps pour arriver au même résultat La clause BETWEEN est beaucoup plus performante (rapide) que la « fourchette » >< de façon qui va « monter » davantage de données en mémoire

31 La commande SELECT : La clause WHERE : Synthèse
= <> exactement égal à une seule valeur where ClientPays <> ‘France’ (not) in exactement égal à un ensemble de valeurs (remplace un or) where ClientPays not in (‘France’ ,’ Espagne’) where (ClientPays <> ‘France’ or ClientPays <> ‘Espagne) (not) like contient (et commence) par telle(s) valeur(s) where ClientPays like ‘%rance%’ where (ClientPays not like ‘Franc%’ or ClientPays not like ‘%pagne’) Between .. and… entre telle et telle valeur where nombers between 5 and 7 La clause BETWEEN est beaucoup plus performante (rapide) que la « fourchette » >< de façon qui va « monter » davantage de données en mémoire

32 Renommer les colonnes

33 La commande SELECT : La clause ORDER BY
Ordre décroissant ordre croissant Attention aux pertes de performances sur des tables non indexées et si le serveur est mal configuré. La clause ORDER BY est toujours écrite en dernier ORDER BY avec colonne et DESC = classement par ordre descendant, si rien classement par ordre ascendant

34 La commande SELECT : La clause CASE

35 La commande SELECT : La clause CASE (exemples dates)
--- Use AdventureWorks2012 SELECT CASE WHEN StartDate IS NULL THEN 'Unknown' WHEN DATEDIFF(YY,StartDate, GETDATE()) BETWEEN 0 AND 10 THEN 'Recent' WHEN DATEDIFF(YY,StartDate, GETDATE()) BETWEEN 10 AND 20 THEN 'Old' ELSE 'Ancient' END AS Recency, count(*) FROM Production.WorkOrder group by END

36 La commande SELECT : La clause CASE (Oracle)

37 La commande SELECT : CASE imbriqués

38 La commande SELECT : SELECT UNION / ALL / INTERSECT / EXCEPT
La commande UNION de SQL permet de mettre bout-à-bout les résultats de plusieurs requêtes utilisant elles-mêmes 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 à concaténer retournes le même nombre de colonnes, avec les mêmes types de données et dans le même ordre. 1ere table contient les données pour 2007 et la seconde 2008 : nous avons le même type de données mais dans deux tables différentes que nous souhaitons regrouper. 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.

39 Les calculs et fonctions intégrées
Langage SQL Les calculs et fonctions intégrées

40 Les calculs / Fonctions intégrées
Calculs simples Fonctions d’agrégations Fonctions DATE Fonctions TEXTE Fonctions CONVERT Liste des fonctions ORACLE : Liste des fonctions SQL Server :

41 Les calculs / fonctions intégrées Champs calculé simple
select top 100 salesamount as 'vente', discountamount as 'remise', salesamount - discountamount as 'hors remise', SalesAmount + discountamount as 'sales et remises', (SalesAmount * discountamount) as 'mutliplication' from FactOnlineSales

42 Les calculs / fonctions intégrées Les fonctions d’agrégations
Les instructions d'agrégation permettent des opérations comme le comptage ou les sommes. Les principales fonctions d'agrégation sont : AVG(<champs>) COUNT(*) SUM (<champs>)

43 Les calculs / fonctions intégrées Les fonctions d’agrégations GROUP BY : Regroupement et agrégation de données Quels champs dans le GROUP BY ? LA règle est simple : Tous les champs du SELECT qui ne sont pas contenus dans une fonction d’agrégation se retrouvent dans le GROUP BY --Fonction SUM USE AdventureWorks2012; GO SELECT SalesOrderID, SUM(LineTotal) AS SubTotal FROM Sales.SalesOrderDetail GROUP BY SalesOrderID Having SUM(LineTotal) >1000 ORDER BY SalesOrderID --Fonctions SUM et AVG (Moyenne) SELECT ProductID, SpecialOfferID, AVG(UnitPrice) AS [Average Price], SUM(LineTotal) AS SubTotal GROUP BY ProductID, SpecialOfferID ORDER BY ProductID; Utilisation des fonctions d'agrégation Utilisation de la clause Group By Filtrage de groupes avec la clause Having

44 Les calculs / fonctions intégrées Les fonctions d’agrégations GROUP BY : Where et Having
Le critère where est avant le regroupement car sur un CHAMP Le critère having est après le regroupement car sur une fonction d’agrégation

45 Les calculs / fonctions intégrées Les fonctions d’agrégations GROUP BY ou La clause OVER (partition order by) Utilisation du group by : résultat Mais nous pouvons aussi utiliser un partitionnement : Clause OVER « USE AdventureWorks2012; GO SELECT SalesOrderID, ProductID, OrderQty ,SUM(OrderQty) OVER(PARTITION BY SalesOrderID order by salesorderID) AS 'Total' -- la somme des orderqty pour le salesorderid 43659 ,AVG(OrderQty) OVER(PARTITION BY SalesOrderID) AS 'Avg' -- la moyenne des orderqty pour le salesorderid 43659 ,COUNT(OrderQty) OVER(PARTITION BY SalesOrderID) AS 'Count' fois Le salesorderby ,MIN(OrderQty) OVER(PARTITION BY SalesOrderID) AS 'Min' -- la plus petite valeur d'orderQty est 1 pour le salesorderid 43659 ,MAX(OrderQty) OVER(PARTITION BY SalesOrderID) AS 'Max' -- la plus grande valeur d'orderQty est 1 pour le salesorderid 43659 FROM Sales.SalesOrderDetail WHERE SalesOrderID IN(43659,43664); » docs.postgresql.fr/8.4/tutorial-window.html  Une fonction de fenêtrage effectue un calcul sur un jeu d'enregistrements liés d'une certaine façon à l'enregistrement courant. On peut les rapprocher des calculs réalisables par une fonction d'agrégat mais, contrairement à une fonction d'agrégat, l'utilisation d'une fonction de fenêtrage (de fenêtrage) n'entraîne pas le regroupement des enregistrements traités en un seul. Chaque enregistrement garde son identité propre. En coulisse, la fonction de fenêtrage est capable d'accéder à d'autres enregistrements que l'enregistrement courant du résultat de la requête. Un appel à une fonction de fenêtrage contient toujours une clause OVER qui suit immédiatement le nom et les arguments de la fonction. C'est ce qui permet de la distinguer syntaxiquement d'une fonction simple ou d'une fonction d'agrégat. La clause OVER détermine précisément comment les lignes de la requête sont éclatées pour être traitées par la fonction de fenêtrage. La liste PARTITION BY contenue dans la clause OVER spécifie la répartition des enregistrements en groupes, ou partitions, qui partagent les mêmes valeurs pour la (les) expression(s) contenue(s) dans la clause PARTITION BY. Pour chaque enregistrement, la fonction de fenêtrage est calculée sur les enregistrements qui se retrouvent dans la même partition que l'enregistrement courant. Bien que la fonction avg produise le même résultat quel que soit l'ordre dans lequel elle traite les enregistrements de la partition, ceci n'est pas généralisable à toutes les fonctions de fenêtrage. Lorsque cela s'avère nécessaire, l'ordre peut être contrôlé à l'aide d'une clause ORDER BY à l'intérieur de la clause OVER.

46 Les calculs / fonctions intégrées Les fonctions d’agrégations GROUP BY ou La clause OVER (partition order by) Les clauses Row_number et rank : « Numéros de la sortie d’un résultat défini. Plus spécifiquement, renvoie le numéro séquentiel d’une ligne dans une partition d’un jeu de résultats, en commençant à 1 pour la première ligne de chaque partition. ROW_NUMBER et RANK sont similaires. ROW_NUMBER tous les numéros de lignes séquentiellement (par exemple 1, 2, 3, 4, 5). RANK Fournit la même valeur numérique pour les liens (par exemple 1, 2, 2, 4, 5). »

47 Les calculs / fonctions intégrées Les fonctions : Date (SQL Server)
getdate() = sélectionner date du jour Attention si serveur en cloud avec une location et donc une date potentiellement différente Les fonctions de type DATE sont elles amenées à (progressivement) disparaître au profit de l’utilisation d’une table référence DATE ? select CdeNum, CdeDate, GETDATE() as 'date jour', year(cdedate) as 'year', month(cdedate) as 'mois', Datepart("weekday", cdedate) as 'jour semaine', Datepart("YYYY", cdedate) as 'année', Datepart("QUARTER", cdedate) as 'trimestre', DATEDIFF(day,cdedate,GETDATE()) as 'delai en jours', DATEDIFF(MM,cdedate,GETDATE()) as 'delai en mois', DATEDIFF(YEAR,cdedate,GETDATE()) as 'delai en année' From T_Commande

48 Les calculs / fonctions intégrées Les fonctions : Date (SQL Server) : Exemples
Ou : select top 100 Laminate_Id, Start_Time from [dbo].[Coater_Speed] where DATEDIFF(hour, Start_Time,getdate())<'1'

49 Les calculs / fonctions intégrées La clause WHERE : Les critères avec fonctions
datediff = différence entre 2 dates

50 Les calculs / fonctions intégrées Chaînes de caractères (SQL Server)
ORACLE possède sensiblement les mêmes (SUBSTR à la place de SUBSTRING…..)

51 Les calculs / fonctions intégrées Convertir : La fonction CAST
: type de date et format par exemple -- Syntax for CAST: CAST ( expression AS data_type [ ( length ) ] ) -- Syntax for CONVERT: CONVERT ( data_type [ ( length ) ] , expression [ , style ] ) select cast(25 as int) + cast(15 as int) + cast(33 as int) as result go select getdate() as'date entiere', cast (getdate() as date) as 'date simple', convert(varchar(20),getdate(),108) 'date format 108', convert(varchar(20),getdate(),107) 'date format 107', convert(varchar(20),getdate(),113) 'date format 113'

52 Langage SQL LES jointures

53 Les jointures Structure d’une table : Les clés
Clé étrangère Foreign Key / FK) Clé primaire (primary Key /PK) Clé primaire La clé primaire est un champ identifiant, c’est à dire sans doublon, On a coutume de dire que la clé primaire garantit l’unicité de l’enregistrement,         Une « bonne » clé primaire est un artefact, c’est à dire une donnée qui n’a aucune valeur intrinsèque (un numéro auto sera plus adapté qu’un matricule entreprise), Une clé primaire composée d’un champ numérique auto-incrémenté, c'est-à-dire que les enregistrements sont numérotés automatiquement dans la table., est excellente, Le premier enregistrement aura le numéro 1 et ainsi de suite. Une « mauvaise » clé primaire serait, par exemple, une référence produit composée de chiffres et de lettres (AlphaNumérique) On reconnaît une clé primaire dans  une table par ce qu'elle est soulignée, ou/et qu’elle est représentée par une petite clé jaune LE rôle d’une clé primaire est – fondamentalement – de permettre une RELATION avec une autre table La PK de la table parent (côté 1) est reliée avec la FK de la table enfants (côté n) Clé étrangère          Une  clé étrangères est une clé qui représente la valeur de la clé primaire d'une table connexe. Elles servent à établir des relations entre les tables, ce sont elles qui permettent les jointures entre les tables. Contrairement aux clés primaires, qui doivent être uniques, les clés étrangères peuvent prendre plusieurs fois la même valeur dans une table. Relation 0,1….n

54 Les jointures Rôle des clés

55 Les jointures Lire un modèle relationnel (ou physique / MPD)

56 Les jointures Le MPD (simplifié) de la base ContosoRetailDW

57 Les jointures Les jointures Vue d’ensemble
Ce schéma, toujours d’actualité se retrouve partout sur google image (mots clés SQL & Jointures) Seuls 2 ensembles nous intéressent vraiment (1 & 2) L’ensemble 3 répond à un besoin plus rare, 1= les clients qui ont passé commande 2= les clients qui n’ont pas passé de commande

58 Les jointures INNER JOIN (schéma) Inclusion
C’est LA Jointure par défaut qui compare deux tables et retourne tous les enregistrements comportant une concordance (en règle quasi générale) PK vers FK

59 Les jointures INNER JOIN (schéma) Inclusion

60 Les jointures Renommer les tables (alias)
Exercice : Dessiner le schéma avec les tables utilisées, Cocher clés primaires et étrangères, Lister champs utilisés par tables Dites-moi s’il y a une erreur dans le code Client C IdClient (PK) ProduitID (FK) Nom

61 Les jointures Renommer les tables (alias « métier »)

62 Les jointures Exercice en groupe : comment je fais les jointures entre les tables dimpromotion, factonlinesales, dimproduct et dimproductSubcategory ?

63 Les jointures LEFTJOIN : l’exclusion
La commande LEFT JOIN (aussi appelée LEFT OUTER JOIN) est un type de jointure entre 2 tables. Cela permet de lister tous les résultats de la table de gauche (left = gauche) s’il n’y a pas de correspondance dans la deuxième tables.

64 Les jointures LEFT (outer) JOIN (exemple)

65 Les jointures Left JOIN : Exemple

66 Les jointures « Old School » à proscrire dans la plupart des cas (même si les versions récentes des SGBD créent le même plan d’exécution et offrent les mêmes performances) Cette jointure, plus facile à écrire, pénalise le système et fait chuter les performances, On la trouve pourtant encore dans bon nombre de développements…. Puisqu’elle est encore hélas enseignée en 2015 !! Et même largement dispensée sur le net : « L'affichage des pays d'origine des voitures par marque/modèle se fait par l'instruction : » SELECT Occaz.Marque, Occaz.Modele, Societe.Pays FROM OCCAZ,SOCIETE WHERE Occaz.Marque = Societe.Nom (

67 Les jointures Synthèse et Méthodologie
1. Sur quelles tables sont les informations nécessaires pour mon extraction (A afficher et pour mes conditions) ? FROM : Je fais mes jointures et je crée mes alias pour relier mes tables (je peux dessiner un schéma lors de cette étape si besoin) 2. Qu’est-ce que je souhaite afficher ? Quelles colonnes / champs ? SELECT : je liste mes champs en n’oubliant pas de remettre l’alias de la table avant 3. Est-ce que j’ai des conditions particulières de sélection des données ? WHERE : Sur quels critères je souhaite avoir des informations ? Je n’oublie pas de mettre l’alias de la table avant le champ. 4. Comment je peux vérifier mon résultat ? SELECT : mettre mes champs du where afin de vérifier que les critères fonctionnement 5. Est-ce que je veux exclure ou inclure des données d’une table par rapport à une autre ? INNER JOIN ou LEFT JOIN ou RIGHT JOIN Ne pas oublier ensuite la condition NULL (dans la table où l’on ne souhaite pas retrouver les données.

68 Langage SQL Les sous requêtes

69 Utilisation de sous-requêtes
Écriture de sous-requêtes simples Écriture de sous-requêtes corrélées Utilisation du prédicat Exists avec les sous-requêtes Utilisation du IN, ALL, ANY, SOME Liste des fonctions ORACLE : Liste des fonctions SQL Server :

70 Sous requêtes : Dans la clause WHERE : In ou NOT IN (requête simples) L’inclusion et l’exclusion

71 Sous requêtes : Dans la clause WHERE : In ou NOT IN (requête simples)

72 Sous requêtes : Dans la clause WHERE : ALL / ANY / SOME
ALL : signifie supérieur à toutes les valeurs Exemple : > ALL(1,2,3) signifie supérieur à 3 >ANY(1,2,3) = signifie supérieur à la valeur minimale donc supérieur à 1 Les opérateurs de comparaison qui introduisent une sous-requête peuvent être modifiés par les mots clés ALL ou ANY. SOME est un équivalent de ANY dans la norme ISO. En prenant comme exemple l'opérateur de comparaison >, >ALL signifie supérieur à toutes les valeurs. En d'autres termes, cela signifie supérieur à la valeur maximale. Par exemple, >ALL (1, 2, 3) signifie supérieur à 3. >ANY signifie supérieur à une valeur au moins, autrement dit supérieur à la valeur minimale. Donc >ANY (1, 2, 3) signifie supérieur à 1. Cependant, l'opérateur < >ANY diffère de NOT IN : < >ANY signifie not = a, ou not = b, ou not = c. NOT IN signifie not = a, et not = b, et not = c. <>ALL signifie la même chose que NOT IN. Use AdventureWorks20012; SELECT CUSTOMERid FROM sales.customer where TerritoryID in -- IN (dans les deux tables) -- NOT IN -- SOME = ANY (au moins une valeur : comparaison) -- <> ALL (toutes les valeurs : comparaison) (SELECT TerritoryID FROM sales.salesPerson)

73 Sous requêtes : Dans la clause WHERE : EXISTS (requêtes corrélées)
3 différences avec les requêtes simples : Dans la condition where et le prédicat Exists : aucun champ car on va lier les requêtes par les tables entre la 1ère requête et la seconde : requêtes corrélées, Dans la sous-requête, on va utiliser l’ancienne syntaxe des jointures : tables énumérées dans le From et clés reliées dans le where, Dans le where de la sous-requête : on lie la clé de la table de la sous-requête à la clé de la table de la première requête (corrélation des requêtes)

74 Sous requêtes : Dans la clause FROM
set statistics time on select year(DateKey), count (distinct CustomerKey) from FactOnlineSales group by year(DateKey)

75 Sous requêtes : Dans le SELECT
avg(salesamount) from FactOnlineSales) -- moyenne générale (tous clients confondus) select dimcustomer.CustomerKey, avg(salesamount) as 'moyenne par clients', (select avg(salesamount) from FactOnlineSales) as 'moy_gnrle_ventes_lignes', (select avg(salesamount) from factsales) as 'moy_gnrle_ventes', (select cityname from DimGeography where cityname = 'Paris') – je met ce que je veux, d’une table et de données qui n’ont aucun liens from FactOnlineSales join DimCustomer on FactOnlineSales.CustomerKey=dimcustomer.CustomerKey group by dimcustomer.CustomerKey -- moyenne par clients

76 Sous requêtes Vs jointures
Ces 2 requêtes retournent le même résultat. Les performances sont en faveur du join (si grosse volumétrie)

77 Les sous-requêtes Synthèse et Méthodologie (1/2)
1. Sur quelles tables sont les informations nécessaires pour mon extraction (A afficher et pour mes conditions) ? FROM : Je fais mes jointures et je crée mes alias pour relier mes tables (je peux dessiner un schéma lors de cette étape si besoin) 2. Qu’est-ce que je souhaite afficher ? Quelles colonnes / champs ? SELECT : je liste mes champs en n’oubliant pas de remettre l’alias de la table avant 3. Est-ce que j’ai des conditions particulières de sélection des données ? WHERE : Sur quels critères je souhaite avoir des informations ? Je n’oublie pas de mettre l’alias de la table avant le champ. 4. Comment je peux vérifier mon résultat ? SELECT : mettre mes champs du where afin de vérifier que les critères fonctionnement 5. Est-ce que je veux exclure ou inclure des données d’une table par rapport à une autre ? INNER JOIN ou LEFT JOIN ou RIGHT JOIN Ne pas oublier ensuite la condition NULL (dans la table où l’on ne souhaite pas retrouver les données. Ou SOUS-REQUETE

78 Les sous-requêtes Synthèse et Méthodologie (2/2)
6. Est-ce que j’ai besoin de faire un calcul (fonction d’agrégation : sum, count, max, min, average) sur une autre fonction d’agrégation ou sur un autre résultat ? Je vais devoir créer une requête imbriquée dans le FROM afin de créer une table temporaire / table dérivée 7. Est-ce que je souhaite avoir d’autres calculs (fonction d’agrégation) dans mon select qui soit un résultat général afin de comparer avec le résultat par enregistrement (client, commande, etc.) ? Est-ce que je souhaite ramener un résultat d’une autre table ou d’un autre résultat dans ma requête afin d’avoir l’information sur mon extraction? Je vais devoir créer une requête imbriquée dans le SELECT afin de créer un nouveau champ qui aura pour chaque ligne la même valeur.

79 Sous requêtes : Règles à ne pas oublier !!!
Toujours préciser les colonnes retourner par la recherche (le « select * » est très gourmand) TOUJOURS utiliser le mot clé « JOIN (inner pour les select d’inclusion Multi- tables Choisir sous requêtes ou LEFT JOIN pour requêtes d’exclusion Ne joindre que les tables nécessaires Pour augmenter la lisibilité des requêtes, renommer vos tables (alias) Documenter la requête avant de l’écrire : But Auteur Date ET ne pas oublier le TOP !!

80 Annexes Sommaire / Plan détaillé du support de formation
Schémas des bases de données Liens web utiles

81 Sommaire / Plan détaillé (1/2)

82 Sommaire / Plan détaillé (2/2)

83 Schémas des bases de données Comptoir

84 Schémas des bases de données _SQL_SESSION_SIF

85 Schémas des bases de données ConsotoRetailDW

86 Liens web utiles Le Web regorge de sites traitant (parfois de façon excellente) du SQL. Comme il n’est pas possible de les citer tous, en voici une liste tout à fait arbitraire mais représentative de ce qu’on trouve sur le web : net/introduction-au-langage-sql fr/library/ms190750(v=sql.105).aspxeloppez.com/#apprendre-sql

87 MERCI POUR VOTRE ATTENTION
J’espère que vous repartez confiant et serein autour du langage SQL Bonne continuation


Télécharger ppt "Formation base de données et Langage SQL pour non-informaticiens"

Présentations similaires


Annonces Google