m od ul e b d d - matgou.frama.io
TRANSCRIPT
![Page 2: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/2.jpg)
SOMMAIRESOMMAIREPartie 1: Prérequis
Comprendre ce qu'est une base de donnéesAlgèbre relationnelleLe langage SQL
![Page 3: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/3.jpg)
SOMMAIRESOMMAIREPartie 2: Administration
Motivations?Sécurité/intégritéSauvegarde/restaurationPerformancesGestion du changementMise en œuvre
![Page 4: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/4.jpg)
LE LANGAGE SQLLE LANGAGE SQLStructured Query Language
Langage Informatique normalisé qui sert àeffectuer des opérations sur des bases de données.C’est un langage interprété
![Page 5: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/5.jpg)
4 grandes parties:
DML: Data Manipulation Langage ou Langage demanipulation de données (LMD)
Peupler ou interroger les relationsDDL: Data De�nition Langage ou Langage dedé�nition de données (LDD)
Créer, supprimer, modi�er les relationsLe contrôle des transactions
Application des changements ou points de reprisesLangage de contrôle de données (LCD)
Attribuer ou retirer des droits
![Page 6: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/6.jpg)
Types de données
Type dedonnées
Description
VARCHAR(size) Données de type caractère delongueur variable
CHAR(size) Données de type caractère delongueur �xe
INT / BIGINT Nombre entier
DATE Valeurs de date et d'heure
REAL Nombre réel
![Page 7: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/7.jpg)
Type dedonnées
Description
FLOAT Nombre réel (précision doublé : 25à 53 bits)
![Page 8: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/8.jpg)
D’AUTRES TYPES EXISTENTD’AUTRES TYPES EXISTENT
![Page 9: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/9.jpg)
LES SCHEMASLES SCHEMASUne base de données contient un ou plusieurs schémasnommés qui, eux, contiennent des tables. Les schémas
contiennent aussi d'autres types d'objets nommés(types de données, fonctions et opérateurs, par
exemple).
![Page 10: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/10.jpg)
LES TABLESLES TABLESUne table est un ensemble d'enregistrementsUne table n’est pas ordonnéeOn représente une table par son nom et ses attributs
Employees (employee_id, nom, prenom,
job_id, dept_id)
![Page 11: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/11.jpg)
CLÉCLÉUne clé est un attribut pour lequel les valeurs sont
uniques.
Employees (employee_id, nom, prenom, job_id, dept_id
![Page 12: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/12.jpg)
![Page 13: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/13.jpg)
Les instructions SQL :Ne distinguent pas les majuscules des minuscules.Peuvent être écrites sur une ou plusieurs lignes.Doivent être terminées par un point-virgule (;).
Les mots-clés ne peuvent pas être abrégés ourépartis sur plusieurs lignes.Les clauses sont généralement placées sur des lignesdistinctes.Des indentations sont utilisées pour améliorer lalisibilité.
![Page 14: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/14.jpg)
DMLDMLExtraire des données à l'aide de l'instruction SELECT
![Page 15: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/15.jpg)
L’utilisation la plus courante de SQL consiste à lire desdonnées issues de la base de données. Cela s’effectue
grâce à la commande SELECT, qui retourne desenregistrements dans un tableau de résultat. Cette
commande peut sélectionner une ou plusieurs colonnesd’une table.
![Page 16: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/16.jpg)
SELECT [ ALL | DISTINCT [ ON ( expression [, ...] ) ] ] * | expression [ AS nom_d_affichage ] [, ...] [ FROM éléments_from [, ...] ] [ WHERE condition ] [ GROUP BY expression [, ...] ] [ HAVING condition [, ...] ] [ { UNION | INTERSECT | EXCEPT } [ ALL ] select ] [ ORDER BY expression [ ASC | DESC | USING opérateur ] [, ... [ LIMIT { nombre | ALL } ] [ OFFSET début ] [ FOR { UPDATE | SHARE } [ OF nom_table [, ...] ] [ NOWAIT ]
![Page 17: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/17.jpg)
Toutes les colonnes
SELECT * FROM departements;
![Page 18: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/18.jpg)
Restrictions des colonnes
SELECT department_id, manager_id FROM departements;
![Page 19: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/19.jpg)
Expressions arithmétiques
Créez les expressions avec des données de typenombre et date à l'aide d'opérateurs arithmétiques.
Opérateur Description
+ Ajouter
- Soustraire
* Multiplier
/ Diviser
![Page 20: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/20.jpg)
SELECT last_name, salary, salary + 300 FROM employees;
![Page 21: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/21.jpg)
Priorité des opérateurs
SELECT last_name, salary, 12*salary + 300 FROM employees;
SELECT last_name, salary, 12*(salary + 300) FROM employees;
![Page 22: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/22.jpg)
ALIAS DE COLONNESALIAS DE COLONNESUn alias de colonne :
Renomme un en-tête de colonneEst utile avec les calculsSuit immédiatement le nom d'une colonne (le mot-clé facultatif AS peut également être utilisé entrele nom de la colonne et l'alias)Nécessite des guillemets s'il contient des espacesou des caractères spéciaux, ou s'il distingue lesmajuscules des minuscules
![Page 23: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/23.jpg)
SELECT last_name AS name, commission_pct com FROM employees;
SELECT last_name "Name", salary*12 "Annual Salary" FROM employees;
![Page 24: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/24.jpg)
Opérateur de concatenation
Un opérateur de concaténation :Lie des colonnes ou des chaînes de caractères àd'autres colonnesEst représenté par deux barres verticales (||)
![Page 25: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/25.jpg)
SELECT last_name||job_id AS "Employees" FROM employees;
![Page 26: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/26.jpg)
SELECT last_name ||' is a '||job_id AS "Employee Details" FROM employees;
![Page 27: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/27.jpg)
LIMITER LES LIGNESLIMITER LES LIGNESSÉLECTIONNÉESSÉLECTIONNÉES
Restreindre les lignes renvoyées à l'aide de la clauseWHERE :
La clause WHERE suit la clause FROM.
SELECT *|{[DISTINCT] column|expression [alias],...} FROM table [WHERE condition(s)];
![Page 28: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/28.jpg)
![Page 29: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/29.jpg)
SELECT employee_id, last_name, job_id, department_id FROM employees WHERE department_id = 90 ;
![Page 30: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/30.jpg)
CHAÎNES DE CARACTÈRES ET DATESCHAÎNES DE CARACTÈRES ET DATESLes chaînes de caractères et les dates sont inclusesentre apostrophes.Les valeurs de type caractère distinguent lesmajuscules des minuscules et les valeurs de date sontsensibles au format.
SELECT last_name, job_id, department_id FROM employees WHERE last_name = 'Whalen' ;
![Page 31: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/31.jpg)
CONDITIONS DE COMPARAISONCONDITIONS DE COMPARAISONOpérateur Signi�cation
= Egal à
> Supérieur à
>= Supérieur ou égal à
< Inférieur à
<= Inférieur ou égal à
<> Non égal à
![Page 32: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/32.jpg)
CONDITIONS DE COMPARAISONCONDITIONS DE COMPARAISONOpérateur Signi�cation
BETWEEN...AND...
Entre deux valeurs (incluses)
IN(set) Correspond à une valeurquelconque d'une liste
LIKE Correspond à un modèle decaractère
IS NULL Est une valeur NULL
![Page 33: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/33.jpg)
SELECT last_name, salary FROM employees WHERE salary <= 3000 ;
![Page 34: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/34.jpg)
UTILISER LA CONDITION BETWEENUTILISER LA CONDITION BETWEENSELECT last_name, salary FROM employees WHERE salary BETWEEN 2500 AND 3500 ;
![Page 35: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/35.jpg)
UTILISER LA CONDITION INUTILISER LA CONDITION INSELECT employee_id, last_name, salary, manager_id FROM employees WHERE manager_id IN (100, 101, 201) ;
![Page 36: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/36.jpg)
UTILISER LA CONDITION LIKEUTILISER LA CONDITION LIKEUtilisez la condition LIKE pour effectuer desrecherches de chaînes de caractères valides vial'utilisation de caractères génériquesLes conditions de recherche peuvent contenir soitdes caractères littéraux, soit des nombres :
'%' indique un nombre quelconque de caractères(zéro ou plus).'_' indique un caractère unique.
SELECT first_name FROM employees WHERE first_name LIKE 'S%' ;
![Page 37: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/37.jpg)
UTILISER LA CONDITION LIKEUTILISER LA CONDITION LIKEVous pouvez combiner des caractères de mise encorrespondance de modèle :
SELECT last_name FROM employees WHERE last_name LIKE '_o%' ;
![Page 38: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/38.jpg)
UTILISER LA CONDITION NULLUTILISER LA CONDITION NULLTestez la présence de valeurs NULL avec l'opérateurIS NULL
SELECT last_name, manager_id FROM employees WHERE manager_id IS NULL ;
![Page 39: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/39.jpg)
CODITIONS LOGIQUESCODITIONS LOGIQUESOpérateur Signi�cation
AND Renvoie TRUE si les deux conditionssont vraies.
OR Renvoie TRUE si l'une des deuxconditions est vraie.
NOT Renvoie TRUE si la condition qui suit estfausse.
![Page 40: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/40.jpg)
L'opérateur AND nécessite que les deux conditionssoient vraies :
SELECT employee_id, last_name, job_id, salary FROM employees WHERE salary >=10000Utiliser l'opérateur AND AND job_id LIKE '%MAN%' ;
![Page 41: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/41.jpg)
L'opérateur OR nécessite que l'une des deux conditionssoit vraie :
SELECT employee_id, last_name, job_id, salary FROM employees WHERE salary >= 10000 Utiliser l'opérateur OR OR job_id LIKE '%MAN%' ;
![Page 42: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/42.jpg)
Utiliser l'opérateur NOT :
SELECT last_name, job_id FROM employees WHERE job_id NOT IN ('IT_PROG', 'ST_CLERK', 'SA_REP') ;
![Page 43: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/43.jpg)
Règles de priorité 1/2
Ordre Opérateurs
1 Opérateurs arithmétiques
2 Opérateurs de concatenation
3 Conditions de comparaison
4 IS [NOT] NULL, LIKE, [NOT] IN
5 [NOT] BETWEEN
6 Non égal à
![Page 44: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/44.jpg)
Règles de priorité 2/2
Ordre Opérateurs
7 Condition logique NOT
8 Condition logique AND
9 Condition logique OR
![Page 45: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/45.jpg)
RÈGLES DE PRIORITÉRÈGLES DE PRIORITÉSELECT last_name, job_id, salary FROM employees WHERE job_id = 'SA_REP' OR job_id = 'AD_PRES' AND salary > 15000;
![Page 46: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/46.jpg)
SELECT last_name, job_id, salary FROM employees WHERE (job_id = 'SA_REP' OR job_id = 'AD_PRES') AND salary > 15000;
![Page 47: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/47.jpg)
UTILISER LA CLAUSE ORDER BYUTILISER LA CLAUSE ORDER BYTrier les lignes extraites à l'aide de la clause ORDERBY :
ASC : ordre croissant (par défaut)DESC : ordre décroissant
La clause ORDER BY vient en dernier dansl'instruction SELECT :
SELECT last_name, job_id, department_id, hire_date FROM employees ORDER BY hire_date ;
![Page 48: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/48.jpg)
![Page 49: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/49.jpg)
TRIERTRIERTrier par ordre décroissant :
Trier par alias de colonne :
Trier selon plusieurs colonnes :
SELECT last_name, job_id, department_id, hire_FROM employees ORDER BY hire_date DESC ;
SELECT employee_id, last_name, salary*12 annsaFROM employees ORDER BY annsal ;
SELECT last_name, department_id, salary FROM employees ORDER BY department_id, salary DESC;
![Page 50: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/50.jpg)
EXERCICE 1EXERCICE 1
1. La table UN
2. La table DEUX
![Page 51: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/51.jpg)
![Page 52: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/52.jpg)
SELECT * FROM un ;
SELECT a FROM un ;
SELECT a FROM un WHERE c=1 ;
SELECT a FROM un WHERE c=1 OR c=2 ;
SELECT DISTINCT a FROM un WHERE c=1 OR c=2 ;
SELECT a FROM un ORDER BY b ;
SELECT a,e FROM un,deux ;
SELECT a,e FROM un,deux WHERE c=e ;
![Page 53: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/53.jpg)
EXERCICE 2EXERCICE 2Af�cher le nom, prénom, mail et téléphone desemployés du département 25Af�cher par ordre alphabétique le nom et prénomdes employés qui gagnent entre 1500 et 2900.Af�cher une colonne « Je suis » qui af�che autant defois que nécessaire la phrase « est dans le service
![Page 54: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/54.jpg)
EXERCICES 2EXERCICES 2SELECT last_name, first_name, email, phone_number FROM employees WHERE department_id = 25;
SELECT last_name, first_name FROM employees WHERE salary BETWEEN 1500 AND 2900 ORDER BY last_name;
SELECT first_name || ‘ ‘ || last_name || ‘ est dans le service ‘ || department_id AS ‘Je suis’ FROM employees;
![Page 55: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/55.jpg)
LES FONCTIONSLES FONCTIONSExemples de fonctions monoligne
![Page 56: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/56.jpg)
Ces fonctions convertissent la casse de chaînes decaractères :
Fonction Résultat
LOWER('SQL Course') sql course
UPPER('SQL Course') SQL COURSE
INITCAP('SQL Course') Sql Course
![Page 57: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/57.jpg)
Af�cher le numéro, le nom et le numéro dedépartement de l'employé Higgins :
SELECT employee_id, last_name, department_id FROM employees WHERE last_name = 'higgins'; no rows selected
SELECT employee_id, last_name, department_id FROM employees WHERE LOWER(last_name) = 'higgins';
![Page 58: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/58.jpg)
FONCTIONS NUMÉRIQUESFONCTIONS NUMÉRIQUESROUND : arrondit la valeur à une décimale donnéeTRUNC : tronque la valeur à une décimale donnéeMOD : renvoie le reste d'une division
Fonction Résultat
ROUND(45.926, 2) 45.93
TRUNC(45.926, 2) 45.92
MOD(1600, 300) 100
![Page 59: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/59.jpg)
LES FONCTIONSLES FONCTIONSFonctions de groupe et agrégation
![Page 60: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/60.jpg)
Les fonctions de groupe opèrent sur des ensemblesde lignes a�n de renvoyer un seul résultat par groupe
![Page 61: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/61.jpg)
Types de fonction de groupe
AVG()COUNT()MAX()MIN()SUM()
Avec le mot-clé DISTINCT, la fonction ignore les valeursen double
![Page 62: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/62.jpg)
SYTAXE :SYTAXE :SELECT [column,] group_function(column), ... FROM table [WHERE condition] [GROUP BY column] [ORDER BY column];
![Page 63: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/63.jpg)
Vous pouvez utiliser les fonctions AVG et SUM pour lesdonnées numériques:
SELECT AVG(salary), MAX(salary), FROM employees WHERE job_id LIKE '%REP%';
![Page 64: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/64.jpg)
Vous pouvez utiliser MIN et MAX pour les valeursnumériques, les valeurs de type caractère et les valeurs
de type date.
SELECT MIN(hire_date), MAX(hire_date) FROM employees;
![Page 65: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/65.jpg)
UTILISER LA FONCTION COUNTUTILISER LA FONCTION COUNTCOUNT(*) renvoie le nombre de lignes d'une table :
SELECT COUNT(*) FROM employees WHERE department_id = 50;
![Page 66: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/66.jpg)
UTILISER LA FONCTION COUNTUTILISER LA FONCTION COUNTCOUNT(expr) renvoie le nombre de lignes avec desvaleurs non NULL pour expr :
SELECT COUNT(commission_pct) FROM employees WHERE department_id = 80;
![Page 67: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/67.jpg)
COUNT(DISTINCT expr) renvoie le nombre devaleurs non NULL distinctes de expr.Pour af�cher le nombre de départements distincts dela table EMPLOYEES :
SELECT COUNT(DISTINCT department_id) FROM employees;
![Page 68: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/68.jpg)
GROUPES DE DONNÉESGROUPES DE DONNÉESUtilisation de GROUP BY et HAVING
![Page 69: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/69.jpg)
CRÉER DES GROUPES DE DONNÉESCRÉER DES GROUPES DE DONNÉESVous pouvez diviser les lignes d'une table en groupes
plus petits à l'aide de la clause GROUP BY.
SELECT [column,] group_function(column), ... FROM table [WHERE condition] [GROUP BY column] [ORDER BY column];
![Page 70: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/70.jpg)
CRÉER DES GROUPES DE DONNÉESCRÉER DES GROUPES DE DONNÉES
![Page 71: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/71.jpg)
Toutes les colonnes de la liste SELECT qui ne sont pasincluses dans des fonctions de groupe doivent �gurer
dans la clause GROUP BY.
SELECT department_id, AVG(salary) FROM employees GROUP BY department_id ;
![Page 72: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/72.jpg)
La colonne GROUP BY ne doit pas nécessairement�gurer dans la liste SELECT.
SELECT AVG(salary) FROM employees GROUP BY department_id ;
![Page 73: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/73.jpg)
REGROUPER EN FONCTION DE PLUSIEURSREGROUPER EN FONCTION DE PLUSIEURSCOLONNESCOLONNES
![Page 74: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/74.jpg)
REGROUPER EN FONCTION DE PLUSIEURSREGROUPER EN FONCTION DE PLUSIEURSCOLONNESCOLONNES
SELECT department_id dept_id, job_id, SUM(salary) FROM employees GROUP BY department_id, job_id ;
![Page 75: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/75.jpg)
INTERROGATIONS ILLÉGALES AVEC DESINTERROGATIONS ILLÉGALES AVEC DESFONCTIONS DE GROUPEFONCTIONS DE GROUPE
Toute colonne ou expression de la liste SELECT quine constitue pas une fonction d'agrégation doit�gurer dans la clause GROUP BY :
SELECT department_id, COUNT(last_name) FROM employees;
ERROR: column ‘employees.department_id’ must appear in the GROUP BY clause or be used in an aggregate function LINE 1: SELECT department_id, COUNT(last_name)…
![Page 76: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/76.jpg)
Vous ne pouvez pas utiliser des fonctions de groupedans la clause WHERE.
Utilisez la clause HAVING pour restreindre desgroupes.
SELECT department_id, AVG(salary) FROM employees WHERE AVG(salary) > 8000 GROUP BY department_id;
ERROR: aggregates not allowed in WHERE clause
![Page 77: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/77.jpg)
RESTREINDRE LES RÉSULTATS DESRESTREINDRE LES RÉSULTATS DESGROUPESGROUPES
![Page 78: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/78.jpg)
Lorsque vous utilisez la clause HAVING, le serveurrestreint les groupes de la façon suivante :
1. Les lignes sont regroupées.2. La fonction de groupe est appliquée.3. Les groupes qui correspondent à la clause HAVING
s'af�chent.
SELECT column, group_function FROM table [WHERE condition] [GROUP BY group_by_expression] [HAVING group_condition] [ORDER BY column];
![Page 79: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/79.jpg)
UTILISER LA CLAUSE HAVINGUTILISER LA CLAUSE HAVINGSELECT department_id, MAX(salary) FROM employees GROUP BY department_id HAVING MAX(salary)>10000 ;
![Page 80: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/80.jpg)
UTILISER LA CLAUSE HAVINGUTILISER LA CLAUSE HAVINGSELECT job_id, SUM(salary) PAYROLL FROM employees WHERE job_id NOT LIKE '%REP%' GROUP BY job_id HAVING SUM(salary) > 13000 ORDER BY SUM(salary);
![Page 81: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/81.jpg)
EXERCICESEXERCICES1. Af�chez le salaire le plus élevé, le salaire le plus faible,
la somme des salaires et le salaire moyen de tous lesemployés. Nommez les colonnes respectivementmaximum, minimum, sum et average.
2. Même question, mais pour chaque poste.3. Af�chez l'ID de poste et le salaire mensuel total de
chaque poste (somme pour tous les salariés occupantce job) dont la rémunération totale dépasse 13 000
![Page 82: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/82.jpg)
SELECT MAX(salary) as maximum, MIN(salary) as minimum, SUM(salary) as sum, AVG(salary) as average FROM employees;
![Page 83: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/83.jpg)
SELECT job_id, MAX(salary) as maximum, MIN(salary) as minimum, SUM(salary) as sum, AVG(salary) as average FROM employees GROUP BY job_id;
![Page 84: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/84.jpg)
SELECT job_id, SUM(salary) FROM employees GROUP BY job_id HAVING SUM(salary) > 13000;
![Page 85: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/85.jpg)
SOUS REQUÊTESSOUS REQUÊTES
![Page 86: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/86.jpg)
UTILISER UNE SOUS-INTERROGATION POURUTILISER UNE SOUS-INTERROGATION POURRÉSOUDRE UN PROBLÈMERÉSOUDRE UN PROBLÈME
Qui a un salaire plus élevé que celui d'Abel ?
![Page 87: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/87.jpg)
La sous-interrogation s'exécute une fois avantl'interrogation principale.Le résultat de la sous-interrogation est utilisé parl'interrogation principale.
SELECT select_list FROM table WHERE expr operator (SELECT select_list FROM table);
![Page 88: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/88.jpg)
SELECT last_name FROM employees WHERE salary > (SELECT salary FROM employees WHERE last_name = 'Abel');
![Page 89: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/89.jpg)
RÈGLES D'UTILISATION DESRÈGLES D'UTILISATION DESSOUSINTERROGATIONSSOUSINTERROGATIONS
Incluez les sous-interrogations entre parenthèses.Placez les sous-interrogations à droite de la conditionde comparaison.La clause ORDER BY de la sous-interrogation n'estpas nécessaire, sauf si vous effectuez une analyse detype n-premiers.Utilisez des opérateurs monoligne avec les sous-interrogations monoligne, et des opérateursmultiligne avec les sousinterrogations multiligne
![Page 90: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/90.jpg)
![Page 91: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/91.jpg)
TYPES DE SOUS-INTERROGATIONTYPES DE SOUS-INTERROGATIONSous-interrogation monoligne
Sous-interrogation multiligne
![Page 92: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/92.jpg)
SOUS-INTERROGATIONS MONOLIGNESOUS-INTERROGATIONS MONOLIGNERenvoient une seule ligneUtilisent des opérateurs de comparaison monoligne
![Page 93: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/93.jpg)
EXAMPLE OPÉRATEURS SOUS-EXAMPLE OPÉRATEURS SOUS-INTERROGATIONS MONOLIGNEINTERROGATIONS MONOLIGNE
Opérateur Signi�cation
= Egal à
> Supérieur à
>= Supérieur ou égal à
< Inférieur à
<= Inférieur ou égal à
<> Non égal à
![Page 94: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/94.jpg)
![Page 95: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/95.jpg)
Les employee qui ont un salaraire plus haut quel'employé 143 et qui font le même job que l'employé
143
SELECT last_name, job_id, salary FROM employees WHERE job_id = (SELECT job_id FROM employees WHERE employee_id = 141) AND salary > (SELECT salary FROM employees WHERE employee_id = 143);
![Page 96: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/96.jpg)
LE PLUS BAS SALAIRE ?LE PLUS BAS SALAIRE ?SELECT last_name, job_id, salary FROM employees WHERE salary = (SELECT MIN(salary) FROM employees);
![Page 97: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/97.jpg)
LA CLAUSE HAVING AVEC DESLA CLAUSE HAVING AVEC DESSOUSINTERROGATIONSSOUSINTERROGATIONS
Le serveur exécute d'abord les sousinterrogations.Le serveur renvoie les résultats dans la clauseHAVING de l'interrogation principale.
SELECT department_id, MIN(salary) FROM employees GROUP BY department_id HAVING MIN(salary) > (SELECT MIN(salary) FROM employees WHERE department_id = 50);
![Page 98: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/98.jpg)
QUEL EST LE PROBLÈME DE CETTEQUEL EST LE PROBLÈME DE CETTEINSTRUCTION ?INSTRUCTION ?
SELECT employee_id, last_name FROM employees WHERE salary = (SELECT MIN(salary) FROM employees GROUP BY department_id);
ERROR: more than one row returned by a subquery used as an expres
![Page 99: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/99.jpg)
SOUS-INTERROGATIONS MULTILIGNESOUS-INTERROGATIONS MULTILIGNERenvoient plusieurs lignesUtilisent des opérateurs de comparaison multiligne
Opérateur Signi�cation
IN Egal à un membre quelconque de la liste
ANY Compare la valeur à chaque valeurrenvoyée par la sous-interrogation
ALL Compare la valeur à toutes les valeursrenvoyées par la sous-interrogation
![Page 100: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/100.jpg)
UTILISER L'OPÉRATEUR ANYUTILISER L'OPÉRATEUR ANY
Résultat de la sous-interogation : 9000, 6000, 4200
SELECT employee_id, last_name, job_id, salary FROM employees WHERE salary < ANY (SELECT salary FROM employees WHERE job_id = 'IT_PROG') AND job_id <> 'IT_PROG';
![Page 101: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/101.jpg)
UTILISER L'OPÉRATEUR ALLUTILISER L'OPÉRATEUR ALL
Résultat de la sous-interogation : 9000, 6000, 4200
SELECT employee_id, last_name, job_id, salary FROM employees WHERE salary < ALL (SELECT salary FROM employees WHERE job_id = 'IT_PROG') AND job_id <> 'IT_PROG';
![Page 102: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/102.jpg)
EXERCICEEXERCICE1. Af�chez en une requête le salaire moyen de tous les
employés et le salaire moyen des employés pour lesdépartement 25 et 27.
![Page 103: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/103.jpg)
SELECT avg(salary) as moyenne, (SELECT avg(salary) FROM employees WHERE department_id=25) as 'Moyenne dpt25', (SELECT avg(salary) FROM employees WHERE department_id=27) as 'Moyenne dpt27' FROM employees;
![Page 104: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/104.jpg)
AFFICHER DES DONNÉESAFFICHER DES DONNÉESISSUES DE PLUSIEURSISSUES DE PLUSIEURS
TABLESTABLESUnion, Intersection, Différence
![Page 105: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/105.jpg)
L'opérateur UNION renvoie les résultats des deuxinterrogations après avoir éliminé les doublons
![Page 106: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/106.jpg)
Af�chez les informations relatives au poste actuel etau poste précédent de tous les employés. Af�chezchaque employé une seule fois.
SELECT employee_id, job_id FROM employees UNIONSELECT employee_id, job_id FROM job_history;
![Page 107: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/107.jpg)
L'opérateur UNION ALL renvoie les résultats desdeux interrogations en incluant tous les doublons
![Page 108: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/108.jpg)
UTILISER L'OPÉRATEUR UNION ALLUTILISER L'OPÉRATEUR UNION ALLAf�chez les informations relatives au poste actuel etau poste précédent de tous les employés.
SELECT employee_id, job_id FROM employees UNION ALL SELECT employee_id, job_id, department_id FROM job_history ORDER BY employee_id;
![Page 109: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/109.jpg)
L'opérateur INTERSECT renvoie les lignes qui sontcommunes aux deux interrogations.
![Page 110: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/110.jpg)
UTILISER L'OPÉRATEUR INTERSECTUTILISER L'OPÉRATEUR INTERSECTAf�chez l'ID d'employé et l'ID de poste des employésdont le poste actuel est le même que celui qu'ilsoccupaient lors de leur embauche (c'est-à-dire ceuxqui ont changé de poste, mais qui occupentaujourd'hui le même poste qu'à l'origine).
SELECT employee_id, job_id FROM employees INTERSECT SELECT employee_id, job_id FROM job_history;
![Page 111: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/111.jpg)
L'opérateur MINUS renvoie les lignes de la premièreinterrogation qui ne sont pas présentes dans la
deuxième interrogation
![Page 112: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/112.jpg)
UTILISER L'OPÉRATEUR MINUSUTILISER L'OPÉRATEUR MINUSAf�chez l'ID des employés qui ont changé de poste.
SELECT employee_id,job_id FROM employees MINUS SELECT employee_id,job_id FROM job_history;
![Page 113: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/113.jpg)
AFFICHER DES DONNÉESAFFICHER DES DONNÉESISSUES DE PLUSIEURSISSUES DE PLUSIEURS
TABLESTABLESLes jointures
![Page 114: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/114.jpg)
AFFICHER DES DONNÉES ISSUES DEAFFICHER DES DONNÉES ISSUES DEPLUSIEURS TABLESPLUSIEURS TABLES
![Page 115: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/115.jpg)
![Page 116: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/116.jpg)
JOINDRE DES TABLES À L'AIDE DE LAJOINDRE DES TABLES À L'AIDE DE LASYNTAXE SQLSYNTAXE SQL
Une jointure sert à interroger des données deplusieurs tables
Ecrivez la condition de jointure dans la clauseWHERE.
Placez le nom de la table avant le nom de la colonnelorsque celui-ci �gure dans plusieurs tables.
SELECT table1.column, table2.column FROM table1, table2 WHERE table1.column1 = table2.column2;
![Page 117: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/117.jpg)
DÉFINITION D'UNE ÉQUIJOINTUREDÉFINITION D'UNE ÉQUIJOINTURE
![Page 118: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/118.jpg)
EXTRAIRE DES ENREGISTREMENTS À L'AIDEEXTRAIRE DES ENREGISTREMENTS À L'AIDED'ÉQUIJOINTURESD'ÉQUIJOINTURES
SELECT employees.employee_id, employees.last_name, employees.department_id, departments.department_id, departments.location_id FROM employees, departments WHERE employees.department_id = departments.department_id;
![Page 119: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/119.jpg)
![Page 120: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/120.jpg)
DIFFÉRENCIER LES NOMS DE COLONNEDIFFÉRENCIER LES NOMS DE COLONNEUtilisez des pré�xes qui précisent le nom de la tablepour différencier les noms de colonne appartenant àplusieurs tables.L'utilisation de pré�xes désignant la table amélioreles performances.Différenciez des colonnes de même nom appartenantà plusieurs tables en utilisant des alias de colonne.
![Page 121: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/121.jpg)
UTILISER DES ALIAS DE TABLEUTILISER DES ALIAS DE TABLESimpli�ez les interrogations à l'aide des alias de table.L'utilisation de pré�xes désignant la table amélioreles performances.
SELECT e.employee_id, e.last_name, e.department_id, d.department_id, d.location_id FROM employees e , departments d WHERE e.department_id = d.department_id;
![Page 122: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/122.jpg)
JOINDRE PLUS DE DEUX TABLESJOINDRE PLUS DE DEUX TABLESPour joindre n tables entre elles, il faut au minimumn-1 conditions de jointure. Par exemple, deuxjointures au moins sont nécessaires pour joindre trois
tables.
![Page 123: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/123.jpg)
NON-ÉQUIJOINTURESNON-ÉQUIJOINTURES
![Page 124: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/124.jpg)
EXTRAIRE DES ENREGISTREMENTS À L'AIDEEXTRAIRE DES ENREGISTREMENTS À L'AIDEDE NON-ÉQUIJOINTURESDE NON-ÉQUIJOINTURES
SELECT e.last_name, e.salary, j.grade_level FROM employees e, job_grades j WHERE e.salary BETWEEN j.lowest_sal AND j.highest_sal;
![Page 125: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/125.jpg)
JOINDRE UNE TABLE À ELLE-MÊMEJOINDRE UNE TABLE À ELLE-MÊME
![Page 126: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/126.jpg)
JOINDRE UNE TABLE À ELLE-MÊMEJOINDRE UNE TABLE À ELLE-MÊMESELECT worker.last_name || ' works for ' || manager.last_name FROM employees worker, employees manager WHERE worker.manager_id = manager.employee_id ;
![Page 127: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/127.jpg)
JOINDRE DES TABLES À L'AIDE DE LAJOINDRE DES TABLES À L'AIDE DE LASYNTAXE SQL1999SYNTAXE SQL1999
Une jointure permet d'interroger des données deplusieurs tables
SELECT table1.column, table2.column FROM table1 [CROSS JOIN table2] | [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)];
![Page 128: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/128.jpg)
La clause CROSS JOIN génère le produit cartésien dedeux tables.
SELECT last_name, department_name FROM employees CROSS JOIN departments ;
![Page 129: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/129.jpg)
GÉNÉRER UN PRODUIT CARTÉSIENGÉNÉRER UN PRODUIT CARTÉSIEN
![Page 130: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/130.jpg)
GÉNÉRER UN PRODUIT CARTÉSIENGÉNÉRER UN PRODUIT CARTÉSIENUn produit cartésien est généré :
lorsqu'une condition de jointure est omise,lorsqu'une condition de jointure est incorrecte,lorsque toutes les lignes de la première table sontjointes à toutes les lignes de la seconde.
Pour éviter tout produit cartésien, insérez unecondition de jointure correcte dans la clauseWHERE.
![Page 131: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/131.jpg)
CRÉER DES JOINTURES NATURELLESCRÉER DES JOINTURES NATURELLESLa clause NATURAL JOIN utilise toutes les colonnesdes deux tables portant le même nom.Elle sélectionne les lignes des deux tables dont lesvaleurs sont identiques dans toutes les colonnescorrespondantes.Une erreur est renvoyée lorsque des colonnesportant le même nom présentent des types dedonnées différents.
![Page 132: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/132.jpg)
EXTRAIRE DES ENREGISTREMENTS À L'AIDEEXTRAIRE DES ENREGISTREMENTS À L'AIDEDE JOINTURES NATURELLESDE JOINTURES NATURELLES
SELECT department_id, department_name, location_id, city FROM departments NATURAL JOIN locations ;
![Page 133: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/133.jpg)
CRÉER DES JOINTURES À L'AIDE DE LACRÉER DES JOINTURES À L'AIDE DE LACLAUSE USINGCLAUSE USING
Si plusieurs colonnes portent le même nom, mais nepossèdent pas le même type de données, la clauseNATURAL JOIN ne peut être employée, et doit êtremodi�ée en JOIN à l'aide de la clause USING pourindiquer les colonnes à utiliser pour une équijointure.La clause USING vous permet de n'indiquer qu'uneseule colonne lorsque plusieurs colonnes secorrespondent.
![Page 134: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/134.jpg)
N'utilisez pas de nom ou d'alias de table dans lesnoms des colonnes référencées.Les clauses NATURAL JOIN et USING s'excluentmutuellement.
![Page 135: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/135.jpg)
EXTRAIRE DES ENREGISTREMENTS À L'AIDEEXTRAIRE DES ENREGISTREMENTS À L'AIDEDE LA CLAUSE USINGDE LA CLAUSE USING
SELECT e.employee_id, e.last_name, d.location_id FROM employees e JOIN departments d USING (department_id) ;
![Page 136: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/136.jpg)
CRÉER DES JOINTURES À L'AIDE DE LACRÉER DES JOINTURES À L'AIDE DE LACLAUSE ONCLAUSE ON
La condition de la jointure naturelle est uneéquijointure de toutes les colonnes portant le mêmenom.La clause ON permet d'indiquer des conditionsarbitraires ou de préciser les colonnes à joindre.La condition de jointure est distincte des autresconditions de recherche.La clause ON simpli�e la compréhension du code.
![Page 137: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/137.jpg)
EXTRAIRE DES ENREGISTREMENTS À L'AIDEEXTRAIRE DES ENREGISTREMENTS À L'AIDEDE LA CLAUSE ONDE LA CLAUSE ON
SELECT e.employee_id, e.last_name, e.department_id, d.department_id, d.location_idFROM employees e JOIN departments d ON (e.department_id = d.department_id);
![Page 138: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/138.jpg)
CRÉER DES JOINTURES À TROIS LIENS ÀCRÉER DES JOINTURES À TROIS LIENS ÀL'AIDE DE LA CLAUSE ONL'AIDE DE LA CLAUSE ON
SELECT employee_id, city, department_name FROM employees e JOIN departments d ON d.department_id = e.department_id JOIN locations l ON d.location_id = l.location_id;
![Page 139: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/139.jpg)
JOINTURES INNER ET OUTERJOINTURES INNER ET OUTERLa jointure de deux tables ne renvoyant que les lignescorrespondantes est une jointure interne.Une jointure entre deux tables renvoyant le résultatde la jointure interne ainsi que les lignes sanscorrespondance de la table de gauche (ou de droite)est une jointure externe gauche (ou droite).Une jointure entre deux tables renvoyant le résultatd'une jointure interne et d'une jointure gauche etdroite est une jointure externe complète.
![Page 140: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/140.jpg)
JOINTURE LEFT OUTER JOINJOINTURE LEFT OUTER JOIN
Cette interrogation extrait toutes les lignes de la tableEMPLOYEES (table de gauche) même s'il n'existe
aucune correspondance dans la table DEPARTMENTS.
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) ;
![Page 141: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/141.jpg)
![Page 142: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/142.jpg)
JOINTURE RIGHT OUTER JOINJOINTURE RIGHT OUTER JOIN
Cette interrogation extrait toutes les lignes de la tableDEPARTMENTS (table de droite) même s'il n'existeaucune correspondance dans la table EMPLOYEES.
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) ;
![Page 143: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/143.jpg)
![Page 144: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/144.jpg)
JOINTURE FULL OUTER JOINJOINTURE FULL OUTER JOIN
Cette interrogation extrait toutes les lignes de la tableEMPLOYEES, même s'il n'existe aucune
correspondance dans la table DEPARTMENTS. Elle
SELECT e.last_name, e.department_id, d.department_name FROM employees e FULL OUTER JOIN departments d ON (e.department_id = d.department_id) ;
![Page 145: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/145.jpg)
extrait également toutes les lignes de la tableDEPARTMENTS, même s'il n'existe aucunecorrespondance dans la table EMPLOYEES
![Page 146: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/146.jpg)
DMLDMLAjouter des données à l'aide de de l'instruction INSERT
![Page 147: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/147.jpg)
LANGAGE DE MANIPULATION DE DONNÉESLANGAGE DE MANIPULATION DE DONNÉESUne instruction DML est exécutée pour :
Ajouter de nouvelles lignes à une tableModi�er des lignes existantes d'une tableSupprimer des lignes existantes d'une table
Une transaction est constituée d'un ensembled'instructions DML qui constituent une unité detravail logique
![Page 148: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/148.jpg)
SYNTAXE DE L'INSTRUCTION INSERTSYNTAXE DE L'INSTRUCTION INSERTAjouter de nouvelles lignes à une table à l'aide del'instruction INSERT :
Avec cette syntaxe, une seule ligne est insérée à lafois.
INSERT INTO table [(column [, column...])] VALUES (value [, value...]);
![Page 149: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/149.jpg)
INSÉRER DE NOUVELLES LIGNESINSÉRER DE NOUVELLES LIGNESInsérez une nouvelle ligne contenant des valeurspour chaque colonne.Répertoriez les valeurs dans l'ordre par défaut descolonnes de la table.Vous pouvez également indiquer les colonnes dans laclause INSERT.
Incluez les valeurs de type caractère et de type dateentre apostrophes
INSERT INTO departments(department_id, department_name, manager_id, location_id) VALUES (70, 'Public Relations', 100, 1700);
![Page 150: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/150.jpg)
INSÉRER DES LIGNES AVEC DES VALEURSINSÉRER DES LIGNES AVEC DES VALEURSNULLNULL
Méthode implicite : omettez la colonne dans la liste.
Méthode explicite : indiquez le mot-clé NULL dans laclause VALUES.
INSERT INTO departments (department_id, department_name ) VALUES (30, 'Purchasing');
INSERT INTO departments VALUES (100, 'Finance', NULL, NULL); VALUES (30, 'Purchasing');
![Page 151: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/151.jpg)
COPIER DES LIGNES À PARTIR D'UNE AUTRECOPIER DES LIGNES À PARTIR D'UNE AUTRETABLETABLE
Ecrivez l'instruction INSERT avec unesousinterrogation :
N'utilisez pas la clause VALUES.Mettez en correspondance le nombre de colonnes dela clause INSERT avec celui de la sous-interrogation.
INSERT INTO sales_reps(id, name, salary, commission_pct) SELECT employee_id, last_name, salary, commission_pct FROM employees WHERE job_id LIKE '%REP%';
![Page 152: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/152.jpg)
DMLDMLModi�er des données à l'aide de de l'instruction
UPDATE
![Page 153: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/153.jpg)
MODIFIER DES DONNÉES DANS UNE TABLEMODIFIER DES DONNÉES DANS UNE TABLE
![Page 154: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/154.jpg)
SYNTAXE DE L'INSTRUCTION UPDATESYNTAXE DE L'INSTRUCTION UPDATEModi�er des lignes existantes à l'aide de l'instruction
UPDATE
UPDATE table SET column = value [, column = value, ...] [WHERE condition];
![Page 155: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/155.jpg)
METTRE À JOUR DES LIGNES DANS UNEMETTRE À JOUR DES LIGNES DANS UNETABLETABLE
Des lignes spéci�ques sont modi�ées si vous indiquezla clause WHERE
Toutes les lignes de la table sont modi�ées si vousomettez la clause WHERE :
UPDATE employees SET department_id = 70
UPDATE copy_emp SET department_id = 110; WHERE employee_id = 113;
![Page 156: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/156.jpg)
MISE À JOUR AVEC UNEMISE À JOUR AVEC UNESOUSINTERROGATIONSOUSINTERROGATION
Mettez à jour le poste et le salaire de l'employé 114a�n qu'ils correspondent à ceux de l'employé 205.
UPDATE employees SET job_id = (SELECT job_id FROM employees WHERE employee_id = salary = (SELECT salary FROM employees WHERE employee_id = 20WHERE employee_id = 114;
![Page 157: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/157.jpg)
DMLDMLSupprimer des données
![Page 158: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/158.jpg)
INSTRUCTION DELETEINSTRUCTION DELETEVous pouvez supprimer des lignes existantes d'une
table à l'aide de l'instruction DELETE :
DELETE [FROM] table [WHERE condition];
![Page 159: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/159.jpg)
SUPPRIMER DES LIGNES D'UNE TABLESUPPRIMER DES LIGNES D'UNE TABLEDes lignes spéci�ques sont supprimées si vousindiquez la clause WHERE :
Toutes les lignes de la table sont supprimées si vousomettez la clause WHERE :
DELETE FROM departments WHERE department_name = 'Finance';
DELETE FROM copy_emp;
![Page 160: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/160.jpg)
SUPPRIMER DES LIGNES EN FONCTIONSUPPRIMER DES LIGNES EN FONCTIOND'UNE AUTRE TABLED'UNE AUTRE TABLE
Utilisez des sous-interrogations dans les instructionsDELETE a�n de supprimer des lignes d'une table en
fonction des valeurs d'une autre table :
DELETE FROM employees WHERE department_id IN (SELECT department_id FROM departments WHERE department_name LIKE '%Public%');
![Page 161: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/161.jpg)
INSTRUCTION TRUNCATEINSTRUCTION TRUNCATESupprime toutes les lignes d'une table ; la table estalors vide et sa structure est intacteEst une instruction de langage de dé�nition dedonnées (DDL) et non une instruction DMLSyntaxe :
TRUNCATE TABLE table_name;
![Page 162: M OD UL E B D D - matgou.frama.io](https://reader036.vdocuments.net/reader036/viewer/2022062515/62b283e605cb5256bc4acb06/html5/thumbnails/162.jpg)
QUESTION ?QUESTION ?=> DDL (Manipuler les structures de données)