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 http://www-306.ibm.com/software/data/db2/ Microsoft SQL http ://www.microsoft.com/sql/ Informix 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 3 niveaux de conformité 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 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 Relation Technologies/Ingres Corporation 1986 : Nouvelle équipe de l'université de Berkeley 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? Non, c'est un langage déclaratif Coder comment obtenir ce que l'on veut? 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 Base de données clé primaire 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 enregistrement (ligne) champ (cellule) id_job job paie id_emp M1 manager 45k 5 S1 salesman 26k 3 P president 100k 2 tables colonne 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 19 valeurs de dates et heures : TIMESTAMP[(p)], DATE[(p)] et encore : types géométriques (coordonnées), tableaux,...
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) character varying(n), varchar(n) text Chaîne de caractères de longueur n Chaîne de caractères de longueur max n variable Chaîne de caractères de longueur variable et illimitée SQL89 SQL92 Spécificité PostgreSQL Introduction à SQL - N.Camelin 21
Types de données Numériques entiers Type 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 chiffres) Spécif. P_SQL Introduction à SQL - N.Camelin 22
Types de données Numériques réels Type Description Norme real, float4 Flottant sur 4 octets SQL89 double precision, float8, float numeric(p,s), decimal(p,s) Flottant sur 8 octets Type numérique exact avec précision p quelconque et facteur d échelle s SQL89 Spécif. P_SQL 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 money et serial Géométriques box, line, lseq, circle, path, point, polygon Pour le réseau 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 à : méta-valeur représentant une absence de valeur Affectation : Tout champ indépendamment de son type!! sauf contrainte NOT NULL Référencement : le mot clé NULL NULL n'est pas 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 définition des éléments de la base de données : tables, champs, clés,... DML - Data Manipulation Language manipulation des données : insertion, suppression, modification, extraction,... DQL - Data Query Language gestion des droits d'accès aux données DCL - Data Control Language 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 PRIMARY KEY, name varchar(10) NOT NULL, job varchar(10) NOT NULL, mgr integer, hiredate date, sal numeric(7,2), comm numeric(7,2), deptno integer 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 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 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 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 2450 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 Introduction à SQL - N.Camelin 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 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 2450 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 Introduction à SQL - N.Camelin 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 300 30 7566 JONES MANAGER 7839 1981-04-02 2975 20 7698 BLAKE MANAGER 7839 1981-05-01 2850 30 7782 CLARK MANAGER 7839 1981-06-09 2450 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 7902 FORD ANALYST 7566 1981-12-03 3000 20 Introduction à SQL - N.Camelin 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 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 2450 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 Introduction à SQL - N.Camelin 39
Exemple de projection ET sélection SELECT name, hiredate, sal FROM emp WHERE sal>=1500 ; name hiredate sal ALLEN 1981-02-20 1600 JONES 1981-04-02 2975 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 FORD 1981-12-03 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'; id_nom 7788_SCOTT 7902_FORD SELECT DISTINCT job FROM emp ; job ANALYST CLERC MANAGER PRESIDENT SALESMAN SELECT sal+comm FROM emp ;? column? 1900 1750 2650 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 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 13000 10 Introduction à SQL - 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 job mgr hiredate sal comm deptno 7654 MARTIN SALESMAN 7698 1981-09-28 1250 1400 30 7839 KING PRESIDENT 1981-11-17 5000 10 7844 TURNER SALESMAN 7698 1981-09-08 1500 0 30 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 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 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 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 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 7654 MARTIN SALESMAN 7698 1981-09-28 1250 1400 30 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 Attention à respecter la casse! SELECT * FROM emp WHERE job IN ('salesman','clerk') ; empno name job mgr hiredate sal comm deptno Introduction à SQL - N.Camelin 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 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 13000 10 Introduction à 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 job mgr hiredate sal comm deptno 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 job mgr hiredate sal comm deptno 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 job mgr hiredate sal comm deptno 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 job mgr hiredate sal comm deptno 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 Introduction à SQL - N.Camelin 53
Ordre d'évaluation des conditions Ordre d'évaluation Type d'opérateur 1 signe positif (+), signe négatif (-) 2 multiplication (*), division(/) 3 addition(+), soustraction(-) 4 BETWEEN, IN, LIKE, IS NULL, =, <>,<,>,<=,>= 5 NOT 6 AND 7 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 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 Introduction à SQL - N.Camelin 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 JONES BLAKE CLARK SCOTT KING FORD job MAN MAN MAN ANA PRE 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