Initiation à SQL Le langage de communication avec une base de données relationnelles Application avec PostgreSQL Nathalie Camelin – 2011/2012 Université du Maine Institut Claude Chappe D'après Levy Estève Plew&Stephens Audibert Des données aux SGBD-R ● ● Qu'est-ce qu'une donnée ? – « Dans les technologies de l'information (TI), une donnée est une description élémentaire, souvent codée, d'une chose, d'une transaction d'affaire, d'un événement, etc. » Wikipédia – « Représentation d'une information sous une forme conventionnelle destinée à faciliter son traitement. » Médiadico Une Base de Données (BD) est une collection de données – mécanisme organisé de stockage – ex : l'annuaire téléphonique Introduction à SQL - N.Camelin 2 Des données aux SGBD-R ● Modèle relationnel – 1970 : Edgar F. Codd, mathématicien chez IBM ● A Relational Model of Data for Large Shared Data Banks ● Pourquoi ? – – ● accès performant à de grandes quantités de données réponse aux problèmes de redondance ou d'intégrité des données Une Base de Données Relationnelles (BD-R) – suit les principes de l'algèbre relationnel (Codd) – données stockées dans des unités logiques, les tables – relations entre tables Introduction à SQL - N.Camelin 3 Des données aux SGBD-R ● Le Système de Gestion de Bases de Données (SGBD) – gestion et accès à la BD : ajout, modification et recherche – quelques objectifs : ● non redondance des données ● cohérence des données ● partage des données ● sécurité des données Introduction à SQL - N.Camelin 4 Et SQL dans tout ça? ● SQL : Structured Query Language un langage de requêtes pour communiquer avec une BDR – ● De nombreuses fonctionnalités ! – Gestion, insertion, suppression, modification de données – Opérations arithmétiques et de comparaison – Affichage des données – Affectation – Fonctions d'aggrégations Introduction à SQL - N.Camelin 5 Bref historique du SQL ● À la suite des travaux de Codd ... – 1974 : Lancement du projet System/R chez IBM ● ● Basé sur les travaux de Chamberlin et Boyce 1er prototype nommé SEQUEL – – Structured English Query Language 1976 : Nouvelle implémentation SEQUEL/2 ● Fonctionnalités multi-utilisateurs et multi-tables ● renommé SQL Introduction à SQL - N.Camelin 6 Implémentation du langage SQL ● Différentes implémentations – 1978 : Tests concluants chez des clients pour IBM ● – – Utilité et faisabilité IBM : Développement de produits commerciaux basé sur le prototype System/R ● 1981 : SQL/DS ● 1983 : BD2 1979 : Oracle, première version commerciale par Software Development Laboratories Introduction à SQL - N.Camelin 7 Quelques SGBD connus et utilisés ● Voici une liste non-exhaustive : – PostgreSQL http ://www.postgresql.org/ – MySQL http ://www.mysql.org/ – Oracle http ://www.oracle.com/ – IBM DB2 – Microsoft SQL – Informix – ... http://www-306.ibm.com/software/data/db2/ http ://www.microsoft.com/sql/ http://www-306.ibm.com/software/data/informix/ Introduction à SQL - N.Camelin 8 La norme SQL – 1986 : Approbation ANSI de l'implémentation IBM – 1987 : Norme ISO – 1989 : Norme ISO avec révision mineure → SQL/89 ou SQL1 – 1992 : Norme ISO avec révision majeure → SQL/92 ou SQL2 ● – 1999 : Norme ISO → SQL/99 ou SQL3 ● ● – Intégration de parties plus avancées (SGBDRO, interface de programmation, gestion d'intégrité des données...) 2 niveaux de conformité 2003 : ISO → SQL:2003, manipulations XML ● – 3 niveaux de conformité Mises à jour en 2006 2008 : dernière norme ISO en date, SQL:2008 ?? Introduction à SQL - N.Camelin 9 PostgreSQL ● ● Des atouts majeurs – Projet de SGBD-R non commercial le plus avancé – Projet Open Source toujours en développement – Existence de distributions commerciales (support tech.) Historique – 1977 : Projet Ingres débuté par l’Université de Berkeley ● – 1986 : Nouvelle équipe de l'Université de Berkeley ● – Relation Technologies/Ingres Corporation Ingres → Postgres 1996 : Ajout de nouvelles fonctionnalités par la communauté du logiciel libre ● Postgres → PostgreSQL Introduction à SQL - N.Camelin 10 PostgreSQL et la norme SQL ? ● Version installée à l'institut Claude Chappe – Côté serveur : 8.3.7 ● – ● Documentation : http://docs.postgresql.fr/8.3/ Côté clients : psql (PostgreSQL) 8.4.X et 9.0.X Conformité avec la norme SQL – standard SQL : ISO/IEC 9075 « Database Language SQL » – http://docs.postgresql.fr/8.3/features.html – Un extrait : PostgreSQL supporte la plupart des fonctionnalités majeures de SQL:2003. Sur les 164 fonctionnalités requises pour une conformité « centrale » complète (full Core conformance), PostgreSQL se conforme à plus de 150. De plus, il existe une longue liste de fonctionnalités optionnelles supportées. À la date de rédaction de ce document, aucune version de quelque système de gestion de bases de données que ce soit n'affiche une totale conformité à SQL:2003 « centrale » Introduction à SQL - N.Camelin 11 Ce que n'est pas SQL ● Un langage procédural, de type C ? – ● Coder comment obtenir ce que l'on veut? – ● Non, c'est un langage déclaratif Non, on dit simplement ce que l'on veut C'est le SGBDR qui définit comment obtenir de façon optimale ce qui lui est demandé Introduction à SQL - N.Camelin 12 Concepts de base ● ● ● table : structure de données formée de colonnes et de lignes champ : – plus petit élément d'information (insécable) – intersection d'une colonne et d'une ligne enregistrement : collection de champs dont l'unité repose sur une ou plusieurs relations → ligne ● les clés : – – clé primaire : identifiant unique d'un enregistrement dans une table clé étrangère : attribut correspondant à la clé primaire d'une autre table Introduction à SQL - N.Camelin 13 Concepts de base clé primaire Base de données id_emp nom prenom ville 1 smith joe Los Angeles 2 allen mickael New York 3 ward bob New York 4 jones brad Los Angeles 5 martin tom San Franscico id_job job M1 S1 P paie manager salesman president colonne enregistrement (ligne) champ (cellule) id_emp 45k€ 26k€ 100k€ 5 3 2 tables clé étrangère Introduction à SQL - N.Camelin 14 Concepts de base ● ● ● identifiant : autre nom du concept de clé mot-clé : terme réservé de sql (commande, clause, opérateur, …) – longueur max 31 caractères (lettres, chiffres ou _ ) – débute par une lettre identificateur : – nom d'objets définis en interne (table, fonction, …) longueur max 31 caractères (lettres, chiffres ou _ ) – débute par une lettre ou _ Introduction à SQL - N.Camelin 15 Concepts de base (étendus...) ● contrainte : mécanisme de contrôle de validité des contraintes interdisant l'insertion de données violant les contraintes ● index : construction physique d'une structure de données sur une ou plusieurs colonnes d'une table → Accélère la recherche d'information → Construction pour chaque clés primaire et étrangères d'une table ● vue : table virtuelle, non stockée physiquement ● trigger : ensemble d'instructions sql permettant d'assurer l'intégrité des données Introduction à SQL - N.Camelin 16 Contraintes d'intégrité Assurer précision et logique des données de BDR Préciser généralement à la création d'une table Quelques exemples : • PRIMARY KEY – un ou plusieurs champs – unicité de la clé → unicité de l'enregistrement • UNIQUE – valeur d'un champ unique pour chaque enregistrement • NOT NULL – obligation de saisir une valeur dans le champ à chaque nouvel enregistrement Introduction à SQL - N.Camelin 17 SQL : un langage fortement typé ● Une donnée ↔ Un type ● Un type → Un ensemble d'opérations applicables ● Type : contrainte définit lors de la création de la table – ● !! important, y penser dès la modélisation !! Plus d'une 30aine de types définis dans PosgreSQL – Certains basés sur une norme ISO – D'autres non standards ● !! compatibilité avec d'autres SGBDR ... Introduction à SQL - N.Camelin 18 Types de données chaînes de caractères : • longueur fixe : CHARACTER(n), CHAR(n) • longueur variable avec limite: CHARACTER VARYING(n), VARCHAR(n), • sans limite : TEXT chaînes numériques : • entier : SMALLINT, INTEGER, BIGINT • flottant non précis: REAL, DOUBLE PRECISION • flottant précis : NUMERIC autres : • booléen : BOOLEAN Introduction à SQL - N.Camelin • valeurs de dates et heures : TIMESTAMP[(p)], DATE[(p)] • et encore : types géométriques (coordonnées), tableaux, ... 19 Types de données ● Booléens et binaires Type Description Norme boolean, bool Valeur unique : true ou false (différents libellés) SQL99 bit(n) Chaîne de bits de longueur n SQL92 bit varying(n), varbit(n) chaîne de bits de longueur n variable (n=taille max) SQL92 Introduction à SQL - N.Camelin 20 Types de données ● Caractères Type Description Norme character(n), char(n) Chaîne de caractères de longueur n SQL89 character varying(n), varchar(n) text Chaîne de caractères de longueur max n variable SQL92 Chaîne de caractères de longueur variable et illimitée Spécificité PostgreSQL Introduction à SQL - N.Camelin 21 Types de données ● Numériques entiers Description Norme smallint, int2 Entier sur 2 octets SQL89 integer, int, int4 Entier sur 4 octets SQL92 bigint, int8 Entier sur 8 octets (jusqu’à 18 Spécif. chiffres) P_SQL Type Introduction à SQL - N.Camelin 22 Types de données ● Numériques réels Description Norme real, float4 Flottant sur 4 octets SQL89 double precision, float8, float numeric(p,s), decimal(p,s) Flottant sur 8 octets SQL89 Type numérique exact avec précision p quelconque et facteur d’échelle s Spécif. P_SQL Type Introduction à SQL - N.Camelin 23 Types de données ● Date et heure Type Description Norme date Date du calendrier (différents formats possibles) SQL92 time Heure SQL92 time with time zone Heure avec informations sur la zone horaire SQL92 interval Délai quelconque SQL92 Introduction à SQL - N.Camelin 24 Types de données ● Autres types spécifiques à PosgreSQL – Numériques ● – Géométriques ● – box, line, lseq, circle, path, point, polygon Pour le réseau ● – money et serial cidr (Adresse/masque IP), inet (Adresse IP), macadr (Adresse MAC) Et bien d'autres encore ... Introduction à SQL - N.Camelin 25 Le type NULL ● NULL correspond à : – ● Affectation : – Tout champ indépendamment de son type ● !! sauf contrainte NOT NULL ● Référencement : ● NULL n'est pas – – – ● méta-valeur représentant une absence de valeur le mot clé NULL la valeur booléenne false La chaîne de caractères vide '' attention : 'NULL' n'est pas NULL Valeur par défaut d'un champ (si autorisé!) Introduction à SQL - N.Camelin 26 Instruction SQL ● Base de la communication avec le serveur PosgreSQL ● Du code facile à lire ● Syntaxe : – Commence par une commande → définition de l'action – Contient des clauses → modificateurs formels précisant la fonction – Finit par un ; Introduction à SQL - N.Camelin 27 5 catégories de commandes ● DDL - Data Definition Language – ● DML - Data Manipulation Language – ● gestion des droits d'accès aux données DCL - Data Control Language – ● manipulation des données : insertion, suppression, modification, extraction, ... DQL - Data Query Language – ● définition des éléments de la base de données : tables, champs, clés,... gestion des transactions SQL intégré Introduction à SQL - N.Camelin 28 Commandes DDL principalement, manipulation des tables : • créer (CREATE TABLE) • modifier (ALTER TABLE) • supprimer (DROP TABLE) l'instruction CREATE TABLE • questions préalables lors de la modélisation: – quels types de données va contenir la table? – nom de la table ? noms des champs? – quel type de données est assignée à chaque colonne? Introduction à SQL - N.Camelin 29 Exemple de création de table CREATE TABLE emp ( empno integer name varchar(10) job varchar(10) mgr integer, hiredate date, sal numeric(7,2), comm numeric(7,2), deptno integer ); PRIMARY KEY, NOT NULL, NOT NULL, NOT NULL Introduction à SQL - N.Camelin 30 Commandes DML Langage de manipulation des données, 3 commandes de bases: • INSERT : insertion de nouvelles données dans une table • UPDATE : mise à jour des données • DELETE : suppression d'enregistrements Exemples d'insertion d'enregistrements • tous les champs sont renseignés: INSERT INTO emp VALUES (7499,'ALLEN','SALESMAN',7698,'20-FEB-81',1600,300,30); • déclaration explicite des champs : INSERT INTO emp (empno, name, job,mgr,hiredate,sal,deptno) VALUES (7369,'SMITH','CLERK',7902,'17-DEC-80',800,null,20); Introduction à SQL - N.Camelin 31 Commandes DML La commande SELECT ● – consultation de la base de données – associé à des mots clés et des clauses pour trouver et visualiser quasiment toutes les informations possibles – instruction la plus puissante et la plus complexe! Pour l'instant : les requêtes « simples » – rappel des notions : projection et sélection – filtrage simple des données – les opérateurs – quelques fonctions Introduction à SQL - N.Camelin 32 Exemple : la table des employés SELECT * FROM emp; empno name 7369 SMITH 7499 ALLEN 7521 WARD 7566 JONES 7654 MARTIN 7698 BLAKE 7782 CLARK 7788 SCOTT 7839 KING 7844 TURNER 7876 ADAMS 7900 JAMES 7902 FORD 7934 MILLER job CLERK SALESMAN SALESMAN MANAGER SALESMAN MANAGER MANAGER ANALYST PRESIDENT SALESMAN CLERK CLERK ANALYST CLERK mgr hiredate sal comm deptno 7902 1980-12-17 800 20 7698 1981-02-20 1600 300 30 7698 1981-02-22 1250 500 30 7839 1981-04-02 2975 20 7698 1981-09-28 1250 1400 30 7839 1981-05-01 2850 30 7839 1981-06-09 2451 10 7566 1982-12-09 3000 20 1981-11-17 5000 10 7698 1981-09-08 1500 0 30 7788 1983-01-12 1100 20 7698 1981-12-03 950 30 7566 1981-12-03 3000 20 7782 1982-01-23 13000 10 Introduction à SQL - N.Camelin 33 La commande Select ● Projection : clause SELECT – Rappel : En algèbre relationnelle, la projection élimine des attributs d'une relation – Syntaxe : SELECT att1, att2, ... attN FROM nom_table ; ● Sélection : clause WHERE – Rappel : En algèbre relationnelle, la sélection sur la condition C permet de garder les n-uplets qui satisfont C. – Syntaxe : SELECT * FROM nom_table WHERE condition ; Introduction à SQL - N.Camelin 34 Exemple d'une projection SELECT name, hiredate, sal FROM emp; empno name job mgr hiredate sal comm deptno 7369 SMITH CLERK 7902 1980-12-17 800 7499 ALLEN SALESMAN 7698 1981-02-20 1600 300 7521 WARD SALESMAN 7698 1981-02-22 1250 500 7566 JONES MANAGER 7839 1981-04-02 2975 7654 MARTIN SALESMAN 7698 1981-09-28 1250 1400 7698 BLAKE MANAGER 7839 1981-05-01 2850 7782 CLARK MANAGER 7839 1981-06-09 2450 7788 SCOTT ANALYST 7566 1982-12-09 3000 7839 KING PRESIDENT 1981-11-17 5000 7844 TURNER SALESMAN 7698 1981-09-08 1500 0 7876 ADAMS CLERK 7788 1983-01-12 1100 7900 JAMES CLERK 7698 1981-12-03 950 7902 FORD ANALYST 7566 1981-12-03 3000 7934 MILLER CLERK 1300 Introduction7782 à SQL - 1982-01-23 N.Camelin 20 30 30 20 30 30 10 20 10 30 20 30 20 10 35 Exemple d'une projection SELECT name, hiredate, sal FROM emp; name hiredate sal SMITH 1980-12-17 800 ALLEN 1981-02-20 1600 WARD 1981-02-22 1250 JONES 1981-04-02 2975 MARTIN 1981-09-28 1250 BLAKE 1981-05-01 2850 CLARK 1981-06-09 2450 SCOTT 1982-12-09 3000 KING 1981-11-17 5000 TURNER 1981-09-08 1500 ADAMS 1983-01-12 1100 JAMES 1981-12-03 950 FORD 1981-12-03 3000 MILLER 1982-01-23 1300 Introduction à SQL - N.Camelin 36 Exemple d'une sélection SELECT * FROM emp where sal>=1500; empno name job mgr hiredate sal comm deptno 7369 SMITH CLERK 7902 1980-12-17 800 7499 ALLEN SALESMAN 7698 1981-02-20 1600 300 7521 WARD SALESMAN 7698 1981-02-22 1250 500 7566 JONES MANAGER 7839 1981-04-02 2975 7654 MARTIN SALESMAN 7698 1981-09-28 1250 1400 7698 BLAKE MANAGER 7839 1981-05-01 2850 7782 CLARK MANAGER 7839 1981-06-09 2450 7788 SCOTT ANALYST 7566 1982-12-09 3000 7839 KING PRESIDENT 1981-11-17 5000 7844 TURNER SALESMAN 7698 1981-09-08 1500 0 7876 ADAMS CLERK 7788 1983-01-12 1100 7900 JAMES CLERK 7698 1981-12-03 950 7902 FORD ANALYST 7566 1981-12-03 3000 7934 MILLER CLERK 7782 1982-01-23 1300 Introduction à SQL - N.Camelin 20 30 30 20 30 30 10 20 10 30 20 30 20 10 37 Exemple d'une sélection SELECT * FROM emp where sal>=1500; empno name job mgr hiredate sal comm deptno 7499 ALLEN SALESMAN 7698 1981-02-20 1600 7566 JONES MANAGER 7839 1981-04-02 2975 7698 BLAKE MANAGER 7839 1981-05-01 2850 7782 CLARK MANAGER 7839 1981-06-09 2450 7788 SCOTT ANALYST 7566 1982-12-09 3000 7839 KING PRESIDENT 1981-11-17 5000 7844 TURNER SALESMAN 7698 1981-09-08 1500 7902 FORD ANALYST 7566 1981-12-03 3000 Introduction à SQL - N.Camelin 300 0 30 20 30 10 20 10 30 20 38 Exemple de projection ET sélection SELECT name, hiredate, sal FROM emp WHERE sal>=1500 ; empno name job mgr hiredate sal comm deptno 7369 SMITH CLERK 7902 1980-12-17 800 7499 ALLEN SALESMAN 7698 1981-02-20 1600 300 7521 WARD SALESMAN 7698 1981-02-22 1250 500 7566 JONES MANAGER 7839 1981-04-02 2975 7654 MARTIN SALESMAN 7698 1981-09-28 1250 1400 7698 BLAKE MANAGER 7839 1981-05-01 2850 7782 CLARK MANAGER 7839 1981-06-09 2450 7788 SCOTT ANALYST 7566 1982-12-09 3000 7839 KING PRESIDENT 1981-11-17 5000 7844 TURNER SALESMAN 7698 1981-09-08 1500 0 7876 ADAMS CLERK 7788 1983-01-12 1100 7900 JAMES CLERK 7698 1981-12-03 950 7902 FORD ANALYST 7566 1981-12-03 3000 7934 MILLER CLERK 7782 1300 Introduction à SQL1982-01-23 - N.Camelin 20 30 30 20 30 30 10 20 10 30 20 30 20 10 39 Exemple de projection ET sélection SELECT name, hiredate, sal FROM emp WHERE sal>=1500 ; name hiredate sal ALLEN JONES BLAKE CLARK SCOTT KING TURNER FORD 1981-02-20 1981-04-02 1981-05-01 1981-06-09 1982-12-09 1981-11-17 1981-09-08 1981-12-03 1600 2975 2850 2450 3000 5000 1500 3000 Introduction à SQL - N.Camelin 40 La clause SELECT et ses opérateurs * : tous les champs de la table ALL : retourne toutes les lignes (par défaut) DISTINCT : suppression des doublons +, -, *, / : opérations mathématiques de base || : concaténation de champs de type caractères AS : nommer une colonne calculée Introduction à SQL - N.Camelin 41 Les mots clés DISTINCT et AS SELECT empno || '_' || name AS id_nom FROM emp where job = 'ANALYST'; SELECT sal+comm FROM emp ; ? column ? id_nom 7788_SCOTT 7902_FORD 1900 1750 2650 SELECT DISTINCT job FROM emp ; job ANALYST CLERC MANAGER PRESIDENT SALESMAN 1500 Introduction à SQL - N.Camelin 42 Clause WHERE « simple » poser une condition sur les lignes syntaxe : WHERE expression1 OPERATEUR expression2 Les opérateurs logiques • comparaison : 6 opérateurs : =, <>, <, >, <=, >= • étendue : BETWEEN valeur1 AND valeur2 • appartenance : IN (ensemble_valeurs) • correspondance à un modèle : LIKE modele • IS NULL Introduction à SQL - N.Camelin 43 Exemple de clause WHERE - étendue Qui a été embauché de août 1981 à août 1982? SELECT * FROM emp WHERE hiredate BETWEEN '1981-08-01' AND '1982-08-01' ; empno name 7369 SMITH 7499 ALLEN 7521 WARD 7566 JONES 7654 MARTIN 7698 BLAKE 7782 CLARK 7788 SCOTT 7839 KING 7844 TURNER 7876 ADAMS 7900 JAMES 7902 FORD 7934 MILLER job mgr hiredate sal comm deptno CLERK 7902 1980-12-17 800 20 SALESMAN 7698 1981-02-20 1600 300 30 SALESMAN 7698 1981-02-22 1250 500 30 MANAGER 7839 1981-04-02 2975 20 SALESMAN 7698 1981-09-28 1250 1400 30 MANAGER 7839 1981-05-01 2850 30 MANAGER 7839 1981-06-09 2451 10 ANALYST 7566 1982-12-09 3000 20 PRESIDENT 1981-11-17 5000 10 SALESMAN 7698 1981-09-08 1500 0 30 CLERK 7788 1983-01-12 1100 20 CLERK 7698 1981-12-03 950 30 ANALYST 7566 1981-12-03 3000 20 CLERK 13000 10 Introduction7782 à SQL - 1982-01-23 N.Camelin 44 Exemple de clause WHERE - étendue Qui a été embauché de août 1981 à août 1982? SELECT * FROM emp WHERE hiredate BETWEEN '1981-08-01' AND '1982-08-01' ; empno name 7654 MARTIN 7839 KING 7844 TURNER 7900 JAMES 7902 FORD 7934 MILLER job mgr hiredate sal comm deptno SALESMAN 7698 1981-09-28 1250 1400 30 PRESIDENT 1981-11-17 5000 10 SALESMAN 7698 1981-09-08 1500 0 30 CLERK 7698 1981-12-03 950 30 ANALYST 7566 1981-12-03 3000 20 CLERK 7782 1982-01-23 13000 10 Introduction à SQL - N.Camelin 45 Exemple de clause WHERE - appartenance Qui est vendeur ou employé de bureau? SELECT * FROM emp WHERE job IN ('SALESMAN','CLERK') ; empno name 7369 SMITH 7499 ALLEN 7521 WARD 7566 JONES 7654 MARTIN 7698 BLAKE 7782 CLARK 7788 SCOTT 7839 KING 7844 TURNER 7876 ADAMS 7900 JAMES 7902 FORD 7934 MILLER job CLERK SALESMAN SALESMAN MANAGER SALESMAN MANAGER MANAGER ANALYST PRESIDENT SALESMAN CLERK CLERK ANALYST CLERK mgr hiredate sal comm deptno 7902 1980-12-17 800 20 7698 1981-02-20 1600 300 30 7698 1981-02-22 1250 500 30 7839 1981-04-02 2975 20 7698 1981-09-28 1250 1400 30 7839 1981-05-01 2850 30 7839 1981-06-09 2451 10 7566 1982-12-09 3000 20 1981-11-17 5000 10 7698 1981-09-08 1500 0 30 7788 1983-01-12 1100 20 7698 1981-12-03 950 30 7566 1981-12-03 3000 20 7782 1982-01-23 13000 10 Introduction à SQL - N.Camelin 46 Exemple de clause WHERE - appartenance Qui est vendeur ou employé de bureau? SELECT * FROM emp WHERE job IN ('SALESMAN','CLERK') ; empno name 7369 SMITH 7499 ALLEN 7521 WARD 7654 MARTIN 7844 TURNER 7876 ADAMS 7900 JAMES job CLERK SALESMAN SALESMAN SALESMAN SALESMAN CLERK CLERK mgr hiredate sal comm deptno 7902 1980-12-17 800 20 7698 1981-02-20 1600 300 30 7698 1981-02-22 1250 500 30 7698 1981-09-28 1250 1400 30 7698 1981-09-08 1500 0 30 7788 1983-01-12 1100 20 7698 1981-12-03 950 30 Attention à respecter la casse ! SELECT * FROM emp WHERE job IN ('salesman','clerk') ; empno name job mgr hiredate Introduction à SQL - N.Camelin sal comm deptno 47 Exemple de clause WHERE – correspondance à un modèle Quel employé a son nom commençant par la lettre A ? SELECT * FROM emp WHERE name LIKE 'A%' ; empno name 7369 SMITH 7499 ALLEN 7521 WARD 7566 JONES 7654 MARTIN 7698 BLAKE 7782 CLARK 7788 SCOTT 7839 KING 7844 TURNER 7876 ADAMS 7900 JAMES 7902 FORD 7934 MILLER job mgr hiredate sal comm deptno CLERK 7902 1980-12-17 800 20 SALESMAN 7698 1981-02-20 1600 300 30 SALESMAN 7698 1981-02-22 1250 500 30 MANAGER 7839 1981-04-02 2975 20 SALESMAN 7698 1981-09-28 1250 1400 30 MANAGER 7839 1981-05-01 2850 30 MANAGER 7839 1981-06-09 2451 10 ANALYST 7566 1982-12-09 3000 20 PRESIDENT 1981-11-17 5000 10 SALESMAN 7698 1981-09-08 1500 0 30 CLERK 7788 1983-01-12 1100 20 CLERK 7698 1981-12-03 950 30 ANALYST 7566 1981-12-03 3000 20 CLERK 1982-01-23 13000 10 Introduction à 7782 SQL - N.Camelin 48 Exemple de clause WHERE – correspondance à un modèle Quel employé a son nom commençant par la lettre A ? SELECT * FROM emp WHERE name LIKE 'A%' ; empno name job mgr hiredate sal comm deptno 7499 ALLEN SALESMAN 7698 1981-02-20 1600 300 30 7876 ADAMS CLERK 7788 1983-01-12 1100 20 % correspond à un ensemble de caractères • 'A%' match 'ALLEN' • '%O%' match 'FORD', 'SCOTT' et 'JONES' • '%K' match 'CLARK' mais pas 'BLAKE' _ correspond à un seul caractère • 'K_NG' match 'KING' et 'KONG' • '_LA%' match 'BLAKE' et 'CLARK' Introduction à SQL - N.Camelin 49 Opérateurs de négation et de conjonction négation d'une condition : NOT • exclure des enregistrements d'un ensemble de résultats • NOT BETWEEN, NOT IN, NOT LIKE, IS NOT NULL conditions multiples : OR et AND • expression1 AND expression2 – vrai si expression1 ET expression2 à TRUE • expression1 OR expression2 – vrai si expression1 OU expression2 à TRUE Introduction à SQL - N.Camelin 50 Opérateurs ensemblistes combiner le résultat de 2 requêtes ou plus • UNION: mettre en communs tous les n-uplets • INTERSECT : identifier les n-uplets similaires • EXCEPT : identifier les n-uplets appartenant à un ensemble mais pas à l'autre syntaxe : requête_1 { UNION | INTERSECT | EXCEPT } [ALL] requête_2 [...] • même schéma pour requête_1 et requête_2 !! DISTINCT par défaut → ALL possibilité de chainer plusieurs opérateurs : évaluer de gauche à droite Introduction à SQL - N.Camelin 51 Exemple de l'opérateur EXCEPT SELECT * FROM emp WHERE job LIKE 'SALESMAN' empno name mgr hiredate sal comm deptno job 7499 ALLEN SALESMAN 7698 1981-02-20 1600 300 30 7521 WARD SALESMAN 7698 1981-02-22 1250 500 30 7654 MARTIN SALESMAN 7698 1981-09-28 1250 1400 30 7844 TURNER SALESMAN 7698 1981-09-08 1500 0 30 SELECT * FROM emp WHERE sal < 1300 empno name mgr hiredate sal comm deptno job 7369 SMITH CLERK 7902 1980-12-17 800 20 7521 WARD SALESMAN 7698 1981-02-22 1250 500 30 7654 MARTIN SALESMAN 7698 1981-09-28 1250 1400 30 7876 ADAMS CLERK 7788 1983-01-12 1100 20 7900 JAMES CLERK 7698 1981-12-03 950 30 SELECT * FROM emp WHERE job LIKE 'SALESMAN' EXCEPT SELECT * FROM emp WHERE sal < 1300 empno name mgr hiredate sal comm deptno job 7499 ALLEN SALESMAN 7698 1981-02-20 1600 300 30 7844 TURNER SALESMAN 7698 1981-09-08 1500 0 30 Introduction à SQL - N.Camelin 52 Opérateurs arithmétiques 4 opérateurs arithmétiques • addition(+), soustraction(-), multiplication(*) et division (/) • attention à la valeur NULL ! SELECT * FROM emp WHERE sal + comm >500; empno name 7499 ALLEN 7521 WARD 7654 MARTIN 7844 TURNER job mgr hiredate sal comm deptno SALESMAN 7698 1981-02-20 1600 300 30 SALESMAN 7698 1981-02-22 1250 500 30 SALESMAN 7698 1981-09-28 1250 1400 30 SALESMAN 7698 1981-09-08 1500 0 30 Introduction à SQL - N.Camelin 53 Ordre d'évaluation des conditions Ordre d'évaluation 1 2 3 4 5 6 7 Type d'opérateur signe positif (+), signe négatif (-) multiplication (*), division(/) addition(+), soustraction(-) BETWEEN, IN, LIKE, IS NULL, =, <> ,< ,> ,<= ,>= NOT AND OR Introduction à SQL - N.Camelin 54 Exemple de requête à conditions multiples SELECT * FROM emp WHERE job NOT LIKE '_A%' OR mgr = '7698' AND sal>1300; empno name job mgr hiredate sal comm deptno 7369 SMITH CLERK 7902 1980-12-17 800 20 7499 ALLEN SALESMAN 7698 1981-02-20 1600 300 30 7521 WARD SALESMAN 7698 1981-02-22 1250 500 30 7566 JONES MANAGER 7839 1981-04-02 2975 20 7654 MARTIN SALESMAN 7698 1981-09-28 1250 1400 30 7698 BLAKE MANAGER 7839 1981-05-01 2850 30 7782 CLARK MANAGER 7839 1981-06-09 2451 10 7788 SCOTT ANALYST 7566 1982-12-09 3000 20 7839 KING PRESIDENT 1981-11-17 5000 10 7844 TURNER SALESMAN 7698 1981-09-08 1500 0 30 7876 ADAMS CLERK 7788 1983-01-12 1100 20 7900 JAMES CLERK 7698 1981-12-03 950 30 7902 FORD ANALYST 7566 1981-12-03 3000 20 7934 MILLER CLERK 7782 1982-01-23 1300 10 ? empno name 7369 SMITH 7499 ALLEN 7521 WARD 7566 JONES 7654 MARTIN 7698 BLAKE 7782 CLARK 7788 SCOTT 7839 KING 7844 TURNER 7876 ADAMS Introduction 7900 JAMES à 7902 FORD 7934 MILLER ? job mgr hiredate sal comm deptno CLERK 7902 1980-12-17 800 20 SALESMAN 7698 1981-02-20 1600 300 30 SALESMAN 7698 1981-02-22 1250 500 30 MANAGER 7839 1981-04-02 2975 20 SALESMAN 7698 1981-09-28 1250 1400 30 MANAGER 7839 1981-05-01 2850 30 MANAGER 7839 1981-06-09 2451 10 ANALYST 7566 1982-12-09 3000 20 PRESIDENT 1981-11-17 5000 10 SALESMAN 7698 1981-09-08 1500 0 30 CLERK 7788 1983-01-12 1100 20 SQL - N.Camelin7698 1981-12-03 CLERK 950 30 ANALYST 7566 1981-12-03 3000 20 CLERK 7782 1982-01-23 1300 10 55 Fonctions d'agrégation COUNT • compte du nombre de valeurs non NULL d'une colonne SUM • total des valeurs d'une colonne pour un nombre de lignes donné AVG • moyenne d'un groupe de lignes MIN et MAX • retourne la valeur minimale/maximale d'une colonne dans un groupe de lignes !! une fonction d'aggregation ne renvoie qu'une seule valeur !! Introduction à SQL - N.Camelin 56 Exemples de fonctions d'agrégation SELECT COUNT (DISTINCT job) FROM emp ; count 5 SELECT AVG (comm) FROM emp ; avg 550 SELECT name, MAX (sal) FROM emp ; !! ne fonctionne pas !! Introduction à SQL - N.Camelin 57 Quelques fonctions de caractères remplacement de caractères • TRANSLATE(chaine, val1,val2), REPLACE(chaine,char1,char2) modification de la casse • UPPER(chaine), LOWER(chaine) extraction de sous-chaine • SUBSTR(chaine, départ, longueur) longueur de chaine • LENGTH(chaine) Introduction à SQL - N.Camelin 58 Principales fonctions de caractères SELECT name, SUBSTR(job,1,3) FROM emp WHERE sal>2000; name job JONES MAN BLAKE MAN CLARK MAN SCOTT ANA KING PRE FORD ANA SELECT DISTINCT lower(translate(job,'A','K')) FROM emp ; job knklyst clerc mknkger president sklesmkn SELECT replace(job,'s','z') FROM emp ; !! ne fonctionne pas !! Introduction à SQL - N.Camelin 59 Et encore d'autres fonctions... ex. de fonctions mathématiques : • valeur absolue ABS, arrondi ROUND, racine carré SQRT, puissance POWER • SIN(x), COS(x), TAN(x), EXP(x), LOG(x) ex. de fonctions de conversions : • caractères en numérique : TO_NUMBER • numérique en caractère : STR fonctions de dates fonctions système ... Introduction à SQL - N.Camelin 60