SQL
Généralités
Le SQL (Structured Query Language) est un langage de requête utilisé pour la manipulation des bases de données relationnelles.
Il a été créé au milieu des années 70 par IBM et commercialisé par Oracle en 1979.
L’intérêt du SQL réside dans les caractéristiques suivantes :
Normalisation
Il implémente le modèle relationnel, et les principaux organismes de normalisation le décrivent :
-
L’ANSI (American National Standards Institute) dans les documents ANSI 9075-1:1999, ANSI 9075-2:1999 et ANSI 9075-5:1999. Il est possible d’obtenir plus de détails sur les documents qui définissent la norme en se rendant sur le site Web de l’ANSI (http://webstore.ansi.org) ou sur le site Web de NCITS (National Comittee for Information Technology Standards) qui reprend une partie des standards ANSI dont le SQL (http://www.ncits.org).
-
L’ISO (International Organization for Standardization) dans les documents ISO/IEC 9075-1:1999, ISO/IEC 9075-2:1999 et ISO/IEC 9075-5:1999. Il est possible d’obtenir une copie des documents de normalisation sur le site Web de l’ISO : http://www.iso.ch/iso/iso_catalogue.htm.
Standard
Du fait de cette normalisation, la plupart des éditeurs de SGBDR intègrent le SQL à leurs produits (INFORMIX, DB2, MS SQL Server, SYBASE...).
Les données, requêtes et applications sont donc assez facilement portables d’une base à une autre.
Non procédural
Le SQL est un langage de requête qui permet à l’utilisateur de demander un résultat sans se préoccuper des moyens techniques pour trouver ce résultat. Un composant du moteur de la base (l’optimiseur) se charge de cette tâche.
Les instructions sont écrites dans un langage courant (l’anglais !).
Le SQL manipule aussi bien des ensembles d’enregistrements qu’un seul enregistrement, et permet l’utilisation du résultat dans une autre commande. On n’a donc pas besoin de structures de contrôle comme dans les langages de programmation courants (langages de troisième génération).
Universel
Le SQL peut être utilisé à tous les niveaux dans la gestion d’une base de données :
-
administration système,
-
administration de la base...
Description des objets
Dans l’utilisation d’une base de données, les premiers objets à manipuler sont les tables qui "contiennent" les données et les index qui permettent de meilleures performances aux requêtes.
Ces deux objets doivent être créés avant de commencer à manipuler les données elles-mêmes.
1. Les types de données
CHAR (n)
Chaîne de caractères de longueur fixe : n octects complétés à droite par des espaces (n<=2000).
VARCHAR2 (n)
Chaîne de caractères de longueur variable : n octets au maximum (n <= 4000 si le paramètre MAX_STRING_SIZE est égal à STANDARD ; n <= 32767 si le paramètre MAX_STRING_SIZE est égal à EXTENDED).
NCHAR (n)
Chaîne de caractères de longueur fixe : n octets complétés à droite par des espaces (n<=2000). Les caractères sont codés suivant le jeu de caractères national actif.
NVARCHAR2 (n)
Chaîne de caractères de longueur variable : n octets au maximum (n<= 4000 si le paramètre MAX_STRING_SIZE est égal à STANDARD ; n<= 32767 si le paramètre MAX_STRING_SIZE est égal à EXTENDED). Les caractères sont codés suivant le jeu de caractères national actif.
NUMBER (p,s)
Numérique avec une précision de p chiffres dont s décimales avec 1 <= p <= 38 et -84 <= s <= +127.
DATE
Date comprise entre 1er janvier 4712 avant JC et le 31 décembre 9999 après JC.
TIMESTAMP (p)
Données de type date (année, mois, jour, heure, minute et seconde) dans laquelle il est possible de préciser, à l’aide de la précision p, le nombre de chiffres significatifs pour les fractions de secondes. Par défaut ce nombre est 6.
TIMESTAMP(p) WITH TIME ZONE
Données de type TIMESTAMP avec le décalage horaire.
TIMESTAMP(p) WITH LOCAL TIME ZONE
Données de type TIMESTAMP WITH TIME ZONE qui sont stockées sur le serveur en tenant compte de la plage horaire du serveur, mais ces données sont affichées sur le poste client en tenant compte de la zone horaire définie au niveau de la session.
BLOB
Données binaires non structurées (jusqu’à 128 To selon la taille de bloc...
Manipulation des données
Les instructions du DML permettent l’ajout, la suppression, la modification et la visualisation des lignes dans les tables existantes.
1. Les instructions
Les instructions SQL manipulent des expressions. Ces expressions font référence à des noms d’objets de la base, à des constantes, comportent des appels à des fonctions standardisées et composent ces éléments avec des opérateurs.
Des expressions logiques (conditions) permettent également de définir la portée des instructions.
a. Expressions
Les termes des expressions peuvent être :
-
constantes caractères
exemple : ’chaîne de caractères’ ; ’Ecole Nantaise d’’Informatique’.
-
constantes littérales date (format dépendant de la langue configurée pour l’instance)
exemple : ’15-JAN-94’
-
constantes numériques
exemple : 10 ; -123.459 ; -1.26e+6
-
noms d’attribut de table
exemple : CLIENTS.NOCLI, ARTICLES.DESIGNATION
-
fonctions
exemple : SQRT(81) ; REPLACE(’IAGADIGI’, ’I’, ’OU’);SYSDATE
-
pseudo-colonnes
exemple : nomsequence.NEXTVAL ; ROWID.
b. Opérateurs
-
arithmétiques + - / * ( )
exemple : 1.15 * PRIX ; (2 * MTLIG)/5 ; SYSDATE +15
-
sur les chaînes de caractères : concaténation ||
exemple : ’Monsieur’|| NOM
c. Conditions
Les conditions mettent en jeu des expressions, des opérateurs de comparaison et des opérateurs logiques.
Opérateurs de comparaison
La valeur des expressions logiques peut être VRAI, FAUX ou INCONNU. Une comparaison sera évaluée comme INCONNU si au moins un de ses termes est NULL.
-
Comparaison simple
expression1 {=,!=,<>, <,<=, >, >=} expression2
-
Appartenance à un ensemble de valeurs
expression1 IN(expression2,...)
VRAI si expression1 apparaît au moins une fois dans la liste (expression2,...).
-
Appartenance à un intervalle de valeurs
expression1 BETWEEN expression2 AND expression3
VRAI si expression1 se situe entre les bornes expression2 et expression3, bornes comprises.
-
Comparaison par rapport à un format de chaîne de caractères
expression1 LIKE ’format’
Le format peut inclure les méta-caractères :
-
"%" pour désigner une suite de 0 à...
Traduction de l’algèbre relationnelle
La méthode de l’algèbre relationnelle permet de résoudre des extractions de données en créant des tables intermédiaires par l’utilisation d’opérateurs (UNION, RESTRICTION, JOINTURE, etc.). Cette méthode peut être traduite en SQL grâce à l’instruction SELECT qui permet toutes les opérations par ses différentes clauses (WHERE, GROUP BY, UNION, etc.), et par les instructions CREATE et INSERT qui permettent la gestion des tables intermédiaires.
1. Opérations
a. Restriction
La restriction permet de n’obtenir que les lignes répondant à une condition.
L’opération σ s (cond) se traduit par :
SELECT * FROM S WHERE cond ;
Exemple
Restriction sur le numéro de commande dans la table CDE = σCOMMANDES (NOCDE = 100) :
SQL> select * from COMMANDES where NOCDE = 100 ;
NOCDE NOCLI DATECDE ET
--------------------------------------
100 15 18/11/98 EC
SQL>
b. Calculs élémentaires
Le calcul élémentaire permet d’obtenir des colonnes calculées pour chaque ligne. L’opération π S (col, ..., nvcol = exp) se traduit par :
SELECT col, ..., expression FROM S ;
Exemple
Calcul de la valeur de stock π ARTICLES(REFART, DESIGNATION, VALSTK = (PRIXHT * QTESTK)) :
SQL> select REFART, DESIGNATION, (PRIX * QTESTK) from ARTICLES ;
REFA DESIGNATION (PRIX*QTESTK)
---- --------------------------- ---------------------
AB22 Tapis Persan 6250,5
CD50 Chaine HiFi 5147,8
ZZZZ Article bidon
AA00 Cadeau 0
AB03 Carpette 17400
AB Tapis
ZZ01 Lot de tapis 0
AB10 ...
SQL avancé
Le SQL permet l’utilisation d’autres objets que les tables et les index, afin de gérer les données ou de manipuler des requêtes.
La puissance de l’instruction SELECT permet d’autre part, de combiner les différentes clauses en une seule commande, et également d’imbriquer les requêtes.
Enfin, le SQL permet dans un environnement multi-utilisateur, de verrouiller les tables afin de préserver l’intégrité des données.
1. Les objets
a. Les objets View (vue)
Les vues sont des tables virtuelles présentant le résultat d’un SELECT.
L’un des intérêts de l’utilisation des vues vient du fait que la vue ne stocke pas les données, mais fait référence à une ou plusieurs tables d’origine à travers une requête SELECT, requête qui est exécutée chaque fois que la vue est référencée. De ce fait, toute modification de données dans les tables d’origine est immédiatement visible dans la vue dès que celle-ci est à nouveau exécutée.
Les cas d’utilisation des vues sont multiples :
-
Cacher aux utilisateurs certaines colonnes ou certaines lignes en mettant à leur disposition des vues de projection ou de restriction. Ceci permet de fournir un niveau de sécurité supplémentaire.
-
Simplifier l’utilisation de tables comportant beaucoup de colonnes, beaucoup de lignes, ou des noms complexes, en créant des vues avec des structures plus simples et des noms plus explicites.
-
"Sauvegarder" des requêtes fréquemment utilisées sous un nom.
-
Simplifier la saisie des instructions SQL pour les utilisateurs en masquant les jointures fréquemment utilisées.
Les vues, une fois créées, sont utilisables comme des tables dans les instructions DML, INSERT, SELECT, UPDATE, DELETE. Toutefois les mises à jour ne sont pas possibles si la vue comporte :
-
des instructions ensemblistes (UNION, INTERSECT, MINUS),
-
des fonctions de groupe,
-
des clauses GROUP BY, CONNECT BY, START WITH.
Une vue définie par une jointure supporte les instructions INSERT, UPDATE, DELETE si elle référence dans sa définition une table dont la (les) colonne(s) clé primaire apparaît (apparaissent)...