Base de datos MySQL: consulta de varias tablas (1): relaciones de varias tablas (uno a muchos, muchos a muchos, uno a uno), descripción general de las consultas de varias tablas (conceptos, producto cartesiano, clasificación)

Tabla de contenido

Descripción general

Relación de varias tablas

Uno a muchos (muchos a uno)

muchos a muchos

Cara a cara

Descripción general de consultas de varias tablas

concepto

Producto cartesiano

Clasificación


Consulta de varias tablas

  • Relación de varias tablas
  • Descripción general de consultas de varias tablas
  • unir internamente
  • unión externa
  • autoconexión
  • subconsulta
  • Caso de consulta de varias tablas

Descripción general

Durante el desarrollo del proyecto, al diseñar la estructura de la tabla de la base de datos, la estructura de la tabla se analizará y diseñará en función de las necesidades del negocio y la relación entre los módulos de negocio. Dado que los negocios están interrelacionados, existen varias conexiones entre cada estructura de la tabla. Básicamente hay tres tipos:

  • Uno a muchos (muchos a uno)
  • muchos a muchos
  • Cara a cara

Relación de varias tablas

Uno a muchos (muchos a uno)

  • Caso: Relación entre departamentos y empleados
  • Relación: un departamento corresponde a varios empleados y un empleado corresponde a un departamento.
  • Implementación: cree una clave externa en muchos lados, apuntando a la clave principal de un lado

Como el ejemplo de restricciones que se muestra en el artículo anterior.

muchos a muchos

  • Caso: Relación entre estudiantes y cursos
  • Relación: un estudiante puede tomar varios cursos y varios estudiantes pueden elegir un curso.
  • Implementación: cree una tercera tabla intermedia, que contiene al menos dos claves externas, que están asociadas respectivamente con las claves primarias de las dos partes.

Cree una tabla para demostrar relaciones de muchos a muchos

create table student(
    id int auto_increment primary key comment '主键ID',
    name varchar(10) comment '姓名',
    no varchar(10) comment '学号'
)comment '学生表';
insert into student (name,no)
    values ('黛绮丝','2000100101'),('谢逊','2000100102'),('殷天正','2000100103'),('韦一笑','2000100104');

create table course(
    id int auto_increment primary key comment '主键ID',
    name varchar(10) comment '课程名称'
)comment '课程表';
insert into course (name)
    values ('Java'),('PHP'),('MySQL'),('Hadoop');

create table student_course(
    id int auto_increment primary key  comment '主键',
    studentid int not null comment '学生ID',
    courseid int not null  comment '课程ID',
    constraint fk_courseid foreign key (courseid) references  course (id),
    constraint fk_student foreign key  (studentid) references  student (id)
)comment '学生课程中间表';
insert into student_course (studentid, courseid)
    values (1,1),(1,2),(1,3),(2,2),(2,3),(3,4);

A continuación, puede observar la relación entre tablas:

Cara a cara

  • Caso: Relación entre usuarios y datos de usuario
  • Relación: relación uno a uno, utilizada principalmente para dividir una sola tabla. Los campos básicos de una tabla se colocan en una tabla y otros campos detallados se colocan en otra tabla para mejorar la eficiencia operativa.
  • Implementación: agregue una clave externa a cualquiera de las partes, asocie la clave principal de la otra parte y configure la clave externa para que sea única (única)
create table tb_user(
    id int auto_increment primary key  comment '主键ID',
    name varchar(10) comment '姓名',
    age int comment '年龄',
    gender char(1) comment '1:男,2:女',
    phone char(11) comment '手机号'
)comment '用户基本信息表';

create table tb_user_edu(
    id int auto_increment primary key comment '主键ID',
    degree varchar(20) comment'学历',
    major varchar(50) comment '专业',
    primaryschool varchar(50) comment '小学',
    middleschool varchar(50) comment '中学',
    university varchar(50) comment '大学',
    userid int unique comment '用户ID',
    constraint fk_userid foreign key (userid) references tb_user (id)
)comment '用户教育信息表';

insert into tb_user(id, name, age, gender, phone)
    values (null, '黄渤' ,45, '1', '1800001111'),
           (null, '冰冰' ,35, '2' , '1800002222'),
           (null, '码云',55, '1', '1800008888'),
           (null, '李彦宏' ,50, '1', '1800009999');

insert into tb_user_edu (id, degree, major, primaryschool, middleschool, university, userid)
    values (null,'本科','舞蹈','静安区第一小学', '静安区第-中学', '北京舞蹈学院',1),
           (null, '硕士','表演','朝阳区第小学','朝阳区第一中学', '北京电影学院' ,2),
           (null,'本科','英语','杭州市第小学','杭州市第一中学','杭州师范大学',3),
           (null, '本科','应用数学','阳泉第一小学','阳泉区第一中学','清华大学',4);

Descripción general de consultas de varias tablas

concepto

Se refiere a consultar datos de varias tablas.

Por ejemplo, para consultar estas dos tablas:

Para empezar, podemos usar una declaración como esta:

select * from emp,dept;

Luego descubrí que el resultado de la consulta eran 25 datos.

Evidentemente, este no es el resultado que queremos. Esta situación ocurre porque habrá productos cartesianos no válidos al realizar consultas de varias tablas y debemos eliminar los productos cartesianos no válidos.

Producto cartesiano

El producto cartesiano se refiere a todas las combinaciones de dos conjuntos A y B en matemáticas.

Por ejemplo, si se combinan A, B y 1, 2, 3, 4, existen ocho combinaciones diferentes:

  • un 1
  • un 2
  • un 3
  • un 4
  • B 1
  • B 2
  • B 3
  • B 4

Por lo tanto, al consultar varias tablas, es necesario eliminar los productos cartesianos no válidos.

select * from emp,dept where emp.dept_id = dept.id;

Entonces podremos encontrar los resultados que queremos.

Clasificación

1. Consulta de conexión

  • Unión interna: equivalente a consultar los datos de intersección de A y B
  • Unión externa:

                Unión externa izquierda: consulta todos los datos en la tabla de la izquierda y algunos datos en la intersección de las dos tablas

                Unión externa derecha: consulta todos los datos en la tabla derecha y algunos datos en la intersección de las dos tablas

  • Autounión: consulta de conexión actual consigo mismo, la autounión debe usar un alias de tabla

2. Subconsulta

Sólo una breve comprensión en la descripción general.


fin


Aprenda de: Programador Dark Horse - Curso de base de datos MySQL

Supongo que te gusta

Origin blog.csdn.net/li13437542099/article/details/132390344
Recomendado
Clasificación