Introducción a la consulta de múltiples tablas SQL
- (1) Inicializar datos
- (2) En el proyecto real, los datos se almacenan en varias tablas. Si los datos requeridos provienen de varias tablas, es necesario utilizar la consulta de varias tablas
- (3) La clasificación de consultas
"1: Consulta de combinación cruzada (comprensión)
" 2: Consulta de combinación
interna Unión interna implícita, combinación interna explícita ***
"3: Consulta de combinación
externa Unión externa izquierda, combinación externa derecha
" 4: Sub Preguntar
# 初始化数据
create database day13_3;
use database day13_3;
create table category (
cid int primary key ,
cname varchar(50)
);
create table products(
pid int primary key ,
pname varchar(50),
price int,
flag varchar(2), #是否上架标记为:1表示上架、0表示下架
category_id int,
constraint products_fk foreign key (category_id) references category (cid)
);
#分类
insert into category(cid,cname) values('1','家电');
insert into category(cid,cname) values('2','服饰');
insert into category(cid,cname) values('3','化妆品');
#商品
insert into products(pid, pname,price,flag,category_id) values('1','联想',5000,'1',1);
insert into products(pid, pname,price,flag,category_id) values('2','海尔',3000,'1',1);
insert into products(pid, pname,price,flag,category_id) values('3','雷神',5000,'1',1);
insert into products (pid, pname,price,flag,category_id) values('4','杰克琼斯',800,'1',2);
insert into products (pid, pname,price,flag,category_id) values('5','真维斯',200,'1',2);
insert into products (pid, pname,price,flag,category_id) values('6','花花公子',440,'1',2);
insert into products (pid, pname,price,flag,category_id) values('7','劲霸',2000,'1',2);
insert into products (pid, pname,price,flag,category_id) values('8','香奈儿',800,'1',2);
insert into products (pid, pname,price,flag,category_id) values('9','相宜本草',200,'1',2);
Consulta de tabla múltiple-consulta de combinación cruzada
(1) ¿Qué consulta de combinación
cruzada ? La consulta de combinación cruzada consiste en multiplicar dos tablas: A y B -> A * B
(2) ¿Qué es un conjunto cartesiano?
El resultado de multiplicar dos tablas, independientemente de si los datos son correctos
(3) La esencia de la
consulta de varias tablas La consulta de varias tablas puede entenderse como un filtrado condicional sobre la base del conjunto cartesiano.
(4) Caso: consulta cada categoría y todos los productos de esa categoría.
select * from category,products;
Unión interna de consulta de varias tablas
- (1) ¿Qué es la consulta de combinación interna?
Lo que busca es la intersección de varias tablas, la
esencia es agregar condiciones al conjunto cartesiano. - (2) Clasificación:
combinación interna implícita: seleccione * de A, B donde condición; combinación interna
explícita: seleccione * de A combinación interna B en condición; (mayor eficiencia)
(3) diferencia
"usando la palabra clave combinación interna
" anterior Filtrar sobre la base del conjunto cartesiano, este último en la lista original
(4) Ejercicio: Provincias y ciudades
隐式内连接:select * from A,B where 条件;
select * from category c,products p where c.cid = p.category_id;
显式内连接:select * from A inner join B on 条件;(效率更高)
select * from category c inner join products p on c.cid = p.category_id;
select * from province,city;
select * from province p inner join city c on p.pid = c.pid_fk;
Unión externa de consulta de varias tablas
- (1) ¿Qué es una consulta de combinación externa?
Seleccione una de las dos tablas para generar todos los datos, y la otra tabla generará NULL si no hay datos correspondientes - (2) Clasificación
La combinación externa izquierda se
select * from A left outer join B on 条件;
encuentra principalmente en la tabla de la izquierda, se generan todos los datos de la tabla de la izquierda, si no hay datos equivalentes en la tabla de la derecha, se completa NULL. La
combinación externa derecha
select * from A right outer join B on 条件;
se basa principalmente en la tabla de la derecha y todos los datos de la tabla de la derecha se obtienen, Complete NULL si no hay datos equivalentes en la tabla
# 外连接
select * from province p inner join city c on p.pid = c.pid_fk;
# 左外连接
select * from province p left outer join city c on p.pid = c.pid_fk;
# 右外连接
select * from province p right outer join city c on p.pid = c.pid_fk;
Práctica
(1) Consultar qué papel juega cada actor
(2) Consultar qué papel tiene cada actor y qué permisos
Subconsulta
- (1) ¿Qué es una subconsulta?
Seleccionar anidamiento: el resultado de la consulta de una selección se utiliza como parte de la sintaxis de otra consulta de selección - (2) Casos
Consultar productos pertenecientes a la clasificación electrónica en la tabla de productos
select *from product where cid = 1
select cid from category where cname='电子'
select *from product where cid = (select cid from category where cname='电子')
Consultar los productos pertenecientes a la categoría de electrodomésticos y cosméticos
en la tabla de productos Consultar los productos pertenecientes a la categoría de cosméticos en la tabla de productos (obtendrá una tabla después de la consulta de selección)