Cours 4b: Introduction au SQL, le langage des SGBD Relationnels

Slides:



Advertisements
Présentations similaires
Bases de Données Avancées: Bases de Données Relationnelles
Advertisements

Manipulation des données dans SQL
Programme Introduction aux BD et aux SGBD Le modèle relationnel
Bases de données : modèlisation et SGBD
SQL - Subtilités.

Georges Gardarin 1 LE LANGAGE DE REQUETES SQL l Origines et Evolutions l SQL1 86: la base l SQL1 89: l'intégrité l SQL2 92: la nouvelle norme l SQL3 98:
Programme Introduction aux BD et aux SGBD Le modèle relationnel
Année universitaire Système dinformation Le SQL (Structured Query Language) langage dinterrogation dune base de données.
LE LANGAGE SQL : LDD La création de tables L’ordre CREATE CREATE TABLE nom_de_table (Nom_colonne Type_colonne, Nom_colonne Type_colonne,
LMD: Langage de Manipulation de Données
Développement d’applications web
Contrôles d'accès aux données
L’utilisation des bases de données
BASE DE DONNEES RELATIONNELLES
LE LANGAGE SQL Langage de manipulation de données (LMD)
Initiation aux bases de données et à la programmation événementielle
Bases de données et SGBD relationnels
SELECT {* | Expression [Alias] [,...] } FROM Table [WHERE Condition] [ORDER BY { Expression | Alias } [ ASC | DESC ] [NULLS FIRST | NULLS LAST ] [,...]
L’utilisation des bases de données
SQL Partie 3 : (LID : Langage d'interrogation de données)
Cours N°2 Base de Données & Langage SQL
EPID-CPI-ISAIP Philippe Bancquart - mise à jour 24/02/ page 1 SQL PHILIPPE BANCQUART.
1 LE LANGAGE DE REQUETES SQL Origines et Evolutions SQL1 86: la base SQL1 89: l'intégrité.
EPID-CPI-ISAIP Philippe Bancquart - mise à jour 24/02/ page 1 Procédures stockées CPI-SQLServer.
Cours N°2 Base de Données & Langage SQL
Bases de Données Avancées - TP2: SQL
Manipulation des données Requêtes simples
Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke1 SQL: Requêtes, Programmation et Triggers Chapitre 5, Sections
Initiation aux bases de données et à la programmation événementielle
Michel Tollenaere SQL et relationnel ENSGI Cours MSI 2A Relationnel et SQL version 1.4 du 25 septembre 2007 (ajout jointures) 1 Modèle relationnel Historique.
Christine Bonnet SOURCES : « Samples » dOracle, « Oracle 8 » R. Chapuis PRO*C – C ++
EPID-CPI-ISAIP Philippe Bancquart - mise à jour 24/02/ page 1 SQL jointure PHILIPPE BANCQUART.
Limiter et trier des données
Introduction Le SQL (Structured  Query Language) est un langage universel de gestion des bases de données. Il a une triple fonction : LDD Langage de Définition.
Systèmes d‘Informations
 CREATE TABLE  DROP TABLE  ALTER TABLE  INSERT  UPDATE  DELETE  SELECT interrogation 2 Instruction de mise à jour structure.
Partie2: Introduction à SQL LANGAGE DE REQUETES RELATIONNEL CHAPITRE 4: INTERROGATION DES BASES DE DONNÉES.
Le langage de requêtes SQL
Cours n°4M2. ESCE (S. Sidhom) Séminaire ( 6-12 Février 2007 ) Promo. M2 ESCE-Tunis 2006/07 Conception d’un système d'information sur Internet Architecture.
JDBC L'API JDBC est utilisée pour utilisée pour intéragir avec une base de données.
1 PHP 5 Notions fondamentales (cours #5) Formation continue – Cégep de Sainte-Foy.
DEFINITION DES DONNEES : schéma conceptuel. Schéma conceptuel instructiondescription CREATE TABLEcréation d'une relation ALTER TABLEmodification de la.
Sélection de colonnes (la projection)
Cours SQL.
Quinio1 Bases de données : modèlisation et SGBD Séance 3 B Quinio.
Cours n°4M1.ist-ie (S. Sidhom) UE 203 Promo. M1 IST-IE 2006/07 Conception d’un système d'information sur Internet Architecture trois-tiers : technologies.
Les vues Une vue: c’est une relation virtuelle. Définie par:
Structured Query Language 1/34. SQL Types de données Langage de Définition de Données (LDD) Langage de Manipulation de Données (LDM) Langage de Contrôle.
Les bases de données Séance 8 Jointures.
Le langage SQL.
Séance /10/2004 SGBD - Approches & Principes.
Initiation aux bases de données et à la programmation événementielle Cours N°2 : langage d’interrogation de données. (Les requêtes statistiques et autres).
Initiation aux bases de données et à la programmation événementielle
NIVEAU LOGIQUE Vues. Fenêtre dynamique sur la base Ses données proviennent d'autres tables ou d'autres vues.
INTRODUCTION AUX BASES DE DONNEES Base et métabase
Cours n°2 Implémentation et exploitation
Le Langage d ’ Interrogation des donn é es (LID) Module 2.
Bases de données – Cours 3
CONCEPTS BD - Synthèse journée 1 :
SQL Partie 2. SQL est un langage de manipulation de données SQL est un langage de manipulation de données (LMD), cela signifie qu'il permet de sélectionner,
Modélisation et utilisation Aurélien Marion1 Aurélien Marion
Bases de données : modèlisation et SGBD Séance 3.
1 Les bases de données Séance 5 -- Le Langage de Définition de Données ou la manœuvre de la structure de la base -- Le Langage de Manœuvre de Données.
Langages d’interrogation et de manipulation. N. ChaignaudGM4 - Base de données2 1. Algèbre relationnelle  Ensemble d’opérations permettant de manipuler.
1 Les bases de données Séance 6 L ’extraction de données Le SELECT.
Langage de manipulation de données (LMD)
Structured Query Language
Transcription de la présentation:

Cours 4b: Introduction au SQL, le langage des SGBD Relationnels Langage de requêtes (Structured Query Language ) Origine 1975 : QUEL 1976 : Structured English QUEry Langage (SEQUEL) par IBM 1981 : SQL par IBM Standard ANSI-ISO, Normes SQL-86,89, SQL2-92 SGBDR : Oracle, Sybase, DB2, Ingres, MS SQL Server, MySQL, MS Access ... Mais des différences subsistent selon le SGBD utilisé.

Plan du cours Requêtes de consultation de tables Projection, Sélection, Jointure Tri, Agrégation, Partitionnement Requêtes de Modification de tables Ajout Suppression Manipulation de tables, de vues et de bases de données

Projection Syntaxe SQL : SELECT [UNIQUE1] liste_attributs2 FROM Table ; 1 Permet d'éliminer les doublons (on trouvera aussi DISTINCT) 2 On peut mettre une étoile * pour demander tous les attributs On peut renommer un attribut en ajoutant AS NomAttribut

Projection - Exemples Soit la relation Étudiants(#num, nom, prénom, âge, ville, CodePostal) Afficher toute la relation Étudiant. SELECT * FROM Étudiants; Donner les noms, les prénoms et les âges de tous les étudiants. SELECT nom, prénom, age FROM Étudiants; Donner les numéros des étudiants dans une colonne nommée Numéro. SELECT #num AS Numéro FROM Étudiants;

Sélection Syntaxe SQL : SELECT * FROM table WHERE condition; La condition peut formée sur des noms d'attributs ou des constantes avec des opérateurs de comparaison : =, >, <, <=, >=, <>1 des opérateurs logiques : AND, OR, NOT des opérateurs : IN, BETWEEN+AND, LIKE, EXISTS, IS _ qui remplace un caractère et % qui remplace une chaîne de caractères 1 La différence est parfois notée !=

Sélection – Exemples Sur la relation Étudiants(#Num, Nom, Prénom, Age, Ville, CodePostal) Quels sont tous les étudiants âgés de 20 ans ou plus ? SELECT * FROM Étudiants WHERE (Age >= 20); Quels sont tous les étudiants âgés de 19 à 23 ans ? SELECT * FROM Étudiants WHERE Age IN (19, 20, 21, 22, 23); SELECT * FROM Étudiants WHERE Age BETWEEN 19 AND 23; Quels sont tous les étudiants habitant dans les Vosges ? SELECT * FROM Étudiant WHERE CodePostal LIKE '88%' ; Quels sont tous les étudiants dont la ville est inconnue/connue ? SELECT * FROM Étudiants WHERE Ville IS NULL ; SELECT * FROM Étudiants WHERE Ville IS NOT NULL ;

Produit Cartésien Syntaxe SQL : SELECT * FROM table1 [Alias1], ..., tablen [Aliasn],

-Jointure Syntaxe SQL : SELECT * Possibilité de Renommage des tables Syntaxe SQL : SELECT * FROM table1 [Alias1], ..., tablen [Aliasn], WHERE condition; Autre Syntaxe :SELECT * FROM table1 INNER JOIN table2 ON condition;

Jointure - Exemples Soient les relations Produit (#prod, nomProd, fournisseur, pu) DétailCommande (#cmd, #prod, pu, qte, remise) Quels sont les numéros de commande correspondant à l'achat d'une table ? Même requête, mais avec des alias pour les noms de relation : SELECT DétailCommande.#num FROM Produit, DétailCommande WHERE Produit.#prod =DétailCommande.#prod AND nomProd LIKE "%table%"; SELECT dc.#num FROM Produit p, DétailCommande dc WHERE p.#prod = dc.#prod AND nomProd LIKE "%table%";

Jointures par requêtes imbriquées Une jointure peut aussi être effectuée à l'aide d'une sous-requête. SELECT * FROM Stock WHERE #prod IN ( SELECT #prod FROM Produit) Principe : Le mot-clef "IN" permet ici de sélectionner les tuples #prod appartenant à la sous-requête. La sous-requête ne doit retourner qu'une colonne ! Les tables de sous-requêtes ne sont pas visibles depuis l'extérieur Sous-requête imbriquée !

Une requête complexe A partir des relations suivantes : Produit(#prod, libellé, pu) Stock(#prod, #dép, qté) Dépôt(#dép, adr, volume) Quels sont les produits qui sont en rupture de stock ? (sans et avec imbrication) SELECT p.#prod, p.libellé, d.#dép, d.Adr FROM Produit p, Dépôt d, Stock s WHERE p.#prod = s.#prod AND s.#dép = d.#dép AND s.qte <= 0 SELECT p.#prod, p.libellé, d.#dép, d.Adr FROM Produit p, Dépôt d WHERE p.#prod IN ( SELECT s.#prod FROM Stock s WHERE s.qté <= 0 AND p.#prod = s.#prod AND s.#dép = d.#dép )

Union, Intersection et Différence Table1  Table2 : SELECT liste_attributs FROM table1 UNION SELECT liste_attributs FROM table2 ; Table1  Table2 : SELECT liste_attributs FROM table1 INTERSECT Table1 - Table2 : SELECT liste_attributs FROM table1 EXCEPT

Tri de résultats Syntaxe : Cette clause se place derrière la clause WHERE ORDER BY attribut [ordre] [, attribut [ordre] ...] On peut préciser un ordre croissant ASC ou décroissant DESC. Exemple Trier Stock par numéro de produit croissant et par quantité décroissante SELECT * FROM Stock WHERE qte > 0 ORDER BY #prod ASC, qte DESC

Agrégation des résultats Il est possible d'utiliser des fonctions f d'agrégation dans le résultat d'une sélection. Syntaxe : SELECT f ( [ ALL | DISTINCT ] expression) FROM ... où f peut être COUNT nombre de tuples SUM somme des valeurs d'une colonne AVG moyenne des valeurs d'une colonne MAX maximum des valeurs d'une colonne MIN minimum des valeurs d'une colonne Pour COUNT, on peut aussi utiliser COUNT(*) Seul COUNT prend en compte les valeurs à NULL.

Fonctions d'agrégation - Exemples Quelle est la meilleure note ? Résultats (de Pierre) SELECT MAX(Note) FROM Résultats  15 Matière Coef Note Maths 4 15 Sc Nat 3 9 Sc Phy 12 Français 2 13 Sc Hum 11 Anglais 1 10 Sport Quelle est la plus mauvaise note ? SELECT MIN(Note) FROM Résultats  9 Quelle la somme pondérée des notes ? SELECT SUM(Note*Coef) FROM Résultats  193 Quelle est la moyenne (pondérée) de Pierre ? SELECT SUM(Note*Coef)/Sum(Coef) FROM Résultats  12,06 Dans combien de matières Pierre a-t-il eu plus de 12 ? SELECT COUNT(*) FROM Résultats WHERE Note > 12  2

Partitionnement des résultats Syntaxe GROUP BY liste_attributs HAVING condition avec fonction Cette clause regroupe les résultats par valeur selon la condition Dans l'ordre, on effectue la sélection SELECT le partitionnement GROUP BY on retient les partitions intéressantes HAVING on trie avec ORDER BY.

Partitionnement des résultats - Exemples Résultats (de Pierre) Quelle est la note moyenne pour chaque coefficient ? Matière Coef Note Maths 4 15 Sc Nat 3 9 Sc Phy 12 Français 2 13 Sc Hum 11 Anglais 1 10 Sport Coef Moyenne 1 11 2 12 3 10.5 4 15 SELECT coef, Avg(note) as Moyenne FROM Résultats GROUP BY coef; Quels sont les coefficients auxquels participe une seule matière ? SELECT coef FROM Résultats GROUP BY coef HAVING count(*)=1; Coef 4

Plan du cours Requêtes de consultation de tables Projection, Sélection, Jointure Tri, Agrégation, Partitionnement Requêtes de Modification de tables Ajout Suppression Manipulation de tables, de vues et de bases de données

Ajouts de tuples dans une relation Syntaxe : Pour insérer un tuple complètement spécifié : INSERT INTO Table VALUES (val1,..., valn); Pour insérer un tuple incomplètement spécifié : INSERT INTO Table (liste_attributs)VALUES (val1,..., valn); On peut insérer un tuple à partir d'une relation ayant le même schéma. INSERT INTO Table SELECT * FROM ...

Exemples d'insertion INSERT INTO Étudiants Sur les relations Étudiants (#Num, Nom, Prénom, Age, Ville, CodePostal) ClubThéâtre(#Num, Nom, Prénom) Ajouter l'étudiant Sylvain HEBON, 21 ans, habitant Nancy avec le numéro 634. INSERT INTO Étudiants VALUES (634, 'HEBON', 'Sylvain', 'Nancy', '54000', 21); Ajouter tous les étudiants Vosgiens dans le Club de Théâtre INSERT INTO ClubThéâtre SELECT #Num, Nom, Prénom FROM Étudiants WHERE CodePostal LIKE '88%';

Modification de tuples Syntaxe : UPDATE Table SET attribut1 = expr1, ..., attributn = exprn FROM ... WHERE ... Les expressions peuvent être une constante une valeur NULL une clause SELECT

Mise à jour - Exemple Augmenter d'un an l'age de tous les étudiants. Sur la relation Étudiants (#Num, Nom, Prénom, Age, Ville, CodePostal) Augmenter d'un an l'age de tous les étudiants. UPDATE Étudiants SET Age = Age + 1; On a appris que tous les étudiants de Bar-le-Duc ont déménagé à Nancy. UPDATE Étudiants SET Ville = 'Nancy', CodePostal = '54000' WHERE Ville = 'Bar-Le-Duc';

Suppression de Tuples Syntaxe : DELETE FROM Table [WHERE condition] Remarque : Si on supprime tous les tuples d'une relation, le schéma de relation existe toujours ! Exemple : Retirer de la liste tous les étudiants de plus de 22 ans. ! DELETE FROM Étudiants WHERE Age > 22;

Plan du cours Requêtes de consultation de tables Projection, Sélection, Jointure Tri, Agrégation, Partitionnement Requêtes de Modification de tables Ajout Suppression Manipulation de tables, de vues et de bases de données

Nb Jours depuis 1/1/1900 + Heure Types SQL Type Taille (Octets) Signification Int 4 Valeur Entière SmallInt 2 TinyInt 1 float 4/8 Valeur Décimale Char (longueur) Fixe (max 255) Chaîne de caractères VarChar (longueur) Var (max 255) Text Var (max 231-1) Image Chaîne binaire Type Taille (Octets) Signification Bit 1 Valeur Binaire Binary Fixe (max 255) Chaîne binaire Varbinary Var (max 255) Money 8 Valeur en $ DateTime 24 octets Nb Jours depuis 1/1/1900 + Heure

Création de table Syntaxe : CREATE TABLE nomTable ( Attribut Domaine [Contraintes ...], ... [Contraintes ... ] )

Création de table - Exemple Créer la table Stock1(Pièce, NbP, Fournisseur) CREATE TABLE Stock1 ( Pièce VARCHAR(20) NOT NULL, NbP INT, Fournisseur CHAR(20) NOT NULL, PRIMARY KEY (Pièce, Fournisseur) )

Modification et Suppression de Relation Modification de Schéma de relation (Syntaxe variable !) Exemple pour Oracle v6 : ALTER TABLE Table [ADD (définition_attribut | Contrainte), [définition_attribut | Contrainte] ... )] [MODIFY (définition_attribut [, définition_attribut ]... )] [DROP CONSTRAINT contrainte] Suppression complète d'une relation (et de son schéma) : DROP TABLE Table; Attention, toutes les données de la table sont perdues ! !

Vues et Relations temporaires Une vue est une relation non stockée dans la base de données mais recalculée à chaque utilisation. Syntaxe : CREATE VIEW NomVue AS Requête_de_définition1 Exemple : CREATE VIEW Personnes_Âgées AS SELECT * FROM Personnes WHERE Age > 70; La suppression s'effectue avec DROP VIEW NomVue; 1 La requête ne doit pas contenir de tris (ORDER BY).

Administration de Base de Données Création d'une base de données Syntaxe : CREATE DATABASE NomBdd; Destruction totale d'une base de données DROP DATABASE NomBdd; !