/ / SQL distinct: descripción, ejemplos, propiedades

SQL distinct: descripción, ejemplos, propiedades

A menudo cuando se usa SQL para muestreoinformación de las tablas, el usuario recibe datos redundantes, que consisten en la presencia de líneas duplicadas absolutamente idénticas. Para excluir esta situación, use el argumento distinto de SQL en la cláusula Select. En este artículo, consideraremos ejemplos de uso de este argumento, así como situaciones en las que es mejor abandonar el argumento.

Antes de comenzar a considerar ejemplos específicos, crearemos un par de tablas necesarias en la base de datos.

sql distinto

Preparación de tablas

Imagina que hemos almacenado en nuestra base de datosinformación sobre el fondo de pantalla, presentado en dos tablas. Esta es la tabla Oboi (fondo de pantalla) con los campos id (identificador único), tipo (tipo de fondo de pantalla - papel, vinilo, etc.), color, estructura y precio. Y la tabla Ostatki (restos) con los campos id_oboi (referencia al identificador único en la tabla Oboi) y el recuento (el número de rollos en el almacén).

Completa las tablas con datos. En la tabla con fondo de pantalla, agrega 9 entradas:

Oboi

identificación

tipo

color

estructura

precio

1

Papel

Multicolor

En relieve

56,9

2

Papel de doble capa

Beige

Suave

114,8

3

Vinilo

Naranja

En relieve

504

4

Guantes de lana no tejida

Beige

En relieve

1020,9

5

Papel de doble capa

Beige

Suave

150,6

6

Papel

Multicolor

Suave

95,4

7

Vinilo

Marrón

Suave

372

8

Guantes de lana no tejida

Blanco

En relieve

980,1

9

Tela

Rosa

Suave

1166,5

En la tabla con los restos también hay nueve registros:

Ostatki

id_oboi

contar

1

8

2

12

3

24

4

9

5

16

6

7

7

24

8

32

9

11

Comencemos describiendo cómo usar distinct en SQL.

Lugar distinto en la cláusula Select

El argumento distinto debe colocarse inmediatamente despuésla palabra clave Select en las consultas. Se aplica inmediatamente a todas las columnas especificadas en la cláusula Select porque excluirá filas absolutamente idénticas del resultado de la consulta. Por lo tanto, es suficiente especificar "seleccionar distinto" al escribir la consulta SQL. La única excepción es el uso de distintas dentro de las funciones agregadas, que consideraremos un poco más adelante.

sql seleccionar distinto

Se debe recordar que la mayoría de DBMS no reconoce su solicitud de esta manera:

SELECCIONE distinto Ostatki.Count, distinct Oboi. *

DESDE Oboi

INNER JOIN Ostatki ON Oboi.id = Ostatki.id_oboi

Aquí, el argumento se especifica varias veces o se especifica una vez, pero antes de la segunda, tercera u otra columna seleccionable. Obtendrá un error con una referencia a inexactitudes en la sintaxis.

Uso distinto en consultas estándar

Obviamente, con una estructura bien estructuradatablas y su relleno, dentro de una sola tabla, las situaciones se excluyen cuando se encuentran cadenas absolutamente idénticas. Por lo tanto, la ejecución de la consulta "Seleccionar distinto *" con una selección de una tabla es prácticamente impracticable.

distinto en sql

Imagine una situación en la que necesitemos descubrir qué tipo de papel tapiz tenemos, solo por comodidad, ordenar por tipo:

SELECCIONE Oboi.type

DESDE Oboi ordena por tipo

Y obtenemos el resultado:

tipo

Papel

Papel

Papel de doble capa

Papel de doble capa

Vinilo

Vinilo

Tela

Guantes de lana no tejida

Guantes de lana no tejida

Como puede ver, hay filas duplicadas en la tabla. Si agregamos a la cláusula Select distinct:

SELECCIONAR distinto Oboi.type

DESDE Oboi ordena por tipo

entonces obtenemos el resultado sin repetir:

tipo

Papel

Papel de doble capa

Vinilo

Tela

Guantes de lana no tejida

Por lo tanto, si los datos se ingresaron correctamente entabla, luego inmediatamente después de la llamada o la solicitud de los compradores, podremos responder que el papel tapiz líquido, papel tapiz y papel tapiz acrílico no está disponible en la tienda. Dado que el surtido en las tiendas generalmente no se limita a cien fondos de pantalla, sería bastante laborioso escanear la lista de tipos no únicos.

Usar distintas funciones dentro de agregado

El argumento distinto de SQL se puede usar con cualquierfunción agregada Pero para Min y Max, su uso no tendrá ningún efecto, y al calcular la suma o el valor promedio, rara vez es posible imaginar una situación en la que no sería necesario tener en cuenta las repeticiones.

Digamos que queremos saber cuánto está lleno nuestro almacén, y para esto enviamos una solicitud que calcula el número total de rollos en el almacén:

SELECT suma (Ostatki.count)

DE Ostatki

La consulta devolverá una respuesta 143. Si cambiamos a:

SELECT suma (distinta Ostatki.count)

DE Ostatki

entonces obtenemos solo 119, porque el fondo de pantalla de los artículos 3 y 7 está en stock en la misma cantidad. Sin embargo, es obvio que esta respuesta es incorrecta.

La mayoría de las veces, SQL se usa con la función Cuenta. Entonces, sin dificultad, podemos descubrir cuántos tipos únicos de papel tapiz tenemos en general:

SELECT count (distinto Oboi.type)

DESDE Oboi

Y obtenga el resultado 5 - papel ordinario ydos capas, vinilo, tela y no tejido. Seguramente todos vieron un anuncio como: "¡Solo tenemos más de 20 tipos de fondos de pantalla diferentes!", Lo que significa que en esta tienda no hay un par de docenas de rollos de todo, sino un fondo de pantalla de los tipos modernos más diversos.

Curiosamente, en una consulta, puede especificarmúltiples funciones de conteo con o sin el atributo distinto. Es decir, esta es la única situación en la que distinct en Select no puede estar presente más de una vez.

¿Cuándo debería rechazar el uso de un argumento?

El uso del argumento distinto de SQL se debe descartar de una de estas dos formas:

  1. Usted selecciona de tablas y está segurola singularidad de los valores en cada uno. En este caso, el uso del argumento es inoportuno, porque esta es una carga adicional en el servidor o cliente (dependiendo del tipo de DBMS).
  2. Tienes miedo de perder los datos necesarios. Nosotros lo explicaremos

Supongamos que el jefe le pide que muestre una lista de fondo de pantalla que tiene, indicando solo dos columnas: tipo y color. Por costumbre, especifique el argumento distinct:

SELECCIONAR distinto Oboi.type, Oboi.color

DESDE Oboi

ORDER BY Oboi.type

Y - perder algunos de los datos:

tipo

color

Papel

Multicolor

Papel de doble capa

Beige

Vinilo

Marrón

Vinilo

Naranja

Tela

Rosa

Guantes de lana no tejida

Beige

Guantes de lana no tejida

Blanco

Puede parecer que tenemos solo un tipo de papel tapiz de papel (convencional y de dos capas), aunque de hecho, incluso en nuestra pequeña mesa tienen dos artículos (el resultado es distinto):

tipo

color

Papel

Multicolor

Papel

Multicolor

Papel de doble capa

Beige

Papel de doble capa

Beige

Vinilo

Marrón

Vinilo

Naranja

Tela

Rosa

Guantes de lana no tejida

Blanco

Guantes de lana no tejida

Beige

Por lo tanto, al escribir cualquier consulta, con un argumento distinto, uno debe ser cuidadoso y resolver correctamente el problema con su aplicación, dependiendo de la tarea en cuestión.

Alternativa distinta

Lo opuesto al argumento distinto es el argumentoTodo. Cuando lo usa, las líneas duplicadas se guardan. Pero dado que por defecto el DBMS cree que es necesario imprimir todos los valores, el argumento Todo es más un especificador que un argumento funcional real.

distinct sql descripción
Esperamos que ahora entiendas cuandodistinto (SQL) se usa. La descripción le dio información completa sobre la conveniencia de aplicar este argumento al resolver varios problemas. Después de todo, como resultó, incluso un argumento tan simple en su aplicación esconde una probabilidad muy palpable de perder algunos datos e inferir información inexacta.

Leer más: