Encyclopédie des instructions de requête MySQL

Table des matières

requête de base

enquête directe

AS est alias

Requête dédupliquée (répétée)

requête conditionnelle

requête d'opérateur arithmétique

requête d'opérateur logique

Requête d'expression régulière ⭐

requête floue

requête de plage

Qu'il ne s'agisse pas d'une requête de jugement vide

Trier la requête

 Limiter la requête (requête de pagination)

requête aléatoire

Requête de groupe

AYANT

Recherche Avancée

sous-requêtes (requêtes imbriquées)

numéro de ligne

 classement

 fonction d'agrégation

requête de connexion

jointure interne

jointure externe

Jointure externe complète (composition)

modifier

connexion croisée

L'ordre dans lequel les clauses SELECT doivent suivre


requête de base

enquête directe

interroger toutes les colonnes

语法:select * from 表名;
-- 查询 student 表中所有内容
select * from student;

Interroger la colonne spécifiée

语法:select 字段 from 表名;
-- 查询 student 表中的name列 与 age列
select name, age from student;
AS est alias

Utiliser AS pour aliaser les champs

语法:select 字段 as 别名 from 表名;(as可省略)
-- 查询 student 表中的name列 与 age列
select name 名字, age 年龄 from student;
-- select name as 名字, age as 年龄 from student;

 Utiliser AS pour aliaser la table

语法:select 字段 from 表名 as 别名;
-- 查询 student 表中的name列 与 age列,同时给student起个‘学生年龄表’别名
select name 名字, age 年龄 from student 学生年龄表;
Requête dédupliquée (répétée)
DISTINCT 用于从表中获取不重复的数据
语法:select distinct 列名 from 表名;
-- 查询 student 表中所有的不同年龄
select distinct age from student;
requête conditionnelle
语法:select 字段 from 表名 where 条件;
-- 从 student 表中查询 age = 18 的 name
select name from student where age = 18;
requête d'opérateur arithmétique
语法:>(大于), <(小于), =(等于), !=(不等于), <>(不等于), >=(大于等于), <=(小于等于)
-- 从 student 表中查询 age >=20 的所有记录
select * from student where age >= 20;
requête d'opérateur logique
语法:and(且), or(或), not(非) sql 会首先执行 and 条件,再执行 or 语句。除非加括号
-- 从 student 表中查询 age >=20并且成绩高于50分的所有记录
select * from student where age >= 20 and score > 50;
-- 从 student 表中查询 age = 15 或 score = 70 的所有记录
select * from student where age = 15 or score = 70;
Requête d'expression régulière ⭐
正则表达式要用regexp
语法:select 字段 from 表名 where 字段 regexp '正则表达式';

--从 student 表中查询 name 含有李的所有记录
select * from student where name regexp '李';

--从 student 表中查询 name 含有李或三的所有记录
select * from student where name regexp '李|三';

--从 student 表中查询 name 为李开头的所有记录
select * from student where name regexp '^李';

--从 student 表中查询 name 为五结尾的所有记录
select * from student where name regexp '五$';

-- 字符.用来替代字符串中的任意一个字符
--从 student 表中查询 name 含'赵'和'真'两个字符且中间只隔了一个字符的所有记录
select * from student where name regexp '赵.真';

-- 字符*和+都可以匹配多个该符号之前的字符。不同的是,+表示至少一个字符,而*可以表示 0 个字符。
-- 从 student 表中查询 name 含丰字的所有记录(三*表示丰字前面可以有0-无数个三,因此至少含有丰)
select * from student where name regexp '三*丰';
-- 从 student 表中查询 name 含丰且前面只少有一个三的所有记录(三+表示丰字前面至少个三,因此至少含有三丰)
select * from student where name regexp '三+丰';


-- 从 student 表中查询 name 包含李、三、 真 3 个字符中任意一个的记录
select * from student where name regexp '[李三真]';
-- 方括号[ ]还可以指定集合的区间。例如,“[a-z]”表示从 a~z 的所有字母;“[0-9]”表示从 0~9 的所有数字;“[a-z0-9]”表示包含所有的小写字母和数字;“[a-zA-Z]”表示匹配所有字符;“[\\u4e00-\\u9fa5]”表示中文汉字

-- [^字符集合]用来匹配不在指定集合中的任何字符。
-- 查询 name 字段值包含字母 a~t 以外的字符的所有记录
select * from student where name regexp'[^a-t]';

-- 字符串{n,}表示字符串连续出现 n 次;字符串{n,m}表示字符串连续出现至少 n 次,最多 m 次。
-- a{2,} 表示字母 a 连续出现至少 2 次,也可以大于 2 次;a{2,4} 表示字母 a 连续出现最少 2 次,最多不能超过 4 次。
-- 查询 name 字段值出现字母‘e’ 至少 2 次的记录
select * from student where name regexp'e{2,}';

 Méthodes de correspondance couramment utilisées dans les opérateurs REGEXP

choix illustrer exemple Exemple de valeur de correspondance
^ caractère de début du texte correspondant '^b' correspond à une chaîne commençant par la lettre b livre, gros, banane, vélo
$ Correspond au caractère de fin du texte 'st$' correspond aux chaînes se terminant par st tester, résister, persister
. correspond à n'importe quel caractère unique 'b.t' correspond à n'importe quel caractère entre b et t peu 、 chauve-souris 、 mais 、 mordre
* correspond à zéro ou plusieurs des caractères qui le précèdent 'f*n' correspond au caractère n précédé de n'importe quel caractère f fn, ventilateur, faan, abcn
+ Correspond au caractère précédent 1 ou plusieurs fois 'ba+' correspond à un b suivi d'au moins un a ba、bay、nu、bataille
<chaîne> correspond au texte contenant les caractères spécifiés 'fa' correspond au texte contenant 'fa' fan、afa、faad
[jeu de caractères] correspond à n'importe quel caractère du jeu de caractères '[xz]' correspond à x ou z étourdi, zèbre, rayons X, extra
[^] correspond à tout caractère non entre parenthèses '[^abc]' correspond à toute chaîne qui ne contient pas a, b ou c bureau, renard, f8ke
chaîne{n,} Correspond à la chaîne précédente au moins n fois 'b{2}' correspond à 2 ou plus b bbb、bbbb、bbbbbb
chaîne{n,m} Correspond à la chaîne précédente au moins n et au plus m fois 'b{2,4}' correspond à au moins 2 et au plus 4 b bbb、bbbb
requête floue
语法:select 字段 from 表名 where 字段 like '%数据%';
-- 从 student 表中查询 name 中含有 '张' 的所有记录
select * from student where name like '%张%';
-- 从 student 表中查询 name 中姓 '张' 的所有记录
select * from student where name like '张%';
requête de plage
 in与not in     between … and …:范围连续(包含端点)

语法:select 字段 from 表名 where 字段 in(列表)//或 not in(列表);
-- 从 student 表中查询 age 为 (18, 19, 20) 之间的所有记录
select * from student where age in(18, 19, 20);
-- 从 student 表中查询 除了age 为 (18, 19, 20) 之间的所有记录
select * from student where age not in(18, 19, 20);

语法:select 字段 from 表名 where 字段 between 值1 and 值2;
-- 从 student 表中查询 age 为 (18, 19, 20) 之间的所有记录
select * from student where age between 18 and 20;
Qu'il ne s'agisse pas d'une requête de jugement vide
null(为空)  not (非空) 判断是否为空要用is
语法:select 字段 from 表名 where 字段 is null(not null);
--从 student 表中查询 age 未填写(为空)的所有记录
select * from student where age is null;

priorité

L'ordre de priorité de haut en bas est : parenthèses > NOT > opérateur de comparaison > opérateur logique

ET est utilisé avant OU, s'il apparaît en même temps et que vous voulez calculer ou d'abord, vous devez l'utiliser en combinaison avec ()

Trier la requête
语法:select 字段 from 表名 order by 字段 排序方式(升序 asc, 降序 desc);
-- 从 student 表中查询所有记录并按照 age 升序排序
select * from student order by age asc;

进阶 select 字段 from 表名 order by 字段 排序方式,字段 排序方式;
(当第一个字段相同时,按第二个字段排序顺序来)
-- 从 student 表中查询所有记录并按照 age 升序,当 age 相同时,按score降序排序
select * from student order by age asc,score desc;

 Limiter la requête (requête de pagination)
语法:limit可以限制制定查询结果的记录条数
    注意  0 表示第一行记录,也是从 0 开始
    select 字段 from 表名 limit n;查询前n行的记录
	select 字段 from 表名 limit n, m;查询第n+1行到第m+n行的记录(也就是从第n+1行开始查询m行记录)

-- 从 student 表中查询第三行到第六行的记录,也就是第三行开始查询4条记录
select * from student limit 2, 4;

requête aléatoire
-- 随机显示两个学生信息
select * from student order by rand() limit 2;
Requête de groupe
语法:select 字段 from 表名 group by 字段 ;
-- 从 student 表中查询age值和每个age都有多少人
select age ,count(*) from student group by age ;

 La clause GROUP BY doit apparaître après la clause WHERE et avant la clause ORDER BY

AYANT

L'instruction HAVING est utilisée pour filtrer (filtrer) les données groupées

语法:select 字段 from 表名 group by 字段 having 条件;
-- 从 student 表中查询age>19值和每个age>19都有多少人
select age ,count(*) from student group by age having age > 19;

Recherche Avancée

sous-requêtes (requêtes imbriquées)

Dans une instruction de sélection, une autre instruction de sélection est intégrée, l'instruction de sélection intégrée est appelée une instruction de sous-requête et l'instruction de sélection externe est appelée une requête principale.

Relation entre la requête principale et la sous-requête

  • Une sous-requête est intégrée à la requête principale
  • Les sous-requêtes sont auxiliaires de la requête principale, soit en tant que conditions, soit en tant que sources de données
  • Une sous-requête est une instruction qui peut exister indépendamment et est une instruction select complète
语法:语法:嵌套查询也就是在查询语句中包含有子查询语句,所以叫嵌套查询,没有单独的语法,嵌套子查询通常位于查询语句的条件之后;

-- 先查询学生平均年龄,再查询大于平均年龄的学生
select * from student where age > (select avg(age) from student);
numéro de ligne
-- row_number() over (排序语句)
-- row_number()从1开始,为每一条分组记录返回一个数字

-- 查询名次 姓名 成绩
select row_number() over (order by score desc) 名次,name 姓名,score 成绩 from student;

 classement

DENSE_RANK() est une fonction de fenêtre qui attribue un rang à chaque ligne d'une partition ou d'un ensemble de résultats sans lacunes dans les valeurs de rang.

  • DENSE_RANK(). Si vous utilisez DENSE_RANK() pour le classement, vous obtiendrez : 1,1,2,3,4.
  • RANG(). Si vous utilisez RANK() pour le classement, vous obtiendrez : 1, 1, 3, 4, 5.
  • ROW_NUMBER(). Si vous utilisez ROW_NUMBER() pour le classement, vous obtenez : 1, 2, 3, 4, 5. (généralement utilisé pour la numérotation)
-- 排名
--排名并列后面名次挨着
select id 编号,name 姓名,score 分数,concat('第',dense_rank() over (order by score
desc),'名') 名次 from student;

--排名并列后面名次不挨着
select id 编号,name 姓名,score 分数,concat('第',rank() over (order by score
desc),'名') 名次 from student;
 fonction d'agrégation
-- 聚合函数
-- 可以实现一些具体的功能,比如找最小值,找最大值,求和,计数等

-- min() 求最小值
语法:select min(字段) from 表名;
-- 从 student 中查询最小的 age
select min(age) from student;

-- max() 求最大值
语法:select max(字段) from 表名;
-- 从 student 中查询最大的 age
select max(age) from student;


-- sum() 求和
语法:select sum(字段) from 表名;
-- 从 student 中统计所有 age 的和
select sum(age) from student;


-- avg() 求平均值
语法:select avg(字段) from 表名;
-- 从 student 中对所有的 age 求平均值
select avg(age) from student;


-- count(字段) 统计个数
语法:select count(字段) from 表名;
-- 从 student 中查询 name 的记录个数
select count(name) from student;
requête de connexion

Les jointures de requête MySQL sont principalement divisées en trois catégories : les jointures internes, les jointures externes et les jointures croisées.

jointure interne

JOINTURE INTERNE

La jointure interne signifie que les enregistrements de deux tables ou plus ont une relation correspondante, qui peut être représentée par une clé primaire et une clé étrangère. Les jointures internes renvoient les résultats en conservant les mêmes enregistrements. Autrement dit, les résultats de la requête sont renvoyés uniquement si des enregistrements correspondants existent dans les deux tables.

-- 内连接
语法:select 字段 from 表1 inner join 表2 on 表1.字段 = 表2.字段;
	根据两个表中共有的字段进行匹配,然后将符合条件的合集进行拼接
	on后面是连接条件,也就是共有字段

select * from student inner join engScore on student.name = engScore.name;
-- 将 student 表与 engScore 表通过相同的 name 拼接起来,简单的来说就是两个 excel 合并

Exemple En supposant que nous ayons deux tables étudiant et cours, leurs colonnes et leur contenu sont les suivants

table des élèves :

identifiant nom âge
1 Jack 18
2 À M 19
3 jerry 20
4 Bob 18

tableau des cours :

ID_cours nom du cours Carte d'étudiant
1 Mathématiques 1
2 Anglais 2
3 Science 2
4 Histoire 3

Maintenant, nous voulons interroger les cours sélectionnés par chaque étudiant, nous pouvons utiliser l'instruction SQL suivante :

SELECT student.name, course.course_name
FROM student
INNER JOIN course
ON student.id = course.student_id;

Cette requête renverra les résultats suivants :

nom nom du cours
Jack Mathématiques
À M Anglais
À M Science
jerry Histoire
jointure externe

JOINT EXTERNE

Le mot-clé externe peut être omis pour les jointures externes

Les jointures externes sont divisées en jointures gauches et jointures droites. Ce type de jointure signifie que lorsque deux ou plusieurs tables sont jointes, tous les enregistrements sont inclus.

jointure externe gauche

Une jointure gauche signifie que la table de gauche récupère tous les enregistrements et que la table de droite récupère uniquement les enregistrements correspondants. Si la table de gauche ne contient aucun enregistrement correspondant à la table de droite, la table de droite renverra une valeur NULL.

-- 左连接
语法:select 字段 from 表1 left join 表2 on 连接条件;

select * from student left join engScore on student.name = engScore.name;
-- 与内连接形式相同,但左表为主表,指定字段都会显示,右表为从表,无内容会显示 null

exemple

Toujours en prenant la table des étudiants et la table des cours ci-dessus comme exemple, si nous voulons interroger les cours sélectionnés par chaque étudiant, y compris les étudiants qui n'ont pas sélectionné de cours. Les instructions SQL suivantes peuvent être utilisées :

SELECT student.name, course.course_name
FROM student
LEFT JOIN course
ON student.id = course.student_id;

Cette requête renverra les résultats suivants :

nom nom du cours
Jack Mathématiques
À M Anglais
À M Science
jerry Histoire
Bob NUL

jointure droite (externe)

Une jointure droite est similaire à une jointure gauche, sauf que les rôles des tables gauche et droite sont inversés

-- 右连接
语法:select 字段 from 表1 right join 表2 on 连接条件;

select * from student right join engScore on student.name = engScore.name;
-- 与内连接形式相同,但右表为主表,指定字段都会显示,左表为从表,无内容会显示 null

Continuer à utiliser la table des étudiants et la table des cours ci-dessus comme exemple, si nous voulons interroger les étudiants de chaque cours, y compris les étudiants qui n'ont pas choisi le cours. Les instructions SQL suivantes peuvent être utilisées :

SELECT student.name, course.course_name
FROM student
RIGHT JOIN course
ON student.id = course.student_id;

Cette requête renverra les résultats suivants :

nom nom du cours
Jack Mathématiques
À M Anglais
À M Science
jerry Histoire
NUL Géographie
Jointure externe complète (composition)

En SQL, il existe également un FULL OUTER JOIN (jointure externe complète), mais MySQL ne le supporte pas. Par conséquent, nous pouvons simuler une jointure externe complète via l'instruction UNION.

union et union tous

Union dédupliquera. S'il est renvoyé dans une condition, il ne sera pas renvoyé même s'il se trouve dans la condition suivante. Union all ne supprimera pas les doublons. S'il est renvoyé dans une condition, il sera également renvoyé s'il y a un doublon dans la suivante.

 select id, name, age from s1 where age >18union select id, name, agefrom s2 where age >18;
-- 查询s1和s2中所有年纪大于18的学生的id,name,age,并将结果放在一个表中,同时去掉重复

 

connexion croisée

JOINT CROISÉ

Une jointure croisée est une jointure sans aucune condition de jointure entre deux ou plusieurs tables. En termes simples, une jointure croisée vous permet d'interroger toutes les combinaisons possibles.

tb1:

d nom
1 UN
2 B
3 C

Nous pouvons utiliser l'instruction SQL suivante pour effectuer une jointure croisée :

SELECT t1.name, t2.name
FROM tb1 t1
CROSS JOIN tb1 t2;

résultat de la recherche

nom nom
UN UN
UN B
UN C
B UN
B B
B C
C UN
C B
C C

L'ordre dans lequel les clauses SELECT doivent suivre

clause illustrer Est-il nécessaire d'utiliser
SÉLECTIONNER la colonne ou l'expression à renvoyer Oui
DEPUIS la table pour récupérer les données Utilisé uniquement lors de la sélection de données dans une table
filtrage au niveau des lignes Non
PAR GROUPE Description du groupe Utilisé uniquement lors du calcul des agrégats par groupe
AYANT filtrage au niveau du groupe Non
COMMANDÉ PAR ordre de tri des sorties Non
LIMITE le nombre de lignes à récupérer Non

Je suppose que tu aimes

Origine blog.csdn.net/qq_57570052/article/details/132171270
conseillé
Classement