Introduction aux bases de données Cours 3. : Le langage SQL Vincent Martin email : vincent.martin@univ-tln.fr page personnelle : http://lsis.univ-tln.fr/~martin/ Master 1. LLC Université du Sud Toulon - Var 16 novembre 2012 M1 - LLC 1/18
L algèbre relationnelle Définition L algèbre relationnelle définit l ensemble des opérations de base pour manipuler les relations. Attention Langage formel Basé sur la théorie des ensembles Deux types d opérations ensemblistes : opérations binaires agissant sur 2 relations et en produisant une troisième spécifiques : opération unaire sur une relation et en construisant une seconde L algèbre relationnelle est un langage formel qui n est pas utilisable en tant que tel. Pour manipuler une base de données, on utilise une spécification de cette algèbre : SQL. M1 - LLC 2/18
Le langage SQL SQL (Structured Query Language) est le langage standard de manipulation des SGBD relationnels. Fortement inspiré du langage SEQUEL ; développé par IBM en 75 Dernière révision : 2011 (ajout d extensions) Les SGBDR implante tout ou partie du langage SQL permet de créer, de lire, de modifier, de supprimer tout type d objets d une BDR : schéma, relations mais aussi les droits des utilisateurs, les vues etc. M1 - LLC 3/18
L exemple des étudiants et des filières ETUDIANT ID NOM PRENOM NAISSANCE PHOTO FILIERE# 1 Durand Pierre 14/10/1989 M2 2 Dupond Marie 15/02/1988 M1 FILIERE CODE CAPACITE L1 300 L2 200 L3 150 M1 100 M2 50 M1 - LLC 4/18
Création de tables (1/2) Syntaxe CREATE TABLE <nom> ( <nom_attr> <type> <valeur_défaut> <contraintes>, <nom_attr> <type> <valeur_défaut> <contraintes>,... ); <contrainte>, <contrainte>,... M1 - LLC 5/18
Création de tables (2/2) Exemple CREATE TABLE ETUDIANT ( id INTEGER PRIMARY KEY, nom VARCHAR(50) NOT NULL, prenom VARCHAR(50) NOT NULL, date_naissance DATE NOT NULL, photo BLOB, filiere VARCHAR(10), FOREIGN KEY (filiere) REFERENCES FILIERE(code) ); M1 - LLC 6/18
Recherche de données Syntaxe SELECT <attributs> FROM <relations> [WHERE <contraintes>] [GROUP BY <attributs_partitionnement> HAVING <conditions_partitionnement> ] ORDER BY <attribut> <ordre>, [, <attribut> <ordre>]] M1 - LLC 7/18
Expressions de sélections simples Quels sont les noms des étudiants? SELECT nom Quels sont les noms (sans doublons) des étudiants? SELECT DISTINCT(nom) Quelles sont toutes les informations des étudiants? SELECT * M1 - LLC 8/18
Expressions avec restriction(s) Quels sont les étudiants (nom et prénom) n ayant pas de photo? SELECT nom, prenom WHERE photo = NULL; Quels sont les étudiants (id, nom, prénom) de plus de 26 ans? SELECT id, nom, prénom WHERE data_naissance < 1986-12-01 Quels sont les étudiants dont le nom ou le prénom commence par Mar. Sélectionner toutes les informations SELECT * WHERE nom LIKE Mar% OR prenom LIKE Mar% M1 - LLC 9/18
Calculs et agrégats Combien y a-t-il d étudiants en tout? SELECT count(id) Combien y a-t-il d étudiants de plus de 26 ans? SELECT count(id) WHERE date_naissance < DATE_SUB(NOW(), INTERVAL 26 YEAR) M1 - LLC 10/18
Jointures Quels sont les étudiants et leur filière (sélectionner toutes les informations)? SELECT *, FILIERE WHERE ETUDIANT.filiere = FILERE.code; Autre écriture SELECT * INNER JOIN FILIERE ON ETUDIANT.filiere = FILIERE.code Quels sont les étudiants de M2 SELECT ETUDIANT.* INNER JOIN FILIERE ON ETUDIANT.filiere = FILIERE.code WHERE FILIERE.code = M2 ; M1 - LLC 11/18
Ordre et tri Sélectionner les noms et prénoms des étudiants classés par ordre alphabétique SELECT nom ORDER BY nom asc Sélectionner les noms, prénoms et dates de naissance des étudiants classés du plus jeune au plus vieux SELECT nom, prenom, date_naissance ORDER BY date_naissance desc M1 - LLC 12/18
Sous-requête Quel est la moyenne d âge des étudiants? SELECT avg(age) as moyenne_age FROM ( SELECT YEAR(NOW()) - YEAR(date_naissance) as age ) M1 - LLC 13/18
Mises à jour : 3 opérateurs INSERT : insertion de lignes dans une table UPDATE : modification de lignes dans une table DELETE : suppression de lignes dans une table M1 - LLC 14/18
INSERT Syntaxe INSERT INTO <relation> [(attribut [,attribut]...)] VALUES (<valeur> [, <valeur>]...) Ajouter un nouvel étudiant INSERT INTO ETUDIANT (id, nom, prenom, date_naissance, photo) VALUES (125, Nicolas, Dupond, 1987-08-12, NULL); Ajouter une nouvelle filière INSERT INTO FILIERE (code, capacite) VALUES ( DUT_1, 200); M1 - LLC 15/18
UPDATE Syntaxe UPDATE <relation> SET <attribut> = <valeur>, [<attribut> = <valeur>],... [WHERE <condition>] Changer la capacité de la filière DUT 1 à 150 UPDATE FILIERE SET capacite = 150 WHERE code= DUT_1 ; ATTENTION Si on ne met pas de WHERE dans une mise à jour (UPDATE), ce sont toutes les lignes qui sont modifiées! M1 - LLC 16/18
DELETE Syntaxe DELETE FROM <relation> [WHERE] <condition>] Supprimer les étudiants qui sont dans aucune filière DELETE WHERE filiere = NULL; ATTENTION Même remarque que précédemment. Si la condition WHERE n est pas définie, ce sont toutes les lignes qui sont supprimées!!! M1 - LLC 17/18
Ce qu il faut retenir SQL permet de manipuler le schéma et les données Interrogation :SELECT...FROM...WHERE...ORDER BY... Modification : INSERT, UPDATE, DELETE (attention à ne pas oublier le WHERE!) Principaux opérateurs :AND, OR, IN, LIKE %...%, =, <, >, min(...), max(...), avg(...) M1 - LLC 18/18