SQL distinta: de descrição, exemplos, propriedades
Muitas vezes, quando você usa SQL para recuperar dados a partir das tabelas, o usuário recebe os dados redundantes é a existência de um linhas duplicadas absolutamente idênticos. Para evitar esta situação, utilize SQL argumento distinto na sentença Select. Este artigo irá discutir exemplos do uso desse argumento, bem como situações em que a aplicação deve ser abandonadas pelo argumento.
Antes de passarmos a considerar os exemplos específicos, crie o banco de dados necessário um par de mesas.
mesa de preparação
Imagine que temos um armazena informações do banco de dados sobre o papel de parede apresentados em duas tabelas. Este oboi mesa (papel de parede) com campos de ID (identificador único), do tipo (tipo de papel de parede -. Papel, vinil, etc.), cor (cor), um struct (estrutura) eo preço (preço). E mesa Ostatki (resíduos) com campos id_oboi (uma referência ao identificador único na tabela Oboi) e count (o número de rolos em estoque).
Preencher a tabela de dados. Na tabela adicionar o wallpaper 9 registros:
Oboi |
||||
id |
tipo |
cor |
struct |
preço |
1 |
papel |
multicolorido |
em relevo |
56,9 |
2 |
papel duplo em camadas |
bege |
suave |
114,8 |
3 |
vinil |
laranja |
em relevo |
504 |
4 |
velo |
bege |
em relevo |
1020,9 |
5 |
papel duplo em camadas |
bege |
suave |
150,6 |
6 |
papel |
multicolorido |
suave |
95,4 |
7 |
vinil |
marrom |
suave |
372 |
8 |
velo |
branco |
em relevo |
980,1 |
9 |
pano |
-de-rosa |
suave |
1166,5 |
A tabela com os restos – e nove registros:
Ostatki |
|
id_oboi |
contar |
1 |
8 |
2 |
12 |
3 |
24 |
4 |
9 |
5 |
16 |
6 |
7 |
7 |
24 |
8 |
32 |
9 |
11 |
Procedemos à descrição da ordem distinta em SQL.
Lugar distinto na cláusula Select
argumento distinto deve ser colocado imediatamente após a palavra-chave Select nas consultas. Ele aplicou a todas as colunas especificadas na sentença Select, porque ele vai ser excluído do resultado da consulta final é cordas absolutamente idênticos. Assim, uma vez é suficiente para especificar quando escrever SQL «escolha distinta» do pedido. A excepção é a utilização de funções agregadas dentro distintas que olhar um pouco mais tarde.
Deve ser lembrado que a maioria da base de dados e não reconhece o seu tipo de pedido:
SELECIONE Ostatki.Count distinta, Oboi distinta. * DE oboi INNER JOIN Ostatki NO Oboi.id = Ostatki.id_oboi |
Não foi considerado argumento várias vezes ou uma vez especificado, mas antes da segunda, terceira ou outra coluna seleccionada. Você receberá um erro se referindo a um erro de sintaxe.
Aplicação consultas distintas no padrão
É óbvio que com mesas adequadas estrutura do edifício e enchê-los dentro de uma única tabela excluída a situação quando há cordas absolutamente idênticos. Portanto, a execução da consulta «Escolha distinta *» com uma amostra de uma tabela é impraticável.
Considere uma situação quando precisamos saber que tipo temos papel de parede, apenas por conveniência, para classificar por tipo:
SELECIONAR Oboi.type DE ordem Oboi por tipo |
E obter os resultados:
tipo |
papel |
papel |
papel duplo em camadas |
papel duplo em camadas |
vinil |
vinil |
pano |
velo |
velo |
Como pode ser visto na tabela existem linhas duplicadas. Se somarmos a proposta Selecione distinta:
SELECIONE Oboi.type distinta DE ordem Oboi por tipo |
obtemos o resultado sem repetição:
tipo |
papel |
papel duplo em camadas |
vinil |
pano |
velo |
Assim, se inserir corretamente os dados em uma tabela, em seguida, imediatamente após um telefonema ou pedido de compradores podemos responder que o papel de parede líquido, fibra de vidro e papel de parede de acrílico disponíveis na loja não são. Dado que a variedade de lojas geralmente não se limita a uma centena de papel de parede, ver a lista dos tipos não-únicos seria muito trabalhoso.
Aplicação de funções de agregação distintas dentro
argumento distinto SQL pode ser usado com qualquer função agregada. Mas para o Min e Max a sua aplicação não terá nenhum efeito, mas ao calcular a soma ou o valor médio raramente é uma situação onde ninguém teria que levar em conta as repetições.
Suponha que queremos verificar a capacidade do nosso armazém e para enviar esta solicitação, calcula o número total de bobinas em estoque:
SELECT sum (Ostatki.count) DE Ostatki |
Pedido dará a resposta 143. Se, no entanto, que mudará para:
SELECT sum (Ostatki.count distinta) DE Ostatki |
obtém-se o total de 119, como papel de parede para os números de peças 3 e 7 são em estoque na mesma quantidade. No entanto, é óbvio que a resposta está errada.
Na maioria das vezes usada em SQL Conde função distinta. Assim, podemos facilmente descobrir quantos tipos originais de papel de parede, nós temos:
SELECT COUNT (Oboi.type distinta) DE oboi |
E obter o resultado de 5 – papel comum e dupla camada de vinil e não-tecido. Certamente todos vimos os anúncios, tais como: "Só temos mais de 20 diferentes tipos de papel de parede", pelo que se entende que esta loja não é apenas uma dúzia de pães e uma variedade de papel de parede tipos modernos.
É interessante que na mesma consulta, é possível especificar múltiplas funções como atribuir DISTINCT Conde, e sem ele. Essa é a única situação em que distintos em Select'e pode estar presente diversas vezes.
Quando a abandonar o uso do argumento
A partir da utilização de SQL argumento distinto deve ser abandonada em um dos dois casos:
- Você executar uma seleção de mesas e estamos confiantes no valor único de cada. Neste caso, o uso do argumento é impróprio, porque é uma carga adicional no servidor ou cliente (dependendo do tipo de DBMS).
- Você tem medo de perder seus dados. Vamos explicar.
chefe Suponha que lhe pede para listar o papel de parede que você tem, com a indicação de apenas duas colunas – o tipo e cor. Por força do hábito, você dá um argumento distinto:
SELECIONE Oboi.type distinta, Oboi.color DE oboi ORDER BY Oboi.type |
E – perder alguns dados:
tipo |
cor |
papel |
multicolorido |
papel duplo em camadas |
bege |
vinil |
marrom |
vinil |
laranja |
pano |
-de-rosa |
velo |
bege |
velo |
branco |
Pode dar a impressão de que o papel de parede papel (convencional e de dupla camada) temos apenas uma mente, de fato, mesmo em nossa pequena mesa de dois artigos (resultado sem distintos):
tipo |
cor |
papel |
multicolorido |
papel |
multicolorido |
papel duplo em camadas |
bege |
papel duplo em camadas |
bege |
vinil |
marrom |
vinil |
laranja |
pano |
-de-rosa |
velo |
branco |
velo |
bege |
Portanto, como, por escrito, qualquer pedido com o argumento de necessidade distinta de ser cuidadoso e competente para decidir sobre a sua aplicação, dependendo da tarefa.
alternativa distinta
Contrariamente à tese distinta – Todos argumento. Em sua aplicação linhas duplicadas são armazenadas. Mas como o banco de dados padrão e descobre que é necessário para exibir todos os valores, o argumento Todos – é sim um qualificador do que o argumento função real. Esperamos que você compreende agora que distinta (SQL) é usado. Descrição lhe dar informações completas sobre a viabilidade de utilizar este argumento em resolver problemas diferentes. Afinal, como se viu, até mesmo um argumento tão simples na sua aplicação esconde possibilidade muito concreta de perder alguns dados e visualização de informações inexactas.