Como usar o intersect e, exceto operações em sql

o UNIÃO

operação produz uma tabela de resultados que contém todas as linhas que aparecem na qualquer das tabelas fonte SQL. Se você quiser apenas as linhas que aparecem na todos as tabelas de origem, você pode usar o INTERSECT operação, que é a implementação de operação SQL intersecção da álgebra relacional. INTERSECT pode ser ilustrado por retornar ao mundo de fantasia em que Bob Turley foi negociado com o Dodgers na midseason:

SELECT * DE NACIONAL-FirstName LastName CompleteGames --------- -------- ------------- Sal Maglie 11Don Newcombe9SandyKoufax 13Don Drysdale12Bob Turley 8SELECT * FROM American- FIRST_NAME LAST_NAME COMPLETE_GAMES ---------- --------- -------------- Whitey Ford 12Don Larson 10Bob Turley 8AllieReynolds14

Apenas as linhas que aparecem em todas as tabelas de origem aparecer na INTERSECT tabela de resultados da operação:

SELECT * FROM NATIONALINTERSECTSELECT * FROM AMERICAN-FirstName LastName CompleteGames --------- -------- ------------- Bob Turley 8

A tabela de resultados diz que Bob Turley foi o único jarro para jogar o mesmo número de jogos completos em ambas as ligas (uma distinção bastante obscura para o velho Bala Bob). Nota: Como foi o caso com UNIÃO, INTERSECT DISTINCT produz o mesmo resultado que o INTERSECT operador utilizado sozinho. Neste exemplo, apenas uma das linhas idênticas com Bob Turley é devolvido.

Video: Difference between union intersect and except in sql server

o TODOS e CORRESPONDENTE palavras-chave funcionam em um INTERSECT operação da mesma maneira que fazem em um UNIÃO Operação. Se você usar TODOS, duplicados são retidos na tabela de resultados. Se você usar CORRESPONDENTE, as tabelas de interseção não precisa ser união-compatíveis, embora as colunas correspondentes devem ter tipos de correspondentes e comprimentos.

Aqui está o que você ganha com INTERSECT ALL:

Video: SQL UNION, INTERSECT, EXCEPT

SELECT * DE NATIONALINTERSECT ALLSELECT * FROM AMERICAN-FirstName LastName CompleteGames --------- -------- ------------- Bob Turley 8Bob Turley 8


Veja outro exemplo: Um município guarda informação sobre os telefones celulares carregados por policiais, bombeiros, varredores de rua e outros funcionários municipais. Uma tabela de banco de dados chamado TELEFONES contém dados sobre todos os telefones em uso ativo. Outra tabela chamada OUT, com uma estrutura idêntica, contém dados sobre todos os telefones que foram tomadas fora de serviço.

Video: INTERSECT, EXCEPT Operators in SQL Server

Sem telefones deve sempre existir em ambas as tabelas. Com um INTERSECT operação, você pode testar para ver se uma duplicação tais indesejada ocorreu:

SELECT * DE PHONESINTERSECT correspondente (phoneid) SELECT * FROM OUT -

Se esta operação dá-lhe uma tabela de resultados que contém todas as linhas em tudo, você sabe que tem um problema. Você deve investigar qualquer phoneid entradas que aparecem na tabela de resultados. O telefone correspondente é ativo ou fora do serviço- não pode ser ambos. Depois de detectar o problema, você pode executar uma EXCLUIR operação em uma das duas mesas para restaurar a integridade do banco de dados.

o UNIÃO operação atua em duas tabelas de origem e retorna todas as linhas que aparecem em qualquer mesa. o INTERSECT operação retorna todas as linhas que aparecem em ambas as primeira e segunda tabelas. Em contraste, o EXCETO (ou EXCETO DISTINCT) Operação retorna todas as linhas que aparecem na primeira mesa, mas que não também aparecem na segunda tabela.

Voltando ao exemplo de banco de dados de telefone municipal, dizer que um grupo de telefones que tinham sido declarados fora de serviço e devolvidos ao fornecedor para reparos agora foram corrigidos e colocado de volta em serviço. A tabela TELEFONES foi atualizado para refletir os telefones devolvidos, mas os telefones devolvidos não foram removidos da tabela OUT como deveriam ter sido.

Video: SQL Server Tutorial 11- Union, Union All, Intersect and Except

Você pode exibir o phoneid números dos telefones na tabela OUT, com os reativados eliminado, usando um EXCETO Operação:

SELECT * DE OUTEXCEPT correspondente (phoneid) SELECT * FROM Phones

Essa consulta retorna todas as linhas na tabela OUT cujas phoneid Não é também apresentada na tabela de TELEFONES.


Publicações relacionadas