Opération moins dans MySQL

Mehvish Ashiq 15 février 2024
  1. Émuler l’opérateur MOINS dans MySQL (8.0.27)
  2. Quand utiliser les méthodes NOT IN, NOT EXISTS et LEFT JOIN/IS NULL
  3. Conclusion
Opération moins dans MySQL

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 :

opération moins dans mysql - données de la table des étudiants

Tableau des cours :

opération moins dans mysql - données de la table de 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 :

opération moins dans mysql - pas dans

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 :

opération moins dans mysql - not exists

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 :

opération moins dans mysql - jointure gauche et est nul

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 et NON 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 valeurs NULL 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, car LEFT 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 car LEFT JOIN/IS NULL et NOT EXISTS sont sémantiquement équivalents alors que NOT IN ne l’est pas.
  • NOT EXISTS renvoie TRUE 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 affichera TRUE, puis NOT IN renverra FALSE. Par contre, si une ligne n’est pas trouvée dans la liste, alors IN renverra NULL, et NOT IN rendra également NULL car la négation de NULL est NULL.

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.

Mehvish Ashiq avatar Mehvish Ashiq avatar

Mehvish Ashiq is a former Java Programmer and a Data Science enthusiast who leverages her expertise to help others to learn and grow by creating interesting, useful, and reader-friendly content in Computer Programming, Data Science, and Technology.

LinkedIn GitHub Facebook