Funciones agregadas de MS SQL para filas. Funciones agregadas de SQL: SUMA, MIN, MAX, AVG, COUNT

Las siguientes subsecciones describen otras cláusulas de instrucción SELECT que se pueden usar en consultas, así como funciones agregadas y conjuntos de declaraciones. Como recordatorio, en este punto hemos analizado el uso de la cláusula WHERE, y en este artículo veremos las cláusulas GROUP BY, ORDER BY y HAVING, y brindaremos algunos ejemplos del uso de estas cláusulas en combinación con el agregado. funciones que son compatibles con Transact-SQL.

Cláusula GRUPO POR

Oferta Agrupar por agrupa un conjunto seleccionado de filas para producir un conjunto de filas de resumen por los valores de una o más columnas o expresiones. En el siguiente ejemplo se muestra un caso sencillo de uso de la cláusula GROUP BY:

UTILICE SampleDb; SELECCIONE Trabajo DE Works_On GRUPO POR Trabajo;

Este ejemplo selecciona y agrupa puestos de empleados.

En el ejemplo anterior, la cláusula GROUP BY crea un grupo separado para todos los valores posibles (incluido un valor NULL) para la columna Trabajo.

El uso de columnas en una cláusula GROUP BY debe cumplir ciertas condiciones. Específicamente, cada columna en la lista de selección de la consulta también debe aparecer en la cláusula GROUP BY. Este requisito no se aplica a constantes y columnas que forman parte de una función agregada. (Las funciones de agregación se tratan en la siguiente subsección). Esto tiene sentido porque Solo se garantiza que las columnas de la cláusula GROUP BY tengan un valor por grupo.

Puede agrupar una tabla por cualquier combinación de sus columnas. El siguiente ejemplo demuestra cómo agrupar las filas de la tabla Works_on en dos columnas:

UTILICE SampleDb; SELECCIONE Número de proyecto, Trabajo DE Works_On GRUPO POR Número de proyecto, Trabajo;

El resultado de esta consulta:

Según los resultados de la consulta, puede ver que hay nueve grupos con diferentes combinaciones de número de proyecto y posición. La secuencia de nombres de columnas en la cláusula GROUP BY no tiene que ser la misma que en la lista de columnas en SELECT.

Funciones agregadas

Las funciones agregadas se utilizan para obtener valores totales. Todas las funciones agregadas se pueden dividir en las siguientes categorías:

    funciones agregadas ordinarias;

    funciones agregadas estadísticas;

    funciones agregadas definidas por el usuario;

    funciones agregadas analíticas.

Aquí veremos los primeros tres tipos de funciones agregadas.

Funciones agregadas comunes

Transact-SQL admite las siguientes seis funciones agregadas: MÍNIMO, MÁXIMO, SUMA, AVG, CONTAR, COUNT_BIG.

Todas las funciones agregadas realizan cálculos sobre un único argumento, que puede ser una columna o una expresión. (La única excepción es la segunda forma de las dos funciones: COUNT y COUNT_BIG, es decir, COUNT(*) y COUNT_BIG(*), respectivamente). El resultado de cualquier cálculo de función agregada es un valor constante, que se muestra en una columna de resultados separada.

Las funciones agregadas se especifican en la lista de columnas de la instrucción SELECT, que también puede contener una cláusula GROUP BY. Si no hay una cláusula GROUP BY en la instrucción SELECT y la lista de columnas seleccionadas contiene al menos una función agregada, entonces no debe contener columnas simples (excepto las columnas que sirven como argumentos para la función agregada). Por lo tanto, el código del siguiente ejemplo es incorrecto:

UTILICE SampleDb; SELECCIONE Apellido, MIN(Id) DEL Empleado;

Aquí, la columna Apellido de la tabla Empleado no debe estar en la lista de selección de columnas porque no es un argumento para la función agregada. Por otro lado, la lista de selección de columnas puede contener nombres de columnas que no son argumentos para la función agregada si esas columnas son argumentos para la cláusula GROUP BY.

Un argumento de función agregada puede ir precedido de una de dos palabras clave posibles:

TODO

Especifica que los cálculos se realizan en todos los valores de la columna. Este es el valor predeterminado.

DISTINTO

Especifica que solo se utilizan valores de columna únicos para los cálculos.

Funciones agregadas MIN y MAX

Las funciones agregadas MIN y MAX calculan el valor más pequeño y más grande de una columna, respectivamente. Si una consulta contiene una cláusula WHERE, las funciones MIN y MAX devuelven los valores más pequeño y más grande de las filas que coinciden con las condiciones especificadas. El siguiente ejemplo muestra el uso de la función agregada MIN:

UTILICE SampleDb; -- Devuelve 2581 SELECCIONE MIN(Id) COMO "Valor de identificación mínimo" DEL Empleado;

El resultado obtenido en el ejemplo anterior no es muy informativo. Por ejemplo, se desconoce el apellido del empleado propietario de este número. Pero no es posible obtener este apellido de la forma habitual porque, como se mencionó anteriormente, no se le permite especificar explícitamente la columna Apellido. Para obtener también el apellido de este empleado junto con el número de personal más bajo de un empleado, se utiliza una subconsulta. El siguiente ejemplo muestra el uso de dicha subconsulta, donde la subconsulta contiene la instrucción SELECT del ejemplo anterior:

Resultado de la solicitud:

El uso de la función agregada MAX se muestra en el siguiente ejemplo:

Las funciones MIN y MAX también pueden aceptar cadenas y fechas como argumentos. En el caso de un argumento de cadena, los valores se comparan utilizando el orden de clasificación real. Para todos los argumentos de datos de tiempo de tipo "fecha", el valor de columna más pequeño es la fecha más temprana y el valor de columna más grande es la última.

Puede utilizar la palabra clave DISTINCT con las funciones MIN y MAX. Antes de utilizar las funciones agregadas MIN y MAX, todos los valores NULL se eliminan de sus columnas de argumentos.

Función agregada SUMA

Agregar función SUMA Calcula la suma total de los valores de una columna. El argumento de esta función agregada siempre debe ser un tipo de datos numérico. El uso de la función agregada SUM se muestra en el siguiente ejemplo:

UTILICE SampleDb; SELECCIONAR SUMA (Presupuesto) "Presupuesto total" DEL Proyecto;

Este ejemplo calcula la cantidad total de presupuestos para todos los proyectos. Resultado de la solicitud:

En este ejemplo, la función agregada agrupa todos los valores del presupuesto del proyecto y determina su monto total. Por este motivo, la consulta contiene una función de agrupación implícita (como todas las consultas similares). La función de agrupación implícita del ejemplo anterior se puede especificar explícitamente, como se muestra en el siguiente ejemplo:

UTILICE SampleDb; SELECCIONE SUMA (Presupuesto) "Presupuesto total" DEL GRUPO DE PROYECTOS POR();

El uso del parámetro DISTINCT elimina todos los valores duplicados en una columna antes de aplicar la función SUMA. Asimismo, todos los valores NULL se eliminan antes de aplicar esta función agregada.

función agregada AVG

Agregar función AVG Devuelve el promedio aritmético de todos los valores de una columna. El argumento de esta función agregada siempre debe ser un tipo de datos numérico. Antes de utilizar la función AVG, todos los valores NULL se eliminan de su argumento.

El uso de la función agregada AVG se muestra en el siguiente ejemplo:

UTILICE SampleDb; -- Regresar 133833 SELECT AVG (Presupuesto) "Presupuesto promedio para el proyecto" FROM Proyecto;

Aquí se calcula la media aritmética del valor del presupuesto para todos los presupuestos.

Funciones agregadas COUNT y COUNT_BIG

Agregar función CONTAR tiene dos formas diferentes:

CONTAR(nombre_columna) CONTAR(*)

La primera forma de la función cuenta el número de valores en la columna col_name. Si la consulta usa la palabra clave DISTINCT, todos los valores duplicados en la columna se eliminan antes de usar la función COUNT. Esta forma de la función COUNT no tiene en cuenta los valores NULL al contar el número de valores en una columna.

El uso de la primera forma de la función agregada COUNT se muestra en el siguiente ejemplo:

UTILICE SampleDb; SELECT ProjectNumber, COUNT(DISTINCT Job) "Trabaja en el proyecto" FROM Works_on GROUP BY ProjectNumber;

Aquí se cuenta el número de puestos diferentes para cada proyecto. El resultado de esta consulta:

Como puede ver en la consulta de ejemplo, la función COUNT no tuvo en cuenta los valores NULL. (La suma de todos los valores en la columna de posición resultó ser 7, no 11, como debería ser).

La segunda forma de la función CONTAR, es decir La función COUNT(*) cuenta el número de filas de una tabla. Y si la instrucción SELECT de una consulta con la función COUNT(*) contiene una cláusula WHERE con una condición, la función devuelve el número de filas que satisfacen la condición especificada. A diferencia de la primera versión de la función COUNT, la segunda forma no ignora los valores NULL porque esta función opera en filas, no en columnas. El siguiente ejemplo demuestra el uso de la función CONTAR(*):

UTILICE SampleDb; SELECCIONE Trabajo COMO "Tipo de trabajo", COUNT(*) "Necesita trabajadores" FROM Works_on GROUP BY Job;

Aquí se calcula el número de puestos en todos los proyectos. Resultado de la solicitud:

Función COUNT_BIG similar a la función CONTAR. La única diferencia entre ellos es el tipo de resultado que devuelven: la función CONTAR_BIG siempre devuelve valores GRANDES, mientras que la función CONTAR devuelve valores de datos ENTEROS.

Funciones agregadas estadísticas

Las siguientes funciones conforman el grupo de funciones agregadas estadísticas:

var

Calcula la varianza estadística de todos los valores representados en una columna o expresión.

VARP

Calcula la varianza estadística de la población de todos los valores representados en una columna o expresión.

DESVEST

Calcula la desviación estándar (que se calcula como la raíz cuadrada de la varianza correspondiente) de todos los valores de una columna o expresión.

STDEVP

Calcula la desviación estándar de la población de todos los valores de una columna o expresión.

Funciones agregadas definidas por el usuario

El motor de base de datos también admite la implementación de funciones definidas por el usuario. Esta capacidad permite a los usuarios aumentar las funciones agregadas del sistema con funciones que pueden implementar e instalar ellos mismos. Estas funciones representan una clase especial de funciones definidas por el usuario y se analizan en detalle más adelante.

TENER oferta

en una oración TENIENDO define una condición que se aplica a un grupo de filas. Por lo tanto, esta cláusula tiene el mismo significado para grupos de filas que la cláusula WHERE para el contenido de la tabla correspondiente. La sintaxis de la cláusula HAVING es:

TENER condición

Aquí el parámetro de condición representa la condición y contiene funciones agregadas o constantes.

El uso de la cláusula HAVING junto con la función agregada COUNT(*) se ilustra en el siguiente ejemplo:

UTILICE SampleDb; -- Devuelve "p3" SELECCIONAR Número de Proyecto DESDE Works_on GRUPO POR Número de Proyecto TENER CONTADOR(*)

En este ejemplo, el sistema agrupa todas las filas por los valores de la columna ProjectNumber usando la cláusula GROUP BY. Después de esto, se cuenta el número de filas de cada grupo y se seleccionan los grupos que contienen menos de cuatro filas (tres o menos).

La cláusula HAVING también se puede utilizar sin funciones agregadas, como se muestra en el siguiente ejemplo:

UTILICE SampleDb; -- Devuelve "Consultor" SELECCIONE Trabajo DE Works_on GRUPO POR Trabajo QUE TIENE Trabajo COMO "K%";

Este ejemplo agrupa filas en la tabla Works_on por título de trabajo y elimina los trabajos que no comienzan con la letra "K".

La cláusula HAVING también se puede utilizar sin la cláusula GROUP BY, aunque esto no es una práctica común. En este caso, todas las filas de la tabla se devuelven en un grupo.

Cláusula ORDEN POR

Oferta ORDENAR POR determina el orden de clasificación de las filas en el conjunto de resultados devuelto por la consulta. Esta oración tiene la siguiente sintaxis:

El orden de clasificación se especifica en el parámetro col_name. El parámetro col_number es un indicador de orden de clasificación alternativo que identifica las columnas por el orden en que aparecen en la lista de selección de la instrucción SELECT (1 es la primera columna, 2 es la segunda columna, etc.). parámetro ASC especifica la clasificación en orden ascendente, y parámetro DESC- en dirección descendente. El valor predeterminado es ASC.

Los nombres de las columnas en la cláusula ORDER BY no tienen que estar en la lista de columnas seleccionadas. Pero esto no se aplica a consultas como SELECT DISTINCT, porque en tales consultas, los nombres de las columnas especificadas en la cláusula ORDER BY también deben especificarse en la lista de columnas seleccionadas. Además, esta cláusula no puede contener nombres de columnas de tablas no especificadas en la cláusula FROM.

Como puede ver en la sintaxis de la cláusula ORDER BY, el conjunto de resultados se puede ordenar por varias columnas. Esta clasificación se muestra en el siguiente ejemplo:

En este ejemplo, se seleccionan números de departamento y nombres de empleados para los empleados cuyo número de personal es inferior a 20.000 y se ordenan por apellido y nombre. El resultado de esta consulta:

Las columnas de la cláusula ORDER BY se pueden especificar no por sus nombres, sino por su orden en la lista de selección. En consecuencia, la oración del ejemplo anterior se puede reescribir de la siguiente manera:

Este método alternativo de especificar columnas por posición en lugar de por nombre se utiliza si el criterio de ordenación contiene una función agregada. (Otra forma es utilizar los nombres de las columnas, que luego aparecen en la cláusula ORDER BY). Sin embargo, en la cláusula ORDER BY, se recomienda especificar las columnas por sus nombres en lugar de por números para que sea más fácil actualizar la consulta. si es necesario agregar o eliminar columnas de la lista de selección. En el siguiente ejemplo se muestra la especificación de columnas en la cláusula ORDER BY por sus números:

UTILICE SampleDb; SELECCIONE Número de proyecto, COUNT(*) "Número de empleados" DESDE Works_on GRUPO POR Número de proyecto ORDEN POR 2 DESC;

Aquí, para cada proyecto, se selecciona el número de proyecto y el número de empleados que participan en el mismo, ordenando el resultado en orden descendente por el número de empleados.

Transact-SQL coloca valores NULL al principio de la lista cuando se ordena en orden ascendente y al final de la lista cuando se ordena en orden descendente.

Usando la cláusula ORDER BY para paginar resultados

La visualización de los resultados de la consulta en la página actual se puede implementar en la aplicación del usuario o puede indicarle al servidor de la base de datos que lo haga. En el primer caso, todas las filas de la base de datos se envían a la aplicación, cuyo trabajo es seleccionar las filas requeridas y mostrarlas. En el segundo caso, en el lado del servidor, solo se seleccionan y muestran las filas necesarias para la página actual. Como es de esperar, la creación de páginas en el lado del servidor generalmente proporciona un mejor rendimiento porque... Solo se envían al cliente las líneas necesarias para su visualización.

Para admitir la creación de páginas del lado del servidor, SQL Server 2012 introduce dos nuevas cláusulas SELECT: OFFSET y FETCH. La aplicación de estas dos oraciones se demuestra en el siguiente ejemplo. Aquí, de la base de datos AdventureWorks2012 (que puede encontrar en la fuente), se recupera la identificación de la empresa, el puesto de trabajo y la fecha de nacimiento de todas las empleadas, clasificando el resultado por puesto de trabajo en orden ascendente. El conjunto de filas resultante se divide en páginas de 10 líneas y se muestra la tercera página:

en una oración COMPENSAR especifica el número de líneas de resultados que se omitirán en el resultado mostrado. Este número se calcula después de ordenar las filas mediante la cláusula ORDER BY. en una oración BUSCAR SIGUIENTE especifica el número de filas que satisfacen la condición WHERE y están ordenadas para ser devueltas. El parámetro de esta cláusula puede ser una constante, una expresión o el resultado de otra consulta. La cláusula FETCH NEXT es similar a la BUSCAR PRIMERO.

El objetivo principal al crear páginas del lado del servidor es poder implementar formularios de página comunes utilizando variables. Esta tarea se puede realizar utilizando el paquete SQL Server.

Declaración SELECT y propiedad IDENTITY

propiedad de IDENTIDAD le permite definir valores para una columna de tabla específica en forma de un contador que aumenta automáticamente. Las columnas de tipos de datos numéricos como TINYINT, SMALLINT, INT y BIGINT pueden tener esta propiedad. Para dicha columna de tabla, el motor de base de datos crea automáticamente valores secuenciales a partir del valor inicial especificado. Por lo tanto, la propiedad IDENTIDAD se puede utilizar para crear valores numéricos de un solo dígito para una columna seleccionada.

Una tabla sólo puede contener una columna con la propiedad IDENTIDAD. El propietario de la tabla tiene la opción de especificar un valor inicial y un incremento, como se muestra en el siguiente ejemplo:

UTILICE SampleDb; CREAR TABLA Producto (Id INT IDENTITY(10000, 1) NOT NULL, Nombre NVARCHAR(30) NOT NULL, Precio DINERO) INSERTAR EN Producto(Nombre, Precio) VALORES ("Producto1", 10), ("Producto2", 15) , ("Producto3", 8), ("Producto4", 15), ("Producto5", 40); -- Devuelve 10004 SELECCIONE IDENTITYCOL DEL Producto DONDE Nombre = "Producto5"; -- Similar a la declaración anterior SELECT $identity FROM Product WHERE Name = "Product5";

Este ejemplo primero crea una tabla Producto que contiene una columna Id con una propiedad IDENTIDAD. El sistema crea automáticamente los valores en la columna Id, comenzando en 10,000 y aumentando en incrementos unitarios para cada valor posterior: 10,000, 10,001, 10,002, etc.

Varias funciones y variables del sistema están asociadas con la propiedad IDENTIDAD. Por ejemplo, el código de ejemplo utiliza variable del sistema de identidad $. Como puede ver en el resultado de este código, esta variable hace referencia automáticamente a la propiedad IDENTIDAD. También puedes usar la función del sistema en su lugar. IDENTIDADCOL.

El valor inicial y el incremento de una columna con la propiedad IDENTIDAD se pueden encontrar usando las funciones IDENT_SEED Y IDENT_INCR respectivamente. Estas funciones se utilizan de la siguiente manera:

UTILICE SampleDb; SELECCIONE IDENT_SEED("Producto"), IDENT_INCR("Producto")

Como ya se mencionó, los valores de IDENTIDAD los establece automáticamente el sistema. Pero el usuario puede especificar explícitamente sus valores para ciertas filas asignando el parámetro IDENTIDAD_INSERT Valor ON antes de insertar un valor explícito:

SET IDENTITY INSERT nombre de tabla ON

Dado que puede utilizar el parámetro IDENTITY_INSERT para establecer una columna con la propiedad IDENTITY en cualquier valor, incluido un valor duplicado, la propiedad IDENTITY generalmente no exige la unicidad de los valores de la columna. Por lo tanto, para imponer la unicidad de los valores de las columnas, debe utilizar restricciones ÚNICAS o PRIMARIAS.

Cuando inserta valores en una tabla después de activar IDENTITY_INSERT, el sistema crea el siguiente valor de la columna IDENTITY incrementando el valor actual más grande de esa columna.

CREAR declaración de SECUENCIA

Existen varias desventajas importantes al utilizar la propiedad IDENTITY, las más importantes de las cuales son las siguientes:

    la aplicación de la propiedad se limita a la tabla especificada;

    el nuevo valor de la columna no se puede obtener de ninguna otra forma que no sea aplicándolo;

    la propiedad IDENTITY solo se puede especificar al crear una columna.

Por estos motivos, SQL Server 2012 introduce secuencias que tienen la misma semántica que la propiedad IDENTITY, pero sin las desventajas enumeradas anteriormente. En este contexto, una secuencia es una funcionalidad de base de datos que le permite especificar valores de contador para diferentes objetos de la base de datos, como columnas y variables.

Las secuencias se crean usando instrucciones. CREAR SECUENCIA. La declaración CREATE SEQUENCE está definida en el estándar SQL y es compatible con otros sistemas de bases de datos relacionales como IBM DB2 y Oracle.

El siguiente ejemplo muestra cómo crear una secuencia en SQL Server:

UTILICE SampleDb; CREAR SECUENCIA dbo.Sequence1 COMO INT COMENZAR CON 1 AUMENTO EN 5 MINVALUE 1 MAXVALUE 256 CICLO;

En el ejemplo anterior, el sistema crea automáticamente los valores de Sequence1, comenzando con el valor 1 e incrementando 5 para cada valor posterior. Así, en INICIO oferta se indica el valor inicial, y en Oferta INCREMENTO- paso. (El paso puede ser positivo o negativo).

En las siguientes dos oraciones opcionales VALOR MÍNIMO Y VALOR MÁXIMO Se especifica el valor mínimo y máximo del objeto de secuencia. (Tenga en cuenta que el valor MINVALUE debe ser menor o igual que el valor inicial y el valor MAXVALUE no puede ser mayor que el límite superior del tipo de datos especificado para la secuencia). CICLO indica que la secuencia se repite desde el principio cuando se excede el valor máximo (o mínimo para una secuencia con un paso negativo). De forma predeterminada, esta cláusula está configurada en SIN CICLO, lo que significa que exceder el valor máximo o mínimo de la secuencia generará una excepción.

La característica principal de las secuencias es su independencia de las tablas, es decir. se pueden utilizar con cualquier objeto de base de datos, como columnas de tabla o variables. (Esta propiedad tiene un efecto positivo en el almacenamiento y, por lo tanto, en el rendimiento. No es necesario almacenar la secuencia específica; solo se almacena su último valor).

Los nuevos valores de secuencia se crean usando PRÓXIMO VALOR PARA expresiones, cuya aplicación se muestra en el siguiente ejemplo:

UTILICE SampleDb; -- Devuelve 1 SELECCIONE EL SIGUIENTE VALOR PARA dbo.sequence1; -- Devuelve 6 (siguiente paso) SELECCIONE EL SIGUIENTE VALOR PARA dbo.sequence1;

Puede utilizar la expresión NEXT VALUE FOR para asignar el resultado de una secuencia a una variable o celda de columna. El siguiente ejemplo muestra cómo utilizar esta expresión para asignar resultados a una columna:

UTILICE SampleDb; CREAR TABLA Producto (Id INT NOT NULL, Nombre NVARCHAR(30) NOT NULL, Precio DINERO) INSERTAR EN VALORES DEL Producto (SIGUIENTE VALOR PARA dbo.sequence1, "Product1", 10); INSERTAR EN VALORES DEL PRODUCTO (SIGUIENTE VALOR PARA dbo.sequence1, "Product2", 15); --...

En el ejemplo anterior, primero creamos una tabla de Producto que consta de cuatro columnas. A continuación, dos declaraciones INSERT insertan dos filas en esta tabla. Las dos primeras celdas de la primera columna tendrán los valores 11 y 16.

El siguiente ejemplo muestra el uso de una vista de directorio. secuencias del sistema para ver el valor actual de una secuencia sin usarla:

Normalmente, la instrucción NEXT VALUE FOR se utiliza en una instrucción INSERT para hacer que el sistema inserte los valores generados. Esta expresión también se puede utilizar como parte de una consulta de varias filas mediante la cláusula OVER.

Para cambiar una propiedad de una secuencia existente, use Declaración ALTERAR SECUENCIA. Uno de los usos más importantes de esta declaración es con la opción REINICIAR CON, que restablece la secuencia especificada. El siguiente ejemplo muestra el uso de ALTER SEQUENCE para restablecer casi todas las propiedades de Sequence1:

UTILICE SampleDb; ALTERAR SECUENCIA dbo.sequence1 REINICIAR CON 100 INCREMENTAR EN 50 MINVALUE 50 MAXVALUE 200 SIN CICLO;

Eliminar una secuencia usando una instrucción SECUENCIA DE CAÍDA.

Establecer operadores

Además de los operadores analizados anteriormente, Transact-SQL admite tres operadores de conjuntos más: UNION, INTERSECT y EXCEPT.

operador de la UNIÓN

operador de la UNIÓN combina los resultados de dos o más consultas en un único conjunto de resultados que incluye todas las filas que pertenecen a todas las consultas de la unión. En consecuencia, el resultado de unir dos tablas es una nueva tabla que contiene todas las filas incluidas en una de las tablas originales o en ambas tablas.

La forma general del operador UNION se ve así:

select_1 UNION select_2 ( select_3])...

Los parámetros select_1, select_2, ... son declaraciones SELECT que crean una unión. Si se utiliza la opción TODOS, se muestran todas las filas, incluidos los duplicados. En un operador UNION, el parámetro ALL tiene el mismo significado que en una lista de selección SELECT, pero con una diferencia: para una lista de selección SELECT, este parámetro se usa de forma predeterminada, pero para un operador UNION, debe especificarse explícitamente.

En su forma original, la base de datos SampleDb no es adecuada para demostrar el uso del operador UNION. Por lo tanto, esta sección crea una nueva tabla, EmployeeEnh, que es idéntica a la tabla Empleado existente, pero tiene una columna Ciudad adicional. Esta columna indica el lugar de residencia de los empleados.

La creación de la tabla EmployeeEnh nos brinda una buena oportunidad para demostrar el uso de la cláusula. EN en la declaración SELECT. La instrucción SELECT INTO realiza dos operaciones. Primero, se crea una nueva tabla con las columnas enumeradas en la lista SELECT. Luego, las filas de la tabla original se insertan en la nueva tabla. El nombre de la nueva tabla se especifica en la cláusula INTO y el nombre de la tabla de origen se especifica en la cláusula FROM.

El siguiente ejemplo muestra cómo crear la tabla EmployeeEnh a partir de la tabla Empleado:

UTILICE SampleDb; SELECCIONE * EN EmpleadoEnh DESDE Empleado; ALTER TABLE EmployeeEnh AGREGAR Ciudad NCHAR(40) NULL;

En este ejemplo, la instrucción SELECT INTO crea la tabla EmployeeEnh, inserta todas las filas de la tabla fuente Empleado en ella y luego la instrucción ALTER TABLE agrega la columna Ciudad a la nueva tabla. Pero la columna Ciudad agregada no contiene ningún valor. Los valores de esta columna se pueden insertar usando Management Studio o usando el siguiente código:

UTILICE SampleDb; ACTUALIZAR EmpleadoEnh SET Ciudad = "Kazán" DONDE Id = 2581; ACTUALIZAR EmployeeEnh SET Ciudad = "Moscú" DONDE Id = 9031; ACTUALIZAR EmpleadoEnh SET Ciudad = "Ekaterimburgo" DONDE Id = 10102; ACTUALIZAR EmployeeEnh SET Ciudad = "San Petersburgo" DONDE Id = 18316; ACTUALIZAR EmployeeEnh SET Ciudad = "Krasnodar" DONDE Id = 25348; ACTUALIZAR EmployeeEnh SET Ciudad = "Kazán" DONDE Id = 28559; ACTUALIZAR EmployeeEnh SET Ciudad = "Perm" DONDE Id = 29346;

Ahora estamos listos para demostrar el uso de la instrucción UNION. El siguiente ejemplo muestra una consulta para crear una combinación entre las tablas EmployeeEnh y Department usando esta declaración:

UTILICE SampleDb; SELECCIONE Ciudad COMO "Ciudad" DE EmployeeEnh UNION SELECCIONE Ubicación DEL Departamento;

El resultado de esta consulta:

Sólo se pueden unir tablas compatibles mediante la declaración UNION. Por tablas compatibles queremos decir que ambas listas de columnas seleccionadas deben contener la misma cantidad de columnas y las columnas correspondientes deben tener tipos de datos compatibles. (En términos de compatibilidad, los tipos de datos INT y SMALLINT no son compatibles).

El resultado de una combinación solo se puede ordenar utilizando la cláusula ORDER BY en la última instrucción SELECT, como se muestra en el siguiente ejemplo. Las cláusulas GROUP BY y HAVING se pueden usar con declaraciones SELECT individuales, pero no dentro de la combinación misma.

La consulta de este ejemplo selecciona empleados que trabajan en el departamento d1 o que comenzaron a trabajar en el proyecto antes del 1 de enero de 2008.

El operador UNION admite el parámetro TODOS. El uso de esta opción no elimina los duplicados del conjunto de resultados. Puede utilizar el operador OR en lugar del operador UNION si todas las declaraciones SELECT unidas por uno o más operadores UNION hacen referencia a la misma tabla. En este caso, el conjunto de sentencias SELECT se reemplaza por una única sentencia SELECT con un conjunto de operadores OR.

Operadores INTERSECT y EXCEPT

Otros dos operadores para trabajar con decorados, INTERSECARSE Y EXCEPTO, determine la intersección y la diferencia, respectivamente. En este contexto, bajo intersección hay un conjunto de filas que pertenecen a ambas tablas. Y la diferencia entre dos tablas se define como todos los valores que pertenecen a la primera tabla y no están presentes en la segunda. El siguiente ejemplo muestra el uso del operador INTERSECT:

Transact-SQL no admite el uso del parámetro ALL con el operador INTERSECT o EXCEPT. El uso del operador EXCEPTO se muestra en el siguiente ejemplo:

Recuerde que estos tres operadores de conjunto tienen diferentes prioridades de ejecución: el operador INTERSECT tiene la prioridad más alta, seguido del operador EXCEPT y el operador UNION tiene la prioridad más baja. No prestar atención a la precedencia de ejecución cuando se utilizan varios operadores de conjuntos diferentes puede producir resultados inesperados.

Expresiones CASO

En la programación de aplicaciones de bases de datos, a veces es necesario modificar la representación de los datos. Por ejemplo, se pueden subdividir las personas codificándolas según su clase social, utilizando los valores 1, 2 y 3, que denotan hombres, mujeres y niños respectivamente. Esta técnica de programación puede reducir el tiempo necesario para implementar un programa. expresión CASO El lenguaje Transact-SQL facilita la implementación de este tipo de codificación.

A diferencia de la mayoría de los lenguajes de programación, CASE no es una declaración, sino una expresión. Por lo tanto, una expresión CASE se puede utilizar casi en cualquier lugar donde Transact-SQL permita expresiones. La expresión CASE tiene dos formas:

    expresión CASE simple;

    expresión de búsqueda CASE.

La sintaxis de una expresión CASE simple es:

Una declaración con una expresión CASE simple primero busca una lista de todas las expresiones en cláusula CUÁNDO la primera expresión que coincide con la expresión_1, luego ejecuta la correspondiente ENTONCES cláusula. Si no hay ninguna expresión coincidente en la lista WHEN, el Cláusula ELSE.

La sintaxis de la expresión de búsqueda CASE es la siguiente:

Esto busca la primera condición coincidente y luego ejecuta la cláusula THEN correspondiente. Si ninguna de las condiciones cumple los requisitos, se ejecuta la cláusula ELSE. El uso de una expresión de búsqueda CASE se muestra en el siguiente ejemplo:

UTILICE SampleDb; SELECCIONE Nombre del proyecto, CASO CUANDO Presupuesto > 0 Y Presupuesto 100000 Y Presupuesto 150000 Y Presupuesto

El resultado de esta consulta:

Este ejemplo pesa los presupuestos de todos los proyectos y luego muestra sus pesos calculados junto con los nombres de los proyectos correspondientes.

El siguiente ejemplo muestra otra forma de utilizar una expresión CASE, donde la cláusula WHEN contiene subconsultas que forman parte de la expresión:

UTILICE SampleDb; SELECCIONE Nombre del proyecto, CASO CUANDO p1.Budget (SELECCIONE AVG(p2.Budget) DEL Proyecto p2) ENTONCES "arriba del promedio" FINAL "Categoría de presupuesto" DEL Proyecto p1;

El resultado de esta consulta es el siguiente:

La norma ISO define los siguientes cinco funciones de agregación:

CONTAR– devuelve el número de valores en la columna especificada;

SUMA– devuelve la suma de los valores de la columna especificada;

AVG– devuelve el valor promedio en la columna especificada;

MÍNIMO– devuelve el valor mínimo en la columna especificada;

MÁXIMO– devuelve el valor máximo en la columna especificada.

Todas estas funciones operan con valores en una sola columna de la tabla y devuelven un único valor. Las funciones CONTAR, MIN y MAX se aplican tanto a campos numéricos como a no numéricos, mientras que las funciones SUMA y PROMEDIO solo se pueden usar para campos numéricos. Con la excepción de COUNT(*), al evaluar los resultados de cualquier función, primero se eliminan todos los valores nulos y luego la operación requerida se aplica solo a los valores restantes que no están en blanco en la columna. La opción CONTAR(*) es un caso de uso especial de la función CONTAR: su propósito es contar todas las filas de una tabla, independientemente de si contiene valores nulos, duplicados o cualquier otro valor. Si desea excluir valores duplicados antes de utilizar una función de agregación, debe preceder el nombre de la columna en la definición de la función con la palabra clave DISTINCT. El estándar ISO permite el uso de la palabra clave ALL para indicar explícitamente que no se requiere la exclusión de valores duplicados, aunque esta palabra clave está implícita de forma predeterminada si no se especifica ningún otro calificador. La palabra clave DISTINCT no tiene significado para las funciones MIN y MAX. Sin embargo, su uso puede afectar los resultados de las funciones SUM y AVG, por lo que debes considerar previamente si debe estar presente en cada caso particular. Además, la palabra clave DISTINCT solo se puede especificar una vez en cada solicitud.

Cabe señalar que las funciones de agregación solo se pueden usar en la lista SELECT y en la cláusula HAVING (consulte la Sección 5.3.4). En todos los demás casos, el uso de estas funciones es inaceptable. Si la lista SELECT contiene una función de agregación y el cuerpo de la consulta no contiene una cláusula GROUP BY para permitir que los datos se agrupen, ninguno de los elementos de la lista SELECT puede incluir referencias de columna a menos que la columna se use como parámetro de función de agregación. Por ejemplo, la siguiente consulta es incorrecta:

SELECCIONARpersonalNo,CONTAR (salario)

DEPersonal;

El error es que no hay ninguna construcción en esta solicitud. Agrupar por y se accede a la columna staffNo en la lista SELECT sin utilizar una función de agregación.

Ejemplo 13: Uso de la función CONTAR(*).Determine cuántas propiedades de alquiler tienen un alquiler de más de £350 por mes,

SELECCIONAR CUENTA(*) AS cuenta

DEPropiedadEnAlquiler

DÓNDEalquiler > 350;

La restricción de contar sólo aquellas propiedades de alquiler cuyo alquiler sea superior a £350 por mes se implementa mediante el uso de una cláusula WHERE. El número total de propiedades de alquiler que cumplen una condición específica se puede determinar utilizando la función de agregación COUNT. Los resultados de la consulta se presentan en la tabla. 23.

Tabla 23

contar

Ejemplo 14. Usando la función CONTAR(DISTINCT).Determine cuántas propiedades de alquiler diferentes vieron los clientes en mayo de 2001.

SELECCIONAR RECUENTO (DISTINTOpropiedadNo) AS cuenta

DEVisita

Nuevamente, limitar los resultados de la consulta sólo a aquellas propiedades de alquiler que fueron inspeccionadas en mayo de 2001 se logra mediante el uso de la cláusula WHERE. El número total de objetos examinados que satisfacen la condición especificada se puede determinar utilizando la función de agregación COUNT. Sin embargo, dado que diferentes clientes pueden ver el mismo objeto varias veces, es necesario especificar la palabra clave DISTINCT en la definición de la función; esto permitirá excluir los valores duplicados del cálculo. Los resultados de la consulta se presentan en la tabla. 24.

Tabla 24

Ejemplo 16. Uso de las funciones MIN, MAXnAVG.Calcular el salario mínimo, máximo y medio.

SELECCIONAR MÍNIMO(salario) COMO minuto, MÁXIMO(salario) COMO máximo, AVG(salario) COMO promedio

DEPersonal;

En este ejemplo, necesita procesar información sobre todo el personal de la empresa, por lo que no es necesario utilizar la cláusula WHERE. Los valores requeridos se pueden calcular utilizando las funciones MIN, MAX y AVG aplicadas a la columna de salario de la tabla Personal. Los resultados de la consulta se presentan en la tabla. 26.

Tabla 26.

Resultado de la solicitud

mín. máximo promedio
9000.00 30000.00 17000.00

Resultados de agrupación (construcción GROUP BY). Los ejemplos de datos resumidos anteriores son similares a las líneas de resumen que normalmente se encuentran al final de los informes. Como resultado, todos los datos detallados del informe se comprimen en una línea de resumen. Sin embargo, muy a menudo es necesario generar subtotales en los informes. Se puede especificar una cláusula GROUP BY en una instrucción SELECT para este propósito. Una consulta que contiene una cláusula GROUP BY se llama solicitud de agrupación, porque agrupa los datos resultantes de una operación SELECT y luego crea una única fila total para cada grupo individual. Las columnas enumeradas en la cláusula GROUP BY se denominan columnas agrupadas. El estándar ISO requiere que las cláusulas SELECT y GROUP BY estén estrechamente relacionadas. Cuando se utiliza la cláusula GROUP BY en una declaración SELECT, cada elemento de la lista SELECT debe tener el único significado para todo el grupo. Además, la cláusula SELECT sólo puede incluir los siguientes tipos de elementos:

Nombres de columnas;

funciones de agregación;

Constantes;

Expresiones que incluyen combinaciones de los elementos enumerados anteriormente.

Todos los nombres de columnas que aparecen en la lista SELECT también deben aparecer en la cláusula GROUP BY, a menos que el nombre de la columna se use solo en una función de agregación. Lo contrario no siempre es cierto: la cláusula GROUP BY puede contener nombres de columnas que no están en la lista SELECT. Si la cláusula WHERE se utiliza junto con la cláusula GROUP BY, se procesa primero y solo se agrupan aquellas filas que satisfacen la condición de búsqueda. El estándar ISO especifica que al agrupar, todos los valores faltantes se tratan como iguales. Si dos filas de la tabla en la misma columna de agrupación contienen valores NULL y valores idénticos en todas las demás columnas de agrupación no nulas, se colocan en el mismo grupo.

Ejemplo 17: uso de la construcción GROUP BY.Determine la cantidad de personal que trabaja en cada uno de los departamentos de la empresa, así como sus salarios totales.

SELECCIONARsucursalNo, CONTAR(personalNo) COMO contar, SUMA(salario) COMO suma

DEPersonal

Agrupar porsucursalNo

ORDENAR PORramaNo;

No es necesario incluir los nombres de las columnas staffNo y salario en la lista de elementos GROUP BY porque solo aparecen en una lista SELECT con funciones de agregación. Al mismo tiempo, la columna BranchNo en la lista de la cláusula SELECT no está asociada con ninguna función de agregación y por este motivo debe especificarse en la cláusula GROUP BY. Los resultados de la consulta se presentan en la tabla. 27.

Tabla 27

Resultado de la solicitud

sucursalNo Contar Suma
B003 54000.00
B005 39000.00
B007 9000.00

Conceptualmente, al procesar esta solicitud se realizan las siguientes acciones:

1. Las filas de la tabla Personal se distribuyen en grupos de acuerdo con los valores de la columna del número de departamento de la empresa. Dentro de cada grupo hay datos de todo el personal de uno de los departamentos de la empresa. En nuestro ejemplo, se crearán tres grupos, como se muestra en la Fig. 1.

2. Para cada grupo se calcula el número total de filas, igual al número de empleados del departamento, así como la suma de los valores en la columna de salario, que es la suma de los salarios de todos los empleados en el departamento que nos interesa. Luego se genera una única fila de resumen para todo el grupo de filas de origen.

3. Las filas resultantes de la tabla resultante se ordenan en orden ascendente según el número de sucursal especificado en la columna BranchNo.

sucursalNo personalNo Salario
В00З SG37 12000.00
В00З SG14 18000.00
В00З SG5 24000.00
B005 SL21 30000.00
B005 SL41 9000.00
B007 SA9 9000.00
COUNT(número de personal) SUMA(salario)
54000.00
39000.00
9000.00

Arroz. 1. Tres grupos de registros creados cuando se ejecuta una consulta.

El estándar SQL permite colocar consultas anidadas en una lista SELECT. Entonces la consulta anterior también se puede representar de la siguiente manera:

SELECCIONARnúmero de sucursal, (SELECCIONAR CONTADOR (número de personal)COMO contar

DEpersonal

DÓNDEs.branchNo = b.branchNo),

(SELECCIONAR SUMA(salario) COMO suma

DEpersonal

DÓNDEs.númeroderama = b.númeroderama)

DESucursal b

ORDENAR PORramaNo;

Sin embargo, esta versión de la consulta crea dos resultados de función de agregación para cada una de las sucursales de la empresa descritas en la tabla Sucursal, por lo que en algunos casos es posible ver filas que contienen valores nulos.

Restricciones en la ejecución de agrupaciones (construcción HAVING). La cláusula HAVING está destinada a usarse junto con la cláusula GROUP BY para establecer restricciones especificadas con el fin de seleccionar aquellos grupos, que se colocará en la tabla de consulta resultante. Aunque las cláusulas HAVING y WHERE tienen una sintaxis similar, sus propósitos son diferentes. La cláusula WHERE se usa para seleccionar filas individuales para completar la tabla de consulta resultante, y la cláusula HAVING se usa para seleccionar grupos, colocado en la tabla de consulta resultante. El estándar ISO requiere que los nombres de las columnas utilizadas en la cláusula HAVING aparezcan en la lista de elementos GROUP BY o se utilicen en funciones de agregación. En la práctica, los términos de búsqueda en una cláusula HAVING siempre incluyen al menos una función de agregación; de lo contrario, estos términos de búsqueda deben colocarse en una cláusula WHERE y usarse para seleccionar filas individuales. (Recuerde que las funciones de agregación no se pueden usar en una cláusula WHERE). La cláusula HAVING no es una parte necesaria del lenguaje SQL; cualquier consulta escrita usando la cláusula HAVING se puede escribir de otra forma sin usarla.

Ejemplo 18. Usando la construcción HAVING.Para cada sucursal de una empresa con más de un empleado, determine el número de empleados y el monto de sus salarios.

SELECCIONARsucursalNo, CONTE T(número de personal) COMO contar, SUMA(salario) COMO suma

DEPersonal

Agrupar porsucursalNo

TENER CUENTA(número de personal) > 1

ORDENAR PORramaNo;

Este ejemplo es similar al anterior, pero utiliza restricciones adicionales indicando que sólo nos interesa información sobre aquellos departamentos de la empresa que emplean a más de una persona. Un requisito similar se aplica a los grupos, por lo que la consulta debe utilizar la construcción HAVING. Los resultados de la consulta se presentan en la tabla. 28.

Tabla 28

sucursalSin contar suma
В00З 3 54000.00
B005 2 39000.00

Subconsultas. En esta sección, discutiremos el uso de declaraciones SELECT completas incrustadas dentro del cuerpo de otra declaración SELECT. Externo La (segunda) instrucción SELECT utiliza el resultado de la ejecución. interno(primer) operador para determinar el contenido del resultado final de toda la operación. Las consultas internas se pueden encontrar en las cláusulas WHERE y HAVING de la declaración SELECT externa; en este caso se llaman subconsultas, o consultas anidadas. Además, las declaraciones SELECT internas se pueden utilizar en declaraciones INSERT, UPDATE y DELETE. . Hay tres tipos de subconsultas.

Subconsulta escalar devuelve el valor seleccionado de la intersección de una columna con una fila, es decir el único significado. En principio, se puede utilizar una subconsulta escalar siempre que se requiera un valor único. En los ejemplos 13 y 14 se dan variantes de subconsultas escalares.

Subconsulta de cadena devuelve los valores de varias columnas de la tabla, pero como una sola fila. Se puede utilizar una subconsulta de cadena en cualquier lugar donde se utilice un constructor de valores de cadena, normalmente predicados. En el ejemplo 15 se muestra una variante de una subconsulta de cadena.

Subconsulta de tabla Devuelve los valores de una o más columnas de la tabla en más de una fila. Se puede utilizar una subconsulta de tabla siempre que se pueda especificar una tabla, por ejemplo, como operando de un predicado IN.

Ejemplo 19: uso de una subconsulta con una prueba de igualdad. Componer listado del personal que trabaja en la sucursal de la empresa ubicada en 463 Main St1.

SELECCIONAR

DEPersonal

DÓNDEnúmero de sucursal = (SELECCIONAR número de sucursal

DERama

DÓNDEcalle = "163 Calle Principal");

La declaración SELECT interna (SELECT BranchNo FROM Branch...) tiene como objetivo determinar el número de la sucursal de la empresa ubicada en la dirección "163 Main St". (Solo existe una sucursal de este tipo en la empresa, por lo que este ejemplo es un ejemplo de subconsulta escalar). Después de obtener el número de la sucursal requerida, se ejecuta una subconsulta externa para recuperar información detallada sobre los empleados de esa sucursal. En otras palabras, la instrucción SELECT interna devuelve una tabla que consta de un único valor "BOOV". Esto representa el número de la sucursal de la empresa ubicada en la dirección "163 Main St1. Como resultado, la declaración SELECT externa toma la siguiente forma:

SELECCIONARstaffNo, fName, IName, posición

DEPersonal

DÓNDEnúmero de sucursal = "B0031;

Los resultados de esta consulta se presentan en la tabla. 29.

Tabla 29

Resultado de la solicitud

personalNo fNombre Nombre posición
SG37 Ana Haya Asistente
SG14 David Vado Supervisor
SG5 susana Marca Gerente

Una subconsulta es una herramienta para crear una tabla temporal cuyo contenido es recuperado y procesado por un operador externo. Se puede especificar una subconsulta directamente después de los operadores de comparación (es decir, operadores =,<, >, <=, >=, <>) en la cláusula WHERE o HAVING. El texto de la subconsulta debe estar entre paréntesis.

Ejemplo 20. Usar subconsultas con funciones de agregación. Haga una lista de todos los empleados que tienen un salario superior al promedio, indicando en qué medida su salario excede el salario promedio de la empresa.

SELECCIONARstaffNo, fName, IName, puesto, salario - ( SELECCIONAR PROMEDIO(salario) DE Personal) COMO salDif

DEPersonal

DÓNDEsalario > ( SELECCIONAR PROMEDIO(salario) DE Personal) ;

Cabe señalar que no se puede directamente incluir en expresión de consulta"DONDE salario > AVG (salario)", desde usar agregación Las funciones en la cláusula WHERE están prohibidas. Para lograr el resultado deseado, debe crear una subconsulta que calcule el salario anual promedio y luego usarla en una declaración SELECT externa que recupere información sobre aquellos empleados de la empresa cuyo salario excede este promedio. En otras palabras, la subconsulta devuelve el salario medio anual de la empresa igual a 17.000 £.

El resultado de esta subconsulta escalar se utiliza en la declaración SELECT externa tanto para calcular la desviación de los salarios del nivel promedio como para seleccionar información sobre los empleados. Por lo tanto, la declaración SELECT externa toma la siguiente forma:

SELECCIONARstaffNo, fName, IName, posición, salario - 17000 Como salDif

DEPersonal

DÓNDEsalario > 17000;

Los resultados de la consulta se presentan en la tabla. 30.

Tabla 30.

Resultado de la solicitud

personalNo fNombre Nombre posición salDif
SL21 John Blanco Gerente 13000.00
SG14 David Vado Supervisor 1000.00
SG5 susana Marca Gerente 7000.00

Aplicar a subconsultas siguientes reglas y restricciones.

1. Las subconsultas no deben utilizar la cláusula ORDER BY, aunque puede estar presente en la declaración SELECT externa.

2. La lista SELECT de una subconsulta debe constar de los nombres de columnas individuales o expresiones compuestas por ellas, excepto cuando se utiliza la palabra clave EXISTS en la subconsulta.

3. De forma predeterminada, los nombres de las columnas en una subconsulta hacen referencia a la tabla cuyo nombre se especifica en la cláusula FROM de la subconsulta. Sin embargo, también es posible hacer referencia a columnas de una tabla especificada en la cláusula FROM de una consulta externa utilizando nombres de columna calificados (como se describe a continuación).

4. Si una subconsulta es uno de los dos operandos involucrados en una operación de comparación, entonces la subconsulta debe especificarse en el lado derecho de esta operación. Por ejemplo, la siguiente notación de consulta del ejemplo anterior es incorrecta porque la subconsulta se coloca en el lado izquierdo de la operación de comparación con el valor de la columna de salario.

SELECCIONAR

DEPersonal

DÓNDE(SELECCIONE AVG(salario) DEL Personal)< salary;

Ejemplo 21. Subconsultas anidadas y el uso del predicado IN. Haga una lista de las propiedades en alquiler de las cuales son responsables los empleados de la sucursal de la empresa ubicada en 163 Main st1.

SELECCIONARpropiedadNo, calle, ciudad, código postal, tipo, habitaciones, alquiler

DEPropiedadEnAlquiler

Capítulo 5. Lenguaje SQL: manipulación de datos 189

DÓNDEpersonalNo IN (SELECCIONAR personalNo

DEPersonal

DÓNDEBrancliNo = (SELECCIONAR BranchNo

DERama

DÓNDEcalle = "163 Main S t "));

La primera consulta, más interna, tiene como objetivo determinar el número de la sucursal de la empresa ubicada en 463 Main St. La segunda consulta, intermedia, recupera información sobre el personal que trabaja en esta sucursal. En este caso, hay más de una fila de datos. seleccionado y por lo tanto en la consulta externa no puede usar el operador de comparación =. En su lugar, debe usar la palabra clave IN. La consulta externa recupera información sobre los objetos arrendados de los cuales son responsables esos empleados de la empresa, cuyos datos se obtuvieron como resultado. de ejecutar la consulta intermedia. Los resultados de la consulta se presentan en la tabla 31.

Tabla 31

Resultado de la solicitud

propiedadNo calle ciudad código postal tipo alojamiento alquilar
PG16 5 Novar Dr. Glasgow G129AX Departamento
PG36 2 camino señorial Glasgow G324QX Departamento
PG21 18 Dale Rd Glasgow G12 Casa

Palabras clave CUALQUIER y TODOS. Las palabras clave ANY y ALL se pueden utilizar con subconsultas que devuelven una sola columna de números. Si la subconsulta está precedida por la palabra clave ALL, la condición de comparación se cumple solo si es verdadera para todos los valores en la columna de resultados de la subconsulta. Si el texto de una subconsulta está precedido por la palabra clave CUALQUIER, entonces la condición de comparación se considerará cumplida si se cumple para al menos algunos (uno o más) valores en la columna resultante de la subconsulta. Si el resultado de ejecutar una subconsulta da como resultado un valor vacío, entonces para la palabra clave ALL la condición de comparación se considerará cumplida y para la palabra clave ANY se considerará no cumplida. Según el estándar ISO, también puede utilizar la palabra clave ALGUNA, que es sinónimo de CUALQUIER palabra clave.

Ejemplo 22. Usando las palabras clave ANY y ALGUNAS. Encuentre todos los trabajadores cuyo salario exceda el salario al menos uno empleado de la sucursal de la empresa con el número "booz".

SELECCIONARstaffNo, fName, IName, puesto, salario

DEPersonal

DÓNDEsalario > ALGUNOS(SELECCIONAR salario

DEPersonal

DÓNDEnúmeroderama = "B003");

Aunque esta consulta podría escribirse utilizando una subconsulta que especifique el salario mínimo para el personal del departamento número "BOHO", después de lo cual la subconsulta externa podría seleccionar información sobre todo el personal de la empresa cuyo salario exceda este valor (ver ejemplo 20), es posible otro enfoque. que consiste en utilizar las palabras clave SOME/ANY. En este caso, la subconsulta interna crea un conjunto de valores (12000, 18000, 24000) y la consulta externa selecciona información sobre aquellos empleados cuyo salario es mayor que cualquiera de los valores en este

establecido (en realidad más que el valor mínimo - 12000). Este método alternativo puede considerarse más natural que definir el salario mínimo en una subconsulta. Pero en ambos casos se obtienen los mismos resultados de la consulta, que se presentan en la tabla. 32 .

Tabla 32

Resultado de la solicitud

personalNo fNombre Nombre posición salario
SL21 John Blanco Gerente 30000.00
SG14 David Vado Supervisor 18000.00
SG5 susana Marca Gerente 24000.00

Ejemplo 23. Usando la palabra clave TODOS. Encuentre todos los empleados cuyos salarios sean mayores que los salarios de cualquier empleado en la sucursal número "booz" de la empresa.

SELECCIONARstaffNo, fName, INarae, puesto, salario

DEPersonal

DÓNDEsalario > TODO(SELECCIONAR salario

DEPersonal

DÓNDEnúmeroderama = "BOG3");

En general, esta solicitud es similar a la anterior. Y en este caso, sería posible utilizar una subconsulta que determine el valor máximo del salario del personal del departamento bajo el número "BOZ", y luego, mediante una consulta externa, seleccionar información sobre todos los empleados de la empresa cuyo salario exceda este valor. Sin embargo, en este ejemplo, se elige el enfoque de TODAS las palabras clave. Los resultados de la consulta se presentan en la tabla. 33 .

Tabla 33

Resultado de la solicitud

personalNo Nombre fNombre posición salario
SL21 Blanco John Gerente 30000,00

Consultas de varias tablas. Todos los ejemplos discutidos anteriormente tienen la misma limitación importante: las columnas colocadas en la tabla resultante siempre se seleccionan de una sola tabla. Sin embargo, en muchos casos esto no es suficiente. Para combinar columnas de varias tablas fuente en la tabla resultante, debe realizar la operación conexiones. En SQL, la operación de unión se utiliza para combinar información de dos tablas formando pares de filas relacionadas seleccionadas de cada tabla. Los pares de filas colocadas en la tabla combinada se compilan en función de la igualdad de los valores de las columnas especificadas incluidas en ellas.

Si necesita obtener información de varias tablas, puede utilizar una subconsulta o unir las tablas. Si la tabla de consulta resultante debe contener columnas de diferentes tablas de origen, es recomendable utilizar un mecanismo de unión de tablas. Para realizar una unión, basta con especificar los nombres de dos o más tablas en la cláusula FROM, separándolas con comas, y luego incluir en la consulta la cláusula WHERE que define las columnas utilizadas para unir las tablas especificadas. Además, en lugar de nombres de tablas, puede utilizar seudónimos, asignados a ellos en la cláusula FROM. En este caso, los nombres de las tablas y los alias que se les asignen deben estar separados por espacios. Los alias se pueden utilizar para aclarar los nombres de las columnas en cualquier caso en el que pueda haber ambigüedad en cuanto a a qué tabla pertenece una columna en particular. Además, se pueden utilizar alias para acortar los nombres de las tablas. Si se define un alias para una tabla, se puede utilizar en cualquier lugar que requiera que se especifique el nombre de esa tabla.

Ejemplo 24. Conexión sencilla. Haga una lista de los nombres de todos los clientes que ya hayan inspeccionado al menos una propiedad de alquiler y hayan brindado su opinión al respecto.

SELECCIONARc.clientNo, fName, IName, propertyNo, comentario

DECliente c, viendo v

DÓNDEc.nºcliente = v.nºcliente;

Este informe requiere información tanto de la tabla Cliente como de la tabla Visualización, por lo que usaremos un mecanismo de unión de tablas para generar la consulta. La cláusula SELECT enumera todas las columnas que deben colocarse en la tabla de consulta resultante. Tenga en cuenta que la columna clientNo requiere calificación porque la columna también puede estar presente en otra tabla que participa en la combinación. Por tanto, es necesario indicar explícitamente qué valores de la tabla nos interesan. (En este ejemplo, podría haber seleccionado con la misma facilidad los valores de la columna clientNo de la tabla de visualización). El nombre se especifica especificando el nombre de la tabla correspondiente (o su alias) como prefijo antes del nombre de la columna. Nuestro ejemplo utiliza el valor "c" especificado como alias para la tabla Cliente. Para generar las filas resultantes, se utilizan aquellas filas de las tablas fuente que tienen un valor idéntico en la columna clientNo. Esta condición se determina especificando la condición de búsqueda con.clientNo=v.clientNo. Las columnas similares de las tablas fuente se denominan columnas coincidentes. La operación descrita es equivalente a la operación conexiones por igualdadálgebra relacional. Los resultados de la consulta se presentan en la tabla. 34.

Tabla 34

Resultado de la solicitud

clienteNo fNombre Nombre propiedadNo comentario
CR56 Alinear Stewart PG36
CR56 Alinear Stewart PA14 demasiado pequeño
CR56 Alinear Stewart PG4
CR62 María tregar PA14 sin comedor
CR76 John kay PG4 demasiado remoto

La mayoría de las veces, las consultas de varias tablas se realizan en dos tablas conectadas por una relación de uno a muchos (1:*) o de padre-hijo. En el ejemplo anterior, que implica acceder a las tablas Cliente y Visualización, estas últimas están conectadas precisamente por esa relación. Cada fila de la tabla de visualización (secundaria) está asociada con solo una fila de la tabla de cliente (principal), mientras que la misma fila de la tabla de cliente (principal) se puede asociar

con muchas filas de la tabla de visualización (secundaria). Los pares de filas que se generan cuando se ejecuta una consulta son el resultado de todas las combinaciones válidas de filas en las tablas secundaria y principal. La sección 3.2.5 detalla cómo, en una base de datos relacional, las claves primaria y externa de las tablas crean una relación padre-hijo. Una tabla que contiene una clave externa suele ser secundaria, mientras que una tabla que contiene una clave principal siempre será primaria. Para utilizar una relación padre-hijo en una consulta SQL, debe especificar una condición de búsqueda que compare la clave externa y la clave principal. El ejemplo 24 compara la clave principal de la tabla Cliente (v. clientNo) con la clave externa de la tabla Viewing (v. clientNo).

El estándar SQL proporciona además las siguientes formas de definir esta conexión:

DECliente con UNIRSE viendo v EN c.nºcliente = v.nºcliente

DECliente J OIN Visita USANDO clienteNo

DECliente ÚNETE NATURAL Visita

En cada caso, la cláusula FROM reemplaza las cláusulas FROM y WHERE originales. Sin embargo, la primera opción crea una tabla con dos columnas clientNo idénticas, mientras que en los otros dos casos la tabla resultante contendrá solo una columna clientNo.

Ejemplo 25. Ordenar los resultados de unir tablas. Para cada sucursal de la empresa, indique los números de personal y los nombres de los empleados responsables de cualquier propiedad en alquiler, y también indique las instalaciones para las cuales

que contestan.

SELECCIONARs.branchNo, s.staffNo, fName, IName, propiedadNo

DEPersonal, PropertyForRent p

DÓNDEs.número de personal = p.número de personal

ORDENAR PORs.branchNo, s.staffNo, propiedadNo;

Para facilitar la lectura de los resultados, la salida resultante se clasifica utilizando el número de departamento como clave de clasificación principal y el número de personal y el número de propiedad como claves menores. Los resultados de la consulta se presentan en la tabla. 35.

Tabla 35

Resultado de la solicitud

sucursalNo PersonalNo fNombre Nombre propiedadNo
OMS SG14 David Vado PG16
OMS SG37 Ana Haya PG21
OMS SG37 Ana Haya PG36
BOO5 SL41 María Sotavento PL94
OSE7 SA9 julia Howe PA14

Ejemplo 26. Uniendo tres mesas. Para cada sucursal de la empresa, indique los números de personal y los nombres de los empleados responsables de las propiedades en alquiler, indicando la ciudad en la que está ubicada la sucursal de la empresa y los números de las instalaciones de las que es responsable cada empleado.

SELECCIONAR b.branchNo, b.city, s.staffNo, fName, IName, propertyNo

DE Sucursal b, Personal s, PropertyForRent p

DÓNDE b.númerodesucursal = s.númerodesucursal AND s.númerodepersonal = p.númerodepersonal

ORDENAR POR b.branchNo, s.staffNo, propertyNo;

La tabla resultante debe contener columnas de tres tablas de origen (Sucursal, Personal y PropiedadParaRent), por lo que la consulta debe combinar estas tablas. Las tablas Sucursal y Personal se pueden unir usando la condición b.branchNo=*s .branchNo, lo que da como resultado que las sucursales de la empresa se asocien con el personal que trabaja en ellas. Las tablas Staff y PropertyForRent se pueden unir usando la condición s.staffNo=p.staffNo. Como resultado, cada empleado quedará asociado a las propiedades de alquiler de las que es responsable. Los resultados de la consulta se presentan en la tabla. 36.

Tabla 36

Resultados de la consulta

sucursalNo ciudad personalMo fNombre Nombre propiedadNo
B003 Glasgow SG14 David Vado PG16
B003 Glasgow SG37 Ana Haya PG21
B003 Glasgow SG37 Ana Haya PG36
B005 Londres SL41 julia Sotavento PL94
B007 Aberdeen SA9 María Howe PA14

Tenga en cuenta que el estándar SQL permite el uso de una formulación alternativa de las construcciones FROM y WHERE:

DE(Sucursal b JOIN Staff s USANDO sucursalNo) COMO bs

UNIRSEPropiedadParaAlquilar p USANDO personalNo

Ejemplo 27. Agrupación por múltiples columnas. Determine el número de propiedades en alquiler de las que es responsable cada uno de los empleados de la empresa.

SELECCIONARs.sucursalNo, S.personalNo, CONTAR(*) COMO contar

DE Personal s, PropertyForRent p

DONDE S.nºpersonal = p.nºpersonal

Agrupar pors.sucursalNo, s.personalNo

ORDENAR PORs.branchNo, s.staffNo;

Para elaborar el informe requerido, primero hay que averiguar quién de los empleados de la empresa es responsable de las propiedades en alquiler. Este problema se puede resolver uniendo las tablas Staff y PropertyForRent usando la columna staffNo en las cláusulas FROM/WHERE. Luego debe crear grupos que consistan en el número de departamento y el número de personal de sus empleados, para lo cual debe usar la construcción GROUP BY. Finalmente, la tabla resultante debe ordenarse mediante la cláusula ORDER BY. Los resultados de la consulta se presentan en la tabla. 37.

Tabla 37

Resultado de la solicitud

sucursalNo personalNo contar
В00З SG14
В00З SG37
B005 SL41
B007 SA9

Haciendo conexiones. Una combinación es un subconjunto de una combinación más general de datos de dos tablas llamada cartesiano. El producto cartesiano de dos tablas es otra tabla que consta de todos los pares posibles de filas que forman parte de ambas tablas. El conjunto de columnas de la tabla resultante son todas las columnas de la primera tabla seguidas de todas las columnas de la segunda tabla. Si ingresa una consulta en dos tablas sin especificar una cláusula WHERE, el resultado de la consulta en el entorno SQL será el producto cartesiano de estas tablas. Además, el estándar ISO proporciona un formato especial para la instrucción SELECT que le permite calcular el producto cartesiano de dos tablas:

SELECT(*j lista de columnas]

DESDE tableNamel CROSS JOINCaYeUlte2

Veamos nuevamente un ejemplo en el que la conexión del cliente y la visualización de tablas se realiza utilizando la columna clientNo común cuando se trabaja con tablas cuyo contenido se proporciona en la tabla. 3.6 y 3.8, el producto cartesiano de estas tablas contendrá 20 filas (4 filas de la tabla Cliente x 5 filas de la tabla de visualización = 20 filas). Esto equivale a emitir la consulta utilizada en el ejemplo 5.24, pero sin utilizar la cláusula WHERE. El procedimiento para generar una tabla que contiene los resultados de unir dos tablas usando la instrucción SELECT es el siguiente.

1. Se forma un producto cartesiano de las tablas especificadas en la construcción FROM.

2. Si la consulta contiene una cláusula WHERE, aplicar condiciones de búsqueda a cada fila de la tabla del producto cartesiano y almacenar en la tabla solo aquellas filas que cumplan las condiciones especificadas. En términos de álgebra relacional, esta operación se llama limitación Producto cartesiano.

3. Para cada fila restante, se determina el valor de cada elemento especificado en la lista SELECT, lo que da como resultado una fila separada de la tabla resultante.

4. Si la consulta original contiene la construcción SELECT DISTINCT, todas las filas duplicadas se eliminan de la tabla resultante.

5. Si la consulta que está ejecutando contiene una cláusula ORDER BY,


©2015-2019 sitio
Todos los derechos pertenecen a sus autores. Este sitio no reclama autoría, pero proporciona uso gratuito.
Fecha de creación de la página: 2016-08-07

Cláusula GRUPO POR(Declaraciones SELECT) le permite agrupar datos (filas) por el valor de una columna o varias columnas o expresiones. El resultado será un conjunto de filas de resumen.

Cada columna de la lista de selección debe aparecer en la cláusula GROUP BY, con la excepción de las constantes y las columnas de operandos de funciones agregadas.

Puede agrupar una tabla por cualquier combinación de sus columnas.

Funciones agregadas se utilizan para obtener un único valor total de un grupo de filas. Todas las funciones agregadas realizan cálculos sobre un único argumento, que puede ser una columna o una expresión. El resultado de cualquier cálculo de función agregada es un valor constante que se muestra en una columna de resultados separada.

Las funciones agregadas se especifican en la lista de columnas de una instrucción SELECT, que también puede contener una cláusula GROUP BY. Si no hay una cláusula GROUP BY en la instrucción SELECT y la lista de columnas seleccionadas contiene al menos una función agregada, entonces no debe contener columnas simples. Por otro lado, la lista de selección de columnas puede contener nombres de columnas que no son argumentos para la función agregada si esas columnas son argumentos para la cláusula GROUP BY.

Si la consulta contiene una cláusula WHERE, las funciones agregadas calculan el valor de los resultados de la selección.

Funciones agregadas MIN y MAX calcule el valor más pequeño y más grande de la columna, respectivamente. Los argumentos pueden ser números, cadenas y fechas. Todos los valores NULL se eliminan antes del cálculo (es decir, no se tienen en cuenta).

Función agregada SUMA Calcula la suma total de los valores de una columna. Los argumentos sólo pueden ser números. El uso del parámetro DISTINCT elimina todos los valores duplicados en una columna antes de aplicar la función SUMA. Asimismo, todos los valores NULL se eliminan antes de aplicar esta función agregada.

función agregada AVG Devuelve el promedio de todos los valores de una columna. Los argumentos también pueden ser solo números y todos los valores NULL se eliminan antes de la evaluación.

Función agregada CONTAR tiene dos formas diferentes:

  • COUNT(col_name): cuenta el número de valores en la columna col_name, los valores NULL no se tienen en cuenta
  • COUNT(*): cuenta el número de filas de la tabla, los valores NULL también se tienen en cuenta

Si la consulta usa la palabra clave DISTINCT, todos los valores duplicados en la columna se eliminan antes de usar la función COUNT.

Función COUNT_BIG similar a la función CONTAR. La única diferencia entre ellos es el tipo de resultado que devuelven: la función CONTAR_BIG siempre devuelve valores GRANDES, mientras que la función CONTAR devuelve valores de datos ENTEROS.

EN TENER oferta define una condición que se aplica a un grupo de filas. Tiene el mismo significado para grupos de filas que la cláusula WHERE para el contenido de la tabla correspondiente (WHERE se aplica antes de agrupar, HAVING después).

por el valor de la columna Disciplina. Obtendremos 4 grupos para los cuales podremos calcular algunos valores de grupo, como el número de tuplas en el grupo, el valor máximo o mínimo de la columna Puntuación. Tabla 5.7. Funciones agregadas
Función Resultado
CONTAR Número de filas o valores de campos que no están en blanco que seleccionó la consulta
SUMA La suma de todos los valores seleccionados para este campo.
AVG La media aritmética de todos los valores seleccionados para este campo.
MÍNIMO El más pequeño de todos los valores seleccionados para este campo.
MÁXIMO El mayor de todos los valores seleccionados para este campo.
R1
nombre completo Disciplina Calificación
Grupo 1 Petrov F.I. Bases de datos 5
Sidorov K.A. Bases de datos 4
Mirónov A.V. Bases de datos 2
Stepanova K. E. Bases de datos 2
Krylova T. S. Bases de datos 5
Vladímirov V. A. Bases de datos 5
grupo 2 Sidorov K.A. Teoría de la información 4
Stepanova K. E. Teoría de la información 2
Krylova T. S. Teoría de la información 5
Mirónov A.V. Teoría de la información Nulo
grupo 3 Trofímov P. A. Redes y telecomunicaciones 4
Ivanova E.A. Redes y telecomunicaciones 5
Utkina N.V. Redes y telecomunicaciones 5
grupo 4 Vladímirov V. A. idioma en Inglés 4
Trofímov P. A. idioma en Inglés 5
Ivanova E.A. idioma en Inglés 3
Petrov F.I. idioma en Inglés 5

Funciones agregadas se utilizan de manera similar a los nombres de campo en una instrucción SELECT, pero con una excepción: toman el nombre del campo como argumento. Sólo se pueden utilizar campos numéricos con las funciones SUMA y PROMEDIO. Se pueden utilizar campos numéricos y de caracteres con las funciones COUNT, MAX y MIN. Cuando se usan con campos de caracteres, MAX y MIN los traducirán al código ASCII equivalente y los procesarán en orden alfabético. Algunos DBMS permiten el uso de agregados anidados, pero esto es una desviación del estándar ANSI con todas las consecuencias consiguientes.

Por ejemplo, puede calcular la cantidad de estudiantes que realizaron exámenes en cada disciplina. Para hacer esto, debe ejecutar una consulta agrupada por el campo "Disciplina" y mostrar como resultado el nombre de la disciplina y el número de filas en el grupo para esta disciplina. Usar el carácter * como argumento para la función CONTAR significa contar todas las filas del grupo.

SELECCIONE R1.Disciplina, CONTAR(*) DEL GRUPO R1 POR R1.Disciplina

Resultado:

Si queremos contar el número de personas que aprobaron el examen en cualquier disciplina, entonces debemos excluir los valores inciertos de la proporción original antes de agrupar. En este caso, la solicitud se verá así:

Obtenemos el resultado:

En este caso, la línea con el estudiante.

Mirónov A.V. Teoría de la información Nulo

no caerá en el conjunto de tuplas antes de la agrupación, por lo que el número de tuplas en el grupo a disciplinar " Teoría de la información"será 1 menos.

se puede utilizar funciones agregadas también sin la operación de preagrupación, en cuyo caso toda la relación se considera como un grupo y para este grupo se puede calcular un valor por grupo.

Volviendo nuevamente a la base de datos “Sesión” (tablas R1, R2, R3), encontramos el número de exámenes aprobados con éxito:

Por supuesto, esto es diferente a seleccionar un campo, ya que siempre se devuelve un único valor, sin importar cuántas filas haya en la tabla. Argumento funciones agregadas puede haber columnas de tabla separadas. Pero para calcular, por ejemplo, el número de valores distintos de una determinada columna en un grupo, debe utilizar la palabra clave DISTINCT junto con el nombre de la columna. Calculemos el número de calificaciones diferentes recibidas en cada disciplina:

Resultado:

El resultado puede incluir el valor del campo de agrupación y varios funciones agregadas y en condiciones de agrupación puede utilizar varios campos. En este caso, los grupos se forman en función de un conjunto de campos de agrupación específicos. Se pueden aplicar operaciones de funciones agregadas para unir varias tablas de origen. Por ejemplo, planteemos la pregunta: determinemos para cada grupo y cada disciplina el número de estudiantes que aprobaron con éxito el examen y la puntuación media en la disciplina.

Resultado:

no podemos usar funciones agregadas en la cláusula WHERE porque los predicados se evalúan en términos de una sola línea, y funciones agregadas- en términos de grupos de líneas.

La cláusula GROUP BY le permite definir un subconjunto de los valores de un campo particular en términos de otro campo y aplicar una función agregada al subconjunto. Esto hace posible combinar campos y funciones agregadas en una única cláusula SELECT. Funciones agregadas se puede utilizar tanto en la expresión para generar los resultados de la línea SELECT como en la expresión para la condición de procesamiento de los grupos HAVING generados. En este caso, cada función agregada se calcula para cada grupo seleccionado. Valores obtenidos del cálculo funciones agregadas, se puede utilizar para visualizar los resultados correspondientes o para condicionar la selección de grupos.

Creemos una consulta que muestre grupos en los que se recibió más de una mala calificación en una disciplina en los exámenes:

En el futuro, como ejemplo, trabajaremos no con la base de datos "Sesión", sino con la base de datos "Banco", que consta de una tabla F, que almacena la relación F que contiene información sobre cuentas en sucursales de un determinado banco:

F = (N, Nombre Completo, Sucursal, Fecha de Apertura, Fecha de Cierre, Saldo); Q = (Sucursal, Ciudad);

ya que sobre esta base es posible ilustrar más claramente el trabajo con funciones agregadas y agrupaciones.

Por ejemplo, supongamos que queremos encontrar el saldo total de las cuentas bancarias. Puede realizar una consulta separada para cada una de ellas seleccionando SUMA(Saldo) de la tabla para cada sucursal. GROUP BY, sin embargo, le permitirá ponerlos todos en un solo comando:

SELECCIONE Sucursal, SUMA(Restante) DEL GRUPO F POR Sucursal;

Se aplica GRUPO POR funciones agregadas de forma independiente para cada grupo definido utilizando el valor del campo Rama. El grupo consta de filas con el mismo valor del campo Sucursal y

Puede realizar procesamiento grupal generalizado de valores de campo. Esto se hace utilizando funciones agregadas. Las funciones agregadas producen un valor único para un grupo de tablas completo. SQL proporciona las siguientes funciones agregadas:

  • CONTAR– cuenta el número de filas de la tabla con valores no NULL del campo especificado como argumento.
  • SUMA– calcula la suma aritmética de todos los valores seleccionados para un campo determinado.
  • AVG– promedia todos los valores seleccionados de este campo.
  • MÁXIMO– muestra el valor más grande de todos los valores seleccionados para este campo.
  • MÍNIMO– muestra el valor más pequeño de todos los valores seleccionados para este campo.

    Usar funciones agregadas

    Las funciones agregadas se usan de manera similar a los nombres de campos en la cláusula SELECT de una consulta, con una excepción: toman nombres de campos como argumento. Sólo se pueden utilizar campos numéricos con SUMA Y AVG. CON CONTAR, MÁXIMO, Y MÍNIMO Se pueden utilizar campos numéricos y de caracteres. Cuando se usa con campos de caracteres MÁXIMO Y MÍNIMO los traducirá al equivalente ASCII. Esto significa que MÍNIMO elegirá el primero, y MÁXIMOúltimo valor en orden alfabético.

    Para encontrar el monto total de ventas en la tabla de ventas, tenemos que escribir la siguiente consulta:

    SELECCIONAR SUMA(SSum) DE Ventas

    Como resultado obtenemos:

    Esta consulta contó la cantidad de valores que no estaban en blanco en el campo SNum de la tabla Sells. Si reescribimos la consulta de la siguiente manera:

    SELECCIONAR RECUENTO (SDate) DE Ventas

    Como resultado obtenemos:

    RECUENTO DE Fecha
    4

    Se obtienen diferentes resultados de consulta al calcular lo que parece ser lo mismo porque uno de los valores del campo SDate está vacío ( NULO). Tenga cuidado al utilizar este tipo de consultas.




Arriba