39
 Architecture client serveur – Exposé : Langage SQL Plan Intro duction………………………………………………………… 02 I. Historique………………………………………………………. 03 II.  N ormes SQL …………………………………………………….. 04 III. Structure du langage…………………………………………… 06 IV. Commandes SQL……………………………………………… 08 V. Comparaison des fonctions SQL sur quelques systèmes de ge stio n de bases de don es relatio nn elles…………………… 27 Co nc lusion…………………………………………………………… 33 férences…………………………………………………………… 39 Page 1

Expose SQL

  • Upload
    meone99

  • View
    795

  • Download
    52

Embed Size (px)

Citation preview

Page 1: Expose SQL

5/11/2018 Expose SQL - slidepdf.com

http://slidepdf.com/reader/full/expose-sql 1/39

Architecture client serveur – Exposé : Langage SQL

Plan

Introduction………………………………………………………… 02I. Historique………………………………………………………. 03

II.  Normes SQL…………………………………………………….. 04

III. Structure du langage…………………………………………… 06

IV. Commandes SQL……………………………………………… 08

V. Comparaison des fonctions SQL sur quelques systèmes degestion de bases de données relationnelles…………………… 27

Conclusion…………………………………………………………… 33

Références…………………………………………………………… 39

Page 1

Page 2: Expose SQL

5/11/2018 Expose SQL - slidepdf.com

http://slidepdf.com/reader/full/expose-sql 2/39

Architecture client serveur – Exposé : Langage SQL

Introduction

Devant l’accroissement des collectes d’informations électroniques en vue de diverses

exploitations, il devenait urgent de mettre en place un système capable d’organiser et de

stocker un nombre considérable d’informations.

En 1970, ce besoin a été vécu dans les laboratoires d’IBM et a donné naissance à un

système capable d’entretenir les fichiers contenant les informations tout en masquant les

détails complexes et fastidieux liés à leurs gestions, permettant ainsi à l’utilisateur

d’accéder simplement aux informations via un langage d’interrogation. Cette première

étape a introduit de nouvelles notions comme les bases de données, le modèle relationnel

et le système de gestion de base de données.

Par la suite diverses sociétés ont proposé leur solution de gestion des données, leur langag

 pour l’extraction des données.

Le langage SQL (Structured Query Language) ( Langage de requêtes Structuré ) est le fru

d’années de réflexion sur la problématique de manipulation des données. Formalisé

normalisé, il est né dans les années 1980 et a été rapidement adopté par la majorité de

éditeurs. Ses dernières normalisations l’ont fait s’orienter vers ce que l’on appeldésormais le relationnel objet, c’est-à-dire l’introduction de certains principes de

 programmation objet au sein des bases de données relationnelles.

La normalisation laisse la possibilité aux producteurs de systèmes de gestion de bases d

données (SGBD) d'y ajouter des instructions spécifiques et non normalisées. En raison d

cette possibilité, ainsi que de l'évolution de la norme au cours des années, les éditeurs d

SGBD ajoutent souvent des possibilités avant que celle-ci fassent objet de normes, ce qu

 provoque des variations dans la compréhension et l'interprétation qui est faite d'un codsource en SQL par les différents logiciels de SGBD.

Après un bref historique du langage SQL, nous donnerons des syntaxes de quelque

commandes pour aboutir à une comparaison de certaines fonctions dans des SGBD.

Page 2

Page 3: Expose SQL

5/11/2018 Expose SQL - slidepdf.com

http://slidepdf.com/reader/full/expose-sql 3/39

Architecture client serveur – Exposé : Langage SQL

I. Historique

Comme beaucoup de technologies de l’informatique aujourd’hui matures, les bases d

données relationnelles sont nées des travaux d’IBM entre les années 1960 et 1970. Dnombreuses recherches ont été menées au cours de cette période sur des modèles d

données hiérarchiques, réseaux et relationnels. Le relationnel a été unanimement adopt

 par la suite et programmé à l’aide du langage SQL.

La théorie sur laquelle repose SQL a été énoncée par le professeur Edgar Frank Cod

(1924-2003), un mathématicien d’Oxford, alors qu’il travaillait comme chercheur pou

IBM au laboratoire de San Jose. L’article « A relational model of data for large shared da

 banks », publié en juin 1970 dans la revue  Association for Computing Machinery, fa

toujours office de référence et a initié tous les travaux qui ont suivi et qui perdurent.

Codd voulait créer un système où l’interrogation des données utilisait le vocable anglai

Les travaux de la NASA (National Aeronautics and space Adminstration) (Administratio

 Nationale de l’aéronautique et de l’espace), sur la base de données modélisant les roche

rapportés du voyage sur la lune, a aidé au développement de ce langage en lui donnant d

la crédibilité.

Dès 1974, IBM entamait un prototype de bases de données relationnelles appelé System/R

Ce projet se termina en 1979, prouvant ainsi la viabilité d’un tel système. Le langage d

 programmation utilisé par IBM pour System/R fut appelé SEQUEL (Structured Englis

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 Ingre

du début des années 1980.

Page 3

Page 4: Expose SQL

5/11/2018 Expose SQL - slidepdf.com

http://slidepdf.com/reader/full/expose-sql 4/39

Architecture client serveur – Exposé : Langage SQL

II. Normes SQL

Le langage SQL est normalisé depuis 1986. Cette norme s’est enrichie au fil du temp

(publication X3.135-1986 de l’ANSI reprise par l’ISO peu de mois après : ISO 90751987).

Cette première mouture, appelée SQL86 ou SQL1 (une centaine de pages), était le résultde compromis entre constructeurs, mais fortement influencée par le dialecte d’IBM.

En 1989, d’importantes mises à jour furent faites en matière d’intégrité référentielle (ANSX3.135-1989 et ISO/IEC 9075:1989).

La deuxième norme (appelée SQL92 ou SQL2 d’un volume d’environ 600 pages) fu

finalisée en 1992. Elle définissait quatre niveaux de conformité : le niveau d’entrée (entrlevel ), les niveaux intermédiaires (transitional et intermediate levels) et le niveau supérieu( full level ). Les langages SQL des principaux éditeurs sont tous conformes au preminiveau et ont beaucoup de caractéristiques relevant des niveaux supérieurs.

Les groupes de travail X3H2 de l’ANSI et WG3 de l’ISO se penchèrent, à partir de 199sur les extensions à apporter à la précédente norme. Les optimistes prévoyaient SQL3 pou1996… Rien ne se passa comme prévu. Il fallut attendre 1999 pour voir établir le projet SQL:1999 » appelé communément SQL3 (volume de 1 600 pages à l’époque). Ce retar

fut probablement dû aux difficultés des nombreux protagonistes (Oracle, IBM, MicrosofDigital, Computer Associates, etc.) à remettre en cause leur mode de pensée, et aux risquequ’ils pressentaient de ne pouvoir assurer la compatibilité des bases de leurs clients.

Les évolutions de l’ancienne norme ne sont pas limitées aux seules extensions objet. Bied’autres mécanismes ont été introduits dans ce projet (géographie, temps, réel, sérietemporelles, multimédia, OLAP, données et routines externes).SQL:1999 est désormais une norme (au sens  International Standard de l’ISO) qui apparadans le domaine   Information technology – Database languages – SQL. Elle por

 principalement la référence ISO/IEC 9075.

Peu après, une nouvelle version de SQL (SQL:2003), apportant des modificationmineures, apparut. Ses apports concernent l’auto-incrément des clés, de nouvellefonctions dites analytiques, les colonnes calculées, l’ordre MERGE combinant UPDATE INSERT et surtout un support complet de XML.

Page 4

Page 5: Expose SQL

5/11/2018 Expose SQL - slidepdf.com

http://slidepdf.com/reader/full/expose-sql 5/39

Architecture client serveur – Exposé : Langage SQL

Depuis 2006, des modules ont été révisés et publiés, mais il n’y a pas encore à propremen parler de norme. 

La norme internationale SQL est passée par un certain nombre de révisions :

Année Nom Appellation Commentaires

1986 ISO/CEI 9075:1986SQL-86 ouSQL-87

Édité par l'ANSI puis adopté par l'ISO en1987.

1989 ISO/CEI 9075:1989SQL-89 ouSQL-1

Révision mineure.

1992 ISO/CEI 9075:1992SQL-92 ouSQL2

Révision majeure.

1999 ISO/CEI 9075:1999SQL-99 ouSQL3

Expressions régulières, requêtes récursives,déclencheurs, types non-scalaires et quelquesfonctions orientées objet (les deux derniers pointssont quelque peu controversés et pas encorelargement implémentés).

2003 ISO/CEI 9075:2003 SQL:2003

Introduction de fonctions pour la manipulationXML, « window functions », ordres standardisés ecolonnes avec valeurs auto-produites (y compriscolonnes d'identité).

2008 ISO/CEI 9075:2008 SQL:2008

Ajout de quelques fonctions de fenêtrage (ntile,lead, lag, first value, last value, nth value),limitation du nombre de ligne (OFFSET / FETCHamélioration mineure sur les types distincts,curseurs et mécanismes d'auto incréments.

.

III. Structure du langage SQL

Page 5

Page 6: Expose SQL

5/11/2018 Expose SQL - slidepdf.com

http://slidepdf.com/reader/full/expose-sql 6/39

Architecture client serveur – Exposé : Langage SQL

SQL est un langage composé de deux parties bien distinctes et, dans ces deux parties, d

diverses subdivisions.

La première partie de SQL est constituée de la partie déclarative du langage, c’est-à-dir

d’ordres SQL que le SGBDR doit exécuter. En d’autres termes, on spécifie ce que l’o

veut obtenir ou faire, et c’est la machine qui décide comment elle doit l’exécuter.

La seconde partie est constituée d’un langage plus classique de type procédural dans lequ

on retrouve les notions de fonctions, méthodes, procédures, etc.

III.1 SQL déclaratif 

La partie déclarative de SQL est, elle-même, subdivisée en quatre parties :

• Le DDL ( Data Definition Language) ou LDD ( Langage de Définition de Données), c’es

à-dire les ordres SQL permettant de créer (CREATE), modifier (ALTER) ou supprime

(DROP) les objets de la base.

Les instructions de manipulation des objets de la base - description de la structur

l'organisation et les caractéristiques de la base de données - commencent avec les mots clé

CREATE ,  ALTER ou  DROP  qui correspondent aux opérations d'ajouter, modifier osupprimer un objet. Ces mots clés sont immédiatement suivis du type de l’objet

manipuler - TABLE , VIEW , INDEX , …

• Le DML (  Data Manipulation Language) ou LMD (  Langage de Manipulation d

 Données), c’est-à-dire les ordres SQL permettant d’ajouter (INSERT), de modifi

(UPDATE), de supprimer (DELETE) ou d’extraire des données (SELECT).

Les instructions de manipulation du contenu de la base de données commencent par lemots clés SELECT , UPDATE , INSERT ou DELETE qui correspondent respectivement au

opérations de recherche de contenu, modification, ajout et suppression. Divers mots clé

tels que  FROM ,  JOIN  et GROUP  permettent d'indiquer les opérations d'algèb

relationnelle à effectuer en vue d'obtenir le contenu à manipuler.

Page 6

Page 7: Expose SQL

5/11/2018 Expose SQL - slidepdf.com

http://slidepdf.com/reader/full/expose-sql 7/39

Architecture client serveur – Exposé : Langage SQL

• Le DCL ( Data Control Language) ou LCD ( Langage de Contrôle de Données), c’est-

dire les ordres SQL permettant de définir les privilèges afférents aux utilisateurs (GRANT

REVOKE).

Les mots clés GRANT  et  REVOKE  permettent d'autoriser des opérations à certaine

 personnes, d'ajouter ou de supprimer des autorisations.

• Enfin, le TCL (Transaction Control Language) ou LCT ( Langage de Contrôle de

Transactions) permet de gérer des transactions englobant des ordres des trois premièr

subdivisions. Les mots clés COMMIT et ROLLBACK permettent de confirmer ou annul

l'exécution de transactions.

III.2 SQL procédural

• PSM ( Persistent Stored Module) : concerne les fonctions, procédures, méthodes et

déclencheurs (triggers) en tant qu’objets de la base (donc stockés dans la base et par 

conséquent persistants).

• CLI (Call Level Interface) : en fait, des « API » destinées à piloter des objets encapsulan

des données dans des langages hôtes par l’intermédiaire, la plupart du temps, d’un

middleware (BDE, dbExpress de Borland, OBDC, ADO, OleDB de Microsoft,JDBC, etc.).

• Embedded SQL : le lancement d’ordres SQL depuis un langage hôte et la récupération

des données dans un programme via l’utilisation de CURSOR.

Page 7

Page 8: Expose SQL

5/11/2018 Expose SQL - slidepdf.com

http://slidepdf.com/reader/full/expose-sql 8/39

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 définir et dmodifier la structure de la base de données.

IV.1.1 Création de base de données

Une base de données dans le SGBD SQL Server contient au minimum : – un fichier de données principal (d’extension .mdf) où sont stockées les données ; – un journal des transactions (d’extension .ldf) où sont répertoriées toutes les transactions.Lorsque l’on crée une base, il faut donc préciser le nom, l’emplacement et la taille de cedeux fichiers.

Exemple : créons une base de données nommé "test"

CREATE DATABASE test -- le nom de la base  ON PRIMARY -- le fichier de données principal  (

NAME = test_data, -- nom logique  FILENAME = ’C:\Data\test.mdf’, -- emplacement et nom du fichier   SIZE = 60MB, -- taille de départ  MAXSIZE = 70MB, -- taille maximale

  FILEGROWTH = 1MB -- increment  )

LOG ON -- le journal  ( NAME = test_log,

FILENAME = ’D:\Log\test.ldf’,

SIZE = 15MB,MAXSIZE = 20MB,

FILEGROWTH = 1MB

)

IV.1.2 Création de table

SQL permet de créer des relations sous des tables d’une base de données existante et ddéfinir lors de la création les contraintes d’intégrité sur les attributs.

La commande de création permet de spécifier le nom de la table et de définir les élémentde table correspondant aux colonnes et aux contraintes.

Page 8

Page 9: Expose SQL

5/11/2018 Expose SQL - slidepdf.com

http://slidepdf.com/reader/full/expose-sql 9/39

Architecture client serveur – Exposé : Langage SQL

CREATE TABLE <nom-table> (colonne [, colonne…] [, contrainte-de-relation] contrainte-de-relation …])

Colonne = nom-colonne type de données [défaut] [contrainte-de-colonne]

<nom de table>, nom-colonne :

- chaîne de caractères (donc doit commencer par une lettre) simple, ou composé (unom de schéma suivi d’un nom de table)

Type de données : chaîne de caractère de longueur fixe ou variable, numérique, date.- chaîne de caractère de longueur fixe (sensible à la casse)

CHAR (<longueur>) [BYTE| CHAR] | NCHAR (<longueur>) la valeur par défauétant de longueur 1)

- chaîne de caractère de longueur variable (sensible à la casse)VARCHAR2 (<longueur>) [BYTE | CHAR | NVARCHAR2 (<longueur>

longueur obligatoire.LONG

- NumériqueLes numériques exacts (NUMBER et DECIMAL avec précision, INTEGER

SMALLINT)Les numériques approchés (FLOAT, REAL et DOUBLE PRECISION)

- DateDATE : toute date valide

Défaut : DEFAULT val

val peut être :- Littéral- Expression- Fonction SQL

Contrainte-de-colonne : contrainte d’intégrité (CI) et CI-réf portant sur un seul attribut

[CONSTRAINT contrainte]{ [NOT] NULL

|UNIQUE|PRIMARY KEY|REFERENCES [schéma.] nom-table [(nom-col)][ON DELETE CASCADE]|CHECK (condition)

}[DISABLE]

Contrainte-de-relation: CI et CI-réf portant sur une ou plusieurs colonnes[CONSTRAINT contrainte]

Page 9

Page 10: Expose SQL

5/11/2018 Expose SQL - slidepdf.com

http://slidepdf.com/reader/full/expose-sql 10/39

Architecture client serveur – Exposé : Langage SQL

{ UNIQUE (nom-col [, nom-col…]|PRIMARY KEY (nom-col [, nom col])|FOREIGN KEY (nom-col [, nom col])

REFERENCES [schéma.] nom-table [(nom-col [, nom-col…)][ON DELETCASCADE]|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 n’est pas autorisée sur les attributs de la clé primaire, il e

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 précise le contraire (contrainte NOT NUL

explicitement demandée)- Si la valeur NULL est autorisée, plusieurs lignes peuvent avoir la valeur NULL su

cet attribut (unicité pour le NULL non vérifiée)- Si plusieurs attributs, alors obligatoirement contrainte de relation

FOREIGN KEY: attribut(s) constituant une clé étrangère- NULL accepté- REFERENCES: la précision d’attributs est optionnelle si identique aux attribu

référencés- Si plusieurs attributs, alors obligatoirement contrainte de relation

CHECK (condition) : la condition peut être vérifiée avec-  Nom-col θ val, θ peut être {=, <>, <, ≤, >, ≥}- Prédicat d’intervalle : BETWEEN … AND…- Prédicat de comparaison de texte : LIKE- Test de nullité : NULL- Test d’appartenance : IN- Interdit : référence à des pseudo colonnes (CURRVAL, NEXTVAL, …), appel

certaines fonctions (SYSDATE, …), requêtes à des valeurs d’autres lignesActivation des contraintes

ENABLE : contrainte active (par défaut), toutes les données doivent la vérifier DISABLE : contrainte inactive

Page 10

Page 11: Expose SQL

5/11/2018 Expose SQL - slidepdf.com

http://slidepdf.com/reader/full/expose-sql 11/39

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 = 'Féminin'),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 d’attribut (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 défaut d’un attributMODIFY (nom-col [type] [DEFAULT expr] [NULL | NOT NULL] …)Clause-drop : Suppression de la vérification de la contrainte et de son stockage dans dictionnaire des données.DROP [PRIMARY KEY | UNIQUE (nom-col [, nom-col…]) | CONSTRAINT contraint[CASCADE]

Page 11

Page 12: Expose SQL

5/11/2018 Expose SQL - slidepdf.com

http://slidepdf.com/reader/full/expose-sql 12/39

Architecture client serveur – Exposé : Langage SQL

CASCADE : suppressions en cascades des CI qui dépendent de la CI supprimée (cléétrangères 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 danles autres tables de la base qui font référence à la clé primaire et aux clés uniques de ltable supprimée ; si on ne précise pas CASCADE et s’il y a des références, alors messagd’erreur.

IV.1.5 Renommage de table

RENAME ancien_nom TO nouveau_nom

Tous les liens sont mis à jour 

IV.1.6 Définition de vues

SQL permet de définir les vues au niveau des schémas.Une vue est une table virtuelle calculée à 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 supprimée par la commande DROP VIEW view

IV.2 Les commandes DML ( Data Manipulation Language)

Les commandes SELECT, INSERT, UPDATE, DELETE permettent la sélection la mise à jour des données de la base.

IV.2.1 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>]

[ORDER BY <attribut>]

Page 12

Page 13: Expose SQL

5/11/2018 Expose SQL - slidepdf.com

http://slidepdf.com/reader/full/expose-sql 13/39

Architecture client serveur – Exposé : Langage SQL

Restriction : arithmétique (=, <, >, <> ,  ≥,  ≤ )) textuelle (LIKE) sur intervalle (BETWEEN)

sur liste (IN)  Possibilité de blocs imbriqués par :

IN, EXISTS, NOT EXISTS, ALL, SOME, ANYIV.2.1.1 Clause SELECT

Cette clause permet d'indiquer quelles colonnes, ou quelles expressions doivent êtrretournées par l'interrogation.SELECT [DISTINCT] {expression [c_alias] |* ...]

Expression valide

- [[schéma.] table.] attribut- ‘texte’- Nombre- Fonction [(argument)]- Combinaison de ces expressions

Alias pour expressions / attribut- Renomme l’entête d’une colonne (affichage ou clause ORDER BY)- Utile si expression calculée- Suit immédiatement l’expression (mot-clé AS facultatif entre attribut

alias)

- à écrire entre guillemets (") si les majuscules et minuscules doivent êtrdifférenciées, ou si la chaîne comporte des espaces ou caractèrespéciaux

SELECT * FROM PRIX

OuSELECT PNOM, FNOM, COUT FROM PRIX

 _*_ signifie que toutes les colonnes de la table sont sélectionnées.

SELECT n’élimine pas les duplications. Pour les éliminer, on utilise la clause DISTINCTou UNIQUE: si, dans le résultat, plusieurs lignes sont identiques, une seule sera conservée

IV.2.1.2 Clause FROM

La clause FROM donne la liste des tables participant à l'interrogation. Il est possible delancer des interrogations utilisant plusieurs tables à la fois.

Page 13

Page 14: Expose SQL

5/11/2018 Expose SQL - slidepdf.com

http://slidepdf.com/reader/full/expose-sql 14/39

Architecture client serveur – Exposé : Langage SQL

FROM table [t-alias] [, table [t-alias]] ...

t-alias : renommage de la table le temps de la requête

IV.2.1.3 Clause WHERE

La clause WHERE permet de spécifier quelles sont les lignes à sélectionner dans une tablou dans le produit cartésien de plusieurs tables. Elle est suivie d'un prédicat (expressionlogique ayant la valeur vrai ou faux) qui sera évalué pour chaque ligne. Les lignes pour lesquelles le prédicat est vrai seront sélectionnées.

SELECT PNOM, COUT AS ‘PRIX DU PRODUIT’FROM PRIX

WHERE FNOM =’JEAN’ 

IV.2.1.3.1 Conditions de sélection

. Attribut opérateur Valeur 

. Attribut opérateur AttributOpérateur : =, <, >, ≤, ≥, <>.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 chaîne de caractère avec éventuellement de

caractères jokers._ ___ remplace 1 caractère exactement

 _ _%_ remplace une chaîne de caractères de longueur quelconque, y compris de longueunulle

IV.2.1.3.2 Requêtes imbriquées simples

Page 14

Page 15: Expose SQL

5/11/2018 Expose SQL - slidepdf.com

http://slidepdf.com/reader/full/expose-sql 15/39

Architecture client serveur – Exposé : Langage SQL

La jointure s’exprime par deux blocs. SELECT… FROM…. WHERE imbriqués.Requête : Nom, Coût et fournisseurs des produits commandés par ‘Jean’.

SELECT PNOM, COUT, FNOM FROM PRIXWHERE 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 réalité des jointures entre cetables.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 colonnd'une table à une colonne d'une autre table, on parle de jointure naturelle ou équi-jointur

On trouve aussi des jointures d'une table sur elle-même. On parle alors d'auto-jointure. arrive que l'on doive procéder à des jointures externes, c'est-à-dire joindre une table à unautre, même si la valeur de liaison est absente dans une table ou l'autre. Dans certains caon peut procéder à des jointures hétérogènes, c'est-à-dire que l'on remplace le critèrd'égalité par un critère d'inégalité ou de différenc

 Exemple :

SELECT a.PNOM, COUT, FNOM FROM PRIX AS a

JOIN COMMANDE AS b ON a.PNOM = b.PNOM -- condition de jointureWHERE CNOM = ’Jean’ -- condition de sélection

IV.2.1.3.4 Requêtes imbriquées plus complexes

Requête : Fournisseurs de briques à un coût inférieur au coût des tuiles.

SELECT FNOM FROM PRIX

WHERE PNOM = "Briques" AND COUT < ANY (SELECT COUT

FROM PRIXWHERE PNOM = "Tuiles")

Requête : Fournisseurs qui fournissent au moins un produit.

SELECT FNOM FROM FOURNISSEUR 

WHERE EXISTS (SELECT * FROM PRIX

Page 15

Page 16: Expose SQL

5/11/2018 Expose SQL - slidepdf.com

http://slidepdf.com/reader/full/expose-sql 16/39

Architecture client serveur – Exposé : Langage SQL

WHERE FOURNISSEUR.FNOM = PRIX.FNOM)

IV.2.1.3.5 Opérations ensemblistes

UNION, INTERSECT, MINUS

Requête: Produits commandés qui coûtent plus que 1000F ou ceux qui sont commandé par Jean.

SELECT PNOM FROM PRIX WHERE COUT > 1000

UNIONSELECT PNOM FROM COMMANDE WHERE CNOM = ‘Jean’

IV.2.1.4 Fonctions de calcul

COUNT : Compte le nombre de n-uplets sans élimination des dupliqués ni des valeurnulles

Requête: Nombre de fournisseurs de Porto-Novo

SELECT COUNT (*) FROM FOURNISSEUR WHERE VILLE ="Porto-Novo"

 Requête: Nombre de fournisseurs qui fournissent actuellement des produits

SELECT COUNT (DISTINCT ou UNIQUE FNOM) FROM PRIX

SUM : Permet de faire la somme.

Requête : Quantité totale de briques commandées

SELECT SUM (QTE) FROM COMMANDE WHERE PNOM = ‘Briques’

AVG : Calcul la moyenneRequête: Fournisseurs des briques à un prix inférieur au coût 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

Page 17: Expose SQL

5/11/2018 Expose SQL - slidepdf.com

http://slidepdf.com/reader/full/expose-sql 17/39

Architecture client serveur – Exposé : Langage SQL

Cette clause permet de préciser les attributs de partitionnement des relations déclarées danla clause FROM.Elle se place juste après la clause WHERE, ou après la clause FROM si la clause WHERn'existe pas.

Requête : Requête pour chaque produit fourni, son coût moyen

SELECT PNOM AVG (COUT) FROM PRIX GROUP BY PNOM.

IV.2.1.7 Clause HAVING

HAVING prédicat

Cette clause permet d’éliminer les partitionnements comme la clause WHERE élimine de

n-uplets.Elle sert à préciser quels groupes doivent être sélectionnés.Elle se place après la clause GROUP BY.Le prédicat suit la même syntaxe que celui de la clause WHERE. Cependant, il ne peu

 porter que sur des caractéristiques de groupe : fonction de groupe ou expression figurandans la clause GROUP BY.

Requête : Les produits fournis et leur coût moyen pour les fournisseurs dont le siège est Cotonou seulement si le coût minimum du produit est >1000

SELECT PNOM, AVG (COUT) FROM PRIX, FOURNISSEUR 

WHERE VILLE = ‘COTONOU’ AND PRIX.FNOM = FOURNISSEUR.FNOM

GROUP BY PNOMHAVING MIN (COUT) > 1000

IV.2.1.8 Clause ORDER BY

Les lignes constituant le résultat d'un SELECT sont obtenues dans un ordre indéterminé.La clause ORDER BY précise l'ordre dans lequel la liste des lignes sélectionnées sera

donnée. ORDER BY exp1 [DESC], exp2 [DESC], ...

L'option facultative DESC donne un tri par ordre décroissant. Par défaut, l'ordre estcroissant.

IV.2.1.9 Limiter le nombre de lignes renvoyées

Page 17

Page 18: Expose SQL

5/11/2018 Expose SQL - slidepdf.com

http://slidepdf.com/reader/full/expose-sql 18/39

Architecture client serveur – Exposé : Langage SQL

Aucune méthode standardisée ne permet de limiter le nombre de lignes renvoyées par unselect mais la plupart des SGBDs offre cette facilité.Voici quelques exemples qui montrent comment quelques SGBDs limitent à 10 le nombrede lignes renvoyées :

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 données

Insertion de lignes dans une table Via formulaire où via requêtes

INSERT INTO nom-table [(nom-col [, nom-col ...])]

{VALUES (constante [constante…]) | subquery}

La liste des colonnes :

- Contient des noms d’attributs de la table- Si un attribut de la table est omis dans la liste, il prend la valeur par 

défaut, NULL sinon (si autorisé)- Si aucun nom d’attribut n’est donné, la clause VALUES ou la sous

requête doit fournir une valeur pour chaque attribut de la table suivantl’ordre du schéma

Clause VALUES : spécifie un n-uplets de valeurs à insérer dans la relation- Avec cette clause, un seul n-uplet peut être inséré à la fois- Sous-requête : instruction SELECT qui renvoie les n_uplets à insérer 

Exemple :

INSERT INTO PRIX (PNOM, FNOM, COUT)

VALUES (“Bois”, “PAUL”, 20000)

IV.2.3 Mises à jour de données

Page 18

Page 19: Expose SQL

5/11/2018 Expose SQL - slidepdf.com

http://slidepdf.com/reader/full/expose-sql 19/39

Architecture client serveur – Exposé : Langage SQL

 La commande UPDATE permet de modifier les valeurs d'un ou plusieurs champs, danune ou plusieurs lignes existantes d'une table.UPDATE nom-tableSET {nom-col = {expression | (subquery) } [ (nom-col [, nom-col…]) = (subquery) }

[WHERE condition]

Mises à jour des attributs cités des lignes qui vérifient la condition, ou de toutes les lignesi la condition est omise.

IV.2.4 Suppression de données

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 toutles lignes

IV.3 Les commandes DCL ( Data Control Language)

Les commandes GRANT et REVOKE permettent de contrôler la sécurité et les accès audonnées.

IV.3.1 Les Droits d’accès

La gestion des droits d’accès aux tables est décentralisée. Chaque créateur de table obtientous les droits d’accès à cette table en particulier le droit d’effectuer la sélectio(SELECT), l’insertion (INSERT) la suppression (DELETE), la mise à jour (UPDATE) aussi de référencer la table dans une contrainte avec la clause REFERENCE. Il peuensuite passer ses droits sélectivement à d’autres utilisateurs ou à tout le monde (PUBLICUn droit peut être passé avec le droit de le transmettre ou non. C’est la clause WITHGRANT OPTION

GRANT {priv_objet [, priv_obj…] | ALL} [(col)]

ON objet

TO {user| rôle | PUBLIC}[WITH GRANT OPTION]

 

Page 19

Page 20: Expose SQL

5/11/2018 Expose SQL - slidepdf.com

http://slidepdf.com/reader/full/expose-sql 20/39

Architecture client serveur – Exposé : Langage SQL

- ALL: tous les privilèges objets- Col: colonnes d’une table ou vue pour lesquelles le privilège e

accordé- TO : désigne le bénéficiaire du privilège- PUBLIC : privilège accordé à tous les utilisateurs- WITH GRANT OPTION : le bénéficiaire du privilège (user o

PUBLIC) peut à son tour transmettre le privilège obtenu à d’autreutilisateurs ou rôles. Les cycles sont interdits dans la propagation de

 privilèges.

IV.3.2 Suppression de privilège objets

REVOKE {priv [, priv…] | ALL

ON objet

FROM {user [, user…] | role | PUBLIC}[CASCADE CONSTRAINTS]

CASCADE CONSTRAINTS: nécessaire pour supprimer toutes les contraintes d’intégriréférentielles demandées sur l’objet à l’aide du privilège qui avait été accordé.L’instruction REVOKE peut être exécutée à tout moment.

Suppression du privilège :- Pour l’utilisateur nommé dans REVOKE- Aux autres utilisateurs de la base à qui l’utilisateur nommé ava

 propagé le privilège (en utilisant son droit WITH GRANT OPTION) 

IV.4 Les commandes TCL (Transaction Control Language)

Les commandes transactionnelles permettent de contrôler des transactions se déroulandans un système de gestion de base de données relationnelle (SGBDR).

Les transactions sont des séquences de tâches s'effectuant dans un ordre logique pal'intermédiaire de l'utilisateur ou d'une automatisation.

Les tâches peuvent être essentiellement des commandes DML : d'insertion ( INSERT ), dsuppression ( DELETE ) ou de modification (UPDATE ) d'objets dans une base de données.

Ces diverses tâches peuvent être annulées en cours d'exécution puisqu'elles possèdent ucommencement et une fin.

Page 20

Page 21: Expose SQL

5/11/2018 Expose SQL - slidepdf.com

http://slidepdf.com/reader/full/expose-sql 21/39

Architecture client serveur – Exposé : Langage SQL

Au terme de la tâche, il est nécessaire de sauvegarder les changements. Toutefois, aucuenregistrement n'est effectué si la tâche a échoué pour une raison quelconque.

Les principales commandes transactionnelles pour contrôler ces séquences sont :

{SET | BEGIN} TRANSACTION;

détermine le début d'une transaction. BEGIN est utilisée 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é enregistrées précédemment.

SAVEPOINT nom_point;

insère un point de sauvegarde dans la liste de transactions, servant en conjonction ave ROLLBACK pour une annulation jusqu'à un point précis.

La commande  SAVEPOINT  évite une annulation complète des transactions par commande ROLLBACK .

Transactions...

SAVEPOINT nom_pointTransactions...ROLLBACK TO nom_point;

D'ailleurs, une commande spécifique permet de supprimer des points de sauvegarde

créés par la commande SAVEPOINT .

RELEASE SAVEPOINT nom_point;

ExempleBEGIN 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

Page 22: Expose SQL

5/11/2018 Expose SQL - slidepdf.com

http://slidepdf.com/reader/full/expose-sql 22/39

Architecture client serveur – Exposé : Langage SQL

INSERT INTO COMMANDE (NUM, PNOM, CNOM, QTE)VALUES (3, 'TOLES', 'PIERRE', 50000)

IF @@ERROR<>0

ROLLBACK TRANSACTION MYTRANELSE

COMMIT TRANSACTION MYTRAN

IV.5 Les procédures stockées

Les procédures stockées contiennent du code SQL compilé, permettant d'exécuter derequêtes lourdes ou des instructions régulièrement utilisées sur des bases de données.

Les procédures stockées sont conservées dans la base de données dans une formexécutable et sont capables d'appeler d'autres procédures ou fonctions comme d'êtappelées par d'autres programmes.

A l'instar des procédures des langages de programmation, outre qu'elles soient composéede diverses instructions, les procédures stockées sont capables de recevoir des paramètred'entrée et de retourner des valeurs en sortie.

La création des procédures stockées s'effectue par l'intermédiaire de l'instruction CREATPROCEDURE.

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

Page 23: Expose SQL

5/11/2018 Expose SQL - slidepdf.com

http://slidepdf.com/reader/full/expose-sql 23/39

Architecture client serveur – Exposé : Langage SQL

La clause VARYING , applicable aux paramètres de type CURSOR, indique le jeu drésultats pris en charge.

La clause OUTPUT permet de retourner la valeur aux instructions appelantes.

L'instruction WITH RECOMPILE spécifie que la procédure est recompilée à l'exécutiosans utiliser le cache pour le plan de la procédure.

L'option  RECOMPILE  est généralement utilisée pour des valeurs temporaires oatypiques sans remplacer le plan d'exécution placé en mémoire cache.

La clause WITH ENCRYPTION indique un cryptage de l'entrée de la table syscommencontenant le texte de l'instruction CREATE PROCEDURE . L'argument  ENCRYPTIO

 permet d'éviter la publication de la procédure dans le cadre de la réplication SQL Server.

La clause FOR REPLICATION indique que la procédure stockée doit être exécutée lorde la modification de la table concernée par un processus de réplication.

La clause AS indique les actions entreprises par la procédure.

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 recrée la procédure stockée si elle existe déjà.La clause OUT permet de retourner la valeur aux instructions appelantes.

La clause  IN  est utilisée pour spécifier une valeur pour l'argument en appelant  procédure.

La clause AS (dépréciée) ou IS indique les actions entreprises par la procédure.

Page 23

Page 24: Expose SQL

5/11/2018 Expose SQL - slidepdf.com

http://slidepdf.com/reader/full/expose-sql 24/39

Architecture client serveur – Exposé : Langage SQL

Les procédures stockées peuvent être appelées au moyen de l'instruction  EXECUT

(SQL Server) ou CALL (Oracle) à partir d'une autre procédure ou d'un lot d'instructionSQL Server peut utiliser une abréviation EXEC .

-- SQL Server

EXECUTE Procedure @Parametre = Valeur, ..., @ParametreN = ValeurN

-- OracleCALL 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

)

ISBEGIN

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

Page 25: Expose SQL

5/11/2018 Expose SQL - slidepdf.com

http://slidepdf.com/reader/full/expose-sql 25/39

Architecture client serveur – Exposé : Langage SQL

IV.6 Les déclencheurs (Triggers)

Les triggers (déclencheurs en français) ressemblent aux procédures stockées car ils soneux aussi compilés et enregistrés dans le dictionnaire des données de la base et ils sont l

 plus souvent écrits dans le même langage.

La différence est que leur exécution est déclenchée automatiquement par des événemenliés à des actions sur la base. Les événements déclencheurs peuvent être les commandeLMD insert, update, delete ou les commandes LDD create, alter, drop.

Une table peut comporter plusieurs déclencheurs d'un type donné, à condition quchacun possède un nom différent. Cependant, un déclencheur donné ne peut être assignqu'à une seule et unique table tout en s'appliquant à la fois, à l'insertion, la mise à jour et lsuppression d'enregistrements sur la table en question.

Une table ne peut posséder qu'un seul déclencheur INSTEAD OF d'un type donné.

Les déclencheurs se produisent soit après ( AFTER), soit avant ( BEFORE ) soit à l

place ( INSTEAD OF ) d'une action DML.

Un déclencheur sur  INSERT  s'exécute à chaque opération d'insertion lancée pl'utilisateur ou par un programme. Lors d'une insertion, l'enregistrement est inséré à

fois dans la table cible et dans une table temporaire dénommée inserted . Une telle tab peut permettre de vérifier la cohérence des enregistrements.

Un déclencheur sur  DELETE  s'exécute à chaque opération de suppression lancée pal'utilisateur ou un programme. Lors d'une suppression, l'enregistrement est supprim

physiquement de la table cible et inséré dans une table temporaire dénommée delete

Cela peut permettre de récupérer l'enregistrement supprimé.

Un déclencheur sur UPDATE  s'exécute à chaque opération de mise à jour lancée pal'utilisateur ou par un programme. Lors d'une mise à jour, l'ancien enregistrement esupprimé et inséré dans la table temporaire deleted , tandis que le nouveau est inséré

la fois dans la table cible et dans la table inserted .La syntaxe des déclencheurs sous SQL Server :

CREATE TRIGGER nom_déclencheurON { nom_table | nom_vue }

[ WITH ENCRYPTION ]

Page 25

Page 26: Expose SQL

5/11/2018 Expose SQL - slidepdf.com

http://slidepdf.com/reader/full/expose-sql 26/39

Architecture client serveur – Exposé : Langage SQL

{{ { FOR | AFTER | INSTEAD OF } { [ INSERT ] [,] [ UPDATE ] [,] [ DELETE ] }

[ WITH APPEND ]

[ NOT FOR REPLICATION ]AS

}

instruction_SQL...}

}La suppression des déclencheurs s'effectue par l'intermédiaire de l'instruction DROP .DROP TRIGGER nom_déclencheur [ , nom_déclencheurN ]

La modification des déclencheurs s'effectue par l'intermédiaire de l'instructio

 ALTER. La syntaxe complète de la commande ALTER TRIGGER est en fait identique danle cas d'Oracle ou de SQL Server à celle de CREATE TRIGGER.

ALTER TRIGGER nom_déclencheur_existant

ON nom_table

FOR INSERT, UPDATE, DELETEAS instruction_SQL...

Tous les déclencheurs ( ALL) ou certains peuvent être activés ( ENABLE ) ou désactivé

( DISABLE ) au moyen de l'instruction ALTER TABLE .

ALTER TABLE table{ ENABLE | DISABLE } TRIGGER 

{ ALL | nom_déclencheur [ , nom_déclencheurN ] }

Exemple

CREATE TABLE tbl_produit ( nom VARCHAR(20), identificateur INTEGER )

GOINSERT tbl_produit

SELECT 'dentifrice', 1 UNION

SELECT 'savon', 2 UNIONSELECT 'savon', 0 UNION

SELECT 'brosse à dent', 3 UNION

SELECT 'brosse à dent', 0 UNIONSELECT 'rasoir', 4 UNION

SELECT 'mousse à raser', 5 UNIONSELECT 'serviette', 6 UNION

Page 26

Page 27: Expose SQL

5/11/2018 Expose SQL - slidepdf.com

http://slidepdf.com/reader/full/expose-sql 27/39

Architecture client serveur – Exposé : Langage SQL

SELECT 'serviette', 0 UNION

SELECT 'peigne', 7 UNIONSELECT 'brosse à cheveux', 8

GOCREATE TRIGGER declencheur_suppression

ON tbl_produit FOR DELETE

ASSELECT nom AS "Lignes à supprimer"

FROM deleted

GOCREATE TRIGGER declencheur_insteadof 

ON tbl_produit INSTEAD OF DELETE

ASDELETE tbl_produit

FROM tbl_produit INNER JOIN deletedON tbl_produit.nom = deleted.nomWHERE tbl_produit.identificateur = 0

GO

DELETE tbl_produitWHERE nom IN ('brosse à dent', 'serviette', 'savon')

GOSELECT * FROM tbl_produit

Cet exemple met en exergue le processus permettant de faire appel à différents types ddéclencheurs au sein d'une table. Le premier déclencheur  FOR DELETE  s'exécute lod'une suppression en sélectionnant les lignes supprimées à partir de la table temporairdeleted . Le second Trigger se déclenche et exécute ses propres instructions à la place de commande de déclenchement DELETE afin d'effectuer une comparaison entre les noms d

  produits sur les deux tables tbl_produit  et deleted  pour ensuite supprimer lenregistrements possédant un identificateur égal à zéro.

IV.7 Les curseurs

Un curseur SQL représente une zone de mémoire de la base de données où la dernièrinstruction SQL est stockée.

Syntaxe sous SQL Server

DECLARE nom_curseur [INSENSITIVE] [SCROLL] CURSOR 

FOR instruction_sélection[FOR {READ ONLY | UPDATE [OF nom_colonne [ ,...n ] ] } ]

Page 27

Page 28: Expose SQL

5/11/2018 Expose SQL - slidepdf.com

http://slidepdf.com/reader/full/expose-sql 28/39

Architecture client serveur – Exposé : Langage SQL

Syntaxe sous OracleDECLARE CURSOR nom_curseur [(paramètre [, paramètre]...)]

[RETURN return_type] IS instruction_sélection;

Un curseur s'ouvre par l'intermédiaire de la commande OPEN suivi du nom d

curseur et de ses éventuels arguments.

OPEN nom_curseur[(liste_arguments...)];

La commande FETCH  permet de parcourir un enregistrement du curseur ouver

L'ensemble des enregistrements d'un curseur peut être parcouru à l'aide d'une structuritérative.

 @@FETCH_STATUS retourne l'état de la dernière instruction FETCH appliquée a

curseur en cours d'utilisation. Les valeurs 0, -1 et -2 indiquent respectivement l'instruction FETCH a réussi ou a échouée et si la ligne recherchée n'a pas été trouvée.

L'attribut Oracle %NOTFOUND retourne FALSE si la dernière 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 dressources. Il est également possible de désallouer le curseur.

CLOSE nom_curseur;

-- Exemple SQL ServerDESALLOCATE nom_curseur;

-- Exemple OracleDESALLOCATE CURSOR nom_curseur;

Exemples -- Déclaration du curseur

DECLARE mycursor CURSOR LOCAL

FOR 

SELECT NUM, PNOM, QTEFROM COMMANDE

WHERE CNOM='Jean'-- Ouverture du curseur

OPEN mycursor

-- Premiere recuperationFETCH NEXT FROM mycursor

Page 28

Page 29: Expose SQL

5/11/2018 Expose SQL - slidepdf.com

http://slidepdf.com/reader/full/expose-sql 29/39

Architecture client serveur – Exposé : Langage SQL

-- puis on boucle tant qu'il reste des lignes à récupérerWHILE @@FETCH_STATUS=0

BEGIN

-- ceci est exécuté pour chaque ligne du curseurFETCH NEXT FROM mycursor

END

-- fermeture et déchargement du curseurCLOSE mycursor

DEALLOCATE mycursor

IV.8 PL/SQL

PL/SQL ( Procedural Language / Structured Query Language) est un langage procédur propriétaire créé par Oracle et utilisé dans le cadre de bases de données relationnelles.

  permet de combiner des requêtes SQL et des instructions procédurales (boucleconditions...), dans le but de créer des traitements complexes destinés à être stockés sur serveur de base de données (objets serveur), comme par exemple des procédures stockéeou des déclencheurs.

Les dernières évolutions proposées par Oracle reposent sur un moteur permettant de créet gérer des objets contenant des méthodes et des propriétés.

IV.8.1 Structure d’un programme PL/SQL

La structure de base d’un programme PL/SQL est celle de bloc (possiblement imbriqué). a généralement la forme suivante:DECLARE/* section de déclaration */

BEGIN

/* corps du bloc de programmeIl s’agit de la seule zone dont la présence est obligatoire */

EXCEPTION

/* gestion des exceptions */END;

IV.8.2 Structure de contrôle

Comme n’importe quel langage procédural, PL/SQL possède un certain nombre dstructures de contrôles évoluées comme les branchements conditionnels et les boucles.

Page 29

Page 30: Expose SQL

5/11/2018 Expose SQL - slidepdf.com

http://slidepdf.com/reader/full/expose-sql 30/39

Architecture client serveur – Exposé : Langage SQL

IV.8.2.1 Les branchements conditionnels

IF <condition> THEN

commandes;

[ ELSE IF <condition> THENcommandes;]

[ ELSEcommandes; ]

END IF;

Exemple

IF nomEmploye=’TOTO’ THENsalaire:=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> LOOPcommandes;

END LOOPToutes ces structures de contrôles peuvent évidemment être imbriquées les unes dans leautres.

Page 30

Page 31: Expose SQL

5/11/2018 Expose SQL - slidepdf.com

http://slidepdf.com/reader/full/expose-sql 31/39

Architecture client serveur – Exposé : Langage SQL

IV.8.3 La gestion des exceptions

PL/SQL permet de définir dans une zone particulière (de gestion d’exception), l’attitudque le programme doit avoir lorsque certaines erreurs définies ou prédéfinies se produisenUn certain nombre d’exceptions sont prédéfinies sous Oracle. Citons, pour les plufréquentes : NO DATA FOUND (devient vrai dès qu’une requête renvoie un résultat videTOO MANY ROWS (requête renvoie plus de lignes qu’escompté), CURSOR ALREADYOPEN (curseur déjà ouvert), INVALID CURSOR (curseur invalide)...L’utilisateur peut définir ses propres exceptions. Dans ce cas, il doit définir celles ci danla zone de déclaration.

 Exemple :

excpt1 EXCEPTION

Puis, cette exception est levée quelque part dans le programme (après un test noconcluant, par exemple), par l’instruction :

RAISE excpt1

Enfin, dans la zone d’exception un traitement est affecté à chaque exception possib(définie ou prédéfinie) :

EXCEPTION

WHEN <exception1> [OR <exception2> OR ...] THEN <instructions>

WHEN <exception3> [OR <exception2> OR ...] THEN <instructions>

WHEN OTHERS THEN <instructions>

END;

Evidemment, un seul traitement d’exception peut se produire avant la sortie du bloc.

IV.8.4 Affichage

PL/SQL n’est pas un langage avec des fonctionnalités d’entrées sorties évoluées (ce n’est pas son but). Toutefois, on peut imprimer des messages et des valeurs de variables de plusieurs manières différentes. Le plus pratique est de faire appel à un package prédéfini :DBMS output.

Page 31

Page 32: Expose SQL

5/11/2018 Expose SQL - slidepdf.com

http://slidepdf.com/reader/full/expose-sql 32/39

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 || ’ à bientôt’);

Si on suppose que nom est une variable dont la valeur est ”toto”, l’instruction affichera :Au revoir toto à bientôt.

Page 32

Page 33: Expose SQL

5/11/2018 Expose SQL - slidepdf.com

http://slidepdf.com/reader/full/expose-sql 33/39

Architecture client serveur – Exposé : Langage SQL

V. Comparaison de quelques fonctions SQL dans

différents systèmes de gestion de bases dedonnées relationnelles

D’un SGBDR à un autre, les fonctions SQL ne sont pas identiques. La différence entre cefonctions se résume dans les tableaux ci-après :

Légende :

O : Oui N : NonX : Existe mais syntaxe hors norme! : Même nom mais fonction différente- : implémentation partielle

a. Agrégation statistique

b. Fonctions "système"

Fonction DescriptionNorme

SQLParadox Access MySQL

PostGre

SQL

SQL

ServerOracle

CURRENT_DATE Date courante O N N O O N NCURRENT_TIME Heure courante O N N O O N NCURRENT_USER Utilisateur courant O N N N O O NSESSION_USER Utilisateur autorisé O N N X O O NSYSTEM_USER Utilisateur système O N N X O O N

DATABASE  Nom de la bases de donnéescourante  N N N O N O O

SYSDATE Date et/ou heure courante N N N O N N OUSER Utilisateur courant N N N O N O OVERSION Version du SGBDR N N N O O N N

Page 33

Fonction DescriptionNormeSQL

Paradox Access MySQL PostGreSQLSQL

ServerOracle In

AVG Moyenne O O O O O O OCOUNT Nombre O O X O O O OMAX Maximum O O O O O O OMIN Minimum O O O O O O OSUM Total O O O O O O OEVERY Tous (booléen) O N N N N N N

ANY / SOME Au moins un (booléen) O N N N N N N

Page 34: Expose SQL

5/11/2018 Expose SQL - slidepdf.com

http://slidepdf.com/reader/full/expose-sql 34/39

Architecture client serveur – Exposé : Langage SQL

c. Fonctions générales

Fonction DescriptionNormeSQL

Paradox Access MySQL PostGreSQLSQL

ServerOracle Inte

OCTET_LENGTH Longueur en octet O N N O O N ODATALENGTH Longueur N N N N N O N

DECODE Fonctionconditionnelle

 N N N N N N O

LENGTH Longueur N N O O O O O NVL Valeur non NULL N N N N N N O N

TO_CHAR Conversion dedonnées en chaîne

 N N N N N N O

TO_DATE Conversion en date N N N N O N O

TO_NUMBER Conversion ennombre

 N N N N N N O

d. Fonctions de chaînes de caractères

Fonction Description

Norm

eSQL

Paradox

AccessMySQL

PostGreSQL

SQLServer

Oracle Inte

|| Concaténation O O N X O N OCHAR_LENGTH Longueur d'une chaîne O N N X O N NCHARACTER_LENGTH Longueur d'une chaîne O N N O O O NCONCATENATE Concaténation O N N N N O N

CONVERTConversion de formatde caractères

O N N N N ! O

LIKE (prédicat) Comparaison partielle O O X O O O OLOWER Mise en minuscule O O N O O O O

POSITIONPosition d'une chaînedans une sous chaîne

O N N O O N N

SUBSTRINGExtraction d'une souschaîne

O O N O O N N

UPPER Mise en majuscule O O N O O O O

e. Fonctions de chaînes de bits

Fonction DescriptionNorme

SQLParadox Access MySQL PostGreSQL

SQL

ServerOracle Inter

BIT_LENGTH Longueur en bit O N N N N N N N& "et" pour bit logique N N ? ? ? O ? ?

|"ou" pour bitlogique

 N N ? ? ? O ? ?

^"ou" exclusif pour  bit logique

 N N ? ? ? O ? ?

Page 34

Page 35: Expose SQL

5/11/2018 Expose SQL - slidepdf.com

http://slidepdf.com/reader/full/expose-sql 35/39

Architecture client serveur – Exposé : Langage SQL

f. Fonctions numériques

Fonction DescriptionNormeSQL

Paradox Access MySQLPostGre

SQLSQL

ServerOracle Inte

% Modulo N N N O O O N N

+ - * / ( ) Opérateurs et parenthésage

O O O O O O O O

ABS Valeur absolue N N O O O O O N

ASCIIConversion de caractèreen code ASCII

 N N O O O O O N

EXP Exponentielle N N O O O O O NLN Logarithme népérien N N N N N N O N

LOG(n,m)Logarithme en base nde m

 N N N N O N O N

LOG10 Logarithme décimal N N N O N O O N

MOD Modulo N N O O O O O NPOWER Elévation à la puissance N N O O N O O NROUND Arrondi N N O O O O N NSQRT Racine carrée N N O O O O N N

g. Fonctions temporelles

Fonction DescriptionNorme

SQLParadox Access MySQL PostGreSQL

SQL

ServerOracle Inte

AGE Age N N N N O N NDATE_ADD

Ajout d'intervalle àune date

 N N N O N N N

DATE_FORMAT Formatage de date N N N O N N NDAY Jour d'une date N N N N N O NDAYNAME Nom du jour N N O O N O NHOUR Extraction de l'heure N N O O N O NLAST_DAY Dernier jour du mois N N N N N N OMINUTE N N O O N O NMONTH Mois d'une date N N O O N O O

 NEXT_DAY Prochain premier jour de la semaine  N N N N N N O

SECOND Extrait les secondes N N O O N O NWEEK Numéro de la semaine N N O O N O OYEAR Année d'une date N N O O N O O

Page 35

Page 36: Expose SQL

5/11/2018 Expose SQL - slidepdf.com

http://slidepdf.com/reader/full/expose-sql 36/39

Architecture client serveur – Exposé : Langage SQL

h. Fonctions OLAP (norme SQL:1999)

Fonction DescriptionNorme

SQLParadox Access MySQL PostGreSQL SQL Server Oracle In

CUBE

Sous totaux des

agrégats pour toutesles combinaisons possibles

O N N N N O O

ROLLUP

Sous totaux desagrégats pour toutesles combinaisonsvisibles

O N N N N O O

GROUPINGSETS

Sous totaux desagrégats pour toutesles combinaisonsspécifiées

O N N N N O O

GROUPINGS Indicateur de soustotalisation

O N N N N O O

 NULL FIRTS / NULL LAST

Spécification declassement pour lesmarqueurs NULL

O N N N N N O

i. Fonctions de fenêtrage et analytiques (normes 2003 et 2008)

Fonction DescriptionNormeSQL

Paradox Access MySQL PostGreSQLSQL

ServerOracle Fir

ROW_NUMBER Numérotation des lignes O N N N N O O NTILE N-tile (décile, centile, ....) O N N N N O O NAgrégats (MAX,MIN, COUNT,SUM...)

Calcul d'agrégat avecfenêtrage

O N N N N O O

ROWS / RANGEFenêtre de calcul par ligneou valeurs

O N N N N N O

PRECEDING * /FOLLOWING * /BETWEEN

Bornage de la fenêtre decalcul

O N N N N N O

Clause WINDOW Définition d'une fenêtrede calcul O N N N N N N

Page 36

Page 37: Expose SQL

5/11/2018 Expose SQL - slidepdf.com

http://slidepdf.com/reader/full/expose-sql 37/39

Architecture client serveur – Exposé : Langage SQL

 j. Prédicat, opérateurs et structures diverses

Fonction DescriptionNormeSQL

Paradox Access MySQL PostGreSQLSQL

ServerOracle F

CASE Structure conditionnelle O N N O O O XIS [NOT] TRUE Vrai O N N N N N N

INNER JOIN Jointure interne O O O O O O NLEFT, RIGHT, FULLOUTER JOIN

Jointure externe O O O O O O N

INTERSECT Intersection (ensemble) O ? N N O N XUNION Union (ensemble) O ? O N O O OEXCEPT Différence (ensemble) O ? N N O N X[NOT] BETWEEN Fourchette O O O O O O[NOT] EXISTS Existence O ? ? N O O O

ALLComparaison à toutes lesvaleurs d'un ensemble

O ? O N O O O

ANY / SOME Comparaison à au moinsune valeur de l'ensemble

O ? O N O O O

UNIQUE Existance sans doublons O N N N N N NRow value construteur Construteur de ligne valuées O N N N N - -

k. Fonctions spéciales

Fonction DescriptionNorme

SQLParadox Access MySQL PostGreSQL

SQL

ServerOracle Fireb

TABLE SAMPLE Echantillon de données O N N N N O O N

TRUNCATE Vidage de table O N N N N O O O

OFFSET / FETCH Limitation des lignesretournées

O N N N N N N N

LIMIT/TOP Nombre de ligneretournée

 N N N LIMIT LIMIT TOP N ROW

"Row Id" Identifiant de ligne N N N _rowid oid N rowid ?

l. Sous requêtes

FonctionNormeSQL

Paradox Access MySQL PostGreSQLSQL

ServerOracle Fire

Imbriquées O O O N O O O O

Dans la clause SELECT O X O N O O O ODans la clause FROM O N N N O O O NDans la clause WHERE O O O N O O O ODans la clause HAVING O O N N O O O OCTE (Common TableExpression : expression de table)

O N N N N O O O

Requêtes récursives via CTE O N N N N O X O

Page 37

Page 38: Expose SQL

5/11/2018 Expose SQL - slidepdf.com

http://slidepdf.com/reader/full/expose-sql 38/39

Architecture client serveur – Exposé : Langage SQL

Conclusion

SQL est un langage déclaratif régi par les normes qui sont diversement respectées par le

éditeurs des SGBDR. L’évolution de SQL permet aujourd’hui de manipuler aussi dedonnées relatives au multimédia et d’intégrer des données XML.

Le succès que connaissent les grands éditeurs de SGBDR a plusieurs origines et repos

notamment sur SQL.

SQL peut s’interfacer avec des langages de troisième génération comme C, Ada ou

Cobol, mais aussi avec des langages plus évolués comme C ++, Java, Delphi, C#, etc.Les procédures stockées offrent des gros avantages pour les applications client/serveu

surtout au niveau des performances :

- le trafic sur le réseau est réduit car les clients SQL ont seulement à envoy

l'identification de la procédure et ses paramètres au serveur sur lequel elle est stockée.

- les procédures sont précompilées une seule fois quand elles sont enregistrée

L'optimisation a lieu à ce moment et leurs exécutions ultérieures n'ont plus à passer pa

cette étape et sont donc plus rapides. De plus les erreurs sont repérées dès la compilation

 pas à l'exécution.

Le principal inconvénient des procédures stockées est qu'elles impliquent une dépendanc

forte vis-à-vis du SGBD car chaque SGBD a sa propre syntaxe et son propre langage d

 programmation.

Ces différences font qu'un code source écrit sans précaution pour un SGBD donné n

fonctionnera pas forcément avec un autre SGBD.

Page 38

Page 39: Expose SQL

5/11/2018 Expose SQL - slidepdf.com

http://slidepdf.com/reader/full/expose-sql 39/39

Architecture client serveur – Exposé : Langage SQL

Références

Bibliographie

•  Bases de données - de la modélisation au SQL - Laurent Audibert - Ellipses 2009

• SQL Synthèse de cours et exercices - 2e édition - Frédéric 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