Database
 sql >> Base de données >  >> RDS >> Database

12 opérateurs SQL couramment utilisés

En SQL, un opérateur est un caractère spécial ou un mot-clé spécifiant une action effectuée sur une ou plusieurs expressions.

Les opérateurs SQL font partie intégrante de SQL et nous permettent d'écrire des requêtes qui renvoient des résultats pertinents.

Dans cet article, je présente 12 des opérateurs SQL les plus couramment utilisés lors de l'écriture de requêtes SQL.

Les égaux (= ) Opérateur

L'opérateur égal à (= ) est probablement l'opérateur le plus couramment utilisé en SQL. Il compare l'égalité de deux expressions. Même si vous n'êtes que vaguement familiarisé avec SQL, vous connaissez probablement cet opérateur.

Imaginez que nous ayons une base de données pour un hôtel pour animaux de compagnie et que nous souhaitions obtenir des informations sur tous les animaux nommés Fluffy.

Dans ce cas, nous pourrions faire ceci :

SELECT PetId, PetName, DOB 
FROM Pets
WHERE PetName = 'Fluffy';

Résultat :

+---------+-----------+------------+
| PetId   | PetName   | DOB        |
|---------+-----------+------------|
| 1       | Fluffy    | 2020-11-20 |
| 6       | Fluffy    | 2020-09-17 |
+---------+-----------+------------+

Notre requête utilise l'opérateur Equals (= ) pour comparer l'égalité de la valeur du PetName colonne et la chaîne Fluffy .

Dans notre cas, nous pouvons voir que l'hôtel pour animaux de compagnie a actuellement deux animaux appelés Fluffy.

Le supérieur à (> ) Opérateur

L'opérateur Supérieur à (> ) compare deux expressions et renvoie TRUE si l'opérande gauche a une valeur supérieure à l'opérande droit; sinon, le résultat est FALSE .

SELECT PetName, DOB 
FROM Pets
WHERE DOB > '2020-01-01';

Résultat :

+-----------+------------+
| PetName   | DOB        |
|-----------+------------|
| Fluffy    | 2020-11-20 |
| Wag       | 2020-03-15 |
| Tweet     | 2020-11-28 |
| Fluffy    | 2020-09-17 |
+-----------+------------+

Dans ce cas, il compare la valeur du DOB colonne et la date 2020-01-01 pour voir si le DOB colonne est plus grande.

Le moins que (< ) Opérateur

L'opérateur Inférieur à (< ) fait le contraire. Il compare deux expressions et renvoie TRUE si l'opérande gauche a une valeur inférieure à l'opérande droit; sinon, le résultat est FALSE .

SELECT PetName, DOB 
FROM Pets
WHERE DOB < '2020-01-01';

Résultat :

+-----------+------------+
| PetName   | DOB        |
|-----------+------------|
| Fetch     | 2019-08-16 |
| Scratch   | 2018-10-01 |
+-----------+------------+

Supérieur ou égal à (>= ) Opérateur

L'opérateur supérieur ou égal à (>= ) compare deux expressions et renvoie TRUE si l'opérande gauche a une valeur supérieure ou égale à l'opérande droit; sinon, il renvoie FALSE .

SELECT PetName, DOB 
FROM Pets
WHERE DOB >= '2020-09-17';

Résultat :

+-----------+------------+
| PetName   | DOB        |
|-----------+------------|
| Fluffy    | 2020-11-20 |
| Tweet     | 2020-11-28 |
| Fluffy    | 2020-09-17 |
+-----------+------------+

Notez qu'il a renvoyé 2020-09-17 et toutes les dates supérieures à cela. Si nous avions utilisé l'opérateur Supérieur à (> ), seules les deux premières lignes auraient été renvoyées.

Inférieur ou égal à (<= ) Opérateur

L'opérateur Inférieur ou égal à (<= ) compare deux expressions et renvoie TRUE si l'opérande de gauche a une valeur inférieure ou égale à l'opérande de droite; sinon, le résultat est FALSE .

SELECT PetName, DOB 
FROM Pets
WHERE DOB <= '2020-09-17';

Résultat :

+-----------+------------+
| PetName   | DOB        |
|-----------+------------|
| Fetch     | 2019-08-16 |
| Scratch   | 2018-10-01 |
| Wag       | 2020-03-15 |
| Fluffy    | 2020-09-17 |
+-----------+------------+

Notez qu'il a renvoyé 2020-09-17 et toutes les dates inférieures à cela. Si nous avions utilisé l'opérateur Inférieur à (< ), seules les trois premières lignes auraient été renvoyées.

Le AND Opérateur

Le AND L'opérateur combine deux expressions booléennes et renvoie TRUE lorsque les deux expressions sont TRUE .

Voici un exemple.

SELECT PetId, DOB 
FROM Pets
WHERE PetName = 'Fluffy'
AND DOB > '2020-01-01';

Résultat :

+---------+------------+
| PetId   | DOB        |
|---------+------------|
| 1       | 2020-11-20 |
| 6       | 2020-09-17 |
+---------+------------+

Dans ce cas, nous n'obtenons que les détails des animaux dont le nom est Fluffy et leur date de naissance est comprise entre les deux dates.

Le OR Opérateur

Le OR L'opérateur combine deux expressions booléennes et renvoie TRUE lorsque l'une des conditions est TRUE .

Voici un exemple.

SELECT 
    PetId, 
    PetName,
    DOB 
FROM Pets
WHERE PetName = 'Fluffy' OR PetName = 'Bark';

Résultat :

+---------+-----------+------------+
| PetId   | PetName   | DOB        |
|---------+-----------+------------|
| 1       | Fluffy    | 2020-11-20 |
| 6       | Fluffy    | 2020-09-17 |
| 7       | Bark      | NULL       |
+---------+-----------+------------+

C'est fondamentalement l'opposé du AND opérateur. Si nous avions utilisé AND , aucune ligne n'aurait été renvoyée, car nous ne pouvons pas avoir deux valeurs différentes dans une colonne en même temps.

Le BETWEEN Opérateur

Le BETWEEN L'opérateur nous permet de spécifier une plage à tester. Par exemple, nous pouvons l'utiliser pour renvoyer des animaux nés entre deux dates.

SELECT
    PetName,
    DOB
FROM Pets
WHERE DOB BETWEEN '2018-01-01' AND '2020-01-01';

Résultat :

+-----------+------------+
| PetName   | DOB        |
|-----------+------------|
| Fetch     | 2019-08-16 |
| Scratch   | 2018-10-01 |
+-----------+------------+

Le NOT Opérateur

Le NOT annule une entrée booléenne (il inverse la valeur de toute expression booléenne). Renvoie donc TRUE lorsque l'expression est FALSE .

Voici ce qui se passe lorsque nous ajoutons le NOT opérateur à notre exemple précédent.

SELECT
    PetName,
    DOB
FROM Pets
WHERE DOB NOT BETWEEN '2018-01-01' AND '2020-01-01';

Résultat :

+-----------+------------+
| PetName   | DOB        |
|-----------+------------|
| Fluffy    | 2020-11-20 |
| Wag       | 2020-03-15 |
| Tweet     | 2020-11-28 |
| Fluffy    | 2020-09-17 |
+-----------+------------+

Cette fois, nous avons tous les autres animaux - les animaux qui n'étaient pas né entre ces dates.

Dans MariaDB, NOT se limite à nier le IN , BETWEEN , et EXISTS clauses. La plupart des autres SGBD autorisent NOT pour nier toute expression.

Le IN Opérateur

Le IN L'opérateur détermine si une valeur spécifiée correspond à une valeur dans une sous-requête ou une liste.

Voici un exemple.

SELECT 
    PetId, 
    PetName, 
    DOB 
FROM Pets
WHERE PetName IN ('Fluffy', 'Bark', 'Wag');

Résultat :

+---------+-----------+------------+
| PetId   | PetName   | DOB        |
|---------+-----------+------------|
| 1       | Fluffy    | 2020-11-20 |
| 4       | Wag       | 2020-03-15 |
| 6       | Fluffy    | 2020-09-17 |
| 7       | Bark      | NULL       |
+---------+-----------+------------+

Nous pourrions obtenir le même résultat en utilisant deux OR opérateurs :

SELECT 
    PetId, 
    PetName, 
    DOB 
FROM Pets
WHERE PetName = 'Fluffy' 
    OR PetName = 'Bark' 
    OR PetName = 'Wag';

Cependant, le IN L'opérateur est une manière plus concise de le faire. Le IN L'opérateur est particulièrement utile lorsque vous disposez d'une longue liste de valeurs à comparer.

Le IN l'opérateur s'exécute presque toujours plus rapidement que plusieurs OR opérateurs, en particulier sur les grands ensembles de données.

Un autre avantage du IN opérateur, est qu'il peut contenir un autre SELECT liste. C'est ce qu'on appelle une sous-requête . Une sous-requête est une requête imbriquée dans une autre requête (ou même une autre sous-requête).

Voici un exemple.

SELECT 
    PetTypeId,
    PetType
FROM PetTypes
WHERE PetTypeId IN ( SELECT PetTypeId FROM Pets );

Résultat :

+-------------+-----------+
| PetTypeId   | PetType   |
|-------------+-----------|
| 1           | Bird      |
| 2           | Cat       |
| 3           | Dog       |
+-------------+-----------+

Cet exemple nous montre combien de types d'animaux se trouvent dans notre hôtel pour animaux de compagnie.

Nous pourrions utiliser le NOT opérateur pour retourner cela et voir combien de types d'animaux ne sont pas dans notre hôtel pour animaux de compagnie.

SELECT 
    PetTypeId,
    PetType
FROM PetTypes
WHERE PetTypeId NOT IN ( SELECT PetTypeId FROM Pets );

Résultat :

+-------------+-----------+
| PetTypeId   | PetType   |
|-------------+-----------|
| 4           | Rabbit    |
+-------------+-----------+

Notre base de données contient donc un animal de compagnie de type Rabbit , mais nous n'avons actuellement aucun lapin comme animal de compagnie.

Le + et || Opérateurs de concaténation de chaînes

Le + et || Les opérateurs de concaténation de chaînes vous permettent de concaténer des chaînes. La concaténation de chaînes est l'opération consistant à joindre des chaînes de caractères de bout en bout.

La raison pour laquelle j'ai répertorié deux opérateurs qui font la même chose est que le + est pris en charge dans SQL Server, et le || L'opérateur est pris en charge dans DB2, Oracle, PostgreSQL, SQLite.

Voici un exemple qui fonctionne dans SQL Server.

SELECT 
    FirstName,
    LastName,
    FirstName + LastName
FROM Owners;

Résultat :

+-------------+------------+--------------------+
| FirstName   | LastName   | (No column name)   |
|-------------+------------+--------------------|
| Homer       | Connery    | HomerConnery       |
| Bart        | Pitt       | BartPitt           |
| Nancy       | Simpson    | NancySimpson       |
| Boris       | Trump      | BorisTrump         |
+-------------+------------+--------------------+

Dans ce cas, les propriétaires ont leur prénom et leur nom stockés dans des colonnes différentes. Dans notre SELECT list, nous les récupérons d'abord individuellement, mais nous les récupérons également à nouveau, en utilisant un opérateur de concaténation pour les joindre.

Il y a cependant quelques problèmes avec nos résultats.

  • Il n'y a pas d'espace entre le prénom et le nom.
  • Il n'y a pas de nom de colonne.

Heureusement, cela est facile à résoudre.

Nous pouvons utiliser la même opération de concaténation pour inclure un espace entre le prénom et le nom.

Et nous pouvons utiliser un alias de colonne pour le résultat concaténé afin de fournir un nom de colonne dans le jeu de résultats.

SELECT 
    FirstName,
    LastName,
    FirstName + ' ' + LastName AS FullName
FROM Owners;

Résultat :

+-------------+------------+---------------+
| FirstName   | LastName   | FullName      |
|-------------+------------+---------------|
| Homer       | Connery    | Homer Connery |
| Bart        | Pitt       | Bart Pitt     |
| Nancy       | Simpson    | Nancy Simpson |
| Boris       | Trump      | Boris Trump   |
+-------------+------------+---------------+

Si vous utilisez DB2, Oracle, PostgreSQL, SQLite, échangez le + pour || et ça devrait bien fonctionner.

Si vous utilisez MySQL ou MariaDB, vous devrez utiliser le CONCAT() fonction pour concaténer des chaînes.

Le LIKE Opérateur

Le LIKE L'opérateur vous permet d'effectuer une correspondance de modèle. Il détermine si une chaîne de caractères spécifique correspond à un modèle spécifié. Un modèle peut inclure des caractères normaux et des caractères génériques.

SELECT 
    FirstName,
    LastName,
    Email
FROM Owners
WHERE Email LIKE '%.com';

Résultat :

+-------------+------------+-------------------+
| FirstName   | LastName   | Email             |
|-------------+------------+-------------------|
| Homer       | Connery    | [email protected] |
| Bart        | Pitt       | [email protected]  |
+-------------+------------+-------------------+

Dans cet exemple, j'ai utilisé le LIKE opérateur en conjonction avec le % opérateur générique pour renvoyer les propriétaires dont les adresses e-mail se terminent par .com .

Opérateur bonus ! Le % Opérateur générique

Le % L'opérateur générique correspond à n'importe quelle chaîne de zéro caractère ou plus. Il peut être utilisé comme préfixe ou suffixe, et il peut également être utilisé au milieu d'une chaîne.

Il a tendance à être plus couramment utilisé comme suffixe et son utilisation est limitée au milieu de modèles, bien qu'il existe des cas d'utilisation valides pour l'utiliser au milieu d'un modèle, comme les suivants :

SELECT 
    FirstName,
    LastName,
    Email
FROM Owners
WHERE Email LIKE '[email protected]%.com';

Résultat :

+-------------+------------+------------------+
| FirstName   | LastName   | Email            |
|-------------+------------+------------------|
| Bart        | Pitt       | [email protected] |
+-------------+------------+------------------+

Dans ce cas, nous ne connaissions pas l'adresse e-mail de Bart, mais nous savions qu'elle commençait par [email protected] et se terminait par .com . Par conséquent, nous avons pu utiliser LIKE en conjonction avec le % opérateur générique pour remplir le reste.

Gardez à l'esprit que cette technique peut renvoyer de nombreuses lignes non pertinentes, en fonction des données et de la manière dont vous construisez votre instruction SQL.

Sachez également que les requêtes contenant le LIKE La clause peut s'exécuter beaucoup plus lentement que d'autres requêtes, et vous devriez probablement éviter d'utiliser le LIKE clause à moins que vous n'en ayez vraiment besoin. Utilisation du % l'opérateur en tant que préfixe peut être particulièrement lent.

Cela ne veut pas dire que vous ne devriez pas l'utiliser du tout. Le LIKE L'opérateur fait partie intégrante de SQL, et vous rencontrerez de nombreux scénarios où ce sera la seule option (ou du moins, la meilleure option).

Plus d'opérateurs SQL

Consultez ma liste complète d'opérateurs SQL pour tout un tas d'autres opérateurs qui ne sont pas inclus ici.