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

Le langage de requêtes SQL

Présentations similaires


Présentation au sujet: "Le langage de requêtes SQL"— Transcription de la présentation:

1 Le langage de requêtes SQL
Origines et Evolutions SQL : Structured Query Langage SQL1 (86): la base SQL1 (89): gestion de l'intégrité SQL2 (92): une norme SQL3 (98): l'intégration des évolutions Objets

2 1. Origines et évolutions
SQL - Structured Query Langage - est dérivé de l'algèbre relationnelle et de SEQUEL. Il a été intégré à SQL/DS, DB2, puis à ORACLE, INGRES… Il en existe trois versions normalisées, de la plus élémentaire à la plus complète et complexe : SQL1 (86) : la version minimale. SQL1 (89) : addendum de la précédente (contraintes d'intégrité). SQL2 (92) : langage complet à 3 niveaux. SQL3 : version étendue (objets, règles) et complète de ce langage, en cours de normalisation. La plupart des SGBD supportent des versions complètes de SQL1.

3 Opérations sur une bases de données
Opérations de base select, insert, update, delete Opérations complémentaires définition et modification de schémas, définition de contraintes d'intégrité, définition de vues, accord des autorisations, gestion de transactions.

4 Organisation du langage SQL
Le langage SQL est constitué de quatre sous ensembles : Le langage de définition de schémas (Tables, Vues, Droits). Le langage de manipulation de données (sélections et mises à jour). La spécification de modules (procédures). L'intégration aux langages de programmation (curseurs).

5 2. SQL1 - 86 Langage de définitions de données (LDD)
CREATE TABLE CREATE VIEW Langage de manipulation de données (LMD) SELECT OPEN INSERT FETCH UPDATE CLOSE DELETE Langage de contrôle de données (LCD) couple d'instructions GRANT et REVOKE couple d'instructions BEGIN et END TRANSACTION couple d'instructions COMMIT et ROLLBACK

6 Base de données Rappel : une base de données est une collection de tables et de vues dans un schéma. Exemples VITICULTEURS (NVT, NOM, PRENOM, VILLE, REGION) VINS (NV, CRU, MILLESIME, DEGRE, NVT, PRIX) BUVEURS (NB, NOM, PRENOM, VILLE) ABUS (NV, NB,DATE,QTE) GROS_BUVEURS (NB, NOM, PRENOM)

7 Exemples de requêtes (sélection)
Q1 : pour tous les vins, rechercher les crus, millésimes et quantité d'alcool contenus dans 1000 l, avec doubles éventuels. SELECT CRU, MILLESIME, (DEGRE/100)*1000 FROM VINS Q2 : recherche de tous les tuples de la table vin sans double. SELECT DISTINCT *

8 Exemples de questions (sélection)
Q3: recherche de crus des vins sans doubles. SELECT DISTINCT CRU FROM VINS Q4: recherche des noms des buveurs ayant bu du Beaujolais 87 ou 88. SELECT DISTINCT NOM FROM BUVEURS B, VINS V, ABUS WHERE B.NB = ABUS.NB AND ABUS.NV = V.NV AND CRU LIKE '%BEAUJOLAIS%' AND MILLESIME IN (1987, 1988)

9 Exemples de questions (jointure)
Q5 : noms et prénoms des buveurs de vins dont le cru commence par B, de degré inconnu ou compris entre 11 et 13. SELECT NOM, PRENOM FROM BUVEURS B, VINS V, ABUS A WHERE B.NB = A.NB AND A.NV = V.NV AND CRU LIKE "B%" AND (DEGRE BETWEEN 11 AND 13 OR DEGRE IS NULL) Q6 : noms des crus bus par un buveur au moins. SELECT DISTINCT CRU FROM VINS V WHERE EXISTS ( SELECT * FROM BUVEURS B, ABUS A WHERE B.NB = A.BNB AND A.NV = V.NV )

10 Exemples (calculs d'agrégats)
Q7: calcul du degré moyen pour chaque cru. SELECT CRU, AVG(DEGRE) FROM VINS GROUP BY CRU Q8 : calcul du degré moyen et du degré minimum pour tous les crus de 94 dont le degré minimum est supérieur à 12. SELECT CRU, AVG(DEGRE), MIN(DEGRE) WHERE MILLESIME = 1994 HAVING MIN(DEGRE) > 12

11 Exemples (union) Q9 : crus de degré supérieur à 13 ou du millésime 77.
SELECT CRU FROM VINS WHERE DEGRE > 13 UNION WHERE MILLESIME=1977

12 Exemple : question quantifiée
Q10 : recherche des noms des buveurs n'ayant commis que des abus en quantité supérieures ou égales à toutes les quantités bues. SELECT NOM FROM BUVEURS B, ABUS A WHERE B.NB=A.NB AND A.QUANTITE  ALL SELECT QUANTITE FROM ABUS

13 Exemple : question quantifiée (suite)
Q11 : recherche des buveurs ayant bu du Volnay. SELECT B.NOM FROM BUVEURS B WHERE EXISTS SELECT * FROM ABUS A, VINS V WHERE A.NV = V.NV AND A.NB = B.NB AND CRU="VOLNAY"

14 Exemple : question quantifiée (suite)
Q12 : recherche des buveurs n'ayant bu que du Volnay. SELECT B.NOM FROM BUVEURS B WHERE NOT EXISTS SELECT * FROM ABUS A, VINS V WHERE A.NV = V.NV AND A.NB = B.NB AND CRU="VOLNAY"

15 Select : forme générale
SELECT <liste de projection> FROM <liste de tables> [WHERE <critère de jointure> AND <critère de restriction>] [GROUP BY <attributs de partitionnement>] [HAVING <critère de restriction>] Restrictions arithmétique (=, <, >,   ) textuelle (LIKE) sur intervalle (BETWEEN) ou sur liste (IN) Possibilité de blocs imbriqués par : IN, EXISTS, NOT EXISTS, ALL, SOME, ANY

16 Insertion de tuple : INSERT
INSERT INTO <relation name> [( attribute [,attribute] … )] {VALUES <value spec.> [, <value spec.>] …  | <query specification>} Exemples INSERT INTO VINS (NV, CRU, MILLESIME) VALUES 112, "JULIENAS", NULL INSERT INTO BUVEURS (NB,NOM,PRENOM) SELECT NVT, NOM, PRENOM FROM VITICULTEURS WHERE VILLE LIKE '%DIJON%'

17 Mise à jour d'un tuple : UPDATE
UPDATE <relation name> SET <attribute = {value expression | NULL} [<attribute> = {value expression | NULL}] … [WHERE <search condition>] EXEMPLE UPDATE ABUS SET QTE = QTE * 1.1 WHERE ABUS.NV IN SELECT NV FROM VINS WHERE CRU = 'VOLNAY' AND MILLESIME = 1990

18 Suppression de tuple : DELETE
DELETE FROM <relation name> [WHERE <search condition>] EXEMPLE DELETE FROM ABUS WHERE NV IN SELECT NV FROM VINS WHERE DEGRE IS NULL

19 Utilisation de SQL depuis un langage
Intégration de deux systèmes de types utilisation d'un pré-compilateur et d'une librairie Passage de l'ensembliste au tuple à tuple utilisation de curseurs et Fetch Exemple Program PL/1-SQL EXEC SQL BEGIN DECLARE SECTION ; DCL VAR1 CHAR(20) ; DCL VAR2 INT ; EXEC SQL END DECLARE SECTION ; EXEC SQL DECLARE C1 CURSOR FOR SELECT …FROM … WHERE … :VAR1 EXEC SQL OPEN C1 ; DO WHILE SQLCODE = 0 BEGIN EXEC SQL FETCH C1 INTO :VAR2 SELECT SGBD Curseur

20 SQL1 - 89 : contraintes d'intégrité
Définition de valeurs par défaut CREATE TABLE VINS ( NV INT UNIQUE, CRU CHAR(10), ANNEE INT, DEGRE FIXED (5,2) , NVT INT, PRIX FIXED(7,2) DEFAULT 40 ) Définition de contraintes de domaine SALAIRE INT CHECK BETWEEN 6000 AND

21 SQL1 - 89 : intégrité référentielle
Clé primaire et contrainte référentielle CREATE TABLE VINS ( NV INT PRIMARY KEY, CRU CHAR(10), ANNEE INT, DEGRE FIXED (5,2) , NVT INT REFERENCES VITICULTEURS, PRIX DEFAULT 40 ) Référence en principe la clé primaire ici celle de VITICULTEURS.

22 La normalisation du langage SQL
Groupe de travail ANSI/X3/H2 et ISO/IEC JTC1/SC2 Documents ISO SQL : Database Language SQL X3.135 ISO ) SQL1 - 89 : Database Language SQL with Integrity Enhancement X3.168 ISO SQL : Database Language SQL2 X ISO Arguments pour : Réduction des coûts d'apprentissage. Portabilité et longévité des applications. Langage de communication normalisé entre les divers systèmes. Arguments contre : Manque de rigueur théorique. Affaiblit la créativité.

23 Position des éditeurs de logiciels
Problèmes : SQLCODE (0 ou <0 si erreur). ALTER / DROP Table. Dynamique SQL (Prepare, Execute). Méta-base normalisée. Modèles internes (index, espace,…). SQL VENDEUR.1 SQL SQL SQL STANDARD VENDEUR.3 VENDEUR.2

24 3. SQL2 On distingue trois niveaux :
SQL2 niveau entrée (entry) : SQL89 avec des manques. C'est le standard minimum à fournir par les éditeurs de logiciel. SQL2 niveau intermédiaire (intermediate) : intègre les compléments relationnels. SQL2 niveau complet (full level) : gadgets en suppléments.

25 SQL2 : niveau entrée (entry level)
Les codes réponses sont normalisés par ajout de la variable de retour SQLSTATE qui permet de spécifier un code d'erreur composé de deux caractères. Le renommage de colonnes résultats est possible (clause AS) Exemple SELECT CRU, AVG(DEGRE) AS MOYENNE FROM VINS GROUP BY CRU Mots clés du langage utilisables entre " " comme nom de table ou d'attribut. Exemple : CREATE TABLE "SELECT" (QUESTION CHAR(100)) Métabase normalisée (schémas).

26 SQL2 intermédiaire (intermediate level)
Définition de l'objet date avec les types : DATE (JJ/MM/AAAA), TIME (HH:MN:SS) et TIMESTAMP (concaténation des deux types précédents). Spécification d'intervalle de temps. Comparaison de dates possible Exemple SELECT * FROM ABUS WHERE DATE - 21/10/2002 < N

27 SQL2 intermédiaire (suite)
Possibilité de créer des domaines CREATE DOMAINE MONNAIE IS DECIMAL (5,2) DEFAULT (-1) CHECK (VALUE = -1 OR VALUE > 0) NOT NULL Exemple CREATE TABLE FACTURE (NOM CHAR(5), MONTANT MONNAIE

28 SQL2 intermédiaire (suite)
Support d'alphabets multiples et de différents jeux de caractères. Support de différents ordres de lettres (instruction Collate). Concaténation et extraction de chaînes de caractères. Facilité de conversion de types de données (cast). Supports de chaînes de caractères de longueur variable et calcul de la longueur d'une chaîne.

29 SQL2 intermédiaire : intégrité référentielle
Meilleur support de l'intégrité référentielle par des opérations correctives réalisées en cascade lors de mises à jour, selon les options : cascader les suppressions, rendre nul l'attribut référençant (NULLIFY). Syntaxe ON DELETE CASCADE ON DELETE SET NULL. Syntaxe de nommage de contraintes d'intégrité SET CONSTRAINTS NOM_DE_LA_CONTRAINTE { DEFERRED | IMMEDIATE} La contrainte ALL indique que toutes les contraintes sont concernées.

30 SQL2 intermédiaire : intégrité référentielle
Le niveau d'isolation d'une transaction peut être défini à partir de la variable mode 0 lecture non protégée (aucune isolation) 1 écriture protégée 2 lecture et écriture protégées 3 lectures et écriture exclusives Syntaxe SET TRANSACTION MODE

31 SQL2 intermédiaire : extension de l'algèbre relationnelle
Des opérations de l'algèbre relationnelles absentes de SQL1 sont introduites dans SQL2. Les expressions de la clause SELECT sont généralisées par introduction des opérations ensemblistes d'intersection (INTERSECT) et de différence (EXCEPT), union externe [OUTER] UNION avec complément des schémas de relation au même schéma par ajout de valeurs nulles aux tuples. Syntaxe de la jointure externe SELECT … FROM R1 [NATURAL] [{LEFT | RIGHT}] JOIN R2 [ON (A=B)], … WHERE …

32 SQL2 intermédiaire : extension de l'algèbre relationnelle (2)
Exemple : au départ, deux tables complémentaires NONBUVEURS (NB, NOM, PRENOM, ADRESSE) BUVEURS (NB, NOM, PRENOM, ADRESSE, TYPE) La requête suivante construit une table contenant buveur et non buveurs avec un type nul, à l'exception des gros buveurs. SELECT * FROM NONBUVEURS OUTER UNION (SELECT * FROM BUVEURS EXCEPT SELECT * FROM BUVEURS WHERE TYPE="GROS"

33 SQL2 intermédiaire : modification de schéma
Le langage SQL2 permet de modifier un schéma de table à partir de la commande ALTER. Syntaxe : ALTER TABLE <nom_table> <altération> Les diverses altérations autorisées sont les suivantes : ajout d'une colonne (ADD COLUMN) modification de la définition d'une colonne (ALTER COLOMN) suppression d'une colonne (DROP COLUMN) ajout d'une contrainte (ADD CONTRAINT) suppression d'une contrainte (DROP CONTRAINT) Exemple ALTER TABLES VINS ADD COLUMN REGION CHAR VARYING

34 SQL2 complet (full) Extension des outils de gestion des dates et du temps (possibilité de définir des zones d'heures, des intervalles de temps d'échelles variées). Expression de requêtes SELECT étendues avec correspondance de colonnes possibles (2 colonnes de noms différents peuvent être réunies en une seule unique). Possibilité d'utiliser la clause SELECT en argument d'une clause FROM pour construction de tables temporaires. Possibilité de vues concrètes permettant l'interrogation de vues peu modifiées. Contraintes d'intégrité multi-tables (clause CHECK). Contrôles d'intégrité différés.

35 4. SQL3 - apports Composants multiples Interface client
Framework, Foundation, Binding CLI, PSM Transactions, temporel, temps réel Interface client SQL/CLI du SAG (X/OPEN) Procédures stockées Persistent Stored Modules (PSM) Objets Gestion de la récursion Déclencheurs

36 Un standard en évolution
Proposition concurrente de l'ODMG Accord entre constructeurs de SGBD Objets. Support du modèle pur objet de l'OMG (Object Management Group). Variation de SQL traitant des collections imbriquées. Accord ANSI X3 H2 et ODMG Définition d'un langage d'interrogation intégrant modèle relationnel et modèle objet. Convergence relationnel-objet vers SQL3. SQL3 (version 1997) intègre L4G. modèle Objet. Gestion des règles (BD actives).

37 5. CONCLUSION Le langage SQL est un standard de plus en plus complet et de plus en plus utilisé. C'est la référence pour implémenter et utiliser chaque aspect des SGBD. Tout existant dans les propositions SQL2 ou SQL3, certains éditeurs de logiciels se permettent des fantaisies. Il existe donc encore des approximations et imitations incomplètes. C'est aujourd'hui le langage de communication inter-systèmes RDA, TP, SQL ACCESS GROUP (CLI, FAP). C'est le langage universel sur lequel s'appuient les progiciels. La question est de savoir si SQL réussira à intégrer l'objet.


Télécharger ppt "Le langage de requêtes SQL"

Présentations similaires


Annonces Google