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é, WHERE
vous 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 WHERE
utiliser les opérations logiques AND
, OR
et 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 BETWEEN
avec 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 BETWEEN
prend 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 IN
avec 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 not
20, 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 , LIKE
elle ne fonctionne donc pas uniquement avec des chaînes. Ce qui ne peut que se réjouir.
GO TO FULL VERSION