Maison > Article > base de données > Une brève analyse de la syntaxe et des limitations courantes de MySQL dans les requêtes
MySQL est un système de gestion de bases de données relationnelles très populaire. L'un des langages les plus utilisés est SQL. Grâce aux instructions SQL, nous pouvons implémenter diverses opérations de données complexes. Dans MySQL, la requête in est une méthode de requête très courante. Elle peut interroger les enregistrements de la colonne spécifiée qui correspondent aux conditions de la requête (c'est-à-dire la valeur après in). la requête est plus concise et claire.
Mais dans le développement réel, nous devons souvent imposer certaines restrictions aux requêtes in pour éviter les erreurs ou améliorer l'efficacité des requêtes. Ci-dessous, nous aborderons certaines limitations courantes des requêtes.
1. Syntaxe et principe de la requête
Avant de commencer à expliquer les limites de la requête, comprenons d'abord la syntaxe et le principe de la requête. La syntaxe de la requête
in est la suivante :
SELECT nom_colonne(s)
FROM nom_table
WHERE nom_colonne IN (valeur1, valeur2, ...);
Par exemple, interrogez les commandes avec les numéros de marchandises 1, 3, et 5 dans la table des commandes Information :
SELECT * FROM commandes WHERE marchandises_id IN (1,3,5); Le principe de la requête
in est le suivant :
Ainsi, l'efficacité d'une requête est affectée par de nombreux facteurs tels que le nombre de conditions de requête, la taille de la table de hachage de la mémoire et le nombre d'enregistrements dans la table. Ensuite, nous expliquerons les limites des requêtes in.
2. Limitations dans les requêtes
1. Trop de conditions dans la requête
Plus il y a de conditions dans la requête, plus la mémoire occupée par la table de hachage MySQL est lente. Par conséquent, dans le développement réel, nous devrions éviter d’en utiliser trop dans les conditions de requête. S'il y a trop de conditions de requête, vous pouvez optimiser la requête en en divisant plusieurs en conditions de requête et en utilisant des sous-requêtes.
Par exemple, pour interroger les informations de commande avec les numéros de marchandises 1, 3, 5, 7 et 9 dans le tableau des commandes, vous pouvez écrire comme ceci :
SELECT * FROM commandes WHERE marchandises_id IN (1,3,5) OR marchandises_id IN (7, 9);
ou:
SELECT * FROM commandes WHERE marchandises_id IN (SELECT id FROM marchandises WHERE id in (1,3,5,7,9));
De cette façon, nous peut diviser les conditions de requête, améliorer l'efficacité des requêtes.
2. Répété dans les conditions de requête
Dans la requête, si les conditions de requête sont répétées, l'efficacité de la requête diminuera et peut conduire à des données en double dans l'ensemble de résultats. Par conséquent, lors de l’écriture de conditions de requête, nous devons éviter les conditions de requête répétées.
Par exemple, pour interroger les informations de commande avec les numéros de marchandises 1, 1, 3, 5 et 7 dans le tableau des commandes, vous pouvez écrire comme ceci :
SELECT * FROM commandes WHERE marchandises_id IN (1,3,5, 7);
De cette façon, nous pouvons éviter les conditions de requêtes répétées et améliorer l'efficacité des requêtes.
3. La condition de requête in est vide
Si la condition de requête in ne contient aucune valeur, toutes les données de la table seront interrogées. Cela entraînera une réduction de l'efficacité des requêtes et des données inutiles peuvent apparaître. Par conséquent, lors de l'écriture dans des conditions de requête, nous devons éviter les conditions de requête vides.
Par exemple, pour interroger les informations de commande avec les numéros de marchandises 1, 3, 5 et 7 dans le tableau des commandes, vous pouvez écrire :
SELECT * FROM commandes WHERE marchandises_id IN (1,3,5,7);
De cette façon, nous pouvons empêcher la condition de requête d'être vide et améliorer l'efficacité des requêtes.
4. Le type de condition de requête in ne correspond pas
Lors de l'exécution d'une requête in, le type de la condition de requête doit correspondre au type de la colonne dans la table, sinon la requête échouera. Par conséquent, lors de l’écriture de conditions de requête, nous devons nous assurer que le type de la condition de requête correspond au type de la colonne du tableau.
Par exemple, pour interroger les informations de commande avec les numéros de marchandises 1, 3, 5 et 7 dans le tableau des commandes, vous pouvez écrire :
SELECT * FROM commandes WHERE marchandises_id IN (1,3,5,7);
De cette façon, nous pouvons garantir que le type de conditions de requête correspond au type de colonnes de la table pour éviter l'échec de la requête.
5. Utiliser dans la requête et la requête "pas dans" en même temps
Lorsque la requête dans la requête et la requête "pas dans" sont utilisées en même temps, l'efficacité de la requête sera réduite. Par conséquent, dans le développement réel, nous devrions éviter d’utiliser des requêtes in et des requêtes « not in » en même temps.
Par exemple, pour interroger les informations de commande des produits numéro 1, 3, 5, 7 dans le tableau des commandes, mais n'inclut pas les informations de commande des produits numéro 9, vous pouvez écrire comme ceci :
SELECT * FROM commandes OÙ Goods_id IN (1,3, 5,7) AND Goods_id NOT IN (9);
De cette façon, nous pouvons éviter d'utiliser la requête "in query" et "not in" en même temps et améliorer l'efficacité des requêtes.
3. Résumé
Grâce à l'introduction de cet article, nous comprenons les principes grammaticaux et les limites courantes de la requête. Dans le développement réel, nous devons éviter d'utiliser trop de conditions de requête, éviter la duplication des conditions de requête, éviter les conditions de requête vides, garantir que le type de conditions de requête correspond au type de colonnes de la table et éviter d'utiliser dans les requêtes et "pas" à en même temps selon des circonstances spécifiques dans la requête pour améliorer l'efficacité des requêtes et réduire le risque d'erreurs de requête.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!