MySQL est un système de gestion de base de données relationnelle. Une base de données relationnelle stocke les données dans différentes tables au lieu de placer toutes les données dans un seul grand entrepôt, ce qui augmente la vitesse et la flexibilité. Il existe souvent de nombreuses requêtes complexes dans MySQL Afin de faire gagner du temps à chacun, l'éditeur a résumé quelques requêtes complexes couramment utilisées.
Requête complexe MySQL
1. Requête de groupe :
Mots clés : GROUPE PAR
2. L'instruction BY est utilisée pour combiner la fonction récapitulative (telle que SUM) pour regrouper l'ensemble de résultats selon une ou plusieurs colonnes. La fonction récapitulative doit souvent être ajoutée. Instruction GROUP BY.
Le tableau suivant présente deux tableaux, l'un est emp et l'autre est dept, nous allons opérer les requêtes suivantes sur ces deux tables, comme indiqué ci-dessous :
Première table : empTableau
Le deuxième : départTable
Maintenant nous interrogeons le salaire total de chaque département dans emp, l'instruction est la suivante :
SELECT deptno,SUM(sal)FROM emp GROUP BY deptno;
Les résultats sont les suivants :
Remarque : Ici, nous recherchons le salaire total (sal) de chaque département, il doit donc être regroupé en fonction du numéro de département (deptno), donc sum() est utilisé pour la somme
3. ayant :
Où et avoir font tous deux des jugements conditionnels Avant d'introduire avoir, jetons un coup d'œil à la différence entre où et avoir
La fonction de Where est de supprimer les lignes qui ne remplissent pas la condition Where avant de regrouper les résultats de la requête, c'est-à-dire de filtrer les données avant de regrouper. La condition 🎜> ne peut pas contenir la fonction d'agrégation , utilisez donc la condition Where Afficher les lignes spécifiques. avoir est utilisé pour filtrer les groupes qui remplissent les conditions, c'est-à-dire filtrer les données après le regroupement les conditions incluent souvent des fonctions d'agrégation , utilisez avoir.
Les conditions affichent des groupes spécifiques ou vous pouvez regrouper à l'aide de plusieurs critères de regroupement. Par exemple : Nous souhaitons interroger les numéros de département dont le salaire total est supérieur à 10 000 dans la table emp. L'instruction est la suivante : <.>SÉLECTIONNER
deptno,SUM(sal)FROM emp GROUP BY deptno HAVING SUM(sal)>10000; Les résultats sont les suivants :
De cette façon, il on constate que le salaire total est supérieur à Le numéro de département de 10 000 est 20 (le salaire total est également affiché pour compréhension). 2. Requête de table de jointure : Selon deux La relation entre les colonnes d'une ou plusieurs tables, interrogez les données de ces tables 1. ): Syntaxe : sélectionnez le nom du champ 1, le nom du champ 2 de la table1 [INNER] join table2 ON table1.Field name=table2.Field name; Remarque : les jointures internes sont supprimées des résultats. Tous les lignes qui n'ont pas de lignes correspondantes dans d'autres tables connectées ne peuvent être interrogées que pour les informations appartenant aux tables connectées, de sorte que les jointures internes peuvent perdre des informations, et intérieur peut être omis. Par exemple : on connecte deux tables emp et dept, requête ename et deptno, l'instruction est la suivante : SELECT emp.ename,dept.deptno FROM emp INNER JOIN dept ON emp.deptno=dept.deptno; Aussi Une façon d'écrire : SELECT emp.ename,dept.deptno from emp,deptwhere emp.deptno=dept.deptno;
Remarque : Il s'avère qu'il y a un numéro de service de 40 dans la table dept, mais il a disparu après la requête. C'est parce qu'il n'y a pas de valeur de 40 dans le champ deptno dans emp, Ainsi, la table dept est automatiquement supprimée lors de l'utilisation de la jointure interne. Enregistrements avec une valeur de champ deptno de 40. 2. Jointure externe : 2.1 : Jointure externe gauche : L'ensemble de résultats conserve toutes les lignes du tableau de gauche, mais uniquement les lignes du deuxième tableau qui correspondent au premier tableau. Les lignes vides correspondantes du deuxième tableau sont mises en valeurs NULL. 2.2 : Jointure externe droite : Le jeu de résultats conserve toutes les lignes de la table de droite, mais ne contient que les lignes de la deuxième table qui correspondent à la première table. Les lignes vides correspondantes du deuxième tableau sont mises en valeurs NULL. La jointure externe gauche et la jointure externe droite peuvent obtenir le même effet en échangeant les positions des deux tables. Maintenant, nous effectuons des requêtes qui utilisent le regroupement et la jointure de tables ensemble Par exemple : Nous voulons interroger le salaire total de chaque département de emp et correspondre au nom du département dans la table des départements Analysez cette phrase : Le champ de requête est sal (salaire total) de chaque département dans emp. Ici, nous devons utiliser une requête de groupe, mais nous devons également interroger le nom du département (dname) du département correspondant. dname est dans la table dept, nous devrions donc connecter les tables emp et dept. Idée 1 : Nous interrogeons d'abord tous les champs dont nous avons besoin avant de procéder au regroupement, alors connectez-vous d'abord puis groupez, l'instruction est la suivante : SELECT e.deptno,d.dname,SUM(e.sal) FROM emp e INNER JOIN dept d ON e.deptno= d.deptno GROUP BY d.deptno;) (Notez que est utilisé ici. L'alias de emp est e, et l'alias de dept est d) La deuxième façon d'écrire : SELECT e.deptno,d .dname,SUM(e.sal) FROM emp e ,dept d WHEREe.deptno=d.deptno GROUP BY d.deptno; Les résultats de ces deux méthodes d'écriture sont les mêmes, comme suit :
Idée 2 : Nous souhaitons interroger le salaire total de chaque département de emp, traiter cet ensemble de résultats comme un tableau ( ici appelé table 1), puis laissez la table 1 se connecter à la table du département Rechercher le nom du département correspondant (dname) Étape 1 : SELECT deptno,SUM(sal) ; FROM emp GROUP BY deptno; Cette instruction interroge la table emp Le salaire total de chaque département dans , maintenant nous le connectons à la table dept : Étape 2 : SELECT xin.*,d .dname FROM(SELECT deptno,SUM(sal) FROM emp GROUP BY deptno) xin INNER JOIN dept d ON xin.deptno =d.deptno; De cette façon, vous pouvez interroger le résultat souhaité, notez que xin ici est un alias, le résultat est le suivant :
Le code ici semble très long, mais en fait l'idée est très claire. Traitez simplement le premier résultat de la requête comme une table pour vous connecter à une autre table. Cette idée n'est pas facile de faire des erreurs. Vous deviendrez très compétent en écriture avec plus. pratique. 3. Pagination : Mots clés : LIMIT Syntaxe : select * from tableName limite de condition numéro de page actuel * capacité de la page - 1, Capacité de la page ; La limite générale est utilisée avec la commande par Par exemple, nous voulons interroger 5 à 10 dans la table emp dans ordre croissant par numéro de département. Enregistrements, chaque page affiche 5 enregistrements, l'énoncé est le suivant : SELECT *FROM emp ORDER BY deptno LIMIT 4,5; De cette façon, vous pouvez interroger les résultats souhaités. Notez que le dernier paramètre 5 est la capacité de la page, qui est le nombre de lignes à afficher sur cette page (c'est-à-dire, la barre d'enregistrement de la ligne du début à la ligne de fin de cette page Numéro). Par exemple, si l'on souhaite interroger 17 pages d'enregistrements, chaque page affiche 10 enregistrements : LIMITE 17*10-1,10; Quatre : IN Mot clé : In Si le résultat de la valeur de retour de la sous-requête est plus d'une condition, IN doit être utilisé et ne peut pas être utilisé"="; Remarque : LIMIT est placé à la fin . Recommandations associées : Comment résoudre le problème du fichier my.ini manquant dans MySQL5. 7 Un résumé des problèmes d'exécution entre MySQL Max et Where Un aperçu détaillé des statistiques MySQL
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!