Como usar ALL, SOME, e QUALQUER em instruções SQL
Todos, alguns, e qualquer pode ser confuso em instruções SQL. Milhares de anos atrás, o filósofo grego Aristóteles formulou um sistema de lógica que se tornou a base para muito do pensamento ocidental. A essência dessa lógica é começar com um conjunto de premissas que você sabe que para ser verdade, aplicam operações válidas, e, assim, chegar a novas verdades.
Um exemplo deste procedimento é o seguinte:
Premissa 1: Todos os gregos são humanos.
Premissa 2: Todos os seres humanos são mortais.
Conclusão: Todos os gregos são mortais.
Outro exemplo:
Premissa 1: Alguns gregos são mulheres.
Premissa 2: Todas as mulheres são humanos.
Conclusão: Alguns gregos são humanos.
A título de apresentar um terceiro exemplo, considere a mesma ideia lógico do segundo exemplo de uma forma ligeiramente diferente:
Se nenhum gregos são mulheres e todas as mulheres são seres humanos, em seguida, alguns gregos são humanos.
O primeiro exemplo usa o quantificador universal TODOS de ambos os locais, permitindo-lhe fazer uma dedução de som sobre todos os gregos na conclusão. O segundo exemplo usa o quantificador existencial ALGUNS em uma premissa, permitindo-lhe fazer uma dedução sobre alguns gregos na conclusão. O terceiro exemplo usa o quantificador existencial QUALQUER, sinônimo de ALGUNS, para chegar à mesma conclusão chegar no segundo exemplo.
Olhe como ALGUNS, QUALQUER, e TODOS aplicar em SQL.
Considere um exemplo em estatísticas de beisebol. O beisebol é um esporte exigente, especialmente para jarros. Um jarro deve lançar a bola à placa home entre 90 e 150 vezes durante um jogo. Este esforço pode ser desgastante, e se o arremessador torna-se ineficaz antes do jogo terminar, um jarro de relevo substitui-lo. Lançando um jogo inteiro é uma conquista notável, independentemente de os resultados do esforço em uma vitória.
Suponha que você está mantendo o controle do número de jogos completos que todos major-league jarros passo. Em uma tabela, você listar todos os arremessadores da Liga Americana, e em outra tabela, você listar todos os arremessadores da Liga Nacional. Ambas as tabelas contêm nomes dos jogadores, apelidos e número de jogos completos campal.
A liga americana permite que um rebatedor designado (DH) (que não é necessário para jogar uma posição defensiva) para bater no lugar de qualquer um dos nove jogadores que jogam defesa. O Liga Nacional não permite rebatedor designado, mas permite pinch-rebatedores.
Quando o pinch-hitter entra em jogo para o jarro, o jarro não pode jogar para o resto do jogo. Normalmente, os morcegos DH para a jarra, porque os jarros são rebatedores notoriamente pobres. Jarros deve gastar tanto tempo e esforço em aperfeiçoar o seu arremesso que eles não têm tanto tempo para praticar rebatidas como os outros jogadores fazem.
Suponha que você tem uma teoria que, em média, da Liga Americana lançadores iniciais jogar jogos mais completos do que fazer Liga Nacional de lançadores iniciais. Esta ideia é baseada em sua observação de que rebatedor designado permitir hard-jogando, fraco de bater, American League jarros para manter lançando contanto que eles são eficazes, mesmo em um jogo de perto. Porque um DH já está batendo para estes jarros, seu mau bater não é um passivo.
Na liga nacional, no entanto, em circunstâncias cotidianas o jarro iria para o bastão. Quando perdia no final innings, a maioria dos gerentes chamaria para um rebatedor substituto para o bastão para o jarro, a julgar que a obtenção de uma base de bater nesta situação é mais importante do que manter um arremessador eficaz no jogo. Para testar sua teoria, a formular a seguinte consulta:
SELECIONAR FirstName, LastNameFROM AMERICAN_LEAGUERWHERE CompleteGames> ALL (SELECT CompleteGamesFROM NATIONAL_LEAGUER) -
A subconsulta (o interno SELECIONAR) Retorna uma lista mostrando, para cada arremessador da Liga Nacional, o número de jogos completos armou. A consulta externa retorna os nomes e sobrenomes de todos os jogadores da liga norte-americanos que campais jogos mais completos do que TODOS dos jogadores da liga nacional.
Toda a consulta retorna os nomes dos arremessadores da Liga Americana que lançou jogos mais completo do que o lançador que tem jogado os jogos mais completos na Liga Nacional.
Considere o seguinte declaração semelhante:
SELECIONAR FirstName, LastNameFROM AMERICAN_LEAGUERWHERE CompleteGames> ANY (SELECT CompleteGamesFROM NATIONAL_LEAGUER) -
Neste caso, você usa o quantificador existencial QUALQUER em vez do quantificador universal TODOS. A subconsulta (o interior, consulta aninhada) é idêntico ao subconsulta no exemplo anterior. Esta subconsulta recupera uma lista completa das estatísticas de jogo completas para todos os arremessadores da Liga Nacional.
A consulta externa retorna os nomes e sobrenomes de todos os arremessadores da Liga Americana que lançou jogos mais completos do que QUALQUER arremessador da Liga Nacional. Porque você pode ser praticamente certo que pelo menos uma Liga Nacional arremessador não armou um jogo completo, o resultado provavelmente inclui todos os arremessadores da liga norte-americana que já inclinados pelo menos um jogo completo.
Se você substituir a palavra-chave QUALQUER com a palavra-chave equivalente ALGUNS, O resultado é o mesmo. Se a afirmação de que pelo menos uma Liga Nacional arremessador não armou um jogo completo é uma afirmação verdadeira, então você pode dizer que ALGUNS Liga Nacional de jarro não armou um jogo completo.