Instrução e subconsulta de consulta de várias tabelas SQL

No desenvolvimento real, a consulta de várias tabelas é um dos requisitos mais comuns. A instrução de consulta de várias tabelas do SQL pode realizar a consulta associada entre várias tabelas e é muito flexível de usar. A subconsulta é um método de consulta extremamente importante em SQL, e o resultado da subconsulta pode ser usado como condição ou resultado de outra consulta. Este artigo apresentará em detalhes as instruções de consulta multitabela e subconsultas em SQL, incluindo consultas de junção interna, consultas de junção externa, consultas de junção automática e diferentes tipos de subconsultas, para ajudar os leitores a entender melhor a sintaxe de consulta do SQL.

Em termos de consulta de várias tabelas, este artigo apresentará uma variedade de métodos de consulta comuns, incluindo junção interna implícita, junção interna explícita, junção externa esquerda, junção externa direita, junção automática, etc. Cada método de consulta será equipado com sintaxe detalhada e casos de demonstração para ajudar os leitores a entender e dominar melhor. Em termos de subconsultas, este artigo apresentará em detalhes vários tipos de subconsultas, como subconsultas escalares, subconsultas de colunas, subconsultas de linhas e subconsultas de tabelas, bem como seus cenários de uso e regras gramaticais.

Quer se trate dos requisitos de consulta no desenvolvimento diário ou no aprendizado e uso de SQL, consultas e subconsultas de várias tabelas são conteúdos muito básicos e importantes. Este artigo visa ajudar os leitores a entender e dominar melhor as instruções e subconsultas SQL de várias tabelas por meio de introduções detalhadas e demonstrações de caso, além de melhorar os recursos de consulta SQL e os níveis de aplicativo.

Classificação de consulta de várias tabelas

  • consulta de conexão
    • Inner join: equivalente a consultar os dados de interseção de A e B
    • Junção externa:
      • Junção externa esquerda: consulta todos os dados na tabela à esquerda e alguns dados na interseção de duas tabelas.
      • Junção externa direita: Consulta todos os dados na tabela direita e os dados de interseção das duas tabelas.
    • Autojunção: a consulta de conexão entre a tabela atual e ela mesma, a autojunção deve usar o alias da tabela
  • subconsulta
    insira a descrição da imagem aqui

Consulta de junção - junção interna

Sintaxe da consulta de junção interna (a consulta de junção interna é a interseção de duas tabelas):

  • junção interna implícita

    SELECT 字段列表 FROM1,2 WHERE 条件 ...;
    
  • Mostrar links internos

    SELECT 字段列表 FROM1 [INNER] JOIN2 ON 连接条件 ...;
    
  • Demonstração de junção interna

    • Consultar o nome de cada funcionário e o nome do departamento associado (implementação implícita de junção interna)
    • Estrutura da tabela: emp, dept
    • Condição de ingresso: emp.dept_id = dept.id
    select emp.name,dept.name from emp , dept where emp.dept_id = dept.id;
    
    • Consultar o nome de cada funcionário e o nome do departamento associado (implementação explícita de junção interna)
    • Estrutura da tabela: emp, dept
    • Condição de ingresso: emp.dept_id = dept.id
    select e.name,d.name from emp e inner join dept d on e.dept_id = d.id;
    
    e和d是别名
    

Consulta de junção - junção externa

Sintaxe de consulta para junções externas

  • Junção externa esquerda (equivalente a consultar todos os dados na tabela 1 (tabela esquerda), incluindo dados na interseção da tabela 1 e tabela 2)

    SELECT 字段列表 FROM1 LEFT [OUTER] JOIN2 ON 条件 ... ;
    
  • Junção externa direita (equivalente a consultar todos os dados na tabela 2 (tabela direita), incluindo a interseção da tabela 1 e da tabela 2)

    SELECT 字段列表 FROM1 RIGHT [OUTER] JOIN2 ON 条件 ... ;
    

insira a descrição da imagem aqui

  • Demonstração de junção externa

    • Consulte todos os dados na tabela emp e as informações de departamento correspondentes (junção externa esquerda)
    • Estrutura da tabela: emp, dept
    • Condição de ingresso: emp.dept_id = dept.id
    select e.*,d.name from emp e left outer join dept d on e.dept_id = d.id;
    
    • Consulte todos os dados na tabela dept e as informações correspondentes do funcionário (junção externa direita)
    • Estrutura da tabela: emp, dept
    • Condição de ingresso: emp.dept_id = dept.id
    select d.*,e.* from emp e right outer join dept d on e.dept_id = d.id;
    

consulta de junção - junção automática

Sintaxe de consulta de junção automática (consulta de junção automática, que pode ser uma consulta de junção interna ou uma consulta de junção externa)

SELECT 字段列表 FROM 表A 别名A JOIN 表A 别名B ON 条件...;

insira a descrição da imagem aqui

  • demonstração de autoconexão

    • Consultar os nomes dos funcionários e seus líderes
    • Estrutura da tabela: emp
    select a.name,b.name from ema a ,emp b where a.managerid = b.id;
    
    • Consultar o nome emp de todos os funcionários e seus líderes. Se o funcionário não tiver líder, ele também precisa ser consultado
    • Estrutura da tabela: emp.a, emp.b
    select a.nme '员工' , b.name '领导' from emp a left join emp b on a.managerid = b.id;
    

Consulta de união - união, união de todos

Para consultas de união, os resultados de várias consultas são combinados para formar um novo conjunto de resultados de consulta

Observação: o número de colunas e os tipos de campo de várias tabelas na consulta conjunta devem ser consistentes.

union all mesclará diretamente todos os dados, e union desduplicará os dados mesclados

SELECT 字段列表 FROM 表A ...
UNION[ALL]
SELECT 字段列表 FROM 表B ...;
  • Demonstração de consulta

    • Consultar todos os funcionários com salário inferior a 5.000 e os funcionários com idade superior a 50 anos
    select * from emp where salary < 5000
    union all    //查询时如果需要去重则直接把all去掉即可
    select * from emp where age > 50;
    

subconsulta

Conceito: instruções SELECT aninhadas em instruções SQL são chamadas de consultas aninhadas, também conhecidas como subconsultas.

A instrução fora da subconsulta pode ser qualquer uma de INSERT / UPDATE / DELETE / SELECT.

SELECT * FROM t1 WHERE column1 = (SELECT column1 FROM t2);
  • De acordo com os diferentes resultados da subconsulta, ela é dividida em:

    • Subconsulta escalar (o resultado da subconsulta é um valor único)
    • Subconsulta de coluna (o resultado da subconsulta é uma coluna)
    • Subconsulta de linha (o resultado da subconsulta é uma linha)
    • Subconsulta de tabela (o resultado da subconsulta é várias linhas e várias colunas)
  • De acordo com a posição da subconsulta, ela é dividida em: após WHERE, após FROM e após SELECT.

subconsultas escalares

O resultado retornado por uma subconsulta é um único valor (número, string, data etc.), em sua forma mais simples, essa subconsulta é chamada de subconsulta escalar

Operadores comumente usados: = <> > = < < =

  • Consultar todas as informações dos funcionários do "Departamento de Vendas"

    select * from emp where dept_id = (select id from dept where name = '销售部');
    

consulta de coluna

O resultado retornado por uma subconsulta é uma coluna (pode ser várias linhas), essa subconsulta é chamada de subconsulta de coluna.

Operadores comumente usados: IN, NOT IN, ANY, SOME, ALL

operador descrever
EM Dentro do intervalo de coleta especificado, escolha mais um
NÃO EM fora da coleção especificada
QUALQUER Na lista retornada pela subconsulta, qualquer um pode satisfazer
ALGUNS Equivalente a ANY, ANY pode ser usado sempre que SOME for usado
TODOS Todos os valores na lista retornada pela subconsulta devem satisfazer
  • De acordo com o ID do departamento, consulte as informações do funcionário (todas as informações do funcionário do departamento de vendas e do departamento de marketing)
select * from emp where dept_id in (select id from dept where name = '销售部' or name = '市场部');
  • Consultar informações sobre funcionários cujo salário é maior que o de todos no departamento financeiro
select * from emp where salary > all (select salary from emp where dept_id = (select id from dept where name = '财务部'));
  • Consultar informações sobre funcionários cujo salário é superior ao de qualquer pessoa do departamento de P&D
select * from emp where salary > any (select salary from emp where dept_id = (select id from dept where name = '研发部'));

subconsulta de linha

Uma subconsulta retorna uma linha (pode ser várias colunas), essa subconsulta é chamada de subconsulta de linha

Operadores comuns: = , <> , IN , NOT IN

  • Consulte as mesmas informações do funcionário como salário e liderança imediata de 'Zhang San'
select * from emp where (salary,managerid) = (select salary,managerid from emp where name = '张三');

subconsulta de tabela

O resultado retornado por uma subconsulta é várias linhas e várias colunas. Essa subconsulta é chamada de subconsulta de tabela.

Operadores comumente usados: IN

  • Consultar informações de funcionários com o mesmo cargo e salário de "Zhang San" e "Li Si"
select * from emp where (job,salary) in (select job,salary from emp where name = '张三' or name = '李四');

Você pode usar a palavra-chave DISTINCT para desduplicar os resultados da consulta.

Na instrução SQL, você pode usar DISTINCTa palavra-chave para desduplicar os resultados da consulta.

Por exemplo, para consultar os departamentos de todos os funcionários, você pode usar a seguinte instrução SQL:

SELECT DISTINCT dept_id FROM emp;

Isso retornará uma lista de todos os IDs de departamento diferentes, onde cada ID aparece apenas uma vez.

Relacionamento multi-tabela (resumo)

um para muitos Defina a chave estrangeira em muitos lados e associe a chave primária em um lado
muitos para muitos Crie uma tabela intermediária, a tabela intermediária contém duas chaves estrangeiras e associa as chaves primárias das duas tabelas
um a um Para divisão da estrutura da tabela, defina uma chave estrangeira (UNIQUE) em cada lado e associe a chave primária do outro lado

Consulta de várias tabelas (resumo)

内连接
			隐式:SELECT...FROM 表A,表B WHERE 条件...
			显示:SELECT...FROM 表A INNER JOIN 表B ON 条件...

外连接
			左外:SELECT...FROM 表A LEFT JOIN 表B ON 条件...
			右外:SELECT...FROM 表A RIGHT JOIN 表B ON 条件...

自连接:SELECT...FROM 表A 别名1,表A 别名2 WHERE 条件...

子查询:标量子查询、列子查询、行子查询、表子查询

Acho que você gosta

Origin blog.csdn.net/weixin_43472938/article/details/129543528
Recomendado
Clasificación