Enregistrements de requête

Requête des enregistrements

Avant d'expliquer la requête, j'ai préparé un tableau de données pour tout le monde. Ce tableau stocke le solde bancaire et les informations de base de l'utilisateur.

Nous avons défini une structure de table nommée money.

L'instruction pour créer la table est la suivante :

CREATE TABLE money (
 id INT NOT NULL AUTO_INCREMENT ,
 username VARCHAR(50) NOT NULL ,
 balance FLOAT NOT NULL , 
 province VARCHAR(20) NOT NULL , 
 age TINYINT UNSIGNED NOT NULL , 
 sex TINYINT NOT NULL , 
 PRIMARY KEY (id(10))
 ) ENGINE = InnoDB CHARACTER SET utf8;

La structure et les données de la table sont affichées comme suit :

QQ截图20161009154618.png

QQ截图20161009154630.png

Remarque :
le solde fait référence au solde
la province fait référence à la province

Requête de base

QQ截图20161009154649.png

Remarque : "*" est une expression régulière, ce qui signifie correspondre à tout. L'instruction de requête ci-dessus est équivalente à ce qui suit :

mysql> select * from money;
 +----+-----------+---------+-----------+-----+-----+
 | id | username | balance | province | age | sex |
 +----+-----------+---------+-----------+-----+-----+
 | 1 | 李文凯 | 120.02 | 湖北 | 29 | 1 |
 | 2 | 范冰冰 | 260.23 | 山东 | 40 | 0 |
 | 3 | 黄晓明 | 150.86 | 山东 | 40 | 1 |
 | 4 | 井柏然 | 810 | 辽宁 | 27 | 1 |
 | 5 | 李冰冰 | 20.15 | 黑龙江 | 43 | 0 |
 | 6 | 成龙 | 313 | 山东 | 63 | 1 |
 | 7 | 杨幂 | 123 | 北京 | 30 | 0 |
 | 8 | 刘诗诗 | 456 | 北京 | 29 | 1 |
 | 9 | 柳岩 | 23.4 | 湖南 | 36 | 0 |
 | 10 | 赵本山 | 3456 | 辽宁 | 63 | 1 |
 | 11 | 汪峰 | 34.32 | 北京 | 44 | 1 |
 | 12 | 郭德纲 | 212 | 天津 | 43 | 1 |
 +----+-----------+---------+-----------+-----+-----+
 12 rows in set (0.00 sec)

Spécifier la requête de champ

<🎜. >

QQ截图20161009154709.png

mysql> select id,username, balance from money;
 +----+-----------+---------+
 | id | username | balance |
 +----+-----------+---------+
 | 1 | 李文凯 | 120.02 |
 | 2 | 范冰冰 | 260.23 |
 | 3 | 黄晓明 | 150.86 |
 | 4 | 井柏然 | 810 |
 | 5 | 李冰冰 | 20.15 |
 | 6 | 成龙 | 313 |
 | 7 | 杨幂 | 123 |
 | 8 | 刘诗诗 | 456 |
 | 9 | 柳岩 | 23.4 |
 | 10 | 赵本山 | 3456 |
 | 11 | 汪峰 | 34.32 |
 | 12 | 郭德纲 | 212 |
 +----+-----------+---------+
 12 rows in set (0.00 sec)

Interroger un seul champ pour les enregistrements non en double distincts

QQ截图20161009154725.png

mysql> select distinct age deptno from  money;
 +--------+
 | deptno |
 +--------+
 | 29 |
 | 40 |
 | 27 |
 | 43 |
 | 63 |
 | 30 |
 | 36 |
 | 44 |
 +--------+
 8 rows in set (0.00 sec)

Requête conditionnelle où

QQ截图20161009154741.png

mysql> select * from money where age = 29;
 +----+-----------+---------+----------+-----+-----+
 | id | username | balance | province | age | sex |
 +----+-----------+---------+----------+-----+-----+
 | 1 | 李文凯 | 120.02 | 湖北 | 29 | 1 |
 | 8 | 刘诗诗 | 456 | 北京 | 29 | 1 |
 +----+-----------+---------+----------+-----+-----+
 2 rows in set (0.00 sec)

Conditions qui peuvent être suivies par où

l'opérateur de comparaison répertoriera les enregistrements qui remplissent les conditions dans l'ensemble de résultats. Dans l'exemple ci-dessus, ce qui est ajouté après où est le « = » d'un champ.

De plus, vous pouvez également utiliser des opérateurs de comparaison tels que >, <, >=, <=, !=; 🎜>

Opérateurs logiques

QQ截图20161009154754.png

Des conditions multiples peuvent également utiliser des opérateurs logiques tels que ou et et pour effectuer des requêtes conjointes multi-conditions

mysql> select * from money where id <10 and province='湖北';
 +----+-----------+---------+----------+-----+-----+
 | id | username | balance | province | age | sex |
 +----+-----------+---------+----------+-----+-----+
 | 1 | 李文凯 | 120.02 | 湖北 | 29 | 1 |
 +----+-----------+---------+----------+-----+-----+
 1 row in set (0.00 sec)

Trier l'ensemble de résultats

QQ截图20161009154833.png

Utilisez order by pour trier l'ensemble de résultats après la sortie de la sélection, où desc et asc sont dans le ordre de tri des mots-clés. desc signifie trier par champs par ordre décroissant, et asc signifie trier par ordre croissant. Si aucun mot-clé n'est écrit, la valeur par défaut est de trier par ordre croissant.

mysql> select id,username, balance from money order by balance desc;
 +----+-----------+---------+
 | id | username | balance |
 +----+-----------+---------+
 | 10 | 赵本山 | 3456 |
 | 4 | 井柏然 | 810 |
 | 8 | 刘诗诗 | 456 |
 | 6 | 成龙 | 313 |
 | 2 | 范冰冰 | 260.23 |
 | 12 | 郭德纲 | 212 |
 | 3 | 黄晓明 | 150.86 |
 | 7 | 杨幂 | 123 |
 | 1 | 李文凯 | 120.02 |
 | 11 | 汪峰 | 34.32 |
 | 9 | 柳岩 | 23.4 |
 | 5 | 李冰冰 | 20.15 |
 +----+-----------+---------+
 12 rows in set (0.00 sec)

Tri multi-champsQQ截图20161009154905.png

order by peut être suivi de plusieurs champs de tri différents, et l'ordre des différents ensembles de résultats du champ de tri est également différent si la valeur du champ de tri est la même, les champs avec la même valeur seront triés en fonction. au deuxième champ de tri.

QQ截图20161009154934.png

* Remarque : Si le premier champ a déjà organisé les résultats. Le deuxième champ de tri de champ ne prend pas effet. Dans ce cas, le deuxième champ n'est pas valide. *

mysql> select id,username, balance from money order by balance desc,age asc;
 +----+-----------+---------+
 | id | username | balance |
 +----+-----------+---------+
 | 10 | 赵本山 | 3456 |
 | 4 | 井柏然 | 810 |
 | 8 | 刘诗诗 | 456 |
 | 6 | 成龙 | 313 |
 | 2 | 范冰冰 | 260.23 |
 | 12 | 郭德纲 | 212 |
 | 3 | 黄晓明 | 150.86 |
 | 7 | 杨幂 | 123 |
 | 1 | 李文凯 | 120.02 |
 | 11 | 汪峰 | 34.32 |
 | 9 | 柳岩 | 23.4 |
 | 5 | 李冰冰 | 20.15 |
 +----+-----------+---------+
 12 rows in set (0.00 sec)

Limite des ensembles de résultats

Pour les requêtes ou les ensembles de résultats triés, si vous souhaitez afficher seulement une partie au lieu de tout, utilisez la limite clé Limite du nombre de jeux de résultats de mots.

QQ截图20161009154951.png

mysql> select * from money limit 5;
 +----+-----------+---------+-----------+-----+-----+
 | id | username | balance | province | age | sex |
 +----+-----------+---------+-----------+-----+-----+
 | 1 | 李文凯 | 120.02 | 湖北 | 29 | 1 |
 | 2 | 范冰冰 | 260.23 | 山东 | 40 | 0 |
 | 3 | 黄晓明 | 150.86 | 山东 | 40 | 1 |
 | 4 | 井柏然 | 810 | 辽宁 | 27 | 1 |
 | 5 | 李冰冰 | 20.15 | 黑龙江 | 43 | 0 |
 +----+-----------+---------+-----------+-----+-----+
 5 rows in set (0.00 sec)

Limiter l'ensemble de résultats et trier

QQ截图20161009155004.png

mysql> select id,username, balance from money order by balance desc limit 5;
 +----+-----------+---------+
 | id | username | balance |
 +----+-----------+---------+
 | 10 | 赵本山 | 3456 |
 | 4 | 井柏然 | 810 |
 | 8 | 刘诗诗 | 456 |
 | 6 | 成龙 | 313 |
 | 2 | 范冰冰 | 260.23 |
 +----+-----------+---------+
 5 rows in set (0.00 sec)

Résultats Définir la sélection d'intervalle

Supposons que je prenne 3 enregistrements en commençant par l'enregistrement 0. Je veux récupérer 3 enregistrements supplémentaires à partir du 3ème. Que dois-je faire si je souhaite récupérer 4 enregistrements à partir du 6ème ?

À ce stade, vous devez utiliser la sélection d'intervalle de jeu de résultats.

QQ截图20161009155016.png

QQ截图20161009155026.png

mysql> select id,username, balance from money limit 0,3;
 +----+-----------+---------+
 | id | username | balance |
 +----+-----------+---------+
 | 1 | 李文凯 | 120.02 |
 | 2 | 范冰冰 | 260.23 |
 | 3 | 黄晓明 | 150.86 |
 +----+-----------+---------+
 3 rows in set (0.00 sec)

Que diriez-vous de trois autres à partir du troisième ?

mysql> select id,username, balance from money limit 3,3;
 +----+-----------+---------+
 | id | username | balance |
 +----+-----------+---------+
 | 4 | 井柏然 | 810 |
 | 5 | 李冰冰 | 20.15 |
 | 6 | 成龙 | 313 |
 +----+-----------+---------+
 3 rows in set (0.00 sec)

Grâce à l'idée ci-dessus, l'écran termine la pagination.
Chaque page affiche 10 enregistrements, puis :

La page 1 est la limite 0,10
La page 2 est la limite 10,10
La page 3 est la limite 20,10

Et ainsi de suite...

Utilisation des fonctions statistiques

1. Et si on veut connaître le nombre total d'utilisateurs ?

2. Comment vérifier qui est la personne la plus riche dans le tableau de données ?

3. Et si nous voulons connaître le montant moyen dépensé par les utilisateurs ?

4. Et si nous voulons connaître le nombre total de tous les utilisateurs ?

Nous avons quatre fonctions statistiques les plus couramment utilisées :

QQ截图20161009155039.png

QQ截图20161009155132.png

mysql> select count(id) from money;
 +-----------+
 | count(id) |
 +-----------+
 | 12 |
 +-----------+
 1 row in set (0.00 sec)

Vous pouvez également donner des alias aux champs ! Utilisez le mot-clé as.

mysql> select count(id) as zongshu from money;
 +---------+
 | zongshu |
 +---------+
 | 12 |
 +---------+
 1 row in set (0.00 sec)

Vérifiez le montant moyen

mysql> select avg(balance) from money;
 +--------------------+
 | avg(balance) |
 +--------------------+
 | 498.24833393096924 |
 +--------------------+
 1 row in set (0.00 sec)

Vérifiez le montant total

mysql> select sum(balance) from money;
 +-------------------+
 | sum(balance) |
 +-------------------+
 | 5978.980007171631 |
 +-------------------+
 1 row in set (0.00 sec)

Vérifiez le montant maximum

mysql> select max(balance) from money;
 +--------------+
 | max(balance) |
 +--------------+
 | 3456 |
 +--------------+
 1 row in set (0.00 sec)

Vérifiez le montant minimum

mysql> select min(balance) from money;
 +--------------------+
 | min(balance) |
 +--------------------+
 | 20.149999618530273 |
 +--------------------+
 1 row in set (0.00 sec)

regrouper par

Nous regroupons les données par provinces dans le tableau des montants que vous découvrirez après avoir regroupé les données. Les mêmes provinces seront supprimées. Autrement dit, une province est un groupe.

QQ截图20161009155147.png

mysql> select * from money group by province;
 +----+-----------+---------+-----------+-----+-----+
 | id | username | balance | province | age | sex |
 +----+-----------+---------+-----------+-----+-----+
 | 7 | 杨幂 | 123 | 北京 | 30 | 0 |
 | 12 | 郭德纲 | 212 | 天津 | 43 | 1 |
 | 2 | 范冰冰 | 260.23 | 山东 | 40 | 0 |
 | 1 | 李文凯 | 120.02 | 湖北 | 29 | 1 |
 | 9 | 柳岩 | 23.4 | 湖南 | 36 | 0 |
 | 4 | 井柏然 | 810 | 辽宁 | 27 | 1 |
 | 5 | 李冰冰 | 20.15 | 黑龙江 | 43 | 0 |
 +----+-----------+---------+-----------+-----+-----+

Statistiques sur le nombre total de groupes (catégories) :

mysql> select deptno, count(1) from emp group by deptno;
 +--------+----------+
 | deptno | count(1) |
 +--------+----------+
 | 1 | 1 |
 | 2 | 5 |
 | 3 | 1 |
 | 5 | 4 |
 +--------+----------+
 4 rows in set (0.04 sec)

Après avoir compté le nombre de provinces, affichage du groupe

mysql> select count(province),province from money group by province;
 +-----------------+-----------+
 | count(province) | province |
 +-----------------+-----------+
 | 3 | 北京 |
 | 1 | 天津 |
 | 3 | 山东 |
 | 1 | 湖北 |
 | 1 | 湖南 |
 | 2 | 辽宁 |
 | 1 | 黑龙江 |
 +-----------------+-----------+
 7 rows in set (0.00 sec)

Sur la base du regroupement Il est rarement utilisé pour les statistiques

avec rollup. Ce point de connaissance est réglé au niveau de compréhension.

Sa fonction principale est de compter les données groupées puis d'effectuer un décompte total.

QQ截图20161009155200.png

QQ截图20161009155215.png

Sur la base des statistiques ci-dessus, le nombre total est calculé. Dans le résultat de l'exemple suivant, il y a 12 NULL supplémentaires. à la fin.

mysql> select count(province),province from money group by province with rollup;
 +-----------------+-----------+
 | count(province) | province |
 +-----------------+-----------+
 | 3 | 北京 |
 | 1 | 天津 |
 | 3 | 山东 |
 | 1 | 湖北 |
 | 1 | 湖南 |
 | 2 | 辽宁 |
 | 1 | 黑龙江 |
 | 12 | NULL |
 +-----------------+-----------+
 8 rows in set (0.00 sec)

Les résultats sont ensuite filtrés Ayant

La clause Have est similaire à Where mais également différente. Ce sont deux déclarations qui fixent des conditions.

avoir est le groupe de filtrage et où se trouve l'enregistrement de filtrage.

QQ截图20161009155232.png

mysql> select count(province) as result ,province from money group by province having result >2;
 +--------+----------+
 | result | province |
 +--------+----------+
 | 3 | 北京 |
 | 3 | 山东 |
 +--------+----------+
 2 rows in set (0.00 sec)

Utiliser SQL dans son ensemble

Nous avons utilisé certaines instructions individuellement dans les instructions ci-dessus, pas dans leur ensemble.

Nous allons maintenant intégrer les déclarations et les utiliser ensemble une fois. La structure syntaxique utilisée avec l'instruction SQL globale est la suivante :

SELECT
[champ 1 [comme alias 1], [fonction (champ 2),]...champ n]
FROM nom de la table
[WHEREwhere condition]
[GROUP BY field]
[HAVINGwhere_contition]
[order condition]
[limit condition]

Remarque : ce qui précède [ ] peut être utilisé dans l'instruction pour représenter facultatif.

Le résumé final de la syntaxe est le suivant :

QQ截图20161009155246.png

QQ截图20161009155305.png

Nous effectuons une utilisation globale combinée pour interroger les champs de la table monétaire : id, nom d'utilisateur, solde, province exigent que le solde de id>1 soit supérieur à 50 et la région est utilisée pour le regroupement. Nous utilisons l'ID utilisateur par ordre décroissant, et seuls 3 éléments peuvent être affichés.

Enfin, écrivez l'instruction SQL comme suit, et les résultats de la requête sont les suivants :

mysql> select id,username,balance,province from money where id > 1 and balance > 50 group by province order by id desc limit 3; +----+-----------+---------+----------+ | id | username | balance | province | +----+-----------+---------+----------+ | 12 | 郭德纲 | 212 | 天津 | | 7 | 杨幂 | 123 | 北京 | | 4 | 井柏然 | 810 | 辽宁 | +----+-----------+---------+----------+ 3 rows in set (0.00 sec)


Formation continue
||
<?php echo "Hello Mysql"; ?>
soumettreRéinitialiser le code
  • Recommandations de cours
  • Téléchargement du didacticiel