Como transferir seus dados SQL
Além de utilizar o INSERIR e ATUALIZAR declarações em SQL, você pode adicionar dados a uma tabela ou exibição usando a MERGE declaração. Você pode MERGE dados de uma tabela de origem ou exibição em uma tabela de destino ou exibição.
o MERGE pode inserir novas linhas na tabela de destino ou atualizar linhas existentes. MERGE é uma maneira conveniente de levar os dados que já existe em algum lugar em um banco de dados e copiá-lo para um novo local.
Por exemplo, considerar um banco de dados de laboratório veterinário. Suponha que algumas pessoas na tabela EMPREGADOS são vendedores que tomaram ordens, enquanto outros são empregados não-vendas ou vendedores que ainda não tomaram uma ordem. O ano acaba de concluir tem sido rentável, e você quer compartilhar alguns de que o sucesso com os empregados.
Você decidir dar um bônus de US $ 100 para todos os que tomou pelo menos uma ordem e um bônus de US $ 50 para todos os outros. Primeiro, você cria uma tabela BONUS e inserir nela um registro para cada empregado que aparece pelo menos uma vez na tabela Pedidos, atribuindo a cada gravar um valor de bônus padrão de US $ 100.
Em seguida, você quer usar o MERGE declaração para inserir novos registros para os funcionários que não tomaram ordens, dando-lhes $ 50 bônus. Aqui está algum código que constrói e preenche a tabela BONUS:
CRIAR BONUS TABLE (Personagem EmployeeName (30) CHAVE PRIMÁRIA, Bonus NUMERICDEFAULT 100) -INSERT INTO BONUS (EmployeeName) (SELECT EmployeeName FROM EMPREGADOS, ORDERSWHERE EMPLOYEE.EmployeeName = ORDERS.SalespersonGROUP POR EMPLOYEE.EmployeeName) -
Agora você pode consultar a tabela BONUS para ver o que ele contém:
* SELECT FROM BONUS -EmployeeName Bonus ------------ ------------- Brynna Jones100Chris Bancroft 100Greg Bosser100Kyle Weeks100
Agora, pela execução de uma MERGE declaração, você pode dar US $ 50 bônus para o resto dos empregados:
Merge em BONUSUSING EMPLOYEEON (BONUS.EmployeeName = EMPLOYEE.EmployeeName) QUANDO NÃO MATCHED seguida, insira (BONUS.EmployeeName, BONUS.bonus) VALUES (EMPLOYEE.EmployeeName, 50) -
Registros para as pessoas na tabela EMPREGADOS que não correspondem aos registros de pessoas já na tabela BONUS agora são inseridas na tabela BONUS. Agora uma consulta da tabela BONUS dá o seguinte resultado:
* SELECT FROM BONUS -EmployeeName Bonus -------------- ----------- Brynna Jones100Chris Bancroft 100Greg Bosser100Kyle Weeks100Neth Doze 50Matt Bak 50Sam Saylor50Nic Foster50
Os quatro primeiros discos, que foram criados com o INSERIR declaração, estão em ordem alfabética pelo nome do empregado. O resto dos registros, acrescido da MERGE declaração, aparecem na ordem que foram listados na tabela EMPREGADOS.
o MERGE declaração é uma adição relativamente nova para o SQL e não pode ainda ser suportado por alguns produtos de DBMS. Ainda mais recente é uma capacidade adicional de MERGE adicionada no SQL: 2011, paradoxalmente permitindo que você excluir registros com um MERGE declaração.
Suponha-se, depois de fazer o INSERIR, você decidir que não quer dar bônus para as pessoas que tomaram pelo menos uma ordem depois de tudo, mas você quer dar um bônus de US $ 50 para todos os outros. Você pode remover os bônus de vendas e adicionar os bônus não-vendas com o seguinte MERGE declaração:
Merge em BONUSUSING EMPLOYEEON (BONUS.EmployeeName = EMPLOYEE.EmployeeName) quando combinado ENTÃO NÃO DELETEWHEN MATCHED seguida, insira (BONUS.EmployeeName, BONUS.bonus) VALUES (EMPLOYEE.EmployeeName, 50) -
O resultado é
* SELECT FROM BONUS-EmployeeName Bonus -------------- ----------- Neth Doze 50Matt Bak 50Sam Saylor50Nic Foster50