Vous êtes sur la page 1sur 9

Structured Query Language

SQL Apparu en Auteur Dveloppeur Dernire version stable Paradigme Typage Implmentations 1974 Donald D. Chamberlin et Raymond F. Boyce IBM SQL:2008 (en 2009)[+/]

multi-paradigme: orient objet, fonctionnelle, procdurale statique et fort beaucoup

Structured query language (SQL), ou langage structur de requtes, est un pseudo-langage informatique (de type requte) standard et normalis, destin interroger ou manipuler une base de donnes relationnelle avec :

un langage de dfinition de donnes (LDD, ou en anglais DDL, Data definition language), un langage de manipulation de donnes (LMD, ou en anglais DML, Data manipulation language), la partie la plus courante et la plus visible de SQL, un langage de contrle de donnes (LCD, ou en anglais DCL, Data control language), un langage de contrle des transactions (LCT, ou en anglais TCL, Transaction control language), et d'autres modules destins notamment crire des routines (procdures, fonctions ou dclencheurs) et interagir avec des langages externes.

SQL fait partie de la mme famille que les langages SEQUEL (dont il est le descendant), QUEL ou QBE (Zloof).

Sommaire

1 Bref historique 2 Usage o 2.1 Exemples d'ordres LDD o 2.2 Exemples d'ordres LMD o 2.3 Exemples d'ordres LCT o 2.4 Exemples d'ordres SQL procedural 3 Extension du langage 4 Candidats au remplacement 5 Autres langages 6 Langages objets 7 Systmes de gestion de base de donnes utilisant SQL 8 Ouvrages sur le langage SQL o 8.1 En franais o 8.2 En anglais 9 Notes et rfrences

Bref historique
En juin 1970 Edgar Frank Codd publia l'article A Relational Model of Data for Large Shared Data Banks ("Un modle de donnes relationnel pour de grandes banques de donnes partages") dans la revue Communications of the ACM (Association for Computing Machinery). Ce modle a t rapidement admis comme modle dfinitif pour les bases de donnes. Un langage, Structured English Query Language ("SEQUEL") (langage d'interrogation structur en anglais) a t dvelopp par IBM pour mettre en uvre le modle de Codd. La premire version de SQL a t dveloppe chez IBM en 1970 par Donald Chamberlain et Raymond Boyce. Cette version d'origine (SEQUEL) a t conue pour manipuler et diter des donnes stockes dans la base de donnes relationnelle l'aide du systme de gestion de base de donnes IBM System R. Le nom SEQUEL a t abandonn et contract en SQL1 car il tait dpos commercialement depuis 1984 par l'avionneur Hawker Siddeley pour un systme d'acquisition de donnes2. Il tait cens alors devenir un lment cl du futur projet FS. En 1979, Relational Software, Inc. (actuellement Oracle Corporation) prsenta la premire version commercialement disponible de SQL, rapidement imit par d'autres fournisseurs. SQL a t adopt comme recommandation par l'Institut de normalisation amricaine (ANSI) en 1986, puis comme norme internationale par l'ISO en 1987 sous le nom de ISO/CEI 9075 - Technologies de l'information - Langages de base de donnes - SQL.

La norme internationale SQL est passe par un certain nombre de rvisions :


Anne Nom Appellation Commentaires

1986

ISO/CEI 9075:1986

SQL-86 ou SQL-87

dit par l'ANSI puis adopt par l'ISO en 1987.

1989

ISO/CEI 9075:1989

SQL-89 ou SQL-1

Rvision mineure.

1992

ISO/CEI 9075:1992

SQL-92 ou SQL2

Rvision majeure.

1999

ISO/CEI 9075:1999

SQL-99 ou SQL3

Expressions rationnelles, requtes rcursives, dclencheurs, types non-scalaires et quelques fonctions orientes objet (les deux derniers points sont quelque peu controverss et pas encore largement implments).

2003

ISO/CEI 9075:2003 SQL:2003

Introduction de fonctions pour la manipulation XML, window functions , ordres standardiss et colonnes avec valeurs auto-produites (y compris colonnes d'identit).

2008

ISO/CEI 9075:2008 SQL:2008

Ajout de quelques fonctions de fentrage (ntile, lead, lag, first value, last value, nth value), limitation du nombre de ligne (OFFSET / FETCH), amlioration mineure sur les types distincts, curseurs et mcanismes d'auto incrments.

Comme toute norme internationale publi par l'ISO, ISO/CEI 9075 est disponible l'achat sur le site de cette organisation : http://www.iso.org. Le dernier brouillon (working draft) de la norme est disponible cette adresse http://www.wiscorp.com/sql_2003_standard.zip sur le site de http://www.wiscorp.com/about_wiscorp.html.

Usage
SQL se dcompose en 5 parties, savoir :

Ordres LDD (langage de dfinition des donnes, ou DDL, Data Definition Language) : permet de modifier la structure de la base de donnes Ordres LMD (langage de manipulation des donnes, ou DML, Data Manipulation Language) : permet de consulter / modifier le contenu de la base de donnes Ordres LCD (langage de contrle des donnes, ou DCL, Data Control Language) : permet de grer les privilges, c'est--dire les utilisateurs et les actions qu'ils peuvent entreprendre Ordres LCT (langage de contrle des transactions, ou TCL, Transaction Control Language, ) : permet de grer les transactions, c'est--dire rendre atomique divers ordres enchans en squence SQL procedural : PSM (Persistent Stored Module), CLI (Call Level Interface), Embedded SQL, qui est un ensemble d'outils pour que SQL s'interface avec des langages htes.

Exemples d'ordres LDD

Cration d'une table :


INTEGER, INTEGER, DATE, DATE);

CREATE TABLE table1 (colonne1 colonne2 colonne3 colonne4

Modification d'une table :

ALTER TABLE table1 ADD COLUMN colonne5 INTEGER NULL; ALTER TABLE table1 DROP COLUMN colonne5;

Suppression d'une table :

DROP TABLE table1;

Ajout d'une contrainte sur une table :

ALTER TABLE table1 ADD CONSTRAINT ck_jour CHECK (colonneJour IN ('Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi', 'Dimanche'));

Exemples d'ordres LMD

recherche de lignes dans une table o Requte de base :

SELECT {liste_colonnes} FROM {TABLES} WHERE {conditions};

#exemple SELECT prenom, telephone FROM entrants CROSS JOIN sortants WHERE nom = 'Dupont'; o

Requte plus gnrique :

SELECT {expressions} FROM {TABLES} WHERE {prdicats} GROUP BY {expressions} HAVING {condition} ORDER BY {expressions}; #exemple SELECT name, service FROM employees WHERE statut='stagiaire' ORDER BY name;

Par exemple, si on a une table employes, contenant 2 colonnes nom et salaire, la requte permettant de trouver le nom des salaris touchant plus de 1 500 par mois classs par salaire est la suivante :
SELECT FROM WHERE ORDER nom employes salaire > 1500 BY salaire;

Exemples de requtes pour afficher les lignes d'une table TABLE1 de cl primaire colonne1 non prsents dans une seconde table TABLE2 :
-- Logique d'exclusion : NOT + enumeration IN - eviter pour de bonnes performances SELECT * FROM TABLE1 WHERE TABLE1.colonne1 NOT IN (SELECT colonne2 FROM TABLE2) -- Logique ensembliste de diffrence + enumeration IN SELECT * FROM TABLE1 WHERE TABLE1.colonne1 IN (SELECT colonne1 FROM TABLE2 EXCEPT SELECT colonne2 FROM TABLE2) -- Logique ensembliste de diffrence + jointure SELECT * FROM TABLE1, INNER JOIN (SELECT colonne1 FROM TABLE2 EXCEPT SELECT colonne2 FROM TABLE2) TMP ON TABLE1.colonne1 = TMP.colonne1 -- Logique de jointure externe, c'est dire complte gauche et incomplte droite + restriction : IS NULL

SELECT * FROM TABLE1 LEFT OUTER JOIN TABLE2 ON TABLE1.colonne1 = TABLE2.colonne2 WHERE TABLE2.colonne2 IS NULL -- Certains SGBDR (Oracle, Sybase, SQL Server...) utilisaient anciennement des syntaxes spcifiques pour les jointures externes -- exemple pour Oracle SELECT * FROM TABLE1, TABLE2 WHERE TABLE1.colonne1 = TABLE2.colonne (+) AND TABLE2.colonne2 IS NULL -- exemple pour Sybase SELECT * FROM TABLE1, TABLE2 WHERE TABLE1.colonne1 =* TABLE2.colonne AND TABLE2.colonne2 IS NULL

Ces anciennes syntaxes de jointures externes posent de nombreux inconvnients : rsultats diffrents de la norme; impossibilit de jointures complexes (thta jointures externes notamment).
o

Requtes rcursives

Depuis la norme SQL:1999, le langage SQL permet d'utiliser la rcursivit dans les requtes (parcours d'arbres, de graphes...). Ceci se fait l'aide des expressions de tables.
o

Ajout d'une ligne :

INSERT INTO employees (name, service) VALUES ('Martin', 'comptabilit');

Ajout de donnes partir des lignes d'une autre table :


INSERT INTO TABLE1 (colonne1, colonne2, colonne3) SELECT colonne10, colonne20, (colonne30 + colonne40) / 2 FROM TABLE2; o

Modification de lignes :

UPDATE employees SET service='accueil' WHERE name = 'Martin';

Mise jour d'une table partir des informations d'une autre table :
UPDATE TABLE1 SET (colonne3, colonne4) = (SELECT colonne32, colonne13 FROM TABLE2 WHERE TABLE1.colonneX = TABLE2.colonneY) WHERE colonneZ IN (SELECT col FROM TABLE2)

Suppression d'une ligne :

DELETE FROM employees WHERE name = 'Alpha';

Exemples d'ordres LCT

Gestion des transactions :

-- lancement d'une transaction avec annulation START TRANSACTION ISOLATION LEVEL REPEATABLE READ ... ROLLBACK WORK AND NO CHAIN

Exemples d'ordres SQL procedural


Exemple d'utilisation d'un curseur dans le cadre d'une procdure stocke (PSM) :
DECLARE N INTEGER; SET N = 1; FOR C AS C_USR_MISE_A_JOUR CURSOR FOR SELECT USR_ID, USR_NOM FROM T_UTILISATEUR_USR ORDER BY USR_ID FOR UPDATE OF USR_NOM DO IF MOD(N, 2) = 0 THEN UPDATE T_UTILISATEUR_USR SET USR_NOM = UPPER(USR_NOM) WHERE CURRENT OF C_USR_MISE_A_JOUR; ELSE UPDATE T_UTILISATEUR_USR SET USR_NOM = LOWER(USR_NOM) WHERE CURRENT OF C_USR_MISE_A_JOUR; END IF END FOR

Dans cet exemple, la colonne USR_NOM de la table T_UTILISATEUR_USR est mise jour en majuscule pour les lignes de position ordinale paires et en minuscule pour les autres.

Extension du langage
PL/SQL pour Oracle, Transact-SQL pour Microsoft SQL Server et Sybase, SQL PL pour IBM DB2, PL/pgSQL pour PostgreSQL, DQL pour Documentum de EMC.

Candidats au remplacement
SQL possde quelques anomalies, dont l'une est de permettre l'enchssement de commandes certains endroits et de les interdire dans d'autres, d'une faon qui peut sembler arbitraire l'utilisateur, et l'oblige en tout cas contorsionner sa pense. Un langage plus rcent nomm Tutorial D est prsent comme tant plus cohrent et plus simple d'emploi par ses inventeurs.

Il permet, de surcrot, pour allger le libell des requtes, l'emploi d'une clause WITH inspire du langage Pascal, bien que WITH ne contribue pas faciliter la lecture du code. A noter que la technique du WITH a t en partie reprise dans la norme SQL:1999 pour raliser des "Common Table Expression" (CTE ou expression de table en franais), c'est dire des vues non instancies utilisable par la requte dans laquelle elle figure, et ce afin de factoriser des expressions ou encore de permettre l'criture de requtes rcursives de manire rsoudre lgamment des parcours d'arbres ou de graphes. Un autre candidat est BS12, qui lui aussi s'est attaqu ce problme de l'enchssement et de la perte de lisibilit qu'il entrane.

Autres langages
Parmi les autres langages de requtes, citons les anctres de SQL comme QUEL ou SEQUEL. Cependant le langage QBE, trs diffrent de SQL, est encore en vigueur dans le SGBDR de type fichier qu'est Paradox (Ansa Software/Borland/Corel).

Langages objets
Afin de prendre en compte les spcificits (hritage, navigation transparente) des langages objets (Java, DotNet, C++), de nouveaux langages de requte sont venus complter SQL :

OQL (Object Query Langage) En java : JDOQL spcifi par le standard JDO

Systmes de gestion de base de donnes utilisant SQL


4e Dimension (4D) Access Advantage Database Adonix X3 Base DB2 Firebird FoxPro - Visual Foxpro HyperFile Informix Ingres

InterBase MaxDB (anciennement SAP db) Microsoft SQL Server Mimer MySQL Nexus Ocelot Oracle Paradox Pick PostgreSQL

Progress OpenEdge SmallSQL SQL 2000 i (Pervasive) SQLBase (Centura) SQLite SQL/MM Sybase Teradata

Tous ces systmes prsentent certaines particularits dont certaines ne se retrouvent pas chez d'autres. Il est d'ailleurs toujours intressant de se rfrer au manuel de rfrence du SGDBR, lors de requtes particulires ou complexes, ainsi que pour leur optimisation.

Ouvrages sur le langage SQL


En franais

PHP et SQL - Cyril Pierre de Geyer, Guillaume Ponon, et Stphane Mariel (Broch 13 avril 2006) SQL avanc (2e dition) - Joe Celko - Vuibert 2000 SQL en concentr - Kevin Kline - O'reilly, 2005 SQL par l'exemple - Antony Molinaro - O'reilly, 2007 SQL pour les nuls - Allen G. Taylor - First Interractive, 2001 SQL Synthse de cours et exercices - 2e dition - Frdric Brouard, Christian Soutou, Rudi Bruchez - Pearson Education 2008 SQL dveloppement - Frdric Brouard - Campus Press 2001

En anglais

A guide to the SQL standard - Chris J. Date, Hugh Darwen - Addison Wesley - USA, 1997 Advanced SQL:1999 - Jim Melton - Morgan Kaufmann, 2003 SQL 3, Implementing the SQL Foundation Standard - Paul Fortier - Mc Graw Hill, 1999 SQL bible - A. Kriegel, B. M. Trukhnov - John Wiley, 2003 SQL in a nutshell - Kevin Kline, Daneil Kline - O'Reilly, 2001 SQL-99 complete really - Peter Gulutzan, Trudy Pelzer - R&D Books, 1999 SQL2 - SQL3, Applications Oracle (3e dition) - Pierre Delmal - De Boeck Universit, 2001 SQL:1999, Understanding Relational Language Components - Jim Melton, Alan R. Simon - Morgan Kauffman, 2002 The Art of SQL - Stphane Faroult - O'Reilly, 2006 The Complete Reference SQL - J. R. Groff, P. N. Weinberg - Osborne, 1999 Understanding the new SQL - Jim Melton, Alan R. Simon - Morgan Kaufmann, 1993