Transact SQL
Transact SQL
TRANSACT SQL
SQL
SQL es el lenguaje de consulta universal
para bases de datos relacionales.
SQL proporciona métodos para definir la
base datos, para manipular la
información y para gestionar los
permisos de acceso a dicha información.
Para que un gestor de bases de datos
sea considerado como relacional, debe
soportar SQL.
GRUPO DE SENTENCIAS SQL
DDL(Data Definition Language) es el encargado
de la definición de Bases de Datos, tablas,
vistas e índices entre otros.
DML(Data Manipulation Language) cuya misión
es la manipulación de datos. A través de él
podemos seleccionar, insertar, eliminar y
actualizar datos.
DCL (Data Control Laguage) encargado de la
seguridad de la base de datos, en todo lo
referente al control de accesos y privilegios
entre los usuarios.
Consulta de datos
SELECT
SELECT - SINTAXIS
SELECT [ALL | DISTINCT ]
<nombre_campo> [{,<nombre_campo>}]
FROM <nombre_tabla>|<nombre_vista>
[{,<nombre_tabla>|<nombre_vista>}]
[WHERE <condicion> [{ AND|OR <condicion>}]]
[GROUP BY <nombre_campo> [{,<nombre_campo >}]]
[HAVING <condicion>[{ AND|OR <condicion>}]]
[ORDER BY <nombre_campo>|<indice_campo> [ASC |
DESC]
[{,<nombre_campo>|<indice_campo> [ASC | DESC ]}]]
CLAUSULAS
SELECT: Palabra clave que indica que la sentencia de SQL que queremos ejecutar es
de selección.
ALL: Indica que queremos seleccionar todos los valores. Es el valor por defecto y no
suele especificarse casi nunca.
DISTINCT: Indica que queremos seleccionar sólo los valores distintos.
FROM: Indica la tabla (o tablas) desde la que queremos recuperar los datos. En el
caso de que exista más de una tabla se denomina a la consulta "consulta
combinada" o "join".
WHERE: Especifica una condición que debe cumplirse para que los datos sean
devueltos por la consulta. Admiten los operadores lógicos AND y OR.
GROUP BY: Especifica la agrupación que se da a los datos. Se usa siempre en
combinación con funciones agregadas.
HAVING: Especifica una condición que debe cumplirse para que los datos sean
devueltos por la consulta. Su funcionamiento es similar al de WHERE pero aplicado al
conjunto de resultados devueltos por la consulta. Debe aplicarse siempre junto a
GROUP BY y la condición debe estar referida a los campos contenidos en ella.
ORDER BY: Presenta el resultado ordenado por las columnas indicadas. El orden
puede expresarse con ASC (orden ascendente) y DESC (orden descendente). El valor
predeterminado es ASC.
EJEMPLO 1
select
[Link],
[Link],
[Link],
[Link]
from Products p
order by [Link]
EJEMPLO 2
select
[Link],
[Link],
[Link],
[Link]
from Products p
where [Link] like 'a%'
order by [Link]
EJEMPLO 3
INSERT
INSERT
El proceso de inserción de filas consiste
en añadir a una tabla una o más filas y
en cada fila todos o parte de sus
campos.
Podemos distinguir dos formas de
insertar filas:
Inserción individual de filas.
Inserción múltiple de filas.
INSERT – SINTAXIS 1
DELETE
DELETE - SINTAXIS
UPDATE
UPDATE - SINTAXIS
UPDATE <nombre_tabla>
SET <campo1> = <valor1>
{[,<campo2> = <valor2>,...,<campoN>
= <valorN>]}
[ WHERE <condicion>];
EJEMPLO
update Customers
set
[Address] = 'Obere Str. 57',
City = 'Berlin',
Phone = '030-0074321'
where CustomerID = 'ALFKI'
Consultas Combinadas
JOINS
JOINS
Las consultas combinadas pueden ser
de tres tipos:
• Combinación interna
• Combinación externa
• Uniones
COMBINACION INTERNA – INNER
JOIN
La combinación interna nos permite
mostrar los datos de dos o más tablas a
través de una condición WHERE.
La combinación interna es excluyente.
Esto quiere decir que si un registro no
cumple la condición de combinación no
se incluye en los resultados
FORMA 1 FORMA 2
select select
[Link], [Link],
[Link], [Link],
[Link], [Link],
[Link], [Link],
[Link],
[Link],
[Link]
[Link]
from Orders o, [Order Details]
from Orders o od
inner join [Order Details] od where
on [Link] = [Link] [Link] = [Link]
GROUP BY Y HAVING
GROUP BY
La clausula GROUP BY combina los registros con
valores idénticos en un único registro. Para cada
registro se puede crear un valor agregado si se
incluye una función SQL agregada en la instrucción
SELECT.
GROUP BY es opcional. Si se utiliza GROUP BY pero no
existe una función SQL agregada en la instrucción
SELECT se obtiene el mismo resultado que con una
consulta SELECT DISTINCT.
Todos los campos de la lista de campos de SELECT
deben incluirse en la cláusula GROUP BY o como
argumentos de una función SQL agregada.
EJEMPLO
select
[Link], COUNT([Link]) as
[countOrders] from Orders o
group by [Link]
HAVING
HAVING muestra cualquier registro
agrupado por la cláusula GROUP BY
que satisfaga las condiciones de la
cláusula. 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.
EJEMPLO
select
[Link], COUNT([Link]) as
[countOrders] from Orders o
where
year([Link]) = 1996
group by [Link]
having COUNT([Link]) >=10
FUNCIONES AGREGADAS
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>)
Count
Calcula el número de registros devueltos por una consulta. Su sintaxis es la siguiente:
COUNT(<expr>)
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>)
Sum
Devuelve la suma del conjunto de valores contenido en un campo especifico de una consulta. Su
sintaxis es:
SUM(<expr>)
SUBCONSULTAS
SUBCONSULTAS
Una subconsulta es una sentencia
SELECT que aparece dentro de otra
sentencia SELECT. Normalmente se
utilizan para filtrar una clausula WHERE
o HAVING con el conjunto de resultados
de la subconsulta, aunque también
pueden utilizarse en la lista de
selección.
EJEMPLO
max(year(OrderDate))
from Orders)
REFERENCIA EXTERNA
Una referencia externa es un campo
que aparece en la subconsulta pero se
refiere a la una de las tablas
designadas en la consulta principal.
Cuando se ejecuta una consulta que
contiene una subconsulta con
referencias externas, la subconsulta se
ejecuta por cada fila de la consulta
principal.
EJEMPLO
select
[Link],
[Link],
[Link],
[Link],
(select COUNT(*) from Orders o where
[Link] = [Link] ) as
[countOrderCustomers]
from Customers c
EJEMPLO
SELECT CO_EMPLEADO,
EMPLEADOS
FROM EMPLEADOS
WHERE CO_EMPLEADO IN ( SELECT CO_EMPLEADO
FROM NOMINAS
WHERE ESTADO IN ( SELECT ESTADO
FROM ESTADOS_NOMINAS
WHERE EMITIDO = 'S'
AND PAGADO = 'N‘
)
)
UTILIZACIÓN DE SUBCONSULTAS CON UPDATE
UPDATE EMPLEADOS
SET SALARIO_BRUTO = ( SELECT
SUM(SALIRO_BRUTO)
FROM NOMINAS
WHERE NOMINAS.CO_EMPLEADO =
EMPLEADOS.CO_EMPLEADO
)
WHERE SALARIO_BRUTO IS NULL
TIPOS DE SUBCONSULTAS
· Subconsultas de resultado único
· Subconsultas de lista de valores
(IN – ALL - ANY)
· Subconsultas en pruebas de
existencia (EXISTS)
SUBCONSULTAS DE RESULTADO ÚNICO
<expresion> {=|<>|!=|>|>=|!>|<|<=|!
<} <expresion>
EJEMPLO
<expresion> IN subconsulta
EJEMPLO
<expresion> {=|<>|!=|>|>=|!>|<|
<=|!<} {ANY|SOME} subconsulta
TEST ALL
Con el modificador ALL, para que se
cumpla la condición, la comparación se
debe cumplir con cada uno de los
valores devueltos por la subconsulta.
<expresion> {=|<>|!=|>|>=|!>|<|
<=|!<} ALL subconsulta
EJEMPLO
SELECT *
FROM empleados
WHERE EXISTS (SELECT *
FROM pedidos
WHERE numemp = rep and fab ='ACI');
CURSORES
CURSORES
Un cursor es una variable que nos
permite recorrer con un conjunto de
resultados obtenido a través de una
sentencia SELECT fila a fila.
-- Declaración del cursor
DECLARE <nombre_cursor> CURSOR
FOR
<sentencia_sql>
WHILE (@@FETCH_STATUS = 0)
BEGIN
-- Lectura de la siguiente fila de un cursor
FETCH <nombre_cursor> INTO <lista_variables>
...
END -- Fin del bucle WHILE
-- Cierra el cursor
CLOSE <nombre_cursor>
-- Libera los recursos del cursor
DEALLOCATE <nombre_cursor>
TIPOS DE CURSORES
LOCAL
Especifica que el ámbito del cursor es local para el proceso por lotes, procedimiento almacenado o
desencadenador en que se creó el cursor
GLOBAL
Especifica que el ámbito del cursor es global para la conexión. Puede hacerse referencia al nombre del
cursor en cualquier procedimiento almacenado o proceso por lotes que se ejecute en la conexión.
FORWARD_ONLY
Especifica que el cursor sólo se puede desplazar de la primera a la última fila. FETCH NEXT es la única
opción de recuperación admitida.
SCROLL
Especifica que están disponibles todas las opciones de recuperación (FIRST, LAST, PRIOR, NEXT, RELATIVE,
ABSOLUTE). Si no se especifica SCROLL en una instrucción DECLARE CURSOR la única opción de
recuperación que se admite es NEXT. No es posible especificar SCROLL si se incluye también
FAST_FORWARD.
Si se incluye la opción SCROLL, la forma en la realizamos la lectura del cursor varia, debiendo utilizar la
siguiente sintaxis: FETCH [ NEXT | PRIOR | FIRST | LAST | RELATIVE | ABSOLUTE ] FROM < INTO
STATIC
Define un cursor que hace una copia temporal de los datos que va a utilizar. Todas las solicitudes que se
realizan al cursor se responden desde esta tabla temporal de tempdb; por tanto, las modificaciones
realizadas en las tablas base no se reflejan en los datos devueltos por las operaciones de recuperación
realizadas en el cursor y además este cursor no admite modificaciones.