SlideShare une entreprise Scribd logo
INTRODUCTION AU LANGAGE SQL Olivier Le Goaër
olivier.legoaer@univ-pau.fr
ÉTAT DES LIEUX
Langage informatique normalisé servant à exploiter des bases de données
relationnelles
Créé en 1974, il est depuis devenu incontournable
L’immense majorité des systèmes de gestion de bases de données relationnelles
(abrégé SGBD-R) du marché le supporte, à quelques variations près
 MySQL, Oracle Database, Microsoft Access, PostgreSQL, SQLite…
Les choses bougent avec la tendance « NoSQL » (Not Only SQL)
BASE DE DONNÉES RELATIONNELLES
L’information est organisée dans des tableaux à deux dimensions appelés des
relations ou tables
 Les lignes de ces relations sont appelées des n-uplets ou enregistrements
 Les colonnes sont appelées des attributs
Une relation (au sens du modèle de Codd) est constituée de deux choses :
 Un Schéma : Le format de la table (incluant types et contraintes). Le schéma est fixé ;
 Une Extension : Le contenu de la table, qui est un ensemble de n-uplets dont l'ordre n'a pas
d'importance, et sans doublons
Le qualificatif « relationnelle » d’une BDD ne fait ainsi aucunement
référence au fait que les tables peuvent être reliées entre elles.
EXEMPLES DE RELATIONS (SPORT)
Dossard Nom Prenom Club
503 Afond Jocelyne AP
123 Véloce Marc NULL
229 Le Goaër Olivier TDB
303 Speedy Nadine AP
271 Pressé Marc E64
404 Asphalte Didier NULL
Code Intitule Pro?
AP Aigles de Pau No
E64 Endurance 64 Yes
ASM ASM Mourenx No
TDB Touristes du Béarn No
Relation « Coureur »
Relation « Club »
STRUCTURED QUERY LANGUAGE
LMD
Langage de manipulation des données
LDD
Langage de définition des données
LCD
Langage de contrôle des données
LANGAGE DE MANIPULATION DE DONNÉES
Sous-ensemble du SQL utilisé pour ajouter, consulter, modifier, et supprimer des
données des tables existantes
 Correspond aux commandes SQL : INSERT, SELECT, UPDATE, DELETE
Syntaxe générale d’une requête pour consulter des données :
SELECT attributs -- ce que l'on cherche
FROM relations -- où on cherche
[WHERE condition] -- avec quelles conditions
[GROUP BY attributs] -- en utilisant
[HAVING condition] -- des sous-ensembles
[ORDER BY attributs] -- résultat dans quel ordre
SELECTION D’ATTRIBUTS
Le mot clé SELECT vous permet de ne conserver que les attributs qui vous intéressent
Vous pouvez en profitez pour les renommer à l’affichage : les « alias »
Vous pouvez appliquer des fonctions scalaires et des calculs sur les attributs
Vous pouvez forcer l’élimination des doublons apparus potentiellement
SELECT Dossard, Nom --ou * si vous les voulez tous
SELECT Dossard, Nom as NomPatronimique
SELECT (Dossard * 3) + 1, LEFT(Nom, 3) as PetitNomPatronimique
SELECT DISTINCT Prenom
TABLE(S) SOURCE(S)
Il faut évidemment définir d’où proviennent vos attributs avec le mot clé FROM
Il faudra lever les ambiguïtés quand il y aura plusieurs tables en jeu (Voir suite)
 Vous pouvez donner un alias à la table et s’y référer au niveau des attributs
 Ou vous pouvez utiliser une notation explicite en préfixant l’attribut par sa table d’appartenance
SELECT Dossard, Nom FROM Coureur
SELECT c1.Dossard, c1.Nom FROM Coureur as c1
SELECT Coureur.Dossard, Coureur.Nom FROM Coureur
SELECT * FROM Club
TRI DES RESULTATS
Vous pouvez utiliser les attributs pour trier les résultats avec le mot clé ORDER BY
Vous pouvez choisir de trier dans l’ordre croissant (par défaut), ou décroissant
Vous pouvez opérer le tri à plusieurs niveaux, en cas de valeurs identiques
SELECT Dossard, Nom FROM Coureur ORDER BY Dossard
SELECT Dossard, Nom FROM Coureur ORDER BY Dossard ASC --tri croissant
SELECT Dossard, Nom FROM Coureur ORDER BY Dossard DESC --tri décroissant
SELECT Dossard, Nom FROM Coureur ORDER BY LEFT(Nom, 3), Dossard ASC
FILTRAGE DES RESULTATS
Vous pouvez éliminer les n-uplets qui ne vous intéressent pas avec le mot clé WHERE
 Dis autrement, vous cherchez à conserver ceux qui satisfont une condition logique déterminée
Vous pouvez exprimer des conditions d’(in)égalité, de ressemblance ou de nullité
Vous pouvez construire des conditions complexes à l’aide de connecteurs logiques
SELECT Dossard, Nom FROM Coureur WHERE Dossard > 102
SELECT Dossard, Nom FROM Coureur WHERE Nom = "Le Goaër"
SELECT Dossard, Nom FROM Coureur WHERE Nom like "*Go??r" --Cf. RegExp
SELECT Dossard, Nom FROM Coureur WHERE (not (LEFT(Nom, 3)
= "Le ") or (Dossard >= 50 and Dossard <= 300))
SELECT Dossard, Nom FROM Coureur WHERE Club is NULL
JOINTURE (INTERNE)
Sert à reconstituer l’information éclatée entre deux tables, à l’aide du mot clé JOIN
1. Produit cartésien : combinaison de chaque n-uplet d’une table avec ceux de l’autre table
2. Un critère spécial doit être satisfait pour les apparier deux à deux : la condition de jointure
La condition de jointure après le mot clé ON n’est pas forcément basique ni naturelle
Ce mécanisme est généralisable à n tables, mais exige une rigueur syntaxique
SELECT * FROM Coureur INNER JOIN Club ON Coureur.club = Club.code
SELECT * FROM Coureur INNER JOIN Club ON LEFT(Coureur.nom, 3) = Club.code
SELECT * FROM (((T1 INNER JOIN T2 ON Cond1)
INNER JOIN T3 ON Cond2)
INNER JOIN T4 ON Cond3)
JOINTURE (EXTERNE)
Parfois, ne pas réussir à reconstituer l’information éclatée entre deux tables, est une
information en elle-même ! (Cf. « l’hypothèse du monde clos »)
 La non-satisfaction du critère de jointure fait apparaître des valeurs nulles (NULL) sur des attributs
appariés, qui pourront par exemple servir à filtrer
Une table parmi les 2 est considérée comme table de référence lors de cette jointure,
selon qu’elle se trouve à gauche ou à droite dans le sens d’écriture de votre requête
SELECT * FROM Coureur RIGHT OUTER JOIN Club ON Coureur.Club = Club.code
WHERE Coureur.Dossard is NULL
SELECT * FROM Club LEFT OUTER JOIN Coureur ON Coureur.Club = Club.code
WHERE Coureur.Dossard is NULL --100% équivalent à ci-dessus
GROUPES ET FONTIONS DE GROUPES
L’ensemble des n-uplets forme un groupe par défaut, sur lequel il est possible
d’appliquer des « fonctions de groupes »
 Il s’agit de fonctions spéciales d’agrégation statistiques
 Fonctions natives : AVG(), COUNT(), MIN(), MAX(), SUM(), SDTEV(), VAR()
Vous pouvez explicitement former des sous-groupes, à plusieurs niveaux, avec GROUP BY
La sélection peut contenir tout au plus les attributs ayant servis à grouper,
mais autant de fonctions de groupes que vous le souhaitez.
SELECT MAX(Dossard) FROM Coureur
SELECT Club, COUNT(Dossard) FROM Coureur GROUP BY Club
FILTRAGE SUR FONCTIONS DE GROUPE
Si un filtrage doit porter sur une fonction de groupe, elle ne peut figurer derrière
WHERE. Elle est introduite par la clause HAVING
SELECT Club, COUNT(Dossard) as Inscrits FROM Coureur GROUP BY Club
HAVING COUNT(Dossard) > 2
Il est fréquent d’appliquer des alias aux fonctions de groupe. Toutefois,
ces alias ne peuvent pas être référencés depuis le HAVING.
SOUS-REQUÊTE
Les expressions à l’intérieur d’une requête peuvent être remplacée par…une requête
Si la sous-requête ne renvoie pas une valeur unique mais des n-uplets, alors il faut
utiliser les opérateurs IN, EXISTS, ANY, ALL
Parfois, la sous-requête peut être corrélée : elle ne s’exécute pas indépendamment
 Ses valeurs dépendent alors de celles de la requête hôte,
 Les alias de tables sont incontournables pour lever les ambiguïtés.
SELECT * FROM Coureur WHERE Dossard < (SELECT MAX(Dossard) FROM Coureur)
SELECT * FROM Coureur WHERE Club IN (SELECT Code FROM Club WHERE Pro?=Yes)
EXÉCUTION DES REQUÊTES
SQL est un langage déclaratif : il dit ce qu’il faut faire, mais pas comment le faire !
C’est le SGBD-R qui choisira la façon optimale d’exécuter votre requête. Néanmoins,
l’ordre logique de traitement est grosso modo le suivant :
1. FROM
2. ON
3. JOIN
4. WHERE
5. GROUP BY
6. HAVING
7. SELECT
8. DISTINCT
9. ORDER BY

Contenu connexe

Tendances

Introduction à pl/sql
Introduction à pl/sqlIntroduction à pl/sql
Introduction à pl/sql
Abdelouahed Abdou
 
Bases de données réparties par la pratique
Bases de données réparties par la pratiqueBases de données réparties par la pratique
Bases de données réparties par la pratique
Abdelouahed Abdou
 
Telecharger Exercices corrigés PL/SQL
Telecharger Exercices corrigés PL/SQLTelecharger Exercices corrigés PL/SQL
Telecharger Exercices corrigés PL/SQL
webreaker
 
BigData_Chp1: Introduction à la Big Data
BigData_Chp1: Introduction à la Big DataBigData_Chp1: Introduction à la Big Data
BigData_Chp1: Introduction à la Big Data
Lilia Sfaxi
 
Cours design pattern m youssfi partie 1 introduction et pattern strategy
Cours design pattern m youssfi partie 1 introduction et pattern strategyCours design pattern m youssfi partie 1 introduction et pattern strategy
Cours design pattern m youssfi partie 1 introduction et pattern strategy
ENSET, Université Hassan II Casablanca
 
La persistance des données : ORM et hibernate
La persistance des données : ORM et hibernateLa persistance des données : ORM et hibernate
La persistance des données : ORM et hibernate
Youness Boukouchi
 
Les Base de Données NOSQL
Les Base de Données NOSQLLes Base de Données NOSQL
Les Base de Données NOSQL
kamar MEDDAH
 
BigData_Chp2: Hadoop & Map-Reduce
BigData_Chp2: Hadoop & Map-ReduceBigData_Chp2: Hadoop & Map-Reduce
BigData_Chp2: Hadoop & Map-Reduce
Lilia Sfaxi
 
Examen principal- php - correction
Examen principal- php - correctionExamen principal- php - correction
Examen principal- php - correction
Ines Ouaz
 
BigData_TP4 : Cassandra
BigData_TP4 : CassandraBigData_TP4 : Cassandra
BigData_TP4 : Cassandra
Lilia Sfaxi
 
Support de cours angular
Support de cours angularSupport de cours angular
Support de cours angular
ENSET, Université Hassan II Casablanca
 
Une introduction à Hive
Une introduction à HiveUne introduction à Hive
Une introduction à Hive
Modern Data Stack France
 
UML
UMLUML
Support JEE Spring Inversion de Controle IOC et Spring MVC
Support JEE Spring Inversion de Controle IOC et Spring MVCSupport JEE Spring Inversion de Controle IOC et Spring MVC
Support JEE Spring Inversion de Controle IOC et Spring MVC
ENSET, Université Hassan II Casablanca
 
Support de cours technologie et application m.youssfi
Support de cours technologie et application m.youssfiSupport de cours technologie et application m.youssfi
Support de cours technologie et application m.youssfi
ENSET, Université Hassan II Casablanca
 
Introduction à spring boot
Introduction à spring bootIntroduction à spring boot
Introduction à spring boot
Antoine Rey
 
Cours Big Data Chap2
Cours Big Data Chap2Cours Big Data Chap2
Cours Big Data Chap2
Amal Abid
 
Design patterns - Exemples en Java
Design patterns - Exemples en JavaDesign patterns - Exemples en Java
Design patterns - Exemples en Java
Oussama BEN KHIROUN
 
Bases de Données non relationnelles, NoSQL (Introduction) 1er cours
Bases de Données non relationnelles, NoSQL (Introduction) 1er coursBases de Données non relationnelles, NoSQL (Introduction) 1er cours
Bases de Données non relationnelles, NoSQL (Introduction) 1er cours
Hatim CHAHDI
 
Angular Avancé
Angular AvancéAngular Avancé

Tendances (20)

Introduction à pl/sql
Introduction à pl/sqlIntroduction à pl/sql
Introduction à pl/sql
 
Bases de données réparties par la pratique
Bases de données réparties par la pratiqueBases de données réparties par la pratique
Bases de données réparties par la pratique
 
Telecharger Exercices corrigés PL/SQL
Telecharger Exercices corrigés PL/SQLTelecharger Exercices corrigés PL/SQL
Telecharger Exercices corrigés PL/SQL
 
BigData_Chp1: Introduction à la Big Data
BigData_Chp1: Introduction à la Big DataBigData_Chp1: Introduction à la Big Data
BigData_Chp1: Introduction à la Big Data
 
Cours design pattern m youssfi partie 1 introduction et pattern strategy
Cours design pattern m youssfi partie 1 introduction et pattern strategyCours design pattern m youssfi partie 1 introduction et pattern strategy
Cours design pattern m youssfi partie 1 introduction et pattern strategy
 
La persistance des données : ORM et hibernate
La persistance des données : ORM et hibernateLa persistance des données : ORM et hibernate
La persistance des données : ORM et hibernate
 
Les Base de Données NOSQL
Les Base de Données NOSQLLes Base de Données NOSQL
Les Base de Données NOSQL
 
BigData_Chp2: Hadoop & Map-Reduce
BigData_Chp2: Hadoop & Map-ReduceBigData_Chp2: Hadoop & Map-Reduce
BigData_Chp2: Hadoop & Map-Reduce
 
Examen principal- php - correction
Examen principal- php - correctionExamen principal- php - correction
Examen principal- php - correction
 
BigData_TP4 : Cassandra
BigData_TP4 : CassandraBigData_TP4 : Cassandra
BigData_TP4 : Cassandra
 
Support de cours angular
Support de cours angularSupport de cours angular
Support de cours angular
 
Une introduction à Hive
Une introduction à HiveUne introduction à Hive
Une introduction à Hive
 
UML
UMLUML
UML
 
Support JEE Spring Inversion de Controle IOC et Spring MVC
Support JEE Spring Inversion de Controle IOC et Spring MVCSupport JEE Spring Inversion de Controle IOC et Spring MVC
Support JEE Spring Inversion de Controle IOC et Spring MVC
 
Support de cours technologie et application m.youssfi
Support de cours technologie et application m.youssfiSupport de cours technologie et application m.youssfi
Support de cours technologie et application m.youssfi
 
Introduction à spring boot
Introduction à spring bootIntroduction à spring boot
Introduction à spring boot
 
Cours Big Data Chap2
Cours Big Data Chap2Cours Big Data Chap2
Cours Big Data Chap2
 
Design patterns - Exemples en Java
Design patterns - Exemples en JavaDesign patterns - Exemples en Java
Design patterns - Exemples en Java
 
Bases de Données non relationnelles, NoSQL (Introduction) 1er cours
Bases de Données non relationnelles, NoSQL (Introduction) 1er coursBases de Données non relationnelles, NoSQL (Introduction) 1er cours
Bases de Données non relationnelles, NoSQL (Introduction) 1er cours
 
Angular Avancé
Angular AvancéAngular Avancé
Angular Avancé
 

Similaire à Introduction au langage SQL

La 2ème partie de la présentation PHP
La 2ème partie de la présentation PHPLa 2ème partie de la présentation PHP
La 2ème partie de la présentation PHP
Club Scientifique de l'ESI - CSE
 
presentationatelierphpprt2-140314143938-phpapp02.pdf
presentationatelierphpprt2-140314143938-phpapp02.pdfpresentationatelierphpprt2-140314143938-phpapp02.pdf
presentationatelierphpprt2-140314143938-phpapp02.pdf
RihabBENLAMINE
 
Support_Cours_SQL.ppt
Support_Cours_SQL.pptSupport_Cours_SQL.ppt
Support_Cours_SQL.ppt
SiwarAbbes1
 
QuelquesCommandesMySQL.pdf
QuelquesCommandesMySQL.pdfQuelquesCommandesMySQL.pdf
QuelquesCommandesMySQL.pdf
Moez Moezm
 
Chapitre5.pdf
Chapitre5.pdfChapitre5.pdf
Chapitre5.pdf
Moez Moezm
 
Adopte une BDD
Adopte une BDDAdopte une BDD
Adopte une BDD
Aymeric Brisse
 
SQL.pdf
SQL.pdfSQL.pdf
SQL-ORACLE.pdf
SQL-ORACLE.pdfSQL-ORACLE.pdf
SQL-ORACLE.pdf
SamirAwad14
 
SQL-ORACLE.pptx
SQL-ORACLE.pptxSQL-ORACLE.pptx
SQL-ORACLE.pptx
SamirAwad14
 
Oracle : extension du langage SQL
Oracle : extension du langage SQLOracle : extension du langage SQL
Oracle : extension du langage SQL
Mohammed Jaafar
 
Chapitre 04-B - Langages de consultation.pdf
Chapitre 04-B - Langages de consultation.pdfChapitre 04-B - Langages de consultation.pdf
Chapitre 04-B - Langages de consultation.pdf
RihabBENLAMINE
 
Sql
SqlSql
Sql
krymo
 
Les commandes sql
Les commandes sqlLes commandes sql
Les commandes sql
Hanfi Akram
 
Les commandes sql
Les commandes sqlLes commandes sql
Les commandes sqlHanfi Akram
 
SQL-Select.pdf
SQL-Select.pdfSQL-Select.pdf
SQL-Select.pdf
Loniebluette
 
INF240 - Bases de données DUT SRC1 - Cours 3
INF240 - Bases de données DUT SRC1 - Cours 3INF240 - Bases de données DUT SRC1 - Cours 3
INF240 - Bases de données DUT SRC1 - Cours 3PGambette
 
Support formation vidéo : SQL pour les (grands) débutants
Support formation vidéo : SQL pour les (grands) débutants Support formation vidéo : SQL pour les (grands) débutants
Support formation vidéo : SQL pour les (grands) débutants
SmartnSkilled
 

Similaire à Introduction au langage SQL (20)

Cours3 gdm sql
Cours3 gdm sqlCours3 gdm sql
Cours3 gdm sql
 
La 2ème partie de la présentation PHP
La 2ème partie de la présentation PHPLa 2ème partie de la présentation PHP
La 2ème partie de la présentation PHP
 
presentationatelierphpprt2-140314143938-phpapp02.pdf
presentationatelierphpprt2-140314143938-phpapp02.pdfpresentationatelierphpprt2-140314143938-phpapp02.pdf
presentationatelierphpprt2-140314143938-phpapp02.pdf
 
Support_Cours_SQL.ppt
Support_Cours_SQL.pptSupport_Cours_SQL.ppt
Support_Cours_SQL.ppt
 
QuelquesCommandesMySQL.pdf
QuelquesCommandesMySQL.pdfQuelquesCommandesMySQL.pdf
QuelquesCommandesMySQL.pdf
 
Chapitre5.pdf
Chapitre5.pdfChapitre5.pdf
Chapitre5.pdf
 
SQL partie III
SQL partie IIISQL partie III
SQL partie III
 
Adopte une BDD
Adopte une BDDAdopte une BDD
Adopte une BDD
 
SQL.pdf
SQL.pdfSQL.pdf
SQL.pdf
 
SQL-ORACLE.pdf
SQL-ORACLE.pdfSQL-ORACLE.pdf
SQL-ORACLE.pdf
 
SQL-ORACLE.pptx
SQL-ORACLE.pptxSQL-ORACLE.pptx
SQL-ORACLE.pptx
 
Oracle : extension du langage SQL
Oracle : extension du langage SQLOracle : extension du langage SQL
Oracle : extension du langage SQL
 
Chapitre 04-B - Langages de consultation.pdf
Chapitre 04-B - Langages de consultation.pdfChapitre 04-B - Langages de consultation.pdf
Chapitre 04-B - Langages de consultation.pdf
 
Sql
SqlSql
Sql
 
Les commandes sql
Les commandes sqlLes commandes sql
Les commandes sql
 
Les commandes sql
Les commandes sqlLes commandes sql
Les commandes sql
 
SQL-Select.pdf
SQL-Select.pdfSQL-Select.pdf
SQL-Select.pdf
 
Cours sql-sh-
Cours sql-sh-Cours sql-sh-
Cours sql-sh-
 
INF240 - Bases de données DUT SRC1 - Cours 3
INF240 - Bases de données DUT SRC1 - Cours 3INF240 - Bases de données DUT SRC1 - Cours 3
INF240 - Bases de données DUT SRC1 - Cours 3
 
Support formation vidéo : SQL pour les (grands) débutants
Support formation vidéo : SQL pour les (grands) débutants Support formation vidéo : SQL pour les (grands) débutants
Support formation vidéo : SQL pour les (grands) débutants
 

Plus de Olivier Le Goaër

The road to green code
The road to green codeThe road to green code
The road to green code
Olivier Le Goaër
 
Ecological Impact of Native vs. Cross-Platform Mobile Apps: a Preliminary Study
 Ecological Impact of Native vs. Cross-Platform Mobile Apps: a Preliminary Study Ecological Impact of Native vs. Cross-Platform Mobile Apps: a Preliminary Study
Ecological Impact of Native vs. Cross-Platform Mobile Apps: a Preliminary Study
Olivier Le Goaër
 
PowDroid: Energy Profiling of Android Applications (ASE 2021 [Workshop] SUSTA...
PowDroid: Energy Profiling of Android Applications (ASE 2021 [Workshop] SUSTA...PowDroid: Energy Profiling of Android Applications (ASE 2021 [Workshop] SUSTA...
PowDroid: Energy Profiling of Android Applications (ASE 2021 [Workshop] SUSTA...
Olivier Le Goaër
 
Enforcing Green Code With Android Lint
Enforcing Green Code With Android LintEnforcing Green Code With Android Lint
Enforcing Green Code With Android Lint
Olivier Le Goaër
 
GREEN PAUWARE - For a power-thrifty mobile app marketplace
GREEN PAUWARE - For a power-thrifty mobile app marketplaceGREEN PAUWARE - For a power-thrifty mobile app marketplace
GREEN PAUWARE - For a power-thrifty mobile app marketplace
Olivier Le Goaër
 
Les Web Services en 60 diapos chrono !
Les Web Services en 60 diapos chrono !Les Web Services en 60 diapos chrono !
Les Web Services en 60 diapos chrono !
Olivier Le Goaër
 
Executable modeling & dynamic adaptation
Executable modeling & dynamic adaptationExecutable modeling & dynamic adaptation
Executable modeling & dynamic adaptation
Olivier Le Goaër
 
Cours JavaScript
Cours JavaScriptCours JavaScript
Cours JavaScript
Olivier Le Goaër
 
Adaptation d'exécution de modèles : vers des iDSML adaptables
Adaptation d'exécution de modèles : vers des iDSML adaptablesAdaptation d'exécution de modèles : vers des iDSML adaptables
Adaptation d'exécution de modèles : vers des iDSML adaptables
Olivier Le Goaër
 
Formation VBA Excel
Formation VBA ExcelFormation VBA Excel
Formation VBA Excel
Olivier Le Goaër
 
Android executable modeling: beyond android programming
Android executable modeling: beyond android programmingAndroid executable modeling: beyond android programming
Android executable modeling: beyond android programming
Olivier Le Goaër
 
Yet another DSL for cross platforms mobile development
Yet another DSL for cross platforms mobile developmentYet another DSL for cross platforms mobile development
Yet another DSL for cross platforms mobile development
Olivier Le Goaër
 
Introduction à l'approche ADM de l'OMG
Introduction à l'approche ADM de l'OMGIntroduction à l'approche ADM de l'OMG
Introduction à l'approche ADM de l'OMG
Olivier Le Goaër
 
Syntaxe concrète des DSL en IDM [avec Xtext]
Syntaxe concrète des DSL en IDM [avec Xtext]Syntaxe concrète des DSL en IDM [avec Xtext]
Syntaxe concrète des DSL en IDM [avec Xtext]
Olivier Le Goaër
 
Programmation sous Android
Programmation sous AndroidProgrammation sous Android
Programmation sous Android
Olivier Le Goaër
 

Plus de Olivier Le Goaër (15)

The road to green code
The road to green codeThe road to green code
The road to green code
 
Ecological Impact of Native vs. Cross-Platform Mobile Apps: a Preliminary Study
 Ecological Impact of Native vs. Cross-Platform Mobile Apps: a Preliminary Study Ecological Impact of Native vs. Cross-Platform Mobile Apps: a Preliminary Study
Ecological Impact of Native vs. Cross-Platform Mobile Apps: a Preliminary Study
 
PowDroid: Energy Profiling of Android Applications (ASE 2021 [Workshop] SUSTA...
PowDroid: Energy Profiling of Android Applications (ASE 2021 [Workshop] SUSTA...PowDroid: Energy Profiling of Android Applications (ASE 2021 [Workshop] SUSTA...
PowDroid: Energy Profiling of Android Applications (ASE 2021 [Workshop] SUSTA...
 
Enforcing Green Code With Android Lint
Enforcing Green Code With Android LintEnforcing Green Code With Android Lint
Enforcing Green Code With Android Lint
 
GREEN PAUWARE - For a power-thrifty mobile app marketplace
GREEN PAUWARE - For a power-thrifty mobile app marketplaceGREEN PAUWARE - For a power-thrifty mobile app marketplace
GREEN PAUWARE - For a power-thrifty mobile app marketplace
 
Les Web Services en 60 diapos chrono !
Les Web Services en 60 diapos chrono !Les Web Services en 60 diapos chrono !
Les Web Services en 60 diapos chrono !
 
Executable modeling & dynamic adaptation
Executable modeling & dynamic adaptationExecutable modeling & dynamic adaptation
Executable modeling & dynamic adaptation
 
Cours JavaScript
Cours JavaScriptCours JavaScript
Cours JavaScript
 
Adaptation d'exécution de modèles : vers des iDSML adaptables
Adaptation d'exécution de modèles : vers des iDSML adaptablesAdaptation d'exécution de modèles : vers des iDSML adaptables
Adaptation d'exécution de modèles : vers des iDSML adaptables
 
Formation VBA Excel
Formation VBA ExcelFormation VBA Excel
Formation VBA Excel
 
Android executable modeling: beyond android programming
Android executable modeling: beyond android programmingAndroid executable modeling: beyond android programming
Android executable modeling: beyond android programming
 
Yet another DSL for cross platforms mobile development
Yet another DSL for cross platforms mobile developmentYet another DSL for cross platforms mobile development
Yet another DSL for cross platforms mobile development
 
Introduction à l'approche ADM de l'OMG
Introduction à l'approche ADM de l'OMGIntroduction à l'approche ADM de l'OMG
Introduction à l'approche ADM de l'OMG
 
Syntaxe concrète des DSL en IDM [avec Xtext]
Syntaxe concrète des DSL en IDM [avec Xtext]Syntaxe concrète des DSL en IDM [avec Xtext]
Syntaxe concrète des DSL en IDM [avec Xtext]
 
Programmation sous Android
Programmation sous AndroidProgrammation sous Android
Programmation sous Android
 

Introduction au langage SQL

  • 1. INTRODUCTION AU LANGAGE SQL Olivier Le Goaër olivier.legoaer@univ-pau.fr
  • 2. ÉTAT DES LIEUX Langage informatique normalisé servant à exploiter des bases de données relationnelles Créé en 1974, il est depuis devenu incontournable L’immense majorité des systèmes de gestion de bases de données relationnelles (abrégé SGBD-R) du marché le supporte, à quelques variations près  MySQL, Oracle Database, Microsoft Access, PostgreSQL, SQLite… Les choses bougent avec la tendance « NoSQL » (Not Only SQL)
  • 3. BASE DE DONNÉES RELATIONNELLES L’information est organisée dans des tableaux à deux dimensions appelés des relations ou tables  Les lignes de ces relations sont appelées des n-uplets ou enregistrements  Les colonnes sont appelées des attributs Une relation (au sens du modèle de Codd) est constituée de deux choses :  Un Schéma : Le format de la table (incluant types et contraintes). Le schéma est fixé ;  Une Extension : Le contenu de la table, qui est un ensemble de n-uplets dont l'ordre n'a pas d'importance, et sans doublons Le qualificatif « relationnelle » d’une BDD ne fait ainsi aucunement référence au fait que les tables peuvent être reliées entre elles.
  • 4. EXEMPLES DE RELATIONS (SPORT) Dossard Nom Prenom Club 503 Afond Jocelyne AP 123 Véloce Marc NULL 229 Le Goaër Olivier TDB 303 Speedy Nadine AP 271 Pressé Marc E64 404 Asphalte Didier NULL Code Intitule Pro? AP Aigles de Pau No E64 Endurance 64 Yes ASM ASM Mourenx No TDB Touristes du Béarn No Relation « Coureur » Relation « Club »
  • 5. STRUCTURED QUERY LANGUAGE LMD Langage de manipulation des données LDD Langage de définition des données LCD Langage de contrôle des données
  • 6. LANGAGE DE MANIPULATION DE DONNÉES Sous-ensemble du SQL utilisé pour ajouter, consulter, modifier, et supprimer des données des tables existantes  Correspond aux commandes SQL : INSERT, SELECT, UPDATE, DELETE Syntaxe générale d’une requête pour consulter des données : SELECT attributs -- ce que l'on cherche FROM relations -- où on cherche [WHERE condition] -- avec quelles conditions [GROUP BY attributs] -- en utilisant [HAVING condition] -- des sous-ensembles [ORDER BY attributs] -- résultat dans quel ordre
  • 7. SELECTION D’ATTRIBUTS Le mot clé SELECT vous permet de ne conserver que les attributs qui vous intéressent Vous pouvez en profitez pour les renommer à l’affichage : les « alias » Vous pouvez appliquer des fonctions scalaires et des calculs sur les attributs Vous pouvez forcer l’élimination des doublons apparus potentiellement SELECT Dossard, Nom --ou * si vous les voulez tous SELECT Dossard, Nom as NomPatronimique SELECT (Dossard * 3) + 1, LEFT(Nom, 3) as PetitNomPatronimique SELECT DISTINCT Prenom
  • 8. TABLE(S) SOURCE(S) Il faut évidemment définir d’où proviennent vos attributs avec le mot clé FROM Il faudra lever les ambiguïtés quand il y aura plusieurs tables en jeu (Voir suite)  Vous pouvez donner un alias à la table et s’y référer au niveau des attributs  Ou vous pouvez utiliser une notation explicite en préfixant l’attribut par sa table d’appartenance SELECT Dossard, Nom FROM Coureur SELECT c1.Dossard, c1.Nom FROM Coureur as c1 SELECT Coureur.Dossard, Coureur.Nom FROM Coureur SELECT * FROM Club
  • 9. TRI DES RESULTATS Vous pouvez utiliser les attributs pour trier les résultats avec le mot clé ORDER BY Vous pouvez choisir de trier dans l’ordre croissant (par défaut), ou décroissant Vous pouvez opérer le tri à plusieurs niveaux, en cas de valeurs identiques SELECT Dossard, Nom FROM Coureur ORDER BY Dossard SELECT Dossard, Nom FROM Coureur ORDER BY Dossard ASC --tri croissant SELECT Dossard, Nom FROM Coureur ORDER BY Dossard DESC --tri décroissant SELECT Dossard, Nom FROM Coureur ORDER BY LEFT(Nom, 3), Dossard ASC
  • 10. FILTRAGE DES RESULTATS Vous pouvez éliminer les n-uplets qui ne vous intéressent pas avec le mot clé WHERE  Dis autrement, vous cherchez à conserver ceux qui satisfont une condition logique déterminée Vous pouvez exprimer des conditions d’(in)égalité, de ressemblance ou de nullité Vous pouvez construire des conditions complexes à l’aide de connecteurs logiques SELECT Dossard, Nom FROM Coureur WHERE Dossard > 102 SELECT Dossard, Nom FROM Coureur WHERE Nom = "Le Goaër" SELECT Dossard, Nom FROM Coureur WHERE Nom like "*Go??r" --Cf. RegExp SELECT Dossard, Nom FROM Coureur WHERE (not (LEFT(Nom, 3) = "Le ") or (Dossard >= 50 and Dossard <= 300)) SELECT Dossard, Nom FROM Coureur WHERE Club is NULL
  • 11. JOINTURE (INTERNE) Sert à reconstituer l’information éclatée entre deux tables, à l’aide du mot clé JOIN 1. Produit cartésien : combinaison de chaque n-uplet d’une table avec ceux de l’autre table 2. Un critère spécial doit être satisfait pour les apparier deux à deux : la condition de jointure La condition de jointure après le mot clé ON n’est pas forcément basique ni naturelle Ce mécanisme est généralisable à n tables, mais exige une rigueur syntaxique SELECT * FROM Coureur INNER JOIN Club ON Coureur.club = Club.code SELECT * FROM Coureur INNER JOIN Club ON LEFT(Coureur.nom, 3) = Club.code SELECT * FROM (((T1 INNER JOIN T2 ON Cond1) INNER JOIN T3 ON Cond2) INNER JOIN T4 ON Cond3)
  • 12. JOINTURE (EXTERNE) Parfois, ne pas réussir à reconstituer l’information éclatée entre deux tables, est une information en elle-même ! (Cf. « l’hypothèse du monde clos »)  La non-satisfaction du critère de jointure fait apparaître des valeurs nulles (NULL) sur des attributs appariés, qui pourront par exemple servir à filtrer Une table parmi les 2 est considérée comme table de référence lors de cette jointure, selon qu’elle se trouve à gauche ou à droite dans le sens d’écriture de votre requête SELECT * FROM Coureur RIGHT OUTER JOIN Club ON Coureur.Club = Club.code WHERE Coureur.Dossard is NULL SELECT * FROM Club LEFT OUTER JOIN Coureur ON Coureur.Club = Club.code WHERE Coureur.Dossard is NULL --100% équivalent à ci-dessus
  • 13. GROUPES ET FONTIONS DE GROUPES L’ensemble des n-uplets forme un groupe par défaut, sur lequel il est possible d’appliquer des « fonctions de groupes »  Il s’agit de fonctions spéciales d’agrégation statistiques  Fonctions natives : AVG(), COUNT(), MIN(), MAX(), SUM(), SDTEV(), VAR() Vous pouvez explicitement former des sous-groupes, à plusieurs niveaux, avec GROUP BY La sélection peut contenir tout au plus les attributs ayant servis à grouper, mais autant de fonctions de groupes que vous le souhaitez. SELECT MAX(Dossard) FROM Coureur SELECT Club, COUNT(Dossard) FROM Coureur GROUP BY Club
  • 14. FILTRAGE SUR FONCTIONS DE GROUPE Si un filtrage doit porter sur une fonction de groupe, elle ne peut figurer derrière WHERE. Elle est introduite par la clause HAVING SELECT Club, COUNT(Dossard) as Inscrits FROM Coureur GROUP BY Club HAVING COUNT(Dossard) > 2 Il est fréquent d’appliquer des alias aux fonctions de groupe. Toutefois, ces alias ne peuvent pas être référencés depuis le HAVING.
  • 15. SOUS-REQUÊTE Les expressions à l’intérieur d’une requête peuvent être remplacée par…une requête Si la sous-requête ne renvoie pas une valeur unique mais des n-uplets, alors il faut utiliser les opérateurs IN, EXISTS, ANY, ALL Parfois, la sous-requête peut être corrélée : elle ne s’exécute pas indépendamment  Ses valeurs dépendent alors de celles de la requête hôte,  Les alias de tables sont incontournables pour lever les ambiguïtés. SELECT * FROM Coureur WHERE Dossard < (SELECT MAX(Dossard) FROM Coureur) SELECT * FROM Coureur WHERE Club IN (SELECT Code FROM Club WHERE Pro?=Yes)
  • 16. EXÉCUTION DES REQUÊTES SQL est un langage déclaratif : il dit ce qu’il faut faire, mais pas comment le faire ! C’est le SGBD-R qui choisira la façon optimale d’exécuter votre requête. Néanmoins, l’ordre logique de traitement est grosso modo le suivant : 1. FROM 2. ON 3. JOIN 4. WHERE 5. GROUP BY 6. HAVING 7. SELECT 8. DISTINCT 9. ORDER BY