Está en la página 1de 16

Clase 07.

Funciones especiales
y SubConsultas

Funciones especiales
Las funciones especiales más importantes son las de agregación (sum, avg, max, etc)
y las escalares. Estas últimas permiten transformar los datos, para corregir, modificar o
complementar la información resultante de las consultas que hacemos a una o varias
tablas.

Funciones de agregación

Estas funciones realizan un cálculo en un conjunto de valores y devuelven un valor


único. Se pueden usar en la lista de selección o en la cláusula HAVING de una
instrucción SELECT. Puede usar una agregación en combinación con la cláusula
GROUP BY para calcular la agregación en las categorías de filas.

Todas las funciones de agregación son deterministas; es decir, siempre devuelven el


mismo resultado cuando se ejecutan con los mismos valores de entrada.

Funciones escalares

Operan sobre un valor y después devuelven otro valor. Las funciones escalares se
pueden utilizar donde la expresión sea válida, de lo contrario el sistema de gestión de
base de datos informará un error.

Tipos de funciones
Existe una gran variedad de funciones escalares, estas son las más usadas.
Caracteres o Cadena
Las funciones de este tipo permiten manipular campos de texto o alfanuméricos.

Todas las funciones de cadena integradas son deterministas, salvo FORMAT. Esto
significa que devuelven el mismo valor siempre que se llamen con un conjunto
determinado de valores de entrada.
Cuando se pasan a las funciones de cadena argumentos que no son valores de
cadena, el tipo de entrada se convierte explícitamente en un tipo de datos de texto.

Función Operación Ejemplo

LEFT Extrae caracteres iniciando desde el LEFT(Campo1, cantidad de


lado izquierdo caracteres)

RIGHT Extrae caracteres iniciando desde el RIGHT(Campo1, cantidad de


lado derecho caracteres)

CONCAT Permite unir campos o caracteres RIGHT(Campo1, Campo2,


“texto”)

REPLACE Permite reemplazar caracteres en un REPLACE(Campo1, caracter a


campo reemplazar, caracter
nuevo)

UPPER/LOWER Permite convertir todos los valores a UPPER(Campo1)


mayúsculas o minúsculas
respectivamente

TRIM Elimina espacios al inicio y al final del Trim(Campo1)


valor.
Left
Extrae caracteres iniciando desde el lado izquierdo

Sintaxis
Select LEFT ( Campo, Cantidad_de_caracteres_a_extraer) as Campo_nuevo
From Tabla;

Ejemplo sobre la tabla clientes:

Nombre Apellido

Kevin Vargas

Andres Mejia

Dario Gonzales

Select LEFT(nombre, 4) as Nombre, apellido from clientes;

Resultado

Nombre Apellido

Kev Vargas

And Mejia

Dar Gonzales

Right
Extrae caracteres iniciando desde el lado derecho

Sintaxis
Select RIGHT( Campo, Cantidad_de_caracteres_a_extraer) as Campo_nuevo
From Tabla;
Ejemplo sobre la tabla clientes:

Nombre Apellido

Kevin Vargas

Andres Mejia

Dario Gonzales

Select RIGHT(nombre, 2) as Nombre, apellido from clientes;

Resultado

Nombre Apellido

in Vargas

es Mejia

io Gonzales

Concat
Permite unir campos o caracteres

Sintaxis con campos:


Select CONCAT( Campo1, Campo2) as Campo_nuevo
From Tabla;

Sintaxis con campo y caracteres.


Select CONCAT( Campo1, ‘caracteres’) as Campo_nuevo
From Tabla;

Ejemplo sobre la tabla clientes:

Nombre Apellido
Kevin Vargas

Andres Mejia

Dario Gonzales

Select CONCAT(nombre, apellido) as Nombre_completo, apellido from clientes;

Resultado

Nombre_completo

KevinVargas

AndresMejia

DarioGonzales

Select CONCAT(nombre, ‘@’) as Nombre, apellido from clientes;

Resultado

Nombre

Kevin@

Andres@

Dario@

Replace
Permite reemplazar caracteres en un campo

Sintaxis con campos:


Select REPLACE( Campo1, caracter_a_reemplazar, caracter_nuevo) as Campo_nuevo
From Tabla;
Ejemplo sobre la tabla clientes:

Nombre Apellido

Kevin Vargas

Andres Mejia

Dario Gonzales

Select replace(nombre, ‘K’, ‘Qu’) as Nombre, apellido from clientes where Nombre =
‘Kevin’;

Resultado

Nombre Apellido

Quevin Vargas

Upper/Lower
Permite convertir todos los valores a mayúsculas o minúsculas respectivamente

Sintaxis:
Select UPPER(Campo) From Tabla;
Select LOWER(Campo) From Tabla;

Ejemplo sobre la tabla clientes:

Nombre Apellido

Kevin Vargas

Andres Mejia

Dario Gonzales

Select UPPER(Nombre) as Nombre, apellido from clientes;


Resultado

Nombre Apellido

KEVIN Vargas

ANDRES Mejia

DARIO Gonzales

TRIM
Elimina espacios al inicio y al final del valor.

Sintaxis:
Select TRIM(Campo) From Tabla;

Ejemplo sobre la tabla clientes:

Nombre
Completo

Kevin

Andres

Dario

Select TRIM(Nombre) as Nombre, apellido from clientes;

Resultado

Nombre

Kevin
Andres

Dario

Fecha y tiempo
Permite manipular y segmentar los datos en periodos de tiempo.

Función Operación Ejemplo

YEAR / MONTH / Devuelve el periodo de tiempo del YEAR(Campo1)


DAY campo fecha

DATEPART / Devuelven el número y el texto DATEPART(Month, Campo1)


respectivamente, del periodo de DATEPART(Month, Campo1)
DATENAME
tiempo correspondiente

DATEADD Permite agregar la cantidad de DATEADD(periodo,


períodos que se especifique a una cantidad, Campo1 )
fecha.

DATEDIFF Permite calcular la diferencia entre DATEDIFF(periodo,


una fecha y otra. FechaInicial, FechaFinal)

YEAR / MONTH / DAY


Devuelve el periodo de tiempo del campo fecha

Sintaxis:
Select YEAR(campo_tipo_fecha) from tabla;

Ejemplo con la tabla facturas

NroFactura Fecha

13256 01/12/2019

17364 01/01/2020
19384 12/12/2018

Select NroFactura, YEAR(Fecha) as Anio from facturas;

Resultado

NroFactura Anio

13256 2019

17364 2020

19384 2018

DATEPART / DATENAME

Devuelven el número y el texto respectivamente, del periodo de tiempo


correspondiente

Sintaxis:
Select DATEPART(Year, campo_tipo_fecha) from tabla;
Select DATEPART(Quarter, campo_tipo_fecha) from tabla;
Select DATEPART(Month, campo_tipo_fecha) from tabla;
Select DATEPART(Week, campo_tipo_fecha) from tabla;

Select DATENAME(Month, campo_tipo_fecha) from tabla;

Ejemplo con la tabla facturas

NroFactura Fecha

13256 01/12/2019

17364 01/01/2020
19384 12/12/2018

Select NroFactura, DATENAME(MONTH, Fecha) as Mes_texto from facturas;

Resultado

NroFactura Mes_Texto

13256 Diciembre

17364 Enero

19384 Diciembre

DATEADD

Permite agregar la cantidad de períodos que se especifique a una fecha.

Sintaxis:
Select DATEADD(periodo_de_tiempo, cantidad_de_periodos, campo_tipo_fecha) from
tabla;

Ejemplo con la tabla facturas

NroFactura Fecha

13256 01/12/2019

17364 01/01/2020

19384 12/12/2018

Select NroFactura, DATEADD(MONTH, 2, Fecha) as Fecha_nueva from facturas;

Resultado
NroFactura Mes_Texto

13256 01/02/2020

17364 01/03/2020

19384 02/02/2019

DATEDIFF

Permite calcular la diferencia entre una fecha y otra.

Sintaxis:
Select DATEDIFF(periodo_de_tiempo, cantidad_de_periodos, campo_tipo_fecha) from
tabla;

Ejemplo con la tabla facturas

NroFactura Fecha

13256 01/12/2019

17364 01/01/2020

19384 12/12/2018

Select NroFactura, DATEDIFF(MONTH, ‘01/01/2019’, Fecha) as Meses from facturas;

Resultado

NroFactura Meses

13256 11

17364 12

19384 -1
Fecha y tiempo
Permiten realizar cálculos sobre campos de valores numéricos.

Función Operación Ejemplo

FLOOR Devuelve la parte entera del campo FLOOR(Campo1)


decimal

ABS Devuelve el valor absoluto ABS(Campo2)

FLOOR

Devuelve la parte entera del campo decimal

Sintaxis:
Select FLOOR(Campo1) from tabla;

Ejemplo con la tabla ventas

Cliente Importe

13 2550,15

17 3660,30

19 2550,00

Select Cliente, FLOOR(Importe) as Importe from ventas;

Resultado

Cliente Importe

13 2550,00

17 3660,00

19 2550,00
ABS
Devuelve el valor absoluto

Sintaxis:
Select ABS(Campo1) from tabla;

Ejemplo con la tabla creditos

Cliente Credito

13 - 500,15

17 - 360,30

19 - 25,00

Select Cliente, ABS(Credito) as Credito from creditos;

Resultado

Cliente Importe

13 500,15

17 360,30

19 25,00

Conversion
CAST
Convierte el campo de un tipo de datos a otro.

Sintaxis:
Select CAST(Campo1 AS INT) from tabla;
Select CAST(Campo1 AS varchar(20)) from tabla;
Select CAST(Campo1 AS text(20)) from tabla;

Subconsultas
CONCEPTO
También llamada consulta anidada o concatenada, consiste en una sentencia select
dentro de otra select.

Las ventajas más importantes son: permiten desarrollar consultas compuestas, no es


obligatorio usar joins, y el código SQL es más fácil de leer.

Una subconsulta es una consulta anidada en una instrucción SELECT, INSERT,


UPDATE o DELETE, o bien en otra subconsulta. Las subconsultas se pueden utilizar
en cualquier parte en la que se permita una expresión.

Muchas de las instrucciones SQL que incluyen subconsultas se pueden formular


también como combinaciones. Otras preguntas se pueden formular solo con
subconsultas. En SQL, normalmente no hay diferencias de rendimiento entre una
instrucción que incluya una subconsulta y una versión semánticamente equivalente
que no la incluya. Sin embargo, en algunos casos en los que se debe comprobar la
existencia de un elemento, una combinación produce mejores resultados. De lo
contrario, se debe procesar la consulta anidada para cada resultado de la consulta
externa con el fin de garantizar la eliminación de los duplicados. En tales casos, la
utilización de combinaciones producirá mejores resultados.

Una subconsulta anidada en la instrucción externa SELECT tiene los componentes


siguientes:
● Una consulta SELECT normal, que incluye los componentes normales de la lista
de selección.
● Una cláusula normal FROM que incluye uno o varios nombres de tablas o
vistas.
● Una cláusula opcional WHERE.
● Una cláusula opcional GROUP BY.
● Una cláusula opcional HAVING.
La consulta SELECT de una subconsulta se presenta siempre entre paréntesis. No
puede incluir una cláusula COMPUTE o FOR BROWSE y solo puede incluir una
cláusula ORDER BY cuando se especifica también una cláusula TOP.

Una subconsulta puede anidarse en la cláusula WHERE o HAVING de una instrucción


externa SELECT, INSERT, UPDATE o DELETE, o bien en otra subconsulta. Se puede
disponer de hasta 32 niveles de anidamiento, aunque el límite varía dependiendo de la
memoria disponible y de la complejidad del resto de las expresiones de la consulta.
Las consultas individuales no permiten anidamientos de más de 32 niveles.

Una subconsulta puede aparecer en cualquier parte en la que se pueda usar una
expresión, si devuelve un solo valor. Si una tabla solo aparece en una subconsulta y no
en la consulta externa, las columnas de esa tabla no se podrán incluir en la salida (la
lista de selección de la consulta externa).

Las instrucciones que incluyen una subconsulta normalmente tienen uno de estos
formatos:
Expresión WHERE [NOT] IN (subconsulta)
Expresión WHERE comparison_operator [ANY | ALL] (subconsulta)
WHERE [NOT] EXISTS (subconsulta)

En algunas instrucciones SQL, la subconsulta se puede evaluar como si fuera una


consulta independiente. Conceptualmente, los resultados de la subconsulta se
sustituyen en la consulta externa, aunque en realidad esta no es la forma en la que
SQL Server procesa las instrucciones SQL con subconsultas.

CARACTERISTICAS
Puede retornar un escalar (un valor único), una lista (varios valores), un registro o hasta
una tabla.
Puede contener cualquiera de los comandos de un select común: DISTINCT, ORDER
BY, GROUP BY, LIMIT.
Puede contener join, unión, comentarios, funciones, etcétera.

Ejemplo subconsulta de valor escalar: se requiere consultar la cantidad de facturas del


último día de ventas.
Select
count(id_factura) as cant_fact
from
ventas
where fecha_venta = (Select max(fecha_venta) from ventas )

Ejemplo subconsulta de valores en lista: se requiere consultar el total de deuda de los


clientes que se encuentran categorizados como frecuentes.

Select
sum(deuda_total) as Deuda
from
deudores
where id_cliente = (Select id_cliente from clientes where Categoria = ‘Frecuentes’)

RESTRICCIONES
La consulta externa debe ser con comandos solo DML no DDL.
No se puede modificar una tabla y al mismo tiempo usarla en subconsulta.

DELETE FROM tabla1 where … (SELECT .. FROM tabla1) ;

UPDATE tabla1 where campo1 = (SELECT .. FROM tabla1) ;

INSERT into tabla1 (SELECT .. FROM tabla1) ;

También podría gustarte