Vous êtes sur la page 1sur 15

LE LANGAGE SQL LE LANGAGE SQL

1. Introduction (suite) 1. Introduction (suite)


Dans le reste du chapitre, nous allons utiliser pour les
Le langage SQL possède deux types de requêtes: exemples le MLD de la base gestion_commande suivant:
• Requêtes de définition: Création et modification de CLIENT(NumClient, NomC, PrenomC, AdrC)
tables; COMMANDE(NumCom, NumClient , DateCom)
• Requêtes de manipulation: ajout, suppression, LigneCom(NumCom, NumPrd, Quantite)
modification de données dans les tables. PRODUIT(NumPrd, NumFour, Designation, Prix)
FOURNISSEUR(NumFour, NomF, AdrF)

46 47

LE LANGAGE SQL LE LANGAGE SQL


2. Requêtes de définition : Création et 2.1. Création de bases et de tables
modification des tables La requête CREATE DATABASE permet de créer une
SQL offre un certain nombre de commandes pour base de données:
créer des tables et pour modifier leurs structures. Les CREATE DATABASE nom_de_la_base;
principales commandes sont: Exp: CREATE DATABASE gestion_commandes;
CREATE DATABASE: Créer une base de données;
DROP DATABASE: Supprimer une base de données; La requête DROP DATABASE permet de supprimer une
CREATE TABLE: Créer une table dans une base de base de données:
données; DROP DATABASE nom_de_la_base;
ALTER TABLE: Modifier une colonne ou ajouter une Exp: DROP DATABASE gestion_commandes;
nouvelle colonne à une table;
DROP TABLE: Supprimer une table. 48 49
LE LANGAGE SQL LE LANGAGE SQL
2.2. Types de données
La requête CREATE TABLE permet de créer une table: Le type de données type_donnees peut être:
CREATE TABLE nom_de_la_table CHAR(n): Chaîne de caractères avec une taille fixe ‘n’;
( colonne1 type_donnees options, VARCHAR(n): Chaîne de caractères avec une taille
colonne2 type_donnees options, dynamique au maximum ‘n’;
colonne3 type_donnees options, TINYTEXT: Chaîne de caractères avec une taille
maximale de 255;
colonne4 type_donnees options
); TEXT : Chaîne de caractères avec une taille maximale
de 65536 = 216;
BLOB: (Binary Large Objects) données binaire de taille
maximale de 65536 octets;
50 51

LE LANGAGE SQL LE LANGAGE SQL


FLOAT(n,d): Un réel avec un maximum de nombres de
INT(n): Entier avec un maximum de nombres de chiffres total de ‘n’ et un nombre de chiffres après la
chiffres de ‘n’; (par défaut n=11) virgules = ‘d’; (par défaut 6 chiffre significatifs)
DECIMAL(n, d): Un réel stocké sous forme de texte
avec un maximum de nombres de chiffres total de ‘n’ et Exp.
un nombre de chiffres après la virgules = ‘d’; (par défaut Type Nombre tapé Nombre stocké
n=10, d=0) 12345678918 12345700000
FLOAT
Exp. Type Nombre tapé Nombre stocké 123.4567 123.457

1234567891 1234567891 12345678.918 12345679.00


DECIMAL FLOAT(10,2)
12345678918 9999999999 123456789.1 100000000.00

DECIMAL(10,2) 12345678.666 12345678.67 1.999 2.00


FLOAT(3,2)
12.3 9.99
DECIMAL(3,2) 1.999 2.00
52 Problèmes 53
LE LANGAGE SQL LE LANGAGE SQL

DATE: Une date au format: ‘YYYY-MM-DD’; Exp.


create table date_time_bool (id int, X_Date
TIME : Temps au format: ‘HH:MM:SS’; date, X_Time time, X_Bool boolean);
INSERT INTO date_time_bool VALUES (1,'2021-02-
BOOLEAN : Type booléen (true, false) 12','21:53:10',true);
INSERT INTO date_time_bool VALUES (2,'2022-02-
12','21:54:10',false)

54 55

LE LANGAGE SQL LE LANGAGE SQL


2.3. Options des colonnes d’une table • FOREIGN KEY: Indiquer si cette colonne est
Pour chaque colonne, il est également possible de considérée comme clé étrangère pour une table.
définir des options:
• NOT NULL: Empêche d’enregistrer une valeur nulle Exp: Soit le MLD la base gestion_commandes:
pour une colonne. CLIENT(NumClient, NomC, PrenomC, AdrC)
• DEFAULT: Attribuer une valeur par défaut si aucune COMMANDE(NumCom, NumClient , DateCom)
données n’est indiquée pour cette colonne lors de Pour créer les tables :
l’ajout d’une ligne dans la table. CREATE TABLE CLIENT
• PRIMARY KEY: Indiquer si cette colonne est ( NumClient int NOT NULL PRIMARY KEY,
considérée comme clé primaire pour une table. NomC varchar(255) NOT NULL,
PrenomC varchar(255) NOT NULL
);
56 57
LE LANGAGE SQL LE LANGAGE SQL

Exp: (suite) Exp: (suite)


CREATE TABLE COMMANDE CREATE TABLE FOURNISSEUR
( NumCom int NOT NULL, ( NumFour int NOT NULL PRIMARY KEY,
NumClient int NOT NULL, NomF varchar(255) NOT NULL,
DateCom date NOT NULL, AdrF varchar(255) NOT NULL
PRIMARY KEY (NumCom), );
CONSTRAINT FK_Client FOREIGN KEY (NumClient)
REFERENCES CLIENT(NumClient)
);

58 59

LE LANGAGE SQL LE LANGAGE SQL

Exp: (suite) Exp: (suite)


CREATE TABLE PRODUIT CREATE TABLE LigneCom
( NumPrd int NOT NULL PRIMARY KEY, ( NumCom int NOT NULL,
NumFour int NOT NULL, NumPrd int NOT NULL,
Designation varchar(255) NOT NULL, Quantite int NOT NULL,
Prix float(10,2) NOT NULL, PRIMARY KEY (NumCom, NumPrd),
CONSTRAINT FK_Fournisseur FOREIGN KEY (NumFour) CONSTRAINT FK_Produit FOREIGN KEY (NumPrd) REFERENCES
REFERENCES FOURNISSEUR(NumFour) PRODUIT(NumPrd),
); CONSTRAINT FK_Commande FOREIGN KEY (NumCom)
REFERENCES COMMANDE(NumCom)
);

60 61
LE LANGAGE SQL LE LANGAGE SQL
2.4. Modifier le schéma d’une table
La requête ALTER TABLE permet de modifier une Pour supprimer une colonne:
table. ALTER TABLE nom_de_la_table
Pour ajouter une colonne: DROP COLUMN colonne;
ALTER TABLE nom_de_la_table
ADD colonne type_donnees [options]; Exp: Supprimer la colonne “AdrC” de la table Client:
ALTER TABLE CLIENT
Exp: Ajouter une colonne “AdrC” à la table Client: DROP COLUMN AdrC;
ALTER TABLE CLIENT
ADD AdrC varchar(250);
62 63

LE LANGAGE SQL LE LANGAGE SQL

Pour modifier le type de données d’une colonne: La requête DROP TABLE permet de supprimer une
ALTER TABLE nom_de_la_table table:
MODIFY COLUMN colonne type_donnees [options]; DROP TABLE nom_de_la_table;

Exp: Modifier le type de la colonne “AdrC” de la La requête TRUNCATE TABLE permet de vider une
table Client pour text: table:
ALTER TABLE CLIENT TRUNCATE TABLE nom_de_la_table;
MODIFY COLUMN AdrC text;

64 65
LE LANGAGE SQL LE LANGAGE SQL
3. Requêtes de manipulation de données 3.1. Opérateurs de comparaison
SQL offre un certain nombre de commandes pour la SQL permet d’utiliser les opérateurs suivants:
manipulation des données d’une base: • Les opérateurs de comparaison usuels:
• Opérateurs de comparaison <, >, =, <=, >=, <>
• Insertion d’une ligne Exp: NumClient >= 10
• Mise à jour d’une donnée • L’opérateur BETWEEN pour utiliser un intervalle;
• Suppression d’une ligne Exp: NumClient BETWEEN 10 AND 20
• Interrogation (SELECT) • L’opérateur IN pour vérifier l’appartenance à un
• Fonctions d’agrégation ensemble;
• Opérations: Union, Intersection, Sélection, Exp: NumClient IN (10,12,13)
Projection, Jointure, Produit cartésien, …
66 67

LE LANGAGE SQL LE LANGAGE SQL


3.1. Opérateurs de comparaison (suite) 3.1. Opérateurs de comparaison (suite)
• L’opérateur LIKE pour comparer une chaîne de • Les opérateurs logiques (AND), (OR) et (NOT):
caractères qui ressemble à une autre; condition1 AND condition2
nom_colonne LIKE modèle condition1 OR condition2
tel que modèle: peut contenir les caractères génériques NOT condition
‘%’(remplace plusieurs caractères) et ‘_’ (remplace un
Exp:
seul caractère).
NomC = ‘C1’ AND PrenomC = ‘P1’
Exp: Nom LIKE ‘ben%’
NomC = ‘C1’ OR PrenomC = ‘P1’
Nom LIKE ‘a_%b%’
NOT PrenomC = ‘P1’

68 69
LE LANGAGE SQL LE LANGAGE SQL
3.2. Insertion d’une ligne 3.3. Mise à jour d’une donnée
La requête qui permet d’insérer une ligne dans une La requête qui permet de mettre à jour des données
table: dans une table:
INSERT INTO table_name [(col1, col2, ...)] UPDATE table_name
VALUES (val1, val2, ...); SET col1 = val1, col2 = val2, ...
Exp: WHERE condition;
INSERT INTO CLIENT Exp:
VALUES (10, ‘N10’, ‘P10’, ‘A10’);
UPDATE CLIENT
INSERT INTO CLIENT (NumClient, NomC, PrenomC, AdrC)
SET AdrC = ‘rue A, Batna’
VALUES (11, ‘N11’, ‘P11’, ‘A11’);
WHERE NumClient = 10;

70 71

LE LANGAGE SQL LE LANGAGE SQL


3.4. Suppression d’une ligne 3.5. Interrogation (SELECT)
La requête qui permet de supprimer une ligne dans La requête qui permet d’interroger une table:
une table: SELECT [DISTINCT] col1, col2, ...
DELETE FROM table_name FROM nom_table
WHERE condition; WHERE condition;
Exp: Exp:
DELETE FROM CLIENT SELECT DISTINCT *
WHERE NumClient = 10; FROM CLIENT
WHERE NumClient BETWEEN 10 AND 50;

72 73
LE LANGAGE SQL LE LANGAGE SQL
3.6. Opération de projection 3.7. Opération d’union
L’opération de projection se fait par l’opérateur L'opérateur UNION est utilisé pour réunir les résultats de
SELECT: deux instructions SELECT ou plus.
SELECT [DISTINCT] col1, col2, ... SELECT col11, col12, … FROM table1
FROM nom_table; UNION
SELECT col21, col22, … FROM table2;
Exp:
Les deux requêtes SELECT dans UNION doivent avoir le
SELECT DISTINCT NomC même nombre de colonnes.
FROM CLIENT; Les colonnes doivent avoir des types de données
similaires.
Les colonnes de chaque instruction SELECT doivent être
dans le même ordre.
74 75

LE LANGAGE SQL LE LANGAGE SQL


3.7. Opération d’union (suite) 3.8. Opération de produit cartésien
Exp: Pour faire le produit cartésien de deux tables on
SELECT DISTINCT * utilise l’opérateur SELECT sans condition:
FROM CLIENT
WHERE NumClient BETWEEN 10 AND 50 AS R1; SELECT *
SELECT DISTINCT * FROM table1,table2
FROM CLIENT
WHERE NumClient BETWEEN 60 AND 70 AS R2;

SELECT * FROM R1
UNION
SELECT * FROM R2; 76 77
LE LANGAGE SQL LE LANGAGE SQL
3.8. Opération de produit cartésien (suite) 3.9. Opération de jointure naturelle
Exp: Pour faire la jointure naturelle on utilise l’opérateur
INNER JOIN:
SELECT * SELECT col1, col2, …
FROM CLIENT, COMMANDE FROM table1
INNER JOIN table2
SELECT * ON table1.coln = table2.colm;
FROM PRODUIT, FOURNISSEUR

78 79

LE LANGAGE SQL LE LANGAGE SQL


3.9. Opération de jointure naturelle (suite) 3.9. Opération de jointure naturelle (suite)
Exp: On peut utiliser le produit cartésien avec condition
SELECT * pour faire la jointure naturelle:
FROM CLIENT SELECT col1, col2, …
INNER JOIN COMMANDE FROM table1, table2
ON CLIENT.NumClient = COMMANDE.NumClient; WHERE table1.coln = table2.colm;

SELECT *
FROM PRODUIT
INNER JOIN FOURNISSEUR
ON PRODUIT.NumFour = FOURNISSEUR.NumFour;
80 81
LE LANGAGE SQL LE LANGAGE SQL
3.9. Opération de jointure naturelle (suite) 3.10. Fonctions d’agrégation
Exp: Les fonctions d’agrégation en SQL:
SELECT * MIN(nom_colonne)
FROM CLIENT, COMMANDE MAX(nom_colonne)
WHERE CLIENT.NumClient = COMMANDE.NumClient; COUNT(nom_colonne)
AVG(nom_colonne)
SELECT *
SUM(nom_colonne)
FROM PRODUIT, FOURNISSEUR
WHERE PRODUIT.NumFour = FOURNISSEUR.NumFour;

82 83

LE LANGAGE SQL LE LANGAGE SQL


3.11. Fonctions d’agrégation 3.12. Quelques options
Exp: Il existe quelques mots clés à utiliser pour organiser
SELECT MAX(Prix) SELECT MIN(Prix) les réponses des requêtes:
FROM PRODUIT FROM PRODUIT
WHERE NumFour = 10;
• ORDER BY permet de trier le résultat d’une requête:
WHERE NumFour = 10;
SELECT col1, col2, ...
FROM nom_table
SELECT AVG(Prix) SELECT SUM(Prix)
FROM PRODUIT FROM PRODUIT ORDER BY col1, col2, ... [ASC|DESC];
WHERE NumFour = 10; WHERE NumFour = 10;

Par default, SQL utilise ASC


SELECT COUNT(NumPrd)
FROM PRODUIT
WHERE NumFour = 10; 84 85
LE LANGAGE SQL LE LANGAGE SQL
3.12. Quelques options (suite) 3.12. Quelques options (suite)
Exp: • GROUP BY permet de grouper le résultat d’une
SELECT * requête selon une ou plusieurs colonnes en utilisant les
FROM CLIENT fonctions d’agrégation:
ORDER BY Nom, Prenom; SELECT Func_Agrg, col1, col2…
FROM nom_table
NumCli NumCli
ent
Nom Prenom Adr
ent
Nom Prenom Adr WHERE condition
1 N2 P5 A1 2 N1 P4 A2 GROUP BY col1,col2…;
2 N1 P4 A2 4 N2 P1 A4
3 N5 P6 A3 1 N2 P5 A1
4 N2 P1 A4 3 N5 P6 A3

86 87

LE LANGAGE SQL LE LANGAGE SQL


3.12. Quelques options (suite) 3.12. Quelques options (suite)
Exp: Donner le nombre de clients de chaque famille • DEFAULT permet de définir une valeur par défaut
ainsi que le nom de famille pour une colonne:
SELECT COUNT(NumClient), Nom
FROM CLIENT CREATE TABLE nom_table (
GROUP BY Nom; col type DEFAULT val,
NumCli
Nom Prenom Adr

ent
COUNT(NumClient) Nom );
1 N2 P5 A1
1 N1
2 N1 P4 A2
2 N2
3 N5 P6 A3
1 N5
4 N2 P1 A4
88 89
LE LANGAGE SQL LE LANGAGE SQL
3.12. Quelques options (suite)
Exp:
CREATE TABLE CLIENT
( NumClient int NOT NULL,
Nom varchar(255),
Prenom varchar(255),
Adr tinytext DEFAULT 'Batna',
PRIMARY KEY (NumClient)
);
INSERT INTO CLIENT VALUES (4,'CN4','PC4',
DEFAULT)
90 91

LE LANGAGE SQL LE LANGAGE SQL


3.12. Quelques options (suite) 3.12. Quelques options (suite)
• HAVING est utilisé dans la partie WHERE pour pouvoir Exp: Donner le nombre de clients de chaque famille
utiliser les fonctions d’agrégation: ainsi que le nom de famille tel que ce nombre est > 1.
SELECT Func_Agrg, col1, col2… SELECT COUNT(NumClient), Nom
FROM nom_table FROM CLIENT
WHERE condition1 GROUP BY Nom
GROUP BY col1,col2… HAVING COUNT(NumClient) > 1;
HAVING condition2; NumCli
Nom Prenom Adr
ent
1 N2 P5 A1
COUNT(NumClient) Nom
HAVING est très souvent utilisée en même temps que 2 N1 P4 A2
2 N2
GROUP BY mais ce n’est pas obligatoire. 3 N5 P6 A3
92 93
4 N2 P1 A4
LE LANGAGE SQL LE LANGAGE SQL
3.12. Quelques options (suite) 3.12. Quelques options (suite)
• EXISTS est un opérateur qui permet de tester si le Exp: Chercher les clients qui ont passer des
résultat d’une requête est vide ou non: commandes
SELECT *
SELECT col1, col2… FROM CLIENT
FROM nom_table WHERE EXISTS (SELECT * FROM COMMANDE
WHERE EXISTS WHERE COMMANDE.NumClient = CLIENT.NumClient);
(SELECT col1, col2… NumCli
Nom Prenom Adr
NumCo Num
DateCom
ent m Client
FROM nom_table WHERE condition);
1 N2 P5 A1 1 1 2018-03-14
2 N1 P4 A2 2 2 2018-03-13
3 N5 P6 A3 3 4 2018-03-12
94 95
4 N2 P1 A4 4 4 2018-03-11

LE LANGAGE SQL LE LANGAGE SQL


3.12. Quelques options (suite) 3.12. Quelques options (suite)
Exp: (suite) •ANY, ALL sont des opérateurs utilisés avec WHERE.
SELECT col1,col2,…
FROM nom_table1
WHERE coli comparison_operator ANY/ALL
(SELECT coli FROM nom_table2 WHERE condition);
ANY retourne vrai si au-moins une valeur de la sous
requête satisfait la condition du 1er WHERE.
All retourne vrai si toutes les valeurs de la sous
requête satisfont la condition du 1er WHERE.

96 97
LE LANGAGE SQL LE LANGAGE SQL
3.12. Quelques options (suite) NumClient Exp2:
Client Commande
Exp1: 3 Num
NumCl Nom Prenom Adr NumCl Cout DateCom
SELECT * 2 Com
FROM CLIENT 1 1 N2 P5 A1 1 4 100 2018-03-14
WHERE NumClient = ANY/ALL
2 N1 P4 A2 2 3 50 2018-03-13
(SELECT NumClient FROM COMMANDE WHERE DateCom<"2018-03-14");
3 N5 P6 A3 3 2 125 2018-03-12
NumCli NumCo Num 4 N2 P1 A4 4 1 200 2018-03-11
Nom Prenom Adr DateCom
ent m Client
5 1 45 2018-03-13
1 N2 P5 A1 1 4 2018-03-14 Num
Designation Prix
Com
2 N1 P4 A2 2 3 2018-03-13
1 P1 70
3 N5 P6 A3 3 2 2018-03-12
2 P2 120 Produit
4 N2 P1 A4 4 1 2018-03-11
3 P3 25
Résultat (ANY)
Résultat (ALL) est vide 98 4 P4 40 99

LE LANGAGE SQL LE LANGAGE SQL


Exp2: (suite) Exp2: (suite)
SELECT * SELECT MIN(Cout), DateCom
FROM Produit Num FROM Commande AVG(Cout)
Designation Prix
WHERE Prix < ALL ( Com GROUP BY DateCom 104
SELECT Cout FROM Commande 3 P3 25 HAVING MIN(Cout) < ALL (
WHERE Cout < 100) Cout 4 P4 40 SELECT AVG(Cout) FROM Commande)
50 NumC
NumCl Cout DateCom
om
45
SELECT * MIN(Cout) DateCom G1 1 4 100 2018-03-14
FROM Produit Num
Designation Prix 2 3 50 2018-03-13
Com 45 2018-03-13 G2
WHERE Prix > ALL (
1 P1 70 100 2018-03-14 5 1 45 2018-03-13
SELECT Cout FROM Commande
2 P2 120 G3 3 2 125 2018-03-12
WHERE Cout < 100)
G4 4 1 200 2018-03-11
100 101
LE LANGAGE SQL LE LANGAGE SQL
3.12. Quelques options (suite) 3.12. Quelques options (suite)
• Pour copier des données d’une table vers une autre Exp: Soit une nouvelle table avec le schéma suivant:
table: newCLIENT(NumClient, Nom, prenom, Adr)
INSERT INTO table2 INSERT INTO newCLIENT
SELECT * FROM table1 SELECT * FROM CLIENT
WHERE condition; WHERE NumClient<3;
CLIENT newCLIENT
NumCli NumCli
Condition: ent
Nom Prenom Adr
ent
Nom Prenom Adr

Les colonnes copiées doivent être compatibles dans 1 N2 P5 A1 1 N2 P5 A1


les deux tables. 2 N1 P4 A2 2 N1 P4 A2
3 N5 P6 A3
102 4 N2 P1 A4 103

Vous aimerez peut-être aussi