Compartilhamento de tecnologia

Gerenciamento de banco de dados DBA.

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

junção interna

Combine várias tabelas em uma tabela temporária por meio de links

selecione o nome do cabeçalho do nome da tabela 1 nome da tabela de junção interna 2;

selecione * de funcionários junção interna departamentos

selecione o nome do cabeçalho do nome da tabela 1 nome da tabela de junção interna 2 na condição do link;

selecione * de funcionários junção interna departamentos em employees.dept_id = departments.dept_id;
Na nova tabela temporária, você pode fazer o seguinte processamento

selecione o nome do cabeçalho do nome da tabela 1 nome da tabela de junção interna 2 na condição do link [onde | agrupar por |

Link equivalente: A premissa é que exista um cabeçalho que armazene os mesmos dados no link

selecione * de funcionários junção interna departamentos em employees.dept_id = departments.dept_id;

Depois de definir o alias, você deve usá-lo para representar o nome da tabela

  1. selecione e.* , d.dept_name
  2. de funcionários como e departamentos de junção interna como d em e.dept_id=d.dept_id;

Consultar o salário total de cada funcionário em 2018

select name ,sum(basic+bonus) as total from employees inner join salary on employees.employee_id = salary.employee_id where year(date)=2018 group by name;

select salary.employee_id ,sum(basic+bonus) as total from employees inner join salary on employees.employee_id = salary.employee_id  where year(date)=2018 group by employee_id having total > 300000 order by total desc ,employee_id asc;查询2018年总工资大于30万的员工,按2018年总工资降序排列

Link não equivalente: não há cabeçalho que armazene os mesmos dados na tabela

selecione employee_id, basic, garde de salary inner join wage_grade em salary.basic entre wage_grade.low e wage_grade.high onde year(date)=2018 e month(date)=12;
Consultar salário base do funcionário em dezembro de 2018

selecione garde como nível, contagem (employee_id) como número total de pessoas do salário interno ingressam em salário_grade em salário.basic entre salário_grade.low e salário_grade.high onde ano(data)=2018 e mês(data)=12 grupo por consulta; 2018 Número de empregados com salário base em dezembro

Exemplo de união de 3 tabelas

selecione nome, básico, garde de funcionários junção interna salário em funcionários.employee_id = salário.employee_id junção interna salário_classe em salário.basic entre salário_classe.baixo e salário_classe.alto onde ano(data)=2018 e mês(data)=12;

Consulta de link externo

Links externos comparam as diferenças entre duas tabelas

O link esquerdo usa os dados da tabela esquerda e os dados da tabela direita para comparar. O resultado de saída mostra todos os dados no cabeçalho da tabela esquerda.

Somente as linhas que correspondem ao link são exibidas à direita

selecione o nome do cabeçalho do nome da tabela 1 à esquerda do nome da tabela jion 2 na condição do link;

selecione o nome do cabeçalho do nome da tabela 1 à esquerda do nome da tabela jion 2 na condição do link·[onde |group by| tendo limite];

selecione dept_name, nome dos departamentos restantes junte funcionários em departments.dept_id=employees.dept_id onde nome é nulo;
 

O link direito usa os dados da tabela direita e os dados da tabela esquerda para comparar, e todos os dados no cabeçalho da tabela direita do resultado de saída são exibidos.

Somente as linhas que correspondem ao link são exibidas à direita

selecione o nome do cabeçalho do nome da tabela 1 à direita jion nome da tabela 2 na condição do link·[onde |group by| orderby |

mysql> select dept_name,name from departments as d right join employees as e on d.dept_id=e.dept_id onde dept_name é nulo;

atualizar funcionários definir dept_id=11 onde nome="bob";

Consulta de link completo

Junte as linhas consultadas por vários comandos de seleção. Para consultas de seleção múltipla, o número de cabeçalhos de tabela deve ser consistente.

Saída de linhas duplicadas removida

mysql> (selecione data, max(básico) como salário de onde data=20180110)union(selecione data,min(básico) de salário onde data=20180110);

(selecione o comando de consulta) união (selecione o comando de consulta);

Saída sem desduplicação

selecione o comando de consulta) união de todos (selecione o comando de consulta);

Consultas aninhadas

comando select query contém comando select query

Agrupamento de consultas aninhadas depois de onde

selecione o nome do cabeçalho em biblioteca.tabela onde o símbolo de julgamento do nome do cabeçalho (selecione o comando de consulta)

selecione employee_id,date,basic,bonus de salary onde year(date)=2018 e month(date)=12 e basic > (selecione basic de salary onde year(date)=2018 e month(date)=12 e employee_id=100);


Depois de aninhar consultas, use os resultados da consulta em () como condições de filtro,

selecione o nome do cabeçalho de library.table com o símbolo de julgamento do nome do cabeçalho (selecione o comando de consulta)

selecione dept_id, count(name) como total do grupo de funcionários por dept_id

tendo total < (

selecione count(nome) de funcionários onde dept_id=(

selecione dept_id dos departamentos onde dept_name='Departamento de Desenvolvimento')

Aninhe a consulta após from e use os resultados da consulta de () como uma tabela

selecione o nome do cabeçalho de (selecione o resultado da consulta) como nome da tabela temporária onde a condição de filtro;

selecione employee_id, nome, e-mail, nome_departamento de (selecione d.dept_name, e.* de departamentos como d junção interna funcionários como e em d.dept_id=e.dept_id) como tmp_table onde dept_id=3;

Consulta aninhada após seleção

selecione o nome do cabeçalho (selecione o comando de consulta) como nome do cabeçalho de biblioteca.tabela onde condição de filtro;

selecione d.* ,(selecione count(nome)de funcionários como e onde d.dept_id=e.dept_id)como vumen de departamentos como d;