SQL LID - cours de developpement pour bts ig. algo
Transcription
SQL LID - cours de developpement pour bts ig. algo
BTS IG – ALSI Le langage de requêtes Le langage de requêtes 1. 2. La base de données ....................................................2 L’algèbre relationnelle .................................................3 2.1. La projection .............................................................................................................. 3 2.2. La sélection (ou restriction)........................................................................................ 3 2.3. La jointure .................................................................................................................. 4 2.4. L’union ....................................................................................................................... 4 2.5. L’intersection ............................................................................................................. 5 2.6. La différence .............................................................................................................. 6 2.7. La division.................................................................................................................. 6 Le langage SQL .............................................................7 2.8. La projection .............................................................................................................. 7 2.9. La sélection (ou restriction)........................................................................................ 7 2.10. La jointure .............................................................................................................. 8 2.11. Les expressions et fonctions................................................................................... 9 2.11.1. les opérateurs arithmétiques : +, -, *, / ............................................................... 9 2.11.2. les fonctions arithmétiques................................................................................. 9 2.11.3. Les fonctions sur les chaînes de caractères ........................................................ 9 2.11.4. Les fonctions sur les dates.................................................................................. 9 2.11.5. Les fonctions de conversion ............................................................................. 10 2.12. Les fonctions d’agrégat : ...................................................................................... 10 2.13. Les requêtes imbriquées ....................................................................................... 11 2.14. La clause GROUP BY................................................. Erreur ! Signet non défini. 2.15. La clause HAVING ..................................................... Erreur ! Signet non défini. Rappels : Un système de gestion de bases de données relationnel (SGBDR) rassemble une ou plusieurs bases de données ainsi que l’ensemble des outils nécessaires à la manipulation des données. Il permet de : - décrire les données et leur structure (type de données) grâce à un langage de définition de données (LDD), - manipuler les données par des requêtes d’interrogation et des instructions de mise à jour grâce au langage de manipulation de données (LMD). Le langage SQL est pratiquement devenu une norme dans le cadre de la gestion des données. 1 BTS IG – ALSI Le langage de requêtes 1. La base de données La base de données EMP-DEPT utilisée en exemple dans ce cours décrit les caractéristiques des employés d’une entreprise : Table EMP : les employés empno 7369 7499 7521 7566 7654 7698 7782 7788 7839 7844 7876 7900 7902 7934 ename SMITH ALLEN WARD JONES MARTIN BLAKE CLARK SCOTT KING TURNER ADAMS JAMES FORD MILLER job CLERK SALESMAN SALESMAN MANAGER SALESMAN MANAGER MANAGER ANALYST PRESIDENT SALESMAN CLERK CLERK ANALYST CLERK mgr 7902 7698 7698 7839 7698 7839 7839 7566 hiredate 17/12/80 20/02/81 22/02/81 02/04/81 28/09/81 01/05/81 09/06/81 09/11/81 17/11/81 08/09/81 23/09/81 03/12/81 03/12/81 23/01/82 7698 7788 7698 7566 7782 sal 800 1600 1250 2975 1250 2850 2450 3000 5000 1500 1100 950 3000 1300 comm 300 500 1400 0 deptno 20 30 30 20 30 30 10 20 10 30 20 30 20 10 Signification des colonnes: - empno : numéro identifiant un employé, - ename : nom d’employé, - job : fonction, - mgr : numéro du responsable (manager) d’un employé, - hiredate : date d’embauche, - sal : salaire, - comm : commissions perçues (uniquement pour les vendeurs, les représentants), - deptno : numéro de département. Table DEPT: les départements (au sens service) deptno 10 20 30 40 dname ACCOUNTING RESEARCH SALES OPERATIONS loc NEW YORK DALLAS CHICAGO BOSTON Signification des colonnes: - deptno : numéro identifiant un département, - dname : nom du département, - loc : localisation (la ville). Contraintes d’intégrité référentielle : - deptno de emp référence deptno de dept - mgr de emp référence empno de emp 2 BTS IG – ALSI Le langage de requêtes 2. L’algèbre relationnelle L’algèbre relationnelle est un outil mathématique permettant de réaliser des calculs (appelés requêtes) sur des relations. 2.1. La projection L’opération de projection permet de retenir uniquement certaines colonnes (champs) d’une relation. Syntaxe : R = Proj (<nom relation> ; <nom des attributs>) Exemple : résultat = proj(emp, {ename, empno}) ename empno SMITH 7369 ALLEN 7499 WARD 7521 JONES 7566 MARTIN 7654 BLAKE 7698 CLARK 7782 SCOTT 7788 KING 7839 TURNER 7844 ADAMS 7876 JAMES 7900 FORD 7902 MILLER 7934 empno 7369 7499 7521 7566 7654 7698 7782 7788 7839 7844 7876 7900 7902 7934 ename SMITH ALLEN WARD JONES MARTIN BLAKE CLARK SCOTT KING TURNER ADAMS JAMES FORD MILLER 2.2. job CLERK SALESMAN SALESMAN MANAGER SALESMAN MANAGER MANAGER ANALYST PRESIDENT SALESMAN CLERK CLERK ANALYST CLERK mgr 7902 7698 7698 7839 7698 7839 7839 7566 hiredate 17/12/80 20/02/81 22/02/81 02/04/81 28/09/81 01/05/81 09/06/81 09/11/81 17/11/81 08/09/81 23/09/81 03/12/81 03/12/81 23/01/82 7698 7788 7698 7566 7782 sal 800 1600 1250 2975 1250 2850 2450 3000 5000 1500 1100 950 3000 1300 comm 300 500 1400 0 deptno 20 30 30 20 30 30 10 20 10 30 20 30 20 10 La sélection (ou restriction) La restriction permet d'extraire d'une table les lignes qui satisfont une ou plusieurs conditions. Syntaxe : R = Resctrict (<nom relation> ; <condition>) Exemple : résultat = restrict(emp, deptno=20) 3 BTS IG – ALSI Le langage de requêtes empno 7369 7566 7788 7876 7902 ename SMITH JONES SCOTT ADAMS FORD job CLERK MANAGER ANALYST CLERK ANALYST mgr 7902 7839 7566 7788 7566 hiredate 17/12/80 02/04/81 09/11/81 23/09/81 03/12/81 sal 800 2975 3000 1100 3000 comm deptno 20 20 20 20 20 empno 7369 7499 7521 7566 7654 7698 7782 7788 7839 7844 7876 7900 7902 7934 ename SMITH ALLEN WARD JONES MARTIN BLAKE CLARK SCOTT KING TURNER ADAMS JAMES FORD MILLER job CLERK SALESMAN SALESMAN MANAGER SALESMAN MANAGER MANAGER ANALYST PRESIDENT SALESMAN CLERK CLERK ANALYST CLERK mgr 7902 7698 7698 7839 7698 7839 7839 7566 hiredate 17/12/80 20/02/81 22/02/81 02/04/81 28/09/81 01/05/81 09/06/81 09/11/81 17/11/81 08/09/81 23/09/81 03/12/81 03/12/81 23/01/82 sal 800 1600 1250 2975 1250 2850 2450 3000 5000 1500 1100 950 3000 1300 comm deptno 20 30 30 20 30 30 10 20 10 30 20 30 20 10 2.3. 7698 7788 7698 7566 7782 300 500 1400 0 La jointure La jointure agit sur deux tables ou plus. Elle permet de rapprocher les informations issues de 2 tables ayant un attribut commun (qui ne porte pas forcément le même nom dans les deux tables). Syntaxe : R = Join (<relation1>, <relation2>, <condition de jointure>) Exemple : résultat = join(emp, dept, emp.deptno = dept.deptno) empno 7369 7499 7521 7566 7654 7698 7782 7788 7839 7844 7876 7900 7902 7934 ename SMITH ALLEN WARD JONES MARTIN BLAKE CLARK SCOTT KING TURNER ADAMS JAMES FORD MILLER job CLERK SALESMAN SALESMAN MANAGER SALESMAN MANAGER MANAGER ANALYST PRESIDENT SALESMAN CLERK CLERK ANALYST CLERK 2.4. mgr hiredate 7902 17/12/80 7698 20/02/81 7698 22/02/81 7839 02/04/81 7698 28/09/81 7839 01/05/81 7839 09/06/81 7566 09/11/81 17/11/81 7698 08/09/81 7788 23/09/81 7698 03/12/81 7566 03/12/81 7782 23/01/82 sal comm deptno Deptno Dname 800 20 20 RESEARCH 1600 300 30 30 SALES 1250 500 30 30 SALES 2975 20 20 RESEARCH 1250 1400 30 30 SALES 2850 30 30 SALES 2450 10 10 ACCOUNTING 3000 20 20 RESEARCH 5000 10 10 ACCOUNTING 1500 0 30 30 SALES 1100 20 20 RESEARCH 950 30 30 SALES 3000 20 20 RESEARCH 1300 10 10 ACCOUNTING loc DALLAS CHICAGO CHICAGO DALLAS CHICAGO CHICAGO NEW YORK DALLAS NEW YORK CHICAGO DALLAS CHICAGO DALLAS NEW YORK L’union L'union de deux tables R et S, notée R U S ou UNION(R,S), est une table T de même schéma (les domaines associés aux colonnes de R sont identiques aux domaines associés aux colonnes de S), contenant les enregistrements appartenant à R ou à S ou aux deux tables. Syntaxe : R = Union (<relation1>, <relation2>) 4 BTS IG – ALSI Le langage de requêtes Exemple : Relation R1 : empno ename 7782 CLARK 7839 KING 7934 MILLER Relation R2 : deptno 10 10 10 empno 7782 7788 7876 7902 ename CLARK SCOTT ADAMS FORD deptno 10 20 20 20 résultat = union(R1, R2) empno 7782 7839 7934 7788 7876 7902 2.5. ename CLARK KING MILLER SCOTT ADAMS FORD deptno 10 10 10 20 20 20 L’intersection L'intersection de deux tables R et S, notée R ∩ S ou INTERSECT(R,S), est une table T de même schéma, contenant les enregistrements appartenant à la fois à R et S. Syntaxe : R = Intersect (<relation1>, <relation2>) Exemple : Relation R1 : empno ename 7782 CLARK 7839 KING 7934 MILLER Relation R2 : deptno 10 10 10 empno 7782 7788 7876 7902 ename CLARK SCOTT ADAMS FORD résultat = intersect(R1,R2) empno ename 7782 CLARK 5 deptno 10 deptno 10 20 20 20 BTS IG – ALSI 2.6. Le langage de requêtes La différence La différence de deux tables R et S, notée R - S ou MINUS(R,S), est une table T de même schéma, contenant les enregistrements appartenant à R mais pas à S. R = Minus (<relation1>, <relation2>) Syntaxe : Exemple : Relation R1 : Relation R2 : empno ename 7782 CLARK 7839 KING 7934 MILLER deptno 10 10 10 empno 7782 7788 7876 7902 ename CLARK SCOTT ADAMS FORD deptno 10 20 20 20 Résultat = minus(R1, R2) empno ename 7839 KING 7934 MILLER 2.7. deptno 10 10 La division La division agit sur deux tables R et S ayant un attribut commun (qui ne porte pas forcément le même nom dans les deux tables). Elle est constituée des enregistrements de R qui sont accouplés à chacune des valeurs de S. Syntaxe : R = <nom relation> (<attribut 1> / <attribut 2>) <nom relation> Exemple : Relation Conduit : npilote 1 1 1 2 2 3 Relation Avions : numavion 1 2 3 1 2 1 navion description 1 Boeing 747 2 Airbus A320 3 Tupolev Résultat = Conduit(numavion / navion) Avions Npilote 1 On obtient dans la relation résultat les numéros des pilotes qui conduisent tous les avions répertoriés dans la relation Avions. 6 BTS IG – ALSI Le langage de requêtes Le langage SQL Le langage SQL est un outil d’interrogation des SGBDR qui s’appuie sur l’algèbre relationnelle. Les mots réservés du langage sont écrits en majuscule. 2.8. La projection SELECT [DISTINCT] (<nomattribut1>, [<nomattribut2,…] ) | * FROM <nom de table> ; La clause DISTINCT permet d’éliminer les doublons : si dans le résultat plusieurs lignes sont identiques, une seule sera conservée. Le symbole * permet d’obtenir tous les attributs sans avoir à tous les citer. Exemples : Liste des numéros et noms d’employés Select ename, empno from emp ; Liste de tous les employés Select * from emp ; Liste des fonctions occupées dans l’entreprise Select job from emp ; Remarque : la requête renvoie plusieurs lignes identiques. Liste des fonctions occupées dans l’entreprise (avec suppression des lignes identiques) Select distinct job from emp ; La clause ORDER BY : Elle permet de trier les résultats suivant différentes expressions (souvent des noms de colonnes) par ordre croissant (ASC) ou décroissant (DESC). L’option ASC est prise par défaut pour chacune des expressions citées. Exemple : Liste des employés par salaires décroissants Select ename, sal from emp order by sal desc; 2.9. La sélection (ou restriction) SELECT [DISTINCT] (<nomattribut1>, [<nomattribut2,…] ) | * FROM <noms des tables> WHERE <condition de recherche> [ AND <condition de recherche> ]; Une condition de recherche est de la forme : argument1 opérateur argument2 7 BTS IG – ALSI Le langage de requêtes Les différents opérateurs d’une condition de recherche : Opérateur = != <> > >= < <= Between ... AND ... In Like Is Null Any All Exemples : Description Egal Différent Différent Supérieur Supérieur ou Egal Inférieur Inférieur ou Egal Entre ... et ... Dans Comme Est indéfini Au moins 1 Tout Liste des employés appartenant au département 20 Select ename, empno from emp where deptno = 20 ; Liste des employés occupant la fonction de vendeur ou analyste Select ename, empno from emp where job in ("SALESMAN", "ANALYST") ; Liste des employés embauchés au mois de septembre 1981 Select ename, empno, hiredate from emp where hiredate between "01/09/81” and "30/09/81” ; Liste des employés dont le salaire est compris entre 2000 et 3000 Select * from emp where sal between 2000 and 3000 ; Liste des employés dont le nom commence par un J Select * from emp where ename like "J%"; 2.10. La jointure SELECT [DISTINCT] (<nomattribut1>, [<nomattribut2,…] ) | * FROM <noms des tables> WHERE <condition de recherche> [ AND <condition de recherche> ]; Exemple : Liste des employés ainsi que le nom de leur département Select ename, dname from emp, dept where emp.deptno = dept.deptno Il est possible d’utiliser un alias pour renommer les tables. Exemple : Select ename, dname 8 BTS IG – ALSI Le langage de requêtes from emp E, dept D where E.deptno = D.deptno 2.11. Les expressions et fonctions Elles sont utilisables après les clauses SELECT, WHERE, HAVING et ORDER BY. 2.11.1. Exemple : Select ename, sal + com from emp where comm is not null and comm > 0.25*sal; 2.11.2. ABS(n) CEIL(n) FLOOR(n) MOD(n,m) POWER(n,m) ROUND(n, [m]) TRUNC(n, [m]) SQRT(n) LEAST(n1,n2…) GREATEST(n1,n2…) Exemple : les opérateurs arithmétiques : +, -, *, / les fonctions arithmétiques valeur absolue le plus petit entier inférieur qui dépasse n le plus grand entier inférieur à n reste de la division de m par n m est élevé à la puissance n n est arrondi à m décimales (m=0 si omis) n est tronqué à m décimales (m=0 si omis) racine carrée la plus faible valeur parmis n1, n2… la plus forte valeur parmis n1, n2… Select ename, greatest(sal, comm) from emp; Select empno, ename, least(round(sal), round(comm)) From emp Where round(sal) > 2000; 2.11.3. Les fonctions sur les chaînes de caractères LENGTH(c) longueur de la chaîne UPPER(c), LOWER(c) conversion en majuscules, minuscules SUBSTR(c,p [,l]) extrait la sous-chaine de c à partir du p-ième caractère, ayant pour longueur l GREATEST(c1,c2…) LEAST(c1,c2…) c1 || c2 concatène les chaînes c1 et c2 2.11.4. • • • Les fonctions sur les dates Deux dates peuvent être comparées entre elles avec les opérateurs de comparaison (<, >…). Une date peut être cherchée dans un intervalle (d between d1 and d2). Le nombre de jours entre deux dates peut être obtenu par : d1-d2. 9 BTS IG – ALSI Le langage de requêtes LEAST(d1,d2…) GREATEST(n1,n2…) ADD_MONTHS(d,n) MONTHS_BETWEEN(d1,d2) NEXT_DAY(d, jour) ajoute n mois à la date d et renvoie une date exprime la différence de mois entre d1 et d2 donne la première date qui suit la date d et qui Correspond au jour de la semaine donné Ex : next_day(d, ‘Monday’) SYSDATE est une variable donnant la date système (la date courante). Exemple : select * from emp Where sysdate-hiredate < 30; Elle peut être affichée par : select sysdate from dual; 2.11.5. Les fonctions de conversion Le format par défaut d’une date est : DD/MON/YY qui correspond à 2 chiffres (jours), 3 lettres (mois), 2 chiffres (année), les champs étant séparés par le symbole / Par exemple : ’20/AUG/93’ La fonction TO_CHAR(d, format) convertit une date ou une expression de type date en une chaîne dont le format est précisé. Par exemple : to_char(d, ‘dd/mm/yy’) renvoie 20/08/93 Exemple : select ename, to_char(hiredate,’DD/MONTH’) from emp Where to_char(hiredate,’yyyy’) = ‘1993’; La fonction TO_DATE(c, format) convertit une chaîne associée à une date dont le format est précisé en un objet de type date. Par exemple : to_date(‘89/16/07’, ‘YY/DD/MM’) retourne la date du 16 juillet 1989. La fonction TO_NUMBER(c) convertit une chaîne de caractères numériques en un objet de type numérique. 2.12. Les fonctions d’agrégat : Les fonctions d’agrégat permettent d'obtenir des informations relatives à un ensemble de données. Elles s’appliquent à un ensemble de lignes et renvoient une valeur. count avg sum min max dénombre les occurrences d'un attribut calcule la moyenne d'un attribut calcule la somme sur un attribut détermine la plus petite occurrence d'un attribut détermine la plus grande occurrence d'un attribut Toutes ces fonctions d'agrégats ignorent les valeurs nulles mais peuvent avoir des valeurs qui se répètent. Pour préciser qu'il faut tenir compte de toutes les valeurs ou 10 BTS IG – ALSI Le langage de requêtes seulement de celles qui sont distinctes, il faut préciser ALL ou DISTINCT ( par défaut, c'est ALL). Exemple : Nombre d’employés appartenant au département 20 Select count(*) from emp where deptno = 20 ; Salaire le plus élevé Select max(sal) from emp ; Nombre de fonctions Select count(distinct job) from emp; Select ename, max(sal) From emp; Requête mal construite ! 2.13. Les requêtes imbriquées Exemple de requête ; Liste des employés appartenant au département des Ventes Select ename from emp, dept where emp.deptno = dept.deptno and dept.dname = "SALES" Un requête imbriquée est composée de deux ou plusieurs select. Le premier est appelé requête principale, le ou les suivants, sous-requêtes. L’exécution se fait en deux temps : - d’abord les sous-requêtes qui extraient les valeurs intermédiaires - puis la requête principale s’exécute sur les valeurs intermédiaires Le lien entre deux Select est réalisé par : - IN si la sous-requête fournit plusieurs valeurs - = si la sous-requête ne fournit qu’une seule valeur Exemples ; Liste des employés appartenant au département des Ventes Select ename from emp where deptno = ( select deptno from dept where dname = "SALES"); Liste des départements comportant au-moins un employé Select dname from dept where deptno in (select deptno from emp); 11