2A-SI 4 - Bases de Données 4.5 - Langage SQL



Documents pareils
Le Langage De Description De Données(LDD)

Langage SQL : créer et interroger une base

Bases de Données relationnelles et leurs systèmes de Gestion

Le Langage SQL version Oracle

Langage SQL (1) 4 septembre IUT Orléans. Introduction Le langage SQL : données Le langage SQL : requêtes

Introduction au Système de Gestion de Base de Données et aux Base de Données

COMMANDES SQL... 2 COMMANDES DE DEFINITION DE DONNEES... 2

SQL Historique

1. Qu'est-ce que SQL? La maintenance des bases de données Les manipulations des bases de données... 5

Le langage SQL (première partie) c Olivier Caron

Optimisation SQL. Quelques règles de bases

TP Contraintes - Triggers

TP3 : Creation de tables 1 seance

ECR_DESCRIPTION CHAR(80), ECR_MONTANT NUMBER(10,2) NOT NULL, ECR_SENS CHAR(1) NOT NULL) ;

Le langage SQL pour Oracle - partie 1 : SQL comme LDD

Bases de données et sites WEB

14/04/2014. un ensemble d'informations sur un sujet : exhaustif, non redondant, structuré, persistant. Gaëlle PERRIN SID2 Grenoble.

Partie 0 : Gestion des tablespace et des utilisateurs... 3

Olivier Mondet

Cours Bases de données 2ème année IUT

CREATION WEB DYNAMIQUE

TD : Requêtes SQL (BDR.TD2-1) INSA 3IF

Plan. Bases de Données. Sources des transparents. Bases de SQL. L3 Info. Chapitre 4 : SQL LDD Le langage de manipulation de données : LMD

Bases de données relationnelles

MySQL / SQL EXEMPLES

Langage propre à Oracle basé sur ADA. Offre une extension procédurale à SQL

FileMaker 13. Guide de référence SQL

ISC Système d Information Architecture et Administration d un SGBD Compléments SQL

Intégrité des données

Bases de données Cours 4 : Le langage SQL pour ORACLE

Mejdi BLAGHGI & Anis ASSÈS

Création et Gestion des tables

Les bases de données

SQL sous SqlServer OLIVIER D. DEHECQ Olivier 0

Pour les débutants. langage de définition des données

Université de Nice Sophia-Antipolis. Langage SQL. version 5.7 du polycopié. Richard Grin

OFPPT ISTA BM. Base de données. Filière : TSTDI

Compétences Business Objects

Partie II Cours 3 (suite) : Sécurité de bases de données

Durée : 4 heures Le sujet se présente sous la forme de deux dossiers indépendants

Système de Gestion de Bases de Données Relationnelles. MySQL. Youssef CHAHIR

Notes de cours : bases de données distribuées et repliquées

Administration des bases de données. Jean-Yves Antoine

INSTITUT NATIONAL DES TELECOMMUNICATIONS CONTROLE DES CONNAISSANCES. 2. Les questions sont indépendantes les unes des autres.

A QUOI SERVENT LES BASES DE DONNÉES?

Corrigés détaillés des exercices

Encryptions, compression et partitionnement des données

Le langage SQL Rappels

ORACLE 10G DISTRIBUTION ET REPLICATION. Distribution de données avec Oracle. G. Mopolo-Moké prof. Associé UNSA 2009/ 2010

Cours SQL. Base du langage SQL et des bases de données

Support de cours «SGBD»

Systèmes de Gestion de Bases de Données

Licence de MIDO - 3ème année Spécialités Informatique et Mathématiques Appliquées

PHP. Bertrand Estellon. 26 avril Aix-Marseille Université. Bertrand Estellon (AMU) PHP 26 avril / 214

Durée : 4 heures coefficient : 4 Le sujet se présente sous la forme de deux dossiers indépendants

Bases de données. Yamine AIT AMEUR. INPT-ENSEEIHT DIMA 2 Rue Charles Camichel Toulouse Cedex 7

Résumé S Q L. Auteur: Alexandre PATIN Edition: 22 février alexandre.patin@free.fr URL :

Impact on revenue requirements no Description (000$)

Introduction aux Bases de Données 2004/2005

Intégrité sémantique dans les bases de données relationnelles

I. MySQL : Serveur et SGBD

Les BASES de DONNEES dans WampServer

PHP 5. La base de données MySql. A. Belaïd 1

Devoir Data WareHouse

Historisation des données

SQL Server ressource SOMMAIRE

Auto-évaluation Oracle: cours de base

SQL. Oracle. pour. 4 e édition. Christian Soutou Avec la participation d Olivier Teste

Partie I : Créer la base de données. Année universitaire 2008/2009 Master 1 SIIO Projet Introduction au Décisionnel, Oracle

Cours Bases de données 2ème année IUT

Gestion des utilisateurs et de leurs droits

CHAPITRE 4 POLITIQUES DE CONTRÔLES DES ACCÈS SOUS ORACLE ADMINISTRATION ET TUNING DE BASES DE DONNÉES 10/05/2015 RESPONSABLE DR K.

1. Base de données SQLite

SGBDR. Systèmes de Gestion de Bases de Données (Relationnelles)

Support de cours. Introduction à SQL et MySQL. 2003, Sébastien Namèche

NFA 008. Introduction à NoSQL et MongoDB 25/05/2013

Module Administration BD Chapitre 1 : Surcouche procédurale dans les SGBDS

Cours 3. Développement d une application BD. DBA - Maîtrise ASR - Université Evry

SUPPORT SQL. Thierry GRANDADAM

Cours 4 : Agrégats et GROUP BY

Gestion de base de données

Les Triggers SQL. Didier DONSEZ. Université de Valenciennes Institut des Sciences et Techniques de Valenciennes

16H Cours / 18H TD / 20H TP

I4 : Bases de Données

Gestion des transactions et accès concurrents dans les bases de données relationnelles

Initiation à SQL. Le langage de communication avec une base de données relationnelles. Application avec PostgreSQL. Nathalie Camelin 2011/2012

1 Position du problème

Chapitre 3 LE MODELE RELATIONNEL ET SQL (DDL)

A QUOI SERVENT LES BASES DE DONNÉES?

WEB DEVELOPER SGBD SYSTEME DE GESTION DE BASES DE DONNEES L étudiant sera capable :

Bases de données. Mihaela Mathieu

Plan Général Prévisionnel (1/2) (non contractuel) Internet et Outils L1/IO S2-IO2 Bases de données: Jointures, Transactions

MySQL avec Mac OS X. Quelques manipulations avec le terminal sont nécessaires si une version de MySQL est déjà lancée:

Introduction à JDBC. Accès aux bases de données en Java

Bases de Données Avancées

LE LANGAGE SQL2 1. INTRODUCTION

BTS/CGO P10 SYSTEME INFORMATION Année

Vincent Augusto

Transcription:

2A-SI 4 - Bases de Données 4.5 - Langage SQL Stéphane Vialle Bases de Données Langage SQL Facettes de SQL et introduction aux exemples Stephane.Vialle@supelec.fr http://www.metz.supelec.fr/~vialle Avec l aide du cours de Y. Bourda Interrogation de données : SELECT Facettes de SQL SQL : Une syntaxe simple Un langage Déclaratif/Associatif Un seul langage pour l Interrogation, la Manipulation, la Définition et de le Contrôle des données Modification de données : INSERT UPDATE DELETE Gestion des transactions : COMMIT ROLLBACK ALTER CREATE DROP RENAME Contrôle des données : GRANT REVOKE Introduction aux exemples Relation : emp(nom,num,fonction,n_sup,embauche,salaire,comm,n_dept) NOM NUM FONCTION N_SUP EMBAUCHE SAL COMM N_DEPT 16712 25717 23-MAY-90 40000 30 17574 16712 03-MAY-95 9000 30 26691 27047 04-APR-88 25000 2500 20 LAMBERT 25012 27047 14-APR-91 12000 20 JOUBERT 25717 president 10-OCT-82 50000 30 LEBRETON 16034 27047 01-JUN-91 15000 0 20 17147 27047 10-DEC-93 20000 500 20 PAQUEL 27546 27047 03-SEP-83 22000 2000 20 LEFEBVRE 25935 27047 11-JAN-84 23500 1500 20 GARDARIN 15155 24533 22-MAR-85 24000 10 SIMON 26834 24533 04-OCT-88 20000 10 DELOBEL 16278 24533 16-NOV-94 21000 10 ADIBA 25067 24533 05-OCT-87 30000 10 CODD 24533 25717 12-SEP-75 55000 10 LAMERE 27047 25717 07-SEP-89 45000 20 BALIN 17232 24533 03-OCT-87 13500 10 24831 16712 10-SEP-88 15000 30 Introduction aux exemples Relation : dept(n_dept, nom, lieu) N_DEPT NOM LIEU 10 recherche Rennes 20 vente Metz 30 direction 40 fabrication Toulon Exemple du support du cours 2 relations : «emp» et «dept» Bases de Données Langage SQL Facettes de SQL et introduction aux exemples 1

SELECT : Toute l interrogation se fait par la commande «SELECT» Interrogations simples : relativement intuitive SELECT nom, fonction ; Interrogation complexes : puissantes mais demandent de la pratique! LAMBERT JOUBERT LEBRETON PAQUEL LEFEBVRE GARDARIN SIMON DELOBEL ADIBA CODD LAMERE BALIN president SELECT : Toute l interrogation se fait par la commande «SELECT» Grammaire complète de la commande SELECT : SELECT [DISTINCT] {[table.]* expr [alias],...} FROM table [alias] [, table [alias],...] [ WHERE condition] [ CONNECT BY condition [START WITH condition] ] [ GROUP BY expr, expr,...] [HAVING condition] [ {UNION INTERSECTION MINUS} SELECT... ] [ ORDER BY expr posn[desc], expr posn[desc],... ] ; BEAUCOUP DE POSSIBILITEES!! SELECT : 1 - sélection de colonnes ou «projection» SELECT : 1 - sélection de colonnes ou «projection» SELECT nom, fonction ; Nom de la colonne (ou des colonnes) de la projection Nom de la table (ou des tables) Par défaut toutes les lignes sont sélectionnées LAMBERT JOUBERT LEBRETON PAQUEL LEFEBVRE GARDARIN SIMON DELOBEL ADIBA CODD LAMERE BALIN president Utilisation d un «joker» : pas de projection sélection de toute la table SELECT * ; Toutes les colonnes Nom de la table (ou des tables) NOM NUM FONCTION N_SUP EMBAUCHE SAL COMM N_DEPT 16712 25717 23-MAY-90 40000 30 17574 16712 03-MAY-95 9000 30 26691 27047 04-APR-88 25000 2500 20 LAMBERT 25012 27047 14-APR-91 12000 20 JOUBERT 25717 president 10-OCT-82 50000 30 LEBRETON 16034 01-JUN-91 15000 0 20 27047 17147 27047 10-DEC-93 20000 500 20 PAQUEL 27546 27047 03-SEP-83 22000 2000 20 LEFEBVRE 25935 27047 11-JAN-84 23500 1500 20 GARDARIN 15155 24533 22-MAR-85 24000 10 SIMON 26834 24533 04-OCT-88 20000 10 DELOBEL 16278 24533 16-NOV-94 21000 10 ADIBA 25067 24533 05-OCT-87 30000 10 CODD 24533 25717 12-SEP-75 55000 10 LAMERE 27047 25717 07-SEP-89 45000 20 BALIN 17232 24533 03-OCT-87 13500 10 24831 16712 10-SEP-88 15000 30 Toute la table!! SELECT : 2 - sélection de lignes ou «restriction» Utilisation de prédicats : Exemple simple : SELECT * FROM <nom de table> WHERE <predicat> ; SELECT * WHERE salaire > 40000 ; «comparaison d expressions» SELECT : 2 - sélection de lignes ou «restriction» Expressions (définition générale) : une variable = un nom de colonne (Ex : salaire) une constante : numérique : 1, 1.3, 1.3E-5 chaîne de caractères : SALUT ou salut (différentes) date : chaîne de caractères au format : Jour Mois Année JOUBERT 25717 president 10-OCT-82 50000 30 CODD 24533 25717 12-SEP-75 55000 10 LAMERE 27047 25717 07-SEP-89 45000 20 2 chiffres 3 premières lettres du nom anglais Ex : 01-FEB-85 2 derniers chiffres 2

SELECT : 2 - sélection de lignes ou «restriction» Prédicat simple : expr1 comp expr2 - comp : =,!=, <, >, <=, >= - expr : numérique, chaîne de caractère, date (ordre chronologique) Autres prédicats simples : - expr1 BETWEEN expr2 AND expr3 - expr1 IN (expr2, expr3, expr4, ) - expr1 LIKE chaîne_avec_jokers : _ : remplace 1 caractère % remplace 0 ou n caractères SELECT nom WHERE nom LIKE M% ; SELECT : 2 - sélection de lignes ou «restriction» Prédicats composés : - Composition de prédicats par AND, OR, NOT - priorité : AND > OR, mais ne pas hésiter à parenthéser SELECT nom, num, fonction, n_dept WHERE (fonction = OR fonction = ) AND n_dept = 10 ; CODD 24533 10 BALIN 17232 10 SELECT : 3 valeur «NULL» Valeur NULL = valeur indéfinie Possible d entrer une ligne sans définir toutes ses colonnes NOM NUM FONCTION N_SUP EMBAUCHE SAL COMM N_DEPT 26691 27047 04-APR-88 25000 2500 20 LAMBERT 25012 27047 14-APR-91 12000 20 Attention : contresens possible «expr = NULL» : prédicat toujours FAUX! car : NULL 0 Tester avec : IS NULL et IS NOT NULL : SELECT nom WHERE comm IS NULL ; LAMBERT JOUBERT GARDARIN SIMON DELOBEL ADIBA CODD LAMERE BALIN SELECT : 4 nommage de colonne résultat Table relationelle Table Table relationnelle relationelle SELECT Table relationnelle Il est possible de nommer/renommer les colonnes res. d un SELECT : SELECT nom, salaire "SALAIRE MENSUEL " ; Nom = chaîne de caractères (30 maxi) Inséré à la suite de l expression définissant la colonne Entre " " s il contient des séparateurs ou est un mot clé de SQL Sera le nom de la colonne vis à vis de l extérieur du SELECT SELECT : 5 Classement des résultats d un SELECT Lignes du résultat d un SELECT : ordre quelconque Ordonnable par : ORDER BY {nom/numéro de colonne [DESC]} + Jusqu à 16 critères emboîtables (du + important au important) Par défaut : ordre ascendant, sinon DESCendant SELECT nom, fonction, salaire 15000 BALIN 13500 ORDER BY fonction, salaire DESC LAMBERT ; 12000 9000 25000 LEFEBVRE 23500 PAQUEL 22000 20000 LEBRETON 15000 Tout simplement en spécifiant plusieurs tables après le FROM On peut joindre jusqu à 256 tables en une seule requête SELECT. FROM nom_table1, nom_table2, WHERE ; Jointure d une table à une autre, à elle même, jointure «externe», «équi-jointure», de nombreuses possibilités! Voir les slides suivantes 3

Equi-Jointure entre deux tables : jointure avec condition d égalité SELECT emp.nom, lieu, dept WHERE emp.n_dept = dept.n_dept ; Jointure entre tables «emp» et «dept» Equi-Jointure d une table à elle-même : Pourquoi? : pour rassembler des informations venant de 2 lignes différentes Exemple : noms des employés et noms de leurs managers - «n_dept» est un nom de colonne commun aux deux tables : il faut le préfixer par le nom de la table - Idem pour «nom» qui est présent dans les 2 tables Trouve la liste des employés et de leur lieux de travail LAMBERT. Metz Metz SELECT emp.nom, mgr.nom, emp mgr WHERE emp.n_sup = mgr.num Jointure de la table «emp» à elle-même Besoin de renommer la table pour indiquer de quelle ligne vient la colonne citée Ex : (emp.n_sup = mgr.num) Jointure avec autres critères (que l équi-jointure) : Toutes sortes de prédicats sont applicables dans une jointure SELECT. FROM nom_table1, nom_table2, WHERE ; Exemple: SELECT emp.nom, emp.salaire, emp.fonction, emp j WHERE emp.salaire > j.salaire AND j.nom = SIMON ; Recherche les noms, salaires et fonctions des employés gagnant plus que l employé SIMON (Equi-) Jointure «externe» : On cherche le lieu de travail des employés : Sans jointure externe le site de Toulon ne figure pas dans la table réponse (car aucun employé n y travaille!) Avec la jointure externe il sera ajouté à la table : SELECT emp.nom, lieu, dept WHERE emp.n_dept = dept.n_dept ;.. Metz Metz Toulon (Equi-)Jointure «externe» : Il s agit de prendre en compte les lignes d une table n ayant pas eu de correspondance dans les autres tables. Par défaut ces lignes sont éliminés de la jointure. Avec une jointure «externe» elles seront ajoutées au résultat : SELECT emp.nom, lieu, dept WHERE emp.n_dept (+) = dept.n_dept ;. Metz Toulon On ajoute «(+)» au nom de la colonne dont les valeurs ne couvrent pas assez de champ (là où il «manque» des valeurs). SELECT : 7 Opérateurs ensemblistes But : combiner dans un résultat unique des lignes venant d interrogations différentes Opérateurs ensemblistes possibles : Union, Intersection et Différence relationnelle Après projection et avant combinaison, les lignes doivent avoir rigoureusement le même nombre de colonnes avec des types identiques SELECT. {UNION INTERSECT MINUS} SELECT. {UNION INTERSECT MINUS} SELECT. {UNION INTERSECT MINUS} SELECT ; - Evaluation de gauche à droite, parenthésage possible - Les doubles sont éliminés - Nom des colonnes du résultat : ceux du premier SELECT 4

Un critère de recherche employé dans une clause WHERE peut être lui-même le résultat d un SELECT Sous-interrogation simple : ramenant une seule valeur SELECT nom WHERE fonction = (SELECT fonction WHERE nom = CODD ) ; Ici la sous-interrogation doit impérativement renvoyer une ligne et une seule! Renvoie les noms des employés ayant la même fonction que Codd Sous-interrogation ramenant plusieurs lignes On utilise un opérateur permettant de comparer une valeur à un ensemble de valeurs : SELECT nom,salaire WHERE salaire > ALL (SELECT salaire WHERE n_dept = 20); Opérateurs utilisables : - IN Renvoie le nom et le salaire des employés gagnant plus que chaque employé du département 20 - Op. classiques (=,!=, >, ) accompagnés de ANY ou ALL ANY : vrai si vrai au moins une fois ALL : vrai si vrai tout le temps Sous-interrogation ramenant plusieurs colonnes On compare une liste de colonnes à un SELECT ramenant une liste de colonnes : SELECT nom,fonction, n_sup WHERE (fonction,n_sup) = (SELECT fonction, n_sup WHERE nom = CODD ); Renvoie les employés ayant même fonction et même supérieur que CODD Sous-interrogation synchronisée avec l interrogation principale : Pour chaque ligne de l interrogation principale on teste tte la 2nd! SELECT nom e WHERE n_dept!= (SELECT n_dept WHERE e.n_sup = num) AND n_sup IS NOT NULL; Renvoie les employés ne travaillant pas dans le même département que leur supérieur - Il faut renommer la table «emp» de l interrogation principale pour pouvoir la référencer dans la sous-interrogation, - «n_sup IS NOT NULL» : dans le cas de JOUBERT n_sup est NULL, la sous-requête ne ramène aucune valeur et le test est tjrs vrai! Sous-interrogation (synchronisée) ramenant au moins 1 ligne : L opérateur EXISTS permet de construire un prédicat vrai si la sous-interrogation qui suit ramène au moins une ligne : SELECT * e WHERE EXISTS (SELECT * WHERE embauche >= 01-jan-94 AND n_dept = e.n_dept) ; Renvoie les employés travaillant dans un département qui a procédé à des embauches depuis le début de l année 94. Sous-interrogation multiples : On peut utiliser plusieurs sous-interrogations dans un même SELECT : par imbrication, ou par combinaison (AND ou OR) SELECT nom, fonction WHERE n_dept = 10 AND fonction IN (SELECT fonction WHERE n_dept = (SELECT n_dept WHERE nom = )); Renvoie la liste des employés du département 10 ayant même fonction que quelqu un du département de. 5

SELECT : 9 Détails des expressions et fonctions Les «expressions» sont des ensembles de variables et constantes associées par des opérateurs ou des fonctions. Il existe des expressions : arithmétiques, chaînes de caractères et dates (vu précédemment) Elles peuvent intervenir à divers endroits dans un SELECT : dans un prédicat, mais aussi dans la liste des projections : SELECT nom, salaire+comm ; SELECT nom, salaire,comm WHERE comm <= salaire * 0.5 ; SELECT : 9 Détails des expressions et fonctions Opérateurs arithmétiques : +, -, *, / Fonctions arithmétiques : ABS(arg), CEIL(arg), COS(arg), COSH(arg), EXP(arg), Opérateurs sur les chaînes de caractères : (la concaténation) Fonctions sur les chaînes de caractères : CONCAT(ch1, ch2), LOWER(ch), UPPER(ch),. Opérateurs sur les dates : date +/- nombre : ajoute ou retranche un nombre de jour date2 date1 : calcule le nombre de jours écoulés Fonctions sur les dates : ADD_MONTHS(date,n), LAST_DAY(date), SELECT : 9 Détails des expressions et fonctions Autres fonctions : - GREATEST(expr1, expr2, ) LEAST(expr1, expr2, ) renvoient la plus grande ou la plus petite valeur toutes sont converties au format de la première - NVL(expr1, expr2) renvoie expr1, sauf si elle est indéfinie (NULL), elle renvoie alors expr2 - DECODE(crit, val1, res1, val2, res2, ) si crit vaut val1 alors renvoie res1, sinon si crit vaut val2 alors renvoie res2,. Les fonctions de groupe permettent de faire des calculs sur l ensemble des valeurs d une colonne : SELECT SUM(salaire) WHERE n_dept = 10 ; SELECT nom, fonction, salaire WHERE salaire = (SELECT MAX(salaire) ) ; Renvoie le total des salaires du département 10 Renvoie le nom, la fonction et le salaire de l employé (ou des employés) ayant le salaire le plus élevé Fonctions de groupe disponibles : AVG([DISTINCT ALL] expr) COUNT(* [DISTINCT ALL] expr) MAX([DISTINCT ALL] expr) MIN([DISTINCT ALL] expr) STDDEV([DISTINCT ALL] expr) SUM([DISTINCT ALL] expr) VARIANCE([DISTINCT ALL] expr) : moyenne : compteur : maximum : minimum : écart type : total : variance Domaine d action des fonctions de groupe : En fait ces fonction s appliquent à des colonnes entières de groupes (voir «GROUP BY» ci-après) En l absence de définition de groupes, elle s appliquent aux colonnes de toutes les lignes sélectionnées (comme s il n y avait qu un seul groupe) : SELECT SUM(salaire) WHERE n_dept = 10 ; Un seul groupe : tout ce qui est sélectionné DISTINCT : ne prend en compte que des valeurs distinctes ALL : prend en compte toutes les valeurs Cas des valeurs «NULL» : non prises en compte, exceptées par COUNT(*) 6

Définitions de groupes : Un SELECT de groupe (avec GROUP BY) ne donnera qu une ligne par groupe SELECT SUM(salaire), n_dept GROUP BY n_dept ; 163500 10 162500 20 114000 30 Que des fonctions de groupe ou des expressions du GROUP BY Utilisation de la clause GROUP BY expr1, expr2, : Parmi les lignes ayant même valeur pour expr1, on regroupe celle ayant même valeur pour expr2, Sélection des groupes : Utilisation de SELECT GROUP BY HAVING HAVING remplace WHERE, mais ne porte que sur des caractéristiques de groupe : - fonction de groupe - expressions présentes dans le GROUP BY SELECT fonction,count(*),avg(salaire) GROUP BY fonction HAVING COUNT(*) > 2; Liste des salaires moyens par fonction ayant plus de deux employés S appliquent groupe par groupe («fonctions de groupes») Sélection des groupes cumulant WHERE et HAVING : 1 Application de WHERE : sélectionne des lignes 2 Application de GROUP BY : constitution des groupes 3 Application de HAVING : sélection des groupes 4 évaluation des fonctions de groupes SELECT n_dept,count(*) Liste des départements avec leur nombres d ingénieurs ou de WHERE fonction in (, ) commerciaux, si et GROUP BY n_dept seulement si ils en ont HAVING COUNT(*) >= 2; plus de 2. Fonctions de groupes à deux niveaux : Dans un SELECT GROUP BY : application possible d une première fonction de groupe SELECT COUNT(*) GROUP BY n_dept ; On a le droit d appliquer une deuxième fonction de groupe au résultat du SELECT GROUP BY SELECT MAX(COUNT(*)) GROUP BY n_dept ; Liste des nombres d employés par département Nombre d employés du département en ayant le plus Sélection de groupes avec sous-interrogation : Une clause HAVING peut faire appel à une sous-interrogation En cumulant les deux derniers exemples, on arrive à : SELECT n_dept,count(*) GROUP BY n_dept HAVING COUNT(*) = (SELECT MAX(COUNT(*)) GROUP BY n_dept) ; Trouve le numéro du (ou des) département qui a le plus d employés et son nombre d employés Bases de Données Langage SQL Facettes de SQL et introduction aux exemples 7

: «langage de manipulation de données» En SQL : - INSERT, UPDATE, DELETE : pour modifier les données L entité manipulée est la ligne - COMMIT, ROLLBACK : pour valider ou annuler les transactions L entité manipulé est l ensemble de modifications Ajout de lignes : INSERT INSERT permet d insérer une ligne en spécifiant les valeurs : INSERT INTO nom_table(nom_col1,nom_col2,...) VALUES (val1,val2...) On peut ne pas préciser les noms des colonnes : elles sont alors toutes considérées dans l ordre de la déclaration de la table Ex : insère l employé DUPON avec des valeurs spécifiées : INSERT INTO emp VALUES ('DUPON', 7369, '', 27047, 17-DEC-80, 26000, 2500, 20) ; Ajout de lignes : INSERT On peut aussi insérer des lignes provenant d un SELECT : INSERT INTO nom_table(nom_col1,nom_col2,...) SELECT... Ex : insère les noms et salaires des s dans le tableau bonus INSERT INTO bonus SELECT nom, salaire WHERE fonction = ; Dans tous les cas les colonnes sans valeur spécifiée auront toujours une valeur indéfinie (NULL) Modification de lignes : UPDATE UPDATE permet de modifier les valeurs d une ou plusieurs colonnes dans une ou plusieurs lignes déjà existantes Les nouvelles valeurs peuvent être énoncées par l utilisateur ou provenir d un ou plusieurs SELECT UPDATE nom_table SET nom_col1 = {expression1 ( SELECT...) }, nom_col2 = {expression2 ( SELECT...) } WHERE predicat Ex : augmenter de 10% les salaires des ingénieurs UPDATE emp SET salaire = salaire * 1.1 WHERE fonction = ; Sans clause WHERE : toutes les lignes sont mises à jour Suppression de lignes : DELETE DELETE permet de supprimer une ou plusieurs lignes d une table DELETE FROM nom_table WHERE predicat ; Ex : détruit les lignes des employés travaillant à Rennes DELETE WHERE emp.deptno = (SELECT dept.deptno FROM dept WHERE lieu='rennes'); Doit retourner une valeur et une seule Gestion des transactions : COMMIT et ROLLBACK Une transaction est un ensemble de modifications de la base qui forme un tout indivisible Il faut effectuer ces modifications entièrement ou pas du tout, sous peine de laisser la base dans un état incohérent Les SGBDs permettent aux utilisateurs de gérer leurs transactions : - COMMIT : les modifications de la transaction en cours deviennent définitives et visibles de tous, - ROLLBACK : les modifications de la transaction en cours sont toutes annulées Sans clause WHERE : toutes les lignes sont supprimées 8

Bases de Données Langage SQL Facettes de SQL et introduction aux exemples : «langage de définition de données» En SQL : - CREATE, ALTER, DROP, RENAME (création, modification, suppression et renommage de tables) - Définitions de types (des éléments d une colonne) - Définition de contraintes d intégrité On peut aussi définir : - des vues - des indexes - des clusters Définition/Création de tables relationnelles : CREATE TABLE Création simple d une table vide : CREATE TABLE on ne précise que le nom des colonnes et leurs types : CREATE TABLE nom_table (nom_col1 TYPE1, nom_col2 TYPE2,...) A la création, la table sera vide mais un certain espace lui sera alloué On peut préciser si on autorise des valeurs indéfinies ou non Définition/Création de tables relationnelles : CREATE TABLE Création avec insertion de données : CREATE TABLE - SELECT En UN ordre on crée une table et on la remplit avec le résultat d un SELECT CREATE TABLE nom_table [(nom_col1, nom_col2,...)] AS SELECT... Pas nécessaire, sauf si : - on veut changer les noms, - les colonnes sont les résultats d expressions. Les types des colonnes sont spécifiés par les types des colonnes du SELECT Si on veut les changer il faut le faire dans le SELECT Ex: TO_DATE, TO_CHAR, TO_NUMBER Définition/Création de tables relationnelles : CREATE TABLE Spécification de types de données : types disponibles en SQL NUMBER(longueur,[précision]) : entier ou réel : 10-130 à 10 125 CHAR(longueur) : chaîne de longueur fixe de 1 à 255 caractères VARCHAR(longueur) : chaîne de longueur variable de 1 à 2000 car. DATE : des dates RAW(longueur) : caractères non imprimables LONG : chaîne de longueur variable de 1 à 2 31-1caractères Attention : bcp de restrictions de manipulation sur les LONG! Définition/Création de tables relationnelles : CREATE TABLE Contraintes d intégrité définies lors de la création de la table : CREATE TABLE nom_table ( nom_col_1 type_1 CONSTRAINT [nom_contrainte_1_1] contrainte_1_1 CONSTRAINT [nom_contrainte_1_2] contrainte_1_2... CONSTRAINT [nom_contrainte_1_m] contrainte_1_m,... nom_col_n type_n CONSTRAINT [nom_contrainte_n_1] contrainte_n_1 CONSTRAINT [nom_contraint_n_2] contrainte_n_2... CONSTRAINT [nom_contrainte_n_q] contrainte_n_q ); Contraintes d intégrité possibles : NOT NULL : pas d éléments indéfinis UNIQUE : chaque ligne a une valeur différente ou indéfinie pour cette col. PRIMARY KEY : chaque ligne a une valeur différente et définie pour cette col FOREIGN KEY : fait référence à une colonne clé d une autre table. CHECK : permet de spécifier les val. acceptables pour une col 9

Modification d une table : ALTER TABLE Ajout d une colonne à une table déjà existante : ALTER TABLE nom_table ADD (nom_col1 TYPE1, nom_col2 TYPE2,...) Les lignes existantes auront des valeurs indéfinies sur ces nouvelles colonnes Suppression d une colonne existante : IMPOSSIBLE! on peut la mettre à la valeur NULL plus d espace disque pour la supprimer réellement : - définir une nouvelle table sans la colonne - détruire l ancienne table - renommer la nouvelle table Modification d une table : ALTER TABLE Modification d une colonne déjà existante : il est possible d augmenter la taille d une colonne ; il est possible de diminuer la taille, ou même de changer le type d une colonne vide ; on peut spécifier NOT NULL si la colonne ne contient aucune valeur indéfinie ; on peut spécifier NULL pour autoriser les valeurs indéfinies. Suppression d une table : DROP DROP TABLE nom_table ; Simple La définition et le contenu sont détruits L espace disque est libéré Renommage d une table : RENAME RENAME ancien_nom TO nouveau_nom ; Simple Définition de VUEs : VIEW But : une «VIEW» permet de sauvegarder le résultat d un SELECT, qui est une table mais éphémère Chaque utilisateur peut alors avoir sa vue de la base, et la manipuler comme si c était une table réelle CREATE VIEW emp10 AS SELECT * WHERE n_dept = 10 ; DROP VIEW nom_vue; RENAME ancien_nom TO nouveau_nom; On dispose de certaines des opérations des tables : - création - suppression - renommage 10