• Aucun résultat trouvé

Administration des SBGD relationnels

N/A
N/A
Protected

Academic year: 2022

Partager "Administration des SBGD relationnels"

Copied!
32
0
0

Texte intégral

(1)

Zouhair ELHADARI

www.hadari.jimdo.com

Centre de BTS Dakhla

Administration des SBGD

relationnels

(2)

Chapitre 2

Introduction au langage SQL

(3)

 Langage de requêtes (Structured Query Language )

 Origine

◦ 1975 : QUEL

◦ 1976 : Structured English QUEry Langage (SEQUEL) par IBM

◦ 1981 : SQL par IBM

 Standard ANSI-ISO, Normes SQL-86,89, SQL2- 92

 SGBDR : Oracle, Sybase, DB2, Ingres, MS SQL Server, MySQL, MS Access ...

le langage des SGBD Relationnels

(4)

Plan du cours

 Manipulation de tables et BD.

 Requêtes de consultation de tables

◦ Projection, Sélection, Jointure

◦ Tri, Agrégation, Partitionnement

 Requêtes de Modification de tables

◦ Ajout

◦ Suppression

(5)

Administration de Base de Données

Création d'une base de données Syntaxe :

CREATE DATABASE NomBdd;

Destruction totale d'une base de données Syntaxe :

DROP DATABASE NomBdd;

(6)

Types SQL

Type Taille

(Octets) Signification

Int 4 Valeur Entière

SmallInt 2 Valeur Entière TinyInt 1 Valeur Entière

float 4/8 Valeur Décimale Char

(longueur)

Fixe (max

255) Chaîne de caractères VarChar

(longueur) Var (max

255) Chaîne de caractères Text Var (max

2

31

-1) Chaîne de caractères Image Var (max

2

31

-1) Chaîne binaire

Type Taille

(Octets) Signification

Bit 1 Valeur Binaire

Binary Fixe (max

255) Chaîne binaire Varbinary Var (max

255) Chaîne binaire

Money 8 Valeur en $

DateTime 24 octets Nb Jours depuis

1/1/1900 + Heure

(7)

Création de table

Syntaxe :

CREATE TABLE nomTable (

Attribut Domaine [Contraintes ...], ...

Attribut Domaine [Contraintes ...], [Contraintes ... ]

);

(8)

Création de table - Exemple

Créer la table Stock1(Pièce, NbP, Fournisseur) CREATE TABLE Stock1 (

Pièce VARCHAR(20) NOT NULL,

NbP INT,

Fournisseur CHAR(20) NOT NULL,

PRIMARY KEY (Pièce, Fournisseur)

);

(9)

Modification et Suppression de Relation

Modification de Schéma de relation (Syntaxe variable !) Exemple pour Oracle v6 :

ALTER TABLE Table

[ADD (définition_attribut | Contrainte), [définition_attribut | Contrainte] ... )]

[MODIFY (définition_attribut [, définition_attribut ]... )]

[DROP CONSTRAINT contrainte]

Suppression complète d'une relation (et de son schéma) : DROP TABLE Table;

Attention, toutes les données de la table sont perdues !

!

(10)

Plan du cours

 Manipulation de tables et BD.

 Requêtes de consultation de tables

◦ Projection, Sélection, Jointure

◦ Tri, Agrégation, Partitionnement

 Requêtes de Modification de tables

◦ Ajout

◦ Suppression

(11)

Projection

Syntaxe SQL :

SELECT [UNIQUE

1

] liste_attributs

2

FROM Table ; Équivalent AR :

liste_attributs

R(Table)

1

Permet d'éliminer les doublons (on trouvera aussi DISTINCT)

2

On peut mettre une étoile * pour demander tous les attributs

On peut renommer un attribut en ajoutant AS

NomAttribut

(12)

Projection - Exemples

Soit la relation Étudiants(#num, nom, prénom, âge, ville, CodePostal)

Donner les noms, les prénoms et les âges de tous les étudiants.

Afficher toute la relation Étudiant.

SELECT nom, prénom, age FROM Étudiants;

SELECT * FROM Étudiants;

Donner les numéros des étudiants dans une colonne nommée Numéro.

SELECT #num AS Numéro FROM Étudiants;

(13)

Sélection

Syntaxe SQL :

SELECT * FROM table WHERE condition;

Équivalent AR :

condition

R(Table)

La condition peut formée sur des noms d'attributs ou des constantes avec

des opérateurs de comparaison : =, >, <, <=, >=, <>

1

des opérateurs logiques : AND, OR, NOT

des opérateurs : IN, BETWEEN+AND, LIKE, EXISTS, IS

_ qui remplace un caractère et % qui remplace une chaîne de caractères

1

La différence est parfois notée !=

(14)

Sélection – Exemples

Quels sont tous les étudiants âgés de 20 ans ou plus ? SELECT * FROM Étudiants WHERE (Age >= 20);

Quels sont tous les étudiants âgés de 19 à 23 ans ?

SELECT * FROM Étudiants WHERE Age IN (19, 20, 21, 22, 23);

SELECT * FROM Étudiants WHERE Age BETWEEN 19 AND 23;

Quels sont tous les étudiants habitant Dakhla?

SELECT * FROM Étudiant WHERE Ville LIKE ‘%Dakhla%' ; Quels sont tous les étudiants dont la ville est inconnue/connue ? SELECT * FROM Étudiants WHERE Ville IS NULL ;

Sur la relation Étudiants(#Num, Nom, Prénom, Age, Ville, CodePostal)

(15)

Produit Cartésien

Syntaxe SQL : SELECT *

FROM table

1

[Alias

1

], ..., table

n

[Alias

n

], Équivalent AR :

Table

1

 ...  Table

n

(16)

 -Jointure

Syntaxe SQL : SELECT *

FROM table

1

[Alias

1

], ..., table

n

[Alias

n

], WHERE condition;

Équivalent AR :

Table

1

...

Table

n

Autre Syntaxe :

SELECT * FROM table

1

INNER JOIN table

2

ON

(17)

Jointure - Exemples

Soient les relations Produit (#prod, nomProd, fournisseur, pu) DétailCommande (.#num ,#cmd, #prod, pu, qte, remise)

Quels sont les numéros de commande correspondant à l'achat d'une table ?

Même requête, mais avec des alias pour les noms de relation :

SELECT dc.#num

FROM Produit p, DétailCommande dc

WHERE p.#prod = dc.#prod AND nomProd LIKE "%table%";

SELECT DétailCommande.#num

FROM Produit, DétailCommande

WHERE Produit.#prod =DétailCommande.#prod

AND nomProd LIKE "%table%";

(18)

Jointures par requêtes imbriquées

Une jointure peut aussi être effectuée à l'aide d'une sous-requête.

SELECT *

FROM Stock

WHERE #prod IN ( SELECT #prod FROM Produit)

Principe : Le mot-clef "IN" permet ici de

sélectionner les tuples #prod appartenant à la sous-requête.

◦ La sous-requête ne doit retourner qu'une colonne !

Sous-requête imbriquée

!

(19)

Une requête complexe

A partir des relations suivantes : Produit(#prod, libellé, pu) Stock(#prod, #dép, qté)

Dépôt(#dép, adr, volume)

Quels sont les produits qui sont en rupture de stock ? (sans et avec imbrication)

SELECT p.#prod, p.libellé, d.#dép, d.Adr FROM Produit p, Dépôt d, Stock s

WHERE p.#prod = s.#prod AND s.#dép = d.#dép AND s.qte <= 0

SELECT p.#prod, p.libellé, d.#dép, d.Adr FROM Produit p, Dépôt d

WHERE p.#prod IN ( SELECT s.#prod FROM Stock s

WHERE s.qté <= 0

AND p.#prod = s.#prod

AND s.#dép = d.#dép )

(20)

Union, Intersection et Différence

Table

1

 Table

2

: SELECT liste_attributs FROM table

1

UNION

SELECT liste_attributs FROM table

2

; Table

1

 Table

2

: SELECT liste_attributs FROM table

1

INTERSECT

SELECT liste_attributs FROM table

2

;

Table

1

- Table

2

: SELECT liste_attributs FROM table

1

EXCEPT

SELECT liste_attributs FROM table ;

(21)

Tri de résultats

Syntaxe :

Cette clause se place derrière la clause WHERE ORDER BY attribut [ordre] [, attribut [ordre] ...]

On peut préciser un ordre croissant ASC ou décroissant DESC.

Exemple

Trier Stock par numéro de produit croissant et par quantité décroissante SELECT *

FROM Stock WHERE qte > 0

ORDER BY #prod ASC, qte DESC

(22)

Agrégation des résultats

Il est possible d'utiliser des fonctions f d'agrégation dans le résultat d'une sélection.

Syntaxe :

SELECT f ( [ ALL | DISTINCT ] expression) FROM ...

où f peut être COUNT nombre de tuples

SUM somme des valeurs d'une colonne AVG moyenne des valeurs d'une colonne MAX maximum des valeurs d'une colonne MIN minimum des valeurs d'une colonne Pour COUNT, on peut aussi utiliser COUNT(*)

Seul COUNT prend en compte les valeurs à NULL.

(23)

Fonctions d'agrégation - Exemples

Matière Coef Note

Maths 4 15

Sc Nat 3 9

Sc Phy 3 12

Français 2 13

Sc Hum 2 11

Anglais 1 10

Sport 1 12

Résultats Mohamed

SELECT COUNT(*) FROM Résultats WHERE Note > 12

 2

SELECT MAX(Note) FROM Résultats  15

SELECT SUM(Note*Coef)/Sum(Coef) FROM Résultats

 12,06

Quelle la somme pondérée des notes ?

Q uelle est la meilleure note ?

SELECT SUM(Note*Coef) FROM Résultats  193 Quelle est la plus mauvaise note ?

SELECT MIN(Note) FROM Résultats  9

Quelle est la moyenne (pondérée) de Mohamed?

Dans combien de matières Mohamed a-t-il eu plus de

12 ?

(24)

Partitionnement des résultats

Syntaxe

GROUP BY liste_attributs

HAVING condition avec fonction

Cette clause regroupe les résultats par valeur selon la condition

Dans l'ordre, on effectue

 la sélection SELECT

 le partitionnement GROUP BY

 on retient les partitions intéressantes HAVING

 on trie avec ORDER BY.

(25)

Partitionnement des résultats - Exemples

Matière Coef Note

Maths 4 15

Sc Nat 3 9

Sc Phy 3 12

Français 2 13

Sc Hum 2 11

Anglais 1 10

Sport 1 12

Résultats

SELECT coef, Avg(note) as Moyenne FROM Résultats

GROUP BY coef;

Coef Moyenne

1 11

2 12

3 10.5

4 15

Quelle est la note moyenne pour chaque coefficient ?

Quels sont les coefficients auxquels participe une seule matière ?

SELECT coef

FROM Résultats GROUP BY coef HAVING count(*)=1;

Coef

4

(26)

Plan du cours

 Manipulation de tables et BD.

 Requêtes de consultation de tables

◦ Projection, Sélection, Jointure

◦ Tri, Agrégation, Partitionnement

 Requêtes de Modification de tables

◦ Ajout

◦ Suppression

(27)

Ajouts de tuples dans une relation

Syntaxe :

Pour insérer un tuple complètement spécifié : INSERT INTO Table VALUES (val

1

,..., val

n

);

Pour insérer un tuple incomplètement spécifié : INSERT INTO Table (liste_attributs)VALUES (val

1

,..., val

n

);

On peut insérer un tuple à partir d'une relation ayant le même schéma.

INSERT INTO Table SELECT *

FROM ...

(28)

Exemples d'insertion

Sur les relations Étudiants (#Num, Nom, Prénom, Age, Ville, CodePostal)

ClubThéâtre(#Num, Nom, Prénom)

Ajouter l'étudiant Mohamed Ali, 21 ans, habitant à Casablanca avec le numéro 634.

INSERT INTO Étudiants

VALUES (634, ‘Mohamed', ‘Ali', ‘Casablanca', ' 20 000 ', 21);

Ajouter tous les étudiants Casaoui dans le Club de Théâtre INSERT INTO ClubThéâtre

SELECT #Num, Nom, Prénom

FROM Étudiants

(29)

Modification de tuples

Syntaxe :

UPDATE Table

SET attribut

1

= expr

1

, ..., attribut

n

= expr

n

FROM ...

WHERE ...

Les expressions peuvent être

 une constante

 une valeur NULL

 une clause SELECT

(30)

Mise à jour - Exemple

UPDATE Étudiants SET Age = Age + 1;

Sur la relation Étudiants (#Num, Nom, Prénom, Age, Ville, CodePostal) Augmenter d'un an l'age de tous les étudiants.

On a appris que tous les étudiants de Casa ont déménagé à Rabat.

UPDATE Étudiants

SET Ville = ‘Rabat', CodePostal = ‘2500'

WHERE Ville = ‘Casa';

(31)

Suppression de Tuples

Syntaxe :

DELETE FROM Table [WHERE condition]

Remarque :

Si on supprime tous les tuples d'une relation, le schéma de relation existe toujours !

Exemple :

Retirer de la liste tous les étudiants de plus de 22 ans. DELETE FROM Étudiants

WHERE Age > 22;

!

(32)

Fin du Chapitre

Références

Documents relatifs

Comme chaque année, la Ville compte faire appel à des étudiants pour assurer le nettoyage de certains bâtiments communaux pendant les mois de juillet et d’août.. Suivant les

Le SQL (Structured Query Language – langage de requêtes structuré) est un langage informatique de dialogue avec une base de données relationnelle.. Une requête est une question

If you type command names that are hard for you to remember, or com- mand lines that seem too long, you’ll want to learn about shell aliases and shell functions.. These shell

For example, with our multimedia interlinking demonstrator CaMiCatzee [3] we have identified issues around trust and believe of information regarding linked data in general and

Simulez l’exécution de l’algorithme Driver LL(1) avec la table précédemment calculée sur la chaîne « select matricule from etudiants » où matricule et etudiants sont

Certains dÈlais sont vide car les commandes en questions n'ont pas encore ÈtÈ livrÈes (valeur NULL).

It was argued that pragmatics grew within philosophy and its emergence as an independent field was, for some time, delayed by the influence of some linguistic theories

Les étudiants inscrits dans une université bretonne mais qui ne sont pas originaires de la Bretagne sont ceux qui mentionnent le plus un voyage à l’étranger durant leur