Tuturial de SQL [Segunda Parte]

Tuturial de SQL [Segunda Parte]

sql

tutorial Saludos a todos los Taringueros!

de

segunda parte Éste post es la continuación de la Primera Parte

Tuturial de SQL [Segunda Parte]

sql Selección de tablas IV

tutorial El empleo de funciones para la explotación de los campos numéricos y otras utilidades. Ejemplos prácticos

de Además de los criterios hasta ahora explicados para realizar las consultas en tablas, SQL permite también aplicar un conjunto de funciones predefinidas. Estas funciones, aunque básicas, pueden ayudarnos en algunos momentos a expresar nuestra selección de una manera más simple sin tener que recurrir a operaciones adicionales por parte del script que estemos ejecutando.
Algunas de estas funciones son representadas en la tabla siguiente:


segunda parte

Dado que el campo de la función no existe en la base de datos, sino que lo estamos generando virtualmente, esto puede crear inconvenientes cuando estamos trabajando con nuestros scripts a la hora de tratar su valor y su nombre de campo. Es por ello que el valor de la función ha de ser recuperada a partir de un alias que nosotros especificaremos en la sentencia SQL a partir de la instrucción AS. La cosa podría quedar así:

Select Sum(total) As suma_pedidos From pedidos

A partir de esta sentencia calculamos la suma de los valores de todos los pedidos realizados y almacenamos ese valor en un campo virtual llamado suma_pedidos que podrá ser utilizado como cualquier otro campo por nuestras paginas dinámicas.

Por supuesto, todo lo visto hasta ahora puede ser aplicado en este tipo de funciones de modo que, por ejemplo, podemos establecer condiciones con la cláusula Where construyendo sentencias como esta:


Select Sum(cantidad) as suma_articulos From pedidos Where id_articulo=6

Esto nos proporcionaría la cantidad de ejemplares de un determinado libro que han sido vendidos.

Otra propiedad interesante de estas funciones es que permiten realizar operaciones con varios campos dentro de un mismo paréntesis:


Select Avg(total/cantidad) From pedidos

Esta sentencia da como resultado el precio medio al que se están vendiendo los libros. Este resultado no tiene por qué coincidir con el del precio medio de los libros presentes en el inventario, ya que, puede ser que la gente tenga tendencia a comprar los libros caros o los baratos:

Select Avg(precio) as precio_venta From articulos

Una cláusula interesante en el uso de funciones es Group By. Esta cláusula nos permite agrupar registros a los cuales vamos a aplicar la función. Podemos por ejemplo calcular el dinero gastado por cada cliente:

Select id_cliente, Sum(total) as suma_pedidos From pedidos Group By id_cliente

O saber el numero de pedidos que han realizado:

Select id_cliente, Count(*) as numero_pedidos From pedidos Group By id_cliente

Las posibilidades como vemos son numerosas y pueden resultar prácticas. Todo queda ahora a disposición de nuestras ocurrencias e imaginación.

Tuturial de SQL [Segunda Parte]

sql Consultas de selección

tutorial Las consultas de selección se utilizan para indicar al motor de datos que devuelva información de las bases de datos, esta información es devuelta en forma de conjunto de registros que se pueden almacenar en un objeto recordset

de Este conjunto de registros puede ser modificable.

Consultas básicas

La sintaxis básica de una consulta de selección es la siguiente:

SELECT 
   Campos 
FROM 
   Tabla


En donde campos es la lista de campos que se deseen recuperar y tabla es el origen de los mismos, por ejemplo:

SELECT 
   Nombre, Teléfono 
FROM 
   Clientes


Esta sentencia devuelve un conjunto de resultados con el campo nombre y teléfono de la tabla clientes.

Devolver Literales

En determinadas ocasiones nos puede interesar incluir una columna con un texto fijo en una consulta de selección, por ejemplo, supongamos que tenemos una tabla de empleados y deseamos recuperar las tarifas semanales de los electricistas, podríamos realizar la siguiente consulta:

SELECT 
   Empleados.Nombre, 'Tarifa semanal: ', Empleados.TarifaHora * 40 
FROM 
   Empleados 
WHERE 
   Empleados.Cargo = 'Electricista'


Ordenar los registros

Adicionalmente se puede especificar el orden en que se desean recuperar los registros de las tablas mediante la cláusula ORDER BY Lista de Campos. En donde Lista de campos representa los campos a ordenar. Ejemplo:

SELECT 
   CodigoPostal, Nombre, Telefono 
FROM 
   Clientes 
ORDER BY 
   Nombre


Esta consulta devuelve los campos CodigoPostal, Nombre, Telefono de la tabla Clientes ordenados por el campo Nombre.

Se pueden ordenar los registros por mas de un campo, como por ejemplo:


SELECT 
   CodigoPostal, Nombre, Telefono 
FROM 
   Clientes 
ORDER BY 
   CodigoPostal, Nombre


Incluso se puede especificar el orden de los registros: ascendente mediante la cláusula (ASC - se toma este valor por defecto) ó descendente (DESC).

SELECT 
   CodigoPostal, Nombre, Telefono 
FROM 
   Clientes 
ORDER BY 
   CodigoPostal DESC , Nombre ASC


Uso de Indices de las tablas

Si deseamos que la sentencia SQL utilice un índice para mostrar los resultados se puede utilizar la palabra reservada INDEX de la siguiente forma:

SELECT ... FROM Tabla (INDEX=Indice) ...

Normalmente los motores de las bases de datos deciden que índice se debe utilizar para la consulta, para ello utilizan criterios de rendimiento y sobre todo los campos de búsqueda especificados en la cláusula WHERE. Si se desea forzar a no utilizar ningún índice utilizaremos la siguiente sintaxis:

SELECT ... FROM Tabla (INDEX=0) ...

Consultas con Predicado

El predicado se incluye entre la cláusula y el primer nombre del campo a recuperar, los posibles predicados son:

Predicado | Descripción

ALLDevuelve todos los campos de la tabla
TOPDevuelve un determinado número de registros de la tabla
DISTINCTOmite los registros cuyos campos seleccionados coincidan totalmente
DISTINCTOWOmite los registros duplicados basándose en la totalidad del registro y no sólo en los campos seleccionados.


ALL

Si no se incluye ninguno de los predicados se asume ALL. El Motor de base de datos selecciona todos los registros que cumplen las condiciones de la instrucción SQL y devuelve todos y cada uno de sus campos. No es conveniente abusar de este predicado ya que obligamos al motor de la base de datos a analizar la estructura de la tabla para averiguar los campos que contiene, es mucho más rápido indicar el listado de campos deseados.

SELECT ALL 
FROM 
   Empleados
SELECT * 
FROM 
   Empleados


TOP

Devuelve un cierto número de registros que entran entre al principio o al final de un rango especificado por una cláusula ORDER BY. Supongamos que queremos recuperar los nombres de los 25 primeros estudiantes del curso 1994:

SELECT TOP 25 
   Nombre, Apellido 
FROM 
   Estudiantes 
ORDER BY 
   Nota DESC


Si no se incluye la cláusula ORDER BY, la consulta devolverá un conjunto arbitrario de 25 registros de la tabla de Estudiantes. El predicado TOP no elige entre valores iguales. En el ejemplo anterior, si la nota media número 25 y la 26 son iguales, la consulta devolverá 26 registros. Se puede utilizar la palabra reservada PERCENT para devolver un cierto porcentaje de registros que caen al principio o al final de un rango especificado por la cláusula ORDER BY. Supongamos que en lugar de los 25 primeros estudiantes deseamos el 10 por ciento del curso:

SELECT TOP 10 PERCENT 
   Nombre, Apellido 
FROM 
   Estudiantes 
ORDER BY 
   Nota DESC


El valor que va a continuación de TOP debe ser un entero sin signo. TOP no afecta a la posible actualización de la consulta.

DISTINCT

Omite los registros que contienen datos duplicados en los campos seleccionados. Para que los valores de cada campo listado en la instrucción SELECT se incluyan en la consulta deben ser únicos. Por ejemplo, varios empleados listados en la tabla Empleados pueden tener el mismo apellido. Si dos registros contienen López en el campo Apellido, la siguiente instrucción SQL devuelve un único registro:

SELECT DISTINCT 
   Apellido 
FROM 
   Empleados


Con otras palabras el predicado DISTINCT devuelve aquellos registros cuyos campos indicados en la cláusula SELECT posean un contenido diferente. El resultado de una consulta que utiliza DISTINCT no es actualizable y no refleja los cambios subsiguientes realizados por otros usuarios.

DISTINCTROW

Este predicado no es compatible con ANSI. Que yo sepa a día de hoy sólo funciona con ACCESS.

Devuelve los registros diferentes de una tabla; a diferencia del predicado anterior que sólo se fijaba en el contenido de los campos seleccionados, éste lo hace en el contenido del registro completo independientemente de los campos indicados en la cláusula SELECT.


SELECT DISTINCTROW 
   Apellido 
FROM Empleados


Si la tabla empleados contiene dos registros: Antonio López y Marta López el ejemplo del predicado DISTINCT devuelve un único registro con el valor López en el campo Apellido ya que busca no duplicados en dicho campo. Este último ejemplo devuelve dos registros con el valor López en el apellido ya que se buscan no duplicados en el registro completo.

ALIAS

En determinadas circunstancias es necesario asignar un nombre a alguna columna determinada de un conjunto devuelto, otras veces por simple capricho o porque estamos recuperando datos de diferentes tablas y resultan tener un campo con igual nombre. Para resolver todas ellas tenemos la palabra reservada AS que se encarga de asignar el nombre que deseamos a la columna deseada. Tomado como referencia el ejemplo anterior podemos hacer que la columna devuelta por la consulta, en lugar de llamarse apellido (igual que el campo devuelto) se llame Empleado. En este caso procederíamos de la siguiente forma:

SELECT DISTINCTROW 
   Apellido AS Empleado 
FROM Empleados


AS no es una palabra reservada de ANSI, existen diferentes sistemas de asignar los alias en función del motor de bases de datos. En ORACLE para asignar un alias a un campo hay que hacerlo de la siguiente forma:

SELECT 
   Apellido AS "Empleado" 
FROM Empleados


También podemos asignar alias a las tablas dentro de la consulta de selección, en esta caso hay que tener en cuenta que en todas las referencias que deseemos hacer a dicha tabla se ha de utilizar el alias en lugar del nombre. Esta técnica será de gran utilidad más adelante cuando se estudien las vinculaciones entre tablas. Por ejemplo:

SELECT 
   Apellido AS Empleado 
FROM 
   Empleados AS Trabajadores


Para asignar alias a las tablas en ORACLE y SQL-SERVER los alias se asignan escribiendo el nombre de la tabla, dejando un espacio en blanco y escribiendo el Alias (se asignan dentro de la cláusula FROM).

SELECT 
   Trabajadores.Apellido (1) AS Empleado 
FROM 
   Empleados Trabajadores


(1)Esta nomenclatura [ Tabla].[ Campo] se debe utilizar cuando se está recuperando un campo cuyo nombre se repite en varias de las tablas que se utilizan en la sentencia. No obstante cuando en la sentencia se emplean varias tablas es aconsejable utilizar esta nomenclatura para evitar el trabajo que supone al motor de datos averiguar en que tabla está cada uno de los campos indicados en la cláusula SELECT.

Recuperar Información de una base de Datos Externa

Para concluir este parte se debe hacer referencia a la recuperación de registros de bases de datos externas. Es ocasiones es necesario la recuperación de información que se encuentra contenida en una tabla que no se encuentra en la base de datos que ejecutará la consulta o que en ese momento no se encuentra abierta, esta situación la podemos salvar con la palabra reservada IN de la siguiente forma:

SELECT 
   Apellido AS Empleado 
FROM 
   Empleados IN'c: databasesgestion.mdb'


En donde c: databasesgestion.mdb es la base de datos que contiene la tabla Empleados. Esta técnica es muy sencilla y común en bases de datos de tipo ACCESS en otros sistemas como SQL-SERVER u ORACLE, la cosa es más complicada la tener que existir relaciones de confianza entre los servidores o al ser necesaria la vinculación entre las bases de datos. Este ejemplo recupera la información de una base de datos de SQL-SERVER ubicada en otro servidor (se da por supuesto que los servidores están lincados):

SELECT 
   Apellido 
FROM 
   Servidor1.BaseDatos1.dbo.Empleados


segunda parte

Tuturial de SQL [Segunda Parte] Criterios de selección en SQL

sql Estudiaremos las posibilidades de filtrar los registros con el fin de recuperar solamente aquellos que cumplan unas condiciones preestablecidas

tutorial En el apartado anterior se vio la forma de recuperar los registros de las tablas, las formas empleadas devolvían todos los registros de la mencionada tabla. A lo largo de este apartado se estudiarán las posibilidades de filtrar los registros con el fin de recuperar solamente aquellos que cumplan unas condiciones preestablecidas.
Antes de comenzar el desarrollo de este apartado hay que recalcar tres detalles de vital importancia. El primero de ellos es que cada vez que se desee establecer una condición referida a un campo de texto la condición de búsqueda debe ir encerrada entre comillas simples; la segunda es que no es posible establecer condiciones de búsqueda en los campos memo y; la tercera y última hace referencia a las fechas. A día de hoy no he sido capaz de encontrar una sintaxis que funcione en todos los sistemas, por lo que se hace necesario particularizarlas según el banco de datos:


Banco de Datos | Sintaxis

SQL-SERVER | Fecha = #mm-dd-aaaa#
ORACLE | Fecha = to_date('YYYYDDMM','aaaammdd',)
ACCESS | Fecha = #mm-dd-aaaa#


Ejemplo

Banco de DatosEjemplo (para grabar la fecha 18 de mayo de 1969)

SQL-SERVER | Fecha = #05-18-1969# ó Fecha = 19690518
ORACLE | Fecha = to_date('YYYYDDMM', '19690518')
ACCESS | Fecha = #05-18-1969#


Referente a los valores lógicos True o False cabe destacar que no son reconocidos en ORACLE, ni en este sistema de bases de datos ni en SQL-SERVER existen los campos de tipo "SI/NO" de ACCESS; en estos sistemas se utilizan los campos BIT que permiten almacenar valores de 0 ó 1. Internamente, ACCESS, almacena en estos campos valores de 0 ó -1, así que todo se complica bastante, pero aprovechando la coincidencia del 0 para los valores FALSE, se puede utilizar la sintaxis siguiente que funciona en todos los casos: si se desea saber si el campo es falso "... CAMPO = 0" y para saber los verdaderos "CAMPO <> 0".

Operadores Lógicos

Los operadores lógicos soportados por SQL son: AND, OR, XOR, Eqv, Imp, Is y Not. A excepción de los dos últimos todos poseen la siguiente sintaxis:

<expresión1> operador <expresión2>

En donde expresión1 y expresión2 son las condiciones a evaluar, el resultado de la operación varía en función del operador lógico. La tabla adjunta muestra los diferentes posibles resultados:

<expresión1> | Operador | <expresión2> | Resultado

Verdad | AND | Falso | Falso
Verdad | AND | Verdad | Verdad
Falso | AND | Verdad | Falso
Falso | AND | Falso | Falso
Verdad | OR | Falso | Verdad
Verdad | OR | Verdad | Verdad
Falso | OR | Verdad | Verdad
Falso | OR | Falso | Falso
Verdad | XOR | Verdad | Falso
Verdad | XOR | Falso | Verdad
Falso | XOR | Verdad | Verdad
Falso | XOR | Falso | Falso
Verdad | Eqv | Verdad | Verdad
Verdad | Eqv | Falso | Falso
Falso | Eqv | Verdad | Falso
Falso | Eqv | Falso | Verdad
Verdad | Imp | Verdad | Verdad
Verdad | Imp | Falso | Falso
Verdad | Imp | Null | Null
Falso | Imp | Verdad | Verdad
Falso | Imp | Falso | Verdad
Falso | Imp | Null | Verdad
Null | Imp | Verdad | Verdad
Null | Imp | Falso | Null
Null | Imp | Null | Null


Si a cualquiera de las anteriores condiciones le anteponemos el operador NOT el resultado de la operación será el contrario al devuelto sin el operador NOT.
El último operador denominado Is se emplea para comparar dos variables de tipo objeto <Objeto1> Is <Objeto2>. este operador devuelve verdad si los dos objetos son iguales.


SELECT * 
FROM 
    Empleados 
WHERE 
    Edad > 25 AND Edad < 50


SELECT * 
FROM 
    Empleados 
WHERE 
    (Edad > 25 AND Edad < 50) 
   OR 
   Sueldo = 100


SELECT * 
FROM 
    Empleados WHERE 
    NOT Estado = 'Soltero'


SELECT * 
FROM 
    Empleados 
WHERE 
    (Sueldo >100 AND Sueldo < 500) 
    OR 
    (Provincia = 'Madrid' AND Estado = 'Casado')


Intervalos de Valores

Para indicar que deseamos recuperar los registros según el intervalo de valores de un campo emplearemos el operador Between cuya sintaxis es:

campo [Not] Between valor1 And valor2 (la condición Not es opcional)

En este caso la consulta devolvería los registros que contengan en "campo" un valor incluido en el intervalo valor1, valor2 (ambos inclusive). Si anteponemos la condición Not devolverá aquellos valores no incluidos en el intervalo.

SELECT * 
FROM 
    Pedidos 
WHERE 
    CodPostal Between 28000 And 28999


(Devuelve los pedidos realizados en la provincia de Madrid).

El Operador Like

Se utiliza para comparar una expresión de cadena con un modelo en una expresión SQL. Su sintaxis es:

expresión Like modelo

En donde expresión es una cadena modelo o campo contra el que se compara expresión. Se puede utilizar el operador Like para encontrar valores en los campos que coincidan con el modelo especificado. Por modelo puede especificar un valor completo (Ana María), o se puede utilizar una cadena de caracteres comodín como los reconocidos por el sistema operativo para encontrar un rango de valores (Like An*).

El operador Like se puede utilizar en una expresión para comparar un valor de un campo con una expresión de cadena. Por ejemplo, si introduce Like C* en una consulta SQL, la consulta devuelve todos los valores de campo que comiencen por la letra C. En una consulta con parámetros, puede hacer que el usuario escriba el modelo que se va a utilizar.

El ejemplo siguiente devuelve los datos que comienzan con la letra P seguido de cualquier letra entre A y F y de tres dígitos:


Like 'P[A-F]###'

Este ejemplo devuelve los campos cuyo contenido empiece con una letra de la A a la D seguidas de cualquier cadena.

Like '[A-D]*'

En la tabla siguiente se muestra cómo utilizar el operador Like para comprobar expresiones con diferentes modelos.

ACCESS

Tipo de coincidencia | Modelo Planteado | Coincide | No coincide

Varios caracteres | 'a*a' | aa', 'aBa', 'aBBBa' | 'aBC'
Carácter especial | 'a
  • a' | 'a*a' | 'aaa'
  • Varios caracteres | 'ab*' | 'abcdefg', 'abc' | 'cab', 'aab'
    Un solo carácter | 'a?a' | 'aaa', 'a3a', 'aBa' | 'aBBBa'
    Un solo dígito | 'a#a''a0a', 'a1a', 'a2a' | 'aaa', 'a10a'
    Rango de caracteres | '[a-z]' | 'f', 'p', 'j' | '2', '&'
    Fuera de un rango | '[!a-z]' | '9', '&', '%' | 'b', 'a'
    Distinto de un dígito | '[!0-9]' | 'A', 'a', '&', '~' | '0', '1', '9'
    Combinada | 'a[!b-m]#' | 'An9', 'az0', 'a99' | 'abc', 'aj0'


    SQL-SERVER

    Ejemplo | Descripción
    LIKE 'A%' | Todo lo que comience por A
    LIKE '_NG' | Todo lo que comience por cualquier carácter y luego siga NG
    LIKE '[AF]%' | Todo lo que comience por A ó F
    LIKE '[A-F]%' | Todo lo que comience por cualquier letra comprendida entre la A y la F
    LIKE '[A^B]%' | Todo lo que comience por A y la segunda letra no sea una B

    En determinado motores de bases de datos, esta cláusula, no reconoce el asterisco como carácter comodín y hay que sustituirlo por el carácter tanto por ciento (%).


    El Operador In

    Este operador devuelve aquellos registros cuyo campo indicado coincide con alguno de los en una lista. Su sintaxis es:

    expresión [Not] In(valor1, valor2, . . .)

    SELECT * 
    FROM 
        Pedidos 
    WHERE 
        Provincia In ('Madrid', 'Barcelona', 'Sevilla')


    La cláusula WHERE

    La cláusula WHERE puede usarse para determinar qué registros de las tablas enumeradas en la cláusula FROM aparecerán en los resultados de la instrucción SELECT. Después de escribir esta cláusula se deben especificar las condiciones expuestas en los apartados anteriores. Si no se emplea esta cláusula, la consulta devolverá todas las filas de la tabla. WHERE es opcional, pero cuando aparece debe ir a continuación de FROM.

    SELECT 
        Apellidos, Salario 
    FROM 
        Empleados 
    WHERE 
        Salario = 21000


    SELECT 
       IdProducto, Existencias 
    FROM 
       Productos 
    WHERE 
        Existencias <= NuevoPedido


    SELECT * 
    FROM 
       Pedidos 
    WHERE 
       FechaEnvio = #05-30-1994#


    SELECT 
        Apellidos, Nombre 
    FROM 
        Empleados 
    WHERE 
       Apellidos = 'King'


    SELECT 
        Apellidos, Nombre 
    FROM 
       Empleados 
    WHERE 
       Apellidos Like 'S*'


    SELECT 
        Apellidos, Salario 
    FROM 
        Empleados 
    WHERE 
        Salario Between 200 And 300


    SELECT 
        Apellidos, Salario 
    FROM 
        Empleados 
    WHERE 
        Apellidos Between 'Lon' And 'Tol'


    SELECT 
        IdPedido, FechaPedido 
    FROM 
        Pedidos 
    WHERE 
         FechaPedido Between #01-01-1994# And #12-31-1994#


    SELECT 
        Apellidos, Nombre, Ciudad 
    FROM 
       Empleados 
    WHERE 
       Ciudad In ('Sevilla', 'Los Angeles', 'Barcelona')


    de

    segunda parte Criterios de selección en SQL II

    Tuturial de SQL [Segunda Parte] Seguimos con el group by, avg, sum y con el compute de sql-server

    sql Combina los registros con valores idénticos, en la lista de campos especificados, en un único registro. Para cada registro se crea un valor sumario si se incluye una función SQL agregada, como por ejemplo Sum o Count, en la instrucción SELECT. Su sintaxis es:

    SELECT campos FROM tabla WHERE criterio GROUP BY campos del grupo

    GROUP BY es opcional. Los valores de resumen se omiten si no existe una función SQL agregada en la instrucción SELECT. Los valores Null en los campos GROUP BY se agrupan y no se omiten. No obstante, los valores Null no se evalúan en ninguna de las funciones SQL agregadas.

    Se utiliza la cláusula WHERE para excluir aquellas filas que no desea agrupar, y la cláusula HAVING para filtrar los registros una vez agrupados.
    A menos que contenga un dato Memo u Objeto OLE, un campo de la lista de campos GROUP BY puede referirse a cualquier campo de las tablas que aparecen en la cláusula FROM, incluso si el campo no esta incluido en la instrucción SELECT, siempre y cuando la instrucción SELECT incluya al menos una función SQL agregada.

    Todos los campos de la lista de campos de SELECT deben o bien incluirse en la cláusula GROUP BY o como argumentos de una función SQL agregada.


    SELECT 
       IdFamilia, Sum(Stock) AS StockActual 
    FROM 
        Productos 
    GROUP BY 
        IdFamilia


    Una vez que GROUP BY ha combinado los registros, HAVING muestra cualquier registro agrupado por la cláusula GROUP BY que satisfaga las condiciones de la cláusula HAVING.

    HAVING es similar a WHERE, determina qué registros se seleccionan. Una vez que los registros se han agrupado utilizando GROUP BY, HAVING determina cuales de ellos se van a mostrar.


    SELECT 
       IdFamilia, Sum(Stock) AS StockActual 
    FROM 
        Productos 
    GROUP BY 
        IdFamilia 
    HAVING 
        StockActual > 100 
       AND
       NombreProducto Like BOS*


    AVG

    Calcula la media aritmética de un conjunto de valores contenidos en un campo especificado de una consulta. Su sintaxis es la siguiente

    Avg(expr)

    En donde expr representa el campo que contiene los datos numéricos para los que se desea calcular la media o una expresión que realiza un cálculo utilizando los datos de dicho campo. La media calculada por Avg es la media aritmética (la suma de los valores dividido por el número de valores). La función Avg no incluye ningún campo Null en el cálculo.

    SELECT 
       Avg(Gastos) AS Promedio 
    FROM 
       Pedidos 
    WHERE 
       Gastos > 100


    Count

    Calcula el número de registros devueltos por una consulta. Su sintaxis es la siguiente

    Count(expr)

    En donde expr contiene el nombre del campo que desea contar. Los operandos de expr pueden incluir el nombre de un campo de una tabla, una constante o una función (la cual puede ser intrínseca o definida por el usuario pero no otras de las funciones agregadas de SQL). Puede contar cualquier tipo de datos incluso texto.

    Aunque expr puede realizar un cálculo sobre un campo, Count simplemente cuenta el número de registros sin tener en cuenta qué valores se almacenan en los registros. La función Count no cuenta los registros que tienen campos null a menos que expr sea el carácter comodín asterisco (*). Si utiliza un asterisco, Count calcula el número total de registros, incluyendo aquellos que contienen campos null. Count(*) es considerablemente más rápida que Count(Campo). No se debe poner el asterisco entre dobles comillas ('*').


    SELECT 
       Count(*) AS Total 
    FROM 
       Pedidos


    Si expr identifica a múltiples campos, la función Count cuenta un registro sólo si al menos uno de los campos no es Null. Si todos los campos especificados son Null, no se cuenta el registro. Hay que separar los nombres de los campos con ampersand ( & ).

    SELECT 
       Count(FechaEnvío & Transporte) AS Total 
    FROM 
        Pedidos


    Podemos hacer que el gestor cuente los datos diferentes de un determinado campo

    SELECT 
       Count(DISTINCT Localidad) AS Total 
    FROM 
       Pedidos


    Max, Min

    Devuelven el mínimo o el máximo de un conjunto de valores contenidos en un campo especifico de una consulta. Su sintaxis es:

    Min(expr)

    Max(expr)

    En donde expr es el campo sobre el que se desea realizar el cálculo. Expr pueden incluir el nombre de un campo de una tabla, una constante o una función (la cual puede ser intrínseca o definida por el usuario pero no otras de las funciones agregadas de SQL).

    SELECT 
    Min(Gastos) AS ElMin 
    FROM 
       Pedidos 
    WHERE 
       Pais = 'España'


    SELECT 
       Max(Gastos) AS ElMax 
    FROM 
       Pedidos 
    WHERE 
        Pais = 'España'


    StDev, StDevP

    Devuelve estimaciones de la desviación estándar para la población (el total de los registros de la tabla) o una muestra de la población representada (muestra aleatoria). Su sintaxis es:

    StDev(expr)

    StDevP(expr)

    En donde expr representa el nombre del campo que contiene los datos que desean evaluarse o una expresión que realiza un cálculo utilizando los datos de dichos campos. Los operandos de expr pueden incluir el nombre de un campo de una tabla, una constante o una función (la cual puede ser intrínseca o definida por el usuario pero no otras de las funciones agregadas de SQL).

    StDevP evalúa una población, y StDev evalúa una muestra de la población. Si la consulta contiene menos de dos registros (o ningún registro para StDevP), estas funciones devuelven un valor Null (el cual indica que la desviación estándar no puede calcularse).


    SELECT 
       StDev(Gastos) AS Desviación 
    FROM 
        Pedidos 
    WHERE 
        País = 'España'


    SELECT 
        StDevP(Gastos) AS Desviación 
    FROM 
       Pedidos 
    WHERE 
        País = 'España'


    Sum

    Devuelve la suma del conjunto de valores contenido en un campo especifico de una consulta. Su sintaxis es:

    Sum(expr)

    En donde expr representa el nombre del campo que contiene los datos que desean sumarse o una expresión que realiza un cálculo utilizando los datos de dichos campos. Los operandos de expr pueden incluir el nombre de un campo de una tabla, una constante o una función (la cual puede ser intrínseca o definida por el usuario pero no otras de las funciones agregadas de SQL).

    SELECT 
        Sum(PrecioUnidad * Cantidad) AS Total 
    FROM 
        DetallePedido


    Var, VarP

    Devuelve una estimación de la varianza de una población (sobre el total de los registros) o una muestra de la población (muestra aleatoria de registros) sobre los valores de un campo. Su sintaxis es:

    Var(expr)

    VarP(expr)

    VarP evalúa una población, y Var evalúa una muestra de la población. Expr el nombre del campo que contiene los datos que desean evaluarse o una expresión que realiza un cálculo utilizando los datos de dichos campos. Los operandos de expr pueden incluir el nombre de un campo de una tabla, una constante o una función (la cual puede ser intrínseca o definida por el usuario pero no otras de las funciones agregadas de SQL)

    Si la consulta contiene menos de dos registros, Var y VarP devuelven Null (esto indica que la varianza no puede calcularse). Puede utilizar Var y VarP en una expresión de consulta o en una Instrucción SQL.


    SELECT 
       Var(Gastos) AS Varianza 
    FROM 
        Pedidos 
    WHERE 
        País = 'España'


    SELECT 
        VarP(Gastos) AS Varianza 
    FROM 
       Pedidos 
    WHERE 
       País = 'España'


    COMPUTE de SQL-SERVER

    Esta cláusula añade una fila en el conjunto de datos que se está recuperando, se utiliza para realizar cálculos en campos numéricos. COMPUTE actúa siempre sobre un campo o expresión del conjunto de resultados y esta expresión debe figurar exactamente igual en la cláusula SELECT y siempre se debe ordenar el resultado por la misma o al memos agrupar el resultado. Esta expresión no puede utilizar ningún ALIAS.

    SELECT 
       IdCliente, Count(IdPedido) 
    FROM 
       Pedidos 
    GROUP BY 
       IdPedido 
    HAVING 
       Count(IdPedido) > 20 
    COMPUTE 
        Sum(Count(IdPedido))


    SELECT 
        IdPedido, (PrecioUnidad * Cantidad - Descuento) 
    FROM 
       [Detalles de Pedidos] 
    ORDER BY 
        IdPedido 
    COMPUTE 
       Sum((PrecioUnidad * Cantidad - Descuento)) // Calcula el Total 
        BY IdPedido // Calcula el Subtotal


    tutorial

    de Fin de la Segunda Parte de éste Tutorial

    segunda parte

    Tuturial de SQL [Segunda Parte] Seguime [Así estás al tanto de mis últimas actividades]

    sql Agregá el post a Favoritos [Así no pierdes el post]

    tutorial Mandame un MP [Si tenés alguna duda o sugerencia]

    de Deja tu Comentario [Así compartís con los demás]

    segunda parte

    Tuturial de SQL [Segunda Parte] Tercera Parte de éste Tutorial

    sql

    tutorial Únete a la Comunidad de los Muringueros

    de

    segunda parte

    2 comentarios - Tuturial de SQL [Segunda Parte]

    @alexb90
    Che, te hago una pregunta... tengo:

    Listar el DNI, Apellido, Nombre, Legajo, Año_Ingreso de aquellos alumnos que cursaron todos los cursos.

    Persona = ( DNI, Apellido, Nombre, Fecha_Nacimiento, Estado_Civil, Genero)
    Alumno = ( DNI, Legajo, Año_Ingreso)
    Alumnocurso = ( DNI, Cod_Curso, Año, Desempeño, Calificacion)
    Curso = ( Cod_Curso, Nombre, Descripcion, Fecha_Creacion, Duracion )

    Hice:


    SELECT p.DNI, p.Apellido, p.Nombre, a.Legajo, a.Año_Ingreso
    FROM persona p
    INNER JOIN alumno a ON ( p.DNI = a.DNI )
    INNER JOIN alumnocurso ac ON ( a.DNI = ac.DNI )
    WHERE ( ac.Cod_Curso = ALL ( SELECT Cod_Curso FROM curso ) )


    Pero no me nada...

    Alguna sugerencia??