Instruction de requête avancée de mysql

 1. Préface

 2. Méthode de requête efficace

2.1 Spécifier le champ à afficher

2.2 Vérifier les champs sans duplication 

2.3 où requête de condition

2.4 et et ou augmenter la relation logique

 2.5 Interroger les données dans la liste de valeurs

2.6 Références entre

2.7 comme méthode de requête

2.8 Requête par méthode de tri 

 3. Utiliser la requête de fonction

3.1 Fonctions mathématiques couramment utilisées dans les bases de données 

3.2 Fonctions d'agrégation 

3.3 Fonctions de chaîne 

(1) Retirez la garniture de caractère

(2) Intercepter sous-chaîne

(3) Épissage de champ 

(4) Renvoie la longueur du caractère 

 (5) remplacer remplacer

 4. Instruction de requête avancée

4.1 GROUP BY (pour le regroupement et l'agrégation) 

 (1) Statistiques sommaires

 (2) Résumer et accumuler ses champs spécifiés (classes numériques)

  (3) Résumer et accumuler ses champs spécifiés (classes numériques), puis effectuer l'ordre décroissant

4.2 AVOIR un filtre

4.3 Requête de réglage d'alias 

 (1) Alias ​​de champ

 (2) Alias ​​de table

4.4 Auto-jointure de tables

(1) Classement sans valeurs répétées 

(2) Classement avec valeurs répétées 

4.5 Instruction de sous-requête 

Mise à niveau de l'utilisation de la sous-requête 

  4.6 EXISTE

 5. Requête de jointure de table

(1) Jointure interne jointure interne

 (2) jointure gauche jointure gauche

(3) jointure à droite jointure à droite 

 6. L'utilisation de la vue

(1) Création de vue 

(2) Opérations pratiques ultérieures fournies par la vue

(3) Problème de définition classique : la vue peut-elle insérer des données 

 7. UNION en cascade

7.1 UNION (déduplication après fusion)

7.2 UNION ALL (pas de duplication après fusion) 

 8. Trouvez la valeur d'intersection des tables et des tables de plusieurs façons

8.1 Valeurs d'intersection de vue en cascade

8.2 Valeur d'intersection de la jointure interne 

(1) Ne pas répéter l'intersection 

(2) Déduplication et intersection 

8.3 Utiliser la jointure gauche pour trouver la valeur d'intersection 

8.4 Intersection utilisant la jointure à droite 

 8.5 Utiliser une sous-requête pour trouver la valeur d'intersection

8.6 Prendre des valeurs non intersectionnelles

9. Instruction de requête de sélection de condition de cas 

 10. Utilisation d'expressions régulières

10.1 Types courants d'expressions régulières sql

10.2 Application régulière SQL 

 Exploration : la différence entre une valeur nulle (NULL) et aucune valeur (' ')

 1. Préface à cet article
Une base de données est un outil utilisé pour stocker, mettre à jour et interroger des données, et l'interrogation des données est la fonction principale d'une base de données. La base de données est utilisée pour transporter des informations, et les informations sont utilisées pour l'analyse et la visualisation. Par conséquent, il est nécessaire de maîtriser une méthode de requête plus raffinée. Cet article se concentrera sur les instructions de requête avancées pour les données. 

Pour l'utilisation des instructions de requête suivantes, deux tables sont préparées à l'avance, et certaines modifications seront apportées aux tables ou de nouvelles tables seront créées ultérieurement en fonction de l'utilisation des fonctions de requête : 

CREATE TABLE info (
  id int(4) ,
  nom char(4),
  hauteur double 
) ;
 
 
CREATE TABLE info2 (
  nom char(4) 
  hobby char(10) 
  date char(10)
) ;


 2. Méthode de requête efficace
2.1 Spécifiez le champ à afficher,
sélectionnez le champ 1, le champ 2 du nom de la table ;
 

2.2 Dédupliquer les champs et afficher 
 SELECT DISTINCT "champ" FROM "nom table" ;
 

2.3 où requête de condition
 SELECT "champ" FROM nom de table" WHERE "condition" ;
 

2.4 et et ou augmentent la relation logique
 SELECT "champ" FROM "nom de table" WHERE "condition 1" AND "condition 2" ;


 SELECT "Champ" FROM "Nom de la table" WHERE "Condition 1" OU "Condition 2" ;
 

 2.5 Interroger les données dans la liste de valeurs
 SELECT "champ" FROM "nom de table" WHERE "champ" IN ('valeur 1', 'valeur 2', ...); #in, parcourir une liste de valeurs
 

2.6 référence entre
 SELECT "champ" FROM "nom de table" WHERE "champ" BETWEEN 'valeur 1' AND 'valeur 2' ;
 

2.7 comme la méthode de requête
 comme la requête est généralement utilisée en conjonction avec des caractères génériques

% : Le signe pourcentage représente zéro, un ou plusieurs caractères

 _ : un tiret représente un seul caractère

select * from info2 where hobby like '%ing' ;
select * from info2 where name like '小_';


 select * from info2 where name like '_刚' ;
 
sélectionnez * dans info2 où passe-temps comme '%ay%' ;


2.8 méthode de tri pour interroger 
l'ordre par, trier par mot-clé.

Avis:

Trie normalement les champs numériques.
Si vous triez un champ de type caractère, il trie par ordre alphabétique.
 SELECT "champ" FROM "nom de table" [WHERE "condition"] ORDER BY "champ" [ASC|DESC] ;
 #ASC est trié par ordre croissant, qui est la méthode de tri par défaut.
 #DESC est trié par ordre décroissant.
  sélectionner * dans l'ordre des informations par hauteur ;
  sélectionner * dans l'ordre des informations par hauteur ascendante ;
  sélectionner * dans l'ordre des informations par hauteur desc ;
 

 3. Utiliser une requête de fonction
3.1 Fonctions mathématiques couramment utilisées dans la base de données Fonction mathématique fonction 
abs
(x) renvoie la valeur absolue de x
rand() renvoie un nombre aléatoire de 0 à 1
mod(x, y) renvoie le reste après avoir divisé x par y puissance
( x, y) Renvoie x élevé à la puissance y
round(x) Renvoie l'entier le plus proche de x
round(x, y) Conserve la valeur arrondie du chiffre y de x
sqrt(x) Renvoie la racine carrée de x
truncate(x , y) Renvoie la valeur du nombre x tronqué à y décimales #Ne pas arrondir
ceil(x) Renvoie le plus petit entier supérieur ou égal à x
floor(x) Renvoie le plus grand entier inférieur ou égal à x
plus grand( x1,x2,...) Renvoie dans la collection La plus grande valeur
least(x1,x2,...) Renvoie la plus petite valeur de la collection
SELECT abs(-1),rand(), mod(5,3) , puissance(2,3);


 SELECT tronquer(1.89,2);
SELECT tronquer(1.89,1);
 

sélectionnez plafond (1.76);
sélectionnez le sol (1,76);


sélectionner le plus grand (1,2,3,55,12,55,61);
sélectionnez moins (1,2,3,55,12,55,61);


3.2 Fonction d'agrégation 
Fonction d'agrégation Signification
avg() Renvoie la valeur moyenne de la colonne spécifiée
count() Renvoie le nombre de valeurs non NULL dans la colonne spécifiée
min() Renvoie la valeur minimale de la colonne spécifiée
max() Renvoie la valeur maximale de la colonne spécifiée
sum(field) Renvoie la somme de toutes les valeurs de la colonne spécifiée
select avg(height) from info;


sélectionnez le compte (nom) à partir des informations ;
sélectionnez count(*) from info ;
 

sélectionnez max (hauteur) à partir des informations ;
sélectionnez min (hauteur) à partir des informations ;
sélectionnez la somme (hauteur) à partir des informations ;


3.3 Fonctions de chaîne Fonctions de chaîne 
fonction
trim() renvoie la valeur sans le format spécifié
concat(x,y) concatène les paramètres fournis x et y dans une chaîne
substr(x,y) obtient la yième valeur à partir de la chaîne x La chaîne commençant par la position 1 est la même que la fonction substring()
substr(x,y,z) Obtient la chaîne dont la longueur est z à partir de la yième position dans la chaîne x
length(x) renvoie la longueur de la chaîne x
replace(x, y,z) remplace la chaîne z par la chaîne y dans la chaîne x
majuscule(x) convertit toutes les lettres de la chaîne x en majuscules
bas(x) convertit toutes les lettres de la chaîne x en minuscules
gauche(x,y) renvoie les y premiers caractères de la chaîne x
right(x,y) renvoie les y derniers caractères de la chaîne x
repeat(x,y) répète la chaîne x y fois
space(x) renvoie x espaces
strcmp(x,y) compare x et y, la valeur renvoyée peut être -1,0,1
reverse(x) inverse la chaîne x
(1) supprime les caractères trim
 SELECT TRIM ([[position][to shift Divide String] FROM ] String)
 ;
 #[Position] : la valeur peut être LEADING (début), TRAILING (fin), BOTH (début et fin). 
 #[Chaîne à supprimer] : La chaîne à supprimer du début, de la fin ou des deux du début et de la fin de la chaîne. La valeur par défaut est vide.
select trim(leading 's' from 'swmming' );
select trim(fining 'g' from 'swmming' );
select trim(both 'l' from 'lol' );


(2) Intercept substr
substr(x,y) #Intercept the x string from the yth to the end
 
substr(x,y,z) #Intercept the x string from the yth, the interception length is z
 
 
select substr(hobby,2 ) à partir d'info2 ;
sélectionnez substr(hobby,3) à partir d'info2 ;


 sélectionnez substr(hobby,2,5) dans info2 ;
 sélectionnez substr(hobby,4,6) dans info2 ;
 

(3) Épissage de champ 
 1) concat(x,y)

sélectionnez concat (nom, hauteur) à partir des informations ;


 2) Utilisez le symbole ||

 # Assemblez la valeur du champ de nom et la valeur du champ de hauteur dans la table d'informations.
 sélectionnez le nom || hauteur à partir des informations ;
 

 #Dans la table d'informations, la valeur du champ de nom et la valeur du champ de hauteur sont fusionnées et un espace est ajouté au milieu.
 sélectionnez le nom || ' ' || hauteur à partir des informations ;
 

(4) Renvoyer la longueur du caractère length 
 select length(hobby) from info2;
 
 

 (5) Replace replace
select replace(name,'small','big') from info2;


 4. Instruction de requête avancée
4.1 GROUP BY (pour regrouper et résumer) 
résume et regroupe les résultats de la requête des champs derrière GROUP BY, et est généralement utilisé en combinaison avec des fonctions d'agrégation

"GROUP BY" a pour principe que tous les champs qui apparaissent après "GROUP BY" doivent apparaître après SELECT ;

Tout champ qui apparaît après SELECT et n'apparaît pas dans la fonction d'agrégation doit apparaître après "GROUP BY".

 (1) Les statistiques récapitulatives
sélectionnent le nom, le nombre (nom) du groupe d'informations par nom ;


 (2) Résumez et accumulez ses champs spécifiés (classes numériques)
sélectionnez le nom, la somme (sauvegarde) du groupe info3 par nom ;


  (3) Résumez et accumulez les champs spécifiés (nombres), puis
sélectionnez le nom, la somme (économie) du groupe info3 par ordre de nom par la somme (économie) desc dans l'ordre décroissant ;


4.2 Filtre HAVING
Utilisé pour filtrer le jeu d'enregistrements renvoyé par l'instruction "GROUP BY", généralement utilisée conjointement avec l'instruction "GROUP BY".

L'existence de l'instruction HAVING compense le défaut que le mot-clé WHERE ne peut pas être utilisé conjointement avec des fonctions d'agrégation.

où ne peut filtrer que les champs de la table d'origine et ne peut pas filtrer les résultats après le regroupement par.

 SELECT champ 1,SOMME(champ 2) FROM "nom de la table" GROUP BY champ 1 HAVING(condition de la fonction)        ;
sélectionnez le nom,somme(sauvegarde) du groupe info3 par nom ayant somme(sauvegarde)>1500 ;


4.3 Format de syntaxe de requête de définition d'alias 
 : 

 SELECT field 1, field 2 AS field 2 alias from table name ; #AS peut être omis
 (1) field alias
select name, sum(saving) as total_saving from info3 group by name having sum(saving)>1000 ;
select name ,sum (saving) as total_saving du groupe info3 par nom ayant total_saving>1000 ;


 (2) Alias ​​de table
SELECT alias de table Champ 1 [AS] alias de champ FROM nom de table [AS] alias de table ; #AS peut être omis


4.4 Auto-jointure des tables
(1) Classement sans valeurs répétées 
Effectuez une comparaison de sauvegarde et un classement sur les tables suivantes grâce à l'auto-jointure des tables 

 Analyse de principe et idées d'opération d'auto-connexion de tables pour obtenir un classement :

1. Prenez le tableau de données ci-dessus comme exemple, en supposant qu'il y a quatre personnes au total et que les montants entre leurs mains sont différents. Nous avons fait une auto-jointure des tables.

2. Utilisez le comptage pour compter, ne comptez que le nombre de personnes supérieures ou égales au montant dans votre main, par exemple, Xiao Ming avec 2000, il n'y a qu'une seule personne supérieure ou égale à lui, la valeur de comptage peut également être utilisé comme son classement

3. Un autre exemple est Xiaohong avec 800. S'il y a 4 personnes qui lui sont supérieures ou égales, la valeur de comptage devrait être 4. De même, on peut prouver qu'elle est classée quatrième.

sélectionnez A.name,A.saving,count(A.saving) as rank from info3 as A,info3 as B where A.saving <=B.saving group by A.name,A.saving order by rank asc ;
 

(2) Il existe 
une nouvelle liste de demandes avec des classements numériques en double : 

sélectionnez A.name,A.saving,count(A.saving) as rank from info3 as A,info3 as B where A.saving < B.saving or (A.name=B.nameme and A.saving=B.saving ) grouper par A.name,A.saving order by rank asc ;


4.5 Instruction de sous-requête 
Sous-requête : joindre des tables, insérer une autre instruction SQL dans la clause WHERE ou la clause HAVING. 

 SELECT "Field 1" FROM "Table 1" WHERE "Field 2" [opérateur de comparaison] #Requête externe
 (SELECT "Field 1" FROM "Table 2" WHERE "Condition"); #Requête interne
Connexion de données de table ordinaire : 

select * from info as A, info3 as B where A.name=B.name;


Jointure de table de jointure de sous-requête :

 sélectionnez * à partir des informations où le nom (sélectionnez le nom à partir de l'info3 où l'enregistrement> 1000);


La sous-requête utilise la mise à niveau 
pour trouver la somme de toutes les valeurs de sauvegarde dans la "zone de Pékin"

select sum(saving) from info3 where name in (select name from info where address='北京');

select sum(saving) from info3 where name in (select name from info where address='北京');
 

  4.6 EXISTE
 

Utilisé pour tester si la requête interne a produit des résultats, comme si une valeur booléenne est vraie.
Si la requête interne a un résultat, le système exécutera l'instruction SQL dans la requête externe. S'il n'y a pas de résultat, l'intégralité de l'instruction SQL ne produira aucun résultat.
 

Format: 

 SELECT "Champ 1" FROM "Formulaire 1" WHERE EXISTS (SELECT * FROM "Formulaire 2" WHERE "Condition");
 

 5. Requête de connexion de table
Il existe trois types de connexion de table couramment utilisés dans la base de données MYSQL :

Jointure interne (jointure interne) : renvoie uniquement les lignes avec des champs de jointure égaux dans les deux tables (avec des valeurs d'intersection)
 

jointure gauche (jointure gauche) : renvoie les enregistrements, y compris tous les enregistrements de la table de gauche et les champs de jointure de la table de droite
A jointure gauche B : A est la table de gauche, B est la table de droite
 

jointure droite (jointure droite) : renvoie les enregistrements incluant tous les enregistrements de la table de droite et les champs de jointure de la table de gauche sont égaux
A jointure droite B : A est la table de gauche, B est la table de droite


 

(1) jointure interne
select * from info A inner join info3 B on A.name = B.name;
 
 

 Autres façons d'implémenter des jointures internes :

 sélectionnez * parmi les infos A, info3 B où A.nom=B.nom ;
 select * from info A inner join info3 B using(name);
 

 (2) jointure gauche jointure gauche
 

select * from info A LEFT JOIN info3 B on A.name=B.name;
 

(3)右连接 right join 
select * from info3 A right join info B on A.name=B.name ;
 

 6. L'utilisation de la vue
 

Vues : peuvent être considérées comme des tables virtuelles ou des requêtes stockées.

La différence entre une vue et une table est que la table stocke en fait des enregistrements de données, tandis que la vue est une structure construite sur la table et qu'elle ne stocke pas réellement d'enregistrements de données.
Les tables temporaires disparaissent automatiquement après la déconnexion de l'utilisateur ou la déconnexion de la connexion à la base de données, mais la vue ne disparaît pas.
Une vue ne contient pas de données, seule sa définition est stockée et son utilisation simplifie généralement les requêtes complexes. Par exemple, si vous souhaitez effectuer des requêtes de jointure sur plusieurs tables, et également effectuer des opérations de tri statistique, il sera très difficile d'écrire des instructions SQL. Utiliser une vue pour joindre plusieurs tables, puis effectuer des opérations de requête sur cette vue revient au même que d'effectuer des opérations sur une table. Les requêtes sont les mêmes, très pratiques.
 

Format:

CREATE VIEW "nom de la table de vue" AS "instruction SELECT" ; #créer une table de vue
 DROP
 VIEW "nom de la table de vue" ; #supprimer la table de vue
 

(1) Création de vue 
 

Pré-requis de création : Créer une vue indépendamment pour compter les infos et info3 entre les deux tables, résumer d'abord l'adresse du nom, puis calculer la somme des économies de la région. Il est nécessaire de refléter deux champs d'adresse et de somme (sving)

créer la vue v_address_saving as select A.address,sum(B.saving) total_saving from info A inner join info3 B on A.name=B.name group by address;
 
 

Validation des données pour la création de la vue :

(2) Opérations pratiques ultérieures fournies par la vue
 

 Avantages des vues : bien que le processus de création d'une vue soit le même que celui d'une instruction de requête avancée (combinant des conditions et divisant deux instructions de sélection pour générer une table dérivée), le processus est compliqué, mais si l'opération de requête doit être utilisée fréquemment, la création d'une vue est très utile Nécessaire, cela peut non seulement simplifier le processus de requête, mais également effectuer d'autres opérations sur la requête, et c'est très pratique.

 Exigences supplémentaires : nécessité de calculer la somme des économies réalisées à Suzhou et à Shanghai

élisez sum(total_saving) as suzhou_shanghai_saving from v_address_saving where address='苏州'or address='上海' ;
 

(3) Problème de définition classique : la vue peut-elle insérer des données 
 

Le fait qu'une vue puisse insérer des données dépend de la situation : 

1) Si la table de vue est une requête de jointure de deux tables (par exemple, le champ A de la vue provient de la table A et le champ B provient de la table B, les données ne peuvent pas être insérées). Parce que la structure de la table est incompatible avec la table d'origine. Les champs de la vue sont de nouveaux champs générés par des opérations de fonction basées sur un certain champ dans la table d'origine, mais aucun champ ne peut réellement être stocké, de sorte que les données ne peuvent pas être insérées.

2) Si la structure de la table de la vue est cohérente avec la table d'origine, les données peuvent être insérées. Les données insérées sont stockées dans la table d'origine et les données mises à jour par la vue sont en fait les données mappées à la table d'origine.

show create view analyse le processus de création d'une vue : 

 7. UNION Concaténation
UNION union set : Combinez les résultats de deux instructions SQL, et les champs générés par les deux instructions SQL doivent être du même type d'enregistrements de données.

7.1 UNION (déduplication après fusion)
 

Les valeurs d'enregistrement de données résultantes ne seront pas dupliquées et seront triées selon l'ordre des champs. # Déduplication après fusion

 Format : [sélectionnez l'instruction 1] UNION [sélectionnez l'instruction 2] ;

sélectionnez le nom de l'union d'informations sélectionnez le nom de l'info3 ;
 

7.2 UNION ALL (pas de duplication après fusion) 
 

sélectionner le nom de l'union d'informations tout sélectionner le nom de l'info3 ;
 

 8. Trouver la valeur d'intersection des tables et des tables de plusieurs façons
8.1 Trouver la valeur d'intersection de la vue en cascade
 

 
créer une vue v_info en tant que sélectionner un nom distinct à partir de l'union d'informations sélectionner un nom distinct à partir d'info3 ;
 sélectionner
un nom, compter (*) dans le groupe v_info par nom ;
 sélectionner
 
un nom dans le groupe v_info par nom ayant un nombre (*) > 1 ;
 
 

8.2 Valeur d'intersection de la jointure interne 
 

(1) Ne répétez pas l'intersection 
sélectionnez A.name from info A inner join info3 B on A.name=B.name ;
 ​select
A.name from info A inner join info3 B using(name);
 
 

(2) Déduplication et intersection 
select distinct A.name from info A inner join info3 B using(name);
 

8.3 Utiliser la jointure gauche pour trouver la valeur d'intersection 
 

select * from info A left join info3 B using(name);
select distinct A.name from info A left join info3 B using(name) where B.name is not null;
 

8.4 Intersection utilisant la jointure à droite 
 

 #Utilisez la jointure droite pour trouver la valeur d'intersection du champ store_name, puis supprimez le doublon
 select * from info A right join info3 B using(name);
 select distinct A.name from info A right join info3 B using(name) où A.name n'est pas nul ;
 
 ​ou
 sélectionnez distinct A.name from info A right join info3 B on A.name=B.name où A.name n'est pas nul ;
 
 

 8.5 Utiliser une sous-requête pour trouver la valeur d'intersection
 

sélectionnez un nom distinct à partir des informations où le nom se trouve (sélectionnez le nom à partir des informations 3) ;


8.6 Prendre des valeurs non intersectionnelles
 

(1) count(*)<=1 dans la méthode en cascade

  (2) Le changement des connexions internes gauche et droite n'est pas nul à nul

(3) Requête de jointure externe de sous-requête absente (requête de jointure interne)

9. Instruction de requête de sélection de condition de cas 
 

 SELECT CASE ("nom du champ")
     WHEN "condition 1" THEN "result 1"
     WHEN "condition 2" THEN "result 2"
     [ELSE "result N"]
     END
 FROM "nom de la table" ;
     
 # "condition" peut être une valeur ou une formule. La clause ELSE n'est pas obligatoire.
 

mysql> select address,case address
    -> when '上海' then height-10
    -> when '北京' then height+5
    -> else height+10
    -> end
    -> "new_height",name
    -> from info;
 

 10. L'utilisation d'expressions régulières
10.1 Types courants d'expressions régulières sql
 

Symbole régulier Fonction
^ Correspond au caractère de début du texte
$ Correspond au caractère de fin du texte
Correspond à n'importe quel caractère unique
* Correspond à zéro ou plusieurs caractères devant lui
+ Correspond au caractère devant lui 1 ou plusieurs fois
Chaîne Correspondance contient le chaîne spécifiée
l Ou, lorsque le "|" précédent n'est pas vrai, il correspondra à la chaîne suivante
[...] Correspond à tout caractère du jeu de caractères
[^...] Correspond à tout caractère qui n'est pas entre crochets
{n} Correspond au caractère précédent La chaîne n fois
{n,m} correspond à la chaîne précédente au moins n fois et au plus m fois
 

10.2 Application régulière SQL 
 

Format:

sélectionnez "champ" dans "nom de la table" où "champ" regexp 'expression régulière' ;
 

 Exploration : La différence entre une valeur vide (NULL) et aucune valeur (' ')
La longueur d'aucune valeur est 0, ce qui ne prend pas de place ; tandis que la longueur de la valeur NULL est NULL, ce qui prend de la place.

IS NULL ou IS NOT NULL est utilisé pour juger si le champ est NULL ou non NULL, et ne peut pas savoir s'il n'a pas de valeur.

Utilisez =' ' ou < >' ' pour gérer le jugement sans valeur. <> représente pas égal à.

Lors de la spécification du nombre de lignes comptées par le champ via count (), si une valeur NULL est rencontrée, elle sera automatiquement ignorée, et si aucune valeur n'est rencontrée, elle sera ajoutée à l'enregistrement pour le calcul.

Je suppose que tu aimes

Origine blog.csdn.net/zl965230/article/details/130625543
conseillé
Classement