3.1 Comparaison des valeurs : <, >, =, <>

L'un des mots clés les plus couramment utilisés lors de l'écriture de requêtes SQL est le WHERE. C'est avec son aide que nous indiquons à MySQL quelles lignes de table nous voulons filtrer (sélectionner).

Après le mot-clé, WHEREvous pouvez écrire des conditions très complexes et délicates. Alors, quelles opérations cette condition peut-elle contenir ?

Opérateur Description Exemple
< Moins salaire < 40000
> Plus salaire > 100000
<= Inférieur ou égal âge <= 25
>= Plus ou égal âge >= 18
= Équivaut à profession = 'Programmeur'
<>, != Inégal Année(join_date) != 2015

Contrairement au langage Java, pour une égalité stricte, un caractère égal est utilisé ici, et non deux .

Si vous voulez vérifier que les valeurs ne sont pas égales, alors cela peut se faire de deux manières : <>soit !=La première approche est utilisée dans des langages comme Pascal, la seconde est typique pour des langages comme C++ et Java.

Pour l'affectation en SQL, il est utilisé :=comme en Pascal, mais l'affectation elle-même est très rarement utilisée.

Écrivons une requête où nous affichons tous les employés qui n'ont pas été embauchés en 2015.


SELECT * FROM employee WHERE YEAR(join_date) != 2015
        

Et nous obtenons le résultat de requête suivant :

identifiant nom profession salaire âge join_date
1 Ivanov Ivan Programmeur 100 000 25 2012-06-30
2 Petrov Petr Programmeur 80 000 23 2013-08-12
3 Ivanov Sergueï Testeur 40 000 trente 2014-01-01
6 Vaska chat 1 000 3 2018-01-01

3.2 Opérations logiques ET, OU, NON

Vous pouvez également WHEREutiliser les opérations logiques AND, ORet NOT. Et ils sont écrits exactement comme je les ai décrits ici. Aucun &&, ||ou!

Écrivons une requête SQL dans laquelle nous sélectionnons des employés âgés de plus de 20 ans et percevant un salaire inférieur à 50 000.


SELECT * FROM employee WHERE age > 20 AND salary < 50000
        

Et nous obtenons le résultat de requête suivant :

identifiant nom profession salaire âge join_date
3 Ivanov Sergueï Testeur 40 000 trente 2014-01-01
5 Kirienko Anastasia Responsable administratif 40 000 25 2015-10-10

Trop facile. Écrivons une requête où nous sélectionnons les employés qui reçoivent plus de 100 000 et qui ne travaillent pas en tant que directeur :


SELECT * FROM employee WHERE salary >= 100000 AND NOT occupation = 'Director'
        

Ici, nous avons spécifiquement !=utilisé l'opérateur au lieu du symbole NOT.

Et nous obtenons le résultat de requête suivant :

identifiant nom profession salaire âge join_date
1 Ivanov Ivan Programmeur 100 000 25 2012-06-30

3.3 ENTRE : plage de valeurs

Toujours en SQL, il existe un opérateur spécial BETWEENavec lequel vous pouvez vérifier si une variable se situe entre deux valeurs. Cet opérateur est utilisé dans les expressions booléennes. La forme générale d'un tel opérateur est :


variable BETWEEN bottom line AND top_bound
        

Dans ce cas, contrairement au langage Java, les limites inférieure et supérieure sont incluses dans l'intervalle autorisé.

Écrivons un exemple où nous sélectionnons tous les employés avec un salaire de 40K à 100K. La requête ressemblera à :

SELECT * FROM employee WHERE salary BETWEEN 40000 AND 100000

Et nous obtenons le résultat de requête suivant :

identifiant nom profession salaire âge join_date
1 Ivanov Ivan Programmeur 100 000 25 2012-06-30
2 Petrov Petr Programmeur 80 000 23 2013-08-12
3 Ivanov Sergueï Testeur 40 000 trente 2014-01-01
5 Kirienko Anastasia Responsable administratif 40 000 25 2015-10-10

L'opérateur BETWEENprend en charge non seulement les types numériques, mais également les dates et même les types de chaîne . Dans le cas du travail avec des chaînes, l'ordre lexicographique est utilisé : aaba vient avant aabb

3.4 IN : liste de valeurs

De plus, SQL dispose d'un opérateur spécial INavec lequel vous pouvez vérifier si une variable est contenue dans la liste spécifiée. Cet opérateur est utilisé dans les expressions booléennes. La forme générale d'un tel opérateur est :

variable IN (value 1 , value 2 , ... value N)

Écrivons une requête dans laquelle nous sélectionnons des employés âgés de 20, 25 ou 30 ans. La requête ressemblera à :

SELECT * FROM employee WHERE age IN (20, 25, 30)

Et nous obtenons le résultat de requête suivant :

identifiant nom profession salaire âge join_date
1 Ivanov Ivan Programmeur 100 000 25 2012-06-30
3 Ivanov Sergueï Testeur 40 000 trente 2014-01-01
5 Kirienko Anastasia Responsable administratif 40 000 25 2015-10-10

Et maintenant, écrivons une requête, où, au contraire, nous sélectionnons des employés dont l'âge est de not20, 25 ou 30 ans. La requête ressemblera à :

SELECT * FROM employee WHERE age NOT IN (20, 25, 30)

Et nous obtenons le résultat de requête suivant :

identifiant nom profession salaire âge join_date
2 Petrov Petr Programmeur 80 000 23 2013-08-12
4 Rabinovitch Moisha Directeur 200 000 35 2015-05-12
6 Vaska chat 1 000 3 2018-01-01

Tout a fonctionné comme prévu. Beauté.

3.5 LIKE : modèle de chaîne

Et enfin, un autre opérateur important et très souvent utilisé - LIKE. Il est utilisé lors de la comparaison de chaînes. Il peut être utilisé pour définir un modèle de chaîne. Cet opérateur est utilisé dans les expressions booléennes. La forme générale d'un tel opérateur est :

variable LIKE 'sample'

Des caractères spéciaux peuvent être utilisés dans le modèle : %et _.

  • Le trait de soulignement signifie n'importe quel caractère, toujours 1 pc.
  • Le pourcentage signifie n'importe quel caractère et n'importe quel nombre de fois (y compris 0 fois).

Écrivons une requête qui sélectionnera toutes les personnes dont le nom de famille commence par la lettre "I". La requête ressemblera à :

SELECT * FROM employee WHERE name LIKE 'I%'

Et nous obtenons le résultat de requête suivant :

identifiant nom profession salaire âge join_date
1 Ivanov Ivan Programmeur 100 000 25 2012-06-30
3 Ivanov Sergueï Testeur 40 000 trente 2014-01-01

Compliquons maintenant la tâche - le nom doit contenir "o" et le nom doit se terminer par "a". La requête ressemblera à :

SELECT * FROM employee WHERE name LIKE '%o%a'

Et nous obtenons le résultat de requête suivant :

identifiant nom profession salaire âge join_date
4 Rabinovitch Moisha Directeur 200 000 35 2015-05-12

Bon, rendons ça un peu plus difficile. Filtrons tous les employés dont l'âge commence par le chiffre "3". La requête ressemblera à :

SELECT * FROM employee WHERE age LIKE '3%'

Et nous obtenons le résultat de requête suivant :

identifiant nom profession salaire âge join_date
3 Ivanov Sergueï Testeur 40 000 trente 2014-01-01
4 Rabinovitch Moisha Directeur 200 000 35 2015-05-12
6 Vaska chat 1 000 3 2018-01-01

Au fait, notre colonne ageint est de type , LIKEelle ne fonctionne donc pas uniquement avec des chaînes. Ce qui ne peut que se réjouir.