294 Shares 7156 views

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:

  1. 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).
  2. 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.