MySQL database_data query_auto-asociación, subconsulta

Base de datos MySQL

Autoasociación

  • Estructura de la tabla de información de la provincia de diseño provincias
	id
	ptitle
  • Diseñar la estructura de la tabla de información de la ciudad
	id
	ctitle
	proid
  • El proid de la tabla de ciudades representa la provincia a la que pertenece la ciudad, correspondiente al valor de id de la tabla de provincias

problema:

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

Pensamiento:

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

significado:

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

respuesta:

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

Descripción:

  • Debido a que la provincia no tiene provincia a la que pertenece, se puede completar como nulo
  • El pid de la provincia a la que pertenece la ciudad, rellene el número id correspondiente a la provincia
  • Esto es autoasociación. Una columna de la tabla está asociada con otra columna de la tabla, pero sus significados lógicos comerciales son diferentes. El pid de la información de la ciudad se refiere al ID de la información de la provincia
  • En esta tabla, la estructura sigue siendo la misma, puede agregar información como distritos, condados, pueblos, calles, pueblos y comunidades.

La declaración para crear la tabla de áreas es la siguiente:

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

  • Importar datos de un archivo SQL

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

  • Consulta cuántas provincias hay en total

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

  • Ejemplo 1: consultar todas las ciudades donde el nombre de la provincia es "Provincia de Shanxi"
select city.* from areas as city
inner join areas as province on city.pid=province.aid
where province.atitle='山西省';
  • Ejemplo 2: consultar todos los distritos y condados cuyo nombre de ciudad sea "Ciudad de Guangzhou"
select dis.* from areas as dis
inner join areas as city on city.aid=dis.pid
where city.atitle='广州市';

Subconsulta

  • ¿Qué es una subconsulta?
  • En una instrucción de selección, se incrusta otra instrucción de selección, luego la instrucción de selección integrada se denomina instrucción de subconsulta.

Consulta principal
主要查询的对象,第一条 select 语句

La relación entre la consulta principal y la subconsulta

  • La subconsulta está incrustada en la consulta principal.
  • La subconsulta es auxiliar de la consulta principal, ya sea como condición o como fuente de datos.
  • Las subconsultas pueden ser independientes de la declaración es una selectoración completa

Clasificación de subconsultas

  • Subconsulta escalar: el resultado devuelto por la subconsulta es un dato (una fila y una columna)
  • Subconsulta de columna: el resultado devuelto es una columna (una columna con varias filas)
  • Subconsulta de fila: el resultado devuelto es una fila (una fila con varias columnas)

Consulta cuántica escalar

  • Consultar la edad promedio de los estudiantes en una clase
  • Consultar estudiantes mayores que la edad promedio
--查询班级学生的平均身高

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

Subconsultas a nivel de columna

  • Consultar los nombres de todas las clases en las que el alumno está en la clase
    • Descubra todos los identificadores de clase en la tabla de estudiantes
    • Encuentra el nombre correspondiente en la tabla de clases.
select name from classes where id in (select cls_id from students);

Subconsultas de nivel de fila

  • Necesidades: encontrar al estudiante más alto y mayor de la clase
  • Elemento de fila: combine varios campos en un elemento de fila, que se utilizará en subconsultas de nivel de fila
select * from students where (height,age) = (select max(height),max(age) from students);

Uso de palabras clave específicas en subconsultas

  • en el rango
    • Formato: consulta principal donde se encuentra la condición (subconsulta de columna)

para resumir

Además, los artículos anteriores sobre básicamente los MySQl 查询puntos de conocimiento llegaron a su fin.
Vamos a ver查询的完整格式

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}]
]
  • selectOración completa
select distinct *
from 表名
where ....
group by ... having ...
order by ...
limit start,count
  • El orden de ejecución es:

    • del nombre de la tabla
    • dónde …
    • agrupar por …
    • seleccionar distinto *
    • teniendo …
    • ordenar por ...
    • límite de inicio, cuenta
  • En el uso real, es solo una combinación de algunas partes de la oración, ¡no toda!

Supongo que te gusta

Origin blog.csdn.net/weixin_42250835/article/details/90454625
Recomendado
Clasificación