Consultas SQL sobre una tabla

9. September 2010 19:27 by Oscar.SS in Desarrollo Empresarial  //  Tags:   //   Comments (0)

Estaba haciendo limpieza de archivos en el ordenata (muy recomendable de vez en cuando) y me he encontrado unos cuantos scripts de SQL de cuando yo intentaba aprender todo esto de las consultas a bases de datos. Y me he dicho, en lugar de borrarlos...¿por qué no los publico?...¡lo mismo le son de utilidad a álguien!...¡como lo fueron para mí en su día!.

Así que en este artículo y el siguiente colocaré el código de estos scripts SQL que pueden servir de consulta rápida por si algo se olvida. También, al final de cada artículo dejaré para descarga los archivos de scripts por si queréis ejecutarlos en vuestra máquina.

Las consultas atacan la conocida base de datos Northwind de ejemplo de Microsoft y que podéis descargar gratuitamente en este enlace.

Antes de comenzar con el código mencionar que estos ejemplos solo abarcan las consultas SELECT del Lenguaje de Manipulación de Datos (DML) o ingles Data Definition Language. En el código podremos encontrar algunos elementos únicos del lenguaje Transact SQL y que por tanto no se encuentran en el estándar ANSI de SQL.

 

--------------------------------------------------------------------------------------------------------------------
--SINTAXIS COMPLETA DE LA INSTRUCCIÓN SELECT--
--------------------------------------------------------------------------------------------------------------------

SELECT [ALL DISTINCT] [* / ListaColumnas] AS NombreNuevo,  
        Funciones Agregación [COUNT(* / ListaColumnas), MAX, MIN, SUM, 
AVG]
FROM NombreTabla
WHERE NombreColumna [<, >, ,..., BETWEEN ANDLIKE % / _, IS (NOTNULLIN]
GROUP BY ListaColumnas(Funciones Agregación)
HAVING Condiciones Grupos
ORDER BY ListaColumnas [ASC DESC]


--------------------------------------------------------------------------------------------------------------------
--INSTRUCCIONES SELECT ELEMENTALES--
--------------------------------------------------------------------------------------------------------------------

--1. Mostrar todas (*) las columnas de una tabla (from).
select from dbo.Products

--2. Mostrar solo las columnas especificadas.
select ProductID, ProductName, UnitPrice, UnitsInStock from dbo.Products

--3. Incluir (ALL) filas duplicadas (valor predeterminado).
select all from dbo.Products --Es exactamente lo mismo que la instrucción 1.

--4. No incluir (DISTINCT) filas duplicadas.
select distinct from dbo.Products

--5. Renombrar (AS) columnas.
select ProductID as Identificador, ProductName as [Nombre Producto], UnitPrice as [Precio Unidad],
UnitsInStock 
as UnidadesStock from dbo.Products

--6. Renombrar (AS) tablas.
select from dbo.Products as Productos

--------------------------------------------------------------------------------------------------------------------
--INSTRUCCIONES WHERE (Condiciones en Select)--
--------------------------------------------------------------------------------------------------------------------

--1. Condiciones con expresiones matemáticas boleanas (>, <, =, >=, <=, != ó <>).
    --(Mostrar solo los productos con un precio mayor que 25)
select from dbo.Products
where UnitPrice > 25

    
--(Mostrar el nombre de los productos con precio igual a 21)
select ProductName as Nombre from dbo.Products
where UnitPrice 21

--2. Condiciones de intervalos numéricos (BETWEEN AND).
    --(Mostrar los productos cuyo precio esta entre 25 y 35)
select from Products
where UnitPrice between 25 and 35

--3. Condiciones de cadenas de caracteres (LIKE _ , %).
    --(Mostrar todos los datos de los clientes cuyo nombre comienza por A)
select  from Customers
where ContactName like 'A%'  -- El '%' significa cualquier cadena de caracteres.

    --(Mostrar los Paises que comienzan por U y después un solo caracter).
select Country as Paises from Customers
where Country like 'U_'  --El '_' significa cualquier caracter.

--4. Mostrar solamente las filas con valores nulos (IS NULL) en una columna determinada.
select from dbo.Customers
where Region is null

--5. Mostrar solamente las filas con valores no nulos (IS NOT NULL) en una columna determinada.
select from Customers
where Fax is not null

--6. Mostrar valores determinados (IN).
select from Products
where UnitPrice in(10203040)

--7. Mostrar valores condicionalmente en función de un grupo de valores de una columna (ANY/SOME)
    --La clausula ANY es equivalente a SOME.
    --Cuando tenemos una consulta que devuelve un conjunto de resultados podemos necesitar compararlos
    --todos ellos y de una vez con otro valor. Lo mejor es ver un ejemplo de estas expresiones:

--   Condición          Expresión Equivalente
-- x > ANY (3, 5, 9)         x > 3
-- x > ANY (1, 2)            x > 1
-- x < ANY (1, 2)            x < 2
-- x = ANY (1, 2)           (x = 1) OR (x = 2)
-- x <> ANY (1, 2)          (x <> 1) OR (x <> 2)

    --Mostrar los productos cuando su precio es mayor que los precios de los detalles 
    --de pedidos, cuando la cantidad del pedido es 130.
   
select from Products
where UnitPrice > ANY
    
(select UnitPrice from [Order Details] where Quantity 130-- Esta consulta devuelve 18.00 y 35.25.
    
    --Por lo tanto solo se mostrarán productos cuyo precio sea mayor que 18.00, incluido 35.25 si lo hubiera.
   
    
--8. Con la clausula ALL podemos hacer lo mismo pero en este caso devolverá todos los productos 
     --cuyo precio sea mayor que todos los precios de los detalles de pedidos de 130. Es decir, mayor que
     --todos los valores devueltos por la segunda consulta (18.00, 35.25), o lo que es lo mismo,
     --mayor que 35.25

select from Products
where UnitPrice > ALL
    
(select UnitPrice from [Order Details] where Quantity 130)

--9. Comprobar la existencia de un registro.
    
    --Mostrar los empleados cuya ciudad también exista en la tabla de empleados.

select LastName, FirstName, City from Employees E
where exists
    
(select from Customers C
    
where E.City C.City)


--------------------------------------------------------------------------------------------------------------------
--INTRUCCIONES ORDER BY (Ordenación en Select)--
--------------------------------------------------------------------------------------------------------------------

--1. Orden ascendente de filas.
    --(Tabla Productos ordenada por el precio de menor a mayor).
select from dbo.Products 
order by UnitPrice asc 

-- ASC es el valor predeterminado, se puede omitir.
select from Products 
order by UnitPrice

--2. Orden descendente de filas.
select from Products 
order by UnitsInStock desc

--3. Combinaciones de orden en distintas filas.
select ProductID, ProductName, UnitPrice, UnitsInStock from dbo.Products
order by UnitPrice, UnitsInStock desc

--------------------------------------------------------------------------------------------------------------------
--SUBCONSULTAS EN SELECT O CONSULTAS ANIDADAS--
--------------------------------------------------------------------------------------------------------------------

-- Una subconsulta es una consulta SELECT dentro de un WHERE en una consulta previa SELECT. Es decir, realizamos 
-- dentro de una consulta, otra consulta para mostrar datos especificos de la primera consulta. Ejemplos:

--1. Mostrar todos los empleados que tengan el mismo sexo (TitleOfCourtesy) que el empleado 9 (EmployeeID).
select from dbo.Employees
where TitleOfCourtesy (select TitleOfCourtesy from dbo.Employees 
                            
where EmployeeID 9--Esta subconsulta devuelve 'Ms'.

--2. Mostrar todos los productos de las categorías (bdo.Categories) bebidas (Beverages) y condimentos (Condiments).
select from dbo.Products
where CategoryID in (select CategoryID from dbo.Categories
                    
where CategoryName in ('Beverages','Condiments')) --Esta subconsulta devuelve 1 y 2.

--------------------------------------------------------------------------------------------------------------------
--FUNCIONES DE AGREGACIÓN EN SELECT--
--------------------------------------------------------------------------------------------------------------------

--1. Obtener el número de filas de una tabla --> COUNT(*).
select count(*) from dbo.Customers --Se cuentan todos los valores, incluidos los NULL.

-- Se puede dar nombre a esta columna de la siguiente forma.
select count(*) as [Número de filas] from dbo.Customers

--2. Obtener el múmero de filas de una columna determinada --> COUNT(NombreColumna).
select count(Region) as [NºFilas no NULL]from dbo.Customers --No se incluyen los valores NULL.

--3. Obtener número de filas para varias columnas determinadas.
select count(Region) as FilasNoNULL_Region, count(Fax) as FilasNoNULL_Fax from dbo.Customers

--4. Obtener el valor máximo (MAX) y mínimo (MIN) de una columna.
select max(UnitPrice) as [Precio máximo], min(UnitsInStock) as [Stock mínimo] from dbo.Products

--5. Obtener un sumatorio (SUM) de una columna determinada.
select sum(Freight) as [Peso Total] from dbo.Orders

--6. Obtener la media (AVG) de los valores de una columna determinada.
select avg(Freight) as [Peso Medio] from dbo.Orders

--------------------------------------------------------------------------------------------------------------------
--INSTRUCCIÓN GROUP BY (Agrupamiento de filas en funciones de agregación)--
--------------------------------------------------------------------------------------------------------------------

--La instrucción GROUP BY permite especificar las columnas sobre las que se quieren aplicar las funciones de 
--agregación en lugar de hacerlo en una tabla completa. Es decir, muestra un resultado de la función de agregación
--para cada elemento de la columna que especifiquemos. Ejemplos:

--1. Mostrar cuantas veces se repite cada precio de los productos.
select UnitPrice, count(*) as [Filas con este precio] from Products
group by UnitPrice

--2. Mostrar número de clientes de cada region y ciudad de USA.
select Region, City, count(*) as [Nº Clientes] from Customers
where Country 'USA'
group by Region, City
order by [Nº Clientes] desc

--NOTA 1: Siempre debe especificarse las mismas columnas en SELECT que en GROUP BY.
--NOTA 2: Es una buena práctica ordenar (ORDER BY) los elementos cuando se realizan este tipo de consultas.

--------------------------------------------------------------------------------------------------------------------
--INSTRUCCIÓN HAVING (Condiciones en los resultados de GROUP BY)--
--------------------------------------------------------------------------------------------------------------------

--La instrucción HAVING es similar a WHERE pero para agrupamientos de funciones de agregación. Ejemplo:

--1. Mostrar lo mismo que el ejercicio 1 de la sección anterior, con precios mayor que 10 y repiticiones mayor que 2.
select UnitPrice, count(*) as [Filas con este precio] from Products
where UnitPrice > 10
group by UnitPrice
having count(*) > 2

--------------------------------------------------------------------------------------------------------------------

 

Descarga: Consultas mono Tabla.rar (2,38 kb)

 

Recent Comments

Comment RSS

Month List