Você está na página 1de 462

Rcupration des donnes l'aide de l'instruction SQL SELECT

Copyright 2007, Oracle. All rights reserved.

Objectif
Aprs avoir termin cette leon, vous devriez tre en mesure de faire ce qui suit: Liste des capacits des instructions SELECT SQL Excuter une instruction SELECT de base

1-2

Copyright 2007, Oracle. All rights reserved.

objectifs Pour extraire des donnes de la base de donnes, vous devez utiliser l'instruction SQL SELECT. Cependant, vous devrez peut-tre limiter les colonnes qui sont affiches. Cette leon dcrit toutes les instructions SQL qui sont ncessaires pour effectuer ces actions. En outre, vous pouvez crer des instructions SELECT qui peuvent tre utiliss plus d'une fois.

Oracle Database 11g: SQL Fundamentals I 1 - 2

Agenda de leon
base instruction SELECT Les expressions arithmtiques et des valeurs NULL dans l'instruction SELECT alias de colonnes L'utilisation de l'oprateur de concatnation des chanes de caractres littrales, citant l'oprateur alternatif, et le mot-cl DISTINCT commande DESCRIBE

1-3

Copyright 2007, Oracle. All rights reserved.

Oracle Database 11g: SQL Fundamentals I 1 - 3

Capacits de requtes SQL SELECT

Projection

Selection

Table 1 Jointure

Table 1

Table 1
1-4

Table 2
Copyright 2007, Oracle. All rights reserved.

Capacits de requtes SQL SELECT Une instruction SELECT rcupre les informations de la base de donnes. Avec une instruction SELECT, vous pouvez utiliser les fonctionnalits suivantes: Projection: Slectionner les colonnes d'une table qui sont retournes par une requte. Slectionnez aussi peu ou autant de colonnes que ncessaire. Slection: Slectionnez les lignes d'une table qui sont retournes par une requte. Plusieurs critres peuvent tre utiliss pour restreindre les lignes qui sont rcupres. Jointure: Runir les donnes qui sont stockes dans des tables diffrentes en spcifiant le lien entre eux. Jointures SQL sont traits plus en dtail dans la leon intitule Affichage des donnes dans plusieurs tables."

Oracle Database 11g: SQL Fundamentals I 1 - 4

Base instruction SELECT

SELECT *|{[DISTINCT] column|expression [alias],...} FROM table;

SELECT identifie les colonnes afficher. FROM identifie la table contenant les colonnes

1-5

Copyright 2007, Oracle. All rights reserved.

base instruction SELECT Dans sa forme la plus simple, une instruction SELECT doit comprendre les lments suivants: Une clause SELECT, qui spcifie les colonnes afficher Une clause FROM, qui identifie la table contenant les colonnes rpertories dans la clause SELECT Dans la syntaxe: SELECT une liste d'une ou plusieurs colonnes * slectionne toutes les colonnes DISTINCT supprime les doublons column|expression slectionne la colonne nomme ou l'expression alias donne les colonnes slectionnes diffrentes rubriques FROM table spcifie le tableau contenant les colonnes Remarque: Tout au long de ce cours, le mot cl mots, clause, et la dclaration sont utiliss comme suit: Un mot cl renvoie un lment individuel SQL.? Par exemple, SELECT et FROM sont des mots-cls. Une clause est une partie d'une instruction SQL.? Par exemple, SELECT employe_id, last_name, et ainsi de suite est une clause. Une instruction est une combinaison de deux ou plusieurs clauses.? Par exemple, SELECT * FROM employs est une instruction SQL.
Oracle Database 11g: SQL Fundamentals I 1 - 5

Selection de toutes les Collonnes

SELECT * FROM departments;

1-6

Copyright 2007, Oracle. All rights reserved.

Slection de toutes les colonnes Vous pouvez afficher toutes les colonnes de donnes dans une table en suivant le mot-cl SELECT avec un astrisque (*). Dans l'exemple de la diapositive, dans la table department contient quatre colonnes: departement_id, DEPARTMENT_NAME, manager_id et LOCATION_ID. Le tableau contient huit lignes, une pour chaque dpartement. Vous pouvez galement afficher toutes les colonnes de la table en numrant toutes les colonnes aprs le mot-cl SELECT. Par exemple, l'instruction SQL suivante (comme l'exemple de la diapositive) affiche toutes les colonnes et toutes les lignes de la table DPARTEMENTS: SELECT departement_id, department_name, manager_id, LOCATION_ID FROM DEPARTEMENT; Remarque: Dans SQL Developer, vous pouvez entrer votre requte SQL dans une feuille de calcul SQL et cliquez sur "Excuter l'instruction" icne ou appuyez sur [F9] pour excuter l'instruction. La sortie affiche dans la page de rsultats onglets apparat comme indiqu dans la diapositive.

Oracle Database 11g: SQL Fundamentals I 1 - 6

Slectionner des colonnes spcifiques

SELECT department_id, location_id FROM departments;

1-7

Copyright 2007, Oracle. All rights reserved.

Slectionner des colonnes particulires Vous pouvez utiliser l'instruction SELECT pour afficher des colonnes spcifiques de la table en spcifiant les noms de colonnes, spars par des virgules. L'exemple de la diapositive affiche tous les numros de dpartement et les numros de localisation partir de la table Departments. Dans la clause SELECT, spcifiez les colonnes ce que que vous voulez dans l'ordre dans lequel que vous voulez qu'ils apparatre dans le de sortie. Par exemple, pour afficher l'emplacement avant le numro de dpartement (de gauche droite), vous utilisez l'instruction suivante :
SELECT location_id, department_id FROM departments;

Oracle Database 11g: SQL Fundamentals I 1 - 7

criture d'instructions SQL


Instructions SQL ne sont pas sensibles la casse. SQL peut tre inscrit sur une ou plusieurs lignes. Mots-cls ne peuvent pas tre abrge ou sur plusieurs lignes. Clauses sont gnralement placs sur des lignes spares. Tirets sont utiliss pour amliorer la lisibilit. Dans SQL Developer, SQL peuvent ventuellement tre termine par un point-virgule (;). Points-virgules sont ncessaires lorsque vous excutez plusieurs instructions SQL. Dans SQL * Plus, vous devez terminer chaque instruction SQL avec un point-virgule (;).

1-8

Copyright 2007, Oracle. All rights reserved.

Rdaction d'instructions SQL En utilisant les rgles simples suivantes et les lignes directrices, vous pouvez construire des noncs valides qui sont la fois facile lire et modifier: Instructions SQL ne sont pas sensibles la casse (sauf indication contraire). Les instructions SQL peuvent tre inscrits sur une ligne ou d'autres. Mots-cls ne peuvent pas tre rpartis sur plusieurs lignes ou abrgs. Clauses sont gnralement placs sur des lignes spares pour la lisibilit et la facilit de montage. Tirets doit tre utilis pour rendre le code plus lisible. Mots-cls sont gnralement en majuscules, tous les autres mots, tels que les noms de tables et colonnes sont entrs en minuscules. Excution d'instructions SQL Dans SQL Developer, cliquez sur l'icne Excuter le script ou appuyez sur [F5] pour excuter la ou les commandes dans la feuille de calcul SQL. Vous pouvez galement cliquer sur l'icne Dclaration Excuter ou appuyez sur [F9] pour excuter une instruction SQL dans la feuille de calcul SQL. La Dclaration icne Excuter excute l'instruction au niveau du pointeur de la souris dans la zone Entrez l'instruction SQL lorsque l'icne Excuter le script excute toutes les instructions de la bote de dialogue Entrer une instruction SQL. L'icne Dclaration Excuter affiche le rsultat de la requte sur la page des rsultats onglets lorsque l'icne Excuter le script mule SQL * Plus d'affichage et affiche le rsultat sur la page de sortie Script onglets. Dans SQL * Plus, mettre fin l'instruction SQL avec un point-virgule, puis appuyez sur [Entre] pour excuter la commande.
Oracle Database 11g: SQL Fundamentals I 1 - 8

entte de colonne par dfaut


SQL Developer:
Par dfaut alignement de rubrique: gauche Par dfaut affichage rubrique : Majuscules

SQL * Plus:
enttes de colonne de caractres et la date sont aligns gauche. Enttes de colonne Nombre sont aligns droite. Par dfaut rubrique affichage: Majuscules

1-9

Copyright 2007, Oracle. All rights reserved.

Tte de colonne par dfaut Dans SQL Developer, ttes de colonne sont affichs en majuscules et sont alignes gauche. SELECT last_name, hire_date, le salaire FROM employs;

Vous pouvez remplacer l'affichage tte de colonne avec un alias. Alias de colonnes sont traits plus loin dans cette leon.

Oracle Database 11g: SQL Fundamentals I 1 - 9

Agenda de leon
base instruction SELECT Les expressions arithmtiques et des valeurs NULL dans l'instruction SELECT alias de colonnes L'utilisation de l'oprateur de concatnation des chanes de caractres littrales, citant l'oprateur alternatif, et le mot-cl DISTINCT commande DESCRIBE

1 - 10

Copyright 2007, Oracle. All rights reserved.

Oracle Database 11g: SQL Fundamentals I 1 - 10

Expressions Arithmtiques
Crer des expressions avec de nombre et de date l'aide des oprateurs arithmtiques.
Operator + * / Description Add Subtract Multiply Divide

1 - 11

Copyright 2007, Oracle. All rights reserved.

Expressions arithmtiques Vous devrez peut-tre modifier la faon dont les donnes sont affiches, ou vous pouvez effectuer des calculs, ou de regarder des scnarios de simulation. Tout cela est possible en utilisant des expressions arithmtiques. Une expression arithmtique peut contenir des noms de colonnes, constantes et les valeurs numriques, les oprateurs arithmtiques. oprateurs arithmtiques La diapositive prsente les oprateurs arithmtiques qui sont disponibles dans SQL. Vous pouvez utiliser des oprateurs arithmtiques dans toute clause d'une instruction SQL (sauf la clause FROM). Remarque: la date et types de donnes timestamp, vous pouvez utiliser l'addition et la soustraction oprateurs seulement.

Oracle Database 11g: SQL Fundamentals I 1 - 11

Utilisation des oprateurs arithmtiques

SELECT last_name, salary, salary + 300 FROM employees;

1 - 12

Copyright 2007, Oracle. All rights reserved.

Utilisation des oprateurs arithmtiques L'exemple de la diapositive utilise l'oprateur d'addition pour calculer une augmentation de salaire de 300 $ pour tous les employs. La diapositive affiche galement une SALAIRE 300 colonne dans la sortie. Notez que la colonne rsultante calcule, SALAIRE +300, n'est pas une nouvelle colonne dans la table EMPLOYEES, c'est uniquement pour l'affichage. Par dfaut, le nom d'une nouvelle colonne provient du calcul qui l'a gnr, dans ce cas, le salaire de +300. Remarque: Le serveur Oracle ignore les espaces vides avant et aprs l'oprateur arithmtique. priorit des oprateurs Si une expression arithmtique contient plus d'un oprateur, la multiplication et la division sont values en premier. Si les oprateurs dans une expression sont de la mme priorit, l'valuation se fait de gauche droite. Vous pouvez utiliser des parenthses pour forcer l'expression qui est dlimite par les parenthses tre values en premier. Rgles de priorit: Multiplication et la division se produire avant l'addition et la soustraction. Les oprateurs de mme priorit sont valus de gauche droite. Les parenthses sont utilises pour remplacer la priorit par dfaut ou clarifier la dclaration.

Oracle Database 11g: SQL Fundamentals I 1 - 12

priorit des oprateurs

SELECT last_name, salary, 12*salary+100 FROM employees;

SELECT last_name, salary, 12*(salary+100) FROM employees;

1 - 13

Copyright 2007, Oracle. All rights reserved.

Priorits des oprateurs (suite) Le premier exemple de la diapositive affiche le nom de famille, le salaire et la rmunration annuelle des employs. Il calcule la rmunration annuelle en multipliant le salaire mensuel de 12, plus un bonus unique de 100 $. Notez que la multiplication est effectue avant l'addition. Remarque: Utilisez les parenthses pour renforcer l'ordre standard de priorit et d'amliorer la clart. Par exemple, l'expression de la lame peut tre crite comme (12 * salaire) +100 sans aucun changement dans le rsultat. Utilisation des parenthses Vous pouvez remplacer les rgles de priorit en utilisant des parenthses pour prciser l'ordre souhait dans lequel les oprateurs doivent tre excutes. Le deuxime exemple de la diapositive affiche le nom de famille, le salaire et la rmunration annuelle des employs. Il calcule la rmunration annuelle comme suit: l'ajout d'une prime mensuelle de 100 $ au salaire mensuel, puis en multipliant ce montant par 12. cause des parenthses, on ajoute la priorit sur la multiplication.

Oracle Database 11g: SQL Fundamentals I 1 - 13

Dfinition d'une valeur Null


Null est une valeur qui n'est pas disponible, non affecte, inconnu ou inapplicable. Null n'est pas la mme chose que zro ou un espace blanc.
SELECT last_name, job_id, salary, commission_pct FROM employees;

1 - 14

Copyright 2007, Oracle. All rights reserved.

Dfinition d'une valeur Null Si une ligne n'a pas de valeur de donnes pour une colonne particulire, cette valeur est considre comme nulle ou pour contenir une valeur NULL. Null est une valeur qui n'est pas disponible, non affecte, inconnu ou inapplicable. Null n'est pas la mme chose que zro ou un espace blanc. Zro est un nombre et d'espace vierge est un personnage. Colonnes de n'importe quel type de donnes peut contenir les valeurs NULL. Cependant, certaines contraintes (NOT NULL et PRIMARY KEY) empcher zros d'tre utilis dans la colonne. Dans la colonne COMMISSION_PCT dans le tableau EMPLOYS, notez que seul un directeur des ventes ou reprsentant des ventes peut gagner une commission. Les autres employs n'ont pas le droit de toucher des commissions. Un nul reprsente de ce fait. Remarque: Par dfaut, SQL Developer utilise le littral, (null), afin d'identifier les valeurs NULL. Cependant, vous pouvez le configurer pour quelque chose de plus pertinent pour vous. Pour ce faire, slectionnez Prfrences dans le menu Outils. Dans la bote de dialogue Prfrences, dveloppez le nud Base de donnes. Cliquez sur Paramtres avancs et sur le volet de droite, pour la valeur Null affichage sous", entrez la valeur approprie.

Oracle Database 11g: SQL Fundamentals I 1 - 14

Valeurs NULL dans les expressions arithmtiques


Les expressions arithmtiques contenant une valeur NULL est valus NULL.
SELECT last_name, 12*salary*commission_pct FROM employees;

1 - 15

Copyright 2007, Oracle. All rights reserved.

Valeurs NULL dans les expressions arithmtiques Si aucune valeur de colonne dans une expression arithmtique est nulle, le rsultat est nul. Par exemple, si vous tentez d'effectuer une division par zro, vous obtenez une erreur. Toutefois, si vous divisez un nombre par NULL, le rsultat est une valeur nulle ou inconnue. Dans l'exemple de la diapositive, le roi employ ne reoit pas de commission. Parce que la colonne COMMISSION_PCT dans l'expression arithmtique est NULL, le rsultat est nul. Pour plus d'informations, reportez-vous la section lments de base d'Oracle SQL" dans Oracle Database 11g SQL Langage de rfrence, Release 1 (11.1).

Oracle Database 11g: SQL Fundamentals I 1 - 15

Agenda de leon
base instruction SELECT Les expressions arithmtiques et des valeurs NULL dans l'instruction SELECT alias de colonnes L'utilisation de l'oprateur de concatnation des chanes de caractres littrales, citant l'oprateur alternatif, et le mot-cl DISTINCT commande DESCRIBE

1 - 16

Copyright 2007, Oracle. All rights reserved.

Oracle Database 11g: SQL Fundamentals I 1 - 16

Dfinir un alias de colonne


Un alias de colonne: Renomme une colonne Est utile pour les calculs Suit immdiatement le nom de la colonne (Il peut aussi tre le mot-cl optionnel AS entre le nom de la colonne et alias.) Ncessite des guillemets s'il contient des espaces ou des caractres spciaux, ou si elle est sensible la casse

1 - 17

Copyright 2007, Oracle. All rights reserved.

Dfinir un alias de colonne Lors de l'affichage du rsultat d'une requte, SQL Developer utilise normalement le nom de la colonne slectionne en tant que tte de colonne. Cette rubrique ne peut pas tre descriptive et, par consquent, peut tre difficile comprendre. Vous pouvez modifier un intitul de colonne en utilisant un alias de colonne. Indiquez l'alias aprs la colonne dans la liste SELECT utilisant l'espace vide comme sparateur. Par dfaut, les titres alias apparaissent en majuscules. Si l'alias contient des espaces ou des caractres spciaux (tels que # ou $), ou si elle est sensible la casse, placez l'alias entre guillemets doubles ("").

Oracle Database 11g: SQL Fundamentals I 1 - 17

Utilisation des alias de colonnes

SELECT last_name AS name, commission_pct comm FROM employees;

SELECT last_name "Name" , salary*12 "Annual Salary" FROM employees;

1 - 18 Copyright 2007, Oracle. All rights reserved.

Utilisation des alias de colonnes Le premier exemple affiche les noms et les pourcentages des commissions de tous les employs. Notez que le mot-cl optionnel AS a t utilise avant l'alias de la colonne. Le rsultat de la requte est le mme que le mot-cl AS est utilis ou non. En outre, notez que l'instruction SQL possde les alias de colonne, le nom et comm, en minuscules, tandis que le rsultat de la requte affiche les titres des colonnes en majuscules. Comme mentionn dans la diapositive prcdente, ttes de colonnes apparaissent en majuscules par dfaut. Le second exemple affiche les noms de famille et les salaires annuels de tous les employs. Parce Salaire annuel contient un espace, il a t plac entre guillemets doubles. Notez que le titre de la colonne dans la sortie est exactement le mme que l'alias de colonne.

Oracle Database 11g: SQL Fundamentals I 1 - 18

Agenda de leon
base instruction SELECT Les expressions arithmtiques et des valeurs NULL dans l'instruction SELECT alias de colonnes L'utilisation de l'oprateur de concatnation des chanes de caractres littrales, citant l'oprateur alternatif, et le mot-cl DISTINCT commande DESCRIBE

1 - 19

Copyright 2007, Oracle. All rights reserved.

Oracle Database 11g: SQL Fundamentals I 1 - 19

Oprateur de concatnation
Un oprateur de concatnation: Liens colonnes ou des chanes de caractres aux autres colonnes Est reprsent par deux barres verticales (| |) Cre une colonne rsultante qui est une expression de caractres
SELECT FROM last_name||job_id AS "Employees" employees;

1 - 20 Copyright 2007, Oracle. All rights reserved.

Oprateur de concatnation Vous pouvez lier des colonnes d'autres colonnes, expressions arithmtiques ou des valeurs constantes pour crer une expression de caractres en utilisant l'oprateur de concatnation (| |). Colonnes de chaque ct de l'oprateur sont combins pour former une colonne de sortie unique. Dans l'exemple, LAST_NAME et JOB_ID sont concatnes, et tant donn les employs pseudonyme. Notez que le nom de famille de l'employ et le code de travail sont combins pour crer une colonne de sortie unique. Le mot cl AS avant le nom de l'alias fait la clause SELECT facile lire. Valeurs NULL avec l'oprateur de concatnation Si vous concatner une valeur NULL avec une chane de caractres, le rsultat est une chane de caractres. LAST_NAME | | NULL dans les rsultats LAST_NAME. Remarque: Vous pouvez galement concatner des expressions de date avec d'autres expressions ou des colonnes.

Oracle Database 11g: SQL Fundamentals I 1 - 20

Chanes de caractres littrales


Un littral est un personnage, un nombre ou une date qui est inclus dans l'instruction SELECT. Les valeurs de date et le caractre littral doit tre place entre guillemets simples. Chaque chane de caractres est sortie une seule fois pour chaque ligne renvoye.

1 - 21

Copyright 2007, Oracle. All rights reserved.

Chanes de caractres littrales Un littral est un personnage, un nombre ou une date qui est inclus dans la liste SELECT. Ce n'est pas un nom de colonne ou un alias de colonne. Il est imprim pour chaque ligne renvoye. Les chanes littrales de libre-format texte peut tre inclus dans le rsultat de la requte et sont traits comme une colonne dans la liste SELECT. Les littraux de date et de caractre doit tre plac entre guillemets simples (''); littraux numriques ne doivent pas tre enferm dans une manire similaire.

Oracle Database 11g: SQL Fundamentals I 1 - 21

Utilisation de chanes de caractres littrales

SELECT last_name ||' is a '||job_id AS "Employee Details" FROM employees;

1 - 22

Copyright 2007, Oracle. All rights reserved.

Utilisation de chanes de caractres littrales L'exemple de la diapositive affiche les noms de famille et les codes d'emploi de tous les employs. La colonne prsente les dtails des employs rubrique. Notez les espaces entre les guillemets simples dans l'instruction SELECT. Les espaces amliorer la lisibilit de la sortie. Dans l'exemple suivant, le nom et le salaire de chaque employ sont concatns avec un littral, de donner les lignes retournes plus de sens :
SELECT last_name ||': 1 Month salary = '||salary Monthly FROM employees;

Oracle Database 11g: SQL Fundamentals I 1 - 22

Alternative Citation de l'oprateur (q)


Spcifiez votre propre guillemet dlimiteur. Slectionnez n'importe quel dlimiteur. Augmenter la lisibilit et la convivialit.
SELECT department_name || ' Department' || q'['s Manager Id: ]' || manager_id AS "Department and Manager" FROM departments;

1 - 23

Copyright 2007, Oracle. All rights reserved.

Alternative Citation (q) de l'oprateur De nombreuses instructions SQL utiliser des littraux caractres dans les expressions ou conditions. Si le littral lui-mme contient un guillemet simple, vous pouvez utiliser la citation (q) l'oprateur et choisir votre propre guillemet dlimiteur. Vous pouvez choisir n'importe quel dlimiteur pratique, un octet ou multi-octets, ou n'importe lequel des paires de caractres suivants: [], {}, (), ou <>. Dans l'exemple illustr, la chane contient un guillemet simple, qui est normalement interprt comme un dlimiteur de chane de caractres. l'aide de l'oprateur q, cependant, les crochets [] sont utiliss comme dlimiteurs guillemet. La chane entre les dlimiteurs supports est interprte comme une chane de caractres littrale.

Oracle Database 11g: SQL Fundamentals I 1 - 23

duplication les lignes


L'affichage par dfaut des requtes est que toutes les lignes, y compris les lignes dupliques.
SELECT department_id FROM employees;

SELECT DISTINCT department_id FROM employees;

1 - 24 Copyright 2007, Oracle. All rights reserved.

dupliquer les lignes moins d'indication contraire, SQL affiche les rsultats d'une requte sans liminer les doublons. Le premier exemple de la diapositive affiche tous les numros de dpartement de la table Employees. Notez que les numros de dpartement sont rptes. Pour liminer les doublons dans le rsultat, inclure le mot cl DISTINCT dans la clause SELECT immdiatement aprs le mot-cl SELECT. Dans le deuxime exemple de la diapositive, la table Employees contient en fait 20 lignes, mais il ya seulement sept numros de dpartement uniques dans la table. Vous pouvez spcifier plusieurs colonnes aprs le qualificateur DISTINCT. Le qualificatif DISTINCT affecte toutes les colonnes slectionnes, et le rsultat est chaque combinaison distincte des colonnes.
SELECT FROM DISTINCT department_id, job_id employees;

Oracle Database 11g: SQL Fundamentals I 1 - 24

Agenda de leon
base instruction SELECT Les expressions arithmtiques et des valeurs NULL dans l'instruction SELECT alias de colonnes L'utilisation de l'oprateur de concatnation des chanes de caractres littrales, citant l'oprateur alternatif, et le mot-cl DISTINCT commande DESCRIBE

1 - 25

Copyright 2007, Oracle. All rights reserved.

Oracle Database 11g: SQL Fundamentals I 1 - 25

Affichage de la structure dune table


Use the DESCRIBE command to display the structure of a table. Or, select the table in the Connections tree and use the Columns tab to view the table structure.
DESC[RIBE] tablename

1 - 26

Copyright 2007, Oracle. All rights reserved.

Affichage de la structure du tableau Dans SQL Developer, vous pouvez afficher la structure d'une table l'aide de la commande DESCRIBE. La commande affiche les noms de colonnes et les types de donnes, et il vous indique si une colonne doit contenir des donnes (c'est--dire, si la colonne a une contrainte NOT NULL). Dans la syntaxe, le nom de table est le nom d'une table existante, voir, ou un synonyme qui est accessible l'utilisateur. Utilisation de l'interface GUI SQL Developer, vous pouvez slectionner la table dans l'arbre de connexions et utilisez l'onglet Colonnes pour afficher la structure de la table. Remarque: La commande DESCRIBE est soutenu la fois par SQL * Plus et SQL Developer.

Oracle Database 11g: SQL Fundamentals I 1 - 26

Utilisation de la commande DESCRIBE

DESCRIBE employees

1 - 27

Copyright 2007, Oracle. All rights reserved.

Utilisation de la commande DESCRIBE L'exemple de la diapositive affiche des informations sur la structure de la table EMPLOYES l'aide de la commande DESCRIBE. Dans l'affichage qui en rsulte, Null indique que les valeurs de cette colonne peut tre inconnue. NOT NULL indique qu'une colonne doit contenir des donnes. Type affiche le type de donnes pour une colonne. Les types de donnes sont dcrits dans le tableau suivant::

Data Type NUMBER(p,s) VARCHAR2(s) DATE CHAR(s)

Description Number value having a maximum number of digits p, with s digits to the right of the decimal point Variable-length character value of maximum size s Date and time value between January 1, 4712 B.C. and December 31, A.D. 9999. Fixed-length character value of size s

Oracle Database 11g: SQL Fundamentals I 1 - 27

rsum
Dans cette leon, vous devriez avoir appris : Rdiger une instruction SELECT:
Renvoie toutes les lignes et colonnes d'un tableau Retourne les colonnes spcifies d'une table Utilise des alias de colonne pour afficher ttes de colonne plus descriptifs

SELECT *|{[DISTINCT] column|expression [alias],...} FROM table;

1 - 28

Copyright 2007, Oracle. All rights reserved.

Instruction SELECT Dans cette leon, vous devriez avoir appris comment rcuprer des donnes d'une table de base de donnes avec l'instruction SELECT .
SELECT FROM *|{[DISTINCT] column [alias],...} table;

Dans la syntaxe: SELECT est une liste d'un ou de plusieurs colonnes * Slectionne toutes les colonnes DISTINCT supprime les doublons colonne | expression slectionne la colonne nomme ou l'expression alias donne les colonnes slectionnes diffrentes rubriques FROM table spcifie la table contenant les colonnes

Oracle Database 11g: SQL Fundamentals I 1 - 28

Exercice 1: Vue d'ensemble


Cette pratique couvre les sujets suivants: Slection de toutes les donnes de diffrentes tables Dcrivant la structure des tables Effectuer des calculs arithmtiques et en spcifiant les noms de colonnes

1 - 29

Copyright 2007, Oracle. All rights reserved.

Exercice 1: Vue d'ensemble Dans cette pratique, vous crivez des requtes SELECT simples. Les requtes couvrent la plupart des clauses SELECT et les oprations que vous avez appris dans cette leon.

Oracle Database 11g: SQL Fundamentals I 1 - 29

pratique 1 partie 1 Testez vos connaissances: 1. L'instruction SELECT suivante s'excute avec succs: SELECT last_name, job_id, salary AS Sal FROM employs;? Vrai / Faux 2. L'instruction SELECT suivante s'excute avec succs: SELECT * DE job_grades;? Vrai / Faux 3. Il ya quatre erreurs de codage dans la dclaration suivante. Pouvez-vous les identifier? SELECT employee_id, last_name sal * 12 "SALAIRE ANNUEL" FROM employees; Partie 2 Notez les points suivants avant de commencer avec les pratiques: Sauvegardez tous vos fichiers laboratoire l'emplacement suivant: D: \ \ \ SQL1 laboratoires laboratoires Entrez vos instructions SQL dans une feuille de calcul SQL. Pour enregistrer un script dans SQL Developer, assurez-vous que la feuille de calcul requise SQL est actif, puis dans le menu Fichier, slectionnez Enregistrer sous ou faites un clic droit dans la feuille de calcul SQL et slectionnez Enregistrer le fichier pour enregistrer votre instruction SQL comme lab_ <lessonno> _ <stepno>. sql. Lorsque vous modifiez un script existant, assurez-vous que vous utilisez la commande Enregistrer sous pour l'enregistrer sous un autre nom. Pour excuter la requte, cliquez sur Excuter l'icne Dclaration la feuille de calcul SQL. Alternativement, vous pouvez appuyer sur [F9]. Pour les instructions DML et DDL, utilisez le script Run icne ou appuyez sur [F5]. Aprs avoir excut la requte, assurez-vous que vous ne saisissez pas votre requte suivante dans la mme feuille de calcul. Ouvrez une nouvelle feuille de calcul. Vous avez t embauch comme programmeur SQL pour Acme Corporation. Votre premire tche consiste crer des rapports bass sur les donnes des tableaux des ressources humaines. 4. Votre premire tche consiste dterminer la structure de la table Departments et son contenu.

Oracle Database 11g: SQL Fundamentals I 1 - 30

La pratique 1 (suite)

5. Vous devez dterminer la structure de la table EMPLOYEES.

Le dpartement des ressources humaines veut une requte pour afficher le nom de famille, le code du travail, la date d'embauche, et le numro d'employ pour chaque employ, avec le numro d'employ apparaissant en premier. Fournir un STARTDATE alias pour la colonne hire_date. Enregistrer votre instruction SQL dans un fichier nomm lab_01_05.sql de sorte que vous pouvez distribuer ce fichier dans le dpartement des ressources humaines.

Oracle Database 11g: SQL Fundamentals I 1 - 31

La pratique 1 (suite) 6. Testez votre requte dans le fichier lab_01_05.sql pour s'assurer qu'il fonctionne correctement. Remarque: Aprs avoir excut la requte, assurez-vous que vous ne saisissez pas votre requte suivante dans la mme feuille de calcul. Ouvrez une nouvelle feuille de calcul.

7. Le dpartement des ressources humaines veut une requte pour afficher tous les codes d'emploi uniques de la table EMPLOYS.

Oracle Database 11g: SQL Fundamentals I 1 - 32

La pratique 1 (suite) partie 3 Si vous avez le temps, faites les exercices suivants: 8. Le dpartement RH veut-ttes de colonne plus descriptifs pour son rapport sur les employs. Copiez le communiqu de lab_01_05.sql une nouvelle feuille de calcul SQL. Nommez la colonne de rubriques Emp #, employs, d'emploi, et date d'embauche, respectivement. Ensuite, excutez votre requte nouveau.

9. Le dpartement RH a demand un rapport de tous les employs et leurs identificateurs d'emploi. Afficher le nom concatn avec l'ID du travail (spars par une virgule et l'espace) et le nom de l'employ et de la colonne Titre.

Oracle Database 11g: SQL Fundamentals I 1 - 33

La pratique 1 (suite) Si vous voulez un dfi supplmentaire, l'exercice suivant: 10. Pour vous familiariser avec les donnes de la table EMPLOYES, crer une requte pour afficher toutes les donnes de cette table. Sparez chaque colonne de sortie par une virgule. Nommez le THE_OUTPUT titre de la colonne.

Oracle Database 11g: SQL Fundamentals I 1 - 34

Restriction et tri des donnes

1 - 35

Copyright 2007, Oracle. All rights reserved.

Objectif
Aprs avoir termin cette leon, vous devriez tre en mesure de faire ce qui suit: Limitez les lignes qui sont rcupres par une requte Trier les lignes qui sont rcupres par une requte Utiliser la substitution et commercial de restreindre et trier la sortie au moment de l'excution

1 - 36

Copyright 2007, Oracle. All rights reserved.

objectifs Lors de la rcupration des donnes de la base de donnes, vous devrez peut-tre effectuer les oprations suivantes: Restreindre les lignes de donnes qui sont affiches Spcifier l'ordre dans lequel les lignes sont affiches Cette leon explique les instructions SQL que vous utilisez pour effectuer les actions rpertories ci-dessus.

Oracle Database 11g: SQL Fundamentals I 2 - 36

Lesson Agenda
Limiter les lignes avec:
La clause WHERE Les conditions de comparaison avec =, <=, BETWEEN, IN, LIKE, NULL et les conditions Conditions logiques l'aide AND, OR et NOT

Rgles de priorit des oprateurs dans une expression Tri des lignes l'aide de la clause ORDER BY Les variables de substitution Commande DEFINE and VERIFY

1 - 37

Copyright 2007, Oracle. All rights reserved.

Oracle Database 11g: SQL Fundamentals I 2 - 37

Limite des lignes en utilistant Selection

EMPLOYEES

rcuprer tous les employs du service 90

1 - 38

Copyright 2007, Oracle. All rights reserved.

Limite des ligne en utilisant Selection Dans l'exemple de la diapositive, supposons que vous souhaitez afficher tous les employs du service 90. Les lignes avec une valeur de 90 dans la colonne DEPARTMENT_ID sont les seuls qui sont retournes. Cette mthode de restriction est la base de la clause WHERE en SQL.

Oracle Database 11g: SQL Fundamentals I 2 - 38

Limite des lignes en utilistant Selection


Restreindre les lignes qui sont retournes en utilisant la clause WHERE:
SELECT *|{[DISTINCT] column|expression [alias],...} FROM table [WHERE condition(s)];

La clause WHERE suit la clause FROM.

1 - 39

Copyright 2007, Oracle. All rights reserved.

Limiter les lignes slectionnes Vous pouvez restreindre les lignes qui sont retournes par la requte en utilisant la clause WHERE. Une clause WHERE contient une condition qui doit tre remplie et il dcoule directement de la clause FROM. Si la condition est vraie, la ligne remplisse la condition est retourn. Dans la syntaxe: WHERE restreint la requte de lignes qui rpondent une condition condition est compose de noms de colonnes, des expressions, des constantes et un oprateur de comparaison. Une condition spcifie un? combinaison d'une ou plusieurs expressions logiques et (boolen)? oprateurs, et renvoie la valeur TRUE, FALSE ou UNKNOWN. La clause WHERE peut comparer les valeurs dans les colonnes, littrales des expressions arithmtiques, ou des fonctions. Il se compose de trois lments: nom de la colonne condition de comparaison Nom de la colonne, une constante ou liste de valeurs

Oracle Database 11g: SQL Fundamentals I 2 - 39

Utilisation de la clause WHERE

SELECT employee_id, last_name, job_id, department_id FROM employees WHERE department_id = 90 ;

1 - 40

Copyright 2007, Oracle. All rights reserved.

Utilisation de la clause WHERE Dans l'exemple, l'instruction SELECT rcupre l'ID employ, nom, ID du travail, et le numro de dpartement de tous les employs qui sont dans le dpartement 90. Remarque: Vous ne pouvez pas utiliser les alias de colonne dans la clause WHERE.

Oracle Database 11g: SQL Fundamentals I 2 - 40

Chanes de caractres et dates


Les chanes de caractres et les valeurs de date sont entours par des guillemets simples. Les valeurs de caractre sont sensibles la casse et les valeurs de date sont au format sensible. Le format d'affichage par dfaut la date est DD-MON-RR.
SELECT last_name, job_id, department_id FROM employees WHERE last_name = 'Whalen' ; SELECT last_name FROM employees WHERE hire_date = '17-FEB-96' ;

1 - 41

Copyright 2007, Oracle. All rights reserved.

Chanes de caractres et dates Les chanes de caractres et des dates dans la clause WHERE doit tre encadre par des guillemets simples (''). Nombre constantes, toutefois, ne doit pas tre encadre par des guillemets simples. Toutes les recherches de caractres sont sensibles la casse. Dans l'exemple suivant, aucune ligne n'est renvoye parce que la table EMPLOYES stocke tous les noms de famille dans le cas mixte:
SELECT last_name, job_id, department_id FROM employees WHERE last_name = 'WHALEN';

Bases de donnes Oracle stocker les dates dans un format numrique interne, ce qui reprsente sicle, anne, mois, jour, heures, minutes et secondes. L'affichage de la date par dfaut est au format DD-MON-RR. Remarque: Pour plus de dtails sur le format de RR et de changer le format de date par dfaut, voir la leon intitule Utilisation simple range fonctions de personnalisation de sortie." En outre, vous renseigner sur l'utilisation d'une seule range de fonctions telles que la suprieure et infrieure pour remplacer la sensibilit la casse dans la mme leon.

Oracle Database 11g: SQL Fundamentals I 2 - 41

oprateurs de comparaison

Operator
= > >= < <= <> BETWEEN ...AND... IN(set) LIKE IS NULL

Meaning
Equal to Greater than Greater than or equal to Less than Less than or equal to Not equal to Between two values (inclusive) Match any of a list of values Match a character pattern Is a null value

1 - 42

Copyright 2007, Oracle. All rights reserved.

oprateurs de comparaison Les oprateurs de comparaison sont utiliss dans des conditions qui permettent de comparer une expression une autre valeur ou une expression. Ils sont utiliss dans la clause WHERE dans le format suivant: Syntaxe
... WHERE expr operator value

Example
... WHERE hire_date = '01-JAN-95' ... WHERE salary >= 6000 ... WHERE last_name = 'Smith'

Un alias ne peut pas tre utilise dans la clause WHERE. Remarque: Les symboles = et ^ = peut aussi reprsenter le pas gale condition!.

Oracle Database 11g: SQL Fundamentals I 2 - 42

Utilisation des oprateurs de comparaison

SELECT last_name, salary FROM employees WHERE salary <= 3000 ;

1 - 43

Copyright 2007, Oracle. All rights reserved.

Utilisation des oprateurs de comparaison Dans l'exemple, l'instruction SELECT rcupre le nom de famille et le salaire de la table Employees pour tout employ dont le salaire est infrieur ou gal 3.000 $. Notez qu'il existe une valeur explicite fournie la clause WHERE. La valeur explicite de 3000 est compare la valeur du salaire dans la colonne de la table SALAIRE DES EMPLOYS.

Oracle Database 11g: SQL Fundamentals I 2 - 43

Conditions d'intervalle avec loprateur BETWEEN


Utilisez l'oprateur BETWEEN pour afficher des lignes en fonction d'une plage de valeurs:
SELECT last_name, salary FROM employees WHERE salary BETWEEN 2500 AND 3500 ; Lower limit Upper limit

1 - 44

Copyright 2007, Oracle. All rights reserved.

Conditions d'intervalle avec loprateur BETWEEN Vous pouvez afficher des lignes en fonction d'une srie de valeurs l'aide de l'oprateur BETWEEN. La plage que vous spcifiez contient une limite infrieure et une limite suprieure. L'instruction SELECT dans la diapositive renvoie des lignes de la table Employees pour tout employ dont le salaire se situe entre $ 2.500 et $ 3.500. Valeurs qui sont spcifies l'oprateur BETWEEN sont inclus. Toutefois, vous devez spcifier la limite infrieure d'abord. Vous pouvez galement utiliser l'oprateur BETWEEN sur les valeurs de caractres :
SELECT last_name FROM employees WHERE last_name BETWEEN 'King' AND 'Smith';

Oracle Database 11g: SQL Fundamentals I 2 - 44

Condition d'appartenance Utilisation de l'oprateur IN


Utilisez l'oprateur IN pour tester les valeurs dans une liste:
SELECT employee_id, last_name, salary, manager_id FROM employees WHERE manager_id IN (100, 101, 201) ;

1 - 45

Copyright 2007, Oracle. All rights reserved.

Condition d'appartenance Utilisation de l'oprateur IN Pour tester les valeurs dans un ensemble spcifi de valeurs, utilisez l'oprateur IN. La condition dfinie l'aide de l'oprateur IN est galement connu comme la condition d'appartenance. L'exemple diaporama affiche le nombre d'employs, noms de famille, les salaires, et les numros des employs des gestionnaires de tous les employs dont le responsable est le numro d'employ est de 100, 101 ou 201. L'oprateur peut tre utilis avec n'importe quel type de donnes. L'exemple suivant retourne une ligne de la table EMPLOYES, pour tout employ dont le nom figure dans la liste des noms dans la clause WHERE :
SELECT employee_id, manager_id, department_id FROM employees WHERE last_name IN ('Hartstein', 'Vargas');

Si les caractres ou les dates sont utilises dans la liste, elles doivent tre encadres par des guillemets simples (''). Remarque: L'oprateur se fait en interne par le serveur Oracle comme un ensemble de conditions OR, tels que a = valeur1 = valeur2 ou une ou un = valeur3. Par consquent, en utilisant l'oprateur IN n'a pas d'avantages de performance et est utilis seulement pour la simplicit logique.

Oracle Database 11g: SQL Fundamentals I 2 - 45

Pattern Matching utilisant l'oprateur LIKE


Utilisez l'oprateur LIKE pour effectuer des recherches gnriques valides de valeurs de chane de recherche. Les conditions de recherche peuvent contenir des caractres littraux ou des numros:
% Reprsente zro ou plusieurs caractres. _ Reprsente un caractre.
SELECT FROM WHERE first_name employees first_name LIKE 'S%' ;

1 - 46

Copyright 2007, Oracle. All rights reserved.

Pattern Matching utilisant l'oprateur LIKE Vous ne pouvez pas toujours savoir la valeur exacte rechercher. Vous pouvez slectionner les lignes qui correspondent un modle de caractres en utilisant l'oprateur LIKE. Le caractre pattern-matching opration est appele une recherche gnrique. Deux symboles peuvent tre utiliss pour construire la chane de recherche.

Symbol % _

Description Represents any sequence of zero or more characters Represents any single character

'instruction SELECT dans la diapositive retourne le premier nom de la table EMPLOYEES pour tout employ dont le prnom commence par la lettre "S" Notez la majuscule "S" Par consquent, les noms commenant par un "s" minuscule ne sont pas retourns. L'oprateur LIKE peut tre utilis comme raccourci pour certaines ENTRE comparaisons. L'exemple suivant affiche les noms de famille et les dates de location de tous les employs qui se sont joints entre Janvier 1995 et Dcembre, 1995 :
SELECT last_name, hire_date FROM employees WHERE hire_date LIKE '%95';

Oracle Database 11g: SQL Fundamentals I 2 - 46

En combinant les caractres gnriques


Vous pouvez combiner les deux caractres gnriques (%, _) avec des caractres littrales de filtrage:
SELECT last_name FROM employees WHERE last_name LIKE '_o%' ;

Vous pouvez utiliser l'identificateur ESCAPE pour rechercher l'% rel et symboles _.

1 - 47

Copyright 2007, Oracle. All rights reserved.

En combinant les caractres gnriques Les symboles% et _ peuvent tre utiliss dans n'importe quelle combinaison de caractres littraux. L'exemple de la diapositive affiche les noms de tous les employs dont les noms ont la lettre o comme deuxime caractre. ESCAPE Identificateur Lorsque vous avez besoin d'avoir une correspondance exacte pour les caractres% et _ relles, utilisez l'identificateur ESCAPE. Cette option spcifie ce que le caractre d'chappement est. Si vous souhaitez rechercher des chanes qui contiennent SA_, vous pouvez utiliser l'instruction SQL suivante :
SELECT employee_id, last_name, job_id FROM employees WHERE job_id LIKE '%SA\_%' ESCAPE '\';

L'identificateur ESCAPE identifie la barre oblique inverse (\) comme caractre d'chappement. Dans l'instruction SQL, le caractre d'chappement prcde le trait de soulignement (_). Cela provoque le serveur Oracle pour interprter littralement le trait de soulignement.
Oracle Database 11g: SQL Fundamentals I 2 - 47

Utilisation des Conditions NULL


Test de null avec l'oprateur IS NULL.
SELECT last_name, manager_id FROM employees WHERE manager_id IS NULL ;

1 - 48

Copyright 2007, Oracle. All rights reserved.

Utilisation des Conditions NULL Les conditions NULL inclure la condition IS NULL et IS NOT NULL tat. L'IS NULL pour les tests de condition nuls. Une valeur nulle signifie que la valeur n'est pas disponible, non affecte, inconnu ou inapplicable. Par consquent, vous ne pouvez pas tester avec =, parce que nul ne peut tre gal ou ingal n'importe quelle valeur. L'exemple diaporama rcupre les noms de famille et les gestionnaires de tous les employs qui n'ont pas un gestionnaire. Voici un autre exemple: Pour afficher le dernier nom, ID du travail, et la commission pour tous les employs qui n'ont pas droit de recevoir une commission, utilisez l'instruction SQL suivante :
SELECT last_name, job_id, commission_pct FROM employees WHERE commission_pct IS NULL;

Oracle Database 11g: SQL Fundamentals I 2 - 48

Dfinition des conditions utilisant les oprateurs logiques


Operator
AND OR NOT

Meaning
Returns TRUE if both component conditions are true Returns TRUE if either component condition is true Returns TRUE if the condition is false

1 - 49

Copyright 2007, Oracle. All rights reserved.

Dfinition des conditions utilisant les oprateurs logiques A condition logique combine le rsultat de deux dfauts des composants pour produire un rsultat unique sur la base de ces conditions ou inverse le rsultat d'un tat unique. Une ligne est retourne seulement si le rsultat global de la condition est vraie. Trois oprateurs logiques sont disponibles en SQL: AND OR NOT Tous les exemples jusqu'ici ont indiqu une seule condition dans la clause WHERE. Vous pouvez utiliser plusieurs conditions dans une seule clause WHERE utilisant le oprateurs AND et OR.

Oracle Database 11g: SQL Fundamentals I 2 - 49

Utilisation de l'oprateur AND


AND ncessite la fois les conditions composants pour tre vrai :
SELECT FROM WHERE AND employee_id, last_name, job_id, salary employees salary >= 10000 job_id LIKE '%MAN%' ;

1 - 50

Copyright 2007, Oracle. All rights reserved.

Utilisation de l'oprateur ET Dans l'exemple, les deux composantes les conditions doivent tre remplies pour n'importe quel enregistrement pour tre slectionn. Par consquent, seuls les employs qui ont un titre d'emploi qui contient "MAN" la chane et gagner 10.000 $ ou plus sont slectionnes. Toutes les recherches de caractres sont sensibles la casse, c'est-aucune ligne n'est renvoye si "MAN" n'est pas en majuscules. En outre, les chanes de caractres doivent tre placs entre guillemets. ET Table de vrit Le tableau suivant montre les rsultats de la combinaison de deux expressions avec AND :

AND TRUE FALSE NULL

TRUE TRUE FALSE NULL

FALSE FALSE FALSE FALSE

NULL NULL FALSE NULL

Oracle Database 11g: SQL Fundamentals I 2 - 50

Utilisation de l'oprateur OR
OR ncessite soit l'tat des composants pour tre vrai:
SELECT FROM WHERE OR employee_id, last_name, job_id, salary employees salary >= 10000 job_id LIKE '%MAN%' ;

1 - 51

Copyright 2007, Oracle. All rights reserved.

Utilisation de l'oprateur OR Dans l'exemple, la condition composant supporte peut tre le cas pour un enregistrement slectionner. Par consquent, tout employ qui a un ID de travail qui contient "MAN" la chane ou gagne 10.000 $ ou plus est slectionn. Table de vrit OR Le tableau suivant montre les rsultats de la combinaison de deux expressions avec OR:

OR TRUE FALSE NULL

TRUE TRUE TRUE TRUE

FALSE TRUE FALSE NULL

NULL TRUE NULL NULL

Oracle Database 11g: SQL Fundamentals I 2 - 51

Utilisation de l'oprateur NOT

SELECT last_name, job_id FROM employees WHERE job_id NOT IN ('IT_PROG', 'ST_CLERK', 'SA_REP') ;

1 - 52

Copyright 2007, Oracle. All rights reserved.

Utilisation de l'oprateur NOT L'exemple diaporama affiche le nom et l'ID du travail de tous les employs dont le travail d'identification n'est pas IT_PROG, ST_CLERK ou SA_REP. Table de vrit NOT Le tableau suivant montre le rsultat de l'application de l'oprateur NOT une condition:

NOT

TRUE FALSE

FALSE TRUE

NULL NULL

Remarque: L'oprateur NOT peut galement tre utilis avec d'autres oprateurs SQL, comme BETWEEN, LIKE et NULL.
... ... ... ... WHERE WHERE WHERE WHERE job_id NOT IN ('AC_ACCOUNT', 'AD_VP') salary NOT BETWEEN 10000 AND 15000 last_name NOT LIKE '%A%' commission_pct IS NOT NULL

Oracle Database 11g: SQL Fundamentals I 2 - 52

Lesson Agenda
Limiter les lignes avec:
La clause WHERE Les conditions de comparaison avec =, <=, BETWEEN, IN, LIKE, NULL et les conditions Conditions logiques l'aide AND, OR et NOT

Rgles de priorit des oprateurs dans une expression Tri des lignes l'aide de la clause ORDER BY Les variables de substitution Commande DEFINE and VERIFY

1 - 53

Copyright 2007, Oracle. All rights reserved.

Oracle Database 11g: SQL Fundamentals I 2 - 53

Rgles de priorit

Operator
1 2 3 4 5 6 7 8 9

Meaning
Arithmetic operators Concatenation operator Comparison conditions IS [NOT] NULL, LIKE, [NOT] IN [NOT] BETWEEN Not equal to NOT logical condition AND logical condition OR logical condition

Vous pouvez utiliser des parenthses pour modifier les rgles de prsance.
1 - 54 Copyright 2007, Oracle. All rights reserved.

Rgles de priorit Les rgles de priorit dtermine l'ordre dans lequel les expressions sont values et calcules. Le tableau de la diapositive indique l'ordre de priorit par dfaut. Cependant, vous pouvez modifier l'ordre par dfaut en utilisant des parenthses autour des expressions que vous voulez calculer d'abord.

Oracle Database 11g: SQL Fundamentals I 2 - 54

Rgles de priorit
SELECT FROM WHERE OR AND last_name, job_id, salary employees job_id = 'SA_REP' job_id = 'AD_PRES' salary > 15000;

SELECT FROM WHERE OR AND

last_name, job_id, salary employees (job_id = 'SA_REP' job_id = 'AD_PRES') salary > 15000;

1 - 55

Copyright 2007, Oracle. All rights reserved.

Rgles de priorit (suite) 1. Primaut de l'oprateur AND: Exemple Dans cet exemple, il ya deux conditions: La premire condition est que l'ID du travail est AD_PRES et le salaire est suprieur 15.000 $. La deuxime condition est que l'ID du travail est SA_REP. Par consquent, l'instruction SELECT se lit comme suit: "Slectionnez la ligne si un employ est un prsident et gagne plus de $ 15.000, ou si le salari est un reprsentant des ventes." 2. Utilisation de parenthses: Exemple Dans cet exemple, il ya deux conditions: La premire condition est que l'ID du travail est AD_PRES ou SA_REP. La deuxime condition est que le salaire est suprieur 15.000 $. Par consquent, l'instruction SELECT se lit comme suit: "Slectionnez la ligne si un employ est un prsident ou un reprsentant des ventes, et si l'employ gagne plus de $ 15.000."

Oracle Database 11g: SQL Fundamentals I 2 - 55

Lesson Agenda
Limiter les lignes avec:
La clause WHERE Les conditions de comparaison avec =, <=, BETWEEN, IN, LIKE, NULL et les conditions Conditions logiques l'aide AND, OR et NOT

Rgles de priorit des oprateurs dans une expression Tri des lignes l'aide de la clause ORDER BY Les variables de substitution Commande DEFINE and VERIFY

1 - 56

Copyright 2007, Oracle. All rights reserved.

Oracle Database 11g: SQL Fundamentals I 2 - 56

Utilisation de la clause ORDER BY


Trier rcuprer les lignes avec la clause ORDER BY:
ASC: ordre croissant par dfaut DESC: Par ordre dcroissant

La clause ORDER BY vient en dernier dans l'instruction SELECT:


SELECT last_name, job_id, department_id, hire_date FROM employees ORDER BY hire_date ;

1 - 57 Copyright 2007, Oracle. All rights reserved.

Utilisation de la clause ORDER BY L'ordre des lignes qui sont retournes dans un rsultat de requte est indfini. La clause ORDER BY peut tre utilise pour trier les lignes. Toutefois, si vous utilisez la clause ORDER BY, elle doit tre la dernire clause de l'instruction SQL. En outre, vous pouvez spcifier une expression, un alias ou une position de colonne que la condition de tri. syntaxe
SELECT FROM [WHERE [ORDER BY expr table condition(s)] {column, expr, numeric_position} [ASC|DESC]];

Dans la syntaxe: ORDER BY spcifie l'ordre dans lequel les lignes rcupres sont affichs ASC les lignes en ordre croissant (ce qui est l'ordre par dfaut) DESC ordonne les lignes dans l'ordre dcroissant Si la clause ORDER BY n'est pas utilis, l'ordre de tri n'est pas dfini, et le serveur Oracle ne peut pas rcuprer les lignes dans le mme ordre pour la mme requte deux reprises. Utiliser la clause ORDER BY pour afficher les lignes dans un ordre spcifique. Remarque: Utilisez les valeurs NULL premiers mots cls ou NULLS DERNIERS de spcifier si les lignes renvoyes contenant des valeurs NULL doit apparatre en premier ou en dernier dans la squence de la commande.

Oracle Database 11g: SQL Fundamentals I 2 - 57

Tri
Le tri dans l'ordre dcroissant:
SELECT last_name, job_id, department_id, hire_date FROM employees 1 ORDER BY hire_date DESC ;

Tri par alias de colonne:


SELECT employee_id, last_name, salary*12 annsal FROM employees ORDER BY annsal ;

1 - 58

Copyright 2007, Oracle. All rights reserved.

tri L'ordre de tri par dfaut est croissant: Les valeurs numriques sont affiches avec les valeurs les plus basses en premier (par exemple, 1 999). Les valeurs de date sont affichs avec la premire premire valeur (par exemple, 01-JAN-92 avant? 01-JAN-95). Les valeurs de caractre sont affiches dans l'ordre alphabtique (par exemple, "A" d'abord et "Z" dernire). Les valeurs nulles sont affiches la fin pour les squences ascendantes et le premier pour la descente des squences. Vous pouvez galement trier selon une colonne qui n'est pas dans la liste SELECT. Exemples: 1. Pour inverser l'ordre dans lequel les lignes sont affiches, spcifiez le mot-cl DESC aprs le nom de la colonne dans la clause ORDER BY. Les sortes de diapositives par exemple le rsultat de l'employ plus rcemment embauch. 2. Vous pouvez galement utiliser un alias de colonne dans la clause ORDER BY. L'exemple de diapositive trie les donnes par salaire annuel.

Oracle Database 11g: SQL Fundamentals I 2 - 58

Tri
Le tri en utilisant la position numrique de la colonne:
SELECT last_name, job_id, department_id, hire_date FROM employees 3 ORDER BY 3;

Le tri par colonnes multiples:


SELECT last_name, department_id, salary FROM employees ORDER BY department_id, salary DESC;

1 - 59

Copyright 2007, Oracle. All rights reserved.

Tri (suite) Exemples: 3. Vous pouvez trier les rsultats de la requte en spcifiant la position numrique de la colonne dans la clause SELECT. Les sortes de diapositives par exemple le rsultat par le departement_id que cette colonne est la troisime position dans la clause SELECT. 4. Vous pouvez trier les rsultats de la requte par plus d'une colonne. La limite de tri est le nombre de colonnes dans la table donne. Dans la clause ORDER BY, spcifiez les colonnes et sparer les noms de colonnes par des virgules. Si vous souhaitez inverser l'ordre d'une colonne, spcifiez DESC aprs le nom.

Oracle Database 11g: SQL Fundamentals I 2 - 59

Lesson Agenda
Limiter les lignes avec:
La clause WHERE Les conditions de comparaison avec =, <=, BETWEEN, IN, LIKE, NULL et les conditions Conditions logiques l'aide AND, OR et NOT

Rgles de priorit des oprateurs dans une expression Tri des lignes l'aide de la clause ORDER BY Les variables de substitution Commande DEFINE and VERIFY

1 - 60

Copyright 2007, Oracle. All rights reserved.

Oracle Database 11g: SQL Fundamentals I 2 - 60

variables de substitution

... salary = ? department_id = ? ... last_name = ? ... je veux interroger diffrent valeurs.

1 - 61

Copyright 2007, Oracle. All rights reserved.

variables de substitution Jusqu' prsent, toutes les instructions SQL ont t excutes avec des colonnes prdfinies, des conditions et de leurs valeurs. Supposons que vous vouliez une requte qui rpertorie les employs avec des emplois diffrents, et pas seulement ceux dont job_id est SA_REP. Vous pouvez modifier la clause WHERE pour fournir une valeur diffrente chaque fois que vous excutez la commande, mais il est aussi un moyen plus facile. En utilisant une variable de substitution la place des valeurs exactes dans la clause WHERE, vous pouvez excuter la mme requte pour diffrentes valeurs. Vous pouvez crer des rapports qui invitent les utilisateurs fournir leurs propres valeurs restreindre l'ventail des donnes retournes, l'aide de variables de substitution. Vous pouvez intgrer des variables de substitution dans un fichier de commandes ou dans une instruction SQL unique. Une variable peut tre considr comme un conteneur dans lequel les valeurs sont stockes temporairement. Lorsque l'instruction est excute, la valeur stocke est substitu.

Oracle Database 11g: SQL Fundamentals I 2 - 61

variables de substitution
Utilisez des variables de substitution pour:
Stocker temporairement des valeurs avec un seul esperluette (&) et double-esperluette (&&) la substitution

Utiliser les variables de substitution pour complter ce qui suit:


conditions WHERE Clauses ORDER BY expressions de colonne les noms de table Ensemble des instructions SELECT

1 - 62

Copyright 2007, Oracle. All rights reserved.

Variables de substitution (suite) Vous pouvez utiliser des variables de substitution mono-esperluette (&) pour stocker temporairement des valeurs. Vous pouvez galement prdfinir des variables l'aide de la commande DEFINE. DFINIR cre et assigne une valeur une variable. Gammes restreint de donnes: Exemples Rapports chiffres seulement pour le trimestre en cours ou plage de dates spcifie Les rapports sur les donnes pertinentes uniquement pour l'utilisateur qui demande le rapport Affichage de personnel que dans un dpartement donn Autres effets interactifs Les effets interactifs ne sont pas limits l'interaction directe de l'utilisateur avec la clause WHERE. Les mmes principes peuvent galement tre utiliss pour atteindre d'autres objectifs, tels que: Obtention des valeurs d'entre partir d'un fichier plutt que d'une personne Passage de valeurs partir d'une instruction SQL l'autre Remarque: Les deux SQL Developer et SQL * Plus de soutien des variables de substitution et les commandes DEFINE / undefine. Bien que SQL Developer ou SQL * Plus ne prend pas en charge les contrles de validation (sauf pour le type de donnes) sur l'entre utilisateur.

Oracle Database 11g: SQL Fundamentals I 2 - 62

Utilisation de la variable de substitution monoAmpersand


Utilisez une variable prfixe par une esperluette (&) pour inviter l'utilisateur une valeur:
SELECT employee_id, last_name, salary, department_id FROM employees WHERE employee_id = &employee_num ;

1 - 63

Copyright 2007, Oracle. All rights reserved.

Utilisation de la variable de substitution mono-Ampersand Lorsque vous excutez un rapport, les utilisateurs veulent souvent de limiter les donnes renvoyes dynamiquement. SQL * Plus ou SQL Developer offre cette flexibilit avec des variables utilisateur. Utilisez une esperluette (&) pour identifier chaque variable dans l'instruction SQL. Cependant, vous n'avez pas besoin de dfinir la valeur de chaque variable.

Notation &user_variable

Description Indique une variable dans une instruction SQL, si la variable n'existe pas, SQL * Plus ou SQL Developer invite l'utilisateur une valeur (la nouvelle variable est jet aprs usage.)

L'exemple de la diapositive cre une variable SQL Developer substitution d'un numro d'employ. Lorsque l'instruction est excute, SQL Developer invite l'utilisateur un numro d'employ et affiche ensuite le numro d'employ, nom de famille, le salaire et le numro de dpartement pour cet employ. Avec l'esperluette unique, l'utilisateur est invit chaque fois que la commande est excute si la variable n'existe pas.

Oracle Database 11g: SQL Fundamentals I 2 - 63

Utilisation de la variable de substitution monoAmpersand

1 - 64

Copyright 2007, Oracle. All rights reserved.

Utilisation de la variable de substitution mono-esperluette (suite) Lorsque SQL Developer dtecte que l'instruction SQL contient une esperluette, vous tes invit entrer une valeur pour la variable de substitution qui est nomm dans l'instruction SQL. Une fois que vous entrez une valeur, puis cliquez sur le bouton OK, les rsultats sont affichs dans l'onglet Rsultats de votre session SQL Developer.

Oracle Database 11g: SQL Fundamentals I 2 - 64

Les valeurs de caractre et date avec les variables de substitution


Utilisez des guillemets simples pour la date et les valeurs des caractres:
SELECT last_name, department_id, salary*12 FROM employees WHERE job_id = '&job_title' ;

1 - 65

Copyright 2007, Oracle. All rights reserved.

Les valeurs de caractre et date avec des variables de substitution Dans une clause WHERE, les valeurs de date et de caractre doit tre plac entre guillemets simples. La mme rgle s'applique aux variables de substitution. Entourez la variable entre guillemets simples dans l'instruction SQL elle-mme. Cette diapositive montre une requte pour rcuprer les noms des employs, des numros de dpartement et les salaires annuels de tous les employs sur la base de la valeur du titre d'emploi de la variable de substitution SQL Developer.

Oracle Database 11g: SQL Fundamentals I 2 - 65

Spcification de noms de colonnes,? Expressions et de texte


SELECT employee_id, last_name, job_id,&column_name FROM employees WHERE &condition ORDER BY &order_column ;

1 - 66

Copyright 2007, Oracle. All rights reserved.

Spcification des noms de colonnes, expressions et de texte Vous pouvez utiliser les variables de substitution non seulement dans la clause WHERE d'une instruction SQL, mais aussi que la substitution de noms de colonnes, expressions, ou du texte. exemple: L'exemple diaporama affiche le numro d'employ, nom, titre du poste, et une autre colonne qui est spcifi par l'utilisateur au moment de l'excution, de la table Employees. Pour chaque variable de substitution dans l'instruction SELECT, vous tes invit entrer une valeur, puis cliquez sur OK pour continuer. Si vous n'entrez pas une valeur pour la variable de substitution, vous obtenez une erreur lorsque vous excutez l'instruction prcdente. Remarque: Une variable de substitution peut tre utilis partout dans l'instruction SELECT, sauf que le premier mot est entr l'invite de commande.

Oracle Database 11g: SQL Fundamentals I 2 - 66

Utilisation de la variable double substitution


Utilisez esperluette double (&&) si vous souhaitez rutiliser la valeur de la variable sans inviter l'utilisateur chaque fois:
SELECT employee_id, last_name, job_id, &&column_name FROM employees ORDER BY &column_name ;

1 - 67 Copyright 2007, Oracle. All rights reserved.

Utilisation de la variable de substitution Double-Ampersand Vous pouvez utiliser le double esperluette (&&) variable de substitution si vous souhaitez rutiliser la valeur de la variable sans inviter l'utilisateur chaque fois. L'utilisateur voit le message de la valeur qu'une seule fois. Dans l'exemple de la diapositive, l'utilisateur est invit donner la valeur de la variable, nom_colonne, une seule fois. La valeur qui est fournie par l'utilisateur (departement_id) est utilis pour l'affichage et la commande de donnes. Si vous excutez la requte nouveau, vous ne serez pas invit entrer la valeur de la variable. SQL Developer stocke la valeur qui est fournie l'aide de la commande DEFINE, il l'utilise chaque fois que vous rfrencez le nom de la variable. Aprs une variable utilisateur est en place, vous devez utiliser la commande undefine de le supprimer:
UNDEFINE column_name

Oracle Database 11g: SQL Fundamentals I 2 - 67

Lesson Agenda
Limiter les lignes avec:
La clause WHERE Les conditions de comparaison avec =, <=, BETWEEN, IN, LIKE, NULL et les conditions Conditions logiques l'aide AND, OR et NOT

Rgles de priorit des oprateurs dans une expression Tri des lignes l'aide de la clause ORDER BY Les variables de substitution Commande DEFINE and VERIFY

1 - 68

Copyright 2007, Oracle. All rights reserved.

Oracle Database 11g: SQL Fundamentals I 2 - 68

Utilisation de la commande DEFINE


Utilisez la commande DEFINE pour crer et affecter une valeur une variable. Utilisez la commande UNDEFINE pour supprimer une variable.
DEFINE employee_num = 200 SELECT employee_id, last_name, salary, department_id FROM employees WHERE employee_id = &employee_num ; UNDEFINE employee_num

1 - 69

Copyright 2007, Oracle. All rights reserved.

Utilisation de la commande DEFINE L'exemple ci cre une variable de substitution pour un numro d'employ l'aide de la commande DEFINE. Au moment de l'excution, affiche le numro d'employ, le nom, le salaire et le numro de dpartement pour cet employ. Parce que la variable est cre en utilisant l'SQL Developer commande DEFINE, l'utilisateur n'est pas invit entrer une valeur pour le numro d'employ. Au lieu de cela, la valeur de la variable dfinie est automatiquement remplac dans l'instruction SELECT. La variable de substitution EMPLOYEE_NUM est prsent dans la session jusqu' ce que l'utilisateur annule la dfinition ou il quitte la session SQL Developer.

Oracle Database 11g: SQL Fundamentals I 2 - 69

Utilisation de la commande VERIFY


Utilisez la commande VERIFY pour basculer l'affichage de la variable de substitution, la fois avant et aprs SQL Developer remplace les variables de substitution avec les valeurs:
SET VERIFY ON SELECT employee_id, last_name, salary FROM employees WHERE employee_id = &employee_num;

1 - 70

Copyright 2007, Oracle. All rights reserved.

Utilisation de la commande VERIFY Pour confirmer les changements dans l'instruction SQL, utilisez la commande VERIFY. Rglage SET VERIFY ON forces SQL Developer pour afficher le texte d'une commande aprs qu'elle remplace les variables de substitution avec des valeurs. Pour voir la sortie VERIFY, vous devez utiliser Excuter le script (F5) icne dans la feuille de calcul SQL. SQL Developer affiche le texte d'une commande aprs qu'elle remplace les variables de substitution avec les valeurs, dans l'onglet Sortie de script comme indiqu dans la diapositive. L'exemple de la diapositive affiche la nouvelle valeur de la colonne employe_id dans l'instruction SQL suivie par la sortie. SQL plus Variables systme SQL * Plus utilise des variables de divers systmes qui contrlent l'environnement de travail. L'une des variables est VERIFY. Pour obtenir une liste complte de toutes les variables du systme, vous pouvez excuter la commande show all sur la commande SQL * Plus rapide.

Oracle Database 11g: SQL Fundamentals I 2 - 70

Summary
Dans cette leon, vous devriez avoir appris : Utilisez la clause WHERE pour limiter les lignes de production: Utiliser les conditions de comparaison Utilisez le BETWEEN, IN, LIKE, NULL et les oprateurs Appliquer les oprateurs logiques AND, OR et NOT Utiliser la clause ORDER BY pour trier les lignes de SELECT *|{[DISTINCT] column|expression [alias],...} production:
FROM table [WHERE condition(s)] [ORDER BY {column, expr, alias} [ASC|DESC]] ;

Utiliser la substitution et commercial de restreindre et trier la sortie au? Temps d'excution


1 - 71 Copyright 2007, Oracle. All rights reserved.

rsum Dans cette leon, vous devriez avoir appris propos de la restriction et tri des lignes qui sont retournes par l'instruction SELECT. Vous devez galement avoir appris mettre en uvre les diffrents oprateurs et les conditions. En utilisant les variables de substitution, vous pouvez ajouter de la souplesse vos instructions SQL. Cela permet aux requtes pour demander l'tat du filtre pour les lignes lors de l'excution.

Oracle Database 11g: SQL Fundamentals I 2 - 71

Pratique 2
Cette pratique couvre les sujets suivants: La slection de donnes et de modifier l'ordre des rangs? Qui sont affichs Restriction de lignes l'aide de la clause WHERE Tri des lignes avec la clause ORDER BY Utilisation des variables de substitution pour ajouter de la flexibilit votre? SQL SELECT

1 - 72

Copyright 2007, Oracle. All rights reserved.

Pratique 2: Vue d'ensemble Dans cette pratique, vous construisez plus de rapports, y compris les tats qui utilisent la clause WHERE et la clause ORDER BY. Vous faites les instructions SQL plus rutilisables et gnriques en incluant la substitution esperluette.

Oracle Database 11g: SQL Fundamentals I 2 - 72

Pratique 2 Le dpartement RH a besoin de votre aide pour crer des requtes. 1. En raison de problmes budgtaires, le dpartement RH a besoin d'un rapport qui affiche le nom et le salaire des employs qui gagnent plus de $ 12,000. Enregistrer votre instruction SQL dans un fichier nomm lab_02_01.sql. Excutez votre requte.

2. Ouvrez une nouvelle feuille de calcul SQL. Crer un rapport qui affiche le nom et le numro de dpartement pour d'employ numro 176. Excutez la requte.

3. Le dpartement RH a besoin de trouver des employs haut salaire et faible salaire. Modifier lab_02_01.sql pour afficher le nom de famille et le salaire de tout employ dont le salaire n'est pas de l'ordre de $ 5.000 $ 12.000. Sauvegardez votre instruction SQL comme lab_02_03.sql.

Oracle Database 11g: SQL Fundamentals I 2 - 73

Practice 2 (suite) 4. Crer un rapport pour afficher le dernier nom, ID du travail, et la date de dbut pour les employs avec les noms de famille de Matos et Taylor. Commandez la requte par ordre croissant de la date de dbut.

5. Afficher le nom et le numro de dpartement de tous les employs dans les ministres 20 ou 50 dans l'ordre alphabtique par nom.?

6. Modifier lab_02_03.sql pour afficher le nom et le salaire des employs qui gagnent entre $ 5.000 et $ 12.000, et sont dans le dpartement 20 ou 50. Marquez l'employ colonnes et Salaire mensuel, respectivement. Renregistrer lab_02_03.sql que lab_02_06.sql. Excutez l'instruction dans lab_02_06.sql.

Oracle Database 11g: SQL Fundamentals I 2 - 74

Pratique 2 (suite) 7. Le dpartement RH a besoin d'un rapport qui affiche le nom et la date d'embauche pour tous les employs qui ont t embauchs en 1994.

8. Crer un rapport pour afficher le nom et le titre du poste de tous les employs qui n'ont pas un gestionnaire.

9. Crer un rapport pour afficher le nom, le salaire et la commission de tous les employs qui gagnent des commissions. Trier des donnes dans l'ordre dcroissant du salaire et des commissions.? Utilisez la position numrique de la colonne dans la clause ORDER BY.

10. Les membres du dpartement des ressources humaines voulez avoir plus de flexibilit avec les requtes que vous crivez. Ils aimeraient un rapport qui affiche le nom et le salaire des employs qui gagnent plus qu'un montant spcifi par l'utilisateur aprs l'invite. Enregistrez cette requte dans un fichier nomm lab_02_10.sql. Si vous entrez l'invite 12000, le rapport affiche les rsultats suivants:

Oracle Database 11g: SQL Fundamentals I 2 - 75

Pratique 2 (suite) 11. Le dpartement des ressources humaines veut excuter des rapports bass sur un gestionnaire. Crez une requte qui demande l'utilisateur un ID manager et gnre l'ID d'employ, nom de famille, le salaire et service pour les employs que gestionnaire. Le dpartement des ressources humaines veut la possibilit de trier le rapport sur une colonne slectionne. Vous pouvez tester les donnes avec les valeurs suivantes: Manager_id = 103, tries par last_name:

Manager_id = 201, tries par salaire:

Manager_id = 124, tries par employe_id:

Oracle Database 11g: SQL Fundamentals I 2 - 76

Pratique 2 (suite) Si vous avez le temps, faites les exercices suivants: 12. Afficher tous les noms des employs dernires dans lequel la troisime lettre du nom est a.

13. Afficher les noms de famille de tous les employs qui ont la fois un a et e dans leur nom de famille.

Si vous voulez un dfi supplmentaire, faites les exercices suivants: 14. Afficher le nom de famille, le travail, et le salaire de tous les employs dont les emplois sont soit ceux d'un reprsentant des ventes ou d'un commis aux stocks, et dont les salaires ne sont pas gaux 2.500 $, 3.500 $, ou 7,000 $.

15. Modify lab_02_06.sql to display the last name, salary, and commission for all employees whose commission is 20%. Resave lab_02_06.sql as lab_02_15.sql. Rerun the statement in lab_02_15.sql.

Oracle Database 11g: SQL Fundamentals I 2 - 77

En utilisant une seule range de fonctions Sortie Personnaliser

1 - 79

Copyright 2007, Oracle. All rights reserved.

Objectif
Aprs avoir termin cette leon, vous devriez tre en mesure de faire ce qui suit: Dcrire les divers types de fonctions disponibles dans SQL Utilisez caractre, le nombre et les fonctions de date dans une instruction SELECT

1 - 80

Copyright 2007, Oracle. All rights reserved.

objectifs Fonctions rendre le bloc de requte de base plus puissant, et ils sont utiliss pour manipuler les valeurs des donnes. Il s'agit du premier de deux leons qui explorent des fonctions. Il se concentre sur une seule range de caractres, le nombre et les fonctions de date.

Oracle Database 11g: SQL Fundamentals I 3 - 80

Lesson Agenda
Fonctions SQL une ligne fonctions de caractres fonctions numriques Travailler avec les dates Les fonctions de date

1 - 81

Copyright 2007, Oracle. All rights reserved.

Oracle Database 11g: SQL Fundamentals I 3 - 81

SQL Functions

Input Function arg 1 arg 2 Fonction de l'action

Output

Result value

arg n

1 - 82

Copyright 2007, Oracle. All rights reserved.

Fonctions SQL Les fonctions sont une fonctionnalit trs puissante de SQL. Ils peuvent tre utiliss pour effectuer les oprations suivantes: Effectuer des calculs sur des donnes Modifier des donnes individuelles Manipuler sortie pour des groupes de lignes Format des dates et des nombres pour l'affichage Autre types de donnes des colonnes Les fonctions SQL prennent parfois des arguments et renvoient toujours une valeur. Remarque: Si vous voulez savoir si une fonction est une instruction SQL: 2003 conformes fonction, reportez-vous la conformit de base Oracle Pour SQL: 2003 section dans Oracle Database 11g SQL Langage de rfrence, Release 1 (11.1).

Oracle Database 11g: SQL Fundamentals I 3 - 82

Deux types de fonctions SQL

Functions

Fonctions une ligne Retourner un rsultat par ligne

Functions Ligne multiple Retourner un rsultat par ensemble de lignes

1 - 83

Copyright 2007, Oracle. All rights reserved.

Deux types de fonctions SQL Il existe deux types de fonctions: Fonctions une ligne Fonctions Plusieurs ligne Fonctions une ligne Ces fonctions oprent sur des lignes simples seulement et retourner un rsultat par ligne. Il existe diffrents types de fonctions une range. Cette leon couvre les suivantes: Character Number Date Conversion General Fonctions Plusieurs ligne Les fonctions peuvent manipuler les groupes de lignes pour donner un rsultat par groupe de lignes. Ces fonctions sont galement connus comme les fonctions de groupe (couvert dans la leon 5 intitul la communication des donnes agrges l'aide des fonctions de groupe"). Remarque: Pour plus d'informations et une liste complte des fonctions disponibles et leur syntaxe, consultez la rubrique Fonctions d'Oracle Database 11g SQL Langage de rfrence, Release 1 (11.1).

Oracle Database 11g: SQL Fundamentals I 3 - 83

fonctions une ligne


fonctions une ligne: Manipuler des lments de donnes Accepter les arguments et retourne une valeur Loi sur chaque ligne renvoye Retourner un rsultat par ligne Peut modifier le type de donnes Peuvent tre imbriques Accepter les arguments qui peuvent tre une colonne ou une expression
function_name [(arg1, arg2,...)]

1 - 84

Copyright 2007, Oracle. All rights reserved.

Single-Row Fonctions une range de fonctions sont utilises pour manipuler les lments de donnes. Ils acceptent un ou plusieurs arguments et retourne une valeur pour chaque ligne renvoye par la requte. Un argument peut tre l'un des suivants: Fourni par l'utilisateur constante valeur de la variable nom de la colonne expression Caractristiques de simple-range fonctions comprennent: Agissant sur chaque ligne qui est retourne dans la requte Revenant un rsultat par ligne ventuellement renvoyer une valeur de donnes d'un type diffrent de celui qui est rfrenc Peut-tre attend un ou plusieurs arguments Peut tre utilis dans SELECT, WHERE et ORDER BY; peuvent tre imbriques Dans la syntaxe: nom_fonction est le nom de la fonction arg1, arg2 est un argument pour tre utilis par la fonction. Cela peut tre reprsent par un nom de colonne ou expression.

Oracle Database 11g: SQL Fundamentals I 3 - 84

fonctions une ligne

Character

General

Single-row functions

Number

Conversion

Date

1 - 85

Copyright 2007, Oracle. All rights reserved.

Single-Row Fonctions (suite) Cette leon porte sur les lments suivants une range de fonctions: Fonctions de caractres: Accepter la saisie de caractres et peut retourner des caractres et des valeurs numriques Fonctions numriques: Accepter l'entre numrique et renvoient des valeurs numriques Les fonctions de date: Agir sur les valeurs du type de donnes DATE (Toutes les fonctions de date renvoyer une valeur de type de donnes DATE exception de la fonction MONTHS_BETWEEN, qui renvoie un nombre.) Les suivants une range de fonctions sont discutes dans la prochaine leon intitule Utilisation des fonctions de conversion et des expressions conditionnelles: Les fonctions de conversion: Convertir une valeur d'un type de donnes un autre Fonctions gnrales: - NVL - NVL2 - NULLIF - COALESCE - CASE - DECODE

Oracle Database 11g: SQL Fundamentals I 3 - 85

Lesson Agenda
Fonctions SQL simple ligne fonctions de caractres fonctions numriques Travailler avec les dates Les fonctions de date

1 - 86

Copyright 2007, Oracle. All rights reserved.

Oracle Database 11g: SQL Fundamentals I 3 - 86

fonctions de caractres

fonctions de caractres

Fonctions de conversion de cas LOWER UPPER INITCAP

Caractre de manipulation fonctions CONCAT SUBSTR LENGTH INSTR LPAD | RPAD TRIM REPLACE

1 - 87

Copyright 2007, Oracle. All rights reserved.

Fonctions de caractres Fonctions de caractres une range accepter des donnes de caractres en entre et peut retourner des caractres et des valeurs numriques. Fonctions de caractres peut tre divis comme suit: Case fonctions de conversion Caractre fonctions de manipulation Function Purpose
LOWER(column|expression) UPPER(column|expression) INITCAP(column|expression) Converts alpha character values to lowercase Converts alpha character values to uppercase Converts alpha character values to uppercase for the first letter of each word; all other letters in lowercase

CONCAT(column1|expression1, Concatenates the first character value to the second column2|expression2) character value; equivalent to concatenation operator (||) SUBSTR(column|expression,m[ Returns specified characters from character value starting at ,n]) character position m, n characters long (If m is negative, the count starts from the end of the character value. If n is omitted, all characters to the end of the string are returned.)

Remarque: Les fonctions dcrites dans cette leon ne sont que quelques-unes des fonctions disponibles.
Oracle Database 11g: SQL Fundamentals I 3 - 87

Fonctions de caractres(suite)
Function LENGTH(column|expression) INSTR(column|expression, string, [,m], [n] ) Purpose

Returns the number of characters in the expression Returns the numeric position of a named string. Optionally, you can provide a position m to start searching, and the occurrence n of the string. m and n default to 1, meaning start the search at the beginning of the string and report the first occurrence. Returns an expression left-padded to length of n characters with a character expression. Returns an expression right-padded to length of n characters with a character expression.

LPAD(column|expression, n, 'string') RPAD(column|expression, n, 'string')

TRIM(leading|trailing|both, Enables you to trim leading or trailing characters (or trim_character FROM both) from a character string. If trim_character or trim_source)

trim_source is a character literal, you must enclose it in single quotation marks. This is a feature that is available in Oracle8i and later versions.

REPLACE(text, Searches a text expression for a character string and, if search_string, found, replaces it with a specified replacement string replacement_string) Remarque: Certaines des fonctions qui sont entirement ou partiellement SQL: 2003 sont conformes : UPPER LOWER TRIM LENGTH SUBSTR INSTR

Oracle Database 11g: SQL Fundamentals I 3 - 88

Fonctions de conversion de cas


Ces fonctions convertissent le cas des chanes de caractres:
Function
LOWER('SQL Course') UPPER('SQL Course') INITCAP('SQL Course')

Result
sql course SQL COURSE Sql Course

1 - 89

Copyright 2007, Oracle. All rights reserved.

fonctions de conversion de cas LOWER, UPPER, and INITCAP sont les trois cas de conversion fonctions. LOWER: Convertit une chane de caractres majuscules et des minuscules ou des majuscules en minuscules UPPER: Convertit une chane de caractres majuscules et des minuscules en majuscules ou en minuscules INITCAP: Convertit la premire lettre de chaque mot en majuscule et les autres lettres en minuscules
SELECT 'The job id for '||UPPER(last_name)||' is ' ||LOWER(job_id) AS "EMPLOYEE DETAILS" FROM employees;

Oracle Database 11g: SQL Fundamentals I 3 - 89

Using Case-Conversion Functions


Afficher le numro d'employ, le nom et le numro de dpartement pour l'employ higgins:
SELECT employee_id, last_name, department_id FROM employees WHERE last_name = 'higgins';

SELECT employee_id, last_name, department_id FROM employees WHERE LOWER(last_name) = 'higgins';

1 - 90

Copyright 2007, Oracle. All rights reserved.

Utilisation de cas de conversion des fonctions L'exemple diaporama affiche le numro d'employ, le nom et le numro de dpartement de l'employ Higgins. La clause WHERE de la premire instruction SQL spcifie le nom de l'employ comme higgins. Parce que toutes les donnes dans la table EMPLOYEES est stock dans les cas appropris, le nom higgins ne trouve pas de correspondance dans la table, et aucune ligne n'est slectionne. La clause WHERE de la deuxime instruction SQL spcifie que le nom employ dans la table EMPLOYES est compare higgins, la conversion de la colonne LAST_NAME en minuscules des fins de comparaison. Parce que les deux noms sont maintenant en minuscules, une correspondance est trouve et une ligne est slectionne. La clause WHERE peut tre rcrite de la faon suivante pour produire le mme rsultat: ... WHERE nom = 'Higgins Le nom dans le rsultat apparat tel qu'il a t stock dans la base de donnes. Pour afficher le nom en majuscules, utilisez la fonction UPPER dans l'instruction SELECT.
SELECT employee_id, UPPER(last_name), department_id FROM employees WHERE INITCAP(last_name) = 'Higgins';

Oracle Database 11g: SQL Fundamentals I 3 - 90

fonctions de manipulation de Caractre


Ces fonctions de manipuler des chanes de caractres:
Function
CONCAT('Hello', 'World') SUBSTR('HelloWorld',1,5) LENGTH('HelloWorld') INSTR('HelloWorld', 'W') LPAD(salary,10,'*') RPAD(salary, 10, '*') REPLACE ('JACK and JUE','J','BL') TRIM('H' FROM 'HelloWorld')

Result
HelloWorld Hello 10 6 *****24000 24000***** BLACK and BLUE elloWorld

1 - 91

Copyright 2007, Oracle. All rights reserved.

fonctions de manipulation de Caractre CONCAT, SUBSTR, LENGTH, INSTR, LPAD, RPAD etTRIM sont les fonctions de manipulation de caractre qui sont couverts dans cette leon. CONCAT: Relie ensemble des valeurs (Vous tes limit l'aide de deux paramtres avec CONCAT.) SUBSTR: Extrait une chane de longueur dtermine LONGUEUR: Affiche la longueur d'une chane comme une valeur numrique INSTR: Trouve la position numrique d'un personnage nomm LPAD: Renvoie une expression de gauche rembourr la longueur de n caractres avec une expression de caractres RPAD: Renvoie une expression complte droite la longueur de n caractres avec une expression de caractres TRIM: Trims attaque ou de fuite caractres (ou les deux) d'une chane de caractres (Si trim_character ou trim_source est un caractre littral, vous devez le placer entre guillemets simples.) Remarque: Vous pouvez utiliser des fonctions telles que UPPER et LOWER avec la substitution esperluette. Par exemple, utilisez UPPER ('& job_title') de sorte que l'utilisateur n'a pas besoin d'entrer le titre du poste dans un cas particulier.

Oracle Database 11g: SQL Fundamentals I 3 - 91

Utilisation des fonctions de manipulation de caractres


1
SELECT employee_id, CONCAT(first_name, last_name) NAME, job_id, LENGTH (last_name), INSTR(last_name, 'a') "Contains 'a'?" FROM employees WHERE SUBSTR(job_id, 4) = 'REP';

2 3

1
1 - 92

Copyright 2007, Oracle. All rights reserved.

Utilisation de fonctions de manipulation de Caractre L'exemple diaporama affiche employs prnoms et noms de famille runis, la longueur du nom de l'employ dernier, et la position numrique de la lettre a dans le nom de l'employ dernire pour tous les employs qui ont la chane, REP, contenue dans le travail ID partir de la quatrime position de l'ID du travail. exemple: Modifiez l'instruction SQL dans la diapositive pour afficher les donnes de ces employs dont le nom se termine par la lettre n.
SELECT LENGTH FROM WHERE employee_id, CONCAT(first_name, last_name) NAME, (last_name), INSTR(last_name, 'a') "Contains 'a'?" employees SUBSTR(last_name, -1, 1) = 'n';

Oracle Database 11g: SQL Fundamentals I 3 - 92

Lesson Agenda
Fonctions SQL simple ligne fonctions de caractres fonctions numriques Travailler avec les dates Les fonctions de date

1 - 93

Copyright 2007, Oracle. All rights reserved.

Oracle Database 11g: SQL Fundamentals I 3 - 93

Fonctions nombre
ROUND: Rondes valeur une dcimale spcifie TRUNC: Tronque la valeur une dcimale spcifie MOD: reste de la division de retour
Function
ROUND(45.926, 2) TRUNC(45.926, 2) MOD(1600, 300)

Result
45.93 45.92 100

1 - 94

Copyright 2007, Oracle. All rights reserved.

Functions nombre Fonctions numriques accepter une entre numrique et renvoient des valeurs numriques. Cette section dcrit certaines des fonctions numriques.

Function
ROUND(column|expression, n)

Purpose Rounds the column, expression, or value to n decimal places or, if n is omitted, no decimal places (If n is negative, numbers to the left of decimal point are rounded.) Truncates the column, expression, or value to n decimal places or, if n is omitted, n defaults to zero Returns the remainder of m divided by n

TRUNC(column|expression, n) MOD(m,n)

Note: Cette liste ne contient que quelques-unes des fonctions disponibles nombre. Pour plus d'informations, voir la section sur les fonctions numriques dans Oracle Database 11g SQL Langage de rfrence, Release 1 (11.1).

Oracle Database 11g: SQL Fundamentals I 3 - 94

Utilisation de la fonction ROUND

2 3

SELECT ROUND(45.923,2), ROUND(45.923,0), ROUND(45.923,-1) FROM DUAL;

DUAL est une table virtuelle que vous pouvez utiliser pour afficher les rsultats des fonctions et des calculs.

1 - 95

Copyright 2007, Oracle. All rights reserved.

Utilisation de la fonction ROUND La fonction ROUND arrondit la colonne, d'expression ou de la valeur n dcimales. Si le second argument est 0 ou est absent, la valeur est arrondie zro dcimale. Si le second argument est 2, la valeur est arrondie deux dcimales prs. A l'inverse, si le second argument est de -2, la valeur est arrondie deux dcimales gauche (arrondi l'unit la plus proche de 100). La fonction ROUND peut galement tre utilis avec les fonctions de date. Vous verrez des exemples plus loin dans cette leon. Table DUAL La table DUAL est dtenu par les utilisateurs SYS et peut tre consult par tous les utilisateurs. Il contient une colonne DUMMY, et une ligne avec la valeur de X. La table DUAL est utile lorsque vous voulez retourner une valeur qu'une seule fois (par exemple, la valeur d'une constante, pseudocolumn, ou une expression qui n'est pas driv d'une table avec des donnes utilisateur). La table DUAL est gnralement utilis pour l'intgralit de la syntaxe de la clause SELECT, parce que les deux clauses SELECT et FROM sont obligatoires, et les calculs de plusieurs n'avez pas besoin de slectionner les tables relles.

Oracle Database 11g: SQL Fundamentals I 3 - 95

Utilisation de la fonction TRUNC

2 3

SELECT TRUNC(45.923,2), TRUNC(45.923), TRUNC(45.923,-1) FROM DUAL;

1 - 96

Copyright 2007, Oracle. All rights reserved.

Utilisation de la fonction TRUNC La fonction TRONQUE tronque la colonne, d'expression ou de la valeur n dcimales. La fonction TRUNC travaille avec des arguments similaires ceux de la fonction ARRONDI. Si le second argument est 0 ou est absent, la valeur est tronque zro dcimale. Si le second argument est 2, la valeur est tronque deux dcimales. A l'inverse, si le second argument est de -2, la valeur est tronque deux dcimales gauche. Si le second argument est -1, la valeur est tronque une dcimale vers la gauche. Comme la fonction ROUND, TRUNC la fonction peut tre utilise avec les fonctions de date.

Oracle Database 11g: SQL Fundamentals I 3 - 96

Utilisation de la fonction MOD


Pour tous les salaris ayant le titre du poste de reprsentant des ventes, calculer le reste du salaire aprs elle est divise par 5000.
SELECT last_name, salary, MOD(salary, 5000) FROM employees WHERE job_id = 'SA_REP';

1 - 97

Copyright 2007, Oracle. All rights reserved.

Utilisation de la fonction MOD La fonction MOD trouve le reste de l'argument d'abord divis par le second argument. L'exemple diaporama calcule le reste du salaire aprs une division par 5.000 pour tous les salaris dont l'emploi est SA_REP ID. Remarque: La fonction MOD est souvent utilis pour dterminer si une valeur est paire ou impaire.

Oracle Database 11g: SQL Fundamentals I 3 - 97

Lesson Agenda
Fonctions SQL simple ligne fonctions de caractres fonctions numriques Travailler avec les dates Les fonctions de date

1 - 98

Copyright 2007, Oracle. All rights reserved.

Oracle Database 11g: SQL Fundamentals I 3 - 98

Travailler avec les dates


Les magasins bases de donnes Oracle date dans un format numrique interne: sicle, anne, mois, jour, heures, minutes et secondes. Le format d'affichage par dfaut la date est DD-MON-RR. Vous permet de stocker les dates du 21e sicle au 20e sicle En prcisant que les deux derniers chiffres de l'anne Vous permet de stocker les dates du 20me sicle en sicle 21e de la mme faon
SELECT last_name, hire_date FROM employees WHERE hire_date < '01-FEB-88'; ';

1 - 99

Copyright 2007, Oracle. All rights reserved.

Travailler avec les dates Les magasins bases de donnes Oracle date dans un format numrique interne, ce qui reprsente sicle, anne, mois, jour, heures, minutes et secondes. L'affichage par dfaut et le format d'entre pour n'importe quelle date est DD-MON-RR. Valable dates Oracle sont entre Janvier 1, 4712 avant J.-C., et Dcembre 31, 9999 Dans l'exemple de la diapositive, la colonne de sortie hire_date est affiche dans le format par dfaut DD-MON-RR. Toutefois, les dates ne sont pas stockes dans la base de donnes sous ce format. Tous les composants de la date et l'heure sont stockes. Donc, mme si un tel hire_date 17-JUN-87 est affich comme le jour, le mois et l'anne, il est galement temps et de l'information sicle associ la date. Les donnes compltes pourraient tre Juin 17, 1987, 17:10:43.

Oracle Database 11g: SQL Fundamentals I 3 - 99

Date Format RR

Current Year 1995 1995 2001 2001

Specified Date 27-OCT-95 27-OCT-17 27-OCT-17 27-OCT-95

RR Format 1995 2017 2017 1995

YY Format 1995 1917 2017 2095

If the specified two-digit year is: 049 If two digits of the current year are: 049 The return date is in the current century The return date is in the century after the current one 5099 The return date is in the century before the current one The return date is in the current century

5099

1 - 100

Copyright 2007, Oracle. All rights reserved.

RR Date Format
Le format de date RR est similaire l'lment YY, mais vous pouvez l'utiliser pour spcifier des sicles diffrents. Utilisez l'lment RR format de la date, au lieu de YY afin que le sicle de la valeur de retour varie en fonction de la donne de deux chiffres pour l'anne et les deux derniers chiffres de l'anne en cours. Le tableau de la diapositive rsume le comportement de l'lment de RR. Current Year Given Date Interpreted (RR) Interpreted (YY)
1994 1994 2001 27-OCT-95 27-OCT-17 27-OCT-17 1995 2017 2017 1995 1917 2017

Oracle Database 11g: SQL Fundamentals I 3 - 100

Format de date Oracle Ces donnes sont stockes en interne comme suit: ANNE MOIS JOUR SICLE Heure Minute Seconde 19 87 06 17 17 10 43

Sicles et l'anne 2000 Quand un enregistrement avec une colonne de date est insre dans un tableau, les renseignements sicle est ramass de la fonction SYSDATE. Toutefois, lorsque la colonne date est affiche sur l'cran, le composant sicle n'est pas affich (par dfaut). Le type de donnes DATE stocke toujours les informations anne comme un nombre quatre chiffres l'intrieur: deux chiffres pour le sicle et deux chiffres pour l'anne. Par exemple, la base de donnes Oracle stocke l'anne 1987 ou 2004, et non pas seulement comme 87 ou 04.

Oracle Database 11g: SQL Fundamentals I 3 - 101

Utilisation de la fonction SYSDATE


SYSDATE est une fonction qui retourne: date temps
SELECT sysdate FROM dual; ;

1 - 102

Copyright 2007, Oracle. All rights reserved.

Utilisation de la fonction SYSDATE SYSDATE est une fonction date laquelle renvoie la date actuelle du serveur de base de donnes et le temps. Vous pouvez utiliser SYSDATE juste comme vous utiliseriez n'importe quel nom autre colonne. Par exemple, vous pouvez afficher la date du jour en slectionnant SYSDATE d'une table. Il est d'usage pour slectionner SYSDATE d'une table fictif appel DUAL. Remarque: SYSDATE renvoie la date et l'heure rgle pour le systme d'exploitation sur lequel rside la base de donnes. Par consquent, si vous tes dans un endroit en Australie et reli une base de donnes distante dans un endroit aux tats-Unis (.-U.), la fonction sysdate retournera la date et l'heure amricaine. Dans ce cas, vous pouvez utiliser la fonction CURRENT_DATE qui renvoie la date actuelle dans le fuseau horaire de session. La fonction CURRENT_DATE et d'autres fonctions lies fuseaux horaires sont discuts en dtail dans le cours intitul Oracle Database 11g: SQL Fundamentals II.

Oracle Database 11g: SQL Fundamentals I 3 - 102

Arithmtiques avec des dates


Ajouter ou soustraire un nombre partir d'une date ou d'une date de valeur qui en rsulte. Soustraire deux dates pour trouver le nombre de jours entre ces deux dates. Ajouter des heures une date en divisant le nombre d'heures par 24.

1 - 103

Copyright 2007, Oracle. All rights reserved.

Arithmtiques avec des dates Parce que les magasins de bases de donnes date en chiffres, vous pouvez effectuer des calculs en utilisant les oprateurs arithmtiques telles que l'addition et la soustraction. Vous pouvez ajouter et soustraire des constantes numriques ainsi que les dates. Vous pouvez effectuer les oprations suivantes :

Operation date + number date number date date date + number/24

Result Date Date Number of days Date

Description Adds a number of days to a date Subtracts a number of days from a date Subtracts one date from another Adds a number of hours to a date

Oracle Database 11g: SQL Fundamentals I 3 - 103

Utilisation des oprateurs arithmtiques Avec des dates


SELECT last_name, (SYSDATE-hire_date)/7 AS WEEKS FROM employees WHERE department_id = 90;

1 - 104

Copyright 2007, Oracle. All rights reserved.

Utilisation des oprateurs arithmtiques avec des dates L'exemple de la diapositive affiche le nom de famille et le nombre de semaines de travail pour tous les employs du service 90. Il soustrait la date laquelle l'employ a t embauch partir de la date du jour (SYSDATE) et divise le rsultat par 7 pour calculer le nombre de semaines pendant lesquelles un travailleur a t employ. Remarque: SYSDATE est une fonction SQL qui retourne la date et l'heure actuelles. Vos rsultats peuvent varier en fonction de la date et l'heure rgle pour le systme d'exploitation de votre base de donnes locale lorsque vous excutez la requte SQL. Si une date plus courante est soustraite d'une ancienne date, la diffrence est un nombre ngatif.

Oracle Database 11g: SQL Fundamentals I 3 - 104

Lesson Agenda
Fonctions SQL simple ligne fonctions de caractres fonctions numriques Travailler avec les dates Les fonctions de date

1 - 105

Copyright 2007, Oracle. All rights reserved.

Oracle Database 11g: SQL Fundamentals I 3 - 105

fonctions de manipulation de Date

Function
MONTHS_BETWEEN ADD_MONTHS NEXT_DAY LAST_DAY ROUND TRUNC

Result
Number of months between two dates Add calendar months to date Next day of the date specified Last day of the month Round date Truncate date

1 - 106

Copyright 2007, Oracle. All rights reserved.

Functions Manipulation Date Les fonctions de date fonctionner sur les dates d'Oracle. Toutes les fonctions de date renvoyer une valeur de type de donnes DATE sauf MONTHS_BETWEEN, qui retourne une valeur numrique. MONTHS_BETWEEN (date1, date2): Trouve le nombre de mois entre date1 et date2. Le rsultat peut tre positif ou ngatif. Si date1 est postrieure date2, le rsultat est positif, si date1 est antrieure date2, le rsultat est ngatif. La partie non entire du rsultat reprsente une partie du mois. ADD_MONTHS (date, n): Ajoute un nombre n de mois civils ce jour. La valeur de n doit tre un entier et peut tre ngatif. NEXT_DAY (date, 'char'): Trouve la date du prochain jour de la semaine spcifi (char) qui suit la date. La valeur de char peut tre un nombre reprsentant une journe ou une chane de caractres. LAST_DAY (date): Trouve la date du dernier jour du mois qui contient la date La liste ci-dessus est un sous-ensemble des fonctions de date disponibles. Fonctions chiffre rond et TRUNC peut galement tre utilise pour manipuler les valeurs de date comme indiqu ci-dessous: ROUND (date [, 'fmt']): Date de retour arrondi l'unit qui est spcifi par le modle de format fmt. Si le modle de format fmt est omis, la date est arrondi la journe. TRUNC (date [, 'fmt']): Date de retour avec la partie heure de la journe tronque l'unit qui est spcifi par le modle de format fmt. Si le modle de format fmt est omis, la date est tronque jours le plus proche. Les modles de format sont dcrites en dtail dans la prochaine leon intitule Utilisation des fonctions de conversion et des expressions conditionnelles."

Oracle Database 11g: SQL Fundamentals I 3 - 106

Utilisation des fonctions de Date

Function
MONTHS_BETWEEN ('01-SEP-95','11-JAN-94') ADD_MONTHS (31-JAN-96',1) NEXT_DAY LAST_DAY ('01-SEP-95','FRIDAY') ('01-FEB-95')

Result
19.6774194 29-FEB-96' '08-SEP-95' '28-FEB-95'

1 - 107

Copyright 2007, Oracle. All rights reserved.

Utilisation des fonctions Date de Dans l'exemple toboggan, la fonction ADD_MONTHS ajoute un mois la date de valeur fournie , 31-JAN-96" et renvoie "29-FEB-96." La fonction reconnat l'anne 1996 comme une anne bissextile et donc retourne le dernier jour du mois Fvrier. Si vous modifiez la valeur de la date d'entre "31-JAN-95", la fonction retourne "28-FEB-95." Par exemple, afficher le numro de l'employ, la date d'embauche, le nombre de mois de travail, date de rvision de six mois, le premier vendredi aprs la date d'embauche, et le dernier jour du mois de location pour tous les employs qui ont t employes pour moins de 100 mois.
SELECT employee_id, hire_date, MONTHS_BETWEEN (SYSDATE, hire_date) TENURE, ADD_MONTHS (hire_date, 6) REVIEW, NEXT_DAY (hire_date, 'FRIDAY'), LAST_DAY(hire_date) FROM employees WHERE MONTHS_BETWEEN (SYSDATE, hire_date) < 100;

Oracle Database 11g: SQL Fundamentals I 3 - 107

Utilisation des fonctions ROUND et TRUNC avec des dates


Supposons SYSDATE = '25-JUL-03 ':
Function
ROUND(SYSDATE,'MONTH') ROUND(SYSDATE ,'YEAR') TRUNC(SYSDATE ,'MONTH') TRUNC(SYSDATE ,'YEAR')

Result
01-AUG-03 01-JAN-04 01-JUL-03 01-JAN-03

1 - 108

Copyright 2007, Oracle. All rights reserved.

Utilisation des fonctions ROUND et TRUNC avec des dates Les fonctions ROUND et TRUNC peut tre utilis pour les valeurs numriques et la date. Lorsqu'il est utilis avec les dates, ces fonctions arrondissent ou tronquer pour le modle au format spcifi. Par consquent, vous pouvez arrondir les dates l'anne prs ou au mois. Si le modle de format mois, date 15.01 rsultat dans le premier jour du mois en cours. Dates 16-31 rsultat dans le premier jour du mois suivant. Si le modle de format est l'anne, les mois 06.01 rsultat en Janvier 1 de l'anne en cours. Mois 12.07 rsultat en Janvier 1 de l'anne prochaine. exemple: Comparer les dates d'embauche pour tous les salaris qui ont commenc en 1997. Afficher le numro de l'employ, la date d'embauche, et le mois de dpart en utilisant les fonctions ROUND et TRUNC.
SELECT employee_id, hire_date, ROUND(hire_date, 'MONTH'), TRUNC(hire_date, 'MONTH') FROM employees WHERE hire_date LIKE '%97';

Oracle Database 11g: SQL Fundamentals I 3 - 108

Rsum
Dans cette leon, vous devriez avoir appris : Effectuer des calculs sur les donnes l'aide des fonctions Modifier des donnes individuelles l'aide des fonctions

1 - 109

Copyright 2007, Oracle. All rights reserved.

rsum une range de fonctions peuvent tre imbriques n'importe quel niveau. une range de fonctions peuvent manipuler les lments suivants: Les donnes de caractres: LOWER, UPPER, INITCAP, CONCAT, SUBSTR, INSTR, LONGUEUR Nombre de donnes: ROUND, TRUNC, MOD Les valeurs de date: sysdate, MONTHS_BETWEEN, ADD_MONTHS, NEXT_DAY, LAST_DAY Se souvenir de ce qui suit: Les valeurs de date peut galement utiliser des oprateurs arithmtiques. Fonctions ROUND et TRUNC peut galement tre utilis avec des valeurs de date. SYSDATE et DUAL SYSDATE est une fonction date laquelle renvoie la date et l'heure actuelles. Il est d'usage pour slectionner SYSDATE d'une table fictif appel DUAL.

Oracle Database 11g: SQL Fundamentals I 3 - 109

Pratique 3
Cette pratique couvre les sujets suivants: Rdaction d'une requte qui affiche la date du jour Cration de requtes qui ncessitent l'utilisation du numrique, le caractre et les fonctions de date Effectuer des calculs d'annes et de mois de service d'un employ

1 - 110

Copyright 2007, Oracle. All rights reserved.

Exercice 3: Vue d'ensemble Cette pratique offre une varit d'exercices l'aide des fonctions diffrentes qui sont disponibles pour le personnage, le nombre et les types de donnes date.

Oracle Database 11g: SQL Fundamentals I 3 - 110

Exercice 3 partie 1 1. crire une requte pour afficher la date du systme. Marquez la colonne comme date. Remarque: Si votre base de donnes distance est situ dans un fuseau horaire diffrent, la sortie sera la date pour le systme d'exploitation sur lequel rside la base de donnes.

2. Le dpartement RH a besoin d'un rapport pour afficher le numro d'employ, nom de famille, le salaire et le salaire a augment de 15,5% (exprime en nombre entier) pour chaque employ. Marquez la colonne Salary New. Sauvegardez votre instruction SQL dans un fichier nomm lab_03_02.sql. 3. Excutez votre requte dans le fichier lab_03_02.sql.

4. Modifiez vos lab_03_02.sql requte pour ajouter une colonne qui soustrait l'ancien salaire du nouveau salaire. tiquetez la colonne Augmenter. Sauvegarder le contenu du fichier comme lab_03_04.sql. Excutez la requte rvise.

Oracle Database 11g: SQL Fundamentals I 3 - 111

Pratique 3 (suite) 5. Ecrire une requte qui affiche le nom de famille (avec la premire lettre en majuscule et toutes les autres lettres en minuscules) et la longueur du nom de famille pour tous les employs dont le nom commence par les lettres "J", "A" ou "M . "Donnez chaque colonne une tiquette approprie. Trier les rsultats par le nom des employs derniers.

Rcrivez la requte afin que l'utilisateur est invit saisir une lettre que le nom de famille commence par. Par exemple, si l'utilisateur entre "H" (en majuscules) lorsque vous tes invit pour une lettre, puis la sortie doit afficher tous les employs dont le nom commence par la lettre "H"

Modifier la requte de telle sorte que le cas de la lettre entre n'affecte pas la sortie. La lettre saisie doit tre capitaliss avant d'tre traites par la requte SELECT.

Oracle Database 11g: SQL Fundamentals I 3 - 112

Pratique 3 (suite) 6. Le dpartement des ressources humaines veut trouver la dure d'emploi de chaque employ. Pour chaque salari, afficher le nom de famille et calculer le nombre de mois entre aujourd'hui et la date laquelle l'employ a t embauch. Marquez la colonne comme MONTHS_WORKED. Commandez vos rsultats par le nombre de mois de travail. Arrondissez le nombre de mois jusqu' la plus proche nombre entier. Remarque: En raison de cette requte dpend de la date laquelle il a t excut, les valeurs de la colonne MONTHS_WORKED sera diffrent pour vous.

Oracle Database 11g: SQL Fundamentals I 3 - 113

Pratique 3 (suite) Si vous avez le temps, faites les exercices suivants: 7. Crer une requte pour afficher le nom de famille et le salaire de tous les employs. Formater le salaire est de 15 caractres de long, gauche rembourr avec le symbole $. Marquez la colonne comme SALAIRE.

8. Crer une requte qui affiche les huit premiers caractres du nom des employs derniers et indique le montant de leurs salaires par des astrisques. Chaque astrisque signifie un millier de dollars. Trier les donnes par ordre dcroissant du salaire. Marquez la colonne comme EMPLOYEES_AND_THEIR_SALARIES.

9. Crer une requte pour afficher le nom de famille et le nombre de semaines de travail pour tous les employs du service 90. tiquetez le nombre de colonne semaines comme TENURE. Tronquer le nombre de semaines pour valeur 0 dcimales. Afficher les enregistrements par ordre dcroissant d'anciennet de l'employ. Remarque: La valeur TENURE sera diffrent car il dpend de la date laquelle vous excutez la requte.

Oracle Database 11g: SQL Fundamentals I 3 - 114

Utilisation des fonctions de conversion et dExpressions conditionnelles

1 - 115

Copyright 2007, Oracle. All rights reserved.

Objectifs
Aprs avoir termin cette leon, vous devriez tre en mesure de faire ce qui suit: Dcrire les divers types de fonctions de conversion disponibles dans SQL Utilisez le TO_CHAR, TO_NUMBER, et des fonctions de conversion to_date Appliquer les expressions conditionnelles dans une instruction SELECT

1 - 116

Copyright 2007, Oracle. All rights reserved.

objectifs Cette leon porte sur les fonctions qui convertissent les donnes d'un type un autre (par exemple, la conversion de donnes de type caractre des donnes numriques) et discute les expressions conditionnelles dans les instructions SELECT SQL.

Oracle Database 11g: SQL Fundamentals I 4 - 116

Lesson Agenda
Implicite et explicite de conversion de type de donnes TO_CHAR, TO_DATE, les fonctions TO_NUMBER fonctions d'imbrication Fonctions gnrales:
NVL NVL2 NULLIF COALESCE

Les expressions conditionnelles:


CASE DECODE

1 - 117

Copyright 2007, Oracle. All rights reserved.

Oracle Database 11g: SQL Fundamentals I 4 - 117

Functions Conversion

Conversion type donnes

Conversion implicite du type de donnes

Conversion explicite de type de donnes

1 - 118

Copyright 2007, Oracle. All rights reserved.

Functions Conversion En plus des types de donnes Oracle, des colonnes de tables dans une base de donnes Oracle peut tre dfini l'aide de l'American National Standards Institute (ANSI), DB2 et SQL / DS types de donnes. Toutefois, le serveur Oracle convertit en interne les types de donnes que ces types de donnes Oracle. Dans certains cas, le serveur Oracle reoit des donnes d'un type de donnes o il s'attend ce que les donnes d'un type de donnes diffrent. Lorsque cela se produit, le serveur Oracle peut convertir automatiquement les donnes vers le type de donnes attendu. Cette conversion de type de donnes peut tre fait implicitement par le serveur Oracle ou explicitement par l'utilisateur. Les conversions implicites de types de donnes fonctionne selon les rgles expliques dans les deux prochaines diapositives. Explicites conversions de types de donnes sont effectues en utilisant des fonctions de conversion. Les fonctions de conversion convertir une valeur d'un type de donnes l'autre. En rgle gnrale, la forme des noms de fonction suit le type de donnes TO convention type de donnes. Le premier type de donnes est le type d'entre de donnes et le second type de donnes est le rsultat. Remarque: Bien que la conversion implicite du type de donnes est disponible, il est recommand que vous faites la conversion de type de donnes explicite pour assurer la fiabilit de vos instructions SQL.

Oracle Database 11g: SQL Fundamentals I 4 - 118

Conversion implicite du type de donnes


Dans les expressions, le serveur Oracle peut convertir automatiquement les lments suivants:
From
VARCHAR2 or CHAR VARCHAR2 or CHAR

To
NUMBER DATE

1 - 119

Copyright 2007, Oracle. All rights reserved.

Conversion implicite des types de donnes Serveur Oracle peut automatiquement effectuer une conversion de type de donnes dans une expression. Par exemple, l'expression hire_date> '01-JAN-90 "se traduit par la conversion implicite de la chane '01-JAN-90 ' une date. Par consquent, une valeur VARCHAR2 ou CHAR peut tre implicitement converti en un nombre ou une date de type de donnes dans une expression.

Oracle Database 11g: SQL Fundamentals I 4 - 119

Conversion implicite du type de donnes


Pour l'valuation de l'expression, le serveur Oracle peut convertir automatiquement les lments suivants:
From
NUMBER DATE

To
VARCHAR2 or CHAR VARCHAR2 or CHAR

1 - 120

Copyright 2007, Oracle. All rights reserved.

Conversion implicite des types de donnes (suite) En gnral, le serveur Oracle utilise la rgle pour les expressions o une conversion de type de donnes est ncessaire. Par exemple, la note expression = 2 conduit la conversion implicite de les 20000 Numro de la chane "2" en raison de grade est un CHAR (2) de la colonne. Remarque: CHAR aux conversions NOMBRE russir que si la chane de caractres reprsente un nombre valide.

Oracle Database 11g: SQL Fundamentals I 4 - 120

Conversion explicite de type de donnes

TO_NUMBER

TO_DATE

NUMBER

CHARACTER

DATE

TO_CHAR

TO_CHAR

1 - 121

Copyright 2007, Oracle. All rights reserved.

Conversion explicite du type de donnes SQL propose trois fonctions pour convertir une valeur d'un type de donnes un autre:

Function

Purpose

TO_CHAR(number|date,[ fmt], Convertit un nombre ou une valeur de date en [nlsparams]) chane de caractres avec la fmt VARCHAR2 modle de format Numro de conversion: Le paramtre nlsparams spcifie les caractres suivants, qui sont renvoys par des lments de format numrique: caractre dcimal Sparateur de groupe symbole de la monnaie locale symbole montaire international Si nlsparams ou tout autre paramtre est omis, cette fonction utilise les valeurs par dfaut pour la session.

Oracle Database 11g: SQL Fundamentals I 4 - 121

Conversion explicite de type de donnes

TO_NUMBER

TO_DATE

NUMBER

CHARACTER

DATE

TO_CHAR

TO_CHAR

1 - 122

Copyright 2007, Oracle. All rights reserved.

Conversion explicite du type de donnes (suite)

Function TO_CHAR(number|date,[ fmt], [nlsparams])

Purpose Date conversion: The nlsparams parameter specifies the language in which the month and day names, and abbreviations are returned. If this parameter is omitted, this function uses the default date languages for the session. Converts a character string containing digits to a number in the format specified by the optional format model fmt. The nlsparams parameter has the same purpose in this function as in the TO_CHAR function for number conversion.

TO_NUMBER(char,[fmt], [nlsparams])

TO_DATE(char,[fmt],[nlspara ms])

Converts a character string representing a date to a date value according to the fmt that is specified. If fmt is omitted, the format is DD-MON-YY. The nlsparams parameter has the same purpose in this function as in the TO_CHAR function for date conversion.

Oracle Database 11g: SQL Fundamentals I 4 - 122

Conversion explicite du type de donnes (suite) Remarque: La liste des fonctions mentionnes dans cette leon ne comprend que quelques-unes des fonctions de conversion disponibles. Pour plus d'informations, voir la section sur les Fonctions de conversion de base de donnes Oracle 11g Langage SQL Reference, Release 1 (11.1).

Oracle Database 11g: SQL Fundamentals I 4 - 123

Lesson Agenda
Implicite et explicite de conversion de type de donnes TO_CHAR, TO_DATE, les fonctions TO_NUMBER fonctions d'imbrication Fonctions gnrales:
NVL NVL2 NULLIF COALESCE

Les expressions conditionnelles:


CASE DECODE

1 - 124

Copyright 2007, Oracle. All rights reserved.

Oracle Database 11g: SQL Fundamentals I 4 - 124

Utilisation de la fonction TO_CHAR avec des dates


TO_CHAR(date, 'format_model')

Le modle de format: Elle doit tre place entre guillemets simples Est sensible la casse Peut inclure n'importe quel lment format de date valide Comporte un lment fm de supprimer les blancs rembourrs ou supprimer des zros Est spare de la valeur de date par une virgule

1 - 125

Copyright 2007, Oracle. All rights reserved.

Utilisation de la fonction TO_CHAR avec des dates TO_CHAR convertit un type de donnes datetime pour une valeur de type de donnes VARCHAR2 dans le format spcifi par l'format_model. Un modle de format est un caractre littral qui dcrit le format de datetime stockes dans une chane de caractres. Par exemple, le modle de format datetime pour la chane '11-Nov-1999 est DD-MON-YYYY. Vous pouvez utiliser la fonction TO_CHAR pour convertir une date partir de son format par dfaut celui que vous spcifiez. directives Le modle de format doit tre encadre par des guillemets simples et est sensible la casse. Le modle de format peut comporter aucun lment format de date valide. Mais assurez-vous de sparer la valeur de date partir du modle de format avec une virgule. Les noms des jours et des mois la sortie sont automatiquement remplie de blancs. Pour supprimer les blancs rembourrs ou de supprimer les zros, utilisez le mode de remplissage lment fm.
SELECT employee_id, TO_CHAR(hire_date, 'MM/YY') Month_Hired FROM employees WHERE last_name = 'Higgins';

Oracle Database 11g: SQL Fundamentals I 4 - 125

lments du modle Format de date

Element
YYYY YEAR MM MONTH MON DY DAY DD

Result
Full year in numbers Year spelled out (in English) Two-digit value for the month Full name of the month Three-letter abbreviation of the month Three-letter abbreviation of the day of the week Full name of the day of the week Numeric day of the month

1 - 126

Copyright 2007, Oracle. All rights reserved.

Oracle Database 11g: SQL Fundamentals I 4 - 126

Elments Format exemples de formats de date valides

Element SCC or CC YYY or YY or Y Y,YYY IYYY, IYY, IY, I SYEAR or YEAR BC or AD B.C. or A.D. Q MM MONTH MON RM WW or W DDD or DD or D DAY DY J IW

Description Century; server prefixes B.C. date with Last three, two, or one digit of the year Year with comma in this position Four-, three-, two-, or one-digit year based on the ISO standard Year spelled out; server prefixes B.C. date with Indicates B.C. or A.D. year Indicates B.C. or A.D. year using periods Quarter of year Month: two-digit value Name of the month padded with blanks to a length of nine characters Name of the month, three-letter abbreviation Roman numeral month Week of the year or month Day of the year, month, or week Name of the day padded with blanks to a length of nine characters Name of the day; three-letter abbreviation Julian day; the number of days since December 31, 4713 B.C. Weeks in the year from ISO standard (1 to 53)

Years in dates YYYY or SYYYY Year; server prefixes B.C. date with -

Oracle Database 11g: SQL Fundamentals I 4 - 127

lments du modle Format de date


lments de temps formater la partie heure de la date:
HH24:MI:SS AM 15:45:32 PM

Ajouter des chanes de caractres en les entourant avec des guillemets doubles:
DD "of" MONTH 12 of OCTOBER

Suffixes Nombre prciser le nombre:


ddspth fourteenth

1 - 128

Copyright 2007, Oracle. All rights reserved.

lments du modle Format de date Utilisez les formats rpertoris dans les tableaux ci-dessous pour afficher des informations de temps et littraux, et pour changer les chiffres des numros orthographis.
Element Description

AM or PM A.M. or P.M. HH or HH12 or HH24 MI SS SSSSS

Meridian indicator Meridian indicator with periods Hour of day, or hour (112), or hour (023) Minute (059) Second (059) Seconds past midnight (086399)

Oracle Database 11g: SQL Fundamentals I 4 - 128

autres formats

Element / . , of the

Description Punctuation is reproduced in the result. Quoted string is reproduced in the result.

Spcification des suffixes pour influencer Affichage du numro

Element TH SP SPTH or THSP

Description Ordinal number (for example, DDTH for 4TH) Spelled-out number (for example, DDSP for FOUR) Spelled-out ordinal numbers (for example, DDSPTH for FOURTH)

Oracle Database 11g: SQL Fundamentals I 4 - 129

Utilisation de la fonction TO_CHAR avec des dates


SELECT last_name, TO_CHAR(hire_date, 'fmDD Month YYYY') AS HIREDATE FROM employees;

1 - 130

Copyright 2007, Oracle. All rights reserved.

Utilisation de la fonction TO_CHAR avec des dates L'instruction SQL dans la diapositive affiche les noms de famille et les dates de location pour tous les employs. La date d'embauche apparat comme 17 Juin 1987. exemple: Modifier l'exemple de la diapositive pour afficher les dates dans un format qui apparat comme dix-septime Juin 1987 12:00:00."
SELECT last_name, TO_CHAR(hire_date, 'fmDdspth "of" Month YYYY fmHH:MI:SS AM') HIREDATE FROM employees;

Notice that the month follows the format model specified; in other words, the first letter is capitalized and the rest are in lowercase.

Oracle Database 11g: SQL Fundamentals I 4 - 130

Utilisation de la fonction TO_CHAR avec les nombres


TO_CHAR(number, 'format_model')

Ce sont quelques-uns des lments de format que vous pouvez utiliser avec la fonction TO_CHAR pour afficher une valeur numrique comme un personnage:
Element 9 0 $ L . , Result Represents a number Forces a zero to be displayed Places a floating dollar sign Uses the floating local currency symbol Prints a decimal point Prints a comma as a thousands indicator

1 - 131

Copyright 2007, Oracle. All rights reserved.

Utilisation de la fonction TO_CHAR avec les nombres Lorsque vous travaillez avec des valeurs numriques, tels que les chanes de caractres, vous devez convertir ces chiffres au type de donnes caractre en utilisant la fonction TO_CHAR, qui se traduit par une valeur de type de donnes NUMBER VARCHAR2 type de donnes. Cette technique est particulirement utile avec la concatnation.

Oracle Database 11g: SQL Fundamentals I 4 - 131

Utilisation de la fonction TO_CHAR avec les nombres (suite) lments Numro Format Si vous convertissez un certain nombre de type de donnes de caractres, vous pouvez utiliser les lments de format suivantes :

Element 9 0 $ L D . G

Description Numeric position (number of 9s determine display width) Display leading zeros Floating dollar sign Floating local currency symbol Returns the decimal character in the specified position. The default is a period (.). Decimal point in position specified Returns the group separator in the specified position. You can specify multiple group separators in a number format model. Comma in position specified Minus signs to right (negative values) Parenthesize negative numbers Scientific notation (format must specify four Es) Returns in the specified position the Euro (or other) dual currency Multiply by 10 n times (n = number of 9s after V) Returns the negative or positive value Display zero values as blank, not 0

Example 999999 099999 $999999 L999999 99D99 999999.99 9,999

Result 1234 001234 $1234 FF1234 99.99 1234.00 9G999

, MI PR EEEE U V S B

999,999 999999MI 999999PR 99.999EEEE U9999 9999V99 S9999 B9999.99

1,234 1234<1234> 1.234E+03 1234 123400 -1234 or +1234 1234.00

Oracle Database 11g: SQL Fundamentals I 4 - 132

Utilisation de la fonction TO_CHAR avec les nombres


SELECT TO_CHAR(salary, '$99,999.00') SALARY FROM employees WHERE last_name = 'Ernst';

1 - 133

Copyright 2007, Oracle. All rights reserved.

Utilisation de la fonction TO_CHAR avec les nombres (suite) Le serveur Oracle affiche une chane de signes dise (#) au lieu d'un nombre entier dont les chiffres dpassent le nombre de chiffres fournis dans le modle au format. Les tours du serveur Oracle stock la valeur dcimale du nombre de dcimales prvues dans le modle de format.

Oracle Database 11g: SQL Fundamentals I 4 - 133

Utilisation de la TO_NUMBER et fonctions to_date


Convertir une chane de caractres en un format numrique en utilisant la fonction TO_NUMBER:
TO_NUMBER(char[, 'format_model'])

Convertir une chane de caractres un format de date en utilisant la fonction TO_DATE:


TO_DATE(char[, 'format_model'])

Ces fonctions ont un modificateur de fx. Ce modificateur indique la correspondance exacte pour l'argument caractre et le modle de format de date d'une fonction TO_DATE.

1 - 134

Copyright 2007, Oracle. All rights reserved.

Utilisation de la TO_NUMBER et fonctions to_date Vous pouvez convertir une chane de caractres un nombre ou une date. Pour accomplir cette tche, utilisez le TO_NUMBER ou des fonctions to_date. Le modle de format que vous choisissez est base sur les lments de format prcdemment dmontr. Le modificateur fx spcifie la correspondance exacte pour l'argument caractre et le modle de format de date d'une fonction TO_DATE: La ponctuation et texte des messages prcdents dans l'argument caractre doit correspondre exactement ( l'exception des cas), les parties correspondantes du modle de format. L'argument personnage ne peut pas avoir des espaces supplmentaires. Sans effets spciaux, le serveur Oracle ne tient pas compte des espaces supplmentaires. Les donnes numriques dans l'argument personnage doit avoir le mme nombre de chiffres que l'lment correspondant dans le modle au format. Sans effets spciaux, les numros l'argument personnage peut omettre les zros.

Oracle Database 11g: SQL Fundamentals I 4 - 134

Utilisation de la TO_NUMBER et fonctions to_date (suite) exemple: Afficher le nom et la date d'embauche pour tous les salaris qui ont commenc le 24 mai 1999. Il ya deux espaces aprs le mois de mai, et le nombre 24 dans l'exemple suivant. Parce que le modificateur fx est utilis, une correspondance exacte est requise et les espaces aprs le mot Peut ne sont pas reconnus :
SELECT last_name, hire_date FROM employees WHERE hire_date = TO_DATE('May The error:

24, 1999', 'fxMonth DD, YYYY');

Oracle Database 11g: SQL Fundamentals I 4 - 135

Utilisation de la Fonction TO_CHAR et TO_DATE? Format de date avec RR


Pour trouver des employs embauchs avant 1990, utilisez le format de date RR, qui donne les mmes rsultats si la commande est excute en 1999 ou maintenant:
SELECT last_name, TO_CHAR(hire_date, 'DD-Mon-YYYY') FROM employees WHERE hire_date < TO_DATE('01-Jan-90','DD-Mon-RR');

1 - 136

Copyright 2007, Oracle. All rights reserved.

Utilisation de la Fonction TO_CHAR et TO_DATE avec le format Date de RR Pour trouver des employs qui ont t embauchs avant 1990, le format de RR peut tre utilis. Parce que l'anne en cours est suprieure 1999, le format RR interprte la partie anne de la date de 1950 1999. La commande suivante, d'autre part, se traduit par aucune ligne tant choisi parce que le format AA interprte la partie anne de la date dans le sicle actuel (2090).
SELECT last_name, TO_CHAR(hire_date, 'DD-Mon-yyyy') FROM employees WHERE TO_DATE(hire_date, 'DD-Mon-yy') < '01-Jan-1990';

Oracle Database 11g: SQL Fundamentals I 4 - 136

Lesson Agenda
Implicite et explicite de conversion de type de donnes TO_CHAR, TO_DATE, les fonctions TO_NUMBER fonctions d'imbrication Fonctions gnrales:
NVL NVL2 NULLIF COALESCE

Les expressions conditionnelles:


CASE DECODE

1 - 137

Copyright 2007, Oracle. All rights reserved.

Oracle Database 11g: SQL Fundamentals I 4 - 137

fonctions d'imbrication
Fonctions une lignepeuvent tre imbriques n'importe quel niveau. Les fonctions imbriques sont values partir du niveau le plus profond au niveau moins profond.

F3(F2(F1(col,arg1),arg2),arg3)
Step 1 = Result 1 Step 2 = Result 2 Step 3 = Result 3

1 - 138

Copyright 2007, Oracle. All rights reserved.

Fonctions de nidification une range de fonctions peuvent tre imbriques n'importe quelle profondeur. Les fonctions imbriques sont values partir du niveau le plus profond au niveau externe. Voici quelques exemples pour vous montrer la flexibilit de ces fonctions.

Oracle Database 11g: SQL Fundamentals I 4 - 138

fonctions d'imbrication

SELECT last_name, UPPER(CONCAT(SUBSTR (LAST_NAME, 1, 8), '_US')) FROM employees WHERE department_id = 60;

1 - 139

Copyright 2007, Oracle. All rights reserved.

Fonctions dimbrication (suite) L'exemple diaporama affiche les noms de famille des employs du service 60. L'valuation de l'instruction SQL comporte trois tapes: 1. La fonction interne rcupre les huit premiers caractres du nom de famille. Rsultat1 = SUBSTR (LAST_NAME, 1, 8) 2. Les fonctions externes concatne le rsultat avec _US. Resultat2 = CONCAT (Rsultat1, _US ') 3. La fonction la plus externe convertit les rsultats en majuscules. L'expression devient tte de la colonne, car aucun alias de colonne a t donn. exemple: Afficher la date du vendredi prochain qui est de six mois compter de la date d'embauche. La date rsultant devrait apparatre que vendredi, Aot 13th, 1999. Ordonner les rsultats par date d'embauche.
SELECT TO_CHAR(NEXT_DAY(ADD_MONTHS (hire_date, 6), 'FRIDAY'), 'fmDay, Month ddth, YYYY') "Next 6 Month Review" FROM employees ORDER BY hire_date;

Oracle Database 11g: SQL Fundamentals I 4 - 139

Lesson Agenda
Implicite et explicite de conversion de type de donnes TO_CHAR, TO_DATE, les fonctions TO_NUMBER fonctions d'imbrication Fonctions gnrales:
NVL NVL2 NULLIF COALESCE

Les expressions conditionnelles:


CASE DECODE

1 - 140

Copyright 2007, Oracle. All rights reserved.

Oracle Database 11g: SQL Fundamentals I 4 - 140

Fonctions gnrales
Les fonctions suivantes fonctionner avec n'importe quel type de donnes et se rapportent l'utilisation de valeurs NULL : NVL (expr1, expr2) NVL2 (expr1, expr2, expr3) NULLIF (expr1, expr2) COALESCE (expr1, expr2, ..., exprn)

1 - 141

Copyright 2007, Oracle. All rights reserved.

Fonctions gnrales Ces fonctions fonctionnent avec n'importe quel type de donnes et se rapportent l'utilisation de valeurs NULL dans la liste d'expressions.
Function NVL NVL2 NULLIF COALESCE Description Converts a null value to an actual value If expr1 is not null, NVL2 returns expr2. If expr1 is null, NVL2 returns expr3. The argument expr1 can have any data type. Compares two expressions and returns null if they are equal; returns the first expression if they are not equal Returns the first non-null expression in the expression list

Remarque: Pour plus d'informations sur les centaines de fonctions disponibles, voir la section sur les fonctions d'Oracle Database 11g SQL Langage de rfrence, Release 1 (11.1).

Oracle Database 11g: SQL Fundamentals I 4 - 141

Function NVL
Convertit une valeur nulle une valeur relle: Les types de donnes qui peuvent tre utilises sont la date, la nature et nombre. Les types de donnes doivent correspondre :
NVL(commission_pct,0) NVL(hire_date,'01-JAN-97') NVL(job_id,'No Job Yet')

1 - 142

Copyright 2007, Oracle. All rights reserved.

Function NVL Pour convertir une valeur nulle une valeur relle, utilisez la fonction NVL. syntaxe NVL (expr1, expr2) Dans la syntaxe: expr1 est la valeur de la source ou de l'expression qui peut contenir un null expr2 est la valeur cible pour la conversion null Vous pouvez utiliser la fonction NVL pour convertir n'importe quel type de donnes, mais la valeur de retour est toujours le mme que le type de donnes de expr1. Conversions NVL pour diffrents types de donnes

Data Type NUMBER DATE CHAR or VARCHAR2

Conversion Example NVL(number_column,9) NVL(date_column, '01-JAN-95') NVL(character_column, 'Unavailable')

Oracle Database 11g: SQL Fundamentals I 4 - 142

Utilisation de la fonction NVL


1

SELECT last_name, salary, NVL(commission_pct, 0), (salary*12) + (salary*12*NVL(commission_pct, 0)) AN_SAL FROM employees;

1 - 143

Copyright 2007, Oracle. All rights reserved.

Utilisation de la fonction NVL Pour calculer la rmunration annuelle de tous les employs, vous devez multiplier le salaire mensuel par 12 puis ajoutez le pourcentage de commission la suite: SELECT last_name, le salaire, commission_pct, (salaire * 12) + (salaire * 12 * commission_pct) AN_SAL FROM employs;

Notez que la compensation annuelle est calcule uniquement pour les employs qui gagnent une commission. Si aucune valeur de colonne dans une expression est NULL, le rsultat est nul. Pour calculer les valeurs pour tous les employs, vous devez convertir la valeur nulle un certain nombre avant d'appliquer l'oprateur arithmtique. Dans l'exemple de la diapositive, la fonction NVL est utilis pour convertir les valeurs Null zro.

Oracle Database 11g: SQL Fundamentals I 4 - 143

Utilisation de la fonction NVL2

SELECT last_name, salary, commission_pct, 1 NVL2(commission_pct, 2 'SAL+COMM', 'SAL') income FROM employees WHERE department_id IN (50, 80);

1
1 - 144 Copyright 2007, Oracle. All rights reserved.

Utilisation de la fonction NVL2 La fonction NVL2 examine la premire expression. Si la premire expression n'est pas nulle, alors la fonction retourne NVL2 la seconde expression. Si la premire expression est nulle, alors la troisime expression est renvoye. syntaxe NVL2 (expr1, expr2, expr3) Dans la syntaxe: expr1 est la valeur de la source ou de l'expression qui peut contenir un null expr2 est la valeur qui est renvoye si expr1 n'est pas NULL expr3 est la valeur qui est renvoye si expr1 est NULL Dans l'exemple illustr sur la diapositive, la colonne COMMISSION_PCT est examine. Si une valeur est dtecte, la deuxime expression de SAL + COMM est retourn. Si la colonne COMMISSION_PCT dtient une valeur nulle, la troisime expression du SAL est retourn. L'argument de expr1 peut avoir n'importe quel type de donnes. Les arguments expr2 et expr3 peuvent avoir des types de donnes LONG exception. Si les types de donnes de expr2 et expr3 sont diffrents, le serveur Oracle convertit expr3 le type de donnes de expr2 avant de les comparer, moins expr3 est une constante nulle. Dans ce dernier cas, une conversion de type de donnes n'est pas ncessaire. Le type de donnes de la valeur de retour est toujours le mme que le type de donnes de expr2, sauf si expr2 est des donnes textuelles, dans ce cas, la valeur de retour de type de donnes VARCHAR2 est.

Oracle Database 11g: SQL Fundamentals I 4 - 144

Utilisation de la fonction NULLIF


1
SELECT first_name, LENGTH(first_name) "expr1", 2 last_name, LENGTH(last_name) "expr2", NULLIF(LENGTH(first_name), LENGTH(last_name)) result FROM employees;

1
1 - 145

Copyright 2007, Oracle. All rights reserved.

Utilisation de la fonction NULLIF La fonction NULLIF compare deux expressions. Si elles sont gales, la fonction renvoie une valeur nulle. Si elles ne sont pas gaux, la fonction renvoie la premire expression. Cependant, vous ne pouvez pas spcifier la valeur NULL littrale de la premire expression. syntaxe NULLIF (expr1, expr2) Dans la syntaxe: NULLIF compare expr1 et expr2. Si elles sont gales, alors la fonction renvoie la valeur null. Si elles ne sont pas, alors la fonction retourne expr1. Cependant, vous ne pouvez pas spcifier la valeur NULL littrale pour expr1. Dans l'exemple illustr sur la diapositive, la longueur du premier nom de la table EMPLOYEES est compare la longueur du nom de famille dans la table EMPLOYEES. Lorsque les longueurs des noms sont gales, une valeur nulle est affiche. Lorsque les longueurs des noms ne sont pas gaux, la longueur du nom est affich premire. Remarque: La fonction NULLIF est logiquement quivalent l'expression CASE suivante. L'expression CASE est discut sur une page suivante :
CASE WHEN expr1 = expr 2 THEN NULL ELSE expr1 END

Oracle Database 11g: SQL Fundamentals I 4 - 145

Utilisation de la fonction COALESCE


L'avantage de la fonction COALESCE sur la fonction NVL est que la fonction COALESCE peut prendre plusieurs valeurs alternatives. Si la premire expression n'est pas nulle, la fonction retourne COALESCE que l'expression, sinon, il fait un COALESCE des expressions restantes.

1 - 146

Copyright 2007, Oracle. All rights reserved.

Utilisation de la fonction COALESCE La fonction COALESCE renvoie la premire expression non-NULL dans la liste. syntaxe COALESCE (expr1, expr2, ... exprn) Dans la syntaxe: expr1 revient cette expression si elle n'est pas nulle expr2 retourne cette expression si la premire expression est nulle et cette expression n'est pas nulle exprn retourne cette expression si les expressions prcdentes sont nulles Notez que toutes les expressions doivent tre du mme type de donnes.

Oracle Database 11g: SQL Fundamentals I 4 - 146

Utilisation de la fonction COALESCE


SELECT last_name, employee_id, COALESCE(TO_CHAR(commission_pct),TO_CHAR(manager_id), 'No commission and no manager') FROM employees;

1 - 147 Copyright 2007, Oracle. All rights reserved.

Utilisation de la fonction COALESCE (suite) Dans l'exemple illustr sur la diapositive, si la valeur manager_id n'est pas nulle, elle est affiche. Si la valeur manager_id est nul, alors l'commission_pct est affich. Si les valeurs manager_id et commission_pct sont nuls alors "Pas de commissions et sans manager" est affich. Noter fonction TO_CHAR est applique de telle sorte que toutes les expressions sont du mme type de donnes.

Oracle Database 11g: SQL Fundamentals I 4 - 147

Utilisation de la fonction COALESCE (suite) exemple: Pour les employs qui ne reoivent aucune commission, votre organisation veut donner une augmentation de salaire de 2000 $ et pour les employs qui reoivent une commission, la requte doit calculer le nouveau salaire gal au salaire existant ajoute la quantit commission.
SELECT last_name, salary, commission_pct, COALESCE((salary+(commission_pct*salary)), salary+2000, salary) "New Salary" FROM employees;

Remarque: Examinez la sortie. Pour les employs qui ne reoivent aucune commission, la colonne salariale pour nouveau chercheur prsente le salaire augmente de 2000 $ et pour les employs qui reoivent une commission, la colonne Salaire Nouvelle affiche le montant de la commission calcule s'ajoute au salaire.

Oracle Database 11g: SQL Fundamentals I 4 - 148

Lesson Agenda
Implicite et explicite de conversion de type de donnes TO_CHAR, TO_DATE, les fonctions TO_NUMBER fonctions d'imbrication Fonctions gnrales:
NVL NVL2 NULLIF COALESCE

Les expressions conditionnelles:


CASE DECODE

1 - 149

Copyright 2007, Oracle. All rights reserved.

Oracle Database 11g: SQL Fundamentals I 4 - 149

Expressions conditionnelles
Indiquer l'usage de la logique IF-THEN-ELSE dans une instruction SQL Utiliser deux mthodes:
expression CASE DECODE fonction

1 - 150

Copyright 2007, Oracle. All rights reserved.

Expressions conditionnelles Les deux mthodes qui sont utilises pour mettre en uvre le traitement conditionnel (IFTHEN-ELSE logique) dans une instruction SQL sont l'expression CASE et DECODE la fonction. Note: L'expression CASE est conforme la norme ANSI SQL. La fonction DECODE est spcifique la syntaxe Oracle.

Oracle Database 11g: SQL Fundamentals I 4 - 150

Expression CASE
Facilite demandes conditionnelles en faisant le travail d'un IFTHEN-ELSE :
CASE expr WHEN [WHEN WHEN ELSE END comparison_expr1 THEN return_expr1 comparison_expr2 THEN return_expr2 comparison_exprn THEN return_exprn else_expr]

1 - 151

Copyright 2007, Oracle. All rights reserved.

Expression CASE Expressions CASE vous permet d'utiliser la logique IF-THEN-ELSE dans une instruction SQL sans avoir recourir aux procdures. Dans une expression CASE simple, le serveur Oracle cherche le premier QUAND ... ALORS couple pour lequel expr est gale comparison_expr et return_expr rendements. Si aucune des QUAND ... ALORS paires satisfaire cette condition, et si une clause ELSE existe, le serveur Oracle retourne else_expr. Sinon, le serveur Oracle renvoie une valeur nulle. Vous ne pouvez pas spcifier la valeur littrale NULL pour tous les return_exprs et la else_expr. Toutes les expressions (expr, comparison_expr et return_expr) doit tre du mme type de donnes, qui peut tre CHAR, VARCHAR2, NCHAR, NVARCHAR2.

Oracle Database 11g: SQL Fundamentals I 4 - 151

Utilisation Expression CASE


Facilite demandes conditionnelles de faire le travail d'une instruction IF-THEN-ELSE:
SELECT last_name, job_id, salary, CASE job_id WHEN 'IT_PROG' THEN 1.10*salary WHEN 'ST_CLERK' THEN 1.15*salary WHEN 'SA_REP' THEN 1.20*salary ELSE salary END "REVISED_SALARY" FROM employees;


1 - 152 Copyright 2007, Oracle. All rights reserved.

Utilisation de l'expression CASE Dans l'instruction SQL dans la diapositive, la valeur de JOB_ID est dcod. Si JOB_ID est IT_PROG, l'augmentation de salaire est de 10%, si JOB_ID est ST_CLERK, l'augmentation de salaire est de 15%, si JOB_ID est SA_REP, l'augmentation de salaire est de 20%. Pour tous les rles d'emploi d'autres, il n'y a pas d'augmentation de salaire. Le mme constat peut tre crit avec la fonction DECODE. Ceci est un exemple d'une expression CASE recherche. Dans une expression CASE recherche, la fouille se droule de gauche droite jusqu' ce que l'apparition de la condition indique est trouv, puis elle retourne l'expression de retour. Si aucune condition n'est trouv pour tre vrai, et si une clause ELSE existe, l'expression de retour dans la clause ELSE est retourn, sinon, une valeur NULL est retourne.
SELECT last_name,salary, (CASE WHEN salary<5000 THEN 'Low' WHEN salary<10000 THEN 'Medium' WHEN salary<20000 THEN 'Good' ELSE 'Excellent' END) qualified_salary FROM employees;

Oracle Database 11g: SQL Fundamentals I 4 - 152

Function DECODE
Facilite demandes conditionnelles de faire le travail d'une expression CASE ou une instruction IF-THEN-ELSE:
DECODE(col|expression, search1, result1 [, search2, result2,...,] [, default])

1 - 153

Copyright 2007, Oracle. All rights reserved.

Fonction DECODE La fonction DECODE dcode l'expression d'une manire similaire la logique IF-THEN-ELSE qui est utilis dans diffrentes langues. L'expression de la fonction DECODE dcode aprs l'avoir compare chaque valeur de recherche. Si l'expression est la mme que la recherche, le rsultat est renvoy. Si la valeur par dfaut est omis, une valeur nulle est renvoye o une valeur de recherche ne correspond aucune des valeurs de rsultats.

Oracle Database 11g: SQL Fundamentals I 4 - 153

Utilisation Function DECODE

SELECT last_name, job_id, salary, DECODE(job_id, 'IT_PROG', 1.10*salary, 'ST_CLERK', 1.15*salary, 'SA_REP', 1.20*salary, salary) REVISED_SALARY FROM employees;


1 - 154 Copyright 2007, Oracle. All rights reserved.

Utilisation de la fonction DECODE Dans l'instruction SQL dans la diapositive, la valeur de JOB_ID est test. Si JOB_ID est IT_PROG, l'augmentation de salaire est de 10%, si JOB_ID est ST_CLERK, l'augmentation de salaire est de 15%, si JOB_ID est SA_REP, l'augmentation de salaire est de 20%. Pour tous les rles d'emploi d'autres, il n'y a pas d'augmentation de salaire. Le mme constat peut tre exprime en tant que pseudo-code une instruction IF-THENELSE :
IF job_id = IF job_id = IF job_id = ELSE salary 'IT_PROG' 'ST_CLERK' 'SA_REP' = salary THEN THEN THEN salary = salary*1.10 salary = salary*1.15 salary = salary*1.20

Oracle Database 11g: SQL Fundamentals I 4 - 154

Utilisation Function DECODE


Afficher le taux d'imposition applicable chaque salari dans le dpartement 80:
SELECT last_name, salary, DECODE (TRUNC(salary/2000, 0), 0, 0.00, 1, 0.09, 2, 0.20, 3, 0.30, 4, 0.40, 5, 0.42, 6, 0.44, 0.45) TAX_RATE FROM employees WHERE department_id = 80;

1 - 155

Copyright 2007, Oracle. All rights reserved.

Utilisation de la fonction DECODE (suite) Cette diapositive montre un autre exemple utilisant la fonction DECODE. Dans cet exemple, vous dterminez le taux d'imposition pour chaque employ dpartement 80 sur la base du salaire mensuel. Les taux d'imposition sont les suivants : Monthly Salary Range Tax Rate $0.001,999.99 00% $2,000.003,999.99 09% $4,000.005,999.99 20% $6,000.007,999.99 30% $8,000.009,999.99 40% $10,000.0011,999.99 42% $12,200.0013,999.99 44% $14,000.00 or greater 45%

Oracle Database 11g: SQL Fundamentals I 4 - 155

Rsum
Dans cette leon, vous devriez avoir appris : Alter formats de date pour l'affichage l'aide des fonctions Convertir les donnes de colonne types en utilisant des fonctions Utilisez les fonctions NVL Utilisez IF-THEN-ELSE logique et d'autres expressions conditionnelles dans une instruction SELECT

1 - 156

Copyright 2007, Oracle. All rights reserved.

rsum Se souvenir de ce qui suit: Les fonctions de conversion permet de convertir caractre, la date et les valeurs numriques: TO_CHAR, TO_DATE, TO_NUMBER Il ya plusieurs fonctions qui se rapportent NULL, y compris NVL, NVL2, NULLIF et COALESCE. IF-THEN-ELSE logique peut tre applique dans une instruction SQL en utilisant l'expression CASE ou la fonction DECODE.

Oracle Database 11g: SQL Fundamentals I 4 - 156

Pratique 4
Cette pratique couvre les sujets suivants: Cration de requtes qui utilisent TO_CHAR, TO_DATE et les fonctions DATE autres Cration de requtes qui utilisent des expressions conditionnelles comme DECODE et CASE

1 - 157

Copyright 2007, Oracle. All rights reserved.

Exercice 4: Vue d'ensemble Cette pratique offre une varit d'exercices utilisant des fonctions to_char et TO_DATE et les expressions conditionnelles comme DECODE et CASE. N'oubliez pas que pour les fonctions imbriques, les rsultats sont valus partir de la fonction interne la fonction externe.

Oracle Database 11g: SQL Fundamentals I 4 - 157

Exercice 4 1. Crer un rapport qui donne les informations suivantes pour chaque employ: <nom <employee dernier gagne <salary> mois, mais veut <3 fois le salaire.>. tiqueter les salaires rve de colonne.

2. Afficher nom de chaque employ, la date d'embauche et la date de rvision des salaires, qui est le premier lundi aprs six mois de service. tiquetez la REVUE colonne. Formater les dates apparaissent dans le format similaire "lundi, le trente et unime Juillet 2000."

Oracle Database 11g: SQL Fundamentals I 4 - 158

Pratique 4 (suite) 3. Afficher le nom de famille, date d'embauche, et le jour de la semaine o l'employ a commenc. tiquetez le JOUR colonne. Ordonner les rsultats par le jour de la semaine, partir de lundi.

4. Crer une requte qui affiche le nom des employs derniers et les montants des commissions. Si un employ ne gagnez une commission, voir "Aucune commission." Label COMM colonne.

Oracle Database 11g: SQL Fundamentals I 4 - 159

Pratique 4 (suite) Si vous avez le temps, faites les exercices suivants: 5. Utilisation de la fonction DECODE, crire une requte qui affiche la qualit de tous les employs sur la base de la valeur de la colonne JOB_ID, en utilisant les donnes suivantes : Job Grade AD_PRES A ST_MAN B IT_PROG C SA_REP D ST_CLERK E None of the above 0

6. Rcrivez l'instruction dans l'exercice prcdent en utilisant la syntaxe CASE.

Oracle Database 11g: SQL Fundamentals I 4 - 160

La communication des donnes agrges Utilisation des fonctions du Groupe

1 - 161

Copyright 2007, Oracle. All rights reserved.

Objectifs
Aprs avoir termin cette leon, vous devriez tre en mesure de faire ce qui suit: Identifier les fonctions de groupe disponibles Dcrire l'utilisation des fonctions de groupe Les donnes de groupe l'aide de la clause GROUP BY Inclure ou exclure des lignes groupes en utilisant la clause HAVING

1 - 162

Copyright 2007, Oracle. All rights reserved.

objectifs Cette leon aborde en outre les fonctions. Il met l'accent sur l'obtention d'informations de synthse (telles que les moyennes) pour les groupes de lignes. Il explique comment regrouper des lignes dans une table en ensembles plus petits et la manire de spcifier des critres de recherche pour les groupes de lignes.

Oracle Database 11g: SQL Fundamentals I 5 - 162

Lesson Agenda
Les fonctions de groupe:
Types et syntaxe Utilisez AVG, SUM, MIN, MAX, COUNT Utilisez mot-cl DISTINCT dans les fonctions de groupe Les valeurs NULL dans une fonction de groupe

Regroupement des ligne :


Clause GROUP BY la clause HAVING

Fonctions du groupe dimbrication

1 - 163

Copyright 2007, Oracle. All rights reserved.

Oracle Database 11g: SQL Fundamentals I 5 - 163

Quelles sont les fonctions du groupe?


Fonctions du groupe oprent sur des ensembles de lignes pour donner un rsultat par groupe.
EMPLOYEES

Maximum salary in EMPLOYEES table

1 - 164

Copyright 2007, Oracle. All rights reserved.

Quelles sont les fonctions du groupe? Contrairement une range de fonctions, les fonctions de groupe fonctionnent sur des ensembles de lignes pour donner un rsultat par groupe. Ces ensembles peuvent comprendre l'ensemble du tableau ou de la scission table en groupes.

Oracle Database 11g: SQL Fundamentals I 5 - 164

Types de fonctions de groupe


AVG COUNT MAX MIN STDDEV SUM VARIANCE

Group functions

1 - 165

Copyright 2007, Oracle. All rights reserved.

Types de fonctions de groupe Chacune des fonctions accepte un argument. Le tableau suivant prsente les options que vous pouvez utiliser dans la syntaxe :

Function AVG([DISTINCT|ALL]n) COUNT({*|[DISTINCT|ALL]expr })

Description Average value of n, ignoring null values Number of rows, where expr evaluates to something other than null (count all selected rows using *, including duplicates and rows with nulls) Maximum value of expr, ignoring null values Minimum value of expr, ignoring null values Standard deviation of n, ignoring null values Sum values of n, ignoring null values Variance of n, ignoring null values

MAX([DISTINCT|ALL]expr) MIN([DISTINCT|ALL]expr) STDDEV([DISTINCT|ALL]x) SUM([DISTINCT|ALL]n) VARIANCE([DISTINCT|ALL]x)

Oracle Database 11g: SQL Fundamentals I 5 - 165

Fonctions du groupe: Syntaxe

SELECT FROM [WHERE [ORDER BY

group_function(column), ... table condition] column];

1 - 166

Copyright 2007, Oracle. All rights reserved.

Fonctions du groupe: Syntaxe Le groupe de fonctions est plac aprs le mot-cl SELECT. Vous pouvez avoir des fonctions de groupe spars par des virgules. Lignes directrices pour l'utilisation des fonctions de groupe: DISTINCT rend la fonction de ne considrer que les valeurs nonduplicate; ALL rend considrer chaque valeur, y compris les doublons. La valeur par dfaut est ALL et n'a donc pas besoin d'tre spcifi. Les types de donnes pour les fonctions avec un argument expr peut tre CHAR, VARCHAR2, NUMBER ou DATE. Toutes les fonctions de groupe ignorent les valeurs NULL. Pour remplacer une valeur pour les valeurs NULL, utilisez la NVL, NVL2, ou COALESCE fonctions.

Oracle Database 11g: SQL Fundamentals I 5 - 166

Utilisation de l'AVG et SUM Fonctions


Vous pouvez utiliser AVG et SUM pour les donnes numriques.
SELECT AVG(salary), MAX(salary), MIN(salary), SUM(salary) FROM employees WHERE job_id LIKE '%REP%';

1 - 167

Copyright 2007, Oracle. All rights reserved.

Utilisation de l'AVG et SUM Fonctions Vous pouvez utiliser l'AVG, SUM, MIN, MAX et les fonctions sur les colonnes qui peuvent stocker des donnes numriques. L'exemple de la diapositive affiche la moyenne la plus leve, la plus faible, et la somme des salaires mensuels pour tous les reprsentants des ventes.

Oracle Database 11g: SQL Fundamentals I 5 - 167

En utilisant les fonctions MIN et MAX


Vous pouvez utiliser MIN et MAX pour numrique, le caractre et les types de donnes date.
SELECT MIN(hire_date), MAX(hire_date) FROM employees;

1 - 168

Copyright 2007, Oracle. All rights reserved.

En utilisant les fonctions MIN et MAX Vous pouvez utiliser le MAX et MIN pour des fonctions numriques, de caractres et de donnes date types. L'exemple de la diapositive affiche les salaris les plus jeunes et les plus hauts. L'exemple suivant affiche le nom du dernier employ qui est le premier et le dernier nom de l'employ qui est le dernier de la liste alphabtique de tous les employs :
SELECT MIN(last_name), MAX(last_name) FROM employees;

Note: L'AVG, SUM, VARIANCE et les fonctions STDDEV peut tre utilis uniquement avec les types de donnes numriques. MAX et MIN ne peut pas tre utilise avec les types LOB ou LONG donnes.

Oracle Database 11g: SQL Fundamentals I 5 - 168

Utilisation de la fonction COUNT


COUNT (*) renvoie le nombre de lignes dans une table:

SELECT COUNT(*) FROM employees WHERE department_id = 50;

COUNT (expr) renvoie le nombre de lignes avec des valeurs non nulles pour expr:

SELECT COUNT(commission_pct) FROM employees WHERE department_id = 80;

1 - 169

Copyright 2007, Oracle. All rights reserved.

Utilisation de la fonction COUNT La fonction COUNT dans trois formats: COUNT (*) COUNT (expression) COUNT (DISTINCT expr) COUNT (*) renvoie le nombre de lignes dans une table qui satisfont aux critres de l'instruction SELECT, y compris les lignes dupliques et les lignes contenant des valeurs NULL dans une des colonnes. Si une clause WHERE est incluse dans l'instruction SELECT COUNT (*) renvoie le nombre de lignes qui satisfont la condition dans la clause WHERE. En revanche, COUNT (expr) renvoie le nombre de valeurs non nulles qui sont dans la colonne identifie par expr. COUNT (DISTINCT expr) retourne le nombre de particuliers, des valeurs non nulles qui sont dans la colonne identifie par expr. Exemples: 1. L'exemple de la diapositive affiche le nombre de salaris dans le dpartement 50. 2. L'exemple de la diapositive affiche le nombre de salaris dans le dpartement 80 qui peut gagner une commission.

Oracle Database 11g: SQL Fundamentals I 5 - 169

Utilisation du mot cl DISTINCT


COUNT (DISTINCT expr) retourne le nombre de non NULL et distinctes des valeurs de expr. Pour afficher le nombre de valeurs distinctes dpartement de la table EMPLOYS:
SELECT COUNT(DISTINCT department_id) FROM employees;

1 - 170

Copyright 2007, Oracle. All rights reserved.

Utilisation du mot cl DISTINCT Utilisez le mot-cl DISTINCT pour supprimer le dcompte de toutes les valeurs en double dans une colonne. L'exemple de la diapositive affiche le nombre de valeurs distinctes de dpartement qui sont dans la table EMPLOYEES.

Oracle Database 11g: SQL Fundamentals I 5 - 170

Fonctions de groupe et les valeurs nulles


Les fonctions de groupe ignorent les valeurs NULL dans la colonne:

SELECT AVG(commission_pct) FROM employees;

La fonction NVL oblige les fonctions de groupe pour inclure les valeurs NULL:

SELECT AVG(NVL(commission_pct, 0)) FROM employees;

1 - 171

Copyright 2007, Oracle. All rights reserved.

Fonctions de groupe et les valeurs nulles Toutes les fonctions de groupe ignorent les valeurs NULL dans la colonne. Cependant, la fonction NVL oblige les fonctions de groupe pour inclure les valeurs NULL. Exemples: 1. La moyenne est calcule sur la base uniquement sur les lignes de la table dans laquelle une valeur valide est stock dans la colonne COMMISSION_PCT. La moyenne est calcule comme le total de la commission qui est verse tous les employs, divis par le nombre de salaris bnficiant d'une commission (quatre). 2. La moyenne est calcule sur la base de toutes les lignes de la table, peu importe si les valeurs NULL sont stockes dans la colonne COMMISSION_PCT. La moyenne est calcule comme le total de la commission qui est verse tous les employs, divis par le nombre total d'employs dans l'entreprise (20).

Oracle Database 11g: SQL Fundamentals I 5 - 171

Lesson Agenda
Les fonctions de groupe:
Types et syntaxe Utilisez AVG, SUM, MIN, MAX, COUNT Utilisez mot-cl DISTINCT dans les fonctions de groupe Les valeurs NULL dans une fonction de groupe

Regroupement des ligne :


Clause GROUP BY la clause HAVING

Fonctions du groupe dimbrication

1 - 172

Copyright 2007, Oracle. All rights reserved.

Oracle Database 11g: SQL Fundamentals I 5 - 172

Cration de groupes de donnes


EMPLOYEES
4400 9500

Salaire moyen des EMPLOYEES pour chaque dpartement

3500

6400

10033

1 - 173

Copyright 2007, Oracle. All rights reserved.

Cration de groupes de donnes Jusqu' ce stade de notre discussion, toutes les fonctions du groupe ont trait de la table comme un grand groupe de l'information. Parfois, cependant, vous devez diviser le tableau des donnes en petits groupes. Cela peut tre fait en utilisant la clause GROUP BY.

Oracle Database 11g: SQL Fundamentals I 5 - 173

Cration de groupes de donnes: Syntaxe Clause GROUP BY


SELECT column, group_function(column) FROM table [WHERE condition] [GROUP BY group_by_expression] [ORDER BY column];

Vous pouvez diviser les lignes dans une table en petits groupes l'aide de la clause GROUP BY.

1 - 174

Copyright 2007, Oracle. All rights reserved.

Cration de groupes de donnes: clause GROUP BY Syntaxe Vous pouvez utiliser la clause GROUP BY pour diviser les lignes d'une table en groupes. Vous pouvez ensuite utiliser les fonctions de groupe pour retourner des informations rsumes pour chaque groupe. Dans la syntaxe: group_by_expression spcifie colonnes dont les valeurs dterminent la base? ranges de regroupement directives Si vous incluez une fonction de groupe dans une clause SELECT, vous ne pouvez pas slectionner les rsultats individuels ainsi, moins que la colonne individuelle apparat dans la clause GROUP BY. Vous recevez un message d'erreur si vous omettez d'inclure la liste des colonnes dans la clause GROUP BY. En utilisant une clause WHERE, vous pouvez exclure les lignes avant de les diviser en groupes. Vous devez inclure les colonnes dans la clause GROUP BY. Vous ne pouvez pas utiliser un alias de colonne dans la clause GROUP BY.

Oracle Database 11g: SQL Fundamentals I 5 - 174

Utilisation de la clause GROUP BY


Toutes les colonnes de la liste SELECT qui ne sont pas dans les fonctions de groupe doit tre dans la clause GROUP BY.
SELECT department_id, AVG(salary) FROM employees GROUP BY department_id ;

1 - 175

Copyright 2007, Oracle. All rights reserved.

Utilisation de la clause GROUP BY Lorsque vous utilisez la clause GROUP BY, assurez-vous que toutes les colonnes de la liste SELECT qui ne sont pas des fonctions de groupe sont inclus dans la clause GROUP BY. L'exemple de la diapositive affiche le numro de dpartement et le salaire moyen pour chaque dpartement. Voici comment cette instruction SELECT contenant une clause GROUP BY, est valu: La clause SELECT spcifie les colonnes rcuprer, comme suit: Colonne des numros de service de la table EMPLOYS La moyenne de tous les salaires dans le groupe que vous avez spcifi dans la clause GROUP BY La clause FROM spcifie les tables que la base de donnes doit accder: la table EMPLOYEES La clause WHERE spcifie les lignes rcuprer. Comme il n'y a pas de clause WHERE, toutes les lignes sont extraites par dfaut. La clause GROUP BY spcifie comment les lignes doivent tre regroups. Les lignes sont groupes par numro de dpartement, de sorte que la fonction AVG qui est appliqu la colonne salary calcule le salaire moyen pour chaque dpartement.

Oracle Database 11g: SQL Fundamentals I 5 - 175

Utilisation de la clause GROUP BY


La clause GROUP BY colonne ne doit pas tre dans la liste SELECT.
SELECT AVG(salary) FROM employees GROUP BY department_id ;

1 - 176

Copyright 2007, Oracle. All rights reserved.

Utilisation de la clause GROUP BY (suite) La clause GROUP BY colonne ne doit pas tre dans la clause SELECT. Par exemple, l'instruction SELECT dans la diapositive affiche la moyenne des salaires pour chaque dpartement sans afficher les numros de dpartement respectifs. Sans les numros de dpartement, toutefois, les rsultats ne semblent pas significatifs. Vous pouvez galement utiliser la fonction de groupe dans la clause ORDER BY :
SELECT FROM GROUP BY ORDER BY department_id, AVG(salary) employees department_id AVG(salary);

Oracle Database 11g: SQL Fundamentals I 5 - 176

Regroupement par plus d'une colonne


EMPLOYEES
Ajouter les salaires dans la table Employs pour chaque travail, regroups par Dpartement.

1 - 177

Copyright 2007, Oracle. All rights reserved.

Regroupement par plus d'une colonne Parfois, vous avez besoin de voir les rsultats pour les groupes au sein des groupes. Cette diapositive montre un rapport qui affiche le total du salaire qui est vers chaque titre de poste dans chaque dpartement. Le tableau est EMPLOYS regroups d'abord par le numro de dpartement, puis par le titre du poste l'intrieur de ce groupe. Par exemple, les quatre commis aux stocks dans le dpartement 50 sont regroups, et un seul rsultat (salaire total) est produit pour tous les commis aux stocks dans le groupe.

Oracle Database 11g: SQL Fundamentals I 5 - 177

Utilisation de la clause GROUP BY Sur plusieurs colonnes


SELECT FROM GROUP BY ORDER BY department_id dept_id, job_id, SUM(salary) employees department_id, job_id department_id;

1 - 178

Copyright 2007, Oracle. All rights reserved.

Utilisation de la clause GROUP BY sur plusieurs colonnes Vous pouvez retourner des rsultats sommaires pour les groupes et sous-groupes en inscrivant plus d'un GROUP BY colonne. Vous pouvez dterminer l'ordre de tri par dfaut des rsultats par l'ordre des colonnes dans la clause GROUP BY. Dans l'exemple de la diapositive, l'instruction SELECT contenant une clause GROUP BY est value comme suit: La clause SELECT spcifie la colonne rcuprer: Numro de dpartement dans le tableau EMPLOYS Job ID dans la table EMPLOYES La somme de tous les salaires dans le groupe que vous avez spcifi dans la clause GROUP BY La clause FROM spcifie les tables que la base de donnes doit accder: la table EMPLOYEES La clause GROUP BY spcifie comment vous devez regrouper les lignes: Tout d'abord, les lignes sont regroupes par le numro de dpartement. Deuximement, les lignes sont regroupes par ID du travail dans les groupes de numros de dpartement. Ainsi, la fonction SOMME est applique la colonne de salaire pour tous les ID d'emplois dans chaque groupe numro de dpartement.

Oracle Database 11g: SQL Fundamentals I 5 - 178

Les requtes illgales Utilisation des fonctions du Groupe


Toute colonne ou une expression dans la liste SELECT qui n'est pas une fonction d'agrgation doit tre dans la clause GROUP BY:
SELECT department_id, COUNT(last_name) FROM employees; Une clause GROUP BY doit tre ajoute compter les noms de famille pour chaque departement_id. SELECT department_id, job_id, COUNT(last_name) FROM employees GROUP BY department_id; Soit ajouter job_id dans la clause GROUP BY ou supprimer la colonne job_id dans la liste SELECT.
1 - 179 Copyright 2007, Oracle. All rights reserved.

Les requtes illgales Utilisation des fonctions du Groupe Chaque fois que vous utilisez un mlange d'lments individuels (DEPARTMENT_ID) et les fonctions de groupe (COUNT) dans la mme instruction SELECT, vous devez inclure une clause GROUP BY spcifie que les lments individuels (dans ce cas, DEPARTMENT_ID). Si la clause GROUP BY est manquant, alors le message d'erreur "pas un seul groupe du groupe de fonctions" apparat et un astrisque (*) indique la colonne de rcidive. Vous pouvez corriger l'erreur dans le premier exemple de la diapositive en ajoutant la clause GROUP BY :
SELECT department_id, count(last_name) FROM employees GROUP BY department_id;

Toute colonne ou une expression dans la liste SELECT qui n'est pas une fonction d'agrgation doit tre dans la clause GROUP BY. Dans le deuxime exemple de la diapositive, job_id n'est ni dans la clause GROUP BY n'est pas non plus tre utilis par un groupe de fonction, il ya donc un "pas une expression GROUP BY" erreur. Vous pouvez corriger l'erreur dans l'exemple de deuxime diapositive en ajoutant job_id dans la clause GROUP BY.
SELECT department_id, job_id, COUNT(last_name) FROM employees GROUP BY department_id, job_id;

Oracle Database 11g: SQL Fundamentals I 5 - 179

Les requtes illgales Utilisation des fonctions du Groupe


Vous ne pouvez pas utiliser la clause WHERE pour limiter les groupes. Vous pouvez utiliser la clause HAVING pour restreindre les groupes. Vous ne pouvez pas utiliser les fonctions de groupe dans la clause WHERE. SELECT department_id, AVG(salary) FROM employees WHERE AVG(salary) > 8000 GROUP BY department_id;

Impossible d'utiliser la clause WHERE pour limiter les groupes

1 - 180

Copyright 2007, Oracle. All rights reserved.

Les requtes illgales Utilisation des fonctions de groupe (suite) La clause WHERE ne peut pas tre utilis pour restreindre les groupes. L'instruction SELECT dans l'exemple les rsultats des diapositives dans une erreur, car il utilise la clause WHERE pour limiter l'affichage des salaires moyens de ces ministres qui ont un salaire moyen suprieur 8000 $. Cependant, vous pouvez corriger l'erreur dans l'exemple en utilisant la clause HAVING pour restreindre les groupes :
SELECT FROM GROUP BY HAVING department_id, AVG(salary) employees department_id AVG(salary) > 8000;

Oracle Database 11g: SQL Fundamentals I 5 - 180

Limiter Rsultats du Groupe


EMPLOYEES

Le salaire maximum par dpartement o il est suprieur $ 10,000

1 - 181

Copyright 2007, Oracle. All rights reserved.

Limiter Rsultats du Groupe Vous pouvez utiliser la clause HAVING pour restreindre les groupes de la mme faon que vous utilisez la clause WHERE pour limiter les lignes que vous avez slectionnes. Pour trouver le salaire maximal de chacun des ministres qui ont un salaire maximum suprieur 10.000 $, vous devez faire ce qui suit: 1. Trouvez le salaire moyen pour chaque dpartement par le regroupement par numro de dpartement. 2. Limiter les groupes ces dpartements avec un salaire maximum suprieur 10.000 $.

Oracle Database 11g: SQL Fundamentals I 5 - 181

Restreindre les rsultats du Groupe Avec la clause HAVING


Lorsque vous utilisez la clause HAVING, le serveur Oracle limite groupes comme suit: 1. Les lignes sont regroupes. 2. La fonction de groupe est applique. 3. Groupes correspondants de la clause HAVING sont affichs.
SELECT FROM [WHERE [GROUP BY [HAVING [ORDER BY column, group_function table condition] group_by_expression] group_condition] column];

1 - 182

Copyright 2007, Oracle. All rights reserved.

Restreindre les rsultats du Groupe avec la clause HAVING Vous pouvez utiliser la clause HAVING pour spcifier les groupes qui doivent tre affichs, ce qui limite encore les groupes sur la base des informations globales. Dans la syntaxe, group_condition limite les groupes de lignes retournes ces groupes pour lesquels la condition spcifie est vraie. Le serveur Oracle effectue les tapes suivantes lorsque vous utilisez la clause HAVING: 1. Les lignes sont regroupes. 2. Le groupe de fonctions est applique au groupe. 3. Les groupes qui correspondent aux critres de la clause HAVING sont affichs. La clause HAVING peut prcder la clause GROUP BY, mais il est recommand de placer la clause GROUP BY d'abord parce qu'il est plus logique. Les groupes sont forms et fonctions du groupe sont calculs avant la clause HAVING est appliqu aux groupes de la liste SELECT.

Oracle Database 11g: SQL Fundamentals I 5 - 182

Utilisation de la clause HAVING

SELECT FROM GROUP BY HAVING

department_id, MAX(salary) employees department_id MAX(salary)>10000 ;

1 - 183

Copyright 2007, Oracle. All rights reserved.

Utilisation de la clause HAVING L'exemple de la diapositive affiche les numros de dpartement et les salaires maximums pour ces dpartements avec un salaire maximum suprieur 10.000 $. Vous pouvez utiliser la clause GROUP BY sans l'aide d'une fonction de groupe dans la liste SELECT. Si vous limitez les lignes en fonction du rsultat d'une fonction de groupe, vous devez disposer d'une clause GROUP BY, ainsi que la clause HAVING. L'exemple suivant affiche les numros de dpartement et les salaires moyens pour les ministres avec un salaire maximum suprieur $ 10,000 :
SELECT FROM GROUP BY HAVING department_id, AVG(salary) employees department_id max(salary)>10000;

Oracle Database 11g: SQL Fundamentals I 5 - 183

Utilisation de la clause HAVING

SELECT FROM WHERE GROUP BY HAVING ORDER BY

job_id, SUM(salary) PAYROLL employees job_id NOT LIKE '%REP%' job_id SUM(salary) > 13000 SUM(salary);

1 - 184

Copyright 2007, Oracle. All rights reserved.

Utilisation de la clause HAVING (suite) L'exemple de la diapositive affiche l'ID du travail et le total salaire mensuel pour chaque travail qui a une masse salariale totale de plus de 13.000 $. L'exemple exclut les reprsentants des ventes et trie la liste par le salaire mensuel total.

Oracle Database 11g: SQL Fundamentals I 5 - 184

Lesson Agenda
Les fonctions de groupe:
Types et syntaxe Utilisez AVG, SUM, MIN, MAX, COUNT Utilisez mot-cl DISTINCT dans les fonctions de groupe Les valeurs NULL dans une fonction de groupe

Regroupement des ligne :


Clause GROUP BY la clause HAVING

Fonctions du groupe dimbrication

1 - 185

Copyright 2007, Oracle. All rights reserved.

Oracle Database 11g: SQL Fundamentals I 5 - 185

Fonctions du groupe Imbrication


Afficher le salaire maximal moyen:
SELECT MAX(AVG(salary)) FROM employees GROUP BY department_id;

1 - 186

Copyright 2007, Oracle. All rights reserved.

Fonctions du groupe Imbrication Fonctions de groupe peuvent tre imbriqus jusqu' une profondeur de deux fonctions. L'exemple de la diapositive calcule le salaire moyen pour chaque departement_id puis affiche le salaire moyen maximum. Notez que la clause GROUP BY est obligatoire lorsque les fonctions de groupe de Imbrication

Oracle Database 11g: SQL Fundamentals I 5 - 186

Rsum
Dans cette leon, vous devriez avoir appris : Utilisez le groupe de fonctions COUNT, MAX, MIN, SUM et AVG crire des requtes qui utilisent la clause GROUP BY crire des requtes qui utilisent la clause HAVING
SELECT FROM [WHERE [GROUP BY [HAVING [ORDER BY column, group_function table condition] group_by_expression] group_condition] column];

1 - 187

Copyright 2007, Oracle. All rights reserved.

rsum Il existe plusieurs fonctions de groupe disponibles dans SQL, tels que: AVG, COUNT, MAX, MIN, SUM, STDDEV et VARIANCE Vous pouvez crer des sous-groupes l'aide de la clause GROUP BY. En outre, les groupes peuvent tre rduite en utilisant la clause HAVING. Placez le HAVING et les clauses GROUP BY, aprs la clause WHERE dans un communiqu. L'ordre de la clause GROUP BY et HAVING aprs la clause WHERE n'est pas important. Placez la clause ORDER BY la fin. Le serveur Oracle value les clauses dans l'ordre suivant: 1. Si l'instruction contient une clause WHERE, le serveur tablit les lignes candidates. 2. Le serveur identifie les groupes qui sont spcifies dans la clause GROUP BY. 3. La clause HAVING restreint encore plus les groupes de rsultats qui ne rpondent pas aux critres du groupe dans la clause HAVING. Remarque: Pour une liste complte des fonctions de groupe, reportez-vous Oracle Database 11g SQL Rfrence du langage, Release 1 (11.1).

Oracle Database 11g: SQL Fundamentals I 5 - 187

Pratique 5
Cette pratique couvre les sujets suivants: L'criture de requtes qui utilisent les fonctions de groupe Regroupement par ranges pour atteindre plus d'un rsultat Limiter les groupes l'aide de la clause HAVING

1 - 188

Copyright 2007, Oracle. All rights reserved.

Exercice 5: Vue d'ensemble A la fin de cette pratique, vous devriez tre familier avec l'utilisation des fonctions de groupe et en slectionnant des groupes de donnes.

Oracle Database 11g: SQL Fundamentals I 5 - 188

Exercice 5 Dterminer la validit des trois noncs suivants. Cercle True ou False. 1. Fonctions du groupe de travail sur plusieurs lignes pour produire un rsultat par groupe.? Vrai / Faux

2. Fonctions du Groupe comprennent les valeurs NULL dans les calculs.? Vrai / Faux

3. La clause WHERE limite les lignes avant de les inclure dans un calcul de groupe.? Vrai / Faux Le dpartement RH a besoin des rapports suivants: 4. Trouver plus haut, plus bas, la somme, et le salaire moyen de tous les employs. Etiqueter les colonnes? Que Maximum, Minimum, Somme, et la moyenne, respectivement. Arrondissez vos rsultats l'entier le plus proche. Sauvegardez votre instruction SQL comme lab_05_04.sql. Excutez la requte.

5. Modifiez la requte en lab_05_04.sql pour afficher le minimum, le maximum, la somme, et le salaire moyen pour chaque type d'emploi. Renregistrer lab_05_04.sql que lab_05_05.sql. Excutez l'instruction dans lab_05_05.sql.

Oracle Database 11g: SQL Fundamentals I 5 - 189

Pratique 5 (suite) 6. crire une requte pour afficher le nombre de personnes ayant le mme travail.

Gnraliser la requte de sorte que l'utilisateur dans le service des ressources humaines est invit entrer un titre d'emploi. Enregistrez le script dans un fichier nomm lab_05_06.sql. Excutez la requte. Entrez IT_PROG lorsque vous tes invit.

7. Dterminer le nombre de gestionnaires sans les numrer. Marquez la colonne sous le numro de Grance. Astuce: Utilisez la colonne manager_id pour dterminer le nombre de gestionnaires.

8. 8. Trouvez la diffrence entre les salaires les plus levs et les plus faibles. tiquetez le DIFFRENCE colonne.

Oracle Database 11g: SQL Fundamentals I 5 - 190

Pratique 5 (suite) Si vous avez le temps, faites les exercices suivants: 9. Crer un rapport pour afficher le numro gestionnaire et le salaire de l'employ le moins pay pour ce gestionnaire. Exclure toute personne dont le responsable n'est pas connu. Exclure un groupe o le salaire minimum est de 6000 $ ou moins. Trier le rsultat par ordre dcroissant de salaire.

Si vous voulez un dfi supplmentaire, faites les exercices suivants: Crer une requte pour afficher le nombre total de salaris et, de ce total, le nombre d'employs embauchs en 1995, 1996, 1997 et 1998. Crer les colonnes appropries.

Crer une requte matrice pour afficher le travail, le salaire pour ce travail bas sur le numro de dpartement et le salaire total pour ce travail, pour les dpartements 20, 50, 80, et 90, donnant chaque colonne un titre appropri.

Oracle Database 11g: SQL Fundamentals I 5 - 191

Affichage des donnes de plusieurs tables

1 - 193

Copyright 2007, Oracle. All rights reserved.

Objectifs
Aprs avoir termin cette leon, vous devriez tre en mesure de faire ce qui suit: Rdiger des instructions SELECT pour accder aux donnes partir de plus d'un tableau l'aide quijointures et nonequijoins Rejoindre une table elle-mme en utilisant un auto-jointure Voir les donnes qui ne rpondent gnralement pas une condition de jointure l'aide de joint externe Gnrer un produit cartsien de toutes les lignes partir de deux ou plusieurs tables

1 - 194

Copyright 2007, Oracle. All rights reserved.

objectifs Cette leon explique comment obtenir des donnes provenant de plus d'une table. Une jointure est utilis pour afficher des informations provenant de plusieurs tables. Par consquent, vous pouvez joindre des tables ainsi que pour afficher des informations partir de plusieurs tables. Remarque: Les informations sur les jointures se trouve dans la section sur les requtes SQL et sous-requtes: Entre dans Oracle Database 11g SQL Rfrence du langage, Release 1 (11.1).

Oracle Database 11g: SQL Fundamentals I 6 - 194

Lesson Agenda
Types de jointures et sa syntaxe Jointure naturelle:
USING clause ON clause

Auto-jointure Nonequijoins OUTER join:


LEFT OUTER join RIGHT OUTER join FULL OUTER join

produit cartsien
Cross join

1 - 195

Copyright 2007, Oracle. All rights reserved.

Oracle Database 11g: SQL Fundamentals I 6 - 195

Obtention de donnes dans plusieurs tables

EMPLOYEES

DEPARTMENTS

1 - 196

Copyright 2007, Oracle. All rights reserved.

Obtention de donnes dans plusieurs tables Parfois, vous avez besoin d'utiliser des donnes provenant de plusieurs tables. Dans l'exemple de la diapositive, le rapport affiche des donnes provenant de deux tables distinctes: ID employ dans la table EMPLOYES. Dpartement ID existent dans les tables Employees et Departments. Noms de service existe dans la table Departments. Pour produire le rapport, vous devez lier les employs et les ministres des tables, et d'accs aux donnes de tous les deux.

Oracle Database 11g: SQL Fundamentals I 6 - 196

Types de jointure
Les jointures qui sont conformes la SQL: 1999 norme sont les suivants:
Jointures naturelles:

Clause JOIN NATUREL clause USING clause ON LEFT OUTER JOIN DROIT OUTER JOIN FULL OUTER JOIN

Les jointures externes:


Les jointures croises

1 - 197

Copyright 2007, Oracle. All rights reserved.

Types de jointure Pour joindre des tables, vous pouvez utiliser une syntaxe de jointure qui est conforme SQL: 1999 standard. Remarque: Avant la sortie Oracle9i, la syntaxe de jointure tait diffrent de l'American National Standards Institute (ANSI). Le SQL :1999-syntaxe compatible jointure ne pas offrir tous les avantages de performance sur le propritaire Oracle syntaxe de jointure qui existait dans les versions prcdentes. Pour des informations dtailles sur la syntaxe de jointure de proprit, voir l'annexe C: Oracle Joignez-vous Syntaxe. Remarque: La diapositive suivante traite de l'instruction SQL: 1999 syntaxe de jointure.

Oracle Database 11g: SQL Fundamentals I 6 - 197

Les tableaux d'assemblage l'aide de SQL Syntaxe: 1999


Utilisez une jointure pour interroger les donnes de plus d'un tableau:
SELECT table1.column, table2.column FROM table1 [NATURAL JOIN table2] | [JOIN table2 USING (column_name)] | [JOIN table2 ON (table1.column_name = table2.column_name)]| [LEFT|RIGHT|FULL OUTER JOIN table2 ON (table1.column_name = table2.column_name)]| [CROSS JOIN table2];

1 - 198

Copyright 2007, Oracle. All rights reserved.

Les tableaux d'assemblage l'aide de SQL Syntaxe: 1999 Dans la syntaxe: table1.column dsigne la table et la colonne partir de laquelle les donnes sont extraites NATURAL JOIN joint deux tables bases sur le mme nom de colonne JOIN table2 UTILISATION column_name effectue une qui-jointure base sur le nom de la colonne JOIN table2 ON table1.column_name = table2.column_name effectue une qui-jointure base sur la condition dans la clause ON GAUCHE / DROITE / FULL OUTER est utilis pour effectuer des jointures externes CROSS JOIN renvoie un produit cartsien des deux tables Pour plus d'informations, reportez-vous la section intitule SELECT dans Oracle Database 11g SQL Langage de rfrence, Release 1 (11.1).

Oracle Database 11g: SQL Fundamentals I 6 - 198

Qualification des noms de colonnes ambigus


Utiliser les prfixes de table pour qualifier les noms de colonnes qui sont dans plusieurs tables. Utilisez prfixes de tables pour amliorer les performances. Au lieu de plein prfixes de nom de table, utilisez des alias de table. Alias de table donne un tableau un nom plus court:
Maintient du code SQL plus petite, utilise moins de mmoire

Utilisez les alias de colonnes pour distinguer les colonnes qui portent des noms identiques, mais rsident dans des tables diffrentes.

1 - 199

Copyright 2007, Oracle. All rights reserved.

Qualification des noms de colonnes ambigus Lors de l'assemblage de deux ou plusieurs tables, vous devez qualifier le nom des colonnes avec le nom de la table pour viter toute ambigut. Sans les prfixes de table, la colonne DEPARTMENT_ID dans la liste SELECT peut provenir soit de la table Departments ou la table EMPLOYEES. Il est ncessaire d'ajouter le prfixe de table pour excuter votre requte. S'il n'y a aucun nom de colonne communs entre les deux tables, il n'est pas ncessaire de qualifier les colonnes. Cependant, en utilisant le prfixe de table amliore les performances, car vous indiquer au serveur Oracle exactement o trouver les colonnes. Toutefois, la qualification des noms de colonne avec les noms de table peut prendre beaucoup de temps, surtout si les noms de tables sont longues. Au lieu de cela, vous pouvez utiliser des alias de table. Tout comme un alias de colonne donne un autre nom de colonne, un alias de table donne un tableau un autre nom. Les alias de table aident garder le code SQL plus petite, donc d'utiliser moins de mmoire. Le nom de la table est spcifi en entier, suivi d'un espace puis l'alias de table. Par exemple, la table EMPLOYEES peut tre donn un alias de courrier, et la table DEPARTEMENTS un alias de d. directives Les alias de table peut comporter jusqu' 30 caractres de longueur, mais plus courts alias sont mieux que les plus longues. Si un alias de table est utilis pour un nom de table spcifique dans la clause FROM, alors que les alias de table doit tre remplac par le nom de la table tout au long de l'instruction SELECT. Les alias de table devrait tre significative. Les alias de table n'est valide que pour l'instruction en cours SELECT.
Oracle Database 11g: SQL Fundamentals I 6 - 199

Lesson Agenda
Types de jointures et sa syntaxe Jointure naturelle:
USING clause ON clause

Auto-jointure Nonequijoins OUTER join:


LEFT OUTER join RIGHT OUTER join FULL OUTER join

produit cartsien
Cross join

1 - 200

Copyright 2007, Oracle. All rights reserved.

Oracle Database 11g: SQL Fundamentals I 6 - 200

Cration de jointures naturelles


La clause de jointure naturelle est base sur toutes les colonnes des deux tables qui ont le mme nom. Il slectionne les lignes des deux tables qui ont des valeurs gales dans toutes les colonnes correspondent. Si les colonnes portant les mmes noms ont diffrents types de donnes, une erreur est retourne.

1 - 201

Copyright 2007, Oracle. All rights reserved.

Cration de jointures naturelles Vous pouvez joindre les tables automatiquement sur la base des colonnes des deux tables qui ont des types de donnes correspondants et des noms. Pour ce faire, en utilisant les mots-cls jointure naturelle. Remarque: La jointure peut se produire uniquement sur les colonnes qui ont les mmes noms et les types de donnes dans les deux tables. Si les colonnes portent le mme nom, mais diffrents types de donnes, alors la syntaxe JOIN NATUREL provoque une erreur.

Oracle Database 11g: SQL Fundamentals I 6 - 201

Rcuprer des enregistrements avec des jointures naturelles


SELECT department_id, department_name, location_id, city FROM departments NATURAL JOIN locations ;

1 - 202

Copyright 2007, Oracle. All rights reserved.

Rcuprer des enregistrements avec des jointures naturelles Dans l'exemple de la diapositive, le tableau EMPLACEMENTS est jointe la table DEPARTMENT par la colonne LOCATION_ID, qui est la seule colonne du mme nom dans les deux tables. Si d'autres colonnes communes taient prsents, la jointure aurait utilis tous. Jointures naturelles avec une clause WHERE Des restrictions supplmentaires sur une jointure naturelle sont mises en uvre l'aide d'une clause WHERE. L'exemple suivant limite les lignes de sortie ceux qui ont un ID de service gale 20 ou 50 :
SELECT department_id, department_name, location_id, city FROM departments NATURAL JOIN locations WHERE department_id IN (20, 50);

Oracle Database 11g: SQL Fundamentals I 6 - 202

Cration de jointures avec la clause USING


Si plusieurs colonnes portent le mme nom, mais les types de donnes ne correspondent pas, jointure naturelle peut tre applique en utilisant la clause USING pour spcifier les colonnes qui doivent tre utiliss pour une qui-jointure. Utiliser la clause USING pour correspondre une seule colonne lorsque plus d'une colonne matchs. La jointure naturelle et l'utilisation des clauses s'excluent mutuellement.

1 - 203

Copyright 2007, Oracle. All rights reserved.

Cration de jointures avec la clause USING Jointures naturelles utiliser toutes les colonnes avec les noms correspondants et types de donnes pour joindre les tables. La clause USING peut tre utilis pour spcifier uniquement les colonnes qui doivent tre utiliss pour une qui-jointure.

Oracle Database 11g: SQL Fundamentals I 6 - 203

Rejoindre les noms de colonnes


EMPLOYEES DEPARTMENTS

Primary key

Foreign key
1 - 204 Copyright 2007, Oracle. All rights reserved.

Rejoindre les noms de colonnes Pour dterminer le nom du service d'un employ, vous comparez la valeur dans la colonne DEPARTMENT_ID dans le tableau EMPLOYS avec les valeurs departement_id de la table Departments. La relation entre les salaris et les tables DPARTEMENTS est une qui-jointure, c'est- valeurs dans la colonne DEPARTMENT_ID dans les tables doivent tre gaux. Souvent, ce type de jointure implique primaire et cl trangre complte. Remarque: Equijointures sont aussi appeles jointures simples ou des jointures internes.

Oracle Database 11g: SQL Fundamentals I 6 - 204

Rcuprer des enregistrements avec la clause USING


SELECT employee_id, last_name, location_id, department_id FROM employees JOIN departments USING (department_id) ;

1 - 205

Copyright 2007, Oracle. All rights reserved.

Rcuprer des enregistrements avec la clause USING Dans l'exemple de la diapositive, les colonnes departement_id dans les tables Employees et DPARTEMENTS sont joints et donc la LOCATION_ID du dpartement o un employ travaille est affich.

Oracle Database 11g: SQL Fundamentals I 6 - 205

Utilisation d'alias de table avec la clause USING


Ne sont pas admissibles une colonne qui est utilise dans la clause USING. Si la mme colonne est utilise ailleurs dans l'instruction SQL, il ne alias. SELECT l.city, d.department_name FROM locations l JOIN departments d USING (location_id) WHERE d.location_id = 1400;

1 - 206

Copyright 2007, Oracle. All rights reserved.

Utilisation d'alias de table avec la clause USING Lors de l'assemblage avec la clause USING, vous ne pouvez pas bnficier d'une colonne qui est utilise dans la clause USING lui-mme. En outre, si cette colonne est utilise partout dans l'instruction SQL, vous ne pouvez pas l'alias. Par exemple, dans la requte mentionne dans la diapositive, vous ne devriez pas l'alias de la colonne LOCATION_ID dans la clause WHERE, car la colonne est utilise dans la clause USING. Les colonnes qui sont rfrences dans la clause USING ne devrait pas avoir un qualificatif (nom de la table ou pseudonyme) n'importe o dans l'instruction SQL. Par exemple, l'instruction suivante est valide : SELECT l.city, d.department_name FROM locations l JOIN departments d USING (location_id) WHERE location_id = 1400; Parce que, les autres colonnes qui sont communes dans les deux tableaux, mais non utilises dans la clause USING, doit tre prfix avec un alias de table sinon vous obtiendrez la "colonne dfinie de faon ambigu d'erreur. Dans l'instruction suivante, manager_id est prsent dans les employs et les dpartements de table et si manager_id n'est pas prfix avec un alias de table, il donne une colonne dfinie de faon ambigu d'erreur. La dclaration suivante est valide : SELECT first_name, d.department_name, d.manager_id FROM employees e JOIN departments d USING (department_id) WHERE department_id = 50;

Oracle Database 11g: SQL Fundamentals I 6 - 206

Cration de jointure avec la clause ON


La condition de jointure pour la jointure naturelle est essentiellement une qui-jointure de toutes les colonnes avec le mme nom. Utiliser la clause ON pour prciser les conditions arbitraires ou spcifier des colonnes de jointure. La condition de jointure est spar de conditions de recherche d'autres. La clause ON rend le code facile comprendre.

1 - 207

Copyright 2007, Oracle. All rights reserved.

Cration de joint avec la clause ON Utiliser la clause pour spcifier une condition de jointure. Avec cela, vous pouvez spcifier les conditions de jointure distinctes de toute recherche ou de conditions de filtre dans la clause WHERE.

Oracle Database 11g: SQL Fundamentals I 6 - 207

Rcuprer des enregistrements avec la clause ON

SELECT e.employee_id, e.last_name, e.department_id, d.department_id, d.location_id FROM employees e JOIN departments d ON (e.department_id = d.department_id);

1 - 208 Copyright 2007, Oracle. All rights reserved.

Rcuprer des enregistrements avec la clause ON Dans cet exemple, les colonnes departement_id dans les employs et table Departments sont jointes l'aide de la clause ON. Partout o un ID de service dans la table EMPLOYES correspond un ID de service de la table Departments, la ligne est renvoye. Les alias de table est ncessaire pour qualifier les column_names correspondant. Vous pouvez galement utiliser la clause ON pour rejoindre les colonnes qui portent des noms diffrents. Les parenthses autour des colonnes jointes comme dans l'exemple toboggan, (e.department_id = d.department_id) est facultative. Donc, mme sur e.department_id = d.department_id va fonctionner. Remarque: SQL Developer suffixes un _1 pour diffrencier entre les deux department_ids.

Oracle Database 11g: SQL Fundamentals I 6 - 208

Creation jointure en utilisant la Clause ON

SELECT FROM JOIN ON JOIN ON

employee_id, city, department_name employees e departments d d.department_id = e.department_id locations l d.location_id = l.location_id;

1 - 209 Copyright 2007, Oracle. All rights reserved.

Cration Three-Way rejoint avec la clause ON Un trois voies rejoindre est une jointure de trois tables. Dans SQL :1999-conforme syntaxe, les jointures sont effectues de gauche droite. Donc, la premire jointure effectuer est EMPLOYS REJOIGNEZ-NOUS DPARTEMENTS. La condition premire jointure peut faire rfrence des colonnes dans Employees et Departments mais ne peut pas rfrencer des colonnes dans des endroits. La condition de jointure seconde peut rfrencer que les colonnes des trois tables. Remarque: L'exemple de code dans le tiroir peut galement tre ralis avec la clause USING :
SELECT e.employee_id, l.city, d.department_name FROM employees e JOIN departments d USING (department_id) JOIN locations l USING (location_id)

Oracle Database 11g: SQL Fundamentals I 6 - 209

L'application des conditions supplmentaires une jointure


Utiliser la clause AND ou la clause WHERE pour appliquer des conditions supplmentaires :
SELECT e.employee_id, e.last_name, e.department_id, d.department_id, d.location_id FROM employees e JOIN departments d ON (e.department_id = d.department_id) AND e.manager_id = 149 ;

Or
SELECT e.employee_id, e.last_name, e.department_id, d.department_id, d.location_id FROM employees e JOIN departments d ON (e.department_id = d.department_id) WHERE e.manager_id = 149 ;

1 - 210

Copyright 2007, Oracle. All rights reserved.

L'application des conditions supplmentaires une jointure Vous pouvez appliquer des conditions supplmentaires la rejoindre. L'exemple ci effectue une jointure sur les tables Employees et DPARTEMENTS et, en outre, affiche uniquement les employs qui ont un nom de gestionnaire 149. Pour ajouter des conditions supplmentaires la clause ON, vous pouvez ajouter des clauses AND. Alternativement, vous pouvez utiliser une clause WHERE pour appliquer des conditions supplmentaires.

Oracle Database 11g: SQL Fundamentals I 6 - 210

Lesson Agenda
Types de jointures et sa syntaxe Jointure naturelle:
USING clause ON clause

Auto-jointure Nonequijoins OUTER join:


LEFT OUTER join RIGHT OUTER join FULL OUTER join

produit cartsien
Cross join

1 - 211

Copyright 2007, Oracle. All rights reserved.

Oracle Database 11g: SQL Fundamentals I 6 - 211

Rejoindre une table elle-mme

EMPLOYEES (WORKER)

EMPLOYEES (MANAGER)

Manager_id dans le tableau TRAVAILLEUR est gale EMPLOYEE_ID dans le tableau MANAGER.

1 - 212

Copyright 2007, Oracle. All rights reserved.

Rejoindre une table elle-mme Parfois, vous devez joindre une table sur elle-mme. Pour trouver le nom du responsable de chaque employ, vous devez rejoindre la table EMPLOYES lui-mme, ou d'effectuer une autojointure. Par exemple, pour trouver le nom du gestionnaire de Lorentz, vous devez: Trouvez Lorentz dans la table EMPLOYEES en regardant la colonne LAST_NAME Trouvez le nombre gestionnaire de Lorentz en regardant la colonne manager_id. Numro gestionnaire de Lorentz est de 103. Trouvez le nom du gestionnaire de employe_id 103 en regardant la colonne LAST_NAME. Numro d'employ Hunold est 103, si Hunold est responsable de Lorentz. Dans ce processus, vous regardez dans le tableau deux fois. La premire fois que vous regardez dans le tableau pour trouver de Lorentz dans la colonne LAST_NAME et la valeur manager_id de 103. La deuxime fois que vous regardez dans la colonne employe_id de trouver 103 et la colonne LAST_NAME de trouver Hunold.

Oracle Database 11g: SQL Fundamentals I 6 - 212

D'auto-jointures Utilisation de la clause ON

SELECT worker.last_name emp, manager.last_name mgr FROM employees worker JOIN employees manager ON (worker.manager_id = manager.employee_id);

1 - 213

Copyright 2007, Oracle. All rights reserved.

D'auto-jointures Utilisation de la clause ON La clause ON peut galement tre utilis pour joindre les colonnes qui portent des noms diffrents, au sein de la mme table ou dans une autre table. L'exemple prsent est une auto-jointure de la table EMPLOYES, sur la base des colonnes employe_id et manager_id. Note: Les parenthses autour des colonnes jointes comme dans l'exemple toboggan, (e.manager_id = m.employee_id) est facultative. Donc, mme sur e.manager_id = m.employee_id va fonctionner.

Oracle Database 11g: SQL Fundamentals I 6 - 213

Lesson Agenda
Types de jointures et sa syntaxe Jointure naturelle:
USING clause ON clause

Auto-jointure Nonequijoins OUTER join:


LEFT OUTER join RIGHT OUTER join FULL OUTER join

produit cartsien
Cross join

1 - 214

Copyright 2007, Oracle. All rights reserved.

Oracle Database 11g: SQL Fundamentals I 6 - 214

Nonequijoins

EMPLOYEES

JOB_GRADES

Table JOB_GRADES dfinit la plage LOWEST_SAL et HIGHEST_SAL de valeurs pour chaque GRADE_LEVEL. Par consquent, la colonne GRADE_LEVEL peut tre utilis pour attribuer des notes chaque employ.
Copyright 2007, Oracle. All rights reserved.

1 - 215

Nonequijoins Un nonequijoin est une condition de jointure contenant autre chose qu'un oprateur d'galit. La relation entre la table Employs et la table JOB_GRADES est un exemple d'un nonequijoin. La colonne SALAIRE dans la table EMPLOYEES se situe entre les valeurs dans les colonnes LOWEST_SAL et HIGHEST_SAL de la table JOB_GRADES. Ainsi, chaque employ peut tre class en fonction de leur salaire. La relation est obtenue en utilisant un oprateur autre que l'galit (=) oprateur.

Oracle Database 11g: SQL Fundamentals I 6 - 215

Rcuprer des enregistrements avec Nonequijoins


SELECT e.last_name, e.salary, j.grade_level FROM employees e JOIN job_grades j ON e.salary BETWEEN j.lowest_sal AND j.highest_sal;

1 - 216 Copyright 2007, Oracle. All rights reserved.

Rcuprer des enregistrements avec Nonequijoins L'exemple cre un diaporama nonequijoin d'valuer le niveau de salaire d'un employ. Le salaire doit tre comprise entre n'importe quelle paire de l'chelle des salaires faibles et levs. Il est important de noter que tous les employs apparatre exactement une fois quand cette requte est excute. Aucun employ ne se rpte dans la liste. Il ya deux raisons cela: Aucune des lignes de la table JOB_GRADES contiennent des notes qui se chevauchent. Autrement dit, la valeur du salaire d'un employ ne peut rsider que entre les bas salaires et les valeurs de rmunration levs de l'une des lignes de la table classe de salaire. Toutes les salaires des employs se trouvent dans les limites prvues par la table de classe d'emploi. Autrement dit, aucun employ gagne moins de la plus petite valeur contenue dans la colonne LOWEST_SAL ou suprieur la valeur la plus leve contenue dans la colonne HIGHEST_SAL. Note: D'autres conditions (telles que <= et> =) peut tre utilis, mais entre les deux est la plus simple. N'oubliez pas de prciser la faible valeur premire et la dernire valeur leve lors de l'utilisation de la condition BETWEEN. Le serveur Oracle traduit la condition BETWEEN une paire de conditions ET. Par consquent, en utilisant ENTRE n'a aucun avantage de performance, mais doit tre utilis uniquement pour la simplicit logique. Les alias de table a t spcifi dans l'exemple toboggan pour des raisons de performances, pas cause de l'ambigut possible.

Oracle Database 11g: SQL Fundamentals I 6 - 216

Lesson Agenda
Types de jointures et sa syntaxe Jointure naturelle:
USING clause ON clause

Auto-jointure Nonequijoins OUTER join:


LEFT OUTER join RIGHT OUTER join FULL OUTER join

produit cartsien
Cross join

1 - 217

Copyright 2007, Oracle. All rights reserved.

Oracle Database 11g: SQL Fundamentals I 6 - 217

Revenant Records avec Pas de correspondance directe avec des jointures externes
DEPARTMENTS EMPLOYEES

Il n'y a pas employs du service 190.

1 - 218

Copyright 2007, Oracle. All rights reserved.

Revenant Records avec Pas de correspondance directe avec des jointures externes Si une ligne ne satisfait pas une condition de jointure, la ligne n'apparat pas dans le rsultat de la requte. Par exemple, dans l'tat quijointure des employs et des tables DPARTEMENTS, dpartement ID 190 n'apparat pas car il n'y a pas que les employs ID de service enregistres dans la table EMPLOYEES. Par consquent, au lieu de voir 20 employs dans le jeu de rsultats, vous voyez 19 enregistrements. Pour revenir au dossier dpartement qui n'a pas de salaris, vous pouvez utiliser une jointure externe.

Oracle Database 11g: SQL Fundamentals I 6 - 218

INNER contre OUTER


Dans SQL: 1999, la jointure de deux tables qui retournent uniquement les lignes apparies est appel une jointure interne. Une jointure entre deux tables qui renvoie les rsultats de la jointure interne, ainsi que les lignes sans correspondance de la gauche (ou droite) table est appele gauche (ou droite) de jointure externe. Une jointure entre deux tables qui retourne les rsultats d'une jointure interne ainsi que les rsultats d'une jointure droite gauche et une jointure externe complte.

1 - 219

Copyright 2007, Oracle. All rights reserved.

INNER contre OUTER Jointure de tables avec la jointure naturelle, UTILISATION, ou sur les rsultats de clauses dans une jointure interne. Toutes les lignes sans correspondance ne sont pas affichs dans la sortie. Pour rtablir les lignes sans correspondance, vous pouvez utiliser une jointure externe. Une jointure externe renvoie toutes les lignes qui satisfont la condition de jointure et retourne galement une partie ou la totalit de ces lignes d'une table pour lequel aucune ligne de l'autre table de satisfaire la condition de jointure. Il existe trois types de jointures externes : LEFT OUTER RIGHT OUTER FULL OUTER

Oracle Database 11g: SQL Fundamentals I 6 - 219

LEFT OUTER JOIN

SELECT e.last_name, e.department_id, d.department_name FROM employees e LEFT OUTER JOIN departments d ON (e.department_id = d.department_id) ;

1 - 220

Copyright 2007, Oracle. All rights reserved.

LEFT OUTER JOIN Cette requte rcupre toutes les lignes dans la table EMPLOYES, qui est la table de gauche, mme s'il n'y a pas de correspondance dans la table DEPARTEMENTS.

Oracle Database 11g: SQL Fundamentals I 6 - 220

RIGHT OUTER JOIN

SELECT e.last_name, e.department_id, d.department_name FROM employees e RIGHT OUTER JOIN departments d ON (e.department_id = d.department_id) ;

1 - 221

Copyright 2007, Oracle. All rights reserved.

RIGHT OUTER JOIN Cette requte rcupre toutes les lignes de la table Departments, qui est la table de droite, mme s'il n'y a pas de correspondance dans la table EMPLOYEES.

Oracle Database 11g: SQL Fundamentals I 6 - 221

FULL OUTER JOIN

SELECT e.last_name, d.department_id, d.department_name FROM employees e FULL OUTER JOIN departments d ON (e.department_id = d.department_id) ;

1 - 222

Copyright 2007, Oracle. All rights reserved.

FULL OUTER JOIN Cette requte rcupre toutes les lignes dans la table EMPLOYES, mme s'il n'y a pas de correspondance dans la table Departments. Il rcupre galement toutes les lignes de la table Departments, mme s'il n'y a pas de correspondance dans la table EMPLOYEES.

Oracle Database 11g: SQL Fundamentals I 6 - 222

Lesson Agenda
Types de jointures et sa syntaxe Jointure naturelle:
USING clause ON clause

Auto-jointure Nonequijoins OUTER join:


LEFT OUTER join RIGHT OUTER join FULL OUTER join

produit cartsien
Cross join

1 - 223

Copyright 2007, Oracle. All rights reserved.

Oracle Database 11g: SQL Fundamentals I 6 - 223

Produits cartsiens
Un produit cartsien est form lorsque:
Une condition de jointure est omis Une condition de jointure est invalide Toutes les lignes de la premire table sont jointes toutes les lignes de la seconde table

Pour viter un produit cartsien, toujours inclure une condition de jointure valide.

1 - 224

Copyright 2007, Oracle. All rights reserved.

Produits cartsiens Quand une condition de jointure n'est pas valide ou supprim compltement, le rsultat est un produit cartsien, dans lequel toutes les combinaisons de lignes sont affiches. Toutes les lignes de la premire table sont jointes toutes les lignes de la seconde table. Un produit cartsien tend gnrer un grand nombre de lignes et le rsultat est rarement utile. Vous devriez donc toujours inclure une condition de jointure valide, sauf si vous avez un besoin spcifique de combiner toutes les lignes de toutes les tables. Cependant, les produits cartsiens sont utiles pour des tests lorsque vous avez besoin de gnrer un grand nombre de lignes pour simuler une quantit raisonnable de donnes.

Oracle Database 11g: SQL Fundamentals I 6 - 224

Gnration d'un produit cartsien


EMPLOYEES (20 rows) DEPARTMENTS (8 rows)

Cartesian product: 20 x 8 = 160 rows

1 - 225

Copyright 2007, Oracle. All rights reserved.

Gnration d'un produit cartsien Un produit cartsien est gnr si une condition de jointure est omis. L'exemple de la diapositive affiche le nom du dernier employ et le nom du service par les employs et les tables DPARTEMENTS. Parce qu'aucun condition de jointure est spcifie, toutes les lignes (20 lignes) de la table EMPLOYES sont joints avec toutes les lignes (8 lignes) de la table Departments, gnrant ainsi 160 lignes dans la sortie.

Oracle Database 11g: SQL Fundamentals I 6 - 225

Creation Cross Joins


Le CROSS JOIN clause donne le produit crois de deux tables. Il est galement appel un produit cartsien entre les deux tables.
SELECT last_name, department_name FROM employees CROSS JOIN departments ;

1 - 226

Copyright 2007, Oracle. All rights reserved.

Creation Cross Joins L'exemple de la diapositive donne un produit cartsien des tables Employees et Departments.

Oracle Database 11g: SQL Fundamentals I 6 - 226

Rsum
Dans cette leon, vous devriez avoir appris utiliser rejoint pour afficher les donnes de plusieurs tables en utilisant: Equijointures Nonequijoins Les jointures externes Autojointures Les jointures croises jointures naturelles FULL(recto ou recto verso) jointures externes

1 - 227

Copyright 2007, Oracle. All rights reserved.

rsum Il ya plusieurs faons de rejoindre les tables. Types de jointure Equijointures Nonequijoins Les jointures externes Autojointures Les jointures croises jointures naturelles FULL (recto ou recto verso) jointures externes Produits cartsiens Il en rsulte un produit cartsien dans l'affichage de toutes les combinaisons de lignes. Cela se fait soit en omettant la clause WHERE ou en spcifiant la clause CROSS JOIN. Les alias de table Les alias de table pour acclrer l'accs base de donnes. Les alias de table peut aider garder le code SQL plus petit par la mmoire de conservation. Les alias de table sont parfois obligatoire pour viter toute ambigut colonne.

Oracle Database 11g: SQL Fundamentals I 6 - 227

Pratique 6
Cette pratique couvre les sujets suivants: Jointure de tables l'aide d'un quijointure Excution externe et auto-jointures Ajout de conditions

1 - 228

Copyright 2007, Oracle. All rights reserved.

Pratique 6: Vue d'ensemble Cette pratique a pour but de vous donner une exprience dans l'extraction de donnes partir de plusieurs tables en utilisant le SQL :1999-conforme jointures.

Oracle Database 11g: SQL Fundamentals I 6 - 228

pratique 6 1. crire une requte pour le service des ressources humaines pour produire les adresses de tous les dpartements. Utilisez les emplacements et les tableaux les pays. Afficher l'ID de site, adresse, ville, tat ou province, et le pays dans la sortie. Utilisez une jointure naturelle pour produire les rsultats.

2. Le dpartement RH a besoin d'un rapport de tous les employs. crire une requte pour afficher le nom de famille, numro de dpartement, et le nom de service pour tous les employs.

Oracle Database 11g: SQL Fundamentals I 6 - 229

Pratique 6 (suite) 3. Le dpartement RH a besoin d'un rapport d'employs Toronto. Afficher le nom de famille, le travail, le numro de dpartement et le nom du service pour tous les employs qui travaillent Toronto.?

4. Crer un rapport pour afficher le nom des employs et dernier numro de l'employ ainsi que le nom de famille de leur gestionnaire et le numro de gestionnaire. Marquez l'employ colonnes, Emp #, gestionnaire, et Mgr #, respectivement. Sauvegardez votre instruction SQL comme lab_06_04.sql. Excutez la requte.

Oracle Database 11g: SQL Fundamentals I 6 - 230

Pratique 6 (suite) 5. Modifier lab_06_04.sql pour afficher tous les employs, y compris le king, qui n'a pas de gestionnaire. Ordonner les rsultats par le numro d'employ. Sauvegardez votre instruction SQL comme lab_06_05.sql. Excutez la requte en lab_06_05.sql.

6. Crer un rapport pour le dpartement des ressources humaines qui affiche des salaris noms de famille, les numros de dpartement, et tous les employs qui travaillent dans le mme service titre d'employ donn. Donnez chaque colonne une tiquette approprie. Enregistrez le script dans un fichier nomm lab_06_06.sql.

Oracle Database 11g: SQL Fundamentals I 6 - 231

Pratique 6 (suite) 7. Le dpartement RH a besoin d'un rapport sur les niveaux d'emploi et de salaires. Pour vous familiariser avec le tableau JOB_GRADES, montrons tout d'abord la structure de la table JOB_GRADES. Ensuite, crez une requte qui affiche le nom, le poste, le nom du service, le salaire, et la qualit pour tous les employs.

Oracle Database 11g: SQL Fundamentals I 6 - 232

Pratique 6 (suite) Si vous voulez un dfi supplmentaire, faites les exercices suivants: 8. Le dpartement des ressources humaines veut dterminer les noms de tous les employs qui ont t embauchs aprs Davies. Crer une requte pour afficher le nom et la date d'embauche de tout salari embauch aprs que l'employ Davies.

9. Le dpartement RH a besoin de trouver les noms et les dates de location de tous les employs qui ont t embauchs avant leurs dirigeants, ainsi que les noms de leurs dirigeants et engager les dates. Enregistrez le script dans un fichier nomm lab_06_09.sql.

Oracle Database 11g: SQL Fundamentals I 6 - 233

Utilisation des sous-requtes pour rsoudre les requtes

1 - 235

Copyright 2007, Oracle. All rights reserved.

Objectifs
Aprs avoir termin cette leon, vous devriez tre en mesure de faire ce qui suit: dfinir les sous-requtes Dcrire les types de problmes que les sous-requtes peuvent rsoudre Dressez la liste des types de sous-requtes Ecrire sous-requtes une range et multi-lignes

1 - 236

Copyright 2007, Oracle. All rights reserved.

objectifs Dans ce chapitre, vous renseigner sur les fonctionnalits les plus avances de l'instruction SELECT. Vous pouvez crire des sous-requtes dans la clause WHERE d'une autre instruction SQL pour obtenir des valeurs bases sur une valeur inconnue conditionnelle. Cette leon couvre galement une range de sous-requtes et plusieurs lignes sont sous-requtes.

Oracle Database 11g: SQL Fundamentals I 7 - 236

Lesson Agenda
Sous-requte: Types, la syntaxe et les lignes directrices une range de sous-requtes:
Les fonctions de groupe dans une sous-requte La clause HAVING avec les sous-requtes

Plusieurs ranges de sous-requtes


Utilisez l'oprateur ALL ou ANY

Valeurs NULL dans une sous-requte

1 - 237

Copyright 2007, Oracle. All rights reserved.

Oracle Database 11g: SQL Fundamentals I 7 - 237

En utilisant une sous-requte pour rsoudre un problme


Qui a un salaire suprieur Abel?
Main query: Quels employs ont des salaires plus que le salaire d'Abel? Subquery:

Quel est le salaire d'Abel?

1 - 238

Copyright 2007, Oracle. All rights reserved.

En utilisant une sous-requte pour rsoudre un problme Supposons que vous vouliez crire une requte pour savoir qui gagne un salaire plus que le salaire d'Abel. Pour rsoudre ce problme, vous avez besoin de deux requtes: l'une pour dterminer la quantit d'Abel gagne, et une deuxime requte pour trouver qui gagne plus que ce montant. Vous pouvez rsoudre ce problme en combinant les deux requtes, en plaant une requte l'intrieur de l'autre requte. La requte interne (ou sous-requte) retourne une valeur qui est utilise par la requte externe (ou requte principale). En utilisant une sous-requte est quivalent effectuer deux requtes successives et en utilisant le rsultat de la requte en tant que premire valeur de la recherche dans la seconde requte.

Oracle Database 11g: SQL Fundamentals I 7 - 238

Syntax sous-requte
SELECT FROM WHERE select_list table expr operator (SELECT FROM

select_list table);

La sous-requte (requte interne) s'excute avant que la requte principale (requte externe). Le rsultat de la sous-requte est utilise par la requte principale.

1 - 239

Copyright 2007, Oracle. All rights reserved.

Syntax sous-requte Une sous-requte est une instruction SELECT qui est incorpor dans la clause d'une autre instruction SELECT. Vous pouvez crer des instructions puissantes sur des ides simples l'aide de sous-requtes. Ils peuvent tre trs utiles lorsque vous devez slectionner des lignes dans une table avec une condition qui dpend des donnes dans la table elle-mme. Vous pouvez placer la sous-requte dans un certain nombre de clauses SQL, y compris ce qui suit: clause WHERE la clause HAVING clause FROM Dans la syntaxe: oprateur de comparaison inclut une condition telle que>, =, ou EN Remarque: Les conditions de comparaison se divisent en deux classes: une range oprateurs (>, =,> =, <, <>, <=) et plusieurs lignes sont les oprateurs (IN, ANY, ALL). La sous-requte est souvent dsign comme une instruction SELECT imbrique SELECT, sousSELECT ou intrieure. La sous-requte s'excute gnralement en premier, et sa sortie est utilise pour terminer la condition de requte pour le principal (ou externe) de la requte..

Oracle Database 11g: SQL Fundamentals I 7 - 239

Utilisation de sous requte

SELECT last_name, salary 11000 FROM employees WHERE salary > (SELECT salary FROM employees WHERE last_name = 'Abel');

1 - 240

Copyright 2007, Oracle. All rights reserved.

En utilisant une sous-requte Dans la diapositive, la requte interne dtermine le salaire de l'employ Abel. La requte externe prend le rsultat de la requte interne et utilise ce rsultat pour afficher tous les employs qui gagnent plus de salari Abel.

Oracle Database 11g: SQL Fundamentals I 7 - 240

Directives dutilisation de sous requte


Joignez-requtes entre parenthses. Placez les sous-requtes sur le ct droit de la condition de comparaison pour plus de lisibilit (Toutefois, la sousrequte peut apparatre de chaque ct de l'oprateur de comparaison.). Utilisez une range oprateurs avec une range de sousrequtes et plusieurs lignes sont des oprateurs avec plusieurs lignes sont sous-requtes.

1 - 241

Copyright 2007, Oracle. All rights reserved.

Directives pour l'utilisation des sous-requtes Une sous-requte doit tre mise entre parenthses. Placez la sous-requte sur le ct droit de la condition de comparaison pour une meilleure lisibilit. Toutefois, la sous-requte peut apparatre de chaque ct de l'oprateur de comparaison. Deux classes de conditions de comparaison sont utiliss dans les sous-requtes: une range oprateurs et multi-oprateurs ligne?.

Oracle Database 11g: SQL Fundamentals I 7 - 241

Types de sous requte


Single-row subquery
Main query Subquery returns ST_CLERK

Multiple-row subquery
Main query Subquery returns ST_CLERK SA_MAN

1 - 242

Copyright 2007, Oracle. All rights reserved.

Types de sous-requtes Single-row subqueries : les requtes qui retournent une seule ligne de l'instruction SELECT interne Multiple-row subqueries : les requtes qui retournent plusieurs lignes de l'instruction SELECT interne Remarque: Il existe galement plusieurs colonnes sous-requtes, qui sont des requtes qui retournent plusieurs colonnes de l'instruction SELECT interne. Elles sont couvertes dans la base de donnes Oracle 11g: SQL Fundamentals II cours .

Oracle Database 11g: SQL Fundamentals I 7 - 242

Lesson Agenda
Sous-requte: Types, la syntaxe et les lignes directrices une range de sous-requtes:
Les fonctions de groupe dans une sous-requte La clause HAVING avec les sous-requtes

Plusieurs ranges de sous-requtes


Utilisez l'oprateur ALL ou ANY

Valeurs NULL dans une sous-requte

1 - 243

Copyright 2007, Oracle. All rights reserved.

Oracle Database 11g: SQL Fundamentals I 7 - 243

Single-Row Subqueries
Renvoyer qu'une seule ligne Utilisez les oprateurs de comparaison une range
Operator = > >= < <= <> Meaning Equal to Greater than Greater than or equal to Less than Less than or equal to Not equal to

1 - 244

Copyright 2007, Oracle. All rights reserved.

Single-Row sous-requtes Une sous-requte simple range est celle qui renvoie une ligne de l'instruction SELECT interne. Ce type de sous-requte utilise un oprateur unique range. La diapositive donne une liste des oprateurs une range. exemple: Afficher les salaris dont l'emploi identification est le mme que celui de l'employ 141 :
SELECT last_name, job_id FROM employees WHERE job_id = (SELECT job_id FROM employees WHERE employee_id = 141);

Oracle Database 11g: SQL Fundamentals I 7 - 244

Execution Single-Row Subqueries

SELECT last_name, job_id, salary FROM employees SA_REP WHERE job_id = (SELECT job_id FROM employees WHERE last_name = Taylor) AND salary > 8600 (SELECT salary FROM employees WHERE last_name = Taylor);

1 - 245

Copyright 2007, Oracle. All rights reserved.

Excution simple range sous-requtes Une instruction SELECT peut tre considr comme un bloc de requte. L'exemple de la diapositive affiche employs qui font le mme travail que Taylor, mais qui gagnent un salaire plus lev que lui. L'exemple se compose de trois blocs de requte: la requte externe et deux requtes internes. Les blocs de requtes internes sont excuts en premier, la production de la requte les rsultats SA_REP et 8600, respectivement. Le bloc de requte externe est ensuite traite et utilise les valeurs qui ont t retourns par les requtes internes pour complter ses conditions de recherche. Les deux requtes internes retournent des valeurs uniques (SA_REP et 8600, respectivement), alors cette instruction SQL est appele sous-requte une seule ligne. Remarque: Les requtes internes et externes peuvent obtenir des donnes de diffrentes tables.

Oracle Database 11g: SQL Fundamentals I 7 - 245

Utilisation des fonctions du Groupe dans une sous-requte


SELECT last_name, job_id, salary 2500 FROM employees WHERE salary = (SELECT MIN(salary) FROM employees);

1 - 246

Copyright 2007, Oracle. All rights reserved.

Utilisation des fonctions du Groupe dans une sous-requte Vous pouvez afficher les donnes d'une requte principale en utilisant une fonction de groupe dans une sous-requte pour retourner une seule ligne. La sous-requte est entre parenthses et est plac aprs la condition de comparaison. L'exemple de la diapositive affiche le nom du dernier employ, ID du travail et le salaire de tous les employs dont le salaire est gal au salaire minimum. La fonction de groupe MIN renvoie une valeur unique (2500) la requte externe.

Oracle Database 11g: SQL Fundamentals I 7 - 246

La clause HAVING avec des sous-requtes


Le serveur Oracle excute les sous-requtes premier. Le serveur Oracle renvoie les rsultats dans la clause HAVING de la requte principale.
SELECT FROM GROUP BY HAVING department_id, MIN(salary) employees department_id 2500 MIN(salary) > (SELECT MIN(salary) FROM employees WHERE department_id = 50);

1 - 247

Copyright 2007, Oracle. All rights reserved.

La clause HAVING avec des sous-requtes Vous pouvez utiliser des sous-requtes non seulement dans la clause WHERE, mais aussi dans la clause HAVING. Le serveur Oracle excute la sous-requte et les rsultats sont renvoys dans la clause HAVING de la requte principale. L'instruction SQL dans la diapositive affiche tous les ministres qui ont un salaire minimum plus lev que celui du dpartement 50. exemple: Trouver un emploi avec le plus faible salaire moyen.
SELECT FROM GROUP BY HAVING job_id, AVG(salary) employees job_id AVG(salary) = (SELECT MIN(AVG(salary)) FROM employees GROUP BY job_id);

Oracle Database 11g: SQL Fundamentals I 7 - 247

Quel est le problme avec cette affirmation?

SELECT employee_id, last_name FROM employees WHERE salary = (SELECT MIN(salary) FROM employees GROUP BY department_id); Single-row oprateur multilignes sous-requte

1 - 248

Copyright 2007, Oracle. All rights reserved.

Quel est le problme avec cette affirmation? Une erreur courante avec les sous-requtes se produit lorsque plus d'une ligne est retourne pour une sous-requte une seule ligne. Dans l'instruction SQL dans la diapositive, la sous-requte contient une clause GROUP BY, ce qui implique que la sous-requte retourne plusieurs lignes, une pour chaque groupe qu'il trouve. Dans ce cas, les rsultats de la sous-requte sont 4400, 6000, 2500, 4200, 7000, 17000, et 8300. La requte externe prend ces rsultats et les utilise dans sa clause WHERE. La clause WHERE contient un gal (=) oprateur, un oprateur de comparaison simple range qui attend une seule valeur. L'oprateur = peut pas accepter plus d'une valeur partir de la sous-requte et, par consquent, gnre l'erreur. Pour corriger cette erreur, modifiez l'oprateur = IN.

Oracle Database 11g: SQL Fundamentals I 7 - 248

Pas de lignes retournes par la requte interne

SELECT last_name, job_id FROM employees WHERE job_id = (SELECT job_id FROM employees WHERE last_name = 'Haas');

Sous-requte ne renvoie aucune ligne car il n'y a aucun employ nomm "Haas".

1 - 249

Copyright 2007, Oracle. All rights reserved.

Pas de lignes retournes par la requte interne Un problme courant avec les sous-requtes se produit lorsque aucune ligne n'est renvoye par la requte interne. Dans l'instruction SQL dans la diapositive, la sous-requte contient une clause WHERE. Vraisemblablement, l'intention est de trouver l'employ dont le nom est Haas. L'affirmation est correcte, mais slectionne aucune ligne lorsqu'il est excut. Parce que, il n'ya pas employ nomm Haas. Ainsi, la sous-requte ne renvoie aucune ligne. La requte externe prend les rsultats de la sous-requte (null) et utilise ces rsultats dans sa clause WHERE. La requte externe ne trouve pas employ avec un ID de travail gal null, et retourne donc pas de lignes. Si un travail existait avec la valeur null, la ligne n'est pas retourn parce que la comparaison de deux valeurs NULL donne une valeur nulle, par consquent, la condition WHERE n'est pas vrai.

Oracle Database 11g: SQL Fundamentals I 7 - 249

Lesson Agenda
Sous-requte: Types, la syntaxe et les lignes directrices une range de sous-requtes:
Les fonctions de groupe dans une sous-requte La clause HAVING avec les sous-requtes

Plusieurs ranges de sous-requtes


Utilisez l'oprateur ALL ou ANY

Valeurs NULL dans une sous-requte

1 - 250

Copyright 2007, Oracle. All rights reserved.

Oracle Database 11g: SQL Fundamentals I 7 - 250

Multiple-Row Subqueries
Retour plus d'une ligne Utilisez les oprateurs de comparaison multiple de lignes
Operator IN ANY Meaning Equal to any member in the list Must be preceded by =, !=, >, <, <=, >=. Compares a value to each value in a list or returned by a query. Evaluates to FALSE if the query returns no rows. ALL Must be preceded by =, !=, >, <, <=, >=. Compares a value to every value in a list or returned by a query. Evaluates to TRUE if the query returns no rows.

1 - 251

Copyright 2007, Oracle. All rights reserved.

Multiple-Row sous-requtes Celles qui renvoient plusieurs lignes sont appeles lignes multiples sous-requtes. Vous utilisez un oprateur multi-lignes, au lieu d'un seul oprateur une range, avec une sousrequte multi-lignes. L'oprateur multi-lignes s'attend une ou plusieurs valeurs :
SELECT last_name, salary, department_id FROM employees WHERE salary IN (SELECT MIN(salary) FROM employees GROUP BY department_id);

exemple: Trouver les employs qui gagnent le mme salaire que le salaire minimum pour chaque dpartement. La requte interne est excute en premier, la production d'un rsultat de requte. Le bloc de requte principale est ensuite traite et utilise les valeurs qui ont t retourns par la requte interne pour complter sa condition de recherche. En fait, la requte principale apparat sur le serveur Oracle comme suit :
SELECT FROM WHERE 8600, last_name, salary, department_id employees salary IN (2500, 4200, 4400, 6000, 7000, 8300, 17000); Oracle Database 11g: SQL Fundamentals I 7 - 251

Utilisation de l'oprateur ANY dans plusieurs lignes de sous-requtes


SELECT employee_id, last_name, job_id, salary FROM employees 9000, 6000, 4200 WHERE salary < ANY (SELECT salary FROM employees WHERE job_id = 'IT_PROG') AND job_id <> 'IT_PROG';

1 - 252

Copyright 2007, Oracle. All rights reserved.

Utilisation de l'oprateur ANY dans plusieurs lignes de sous-requtes L'oprateur ANY (et son synonyme, l'oprateur SOME) compare une valeur chaque valeur renvoye par une sous-requte. L'exemple diaporama affiche les employs qui ne sont pas des programmeurs informatiques et dont le salaire est infrieur celui de n'importe quel programmeur informatique. Le salaire maximum que le programmeur gagne est 9000 $. <TOUTE signifie moins que le maximum. > ANY signifie plus que le minimum. = ANY est quivalent IN.

Oracle Database 11g: SQL Fundamentals I 7 - 252

Utilisation de l'oprateur ALL dans plusieurs lignes de sous-requtes


SELECT employee_id, last_name, job_id, salary FROM employees 9000, 6000, 4200 WHERE salary < ALL (SELECT salary FROM employees WHERE job_id = 'IT_PROG') AND job_id <> 'IT_PROG';

1 - 253

Copyright 2007, Oracle. All rights reserved.

Utilisation de l'oprateur ALL dans plusieurs lignes sous-requtes L'oprateur ALL compare une valeur chaque valeur renvoye par une sous-requte. L'exemple de la diapositive affiche les employs dont le salaire est infrieur au salaire de tous les employs avec un ID de IT_PROG et dont le travail n'est pas IT_PROG. > ALL signifie plus que le maximum et <ALL signifie moins que le minimum. L'oprateur NOT peut tre utilis avec IN, ANY, et tous les oprateurs.

Oracle Database 11g: SQL Fundamentals I 7 - 253

Lesson Agenda
Sous-requte: Types, la syntaxe et les lignes directrices une range de sous-requtes:
Les fonctions de groupe dans une sous-requte La clause HAVING avec les sous-requtes

Plusieurs ranges de sous-requtes


Utilisez l'oprateur ALL ou ANY

Valeurs NULL dans une sous-requte

1 - 254

Copyright 2007, Oracle. All rights reserved.

Oracle Database 11g: SQL Fundamentals I 7 - 254

Les valeurs NULL dans une sous-requte

SELECT emp.last_name FROM employees emp WHERE emp.employee_id NOT IN (SELECT mgr.manager_id FROM employees mgr);

1 - 255

Copyright 2007, Oracle. All rights reserved.

Les valeurs NULL dans une sous-requte L'instruction SQL dans la diapositive tente d'afficher tous les employs qui n'ont pas de subordonns. Logiquement, cette instruction SQL aurait d retourner 12 rangs. Toutefois, l'instruction SQL ne retourne aucun rsultat. L'une des valeurs retournes par la requte interne est une valeur nulle, et, par consquent, la requte entire retourne aucune ligne. La raison en est que toutes les conditions qui permettent de comparer un rsultat valeur null dans une nulle. Ainsi, lorsque les valeurs nulles sont susceptibles de faire partie de l'ensemble des rsultats d'une sous-requte, ne pas utiliser le PAS EN oprateur. L'oprateur NOT IN est quivalent <> ALL. Notez que la valeur nulle dans le cadre de l'ensemble des rsultats d'une sous-requte n'est pas un problme si vous utilisez l'oprateur IN. L'oprateur IN est quivalent = ANY. Par exemple, pour afficher les employs qui ont des subordonns, utilisez l'instruction SQL suivante :
SELECT emp.last_name FROM employees emp WHERE emp.employee_id IN (SELECT mgr.manager_id FROM employees mgr);

Oracle Database 11g: SQL Fundamentals I 7 - 255

Les valeurs NULL dans une sous-requte (suite) Alternativement, une clause WHERE peut tre inclus dans la sous-requte pour afficher tous les employs qui n'ont pas de subordonns :
SELECT last_name FROM employees WHERE employee_id NOT IN (SELECT manager_id FROM employees WHERE manager_id IS NOT NULL);

Oracle Database 11g: SQL Fundamentals I 7 - 256

Rsum
Dans cette leon, vous devriez avoir appris :
Identifier quand une sous-requte peut aider rsoudre un problme Ecrire sous-requtes lorsqu'une requte est fonde sur des valeurs inconnues
SELECT FROM WHERE select_list table expr operator (SELECT select_list FROM table);

1 - 257

Copyright 2007, Oracle. All rights reserved.

rsum Dans cette leon, vous devriez avoir appris utiliser des sous-requtes. Une sous-requte est une instruction SELECT qui est incorpor dans la clause d'une autre instruction SQL. Les sous-requtes sont utiles quand une requte est base sur un critre de recherche avec des inconnus valeurs intermdiaires. Sous-requtes ont les caractristiques suivantes: Peut passer une ligne de donnes une dclaration principal qui contient un oprateur unique range, comme =, <>,>,> =, <, ou <= Peut passer plusieurs lignes de donnes un tat principal qui contient un oprateur multiligne, comme dans Sont traites en premier par le serveur Oracle, aprs quoi la clause WHERE ou HAVING utilise les rsultats Peut contenir des fonctions de groupe

Oracle Database 11g: SQL Fundamentals I 7 - 257

Pratique 7
Cette pratique couvre les sujets suivants: Cration de sous-requtes pour interroger les valeurs bases sur des critres inconnus Utilisation des sous-requtes pour trouver les valeurs qui existent dans un ensemble de donnes et non dans un autre

1 - 258

Copyright 2007, Oracle. All rights reserved.

Pratique 7: Vue d'ensemble Dans cette pratique, vous crivez des requtes complexes en utilisant des instructions SELECT imbriques. Pour des questions pratiques, vous pouvez crer la requte interne d'abord. Assurez-vous qu'il fonctionne et produit les donnes que vous prvoyez avant de coder la requte externe.

Oracle Database 11g: SQL Fundamentals I 7 - 258

pratique 7 1. Le dpartement RH a besoin d'une requte qui demande l'utilisateur un nom d'employ dernier. La requte affiche le nom et la date d'embauche d'un employ dans le mme dpartement que le salari dont le nom qu'ils fournissent ( l'exclusion des employs). Par exemple, si l'utilisateur entre Zlotkey, rechercher tous les employs qui travaillent avec Zlotkey (hors Zlotkey).

2. Crer un rapport qui affiche le numro de l'employ, le nom et le salaire de tous les employs qui gagnent plus que le salaire moyen. Trier les rsultats par ordre de salaire croissant.

Oracle Database 11g: SQL Fundamentals I 7 - 259

Pratique 7 (suite) 3. Ecrire une requte qui affiche le numro d'employ et le nom de tous les employs qui travaillent dans un dpartement un autre employ dont le nom contient la lettre u. Sauvegardez votre instruction SQL comme lab_07_03.sql. Excutez votre requte.

4. Le dpartement RH a besoin d'un rapport qui affiche le nom de famille, numro de dpartement, et l'ID de travail de tous les employs dont le dpartement lieu ID est 1700.?

Modifiez la requte de sorte que l'utilisateur est invit saisir un numro d'emplacement. Sauvegarder cette dans un fichier nomm lab_07_04.sql. 5. Crer un rapport pour les RH qui affiche le nom et le salaire de tout salari qui se prsente au King.

Oracle Database 11g: SQL Fundamentals I 7 - 260

Pratique 7 (suite) 6. Crer un rapport pour les RH qui affiche le numro du dpartement, le nom et l'ID de tche pour chaque employ dans le dpartement excutif.?

Si vous avez le temps, l'exercice suivant: 7. Modifiez la requte en lab_07_03.sql pour afficher le numro d'employ, nom de famille, et le salaire de tous les employs qui gagnent plus que le salaire moyen, et qui travaillent dans un dpartement un autre employ dont le nom contient un "u". Renregistrer lab_07_03. sql que lab_07_07.sql. Excutez l'instruction dans lab_07_07.sql.

Oracle Database 11g: SQL Fundamentals I 7 - 261

Utilisation des oprateurs

1 - 263

Copyright 2007, Oracle. All rights reserved.

Objectifs
Aprs avoir termin cette leon, vous devriez tre en mesure de faire ce qui suit: Dcrire les oprateurs ensemblistes Utilisez un oprateur tabli de combiner plusieurs requtes en une seule requte Contrler l'ordre des lignes renvoyes

1 - 264

Copyright 2007, Oracle. All rights reserved.

objectifs Dans cette leon, vous allez apprendre crire des requtes en utilisant les oprateurs ensemblistes.

Oracle Database 11g: SQL Fundamentals I 8 - 264

Lesson Agenda
Les oprateurs tablis: types et les lignes directrices Les tableaux utiliss dans cette leon UNION et UNION ALL oprateur oprateur INTERSECT oprateur MINUS L'appariement des instructions SELECT Utilisation de la clause ORDER BY dans des oprations ensemblistes

1 - 265

Copyright 2007, Oracle. All rights reserved.

Oracle Database 11g: SQL Fundamentals I 8 - 265

Operateurs
A B A B

UNION/UNION ALL

INTERSECT

MINUS

1 - 266

Copyright 2007, Oracle. All rights reserved.

Rglez les oprateurs Oprateurs ensemblistes combiner les rsultats de deux requtes ou plus de composants en un seul rsultat. Les requtes contenant des oprateurs ensemblistes sont appeles requtes composes.
Operator UNION UNION ALL INTERSECT MINUS Returns Rows from both queries after eliminating duplications Rows from both queries, including all duplications Rows that are common to both queries Rows in the first query that are not present in the second query

Tous les oprateurs ensemblistes ont la mme priorit. Si une instruction SQL contient plusieurs oprateurs ensemblistes, le serveur Oracle les value de gauche droite (en haut) droite (en bas)-si pas de parenthses spcifier explicitement un autre ordre. Vous devez utiliser des parenthses pour spcifier l'ordre d'valuation explicite dans les requtes qui utilisent l'oprateur INTERSECT avec d'autres oprateurs ensemblistes.

Oracle Database 11g: SQL Fundamentals I 8 - 266

tablir des lignes directrices oprateur


Les expressions dans les listes SELECT doivent correspondre en nombre. Le type de donnes de chaque colonne de la seconde requte doit correspondre au type de donnes de la colonne correspondant la premire requte. Parenthses peuvent tre utilises pour modifier la squence d'excution. Clause ORDER BY ne peut apparatre que tout la fin de l'instruction.

1 - 267

Copyright 2007, Oracle. All rights reserved.

tablir des lignes directrices oprateur Les expressions dans les listes SELECT des requtes doit correspondre au type de numro et de donnes. Les requtes qui utilisent UNION, UNION ALL, INTERSECT et MINUS oprateurs dans leur clause WHERE doit avoir le mme type de donnes nombre et de colonnes dans leur liste SELECT. Le type de donnes des colonnes dans la liste des requtes SELECT dans la requte compos peut ne pas tre exactement les mmes. La colonne de la seconde requte doit tre dans le groupe mme type de donnes (par exemple, numrique ou caractre) que la colonne correspondante dans la premire requte. Oprateurs ensemblistes peuvent tre utiliss dans les sous-requtes. Vous devez utiliser des parenthses pour spcifier l'ordre d'valuation dans les requtes qui utilisent l'oprateur INTERSECT avec d'autres oprateurs ensemblistes. Cela garantit la conformit avec les nouvelles normes SQL qui donneront l'oprateur INTERSECT plus grande priorit que les autres oprateurs ensemblistes.

Oracle Database 11g: SQL Fundamentals I 8 - 267

Le serveur Oracle et Set oprateurs


Les lignes dupliques sont automatiquement limins, sauf dans UNION ALL. Les noms de colonnes de la premire requte apparaissent dans le rsultat. La sortie est trie dans l'ordre croissant par dfaut, sauf dans UNION ALL.

1 - 268

Copyright 2007, Oracle. All rights reserved.

Le serveur Oracle et Set oprateurs


Lorsqu'une requte utilise des oprateurs tablis, le serveur Oracle limine les lignes dupliques automatiquement sauf dans le cas de l'oprateur UNION ALL. Les noms de colonnes dans la sortie sont dtermins par la liste des colonnes dans la premire instruction SELECT. Par dfaut, la sortie est trie dans l'ordre croissant de la premire colonne de la clause SELECT. Les expressions correspondantes dans les listes SELECT des requtes composants d'une requte doivent correspondre compos de type de numro et de donnes. Si les requtes de composants slectionner des donnes de caractres, le type de donnes des valeurs de retour est dtermin comme suit: Si les deux requtes slectionner des valeurs de type de donnes CHAR, de longueur gale, les valeurs retournes sont le type de donnes CHAR de cette longueur. Si les requtes slectionner des valeurs de type CHAR avec des longueurs diffrentes, la valeur retourne est VARCHAR2 avec la longueur de la plus grande valeur CHAR. Si l'une ou l'autre des requtes slectionner des valeurs de type de donnes VARCHAR2, puis les valeurs retournes sont le type de donnes VARCHAR2. Si les requtes de composants slectionner des donnes numriques, puis le type de donnes des valeurs de retour est dtermin par la priorit numrique. Si toutes les requtes slectionner des valeurs de type NUMBER, puis les valeurs retournes sont le type de donnes NUMBER. Dans les requtes en utilisant les oprateurs ensemblistes, le serveur Oracle n'effectue pas de conversion implicite entre les groupes de type de donnes. Par consquent, si les expressions correspondantes de requtes composants rsoudre la fois les donnes de caractres et de donnes numriques, le serveur Oracle retourne une erreur.

Oracle Database 11g: SQL Fundamentals I 8 - 268

Lesson Agenda
Les oprateurs tablis: types et les lignes directrices Les tableaux utiliss dans cette leon UNION et UNION ALL oprateur oprateur INTERSECT oprateur MINUS L'appariement des instructions SELECT Utilisation de la clause ORDER BY dans des oprations ensemblistes

1 - 269

Copyright 2007, Oracle. All rights reserved.

Oracle Database 11g: SQL Fundamentals I 8 - 269

Tables utilises dans cette leon


Les tables utilises dans cette leon sont les suivants: EMPLOYEES: Fournit des dtails concernant tous les employs actuels JOB_HISTORY: Enregistre les dtails de la date de dbut et date de fin de l'emploi prcdent et le numro d'identification d'emplois et service lorsqu'un employ commute emplois

1 - 270

Copyright 2007, Oracle. All rights reserved.

Tables utilises dans cette leon Deux tables sont utilises dans cette leon. Ils sont la table Employs et la table JOB_HISTORY. Vous tes dj familier avec la table EMPLOYEES qui stocke les dtails des employs, comme un numro d'identification unique, l'adresse lectronique, l'identification emploi (comme ST_CLERK, SA_REP, et ainsi de suite), le salaire, gestionnaire et ainsi de suite. Certains des employs ont t avec la compagnie pendant une longue priode et se sont tourns vers des emplois diffrents. Ceci est contrle l'aide de la table JOB_HISTORY. Quand un employ passe emplois, les dtails de la date de dbut et date de fin de l'emploi prcdent, le job_id (comme ST_CLERK, SA_REP, et ainsi de suite), et le ministre sont consigns dans le tableau JOB_HISTORY. La structure et les donnes des employs et des tables job_history sont prsents dans les pages suivantes.

Oracle Database 11g: SQL Fundamentals I 8 - 270

Tables utilises dans cette leon (suite) Il ya eu des cas dans la socit, des personnes qui ont occup le mme poste plus d'une fois au cours de leur mandat au sein de l'entreprise. Par exemple, considrons l'employ, Taylor, qui a rejoint la socit le 24-MAR-1998. Taylor a occup le SA_REP titre d'emploi pour la priode 24-MAR-98 au 31-DEC-98 et le SA_MAN titre d'emploi pour la priode 01JAN-99 au 31-DEC-99. Taylor s'est rinstalle dans le titre du poste de SA_REP, qui est son titre d'emploi actuel.
DESCRIBE employees

Oracle Database 11g: SQL Fundamentals I 8 - 271

Tables utilises dans cette leon (suite)


SELECT employee_id, last_name, job_id, hire_date, department_id FROM employees;

DESCRIBE job_history

Oracle Database 11g: SQL Fundamentals I 8 - 272

Tables utilises dans cette leon (suite)


SELECT * FROM job_history;

Oracle Database 11g: SQL Fundamentals I 8 - 273

Lesson Agenda
Les oprateurs tablis: types et les lignes directrices Les tableaux utiliss dans cette leon UNION et UNION ALL oprateur oprateur INTERSECT oprateur MINUS L'appariement des instructions SELECT Utilisation de la clause ORDER BY dans des oprations ensemblistes

1 - 274

Copyright 2007, Oracle. All rights reserved.

Oracle Database 11g: SQL Fundamentals I 8 - 274

Operateur UNION

L'oprateur UNION renvoie des lignes de deux requtes aprs avoir limin les doublons.

1 - 275

Copyright 2007, Oracle. All rights reserved.

oprateur UNION L'oprateur UNION renvoie toutes les lignes qui sont slectionns soit par requte. Utilisez l'oprateur UNION pour renvoyer toutes les lignes de plusieurs tables et d'liminer les doublons. directives Le nombre de colonnes tant choisis doivent tre les mmes. Les types de donnes des colonnes tant slectionns doivent tre dans le groupe mme type de donnes (par exemple, numrique ou caractre). Les noms des colonnes doivent pas tre identiques. UNION fonctionne sur toutes les colonnes tant choisies. Les valeurs NULL ne sont pas ignors lors de la vrification des doublons. Par dfaut, la sortie est trie dans l'ordre croissant des colonnes de la clause SELECT.

Oracle Database 11g: SQL Fundamentals I 8 - 275

Utilisation de l'oprateur UNION


Afficher les dtails sur l'emploi actuel et prcdent de tous les employs. Afficher chaque employ qu'une seule fois.
SELECT FROM UNION SELECT FROM employee_id, job_id employees employee_id, job_id job_history;


1 - 276 Copyright 2007, Oracle. All rights reserved.

Utilisation de l'oprateur UNION L'oprateur UNION limine les doublons. Si les dossiers qui se produisent dans les employs et les tables job_history sont identiques, les enregistrements sont affichs qu'une seule fois. Observez la sortie indique sur la diapositive que le dossier de l'employ avec les 200 employe_id apparat deux fois parce que le JOB_ID est diffrente dans chaque range. Prenons l'exemple suivant :
SELECT FROM UNION SELECT FROM employee_id, job_id, department_id employees employee_id, job_id, department_id job_history;


Oracle Database 11g: SQL Fundamentals I 8 - 276

Utilisation de l'oprateur UNION (suite) Dans la sortie prcdente, employ 200 apparat trois fois. Pourquoi? Notez les valeurs de departement_id employ 200. Une range a une DEPARTMENT_ID de 90 ans, un autre 10, et 90 troisime. En raison de ces combinaisons uniques de travail et le service ID ID, chaque range pour l'employ 200 est unique et n'est donc pas considr comme un doublon. Remarquez que la sortie est trie dans l'ordre croissant de la premire colonne de la clause SELECT (dans ce cas, employe_id).

Oracle Database 11g: SQL Fundamentals I 8 - 277

Operateur UNION ALL

L'oprateur UNION ALL renvoie des lignes des deux requtes, y compris toutes les duplications.

1 - 278

Copyright 2007, Oracle. All rights reserved.

Oprateur UNION ALL Utiliser l'oprateur UNION ALL renvoie toutes les lignes partir de plusieurs requtes. directives Les lignes directrices pour UNION et UNION ALL sont les mmes, avec les deux exceptions suivantes qui se rapportent UNION ALL: Contrairement UNION, les lignes dupliques ne sont pas limins et la sortie n'est pas trie par dfaut.

Oracle Database 11g: SQL Fundamentals I 8 - 278

Utilisation de l'oprateur UNION ALL


Afficher les dpartements actuels et antrieurs de tous les employs.
SELECT employee_id, job_id, department_id FROM employees UNION ALL SELECT employee_id, job_id, department_id FROM job_history ORDER BY employee_id;

1 - 279 Copyright 2007, Oracle. All rights reserved.

Utilisation de l'oprateur UNION ALL Dans cet exemple, 30 lignes sont slectionnes. La combinaison de deux tables s'lve 30 lignes. L'oprateur UNION ALL n'limine pas les doublons. UNION renvoie toutes les lignes distinctes slectionnes soit par requte. UNION ALL renvoie toutes les lignes slectionnes soit par requte, y compris tous les doublons. Considrons la requte dans la diapositive, maintenant crit avec la clause UNION :
SELECT FROM UNION SELECT FROM ORDER BY employee_id, job_id,department_id employees employee_id, job_id,department_id job_history employee_id;

La requte prcdente retourne 29 rangs. C'est parce qu'il limine la ligne suivante (parce que c'est un doublon):

Oracle Database 11g: SQL Fundamentals I 8 - 279

Lesson Agenda
Les oprateurs tablis: types et les lignes directrices Les tableaux utiliss dans cette leon UNION et UNION ALL oprateur oprateur INTERSECT oprateur MINUS L'appariement des instructions SELECT Utilisation de la clause ORDER BY dans des oprations ensemblistes

1 - 280

Copyright 2007, Oracle. All rights reserved.

Oracle Database 11g: SQL Fundamentals I 8 - 280

Operateur INTERSECT

Le rendement des exploitants INTERSECT lignes qui sont communes aux deux requtes.

1 - 281

Copyright 2007, Oracle. All rights reserved.

INTERSECT oprateur Utilisez l'oprateur INTERSECT renvoie toutes les lignes qui sont communs plusieurs requtes. directives Le nombre de colonnes et les types de donnes des colonnes tant choisis par les instructions SELECT dans les requtes doivent tre identiques dans toutes les instructions SELECT utilises dans la requte. Les noms des colonnes, cependant, n'a pas besoin d'tre identiques. Inverser l'ordre des tables recoup ne change pas le rsultat. INTERSECT ne pas ignorer les valeurs NULL.

Oracle Database 11g: SQL Fundamentals I 8 - 281

Utilisation de l'oprateur INTERSECT


Afficher les numros des employs et des identifiants d'emploi de ces employs qui ont actuellement un titre d'emploi est le mme que leur prcdent (c'est dire qu'ils ont chang d'emploi mais qui ont maintenant disparu de nouveau faire le mme travail qu'ils ont fait auparavant).
SELECT employee_id, job_id FROM employees INTERSECT SELECT employee_id, job_id FROM job_history;

1 - 282

Copyright 2007, Oracle. All rights reserved.

Utilisation de l'oprateur INTERSECT Dans l'exemple de la diapositive, la requte renvoie uniquement les enregistrements qui ont les mmes valeurs dans les colonnes slectionnes dans les deux tables. Quels seront les rsultats si vous ajoutez la colonne DEPARTMENT_ID l'instruction SELECT de la table Employs et ajouter la colonne DEPARTMENT_ID l'instruction SELECT de la table JOB_HISTORY, et excuter cette requte? Les rsultats peuvent tre diffrents en raison de l'introduction d'une autre colonne dont les valeurs peuvent ou non tre des doublons. exemple :
SELECT employee_id, job_id, department_id FROM employees INTERSECT SELECT employee_id, job_id, department_id FROM job_history;

200 est employ ne fait plus partie des rsultats car la valeur EMPLOYEES.DEPARTMENT_ID est diffrente de la valeur JOB_HISTORY.DEPARTMENT_ID.

Oracle Database 11g: SQL Fundamentals I 8 - 282

Lesson Agenda
Les oprateurs tablis: types et les lignes directrices Les tableaux utiliss dans cette leon UNION et UNION ALL oprateur oprateur INTERSECT oprateur MINUS L'appariement des instructions SELECT Utilisation de la clause ORDER BY dans des oprations ensemblistes

1 - 283

Copyright 2007, Oracle. All rights reserved.

Oracle Database 11g: SQL Fundamentals I 8 - 283

Operateur MINUS

L'oprateur MINUS retourne toutes les lignes distinctes slectionnes par la premire requte, mais pas dans le jeu de rsultats deuxime requte.
1 - 284 Copyright 2007, Oracle. All rights reserved.

Oprateur MOINS Utilisez l'oprateur MINUS pour renvoyer toutes les lignes distinctes slectionnes par la premire requte, mais ne sont pas prsents dans le jeu de rsultats de la requte seconde (la premire instruction SELECT MOINS la seconde instruction SELECT). Remarque: Le nombre de colonnes doit tre le mme et les types de donnes des colonnes tant choisis par les instructions SELECT dans les requtes doivent appartenir au groupe mme type de donnes dans toutes les instructions SELECT utilises dans la requte. Les noms des colonnes, cependant, n'a pas besoin d'tre identiques.

Oracle Database 11g: SQL Fundamentals I 8 - 284

Utilisation de l'oprateur MINUS


Afficher les numros des employs de ces employs qui n'ont pas chang leur travail encore une fois.
SELECT FROM MINUS SELECT FROM employee_id employees employee_id job_history;

1 - 285

Copyright 2007, Oracle. All rights reserved.

Utilisation de l'oprateur MINUS Dans l'exemple de la diapositive, les identifiants employs dans le tableau JOB_HISTORY sont soustraites de celles de la table Employees. L'ensemble des rsultats affiche les employs restant aprs la soustraction, ils sont reprsents par des lignes qui existent dans la table EMPLOYEES, mais qui n'existent pas dans le tableau JOB_HISTORY. Ce sont les dossiers des employs qui n'ont pas chang leur travail encore une fois.

Oracle Database 11g: SQL Fundamentals I 8 - 285

Lesson Agenda
Les oprateurs tablis: types et les lignes directrices Les tableaux utiliss dans cette leon UNION et UNION ALL oprateur oprateur INTERSECT oprateur MINUS L'appariement des instructions SELECT Utilisation de la clause ORDER BY dans des oprations ensemblistes

1 - 286

Copyright 2007, Oracle. All rights reserved.

Oracle Database 11g: SQL Fundamentals I 8 - 286

L'appariement des instructions SELECT


Utilisation de l'oprateur UNION, afficher le numro de l'emplacement, le nom du service, et l'tat o il se trouve. Vous devez faire correspondre le type de donnes (en utilisant la fonction TO_CHAR ou d'autres fonctions de conversion) lorsque les colonnes n'existent pas dans l'une ou l'autre table.
SELECT location_id, department_name "Department", TO_CHAR(NULL) "Warehouse location" FROM departments UNION SELECT location_id, TO_CHAR(NULL) "Department", state_province FROM locations;

1 - 287

Copyright 2007, Oracle. All rights reserved.

L'appariement des instructions SELECT Parce que les expressions dans les listes SELECT des requtes doit correspondre au numro, vous pouvez utiliser les colonnes factices et les fonctions de conversion de type de donnes pour se conformer cette rgle. Dans la diapositive, le nom, le lieu d'entrept, est donne par la colonne fictive rubrique. La fonction TO_CHAR est utilis dans la premire requte en fonction du type de donnes VARCHAR2 de la colonne state_province qui est rcupre par la deuxime requte. De mme, la fonction TO_CHAR dans la deuxime requte est utilise pour correspondre au type de donnes VARCHAR2 de la colonne department_name qui est rcupre par la premire requte. Le rsultat de la requte est affich :

Oracle Database 11g: SQL Fundamentals I 8 - 287

Correspondant l'instruction SELECT: Exemple


Utilisation de l'oprateur UNION, afficher l'ID de l'employ, ID du travail et le salaire de tous les employs.
SELECT FROM UNION SELECT FROM employee_id, job_id,salary employees employee_id, job_id,0 job_history;

1 - 288

Copyright 2007, Oracle. All rights reserved.

Correspondant l'instruction SELECT: Exemple Les employs et les tables job_history avoir plusieurs colonnes en commun (par exemple, employe_id, JOB_ID et DEPARTMENT_ID). Mais que faire si vous voulez que la requte pour afficher le numro d'employ, ID du travail, et le salaire moyen de l'oprateur UNION, sachant que le salaire n'existe que dans la table EMPLOYEES? L'exemple de code dans la diapositive correspond aux colonnes employe_id et JOB_ID dans les tables Employees et job_history. Une valeur littrale de 0 est ajout la dclaration JOB_HISTORY SELECT pour correspondre la colonne SALAIRE numrique dans les EMPLOYS instruction SELECT. Dans les rsultats prsents dans la diapositive, chaque ligne de la sortie qui correspond un enregistrement de la table JOB_HISTORY contient un 0 dans la colonne SALAIRE.

Oracle Database 11g: SQL Fundamentals I 8 - 288

Lesson Agenda
Les oprateurs tablis: types et les lignes directrices Les tableaux utiliss dans cette leon UNION et UNION ALL oprateur oprateur INTERSECT oprateur MINUS L'appariement des instructions SELECT Utilisation de la clause ORDER BY dans des oprations ensemblistes

1 - 289

Copyright 2007, Oracle. All rights reserved.

Oracle Database 11g: SQL Fundamentals I 8 - 289

Utilisation de la clause ORDER BY dans des oprations Set


La clause ORDER BY peut apparatre qu'une seule fois la fin de la requte compos. Requtes composants ne peuvent pas avoir COMMANDE PAR clauses individuelles. Clause ORDER BY ne reconnat que les colonnes de la premire requte SELECT. Par dfaut, la premire colonne de la premire requte SELECT est utilise pour trier la sortie dans un ordre croissant.

1 - 290

Copyright 2007, Oracle. All rights reserved.

Utilisation de la clause ORDER BY dans des oprations Set La clause ORDER BY peut tre utilise qu'une seule fois dans une requte compose. Si elle est utilise, la clause ORDER BY doit tre plac la fin de la requte. La clause ORDER BY accepte le nom de colonne ou un alias. Par dfaut, la sortie est trie dans l'ordre croissant dans la premire colonne de la premire requte SELECT. Note: La clause ORDER BY ne reconnat pas les noms de colonnes de la seconde requte SELECT. Pour viter toute confusion sur les noms de colonnes, il s'agit d'une pratique courante pour COMMANDER PAR positions de colonnes. Par exemple, dans l'instruction suivante, la sortie sera montr dans l'ordre croissant de la job_id.
SELECT employee_id, job_id,salary FROM employees UNION SELECT employee_id, job_id,0 FROM job_history ORDER BY 2;

Si vous omettez la clause ORDER BY, par dfaut, la sortie est trie dans l'ordre croissant de employe_id. Vous ne pouvez pas utiliser les colonnes de la seconde requte pour trier la sortie.

Oracle Database 11g: SQL Fundamentals I 8 - 290

Rsum
Dans cette leon, vous devriez avoir appris utiliser: UNION pour renvoyer toutes les lignes distinctes UNION ALL pour renvoyer toutes les lignes, y compris les doublons INTERSECT renvoie toutes les lignes qui sont partags par les deux requtes MOINS pour renvoyer toutes les lignes distinctes qui sont slectionns par la premire requte, mais non la seconde ORDER BY n'est qu' la fin mme de la dclaration

1 - 291

Copyright 2007, Oracle. All rights reserved.

rsum L'oprateur UNION renvoie toutes les lignes distinctes choisies par chaque requte dans la requte compos. Utilisez l'oprateur UNION pour renvoyer toutes les lignes de plusieurs tables et d'liminer les doublons. Utiliser l'oprateur UNION ALL renvoie toutes les lignes partir de plusieurs requtes. Contrairement au cas de l'oprateur UNION, les lignes dupliques ne sont pas limins et la sortie n'est pas trie par dfaut. Utilisez l'oprateur INTERSECT renvoie toutes les lignes qui sont communs plusieurs requtes. Utilisez l'oprateur MINUS pour retourner les lignes retournes par la premire requte qui ne sont pas prsents dans la deuxime requte. N'oubliez pas d'utiliser la clause ORDER BY qu' la fin de l'instruction compose. Assurez-vous que les expressions correspondantes dans les listes SELECT correspondre au type de numro et de donnes.

Oracle Database 11g: SQL Fundamentals I 8 - 291

Pratique 8
Dans cette pratique, vous crez des rapports en utilisant: L'oprateur UNION L'oprateur INTERSECTION L'oprateur MINUS

1 - 292

Copyright 2007, Oracle. All rights reserved.

Pratique 8: Vue d'ensemble Dans cette pratique, vous crivez des requtes en utilisant les oprateurs ensemblistes.

Oracle Database 11g: SQL Fundamentals I 8 - 292

Exercice 8 1. Le dpartement RH a besoin d'une liste des identifiants de service pour les services qui ne contiennent pas le travail d'identification ST_CLERK. Utilisez les oprateurs ensemblistes pour crer ce rapport.

2. Le dpartement RH a besoin d'une liste des pays qui n'ont pas de dpartements situs en eux. Afficher l'ID du pays et le nom du pays. Utilisez les oprateurs ensemblistes pour crer ce rapport.

3. Produire une liste d'emplois pour les dpartements 10, 50, et 20, dans cet ordre. Afficher l'ID du travail et l'ID de service en utilisant les oprateurs ensemblistes.

4. Crer un rapport qui rpertorie les ID des employs et des identifiants d'emploi de ces employs qui ont actuellement un titre d'emploi est le mme que leur titre d'emploi quand ils ont d'abord t embauch par l'entreprise (c'est dire qu'ils ont chang d'emploi, mais ont maintenant disparu de nouveau faire leur emploi original).

Oracle Database 11g: SQL Fundamentals I 8 - 293

exercice 8 (suite) 5. Le dpartement RH a besoin d'un rapport avec les spcifications suivantes: Nom de famille et le service d'identification de tous les employs de la table EMPLOYES, indpendamment de si oui ou non ils appartiennent un dpartement Dpartement ID et le nom du dpartement de tous les dpartements de la table SERVICES, indpendamment du fait qu'ils aient ou non les employs travaillant dans les crire une requte compos d'y arriver.

Oracle Database 11g: SQL Fundamentals I 8 - 294

manipulation de donnes

1 - 295

Copyright 2007, Oracle. All rights reserved.

Objectifs
Aprs avoir termin cette leon, vous devriez tre en mesure de faire ce qui suit: Dcrivez chaque langage de manipulation de donnes (DML) Insrer des lignes dans une table Mise jour des lignes dans une table Supprimer des lignes d'une table oprations de contrle

1 - 296

Copyright 2007, Oracle. All rights reserved.

objectif Dans cette leon, vous allez apprendre utiliser le langage de manipulation de donnes (DML) pour insrer des lignes dans une table, mettre jour les lignes existantes d'une table et de supprimer des lignes existantes d'une table. Vous apprendrez galement contrler les transactions avec le COMMIT, SAVEPOINT et ROLLBACK.

Oracle Database 11g: SQL Fundamentals I 9 - 296

Lesson Agenda
Ajout de nouvelles lignes dans une table
INSERT

Modification des donnes dans une table


UPDATE

Suppression de lignes dans une table:


DELETE TRUNCATE dclaration

Base de donnes des transactions contrler l'aide COMMIT, ROLLBACK et SAVEPOINT lire la cohrence Clause FOR UPDATE dans une instruction SELECT

1 - 297

Copyright 2007, Oracle. All rights reserved.

Oracle Database 11g: SQL Fundamentals I 9 - 297

Langage de manipulation de donnes


Une instruction DML est excut lorsque vous:
Ajouter de nouvelles lignes dans une table Modifier les lignes existantes dans une table Supprimer les lignes existantes d'une table

Une transaction consiste en un ensemble d'instructions DML qui forment une unit logique de travail.

1 - 298

Copyright 2007, Oracle. All rights reserved.

Langage de manipulation de donnes La manipulation des donnes de langue (DML) est un lment essentiel de SQL. Lorsque vous souhaitez ajouter, mettre jour ou supprimer des donnes dans la base de donnes, vous excutez une instruction DML. Une collection d'instructions DML qui forment une unit logique de travail est appele une transaction. Considrons une base de donnes bancaire. Quand un client d'une banque transfre de l'argent partir d'un compte d'pargne un compte courant, la transaction pourrait se composer de trois oprations distinctes: la diminution du compte d'pargne, l'augmentation du compte courant, et l'enregistrement de la transaction dans le journal des transactions. Le serveur Oracle doit garantir que tous les trois instructions SQL sont excutes tenir les comptes en quilibre. Quand quelque chose empche l'une des dclarations de la transaction de l'excution, les autres tats de la transaction doit tre annule. Remarque: La plupart des instructions DML dans cette leon suppose que pas de contraintes sur la table sont viols. Les contraintes sont abords plus loin dans ce cours. Remarque: Dans SQL Developer, cliquez sur l'icne Excuter le script ou appuyez sur [F5] pour excuter les instructions DML. Les messages de rtroaction seront affichs sur la page Script de sortie onglets.

Oracle Database 11g: SQL Fundamentals I 9 - 298

Ajout d'une nouvelle ligne dans une table


DEPARTMENTS
New row Insert new row into the DEPARTMENTS table.

1 - 299

Copyright 2007, Oracle. All rights reserved.

Ajout d'une nouvelle ligne dans une table Le graphique de la diapositive illustre l'ajout d'un nouveau service la table Departments.

Oracle Database 11g: SQL Fundamentals I 9 - 299

Syntaxe des INSERT


Ajouter de nouvelles lignes une table l'aide de l'instruction INSERT:
INSERT INTO VALUES table [(column [, column...])] (value [, value...]);

Avec cette syntaxe, une seule ligne est insre la fois.

1 - 300

Copyright 2007, Oracle. All rights reserved.

Syntaxe des INSERT Vous pouvez ajouter de nouvelles lignes une table en mettant l'instruction INSERT. Dans la syntaxe: table est le nom de la table colonne est le nom de la colonne dans la table pour remplir valeur est la valeur correspondant la colonne Remarque: Cette dclaration auprs de la clause VALUES ajoute une seule ligne la fois une table.

Oracle Database 11g: SQL Fundamentals I 9 - 300

Insertion de lignes nouvelles


Insrez une nouvelle ligne contenant les valeurs de chaque colonne. Liste des valeurs par dfaut dans l'ordre des colonnes dans la table. En option, la liste des colonnes dans la clause INSERT.???
INSERT INTO departments(department_id, department_name, manager_id, location_id) VALUES (70, 'Public Relations', 100, 1700);

Joignez caractre et les valeurs de date dans des guillemets simples.

1 - 301

Copyright 2007, Oracle. All rights reserved.

Insertion de lignes nouvelles Parce que vous pouvez insrer une nouvelle ligne contenant les valeurs de chaque colonne, la liste des colonnes n'est pas ncessaire dans la clause INSERT. Toutefois, si vous n'avez pas utilis la liste des colonnes, les valeurs doivent tre numrs selon l'ordre par dfaut des colonnes de la table, et une valeur doit tre fournie pour chaque colonne. DCRIRE dpartements

Pour plus de clart, utilisez la liste des colonnes dans la clause INSERT Joignez caractre et les valeurs de date dans des guillemets simples;.? Cependant, il n'est pas recommand que vous joignez des valeurs numriques entre guillemets simples.

Oracle Database 11g: SQL Fundamentals I 9 - 301

Insertion de lignes avec des valeurs nulles


Mthode implicite: Omettre la colonne de la liste des colonnes?.
INSERT INTO VALUES departments (department_id, department_name) (30, 'Purchasing');

Mthode explicite: Spcifiez le mot cl NULL dans la clause VALUES.


INSERT INTO VALUES departments (100, 'Finance', NULL, NULL);

1 - 302

Copyright 2007, Oracle. All rights reserved.

Insertion de lignes avec des valeurs nulles

Method Implicit Explicit

Description Omit the column from the column list. Specify the NULL keyword in the VALUES list; specify the empty string ('') in the VALUES list for character strings and dates.

Assurez-vous que vous pouvez utiliser des valeurs NULL dans la colonne cible en vrifiant l'tat Null avec la commande DESCRIBE. Le serveur Oracle applique automatiquement tous les types de donnes, les plages de donnes et les contraintes d'intgrit des donnes. Toute colonne qui ne figure pas explicitement obtient une valeur nulle dans la nouvelle ligne. Les erreurs courantes qui peuvent survenir lors de l'entre d'utilisateur sont vrifies dans l'ordre suivant: Valeur obligatoire manque d'une colonne NOT NULL Dupliquer valeur violer aucune contrainte d'unicit ou de cl primaire Toute valeur violer une contrainte CHECK L'intgrit rfrentielle maintenue pendant contrainte de cl trangre Incompatibilit de type de donnes ou des valeurs trop larges pour tenir dans la colonne Note: L'utilisation de la liste de colonnes est recommande car elle rend l'instruction INSERT plus lisible et plus fiable, ou moins sujettes des erreurs.

Oracle Database 11g: SQL Fundamentals I 9 - 302

Insertion de valeurs spciales


La fonction SYSDATE enregistre la date et l'heure actuelles.
INSERT INTO employees (employee_id, first_name, last_name, email, phone_number, hire_date, job_id, salary, commission_pct, manager_id, department_id) VALUES (113, 'Louis', 'Popp', 'LPOPP', '515.124.4567', SYSDATE, 'AC_ACCOUNT', 6900, NULL, 205, 110);

1 - 303

Copyright 2007, Oracle. All rights reserved.

Insertion de valeurs spciales Vous pouvez utiliser des fonctions spciales pour entrer des valeurs dans votre tableau. L'exemple diaporama enregistre des informations pour les Popp employ dans la table EMPLOYES. Il fournit la date et l'heure dans la colonne hire_date. Il utilise la fonction SYSDATE qui renvoie la date et l'heure du serveur de base de donnes. Vous pouvez galement utiliser la fonction CURRENT_DATE pour obtenir la date actuelle dans le fuseau horaire de session. Vous pouvez galement utiliser la fonction USER lors de l'insertion des lignes dans une table. La fonction USER enregistre le nom d'utilisateur courant. Ajouts confirmant la Table
SELECT employee_id, last_name, job_id, hire_date, commission_pct FROM employees WHERE employee_id = 113;

Oracle Database 11g: SQL Fundamentals I 9 - 303

Insertion spcifiques des dates et heures


Ajouter un nouvel employ.
INSERT INTO employees VALUES (114, 'Den', 'Raphealy', 'DRAPHEAL', '515.127.4561', TO_DATE('FEB 3, 1999', 'MON DD, YYYY'), 'SA_REP', 11000, 0.2, 100, 60);

Vrifiez votre addition.

1 - 304

Copyright 2007, Oracle. All rights reserved.

Insertion spcifiques des dates et heures Le format DD-MON-RR est gnralement utilise pour insrer une valeur de date. Avec le format de RR, le systme fournit sicle correcte automatiquement. Vous pouvez galement fournir la valeur de date dans le format JJ-MM-AAAA. Ceci est recommand car il indique clairement le sicle et ne dpend pas de la logique RR format interne de spcifier le sicle correct. Si une date doit tre saisie dans un format autre que le format par dfaut (par exemple, avec un autre sicle ou un moment prcis), vous devez utiliser la fonction TO_DATE. L'exemple de la diapositive enregistre des informations pour les employs Raphealy dans la table EMPLOYEES. Il dfinit la colonne hire_date Fvrier 3, 1999.

Oracle Database 11g: SQL Fundamentals I 9 - 304

Cration d'un script


Utilisation et de substitution dans une instruction SQL pour demander valeurs. Et est un espace rserv pour la valeur de la variable.
INSERT INTO departments (department_id, department_name, location_id) VALUES (&department_id, '&department_name',&location);

1 - 305

Copyright 2007, Oracle. All rights reserved.

Cration d'un script Vous pouvez enregistrer des commandes avec les variables de substitution dans un fichier et excuter les commandes dans le fichier. L'exemple de la diapositive enregistre des informations d'un ministre de la table Departments. Excutez le fichier script et vous tes invit entrer pour chacun des variables de substitution esperluette (& les). Aprs avoir entr une valeur pour la variable de substitution, cliquez sur le bouton OK. Les valeurs que vous entrez sont ensuite substitues dans l'instruction. Cela vous permet d'excuter le fichier de script plusieurs reprises, mais de fournir un ensemble de valeurs diffrent chaque fois que vous l'excutez.

Oracle Database 11g: SQL Fundamentals I 9 - 305

Copie les lignes d'une autre table


crivez votre instruction INSERT avec une sous-requte:
INSERT INTO sales_reps(id, name, salary, commission_pct) SELECT employee_id, last_name, salary, commission_pct FROM employees WHERE job_id LIKE '%REP%';

Ne pas utiliser la clause VALUES. Correspondre au nombre de colonnes dans la clause INSERT ceux de la sous-requte. Insre toutes les lignes retournes par la sous-requte dans la table, sales_reps.

1 - 306

Copyright 2007, Oracle. All rights reserved.

Copie les lignes d'une autre table Vous pouvez utiliser l'instruction INSERT pour ajouter des lignes une table o les valeurs sont tires des tables existantes. Dans l'exemple glissire, pour l'instruction INSERT INTO fonctionne, vous devez avoir cr la table sales_reps aide de l'instruction CREATE TABLE. CREATE TABLE est abord dans la leon suivante intitule Utilisation des instructions DDL pour crer et grer les tableaux." A la place de la clause VALUES, vous pouvez utiliser une sous-requte. syntaxe INSERT INTO table [colonne (colonne)] sous-requte; Dans la syntaxe: table est le nom de la table colonne est le nom de la colonne dans la table pour remplir sous-requte est la sous-requte qui renvoie des lignes la table Le nombre de colonnes et leurs types de donnes dans la liste des colonnes de la clause INSERT doit correspondre au nombre de valeurs et de leurs types de donnes dans la sous-requte. Zro ou plusieurs lignes sont ajoutes en fonction du nombre de lignes retournes par la sous-requte. Pour crer une copie des lignes d'une table, utilisez SELECT * dans la sous-requte :
INSERT INTO copy_emp SELECT * FROM employees;

Oracle Database 11g: SQL Fundamentals I 9 - 306

Lesson Agenda
Ajout de nouvelles lignes dans une table
INSERT

Modification des donnes dans une table


UPDATE

Suppression de lignes dans une table:


DELETE TRUNCATE dclaration

Base de donnes des transactions contrler l'aide COMMIT, ROLLBACK et SAVEPOINT lire la cohrence Clause FOR UPDATE dans une instruction SELECT

1 - 307

Copyright 2007, Oracle. All rights reserved.

Oracle Database 11g: SQL Fundamentals I 9 - 307

Modification de donnes dans une table


EMPLOYEES

Mise jour des lignes dans la table EMPLOYEES :

1 - 308

Copyright 2007, Oracle. All rights reserved.

Modification de donnes dans une table La diapositive illustre changer le numro de dpartement pour les employs du service 60 ? Dpartement 80.

Oracle Database 11g: SQL Fundamentals I 9 - 308

Syntax UPDATE
Modifier les valeurs existantes dans une table avec l'instruction UPDATE:
UPDATE SET [WHERE table column = value [, column = value, ...] condition];

Mettez jour plus d'une ligne la fois (si ncessaire).

1 - 309

Copyright 2007, Oracle. All rights reserved.

UPDATE Syntaxe des commandes Vous pouvez modifier les valeurs existantes dans une table l'aide de l'instruction UPDATE. Dans la syntaxe: table est le nom de la table colonne est le nom de la colonne dans la table pour remplir valeur est la valeur correspondant ou sous-requte pour la colonne tat identifie les lignes mettre jour et est compose de noms de colonnes, expressions, des constantes, des sous-requtes, et les oprateurs de comparaison Confirmez l'opration mise en interrogeant la table pour afficher les lignes mises jour. Pour plus d'informations, reportez-vous la section MISE JOUR dans la base de donnes Oracle 11g Langage SQL Reference, Release 1 (11.1). Remarque: En gnral, utilisez la colonne de cl primaire dans la clause WHERE pour identifier une ligne unique de mise jour. En utilisant d'autres colonnes peuvent provoquer de faon inattendue plusieurs ranges tre mis jour. Par exemple, l'identification d'une seule ligne dans la table EMPLOYEES par son nom est dangereux, parce que plus d'un employ peut avoir le mme nom
Oracle Database 11g: SQL Fundamentals I 9 - 309

Mise jour de lignes d'une table


Valeurs pour une ligne ou des lignes spcifiques sont modifis si vous spcifiez la clause WHERE:
UPDATE employees SET department_id = 50 WHERE employee_id = 113;

Les valeurs pour toutes les lignes de la table sont modifies si vous omettez la clause WHERE:
UPDATE SET copy_emp department_id = 110;

Spcifiez nom_colonne SET = NULL mettre jour une valeur de colonne NULL.
1 - 310 Copyright 2007, Oracle. All rights reserved.

Mise jour de lignes d'une table L'instruction UPDATE modifie les valeurs d'une ligne ou des lignes spcifiques si la clause WHERE est spcifie. L'exemple de la diapositive montre le transfert de l'employ 113 (Popp) pour dpartement 50. Si vous omettez la clause WHERE, les valeurs de toutes les lignes de la table sont modifies. Examinez les lignes mises jour dans la table COPY_EMP.
SELECT last_name, department_id FROM copy_emp;

Par exemple, un employ qui tait un SA_REP a maintenant chang son emploi pour une IT_PROG. Par consquent, sa JOB_ID doit tre mis jour et le domaine commission doit tre mis NULL.
UPDATE employees SET job_id = IT_PROG, commission_pct = NULL WHERE employee_id = 114;

Remarque: Le tableau COPY_EMP a les mmes donnes que la table EMPLOYEES.


Oracle Database 11g: SQL Fundamentals I 9 - 310

Mise jour de deux colonnes avec une sousrequte


Emploi salari mise jour 113 et le salaire qu'ils correspondent ceux de l'employ 205.
UPDATE SET employees job_id = (SELECT job_id FROM employees WHERE employee_id = 205), salary = (SELECT salary FROM employees WHERE employee_id = 205) employee_id = 113;

WHERE

1 - 311

Copyright 2007, Oracle. All rights reserved.

Mise jour de deux colonnes avec une sous-requte Vous pouvez mettre jour plusieurs colonnes dans la clause SET d'une instruction UPDATE en crivant plusieurs sous-requtes. La syntaxe est la suivante :
UPDATE table SET column = (SELECT column FROM table WHERE condition) [ , column = (SELECT column FROM table WHERE condition)] ;

[WHERE

condition ]

L'exemple de la diapositive peut aussi s'crire comme suit :


UPDATE employees SET (job_id, salary) = (SELECT job_id, salary FROM employees WHERE employee_id = 205) employee_id = 113;

WHERE

Oracle Database 11g: SQL Fundamentals I 9 - 311

Mise jour de lignes bases sur une autre table


Utilisez les sous-requtes dans les instructions UPDATE pour mettre jour les valeurs des lignes dans une table base sur des valeurs d'une autre table:
UPDATE SET copy_emp department_id = (SELECT department_id FROM employees WHERE employee_id = 100) (SELECT job_id FROM employees WHERE employee_id = 200);

WHERE

job_id

1 - 312

Copyright 2007, Oracle. All rights reserved.

Mise jour de lignes bases sur une autre table Vous pouvez utiliser les sous-requtes dans les instructions UPDATE pour mettre jour les valeurs dans une table. L'exemple de la diapositive jour la table COPY_EMP fonde sur les valeurs de la table Employees. Il change le numro de dpartement de tous les employs au travail des employs ID 200 est employ 100 pour le numro actuel dpartement.

Oracle Database 11g: SQL Fundamentals I 9 - 312

Lesson Agenda
Ajout de nouvelles lignes dans une table
INSERT

Modification des donnes dans une table


UPDATE

Suppression de lignes dans une table:


DELETE TRUNCATE dclaration

Base de donnes des transactions contrler l'aide COMMIT, ROLLBACK et SAVEPOINT lire la cohrence Clause FOR UPDATE dans une instruction SELECT

1 - 313

Copyright 2007, Oracle. All rights reserved.

Oracle Database 11g: SQL Fundamentals I 9 - 313

Suppression d'une ligne dans une table


DEPARTMENTS

Supprimer une ligne dans la table DEPARTEMENTS :

1 - 314

Copyright 2007, Oracle. All rights reserved.

Suppression d'une ligne dans une table Le service contractant a t retir de la table Departments (en supposant aucune contrainte sur la table DEPARTEMENTS sont viols), comme le montre le graphique de la diapositive.

Oracle Database 11g: SQL Fundamentals I 9 - 314

DELETE
Vous pouvez supprimer des lignes existantes d'une table l'aide de l'instruction DELETE :
DELETE [FROM] [WHERE table condition];

1 - 315

Copyright 2007, Oracle. All rights reserved.

Syntaxe de commande DELETE Vous pouvez supprimer des lignes existantes d'une table l'aide de l'instruction DELETE. Dans la syntaxe: table est le nom de la table tat identifie les lignes supprimer, et se compose de noms de colonnes, expressions, des constantes, des sous-requtes, et les oprateurs de comparaison Remarque: Si aucune ligne n'est supprime, le message "0 lignes supprimes" est retourn (dans l'onglet Sortie de script dans SQL Developer) Pour plus d'informations, voir la section sur "DELETE" dans Oracle Database SQL Rfrence du langage? 11g, Release 1 (11.1).

Oracle Database 11g: SQL Fundamentals I 9 - 315

Suppression de lignes dans une table


Des lignes spcifiques sont supprims si vous spcifiez la clause WHERE:
DELETE FROM departments WHERE department_name = Finance';

Toutes les lignes de la table sont supprims si vous omettez la clause WHERE :
DELETE FROM copy_emp;

1 - 316

Copyright 2007, Oracle. All rights reserved.

Suppression de lignes dans une table Vous pouvez supprimer des lignes spcifiques en spcifiant la clause WHERE dans l'instruction DELETE. Le premier exemple dans les diaporamas supprime le service de comptabilit de la table Departments. Vous pouvez confirmer la suppression en affichant les lignes supprimes l'aide de l'instruction SELECT.
SELECT FROM WHERE * departments department_name = Finance';

Toutefois, si vous omettez la clause WHERE, toutes les lignes de la table sont supprims. Le deuxime exemple dans les diaporamas supprime toutes les lignes de la table COPY_EMP, car aucune clause WHERE a t spcifi. exemple: Supprimer les lignes dfinies dans la clause WHERE.
DELETE FROM employees WHERE employee_id = 114;

DELETE FROM

departments WHERE department_id IN (30, 40);

Oracle Database 11g: SQL Fundamentals I 9 - 316

Suppression de lignes Bas sur une autre table


Utilisez les sous-requtes dans les instructions DELETE pour supprimer des lignes dans une table base sur des valeurs d'une autre table:
DELETE FROM employees WHERE department_id = (SELECT department_id FROM departments WHERE department_name LIKE '%Public%');

1 - 317

Copyright 2007, Oracle. All rights reserved.

Suppression de lignes Bas sur une autre table Vous pouvez utiliser les sous-requtes pour supprimer des lignes dans une table base sur des valeurs d'une autre table. L'exemple dans les diaporamas supprime tous les employs dans un dpartement o le nom du service contient l'Admin chane. La sous-requte recherche dans la table DEPARTEMENTS pour trouver le numro de dpartement base sur le nom du service public contenant la chane de caractres. La sous-requte alimente ensuite le numro du service la requte principale, ce qui supprime les lignes de donnes de la table employs en fonction de ce numro de dpartement.

Oracle Database 11g: SQL Fundamentals I 9 - 317

TRUNCATE
Supprime toutes les lignes d'une table, de quitter la table vide et la structure de la table intacte Est un langage de dfinition de donnes (DDL) plutt que d'une instruction DML; ne peuvent pas facilement tre annule syntaxe:
TRUNCATE TABLE table_name;

exemple:
TRUNCATE TABLE copy_emp;

1 - 318

Copyright 2007, Oracle. All rights reserved.

Commande TRUNCATE Une mthode plus efficace de vider une table l'aide de l'instruction TRUNCATE.? Vous pouvez utiliser l'instruction TRUNCATE pour supprimer rapidement toutes les lignes d'une table ou d'un cluster. Suppression de lignes avec l'instruction TRUNCATE est plus rapide que de les enlever avec l'instruction DELETE pour les raisons suivantes: L'instruction TRUNCATE est un langage de dfinition de donnes (DDL) et gnre aucune information rollback. Restauration des informations est dcrite plus loin dans cette leon. Troncature d'une table ne se dclenche pas les triggers de suppression de la table. Si la table est le parent d'une contrainte d'intgrit rfrentielle, vous ne pouvez pas tronquer la table. Vous devez dsactiver la contrainte avant d'mettre l'instruction TRUNCATE. Dsactivation des contraintes est recouvert d'une leon ultrieure.

Oracle Database 11g: SQL Fundamentals I 9 - 318

Lesson Agenda
Ajout de nouvelles lignes dans une table
INSERT

Modification des donnes dans une table


UPDATE

Suppression de lignes dans une table:


DELETE TRUNCATE dclaration

Base de donnes des transactions contrler l'aide COMMIT, ROLLBACK et SAVEPOINT lire la cohrence Clause FOR UPDATE dans une instruction SELECT

1 - 319

Copyright 2007, Oracle. All rights reserved.

Oracle Database 11g: SQL Fundamentals I 9 - 319

Les transactions de bases de donnes


Une transaction de base de donnes se compose d'une des oprations suivantes: DML qui constituent une modification conforme ? Des donnes Une instruction DDL Un langage de contrle des donnes (DCL) dclaration

1 - 320

Copyright 2007, Oracle. All rights reserved.

Les transactions de bases de donnes Le serveur Oracle garantit la cohrence des donnes fondes sur les transactions. Transactions vous donner plus de flexibilit et de contrle en cas de changement des donnes, et elles assurent la cohrence des donnes en cas de dfaillance du processus utilisateur ou une dfaillance du systme. Les transactions consistent en instructions DML qui constituent une modification conforme aux donnes. Par exemple, un transfert de fonds entre deux comptes devrait inclure le dbit dans un compte et le crdit d'un autre compte du mme montant. Les deux actions doivent chouer ou russir ensemble, le crdit ne doit pas tre engage sans le dbit. Types de transactions

Type Data manipulation language (DML) Data definition language (DDL) Data control language (DCL)

Description Consists of any number of DML statements that the Oracle server treats as a single entity or a logical unit of work Consists of only one DDL statement Consists of only one DCL statement

Oracle Database 11g: SQL Fundamentals I 9 - 320

Les transactions de base de donnes: Dbut et fin


Commence lorsque le premier DML SQL est excute. Fin de l'un des vnements suivants:
Une instruction COMMIT ou ROLLBACK. Une instruction DDL ou DCL excute (validation automatique). L'utilisateur quitte SQL Developer ou SQL * Plus. Le systme se bloque.

1 - 321

Copyright 2007, Oracle. All rights reserved.

Transaction Base de donnes: Dbut et Fin Quand une transaction de base de donnes de dbut et de fin? Une transaction commence lorsque la premire instruction DML est rencontr et se termine lorsque l'un des vnements suivants se produit: Une instruction COMMIT ou ROLLBACK. Une instruction DDL, telles que CREATE, est dlivr. Une dclaration DCL est dlivr. L'utilisateur quitte SQL Developer ou SQL * Plus. Une machine tombe en panne ou de panne du systme. Aprs une fin de la transaction, l'instruction SQL excutable suivante dmarre automatiquement la prochaine transaction. Une instruction DDL ou une dclaration DCL est automatiquement valide et donc implicitement fin une transaction.

Oracle Database 11g: SQL Fundamentals I 9 - 321

Avantages de COMMIT et ROLLBACK


Avec les instructions COMMIT et ROLLBACK, vous pouvez: Veiller la cohrence des donnes Aperu des changements de donnes avant d'effectuer des changements permanents Les oprations du Groupe logiquement lies

1 - 322

Copyright 2007, Oracle. All rights reserved.

Avantages des instructions COMMIT et ROLLBACK Avec les instructions COMMIT et ROLLBACK, vous avez le contrle apporter des modifications aux donnes permanentes.

Oracle Database 11g: SQL Fundamentals I 9 - 322

Explicites Instructions de contrle de transaction


Time

COMMIT Transaction DELETE SAVEPOINT A INSERT

UPDATE SAVEPOINT B INSERT ROLLBACK to SAVEPOINT B ROLLBACK to SAVEPOINT A ROLLBACK

1 - 323

Copyright 2007, Oracle. All rights reserved.

Explicites Instructions de contrle de transaction Vous pouvez contrler la logique des oprations l'aide de la commande COMMIT, SAVEPOINT et ROLLBACK.

Statement COMMIT SAVEPOINT name ROLLBACK ROLLBACK TO SAVEPOINT name

Description Ends the current transaction by making all pending data changes permanent Marks a savepoint within the current transaction ROLLBACK ends the current transaction by discarding all pending data changes. ROLLBACK TO SAVEPOINT rolls back the current transaction to the specified savepoint, thereby discarding any changes and/or savepoints that were created after the savepoint to which you are rolling back. If you omit the TO SAVEPOINT clause, the ROLLBACK statement rolls back the entire transaction. Because savepoints are logical, there is no way to list the savepoints that you have created.

Remarque: Vous ne pouvez pas s'engager dans un SAVEPOINT. SAVEPOINT n'est pas la norme ANSI SQL.

Oracle Database 11g: SQL Fundamentals I 9 - 323

Annulation des modifications un marqueur


Crer un marqueur dans la transaction en cours en utilisant l'instruction SAVEPOINT. Revenir ce marqueur en utilisant le ROLLBACK TO SAVEPOINT dclaration.
UPDATE... SAVEPOINT update_done; INSERT... ROLLBACK TO update_done;

1 - 324

Copyright 2007, Oracle. All rights reserved.

Annulation des modifications un marqueur Vous pouvez crer un marqueur dans la transaction en cours en utilisant l'instruction SAVEPOINT, qui divise la transaction en sections plus petites. Vous pouvez ensuite annuler les modifications en attente jusqu' ce que le marqueur en utilisant le ROLLBACK TO SAVEPOINT dclaration. Notez que si vous crez un point de sauvegarde seconde avec le mme nom qu'un point de sauvegarde antrieur, le point de sauvegarde antrieur est supprim.

Oracle Database 11g: SQL Fundamentals I 9 - 324

Traitement transaction implicite


Une validation automatique se produit dans les circonstances suivantes:
Une instruction DDL est dlivr Une dclaration DCL est dlivr Sortie normale de SQL Developer ou SQL * Plus, sans explicitement l'mission instructions COMMIT ou ROLLBACK

Une restauration automatique se produit lorsqu'il ya une fin anormale de SQL Developer ou SQL * Plus ou une dfaillance du systme.

1 - 325

Copyright 2007, Oracle. All rights reserved.

Traitement transaction implicite

Status Automatic commit

Automatic rollback

Circumstances DDL statement or DCL statement issued SQL Developer or SQL*Plus exited normally, without explicitly issuing COMMIT or ROLLBACK commands Abnormal termination of SQL Developer or SQL*Plus or system failure

Remarque: Dans SQL * Plus, la commande AUTOCOMMIT peut tre bascul sur ON ou OFF. Si elle est active, chaque instruction DML individuelle est engage ds qu'elle est excute. Vous ne pouvez pas annuler les modifications. S'il est rgl sur OFF, l'instruction COMMIT peut encore tre mis de manire explicite. En outre, l'instruction COMMIT est mis lorsque une instruction DDL est dlivr ou lorsque vous quittez SQL * Plus. Le SET AUTOCOMMIT ON / OFF commande est ignore dans SQL Developer. DML est commis sur une sortie normale de dveloppeur SQL que si vous avez la prfrence autocommit est activ. Pour activer autocommit, procdez comme suit: Dans le menu Outils, slectionnez Prfrences. Dans la bote de dialogue Prfrences, dveloppez Base de donnes et slectionnez Paramtres de feuille de calcul. Dans le volet droit, vrifiez le Autocommit en option Feuille SQL. Cliquez sur OK.

Oracle Database 11g: SQL Fundamentals I 9 - 325

Transaction Processing implicite (suite) dfaillances du systme Quand une transaction est interrompue par une panne du systme, l'ensemble de la transaction est automatiquement annule. Cela empche l'erreur de provoquer des modifications dans les donnes et retourne les tables l'tat au moment de la dernire validation. De cette faon, le serveur Oracle protge l'intgrit des tables. Dans SQL Developer, une sortie normale de la session s'effectue en slectionnant Quitter dans le menu Fichier. Dans SQL * Plus, une sortie normale se fait en entrant la commande EXIT l'invite. La fermeture de la fentre est considre comme une sortie anormale.

Oracle Database 11g: SQL Fundamentals I 9 - 326

Etat des donnes avant COMMIT ou ROLLBACK


L'tat prcdent des donnes peuvent tre rcupres. L'utilisateur courant peut passer en revue les rsultats des oprations DML l'aide de l'instruction SELECT. Les autres utilisateurs ne peuvent pas voir les rsultats des instructions DML mis par l'utilisateur actuel. Les lignes concernes sont verrouilles, les autres utilisateurs ne peuvent pas modifier les donnes dans les lignes concernes.

1 - 327

Copyright 2007, Oracle. All rights reserved.

Etat des donnes avant COMMIT ou ROLLBACK Tout changement de donnes fait lors de la transaction est temporaire jusqu' ce que la transaction est valide. L'tat des donnes avant les instructions COMMIT ou ROLLBACK sont mis peut tre dcrite comme suit: Oprations de manipulation de donnes affectent principalement le tampon de base de donnes et, par consquent, l'tat prcdent des donnes peuvent tre rcupres. L'utilisateur courant peut passer en revue les rsultats des oprations de manipulation de donnes en interrogeant les tables. Les autres utilisateurs ne peuvent pas voir les rsultats des oprations de manipulation de donnes effectues par l'utilisateur courant. Les instituts serveur Oracle cohrence de lecture afin de s'assurer que chaque utilisateur voit les donnes tel qu'il existait la dernire validation. Les lignes concernes sont verrouilles, les autres utilisateurs ne peuvent pas modifier les donnes dans les lignes concernes.

Oracle Database 11g: SQL Fundamentals I 9 - 327

Etat des donnes aprs COMMIT


Les modifications de donnes sont enregistres dans la base de donnes. L'tat prcdent des donnes sont crases. Tous les utilisateurs peuvent visualiser les rsultats. Verrous sur les lignes concernes sont librs; ces lignes sont disponibles pour les autres utilisateurs manipuler. Tous les points de sauvegarde sont effaces.

1 - 328

Copyright 2007, Oracle. All rights reserved.

Etat des donnes aprs COMMIT Apportez toutes les modifications en attente permanentes en utilisant l'instruction COMMIT. Voici ce qui arrive aprs une instruction COMMIT: Les modifications de donnes sont crites dans la base de donnes. L'tat prcdent des donnes n'est plus disponible avec des requtes SQL normales. Tous les utilisateurs peuvent consulter les rsultats de l'opration. Les verrous sur les lignes concernes sont librs, les lignes sont maintenant disponibles pour les autres utilisateurs d'effectuer des modifications de donnes nouvelles. Tous les points de sauvegarde sont effaces.

Oracle Database 11g: SQL Fundamentals I 9 - 328

Validation des donnes


Apportez les modifications:
DELETE FROM employees WHERE employee_id = 99999;

INSERT INTO departments VALUES (290, 'Corporate Tax', NULL, 1700);

Validez les modifications apportes:


COMMIT;

1 - 329

Copyright 2007, Oracle. All rights reserved.

Validation des donnes Dans l'exemple de la diapositive, une ligne est supprime de la table EMPLOYEES et une nouvelle ligne est insre dans la table Departments. Les modifications sont enregistres en mettant l'instruction COMMIT. exemple: Retirer les dpartements 290 et 300 dans la table Departments et mettre jour une ligne dans la table EMPLOYEES. Enregistrez la modification des donnes.
DELETE FROM departments WHERE department_id IN (290, 300); UPDATE employees SET department_id = 80 WHERE employee_id = 206; COMMIT;

Oracle Database 11g: SQL Fundamentals I 9 - 329

Etat des donnes aprs restauration


Jeter toutes les modifications en attente l'aide de l'instruction ROLLBACK: Les modifications de donnes sont annules. tat antrieur des donnes est restaure. Verrous sur les lignes concernes sont librs.
DELETE FROM copy_emp; ROLLBACK ;

1 - 330

Copyright 2007, Oracle. All rights reserved.

Etat des donnes aprs restauration Jeter toutes les modifications en attente l'aide de l'instruction ROLLBACK, qui se traduit par ce qui suit: Les modifications de donnes sont annules. L'tat prcdent des donnes est restaur. Verrous sur les lignes concernes sont librs.

Oracle Database 11g: SQL Fundamentals I 9 - 330

Etat des donnes aprs restauration: Exemple

DELETE FROM test; 25,000 rows deleted. ROLLBACK; Rollback complete. DELETE FROM test WHERE 1 row deleted. id = 100;

SELECT * FROM test WHERE No rows selected. COMMIT; Commit complete.

id = 100;

1 - 331

Copyright 2007, Oracle. All rights reserved.

Etat des donnes aprs restauration: Exemple Lorsque vous tentez de supprimer un enregistrement de la table TEST, vous risquez de vider la table. Toutefois, vous pouvez corriger l'erreur, relancez une dclaration approprie, et faire le changement permanent de donnes.

Oracle Database 11g: SQL Fundamentals I 9 - 331

Dclaration niveau Rollback


Si une seule instruction DML choue lors de l'excution, que cette dclaration est annule. Le serveur Oracle met en uvre un point de sauvegarde implicite. Toutes les autres modifications sont conserves. L'utilisateur doit interrompre les transactions explicitement en excutant une instruction COMMIT ou ROLLBACK.

1 - 332

Copyright 2007, Oracle. All rights reserved.

Dclaration niveau Rollback Une partie d'une transaction peut tre limin par une annulation implicite si une erreur est dtecte excution de l'instruction. Si une seule instruction DML choue lors de l'excution d'une transaction, son effet est annul par un retour en arrire au niveau instruction, mais les modifications apportes par les prcdentes dclarations DML dans la transaction ne sont pas jets. Ils peuvent tre valides ou annules explicitement par l'utilisateur. Le serveur Oracle publie une validation implicite avant et aprs toute instruction DDL. Donc, mme si votre instruction DDL ne s'excute pas correctement, vous ne pouvez pas restaurer l'tat prcdent parce que le serveur a mis une validation. Terminez vos transactions explicitement en excutant une instruction COMMIT ou ROLLBACK.

Oracle Database 11g: SQL Fundamentals I 9 - 332

Lesson Agenda
Ajout de nouvelles lignes dans une table
INSERT

Modification des donnes dans une table


UPDATE

Suppression de lignes dans une table:


DELETE TRUNCATE dclaration

Base de donnes des transactions contrler l'aide COMMIT, ROLLBACK et SAVEPOINT lire la cohrence Clause FOR UPDATE dans une instruction SELECT

1 - 333

Copyright 2007, Oracle. All rights reserved.

Oracle Database 11g: SQL Fundamentals I 9 - 333

lire la cohrence
Lire la cohrence garantit une vue cohrente des donnes tout moment. Les modifications apportes par un utilisateur n'entrent pas en conflit avec les modifications apportes par un autre utilisateur. Lire la cohrence veille ce que, sur les mmes donnes:
Les lecteurs n'attendent pas pour les crivains Les crivains ne pas attendre pour les lecteurs crivains attendre crivains

1 - 334

Copyright 2007, Oracle. All rights reserved.

lire la cohrence Base de donnes des utilisateurs accdent la base de deux manires: Les oprations de lecture (SELECT) Les oprations d'criture (INSERT, UPDATE, DELETE) Vous devez lire la cohrence de telle sorte que les lments suivants se produisent: Le lecteur de base de donnes et crivain sont assurs une vue cohrente des donnes. Les lecteurs ne voient pas les donnes qui sont en train d'tre chang. Les crivains sont assurs que les modifications apportes la base de donnes sont effectues de manire cohrente. Les modifications apportes par un auteur ne perturbent ni entrer en conflit avec les changements apports par un autre crivain. Le but de cohrence de lecture est de s'assurer que chaque utilisateur voit les donnes tel qu'il existait la dernire validation, avant une opration DML commenc. Remarque: Le mme utilisateur peut se connecter des sessions diffrentes. Chaque session maintient la cohrence lu de la manire dcrite ci-dessus, mme si elles sont les mmes utilisateurs.

Oracle Database 11g: SQL Fundamentals I 9 - 334

La mise en uvre de lecture Cohrente

User A UPDATE employees SET salary = 7000 WHERE last_name = 'Grant'; Data blocks

Undo segments Changed and unchanged data Before change (old data)

SELECT * FROM userA.employees;

Readconsistent image

User B

1 - 335

Copyright 2007, Oracle. All rights reserved.

La mise en uvre Cohrence Lire Lire la cohrence est une implmentation automatique. Il conserve une copie partielle de la base de donnes dans les segments annuler. L'image de lecture cohrente est construite partir des donnes valides dans la table et les anciennes donnes qui est en cours de modification et n'est pas encore engags sur le segment d'annulation. Quand une opration d'insertion, mise jour ou supprimer se fait sur la base de donnes, le serveur Oracle prend une copie des donnes avant qu'il ne soit chang et il crit une annulation segment. Tous les lecteurs, sauf celui qui a dlivr le changement, voir la base de donnes telle qu'elle existait avant que les changements ont commenc; ils voient le segment de dfaire la instantan des donnes. Avant les modifications sont valides dans la base de donnes, seul l'utilisateur qui modifie les donnes voit la base de donnes avec les modifications. Tout le monde voit l'instantan sur le segment d'annulation. Cela garantit que les lecteurs des donnes lues des donnes cohrentes qui n'est pas actuellement en mutation. Quand une instruction DML est commis, la modification apporte la base de donnes devient visible quiconque de publier une dclaration SELECT aprs la validation est effectue. L'espace occup par les anciennes donnes dans le fichier de segment d'annulation est libr pour une rutilisation. Si la transaction est annule, les modifications sont annules: L'original, ancienne version des donnes dans le segment d'annulation est crite la table. Tous les utilisateurs voient la base de donnes telle qu'elle existait avant le dbut de la transaction.
Oracle Database 11g: SQL Fundamentals I 9 - 335

Lesson Agenda
Ajout de nouvelles lignes dans une table
INSERT

Modification des donnes dans une table


UPDATE

Suppression de lignes dans une table:


DELETE TRUNCATE dclaration

Base de donnes des transactions contrler l'aide COMMIT, ROLLBACK et SAVEPOINT lire la cohrence Clause FOR UPDATE dans une instruction SELECT

1 - 336

Copyright 2007, Oracle. All rights reserved.

Oracle Database 11g: SQL Fundamentals I 9 - 336

Clause FOR UPDATE dans une instruction SELECT


Verrouille les lignes dans la table EMPLOYES o job_id est SA_REP.
SELECT employee_id, salary, commission_pct, job_id FROM employees WHERE job_id = 'SA_REP' FOR UPDATE ORDER BY employee_id;

Verrou est libr uniquement lorsque vous mettez une instruction ROLLBACK ou COMMIT. Si l'instruction SELECT tente de verrouiller une ligne qui est verrouill par un autre utilisateur, puis la base de donnes attend jusqu' ce que la ligne est disponible, puis renvoie les rsultats de l'instruction SELECT.
1 - 337 Copyright 2007, Oracle. All rights reserved.

Clause FOR UPDATE dans une instruction SELECT Lorsque vous mettez une instruction SELECT sur la base de donnes interroger certains dossiers, aucun verrou n'est pos sur les lignes slectionnes. En gnral, cela est ncessaire car le nombre d'enregistrements verrouills un moment donn est (par dfaut) rduit au strict minimum: uniquement les enregistrements qui ont t modifis mais pas encore engags sont verrouilles. Mme dans ce cas, d'autres seront capables de lire ces enregistrements comme ils sont apparus avant le changement (la devant l'image des donnes). Il ya des moments, cependant, quand vous pouvez verrouiller un ensemble d'enregistrements avant mme que vous ne les modifiez dans votre programme. Oracle propose la clause FOR UPDATE de l'instruction SELECT pour effectuer ce verrouillage. Lorsque vous mettez une requte SELECT ... FOR UPDATE, le systme de gestion de base de donnes relationnelle (SGBDR) obtient automatiquement exclusifs verrous de niveau ligne sur toutes les lignes identifies par l'instruction SELECT, maintenant ainsi les enregistrements "pour vos seuls changements." Personne ne autre ne sera capable de changer un de ces dossiers jusqu' ce que vous effectuez un ROLLBACK ou COMMIT. Vous pouvez ajouter le mot-cl NOWAIT facultatif la clause FOR UPDATE pour indiquer au serveur Oracle de ne pas attendre si la table a t verrouill par un autre utilisateur. Dans ce cas, le contrle sera retourn immdiatement votre programme ou de votre environnement SQL Developer pour que vous puissiez effectuer d'autres travaux, ou simplement attendre un certain temps avant d'essayer nouveau. Sans la clause NOWAIT, votre processus se bloque jusqu' la table est disponible, lorsque les verrous sont librs par l'autre utilisateur par l'mission d'une instruction COMMIT ou ROLLBACK une commande.
Oracle Database 11g: SQL Fundamentals I 9 - 337

Clause FOR UPDATE: Exemples


Vous pouvez utiliser la clause FOR UPDATE dans une instruction SELECT sur plusieurs tables.
SELECT e.employee_id, e.salary, e.commission_pct FROM employees e JOIN departments d USING (department_id) WHERE job_id = 'ST_CLERK AND location_id = 1500 FOR UPDATE ORDER BY e.employee_id;

Les lignes des deux tables Employees et les ministres sont verrouilles. Utiliser FOR UPDATE OF column_name pour qualifier la colonne que vous l'intention de changer, alors que les lignes de cette table spcifique sont verrouilles.
1 - 338 Copyright 2007, Oracle. All rights reserved.

Clause FOR UPDATE: Exemples Dans l'exemple de la diapositive, la dclaration verrouille les lignes dans la table EMPLOYEES avec l'ensemble JOB_ID ST_CLERK et LOCATION_ID fixe 1500, et verrouille les lignes dans la table Departments avec les ministres dans la srie LOCATION_ID en 1500. Vous pouvez utiliser la clause FOR UPDATE OF column_name pour qualifier la colonne que vous souhaitez modifier. La liste des DE de la clause FOR UPDATE ne pas vous limiter changer uniquement les colonnes des lignes slectionnes. Les verrous sont toujours placs sur toutes les lignes, si vous indiquez simplement FOR UPDATE dans la requte et ne pas inclure une ou plusieurs colonnes aprs le mot-cl DES, la base de donnes verrouiller toutes les lignes dfinies dans les tables numres dans la clause FROM. La dclaration suivante verrouille uniquement les lignes dans la table EMPLOYES avec ST_CLERK situs dans LOCATION_ID 1500. Aucune ligne sont enferms dans la table DEPARTEMENTS:
SELECT e.employee_id, e.salary, e.commission_pct FROM employees e JOIN departments d USING (department_id) WHERE job_id = 'ST_CLERK' AND location_id = 1500 FOR UPDATE OF e.salary ORDER BY e.employee_id;

Oracle Database 11g: SQL Fundamentals I 9 - 338

Clause FOR UPDATE: Exemples (suite) Dans l'exemple suivant, la base de donnes est charg d'attendre cinq secondes pour la ligne se libre, puis retourner le contrle de vous
SELECT employee_id, salary, commission_pct, job_id FROM employees WHERE job_id = 'SA_REP' FOR UPDATE WAIT 5 ORDER BY employee_id;

Oracle Database 11g: SQL Fundamentals I 9 - 339

Rsum
Dans cette leon, vous devriez avoir appris utiliser les dclarations suivantes:
Function
INSERT UPDATE DELETE TRUNCATE COMMIT SAVEPOINT ROLLBACK FOR UPDATE clause in SELECT

Description
Adds a new row to the table Modifies existing rows in the table Removes existing rows from the table Removes all rows from a table Makes all pending changes permanent Is used to roll back to the savepoint marker Discards all pending data changes Locks rows identified by the SELECT query

1 - 340

Copyright 2007, Oracle. All rights reserved.

rsum Dans cette leon, vous devriez avoir appris manipuler des donnes dans la base de donnes Oracle l'aide de l'instruction INSERT, UPDATE, DELETE et TRUNCATE, ainsi que la faon de contrler les modifications de donnes l'aide de la commande COMMIT, SAVEPOINT et ROLLBACK. Vous avez galement appris utiliser la clause FOR UPDATE de l'instruction SELECT pour verrouiller des lignes pour que vos modifications seulement. Rappelez-vous que le serveur Oracle garantit une vue cohrente des donnes tout moment.

Oracle Database 11g: SQL Fundamentals I 9 - 340

Pratique 9
Cette pratique couvre les sujets suivants:
Insertion de lignes dans les tables Mise jour et suppression de lignes dans la table Contrle des transactions

1 - 341

Copyright 2007, Oracle. All rights reserved.

Pratique 9: Vue d'ensemble Dans cette pratique, vous ajoutez des lignes la table MY_EMPLOYEE, mettre jour et supprimer des donnes de la table, et de contrler vos transactions. Vous excutez un script pour crer la table MY_EMPLOYEE.

Oracle Database 11g: SQL Fundamentals I 9 - 341

Exercice 9 Le dpartement des ressources humaines veut que vous pour crer des instructions SQL pour insrer, mettre jour et supprimer des donnes des employs. Comme un prototype, vous utilisez la table MY_EMPLOYEE avant de donner les instructions la DRH. Note: Pour toutes les instructions DML, utilisez l'icne Excuter le script (ou appuyez sur [F5]) pour excuter la requte. De cette faon, vous obtenez de voir les messages de rtroaction sur la page de l'onglet Script de sortie. Pour les requtes SELECT, continuer utiliser l'icne Dclaration Excuter ou appuyez sur [F9] pour obtenir la sortie formate sur l'onglet Rsultats. Insrer des donnes dans la table MY_EMPLOYEE. 1. Excutez l'instruction dans le script lab_09_01.sql pour construire la table MY_EMPLOYEE utilis dans cette pratique. 2. Dcrire la structure de la table MY_EMPLOYEE d'identifier les noms de colonnes.

3.Crer une instruction INSERT pour ajouter la premire ligne de donnes la table MY_EMPLOYEE des donnes d'exemple suivantes. Ne pas lister les colonnes dans la clause INSERT. Ne pas entrer dans tous les rangs l'instant.

ID

LAST_NAME

FIRST_NAME

USERID

SALARY

Patel

Ralph

rpatel

895

Dancs

Betty

bdancs

860

Biri

Ben

bbiri

1100

Newman

Chad

cnewman

750

5 Ropeburn Audrey aropebur 1550 4. Remplissez la table MY_EMPLOYEE avec la deuxime range de donnes de l'chantillon de la liste prcdente. Cette fois-ci, lister les colonnes explicitement dans la clause INSERT.

Oracle Database 11g: SQL Fundamentals I 9 - 342

exercice 9 (suite) 5. Confirmez votre plus de la table.

6. Rdiger une instruction INSERT dans un fichier de script rutilisable dynamique pour charger les lignes restantes dans la table MY_EMPLOYEE. Le script devrait inciter toutes les colonnes (ID, last_name, first_name, UserID et salaire). Enregistrez ce script dans un fichier lab_09_06.sql. 7. Remplir le tableau avec les deux prochaines lignes de donnes d'chantillons indiqus ci l'tape 3 en excutant l'instruction INSERT dans le script que vous avez cr. 8. Confirmez vos ajouts au tableau.

9. Faire les ajouts de donnes permanente. Mettre jour et supprimer des donnes dans la table MY_EMPLOYEE. 10. Changer le nom de famille de l'employ 3 Drexler. 11. Changer le salaire de 1000 $ pour tous les employs qui ont un salaire infrieur 900 $. 12. Vrifiez vos modifications la table.

13. Supprimer Dancs Betty partir de la table MY_EMPLOYEE. 14. Confirmez vos modifications la table.

Oracle Database 11g: SQL Fundamentals I 9 - 343

Exercice 9 (suite) 15. Valider toutes les modifications en attente. Les donnes de contrle de transaction la table MY_EMPLOYEE. 16. Remplir le tableau avec la dernire range de donnes de l'chantillon rpertories l'tape 3 en utilisant les instructions du script que vous avez cr l'tape 6. Excutez les instructions dans le script. 17. Confirmez votre plus de la table.?

18. Marquer un point intermdiaire dans le traitement de la transaction. 19. Supprimez toutes les lignes de la table MY_EMPLOYEE. 20. Assurez-vous que la table est vide. 21. Jeter l'opration DELETE plus rcente sans carter la prcdente opration INSERT. 22. Assurez-vous que la nouvelle ligne est toujours intacte.?

23. Faire l'ajout de donnes permanente. Si vous avez le temps, l'exercice suivant: 24. Modifiez le script lab_09_06.sql tels que le USERID est gnr automatiquement en concatnant la premire lettre du prnom et les sept premiers caractres du nom de famille. Le USERID gnrs doivent tre en minuscules. Par consquent, le script ne devrait pas inciter la USERID. Enregistrez ce script dans un fichier nomm lab_09_24.sql. 25. Excutez le script, lab_09_24.sql pour insrer l'enregistrement ci-dessous:

ID LAST_NAME FIRST_NAME USERID 26. Assurez-vous que la nouvelle ligne a t ajoute avec USERID correcte. 6 Anthony Mark manthony

SALAR Y 1230

Oracle Database 11g: SQL Fundamentals I 9 - 344

Utilisation des instructions DDL pour crer et grer des tables

1 - 345

Copyright 2007, Oracle. All rights reserved.

Objectifs
Aprs avoir termin cette leon, vous devriez tre en mesure de faire ce qui suit: Catgoriser les objets de base de donnes principaux Revoir la structure de la table Dressez la liste des types de donnes qui sont disponibles pour les colonnes Crer un tableau simple Expliquer comment les contraintes sont cres au moment de la cration de la table Dcrivez comment fonctionnent les objets de schma

1 - 346

Copyright 2007, Oracle. All rights reserved.

objectifs Dans cette leon, vous serez initi la langue de dfinition de donnes (DDL). On vous enseigne les rudiments de la faon de crer des tableaux simples, les modifier et les supprimer. Les types de donnes disponibles dans les instructions DDL sont prsents et les concepts de schma sont mis en place. Les contraintes sont abords dans cette leon. Les messages d'exception qui sont gnrs partir de violer les contraintes lors des oprations DML sont prsents et expliqus.

Oracle Database 11g: SQL Fundamentals I 10 - 346

Lesson Agenda
objets de base de donnes
rgles de nommage

CREATE TABLE:
Accder aux tables d'un autre utilisateur option par dfaut

Les types de donnes Vue d'ensemble des contraintes: NOT NULL, PRIMARY KEY, FOREIGN KEY, CHECK Cration d'une table en utilisant une sous-requte ALTER TABLE
Tables en lecture seule

L'instruction DROP TABLE

1 - 347

Copyright 2007, Oracle. All rights reserved.

Oracle Database 11g: SQL Fundamentals I 10 - 347

objets de base de donnes

Object
Table View Sequence Index Synonym

Description
Basic unit of storage; composed of rows Logically represents subsets of data from one or more tables Generates numeric values Improves the performance of some queries Gives alternative name to an object

1 - 348

Copyright 2007, Oracle. All rights reserved.

Objets de base de donnes La base de donnes Oracle peut contenir plusieurs structures de donnes. Chaque structure doit tre prcise dans la conception de base de donnes afin qu'elle puisse tre cr lors de l'tape de construction d'un dveloppement de base de donnes. Tableau: Stocke les donnes Vue: Sous-ensemble de donnes d'une ou plusieurs tables Squence: Gnre des valeurs numriques Indice: Amliore les performances de certaines requtes Synonyme: Donne autre nom un objet Structures de tables Oracle Les tableaux peuvent tre crs tout moment, mme lorsque les utilisateurs utilisent la base de donnes. Vous n'avez pas besoin de spcifier la taille d'une table. La taille est en fin de compte dfinie par la quantit d'espace allou la base de donnes dans son ensemble. Il est important, cependant, d'estimer combien d'espace table utilise un fil du temps. Structure de la table peut tre modifie en ligne. Remarque: les objets de base de donnes supplmentaires sont disponibles, mais ne sont pas couverts dans ce cours.

Oracle Database 11g: SQL Fundamentals I 10 - 348

rgles de nommage
Noms de table et de colonne: Doit commencer par une lettre Doit tre 1-30 caractres Ne doit contenir que A-Z, a-z, 0-9, _, $ et # Ne doit pas reproduire le nom d'un autre objet appartenant un mme utilisateur Ne doit pas tre un serveur Oracle-mot rserv

1 - 349

Copyright 2007, Oracle. All rights reserved.

Rgles de nommage Vous nommez des tables et colonnes selon les rgles standard de dnomination des objets de base de donnes Oracle: Noms de table et de colonne doivent commencer par une lettre et tre 1-30 caractres. Les noms doivent contenir que les caractres A Z, a-z, 0-9, _ (underscore), $ et # (caractres juridiques, mais leur utilisation est dconseille). Les noms doivent pas reproduire le nom d'un autre objet appartenant l'utilisateur Oracle mme serveur. Les noms doivent pas tre un serveur Oracle-mot rserv. - Vous pouvez galement utiliser des identificateurs entre guillemets pour reprsenter le nom d'un objet. Un identificateur entre guillemets commence et se termine par des guillemets doubles ("). Si vous nommez un objet de schma l'aide d'un identifiant entre guillemets, alors vous devez utiliser les guillemets chaque fois que vous faites rfrence cet objet. Les identificateurs entre guillemets peuvent tre des mots rservs, mme si ce n'est pas recommand. des intituls Utilisez des noms descriptifs pour les tables et les objets de base de donnes. Remarque: les noms ne sont pas sensibles la casse. Par exemple, les salaris est trait pour tre le mme nom que les employs actuels ou. Toutefois, les identificateurs entre guillemets sont sensibles la casse. Pour plus d'informations, voir la section sur les noms d'objets de schma et les qualificatifs dans la base de donnes Oracle 11g Langage SQL Reference, Release 1 .
Oracle Database 11g: SQL Fundamentals I 10 - 349

Lesson Agenda
objets de base de donnes
rgles de nommage

CREATE TABLE:
Accder aux tables d'un autre utilisateur option par dfaut

Les types de donnes Vue d'ensemble des contraintes: NOT NULL, PRIMARY KEY, FOREIGN KEY, CHECK Cration d'une table en utilisant une sous-requte ALTER TABLE
Tables en lecture seule

L'instruction DROP TABLE

1 - 350

Copyright 2007, Oracle. All rights reserved.

Oracle Database 11g: SQL Fundamentals I 10 - 350

CREATE TABLE
Vous devez avoir:
CREATE TABLE Une zone de stockage
CREATE TABLE [schema.]table (column datatype [DEFAULT expr][, ...]);

Vous prcisez:
nom de la table Nom de la colonne, la colonne Type de donnes, et la taille des colonnes

1 - 351

Copyright 2007, Oracle. All rights reserved.

Instruction CREATE TABLE Vous pouvez crer des tables pour stocker des donnes en excutant l'instruction SQL CREATE TABLE. Cette dclaration est l'une des instructions DDL qui sont un sousensemble des instructions SQL utilises pour crer, modifier ou supprimer des structures de base de donnes Oracle. Ces dclarations ont un effet immdiat sur la base de donnes et ils ont aussi enregistrer des informations dans le dictionnaire de donnes. Pour crer une table, un utilisateur doit avoir le privilge CREATE TABLE et une zone de stockage utiliser pour crer des objets. L'administrateur de base de donnes (DBA) utilise des donnes de contrle de langue (DCL) des dclarations d'accorder des privilges aux utilisateurs. Dans la syntaxe: schma est le mme que le nom du propritaire table est le nom de la table Expr DEFAULT Spcifie une valeur par dfaut si une valeur est omise dans l'instruction INSERT colonne est le nom de la colonne type de donnes est de type donnes de la colonne et la longueur

Oracle Database 11g: SQL Fundamentals I 10 - 351

Rfrencement tableaux d'un autre utilisateur


Les tableaux appartenant d'autres utilisateurs ne sont pas dans le schma de l'utilisateur. Vous devez utiliser le nom du propritaire comme prfixe pour les tables.

USERA SELECT * FROM userB.employees;

USERB SELECT * FROM userA.employees;

1 - 352

Copyright 2007, Oracle. All rights reserved.

Rfrencement tableaux d'un autre utilisateur Un schma est une collection de structures logiques de donnes ou des objets de schma. Un schma est dtenu par un utilisateur de base de donnes et a le mme nom que l'utilisateur. Chaque utilisateur possde un seul schma. Objets de schma peuvent tre crs et manipuls avec SQL et comprennent des tables, vues, synonymes, des squences, des procdures stockes, des index, clusters, et des liens de bases de donnes. Si une table n'appartient pas l'utilisateur, le nom du propritaire doit tre prcde de la table. Par exemple, si il ya des schmas nomms UserA et UserB, et les deux ont une table EMPLOYS, alors si USERA veut accder la table EMPLOYES qui appartient l'utilisateur B, USERA devez faire prcder le nom de la table avec le nom de schma :
SELECT * FROM userb.employees;

Si l'utilisateur B veut accder la table EMPLOYES qui est dtenue par USERA, userB devez prfixer le nom de la table avec le nom de schma :
SELECT * FROM usera.employees;

Oracle Database 11g: SQL Fundamentals I 10 - 352

Option DEFAULT
Spcifiez une valeur par dfaut pour une colonne lors d'une insertion.
... hire_date DATE DEFAULT SYSDATE, ...

Les valeurs littrales, des expressions ou des fonctions SQL sont des valeurs morales. Un autre nom de colonne ou une pseudocolumn sont des valeurs illgales. Le type de donnes par dfaut doit correspondre au type de donnes de la colonne.
CREATE TABLE hire_dates (id NUMBER(8), hire_date DATE DEFAULT SYSDATE);

1 - 353

Copyright 2007, Oracle. All rights reserved.

Option DEFAULT Lorsque vous dfinissez une table, vous pouvez spcifier qu'une colonne doit tre donn une valeur par dfaut en utilisant l'option par dfaut. Cette option empche les valeurs nulles de pntrer dans les colonnes quand une ligne est insre sans valeur pour la colonne. La valeur par dfaut peut tre un littral, une expression ou une fonction SQL (comme SYSDATE ou USER), mais la valeur ne peut pas tre le nom d'une autre colonne ou une pseudocolumn (comme NEXTVAL ou CURRVAL). L'expression par dfaut doit correspondre au type de donnes de la colonne. Prenons les exemples suivants: INSERT INTO hire_dates value(45, NULL); La dclaration ci-dessus insre la valeur NULL plutt que la valeur par dfaut.

INSERT INTO hire_dates (id) Values (35); La dclaration ci-dessus insre SYSDATE pour la colonne hire_date. Remarque: Dans SQL Developer, cliquez sur l'icne Excuter le script ou appuyez sur [F5] pour excuter les instructions DDL. Les messages de rtroaction seront affichs sur la page Script de sortie onglets

Oracle Database 11g: SQL Fundamentals I 10 - 353

Creation Tables
Crez la table:
CREATE TABLE dept (deptno dname loc create_date NUMBER(2), VARCHAR2(14), VARCHAR2(13), DATE DEFAULT SYSDATE);

Confirmer cration de la table:


DESCRIBE dept

1 - 354

Copyright 2007, Oracle. All rights reserved.

Cration de tables L'exemple de la diapositive cre la table DEPT quatre colonnes: DEPTNO, DNAME, LOC, et create_date. La colonne create_date a une valeur par dfaut. Si aucune valeur n'est fournie pour une instruction INSERT, la date systme est automatiquement insr. Pour confirmer que la table a t cre, excutez la commande DESCRIBE. Parce que la cration d'une table est une instruction DDL, une validation automatique a lieu lorsque cette instruction est excute.

Oracle Database 11g: SQL Fundamentals I 10 - 354

Lesson Agenda
objets de base de donnes
rgles de nommage

CREATE TABLE:
Accder aux tables d'un autre utilisateur option par dfaut

Les types de donnes Vue d'ensemble des contraintes: NOT NULL, PRIMARY KEY, FOREIGN KEY, CHECK Cration d'une table en utilisant une sous-requte ALTER TABLE
Tables en lecture seule

L'instruction DROP TABLE

1 - 355

Copyright 2007, Oracle. All rights reserved.

Oracle Database 11g: SQL Fundamentals I 10 - 355

Types de donnes
Data Type
CHAR(size) NUMBER(p,s) DATE LONG CLOB RAW and LONG RAW BLOB BFILE ROWID

Description
Fixed-length character data Variable-length numeric data Date and time values Variable-length character data (up to 2 GB) Character data (up to 4 GB) Raw binary data Binary data (up to 4 GB) Binary data stored in an external file (up to 4 GB) A base-64 number system representing the unique address of a row in its table

VARCHAR2(size) Variable-length character data

1 - 356

Copyright 2007, Oracle. All rights reserved.

Types de donnes Lorsque vous identifiez une colonne d'une table, vous devez fournir un type de donnes de la colonne. Il existe plusieurs types de donnes disponibles :

Data Type VARCHAR2(size) CHAR [(size)] NUMBER [(p,s)]

Description Variable-length character data (A maximum size must be specified: minimum size is 1; maximum size is 4,000.) Fixed-length character data of length size bytes (Default and minimum size is 1; maximum size is 2,000.) Number having precision p and scale s (Precision is the total number of decimal digits and scale is the number of digits to the right of the decimal point; precision can range from 1 to 38, and scale can range from 84 to 127.) Date and time values to the nearest second between January 1, 4712 B.C., and December 31, 9999 A.D. Variable-length character data (up to 2 GB) Character data (up to 4 GB)

DATE LONG CLOB

Oracle Database 11g: SQL Fundamentals I 10 - 356

Types de donnes (suite)


Data Type RAW( size ) LONG RAW BLOB BFILE ROWID Description Raw binary data of length size (A maximum size must be specified: maximum size is 2,000.) Raw binary data of variable length (up to 2 GB) Binary data (up to 4 GB) Binary data stored in an external file (up to 4 GB) A base-64 number system representing the unique address of a row in its table

directives Une colonne de type LONG ne sont pas copies lors d'une table est cre en utilisant une sous-requte. Une colonne de type LONG ne peut pas tre inclus dans une clause GROUP BY ou une clause ORDER BY. Une seule colonne de type LONG ne peut tre utilis par table. Aucune contrainte ne peut tre dfinie sur une colonne LONG. Vous pouvez utiliser une colonne CLOB plutt qu'une colonne de type LONG.

Oracle Database 11g: SQL Fundamentals I 10 - 357

Types de donnes Datetime


Vous pouvez utiliser plusieurs types de donnes datetime:
Data Type
TIMESTAMP INTERVAL YEAR TO MONTH INTERVAL DAY TO SECOND

Description
Date with fractional seconds Stored as an interval of years and months Stored as an interval of days, hours, minutes, and seconds

1 - 358

Copyright 2007, Oracle. All rights reserved.

Types de donnes datetime


Data Type TIMESTAMP Description

Enables storage of time as a date with fractional seconds. It stores the year, month, day, hour, minute, and the second value of the DATE data type as well as the fractional seconds value There are several variations of this data type such as WITH TIMEZONE, WITH LOCALTIMEZONE. INTERVAL YEAR TO Enables storage of time as an interval of years and months. Used to MONTH represent the difference between two datetime values in which the only significant portions are the year and month INTERVAL DAY TO Enables storage of time as an interval of days, hours, minutes, and SECOND seconds. Used to represent the precise difference between two datetime values datetime sont disponibles avec les versions Oracle9i et Remarque: Ces types de donnes plus tard. Les types de donnes datetime sont discuts en dtail dans la leon intitule Gestion des donnes dans diffrents fuseaux horaires dans la base de donnes Oracle 11g: SQL Fundamentals II de cours. En outre, pour plus d'informations sur les types de donnes datetime, consultez le type de donnes TIMESTAMP sujets, INTERVAL YEAR TO MONTH type de donnes, et INTERVAL DAY TO SECOND type de donnes dans Oracle Database 11g SQL Langage de rfrence, Release 1 (11.1).

Oracle Database 11g: SQL Fundamentals I 10 - 358

Lesson Agenda
objets de base de donnes
rgles de nommage

CREATE TABLE:
Accder aux tables d'un autre utilisateur option par dfaut

Les types de donnes Vue d'ensemble des contraintes: NOT NULL, PRIMARY KEY, FOREIGN KEY, CHECK Cration d'une table en utilisant une sous-requte ALTER TABLE
Tables en lecture seule

L'instruction DROP TABLE

1 - 359

Copyright 2007, Oracle. All rights reserved.

Oracle Database 11g: SQL Fundamentals I 10 - 359

Contraintes y compris
Contraintes appliquer des rgles au niveau table. Contraintes empcher la suppression d'une table si il ya des dpendances. Les types de contraintes suivants sont valables :
NOT NULL UNIQUE PRIMARY KEY FOREIGN KEY CHECK

1 - 360

Copyright 2007, Oracle. All rights reserved.

contraintes Le serveur Oracle utilise des contraintes pour viter invalide la saisie de donnes dans des tables. Vous pouvez utiliser des contraintes pour effectuer les oprations suivantes: Appliquer les rgles sur les donnes dans un tableau chaque fois qu'une ligne est insre, mise jour ou la suppression de cette table. La contrainte doit tre satisfaite pour que l'opration russisse. Empcher la suppression d'une table si il ya des dpendances d'autres tables. Prvoient des rgles pour les outils d'Oracle, comme Oracle Developer. Contraintes d'intgrit des donnes
Constraint NOT NULL UNIQUE PRIMARY KEY FOREIGN KEY Description Specifies that the column cannot contain a null value Specifies a column or combination of columns whose values must be unique for all rows in the table Uniquely identifies each row of the table Establishes and enforces a referential integrity between the column and a column of the referenced table such that values in one table match values in another table. Specifies a condition that must be true
Oracle Database 11g: SQL Fundamentals I 10 - 360

CHECK

Lignes directrices de contraintes


Vous pouvez nommer une contrainte, ou le serveur Oracle gnre un nom en utilisant le format SYS_Cn. Crer une contrainte l'une des priodes suivantes:
En mme temps que la cration de la table Aprs la cration de la table

Dfinir une contrainte au niveau de la colonne ou de table. Voir une contrainte dans le dictionnaire de donnes.

1 - 361

Copyright 2007, Oracle. All rights reserved.

Lignes directrices de contraintes Toutes les contraintes sont mmorises dans le dictionnaire de donnes. Les contraintes sont faciles rfrencer si vous leur donnez un nom significatif. Les noms de contrainte doivent suivre les standards objet de rgles de nommage, sauf que le nom ne peut pas tre le mme qu'un autre objet appartenant un mme utilisateur. Si vous ne nommez pas votre contrainte, le serveur Oracle gnre un nom avec le SYS_Cn format, o n est un nombre entier de sorte que le nom de la contrainte est unique. Les contraintes peuvent tre dfinies au moment de la cration de la table ou aprs la cration de la table. Vous pouvez dfinir une contrainte au niveau de la colonne ou de table. Fonctionnellement, une contrainte au niveau table est le mme comme une contrainte au niveau des colonnes. Pour plus d'informations, consultez la section sur les contraintes dans Oracle Database SQL Rfrence du langage? 11g, Release 1 (11.1).

Oracle Database 11g: SQL Fundamentals I 10 - 361

Dfinition de contraintes
syntaxe:
CREATE TABLE [schema.]table (column datatype [DEFAULT expr] [column_constraint], ... [table_constraint][,...]);

Syntaxe de contrainte au niveau des colonnes:


column [CONSTRAINT constraint_name] constraint_type,

Syntaxe de contrainte de niveau table:


column,... [CONSTRAINT constraint_name] constraint_type (column, ...),

1 - 362

Copyright 2007, Oracle. All rights reserved.

Dfinition de contraintes La diapositive donne la syntaxe pour dfinir des contraintes lors de la cration d'une table. Vous pouvez crer des contraintes au niveau de la colonne soit ou niveau de la table. Contraintes dfinies au niveau de la colonne sont rajouts lorsque la colonne est dfinie. Tableau niveau contraintes sont dfinies la fin de la dfinition de la table et doit se rfrer la ou les colonnes sur lesquelles la contrainte se rapporte un ensemble de parenthses. C'est surtout la syntaxe qui diffrencie les deux, sinon, fonctionnellement, une contrainte de colonne est la mme que celle d'une contrainte au niveau des tables. Les contraintes NOT NULL doit tre dfinie au niveau de la colonne. Les contraintes qui s'appliquent plus d'une colonne doit tre dfinie au niveau de la table. Dans la syntaxe: schma est le mme que le nom du propritaire table est le nom de la table Expr DEFAULT Spcifie une valeur par dfaut utiliser si une valeur est omise dans l'instruction INSERT colonne est le nom de la colonne type de donnes est de type donnes de la colonne et la longueur column_constraint est une contrainte d'intgrit dans le cadre de la dfinition de la colonne contrainte_table est une contrainte d'intgrit dans le cadre de la dfinition de la table

Oracle Database 11g: SQL Fundamentals I 10 - 362

Dfinition de contraintes
Exemple d'une contrainte de niveau colonne:
CREATE TABLE employees( employee_id NUMBER(6) CONSTRAINT emp_emp_id_pk PRIMARY KEY, first_name VARCHAR2(20), ...);

Exemple d'une contrainte de niveau table :


CREATE TABLE employees( employee_id NUMBER(6), first_name VARCHAR2(20), ... job_id VARCHAR2(10) NOT NULL, CONSTRAINT emp_emp_id_pk PRIMARY KEY (EMPLOYEE_ID));

1 - 363

Copyright 2007, Oracle. All rights reserved.

Dfinition de contraintes (suite) Contraintes sont gnralement crs en mme temps que la table. Contraintes peuvent tre ajouts une table aprs sa cration et tre temporairement dsactivs. Les deux exemples dans le diaporama crer une contrainte de cl primaire sur la colonne de la table employe_id EMPLOYS. 1. Le premier exemple utilise la syntaxe au niveau des colonnes pour dfinir la contrainte. 2. Le deuxime exemple utilise la syntaxe niveau de la table pour dfinir la contrainte. Plus de dtails au sujet de la contrainte de cl primaire sont fournies plus loin dans cette leon.

Oracle Database 11g: SQL Fundamentals I 10 - 363

Contrainte NOT NULL


Veiller ce que les valeurs NULL ne sont pas autorises pour la colonne:

NOT NULL constraint (Primary Key enforces NOT NULL constraint.) NOT NULL constraint L'absence de contrainte NOT NULL (Toute ligne peut contenir une valeur NULL pour cette colonne.)

1 - 364

Copyright 2007, Oracle. All rights reserved.

Contrainte NOT NULL La contrainte NOT NULL garantit que la colonne ne contient pas de valeurs NULL. Colonnes sans la contrainte NOT NULL peut contenir des valeurs NULL par dfaut. Les contraintes NOT NULL doit tre dfinie au niveau de la colonne. Dans le tableau EMPLOYS, la colonne employe_id hrite d'une contrainte NOT NULL comme il est dfini comme cl primaire. Dans le cas contraire, le LAST_NAME, EMAIL, hire_date, et les colonnes job_id avoir la contrainte NOT NULL appliques sur eux. Remarque: Contrainte de cl primaire est discut en dtail plus loin dans cette leon

Oracle Database 11g: SQL Fundamentals I 10 - 364

Contrainte UNIQUE

EMPLOYEES

UNIQUE constraint

INSERT INTO

Allowed Not allowed: already exists

1 - 365

Copyright 2007, Oracle. All rights reserved.

Contrainte UNIQUE Une contrainte d'intgrit de cl unique exige que chaque valeur dans une colonne ou un ensemble de colonnes (cl) tre unique-qui est, il n'ya pas deux lignes d'une table peut avoir des valeurs en double dans une colonne ou un ensemble de colonnes. La colonne (ou un ensemble de colonnes) inclus dans la dfinition de la contrainte de cl unique est appel la cl unique. Si la contrainte UNIQUE comprend plus d'une colonne, ce groupe de colonnes qu'on appelle une cl composite unique. Contraintes UNIQUE permettre l'entre des valeurs NULL sauf si vous dfinissez galement des contraintes NOT NULL pour les colonnes mmes. En fait, un nombre quelconque de lignes peuvent inclure des zros pour les colonnes sans les contraintes NOT NULL parce que NULL ne sont pas considres comme gales rien. Une valeur null dans une colonne (ou dans toutes les colonnes d'une cl composite UNIQUE) satisfait toujours une contrainte UNIQUE. Remarque: En raison du mcanisme de recherche des contraintes UNIQUE sur plus d'une colonne, vous ne pouvez pas avoir des valeurs identiques dans les colonnes non nulles d'une partie nulle contrainte UNIQUE cl composite

Oracle Database 11g: SQL Fundamentals I 10 - 365

Contrainte UNIQUE
Dfini soit au niveau de la table ou le niveau de la colonne :
CREATE TABLE employees( employee_id NUMBER(6), last_name VARCHAR2(25) NOT NULL, email VARCHAR2(25), salary NUMBER(8,2), commission_pct NUMBER(2,2), hire_date DATE NOT NULL, ... CONSTRAINT emp_email_uk UNIQUE(email));

1 - 366

Copyright 2007, Oracle. All rights reserved.

Contrainte UNIQUE (suite) Contraintes UNIQUE peuvent tre dfinies au niveau de la colonne ou de la table. Vous dfinissez la contrainte au niveau de la table lorsque vous voulez crer une cl composite unique. Une cl composite est dfinie quand il n'y a pas un seul attribut qui peut identifier de manire unique une ligne. Dans ce cas, vous pouvez avoir une cl unique qui est compos de deux ou plusieurs colonnes, la valeur combine de ce qui est toujours unique et permet d'identifier les lignes. L'exemple de la diapositive s'applique la contrainte UNIQUE sur la colonne de la table EMAIL PERSONNEL. Le nom de la contrainte est EMP_EMAIL_UK. Remarque: Le serveur Oracle applique la contrainte UNIQUE par crer implicitement un index unique sur la colonne cl unique ou colonnes.

Oracle Database 11g: SQL Fundamentals I 10 - 366

Contrainte PRIMARY KEY

DEPARTMENTS

PRIMARY KEY

Not allowed (null value)

INSERT INTO

Not allowed (50 already exists)


1 - 367 Copyright 2007, Oracle. All rights reserved.

Contrainte de cl primaire Une contrainte PRIMARY KEY cre une cl primaire de la table. Seule une cl primaire peut tre cr pour chaque table. La contrainte PRIMARY KEY est une colonne ou un ensemble de colonnes qui identifie de faon unique chaque ligne d'une table. Cette contrainte impose l'unicit de la combinaison de colonnes ou de la colonne et assure qu'aucune colonne qui fait partie de la cl primaire peut contenir une valeur nulle. Remarque: En raison unique fait partie de la dfinition de la contrainte de cl primaire, le serveur Oracle renforce le caractre unique de crer implicitement un index unique sur la colonne de cl primaire et les colonnes.

Oracle Database 11g: SQL Fundamentals I 10 - 367

Contrainte FOREIGN KEY


DEPARTMENTS
PRIMARY KEY

EMPLOYEES
FOREIGN KEY

INSERT INTO

Not allowed (9 does not exist) Allowed

1 - 368

Copyright 2007, Oracle. All rights reserved.

Contrainte de cl trangre La FOREIGN KEY (ou l'intgrit rfrentielle) contrainte dsigne une colonne ou une combinaison de colonnes comme cl trangre et tablit une relation avec une cl primaire ou une cl unique dans le mme tableau ou une table diffrente. Dans l'exemple de la diapositive, DEPARTMENT_ID a t dfinie comme la cl trangre dans la table EMPLOYES (tableau ou enfant charge); elle fait rfrence la colonne de la table DEPARTMENT_ID DPARTEMENTS (la table rfrence ou parent). directives Une valeur de cl trangre doit correspondre une valeur existante dans la table parent ou tre NULL. Les cls trangres sont bass sur les valeurs de donnes et sont purement logique, plutt que physiques, les pointeurs.

Oracle Database 11g: SQL Fundamentals I 10 - 368

Contrainte FOREIGN KEY


Dfini soit au niveau de la table ou le niveau de la colonne:
CREATE TABLE employees( employee_id NUMBER(6), last_name VARCHAR2(25) NOT NULL, email VARCHAR2(25), salary NUMBER(8,2), commission_pct NUMBER(2,2), hire_date DATE NOT NULL, ... department_id NUMBER(4), CONSTRAINT emp_dept_fk FOREIGN KEY (department_id) REFERENCES departments(department_id), CONSTRAINT emp_email_uk UNIQUE(email));

1 - 369

Copyright 2007, Oracle. All rights reserved.

Contrainte de cl trangre (suite) Les contraintes FOREIGN KEY peuvent tre dfinis au niveau de contrainte de colonne ou de table. Une cl composite trangre doit tre cr en utilisant la dfinition au niveau des tables. L'exemple de la diapositive dfinit une contrainte FOREIGN KEY sur la colonne DEPARTMENT_ID de la table EMPLOYES, l'aide de table niveau de la syntaxe. Le nom de la contrainte est EMP_DEPT_FK. La cl trangre peut galement tre dfini au niveau de la colonne, condition que la contrainte est bas sur une seule colonne. La syntaxe diffre en ce que le KEY mots-cls trangres ne s'affiche pas. par exemple :
CREATE TABLE employees (... department_id NUMBER(4) CONSTRAINT emp_deptid_fk REFERENCES departments(department_id), ... )

Oracle Database 11g: SQL Fundamentals I 10 - 369

Contrainte de cl trangre: Mots-cls


FOREIGN KEY: Dfinit la colonne dans la table enfant au niveau de la tablecontrainte RFRENCES: Identifie la table et de la colonne dans la table parent ON DELETE CASCADE: Supprime les lignes dpendantes dans la table enfant quand une ligne dans la table parente est supprime ON DELETE SET NULL: Convertit dpendantes valeurs de cl trangre null

1 - 370

Copyright 2007, Oracle. All rights reserved.

Contrainte de cl trangre: Mots-cls La cl trangre est dfinie dans la table enfant et la table contenant la colonne rfrence est la table parent. La cl trangre est dfinie en utilisant une combinaison de mots cls suivants: FOREIGN KEY est utilis pour dfinir la colonne dans la table enfant au niveau de la tablecontrainte. REFERENCES identifie la table et la colonne dans la table parente. ON DELETE CASCADE indique que quand une ligne dans la table parent est supprim, les lignes dpendantes dans la table enfant sont galement supprims. ON DELETE SET NULL indique que quand une ligne dans la table parent est supprim, les valeurs de cl trangre sont dfinies sur null. Le comportement par dfaut est appele la rgle de restreindre, qui interdit la mise jour ou la suppression de donnes rfrences. Sans la clause ON DELETE CASCADE ou ON DELETE SET NULL options de la ligne de la table parent ne peut pas tre supprime si elle est rfrence dans la table enfant.

Oracle Database 11g: SQL Fundamentals I 10 - 370

Contrainte CHECK
Dfinit une condition que chaque ligne doit satisfaire Les expressions suivantes ne sont pas autorises:
Les rfrences CURRVAL, NEXTVAL, LEVEL et ROWNUM pseudocolonnes Les appels SYSDATE, UID, USER et fonctions USERENV Les requtes qui font rfrence d'autres valeurs dans d'autres lignes
..., salary NUMBER(2) CONSTRAINT emp_salary_min CHECK (salary > 0),...

1 - 371

Copyright 2007, Oracle. All rights reserved.

CHECK contrainte La contrainte CHECK dfinit une condition que chaque ligne doit satisfaire. La condition peut utiliser les mmes constructions comme les conditions de la requte, avec les exceptions suivantes: Les rfrences la CURRVAL, NEXTVAL, LEVEL et pseudocolonnes rownum Les appels SYSDATE, UID, USER et fonctions USERENV Les requtes qui font rfrence d'autres valeurs dans d'autres lignes Une colonne unique peut avoir plusieurs contraintes CHECK qui se rfrent la colonne dans sa dfinition. Il n'y a pas de limite au nombre de contraintes CHECK que vous pouvez dfinir sur une colonne. Contraintes CHECK peuvent tre dfinies au niveau de la colonne ou de la table.
CREATE TABLE employees (... salary NUMBER(8,2) CONSTRAINT emp_salary_min CHECK (salary > 0), ...

Oracle Database 11g: SQL Fundamentals I 10 - 371

CREATE TABLE: Exemple


CREATE TABLE employees ( employee_id NUMBER(6) CONSTRAINT emp_employee_id PRIMARY KEY , first_name VARCHAR2(20) , last_name VARCHAR2(25) CONSTRAINT emp_last_name_nn NOT NULL , email VARCHAR2(25) CONSTRAINT emp_email_nn NOT NULL CONSTRAINT emp_email_uk UNIQUE , phone_number VARCHAR2(20) , hire_date DATE CONSTRAINT emp_hire_date_nn NOT NULL , job_id VARCHAR2(10) CONSTRAINT emp_job_nn NOT NULL , salary NUMBER(8,2) CONSTRAINT emp_salary_ck CHECK (salary>0) , commission_pct NUMBER(2,2) , manager_id NUMBER(6) CONSTRAINT emp_manager_fk REFERENCES employees (employee_id) , department_id NUMBER(4) CONSTRAINT emp_dept_fk REFERENCES departments (department_id));

1 - 372

Copyright 2007, Oracle. All rights reserved.

CREATE TABLE: Exemple L'exemple de la diapositive indique l'instruction qui est utilis pour crer la table Employees dans le schma HR.

Oracle Database 11g: SQL Fundamentals I 10 - 372

Violation de Contraintes

UPDATE employees SET department_id = 55 WHERE department_id = 110;

Department 55 does not exist.

1 - 373

Copyright 2007, Oracle. All rights reserved.

Contraintes violant Lorsque vous avez des contraintes en place sur les colonnes, une erreur est retourne si vous essayez de violer la rgle de contrainte. Par exemple, si vous essayez de mettre jour un enregistrement avec une valeur qui est lie une contrainte d'intgrit, une erreur est retourne. Dans l'exemple de la diapositive, dpartement 55 ne figure pas dans la table parent, les ministres, et pour que vous receviez la cl parent introuvable" ORA-02291 violation.

Oracle Database 11g: SQL Fundamentals I 10 - 373

Violation de Contraintes
Vous ne pouvez pas supprimer une ligne qui contient une cl primaire qui est utilise en tant que cl trangre dans une autre table.
DELETE FROM departments WHERE department_id = 60;

1 - 374

Copyright 2007, Oracle. All rights reserved.

Contraintes violent (suite) Si vous essayez de supprimer un enregistrement avec une valeur qui est lie une contrainte d'intgrit, une erreur est retourne. L'exemple de la diapositive tente de supprimer dpartement 60 partir de la table Departments, mais il en rsulte une erreur parce que le numro de dpartement est utilis comme une cl trangre dans la table EMPLOYEES. Si l'enregistrement parent que vous tentez de supprimer les enregistrements enfants a, ensuite vous recevez le "dossier de l'enfant trouv" ORA-02292 violation. L'instruction suivante fonctionne parce qu'il n'y a pas de salaris dpartement 70 :
DELETE FROM departments WHERE department_id = 70;

Oracle Database 11g: SQL Fundamentals I 10 - 374

Lesson Agenda
objets de base de donnes
rgles de nommage

CREATE TABLE:
Accder aux tables d'un autre utilisateur option par dfaut

Les types de donnes Vue d'ensemble des contraintes: NOT NULL, PRIMARY KEY, FOREIGN KEY, CHECK Cration d'une table en utilisant une sous-requte ALTER TABLE
Tables en lecture seule

L'instruction DROP TABLE

1 - 375

Copyright 2007, Oracle. All rights reserved.

Oracle Database 11g: SQL Fundamentals I 10 - 375

Cration d'un tableau l'aide d'une sous-requte


Crez des lignes de table et insert en combinant l'instruction CREATE TABLE et l'option sous-requte AS.
CREATE TABLE table [(column, column...)] AS subquery;

Correspondre au nombre de colonnes spcifies au nombre de colonnes de sous-requtes. Dfinir des colonnes avec les noms de colonnes et les valeurs par dfaut.

1 - 376

Copyright 2007, Oracle. All rights reserved.

Cration d'un tableau l'aide d'une sous-requte Une seconde mthode pour crer un tableau est d'appliquer la clause AS sous-requte, qui la fois cre la table et insre des lignes renvoyes par la sous-requte. Dans la syntaxe: table est le nom de la table colonne est le nom de la colonne, la valeur par dfaut, et contrainte d'intgrit sous-requte est l'instruction SELECT qui dfinit l'ensemble des lignes insrer dans la nouvelle table directives Le tableau est cr avec les noms de colonnes spcifis, et les lignes rcupres par l'instruction SELECT sont insres dans la table. La dfinition de la colonne peut contenir seulement le nom de la colonne et la valeur par dfaut. Si les spcifications de colonne sont donns, le nombre de colonnes doit correspondre au nombre de colonnes dans la liste des sous-requte SELECT. Si aucune spcification de colonne sont donns, les noms des colonnes de la table sont les mmes que les noms de colonnes dans la sous-requte. Les dfinitions de colonnes de type de donnes et la contrainte NOT NULL est pass la nouvelle table. Notez que seule la contrainte NOT NULL explicite sera hrit. La colonne PRIMARY KEY ne passera pas la fonction NOT NULL la nouvelle colonne. Toutes les autres rgles de contrainte ne sont pas transmises la nouvelle table. Cependant, vous pouvez ajouter des contraintes dans la dfinition de la colonne.
Oracle Database 11g: SQL Fundamentals I 10 - 376

Cration d'un tableau l'aide d'une sous-requte

CREATE TABLE dept80 AS SELECT employee_id, last_name, salary*12 ANNSAL, hire_date FROM employees WHERE department_id = 80;

DESCRIBE dept80

1 - 377

Copyright 2007, Oracle. All rights reserved.

Cration d'un tableau l'aide d'une sous-requte (suite) L'exemple de la diapositive cre une table nomme DEPT80, qui contient les dtails de tous les employs travaillant dans le dpartement 80. Notez que les donnes de la table DEPT80 proviennent de la table EMPLOYS. Vous pouvez vrifier l'existence d'une table de base de donnes et vrifier les dfinitions de colonnes l'aide de la commande DESCRIBE. Cependant, assurez-vous de fournir un alias de colonne lors de la slection d'une expression. Le SALAIRE * 12 expression est donne l'alias ANNSAL. Sans l'alias, l'erreur suivante est gnre :

Oracle Database 11g: SQL Fundamentals I 10 - 377

Lesson Agenda
objets de base de donnes
rgles de nommage

CREATE TABLE:
Accder aux tables d'un autre utilisateur option par dfaut

Les types de donnes Vue d'ensemble des contraintes: NOT NULL, PRIMARY KEY, FOREIGN KEY, CHECK Cration d'une table en utilisant une sous-requte ALTER TABLE
Tables en lecture seule

L'instruction DROP TABLE

1 - 378

Copyright 2007, Oracle. All rights reserved.

Oracle Database 11g: SQL Fundamentals I 10 - 378

ALTER TABLE
Utilisez l'instruction ALTER TABLE pour: Ajouter une nouvelle colonne Modifier une dfinition de colonne existant Dfinir une valeur par dfaut de la nouvelle colonne Supprimer une colonne Renommer une colonne Changer le tableau de statut de lecture seule

1 - 379

Copyright 2007, Oracle. All rights reserved.

ALTER TABLE Aprs avoir cr un tableau, vous devrez peut-tre modifier la structure de la table pour l'une des raisons suivantes: Vous avez omis une colonne. Votre dfinition de colonne ou de son nom doit tre chang. Vous devez supprimer des colonnes. Vous voulez mettre la table en mode lecture seule Vous pouvez le faire en utilisant l'instruction ALTER TABLE.

Oracle Database 11g: SQL Fundamentals I 10 - 379

Tables en lecture seule


Utilisez la syntaxe ALTER TABLE pour mettre une table en mode lecture seule: Empche les modifications DDL ou DML lors de l'entretien des tables Changez-le de nouveau dans mode lecture / criture
ALTER TABLE employees READ ONLY; -- perform table maintenance and then -- return table back to read/write mode ALTER TABLE employees READ WRITE;

1 - 380

Copyright 2007, Oracle. All rights reserved.

Tables en lecture seule Avec Oracle Database 11g, vous pouvez spcifier READ ONLY pour placer une table en mode lecture seule. Lorsque la table est en mode lecture seule, vous ne pouvez pas mettre des instructions DML qui influent sur la table ou toute requte SELECT ... POUR UPDATE. Vous pouvez excuter des instructions DDL tant qu'ils ne modifient pas les donnes dans la table. Les oprations sur les index associs la table sont autoriss lorsque la table est en mode lecture seule. Spcifiez READ / WRITE pour retourner une table en lecture seule au mode lecture / criture. Remarque: Vous pouvez supprimer une table qui est en mode lecture seule. La commande DROP est excut uniquement dans le dictionnaire de donnes, afin d'accder au contenu de table n'est pas ncessaire. L'espace utilis par la table ne sera pas rcupre jusqu' ce que le tablespace est mis en lecture / criture nouveau, puis les changements ncessaires peuvent tre prises pour les en-ttes de segment de bloc, et ainsi de suite. Pour plus d'informations propos de l'instruction ALTER TABLE, consultez le cours intitul Oracle Database 10g SQL Fundamentals II.

Oracle Database 11g: SQL Fundamentals I 10 - 380

Lesson Agenda
objets de base de donnes
rgles de nommage

CREATE TABLE:
Accder aux tables d'un autre utilisateur option par dfaut

Les types de donnes Vue d'ensemble des contraintes: NOT NULL, PRIMARY KEY, FOREIGN KEY, CHECK Cration d'une table en utilisant une sous-requte ALTER TABLE
Tables en lecture seule

L'instruction DROP TABLE

1 - 381

Copyright 2007, Oracle. All rights reserved.

Oracle Database 11g: SQL Fundamentals I 10 - 381

Supprimer une table


Dplace une table dans la corbeille Supprime la table et toutes ses donnes entirement si la clause PURGE est spcifi Invalider les objets dpendants et supprime les privilges d'objet sur la table
DROP TABLE dept80;

1 - 382

Copyright 2007, Oracle. All rights reserved.

Supprimer une table L'instruction DROP TABLE dplace une table dans la corbeille ou de supprimer la table et toutes ses donnes de la base de donnes entirement. Sauf si vous spcifiez la clause PURGE, l'instruction DROP TABLE ne rsulte pas dans l'espace tant remis l'espace de table pour une utilisation par d'autres objets, et l'espace continue de compter vers quota d'espace de l'utilisateur. Suppression d'une table invalide les objets dpendants et supprime les privilges d'objets sur la table. Lorsque vous supprimez une table, la base de donnes perd toutes les donnes de la table et tous les index associs? Avec elle. syntaxe DROP TABLE table [PURGE] Dans la syntaxe, la table est le nom de la table. directives Toutes les donnes sont supprimes de la table. Les points de vue et synonymes demeurent, mais ne sont pas valides. Toutes les transactions en attente sont engags. Seul le crateur de la table ou un utilisateur disposant du privilge DROP ANY TABLE pouvez supprimer une table. Remarque: Utilisez l'instruction CREATE TABLE FLASHBACK pour restaurer une table supprime de la corbeille. Cette question est examine en dtail dans le cours intitul Oracle Database 11g: SQL Fundamentals II.

Oracle Database 11g: SQL Fundamentals I 10 - 382

Rsum
Dans cette leon, vous devriez avoir appris comment utiliser l'instruction CREATE TABLE pour crer une table et inclure des contraintes: Catgoriser les objets de base de donnes principaux Revoir la structure de la table Dressez la liste des types de donnes qui sont disponibles pour les colonnes Crer un tableau simple Expliquer comment les contraintes sont cres au moment de la cration de la table Dcrivez comment fonctionnent les objets de schma

1 - 383

Copyright 2007, Oracle. All rights reserved.

rsum Dans cette leon, vous devriez avoir appris effectuer les oprations suivantes: CREATE TABLE Utilisez l'instruction CREATE TABLE pour crer une table et inclure des contraintes. Crer une table partir d'une autre table l'aide d'une sous-requte. DROP TABLE Supprimer des lignes et une structure de table. Lorsqu'il est excut, cette dclaration ne peut pas tre annule.

Oracle Database 11g: SQL Fundamentals I 10 - 383

Pratique 10
Cette pratique couvre les sujets suivants: Cration de nouvelles tables Cration d'une nouvelle table en utilisant la syntaxe CREATE TABLE AS Vrifier que les tables existent Dfinition d'un tableau de statut de lecture seule Suppression des tables

1 - 384

Copyright 2007, Oracle. All rights reserved.

Pratique 10: Vue d'ensemble Crer de nouvelles tables l'aide de l'instruction CREATE TABLE. Assurez-vous que la nouvelle table a t ajout la base de donnes. Vous apprendrez galement dfinir le statut d'une table en lecture seule, puis revenir en lecture / criture. Note: Pour toutes les instructions DDL et DML, cliquez sur l'icne Excuter le script (ou appuyez sur [F5]) pour excuter la requte dans SQL Developer. De cette faon, vous obtenez de voir les messages de rtroaction sur la page de l'onglet Script de sortie. Pour les requtes SELECT, continuez cliquer sur l'icne Dclaration Excuter ou appuyez sur [F9] pour obtenir la sortie formate sur l'onglet Rsultats.

Oracle Database 11g: SQL Fundamentals I 10 - 384

Exercice10 1. Crez la table DEPT bas sur le tableau par exemple tableau ci-dessous. Enregistrer l'instruction dans un script appel lab_10_01.sql, puis excutez l'instruction dans le script pour crer la table. Assurez-vous que la table est cre.
Column Name Key Type Nulls/Unique FK Table FK Column Data type Length NUMBER 7 VARCHAR2 25 ID Primary key NAME

2. Remplissez la table DEPT avec les donnes de la table Departments. Inclure uniquement les colonnes dont vous avez besoin. 3. Crez la table EMP base sur la carte par exemple tableau ci-dessous. Enregistrer l'nonc? Lab_10_03.sql un script appel, puis excutez l'instruction dans le script pour crer la table. Assurez-vous que la table est cre.

Column Name ID Key Type Nulls/Unique FK Table FK Column Data type Length NUMBER 7

LAST_NAME

FIRST_NAME

DEPT_ID

DEPT ID VARCHAR2 25 VARCHAR2 25 NUMBER 7

Oracle Database 11g: SQL Fundamentals I 10 - 385

Exercice 10 (suite) 4. Crez la table Employs2 bas sur la structure de la table EMPLOYS. Inclure seulement la employe_id, FIRST_NAME, LAST_NAME, SALAIRE, et les colonnes departement_id. Nommez les colonnes de votre ID nouvelle table, first_name, last_name, SALAIRE, et dept_id, respectivement. 5. Modifier le statut tableau Employs2 en lecture seule. 6. Essayez d'insrer la ligne suivante dans le tableau Employs2:

ID 34

FIRST_NAME Grant

LAST_NAME Marcie

SALARY 5678

DEPT_ID 10

Vous obtenez le message d'erreur suivant:

7. Rtablir la table Employs2 la lecture / criture. Maintenant, essayez d'insrer nouveau sur la mme ligne. Vous devriez obtenir les messages suivants:

8. Supprimez la table Employs2.

Oracle Database 11g: SQL Fundamentals I 10 - 386

Cration d autres objets de schma

1 - 387

Copyright 2007, Oracle. All rights reserved.

Objectifs
Aprs avoir termin cette leon, vous devriez tre en mesure de faire ce qui suit: Crer des vues simples et complexes Rcuprer des donnes partir de vues Crer, entretenir et utiliser des squences Crer et grer des index Crer des synonymes publics et privs

1 - 388

Copyright 2007, Oracle. All rights reserved.

objectifs Dans cette leon, vous serez initi la vue, squence, synonyme, et les objets d'index. On vous apprend les bases de la cration et de l'utilisation des vues, des squences et des index.

Oracle Database 11g: SQL Fundamentals I 11 - 388

Lesson Agenda
Vue d'ensemble de vue:
Cration, modification et rcuprer des donnes partir d'une vue La manipulation des donnes de langue (DML) sur une vue Suppression d'une vue

Vue d'ensemble des squences:


Crer, d'utiliser et de modifier une squence Valeurs de squence de cache pseudo-colonnes nextval et CURRVAL

Vue d'ensemble des index


Cration, suppression des index

Aperu des synonymes


Cration, supression synonymes
1 - 389 Copyright 2007, Oracle. All rights reserved.

Oracle Database 11g: SQL Fundamentals I 11 - 389

Objets de base de donnes

Object Table View Sequence Index Synonym

Description
Unit de base de stockage; compos de lignes Reprsente logiquement des sous-ensembles de donnes d'une ou de plusieurs tables

Gnre des valeurs numriques Amliore les performances des requtes d'extraction de donnes Donne d'autres noms des objets

1 - 390

Copyright 2007, Oracle. All rights reserved.

Objets de base de donnes Il ya plusieurs autres objets dans une base de donnes en plus des tables. Dans cette leon, vous apprendrez les vues, les squences, les index et les synonymes. Avec une vue, vous pouvez prsenter et de cacher les donnes des tables. De nombreuses applications ncessitent l'utilisation de numros uniques comme valeurs de cl primaire. Vous pouvez soit compiler le code dans l'application pour grer cette exigence ou d'utiliser une squence de gnrer des numros uniques. Si vous voulez amliorer les performances des requtes d'extraction de donnes, vous devriez envisager la cration d'un index. Vous pouvez galement utiliser des index pour garantir l'unicit d'une colonne ou un ensemble de colonnes. Vous pouvez fournir des noms alternatifs pour les objets en utilisant des synonymes.

Oracle Database 11g: SQL Fundamentals I 11 - 390

Qu'est-ce qu'une vue?


EMPLOYEES table

1 - 391

Copyright 2007, Oracle. All rights reserved.

Qu'est-ce qu'une vue? Vous pouvez prsenter des sous-ensembles logiques ou des combinaisons de donnes en crant des points de vue des tableaux. Une vue est une table logique bas sur une table ou d'un autre point de vue. Une vue contient pas de donnes qui lui sont propres, mais c'est comme une fentre travers laquelle des donnes provenant de tables peuvent tre affiches ou modifies. Les tables sur lesquelles se fonde une vue sont appels tables de base. La vue est stocke comme une instruction SELECT dans le dictionnaire de donnes.

Oracle Database 11g: SQL Fundamentals I 11 - 391

Avantages des vues

Pour restreindre d'accs aux donnes

Pour faire des requtes complexes facile

Pour assurer l'indpendanc e des donnes

Pour prsenter diffrentes vues des mmes donnes

1 - 392

Copyright 2007, Oracle. All rights reserved.

Avantages des vues Restreindre l'accs aux points de vue les donnes car il affiche les colonnes slectionnes partir de la table. Les vues peuvent tre utilises pour effectuer des requtes simples pour rcuprer les rsultats de requtes complexes. Par exemple, les vues peuvent tre utiliss pour demander des informations provenant de plusieurs tables sans que l'utilisateur de savoir comment crire une instruction de jointure. Vues assurer l'indpendance des donnes pour les utilisateurs et programmes ad hoc de l'application. Une vue peut tre utilise pour rcuprer les donnes de plusieurs tables. Vues fournir aux groupes d'utilisateurs l'accs aux donnes en fonction de leurs critres particuliers. Pour plus d'informations, reportez-vous la section CREATE VIEW" dans la base de donnes Oracle 11g Langage SQL Reference, Release 1 (11.1).

Oracle Database 11g: SQL Fundamentals I 11 - 392

Vues simples et complexes Vues

Feature Nombre des tables

Simple Views One

Complex Views One or more Yes Yes Not always

contiennent des fonctions No contiennent de groups de donnes Oprations DML via une vue No Yes

1 - 393

Copyright 2007, Oracle. All rights reserved.

Vues simples et complexes Vues Il existe deux classifications pour les vues: simples et complexes. La diffrence fondamentale est lie aux oprations DML (INSERT, UPDATE et DELETE). Une vue simple est celle qui: Obtient des donnes partir d'une seule table Ne contient pas de fonctions ou groupes de donnes Pouvez effectuer des oprations DML dans la vue Une vue complexe est celle qui: Obtient des donnes de plusieurs tables Contient des fonctions ou groupes de donnes Ne permet pas toujours oprations DML dans la vue

Oracle Database 11g: SQL Fundamentals I 11 - 393

Creation de Vue
Vous pouvez incorporer une sous-requte dans l'instruction CREATE VIEW:
CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW view [(alias[, alias]...)] AS subquery [WITH CHECK OPTION [CONSTRAINT constraint]] [WITH READ ONLY [CONSTRAINT constraint]];

La sous-requte peut contenir complexe syntaxe SELECT.

1 - 394

Copyright 2007, Oracle. All rights reserved.

Cration d'une vue Vous pouvez crer une vue en intgrant une sous-requte dans l'instruction CREATE VIEW. Dans la syntaxe: OR REPLACE Re-cre la vue si elle existe dj FORCE Cre la vue indpendamment de si oui ou non les tables de base existent Noforce Cre la vue que si les tables de base existent (c'est la valeur par dfaut.) vue est le nom de la vue Spcifie les noms d'alias pour les expressions slectionnes par la requte de la vue (Le nombre d'alias doit correspondre au nombre d'expressions choisies par la vue.) sous-requte est une instruction SELECT complte (Vous pouvez utiliser des alias pour les colonnes de la liste SELECT.) WITH CHECK OPTION Indique que seules les lignes qui sont accessibles la vue peut tre insr ou mis jour contrainte est le nom attribu la contrainte CHECK OPTION WITH READ ONLY assure qu'aucune opration DML peut tre ralise sur ce point de vue Remarque: Dans SQL Developer, cliquez sur l'icne Excuter le script ou appuyez sur [F5] pour excuter le langage de dfinition de donnes (DDL). Les messages de rtroaction seront affichs sur la page Script de sortie onglets.

Oracle Database 11g: SQL Fundamentals I 11 - 394

Creation de Vue
Cration de la vue EMPVU80, qui contient des dtails sur les employs du service 80:
CREATE VIEW empvu80 AS SELECT employee_id, last_name, salary FROM employees WHERE department_id = 80;

Dcrire la structure de la vue en utilisant le iSQL * Plus commande DESCRIBE :


DESCRIBE empvu80

1 - 395

Copyright 2007, Oracle. All rights reserved.

Cration d'une vue (suite) L'exemple de la diapositive cre une vue qui contient le numro d'employ, nom de famille, et le salaire de chaque employ dans le dpartement 80. Vous pouvez afficher la structure de la vue l'aide de la commande DESCRIBE.

directives La sous-requte qui dfinit une vue peut contenir complexe syntaxe SELECT, y compris les jointures, les groupes et les sous-requtes. Si vous ne spcifiez pas un nom de contrainte pour la vue cre avec la clause WITH CHECK OPTION, le systme attribue un nom par dfaut dans le format SYS_Cn. Vous pouvez utiliser l'OR REPLACE option pour changer la dfinition de la vue sans laisser tomber et de recrer, ou les privilges objet restitution du antrieurement accorde sur l'.

Oracle Database 11g: SQL Fundamentals I 11 - 395

Creation de Vue
Cration d'une vue en utilisant des alias de colonne dans la sous-requte:
CREATE VIEW salvu50 AS SELECT employee_id ID_NUMBER, last_name NAME, salary*12 ANN_SALARY FROM employees WHERE department_id = 50;

Slectionnez les colonnes de ce point de vue par les noms d'alias donns.

1 - 396

Copyright 2007, Oracle. All rights reserved.

Cration d'une vue (suite) Vous pouvez contrler les noms de colonnes en incluant les alias de colonnes dans la sous-requte. L'exemple de la diapositive cre une vue contenant le numro d'employ (employe_id) avec le ID_Number alias, le nom (LAST_NAME) avec le nom de l'alias, et le salaire annuel (SALAIRE) avec le ANN_SALARY alias pour chaque employ dans le dpartement 50. Alternativement, vous pouvez utiliser un alias aprs l'instruction CREATE et avant la sousrequte SELECT. Le nombre d'alias figurant doit correspondre au nombre d'expressions slectionn dans la sous-requte.
CREATE OR REPLACE VIEW salvu50 (ID_NUMBER, NAME, ANN_SALARY) AS SELECT employee_id, last_name, salary*12 FROM employees WHERE department_id = 50;

Oracle Database 11g: SQL Fundamentals I 11 - 396

Rcupration de donnes partir d'une vue

SELECT * FROM salvu50;

1 - 397

Copyright 2007, Oracle. All rights reserved.

Rcupration de donnes partir d'une vue Vous pouvez rcuprer des donnes partir d'une vue comme vous le feriez partir de n'importe quelle table. Vous pouvez afficher soit le contenu de la vue entire ou simplement des lignes et des colonnes spcifiques.

Oracle Database 11g: SQL Fundamentals I 11 - 397

Modification d'une vue


Modifiez la vue EMPVU80 en utilisant une clause CREATE OR REPLACE VIEW. Ajouter un alias pour chaque nom de colonne:
CREATE OR REPLACE VIEW empvu80 (id_number, name, sal, department_id) AS SELECT employee_id, first_name || ' ' || last_name, salary, department_id FROM employees WHERE department_id = 80;

Alias de colonne dans la clause CREATE OR REPLACE VIEW sont numrs dans le mme ordre que les colonnes de la sous-requte.

1 - 398

Copyright 2007, Oracle. All rights reserved.

Modification d'une vue Avec l'option OR REPLACE, une vue peut tre cre mme s'il en existe dj avec ce nom, remplaant ainsi l'ancienne version de la vue pour son propritaire. Cela signifie que la vue peut tre modifi sans laisser tomber, de recrer, et restitution du privilges objet. Remarque: Lors de l'attribution des alias de colonne dans la clause CREATE OR REPLACE VIEW, rappelez-vous que les alias sont numrs dans le mme ordre que les colonnes de la sous-requte.

Oracle Database 11g: SQL Fundamentals I 11 - 398

Cration d'une vue complexe


Crer une vision complexe qui contient les fonctions de groupe pour afficher les valeurs de deux tables:
CREATE OR REPLACE VIEW dept_sum_vu (name, minsal, maxsal, avgsal) AS SELECT d.department_name, MIN(e.salary), MAX(e.salary),AVG(e.salary) FROM employees e JOIN departments d ON (e.department_id = d.department_id) GROUP BY d.department_name;

1 - 399

Copyright 2007, Oracle. All rights reserved.

Cration d'une vue complexe L'exemple de la diapositive cre une vision complexe des noms de dpartements, les salaires minimums, les salaires maximums, et les salaires moyens par dpartement. Notez que les noms alternatifs ont t dfinies pour la vue. Il s'agit d'une exigence si l'une des colonnes de la vue est drive d'une fonction ou une expression. Vous pouvez afficher la structure de la vue l'aide de la commande DESCRIBE. Afficher le contenu de la vue par l'mission d'une instruction SELECT.
SELECT FROM * dept_sum_vu;

Oracle Database 11g: SQL Fundamentals I 11 - 399

Rgles pour effectuer des oprations DML sur une vue


Vous pouvez gnralement effectuer des oprations DML sur? Vues simples. Vous ne pouvez pas supprimer une ligne si la vue contient les lments suivants:
les fonctions de groupe Une clause GROUP BY Le mot-cl DISTINCT Le mot-cl pseudocolumn ROWNUM

1 - 400

Copyright 2007, Oracle. All rights reserved.

Rgles pour effectuer des oprations DML sur une vue Vous pouvez effectuer des oprations DML sur des donnes grce une vision si ces oprations respectent certaines rgles. Vous pouvez supprimer une ligne de vue si elle ne contient aucun des lments suivants: les fonctions de groupe Une clause GROUP BY Le mot-cl DISTINCT Le mot-cl pseudocolumn ROWNUM

Oracle Database 11g: SQL Fundamentals I 11 - 400

Rgles pour effectuer des oprations DML sur une vue


You cannot modify data in a view if it contains: Group functions A GROUP BY clause The DISTINCT keyword The pseudocolumn ROWNUM keyword Columns defined by expressions

1 - 401

Copyright 2007, Oracle. All rights reserved.

Rgles pour effectuer des oprations DML sur une vue (suite) Vous pouvez modifier des donnes dans une vue si elle ne contient aucune des conditions mentionnes dans la diapositive prcdente ou colonnes dfinies par des expressions (par exemple, SALAIRE * 12).

Oracle Database 11g: SQL Fundamentals I 11 - 401

Rgles pour effectuer des oprations DML sur une vue


Vous ne pouvez pas ajouter des donnes travers une vue si la vue comprend: les fonctions de groupe Une clause GROUP BY Le mot-cl DISTINCT Le mot-cl pseudocolumn ROWNUM Colonnes dfinies par des expressions Colonnes NOT NULL dans les tables de base qui ne sont pas slectionns par la vue

1 - 402

Copyright 2007, Oracle. All rights reserved.

Rgles pour effectuer des oprations DML sur une vue (suite) Vous pouvez ajouter des donnes travers une vue si elle ne contient aucun des lments numrs dans la diapositive. Vous ne pouvez pas ajouter des donnes une vue si la vue contient des colonnes NOT NULL sans valeur par dfaut dans la table de base. Toutes les valeurs requises doivent tre prsents dans la vue. Rappelez-vous que vous ajoutez des valeurs directement la table sous-jacente de la vue. Pour plus d'informations, reportez-vous la section CREATE VIEW" dans Oracle Database 11g SQL Langage de rfrence, Release 1 (11.1).

Oracle Database 11g: SQL Fundamentals I 11 - 402

Utilisation de la clause WITH CHECK OPTION


Vous pouvez faire en sorte que les oprations DML effectues sur la vue rester dans le domaine de l'affichage l'aide de la clause WITH CHECK OPTION:
CREATE OR REPLACE VIEW empvu20 AS SELECT * FROM employees WHERE department_id = 20 WITH CHECK OPTION CONSTRAINT empvu20_ck ;

Toute tentative d'insrer une ligne avec un autre departement_id de 20, ou mettre jour le numro de dpartement pour chaque ligne dans la vue choue parce qu'il viole la contrainte WITH CHECK OPTION.

1 - 403

Copyright 2007, Oracle. All rights reserved.

Utilisation de la clause WITH CHECK OPTION Il est possible d'effectuer des vrifications d'intgrit rfrentielle travers des vues. Vous pouvez galement appliquer des contraintes au niveau de la base de donnes. La vue peut tre utilis pour protger l'intgrit des donnes, mais l'utilisation est trs limite. La clause WITH CHECK OPTION prcise que INSERT et UPDATE excutes par la vue ne peut pas crer des lignes que la vue ne peut pas choisir. Par consquent, il permet contraintes d'intgrit et de validation des donnes vrifie tre excute sur des donnes tant insres ou mises jour. Si l'on tente d'effectuer des oprations DML sur des lignes que l'opinion n'a pas choisis, une erreur s'affiche, avec le nom de la contrainte si cela a t spcifi.
UPDATE empvu20 SET department_id = 10 WHERE employee_id = 201;

causes:

Remarque: Aucune ligne sont mis jour parce que, si le numro de dpartement devait changer 10, le point de vue ne serait plus en mesure de voir cet employ. Avec la clause WITH CHECK OPTION, par consquent, le point de vue ne peut voir que les employs du service 20 et ne permet pas le numro de dpartement pour les employs modifier dans la vue.

Oracle Database 11g: SQL Fundamentals I 11 - 403

Operations DML non autorises


Vous pouvez vous assurer qu'aucune opration DML se produire en ajoutant la clause WITH READ ONLY possibilit votre dfinition de la vue. Toute tentative d'effectuer une opration DML sur une ligne dans les rsultats de la vue une erreur de serveur Oracle.

1 - 404

Copyright 2007, Oracle. All rights reserved.

DML Operations non autrises Vous pouvez vous assurer qu'aucune opration DML se produire sur votre point de vue en le crant avec l'LIRE AVEC seule option. L'exemple de la diapositive suivante modifie le point de vue EMPVU10 pour empcher toute utilisation DML sur la vue.

Oracle Database 11g: SQL Fundamentals I 11 - 404

Operations DML non autorises

CREATE OR REPLACE VIEW empvu10 (employee_number, employee_name, job_title) AS SELECT employee_id, last_name, job_id FROM employees WHERE department_id = 10 WITH READ ONLY ;

1 - 405

Copyright 2007, Oracle. All rights reserved.

DML Operations non autrises (suite) Toute tentative de supprimer une ligne de vue avec une contrainte rsulte en lecture seule dans une erreur:
DELETE FROM empvu10 WHERE employee_number = 200;

De mme, toute tentative d'insrer une ligne ou modifier une ligne l'aide de la vue avec une contrainte rsulte en lecture seule dans la mme erreur.

Oracle Database 11g: SQL Fundamentals I 11 - 405

Suppression d'une vue


Vous pouvez supprimer une vue sans perdre de donnes en raison d'un point de vue est bas sur des tables sous-jacentes dans la base de donnes.
DROP VIEW view; DROP VIEW empvu80;

1 - 406

Copyright 2007, Oracle. All rights reserved.

Suppression d'une vue Vous utilisez l'instruction DROP VIEW pour supprimer une vue. L'instruction supprime la dfinition de la vue partir de la base de donnes. Cependant, les opinions abandon n'a aucun effet sur les tables sur lesquelles l'opinion est fonde. D'autre part, les opinions ou d'autres applications bases sur les vues supprimes deviennent invalides. Seul le crateur ou un utilisateur disposant du privilge DROP ANY VIEW peut supprimer une vue. Dans la syntaxe: view est le nom de la vue

Oracle Database 11g: SQL Fundamentals I 11 - 406

Pratique 11 : Partie 1
Cette pratique couvre les sujets suivants: Cration d'une vue simple Cration d'une vue complexe Cration d'une vue une contrainte de vrification Tenter de modifier des donnes dans la vue Retrait de points de vue

1 - 407

Copyright 2007, Oracle. All rights reserved.

Pratique 11: Vue d'ensemble de la partie 1 Partie 1 de la pratique de cet exercice, vous offre une varit d'exercices dans la cration, l'utilisation et l'limination de vue. Remplissez les questions 1-6 la fin de cette leon.

Oracle Database 11g: SQL Fundamentals I 11 - 407

Lesson Agenda
Vue d'ensemble de vue:
Cration, modification et rcuprer des donnes partir d'une vue La manipulation des donnes de langue (DML) sur une vue Suppression d'une vue

Vue d'ensemble des squences:


Crer, d'utiliser et de modifier une squence Valeurs de squence de cache pseudo-colonnes nextval et CURRVAL

Vue d'ensemble des index


Cration, suppression des index

Aperu des synonymes


Cration, supression synonymes
1 - 408 Copyright 2007, Oracle. All rights reserved.

Oracle Database 11g: SQL Fundamentals I 11 - 408

Sequences

Object Table View Sequence Index Synonym

Description
Unit de base de stockage; compos de lignes Reprsente logiquement des sous-ensembles de donnes d'une ou de plusieurs tables

Gnre des valeurs numriques Amliore les performances des requtes d'extraction de donnes Donne d'autres noms des objets

1 - 409

Copyright 2007, Oracle. All rights reserved.

Sequences Une squence est un objet de base de donnes qui cre des valeurs entires. Vous pouvez crer des squences, puis les utiliser pour gnrer des nombres.

Oracle Database 11g: SQL Fundamentals I 11 - 409

Sequences
Une squence: Peut gnrer automatiquement des numros uniques Est un objet partageable Peut tre utilis pour crer une valeur de cl primaire Remplace le code d'application Acclre l'efficacit de l'accs aux valeurs de squence lorsque mises en mmoire cache

2 1 3

4 5

6 7

8 9

10

1 - 410

Copyright 2007, Oracle. All rights reserved.

Sequences (suite) Une squence est un objet de base de donnes cr par l'utilisateur qui peut tre partage par plusieurs utilisateurs pour gnrer des nombres entiers. Vous pouvez dfinir une squence pour gnrer des valeurs uniques ou de recycler et d'utiliser les mmes numros encore. Une utilisation typique pour les squences est de crer une valeur de cl primaire, qui doit tre unique pour chaque ligne. Une squence est gnr et incrment (ou dcrment) par une routine interne Oracle. Ce peut tre un objet de gagner du temps, car il peut rduire la quantit de code de l'application ncessaire pour crire une routine de gnration de squence. Les numros de squence sont stockes et de tables gnres indpendante. Par consquent, la mme squence peut tre utilise pour plusieurs tables.

Oracle Database 11g: SQL Fundamentals I 11 - 410

CREATE SEQUENCE : Syntax


Dfinir une squence de gnrer automatiquement des numros squentiels:
CREATE SEQUENCE sequence [INCREMENT BY n] [START WITH n] [{MAXVALUE n | NOMAXVALUE}] [{MINVALUE n | NOMINVALUE}] [{CYCLE | NOCYCLE}] [{CACHE n | NOCACHE}];

1 - 411

Copyright 2007, Oracle. All rights reserved.

CREATE SEQUENCE Statement: Syntaxe Gnrer automatiquement des numros squentiels en utilisant l'instruction CREATE SEQUENCE. Dans la syntaxe: squence est le nom du gnrateur de squences INCREMENT BY n Spcifie l'intervalle entre les numros de squence, o n est un entier (Si cette clause est omise, les incrments de squence de 1.) COMMENCER AVEC n Spcifie le premier numro de squence gnrer (Si cette clause est omise, la squence commence par 1.) MAXVALUE n Spcifie la valeur maximale de la squence peut gnrer NOMAXVALUE Spcifie une valeur maximale de 10 ^ 27 pour une squence ascendante et -1 pour une squence descendante (c'est l'option par dfaut.) MINVALUE n Spcifie la valeur minimum de squence NOMINVALUE Spcifie une valeur minimale de 1 pour une squence ascendante et - (10 ^ 26) pour une squence descendante (c'est l'option par dfaut.)

Oracle Database 11g: SQL Fundamentals I 11 - 411

Creation dune Sequence


Crer une squence nomme DEPT_DEPTID_SEQ utiliser pour la cl primaire de la table Departments. Ne pas utiliser l'option CYCLE.
CREATE SEQUENCE dept_deptid_seq INCREMENT BY 10 START WITH 120 MAXVALUE 9999 NOCACHE NOCYCLE;

1 - 412

Copyright 2007, Oracle. All rights reserved.

Cration d'une squence (suite) CYCLE | NOCYCLE Indique si la squence continue de gnrer des valeurs aprs avoir atteint sa valeur maximum ou minimum (NOCYCLE est l'option par dfaut.) CACHE n | (. Par dfaut, le serveur Oracle met en cache les 20 valeurs) NOCACHE Spcifie le nombre de valeurs pr-alloue les serveurs Oracle et garde en mmoire L'exemple de la glissire cre une squence nomme DEPT_DEPTID_SEQ tre utilis pour la colonne de la table DEPARTMENT_ID SERVICES. La squence commence 120, ne permet pas la mise en cache, et ne cycle. Ne pas utiliser l'option CYCLE si la squence est utilis pour gnrer des valeurs de cl primaire, sauf si vous avez un mcanisme fiable qui purge les anciennes lignes plus vite que les cycles de squence. Pour plus d'informations, reportez-vous la section CREATE SEQUENCE" dans la base de donnes Oracle 11g Langage SQL Reference, Release 1 (11.1). Remarque: La squence n'est pas li une table. En rgle gnrale, vous devez nommer la squence aprs son utilisation prvue. Cependant, la squence peut tre utilis n'importe o, quel que soit son nom.

Oracle Database 11g: SQL Fundamentals I 11 - 412

Nextval et CURRVAL pseudo-colonnes


NEXTVAL renvoie la valeur de squence suivante disponible. Elle renvoie une valeur unique chaque fois qu'il est rfrenc, mme pour des utilisateurs diffrents. CURRVAL obtient la valeur de la squence en cours. NEXTVAL doit tre dlivr cette squence avant CURRVAL contient une valeur.

1 - 413

Copyright 2007, Oracle. All rights reserved.

NEXTVAL and CURRVAL pseudo-colonnes Aprs avoir cr votre squence, il gnre des numros squentiels utiliser dans vos tables. Rfrencer les valeurs de la squence en utilisant les pseudocolonnes nextval et CURRVAL. La NEXTVAL est pseudocolumn utilis pour extraire les numros de squences successives partir d'une squence spcifie. Vous devez vous qualifier NEXTVAL avec le nom de squence. Quand on sequence.NEXTVAL rfrence, un nouveau numro de squence est gnr et le numro de squence courant est plac dans CURRVAL. Le CURRVAL est pseudocolumn utilis pour se rfrer un numro de squence que l'utilisateur actuel vient gnr. Toutefois, NEXTVAL doit tre utilis pour gnrer un numro de squence dans la session de l'utilisateur actuel avant CURRVAL peut tre rfrenc. Vous devez vous qualifier CURRVAL avec le nom de squence. Lorsque vous faites rfrence sequence.CURRVAL, la dernire valeur retourne aux processus utilisateur s'affiche.

Oracle Database 11g: SQL Fundamentals I 11 - 413

NEXTVAL and CURRVAL pseudo-colonnes (suite) Rgles d'utilisation des NEXTVAL et CURRVAL Vous pouvez utiliser NEXTVAL et CURRVAL dans les contextes suivants: La liste SELECT d'une instruction SELECT qui ne fait pas partie d'une sous-requte La liste SELECT d'une sous-requte dans une instruction INSERT La clause VALUES d'une instruction INSERT La clause SET d'une instruction UPDATE Vous ne pouvez pas utiliser NEXTVAL et CURRVAL dans les contextes suivants: La liste SELECT d'une vue Une instruction SELECT avec le mot-cl DISTINCT Une instruction SELECT avec GROUP BY, HAVING ou ORDER BY Une sous-requte dans une instruction SELECT, DELETE ou UPDATE L'expression DEFAULT dans une instruction CREATE TABLE ou ALTER TABLE Pour plus d'informations, consultez les sections "pseudocolonnes" et "CREATE SEQUENCE" dans Oracle Database 11g SQL Langage de rfrence, Release 1 (11.1).

Oracle Database 11g: SQL Fundamentals I 11 - 414

Utilisation dune Sequence


Insrez un nouveau dpartement nomm Support en lieu ID 2500:
INSERT INTO departments(department_id, department_name, location_id) VALUES (dept_deptid_seq.NEXTVAL, 'Support', 2500);

Afficher la valeur actuelle de la squence DEPT_DEPTID_SEQ:


SELECT FROM dept_deptid_seq.CURRVAL dual;

1 - 415

Copyright 2007, Oracle. All rights reserved.

l'aide d'une squence de L'exemple dans les inserts de diapositives d'un nouveau ministre de la table Departments. Il utilise la squence DEPT_DEPTID_SEQ pour gnrer un numro de dpartement nouveau comme suit. Vous pouvez afficher la valeur courante de la squence en utilisant le sequence_name.CURRVAL, comme le montre l'exemple deuxime diapositive. Le rsultat de la requte est indiqu ci-dessous:

Supposons que vous voulez maintenant embaucher des employs pour doter le nouveau dpartement. L'instruction INSERT doit tre excute pour tous les nouveaux employs peuvent inclure le code suivant: INSERT INTO personnes (employe_id, departement_id, ...) VALUES (employees_seq.NEXTVAL, dept_deptid_seq CURRVAL, ...).; Remarque: L'exemple prcdent suppose qu'une squence appele EMPLOYEE_SEQ a dj t cr pour gnrer des nombres des nouveaux employs.

Oracle Database 11g: SQL Fundamentals I 11 - 415

La mise en cache des valeurs de squence


La mise en cache dans la mmoire des valeurs de squence permet d'accder plus rapidement ces valeurs. Lacunes dans les valeurs de la squence peut se produire lorsque:
Une restauration se produit Le systme se bloque Une squence est utilise dans un autre tableau

1 - 416

Copyright 2007, Oracle. All rights reserved.

La mise en cache des valeurs de squence Vous pouvez mettre en cache des squences en mmoire pour acclrer l'accs ces valeurs de squence. Le cache est rempli lors de la premire rfrence la squence. Chaque demande de la valeur de la squence suivante sont extraites de la squence en mmoire cache. Aprs la dernire valeur de squence est utilis, la demande suivante de la squence entrane un autre cache de squences en mmoire. Lacunes dans la squence Bien que gnrateurs de squences mettre des numros squentiels sans lacunes, cette action se produit indpendamment d'une validation ou d'annulation. Par consquent, si vous restaurez une dclaration contenant une squence, le numro est perdu. Un autre vnement qui peut causer des lacunes dans la squence est un plantage du systme. Si la squence met en cache les valeurs en mmoire, puis ces valeurs sont perdues si le systme tombe en panne. Parce que les squences ne sont pas lis directement aux tables, la mme squence peut tre utilise pour plusieurs tables. Cependant, si vous le faites, chaque table peut contenir des lacunes dans la numrotation squentielle.

Oracle Database 11g: SQL Fundamentals I 11 - 416

Modification d'une squence


Changez la valeur ajoute, valeur maximale, valeur minimale, cycle option ou l'option de cache:
ALTER SEQUENCE dept_deptid_seq INCREMENT BY 20 MAXVALUE 999999 NOCACHE NOCYCLE;

1 - 417

Copyright 2007, Oracle. All rights reserved.

Modification d'une squence Si vous atteignez la limite MAXVALUE pour votre squence, aucune valeur supplmentaire partir de la squence sont allous et vous recevrez un message d'erreur indiquant que la squence dpasse le MAXVALUE. Pour continuer utiliser la squence, vous pouvez le modifier en utilisant l'instruction ALTER SEQUENCE. syntaxe ALTER SEQUENCE squence [INCREMENT BY n] [{MAXVALUE n | NOMAXVALUE}] [{MINVALUE n | NOMINVALUE}] [{CYCLE | NOCYCLE}] [{N CACHE | NOCACHE}]; Dans la syntaxe, la squence est le nom du gnrateur de squences. Pour plus d'informations, reportez-vous la section ALTER SEQUENCE" dans Oracle Database 11g SQL Langage de rfrence, Release 1 (11.1).

Oracle Database 11g: SQL Fundamentals I 11 - 417

Guidelines for Modifying a Sequence


Vous devez tre le propritaire ou avoir le privilge ALTER pour la squence. Seuls les numros de squence sont affects venir. La squence doit tre supprime et recre pour redmarrer la squence un autre numro. Certains validation est effectue. Pour supprimer une squence, utilisez l'instruction DROP :
DROP SEQUENCE dept_deptid_seq;

1 - 418

Copyright 2007, Oracle. All rights reserved.

Lignes directrices pour la modification d'une squence Vous devez tre le propritaire ou avoir le privilge ALTER pour la squence de la modifier. Vous devez tre le propritaire ou avoir le privilge DROP ANY SEQUENCE pour l'enlever. Seuls les numros de squence futurs sont affects par l'instruction ALTER SEQUENCE. Le START WITH option ne peut pas tre chang en utilisant ALTER SEQUENCE. La squence doit tre supprime et recre pour redmarrer la squence un autre numro. Certains validation est effectue. Par exemple, une nouvelle MAXVALUE qui est infrieur au numro de squence actuel ne peut pas tre impose.
ALTER SEQUENCE dept_deptid_seq INCREMENT BY 20 MAXVALUE 90 NOCACHE NOCYCLE;

Lerreur:

Oracle Database 11g: SQL Fundamentals I 11 - 418

Lesson Agenda
Vue d'ensemble de vue:
Cration, modification et rcuprer des donnes partir d'une vue La manipulation des donnes de langue (DML) sur une vue Suppression d'une vue

Vue d'ensemble des squences:


Crer, d'utiliser et de modifier une squence Valeurs de squence de cache pseudo-colonnes nextval et CURRVAL

Vue d'ensemble des index


Cration, suppression des index

Aperu des synonymes


Cration, supression synonymes
1 - 419 Copyright 2007, Oracle. All rights reserved.

Oracle Database 11g: SQL Fundamentals I 11 - 419

Indexes

Object Table View Sequence Index Synonym

Description
Unit de base de stockage; compos de lignes Reprsente logiquement des sous-ensembles de donnes d'une ou de plusieurs tables

Gnre des valeurs numriques Amliore les performances des requtes d'extraction de donnes Donne d'autres noms des objets

1 - 420

Copyright 2007, Oracle. All rights reserved.

index Les index sont des objets de base de donnes que vous pouvez crer pour amliorer les performances de certaines requtes. Les index peuvent galement tre crs automatiquement par le serveur lorsque vous crez une cl primaire ou une contrainte unique.

Oracle Database 11g: SQL Fundamentals I 11 - 420

Indexes
Un index: Est un objet de schma Peut tre utilis par le serveur Oracle pour acclrer la rcupration des lignes l'aide d'un pointeur Peut rduire l'apport disque / sortie (I / O) en utilisant une mthode du chemin d'accs rapide pour localiser rapidement les donnes Est indpendante de la table qu'il indexe Est utilis et mis jour automatiquement par le serveur Oracle

1 - 421

Copyright 2007, Oracle. All rights reserved.

Index (suite) Un index du serveur Oracle est un objet de schma qui peut acclrer la rcupration des lignes l'aide d'un pointeur. Les index peuvent tre crs explicitement ou automatiquement. Si vous ne disposez pas d'un index sur la colonne, puis un scan de table complet se produit. Un index permet un accs direct et rapide aux lignes dans une table. Son but est de rduire le disque I / O en utilisant un chemin d'accs rpertori pour localiser rapidement des donnes. Un index est utilis et mis jour automatiquement par le serveur Oracle. Aprs un index est cr, pas d'activit directe est tenu par l'utilisateur. Les index sont logiquement et physiquement indpendante de la table qu'ils index. Cela signifie qu'ils peuvent tre cres ou supprimes tout moment, et n'ont aucun effet sur les tables de base ou d'autres indices. Remarque: Lorsque vous supprimez une table, les indices correspondants sont galement supprims. Pour plus d'informations, reportez-vous la section Objets de schma: Index dans la base de donnes Oracle 11g Concepts, Release 1 (11.1).

Oracle Database 11g: SQL Fundamentals I 11 - 421

Comment les index crs?


Automatiquement: Un index unique est cr automatiquement lorsque vous dfinissez une contrainte PRIMARY KEY ou UNIQUE dans une dfinition de table.

Manuellement: Les utilisateurs peuvent crer des index non uniques sur les colonnes pour acclrer l'accs aux lignes.

1 - 422

Copyright 2007, Oracle. All rights reserved.

Comment les index crs? Vous pouvez crer deux types d'index. Index unique: Le serveur Oracle cre automatiquement cet index lorsque vous dfinissez une colonne dans une table pour avoir une cl primaire ou une contrainte UNIQUE. Le nom de l'index est le nom que l'on donne la contrainte. Nonunique index: Il s'agit d'un indice qu'un utilisateur peut crer. Par exemple, vous pouvez crer l'index de la colonne de cl trangre pour une jointure dans une requte afin d'amliorer la vitesse de rcupration. Remarque: Vous pouvez crer manuellement un index unique, mais il est recommand que vous crez une contrainte d'unicit, ce qui cre implicitement un index unique.

Oracle Database 11g: SQL Fundamentals I 11 - 422

Cration d'un index


Crer un index sur une ou plusieurs colonnes:
CREATE [UNIQUE][BITMAP]INDEX index ON table (column[, column]...);

Amliorer la vitesse d'accs de requte pour la colonne LAST_NAME dans le tableau EMPLOYS:
CREATE INDEX emp_last_name_idx ON employees(last_name);

1 - 423

Copyright 2007, Oracle. All rights reserved.

Creation Index Crer un index sur une ou plusieurs colonnes en mettant l'instruction CREATE INDEX. Dans la syntaxe: index est le nom de l'indice table est le nom de la table colonne est le nom de la colonne dans la table indexer Spcifier unique pour indiquer que la valeur de la colonne (ou colonnes) sur lequel l'indice est bas doit tre unique. Spcifiez BITMAP pour indiquer que l'index doit tre cr avec une image bitmap pour chaque cl distincte, plutt que l'indexation de chaque ligne sparment. Index bitmap stocker les ROWID associs une valeur de cl sous forme de bitmap. Pour plus d'informations, reportez-vous la section CREATE INDEX" dans Oracle Database 11g SQL Langage de rfrence, Release 1 (11.1).

Oracle Database 11g: SQL Fundamentals I 11 - 423

Directives cration d'index


Create an index when:
A column contains a wide range of values A column contains a large number of null values One or more columns are frequently used together in a WHERE clause or a join condition The table is large and most queries are expected to retrieve less than 2% to 4% of the rows in the table

Do not create an index when:


The columns are not often used as a condition in the query The table is small or most queries are expected to retrieve more than 2% to 4% of the rows in the table The table is updated frequently The indexed columns are referenced as part of an expression

1 - 424

Copyright 2007, Oracle. All rights reserved.

Directives cration d'index Plus n'est pas toujours mieux Avoir plus d'index sur une table ne produit pas plus rapide des requtes. Chaque opration DML qui s'engage sur une table avec index signifie que les index doivent tre mis jour. Les indices de plus que vous avez associs une table, plus l'effort le serveur Oracle doit mettre jour tous les index aprs une opration DML. Quand crer un index Par consquent, vous devez crer des index uniquement si: La colonne contient un large ventail de valeurs La colonne contient un grand nombre de valeurs nulles Une ou plusieurs colonnes sont frquemment utiliss ensemble dans une clause WHERE ou condition de jointure La table est grande et plus les requtes sont attendus pour rcuprer moins de 2% 4% des lignes N'oubliez pas que si vous voulez appliquer l'unicit, vous devez dfinir une contrainte d'unicit dans la dfinition de la table. Un index unique est alors cr automatiquement.

Oracle Database 11g: SQL Fundamentals I 11 - 424

Suppression d'un index


Suppression d'un index partir du dictionnaire de donnes en utilisant la commande DROP INDEX:
DROP INDEX index;

Supprimez l'index emp_last_name_idx du dictionnaire de donnes:


DROP INDEX emp_last_name_idx;

Pour supprimer un index, vous devez tre le propritaire de l'index ou le privilge DROP ANY INDEX.

1 - 425

Copyright 2007, Oracle. All rights reserved.

Suppression d'un index Vous ne pouvez pas modifier des index. Pour modifier un index, vous devez la supprimer, puis recrer. Supprimer une dfinition de l'index du dictionnaire de donnes en mettant l'instruction DROP INDEX. Pour supprimer un index, vous devez tre le propritaire de l'index ou le privilge DROP ANY INDEX. Dans la syntaxe, l'indice est le nom de l'index. Remarque: Si vous supprimez une table, les index et les contraintes sont automatiquement supprimes mais vues et des squences restent.

Oracle Database 11g: SQL Fundamentals I 11 - 425

Lesson Agenda
Vue d'ensemble de vue:
Cration, modification et rcuprer des donnes partir d'une vue La manipulation des donnes de langue (DML) sur une vue Suppression d'une vue

Vue d'ensemble des squences:


Crer, d'utiliser et de modifier une squence Valeurs de squence de cache pseudo-colonnes nextval et CURRVAL

Vue d'ensemble des index


Cration, suppression des index

Aperu des synonymes


Cration, supression synonymes
1 - 426 Copyright 2007, Oracle. All rights reserved.

Oracle Database 11g: SQL Fundamentals I 11 - 426

Synonyms

Object Table View Sequence Index Synonym

Description
Unit de base de stockage; compos de lignes Reprsente logiquement des sous-ensembles de donnes d'une ou de plusieurs tables

Gnre des valeurs numriques Amliore les performances des requtes d'extraction de donnes Donne d'autres noms des objets

1 - 427

Copyright 2007, Oracle. All rights reserved.

Synonymes Les synonymes sont des objets de base de donnes qui vous permettent d'appeler une table sous un autre nom. Vous pouvez crer des synonymes pour donner un autre nom une table.

Oracle Database 11g: SQL Fundamentals I 11 - 427

Cration d'un synonyme pour un objet


Simplifier l'accs aux objets en crant un synonyme (un autre nom pour un objet). Avec des synonymes, vous pouvez: Crer un simple rfrence une table qui est dtenue par un autre utilisateur Raccourcir les noms des objets longs
CREATE [PUBLIC] SYNONYM synonym FOR object;

1 - 428

Copyright 2007, Oracle. All rights reserved.

Cration d'un synonyme pour un objet Pour faire rfrence une table qui est dtenue par un autre utilisateur, vous devez prfixer le nom de la table avec le nom de l'utilisateur qui l'a cre, suivie d'une priode. Cration d'un synonyme limine le besoin de qualifier le nom de l'objet avec le schma et vous donne un autre nom pour une table, vue, squence, procdure ou d'autres objets. Cette mthode peut tre particulirement utile avec les noms des objets volumineux tels que des points de vue. Dans la syntaxe: PUBLIC Cre un synonyme qui est accessible tous les utilisateurs Est traduire le nom de la traduire crer objet identifie l'objet pour lequel le synonyme est cr directives L'objet ne peut tre contenue dans un paquet. Un nom synonyme priv doit tre distinct de tous les autres objets qui sont dtenues par le mme utilisateur. Pour plus d'informations, reportez-vous la section CREATE SYNONYM" dans Oracle Database 11g SQL Langage de rfrence, Release 1 (11.1).

Oracle Database 11g: SQL Fundamentals I 11 - 428

Cration et suppression Synonymes


Crer un nom de raccourci pour la vue DEPT_SUM_VU:
CREATE SYNONYM d_sum FOR dept_sum_vu;

Supprimer un synonyme:
DROP SYNONYM d_sum;

1 - 429

Copyright 2007, Oracle. All rights reserved.

Cration et suppression Synonymes Cration d'un synonyme L'exemple cre une diapositive pour traduire le point de vue DEPT_SUM_VU de rfrence plus rapide. L'administrateur de base de donnes peut crer un synonyme public qui est accessible tous les utilisateurs. L'exemple suivant cre un synonyme public nomm DEPT de la table d'Alice DPARTEMENTS: Create Public Synonym dept FOR alice.departments; Suprresion d'une Synonyme Pour supprimer un synonyme, utilisez l'instruction DROP SYNONYM. Seul l'administrateur de base de donnes peut supprimer un synonyme public. DROP SYNONYM PUBLIC dpartement; Pour plus d'informations, reportez-vous la section DROP SYNONYM" dans Oracle Database 11g SQL Langage de rfrence, Release 1 (11.1).

Oracle Database 11g: SQL Fundamentals I 11 - 429

Rsum
Dans cette leon, vous devriez avoir appris : Crer, utiliser et supprimer des vues Gnrer automatiquement des numros de squence l'aide d'un gnrateur de squence Crer des index pour amliorer la vitesse de rcupration requte Utiliser des synonymes pour fournir des noms alternatifs pour les objets

1 - 430

Copyright 2007, Oracle. All rights reserved.

rsum Dans cette leon, vous devriez avoir appris sur les objets de base de donnes telles que les vues, les squences, les index et les synonymes.

Oracle Database 11g: SQL Fundamentals I 11 - 430

Pratique 11: Partie 2


Cette pratique couvre les sujets suivants: Cration de squences en utilisant des squences Cration d'index non uniques Cration synonymes

1 - 431

Copyright 2007, Oracle. All rights reserved.

Pratique 11: Vue d'ensemble de la partie 2 Partie 2 de la pratique de cet exercice, vous offre une varit d'exercices dans la cration et l'utilisation d'une squence, un index et un synonyme. Remplissez les questions 7-10 la fin de cette leon.

Oracle Database 11g: SQL Fundamentals I 11 - 431

Exercice 11 partie 1 1. Le personnel du service des ressources humaines veut cacher une partie des donnes dans la table Employees. Ils veulent une vue appele EMPLOYEES_VU base sur le numro d'employs, les noms des employs et des numros de service de la table Employees. Ils veulent le titre du nom de l'employ d'tre un employ. 2. Assurez-vous que la vue fonctionne. Afficher le contenu de la vue EMPLOYEES_VU.

3. Utilisation de votre vue EMPLOYEES_VU, crire une requte pour le service des ressources humaines pour afficher tous les noms des employs et des numros de dpartement.

Oracle Database 11g: SQL Fundamentals I 11 - 432

Exercice 11 (suite) 4. Dpartement 50 a besoin d'accder ses donnes sur les employs. Crer une vue nomme DEPT50 qui contient les numros des employs, noms des employs , les numros de dpartement et pour tous les employs du service 50. Vous avez t invit marquer le point de vue des colonnes EMPNO, EMPLOYS, et DEPTNO. Pour des raisons de scurit, ne pas permettre un employ d'tre raffecte un autre department dans la vue. 5. Afficher la structure et le contenu de la vue DEPT50.

6. Testez votre vue. Tenter de raffecter Matos au dpartement 80.

Oracle Database 11g: SQL Fundamentals I 11 - 433

Exercice 11 (suite) Partie 2 7. Vous avez besoin d'une squence qui peut tre utilis avec la colonne de cl primaire de la table DEPT. La squence doit commencer 200 et une valeur maximale de 1000. Demandez votre squence par incrment de 10. Nommez le DEPT_ID_SEQ squence. 8. Pour tester votre squence, crire un script pour insrer deux lignes dans la table DEPT. Nommez votre lab_11_08.sql script. Assurez-vous d'utiliser la squence que vous avez cr pour la colonne ID. Ajouter deux dpartements: Education et de l'administration. Confirmez vos ajouts. Excutez les commandes dans votre script. 9. Crer un index non unique sur la colonne NAME dans la table DEPT. 10. Crer un synonyme de votre table EMPLOYEES. Appelez-le PEM.

Oracle Database 11g: SQL Fundamentals I 11 - 434

Contrle de l'accs utilisateur

1 - 435

Copyright 2007, Oracle. All rights reserved.

Objectifs
Aprs avoir termin cette leon, vous devriez tre en mesure de faire ce qui suit: Diffrencier les privilges du systme de privilges objet Accorder des privilges sur les tables octroyer des rles La distinction entre les privilges et les rles

1 - 436

Copyright 2007, Oracle. All rights reserved.

objectifs Dans cette leon, vous apprendrez contrler l'accs aux objets de base de donnes spcifiques et d'ajouter de nouveaux utilisateurs avec diffrents niveaux de privilges d'accs.

Oracle Database 11g: SQL Fundamentals I 12 - 436

Lesson Agenda
des privilges systme Cration d'un rle privilges objet Rvocation des privilges objet

1 - 437

Copyright 2007, Oracle. All rights reserved.

Oracle Database 11g: SQL Fundamentals I 12 - 437

Contrle de l'accs utilisateur

Database administrator

Username and password Privileges


Users

1 - 438

Copyright 2007, Oracle. All rights reserved.

Contrle de l'accs utilisateur Dans un environnement multi-utilisateur, vous voulez maintenir la scurit de l'accs et de l'utilisation de base de donnes. Avec la scurit d'Oracle base de donnes du serveur, vous pouvez effectuer les oprations suivantes: Contrler l'accs base de donnes. Donne accs des objets spcifiques dans la base de donnes. Confirmer donn et reu des privilges avec le dictionnaire de donnes Oracle. Base de donnes de scurit peuvent tre classs en deux catgories: la scurit du systme et la scurit des donnes. La scurit du systme couvre l'accs et l'utilisation de la base de donnes au niveau du systme, telles que le nom d'utilisateur et mot de passe, l'espace disque allou aux utilisateurs, et les oprations du systme que les utilisateurs peuvent excuter. La scurit de base de donnes couvre l'accs et l'utilisation des objets de base de donnes et les actions que les utilisateurs peuvent effectuer sur les objets.

Oracle Database 11g: SQL Fundamentals I 12 - 438

Privileges
Base de donnes de scurit:
systme de scurit La scurit des donnes

Privilges Systme: Excution d'une action particulire au sein de la base de donnes Privilges objet: Manipuler le contenu des objets de base de donnes Schmas: Collection d'objets tels que des tables, des vues et des squences

1 - 439

Copyright 2007, Oracle. All rights reserved.

privilges Un privilge est le droit d'excuter des instructions SQL particulires. L'administrateur de base de donnes (DBA) est un utilisateur de haut niveau avec la possibilit de crer des utilisateurs et accorder aux utilisateurs l'accs la base de donnes et ses objets. Les utilisateurs ont besoin des privilges systme pour avoir accs aux droits de base et l'objet de manipuler le contenu des objets dans la base de donnes. Les utilisateurs peuvent galement avoir le privilge d'accorder des privilges supplmentaires d'autres utilisateurs ou des rles, qui sont nomms groupes de privilges connexes. schmas Un schma est une collection d'objets tels que des tables, des vues et des squences. Le schma est dtenu par un utilisateur de base de donnes et a le mme nom que l'utilisateur. Un privilge systme est le droit d'effectuer une action particulire, ou pour effectuer une action sur tous les objets de schma d'un type particulier. Un privilge objet fournit l'utilisateur la possibilit d'effectuer une action particulire sur un objet de schma spcifique. Pour plus d'informations, consultez la base de donnes Oracle DBA 2 Jour 11g Release 1 (11.1) manuel de rfrence.

Oracle Database 11g: SQL Fundamentals I 12 - 439

Privileges Systme
Plus de 100 privilges sont disponibles. L'administrateur de base de donnes disposant de privilges systme de haut niveau pour des tches telles que:
Crer de nouveaux utilisateurs Suppression d'utilisateurs Suppression des tables Sauvegarde des tables

1 - 440

Copyright 2007, Oracle. All rights reserved.

privilges systme Plus de 100 des privilges systme distincts sont disponibles pour les utilisateurs et les rles. En rgle gnrale, les privilges systme sont fournis par le DBA. Privilge DBA typiques System Privilege CREATE USER DROP USER DROP ANY TABLE BACKUP ANY TABLE Operations Authorized Grantee can create other Oracle users. Grantee can drop another user. Grantee can drop a table in any schema. Grantee can back up any table in any schema with the export utility. Grantee can query tables, views, or materialized views in any schema. Grantee can create tables in any schema.

SELECT ANY TABLE

CREATE ANY TABLE

Oracle Database 11g: SQL Fundamentals I 12 - 440

Cration d'utilisateurs
L'administrateur de base de donnes (DBA) cre des utilisateurs avec l'instruction CREATE USER. CREATE USER user IDENTIFIED BY password; CREATE USER demo IDENTIFIED BY demo;

1 - 441

Copyright 2007, Oracle. All rights reserved.

Cration d'utilisateurs Le DBA cre l'utilisateur en excutant l'instruction CREATE USER. L'utilisateur n'a pas de privilges ce stade. Le DBA peut alors accorder des privilges l'utilisateur. Ces privilges dterminer ce que l'utilisateur peut faire au niveau de la base de donnes. La diapositive donne la syntaxe abrge pour la cration d'un utilisateur. Dans la syntaxe: L'utilisateur est le nom de l'utilisateur crer Mot de passe Spcifie que l'utilisateur doit se connecter avec ce mot de passe Pour plus d'informations, consultez le Manuel de rfrence SQL Oracle Database11g. Remarque: partir d'Oracle Database 11g, les mots de passe sont sensibles la casse. Majuscules et les minuscules sont des caractres diffrents lorsqu'ils sont utiliss dans un mot de passe.

Oracle Database 11g: SQL Fundamentals I 12 - 441

Privilges systme pour utilisateur


Une fois qu'un utilisateur est cr, le DBA peut octroyer des privilges systme spcifiques cet utilisateur.
GRANT privilege [, privilege...] TO user [, user| role, PUBLIC...];

Un dveloppeur d'applications, par exemple, peuvent avoir des privilges systme suivants :
CREATE CREATE CREATE CREATE CREATE SESSION TABLE SEQUENCE VIEW PROCEDURE

1 - 442

Copyright 2007, Oracle. All rights reserved.

Privilges systme pour utilisateur Aprs le DBA cre un utilisateur, l'administrateur peut attribuer des privilges l'utilisateur. System Privilege CREATE SESSION CREATE TABLE CREATE SEQUENCE CREATE VIEW Operations Authorized Connectez-vous la base de donnes. Crer des tables dans le schma de l'utilisateur. Crer une squence dans le schma de l'utilisateur. Crer une vue dans le schma de l'utilisateur.

CREATE PROCEDURE Crer une procdure stocke, une fonction ou un package dans Dans la syntaxe: le schma de l'utilisateur. privilge est celui du systme accorder utilisateur | rle | PUBLIC est le nom de l'utilisateur, le nom du rle ou PUBLIC (qui dsigne que chaque utilisateur se voit accorder le privilge) Remarque: les privilges du systme actuel peut tre trouv dans la vue du dictionnaire session_privs. Le dictionnaire de donnes est une collection de tables et vues cres et gres par le serveur Oracle. Ils contiennent des informations sur la base de donnes.

Oracle Database 11g: SQL Fundamentals I 12 - 442

Octroi des privilges systme


Le DBA peut octroyer des privilges systme spcifiques un utilisateur.

GRANT TO

create session, create table, create sequence, create view demo;

1 - 443

Copyright 2007, Oracle. All rights reserved.

Octroi des privilges systme Le DBA utilise l'instruction GRANT pour attribuer des privilges systme l'utilisateur. Aprs que l'utilisateur a t accord des privilges, l'utilisateur peut immdiatement utiliser ces privilges. Dans l'exemple de la diapositive, l'utilisateur de la dmo a t attribu les privilges pour crer des sessions, des tables, des squences et des vues.

Oracle Database 11g: SQL Fundamentals I 12 - 443

Lesson Agenda
des privilges systme Cration d'un rle privilges objet Rvocation des privilges objet

1 - 444

Copyright 2007, Oracle. All rights reserved.

Oracle Database 11g: SQL Fundamentals I 12 - 444

Qu'est-ce qu'un rle?

Users

Manager

Privileges Allocation de privilges sans rle Allocation de privilges avec rle

1 - 445

Copyright 2007, Oracle. All rights reserved.

Qu'est-ce qu'un rle? Un rle est un groupe nomm de privilges connexes qui peuvent tre accords l'utilisateur. Cette mthode facilite le rvoquer et maintenir les privilges. Un utilisateur peut avoir accs plusieurs rles, et plusieurs utilisateurs peuvent tre assigns le mme rle. Les rles sont gnralement cres pour une application de base de donnes. Cration et assignation d'un rle Tout d'abord, l'administrateur doit crer le rle. Ensuite, l'administrateur peut attribuer des privilges sur le rle et l'assigner des utilisateurs. syntaxe CREATE ROLE rle; Dans la syntaxe: rle est le nom du rle crer Une fois le rle est cr, le DBA peut utiliser la commande GRANT pour attribuer le rle des utilisateurs ainsi que d'attribuer des privilges ce rle.

Oracle Database 11g: SQL Fundamentals I 12 - 445

Cration et l'octroi de privilges un rle


Crer un rle:
CREATE ROLE manager;

Accorder des privilges un rle:


GRANT create table, create view TO manager;

Accorder un rle aux utilisateurs:


GRANT manager TO BELL, KOCHHAR;

1 - 446

Copyright 2007, Oracle. All rights reserved.

Cration d'un rle L'exemple de la diapositive cre un rle de gestionnaire et de gestionnaire permet ensuite de crer des tables et des vues. Il accorde ensuite Bell et Kochhar le rle des gestionnaires. Maintenant, Bell et Kochhar pouvez crer des tables et des vues. Si les utilisateurs ont des rles multiples qui leur sont accords, ils reoivent tous les privilges associs tous les rles.

Oracle Database 11g: SQL Fundamentals I 12 - 446

Modification de votre mot de passe


Le DBA cre votre compte d'utilisateur et votre mot de passe initialise. Vous pouvez changer votre mot de passe en utilisant l'instruction ALTER USER.
ALTER USER demo IDENTIFIED BY employ;

1 - 447

Copyright 2007, Oracle. All rights reserved.

Modification de votre mot de passe Le DBA cre un compte et initialise un mot de passe pour chaque utilisateur. Vous pouvez changer votre mot de passe en utilisant l'instruction ALTER USER. L'exemple diapositive montre que l'utilisateur modifie son mot de passe demo en utilisant l'instruction ALTER USER. syntaxe ALTER utilisateur utilisateur identifi par mot de passe; Dans la syntaxe: L'utilisateur est le nom de l'utilisateur Mot de passe Spcifie le nouveau mot de passe Bien que cette dclaration peut tre utilise pour changer votre mot de passe, il ya beaucoup d'autres options. Vous devez avoir le privilge ALTER USER pour modifier toute autre option. Pour plus d'informations, consultez le Manuel de rfrence SQL Oracle Database11g manuel. Remarque: SQL * Plus est une commande PASSWORD (PASSW) qui peut tre utilis pour changer le mot de passe d'un utilisateur lorsque l'utilisateur est connect po Cette commande n'est pas disponible dans SQL Developer.

Oracle Database 11g: SQL Fundamentals I 12 - 447

Lesson Agenda
des privilges systme Cration d'un rle privilges objet Rvocation des privilges objet

1 - 448

Copyright 2007, Oracle. All rights reserved.

Oracle Database 11g: SQL Fundamentals I 12 - 448

Privileges Object

Object privilege ALTER DELETE INDEX INSERT REFERENCES SELECT UPDATE

Table

View

Sequence

1 - 449

Copyright 2007, Oracle. All rights reserved.

privilges objet Un privilge objet est un privilge ou un droit d'effectuer une action particulire sur une table spcifique, vue, squence, ou une procdure. Chaque objet possde un ensemble particulier de privilges pouvant tre accordes. Le tableau de la diapositive numre les privilges pour divers objets. Notez que seules les privilges qui s'appliquent une squence sont SELECT et ALTER. UPDATE, REFERENCES, et INSERT peut tre limite par la spcification d'un sous-ensemble de colonnes modifiables. Un privilge SELECT peut tre limite par la cration d'une vue avec un sous-ensemble de colonnes et l'octroi du droit de SELECT uniquement sur la vue. Un privilge accord sur un synonyme est converti en un privilge sur la table de base rfrenc par le synonyme. Remarque: Avec le privilge REFERENCES, vous pouvez faire en sorte que les autres utilisateurs peuvent crer des contraintes FOREIGN KEY qui rfrencent votre table.

Oracle Database 11g: SQL Fundamentals I 12 - 449

Privileges Object
Privilges des objets peuvent varier d'un objet . Un propritaire a tous les privilges sur l'objet. Un propritaire peut accorder des privilges spcifiques sur l'objet que propritaire.

GRANT object_priv [(columns)] ON object TO {user|role|PUBLIC} [WITH GRANT OPTION];

1 - 450

Copyright 2007, Oracle. All rights reserved.

Octroi des privilges objet Privilges d'objets diffrents sont disponibles pour les diffrents types d'objets de schma. Un utilisateur dispose automatiquement tous les privilges objet pour les objets de schma contenus dans le schma de l'utilisateur. Un utilisateur peut accorder aucun privilge objet sur n'importe quel objet de schma que l'utilisateur possde tout autre utilisateur ou rle. Si la subvention comprend WITH GRANT OPTION, puis le bnficiaire peut encore accorder le privilge objet d'autres utilisateurs; autrement, le bnficiaire peut utiliser le privilge, mais ne peut pas l'accorder d'autres utilisateurs. Dans la syntaxe: object_priv est un privilge objet accorder ALL Indique tous les privilges objet colonnes Spcifie la colonne d'une table ou vue sur laquelle? privilges sont accords SUR objet est l'objet sur lequel les privilges accords sont Identifie qui le privilge est accord Les subventions publiques s'opposer privilges tous les utilisateurs WITH GRANT OPTION Permet au bnficiaire d'accorder les privilges objet d'autres utilisateurs et des rles Remarque: Dans la syntaxe, le schma est le mme que le nom du propritaire.

Oracle Database 11g: SQL Fundamentals I 12 - 450

Octroi des privilges objet


Accorder des privilges de la requte sur la table EMPLOYS:
GRANT ON TO select employees demo;

Accorder des privilges mettre jour des colonnes spcifiques pour les utilisateurs et les rles:
GRANT ON TO update (department_name, location_id) departments demo, manager;

1 - 451

Copyright 2007, Oracle. All rights reserved.

directives Pour accorder des privilges sur un objet, l'objet doit tre dans votre propre schma, ou vous devez avoir reu les privilges objet WITH GRANT OPTION. Un propritaire de l'objet peut accorder aucun privilge objet sur l'objet un autre utilisateur ou le rle de la base de donnes. Le propritaire d'un objet acquiert automatiquement tous les privilges objet sur cet objet. Le premier exemple de la diapositive accorde l'utilisateur le privilge de dmonstration pour interroger votre table EMPLOYEES. Les subventions deuxime exemple UPDATE privilges sur des colonnes spcifiques dans la table DEPARTEMENTS la dmo et au rle de gestionnaire. Par exemple, si votre schma est oraxx, et l'utilisateur de la dmo veut maintenant utiliser une instruction SELECT pour obtenir des donnes partir de votre table EMPLOYEES, alors la syntaxe, il ou elle doit utiliser est la suivante: SELECT * FROM oraxx.employees; Alternativement, l'utilisateur peut crer une dmo pour traduire la table et mettez une instruction SELECT partir du synonyme: CREATE emp SYNONYME DE oraxx.employees; SELECT * FROM emp; Remarque: DBA gnralement attribuer des privilges systme; tout utilisateur qui est propritaire d'un objet peut octroyer des privilges objet.

Oracle Database 11g: SQL Fundamentals I 12 - 451

Passant de vos privilges


Offrir un droit des utilisateurs passer le long de privilges:
GRANT ON TO WITH select, insert departments demo GRANT OPTION;

Autoriser tous les utilisateurs sur le systme pour interroger les donnes de la table d'Alice DPARTEMENTS:
GRANT select ON alice.departments TO PUBLIC;

1 - 452

Copyright 2007, Oracle. All rights reserved.

Passant de vos privilges WITH GRANT OPTION Keyword Un privilge qui est accord avec la clause WITH GRANT OPTION peut tre transmis d'autres utilisateurs et des rles par le bnficiaire. Privilges objet accords avec la clause WITH GRANT OPTION est rvoqu quand le privilge du prteur est rvoqu. L'exemple de la diapositive donne accs l'utilisateur de dmonstration votre table DEPARTEMENTS avec les privilges d'interroger la table et ajouter des lignes la table. L'exemple montre galement que user1 peut donner d'autres de ces privilges. Mots-PUBLIC Le propritaire d'une table peut accorder l'accs tous les utilisateurs en utilisant le mot-cl PUBLIC. Le deuxime exemple permet tous les utilisateurs du systme pour interroger les donnes de la table d'Alice DPARTEMENTS.

Oracle Database 11g: SQL Fundamentals I 12 - 452

Confirmant les privilges accords


Data Dictionary View ROLE_SYS_PRIVS ROLE_TAB_PRIVS USER_ROLE_PRIVS USER_SYS_PRIVS USER_TAB_PRIVS_MADE USER_TAB_PRIVS_RECD USER_COL_PRIVS_MADE USER_COL_PRIVS_RECD Description
System privileges granted to roles Table privileges granted to roles Roles accessible by the user System privileges granted to the user Object privileges granted on the users objects Object privileges granted to the user Object privileges granted on the columns of the users objects Object privileges granted to the user on specific columns

1 - 453

Copyright 2007, Oracle. All rights reserved.

Confirmant les privilges accords Si vous tentez d'effectuer une opration non autorise, telle que la suppression d'une ligne d'une table pour laquelle vous n'avez pas le privilge DELETE, le serveur Oracle ne permet pas l'opration doit avoir lieu. Si vous recevez le message d'erreur du serveur Oracle "Table ou vue n'existe pas, alors vous avez fait une des oprations suivantes: Nomm une table ou d'une vue qui n'existe pas Tent d'effectuer une opration sur une table ou une vue pour laquelle vous n'avez pas le privilge appropri Le dictionnaire de donnes est organise en tables et les vues et contient des informations sur la base de donnes. Vous pouvez accder au dictionnaire de donnes pour afficher les privilges que vous avez. Le tableau de la diapositive dcrit les diffrentes vues du dictionnaire de donnes. Vous apprendrez plus sur les vues du dictionnaire de donnes dans la leon intitule Gestion des objets avec des vues du dictionnaire de donnes." Remarque: La vue du dictionnaire de ALL_TAB_PRIVS_MADE dcrit tous les droits pour les objets faits par l'utilisateur ou faites sur les objets appartenant l'utilisateur.

Oracle Database 11g: SQL Fundamentals I 12 - 453

Lesson Agenda
des privilges systme Cration d'un rle privilges objet Rvocation des privilges objet

1 - 454

Copyright 2007, Oracle. All rights reserved.

Oracle Database 11g: SQL Fundamentals I 12 - 454

Rvocation des privilges objet


Vous pouvez utiliser la commande REVOKE pour retirer des privilges accords aux autres utilisateurs. Les privilges accords aux autres par le biais de la clause WITH GRANT OPTION sont aussi supprims.
REVOKE {privilege [, privilege...]|ALL} ON object FROM {user[, user...]|role|PUBLIC} [CASCADE CONSTRAINTS];

1 - 455

Copyright 2007, Oracle. All rights reserved.

Rvocation des privilges objet Vous pouvez supprimer des privilges accords d'autres utilisateurs l'aide de l'instruction REVOKE. Lorsque vous utilisez l'instruction REVOKE, les privilges que vous spcifiez sont rvoqus par les utilisateurs que vous dsignez et de tous les autres utilisateurs auxquels ces privilges ont t accords par l'utilisateur rvoqu. Dans la syntaxe: CASCADE est ncessaire pour liminer les contraintes d'intgrit rfrentielle apportes l'objet CONTRAINTES au moyen du privilge REFERENCES Pour plus d'informations, consultez le Manuel de rfrence SQL Oracle Database11g. Remarque: Si un utilisateur devait quitter l'entreprise et vous rvoquez les privilges ses, vous devez nouvel octroi de privilges que cet utilisateur aura concdes d'autres utilisateurs. Si vous laissez tomber le compte utilisateur sans la rvocation des privilges de celle-ci, puis les privilges systme accords par cet utilisateur pour les autres utilisateurs ne sont pas affects par cette action.

Oracle Database 11g: SQL Fundamentals I 12 - 455

Rvocation des privilges objet


Rvoquer les privilges SELECT et INSERT donnes l'utilisateur de dmonstration sur la table Departments.
REVOKE ON FROM select, insert departments demo;

1 - 456

Copyright 2007, Oracle. All rights reserved.

Rvocation des privilges objet (suite) L'exemple de la diapositive rvoque SELECT et INSERT privilges accords l'utilisateur de dmonstration sur la table Departments. Remarque: Si un utilisateur se voit accorder un privilge avec la clause WITH GRANT OPTION, cet utilisateur peut galement accorder le privilge avec la clause WITH GRANT OPTION, de sorte que la longue chane des bnficiaires est possible, mais pas de subventions circulaires (octroi un anctre de subvention ) sont autoriss. Si le propritaire annule un privilge d'un utilisateur qui a donn le privilge d'autres utilisateurs, puis les cascades rvocation de tous les privilges accords. Par exemple, si l'utilisateur A accorde un privilge SELECT sur une table l'utilisateur B, y compris la clause WITH GRANT OPTION, l'utilisateur B peut accorder l'utilisateur C le privilge SELECT avec la clause WITH GRANT OPTION ainsi, et l'utilisateur C peut alors accorder l'utilisateur D le privilge SELECT. Si l'utilisateur A rvoque les privilges de l'utilisateur B, puis les privilges accords aux utilisateurs C et D sont aussi supprims.

Oracle Database 11g: SQL Fundamentals I 12 - 456

Rsum
Dans cette leon, vous devriez avoir appris propos des dclarations qui contrlent l'accs la base de donnes et des objets de base de donnes.
Statement CREATE USER GRANT CREATE ROLE ALTER USER REVOKE Action
Creates a user (usually performed by a DBA) Gives other users privileges to access the objects Creates a collection of privileges (usually performed by a DBA) Changes a users password Removes privileges on an object from users

1 - 457

Copyright 2007, Oracle. All rights reserved.

rsum DBA tablir la scurit pour les utilisateurs de base de donnes initiale par l'attribution de privilges aux utilisateurs. Le DBA cre des utilisateurs qui doivent avoir un mot de passe. Le DBA est galement charg d'tablir les privilges du systme initial d'un utilisateur. Aprs que l'utilisateur a cr un objet, l'utilisateur peut passer le long de l'un des privilges d'objets disponibles d'autres utilisateurs ou tous les utilisateurs l'aide de l'instruction GRANT. Un DBA peut crer des rles en utilisant l'instruction CREATE ROLE passer le long d'un ensemble de privilges systme ou de l'objet plusieurs utilisateurs. Rles faire octroi et la rvocation des privilges plus facile maintenir. Les utilisateurs peuvent modifier leurs mots de passe en utilisant l'instruction ALTER USER. Vous pouvez supprimer des privilges des utilisateurs l'aide de l'instruction REVOKE. Avec des vues du dictionnaire de donnes, les utilisateurs peuvent visualiser les privilges qui leur sont accords et celles qui sont accordes leurs objets.

Oracle Database 11g: SQL Fundamentals I 12 - 457

Exercice 12: Vue d'ensemble


Cette pratique couvre les sujets suivants: Octroi d'autres utilisateurs votre table Modification de la table d'un autre utilisateur travers les privilges qui vous sont accords Cration d'un synonyme

1 - 458

Copyright 2007, Oracle. All rights reserved.

Exercice 12: Vue d'ensemble Faites quipe avec d'autres tudiants pour cet exercice au sujet de contrler l'accs aux objets de base de donnes.

Oracle Database 11g: SQL Fundamentals I 12 - 458

Pratique 12 Pour complter la question 8 et les suivantes, vous devez vous connecter la base de donnes l'aide SQL Developer. Si vous tes dj pas connect, procdez comme suit: A. Cliquez sur l'icne du bureau SQL Developer. B. Dans le navigateur de connexions, utilisez le compte oraxx et le mot de passe correspondant fourni par votre instructeur de vous connecter la base de donnes. 1. Quel privilge devrait tre un utilisateur donn de se connecter au serveur Oracle? Est-ce un privilge systme ou un privilge objet? _______________________________________________________________________ 2. Quel privilge devrait tre un utilisateur donn pour crer des tableaux? _______________________________________________________________________ 3. Si vous crez une table, qui peut passer le long des privilges d'autres utilisateurs sur votre table? _______________________________________________________________________ 4. Vous tes l'administrateur. Vous crez de nombreux utilisateurs qui ont besoin des mmes privilges systme.? Que devez-vous utiliser pour rendre votre travail plus facile? _______________________________________________________________________ 5. Quelle commande utilisez-vous pour modifier votre mot de passe? _______________________________________________________________________ User1 est le propritaire de la table EMP et accorde le privilge DELETE pour User2 l'aide de la clause WITH GRANT OPTION. User2 accorde alors le privilge DELETE sur EMP Utilisateur3. User1 constate maintenant que Utilisateur3 a le privilge et la rvoque de User2. Lequel? Utilisateur peut dsormais supprimer de la table EMP? _______________________________________________________________________ Vous souhaitez accorder le privilge SCOTT jour les donnes de la table Departments. Vous voulez aussi permettre SCOTT accorder ce privilge d'autres utilisateurs. Quelle commande utilisez-vous? _______________________________________________________________________ Accorder un autre privilge requte de l'utilisateur sur votre table. Ensuite, vrifiez si cet utilisateur peut utiliser ce privilge. Remarque: Pour cet exercice, faire quipe avec un autre groupe. Par exemple, si vous tes un utilisateur ora21, faire quipe avec un autre ora22 utilisateur. a. Accorder un autre privilge de l'utilisateur pour afficher les enregistrements de votre table REGIONS. Inclure une option pour cet utilisateur de continuer accorder ce privilge d'autres utilisateurs. b. Avez-interroger l'utilisateur de votre table REGIONS. c. Faire passer le mode d'interrogation sur le privilge d'un troisime utilisateur (par exemple, ora23). d. Reprenez le privilge de l'utilisateur qui effectue l'tape b. Remarque: Chaque quipe peut excuter des exercices 9 et 10 de manire indpendante. 9. Accorder une autre requte de l'utilisateur et les privilges de manipulation de donnes sur votre table PAYS. Assurez-vous que l'utilisateur ne peut pas passer sur ces privilges d'autres utilisateurs. 10. Reprenez les privilges sur la table PAYS accord un autre utilisateur. Remarque: Pour les exercices 11 17, l'quipe avec un autre groupe 11. Accorder un autre utilisateur d'accder votre table DEPARTEMENTS. Avez-vous accorder l'utilisateur l'accs la table de requte DEPARTEMENTS son. 12. Interroger toutes les lignes de votre table DEPARTEMENTS.

Oracle Database 11g: SQL Fundamentals I 12 - 459

Pratique 12 (suite)

13. Ajouter une nouvelle ligne votre table DEPARTEMENTS. L'quipe 1 doit ajouter l'ducation que le numro de dpartement 500. L'quipe 2 devrait ajouter des ressources humaines en tant que numro de dpartement 510. Interrogez la table de l'autre quipe. 14. Crer un tableau pour traduire de l'autre quipe DPARTEMENTS. 15. Interroger toutes les lignes dans la table de l'quipe adverse l'aide de votre DEPARTEMENTS synonyme.. Team 1 SELECT statement results:

Team 2 SELECT statement results:

Oracle Database 11g: SQL Fundamentals I 12 - 460

Pratique 12 (suite) 16. Rvoquer le privilge SELECT de l'autre quipe. 17. Supprimer la ligne que vous avez insre dans la table DEPARTEMENTS l'tape 13 et enregistrez les modifications.

Oracle Database 11g: SQL Fundamentals I 12 - 461

Você também pode gostar