langage sql

127
0021266950863 1 Manipulation des données avec un langage de requête SQL Manipulation des donn Manipulation des donn é é es avec es avec un langage de requête SQL un langage de requête SQL

Upload: api-3740617

Post on 07-Jun-2015

1.741 views

Category:

Documents


5 download

DESCRIPTION

Langage_SQL

TRANSCRIPT

Page 1: Langage SQL

0021266950863 1

Manipulation des données avec un langage de requête SQL

Manipulation des donnManipulation des donnéées avec es avec un langage de requête SQLun langage de requête SQL

Page 2: Langage SQL

0021266950863 2

1. OPERATIONS DE BASEL’ALGÈBRE RELATIONNELLELL’’ALGALGÈÈBRE RELATIONNELLEBRE RELATIONNELLE

L’algèbre relationnelle a été inventée par E. Codd comme une collection d’opérations

formelles qui agissent sur des relations et produisent des relations en résultats.

Cette algèbre constitue un ensemble d’opérations élé­mentaires associées au

modèle relationnel, est sans doute une des forces essentielles du modèle.

Les opérations de base peuvent être classées en deux types: les opérations ensemblistes

traditionnelles (une relation étant un ensemble de tuples, elle peut être traitée comme tel)

et les opérations spécifiques.

Les opérations ensemblistes sont des opérations binaires, c’est-à-dire qu’à partir de deux

relations elles en construisent une troisième. Ce sont l’union, la différence et le produit cartésien.

Les opérations spécifiques sont les opérations unaires de projection et restriction qui, à partir

d’une relation, en construisent une autre, et l’opération binaire de jointure. Nous allons définir

toutes ces opérations plus précisément

Page 3: Langage SQL

0021266950863 3

1 LES OPÉRATIONS ENSEMBLISTES1 LES OP1 LES OPÉÉRATIONS ENSEMBLISTESRATIONS ENSEMBLISTES

1.1.UNIONL’union est l’opération classique de la théorie des ensembles adaptée aux relations de même schéma.

Notion : Union (Union)

Opération portant sur deux relations de même schéma RELATION1 et RELAT10N2 consistant à construire une relation de même schéma RELAT10N3 ayant pour tuples ceux appartenant à RELATION1 ou RELATION2 ou aux deux relations.

Plusieurs notations ont été introduitespour cette opération selon les auteurs :RELATION1 U RELATION2UNION (RELATION1, RELATION2)APPEND (RELATION1, RELATION2)

Vins 1 CruMill Région Couleur

CHENAS 1983 BEAUJOLAIS ROUGETOKAY 1980 ALSACE BLANCTAVEL 1986 RHONE ROSE

Vins 2 CruMill Région Couleur

TOKAY 1980 ALSACE BLANCCHABLIS 1985 BOURGOGNE ROUGE

Vins CruMill Région Couleur

CHENAS 1983 BEAUJOLAIS ROUGETOKAY 1980 ALSACE BLANCTAVEL 1986 RHONE ROSECHABLIS 1985 BOURGOGNE ROUGE

Figure 2– Exemple d’union

RÉSULTAT

RELATION 1 RELATION 2

U

Figure 1: représentation graphique de l'union

La notation graphique représentée figure 1 est aussi utilisée.

A titre d’exemple, l’union des relations VINS 1 et VINS 2 est représentée figure 2. (relation VINS)

Page 4: Langage SQL

0021266950863 4

1.2.DIFFERENCE

La différence est également l’opération classique de la théorie des ensembles adaptée aux relations de même schéma.

1 LES OPÉRATIONS ENSEMBLISTES1 LES OP1 LES OPÉÉRATIONS ENSEMBLISTESRATIONS ENSEMBLISTES

Notion : Différence (Difference)

Opération portant sur deux relations de même schéma RELATION1 et REL.AT10N2 consistant àconstruire une relation de même schéma RELAT10N3 ayant pour tuples ceux appartenant àRELATION1 et n’appartement pas à la RELATION2

La différence est un opérateur non commutatif : l’ordre des relations opérandes est donc important. Plusieurs notations ont été introduites pour cette opération selon les auteurs

RELATION1 - RELATION2DIFFERENCE (RELATION1, RELATION2)MINUS (RELATION1, RELATION2)

Vins 1 CruMill Région Couleur

CHENAS 1983 BEAUJOLAIS ROUGETOKAY 1980 ALSACE BLANCTAVEL 1986 RHONE ROSE

Vins 2 CruMill Région Couleur

TOKAY 1980 ALSACE BLANCCHABLIS 1985 BOURGOGNE ROUGE

Vins CruMill Région Couleur

CHENAS 1983 BEAUJOLAIS ROUGETAVEL 1986 RHONE ROSE

La notation graphique représentée figure 3 est aussi utilisée. À titre d’exemple, la différence des relations VINS 1 - VINS 2 est représentée figure 4 (VINS)

RESULTAT

RELATION 2RELATION 1

-

Figure 3: Représentation graphique de la différenceFigure 4 – Exemple de différence

Page 5: Langage SQL

0021266950863 5

1.3. PRODUIT CARTÉSIENLe produit cartésien est l’opération ensembliste que nous avons rappelée ci-dessus pour définir le concept de relation.Elle est adaptée aux relations. Cette fois, les deux relations n’ont pas nécessité d’avoir le même schéma.

1 LES OPÉRATIONS ENSEMBLISTES1 LES OP1 LES OPÉÉRATIONS ENSEMBLISTESRATIONS ENSEMBLISTES

Notion : Produit cartésien (Cartesian product)

Opération portant sur deux relations RELATION1 et RELATION2 consistant à construire une relation RELATION3 ayant pour schéma la concaténation de ceux des relations opérandes et pour tuples toutes les combinaisons des tuples des relations opérandes.

Des notations possibles pour cette opération sont:

RELATION1 X RELATION2PRODUCT (RELATION1, RELATION2)TIMES (RELATION2, RELATION2)

La notation graphique représentée figure 5 est aussi utilisée.

À titre d’exemple, la relation VINS représentée figure6 est le produit cartésien des deux relations CRUS et ANNEES de la même figure.

Figure 5 : Exemple de produit cartésien Figure 6 – Exemple du produit cartesien

RESULTAT

RELATION 2RELATION 1

X

Vins 1 Cru Région Couleur

CHENAS BEAUJOLAIS ROUGETOKAY ALSACE BLANCTAVEL RHONE ROSE

X

Année Mill

19801985

Vins Cru Région Couleur Mill

CHENAS BEAUJOLAIS ROUGE 1980TOKAY ALSACE BLANC 1980TAVEL RHONE ROSE 1980CHENAS BEAUJOLAIS ROUGE 1985TOKAY ALSACE BLANC 1985TAVEL RHONE ROSE 1985

Page 6: Langage SQL

0021266950863 6

2.1. PROJECTIONLa projection est une opération spécifique aux relations qui permet de supprimer des attributs d’une relation.Son nom provient du fait qu’elle permet de passer d’une relation n-aire à une relation p-aire avec p<n donc d’un espace à n dimensions à un espace à moins de dimensions.

2. LES OPÉRATIONS SPÉCIFIQUES2. LES OP2. LES OPÉÉRATIONS SPRATIONS SPÉÉCIFIQUESCIFIQUES

Notion – Projection (Projection)

Opération sur une relation RELATION 1 consistant à composer une relation RELATION2 en enlevant à la relation initiale tous les attributs non mentionnés en opérandes (aussi bien au niveau du schéma que des tuples) et en éliminant les tuples en double qui sont conservés une seule fois.Les notations suivantes sont utilisées pour cette opération, en désignant par Attributi, Attributj, Attributm les attributs de projection:

Attributi, Attributj, ... Attributm (RELATION1)RELATION 1 [Attributi, Attributj, ... Attributm ]PROJECT (RELATION 1, Attributi, Attributj, ... Attributm)

Figure 7 : Représentation graphique de la projection Figure 8 : Exemple de projection

RESULTAT

A1,A2,..An

RELATION

Le trapèze horizontal signifie que l’on réduitle nombre de colonnes de la relation : partant du nombre représenté par la base, on passe au nombre représenté par l’anti-base.

Vins 1 Cru Mill Région Qualité

VOLNAY 1983 BOURGOGNE AVOLNAY 1979 BOURGOGNE BCHENAS 1983 BEAUJOLAIS AJULIENAS 1986 BEAUJOLAIS C

Project (RELATION 1, Cru, Région)

Proj(Vins) Cru Région

VOLNAY BOURGOGNECHENAS BEAUJOLAISJULIENAS BEAUJOLAIS

La figure 8 donne un exemple de projection d’une relation VINS comportant aussi l’attribut QUALITE sur les attributs CRU et REGION.

Page 7: Langage SQL

0021266950863 7

2.2. RESTRICTIONLa restriction est aussi une opération spécifique unaire qui produit une nouvelle relation en enlevant des tuplesà la relation opérande selon un critère.

2. LES OPÉRATIONS SPÉCIFIQUES2. LES OP2. LES OPÉÉRATIONS SPRATIONS SPÉÉCIFIQUESCIFIQUES

Notion : Restriction (Restriction)

Opération sur une relation RELATION i produisant une relation RELATION2 de même schéma mais comportant les seuls tuples qui vérifient la condition précisée en argument.Les conditions possibles sont du type: <Attribut> <Opérateur> <Valeur>où l’opérateur est un opérateur de comparaison choisi parmi {=, <, <, >, >, ≠}. L’attribut doit appartenir à la relation sur laquelle s’applique le critère.

Les notations suivantes sont utilisées pour la restriction:condition (RELATION1)RELATION 1 [Condition]RESTRICT (RELATION1, Condition)

Figure 9: Représentation graphique de la restriction Figure 10: Exemple de restriction

Le trapèze vertical signifie que l’on réduitle nombre de tuples de la relation : partantdu nombre représenté par le côté gaucheon passe au nombre représenté parle côté droit.

La figure 10 représente la restriction d’une relation VINS enrichie d’un attribut QUALITE par la condition mill>1983RESULTAT

Ai O Valeur

RELATION

Vins Cru Mill Région Qualité

VOLNAY 1983 BOURGOGNE AVOLNAY 1979 BOURGOGNE BCHENAS 1983 BEAUJOLAIS AJULIENAS 1986 BEAUJOLAIS C

RESTRICT (RELATION1, cru > 1983)

Vins Cru Mill Région Qualité

JULIENAS 1986 BEAUJOLAIS C

Page 8: Langage SQL

0021266950863 8

2.3. JOINTURELa jointure est une des opérations essentielles de l’algèbre relationnelle, sans doute la plus difficile à réaliser dans les systèmes. La jointure permet de composer deux relations à l’aide d’un critère de jointure. Elle peut être vue comme uneextension du produit cartésien avec une condition permettant de comparer des attributs. Nous la définirons comme suit:

2. LES OPÉRATIONS SPÉCIFIQUES2. LES OP2. LES OPÉÉRATIONS SPRATIONS SPÉÉCIFIQUESCIFIQUES

Notion : Jointure (Join)

Opération consistant à rapprocher selon une condition, les tuples de deux relations RELATION1 et RELATION2 afin de former une troisième relation RELATION3 qui contient l’ensemble de tous les tuples obtenus en concaténant un tuple de RELATION1 et un tuple de RELATION2 vérifiant la condition de rapprochement.

La jointure de deux relations produit donc une troisième relation qui contient toutes les combinaisons de tuples des deux relations initiales qui satisfont la condition spécifiée. La condition doit bien sûr permettre le rapprochement des deux relations, et donc être du type:

<Attribut 1> <opérateur> <Attribut2>où Attribut1 appartient à RELATION1 et Attribut2 à RELATION2.

Figure 12: Jointure naturelle des relation VINS et LOCALISATION

Vins Cru Mill Qualité

VOLNAY 1983 AVOLNAY 1979 BCHABLIS 1983 AJULIENAS 1986 C

Jointure

Localisation Cru Région QualMoy

VOLNAY BOURGOGNE ACHABLIS BOURGOGNE ACHABLIS CALIFORNIE B

VinReg Cru Mill Région Qualité Moyenne

VOLNAY 1983 BOURGOGNE AVOLNAY 1979 BOURGOGNE BCHABLIS 1983 BOURGOGNE ACHABLIS 1983 CALIFORNIE A

Page 9: Langage SQL

0021266950863 9

2.4. INTERSECTIONL’intersection est l’opération classique de la théorie des ensembles adaptée aux rela­tions de même schéma.

2. LES OPÉRATIONS SPÉCIFIQUES2. LES OP2. LES OPÉÉRATIONS SPRATIONS SPÉÉCIFIQUESCIFIQUES

Notion : Intersection (Intersection)

Opération sur deux relations de même schéma RELATIONet RELATION2 consistant à construire une relation de même schéma RELATION3 ayant pour tuples ceux appartenant à la fois à RELATION1 et RELATION2

Plusieurs notations ont été introduites pour cette opération selon les auteurs• RELATION1 ∩ RELATION2• INTERSECT (RELATION1, RELATION2)• AND (RELATION1, RELATION2)La notation graphique représentée figure 14 est aussi utilisée.

Page 10: Langage SQL

0021266950863 10

5.2 DIVISIONLa division permet de rechercher dans une relation les sous-tuples qui sont complétés par tous ceux d’une autre relation.Elle permet ainsi d’élaborer la réponse à des ques­tions de la forme “quel que soit x, trouver y” de manière simple.

2. LES OPÉRATIONS SPÉCIFIQUES2. LES OP2. LES OPÉÉRATIONS SPRATIONS SPÉÉCIFIQUESCIFIQUES

Notion: Division (Division)Opération consistant à construire le quotient de la relation D (A 1, A2... Ap, Ap+ 1, ... An) par la relation d(Ap+ 1, ... An) comme la relation Q(A 1, A2... Ap) dont les tuples sont ceux qui concaténés à tout tuple de d donnent un tuple de D.

Les notations possibles pour la division sont :D ÷ dDIVISION (D,d)

RESULTAT

RELATION 2RELATION 1

÷

Page 11: Langage SQL

0021266950863 11

5.3. COMPLEMENTLe complément permet de trouver les tuples qui n’appartiennent pas à une relation. Il suppose à priori que les domaines sont finis (sinon on obtient des relations infinies).

2. LES OPÉRATIONS SPÉCIFIQUES2. LES OP2. LES OPÉÉRATIONS SPRATIONS SPÉÉCIFIQUESCIFIQUES

Notion : Complément

Ensemble des tuples du produit cartésien des domaines des attributs d’une relation n’apparte­nant pas à cette relation.

Le complément d’une relation RELATION i est noté au choix:• NOT (RELATIONi)• COMP (RELATIONi)

Page 12: Langage SQL

0021266950863 12

5.4. ÉCLATEMENTL’éclatement [Fagin8O] est une opération qui n’appartient pas vraiment à l’algèbre relationnelle puisqu’elle donnedeux relations en résultats, à partir d’une. Elle est cependant utile pour partitionner une relation horizontalement en deux sous-relations. À ce titre, elle est considérée comme une extension de l’algèbre.

2. LES OPÉRATIONS SPÉCIFIQUES2. LES OP2. LES OPÉÉRATIONS SPRATIONS SPÉÉCIFIQUESCIFIQUES

Notion : EclatementOpération consistant à créer deux relations à partir d'une relation RELATION1 et d'une condition, la première contenant les tuples de RELATION1 vérifiant lacondition et la deuxième ceux ne la vérifiant pas

Cet opérateur appliqué à la relation RELATIONi génère donc deux relations R1 et R2 qui seraient obtenues par restriction comme suit:• R1 = RESTRICT (RELATIONi, Condition)• R2 = RESTRICT (RELATIONi, Non Condition)

Page 13: Langage SQL

0021266950863 13

6.1. LANGAGE ALGEBRIQUEEn utilisant des expressions d’opérations de l’algèbre relationnelle, il est possible d’élaborer les réponses à la plupart des questions que l’on peut poser à une base de données relationnelle. Plus précisément, les opérations de base de l’algèbre relationnelle constitue un langage complet, c’est-à-dire ayant la puissance de la logique du premier ordre.Afin d’illustrer, nous exprimons quelques questions sur la base DEGUSTATION . Ces questions peuvent être exprimées commedes expressions d’opérations, ou comme des opérations successives appliquées sur des relations intermédiaires ou de base,générant des relations intermédiaires. Pour des raisons de clarté, nous avons choisi cette deuxième représentation.

L’expression peut être obtenue simplement en supprimant les relations intermédiaires notées Ri.

(Q1) Donner les degrés des vins de crus MORGON et de MILLESIME 1978:R1 = RESTRICT (VINS, CRUS = “MORGON”)R2 = RESTRICT (VINS, MILLESIME = 1978)R3 = INTERSECT (R1, R2)RESULTAT = PROJECT (R3, DEGRE)(Q2) Donner les noms et prénoms des buveurs de MORGON ou CHENAS:Ri = RESTRICT (VINS, CRU = “MORGON”)R2 = (VINS, CRUS = “CHENAS”)R3 = UNION (R1, R2)R4 = JOIN (R3, ABUS)R5 = JOIN (R4, BUVEURS)RESULTAT = PROJECT (R5, NOM, PRENOM)(Q3) Donner les noms et adresses des buveurs ayant bu plus de 10 bouteilles de Chablis 1976 avec le degré de ce vin:R1 = RESTRICT (ABUS, QUANTITE>10)R2 = RESTRICT (VINS, CRU = “CHABLIS”)R3 = RESTRICT (VINS, MILLESIME = 1976)R4 = INTERSECT (R2, R3)R5 = JOIN (R1, R4)R6 = PROJECT (R5, NB, DEGRE)R7 = JOIN (R6, BUVEURS)RESULTAT = PROJECT (R7, NOM, ADRESSE, DEGRE)(Q4) Donner les noms des buveurs n’ayant bu que du Morgon:R1 = JOIN(BUVEURS,ABUS,VINS)R2 = RESTRICT(R1, CRU = “MORGON”)R3 = PROJECT(R2, NOM)R4 = RESTRICT(R1, CRU ≠ “MORGON”)R5 = PROJECT(R1, NOM)RESULTAT = MINUS(R3 - R5)

Page 14: Langage SQL

0021266950863 14

IntroductionIntroductionIntroduction

1. De quoi s'agit-il

Les bases d'un langage structuré d'interrogation de bases de données sont apparues à l'occasion de la publication d'un article de Mr CHAMBERLIN et Mr BOYCE en 1974. Ce premier langage s'appelait SEQUEL.

SQUARE qui utilisait les expressions mathématiques vît le jour en 1975.

SQL(Structured Query Language) apparaît en 1980 et continue à couler des jours heureux sur gros systèmes et micro-ordinateurs. De nombreux fournisseurs de logiciels proposent l'utilisation de ce langage.

Parmi les principaux S.G.B.D.R. possédant l'interface S.Q.L.; nous pouvons citer :- ACCESS (sous Dos et Windows)- SQL Server sous Windows)- ORACLE (sous MS/DOS; MVS, ...)- DATABASE MANAGER (sous OS/2)- DB2/400 (sur AS/400)- SQL/DS (sous DOS/VSE, VM/CMS)- DB2 (sous MVS)- ...

Le SQL standard a été défini par ANSI (American National Standard Institute) C'est un langaged'interrogation de bases de données relationnelles

Page 15: Langage SQL

0021266950863 15

1 Concepts base de données relationnelles1 Concepts base de donn1 Concepts base de donnéées relationnelleses relationnelles

1- Domaine, attribut & relation

Tout au long de ce chapitre, nous imagerons notre discours par un cas dont le thème sera le cinéma.

Nous allons créer et faire vivre une « base de données » que nous nommerons « CINEMA » et qui va contenirun certain nombre d’informations sur les acteurs, leurs nationalité, les films dans lesquels ils ont joué, et lespersonnes « non acteurs » qui ont participé à l’élaboration des films (type d'intervention : metteur en scène,habilleuse, script ; ....)

Certaines données qualifient l’acteur : son nom , son prénom, sa date de naissance (chut, faut pas le dire) etsa nationalité.

D’autres qualifient ou caractérisent le film : le titre, la date de sortie, le nombre de spectateurs l’ayant déjà vu

Par contre, il faut indiquer la participation de l’acteur à un film : ceci caractérise un lien entre un acteur et un f

Page 16: Langage SQL

0021266950863 16

Nous pouvons représenter ces informations avec la structure suivante

Les flèches mettent en évidence des informations que l’on retrouve d’une table à l’autre :

Page 17: Langage SQL

0021266950863 17

Quelles sont les flèches qui manquent ?

Exemple de requête que nous pourrons faire avec SQL : retrouver tous les films ayant eu des acteurs de nationalité

«française».

Tout d’abord, on recherche le code de la nationalité dont le libellé est «française» soit "033".

Puis, on recherche dans la table acteurs, les acteurs ayant pour code nationalité «033»

Ensuite par la consultation de ROLES, on recherche tous les films de cet acteur

On répète ceci pour chaque acteur sélectionné

La base de données relationnelle CINEMAest constituée de tables:

ActeursRôlesNationalitésFilmsIntervenantsTaches

Cette base de données est «relationnelle» car des éléments permettent de passer d’une table à l’autre: (on appelle souvent

cela la navigation dans la base de données).

Dans la table ACTEURS, nous avons des colonnes: nom prénom date de naissance code nationalité.

Dans cette même table, on trouvera une ligne (enregistrement) par acteur:

Une table est donc un ensemble de lignes et de colonnes.

Page 18: Langage SQL

0021266950863 18

Il est donc possible de représenter une table sous forme de tableau avec un contenu :

ACTEURS Nom Prénom Date Nais. Cod Nat.é ClassementBéart Emmanuelle 15/01/1960 033 250

Blanc Michel 20/04/1952 033 560

Douglas Kirk 12/01/1928 100 50

Douglas Michael 16/05/1955 100 3

Durand Al 01/04/1915 033

Maintenant, nous allons introduire une notion nouvelle: le domaine

C'est l'ensemble des valeurs caractérisant un nom de donnée.

Dans notre exemple, si nous regardons le code nationalité, il prend des valeurs entières (symbolisées par n)

Comprises entre 001 et 999, 033 étant la valeur pour la France.

Page 19: Langage SQL

0021266950863 19

2- La notion de contraintes

Cohérence : toute valeur prise par une colonne doit appartenir à son domaine de définition.

Atomicité : une colonne ne doit pas pouvoir se décomposer.

Unicité : chaque ligne d'une table doit être unique afin de pouvoir l'isoler.

Clef primaire ou identifiant pour pouvoir identifier une ligne parmi toutes les lignes de la tables.

Page 20: Langage SQL

0021266950863 20

Quelques opérations relationnelles

1- Restriction ou Sélection :

Page 21: Langage SQL

0021266950863 21

2- Projection

Page 22: Langage SQL

0021266950863 22

3- Jointure

Page 23: Langage SQL

0021266950863 23

4- Produit cartésien

Page 24: Langage SQL

0021266950863 24

5- Union

Page 25: Langage SQL

0021266950863 25

6- Différence

Page 26: Langage SQL

0021266950863 26

Un peu de mise en pratique:

À partir de la base "Cinéma" décrite dans le chapitre précédant, indiquer quelles sont les

opérations à effectuer sur les tables pour répondre aux questions suivantes :

Quels sont les acteurs de nationalité française.?

Quels acteurs ont été aussi metteurs en scène ?

Quels sont les films ayant eu un metteur en scène de nationalité "hongroise" ?

Page 27: Langage SQL

0021266950863 27

3- Le langage S.Q.L & ses composantes

Pour le dictionnaire, le langage est la manière de s'exprimer au moyen de symboles.

Parmi les symboles de SQL, nous trouvons des verbes qui peuvent se classer en quatre chapitres :DDL Data Définition Language

permet de définir une base de données et ses éléments.

DML Data Management Languagepermet de gérer, manipuler les éléments d'une base de données.

DCL Data Control languagepermet d'effectuer des contrôles sur les données.

QUERY permet d'interroger une base de données en les sélectionnant.

Autre particularité de ce langage : ses mots clés.

Page 28: Langage SQL

0021266950863 28

AAlter viewAlter DatabaseAlter procedureAlter TableAlter triggerBBeginBreakCCaseCloseContinueCreate DatabaseCreate IndexCreate ProcedureCreate TableCreate triggerCreate viewDDeallocateDeclare cursorDeclare variableDeleteDrop DatabaseDrop procedureDrop TableDrop triggerDrop view

EElseEndFFetchGGotoIIfInsert intoOOpenRReturnSSet variableUUpdateWWhile

Page 29: Langage SQL

0021266950863 29

3- Découverte de SqlServer

Page 30: Langage SQL

0021266950863 30

Page 31: Langage SQL

0021266950863 31

2- Définition d une base de données relationnelle

2-1 Création d'une base de données

Page 32: Langage SQL

0021266950863 32

Page 33: Langage SQL

0021266950863 33

Page 34: Langage SQL

0021266950863 34

Page 35: Langage SQL

0021266950863 35

Page 36: Langage SQL

0021266950863 36

Page 37: Langage SQL

0021266950863 37

Page 38: Langage SQL

0021266950863 38

Page 39: Langage SQL

0021266950863 39

Page 40: Langage SQL

0021266950863 40

Page 41: Langage SQL

0021266950863 41

Page 42: Langage SQL

0021266950863 42

Page 43: Langage SQL

0021266950863 43

Page 44: Langage SQL

0021266950863 44

Page 45: Langage SQL

0021266950863 45

Page 46: Langage SQL

0021266950863 46

Page 47: Langage SQL

0021266950863 47

Page 48: Langage SQL

0021266950863 48

Alimentation d'une base de données relationnelle

Page 49: Langage SQL

0021266950863 49

Page 50: Langage SQL

0021266950863 50

Page 51: Langage SQL

0021266950863 51

Modification des valeurs dans les colonnes UPDATE

Page 52: Langage SQL

0021266950863 52

Page 53: Langage SQL

0021266950863 53

Suppression dans une table DELETE

Page 54: Langage SQL

0021266950863 54

Ajoutez la colonne trésor à la table monarque puis créez un script permettant de charger cette table avecles données ci-dessous

Page 55: Langage SQL

0021266950863 55

Extraction d'informations : SELECT

Page 56: Langage SQL

0021266950863 56

Page 57: Langage SQL

0021266950863 57

Page 58: Langage SQL

0021266950863 58

Page 59: Langage SQL

0021266950863 59

Page 60: Langage SQL

0021266950863 60

Page 61: Langage SQL

0021266950863 61

Page 62: Langage SQL

0021266950863 62

Page 63: Langage SQL

0021266950863 63

Page 64: Langage SQL

0021266950863 64

Page 65: Langage SQL

0021266950863 65

6 Les fonctions scalaires

Page 66: Langage SQL

0021266950863 66

Page 67: Langage SQL

0021266950863 67

Page 68: Langage SQL

0021266950863 68

Page 69: Langage SQL

0021266950863 69

Page 70: Langage SQL

0021266950863 70

Page 71: Langage SQL

0021266950863 71

Page 72: Langage SQL

0021266950863 72

Page 73: Langage SQL

0021266950863 73

Fonctions sur chaînes de caractères

Page 74: Langage SQL

0021266950863 74

SELECT DISTINCT

Page 75: Langage SQL

0021266950863 75

Fonctions scalaires

Page 76: Langage SQL

0021266950863 76

Page 77: Langage SQL

0021266950863 77

Fonctions conversion

Page 78: Langage SQL

0021266950863 78

Expressions calculées

Page 79: Langage SQL

0021266950863 79

Expressions calculées

Page 80: Langage SQL

0021266950863 80

Expressions calculées : concaténation

Page 81: Langage SQL

0021266950863 81

Les fonctions récapitulatives sur les colonnes

Page 82: Langage SQL

0021266950863 82

La clause GROUP BY

Page 83: Langage SQL

0021266950863 83

La clause HAVING

Page 84: Langage SQL

0021266950863 84

Page 85: Langage SQL

0021266950863 85

ActivitActivitéé nn°° 33 : : àà la recherche du temps des roisla recherche du temps des rois

Réfléchissez sur papier avant de vous lancer sur écranPassez les ordres SQL vous permettant de répondre aux demandes ci-dessous.Conservez votre script dans un fichier se trouvant dans votre dossier de travail. Pensez à sauvegarder votre base.

1 Sélection de tous les rois capétiens

2 Sélection de tous les rois carolingiens affichés par montant de trésor

3 Sélection des épouses par ordre décroissant de date de mariage

4 Sélection de tous les rois ayant eu plus d'une épouse

5 Combien y-a-t-il en moyenne d'enfants par dynastie ? (vérifiez bien le résultat obtenu)

6 Quel est le montant total du trésor des rois ayant eu plus d'une épouse ?

7 Augmentez le trésor des carolingiens de 70 %

8 Remettez le trésor des rois capétiens à zéro.

Page 86: Langage SQL

0021266950863 86

En résumé

SELECT DISTINCT liste des attributs résultatsFROM liste des tables WHERE conditions de prise en compteGROUP BY critères de regroupementHAVING conditions sur regroupementsORDER BY critères de tri des résultatsUNIONSELECT .......

Page 87: Langage SQL

0021266950863 87

Page 88: Langage SQL

0021266950863 88

Remplissage de colonnes par SELECT

Page 89: Langage SQL

0021266950863 89

Création de vue CREATE VIEW

Page 90: Langage SQL

0021266950863 90

Modification de vue ALTER VIEW

Page 91: Langage SQL

0021266950863 91

Création d'index CREATE INDEX

Page 92: Langage SQL

0021266950863 92

8- Entreprise ManagerJusqu'à maintenant nous avons fait utiliser l'analyseur de requêtes car lorsque vous programmez il vous est nécessaire d'écrire les requêtes. Il existe un outil vous permettant d'utiliser de nombreux assistants : c'est Enterprise Manager.

Pour y accéder, cliquez sur "Enterprise manager" : vous accédez à une fenêtre comportant dans sa partie gauche une liste à développer (cliquez sur +).Un écran pour authentification peut apparaître : indiquez le mot de passe de la connexion.

Page 93: Langage SQL

0021266950863 93

Vous obtiendrez un niveau supplémentaire dans l'arborescence.

En cliquant sur "Bases de données" vous développerez un niveau supplémentaire faisant apparaître toutes les bases de données actuellement répertoriées.

Page 94: Langage SQL

0021266950863 94

Lorsque vous êtes sur la liste des bases de données, en cliquant sur l'icône "Nouvelle", vous accédez à un assistant qui va réaliser une "create database".

Page 95: Langage SQL

0021266950863 95

Lorsque vous êtes sur une base de données précise, , en cliquant sur l'icône "Nouvelle", vous accédez à un assistant qui va réaliser une "create table".

Page 96: Langage SQL

0021266950863 96

Un tableau apparaît où il est possible de saisir les noms de colonnes, leur type, le faitqu'elles soient cle primaire, …

Vous pouvez passer par les options du menu action pour réaliser la même opération.

Page 97: Langage SQL

0021266950863 97

Par un clic doit sur un nom de table, vous obtiendrez un menu permettant en autre d'entrer et de modifier le contenu des colonnes vous évitant ainsi les Insert into, Update et Delete.

Page 98: Langage SQL

0021266950863 98

9 Programmation en SQL1 Création de type de données

Lorsque l'on crée une base de données, on utilise les types de données standards, mais il est fréquent quecertaines données est la même structure (par exemple, toutes les données montant sont numériques de

longueur 11 dont 2 décimales et peuvent ne pas être définies).Dans ce cas, il est pratique d'ajouter aux types de données standard des types de données "utilisateur" spécifiques à notre base. Ceci est possible par la procédure sp-addtype.

Exemple de commande

Exec sp_addtype Montant , ' numeric (11 2)' , 'NULL'

Create table STATIST (CodNationalite char (3) NOT NULL,TotalN1 Montant,TotalN2 Montant)

Page 99: Langage SQL

0021266950863 99

2 Création de TRIGGER

Un Trigger est une procédure stockée dans les objets de la base et qui se déclenche automatiquement dèsqu'une action de mise à jour est lancée sur la table (Insert, Update, Delete).

Ils sont très utiles pour renforcer la sécurité et l'intégrité des données.

On peut avoir plusieurs triggers par table.

CREATE TRIGGER <nom-déclencheur> ON <nomtable>FOR (INSERT, UPDATE, DELETE)AS

conditions de déclenchementinstructions SQL

Page 100: Langage SQL

0021266950863 100

Présentation de la base de données du Cas Pers :

Schema Logique de la base en modele relationnel :

UNITE ( Code Unité, Nom Unité, Unité mère, Budget )

QUALIFICATION ( Code Qualification, Intitulé )

EMPLOYE ( N°Matricule, Nom, Code Unité, Niveau, Titre, Sexe, Date de Naissance,Qualification Principale, Salaire )

QUALIFICATION SECONDAIRE ( N°Matricule, Code Qualification )

POSTE BUDGETAIRE ( Code Qualification, Code Unité, Quantité, Salaire autorisé )

Page 101: Langage SQL

0021266950863 101

Modèle physique de la base de données :

UNITCOD = UNITCOD

UNITCOD = UNITCOD

CODQUAL = CODQUAL

EMPCOD = EMPCOD

CODQUAL = CODQUAL

UNITEUNITCOD char(4)UNITE char(20)UMERE char(4)BUDGET money

QUALIFCODQUAL char(4)QUALIBEL char(20)

EMPLOYEEMPCOD char(5)UNITCOD char(4)NOM char(20)JOBCODE char(4)NIVEAU char(4)TITRE char(30)SEXE char(1)DATNAISS datetimeQUALIFPR char(4)SALAIRE numeric

EMPSQUALCODQUAL char(4)EMPCOD char(5)

POSTESCODQUAL char(4)UNITCOD char(4)NOMBRE numeric(2,2)BUDGETPOSTE numeric

Page 102: Langage SQL

0021266950863 102

Script SQL de la création des Tables de la Base de données du Cas Pers

/* ============================================================ *//* Table : UNITE *//* ============================================================ */create table UNITE(

UNITCOD char(4) not null,UNITE char(20) null ,UMERE char(4) null ,BUDGET money null ,constraint PK_UNITE primary key (UNITCOD)

)go/* ============================================================ *//* Table : QUALIF *//* ============================================================ */create table QUALIF(

CODQUAL char(4) not null,QUALIBEL char(20) null ,constraint PK_QUALIF primary key (CODQUAL)

)go

Page 103: Langage SQL

0021266950863 103

/* ============================================================ *//* Table : EMPLOYE *//* ============================================================ */create table EMPLOYE(

EMPCOD char(5) not null,UNITCOD char(4) not null,NOM char(20) null ,JOBCODE char(4) null ,NIVEAU char(4) null ,TITRE char(30) null ,SEXE char(1) null ,DATNAISS datetime null ,QUALIFPR char(4) null ,SALAIRE numeric null ,constraint PK_EMPLOYE primary key (EMPCOD)

)go/* ============================================================ *//* Table : EMPSQUAL *//* ============================================================ */create table EMPSQUAL(

CODQUAL char(4) not null,EMPCOD char(5) not null,constraint PK_EMPSQUAL primary key (CODQUAL, EMPCOD)

)go

Page 104: Langage SQL

0021266950863 104

/* ============================================================ *//* Table : POSTES *//* ============================================================ */create table POSTES(

CODQUAL char(4) not null,UNITCOD char(4) not null,NOMBRE numeric(2,2) null ,BUDGETPOSTE numeric null ,constraint PK_POSTES primary key (CODQUAL, UNITCOD)

)go

Page 105: Langage SQL

0021266950863 105

Cas pers : Exercices

Exercice 1Liste des responsables des unités 2100 et 2300.unitcod nom ------- --------------------2100 CARR, P.I. 2300 SONNENFELDT, W.R. (2 ligne(s) affectée(s))

Exercice 2Noms et dates de naissance des employés qui ne sont pas responsables d'unité et qui sont nés avant 1940.nom datnaiss

-------------------- ---------------------------ARTHUR, P.J. 1930-01-09 00:00:00.000BUSTER, A.B. 1938-07-19 00:00:00.000COMPTON, D.R. 1929-03-28 00:00:00.000CURTIS, K.R. 1936-03-04 00:00:00.000DIETERICH, L.J. 1925-04-23 00:00:00.000FLETCHER, M.W. 1932-07-29 00:00:00.000FRANCIS, G.C. 1932-11-11 00:00:00.000GRAY, S.R. 1923-07-03 00:00:00.000HENDERSON 1934-01-21 00:00:00.000HUSHES, J.W. 1935-01-20 00:00:00.000KENT, M.J. 1933-05-17 00:00:00.000LEGGETT, P.F. 1926-01-25 00:00:00.000LITTLE, E.F. 1938-03-02 00:00:00.000MELCHERT, F.F. 1935-08-13 00:00:00.000NORMAN, H.R. 1933-11-01 00:00:00.000RAYMOND, H.F. 1934-12-16 00:00:00.000SCARBOROUGH, J.B. 1914-09-14 00:00:00.000SILCOTT, D.N. 1920-10-10 00:00:00.000(18 ligne(s) affectée(s))

Page 106: Langage SQL

0021266950863 106

Exercice 3

Noms et titres des employés ayant leur nom commençant par un ‘a’.nom titre -------------------- ------------------------------ANDERSON, R.E. Chef Service Méthodes SystèmesARNETTE, L.J. Ingénieur ElectronicienARTHUR, P.J. Ingénieur (3 ligne(s) affectée(s))Exercice 4

Noms et date de naissance des employés ayant au moins deux A dans leur nom.nom titre -------------------- ------------------------------CALLAGAN, R.F. Secrétaire FINERMAN, A.B. Dessinateur MACCARTHY, J.K. Chef Service Qualité B MASSARD, L.R. Ingénieur ElectronicienSTADERMAN, P.K. Ingénieur Electronicien(5 ligne(s) affectée(s))Exercice 5

Noms et unités des employés ayant un salaire supérieur à 250000nom unitcod-------------------- -------CARR, P.I. 2100CHANDLER, W.R. 2130DIETERICH, L.J. 2190FRIEDMAN, J.M. 2112GODDARD, D.H. 2120GUTTMAN, G.J. 2110MAILLETT, J.R. 2310PETERSON, N.M. 2000SONNENFELDT, W.R. 2300WALTERS, R.J. 2111(10 ligne(s) affectée(s))

Page 107: Langage SQL

0021266950863 107

Exercice 6

Nom, unité, titre et date de naissance de tous les employés triés par numéro d'unité croissant (les plus jeunes d'abord)nom unitcod titre datnaiss-------------------- ------- ------------------------------ ------------LYNN, K.R. 2000 Secrétaire 1953-01-21 PETERSON, N.M. 2000 Responsable de Division 1928-06-07 CALLAGAN, R.F. 2100 Secrétaire 1955-05-17 CARR, P.I. 2100 Responsable Dept. Etudes 1935-07-02 HARRIS, D.L. 2110 Secrétaire 1955-05-17 GUTTMAN, G.J. 2110 Responsable Groupe Système 1930-11-10 GARBER, R.E. 2111 Ingénieur Electronicien 1944-07-07 HENDERSON 2111 Ingénieur Electronicien 1934-01-21 COMPTON, D.R. 2111 Responsable des Couts 1929-03-28 WALTERS, R.J. 2111 Chef du Service Developpement 1926-02-02 SCARBOROUGH, J.B. 2111 Ingénieur Mécanicien 1914-09-14 TOTO 2112 Ingénieur Electronicien 1950-07-15 BLANK, L.F. 2112 Dessinateur 1949-10-10 FAULKNER, W.M. 2112 Ingénieur Mécanicien 1940-06-21 FRIEDMAN, J.M. 2112 Chef du Service Etudes 1936-03-17 FRANCIS, G.C. 2112 Ingénieur Systèmes 1932-11-11 ..LEVITT, P.S. 2311 Régleur 1944-04-22 LITTLE, E.F. 2311 Régleur 1938-03-02 PAYNE, W.F. 2311 Chef Serv. Fabrication Export 1933-08-21 (56 ligne(s) affectée(s))

Page 108: Langage SQL

0021266950863 108

Exercice 7

Nom et unité des employés ayant une qualification principale de secrétaire.nom unitcod-------------------- -------BERGMAN, R.I. 2130CALLAGAN, R.F. 2100FRESCOTT, W.C. 2300GERRISH, C.S. 2120HARRIS, D.L. 2110LYNN, K.R. 2000MELCHERT, F.F. 2310(7 ligne(s) affectée(s))Exercice 8

Nom, unité et date de naissance des employés plus agés que leur responsable, avec nom, unité et date denaissance de celui-ci. ( Classé par unité )nom datnaiss unitcod nom datnaiss unitcod-------------------- ---------- ------- -------------------- ---------- --------SCARBOROUGH, J.B. 1914-09-14 2111 WALTERS, R.J. 1926-02-02 2111FRANCIS, G.C. 1932-11-11 2112 FRIEDMAN, J.M. 1936-03-17 2112ARTHUR, P.J. 1930-01-09 2115 BRIGGS, G.R. 1940-05-08 2115HUSHES, J.W. 1935-01-20 2123 SMITH, R.E. 1940-11-29 2123RAYMOND, H.F. 1934-12-16 2123 SMITH, R.E. 1940-11-29 2123MASSARD, L.R. 1943-02-23 2132 MACCARTHY, J.K. 1943-10-20 2132SILCOTT, D.N. 1920-10-10 2132 MACCARTHY, J.K. 1943-10-20 2132FLETCHER, M.W. 1932-07-29 2133 SCHRADER, F.G. 1942-09-09 2133KENT, M.J. 1933-05-17 2133 SCHRADER, F.G. 1942-09-09 2133LEGGETT, P.F. 1926-01-25 2133 SCHRADER, F.G. 1942-09-09 2133(10 ligne(s) affectée(s))

Page 109: Langage SQL

0021266950863 109

Exercice 9Nom et titre des employés plus agés que le responsable de l'unité 2000.nom titre -------------------- ------------------------------SILCOTT, D.N. Ingénieur ElectronicienSCARBOROUGH, J.B. Ingénieur Mécanicien WALTERS, R.J. Chef du Service DeveloppementHAMMER, C.P. Chef Serv. Qualité Production LEGGETT, P.F. Ingénieur Production GRAY, S.R. Outilleur SONNENFELDT, W.R. Responsable Département ExportDIETERICH, L.J. Resp. Groupe Recherche Ext. (8 ligne(s) affectée(s))Exercice 10Codes unités n'ayant pas d'unité rattachée.unitcod-------2111211221152122212321312132213321352190231123152316(13 ligne(s) affectée(s))

Page 110: Langage SQL

0021266950863 110

Exercice 11Nom des employés appartenant à la même unité que 'LEVITT, P.S.'nom --------------------LITTLE, E.F. PAYNE, W.F. (2 ligne(s) affectée(s))Exercice 12Code et nom des unités dépendant de la même unité que l'unité 2130.unitcod unite------- --------------------2110 Groupe Systèmes 2120 Groupe Méthodes 2190 Groupe Recherche Ext(3 ligne(s) affectée(s))Exercice 13Nom et date de naissance des employés plus agés que tous les employés de l'unité 2131.nom datnaiss-------------------- ---------------------------DIETERICH, L.J. 1925-04-23 00:00:00.000GRAY, S.R. 1923-07-03 00:00:00.000HAMMER, C.P. 1920-06-13 00:00:00.000LEGGETT, P.F. 1926-01-25 00:00:00.000PETERSON, N.M. 1928-06-07 00:00:00.000SCARBOROUGH, J.B. 1914-09-14 00:00:00.000SILCOTT, D.N. 1920-10-10 00:00:00.000SONNENFELDT, W.R. 1923-05-01 00:00:00.000WALTERS, R.J. 1926-02-02 00:00:00.000(9 ligne(s) affectée(s))

Page 111: Langage SQL

0021266950863 111

Exercice 14

Nom des employés sur le même poste budgétaire que 'LEVITT'.nom --------------------LITTLE, E.F. PAYNE, W.F. (2 ligne(s) affectée(s))Exercice 15

Code emploi et nom des employés de l'unité 2122 ayant même emploi que quelqu'un de l'unité 2132.jobcode nom ------- --------------------1130 STADERMAN, P.K. (1 ligne(s) affectée(s))Exercice 16

Code qualification et nom des employés de l'unité 2111 ayant même qualification principale ou secondaire que quelqu'un de l'unité 2123.

nom qualifpr-------------------- --------GARBER, R.E. 1330COMPTON, D.R. 1350WALTERS, R.J. 1110SCARBOROUGH, J.B. 1120HENDERSON 1130(5 ligne(s) affectée(s))

Page 112: Langage SQL

0021266950863 112

Exercice 17Même demande, mais avec le libellé de la qualification en clair.nom qualifpr qualibel-------------------- -------- --------------------WALTERS, R.J. 1110 Ingénieur Systèmes SCARBOROUGH, J.B. 1120 Ingénieur MécanicienHENDERSON 1130 Ingénieur ElectronicGARBER, R.E. 1330 Dessinateur COMPTON, D.R. 1350 Respons Coût (5 ligne(s) affectée(s))Exercice 18Nom et âge des employés de l'unité 2111 par ordre alphabétique.nom age -------------------- -----------COMPTON, D.R. 71GARBER, R.E. 56HENDERSON 66SCARBOROUGH, J.B. 86WALTERS, R.J. 74(5 ligne(s) affectée(s))Exercice 19Nom et âge des employés de l'unité 2111 par ordre alphabétique avec « ans »nom age -------------------- ----------- ----COMPTON, D.R. 71 ansGARBER, R.E. 56 ansHENDERSON 66 ansSCARBOROUGH, J.B. 86 ansWALTERS, R.J. 74 ans(5 ligne(s) affectée(s))

Page 113: Langage SQL

0021266950863 113

Exercice 20Salaire moyen de l'entreprisesalaire_moyen-------------216321(1 ligne(s) affectée(s))

Exercice 21Code unité, nom et nombre d'employés de chaque unité.unitcod unite nbr_employe------- -------------------- -----------2000 Division Commutation 22100 Département Etudes 22110 Groupe Systèmes 22111 Service Développemt 52112 Service Etudes 52115 Service Prototypes 32120 Groupe Méthodes 22122 Méthodes Systèmes 32123 Méthodes Protos 52130 Groupe Qualité 22131 Service Qualité A 42132 Service Qualité B 42133 Qualité Protos 52135 Qualité Production 42190 Groupe Recherche Ext 12300 Département Export 22310 Groupe Prod. Export 22311 Fabrication Export 3(18 ligne(s) affectée(s))Exercice 22Code, libellé et salaire moyen de l'emploi ayant le salaire moyen le plus basjobcode qualibel salaire_moyen------- -------------------- -------------5210 Secrétaire 97428(1 ligne(s) affectée(s))

Page 114: Langage SQL

0021266950863 114

Cas pers : Résultats des exercices

Exercice 1Liste des responsables des unités 2100 et 2300.SELECT DISTINCT employe.unitcod,employe.nomfrom employewhere ((employe.unitcod="2100") or (employe.unitcod="2300")) and employe.niveau="CHEF";unitcod nom ------- --------------------2100 CARR, P.I. 2300 SONNENFELDT, W.R. (2 ligne(s) affectée(s))Exercice 2Noms et dates de naissance des employés qui ne sont pas responsables d'unité et qui sont nés avant 1940.SELECT DISTINCT employe.nom,employe.datnaissfrom employewhere (employe.datnaiss<'1940') and (employe.niveau <> "chef");nom datnaiss-------------------- ---------------------------ARTHUR, P.J. 1930-01-09 00:00:00.000BUSTER, A.B. 1938-07-19 00:00:00.000COMPTON, D.R. 1929-03-28 00:00:00.000CURTIS, K.R. 1936-03-04 00:00:00.000DIETERICH, L.J. 1925-04-23 00:00:00.000FLETCHER, M.W. 1932-07-29 00:00:00.000FRANCIS, G.C. 1932-11-11 00:00:00.000GRAY, S.R. 1923-07-03 00:00:00.000HENDERSON 1934-01-21 00:00:00.000HUSHES, J.W. 1935-01-20 00:00:00.000KENT, M.J. 1933-05-17 00:00:00.000LEGGETT, P.F. 1926-01-25 00:00:00.000LITTLE, E.F. 1938-03-02 00:00:00.000MELCHERT, F.F. 1935-08-13 00:00:00.000NORMAN, H.R. 1933-11-01 00:00:00.000RAYMOND, H.F. 1934-12-16 00:00:00.000SCARBOROUGH, J.B. 1914-09-14 00:00:00.000SILCOTT, D.N. 1920-10-10 00:00:00.000(18 ligne(s) affectée(s))

Page 115: Langage SQL

0021266950863 115

Exercice 3Noms et titres des employés ayant leur nom commençant par un ‘a’.SELECT DISTINCT employe.nom,employe.titrefrom employewhere ((employe.nom like"a%"));nom titre -------------------- ------------------------------ANDERSON, R.E. Chef Service Méthodes SystèmesARNETTE, L.J. Ingénieur ElectronicienARTHUR, P.J. Ingénieur (3 ligne(s) affectée(s))Exercice 4Noms et date de naissance des employés ayant au moins deux A dans leur nom.SELECT DISTINCT employe.nom,employe.datnaissfrom employewhere ((employe.nom like "%a%a%"));nom titre -------------------- ------------------------------CALLAGAN, R.F. Secrétaire FINERMAN, A.B. Dessinateur MACCARTHY, J.K. Chef Service Qualité B MASSARD, L.R. Ingénieur ElectronicienSTADERMAN, P.K. Ingénieur Electronicien(5 ligne(s) affectée(s))

Page 116: Langage SQL

0021266950863 116

Exercice 5

Noms et unités des employés ayant un salaire supérieur à 250000SELECT DISTINCT employe.nom,employe.unitcod

from employewhere ((employe.salaire>250000));nom unitcod-------------------- -------CARR, P.I. 2100CHANDLER, W.R. 2130DIETERICH, L.J. 2190FRIEDMAN, J.M. 2112GODDARD, D.H. 2120GUTTMAN, G.J. 2110MAILLETT, J.R. 2310PETERSON, N.M. 2000SONNENFELDT, W.R. 2300WALTERS, R.J. 2111(10 ligne(s) affectée(s))Exercice 6

Nom, unité, titre et date de naissance de tous les employés triés par numéro d'unité croissant (les plus jeunes d'abord)SELECT DISTINCT nom,unitcod,titre,datnaissfrom employeorder by unitcod asc,datnaiss desc;nom unitcod titre datnaiss-------------------- ------- ------------------------------ --------------------LYNN, K.R. 2000 Secrétaire 1953-01-21 PETERSON, N.M. 2000 Responsable de Division 1928-06-07 CALLAGAN, R.F. 2100 Secrétaire 1955-05-17 CARR, P.I. 2100 Responsable Dept. Etudes 1935-07-02 HARRIS, D.L. 2110 Secrétaire 1955-05-17

Page 117: Langage SQL

0021266950863 117

Exercice 7Nom et unité des employés ayant une qualification principale de secrétaire.SELECT DISTINCT employe.nom,employe.unitcodfrom employe,qualifwhere (employe.qualifpr=qualif.codqual and qualif.qualibel='Secrétaire') ;nom unitcod-------------------- -------BERGMAN, R.I. 2130CALLAGAN, R.F. 2100FRESCOTT, W.C. 2300GERRISH, C.S. 2120HARRIS, D.L. 2110LYNN, K.R. 2000MELCHERT, F.F. 2310(7 ligne(s) affectée(s))Exercice 8Nom, unité et date de naissance des employés plus agés que leur responsable, avec nom, unité et date de naissance de celui-ci. ( Classé par unité )SELECT DISTINCT employe.nom,employe.datnaiss,employe.unitcod,employe_2.nom,employe_2.datnaiss,employe_2.unitcodfrom employe, employe as employe_2where ((employe.unitcod=employe_2.unitcod) and (employe.datnaiss<employe_2.datnaiss)and (employe_2.niveau like "chef"))order by employe.unitcodnom datnaiss unitcod nom datnaiss unitcod-------------------- ---------- ------- -------------------- ---------- --------SCARBOROUGH, J.B. 1914-09-14 2111 WALTERS, R.J. 1926-02-02 2111FRANCIS, G.C. 1932-11-11 2112 FRIEDMAN, J.M. 1936-03-17 2112ARTHUR, P.J. 1930-01-09 2115 BRIGGS, G.R. 1940-05-08 2115HUSHES, J.W. 1935-01-20 2123 SMITH, R.E. 1940-11-29 2123RAYMOND, H.F. 1934-12-16 2123 SMITH, R.E. 1940-11-29 2123MASSARD, L.R. 1943-02-23 2132 MACCARTHY, J.K. 1943-10-20 2132SILCOTT, D.N. 1920-10-10 2132 MACCARTHY, J.K. 1943-10-20 2132FLETCHER, M.W. 1932-07-29 2133 SCHRADER, F.G. 1942-09-09 2133KENT, M.J. 1933-05-17 2133 SCHRADER, F.G. 1942-09-09 2133LEGGETT, P.F. 1926-01-25 2133 SCHRADER, F.G. 1942-09-09 2133(10 ligne(s) affectée(s))

Page 118: Langage SQL

0021266950863 118

Exercice 9

Nom et titre des employés plus agés que le responsable de l'unité 2000.SELECT employe.nom,employe.titrefrom employe, employe as employe_2where (employe_2.unitcod='2000') and (employe_2.niveau='CHEF') and (employe.datnaiss<employe_2.datnaiss)nom titre -------------------- ------------------------------SILCOTT, D.N. Ingénieur ElectronicienSCARBOROUGH, J.B. Ingénieur Mécanicien WALTERS, R.J. Chef du Service DeveloppementHAMMER, C.P. Chef Serv. Qualité Production LEGGETT, P.F. Ingénieur Production GRAY, S.R. Outilleur SONNENFELDT, W.R. Responsable Département ExportDIETERICH, L.J. Resp. Groupe Recherche Ext. (8 ligne(s) affectée(s))

Page 119: Langage SQL

0021266950863 119

Exercice 10Codes unités n'ayant pas d'unité rattachée.SELECT unite.unitcodfrom unitewhere unite.unitcod not in (select unite.umere from unite)unitcod-------2111211221152122212321312132213321352190231123152316(13 ligne(s) affectée(s))Exercice 11Nom des employés appartenant à la même unité que 'LEVITT, P.S.'SELECT DISTINCT employe.nomfrom employewhere employe.unitcod = (select employe.unitcod from employe where employe.nom="LEVITT, P.S.")

and employe.nom<>"LEVITT, P.S."nom --------------------LITTLE, E.F. PAYNE, W.F. (2 ligne(s) affectée(s))

Page 120: Langage SQL

0021266950863 120

Exercice 12Code et nom des unités dépendant de la même unité que l'unité 2130.SELECT DISTINCT unite.unitcod,unite.unitefrom unitewhere unite.umere=( select unite.umere from unite where unite.unitcod='2130' ) and unite.unitcod <>'2130'unitcod unite ------- --------------------2110 Groupe Systèmes 2120 Groupe Méthodes 2190 Groupe Recherche Ext(3 ligne(s) affectée(s))Exercice 13Nom et date de naissance des employés plus agés que tous les employés de l'unité 2131.SELECT DISTINCT employe.nom,employe.datnaissfrom employewhere employe.datnaiss < ( select min(employe.datnaiss)

from employewhere employe.unitcod="2131")

nom datnaiss -------------------- ---------------------------DIETERICH, L.J. 1925-04-23 00:00:00.000GRAY, S.R. 1923-07-03 00:00:00.000HAMMER, C.P. 1920-06-13 00:00:00.000LEGGETT, P.F. 1926-01-25 00:00:00.000PETERSON, N.M. 1928-06-07 00:00:00.000SCARBOROUGH, J.B. 1914-09-14 00:00:00.000SILCOTT, D.N. 1920-10-10 00:00:00.000SONNENFELDT, W.R. 1923-05-01 00:00:00.000WALTERS, R.J. 1926-02-02 00:00:00.000(9 ligne(s) affectée(s))

Page 121: Langage SQL

0021266950863 121

Exercice 14

Nom des employés sur le même poste budgétaire que 'LEVITT'.Select distinct employe.nomfrom employe,empsqualwhere employe.unitcod=( select employe.unitcod

from employewhere employe.nom="levitt, p.s.")

and empsqual.empcod in (select distinct empsqual.empcodfrom empsqualwhere empsqual.empcod=( select distinct employe.empcod

from employewhere employe.nom="levitt, p.s."))

and employe.nom<>"levitt, p.s."nom --------------------LITTLE, E.F. PAYNE, W.F. (2 ligne(s) affectée(s))Exercice 15

Code emploi et nom des employés de l'unité 2122 ayant même emploi que quelqu'un de l'unité 2132.SELECT DISTINCT employe.jobcode,employe.nomfrom employe as employe_2,employewhere ((employe.unitcod="2122") and (employe_2.unitcod="2132") and (employe_2.jobcode=employe.jobcode));jobcode nom ------- --------------------1130 STADERMAN, P.K. (1 ligne(s) affectée(s))

Page 122: Langage SQL

0021266950863 122

Exercice 16Code qualification et nom des employés de l'unité 2111 ayant même qualification principale ou secondaire que quelqu'un de l'unité 2123.select distinct employe.nom, employe.qualifprfrom employe, qualif,empsqualwhere employe.unitcod=2111 and ((employe.qualifpr in (select employe.qualifpr

from employewhere employe.unitcod=2123))

or (employe.qualifpr in (select empsqual.codqualfrom empsqualwhere employe.unitcod=2123))

or (empsqual.codqual in (select employe.qualifprfrom employewhere employe.unitcod=2123))

or (empsqual.codqual in (select empsqual.codqualfrom empsqualwhere employe.unitcod=2123))

)/* ou */select distinct employe.nom, employe.qualifprfrom employe as employe_2, employe, empsqual as empsqual_2, empsqualwhere employe.unitcod=2111 and (employe.qualifpr=employe_2.qualifpr

or empsqual.codqual=empsqual_2.codqual)and employe_2.unitcod=2123

nom qualifpr-------------------- --------GARBER, R.E. 1330COMPTON, D.R. 1350WALTERS, R.J. 1110SCARBOROUGH, J.B. 1120HENDERSON 1130(5 ligne(s) affectée(s))

Page 123: Langage SQL

0021266950863 123

Exercice 17Même demande, mais avec le libellé de la qualification en clair.select distinct employe.nom, employe.qualifpr,qualif.qualibelfrom employe as employe_2, employe, empsqual as empsqual_2, empsqual,qualif, qualif as qualif_2where employe.unitcod=2111 and (employe.qualifpr=employe_2.qualifpr or empsqual.codqual=empsqual_2.codqual)

and employe_2.unitcod=2123and employe.qualifpr=qualif.codqualand qualif.qualibel=qualif_2.qualibel

nom qualifpr qualibel-------------------- -------- --------------------WALTERS, R.J. 1110 Ingénieur Systèmes SCARBOROUGH, J.B. 1120 Ingénieur MécanicienHENDERSON 1130 Ingénieur ElectronicGARBER, R.E. 1330 Dessinateur COMPTON, D.R. 1350 Respons Coût (5 ligne(s) affectée(s))Exercice 18Nom et âge des employés de l'unité 2111 par ordre alphabétique.SELECT DISTINCT employe.nom ,( datediff (year,employe.datnaiss,current_timestamp))as age,from employewhere ((employe.unitcod=2111) )order by employe.nom asc;nom age -------------------- -----------COMPTON, D.R. 71GARBER, R.E. 56HENDERSON 66SCARBOROUGH, J.B. 86WALTERS, R.J. 74(5 ligne(s) affectée(s))

Page 124: Langage SQL

0021266950863 124

Exercice 19Nom et âge des employés de l'unité 2111 par ordre alphabétique avec « ans »SELECT DISTINCT employe.nom ,( datediff (year,employe.datnaiss,current_timestamp))as age, "ans"from employewhere ((employe.unitcod=2111) )order by employe.nom asc;nom age -------------------- ----------- ----COMPTON, D.R. 71 ansGARBER, R.E. 56 ansHENDERSON 66 ansSCARBOROUGH, J.B. 86 ansWALTERS, R.J. 74 ans(5 ligne(s) affectée(s))Exercice 20Salaire moyen de l'entrepriseselect distinct avg (employe.salaire) as salaire_moyenfrom employesalaire_moyen-------------216321(1 ligne(s) affectée(s))

Page 125: Langage SQL

0021266950863 125

Exercice 21Code unité, nom et nombre d'employés de chaque unité.select distinct unite.unitcod,unite.unite,count (employe.unitcod) as nbr_employefrom employe , unite where((unite.unitcod = employe.unitcod))group by unite.unitcod , unite.uniteunitcod unite nbr_employe------- -------------------- -----------2000 Division Commutation 22100 Département Etudes 22110 Groupe Systèmes 22111 Service Développemt 52112 Service Etudes 52115 Service Prototypes 32120 Groupe Méthodes 22122 Méthodes Systèmes 32123 Méthodes Protos 52130 Groupe Qualité 22131 Service Qualité A 42132 Service Qualité B 42133 Qualité Protos 52135 Qualité Production 42190 Groupe Recherche Ext 12300 Département Export 22310 Groupe Prod. Export 22311 Fabrication Export 3(18 ligne(s) affectée(s))

Page 126: Langage SQL

0021266950863 126

Exercice 22Code, libellé et salaire moyen de l'emploi ayant le salaire moyen le plus basselect employe.jobcode,qualif.qualibel,avg(employe.salaire)as salaire_moyenfrom employe,qualifwhere (qualif.codqual=employe.jobcode) group by EMPLOYE.jobcode,qualif.qualibelhaving avg (employe.salaire) <= all ( select avg (employe.salaire)

from employegroup by employe.jobcode)

jobcode qualibel salaire_moyen------- -------------------- -------------5210 Secrétaire 97428(1 ligne(s) affectée(s))

Page 127: Langage SQL

0021266950863 127

Pour plus d’information veuillez me contacter