Académique Documents
Professionnel Documents
Culture Documents
Si une table A contient 10 lignes et une table B contient 5 lignes, le CROSS JOIN ou le produit
cartésien va produire 50 résultats (10 x 5 = 50). En général la commande CROSS JOIN est combinée
avec la commande WHERE pour filtrer les résultats qui respectent certaines conditions.
JOINTURE – TYPES (CROSS JOIN)
JOINTURE – TYPES (INNER JOIN)
La jointure interne, qui se fait grâce à la commande INNER JOIN ou JOIN est une jointure qui
permet de sélectionner les enregistrements ayant des correspondances entre les tables jointes.
SELECT *
FROM Table1
INNER JOIN Table2 ON Table1.id= Table2.fk_id
JOINTURE – TYPES (INNER JOIN)
SELECT EMPLOYEES.ENAME, EMPLOYEES.SALARY, DEPARTMENTS.DNAME
FROM EMPLOYEES, DEPARTMENTS
WHERE EMPLOYEES.DEPARTMENT_ID=DEPARTMENTS.DEPARTMENT_ID;
La commande FULL JOIN n’existe pas en MySQL mais il existe une alternative pour avoir le même
résultat
SELECT * FROM table1 LEFT JOIN table2 ON table1.id = table2.fk_id
UNION
SELECT * FROM table1 RIGHT JOIN table2 ON table1.id = table2.fk_id
JOINTURE – TYPES (FULL OUTER
JOIN)
SELECT * FROM employees
LEFT OUTER JOIN departments ON EMPLOYEES.D_ID = DEPARTMENTS.DEPARTMENT_ID
UNION
SELECT * FROM employees
RIGHT OUTER JOIN departments ON EMPLOYEES.D_ID = DEPARTMENTS.DEPARTMENT_ID
JOINTURE – TYPES (SELF JOIN)
Un SELF JOIN correspond à une jointure d’une table avec elle-même. Ce type de requête n’est
pas si commun mais très pratique dans le cas où une table lie des informations avec des
enregistrements de la même table.
Exemple : on a une table employé dans laquelle est renseigné le numéro du manager de
l’employé et on veut avoir les noms des employés avec leurs noms de managers
JOINTURE – TYPES (SELF JOIN)
SELECT e1.ename AS Employe, e2.ename AS Manager
FROM employees AS e1
JOIN employees AS e2 ON e1.id_manager = e2. employee_id
JOINTURE – UTILISER LES ALIAS
Pensez à utiliser les alias afin de simplifier les interrogations.
L'utilisation des préfixes désignant la table améliore les performances.
Les clés primaires de la table student et course seront des clés étrangères
dans la table de liaison
La clé primaire de la table de liaison sera la combinaison des deux clés
étrangères
On peut bien sûr ajouter d’autres champs à la table de liaison comme par
exemple date_debut_cours
TYPE DE RELATION - PLUSIEURS A
PLUSIEURS
CREATE TABLE student ( CREATE TABLE course (
student_id INT NOT NULL AUTO_INCREMENT, course_id INT NOT NULL AUTO_INCREMENT,
sname VARCHAR(255) NOT NULL, cname VARCHAR(255) NOT NULL,
PRIMARY KEY (student_id) PRIMARY KEY (course_id)
) ENGINE=INNODB; ) ENGINE=INNODB;
INSERT INTO employees(employee_id, ename, salary, d_id) VALUES (6, 'newperson', '5000.00', 10);
Sous- requête
SOUS-REQUETES – CONDITION DE
SELECTION
SELECT .…
Requête
FROM .…
externe
WHERE [ Expression ] Opérateur (SELECT ….
FROM …. Requête
WHERE ….); imbriquée
Cette requête se traduit par : sélectionner toutes les colonnes de table1, où la condition est
supérieure à n’importe quel résultat de la sous-requête.
Les opérateurs conditionnels peuvent être les suivants : =, <, >, <>, !=,<=, >=, !> ou !<.
SOUS-REQUETES – ANY / SOME
SELECT colonne1 FROM table1
WHERE colonne1 > ANY ( SELECT colonne1
FROM table2)
Cette requête se traduit par : sélectionner toutes les colonnes de table1, où colonne1 est
supérieure à tous les résultats de la sous-requête
Les opérateurs conditionnels peuvent être les suivants : =, <, >, <>, !=,<=, >=, !> ou !<.
SOUS-REQUETES – ALL
SELECT colonne1 FROM table1
WHERE colonne1 > ALL ( SELECT colonne1
FROM table2)
Dans l’exemple ci-dessus, s’il existe au moins une ligne dans table2 dont nom_colonne3 et égal
à 10, alors la sous-requête retournera au moins un résultat. Et donc, la condition sera vérifiée et
la requête principale retournera les résultats de la colonne nom_colonne1 de table1.
SOUS-REQUETES – NOT EXISTS
La commande NOT EXISTS fonctionne comme EXISTS, sauf que la clause WHERE, dans laquelle
ce paramètre est utilisé, est remplie lorsque la sous-requête ne retourne aucune ligne.
Dans l’exemple ci-dessus, s’il n’y a aucune ligne dans table2 dont nom_colonne3 et égal à 10,
alors la sous-requête ne retournera aucun résultat. Et donc, la condition sera vérifiée et la
requête principale retournera les résultats de la colonne nom_colonne1 de table1.
SOUS-REQUETES – FICHIER DE LA REQUETE
PRINCIPALE
Une sous-requête peut être utilisée en tant que fichier de la requête principale, les sous-
requêtes sont valides dans la clause FROM d'une commande SELECT.
SELECT *
FROM (SELECT * FROM table1) AS T1
La clause AS est obligatoire, car les tables de la clause FROM doivent avoir un nom.
Toutes les colonnes de la sous-requête doivent avoir des noms distincts.
SQL
VUES
VUES – PRESENTATION
Une commande SELECT peut être conservée dans une variable appelée
"vue".
Une vue est une table virtuelle :
elle n'a pas d'existence physique ;
elle est recalculée à chaque utilisation ;
elle est équivalente à une requête.
VUES – CREATION
CREATE [OR REPLACE] VIEW Nom_Vue [(ColonneA,ColonneB,…)]
AS SELECT … ;