Opération moins dans MySQL
-
Émuler l’opérateur
MOINSdans MySQL (8.0.27) -
Quand utiliser les méthodes
NOT IN,NOT EXISTSetLEFT JOIN/IS NULL - Conclusion
L’opérateur MOINS est utilisé en SQL pour trouver des éléments uniques de la table A qui ne sont pas présents dans la table B.
En parcourant ce tutoriel, nous verrons comment simuler l’opérateur MOINS dans MySQL pour obtenir les résultats souhaités. Nous le comprendrons en utilisant NOT IN, NOT EXISTS, LEFT JOIN, et IS NULL.
Nous verrons également la syntaxe de chacune des méthodes mentionnées et explorerons certaines différences entre elles.
Émuler l’opérateur MOINS dans MySQL (8.0.27)
Utilisation de NOT IN dans MySQL
Prenons un exemple de relation étudiant-cours, créons une base de données et deux tables dans la base de données. L’un est nommé student, et l’autre est le course.
La table student contient les colonnes ID, FIRST_NAME, LAST_NAME, GENDER, et la table course contient les colonnes COURSE_CODE, COURSE_TITLE, et STUDENT_ID.
Exemple de code :
/*
create the database and use it for table creation and other manipulation*/
CREATE SCHEMA db_practice_minus_operator;
USE db_practice_minus_operator;
# create student table
CREATE TABLE db_practice_minus_operator.student (
ID INT AUTO_INCREMENT PRIMARY KEY,
FIRST_NAME VARCHAR(64) NOT NULL,
LAST_NAME VARCHAR(64) NOT NULL,
GENDER VARCHAR(30) NOT NULL
);
#create course table
CREATE TABLE course (
COURSE_CODE VARCHAR(60) NOT NULL,
COURSE_TITLE VARCHAR(64) NOT NULL,
STUDENT_ID INT NOT NULL,
PRIMARY KEY(COURSE_CODE),
FOREIGN KEY (STUDENT_ID) REFERENCES student(ID)
);
N’oubliez pas que le tableau course ne contient que des matières scientifiques et nous voulons connaître les étudiants qui ne se sont inscrits à aucun des cours scientifiques. Remplissons les tables et regardons les tables student et course.
Exemple de code :
# populate student table
INSERT INTO
student(FIRST_NAME, LAST_NAME,GENDER)
VALUES
('Shaajeel', 'Daniel', 'Male'),
('Nayya', 'Preston', 'Female'),
('James', 'Robert', 'Male'),
('Jennifer', 'John', 'Female'),
('Sarah', 'Paul', 'Female'),
('Karen', 'Donald','Female'),
('Thomas', 'Christopher','Male'),
('Lisa', 'Mark', 'Female'),
('Anthony', 'Richard', 'Male'),
('Matthew', 'Charles', 'Male');
# populate course table
INSERT INTO
course(COURSE_CODE, COURSE_TITLE, STUDENT_ID)
VALUES
(125854, 'Biology', 1),
(542968, 'Mathematics', 2),
(125648, 'Computer Science', 5),
(654891, 'Physics', 4),
(483215, 'Chemistry', 8),
(147934, 'Artificial Intelligence',6);
Les données actuelles dans les deux tableaux se présentent comme suit.
Table des élèves :

Tableau des cours :

Maintenant, écrivez la requête SQL suivante pour comprendre la simulation d’opération MOINS dans MySQL.
Exemple de code :
# Simulate Minus Operator in MySQL
SELECT * FROM student
WHERE student.ID NOT IN
(SELECT STUDENT_ID FROM course);
Production :

Utilisation de NOT EXISTS dans MySQL
Exemple de code :
# Simulate Minus Operator in MySQL
SELECT * FROM student std
WHERE NOT EXISTS
(SELECT STUDENT_ID FROM course WHERE std.ID = STUDENT_ID);
Production :

Utiliser LEFT JOIN et IS NULL dans MySQL
Exemple de code :
SELECT * FROM student
LEFT JOIN course on student.ID = course.STUDENT_ID
WHERE course.STUDENT_ID IS NULL;
Production :

Dans la sortie ci-dessus, COURSE_CODE, COURSE_TITLE et STUDENT_ID sont visibles comme NULL car ces étudiants ne se sont inscrits ou ne se sont inscrits à aucun cours.
Vous pouvez également comparer les colonnes ID, FIRST_NAME, LAST_NAME et GENDER avec la sortie d’autres méthodes pour voir que tout fonctionne comme prévu.
Quand utiliser les méthodes NOT IN, NOT EXISTS et LEFT JOIN/IS NULL
La question est maintenant de savoir comment sélectionner l’une de ces trois méthodes. Vous pouvez décider en fonction de quelques points de base.
- La différence majeure entre ces trois méthodes est que
PAS DANSetNON EXISTEaffichent les valeurs uniquement du tableau de gauche (première requête de sélection). - Mais le
LEFT JOIN/IS NULLaffichera la table de gauche ainsi que les valeursNULLau lieu des valeurs de la table de droite où il n’y a pas de correspondance trouvée entre la table de gauche et de droite, carLEFT JOIN/IS NULLest utilisé pour récupérer des données de plusieurs tables. - Une autre différence est la façon dont ils traitent les valeurs
NULLde la table de droite carLEFT JOIN/IS NULLetNOT EXISTSsont sémantiquement équivalents alors queNOT INne l’est pas. NOT EXISTSrenvoieTRUEsi aucune ligne remplissant la condition d’égalité n’est trouvée dans la table de droite.NOT INse comporte différemment ; si une ligne est trouvée dans la liste,INafficheraTRUE, puisNOT INrenverraFALSE. Par contre, si une ligne n’est pas trouvée dans la liste, alorsINrenverraNULL, etNOT INrendra égalementNULLcar la négation deNULLestNULL.
Conclusion
Compte tenu de tous les détails discutés ci-dessus, nous avons conclu que MySQL ne prend pas en charge l’opération MINUS, mais il existe d’autres façons d’émuler l’opérateur MINUS. Vous pouvez l’utiliser selon vos besoins, votre confort et vos exigences.
