Vous êtes sur la page 1sur 39

Architecture client serveur Expos : Langage SQL

Plan
Introduction I. Historique.
II. III. IV. V.

02 03 04 06 08 27 33 39

Normes SQL.. Structure du langage Commandes SQL Comparaison des fonctions SQL sur quelques systmes de gestion de bases de donnes relationnelles

Conclusion Rfrences

Page 1

Architecture client serveur Expos : Langage SQL

Introduction
Devant laccroissement des collectes dinformations lectroniques en vue de diverses exploitations, il devenait urgent de mettre en place un systme capable dorganiser et de stocker un nombre considrable dinformations. En 1970, ce besoin a t vcu dans les laboratoires dIBM et a donn naissance un systme capable dentretenir les fichiers contenant les informations tout en masquant les dtails complexes et fastidieux lis leurs gestions, permettant ainsi lutilisateur daccder simplement aux informations via un langage dinterrogation. Cette premire tape a introduit de nouvelles notions comme les bases de donnes, le modle relationnel et le systme de gestion de base de donnes. Par la suite diverses socits ont propos leur solution de gestion des donnes, leur langage pour lextraction des donnes. Le langage SQL (Structured Query Language) (Langage de requtes Structur) est le fruit dannes de rflexion sur la problmatique de manipulation des donnes. Formalis et normalis, il est n dans les annes 1980 et a t rapidement adopt par la majorit des diteurs. Ses dernires normalisations lont fait sorienter vers ce que lon appelle dsormais le relationnel objet, cest--dire lintroduction de certains principes de la programmation objet au sein des bases de donnes relationnelles. La normalisation laisse la possibilit aux producteurs de systmes de gestion de bases de donnes (SGBD) d'y ajouter des instructions spcifiques et non normalises. En raison de cette possibilit, ainsi que de l'volution de la norme au cours des annes, les diteurs de SGBD ajoutent souvent des possibilits avant que celle-ci fassent objet de normes, ce qui provoque des variations dans la comprhension et l'interprtation qui est faite d'un code source en SQL par les diffrents logiciels de SGBD. Aprs un bref historique du langage SQL, nous donnerons des syntaxes de quelques commandes pour aboutir une comparaison de certaines fonctions dans des SGBD.

Page 2

Architecture client serveur Expos : Langage SQL

I. Historique
Comme beaucoup de technologies de linformatique aujourdhui matures, les bases de donnes relationnelles sont nes des travaux dIBM entre les annes 1960 et 1970. De nombreuses recherches ont t menes au cours de cette priode sur des modles de donnes hirarchiques, rseaux et relationnels. Le relationnel a t unanimement adopt par la suite et programm laide du langage SQL. La thorie sur laquelle repose SQL a t nonce par le professeur Edgar Frank Codd (1924-2003), un mathmaticien dOxford, alors quil travaillait comme chercheur pour IBM au laboratoire de San Jose. Larticle A relational model of data for large shared data banks , publi en juin 1970 dans la revue Association for Computing Machinery, fait toujours office de rfrence et a initi tous les travaux qui ont suivi et qui perdurent. Codd voulait crer un systme o linterrogation des donnes utilisait le vocable anglais. Les travaux de la NASA (National Aeronautics and space Adminstration) (Administration Nationale de laronautique et de lespace), sur la base de donnes modlisant les rochers rapports du voyage sur la lune, a aid au dveloppement de ce langage en lui donnant de la crdibilit. Ds 1974, IBM entamait un prototype de bases de donnes relationnelles appel System/R. Ce projet se termina en 1979, prouvant ainsi la viabilit dun tel systme. Le langage de programmation utilis par IBM pour System/R fut appel SEQUEL (Structured English Query Language) rebaptis par la suite SQL (Structured Query Language). Comme tout langage, SQL a eu ses concurrents, le plus connu fut QUEL du SGBD Ingres du dbut des annes 1980.

Page 3

Architecture client serveur Expos : Langage SQL

II. Normes SQL


Le langage SQL est normalis depuis 1986. Cette norme sest enrichie au fil du temps (publication X3.135-1986 de lANSI reprise par lISO peu de mois aprs : ISO 90751987). Cette premire mouture, appele SQL86 ou SQL1 (une centaine de pages), tait le rsultat de compromis entre constructeurs, mais fortement influence par le dialecte dIBM. En 1989, dimportantes mises jour furent faites en matire dintgrit rfrentielle (ANSI X3.135-1989 et ISO/IEC 9075:1989). La deuxime norme (appele SQL92 ou SQL2 dun volume denviron 600 pages) fut finalise en 1992. Elle dfinissait quatre niveaux de conformit : le niveau dentre (entry level), les niveaux intermdiaires (transitional et intermediate levels) et le niveau suprieur (full level). Les langages SQL des principaux diteurs sont tous conformes au premier niveau et ont beaucoup de caractristiques relevant des niveaux suprieurs. Les groupes de travail X3H2 de lANSI et WG3 de lISO se penchrent, partir de 1993, sur les extensions apporter la prcdente norme. Les optimistes prvoyaient SQL3 pour 1996 Rien ne se passa comme prvu. Il fallut attendre 1999 pour voir tablir le projet SQL:1999 appel communment SQL3 (volume de 1 600 pages lpoque). Ce retard fut probablement d aux difficults des nombreux protagonistes (Oracle, IBM, Microsoft, Digital, Computer Associates, etc.) remettre en cause leur mode de pense, et aux risques quils pressentaient de ne pouvoir assurer la compatibilit des bases de leurs clients. Les volutions de lancienne norme ne sont pas limites aux seules extensions objet. Bien dautres mcanismes ont t introduits dans ce projet (gographie, temps, rel, sries temporelles, multimdia, OLAP, donnes et routines externes). SQL:1999 est dsormais une norme (au sens International Standard de lISO) qui apparat dans le domaine Information technology Database languages SQL. Elle porte principalement la rfrence ISO/IEC 9075. Peu aprs, une nouvelle version de SQL (SQL:2003), apportant des modifications mineures, apparut. Ses apports concernent lauto-incrment des cls, de nouvelles fonctions dites analytiques, les colonnes calcules, lordre MERGE combinant UPDATE et INSERT et surtout un support complet de XML.

Page 4

Architecture client serveur Expos : Langage SQL

Depuis 2006, des modules ont t rviss et publis, mais il ny a pas encore proprement parler de norme. La norme internationale SQL est passe par un certain nombre de rvisions : Anne 1986 Nom ISO/CEI 9075:1986 Appellation Commentaires

SQL-86 ou dit par l'ANSI puis adopt par l'ISO en1987. SQL-87 SQL-89 ou Rvision mineure. SQL-1 SQL-92 ou Rvision majeure. SQL2

1989

ISO/CEI 9075:1989

1992

ISO/CEI 9075:1992

1999

Expressions rgulires, requtes rcursives, dclencheurs, types non-scalaires et quelques SQL-99 ou ISO/CEI 9075:1999 fonctions orientes objet (les deux derniers points SQL3 sont quelque peu controverss et pas encore largement implments). Introduction de fonctions pour la manipulation XML, window functions , ordres standardiss et ISO/CEI 9075:2003 SQL:2003 colonnes avec valeurs auto-produites (y compris colonnes d'identit). Ajout de quelques fonctions de fentrage (ntile, lead, lag, first value, last value, nth value), ISO/CEI 9075:2008 SQL:2008 limitation du nombre de ligne (OFFSET / FETCH), amlioration mineure sur les types distincts, curseurs et mcanismes d'auto incrments.

2003

2008

III. Structure du langage SQL


Page 5

Architecture client serveur Expos : Langage SQL

SQL est un langage compos de deux parties bien distinctes et, dans ces deux parties, de diverses subdivisions. La premire partie de SQL est constitue de la partie dclarative du langage, cest--dire dordres SQL que le SGBDR doit excuter. En dautres termes, on spcifie ce que lon veut obtenir ou faire, et cest la machine qui dcide comment elle doit lexcuter. La seconde partie est constitue dun langage plus classique de type procdural dans lequel on retrouve les notions de fonctions, mthodes, procdures, etc.

III.1 SQL dclaratif


La partie dclarative de SQL est, elle-mme, subdivise en quatre parties : Le DDL (Data Definition Language) ou LDD (Langage de Dfinition de Donnes), cest-dire les ordres SQL permettant de crer (CREATE), modifier (ALTER) ou supprimer (DROP) les objets de la base. Les instructions de manipulation des objets de la base - description de la structure, l'organisation et les caractristiques de la base de donnes - commencent avec les mots cls CREATE, ALTER ou DROP qui correspondent aux oprations d'ajouter, modifier ou supprimer un objet. Ces mots cls sont immdiatement suivis du type de lobjet manipuler - TABLE, VIEW, INDEX, Le DML (Data Manipulation Language) ou LMD (Langage de Manipulation de Donnes), cest--dire les ordres SQL permettant dajouter (INSERT), de modifier (UPDATE), de supprimer (DELETE) ou dextraire des donnes (SELECT). Les instructions de manipulation du contenu de la base de donnes commencent par les mots cls SELECT, UPDATE, INSERT ou DELETE qui correspondent respectivement aux oprations de recherche de contenu, modification, ajout et suppression. Divers mots cls tels que FROM, JOIN et GROUP permettent d'indiquer les oprations d'algbre relationnelle effectuer en vue d'obtenir le contenu manipuler.

Page 6

Architecture client serveur Expos : Langage SQL

Le DCL (Data Control Language) ou LCD (Langage de Contrle de Donnes), cest-dire les ordres SQL permettant de dfinir les privilges affrents aux utilisateurs (GRANT, REVOKE). Les mots cls GRANT et REVOKE permettent d'autoriser des oprations certaines personnes, d'ajouter ou de supprimer des autorisations. Enfin, le TCL (Transaction Control Language) ou LCT (Langage de Contrle des Transactions) permet de grer des transactions englobant des ordres des trois premires subdivisions. Les mots cls COMMIT et ROLLBACK permettent de confirmer ou annuler l'excution de transactions.

III.2 SQL procdural


PSM (Persistent Stored Module) : concerne les fonctions, procdures, mthodes et

dclencheurs (triggers) en tant quobjets de la base (donc stocks dans la base et par consquent persistants). CLI (Call Level Interface) : en fait, des API destines piloter des objets encapsulant des donnes dans des langages htes par lintermdiaire, la plupart du temps, dun middleware (BDE, dbExpress de Borland, OBDC, ADO, OleDB de Microsoft, JDBC, etc.). Embedded SQL : le lancement dordres SQL depuis un langage hte et la rcupration des donnes dans un programme via lutilisation de CURSOR.

Page 7

Architecture client serveur Expos : Langage SQL

IV.

Les commandes SQL


IV.1. Les commandes DDL (Data Definition Language)

Les commandes CREATE, ALTER, DROP, RENAME permettent de dfinir et de modifier la structure de la base de donnes. IV.1.1 Cration de base de donnes Une base de donnes dans le SGBD SQL Server contient au minimum : un fichier de donnes principal (dextension .mdf) o sont stockes les donnes ; un journal des transactions (dextension .ldf) o sont rpertories toutes les transactions. Lorsque lon cre une base, il faut donc prciser le nom, lemplacement et la taille de ces deux fichiers. Exemple : crons une base de donnes nomm "test" CREATE DATABASE test ON PRIMARY ( NAME = test_data, FILENAME = C:\Data\test.mdf, SIZE = 60MB, MAXSIZE = 70MB, FILEGROWTH = 1MB ) LOG ON ( NAME = test_log, FILENAME = D:\Log\test.ldf, SIZE = 15MB, MAXSIZE = 20MB, FILEGROWTH = 1MB ) IV.1.2 Cration de table SQL permet de crer des relations sous des tables dune base de donnes existante et de dfinir lors de la cration les contraintes dintgrit sur les attributs. La commande de cration permet de spcifier le nom de la table et de dfinir les lments de table correspondant aux colonnes et aux contraintes.
Page 8

-- le nom de la base -- le fichier de donnes principal -- nom logique -- emplacement et nom du fichier -- taille de dpart -- taille maximale -- increment -- le journal

Architecture client serveur Expos : Langage SQL

CREATE TABLE <nom-table> (colonne [, colonne] [, contrainte-de-relation] [, contrainte-de-relation ]) Colonne = nom-colonne type de donnes [dfaut] [contrainte-de-colonne] <nom de table>, nom-colonne : - chane de caractres (donc doit commencer par une lettre) simple, ou compos (un nom de schma suivi dun nom de table) Type de donnes : chane de caractre de longueur fixe ou variable, numrique, date. - chane de caractre de longueur fixe (sensible la casse) CHAR (<longueur>) [BYTE| CHAR] | NCHAR (<longueur>) la valeur par dfaut tant de longueur 1) - chane de caractre de longueur variable (sensible la casse) VARCHAR2 (<longueur>) [BYTE | CHAR | NVARCHAR2 (<longueur>) longueur obligatoire. LONG - Numrique Les numriques exacts (NUMBER et DECIMAL avec prcision, INTEGER et SMALLINT) Les numriques approchs (FLOAT, REAL et DOUBLE PRECISION) - Date DATE : toute date valide Dfaut : DEFAULT val val peut tre : - Littral - Expression - Fonction SQL Contrainte-de-colonne : contrainte dintgrit (CI) et CI-rf portant sur un seul attribut [CONSTRAINT contrainte] { [NOT] NULL |UNIQUE |PRIMARY KEY |REFERENCES [schma.] nom-table [(nom-col)][ON DELETE CASCADE]
|CHECK (condition)

} [DISABLE] Contrainte-de-relation: CI et CI-rf portant sur une ou plusieurs colonnes [CONSTRAINT contrainte]
Page 9

Architecture client serveur Expos : Langage SQL

UNIQUE (nom-col [, nom-col] |PRIMARY KEY (nom-col [, nom col]) |FOREIGN KEY (nom-col [, nom col]) REFERENCES [schma.] nom-table [(nom-col [, nom-col)][ON DELETE CASCADE] |CHECK (condition) } [DISABLE] Contraintes NOT NULL : valeur NULL impossible - uniquement en contrainte de colonne PRIMARY KEY : attribut(s) constituant la cl primaire - La valeur NULL nest pas autorise sur les attributs de la cl primaire, il est donc inutile de rajouter la contrainte NOT NULL - Si plusieurs attributs, alors obligatoirement contrainte de relation UNIQUE : attribut(s) dont la valeur est unique pour toute la table - NULL est autoris sauf si on prcise le contraire (contrainte NOT NULL explicitement demande) - Si la valeur NULL est autorise, plusieurs lignes peuvent avoir la valeur NULL sur cet attribut (unicit pour le NULL non vrifie) - Si plusieurs attributs, alors obligatoirement contrainte de relation FOREIGN KEY: attribut(s) constituant une cl trangre - NULL accept - REFERENCES: la prcision dattributs est optionnelle si identique aux attributs rfrencs - Si plusieurs attributs, alors obligatoirement contrainte de relation CHECK (condition) : la condition peut tre vrifie avec - Nom-col val, peut tre {=, <>, <, , >, } - Prdicat dintervalle : BETWEEN AND - Prdicat de comparaison de texte : LIKE - Test de nullit : NULL - Test dappartenance : IN - Interdit : rfrence des pseudo colonnes (CURRVAL, NEXTVAL, ), appel certaines fonctions (SYSDATE, ), requtes des valeurs dautres lignes Activation des contraintes ENABLE : contrainte active (par dfaut), toutes les donnes doivent la vrifier DISABLE : contrainte inactive
Page 10

Architecture client serveur Expos : Langage SQL

Exemple COMMANDE (NUM, CNOM, PNOM, QTE) PRIX (PNOM, FNOM, COUT) FOURNISSEUR (ID, FNOM, VILLE, SEXE, EMAIL) CREATE TABLE COMMANDE (NUM INT UNIQUE, CNOM CHAR(20) NOT NULL, PNOM CHAR(20) NOT NULL, QTE DEC (7,2) ); CREATE TABLE PRIX (PNOM CHAR(20) NOT NULL, FNOM CHAR(20) NOT NULL, COUT INT ); CREATE TABLE FOURNISSEUR (ID INT PRIMARY KEY, FNOM VARCHAR(20) NOT NULL, VILLE CHAR(20), SEXE CHAR(20) CONSTRAINT CK_SEXE CHECK (SEXE ='Masculin' OR SEXE = 'Fminin'), EMAIL VARCHAR(50) NOT NULL UNIQUE, CONSTRAINT CK_EMAIL CHECK (EMAIL LIKE ('%@%.%')) ); IV.1.3 Modification de table ALTER TABLE nom-table {clause-add | clause-modify | clause-drop} Clause-add : Ajout dattribut (s) et / ou de contrainte(s) ADD (colonne | contrainte-de-relation [colonne | contrainte-de-relation]) Clause-modify : Permet de modifier le type, la taille et la valeur par dfaut dun attribut MODIFY (nom-col [type] [DEFAULT expr] [NULL | NOT NULL] ) Clause-drop : Suppression de la vrification de la contrainte et de son stockage dans le dictionnaire des donnes. DROP [PRIMARY KEY | UNIQUE (nom-col [, nom-col]) | CONSTRAINT contrainte] [CASCADE]
Page 11

Architecture client serveur Expos : Langage SQL

CASCADE : suppressions en cascades des CI qui dpendent de la CI supprime (cls trangres par exemple) IV.1.4 Suppression de table DROP TABLE nom-table [CASCADE CONSTRAINTS] Supprime la table du dictionnaire et toutes les lignes, index, blocs physiques, vues CASCADE CONSTRAINTS : pour demander la suppression de toutes les contraintes dans les autres tables de la base qui font rfrence la cl primaire et aux cls uniques de la table supprime ; si on ne prcise pas CASCADE et sil y a des rfrences, alors message derreur. IV.1.5 Renommage de table RENAME ancien_nom TO nouveau_nom Tous les liens sont mis jour IV.1.6 Dfinition de vues SQL permet de dfinir les vues au niveau des schmas. Une vue est une table virtuelle calcule partir des tables de base par une question. CREATE [OR REPLACE] [FORCE | NOFORCE] VIEW view [(alias [, alias] ] AS subquery [WITH CHECK OPTION [CONSTRAINT contrainte]] [WITH READ ONLY] La vue est supprime par la commande DROP VIEW view

IV.2 Les commandes DML (Data Manipulation Language)


Les commandes SELECT, INSERT, UPDATE, DELETE permettent la slection et la mise jour des donnes de la base. IV.2.1 SELECT: Forme Gnrale SELECT <liste de projection> FROM <liste de tables> [WHERE <critre de jointure> AND <critre de restriction>] [GROUP BY <attributs de partitionnement>] [HAVING <critre de restriction>] [ORDER BY <attribut>]
Page 12

Architecture client serveur Expos : Langage SQL

Restriction : arithmtique (=, <, >, <> , , )) textuelle (LIKE) sur intervalle (BETWEEN) sur liste (IN) Possibilit de blocs imbriqus par : IN, EXISTS, NOT EXISTS, ALL, SOME, ANY IV.2.1.1 Clause SELECT Cette clause permet d'indiquer quelles colonnes, ou quelles expressions doivent tre retournes par l'interrogation. SELECT [DISTINCT] {expression [c_alias] |* ...] Expression valide - [[schma.] table.] attribut - texte - Nombre - Fonction [(argument)] - Combinaison de ces expressions Alias pour expressions / attribut - Renomme lentte dune colonne (affichage ou clause ORDER BY) - Utile si expression calcule - Suit immdiatement lexpression (mot-cl AS facultatif entre attribut et alias) - crire entre guillemets (") si les majuscules et minuscules doivent tre diffrencies, ou si la chane comporte des espaces ou caractres spciaux SELECT * FROM PRIX Ou SELECT PNOM, FNOM, COUT FROM PRIX _*_ signifie que toutes les colonnes de la table sont slectionnes. SELECT nlimine pas les duplications. Pour les liminer, on utilise la clause DISTINCT ou UNIQUE: si, dans le rsultat, plusieurs lignes sont identiques, une seule sera conserve. IV.2.1.2 Clause FROM La clause FROM donne la liste des tables participant l'interrogation. Il est possible de lancer des interrogations utilisant plusieurs tables la fois.
Page 13

Architecture client serveur Expos : Langage SQL

FROM table [t-alias] [, table [t-alias]] ... t-alias : renommage de la table le temps de la requte IV.2.1.3 Clause WHERE La clause WHERE permet de spcifier quelles sont les lignes slectionner dans une table ou dans le produit cartsien de plusieurs tables. Elle est suivie d'un prdicat (expression logique ayant la valeur vrai ou faux) qui sera valu pour chaque ligne. Les lignes pour lesquelles le prdicat est vrai seront slectionnes. SELECT PNOM, COUT AS PRIX DU PRODUIT FROM PRIX WHERE FNOM =JEAN IV.2.1.3.1 Conditions de slection . Attribut oprateur Valeur . Attribut oprateur Attribut Oprateur : =, <, >, , , <>. Utilisation des clauses BETWEEN, IN, LIKE, IS NULL SELECT PNOM FROM PRIX WHERE COUT BETWEEN 10000 AND 50000 La condition Y BETWEEN X AND Z est quivalente Y<=Z et X <= Y SELECT PNOM FROM PRIX WHERE COUT IN (SELECT 1000, 10000, 30000) SELECT COUT FROM PRIX WHERE PNOM LIKE B% Le littoral qui suit LIKE doit tre une chane de caractre avec ventuellement des caractres jokers. _ ___ remplace 1 caractre exactement _ _%_ remplace une chane de caractres de longueur quelconque, y compris de longueur nulle IV.2.1.3.2 Requtes imbriques simples
Page 14

Architecture client serveur Expos : Langage SQL

La jointure sexprime par deux blocs. SELECT FROM. WHERE imbriqus. Requte : Nom, Cot et fournisseurs des produits commands par Jean. SELECT PNOM, COUT, FNOM FROM PRIX WHERE PNOM IN (SELECT PNOM FROM COMMANDE WHERE CNOM = Jean) IV.2.1.3.3 Jointure Quand on utilise deux tables ou plus, on effectue en ralit des jointures entre ces tables. Une jointure permet donc de combiner les colonnes de plusieurs tables. Lorsque la jointure entre tables s'effectue en imposant l'galit des valeurs d'une colonne d'une table une colonne d'une autre table, on parle de jointure naturelle ou qui-jointure. On trouve aussi des jointures d'une table sur elle-mme. On parle alors d'auto-jointure. Il arrive que l'on doive procder des jointures externes, c'est--dire joindre une table une autre, mme si la valeur de liaison est absente dans une table ou l'autre. Dans certains cas, on peut procder des jointures htrognes, c'est--dire que l'on remplace le critre d'galit par un critre d'ingalit ou de diffrence. Exemple : SELECT a.PNOM, COUT, FNOM FROM PRIX AS a JOIN COMMANDE AS b ON a.PNOM = b.PNOM -- condition de jointure WHERE CNOM = Jean -- condition de slection IV.2.1.3.4 Requtes imbriques plus complexes Requte : Fournisseurs de briques un cot infrieur au cot des tuiles. SELECT FNOM FROM PRIX WHERE PNOM = "Briques" AND COUT < ANY (SELECT COUT FROM PRIX WHERE PNOM = "Tuiles") Requte : Fournisseurs qui fournissent au moins un produit. SELECT FNOM FROM FOURNISSEUR WHERE EXISTS (SELECT * FROM PRIX
Page 15

Architecture client serveur Expos : Langage SQL

WHERE FOURNISSEUR.FNOM = PRIX.FNOM) IV.2.1.3.5 Oprations ensemblistes UNION, INTERSECT, MINUS Requte: Produits commands qui cotent plus que 1000F ou ceux qui sont commands par Jean. SELECT PNOM FROM PRIX WHERE COUT > 1000 UNION SELECT PNOM FROM COMMANDE WHERE CNOM = Jean IV.2.1.4 Fonctions de calcul COUNT : Compte le nombre de n-uplets sans limination des dupliqus ni des valeurs nulles Requte: Nombre de fournisseurs de Porto-Novo SELECT COUNT (*) FROM FOURNISSEUR WHERE VILLE ="Porto-Novo" Requte: Nombre de fournisseurs qui fournissent actuellement des produits SELECT COUNT (DISTINCT ou UNIQUE FNOM) FROM PRIX SUM : Permet de faire la somme. Requte : Quantit totale de briques commandes SELECT SUM (QTE) FROM COMMANDE WHERE PNOM = Briques AVG : Calcul la moyenne Requte: Fournisseurs des briques un prix infrieur au cot moyen des briques SELECT FNOM FROM PRIX WHERE PNOM = BRIQUE AND COUT < (SELECT AVG (COUT) FROM PRIX WHERE PNOM = Brique) IV.2.1.5 Autres fonctions: MIN MAX IV.2.1.6 Claude GROUP BY GROUP BY exp1, exp2,...
Page 16

Architecture client serveur Expos : Langage SQL

Cette clause permet de prciser les attributs de partitionnement des relations dclares dans la clause FROM. Elle se place juste aprs la clause WHERE, ou aprs la clause FROM si la clause WHERE n'existe pas. Requte : Requte pour chaque produit fourni, son cot moyen SELECT PNOM AVG (COUT) FROM PRIX GROUP BY PNOM. IV.2.1.7 Clause HAVING HAVING prdicat Cette clause permet dliminer les partitionnements comme la clause WHERE limine des n-uplets. Elle sert prciser quels groupes doivent tre slectionns. Elle se place aprs la clause GROUP BY. Le prdicat suit la mme syntaxe que celui de la clause WHERE. Cependant, il ne peut porter que sur des caractristiques de groupe : fonction de groupe ou expression figurant dans la clause GROUP BY. Requte : Les produits fournis et leur cot moyen pour les fournisseurs dont le sige est Cotonou seulement si le cot minimum du produit est >1000 SELECT PNOM, AVG (COUT) FROM PRIX, FOURNISSEUR WHERE VILLE = COTONOU AND PRIX.FNOM = FOURNISSEUR.FNOM GROUP BY PNOM HAVING MIN (COUT) > 1000 IV.2.1.8 Clause ORDER BY Les lignes constituant le rsultat d'un SELECT sont obtenues dans un ordre indtermin. La clause ORDER BY prcise l'ordre dans lequel la liste des lignes slectionnes sera donne. ORDER BY exp1 [DESC], exp2 [DESC], ... L'option facultative DESC donne un tri par ordre dcroissant. Par dfaut, l'ordre est croissant. IV.2.1.9 Limiter le nombre de lignes renvoyes
Page 17

Architecture client serveur Expos : Langage SQL

Aucune mthode standardise ne permet de limiter le nombre de lignes renvoyes par un select mais la plupart des SGBDs offre cette facilit. Voici quelques exemples qui montrent comment quelques SGBDs limitent 10 le nombre de lignes renvoyes : Avec MySQL et Postgresql : SELECT PNOM, COUT FROM PRIX LIMIT 10 Avec Oracle: SELECT PNOM, COUT FROM PRIX WHERE ROWNUM <= 10 Avec SQL Server: SELECT TOP 10 PNOM, COUT FROM PRIX

IV.2.2 Insertion de donnes


Insertion de lignes dans une table Via formulaire o via requtes INSERT INTO nom-table [(nom-col [, nom-col ...])] {VALUES (constante [constante]) | subquery} La liste des colonnes : - Contient des noms dattributs de la table - Si un attribut de la table est omis dans la liste, il prend la valeur par dfaut, NULL sinon (si autoris) - Si aucun nom dattribut nest donn, la clause VALUES ou la sous requte doit fournir une valeur pour chaque attribut de la table suivant lordre du schma Clause VALUES : spcifie un n-uplets de valeurs insrer dans la relation - Avec cette clause, un seul n-uplet peut tre insr la fois - Sous-requte : instruction SELECT qui renvoie les n_uplets insrer Exemple : INSERT INTO PRIX (PNOM, FNOM, COUT) VALUES (Bois, PAUL, 20000)

IV.2.3 Mises jour de donnes


Page 18

Architecture client serveur Expos : Langage SQL

La commande UPDATE permet de modifier les valeurs d'un ou plusieurs champs, dans une ou plusieurs lignes existantes d'une table. UPDATE nom-table SET {nom-col = {expression | (subquery) } [ (nom-col [, nom-col]) = (subquery) } [WHERE condition] Mises jour des attributs cits des lignes qui vrifient la condition, ou de toutes les lignes si la condition est omise.

IV.2.4 Suppression de donnes


L'ordre DELETE permet de supprimer des lignes d'une table. DELETE FROM nom-table [WHERE condition] Suppression des lignes qui satisfont la condition. Pas de condition, suppression de toutes les lignes

IV.3 Les commandes DCL (Data Control Language)


Les commandes GRANT et REVOKE permettent de contrler la scurit et les accs aux donnes.

IV.3.1 Les Droits daccs


La gestion des droits daccs aux tables est dcentralise. Chaque crateur de table obtient tous les droits daccs cette table en particulier le droit deffectuer la slection (SELECT), linsertion (INSERT) la suppression (DELETE), la mise jour (UPDATE) et aussi de rfrencer la table dans une contrainte avec la clause REFERENCE. Il peut ensuite passer ses droits slectivement dautres utilisateurs ou tout le monde (PUBLIC). Un droit peut tre pass avec le droit de le transmettre ou non. Cest la clause WITH GRANT OPTION GRANT {priv_objet [, priv_obj] | ALL} [(col)] ON objet TO {user| rle | PUBLIC} [WITH GRANT OPTION]
Page 19

Architecture client serveur Expos : Langage SQL

- ALL: tous les privilges objets - Col: colonnes dune table ou vue pour lesquelles le privilge est accord - TO : dsigne le bnficiaire du privilge - PUBLIC : privilge accord tous les utilisateurs - WITH GRANT OPTION : le bnficiaire du privilge (user ou PUBLIC) peut son tour transmettre le privilge obtenu dautres utilisateurs ou rles. Les cycles sont interdits dans la propagation des privilges.

IV.3.2 Suppression de privilge objets


REVOKE {priv [, priv] | ALL ON objet FROM {user [, user] | role | PUBLIC} [CASCADE CONSTRAINTS] CASCADE CONSTRAINTS: ncessaire pour supprimer toutes les contraintes dintgrit rfrentielles demandes sur lobjet laide du privilge qui avait t accord. Linstruction REVOKE peut tre excute tout moment. Suppression du privilge : - Pour lutilisateur nomm dans REVOKE - Aux autres utilisateurs de la base qui lutilisateur nomm avait propag le privilge (en utilisant son droit WITH GRANT OPTION)

IV.4 Les commandes TCL (Transaction Control Language)


Les commandes transactionnelles permettent de contrler des transactions se droulant dans un systme de gestion de base de donnes relationnelle (SGBDR). Les transactions sont des squences de tches s'effectuant dans un ordre logique par l'intermdiaire de l'utilisateur ou d'une automatisation. Les tches peuvent tre essentiellement des commandes DML : d'insertion (INSERT), de suppression (DELETE) ou de modification (UPDATE) d'objets dans une base de donnes. Ces diverses tches peuvent tre annules en cours d'excution puisqu'elles possdent un commencement et une fin.
Page 20

Architecture client serveur Expos : Langage SQL

Au terme de la tche, il est ncessaire de sauvegarder les changements. Toutefois, aucun enregistrement n'est effectu si la tche a chou pour une raison quelconque. Les principales commandes transactionnelles pour contrler ces squences sont : {SET | BEGIN} TRANSACTION; dtermine le dbut d'une transaction. BEGIN est utilise sous SQL Server. COMMIT [WORK]; enregistre les modifications produites par des transactions. ROLLBACK{ [WORK | TO nom_point] }; annule les modifications qui n'ont pas t enregistres prcdemment. SAVEPOINT nom_point; insre un point de sauvegarde dans la liste de transactions, servant en conjonction avec ROLLBACK pour une annulation jusqu' un point prcis. La commande SAVEPOINT vite une annulation complte des transactions par la commande ROLLBACK. Transactions... SAVEPOINT nom_point Transactions... ROLLBACK TO nom_point; D'ailleurs, une commande spcifique permet de supprimer des points de sauvegardes crs par la commande SAVEPOINT. RELEASE SAVEPOINT nom_point; Exemple BEGIN TRANSACTION MYTRAN INSERT INTO COMMANDE (NUM, PNOM, CNOM, QTE) VALUES (1, 'TOLES', 'JEAN', 30000) INSERT INTO COMMANDE (NUM, PNOM, CNOM, QTE) VALUES (2, 'TUILES', 'JEAN', 5000)
Page 21

Architecture client serveur Expos : Langage SQL

INSERT INTO COMMANDE (NUM, PNOM, CNOM, QTE) VALUES (3, 'TOLES', 'PIERRE', 50000) IF @@ERROR<>0 ROLLBACK TRANSACTION MYTRAN ELSE COMMIT TRANSACTION MYTRAN

IV.5 Les procdures stockes


Les procdures stockes contiennent du code SQL compil, permettant d'excuter des requtes lourdes ou des instructions rgulirement utilises sur des bases de donnes. Les procdures stockes sont conserves dans la base de donnes dans une forme excutable et sont capables d'appeler d'autres procdures ou fonctions comme d'tre appeles par d'autres programmes. A l'instar des procdures des langages de programmation, outre qu'elles soient composes de diverses instructions, les procdures stockes sont capables de recevoir des paramtres d'entre et de retourner des valeurs en sortie. La cration des procdures stockes s'effectue par l'intermdiaire de l'instruction CREATE PROCEDURE. Syntaxe pour SQL Server CREATE PROC [ EDURE ] nom_procedure [ ; nombre ] [ { @parametre type_donnee } [ VARYING ] [ = valeur_defaut ] [ OUTPUT ] ] [ ,...n ] [ WITH { RECOMPILE | ENCRYPTION | RECOMPILE , ENCRYPTION } ] [ FOR REPLICATION ] AS instructions_SQL... GO

Page 22

Architecture client serveur Expos : Langage SQL

La clause VARYING, applicable aux paramtres de type CURSOR, indique le jeu de rsultats pris en charge. La clause OUTPUT permet de retourner la valeur aux instructions appelantes. L'instruction WITH RECOMPILE spcifie que la procdure est recompile l'excution sans utiliser le cache pour le plan de la procdure. L'option RECOMPILE est gnralement utilise pour des valeurs temporaires ou atypiques sans remplacer le plan d'excution plac en mmoire cache. La clause WITH ENCRYPTION indique un cryptage de l'entre de la table syscomments contenant le texte de l'instruction CREATE PROCEDURE. L'argument ENCRYPTION permet d'viter la publication de la procdure dans le cadre de la rplication SQL Server. La clause FOR REPLICATION indique que la procdure stocke doit tre excute lors de la modification de la table concerne par un processus de rplication. La clause AS indique les actions entreprises par la procdure. L'instruction GO signale la fin d'un jeu d'instructions. Syntaxe pour Oracle CREATE [OR REPLACE] PROCEDURE [schema .] procedure [ ( argument [ IN | OUT | IN OUT ] [ NOCOPY ] type_donnee [, argumentN [ IN | OUT | IN OUT ] [ NOCOPY ] type_donnee] ) ] [ AUTHID { CURRENT_USER | DEFINER }] { IS | AS } { instruction_pl/sql | instruction_langage }; La commande OR REPLACE recre la procdure stocke si elle existe dj. La clause OUT permet de retourner la valeur aux instructions appelantes. La clause IN est utilise pour spcifier une valeur pour l'argument en appelant la procdure. La clause AS (dprcie) ou IS indique les actions entreprises par la procdure.
Page 23

Architecture client serveur Expos : Langage SQL

Les procdures stockes peuvent tre appeles au moyen de l'instruction EXECUTE (SQL Server) ou CALL (Oracle) partir d'une autre procdure ou d'un lot d'instructions. SQL Server peut utiliser une abrviation EXEC. -- SQL Server EXECUTE Procedure @Parametre = Valeur, ..., @ParametreN = ValeurN -- Oracle CALL Procedure(Valeur, ..., ValeurN) Exemple -- Instruction pour SQL Server CREATE PROCEDURE ajout_enregistrement @proc_pnom char(20), @proc_fnom char(20), @proc_cout int AS INSERT INTO PRIX (pnom, fnom, cout) VALUES (@proc_pnom, @proc_fnom, @proc_cout) GO -- Instruction pour Oracle CREATE PROCEDURE Ajout_Enregistrement ( proc_pnom char(20), proc_fnom char(20), proc_cout int ) IS BEGIN INSERT INTO PRIX (pnom, fnom, cout) VALUES (proc_pnom, proc_fnom, proc_cout END; -- Utilisation -- Sous SQL Server execute Ajout_Enregistrement 'Fer', 'JACOB', 100000 -- Sous Oracle call Ajout_Enregistrement('Fer', 'JACOB', 100000);
Page 24

Architecture client serveur Expos : Langage SQL

IV.6 Les dclencheurs (Triggers)


Les triggers (dclencheurs en franais) ressemblent aux procdures stockes car ils sont eux aussi compils et enregistrs dans le dictionnaire des donnes de la base et ils sont le plus souvent crits dans le mme langage. La diffrence est que leur excution est dclenche automatiquement par des vnements lis des actions sur la base. Les vnements dclencheurs peuvent tre les commandes LMD insert, update, delete ou les commandes LDD create, alter, drop. Une table peut comporter plusieurs dclencheurs d'un type donn, condition que chacun possde un nom diffrent. Cependant, un dclencheur donn ne peut tre assign qu' une seule et unique table tout en s'appliquant la fois, l'insertion, la mise jour et la suppression d'enregistrements sur la table en question. Une table ne peut possder qu'un seul dclencheur INSTEAD OF d'un type donn. Les dclencheurs se produisent soit aprs (AFTER), soit avant (BEFORE) soit la place (INSTEAD OF) d'une action DML. Un dclencheur sur INSERT s'excute chaque opration d'insertion lance par l'utilisateur ou par un programme. Lors d'une insertion, l'enregistrement est insr la fois dans la table cible et dans une table temporaire dnomme inserted. Une telle table peut permettre de vrifier la cohrence des enregistrements. Un dclencheur sur DELETE s'excute chaque opration de suppression lance par l'utilisateur ou un programme. Lors d'une suppression, l'enregistrement est supprim physiquement de la table cible et insr dans une table temporaire dnomme deleted. Cela peut permettre de rcuprer l'enregistrement supprim. Un dclencheur sur UPDATE s'excute chaque opration de mise jour lance par l'utilisateur ou par un programme. Lors d'une mise jour, l'ancien enregistrement est supprim et insr dans la table temporaire deleted, tandis que le nouveau est insr la fois dans la table cible et dans la table inserted. La syntaxe des dclencheurs sous SQL Server : CREATE TRIGGER nom_dclencheur ON { nom_table | nom_vue } [ WITH ENCRYPTION ]
Page 25

Architecture client serveur Expos : Langage SQL

{ { { FOR | AFTER | INSTEAD OF } { [ INSERT ] [,] [ UPDATE ] [,] [ DELETE ] } [ WITH APPEND ] [ NOT FOR REPLICATION ] AS } instruction_SQL...
} }

La suppression des dclencheurs s'effectue par l'intermdiaire de l'instruction DROP. DROP TRIGGER nom_dclencheur [ , nom_dclencheurN ] La modification des dclencheurs s'effectue par l'intermdiaire de l'instruction ALTER. La syntaxe complte de la commande ALTER TRIGGER est en fait identique dans le cas d'Oracle ou de SQL Server celle de CREATE TRIGGER. ALTER TRIGGER nom_dclencheur_existant ON nom_table FOR INSERT, UPDATE, DELETE AS instruction_SQL... Tous les dclencheurs (ALL) ou certains peuvent tre activs (ENABLE) ou dsactivs (DISABLE) au moyen de l'instruction ALTER TABLE. ALTER TABLE table { ENABLE | DISABLE } TRIGGER { ALL | nom_dclencheur [ , nom_dclencheurN ] } Exemple CREATE TABLE tbl_produit ( nom VARCHAR(20), identificateur INTEGER ) GO INSERT tbl_produit SELECT 'dentifrice', 1 UNION SELECT 'savon', 2 UNION SELECT 'savon', 0 UNION SELECT 'brosse dent', 3 UNION SELECT 'brosse dent', 0 UNION SELECT 'rasoir', 4 UNION SELECT 'mousse raser', 5 UNION SELECT 'serviette', 6 UNION
Page 26

Architecture client serveur Expos : Langage SQL

SELECT 'serviette', 0 UNION SELECT 'peigne', 7 UNION SELECT 'brosse cheveux', 8 GO CREATE TRIGGER declencheur_suppression ON tbl_produit FOR DELETE AS SELECT nom AS "Lignes supprimer" FROM deleted GO CREATE TRIGGER declencheur_insteadof ON tbl_produit INSTEAD OF DELETE AS DELETE tbl_produit FROM tbl_produit INNER JOIN deleted ON tbl_produit.nom = deleted.nom WHERE tbl_produit.identificateur = 0 GO DELETE tbl_produit WHERE nom IN ('brosse dent', 'serviette', 'savon') GO SELECT * FROM tbl_produit Cet exemple met en exergue le processus permettant de faire appel diffrents types de dclencheurs au sein d'une table. Le premier dclencheur FOR DELETE s'excute lors d'une suppression en slectionnant les lignes supprimes partir de la table temporaire deleted. Le second Trigger se dclenche et excute ses propres instructions la place de la commande de dclenchement DELETE afin d'effectuer une comparaison entre les noms de produits sur les deux tables tbl_produit et deleted pour ensuite supprimer les enregistrements possdant un identificateur gal zro.

IV.7 Les curseurs


Un curseur SQL reprsente une zone de mmoire de la base de donnes o la dernire instruction SQL est stocke. Syntaxe sous SQL Server DECLARE nom_curseur [INSENSITIVE] [SCROLL] CURSOR FOR instruction_slection [FOR {READ ONLY | UPDATE [OF nom_colonne [ ,...n ] ] } ]
Page 27

Architecture client serveur Expos : Langage SQL

Syntaxe sous Oracle DECLARE CURSOR nom_curseur [(paramtre [, paramtre]...)] [RETURN return_type] IS instruction_slection; Un curseur s'ouvre par l'intermdiaire de la commande OPEN suivi du nom du curseur et de ses ventuels arguments. OPEN nom_curseur[(liste_arguments...)]; La commande FETCH permet de parcourir un enregistrement du curseur ouvert. L'ensemble des enregistrements d'un curseur peut tre parcouru l'aide d'une structure itrative. @@FETCH_STATUS retourne l'tat de la dernire instruction FETCH applique au curseur en cours d'utilisation. Les valeurs 0, -1 et -2 indiquent respectivement si l'instruction FETCH a russi ou a choue et si la ligne recherche n'a pas t trouve. L'attribut Oracle %NOTFOUND retourne FALSE si la dernire instruction FETCH renvoie un enregistrement ou TRUE en cas d'chec. Suite la fin de son utilisation, le curseur peut tre ferm afin de ne plus consommer de ressources. Il est galement possible de dsallouer le curseur. CLOSE nom_curseur; -- Exemple SQL Server DESALLOCATE nom_curseur; -- Exemple Oracle DESALLOCATE CURSOR nom_curseur; Exemples -- Dclaration du curseur DECLARE mycursor CURSOR LOCAL FOR SELECT NUM, PNOM, QTE FROM COMMANDE WHERE CNOM='Jean' -- Ouverture du curseur OPEN mycursor -- Premiere recuperation FETCH NEXT FROM mycursor
Page 28

Architecture client serveur Expos : Langage SQL

-- puis on boucle tant qu'il reste des lignes rcuprer WHILE @@FETCH_STATUS=0 BEGIN -- ceci est excut pour chaque ligne du curseur FETCH NEXT FROM mycursor END -- fermeture et dchargement du curseur CLOSE mycursor DEALLOCATE mycursor

IV.8 PL/SQL
PL/SQL (Procedural Language / Structured Query Language) est un langage procdural propritaire cr par Oracle et utilis dans le cadre de bases de donnes relationnelles. Il permet de combiner des requtes SQL et des instructions procdurales (boucles, conditions...), dans le but de crer des traitements complexes destins tre stocks sur le serveur de base de donnes (objets serveur), comme par exemple des procdures stockes ou des dclencheurs. Les dernires volutions proposes par Oracle reposent sur un moteur permettant de crer et grer des objets contenant des mthodes et des proprits.

IV.8.1 Structure dun programme PL/SQL


La structure de base dun programme PL/SQL est celle de bloc (possiblement imbriqu). Il a gnralement la forme suivante: DECLARE /* section de dclaration */ BEGIN /* corps du bloc de programme Il sagit de la seule zone dont la prsence est obligatoire */ EXCEPTION /* gestion des exceptions */ END;

IV.8.2 Structure de contrle


Comme nimporte quel langage procdural, PL/SQL possde un certain nombre de structures de contrles volues comme les branchements conditionnels et les boucles.
Page 29

Architecture client serveur Expos : Langage SQL

IV.8.2.1 Les branchements conditionnels


IF <condition> THEN commandes; [ ELSE IF <condition> THEN commandes;] [ ELSE commandes; ] END IF; Exemple IF nomEmploye=TOTO THEN salaire:=salaire*2; ELSE IF salaire>10000 THEN salaire:=salaire/2; ELSE salaire:=salaire*3; END IF;

IV.8.2.2 Les boucles


LOOP commandes; END LOOP; Au moins une des instructions du corps de la boucle doit tre une instruction de sortie : EXIT WHEN <condition>; FOR <compteur> IN [REVERSE] <limite_inf> .. <limite_sup> commandes; END LOOP; WHILE <condition> LOOP commandes; END LOOP Toutes ces structures de contrles peuvent videmment tre imbriques les unes dans les autres.

Page 30

Architecture client serveur Expos : Langage SQL

IV.8.3 La gestion des exceptions


PL/SQL permet de dfinir dans une zone particulire (de gestion dexception), lattitude que le programme doit avoir lorsque certaines erreurs dfinies ou prdfinies se produisent. Un certain nombre dexceptions sont prdfinies sous Oracle. Citons, pour les plus frquentes : NO DATA FOUND (devient vrai ds quune requte renvoie un rsultat vide), TOO MANY ROWS (requte renvoie plus de lignes quescompt), CURSOR ALREADY OPEN (curseur dj ouvert), INVALID CURSOR (curseur invalide)... Lutilisateur peut dfinir ses propres exceptions. Dans ce cas, il doit dfinir celles ci dans la zone de dclaration. Exemple : excpt1 EXCEPTION Puis, cette exception est leve quelque part dans le programme (aprs un test non concluant, par exemple), par linstruction : RAISE excpt1 Enfin, dans la zone dexception un traitement est affect chaque exception possible (dfinie ou prdfinie) : EXCEPTION WHEN <exception1> [OR <exception2> OR ...] THEN <instructions> WHEN <exception3> [OR <exception2> OR ...] THEN <instructions> WHEN OTHERS THEN <instructions> END; Evidemment, un seul traitement dexception peut se produire avant la sortie du bloc.

IV.8.4 Affichage
PL/SQL nest pas un langage avec des fonctionnalits dentres sorties volues (ce nest pas son but). Toutefois, on peut imprimer des messages et des valeurs de variables de plusieurs manires diffrentes. Le plus pratique est de faire appel un package prdfini : DBMS output.
Page 31

Architecture client serveur Expos : Langage SQL

En premier lieu, taper au niveau de la ligne de commande : SET SERVEROUTPUT ON Pour afficher, on utilise alors la commande suivante : DBMS_OUTPUT.PUT_LINE (Au revoir || nom || bientt); Si on suppose que nom est une variable dont la valeur est toto, linstruction affichera : Au revoir toto bientt.

Page 32

Architecture client serveur Expos : Langage SQL V.

Comparaison de quelques fonctions SQL dans diffrents systmes de gestion de bases de donnes relationnelles

Dun SGBDR un autre, les fonctions SQL ne sont pas identiques. La diffrence entre ces fonctions se rsume dans les tableaux ci-aprs : Lgende : O : Oui N : Non X : Existe mais syntaxe hors norme ! : Mme nom mais fonction diffrente - : implmentation partielle a. Agrgation statistique
Fonction AVG COUNT MAX MIN SUM EVERY ANY / SOME Description Moyenne Nombre Maximum Minimum Total Tous (boolen) Au moins un (boolen) Norme SQL O O O O O O O Paradox Access MySQL PostGreSQL O O O O O N N O X O O O N N O O O O O N N O O O O O N N SQL Server O O O O O N N Oracle Interbase O O O O O N N O O O O O N N

b. Fonctions "systme"
Fonction Description Norme SQL Paradox Access MySQL PostGre SQL SQL Server Oracle Interbase

CURRENT_DATE CURRENT_TIME CURRENT_USER SESSION_USER SYSTEM_USER DATABASE SYSDATE USER VERSION

Date courante Heure courante Utilisateur courant Utilisateur autoris Utilisateur systme Nom de la bases de donnes courante Date et/ou heure courante Utilisateur courant Version du SGBDR

O O O O O N N N N

N N N N N N N N N

N N N N N N N N N

O O N X X O O O O

O O O O O N N N O

N N O O O O N O N

N N N N N O O O N

O O N N N N N O N

Page 33

Architecture client serveur Expos : Langage SQL

c. Fonctions gnrales
Fonction OCTET_LENGTH DATALENGTH DECODE LENGTH NVL TO_CHAR TO_DATE TO_NUMBER Description Longueur en octet Longueur Fonction conditionnelle Longueur Valeur non NULL Conversion de donnes en chane Conversion en date Conversion en nombre Norme SQL Paradox Access MySQL PostGreSQL Oracle Interbase SQL Server O N N O O N O N N N N N N O N N N N N N N N N N N N N N N O N N N N N O N N N N N O N N O N N O N N N N O O O O O O N N N N N N

d. Fonctions de chanes de caractres


Norm Para MyS PostGre SQL Fonction Description e Access Oracle Interbase dox QL SQL Server SQL || Concatnation O O N X O N O O CHAR_LENGTH Longueur d'une chane O N N X O N N N CHARACTER_LENGTH Longueur d'une chane O N N O O O N N CONCATENATE Concatnation O N N N N O N N Conversion de format CONVERT O N N N N ! O O de caractres LIKE (prdicat) Comparaison partielle O O X O O O O O LOWER Mise en minuscule O O N O O O O N Position d'une chane POSITION O N N O O N N N dans une sous chane Extraction d'une sous SUBSTRING O O N O O N N N chane UPPER Mise en majuscule O O N O O O O O

e. Fonctions de chanes de bits


Norme SQL Paradox Access MySQL PostGreSQL Oracle Interbase SQL Server BIT_LENGTH Longueur en bit O N N N N N N N & "et" pour bit logique N N ? ? ? O ? ? "ou" pour bit | N N ? ? ? O ? ? logique "ou" exclusif pour ^ N N ? ? ? O ? ? bit logique Fonction Description

Page 34

Architecture client serveur Expos : Langage SQL

f. Fonctions numriques
Fonction % +-*/() ABS ASCII EXP LN LOG(n,m) LOG10 MOD POWER ROUND SQRT Description Modulo Oprateurs et parenthsage Valeur absolue Conversion de caractre en code ASCII Exponentielle Logarithme nprien Logarithme en base n de m Logarithme dcimal Modulo Elvation la puissance Arrondi Racine carre Norme PostGre SQL Paradox Access MySQL Oracle Interbase SQL SQL Server N N N O O O N N O N N N N N N N N N N O N N N N N N N N N N O O O O N N N O O O O O O O O N N O O O O O O O O O N O N O N O O O O O O N N O O O O O O O O O O O O O O N N O N N N N N N N N N N

g. Fonctions temporelles
Fonction AGE Description Norme SQL Paradox Access MySQL PostGreSQL Oracle Interbase SQL Server N N N N O N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N O O N O O N O O O O O N O O N O O N O O O N N N N N N N N N N N N N N O O O N O O N O O O N N N N N O N O O N O O N N N N N N N N N N N N

Age Ajout d'intervalle DATE_ADD une date DATE_FORMAT Formatage de date DAY Jour d'une date DAYNAME Nom du jour HOUR Extraction de l'heure LAST_DAY Dernier jour du mois MINUTE MONTH Mois d'une date Prochain premier jour NEXT_DAY de la semaine SECOND Extrait les secondes WEEK Numro de la semaine YEAR Anne d'une date

Page 35

Architecture client serveur Expos : Langage SQL

h. Fonctions OLAP (norme SQL:1999)


Fonction Description Norme SQL Paradox Access MySQL PostGreSQL SQL Server Oracle Interbase

Sous totaux des agrgats pour toutes CUBE les combinaisons possibles Sous totaux des agrgats pour toutes ROLLUP les combinaisons visibles Sous totaux des GROUPING agrgats pour toutes SETS les combinaisons spcifies Indicateur de sous GROUPINGS totalisation Spcification de NULL FIRTS / classement pour les NULL LAST marqueurs NULL

O O

N N

N N

N N

N N

O N

O O

N N

i. Fonctions de fentrage et analytiques (normes 2003 et 2008)


Fonction Description Norme SQL Paradox Access MySQL PostGreSQL Oracle Firebird SQL Server

ROW_NUMBER NTILE Agrgats (MAX, MIN, COUNT, SUM...) ROWS / RANGE PRECEDING * / FOLLOWING * / BETWEEN Clause WINDOW

Numrotation des lignes N-tile (dcile, centile, ....) Calcul d'agrgat avec fentrage Fentre de calcul par ligne ou valeurs Bornage de la fentre de calcul Dfinition d'une fentre de calcul

O O O O O O

N N N N N N

N N N N N N

N N N N N N

N N N N N N

O O O N N N

O O O O O N

N N N N N N

Page 36

Architecture client serveur Expos : Langage SQL

j. Prdicat, oprateurs et structures diverses


Fonction Description Norme SQL Paradox Access MySQL PostGreSQL Oracle Firebird SQL Server

CASE IS [NOT] TRUE INNER JOIN LEFT, RIGHT, FULL OUTER JOIN INTERSECT UNION EXCEPT [NOT] BETWEEN [NOT] EXISTS

Structure conditionnelle Vrai Jointure interne Jointure externe

O O O O O O O O O O O O

N N O O ? ? ? O ? ? ? N N

N N O O N O N O ? O O N N

O N O O N N N O N N N N N

O N O O O O O O O O O N N

O N O O N O N O O O O N -

X N N N X O X O O O O N -

O N O O N O N O O O O N N

Intersection (ensemble) Union (ensemble) Diffrence (ensemble) Fourchette Existence Comparaison toutes les ALL valeurs d'un ensemble Comparaison au moins ANY / SOME une valeur de l'ensemble UNIQUE Existance sans doublons Row value construteur Construteur de ligne values

k. Fonctions spciales
Fonction Description Norme SQL Paradox Access MySQL PostGreSQL Oracle SQL Server Firebird

TABLE SAMPLE Echantillon de donnes TRUNCATE Vidage de table Limitation des lignes OFFSET / FETCH retournes Nombre de ligne LIMIT/TOP retourne "Row Id" Identifiant de ligne

O O O N N

N N N N N

N N N N N

N N N LIMIT _rowid

N N N LIMIT oid

O O N TOP N

O O N N rowid

N O N ROWS ?

l. Sous requtes
Fonction Norme SQL Paradox Access MySQL PostGreSQL SQL Oracle Firebird Server

Imbriques Dans la clause SELECT Dans la clause FROM Dans la clause WHERE Dans la clause HAVING CTE (Common Table Expression : expression de table) Requtes rcursives via CTE

O O O O O O O

O X N O O N N

O O N O N N N

N N N N N N N

O O O O O N N

O O O O O O O

O O O O O O X Page 37

O O N O O O O

Architecture client serveur Expos : Langage SQL

Conclusion
SQL est un langage dclaratif rgi par les normes qui sont diversement respectes par les diteurs des SGBDR. Lvolution de SQL permet aujourdhui de manipuler aussi des donnes relatives au multimdia et dintgrer des donnes XML. Le succs que connaissent les grands diteurs de SGBDR a plusieurs origines et repose notamment sur SQL. SQL peut sinterfacer avec des langages de troisime gnration comme C, Ada ou Cobol, mais aussi avec des langages plus volus comme C ++, Java, Delphi, C#, etc. Les procdures stockes offrent des gros avantages pour les applications client/serveur, surtout au niveau des performances : - le trafic sur le rseau est rduit car les clients SQL ont seulement envoyer l'identification de la procdure et ses paramtres au serveur sur lequel elle est stocke. - les procdures sont prcompiles une seule fois quand elles sont enregistres. L'optimisation a lieu ce moment et leurs excutions ultrieures n'ont plus passer par cette tape et sont donc plus rapides. De plus les erreurs sont repres ds la compilation et pas l'excution. Le principal inconvnient des procdures stockes est qu'elles impliquent une dpendance forte vis--vis du SGBD car chaque SGBD a sa propre syntaxe et son propre langage de programmation. Ces diffrences font qu'un code source crit sans prcaution pour un SGBD donn ne fonctionnera pas forcment avec un autre SGBD.

Page 38

Architecture client serveur Expos : Langage SQL

Rfrences
Bibliographie

Bases de donnes - de la modlisation au SQL - Laurent Audibert - Ellipses 2009 SQL Synthse de cours et exercices - 2e dition - Frdric Brouard, Christian Soutou, Rudi Bruchez - Pearson Education 2008 SQL par l'exemple - Antony Molinaro - O'reilly, 2007

Pages web http://sql.developpez.com/ http://www2.laltruiste.com/document.php? url=http://www2.laltruiste.com/courssql/sommaire.html http://fr.wikipedia.org/wiki/Structured_Query_Language http://www.asp-magazine.com/article-110.html

Page 39