Langage SQL : créer et interroger une base

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

Le langage SQL Rappels

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

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

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

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

Systèmes de Gestion de Bases de Données

MySQL / SQL EXEMPLES

Le Langage SQL version Oracle

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

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

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

Bases de données relationnelles

1. LA GESTION DES BASES DE DONNEES RELATIONNELLES

1 Introduction et installation

SQL Historique

Olivier Mondet

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

Les bases de données

Création et Gestion des tables

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

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

I4 : Bases de Données

16H Cours / 18H TD / 20H TP

Intégrité des données

TP3 : Creation de tables 1 seance

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

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

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

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

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

TP Contraintes - Triggers

Historisation des données

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

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

FileMaker 13. Guide de référence SQL

TP base de données SQLite. 1 Différents choix possibles et choix de SQLite : 2 Définir une base de donnée avec SQLite Manager

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

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

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

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

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

Bases de données cours 4 Construction de requêtes en SQL. Catalin Dima

Optimisation SQL. Quelques règles de bases

CREATION WEB DYNAMIQUE

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

Bases de données relationnelles & SQL

SQL sous SqlServer OLIVIER D. DEHECQ Olivier 0

1 Position du problème

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

Introduction aux Bases de Données 2004/2005

A QUOI SERVENT LES BASES DE DONNÉES?

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

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

INTRODUCTION AU DATA MINING

Chapitre 3 LE MODELE RELATIONNEL ET SQL (DDL)

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

Compétences Business Objects

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

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

Bases de données. PTSI Lycée Eiffel. 28 février 2014

MODE OPERATOIRE OPENOFFICE BASE

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

FORMATION A L UTILISATION DE PMB QUELQUES NOTIONS DE SQL

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

1. Base de données SQLite

Procédures Stockées WAVESOFT ws_sp_getidtable Exemple : ws_sp_getnextsouche Exemple :... 12

Encryptions, compression et partitionnement des données

OpenPaaS Le réseau social d'entreprise

Les BASES de DONNEES dans WampServer

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

LE LANGAGE SQL2 1. INTRODUCTION

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

Objectifs du TP : Initiation à Access

Gestion de base de données

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

PHP et mysql. Code: php_mysql. Olivier Clavel - Daniel K. Schneider - Patrick Jermann - Vivian Synteta Version: 0.9 (modifié le 13/3/01 par VS)

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

Access et Org.Base : mêmes objectifs? Description du thème : Création de grilles d écran pour une école de conduite.

La présente publication est protégée par les droits d auteur. Tous droits réservés.

Les bases fondamentales du langage Transact SQL

Mejdi BLAGHGI & Anis ASSÈS

Vincent Augusto

Cours: Les Jointures 1

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

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

INTEGRITE ET BD ACTIVES

Bases de Données. Plan

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

Auto-évaluation SQL. Document: f0453test.fm 19/04/2012. ABIS Training & Consulting P.O. Box 220 B-3000 Leuven Belgium

Structured Query Language

1 Introduction. 2 Le modèle relationnel. 3 Algèbre relationnelle 4 SQL. 5 Organisation physique des données 1/228

1 Modélisation d une base de données pour une société de bourse

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

A QUOI SERVENT LES BASES DE DONNÉES?

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

Bases de données élémentaires Maude Manouvrier

Transcription:

Langage SQL : créer et interroger une base Dans ce chapitre, nous revenons sur les principales requêtes de création de table et d accès aux données. Nous verrons aussi quelques fonctions d agrégation (MAX, SUM, COUNT,..). Nous revenons pour finir sur les opérations de l algèbre relationnelle et les traduisons en requêtes SQL. Avant d aborder la création et d interrogation des tables avec la commande SELECT, nous présentons quelques règles d écritures en SQL. Nommage des objets en SQL Un nom d objet (table, base, colonne contrainte, vue, etc ) doit avoir les caractéristiques suivantes : - Ne pas dépasser 128 caractères - Commencer par une lettre - Etre composé de lettre, de chiffre, du caractère _ - Ne pas être un mot réservé en SQL { moins d être mis entre guillemets - Pas de caractères accentués Il faut noter que les noms d objets sont insensibles { la casse. Voici quelques exemples de noms bien et mal formés : valable T_CLIENT Xyz IBM_COM SELECT CLI_NUM MS_sql_Server Interdit T CLIENT _XyZ_ Ibm.com SELECT CLI# Microsoft/SQLserver Remarque : une bonne habitude consiste à donner un nom pertinent aux objets des bases de données. Commentaires Les commentaires en mysql s ecrivent { la manière C : /* mon commentaire sur plusieurs lignes */ Mais un commentaire sur une seule lignes est introduit par : ou #. Mais pour éviter toute confusion du caractère avec des opérations mathématiques avec le -, préférez le # pour vos commentaires sur une seule ligne. 1

1. CREATE TABLE La syntaxe de création de table est la suivante : CREATE [TEMPORARY] TABLE [IF NOT EXISTS] {tbl_name db.name.tbl_name } <col_name> <type> [NOT NULL NULL] [DEFAULT <value>] [<contrainte de colonne>] [, {<col_name> <type> [DEFAULT <value>] [<contrainte de colonne>] <contrainte_de_table>} [,...]] ) [SELECT ] ; 2.1. Les contraintes d intégrité sur les colonnes de tables Les contraintes d intégrités permettent aux SGBD-R de garantir la cohérence des données lorsque ces dernières sont mises à jour. Ces contraintes correspondent à des contraintes du monde réel que la base de données cherche à représenter. Comme par exemple, le nom d un mois doit être une chaine de caractères, ou l âge un nombre Il y aussi les clés primaires et clés étrangères, mais aussi bien d autres contraintes que les bases de données peuvent exprimer. Ainsi si une mise à jour viole une de ces contraintes, elle sera alors tout simplement rejetée. Contraintes de domaine On entend par domaine le type des attributs d une table. Il ne peut y avoir de comparaison entre deux valeurs d attributs si ces derniers ne sont pas définit sur le même domaine. Le SGBD-R se charge de vérifier la validité des valeurs d attributs. Un enregistrement ne peut être inséré dans une table que si chaque champ de l enregistrement vérifie la contrainte d intégrité de domaine de la colonne pour laquelle il est destiné. Pour exemple prenons une table cours qui contient deux colonnes intitule et nbetudiants. Dans ce cas la commande pour créer cette table est : Intitule VARCHAR, NbEtudiants INTEGER) ; 2

Contrainte de non nullité (NOT NULL) La contrainte de non nullité impose que la valeur d un attribut soit renseignée (la valeur du champ ne peut être à NULL). Prenons pour exemple, la colonne intitule de la table cours. Il est cohérent d imposer que l intitulé soit toujours renseigné. Ainsi la commande de création de la table devient : NbEtudiants INTEGER) ; Contrainte de vérification (CHECK) La contrainte de vérification est une contrainte qui permet de spécifier que la valeur d une colonne particulière doit satisfaire une expression booléenne. Attention : si l expression booléenne compare deux valeurs de colonnes, et que ces dernières contiennent la valeur NULL, elles ne seront pas considérées comme égales. Par exemple le nombre d étudiants ne peut être que supérieur { zéro. La commande de création de table devient donc : NbEtudiants INTEGER CHECK(NbEtudiants > 0 OR NbEtudiants IS NULL) ; Contrainte de clé unique (UNIQUE) et clé primaire (PRIMARY KEY) La contrainte d unicité permet de préciser les attributs clés d une table. Elle permet de garantir que deux lignes de cette table ne peuvent en aucun cas recevoir les mêmes valeurs pour ces attributs. Aussi, comme deux valeurs NULL ne sont pas considérées par le SGBD-R comme égales, nous pouvons avoir (aves la seule contrainte UNIQUE) deux valeurs de clé à NULL. Or, une clé primaire ne peut être nulle. De ce fait, il est nécessaire d accompagner la contrainte UNIQUE par la contrainte de non nullité lorsqu il s agit de clés primaires : UNIQUE NOT NULL. La contrainte de clé primaire PRIMARY KEY permet justement d exprimer ces deux contraintes (UNIQUE NOT NULL). 3

Introduisons par exemple un attribut sigle (ex : INF1010, INF2705, LOG2410, MTH1006, PHS1101, ) et qui est une clé pour la table cours. On aurait alors comme commande de création de table : sigle CHAR(7) UNIQUE NOT NULL, NbEtudiants INTEGER CHECK(NbEtudiants > 0 OR NbEtudiants IS NULL) ; Qui est identique à celle-ci : sigle CHAR(7) PRIMARY KEY, NbEtudiants INTEGER CHECK(NbEtudiants > 0 OR NbEtudiants IS NULL) ; Contrainte d intégrité de référence (REFERENCES) La contrainte d intégrité de référence est la contrainte de clé étrangère. Elle permet de préciser qu une colonne ou groupe de colonnes correspondent aux valeurs qui apparaissent dans les lignes d une autre table. Ce type de contrainte permet de maintenir une intégrité entre deux tables. Par exemple, dans l exemple de la table cours, pour préciser l enseignant qui dispense le cours, il faut introduire une colonne id_enseignant qui fait référence à la colonne id_personne de la table personne. Quand on supprime une ligne de la table personne, le SGBD doit vérifier qu aucune ligne de la table cours, par l intermédiaire de l attribut id_enseignant, n a la ligne qui doit être supprimée. Sinon (i.e. la ligne à supprimer se trouve dans la table cours), trois situations sont possibles : la suppression est interdite dans la table maître (personne) et dans la table courante (ici cours) où la contrainte d intégrité est définie comme suit : Id_enseignant INTEGER REFERENCES personne (id_personne) RESTRICT, sigle CHAR(7) PRIMARY KEY, NbEtudiants INTEGER CHECK(NbEtudiants > 0 OR NbEtudiants IS NULL) ; 4

la suppression se fait dans la table maitre (ici personne) ainsi que dans la table courante (cours) dans laquelle la contrainte d intégrité est comme suit : Id_enseignant INTEGER REFERENCES personne (id_personne) ON DELETE CASCADE, sigle CHAR(7) PRIMARY KEY, NbEtudiants INTEGER CHECK(NbEtudiants > 0 OR NbEtudiants IS NULL) ; La suppression se fait dans la table maitre (personne) mais dans la table courante (cours), la valeur NULL est affectée dans la colonne id_enseignant pour toutes les lignes qui vérifient l identifiant supprimé dans la table maitre. Id_enseignant INTEGER REFERENCES personne(id_personne) ON DELETE SET NULL, sigle CHAR(7) PRIMARY KEY, NbEtudiants INTEGER CHECK(NbEtudiants > 0 OR NbEtudiants IS NULL) ; Les déclencheurs (TRIGGERS) L utilisation de déclencheurs permet de matérialiser d autres contraintes d intégrité sous forme d une action déclenchée { la survenue d un événement. L'événement est généralement une action de mise à jour de la base. Nous reviendrons sur cette notion dans le dernier chapitre du cours. 2.2. Les contraintes d intégrité sur la table Les contraintes de tables portent sur plusieurs colonnes de la table. Ces contraintes ont la syntaxe suivante : [ CONSTRAINT <nom_contrainte> { PRIMARY KEY (<nom_col>[, <nom_col> ]) FOREIGN KEY <nom_col>[, <nom_col> ]) REFERENCES <nom_tablel> [ (<nom_col> ) ] [ ON DELETE {CASCADE SET NULL} ] CHECK (<condition>) } 5

CONSTRAINT Cette partie optionnelle permet de donner un nom à une contrainte de table. Si la contrainte est violée, le nom de la contraint est présent dans les messages d erreur. PRIMARY KEY Cette contrainte permet de spécifier une clé primaire composée de plusieurs attributs. FOREIGN KEY ( <nom_col> [, ]) REFRENCES <table-maitre> [ ( <nom_col_maitre> [, ]) ] [ ON DELETE {CASCADE SET NULL RESTRICT} ] Cette contrainte permet de définit un ensemble d attributs comme clés étrangères. Les clés de la table maitres doivent être définies comme PRIMARY KEY ou UNIQUE. CHECK (<condition>) Cette contrainte permet d exprimer une condition qui doit exister entre plusieurs attributs de la ligne. 2. SELECT 2.1. La syntaxe Nous voyons plus en détail la syntaxe de la commande SELECT dans cette section : SELECT [ALL DISTINCT] { * <expression>[, ] } FROM <liste des tables> [WHERE <condition>] [ORDER BY <expression> [ASC DESC] [, ]] - ALL: Permet de récupérer toutes les lignes vérifiant la condition du WHERE, même si les lignes comportent des doublons. C est le comportement du SELECT par défaut. - DISTINCT: Permet de récupérer les lignes vérifiant la condition sans les doublons. 6

- * : Permet de récupérer tous les champs des colonnes vérifiant la condition. - <expression> : L expression peut être : o un nom de colonne o le résultat d une sous-requête ne retournant qu une seule ligne est une seule colonne Ex : SELECT * FROM (SELECT DISTINCT id_etudiant, nom, prenom FROM personne, suivre WHERE personne.id_personne=suivre.id_etudiant) AS etudiant, cours WHERE etudiant.id_etudiant=cours.id_enseignant ; AS permet de renommer une table créée pour pouvoir ensuite u faire référence. Comme ici la table etudiant a été créée à partir de la sousrequête. Elle contient les colonnes id_etudiant, nom, prenom. o le résultat d une fonction, d une opération sur des expressions Ex : SELECT id_etudiant, id_cours, note/2 FROM suivre ; - <Liste des tables> : Indique l ensemble des tables (séparées par des, ) sur lesquelles opère la requête. - <condition>: La condition peut contenir AND, OR, NOT La comparaison peut se faire à : o Une valeur : Condition = {expr1 op expr2 expr IS NULL expr IS NOT NULL} Où les expressions peuvent contenir : attributs, +, -, *, / Et op peut être : =,!=, <, >, <=, >= o Une plage de valeurs : Condition = {expr[not] BETWEEN val1 AND val2} Ex: SELECT nom, prenom, age FROM passagers WHERE age BETWEEN 18 AND 30; o Une liste de valeurs : Condition = {expr [NOT] IN (liste de valeurs)} Ex : SELECT * FROM vols WHERE arrive IN ( Londres, Rome, Amsterdam ); o Une expression régulière (ou filtre) : Condition = {[colonne] [NOT]LIKE <modèle de chaîne>} 7

_ remplace un caractère % remplace une séquence de longueur quelconque Ex : SELECT * FROM companies_aeriennes WHERE pays LIKE F% ; SELECT * FROM passagers WHERE nom LIKE A%d% AND prenom LIKE J % AND adresse LIKE Rue M% ; ORDER BY <expression>: cette clause permet de trier les lignes du résultat. Ex : SELECT id_personne, nom, prenom FROM personne ORDER BY nom DESC, prenom DESC; Les personnes sont affichées par ordre décroissant de leur nom et de leur prénom. 2.2. Traduction des opérateurs de projection, sélection, produit cartésien et équi-jointure de l algèbre relationnelle La projection : (A1, A2,..,An) (relation) SELECT DISTINCT A1, A2, An FROM relation; Exemple : (modele, serie) (Voiture) SELECT DISTINCT modele, serie FROM Voiture; 8

Sélection : σ (prédicat) (relation) SELECT * FROM relation WHERE condition; σ (compteur <100000) (Voiture) SELECT * FROM Voiture WHERE (compteur <100000); Ou bien on sélectionne les voitures dont la marque a un e en deuxième position : SELECT * FROM Occaz WHERE Marque LIKE _e% Ou bien encore, on sélectionne les voitures dont la marque est Peugeot ou Ford : SELECT * FROM Occaz WHERE Marque IN ( Peugeot, Ford ) Produit cartésien : relation1 relation2 9

L3-Informatique Paris 8 Rim Chaabane rchaabane@ai.univ-paris8.fr - Séance 7 - SELECT * FROM relation1, relation2 Equi-jointure : relation1 (A1= A2) relation2 SELECT * FROM relation1, relation2 WHERE relation1.a1 = relation2.a2; SELECT * FROM relation1 JOIN relation2 ON relation1.a1 = relation2.a2; SELECT * FROM relation1 INNER JOIN relation2 ON relation1.a1 = relation2.a2; Toutes ces requêtes sont équivalentes. Jointure naturelle : relation1 (A1, A2) relation2 SELECT * FROM relation1 NATURAL JOIN relation2; SELECT * FROM relation1 NATURAL INNER JOIN relation2; SELECT * FROM relation1 JOIN relation2 USING (A1, A2); SELECT * FROM relation1 INNER JOIN relation2 USING (A1, A2); Toutes ces requêtes sont équivalentes. Jointure : relation1 (A1=val1, A2) relation2 SELECT * FROM passagers p, reservations r, vols v WHERE p.idp=r.idr AND r.idv = v.idv AND p.ville = Paris AND v.arrivee = Londres; Union : relation1 relation2 SELECT * FROM relation1 UNION SELECT * FROM relation2; Intersection : relation1 relation2 SELECT * FROM relation1 INTERSECT SELECT * FROM relation2; Différence : relation1 - relation2 SELECT * FROM relation1 EXCEPT SELECT * FROM relation2; 10