¡Bienvenidos a las conferencias de SQL Server!
Sesión # 2
Temas
Tablas: Instrucciones Transact (unitabla).
El lenguaje SQL
SQL es una herramienta para organizar, gestionar y recuperar datos almacenados en una base de
datos relacional. El nombre "SQL" es una abreviatura de Structured Query Language (Lenguaje de
consultas estructurado).
Su aprendizaje no solo sirve para esta aplicación sino también, para todas las existentes en el
mercado que soporten este lenguaje ya que es un lenguaje estándar consolidado por el Instituto
Americano de Normas (ANSI) y por la Organización de Estándares Internacional (ISO).
Lenguaje de manipulación de datos (DML) que comprende las sentencias:
SELECT para consultar los datos almacenados en las tablas.
INSERT para grabar nuevos datos.
UPDATE para modificar datos.
DELETE para eliminar datos.
Sentencia de selección o consulta
La sentencia SELECT solicita al motor de la base de datos que recupere determinada información y
devuelve como resultado un conjunto de registros. Consta de seis cláusulas: las dos primeras (SELECT
y FROM) obligatorias y las otras cuatro opcionales.
Sintaxis:
SELECT [DISTINCT] {* | expresión_columna, ...}
FROM nombretabla [alias_tabla] ...
[WHERE expresión1 operador expresion2]
[GROUP BY {expresión_columna, ...} ]
[HAVING {condición} ]
[ORDER BY {expresión_orden [DESC | ASC], ... ]
Para realizar esta operación, el motor de base de datos busca la tabla o las tablas especificadas,
extrae las columnas elegidas, selecciona las filas que cumplen los criterios y ordena o agrupa las filas
resultantes en el orden especificado.
Cláusula SELECT. Alias de columnas
La cláusula SELECT especifica los datos a recuperar, puede contener: nombres de los campos o columnas de la
tabla o tablas a consultar, expresiones a calcular por SQL cuando efectúa la consulta, o un asterisco (*) para
seleccionar todos los campos de una tabla.
SELECT * FROM Clientes
Retorna un conjunto de registros con todos los campos de o columnas de la tabla Clientes.
Si se incluye más de un dato, separados por comas, éstos se recuperan en el orden en que se han enumerado en
la cláusula.
expresión_columna puede ser un simple nombre de campo (por ejemplo, Apellidos), o expresiones más complejas
que pueden incluir operaciones matemáticas o de manipulación de caracteres.
Opcionalmente puede especificarse un alias para el campo, de forma que dicho alias podrá ser utilizado en el resto
de la sentencia SELECT. Por ejemplo:
SELECT PrecioUnidad*Cantidad*(1-Descuento) AS ImporteNeto FROM [Detalles de pedidos]
siendo ImporteNeto el alias para la expresión de columna PrecioUnidad*Cantidad*(1-Descuento).
Cuando se quieren recuperar datos de varias tablas que tienen nombres de campo iguales,
es necesario preceder el nombre del campo del nombre de la tabla seguido de un punto. Por
ejemplo:
SELECT Clientes.NombreCompañia, Clientes.NombreContacto,
Proveedores.NombreCompañia FROM Clientes, Proveedores
El predicado DISTINCT
Este predicado elimina las filas o registros duplicados del resultado de la consulta. Por
ejemplo, la sentencia:
SELECT DISTINCT Ciudad FROM Clientes
mostrará las distintas ciudades de las que pertenecen los clientes de la empresa.
Funciones de agrupamiento
Las funciones de agrupamiento pueden ser también parte de una cláusula SELECT. Devuelven un
único valor de un conjunto de registros. Pueden usarse con un nombre de campo, por ejemplo:
SELECT AVG(PrecioUnidad) FROM [Detalles de pedidos]
o en combinación con una expresión de columna más compleja:
SELECT AVG (PrecioUnidad*Cantidad*(1-Descuento)) AS ImporteMedio FROM [Detalles de pedidos]
Las funciones de agrupamiento permitidas son:
SUM devuelve la suma total de los valores de una expresión de columna o campo numérico. Por
ejemplo:
SELECT SUM(PrecioUnidad*Cantidad*(1-Descuento)) FROM [Detalles de pedidos]
retorna la suma del importe neto de todos los pedidos.
AVG devuelve la media de los valores de una expresión de columna. Por ejemplo:
SELECT AVG(PrecioUnidad*Cantidad*(1-Descuento)) FROM [Detalles de pedidos]
devolverá la media del importe neto de los pedidos.
COUNT devuelve el número de valores en una expresión de columna. Por ejemplo:
SELECT COUNT(FechaNacimiento) FROM Empleados
devolverá el número de registros de la tabla Empleados con valores no nulos en el campo
FechaNacimiento.
Un caso especial es COUNT(*), por ejemplo:
SELECT COUNT(*) FROM Empleados
retorna el número de registros de la tabla Empleados incluyendo aquellos registros con
valores nulos.
MAX devuelve el valor más alto de los contenidos en una expresión de columna. Por
ejemplo:
SELECT MAX(PrecioUnidad) FROM [Detalles de pedidos]
devolverá el precio unitario de venta más elevado.
MIN devuelve el valor más bajo de los contenidos en una expresión de columna. Por
ejemplo:
SELECT MIN(FechaNacimiento) FROM Empleados
retornará la fecha de nacimiento del empleado más antiguo de la empresa.
Cláusula FROM. Alias de tablas
La cláusula FROM identifica la tabla o tablas que contienen los campos con los datos a
recuperar por la consulta.
Sintaxis:
FROM nombretabla [alias_tabla] ...
nombretabla puede ser una o mas nombres de tabla separados por comas, alias_tabla es
un nombre que se usa para referirse a la tabla en el resto de la sentencia SELECT, utilizado
normalmente para abreviar el nombre original y también para poder realizar consultas
uniendo varias veces la misma tabla. Por ejemplo:
SELECT C.NombreCompañia, C.NombreContacto FROM Clientes C
se ha utilizado la letra C como alias de la tabla Clientes, y se referencian los campos
precediéndolos por el alias de la tabla.
Cláusula WHERE
La cláusula WHERE determina las condiciones que tienen que cumplir los registros
recuperados de la base de datos.
Sintaxis:
WHERE expresión
Donde expresión indica una condición que deben cumplir los registros para que se
incluyan en el resultado de la consulta. Puede ser cualquier combinación de
operadores, constantes, valores literales, funciones y nombres de campos que se
evalúen a un valor sencillo. En la sección Criterios de selección de este tema se
especifican los elementos que pueden constituir una expresión.
Por ejemplo, la siguiente sentencia muestra el nº de registros de Detalles de
pedidos cuyo importe neto es superior a 500.
SELECT COUNT(IdPedido) FROM [Detalles de pedidos] WHERE
(PrecioUnidad*Cantidad*(1-Descuento)) > 500
Cláusula ORDER BY
La cláusula ORDER BY ordena los resultados de la consulta en base a los datos de una o más
columnas.
ORDER BY {expresión_orden [DESC | ASC], ... ]
expresión_orden puede ser el nombre de un campo, una expresión o el número de posición que ocupa
la expresión de columna en la cláusula SELECT. Por defecto se ordenan ASCendentemente (de menor
a mayor). Si se quiere ordenar de mayor a menor se empleará DESC (DESCendente). Por ejemplo,
para obtener la lista de clientes ordenados alfabéticamente:
SELECT NombreCompañia, NombreContacto, Teléfono FROM Clientes ORDER BY NombreCompañia
Para obtener el listado de clientes ordenado por la Región y Ciudad a la que pertenecen:
SELECT Región, Ciudad, NombreCompañia, Teléfono FROM Clientes ORDER BY Región, Ciudad
o bien:
SELECT Región, Ciudad, NombreCompañia, Teléfono FROM Clientes ORDER BY 1, 2
Para obtener la lista de empleados ordenados por su edad ascendentemente:
SELECT Apellidos, Nombre FROM Empleados ORDER BY FechaNacimiento DESC
Cláusula GROUP BY
Combina en un único registro los registros con valores idénticos en el campo o
campos especificados en la lista de campos que sigue a GROUP BY.
Sintaxis:
GROUP BY lista_de_campos
El siguiente ejemplo interroga sobre los pedidos en los que se ha vendido algún
producto por un importe total neto superior a 500:
SELECT Count(IdPedido), IdPedido
FROM [Detalles de pedidos]
WHERE ([PrecioUnidad]*[Cantidad]*(1-[Descuento]))>500
GROUP BY [Detalles de pedidos].IdPedido;
Esta sentencia retornará un registro por cada pedido que cumpla la condición,
mostrando el número de pedido o campo IdPedido y el número de productos cuya
venta cumple la condición.
Cláusula HAVING
La cláusula HAVING especifica una condición aplicable a grupos obtenidos de la
aplicación de la cláusula GROUP BY. Sólo es válida si previamente se ha
especificado la cláusula GROUP BY.
Sintaxis:
HAVING expresión
Siendo expresión el criterio que determina qué registros agrupados se van a
mostrar. No tiene que coincidir con una expresión de columna en la cláusula
SELECT.
La sentencia siguiente muestra el identificador de los pedidos que tienen más de
dos productos y el número total de productos incluidos en cada pedido.
SELECT IdPedido, Count(*)
FROM [Detalles de pedidos]
GROUP BY IdPedido
HAVING (((Count(*))>2));
SELECT...UNION
El operador UNION combina el resultado de dos sentencias SELECT en un único resultado.
Este resultado se compone de todos los registros devueltos en ambas sentencias. Por
defecto los registros repetidos se omiten, para que no se omitan se empleará la palabra ALL.
Sintaxis:
SELECT sentencia UNION [ALL] SELECT sentencia
Con el operador UNION, la lista de selección para cada sentencia SELECT, debe tener el
mismo número de expresiones de columnas, con el mismo tipo de datos y en el mismo orden.
Por ejemplo:
SELECT Ciudad, NombreCompañía, NombreContacto
FROM Clientes
UNION SELECT Ciudad, NombreCompañía, NombreContacto
FROM Proveedores
ORDER BY Ciudad, NombreCompañía;
Retorna una lista única de los clientes y proveedores de la empresa por ciudades.
¡Gracias por tu asistencia y participación!
Hugo Godoy
37 años de experiencia académica
docente en CENAP Perú desde el 2020