1
Le Langage SQL (1)
Le Langage SQL (1)
 INTRODUCTION
 Le SQL est un langage structuré de requêtes qui permet de
créer, de modifier et gérer des informations dans des BDR
 Le sigle SQL signifie "Structured Query Language", soit en français
"Langage de recherche structuré".
 Il a été développé par IBM au cours des années 70 et son
nom était SEQUEL, abréviation de Structured English
QUEry Language
2
Le Langage SQL (2)
Le Langage SQL (2)
 SQL a été normalisé par l'ANSI (American National Standards
Institute) et par l'ISO (International Organization for
Standardization).
 Une troisième norme (SQL3) est en cours de rédaction depuis 1999
par l'ANSI et l'ISO,
 Cette normalisation a donné naissance à une 1ère version
(SQL1) en 1987 puis à une 2ème version (SQL2) en 1992
3
Le Langage SQL (3)
Le Langage SQL (3)
 Malgré la normalisation ISO, il existe plusieurs variantes de SQL
sur le marché car chaque éditeur de SGBDR tente d’étendre le
standard pour accroître l’attrait commercial de son produit
Une requête en SQL commence par les mots clés: SELECT, DELETE,
UPDATE, INSERT INTO, CREATE et DROP
Chaque requête SQL doit obligatoirement se terminer par un Point Virgule
 On distingue 2 types de requêtes: Actions et Sélections
4
Le Langage SQL (4)
Le Langage SQL (4)
I. Requêtes Actions
 Sont des requêtes qui permettent de créer des tables, d’ajouter, de
supprimer des enregistrements d’une table, d’ajouter une colonne…
 L’instruction CREATE TABLE permet de créer une nouvelle table
Syntaxe
CREATE TABLE Nom_table (champ1 type CONSTRAINT
nom_contrainte PRIMARY KEY, champ2 type [NOT NULL], …,
champN type [NOT NULL]);
1. Création d’une table avec un seul champ comme clé primaire
5
Le Langage SQL (5)
Le Langage SQL (5)
CREATE TABLE Nom_table (champ1 type [NOT NULL],
champ2 type [NOT NULL], …, champN type, CONSTRAINT
nom_contrainte PRIMARY KEY (champ1, champ2,…)) );
2. Création d’une table avec plusieurs champs comme clé primaire
/* Créez une requête SQL permettant de créer la table EMPLOYES ( Nemployé,
Nom, Prénom, Fonction, Adresse, Codeville) tels que le 1er
champ est de type entier
les autres de type texte ayant respectivement une taille de: 25, 20, 15 et 50.
Tandis que le champ Codeville est de type Entier long */
CREATE TABLE EMPLOYES ( Nemployé INTEGER CONSTRAINT nom_index
PRIMARY KEY, Nom TEXT(25), Prénom TEXT(20), Fonction TEXT(15),
Adresse TEXT(50), Codeville LONG) ) ;
6
Le Langage SQL (6)
Le Langage SQL (6)
 Les conventions relatives aux noms des tables et des champs varient quelque
peu d'un SGBD à l'autre. En ce qui concerne plus particulièrement les champs:
 Le nombre de caractères ne doit pas être trop grand (64 dans Access, 18 à 30
dans d'autres SGBD) ;
 Seuls les lettres, les nombres et le caractère de soulignement sont autorisés.
Access admet les caractères accentués. Il admet aussi l'espace, mais le nom du
champ doit alors être écrit entre crochets ;
 Certains SGBD requièrent que le nom d'un champ commence par une lettre,
mais ce n'est pas le cas d'Access ;
7
Le Langage SQL (7)
Le Langage SQL (7)
 Les termes faisant partie du vocabulaire du langage SQL sont interdits ("date"
par exemple). Ce sont les mots réservés.
 Booléen (Oui / Non) : BIT ;
 Nombre entier : SHORT (entier), SMALLINT (entier), LONG (entier long),
INTEGER (entier long), BYTE (octet) ;
 Voici un échantillon représentatif des différentes façons d'exprimer un type
de données lors de la création d'une table en SQL dans Access :
 Nombre réel : SINGLE (réel simple), DOUBLE (réel double), NUMERIC
(réel double) ;
8
Le Langage SQL (8)
Le Langage SQL (8)
 Monétaire : CURRENCY, MONEY ;
 Date/Heure : DATE, TIME, DATETIME ;
 Texte : VARCHAR (255 caractères), CHAR(n) ou TEXT(n) (n caractères),
LONGTEXT (mémo, 65 535 caractères =32K max.) ;
 Fichier binaire : LONGBINARY (Objet OLE) ;
 Compteur : COUNTER (NuméroAuto).
Remarque:
On notera qu'il n'est pas possible de créer un champ de type hypertexte via
une commande SQL dans Access. Même remarque en ce qui concerne les
listes de choix.
9
Le Langage SQL (9)
Le Langage SQL (9)
/* Créez une requête SQL permettant de créer la table DETAILS ( Ncommande,
Réf, Pu,Quantité, Remise) tels que les champs sont de type respectivement:
entier long, texte de taille 30, monétaire, entier et réel simple et tel que aussi les
champs Pu & Quantité sont non nuls*/
CREATE TABLE DETAILS ( Ncommande Integer, Réf Char(30),
Pu Currency NOT NULL, Quantité Smallint NOT NULL, Remise Single,
CONSTRAINT nom_index PRIMARY KEY ( Ncommande, Réf ) ) ;
 L’instruction ALTER TABLE permet d’ajouter ou de supprimer
un seul champ à une table. Elle permet aussi la création et la suppression
des liens entre les tables d’une base de données.
10
Le Langage SQL (10)
Le Langage SQL (10)
/* Créez une requête SQL permettant de créer la table VILLES ( Codeville, Ville)
tels que le 1er
champ est de type NuméroAuto et le deuxième est de type texte
ayant une taille de 20*/
CREATE TABLE VILLES ( Codeville Counter CONSTRAINT nom_index
PRIMARY KEY, Ville Text(20) ) ;
/* Modifiez la table EMPLOYES en déclarant le champ "CodeVille" comme
clé étrangère, puis créez un lien nommé lien_ville sur le champ
CodeVille, en précisant que le côté 1 du lien est le champ Code_Ville
de la table VILLES .*/
11
Le Langage SQL (11)
Le Langage SQL (11)
ALTER TABLE EMPLOYES ADD CONSTRAINT Lien_ville
FOREIGN KEY (Code_Ville) REFERENCES VILLES (Code_Ville);
/* Supprimer le lien nommé lien_ville existant entre la table EMPLOYES et
la table VILLES selon le champ Codeville.*/
ALTER TABLE EMPLOYES DROP CONSTRAINT Lien_ville;
/* Créez une requête SQL permettant d’ajouter le champ Codecli à la table
DETAILS. Ce champ est de type texte, de taille 20 caractères et il est non nulle
ALTER TABLE DETAILS ADD COLUMN Codecli TEXT(20) NOT NULL;
12
Le Langage SQL (12)
Le Langage SQL (12)
 L’instruction DROP TABLE permet de supprimer une table d’une base
de données
/* Créez une requête SQL permettant de supprimer le champ Codecli de la table
DETAILS.
ALTER TABLE DETAILS DROP COLUMN Codecli ;
Syntaxe
DROP TABLE Nom_table ;
13
Le Langage SQL (13)
Le Langage SQL (13)
Soit la table ACTEURS créée sous ACCESS:
ACTEURS (N_act, Nom, Prénom, Nationalité, Salaire, Age, Films)
/* Créez une requête SQL permettant de supprimer la table DETAILS
définitivement de la base de données
DROP TABLE DETAILS ;
 L’instruction DELETE permet d’effacer des enregistrements d’une
table
/* Effacez tous les enregistrements de la table ACTEURS*/
14
Le Langage SQL (14)
Le Langage SQL (14)
DELETE * FROM ACTEURS ;
(Ou bien )
DELETE N_act FROM ACTEURS ;
/* Effacez tous les acteurs de nationalité marocaine*/
DELETE * FROM ACTEURS WHERE Nationalité= "marocaine";
 L’instruction UPDATE permet la mise à jour d’une table
 Syntaxe : UPDATE table SET nouvellesvaleurs WHERE critères ;
15
Le Langage SQL (15)
Le Langage SQL (15)
/* Créez une requête permettant de modifier l’adresse de l'employé numéro 10
tout en sachant que la nouvelle adresse sera "10 Avenue Mohamed VI, Tanger"*/
UPDATE EMPLOYES SET Adresse = "10 Avenue Mohamed VI, Tanger"
WHERE Nemployé = 10 ;
/* Créez une requête permettant d’augmenter de 3% le salaire de tous les
acteurs */
UPDATE ACTEURS SET Salaire = Salaire * 1.03 ;
 L’instruction INSERT INTO permet d’ajouter un ou plusieurs
enregistrements à une table
16
Le Langage SQL (16)
Le Langage SQL (16)
1. Requête ajout d’un seul enregistrement
INSERT INTO Nom_table [(champ1, champ2, …)]
VALUES (valeur1, valeur2, …) ;
Syntaxe
2. Requête ajout de plusieurs enregistrements
INSERT INTO Nom_table 1 [IN externaldatabase] (Champ1, Champ2, …)
SELECT (Champ1, Champ2, …)
FROM Nom_table 2 ;
17
Le Langage SQL (17)
Le Langage SQL (17)
/* Créez une requête permettant d’ajouter l’enregistrement suivant dans
la table EMPLOYES: (100, BEN AZOUZ, Aziz, Ingénieur, 90050) */
INSERT INTO EMPLOYES (Nemployé, Nom, Prénom, Fonction, Codeville)
VALUES (100, "BEN AZOUZ", "Aziz", "Ingénieur", 90050) ;
/* Soit la table NOUVEAUX_EMPLOYES (Nemployé, Nom, Prénom, Fonction, Adr,
Codeville) Supposons que cette table contient des enregistrements. Question:
Ajoutez tous les enregistrements de la table ci-dessus dans la table EMPLOYES*/
INSERT INTO EMPLOYES
SELECT * FROM NOUVEAUX_EMPLOYES ;
18
Le Langage SQL (18)
Le Langage SQL (18)
I. Requête SELECTION
 Une requête de type SELECTION permet d'interroger une base
de données En la laissant intacte (sans la modifier)
 Le résultat d’une telle requête est renvoyé sous forme d’une table
formée d’un ou plusieurs attributs.
19
Le Langage SQL (3)
Le Langage SQL (3)
Syntaxe
SELECT [Prédicat]
{* / table.* /[table.attribut1 As alias1], [table.attribut2 As alias2], …}
FROM Liste de table [IN externaldatabase]
[WHERE Critère de sélection]
[GROUP BY Liste des attributs]
[HAVING Critère de sélection]
[ORDER BY Critère d’ordre]
20
Le Langage SQL (4)
Le Langage SQL (4)
Remarques
 [ ] signale une clause optionnelle, c.à.d on peut utiliser la requête SELECT
sans cette clause
 Chaque instruction SQL doit se terminer par un point-virgule
Elément Description
Prédicat L’un des prédicats suivants: ALL, DISTINCT,
DISTINCTROW ou TOP. Les prédicats permettent de limiter le
nombre d’enregistrement renvoyés. ALL est choisi par défaut
* Indique que tous les champs de la ou des tables spécifiées seront
sélectionnés
21
Le Langage SQL (5)
Le Langage SQL (5)
Elément Description
table Nom de la table contenant les champs dans lesquels les
enregistrements sont sélectionnés
attribut1, attribut2 Noms des champs contenant les données à extraire.
alias1, alias2 Utilisés pour renommer un attribut
externaldatabase Nom de la base de données contenant les tables si
elles ne se trouvent pas dans la base de données en cours
22
Le Langage SQL (6)
Le Langage SQL (6)
Exemple 1
Soit la table ACTEURS créée sous ACCESS:
ACTEURS (N_act, Nom, Prénom, Nationalité, Salaire, Age, Films)
/* Afficher tous les champs et tous les enregistrements de la table ACTEURS*/
SELECT * FROM ACTEURS;
/* Afficher uniquement le Nom et Prénom de chaque Acteur */
SELECT Nom, Prénom FROM ACTEURS;
/* Afficher les différentes nationalités sans doublons même si plusieurs acteurs
ont la même nationalité */
SELECT DISTINCT Nationalité FROM ACTEURS;
23
Le Langage SQL (7)
Le Langage SQL (7)
/* Afficher 50% des acteurs de la table ACTEURS*/
SELECT TOP 50 PERCENT * FROM ACTEURS;
/* Afficher les 3 premiers acteurs de la table ACTEURS */
SELECT TOP 3 * FROM ACTEURS;
 Avec l’instruction SELECT, il est possible d’utiliser les fonctions
suivantes pour effectuer des calculs:
SUM () renvoie la somme d’un champ
AVG () renvoie la moyenne d’un champ
MAX () renvoie la valeur maximale d’un champ
MIN () renvoie la valeur minimale d’un champ
COUNT (*) renvoie le nombre d’enregistrements de la table
24
Le Langage SQL (8)
Le Langage SQL (8)
/* Afficher le nombre totale d’enregistrement de la table ACTEURS et nommer
le champ retourné Nombre totale*/
SELECT COUNT(*) As [Nombre Totale] FROM ACTEURS;
/* Afficher le nombre totale d’enregistrement de la table ACTEURS */
SELECT COUNT(*) FROM ACTEURS;
/* Afficher le nombre d’enregistrement de la table ACTEURS qui ont une entrée dans
le champ Nom et nommer le champ retourné Nombre d’entrée*/
SELECT COUNT(Nom) As [Nombre d’entrée] FROM ACTEURS;
25
Le Langage SQL (9)
Le Langage SQL (9)
/* Afficher la moyenne des salaires de la table ACTEURS et nommer
le champ retourné Moyenne des salaires*/
SELECT AVG(Salaire) As [Moyenne des salaires] FROM ACTEURS;
/* Afficher le totale des salaires de la table ACTEURS et nommer le champ
retourné Totale des salaires */
SELECT SUM(Salaire) As [Totale des salaires] FROM ACTEURS;
/* Afficher le salaire le plus élevé de la table ACTEURS et nommer le champ
retourné
Salaire maximal*/
SELECT MAX(Salaire) As [Salaire maximal] FROM ACTEURS;
26
Le Langage SQL (10)
Le Langage SQL (10)
/* Afficher l’âge de l’acteur le plus jeune et nommer le champ retourné Age minimal */
SELECT MIN(Age) As [Age minimal] FROM ACTEURS;
Les éléments de la clause WHERE
 Ils permettent de définir la condition dans cette clause. La clause peut
être accompagnée des opérateurs logiques AND, OR ou NOT
Comparaison à une valeur (=, <, >, >=, <=, <>)
Comparaison à une fourchette de valeurs (BETWEEN … AND)
Comparaison à une liste de valeur ( IN (. , . ,...) )
Comparaison à un filtre (LIKE)
Test "tous" ou "au moins" (ALL, ANY/SOME)
Test existentiel (EXISTS)
27
Le Langage SQL (11)
Le Langage SQL (11)
/* Afficher tous les noms d’acteur dont l’âge est supérieur à 25*/
SELECT Nom FROM ACTEURS WHERE Age >= 25;
/* Afficher tous les noms d’acteur dont la nationalité est américaine et l’âge est
supérieur à 25*/
SELECT Nom FROM ACTEURS
WHERE (Nationalité="américaine") AND (Age >= 25);
/* Afficher tous les noms d’acteur dont la nationalité est américaine ou l’âge est
supérieur à 25*/
SELECT Nom FROM ACTEURS
WHERE (Nationalité="américaine") OR (Age >= 25);
/* Afficher les acteurs dont l’âge est entre 35 et 50 */
SELECT * FROM ACTEURS WHERE Age BETWEEN 35 AND 50;
28
Le Langage SQL (12)
Le Langage SQL (12)
/* Afficher tous les acteurs dont la nationalité est américaine, française ou marocaine*/
SELECT * FROM ACTEURS
WHERE Nationalité IN ("américaine","française", "marocaine");
/* Afficher tous les noms d’acteurs qui commencent par "DE" */
SELECT Nom FROM ACTEURS WHERE Nom LIKE "DE*";
/* Afficher tous les noms d’acteur ne commençant pas par D et ayant 4 lettres */
SELECT Nom FROM ACTEURS
WHERE Nom NOT LIKE "D*" AND Nom LIKE "????";
/* Afficher le nom d’acteur le plus âgé */
SELECT Nom FROM ACTEURS
WHERE Age >= ALL (SELECT Age FROM ACTEURS );
29
Le Langage SQL (13)
Le Langage SQL (13)
/* Afficher le nom d’acteur le plus jeune*/
SELECT Nom FROM ACTEURS
WHERE Age <= ALL (SELECT Age FROM ACTEURS);
Exemple 2
Soit les tables PRODUITS, COMMANDES, DETAILS et EMPLOYES créées sous
ACCESS:
PRODUITS (Réf , Nompr, Nfournisseur, Pu)
COMMANDES(Ncommande, Codecli, Nemployé, Date commande)
DETAILS(Ncommande, Réf , Quantité, Remise)
EMPLOYES(Nemployé, Nom, Prénom, Fonction, Adresse, Ville)
30
Le Langage SQL (14)
Le Langage SQL (14)
Les éléments de la clause FROM
/* Afficher tous les produits (Réf, Nompr) qui ont été vendus*/
SELECT PRODUITS.Réf, Nompr FROM PRODUITS INNER JOIN DETAILS
ON PRODUITS.Réf = DETAILS.Réf ;
SELECT PRODUITS.Réf, Nompr FROM PRODUITS, DETAILS
WHERE PRODUITS.Réf = DETAILS.Réf ;
(Ou bien )
31
Le Langage SQL (14)
Le Langage SQL (14)
Les jointures
La clause INNER JOIN a fait son apparition avec la version 2 de SQL,
parce que le besoin s'était de préciser à quel type de jointure
appartenait une relation. Plus précisément, on distingue :
la jointure interne, qui utilise INNER JOIN. Ne sont incluses dans le
résultat final que les lignes qui se correspondent dans les deux tables. Ce
cas est celui que nous avons traité précédemment ;
la jointure externe gauche, dans laquelle INNER JOIN est remplacé par
LEFT JOIN. Toutes les lignes de la première table sont incluses dans le
résultat de la requête, même s'il n'existe pas de ligne correspondante
dans la seconde table ;
32
Le Langage SQL (15)
Le Langage SQL (15)
/* Afficher tous les produits (Réf, Nompr, Mois de vente) qui ont été
vendus pendant le mois 6*/
SELECT PRODUITS. Réf, Nompr, Month ([Date commande]) AS [Mois de vente]
FROM PRODUITS INNER JOIN (DETAILS INNER JOIN COMMANDES
ON DETAILS. Ncommande = COMMANDES . Ncommande )
ON PRODUITS . Réf = DETAILS . Réf,
WHERE Month ([Date commande]) =6 ;
(Ou bien )
la jointure externe droite, dans laquelle INNER JOIN est remplacé par
RIGHT JOIN. Toutes les lignes de la seconde table sont incluses dans le
résultat de la requête, même s'il n'existe pas de ligne correspondante dans la
première table.
33
Le Langage SQL (16)
Le Langage SQL (16)
SELECT PRODUITS.Réf, Nompr, Month ([Date commande]) AS [Mois de vente]
FROM PRODUITS, DETAILS, COMMANDES
WHERE PRODUITS.Réf = DETAILS .Réf AND
DETAILS.Ncommande = COMMANDES . Ncommande
AND Month ([Date commande]) =6;
34
Le Langage SQL (17)
Le Langage SQL (17)
/* Afficher tous les produits dont le prix unitaire est supérieur au prix d’au
moins d’un produit vendu avec une remise de 25%*/
SELECT Réf, Nompr FROM PRODUITS
WHERE Pu >= ANY ( SELECT Pu FROM DETAILS Inner Join PRODUITS
ON PRODUITS.Réf=DETAILS.Réf
WHERE Remise = 0.25 );
35
Le Langage SQL (18)
Le Langage SQL (18)
/* Afficher tous les produits (Réf, Nompr) qui ont été vendus par ordre
décroissant selon le champ Réf*/
SELECT PRODUITS. Réf, Nompr
FROM PRODUITS , DETAILS
WHERE PRODUITS. Réf = DETAILS . Réf
ORDER BY PRODUITS.Réf DESC;
Remarque
 Par défaut, le résultat d’une requête sélection est trié selon l’ordre
croissant du premier attribut qui figure dans la clause SELECT
36
Le Langage SQL (19)
Le Langage SQL (19)
 On pourra changer temporairement les noms des tables et de travailler
avec lors de création d’une requête de type sélection
Exemple
/* Afficher tous les produits (Réf, Nompr) qui ont été vendus par ordre
décroissant selon le champ Réf*/
SELECT T1.Réf, Nompr
FROM PRODUITS AS T1 , DETAILS AS T2
WHERE T1.Réf = T2.Réf
ORDER BY T1.Réf DESC;
37
Le Langage SQL (20)
Le Langage SQL (20)
Ncommande Réf Quantité Remise
1 R1 10 0.6
1 R2 20 0.6
2 R1 15 0.5
2 R3 10 0.6
2 R6 25 0.9
3 R3 5 0.6
3 R7 65 0.1
3 R8 10 0.6
DETAILS
38
Le Langage SQL (20)
Le Langage SQL (20)
/* Afficher pour chaque commande le totale de quantités des produits vendus*/
SELECT Ncommande, SUM(Quantité) AS [Totale quantités vendues]
FROM DETAILS
GROUP BY Ncommande ;
/* Afficher pour chaque commande le totale de quantités des produits vendus
et tel que ce totale est > 60 */
SELECT Ncommande, SUM(Quantité) AS [Totale quantités vendues]
FROM DETAILS
GROUP BY Ncommande
HAVING SUM(Quantité) > 60 ;
39
Le Langage SQL (21)
Le Langage SQL (21)
/* Afficher les commandes qui contiennent plus que 3 produits (>=3)*/
SELECT Ncommande, COUNT(Réf) AS [Nombre de produits]
FROM DETAILS
GROUP BY Ncommande
HAVING COUNT(Réf) >=3 ;
/* Afficher pour chaque commande le totale de quantités des produits vendus avec
une remise de 6% et tel que ce totale est > 60 */
SELECT Ncommande, SUM(Quantité) AS [Totale quantités vendues]
FROM DETAILS
WHERE Remise=0.6
GROUP BY Ncommande
HAVING SUM(Quantité) > 60 ;
40
Le Langage SQL (21)
Le Langage SQL (21)
/* Afficher les employés qui ont vendu plus de 100 commandes*/
SELECT Nemployé, COUNT(Ncommande) AS [Nombre de commandes vendues]
FROM COMMANDES
GROUP BY Nemployé
HAVING COUNT(Ncommande) > 100 ;
/* Afficher les employés de la ville d’Asilah qui ont vendu plus de 100 commandes*/
SELECT EMPLOYES.Nemployé, COUNT(*) AS [Nombre de commandes vendues]
FROM COMMANDES, EMPLOYES
WHERE EMPLOYES.Nemployé=COMMANDES.Nemployé AND Ville ="Asilah"
GROUP BY EMPLOYES.Nemployé
HAVING COUNT(*) > 100 ;

Apprendre le Langage SQL support de cours ppt

  • 1.
    1 Le Langage SQL(1) Le Langage SQL (1)  INTRODUCTION  Le SQL est un langage structuré de requêtes qui permet de créer, de modifier et gérer des informations dans des BDR  Le sigle SQL signifie "Structured Query Language", soit en français "Langage de recherche structuré".  Il a été développé par IBM au cours des années 70 et son nom était SEQUEL, abréviation de Structured English QUEry Language
  • 2.
    2 Le Langage SQL(2) Le Langage SQL (2)  SQL a été normalisé par l'ANSI (American National Standards Institute) et par l'ISO (International Organization for Standardization).  Une troisième norme (SQL3) est en cours de rédaction depuis 1999 par l'ANSI et l'ISO,  Cette normalisation a donné naissance à une 1ère version (SQL1) en 1987 puis à une 2ème version (SQL2) en 1992
  • 3.
    3 Le Langage SQL(3) Le Langage SQL (3)  Malgré la normalisation ISO, il existe plusieurs variantes de SQL sur le marché car chaque éditeur de SGBDR tente d’étendre le standard pour accroître l’attrait commercial de son produit Une requête en SQL commence par les mots clés: SELECT, DELETE, UPDATE, INSERT INTO, CREATE et DROP Chaque requête SQL doit obligatoirement se terminer par un Point Virgule  On distingue 2 types de requêtes: Actions et Sélections
  • 4.
    4 Le Langage SQL(4) Le Langage SQL (4) I. Requêtes Actions  Sont des requêtes qui permettent de créer des tables, d’ajouter, de supprimer des enregistrements d’une table, d’ajouter une colonne…  L’instruction CREATE TABLE permet de créer une nouvelle table Syntaxe CREATE TABLE Nom_table (champ1 type CONSTRAINT nom_contrainte PRIMARY KEY, champ2 type [NOT NULL], …, champN type [NOT NULL]); 1. Création d’une table avec un seul champ comme clé primaire
  • 5.
    5 Le Langage SQL(5) Le Langage SQL (5) CREATE TABLE Nom_table (champ1 type [NOT NULL], champ2 type [NOT NULL], …, champN type, CONSTRAINT nom_contrainte PRIMARY KEY (champ1, champ2,…)) ); 2. Création d’une table avec plusieurs champs comme clé primaire /* Créez une requête SQL permettant de créer la table EMPLOYES ( Nemployé, Nom, Prénom, Fonction, Adresse, Codeville) tels que le 1er champ est de type entier les autres de type texte ayant respectivement une taille de: 25, 20, 15 et 50. Tandis que le champ Codeville est de type Entier long */ CREATE TABLE EMPLOYES ( Nemployé INTEGER CONSTRAINT nom_index PRIMARY KEY, Nom TEXT(25), Prénom TEXT(20), Fonction TEXT(15), Adresse TEXT(50), Codeville LONG) ) ;
  • 6.
    6 Le Langage SQL(6) Le Langage SQL (6)  Les conventions relatives aux noms des tables et des champs varient quelque peu d'un SGBD à l'autre. En ce qui concerne plus particulièrement les champs:  Le nombre de caractères ne doit pas être trop grand (64 dans Access, 18 à 30 dans d'autres SGBD) ;  Seuls les lettres, les nombres et le caractère de soulignement sont autorisés. Access admet les caractères accentués. Il admet aussi l'espace, mais le nom du champ doit alors être écrit entre crochets ;  Certains SGBD requièrent que le nom d'un champ commence par une lettre, mais ce n'est pas le cas d'Access ;
  • 7.
    7 Le Langage SQL(7) Le Langage SQL (7)  Les termes faisant partie du vocabulaire du langage SQL sont interdits ("date" par exemple). Ce sont les mots réservés.  Booléen (Oui / Non) : BIT ;  Nombre entier : SHORT (entier), SMALLINT (entier), LONG (entier long), INTEGER (entier long), BYTE (octet) ;  Voici un échantillon représentatif des différentes façons d'exprimer un type de données lors de la création d'une table en SQL dans Access :  Nombre réel : SINGLE (réel simple), DOUBLE (réel double), NUMERIC (réel double) ;
  • 8.
    8 Le Langage SQL(8) Le Langage SQL (8)  Monétaire : CURRENCY, MONEY ;  Date/Heure : DATE, TIME, DATETIME ;  Texte : VARCHAR (255 caractères), CHAR(n) ou TEXT(n) (n caractères), LONGTEXT (mémo, 65 535 caractères =32K max.) ;  Fichier binaire : LONGBINARY (Objet OLE) ;  Compteur : COUNTER (NuméroAuto). Remarque: On notera qu'il n'est pas possible de créer un champ de type hypertexte via une commande SQL dans Access. Même remarque en ce qui concerne les listes de choix.
  • 9.
    9 Le Langage SQL(9) Le Langage SQL (9) /* Créez une requête SQL permettant de créer la table DETAILS ( Ncommande, Réf, Pu,Quantité, Remise) tels que les champs sont de type respectivement: entier long, texte de taille 30, monétaire, entier et réel simple et tel que aussi les champs Pu & Quantité sont non nuls*/ CREATE TABLE DETAILS ( Ncommande Integer, Réf Char(30), Pu Currency NOT NULL, Quantité Smallint NOT NULL, Remise Single, CONSTRAINT nom_index PRIMARY KEY ( Ncommande, Réf ) ) ;  L’instruction ALTER TABLE permet d’ajouter ou de supprimer un seul champ à une table. Elle permet aussi la création et la suppression des liens entre les tables d’une base de données.
  • 10.
    10 Le Langage SQL(10) Le Langage SQL (10) /* Créez une requête SQL permettant de créer la table VILLES ( Codeville, Ville) tels que le 1er champ est de type NuméroAuto et le deuxième est de type texte ayant une taille de 20*/ CREATE TABLE VILLES ( Codeville Counter CONSTRAINT nom_index PRIMARY KEY, Ville Text(20) ) ; /* Modifiez la table EMPLOYES en déclarant le champ "CodeVille" comme clé étrangère, puis créez un lien nommé lien_ville sur le champ CodeVille, en précisant que le côté 1 du lien est le champ Code_Ville de la table VILLES .*/
  • 11.
    11 Le Langage SQL(11) Le Langage SQL (11) ALTER TABLE EMPLOYES ADD CONSTRAINT Lien_ville FOREIGN KEY (Code_Ville) REFERENCES VILLES (Code_Ville); /* Supprimer le lien nommé lien_ville existant entre la table EMPLOYES et la table VILLES selon le champ Codeville.*/ ALTER TABLE EMPLOYES DROP CONSTRAINT Lien_ville; /* Créez une requête SQL permettant d’ajouter le champ Codecli à la table DETAILS. Ce champ est de type texte, de taille 20 caractères et il est non nulle ALTER TABLE DETAILS ADD COLUMN Codecli TEXT(20) NOT NULL;
  • 12.
    12 Le Langage SQL(12) Le Langage SQL (12)  L’instruction DROP TABLE permet de supprimer une table d’une base de données /* Créez une requête SQL permettant de supprimer le champ Codecli de la table DETAILS. ALTER TABLE DETAILS DROP COLUMN Codecli ; Syntaxe DROP TABLE Nom_table ;
  • 13.
    13 Le Langage SQL(13) Le Langage SQL (13) Soit la table ACTEURS créée sous ACCESS: ACTEURS (N_act, Nom, Prénom, Nationalité, Salaire, Age, Films) /* Créez une requête SQL permettant de supprimer la table DETAILS définitivement de la base de données DROP TABLE DETAILS ;  L’instruction DELETE permet d’effacer des enregistrements d’une table /* Effacez tous les enregistrements de la table ACTEURS*/
  • 14.
    14 Le Langage SQL(14) Le Langage SQL (14) DELETE * FROM ACTEURS ; (Ou bien ) DELETE N_act FROM ACTEURS ; /* Effacez tous les acteurs de nationalité marocaine*/ DELETE * FROM ACTEURS WHERE Nationalité= "marocaine";  L’instruction UPDATE permet la mise à jour d’une table  Syntaxe : UPDATE table SET nouvellesvaleurs WHERE critères ;
  • 15.
    15 Le Langage SQL(15) Le Langage SQL (15) /* Créez une requête permettant de modifier l’adresse de l'employé numéro 10 tout en sachant que la nouvelle adresse sera "10 Avenue Mohamed VI, Tanger"*/ UPDATE EMPLOYES SET Adresse = "10 Avenue Mohamed VI, Tanger" WHERE Nemployé = 10 ; /* Créez une requête permettant d’augmenter de 3% le salaire de tous les acteurs */ UPDATE ACTEURS SET Salaire = Salaire * 1.03 ;  L’instruction INSERT INTO permet d’ajouter un ou plusieurs enregistrements à une table
  • 16.
    16 Le Langage SQL(16) Le Langage SQL (16) 1. Requête ajout d’un seul enregistrement INSERT INTO Nom_table [(champ1, champ2, …)] VALUES (valeur1, valeur2, …) ; Syntaxe 2. Requête ajout de plusieurs enregistrements INSERT INTO Nom_table 1 [IN externaldatabase] (Champ1, Champ2, …) SELECT (Champ1, Champ2, …) FROM Nom_table 2 ;
  • 17.
    17 Le Langage SQL(17) Le Langage SQL (17) /* Créez une requête permettant d’ajouter l’enregistrement suivant dans la table EMPLOYES: (100, BEN AZOUZ, Aziz, Ingénieur, 90050) */ INSERT INTO EMPLOYES (Nemployé, Nom, Prénom, Fonction, Codeville) VALUES (100, "BEN AZOUZ", "Aziz", "Ingénieur", 90050) ; /* Soit la table NOUVEAUX_EMPLOYES (Nemployé, Nom, Prénom, Fonction, Adr, Codeville) Supposons que cette table contient des enregistrements. Question: Ajoutez tous les enregistrements de la table ci-dessus dans la table EMPLOYES*/ INSERT INTO EMPLOYES SELECT * FROM NOUVEAUX_EMPLOYES ;
  • 18.
    18 Le Langage SQL(18) Le Langage SQL (18) I. Requête SELECTION  Une requête de type SELECTION permet d'interroger une base de données En la laissant intacte (sans la modifier)  Le résultat d’une telle requête est renvoyé sous forme d’une table formée d’un ou plusieurs attributs.
  • 19.
    19 Le Langage SQL(3) Le Langage SQL (3) Syntaxe SELECT [Prédicat] {* / table.* /[table.attribut1 As alias1], [table.attribut2 As alias2], …} FROM Liste de table [IN externaldatabase] [WHERE Critère de sélection] [GROUP BY Liste des attributs] [HAVING Critère de sélection] [ORDER BY Critère d’ordre]
  • 20.
    20 Le Langage SQL(4) Le Langage SQL (4) Remarques  [ ] signale une clause optionnelle, c.à.d on peut utiliser la requête SELECT sans cette clause  Chaque instruction SQL doit se terminer par un point-virgule Elément Description Prédicat L’un des prédicats suivants: ALL, DISTINCT, DISTINCTROW ou TOP. Les prédicats permettent de limiter le nombre d’enregistrement renvoyés. ALL est choisi par défaut * Indique que tous les champs de la ou des tables spécifiées seront sélectionnés
  • 21.
    21 Le Langage SQL(5) Le Langage SQL (5) Elément Description table Nom de la table contenant les champs dans lesquels les enregistrements sont sélectionnés attribut1, attribut2 Noms des champs contenant les données à extraire. alias1, alias2 Utilisés pour renommer un attribut externaldatabase Nom de la base de données contenant les tables si elles ne se trouvent pas dans la base de données en cours
  • 22.
    22 Le Langage SQL(6) Le Langage SQL (6) Exemple 1 Soit la table ACTEURS créée sous ACCESS: ACTEURS (N_act, Nom, Prénom, Nationalité, Salaire, Age, Films) /* Afficher tous les champs et tous les enregistrements de la table ACTEURS*/ SELECT * FROM ACTEURS; /* Afficher uniquement le Nom et Prénom de chaque Acteur */ SELECT Nom, Prénom FROM ACTEURS; /* Afficher les différentes nationalités sans doublons même si plusieurs acteurs ont la même nationalité */ SELECT DISTINCT Nationalité FROM ACTEURS;
  • 23.
    23 Le Langage SQL(7) Le Langage SQL (7) /* Afficher 50% des acteurs de la table ACTEURS*/ SELECT TOP 50 PERCENT * FROM ACTEURS; /* Afficher les 3 premiers acteurs de la table ACTEURS */ SELECT TOP 3 * FROM ACTEURS;  Avec l’instruction SELECT, il est possible d’utiliser les fonctions suivantes pour effectuer des calculs: SUM () renvoie la somme d’un champ AVG () renvoie la moyenne d’un champ MAX () renvoie la valeur maximale d’un champ MIN () renvoie la valeur minimale d’un champ COUNT (*) renvoie le nombre d’enregistrements de la table
  • 24.
    24 Le Langage SQL(8) Le Langage SQL (8) /* Afficher le nombre totale d’enregistrement de la table ACTEURS et nommer le champ retourné Nombre totale*/ SELECT COUNT(*) As [Nombre Totale] FROM ACTEURS; /* Afficher le nombre totale d’enregistrement de la table ACTEURS */ SELECT COUNT(*) FROM ACTEURS; /* Afficher le nombre d’enregistrement de la table ACTEURS qui ont une entrée dans le champ Nom et nommer le champ retourné Nombre d’entrée*/ SELECT COUNT(Nom) As [Nombre d’entrée] FROM ACTEURS;
  • 25.
    25 Le Langage SQL(9) Le Langage SQL (9) /* Afficher la moyenne des salaires de la table ACTEURS et nommer le champ retourné Moyenne des salaires*/ SELECT AVG(Salaire) As [Moyenne des salaires] FROM ACTEURS; /* Afficher le totale des salaires de la table ACTEURS et nommer le champ retourné Totale des salaires */ SELECT SUM(Salaire) As [Totale des salaires] FROM ACTEURS; /* Afficher le salaire le plus élevé de la table ACTEURS et nommer le champ retourné Salaire maximal*/ SELECT MAX(Salaire) As [Salaire maximal] FROM ACTEURS;
  • 26.
    26 Le Langage SQL(10) Le Langage SQL (10) /* Afficher l’âge de l’acteur le plus jeune et nommer le champ retourné Age minimal */ SELECT MIN(Age) As [Age minimal] FROM ACTEURS; Les éléments de la clause WHERE  Ils permettent de définir la condition dans cette clause. La clause peut être accompagnée des opérateurs logiques AND, OR ou NOT Comparaison à une valeur (=, <, >, >=, <=, <>) Comparaison à une fourchette de valeurs (BETWEEN … AND) Comparaison à une liste de valeur ( IN (. , . ,...) ) Comparaison à un filtre (LIKE) Test "tous" ou "au moins" (ALL, ANY/SOME) Test existentiel (EXISTS)
  • 27.
    27 Le Langage SQL(11) Le Langage SQL (11) /* Afficher tous les noms d’acteur dont l’âge est supérieur à 25*/ SELECT Nom FROM ACTEURS WHERE Age >= 25; /* Afficher tous les noms d’acteur dont la nationalité est américaine et l’âge est supérieur à 25*/ SELECT Nom FROM ACTEURS WHERE (Nationalité="américaine") AND (Age >= 25); /* Afficher tous les noms d’acteur dont la nationalité est américaine ou l’âge est supérieur à 25*/ SELECT Nom FROM ACTEURS WHERE (Nationalité="américaine") OR (Age >= 25); /* Afficher les acteurs dont l’âge est entre 35 et 50 */ SELECT * FROM ACTEURS WHERE Age BETWEEN 35 AND 50;
  • 28.
    28 Le Langage SQL(12) Le Langage SQL (12) /* Afficher tous les acteurs dont la nationalité est américaine, française ou marocaine*/ SELECT * FROM ACTEURS WHERE Nationalité IN ("américaine","française", "marocaine"); /* Afficher tous les noms d’acteurs qui commencent par "DE" */ SELECT Nom FROM ACTEURS WHERE Nom LIKE "DE*"; /* Afficher tous les noms d’acteur ne commençant pas par D et ayant 4 lettres */ SELECT Nom FROM ACTEURS WHERE Nom NOT LIKE "D*" AND Nom LIKE "????"; /* Afficher le nom d’acteur le plus âgé */ SELECT Nom FROM ACTEURS WHERE Age >= ALL (SELECT Age FROM ACTEURS );
  • 29.
    29 Le Langage SQL(13) Le Langage SQL (13) /* Afficher le nom d’acteur le plus jeune*/ SELECT Nom FROM ACTEURS WHERE Age <= ALL (SELECT Age FROM ACTEURS); Exemple 2 Soit les tables PRODUITS, COMMANDES, DETAILS et EMPLOYES créées sous ACCESS: PRODUITS (Réf , Nompr, Nfournisseur, Pu) COMMANDES(Ncommande, Codecli, Nemployé, Date commande) DETAILS(Ncommande, Réf , Quantité, Remise) EMPLOYES(Nemployé, Nom, Prénom, Fonction, Adresse, Ville)
  • 30.
    30 Le Langage SQL(14) Le Langage SQL (14) Les éléments de la clause FROM /* Afficher tous les produits (Réf, Nompr) qui ont été vendus*/ SELECT PRODUITS.Réf, Nompr FROM PRODUITS INNER JOIN DETAILS ON PRODUITS.Réf = DETAILS.Réf ; SELECT PRODUITS.Réf, Nompr FROM PRODUITS, DETAILS WHERE PRODUITS.Réf = DETAILS.Réf ; (Ou bien )
  • 31.
    31 Le Langage SQL(14) Le Langage SQL (14) Les jointures La clause INNER JOIN a fait son apparition avec la version 2 de SQL, parce que le besoin s'était de préciser à quel type de jointure appartenait une relation. Plus précisément, on distingue : la jointure interne, qui utilise INNER JOIN. Ne sont incluses dans le résultat final que les lignes qui se correspondent dans les deux tables. Ce cas est celui que nous avons traité précédemment ; la jointure externe gauche, dans laquelle INNER JOIN est remplacé par LEFT JOIN. Toutes les lignes de la première table sont incluses dans le résultat de la requête, même s'il n'existe pas de ligne correspondante dans la seconde table ;
  • 32.
    32 Le Langage SQL(15) Le Langage SQL (15) /* Afficher tous les produits (Réf, Nompr, Mois de vente) qui ont été vendus pendant le mois 6*/ SELECT PRODUITS. Réf, Nompr, Month ([Date commande]) AS [Mois de vente] FROM PRODUITS INNER JOIN (DETAILS INNER JOIN COMMANDES ON DETAILS. Ncommande = COMMANDES . Ncommande ) ON PRODUITS . Réf = DETAILS . Réf, WHERE Month ([Date commande]) =6 ; (Ou bien ) la jointure externe droite, dans laquelle INNER JOIN est remplacé par RIGHT JOIN. Toutes les lignes de la seconde table sont incluses dans le résultat de la requête, même s'il n'existe pas de ligne correspondante dans la première table.
  • 33.
    33 Le Langage SQL(16) Le Langage SQL (16) SELECT PRODUITS.Réf, Nompr, Month ([Date commande]) AS [Mois de vente] FROM PRODUITS, DETAILS, COMMANDES WHERE PRODUITS.Réf = DETAILS .Réf AND DETAILS.Ncommande = COMMANDES . Ncommande AND Month ([Date commande]) =6;
  • 34.
    34 Le Langage SQL(17) Le Langage SQL (17) /* Afficher tous les produits dont le prix unitaire est supérieur au prix d’au moins d’un produit vendu avec une remise de 25%*/ SELECT Réf, Nompr FROM PRODUITS WHERE Pu >= ANY ( SELECT Pu FROM DETAILS Inner Join PRODUITS ON PRODUITS.Réf=DETAILS.Réf WHERE Remise = 0.25 );
  • 35.
    35 Le Langage SQL(18) Le Langage SQL (18) /* Afficher tous les produits (Réf, Nompr) qui ont été vendus par ordre décroissant selon le champ Réf*/ SELECT PRODUITS. Réf, Nompr FROM PRODUITS , DETAILS WHERE PRODUITS. Réf = DETAILS . Réf ORDER BY PRODUITS.Réf DESC; Remarque  Par défaut, le résultat d’une requête sélection est trié selon l’ordre croissant du premier attribut qui figure dans la clause SELECT
  • 36.
    36 Le Langage SQL(19) Le Langage SQL (19)  On pourra changer temporairement les noms des tables et de travailler avec lors de création d’une requête de type sélection Exemple /* Afficher tous les produits (Réf, Nompr) qui ont été vendus par ordre décroissant selon le champ Réf*/ SELECT T1.Réf, Nompr FROM PRODUITS AS T1 , DETAILS AS T2 WHERE T1.Réf = T2.Réf ORDER BY T1.Réf DESC;
  • 37.
    37 Le Langage SQL(20) Le Langage SQL (20) Ncommande Réf Quantité Remise 1 R1 10 0.6 1 R2 20 0.6 2 R1 15 0.5 2 R3 10 0.6 2 R6 25 0.9 3 R3 5 0.6 3 R7 65 0.1 3 R8 10 0.6 DETAILS
  • 38.
    38 Le Langage SQL(20) Le Langage SQL (20) /* Afficher pour chaque commande le totale de quantités des produits vendus*/ SELECT Ncommande, SUM(Quantité) AS [Totale quantités vendues] FROM DETAILS GROUP BY Ncommande ; /* Afficher pour chaque commande le totale de quantités des produits vendus et tel que ce totale est > 60 */ SELECT Ncommande, SUM(Quantité) AS [Totale quantités vendues] FROM DETAILS GROUP BY Ncommande HAVING SUM(Quantité) > 60 ;
  • 39.
    39 Le Langage SQL(21) Le Langage SQL (21) /* Afficher les commandes qui contiennent plus que 3 produits (>=3)*/ SELECT Ncommande, COUNT(Réf) AS [Nombre de produits] FROM DETAILS GROUP BY Ncommande HAVING COUNT(Réf) >=3 ; /* Afficher pour chaque commande le totale de quantités des produits vendus avec une remise de 6% et tel que ce totale est > 60 */ SELECT Ncommande, SUM(Quantité) AS [Totale quantités vendues] FROM DETAILS WHERE Remise=0.6 GROUP BY Ncommande HAVING SUM(Quantité) > 60 ;
  • 40.
    40 Le Langage SQL(21) Le Langage SQL (21) /* Afficher les employés qui ont vendu plus de 100 commandes*/ SELECT Nemployé, COUNT(Ncommande) AS [Nombre de commandes vendues] FROM COMMANDES GROUP BY Nemployé HAVING COUNT(Ncommande) > 100 ; /* Afficher les employés de la ville d’Asilah qui ont vendu plus de 100 commandes*/ SELECT EMPLOYES.Nemployé, COUNT(*) AS [Nombre de commandes vendues] FROM COMMANDES, EMPLOYES WHERE EMPLOYES.Nemployé=COMMANDES.Nemployé AND Ville ="Asilah" GROUP BY EMPLOYES.Nemployé HAVING COUNT(*) > 100 ;