MySQL database_data query_self-association, sous-requête

Base de données MySQL

Auto-association

  • Structure de la table d'information sur les provinces de conception provinces
	id
	ptitle
  • Concevoir la structure de la table des informations sur la ville
	id
	ctitle
	proid
  • Le proid de la table des villes représente la province à laquelle appartient la ville, correspondant à la valeur id de la table des provinces

problème:

能不能将两个表合成一张表呢?

En pensant:

观察两张表发现,citys表比provinces表多一个列proid,其它列的类型都是一样的.

importance:

存储的都是地区信息,而且每种信息的数据量有限,没必要增加一个新表,或者将来还要存储区、乡镇信息,都增加新表的开销太大。

réponse:

	定义表areas,结构如下
	
	id
	atitle
	pid

La description:

  • Étant donné que la province n'a pas de province à laquelle elle appartient, elle peut être remplie comme nulle
  • Le pid de la province à laquelle appartient la ville, remplissez le numéro id correspondant à la province
  • Il s'agit d'une auto-association. Une colonne du tableau est associée à une autre colonne du tableau, mais leur signification de logique métier est différente. Le pid des informations sur la ville fait référence à l'ID des informations sur la province.
  • Dans ce tableau, la structure reste la même, vous pouvez ajouter des informations telles que les districts, les comtés, les villes, les rues, les villages et les communautés

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

create table areas(
    aid int primary key,
    atitle varchar(20),
    pid int
);

  • Importer des données à partir d'un fichier SQL

source areas.sql; # 'areas.sql' 文件是一个插入全国省市区数据的sql文件

  • Recherchez le nombre total de provinces

select count(*) from areas where pid is null;

  • Exemple 1: interrogez toutes les villes dont le nom de la province est "Province du Shanxi"
select city.* from areas as city
inner join areas as province on city.pid=province.aid
where province.atitle='山西省';
  • Exemple 2: interrogez tous les districts et comtés dont le nom de ville est "Guangzhou City"
select dis.* from areas as dis
inner join areas as city on city.aid=dis.pid
where city.atitle='广州市';

Sous-requête

  • Qu'est-ce qu'une sous-requête?
  • Dans une instruction select, une autre instruction select est incorporée, puis l'instruction select incorporée est appelée instruction de sous-requête.

Requête principale
主要查询的对象,第一条 select 语句

La relation entre la requête principale et la sous-requête

  • La sous-requête est intégrée à la requête principale
  • La sous-requête est auxiliaire de la requête principale, soit en tant que condition, soit en tant que source de données
  • Les sous-requêtes peuvent être indépendantes de l'instruction est une selectphrase complète

Classification des sous-requêtes

  • Sous-requête scalaire: le résultat renvoyé par la sous-requête est une donnée (une ligne et une colonne)
  • Sous-requête de colonne: le résultat renvoyé est une colonne (une colonne avec plusieurs lignes)
  • Sous-requête de ligne: le résultat renvoyé est une ligne (une ligne avec plusieurs colonnes)

Requête quantique scalaire

  • Interroger l'âge moyen des élèves dans une classe
  • Interroger les élèves plus âgés que la moyenne
--查询班级学生的平均身高

select * from students where age > (select avg(age) from students);

Sous-requêtes au niveau de la colonne

  • Interroger les noms de toutes les classes dans lesquelles l'étudiant est dans la classe
    • Découvrez tous les identifiants de classe dans la table des élèves
    • Trouvez le nom correspondant dans la table de classe
select name from classes where id in (select cls_id from students);

Sous-requêtes au niveau de la ligne

  • Besoins: trouver l'élève le plus âgé et le plus grand de la classe
  • Élément de ligne: combinez plusieurs champs en un élément de ligne, qui sera utilisé dans les sous-requêtes au niveau de la ligne
select * from students where (height,age) = (select max(height),max(age) from students);

Utilisation de mots-clés spécifiques dans les sous-requêtes

  • dans la gamme
    • Format: requête principale où condition dans (sous-requête de colonne)

Pour résumer

De plus, les articles précédents sur essentiellement les MySQl 查询points de connaissance se sont terminés.
Nous allons jeter un coup d'oeil查询的完整格式

SELECT select_expr [,select_expr,...] [      
      FROM tb_name
      [WHERE 条件判断]
      [GROUP BY {col_name | postion} [ASC | DESC], ...] 
      [HAVING WHERE 条件判断]
      [ORDER BY {col_name|expr|postion} [ASC | DESC], ...]
      [ LIMIT {[offset,]rowcount | row_count OFFSET offset}]
]
  • complète selectphrase
select distinct *
from 表名
where ....
group by ... having ...
order by ...
limit start,count
  • L'ordre d'exécution est:

    • à partir du nom de la table
    • où …
    • par groupe …
    • sélectionnez distinct *
    • ayant …
    • commandé par …
    • début de limite, compter
  • En utilisation réelle, il s'agit simplement d'une combinaison de certaines parties de la phrase, pas de la totalité!

Je suppose que tu aimes

Origine blog.csdn.net/weixin_42250835/article/details/90454625
conseillé
Classement