Introduction au langage SQL



Documents pareils
COMMANDES SQL... 2 COMMANDES DE DEFINITION DE DONNEES... 2

Langage SQL : créer et interroger une base

Le Langage SQL version Oracle

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

1. LA GESTION DES BASES DE DONNEES RELATIONNELLES

Le Langage De Description De Données(LDD)

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

SQL Historique

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

Bases de données relationnelles

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

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 et leurs systèmes de Gestion

Le langage SQL Rappels

Olivier Mondet

Chapitre 3 LE MODELE RELATIONNEL ET SQL (DDL)

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

Création et Gestion des tables

CREATION WEB DYNAMIQUE

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

TP3 : Creation de tables 1 seance

Historisation des données

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

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

1 Introduction et installation

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

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

I4 : Bases de Données

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

MySQL / SQL EXEMPLES

FileMaker 13. Guide de référence SQL

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

SQL sous SqlServer OLIVIER D. DEHECQ Olivier 0

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

Les BASES de DONNEES dans WampServer

Les bases de données

16H Cours / 18H TD / 20H TP

1. Base de données SQLite

MODE OPERATOIRE OPENOFFICE BASE

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

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

INTRODUCTION : Données structurées et accès simplifié

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

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

Devoir Data WareHouse

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

Introduction aux Bases de Données 2004/2005

Bases de données élémentaires Maude Manouvrier

I. MySQL : Serveur et SGBD

Mysql avec EasyPhp. 1 er mars 2006

OpenPaaS Le réseau social d'entreprise

A QUOI SERVENT LES BASES DE DONNÉES?

TP Contraintes - Triggers

1/ Présentation de SQL Server :

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

Bible MySQL! La première version de MySQL est apparue en Cette première version est créée pour un usage personnel à partir de msql.

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

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

Cours 4 : Agrégats et GROUP BY

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

Bases de données relationnelles & SQL

Compétences Business Objects

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

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

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

SQL Server ressource SOMMAIRE

Mysql. Les requêtes préparées Prepared statements

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

Objectifs du TP : Initiation à Access

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

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

LE LANGAGE SQL2 1. INTRODUCTION

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

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

Sybase Adaptive Server Enterprise 15

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

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

Structured Query Language

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

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

A QUOI SERVENT LES BASES DE DONNÉES?

Mejdi BLAGHGI & Anis ASSÈS

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

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

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

Vincent Augusto

Les bases de données Page 1 / 8

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

FORMATION A L UTILISATION DE PMB QUELQUES NOTIONS DE SQL

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object)

Présentation Windows Azure Hadoop Big Data - BI

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

Gestion des utilisateurs et de leurs droits

Sommaire. Etablir une connexion avec une base de données distante sur PostGreSQL

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

Optimisations des SGBDR. Étude de cas : MySQL

Transcription:

Introduction au langage SQL SQL (sigle de Structured Query Language, en français langage de requête structurée) est un langage informatique normalisé servant à effectuer des opérations sur des bases de données relationnelles. La partie langage de manipulation de données de SQL permet de rechercher, d'ajouter, de modifier ou de supprimer des données dans les bases de données relationnelles. En plus du langage de manipulation de données, la partie langage de définition de données permet de créer, et de modifier l'organisation des données dans la base de données, la partie langage de contrôle de transaction permet de commencer et de terminer des transactions, et la partie langage de contrôle de données permet d'autoriser ou d'interdire l'accès à certaines données à certaines personnes. Créé en 1974, normalisé depuis 1986, le langage est reconnu par la grande majorité des systèmes de gestion de bases de données relationnelle (abrégé SGBDR) du marché. En 1979, Relational Software, Inc. (actuellement Oracle Corporation) présenta la première version commercialement disponible de SQL, rapidement imité par d'autres fournisseurs. SQL a été adopté comme recommandation par l'institut de normalisation américaine (ANSI) en 1986, puis comme norme internationale par l'iso en 1987 sous le nom de ISO/CEI 9075 - Technologies de l'information - Langages de base de données - SQL. Bases du langage Quelques rappels de vocabulaire o base de données, table, champ (ou colonne), enregistrement (ou ligne) o structure ou schéma relationnel d'une base o clé primaire : un ou plusieurs champ déterminent complètement les valeurs des autres champs de la table o clé etrangere : il s'agit d'un champ d'une table qui joue le rôle de clé primaire dans une autre table de la base Types de données et création d'une table o numériques entiers : INTEGER (entiers sur 4 octets.), SMALLINT (2 octets), BIGINT (8), o décimaux exacts : NUMERIC, DECIMAL (p,q): décimaux sur p chiffres dont q forment la partie décimale. o FLOAT(p,q). o CHAR(n), VARCHAR(n) : chaine de caractères de longueur fixée ou variable (n<=255). Comme il n'y a pas de type logique, on le simule par un CHAR(1) avec 2 valeurs o DATE : date au format par défaut aaaaa-mm-jj (la fonction DATE_FORMAT permet des conversions) o TIME: heure au format hh:mm:ss 1

o o TIMESTAMP : date et heure sous forme du nb de secondes écoulées depuis le 1/1/1970 (date de création du monde selon UNIX ;-). Lors d'une insertion ou mise à jour d un champ TIMESTAMP se met à jour à la date courante TEXT : texte de longueur qcq Il est recommandé de placer sur les valeurs des champs les contraintes NOT NULL au moment de la création (donc éviter la valeur NULL ou absence de valeur qui ne permet pas les comparaisons), ou de placer des valeurs par défaut avec DEFAULT valeur ('' ou 0). Bien sûr chaque table doit posséder une clé primaire simple ou composée, introduite par le mot-clé PRIMARY KEY. Un exemple, à commenter : CREATE TABLE b2i ( rne varchar(8) NOT NULL default '', annee varchar(9) NOT NULL default '', niv1 smallint(6) NOT NULL default '0', niv2 smallint(6) NOT NULL default '0', amelioration char(1) NOT NULL default 'N', observation text, PRIMARY KEY (rne,annee) ) Opérateurs logiques Ils permettent de construire des expressions logiques, donnant des valeurs logiques vrai ou faux. Divers cas : o AND, OR, NOT : ils portent sur les conditions simples pour donner une condition composée : o dans une condition simple exprimée sur des champs : o comparaison de valeurs =, <, >, o valeurs situées entre BETWEEN...AND... o ou appartenant (ou non) à un ensemble IN, NOT IN o semblable à LIKE o existence EXISTS Règle générale d'écriture des commandes Toute commande SQL commence par un mot-clé qui désigne l'opération à exécuter. On précise ensuite sur quelles données cette opération doit s'exercer. Elle doit obligatoirement se terminer par ; Exemple d'interrogation simple SELECT numarticle, libellé, quantité // projection sur les colonnes indiquées, FROM inventaire // de la table inventaire de la base de données courante, WHERE Ville= "Paris" // sélection des lignes où le champ Ville a la valeur "Paris" ORDER BY quantite; // ordonné suivant les valeurs croissantes du champ quantité 2

Syntaxe générale de la commande d'interrogation SELECT SELECT [DISTINCT] liste_champs * // projection FROM liste_tables // table [ WHERE condition // condition simple ou composée portant sur les attributs [AND OR...] ] // sur une table (sélection) ou 2 (jointure) [GROUP BY champ] // décrit le regroupement des lignes [HAVING champ] // critères de sélection portant sur les groupes [ORDER BY liste_champs]; // précise le tri (multi-critère) o o liste désigne une énumération dont le séparateur est la virgule l'ordre des clauses est impérative, la plupart sont facultatives Syntaxe générale de la commande d'interrogation INSERT La syntaxe de base de l'ordre SQL d'insertion de données dans une table est la suivante : INSERT [INTO] nom_de_la_table_cible [(liste_des_colonnes_visées)] {VALUES (liste_des_valeurs) requête_select DEFAULT VALUES } la liste des colonnes visées peut être omise à condition que l'ordre d'insertion concerne toutes les colonnes de la table. Ex : INSERT INTO T_MODE_PAIEMENT VALUES ('CB', 'Carte bancaire') ; INSERT T_TITRE (TIT_CODE, TIT_LIBELLE) VALUES ('M.', 'Monsieur', 'Mlle.', 'Mademoiselle' 'Mme.', 'Madame') ; INSERT INTO T_CLIENT (CLI_ID, TIT_CODE, CLI_NOM, CLI_PRENOM) SELECT PRP_ID, PRP_CODE_TITRE, PRP_NOM, PRP_PRENOM FROM T_PROSPECT ; Syntaxe générale de la commande d'interrogation DELETE La syntaxe de base de l'ordre SQL de suppression de données dans une table est la suivante : DELETE [FROM] nom_table_cible [WHERE condition] Ex : DELETE FROM T_PROSPECT ; Cette requête supprime tous les prospects. 3

DELETE FROM T_PROSPECT WHERE PRP_PRENOM LIKE '%d' Cette requête supprime tous les prospects dont le nom se termine par la lettre 'd'. Syntaxe générale de la commande d'interrogation UPDATE La syntaxe de base de l'ordre SQL de modification de données dans une table est la suivante : Ex : UPDATE nom_table_cible SET colonne = valeur [, colonne2 = valeur2...] [WHERE condition] UPDATE T_TARIF SET TRF_PETIT_DEJEUNE = 8 ; Utilisation de quelques fonctions Mysql Les fonctions permettent en général d'agir sur les valeurs extraites par l'exécution d'une commande. Noter aussi qu'on peut introduire des chaines constantes. SELECT 225*25 ; SELECT version(), now(), curdate() as date, curtime() as heure ; SELECT DATE_FORMAT(now(),'%d/%m/%Y') AS date ; SELECT concat('voici la date d\'aujourd\'hui :', DATE_FORMAT(now(),'%d/%m/%Y')) AS date ; SELECT DATE_ADD(now(), INTERVAL -1 DAY); autre période second, minute,hour,month,year SELECT substring('chaine', 1, 2) ; autres fonctions LENGTH SELECT if(12 > 10, '12 est plus grand', '12 est plus petit'); Il peut etre utile de regrouper plusieurs informations et même plusieurs champs. Par exemple sur la base établissements SELECT * FROM etablissements WHERE left(codepostal,2)='94' ORDER BY Ville; SELECT concat(nom,' ', type,' ',ville) FROM etablissements ORDER BY nom; 4

Exemple de requêtes 1. Voici la structure de la base CDI documents (id_document,titre, auteur, genre, editeur, disponible) inscrits (id_inscrit, nom, prenom, classe) prets (id_pret, id_inscrit #, id_document #, date_pret, date_retour, retour) demandes (id_demande, id_inscrit #, id_document #) 2. Interrogations simples sur une table SELECT * FROM inscrits ; SELECT count(*) FROM inscrits ; SELECT count(*) AS nb FROM inscrits WHERE classe = '6a' ; autres fonctions AVG (moyenne), MIN, MAX, SUM " Quelle est la moyenne des valeurs d'un champ note dans une table carnet_notes? " SELECT AVG(note) as moyenne from carnet_notes ; " Combien de documents disponibles sur leur total?" SELECT SUM(disponible) disponible, count(*) nombre FROM documents ; SELECT auteur FROM documents ; SELECT DISTINCT auteur FROM documents ; SELECT titre, auteur FROM documents LIMIT 0,10 ; SELECT titre, auteur FROM documents ORDER BY auteur ; SELECT prenom, nom, classe FROM inscrits ORDER BY nom DESC LIMIT 0,10 ; SELECT prenom, nom, classe FROM inscrits ORDER BY classe, nom, prenom ; SELECT * FROM documents WHERE BINARY titre='ivanohé' "; 3. Requêtes avec condition simple Une condition simple est construite avec les opérateurs de comparaison usuels < > =!= portant sur des valeurs de champs. On dispose de quelques opérateurs spécifiques : LIKE et NOT LIKE SELECT nom, prenom, classe FROM inscrits WHERE nom >= 'x' ; SELECT DISTINCT titre, auteur FROM documents WHERE titre LIKE '%mis%' ; SELECT titre, auteur FROM documents WHERE titre LIKE '% mis%' ; SELECT auteur, titre FROM inscrits WHERE classe = '6a' ; SELECT titre, auteur FROM documents WHERE titre LIKE '%mis%' ; SELECT titre, auteur FROM documents WHERE titre LIKE '% mis%' ; SELECT titre, auteur FROM documents WHERE titre LIKE '%mis%' AND auteur NOT LIKE '%hugo%' ; 4. Requêtes avec condition composée 5

AND, OR, NOT portant sur les conditions simples (attention, AND étant prioritaire sur OR, il peut être nécessaire de parenthéser) SELECT nom,prenom,classe FROM inscrits WHERE (nom >='v' OR nom <'c') AND classe='6a' ; SELECT titre, auteur FROM inscrits WHERE nom BETWEEN 'h' AND 'm' ; Les opérateurs d'appartenance à une liste discrète ou à un intervalle "continu" permettent d'abréger les conditions composées : [NOT] IN (liste_valeurs) et BETWEEN valeur1 AND valeur2. SELECT nom,prenom,classe FROM inscrits WHERE classe IN ('6A','6c','6f'); 5. Approche notion de regroupement "Quels sont les effectifs par classe des inscrits?" La fonction de comptage count() dans ce contexte s'applique à chaque ensemble résultant de la partition suivant la valeur du champ classe SELECT classe, count(*) as nombre FROM inscrits GROUP BY classe ; "Quelles sont les classes dont l'effectif est limité à 24 élèves?" Une condition portant sur les enregistrements regroupés s'exprime avec la clause HAVING (et non WHERE) SELECT classe, count(*) as nombre FROM inscrits GROUP BY classe HAVING nombre <= 24; 6. Jointures simples SELECT count(*) FROM inscrits, documents ; SELECT count(*) as nb, 225*25 FROM inscrits, documents WHERE classe='6a'; "Quels sont les documents actuellement empruntés? ("actuellement" : tester le champ prets.retour=0)" SELECT d.id_document, titre, auteur, editeur FROM prets p, documents d WHERE d.id_document = p.id_document AND retour=0 ; " Quels sont les documents empruntés par les élèves de la 6A? " SELECT prenom, nom, classe, auteur, titre FROM inscrits, prets, documents WHERE classe = '6a' AND inscrits.id_inscrit = prets.id_inscrit AND documents.id_document = prets.id_document ; 7. Sous-requêtes On peut alors copier des enregistrements de documents satisfaisant à une requete (le titre commence par "les"), dans la nouvelle table doc INSERT INTO doc SELECT * FROM documents WHERE titre LIKE 'les%' ; 6

8. Requetes avec expressions régulières Le langage des expressions régulières est compris par Mysql. On place le motif dans une clause WHERE après le mot-clé REGEX. Exemples à tester et à commenter : SELECT * FROM documents WHERE titre REGEXP '^l.*[rt]$' ; SELECT * FROM documents WHERE titre REGEXP '^a.{5}r' ; SELECT * FROM documents WHERE titre REGEXP ' et ' ; SELECT * FROM documents WHERE titre REGEXP 'vie bon' ; SELECT * FROM documents WHERE titre REGEXP '[[:digit:]]+' ; SELECT * FROM documents WHERE titre REGEXP '[a-z]{5}' ; 7

TP SQL 1. A partir du script sql SchemaFilms.sql, vous devez créer le schéma de base de données dans une base de données Films sous Mysql. Ensuite vous insérez les données dans cette base à partir du script BaseFilms.sql. Vous pouvez remarquer que l ordre de création des tables respecte le référencement entre PRIMARY KEY et FOREIGN KEY. Les tables qui sont référencées par cette dernière clause doivent être créées avant celles qui les référencent. Par exemple la table Artiste est créée avant la table Film à cause de la clé étrangère idmes. C est en revanche l ordre inverse qui est suivi pour les commandes DROP : on ne peut pas détruire une table qui est référencée par une commande FOREIGN KEY. Notez qu en principe on ne place pas les commandes DROP dans un script de création puisqu on ne souhaite pas prendre le risque de détruire des données existantes. Comme il s agit ici d une base de test, la situation est différente. La base contient un échantillon de films avec leur metteur en scène, leurs acteurs et les notations de quelques internautes. À vous de jouer : il faut concevoir, saisir et exécuter les ordres SQL correspondant aux requêtes qui suivent. 1.1 Sélections simples 1. Tous les titres de films. 2. Nom et prénom des internautes auvergnats. 3. Titre et année de tous les drames, triés par année ascendante. Donnez ensuite le tri par année descendante. 4. Nom et année de naissance des artistes nés avant 1950. 5. Titre et année de tous les films parus entre 1960 et 1980 6. Tous les genres de films (éliminez les doublons). 7. Titre, genre et résumé des films qui sont soit des drames, soit des westerns (utilisez la construction IN), et dont le résumé contient la chaîne de caractères «vie». 8. Les artistes dont le nom commence par H (commande LIKE). 1.2 Jointures 1. Qui joué le rôle de Morpheus (nom et prénom)? 2. Qui est le réalisateur de Alien? 3. Prénom et nom des internautes qui ont donné une note de 4 à un film (donner aussi le titre du film). 4. Quels acteurs ont joué quel rôle dans le film Vertigo? 5. Films dont le réalisateur est Tim Burton, et un des acteurs est Johnny Depp. 6. Titre des films dans lesquels a joué Bruce Willis. Donner aussi le nom du rôle. 7. Quel metteur en scène a tourné dans ses propres films? Donner le nom, le rôle et le titre des films. 8. Quel metteur en scène a tourné en tant qu acteur (mais pas dans son propre film)? Donner le nom,le rôle et le titre des films où le metteur en scène a joué. 9. Dans quels films le metteur en scène a t il le même prénom que l un des interprètes? (titre, nom 8

du metteur en scène, nom de l interprète). Le metteur en scène et l interprète ne doivent pas être la même personne. 1.3 Requêtes imbriquées Les requêtes suivantes peuvent s exprimer avec une imbrication des clauses SELECT. 1. Donnez les nom et prénom des artistes qui on mis en scène un film. 2. Donnez le titre et année des films qui ont le même genre que Matrix. 3. Donnez le nom des internautes qui ont noté le film Alien. Donnez également la note. 1.4 Négation 1. Les films sans rôle. 2. Nom et prénom des acteurs qui n ont jamais mis en scène de film. 3. Les internautes qui n ont pas noté de film paru en 1999. 1.5 Fonctions de groupe 1. Quelle est le nombre de films notés par l internaute rigaux@cnam.fr, quelle est la moyenne des notes données, la note minimale et la note maximale? 2. Combien de fois Bruce Willis a t il joué le role de McClane? 3. Année du film le plus ancien et du film le plus récent. 4. id, Nom et prénom des réalisateurs, et nombre de films qu ils ont tournés. 9