Instruction avancée MySQL (1)

1. Déclaration avancée MySQL

Les deux tableaux suivants seront utilisés dans la prochaine expérience

use KGCt;
create table location (Region char(20),Store_Name char(20));
insert into location values('East','Boston');
insert into location values('East','New York');
insert into location values('West','Los Angeles');
insert into location values('West','Houston');

create table store_info (Store_Name char(20),Sales int(10),Date char(10));
insert into store_info values('Los Angeles','1500','2020-12-05');
insert into store_info values('Houston','250','2020-12-07');
insert into store_info values('Los Angeles','300','2020-12-08');
insert into store_info values('Boston','700','2020-12-08');

insérez la description de l'image ici

1, sélectionnez

Afficher tous les enregistrements de données d'un ou plusieurs champs de la table

语法:SELECT "字段" FROM "表名";
SELECT Store_Name FROM Store_Info;

insérez la description de l'image ici

2、DISTINCT

Ne pas afficher les enregistrements de données en double

语法:SELECT DISTINCT "字段" FROM "表名";
SELECT DISTINCT Store_Name FROM Store_Info;

insérez la description de l'image ici

3.
Instruction de requête conditionnelle WHERE

语法:SELECT "字段" FROM "表名" WHERE "条件";
SELECT Store_Name FROM Store_Info WHERE Sales > 1000;

insérez la description de l'image ici

4. ET OU
et ou

语法:SELECT "字段" FROM "表名" WHERE "条件1" {[AND|OR] "条件2"}+ ;
SELECT Store_Name FROM Store_Info WHERE Sales > 1000 OR (Sales < 500 AND Sales > 200);

insérez la description de l'image ici

5. IN
affiche l'enregistrement de données de la valeur connue

语法:SELECT "字段" FROM "表名" WHERE "字段" IN ('值1', '值2', ...);
SELECT * FROM Store_Info WHERE Store_Name IN ('Los Angeles', 'Houston');

insérez la description de l'image ici

6. BETWEEN
affiche les enregistrements de données dans deux plages de valeurs

语法:SELECT "字段" FROM "表名" WHERE "字段" BETWEEN '值1' AND '值2';
SELECT * FROM Store_Info WHERE Date BETWEEN '2020-12-06' AND '2020-12-10';

insérez la description de l'image ici

7. Caractères génériques
Habituellement, les caractères génériques sont utilisés avec LIKE

% :百分号表示零个、一个或多个字符
_ :下划线表示单个字符

'A_Z':所有以 'A' 起头,另一个任何值的字符,且以 'Z' 为结尾的字符串。例如,'ABZ' 和 'A2Z' 都符合这一个模式,而 'AKKZ' 并不符合 (因为在 A 和 Z 之间有两个字符,而不是一个字符)。
'ABC%': 所有以 'ABC' 起头的字符串。例如,'ABCD' 和 'ABCABC' 都符合这个模式。
'%XYZ': 所有以 'XYZ' 结尾的字符串。例如,'WXYZ' 和 'ZZXYZ' 都符合这个模式。
'%AN%': 所有含有 'AN'这个模式的字符串。例如,'LOS ANGELES' 和 'SAN FRANCISCO' 都符合这个模式。
'_AN%':所有第二个字母为 'A' 和第三个字母为 'N' 的字符串。例如,'SAN FRANCISCO' 符合这个模式,而 'LOS ANGELES' 则不符合这个模式。

8. LIKE
correspond à un modèle pour trouver l'enregistrement de données que nous voulons

语法:SELECT "字段" FROM "表名" WHERE "字段" LIKE {模式};
SELECT * FROM Store_Info WHERE Store_Name like '%os%';

insérez la description de l'image ici

9. ORDER BY
trié par mots-clés

语法:SELECT "字段" FROM "表名" [WHERE "条件"] ORDER BY "字段" [ASC, DESC];
#ASC 是按照升序进行排序的,是默认的排序方式。
#DESC 是按降序方式进行排序。
SELECT Store_Name,Sales,Date FROM Store_Info ORDER BY Sales DESC;

insérez la description de l'image ici

9. Fonction

(1) Fonctions mathématiques :

fonction signification
abs(x) renvoie la valeur absolue de x
rand() Renvoie un nombre aléatoire entre 0 et 1
mod(x,y) Renvoie le reste après avoir divisé x par y
puissance(x,y) renvoie x à la puissance y
rond(x) renvoie l'entier le plus proche de x
rond(x,y) Valeur arrondie avec x à y décimales
m²(x) renvoie la racine carrée de x
tronquer(x,y) Renvoie la valeur du nombre x tronquée à y décimales
plafond(x) renvoie le plus petit entier supérieur ou égal à x
étage(x) renvoie le plus grand entier inférieur ou égal à x
plus grand(x1,x2…) Renvoie la plus grande valeur de la collection et peut également renvoyer la plus grande valeur de plusieurs champs
moins(x1,x2…) Renvoie la plus petite valeur de la collection et peut également renvoyer la plus petite valeur de plusieurs champs
SELECT abs(-1), rand(), mod(5,3), power(2,3), round(1.89);
SELECT round(1.8937,3), truncate(1.235,2), ceil(5.2), floor(2.1), least(1.89,3,6.1,2.1);

insérez la description de l'image ici

(2) Fonction d'agrégation :

fonction signification
moy() Renvoie la moyenne de la colonne spécifiée
compter() Renvoie le nombre de valeurs non NULL dans la colonne spécifiée
min() Renvoie la valeur minimale de la colonne spécifiée
maximum() Renvoie la valeur maximale de la colonne spécifiée
somme(x) Renvoie la somme de toutes les valeurs de la colonne spécifiée
SELECT avg(Sales) FROM Store_Info;
SELECT count(Store_Name) FROM Store_Info;
SELECT count(DISTINCT Store_Name) FROM Store_Info;
SELECT max(Sales) FROM Store_Info;
SELECT min(Sales) FROM Store_Info;
SELECT sum(Sales) FROM Store_Info;

insérez la description de l'image ici

insérez la description de l'image ici

count(*) inclut le nombre de lignes de toutes les colonnes et n'ignore pas la valeur de colonne NULL lors du comptage des résultats

count(nom de la colonne) inclut uniquement le nombre de lignes dans la colonne avec le nom de la colonne. Lors du comptage des résultats, les lignes dont la valeur de colonne est NULL seront ignorées

(3) Fonction de chaîne :

fonction signification
garniture() Renvoie la valeur avec le format spécifié supprimé
concat(x,y) Concaténer les paramètres fournis x et y dans une chaîne
substr(x,y) Récupère la chaîne à partir de la yième position dans la chaîne x, ce qui a le même effet que la fonction substring()
substr(x,y,z) Obtient une chaîne de longueur z commençant à la position y dans la chaîne x
longueur(x) Renvoie la longueur de la chaîne x
remplacer(x,y,z) remplacer la chaîne z par la chaîne y dans la chaîne x
supérieur(x) convertir toutes les lettres de la chaîne x en majuscules
inférieur(x) Convertir toutes les lettres de la chaîne x en minuscules
gauche(x,y) Renvoie les y premiers caractères de la chaîne x
droite (x, y) Renvoie les y derniers caractères de la chaîne x
répéter (x, y) répéter la chaîne x y fois
espace(x) renvoie x espaces
strcmp(x,y) Comparez x et y, la valeur renvoyée peut être -1,0,1
inverser(x) inverser la chaîne x
SELECT concat(Region, Store_Name) FROM location WHERE Store_Name = 'Boston';  
#如sql_mode开启了PIPES_AS_CONCAT,"||"视为字符串的连接操作符而非或运算符,和字符串的拼接函数Concat相类似,这和Oracle数据库使用方法一样的
SELECT Region || ' ' || Store_Name FROM location WHERE Store_Name = 'Boston';
SELECT substr(Store_Name,3) FROM location WHERE Store_Name = 'Los Angeles';
SELECT substr(Store_Name,2,4) FROM location WHERE Store_Name = 'New York';
SELECT TRIM ([ [位置] [要移除的字符串] FROM ] 字符串);
#[位置]:的值可以为 LEADING (起头), TRAILING (结尾), BOTH (起头及结尾)。 
#[要移除的字符串]:从字串的起头、结尾,或起头及结尾移除的字符串。缺省时为空格。
SELECT TRIM(LEADING 'Ne' FROM 'New York');
SELECT Region,length(Store_Name) FROM location;
SELECT REPLACE(Region,'ast','astern')FROM location;

insérez la description de l'image ici

insérez la description de l'image ici

2. Requête de déclaration avancée

2.1 GROUPER PAR

Résumez et regroupez les résultats de la requête des champs derrière GROUP BY, qui est généralement utilisé en combinaison avec des fonctions d'agrégation. Il existe
un principe dans GROUP BY selon lequel tous les champs qui apparaissent après GROUP BY doivent apparaître après SELECT ;
tous les champs qui apparaissent après SELECT et Les champs qui n'apparaissent pas dans les fonctions d'agrégation doivent apparaître après GROUP BY

语法:SELECT "字段1", SUM("字段2") FROM "表名" GROUP BY "字段1";
SELECT Store_Name, SUM(Sales) FROM Store_Info GROUP BY Store_Name ORDER BY sales desc;

insérez la description de l'image ici

2.2AVOIR

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 d'utilisation du mot clé WHERE avec la fonction d'agrégation.

语法:SELECT "字段1", SUM("字段2") FROM "表格名" GROUP BY "字段1" HAVING (函数条件);
SELECT Store_Name, SUM(Sales) FROM Store_Info GROUP BY Store_Name HAVING SUM(Sales) > 1500;

insérez la description de l'image ici

2.3 Alias

alias de champ alias de table

语法:SELECT "表格別名"."字段1" [AS] "字段別名" FROM "表格名" [AS] "表格別名";
SELECT A.Store_Name Store, SUM(A.Sales) "Total Sales" FROM Store_Info A GROUP BY A.Store_Name;

insérez la description de l'image ici

2.4 Sous-requêtes

Joindre des tables, insérer une autre instruction SQL dans la clause WHERE ou la clause HAVING

语法:SELECT "字段1" FROM "表格1" WHERE "字段2" [比较运算符] 				#外查询
(SELECT "字段1" FROM "表格2" WHERE "条件");									#内查询
#可以是符号的运算符,例如 =、>、<、>=、<= ;也可以是文字的运算符,例如 LIKE、IN、BETWEEN
SELECT SUM(Sales) FROM Store_Info WHERE Store_Name IN 
(SELECT Store_Name FROM location WHERE Region = 'West');

SELECT SUM(A.Sales) FROM Store_Info A WHERE A.Store_Name IN 
(SELECT Store_Name FROM location B WHERE B.Store_Name = A.Store_Name);

insérez la description de l'image ici

insérez la description de l'image ici

2.5EXISTE

Il est utilisé pour tester si la requête interne produit des résultats, comme si la valeur booléenne est vraie
#Si oui, le système exécutera l'instruction SQL dans la requête externe. Si ce n'est pas le cas, l'intégralité de l'instruction SQL ne produira aucun résultat.

语法:SELECT "字段1" FROM "表格1" WHERE EXISTS (SELECT * FROM "表格2" WHERE "条件");
SELECT SUM(Sales) FROM Store_Info WHERE EXISTS (SELECT * FROM location WHERE Region = 'West');

insérez la description de l'image ici

Je suppose que tu aimes

Origine blog.csdn.net/weixin_51728919/article/details/131374887
conseillé
Classement