Opération moins dans MySQL
-
Émuler l’opérateur
MOINS
dans MySQL (8.0.27) -
Quand utiliser les méthodes
NOT IN
,NOT EXISTS
etLEFT 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 DANS
etNON EXISTE
affichent les valeurs uniquement du tableau de gauche (première requête de sélection). - Mais le
LEFT JOIN
/IS NULL
affichera la table de gauche ainsi que les valeursNULL
au 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 NULL
est utilisé pour récupérer des données de plusieurs tables. - Une autre différence est la façon dont ils traitent les valeurs
NULL
de la table de droite carLEFT JOIN
/IS NULL
etNOT EXISTS
sont sémantiquement équivalents alors queNOT IN
ne l’est pas. NOT EXISTS
renvoieTRUE
si aucune ligne remplissant la condition d’égalité n’est trouvée dans la table de droite.NOT IN
se comporte différemment ; si une ligne est trouvée dans la liste,IN
afficheraTRUE
, puisNOT IN
renverraFALSE
. Par contre, si une ligne n’est pas trouvée dans la liste, alorsIN
renverraNULL
, etNOT IN
rendra égalementNULL
car la négation deNULL
estNULL
.
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.