Chapitres 1 et 2 Langage d interrogation des donnåes - Partie 1 -

Documents pareils
1. LA GESTION DES BASES DE DONNEES RELATIONNELLES

Le Langage SQL version Oracle

Le langage SQL Rappels

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

Faculté des sciences de gestion et sciences économiques BASE DE DONNEES

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

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

SQL Historique

Le modäle conceptuel de donnåes (MCD)

Langage SQL : créer et interroger une base

1 Introduction et installation

Les bases de données

clef primaire ; clef étrangère ; projection ; restriction ; jointure ; SQL ; SELECT ; FROM ; WHERE

MODE OPERATOIRE OPENOFFICE BASE

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

Information utiles. webpage : Google+ : digiusto/

Bases de données relationnelles

16H Cours / 18H TD / 20H TP

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

REMPLACEMENT DU SYSTEME TELEPHONIQUE DE LA MAIRIE DE HOERDT

SOMMAIRE. Travailler avec les requêtes... 3

Bases de Données. Plan

26, rue du Faubourg Poissonni re Paris T l :

Les bases de données Page 1 / 8

Exemple accessible via une interface Web. Bases de données et systèmes de gestion de bases de données. Généralités. Définitions

TARIFS CONDITIONS GÉNÉRALES

Statuts CITEC Suisse

A. Conditions de pråparation et d organisation des travaux du Conseil d Administration

Présentation du module Base de données spatio-temporelles

Cours Base de données relationnelles. M. Boughanem, IUP STRI

Dossier I Découverte de Base d Open Office

1. Introduction Création d'une requête...2

Initiation aux bases de données (SGBD) Walter RUDAMETKIN

Le Langage De Description De Données(LDD)

SQL sous SqlServer OLIVIER D. DEHECQ Olivier 0

Cours: Les Jointures 1

Catalogue professionnel Ä. Ç Licence d exploitation du logiciel Ä MERCATOS Ç DÑveloppement SEEG NTIC Edition

FileMaker 13. Guide de référence SQL

4. Utilisation d un SGBD : le langage SQL. 5. Normalisation

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

Magasins et entrepôts de données (Datamart, data warehouse) Approche relationnelle pour l'analyse des données en ligne (ROLAP)

AGRÉGATION «ÉCONOMIE ET GESTION»

PRODIGE V3. Manuel utilisateurs. Consultation des métadonnées

DOMMAGE OUVRAGE/CONSTRUCTEUR NON REALISATEUR MARCHE A LOTS SEPARES

Bases de Données. Stella MARC-ZWECKER. Maître de conférences Dpt. Informatique - UdS

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

Bases de données élémentaires Maude Manouvrier

Bases de données relationnelles : Introduction

A QUOI SERVENT LES BASES DE DONNÉES?

SQL Serveur Programme de formation. France Belgique Suisse - Canada. Formez vos salariés pour optimiser la productivité de votre entreprise

PRODIGE V3. Manuel utilisateurs. Consultation des métadonnées

Utiliser Access ou Excel pour gérer vos données

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

BIBUS-S pråsentation et fonctionnalitås

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

Introduction aux Bases de Données

Bases de Données. Le cas des BD relationnelles ouverture sur les BD relationnelles spatiales Séance 2 : Mise en oeuvre

Chapitre 10. Architectures des systèmes de gestion de bases de données

Bases de données Outils de gestion

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

CREATION WEB DYNAMIQUE

BASES DE DONNÉES. CNAM Centre associé de Clermont-Ferrand Cycle A Année J. Darmont I. INTRODUCTION II. LES SYSTÈMES HIÉRARCHIQUES

Bases de données cours 1

CONSEIL EN MANAGEMENT ORGANISATION ET SYSTEME D INFORMATION. ALTER ORGA SARL 3 rue Desgenettes Rosny sous Bois

Concours d accås en 4 Äme annåe du Programme Grande Ecole Examen Type Epreuve de spåcialitå Finance (Master Finance) DurÅe : 3H

INTRODUCTION AUX BASES de DONNEES

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

MySQL / SQL EXEMPLES

Compétences Business Objects

LES PROCESSUS DE CONTROLE DANS LA STRUCTURATION DE L ORGANISATION TOME 2

Collecte et archivage des donnäes Älectroniques issues :

FORMATION A L UTILISATION DE PMB QUELQUES NOTIONS DE SQL

SUPPORT SQL. Thierry GRANDADAM

A QUOI SERVENT LES BASES DE DONNÉES?

Encryptions, compression et partitionnement des données

REFERENTIEL DE CERTIFICATION DU SYSTEME DE GESTION DE LA QUALITE DES EAUX DE BAIGNADE

CESI Bases de données

Bases de données avancées Introduction

PHP 4 PARTIE : BASE DE DONNEES

1. Introduction... Page Les principaux atouts du WCC... Page SpÄcificitÄ du catalogue en ligne... Page SpÄcificitÄ du WCC...

Institut Delyl Informatique ComptabilitÅ - langues TEL : === Installation de Windows XP ===-

Construction d un EDD avec SQL 2008 R2. D. Ploix - M2 Miage - EDD - Création

OpenOffice Base Gestionnaire de Base de Données

Donnez nous le sens, nous vous donnerons la direction

Systèmes de Gestion de Bases de Données

Plan. Exemple: Application bancaire. Introduction. OCL Object Constraint Language Le langage de contraintes d'uml

Table des matières PRESENTATION DU LANGAGE DS2 ET DE SES APPLICATIONS. Introduction

CONTRAT DE MAINTENANCE INFORMATIQUE OPTION :

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

SQL MAP. Etude d un logiciel SQL Injection

CRÉER UNE BASE DE DONNÉES AVEC OPEN OFFICE BASE

Systèmes d information et bases de données (niveau 1)


TD n 10 : Ma première Base de Données

Compte-rendu de projet de Système de gestion de base de données

Chapitre 11 Bases de données

RÄglement. de fonctionnement. ALJT - SiÄge Social : 18/26 rue Goubet - PARIS

Mercredi 15 Janvier 2014

Transcription:

Chapitres 1 et 2 Langage d interrogation des donnåes - Partie 1-1. Introduction...2 2. Les bases de donnåes...2 2.1. DÄfinition... 2 2.2. UtilitÄ... 3 2.3. SGBD et SGBDR... 3 2.4. Les contraintes d intägritä... 4 3. Le langage SQL...8 4. DÅfinition du LID...9 5. Interrogation simple d une table...10 5.1. Projection... 10 5.2. Restriction de lignes... 11 5.3. Trier le räsultat d une interrogation... 17 6. Interrogation de plusieurs tables : les jointures...18 6.1. Equi-jointure... 19 6.2. Jointure räflexive ou auto-jointure... 22 6.3. Jointure externe... 26 6.3.1. Jointure externe gauche... 27 6.3.2. Jointure externe droite... 28 6.3.3. Jointure externe compläte... 28 6.4. Jointure multi tables... 29 7. Exercices...32 ALSI_IG1_C02 - SQL LID Partie 1 1

1. Introduction Toute organisation a besoin d'informations pour coordonner ses actions en vue d'atteindre ses objectifs. Exemples : - Une bibliothäque maintient une liste de membres, de livres, - Une sociçtç maintient des informations sur ses salariçs, ses services... Ces informations sont ÄlaborÄes Ç partir de donnåes qui, pour Étre utilisables aisäment, sont stockåes de faéon structuråe et ordonnåe. Elles peuvent Étre stockäes sur diffärents types de support et format comme : des fiches papiers, des tableaux ÄlaborÄs avec un tableur (tel que Microsoft Excel) ou des bases de donnäes. EMPLOYES matricule NomEmploye fonction 26691 DUPOND commercial SERVICE 17574 GARDARIN ingänieur 26691 MARTIN präsident NumService NomService 35155 Lieu DUPONT adminsitratif 10 Recherche 36000 Rennes 20 Vente Metz 30 Direction Paris 40 Fabrication Toulon 50 SAV Metz 1 2 3 4 5 6 7 8 9 A B C D E Tableau Excel Fiches papier Base de donnåes 2. Les bases de donnåes 2.1. DÅfinition Le terme de base de donnäes (en anglais Ñ DB Ö signifie data base) correspond Ç une entitå dans laquelle il est possible de stocker des donnåes de faéon structuråe et avec le moins de redondance possible (c est-ñ-dire Åviter de retrouver les mömes valeurs dans diffårentes tables). Ces donnäes doivent pouvoir Étre utilisäes par des programmes, par des utilisateurs diffärents. Ainsi, la notion de base de donnäes est gänäralement coupläe Ç celle de räseau, afin de pouvoir mettre en commun ces informations, d'oü le nom de base. On parle gänäralement de systáme d'information pour däsigner toute la structure regroupant les moyens mis en place pour pouvoir partager des donnäes. ALSI_IG1_C02 - SQL LID Partie 1 2

2.2. UtilitÅ L utilitå d une base de donnåes est de mettre des donnäes Ç la disposition d'utilisateurs pour une consultation, une saisie ou bien une mise Ç jour, tout en s'assurant des droits accordäs Ç ces derniers. Cela est d'autant plus utile que les donnäes informatiques sont de plus en plus nombreuses. Une base de donnäes peut Étre locale, c'est-ç-dire utilisable sur une machine par un utilisateur, ou bien råpartie, c'est-ç-dire que les informations sont stockäes sur des machines distantes et accessibles par räseau. L'avantage majeur de l'utilisation de bases de donnäes est la possibilitä de pouvoir Étre accädäes par plusieurs utilisateurs simultanäment. 2.3. SGBD et SGBDR Afin de pouvoir contràler les donnäes ainsi que les utilisateurs, un systáme de gestion est näcessaire. La gestion de la base de donnäes se fait grâce Ç un systáme appelä SGBD (systáme de gestion de bases de donnäes) ou en anglais DBMS (Data base management system). Le SGBD est un ensemble de services (applications logicielles) permettant de gärer les bases de donnäes, c'est-ç-dire : permettre l'accás aux donnäes de faäon simple, autoriser un accás aux informations Ç de multiples utilisateurs manipuler les donnäes präsentes dans la base de donnäes (insertion, suppression, modification). Le SGBD assure la cohårence et l'accäs aux informations stockäes dans un modále physique de donnäes particulier : hiärarchique, räseau, relationnel, objet... Exemple IDS est un SGBD de type rçseau qui a ÇtÇ utilisç pour la conquéte spatiale amçricaine (programme Apollo). Il existe diffärents modáles de bases de donnäes : les BD hiärarchiques, les BD räseaux, les BD objets et les BD relationnelles. Un SGBDR (Systáme de Gestion de Base de DonnÄes Relationnel) est un SGBD assurant la cohärence et l'accás aux informations stockäes dans un modäle physique de donnåes de type relationnel Exemple Paradox, MySQL, Oracle, DB2, Ingres, Informix, Sybase, SQL Server... ALSI_IG1_C02 - SQL LID Partie 1 3

2.4. Les contraintes d intågritå Ces contraintes, gåråes en tant que såcuritå par les SGBDR, däfinissent les rágles Ç respecter sur les donnäes. Ces rágles permettent de garantir l'intågritå et la cohårence des donnäes. Si l on tente d insärer des donnäes qui ne respectent pas les contraintes d intägritä däfinies, le SGBDR retourne un message d erreur et la mise Ç jour des donnäes est interrompue. On parle alors de violation des contraintes d intågritå. Certaines de ces contraintes sont liäes aux rágles de gestion du systáme d information repräsentä. Par exemple, le stock actuel d un article ne doit pas Étre infärieur Ç son stock de säcuritä. Elles seront däfinies dans le SGBDR Ç l aide de triggers (vous Ätudierez les triggers en 2 áme annäe). D autres contraintes sont liäes au modále relationnel : La contrainte de relation ou contrainte d entitå La contrainte d'entitå pråcise qu il n y a pas de doublon de la clå primaire, que la clå primaire est toujours renseignåe et qu elle ne peut pas changer de valeur au cours du temps Pour chaque tuple d une relation, la valeur de la clå primaire doit Ötre : - - - La contrainte de domaine La contrainte de domaine permet de restreindre l'ensemble des valeurs que peut prendre un attribut dans une relation : Exemple : pour un album, le mçdia est Ñ Audio CD Ö, Ñ DVD Ö, Ñ K7 Ö ou Ñ Vinyle Ö. Cette contrainte est prise en charge par le SGBD par une contrainte de domaine. Il n est pas possible d associer á un album une valeur qui n appartient pas au domaine de dçfinition. ALSI_IG1_C02 - SQL LID Partie 1 4

Les contraintes d intågritå råfårentielle (ou de clå ÅtrangÄre) La contrainte d'intågritå råfårentielle indique que la valeur d'un attribut dåfini comme clå ÅtrangÄre doit exister comme valeur de clå primaire d'une autre relation. Une relation peut avoir de aucune Ç plusieurs cläs Ätrangáres. Exemple : SERVICE (numero, nomservice, lieu) numero : clä primaire EMPLOYE (matricule, nomemploye, fonction, dateembauche, salaire, numservice) matricule : clä primaire numservice : clä Ätrangáre en räfärence Ç numero de la relation SERVICE numservice dans la relation EMPLOYE fait rçfçrence á numero de la relation SERVICE. Cela signifie que la valeur de l attribut numservice de la relation EMPLOYE doit prçalablement exister comme valeur de clç primaire d'une ligne de la table SERVICE. Il est nçcessaire de crçer le service avant de crçer l employç rattachç á ce service. La contrainte d intägritä räfärentielle implique que : A NOTER : Certaines clås ÅtrangÄres peuvent Ötre autorisåes Ñ admettre des valeurs NULL. Dans ce cas, la contrainte d'intågritå råfårentielle n'est pas vårifiåe par le SGBDR. ATTENTION, il ne faut pas confondre NULL et chaüne vide (simple quotes)! La chaãne vide est une chaãne ne contenant aucun caractáre. La valeur NULL indique la präsence de donnäes manquantes dans un champ. ALSI_IG1_C02 - SQL LID Partie 1 5

Exemple : On prçcise que chaque employä a un et un seul supärieur hiärarchique parmi les autres employçs, sauf pour le dirigeant qui n en a pas. Cette nouvelle dçpendance fonctionnelle (la connaissance du matricule d un salariç dçtermine le matricule unique de son supçrieur hiçrarchique) entraàne la crçation d une clç ÇtrangÄre. SERVICE (numero, nomservice, lieu) numero : clä primaire EMPLOYE (matricule, nomemploye, fonction, dateembauche, salaire, numservice, matrsuperieur) matricule : clä primaire numservice : clä Ätrangáre en räfärence Ç numero de la relation SERVICE matrsuperieur : clå ÅtrangÄre en råfårence Ñ matricule de la relation EMPLOYE A titre indicatif le modále conceptuel Ätait le suivant ALSI_IG1_C02 - SQL LID Partie 1 6

Extrait de la table EMPLOYE matricule nom Employe fonction date Embauche salaire numservice matr Superieur 26691 DUPONT Commercial 14/04/1992 25 000 20 27047 15155 GARDARIN IngÄnieur 07/08/1998 24 000 10 24533 16712 MARTIN PrÄsident 23/05/1990 40 000 30 NULL 17574 DUPOND Adminsitratif 03/05/1995 9 000 30 16712..................... DUPOND fait partie du service nâ 30 c'est-á-dire la Direction Extrait de la table SERVICE numero nomservice lieu 10 Recherche Rennes 20 Vente Metz 30 Direction Nancy 40 Fabrication Toulon 50 SAV Metz MARTIN n a pas de supçrieur hiçrarchique Le supçrieur hiçrarchique de DUPOND est le matricule 16712, á savoir MARTIN ConsÅquence : il est important, lorsque l'on cräe une base de donnäes, de bien räflächir si un attribut doit ou non autoriser les valeurs NULL car cela a des consäquences non nägligeables. A noter que la clå primaire d une relation n admet pas de valeur nulle : elle doit toujours Étre renseignäe. ALSI_IG1_C02 - SQL LID Partie 1 7

3. Le langage SQL Le modále relationnel, inventä par A.F. Codd (Directeur de recherche du centre IBM de San JosÄ) en 1970 a donnä naissance au langage SQL, normalisä en 1986 par l ANSI (institut amäricain de normalisation) pour donner SQL-86. Depuis, plusieurs versions ont vu le jour : SQL-89, SQL-92 nommäe SQL2, SQL-99 nommäe SQL3, puis SQL:2003 et enfin SQL:2008. Le SQL (Structured Query Language : langage de requéte structurä) est un langage de communication avec les bases de donnäes relationnelles. Il präsente plusieurs subdivisions. Subdivision Sigle Description Langage d interrogation des donnäes (Data Query Language) Langage de manipulation des donnäes (Data Manipulation Language) LID (DQL) LMD (DML) Extraction de donnäes räpondant Ç un besoin däfini Ç l aide de critáres de restriction, d opärations et de tris. Modification du contenu de la base de donnäes : ajout, modification et suppression de donnäes Langage de däfinition des donnäes (Data Definition Language) Langage de contràle des donnäes (Data Controle Language) LDD (DDL) LCD (DCL) Modification de la structure de la base de donnäes : ajout, modification et suppression des tables et de leurs relations (contraintes d intägritä räfärentielles) Acquisition et rävocation des priviláges d accás aux donnäes. Il est possible d inclure des requétes SQL dans un programme Äcrit dans un autre langage (en C# ou en PHP par exemple). ALSI_IG1_C02 - SQL LID Partie 1 8

4. DÅfinition du LID Le langage d interrogation des donnäes (LID) permet, comme son nom l indique, d interroger une base de donnäes. Il sert Ç rechercher, extraire, trier, mettre en forme des donnäes et calculer de nouvelles donnäes Ç partir de donnäes existantes. Dans ce cours, nous utiliserons le modále relationnel suivant. ModÄle relationnel SERVICE(numero, nomservice, lieu) numero : clç primaire EMPLOYE (matricule, nomemploye, fonction, dateembauche, salaire, commission, numservice, matrsuperieur) matricule: clç primaire numservice : clç ÇtrangÄre en rçfçrence á numero de la relation SERVICE matrsuperieur : clç ÇtrangÄre en rçfçrence á matricule de la relation EMPLOYE ModÄle physique Employe matricule nomemploye fonction dateembauche salaire commission numservice matrsuperieur matrsuperieur = matricule numservice = numero Service numero numservice lieu Extraits des tables Extrait de la table Employe Extrait de la table Service ALSI_IG1_C02 - SQL LID Partie 1 9

Avec le langage SQL, c est la commande SELECT qui constitue le langage d interrogation de la base. Le räsultat d une requéte d interrogation sur des tables est lui-méme une table dont l existence est temporaire (le temps de la requéte). 5. Interrogation simple d une table 5.1. Projection L instruction SELECT permet de däterminer les colonnes Ñ projeter (afficher) Ç partir de tables präcisäes dans la clause FROM. La version la plus simple d une requéte d interrogation est la suivante : SELECT * FROM nom_table * signifie que tous les champs de la table sont projetçs Il est possible de limiter la projection Ç certains champs en präcisant leur nom aprás l instruction SELECT et en les säparant par des virgules. SELECT nom_champ1, nom_champ2, FROM nom_table Exemple 1 : Afficher toutes les informations sur les employås de l entreprise. SELECT * * se rapporte á tous les champs de la table Employe puisque c est la seule table spçcifiçe dans la clause FROM Exemple 2 : Quels sont les diffårents services (nom) de l entreprise et oà sont-ils implantås? SELECT nomservice, lieu FROM Service ALSI_IG1_C02 - SQL LID Partie 1 10

Par däfaut, l instruction SELECT est associäe au mot-clä ALL. Ainsi, méme s il n est pas späcifiä, l exäcution correspond Ç SELECT ALL ce qui signifie que tous les enregistrements correspondant Ç la demande seront affichäs, y compris ceux qui sont identiques. Ainsi les deux requétes ci-dessous produisent le méme räsultat : SELECT fonction ou SELECT ALL fonction La clause DISTINCT (Ç späcifier puisqu elle n est pas exäcutäe par däfaut), permet de ne projeter que les enregistrements diffärents. Exemple 3 : Quelles sont les fonctions occupåes dans l entreprise? SELECT DISTINCT fonction Plusieurs employçs pouvant occuper la méme fonction, la clause distinct permet de n afficher qu une seule fois chaque fonction 5.2. Restriction de lignes La clause WHERE permet de späcifier des critáres de restriction. Cette clause est suivie d une condition qui sera ÄvaluÄe pour chaque ligne de la table. Seules les lignes pour lesquelles le räsultat de la condition est VRAI seront projetäes. SELECT * FROM nom_table WHERE condition ALSI_IG1_C02 - SQL LID Partie 1 11

Les conditions sont construites Ç partir : d expressions constituäes de noms de champs ou de valeur (de type numärique, texte ou date) et Äventuellement d opärateurs arithmätiques (+, -, /, *) ou de fonctions prädäfinies. d opärateurs de comparaison : =, >, <, >=, <=, <> ou d opärateurs SQL expr BETWEEN val1 AND val2 Renvoie VRAI si la valeur d expr est comprise entre les valeurs de val1 et val2 incluses expr IN (val1, val2,...) expr LIKE unechaine Renvoie VRAI si la valeur d expr est Ägale Ç l une des valeurs de la liste entre parentháses Renvoie VRAI si la valeur d expr est Ägale Ç la valeur de unechaine qui est une chaãne de caractáres pouvant contenir des caractáres jokers (Ñ _ Ö pour un caractáre quelconque, Ñ % Ö pour plusieurs caractáres quelconques) ATTENTION : toute valeur alphanumårique ou de type date doit Ötre placåe entre simples quotes (ex : 'hello') Exemple 4 : Quels sont les noms des salariås qui occupent la fonction de commercial? On ne souhaite des räsultats que sur les seuls employäs dont la fonction est commercial : on effectue une restriction sur les lignes vårifiant la condition fonction = 'commercial' matricule nom Employe fonction date Embauche salaire comm ission num Service matr Superieur 15155 GARDARIN IngÄnieur 07/08/1998 24000 0 10 24533 16712 MARTIN PrÄsident 23/05/1990 40000 0 30 NULL 17574 DUPOND Administratif 03/05/1995 9000 0 30 16712 17899 BULLE Commercial 03/01/2000 18000 0 10 24533 18444 ANABEL Commercial 16/06/1990 29000 4000 20 27047 19654 ROUX Chef de service 30/05/1990 35000 0 20 16712 20000 PAPILOU Commercial 15/10/2004 15000 2050 20 27047 24533 JACOBI Chef de service 30/03/1997 30000 0 10 16712 25381 AMIN comptable 15/10/2006 25000 0 30 17574 25382 PERNOT comptable 15/10/2006 25000 0 30 17574 26691 DUPONT Commercial 14/04/1992 25000 2500 20 27047 27047 RAMARA Chef de service 18/08/2001 28000 0 20 16712 On veut seulement le nom de ces employäs : donc räalise une projection sur la colonne nomemploye pour les seules lignes sälectionnäes matricule nom Employe fonction date Embauche salaire comm isssion num Service matr Superieur 17899 BULLE Commercial 03/01/2000 18000 0 10 24533 18444 ANABEL Commercial 16/06/1990 29000 4000 20 27047 26691 DUPONT Commercial 14/04/1992 25000 2500 20 27047 20000 PAPILOU Commercial 15/10/2004 15000 2050 20 27047 RequÉte permettant d'obtenir les noms des salariäs qui occupent la fonction de commercial : SELECT nomemploye WHERE fonction = 'Commercial' ALSI_IG1_C02 - SQL LID Partie 1 12

Exemple 5 : Afficher les noms des salariås embauchås avant 2000 SELECT nomemploye WHERE dateembauche < '01/01/2000' Le critäre "avant 2000" est exprimç sous forme de date (certains SGBDR peuvent coder les dates au format yyyy/mm/jj). Un critäre de restriction de type date est placç entre quotes (apostrophes). matricule nom Employe fonction date Embauche salaire Comm ission num Service matr Superieur 15155 GARDARIN IngÄnieur 07/08/1998 24000 0 10 24533 16712 MARTIN PrÄsident 23/05/1990 40000 0 30 NULL 17574 DUPOND Administratif 03/05/1995 9000 0 30 16712 17899 BULLE Commercial 03/01/2000 18000 0 10 24533 18444 ANABEL Commercial 16/06/1990 29000 4000 20 27047 19654 ROUX Chef de service 30/05/1990 35000 0 20 16712 20000 PAPILOU Commercial 15/10/2004 15000 2050 20 27047 24533 JACOBI Chef de service 30/03/1997 30000 0 10 16712 25381 AMIN comptable 15/10/2006 25000 0 30 17574 25382 PERNOT comptable 15/10/2006 25000 0 30 17574 26691 DUPONT Commercial 14/04/1992 25000 2500 20 27047 27047 RAMARA Chef de service 18/08/2001 28000 0 20 16712 2. Projection sur la colonne nomemploye 1. Restriction sur la date d'embauche La restriction peut porter sur un champ calculå (räsultat d'une opäration sur des champs) Exemple 6 : Afficher les noms des salariås dont la råmunåration annuelle brute (salaire et commission) dåpasse 30 000 matricule Nom Employe Fonction Date Embauche salaire comm ission num Service matr Superieur champ calculå 15155 GARDARIN IngÄnieur 07/08/1998 24000 0 10 24533 24000 16712 MARTIN PrÄsident 23/05/1990 40000 0 30 NULL 40000 17574 DUPOND Administratif 03/05/1995 9000 0 30 16712 9000 17899 BULLE Commercial 03/01/2000 18000 0 10 24533 18000 18444 ANABEL Commercial 16/06/1990 29000 4000 20 27047 33000 19654 ROUX Chef service 30/05/1990 35000 0 20 16712 35000 20000 PAPILOU Commercial 15/10/2004 15000 2050 20 27047 17050 24533 JACOBI Chef service 30/03/1997 30000 0 10 16712 30000 25381 AMIN comptable 15/10/2006 25000 0 30 17574 25000 25382 PERNOT comptable 15/10/2006 25000 0 30 17574 25000 26691 DUPONT Commercial 14/04/1992 25000 2500 20 27047 27500 27047 RAMARA Chef service 18/08/2001 28000 0 20 16712 28000 Pour chaque ligne de la table, le SGBDR dätermine le champ calculä puis teste la condition. La projection sur les colonnes choisies est ensuite räalisäe. SELECT nomemploye WHERE salaire + commission > 30000 ALSI_IG1_C02 - SQL LID Partie 1 13

Exemple 7 : Afficher les noms des salariås embauchås en 2004 SELECT nomemploye WHERE dateembauche BETWEEN '01/01/2004' AND '31/12/2004' Ou bien SELECT nomemploye WHERE YEAR(dateEmbauche) = 2004 La fonction prçdçfinie YEAR extrait l'annçe d'une date Notez que la fonction YEAR utilisçe ici est une fonction propre au SGBDR Microsoft SQL Server. Chaque SGBDR propose une bibliothäque de fonctions. Lors de l'çtude de cas, si l'on ne vous propose pas explicitement une fonction dans l'çnoncç il est recommandç d'utiliser la premiäre syntaxe. Exemple 8 : Afficher les noms des salariås dont la commission repråsente plus de la moitiå du salaire SELECT nomemploye WHERE commission > salaire/2 Exemple 9 : Afficher les noms et fonctions des salariås qui sont soit commercial, soit ingånieur SELECT nomemploye, fonction WHERE fonction IN ('commercial', 'ingånieur') Exemple 10 : Afficher les noms des salariås dont le nom commence par M SELECT nomemploye WHERE nomemploye LIKE 'M%' Exemple 11 : Afficher les noms des salariås dont le nom se termine par T SELECT nomemploye WHERE nomemploye LIKE '%T' Exemple 12 : Afficher les noms des salariås dont le nom contient LA SELECT nomemploye WHERE nomemploye LIKE '%LA%' ALSI_IG1_C02 - SQL LID Partie 1 14

Exemple 13 : Afficher les noms des salariås et leur råmunåration brute annuelle SELECT nomemploye, salaire+commission Le räsultat de cette requéte n'est pas trás explicite pour celui qui visualise les räsultats. Il est possible de renommer le nom d'une colonne du räsultat d'une requéte en däfinissant un alias Ç l'aide de la clause AS (des guillemets sont näcessaires si l'alias comporte des espaces). SELECT nomemploye, salaire+commission AS "RÅmunÅration brute" Exercice 1 ALSI_IG1_C02 - SQL LID Partie 1 15

Par opposition aux conditions simples illusträes präcädemment, il existe des conditions composäes, formäes de plusieurs conditions simples combinäes grâce aux opärateurs logiques : AND (et), OR (l'un ou l'autre ou les deux), XOR (ou exclusif : l'un ou l'autre mais pas les deux). L'opÄrateur NOT placä devant une condition en inverse le sens. L'opÄrateur AND est prioritaire par rapport Ñ l'opårateur OR. Des parentháses peuvent Étre utilisäes pour imposer une prioritä dans l'ävaluation de la condition, ou simplement pour rendre l'expression plus claire. Exemple 14 : Afficher les noms des salariäs du service 30 ayant un salaire annuel d'au moins 25 000. SELECT nomemploye WHERE numservemploye=30 AND salaire > 25000 Exemple 15 : Afficher les noms des salariäs qui sont commercial ou ingänieur, et travaillant dans le service 20. SELECT nomemploye WHERE fonction IN ('commercial', 'ingånieur') AND numservemploye=20 Rappel : une valeur NULL est une valeur non renseignäe (indäfinie) pour un champ oü cela est autorisä. Attention, la valeur NULL est diffärente de la valeur zäro ou d'une chaine vide ('') qui sont des valeurs däfinies. L'opÄrateur IS NULL permet de tester la valeur NULL. expr IS NULL renvoie VRAI si l'expression expr est vide. expr = NULL provoque une erreur de syntaxe Exemple 16 : Afficher les noms des salariås qui n'ont pas de supårieur hiårarchique. SELECT nomemploye WHERE MatrSuperieur IS NULL Exemple 17 : Afficher les noms des salariås qui ont un supårieur hiårarchique. SELECT nomemploye WHERE MatrSuperieur IS NOT NULL Exercice 2 ALSI_IG1_C02 - SQL LID Partie 1 16

5.3. Trier le råsultat d une interrogation Les enregistrements projetäs Ç l'aide de l'instruction SELECT ne sont pas triäs par däfaut. On peut späcifier jusqu'ç 16 critáres de tris grâce Ç la clause ORDER BY placäe aprás la clause WHERE. SELECT * FROM nom_table [WHERE condition] ORDER BY nom_champ1 [DESC], nom_champ2 [DESC],... L'ordre des tris a lieu selon l'ordre des champs (ou des alias) späcifiä dans la clause ORDER BY ou selon leur numäro d'ordre dans la clause SELECT. Il est possible de späcifier un tri sur un champ non projetä (absent de la clause SELECT). Pour chaque critáre de tri späcifiä, le tri peut Étre ascendant (ASC par däfaut) ou descendant (DESC Ç späcifier). Si le tri porte sur un attribut contenant des valeurs NULL, ces valeurs sont toujours en töte quel que soit l'ordre du classement (ascendant ou descendant). Exemple 18 : Afficher la liste des salariås (nom, fonction, salaire), classåe par fonction, et pour chaque fonction, par salaire dåcroissant. SELECT nomemploye, fonction, salaire ORDER BY fonction, salaire DESC DESC ne s'applique qu'á salaire. fonction est ASC par dçfaut. Dans la clause ORDER BY on peut Ägalement utiliser le numäro d'ordre du champ dans la liste SELECT ou l'alias Exemple 19 : Afficher la liste des salariås (nom et råmunåration annuelle brute), triåe par råmunåration dåcroissante. Le champ calculç SELECT nomemploye, salaire+commission as RÄmunÄration salaire+commission est le 2Çme de la liste des champs prçcisçs dans le ORDER BY 2 DESC SELECT ou encore SELECT nomemploye, salaire+commission as RÄmunÄration ORDSC On utilise cette fois-ci l'alias pour dçfinir le critäre de tri. Exercice 3 ALSI_IG1_C02 - SQL LID Partie 1 17

6. Interrogation de plusieurs tables : les jointures La jointure est une opäration qui permet de combiner des informations venant de plusieurs tables. Il est possible de joindre jusqu'ç 256 tables. Une jointure est obligatoire dás lors que plusieurs tables sont präsentes dans la clause FROM, c'est-ç-dire lorsque les projections, restrictions et/ou critáres de tris concernent les donnäes issues de plusieurs tables. Attention, en l'absence de jointure, le räsultat renvoyä par la requéte correspond au produit cartåsien des enregistrements des deux tables (chaque enregistrement de la premiáre table est associä Ç tous les enregistrements de la seconde table). En effet, dás lors que le SGBDR rencontre plusieurs tables dans une requéte, il räalise un produit cartäsien. Exemple : On lance la requéte suivante : SELECT nomemploye, numservice, SERVICE.* FROM EMPLOYE, SERVICE Cette requéte va retourner toutes les combinaisons possibles : chaque service sera associä Ç l ensemble des employäs. Lorsque plusieurs tables sont utilisäes, il est obligatoire de pråfixer par le nom de la table : - les champs pour lesquels une ambigäitå existe (deux champs portant le méme nom dans deux tables diffärentes) - le caractäre * pour präciser quelle table doit voir tous ses champs projetäs ALSI_IG1_C02 - SQL LID Partie 1 18

6.1. Equi-jointure Une Äqui-jointure rapproche deux tables grâce Ç deux champs ayant un méme sens. Il s agit gänäralement de lier la clä primaire d une table avec la clä Ätrangáre qui y fait räfärence dans l autre table. On parle alors de jointure naturelle. La condition de jointure s'exprime Ç l'aide de la clause WHERE (il s'agit bien d'une restriction) Exemple 20 : Afficher le nom des salariås avec leur lieu de travail SELECT nomemploye, lieu, Service WHERE numservice=numero A chaque enregistrement de la table Employe on associe l enregistrement de la table service vçrifiant : numservice=numservemploye Comment fonctionne le SGBDR pour räpondre Ç cette requéte? Il räalise tout d'abord le produit cartåsien des deux tables (il associe chaque ligne de la table EMPLOYE avec chaque ligne de la table SERVICE) matri cule nom Employe fonction table EMPLOYE date Embauche comm salaire ission num Service matr Superieur num ero table SERVICE nomservice 15155 GARDARIN IngÄnieur 07/08/1998 24000 0 10 24533 10 Recherche Rennes 16712 MARTIN PrÄsident 23/05/1990 40000 0 30 NULL 10 Recherche Rennes 17574 DUPOND Administratif 03/05/1995 9000 0 30 16712 10 Recherche Rennes 17899 BULLE Commercial 03/01/2000 18000 0 10 24533 10 Recherche Rennes 18444 ANABEL Commercial 16/06/1990 29000 4000 20 27047 10 Recherche Rennes 19654 ROUX Chef de service 30/05/1990 35000 0 20 16712 10 Recherche Rennes 20000 PAPILOU Commercial 15/10/2004 15000 2050 20 27047 10 Recherche Rennes 24533 JACOBI Chef de service 30/03/1997 30000 0 10 16712 10 Recherche Rennes 25381 AMIN comptable 15/10/2006 25000 0 30 17574 10 Recherche Rennes 25382 PERNOT comptable 15/10/2006 25000 0 30 17574 10 Recherche Rennes 26691 DUPONT Commercial 14/04/1992 25000 2500 20 27047 10 Recherche Rennes 27047 RAMARA Chef de service 18/08/2001 28000 0 20 16712 10 Recherche Rennes 15155 GARDARIN IngÄnieur 07/08/1998 24000 0 10 24533 20 Vente Metz 16712 MARTIN PrÄsident 23/05/1990 40000 0 30 NULL 20 Vente Metz 17574 DUPOND Administratif 03/05/1995 9000 0 30 16712 20 Vente Metz 17899 BULLE Commercial 03/01/2000 18000 0 10 24533 20 Vente Metz 18444 ANABEL Commercial 16/06/1990 29000 4000 20 27047 20 Vente Metz 17574 DUPOND Administratif 03/05/1995 9000 0 30 16712 50 SAV Metz 17899 BULLE Commercial 03/01/2000 18000 0 10 24533 50 SAV Metz 18444 ANABEL Commercial 16/06/1990 29000 4000 20 27047 50 SAV Metz 19654 ROUX Chef de service 30/05/1990 35000 0 20 16712 50 SAV Metz 20000 PAPILOU Commercial 15/10/2004 15000 2050 20 27047 50 SAV Metz 24533 JACOBI Chef de service 30/03/1997 30000 0 10 16712 50 SAV Metz 25381 AMIN comptable 15/10/2006 25000 0 30 17574 50 SAV Metz 25382 PERNOT comptable 15/10/2006 25000 0 30 17574 50 SAV Metz 26691 DUPONT Commercial 14/04/1992 25000 2500 20 27047 50 SAV Metz 27047 RAMARA Chef de service 18/08/2001 28000 0 20 16712 50 SAV Metz lieu ALSI_IG1_C02 - SQL LID Partie 1 19

Ensuite il applique la condition de jointure (la restriction) : seules les lignes värifiant numservice=numero sont sälectionnäes matri cule nom Employe fonction table EMPLOYE date Embauche salaire comm ission num Service matr Superieur num ero table SERVICE nomservice lieu 15155 GARDARIN IngÄnieur 07/08/1998 24000 0 10 24533 10 Recherche Rennes 16712 MARTIN PrÄsident 23/05/1990 40000 0 30 NULL 30 Direction Nancy 17574 DUPOND Administratif 03/05/1995 9000 0 30 16712 30 Direction Nancy 17899 BULLE Commercial 03/01/2000 18000 0 10 24533 10 Recherche Rennes 18444 ANABEL Commercial 16/06/1990 29000 4000 20 27047 20 Vente Metz 19654 ROUX Chef de service 30/05/1990 35000 0 20 16712 20 Vente Metz 20000 PAPILOU Commercial 15/10/2004 15000 2050 20 27047 20 Vente Metz 24533 JACOBI Chef de service 30/03/1997 30000 0 10 16712 10 Recherche Rennes 25381 AMIN comptable 15/10/2006 25000 0 30 17574 30 Direction Nancy 25382 PERNOT comptable 15/10/2006 25000 0 30 17574 30 Direction Nancy 26691 DUPONT Commercial 14/04/1992 25000 2500 20 27047 20 Vente Metz 27047 RAMARA Chef de service 18/08/2001 28000 0 20 16712 20 Vente Metz Condition de sälection numservice = numero Enfin, il effectue la projection : seules les colonnes nomemploye et lieu sont retenues nomemploye GARDARIN MARTIN DUPOND BULLE ANABEL ROUX PAPILOU JACOBI AMIN PERNOT DUPONT RAMARA lieu Rennes Nancy Nancy Rennes Metz Metz Metz Rennes Nancy Nancy Metz Metz Une autre syntaxe existe pour exprimer la jointure (norme SQL 2): SELECT nomemploye, lieu INNER JOIN Service ON numservice = numero ou encore SELECT nomemploye, lieu JOIN Service ON numservice= numero ALSI_IG1_C02 - SQL LID Partie 1 20

Il est possible, bien entendu, d'appliquer des restrictions au räsultat d'une jointure entre tables. Dans ce cas les restrictions sont ajoutäes Ç la clause WHERE, aprás la condition de jointure. Les diffärentes conditions sont säparäes par AND. SELECT liste_des_colonnes FROM table1, table2 WHERE condition_jointure AND condition_restriction AND autre_condition_restriction Exemple 21 : Afficher le nom des salariås embauchås avant 2000 et travaillant Ñ Metz SELECT nomemploye, Service WHERE numservice = numero AND dateembauche < '01/01/2000' AND lieu = 'Metz' Le SGBDR räalise d'abord le produit cartåsien puis applique la condition de jointure matri cule nom Employe fonction date Embauche salaire comm ission num Service matr Superieur num ero nomservice lieu 15155 GARDARIN IngÄnieur 07/08/1998 24000 0 10 24533 10 Recherche Rennes 16712 MARTIN PrÄsident 23/05/1990 40000 0 30 NULL 30 Direction Nancy 17574 DUPOND Administratif 03/05/1995 9000 0 30 16712 30 Direction Nancy 17899 BULLE Commercial 03/01/2000 18000 0 10 24533 10 Recherche Rennes 18444 ANABEL Commercial 16/06/1990 29000 4000 20 27047 20 Vente Metz 19654 ROUX Chef de service 30/05/1990 35000 0 20 16712 20 Vente Metz 20000 PAPILOU Commercial 15/10/2004 15000 2050 20 27047 20 Vente Metz 24533 JACOBI Chef de service 30/03/1997 30000 0 10 16712 10 Recherche Rennes 25381 AMIN comptable 15/10/2006 25000 0 30 17574 30 Direction Nancy 25382 PERNOT comptable 15/10/2006 25000 0 30 17574 30 Direction Nancy 26691 DUPONT Commercial 14/04/1992 25000 2500 20 27047 20 Vente Metz 27047 RAMARA Chef de service 18/08/2001 28000 0 20 16712 20 Vente Metz Le SGBDR effectue ensuite les restrictions demandäes. matri cule nom Employe fonction date Embauche salaire comm ission num Service matr Superieur num ero nomservice lieu 18444 ANABEL Commercial 16/06/1990 29000 4000 20 27047 20 Vente Metz 19654 ROUX Chef de service 30/05/1990 35000 0 20 16712 20 Vente Metz 26691 DUPONT Commercial 14/04/1992 25000 2500 20 27047 20 Vente Metz Le SGBDR effectue enfin la projection des colonnes demandäes nomemploye ANABEL ROUX DUPONT Exercice 4 ALSI_IG1_C02 - SQL LID Partie 1 21