Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Apuntes SQL Basico
Apuntes SQL Basico
Introducción-
Introducción-1 SQL Server
Introducción-
Introducción-2 SQL Server
Análisis
Diseño
Construir
la Base
de Datos Refinar
el
prototipo
Producción
Introducción-
Introducción-3 SQL Server
Nota: Este curso está enfocado a la fase de construcción de una base de datos.
Modelo del
sistema
en la mente Modelo Conceptual
del Cliente
Modelo Relacional
Server
Tablas en Disco
Introducción-
Introducción-4 SQL Server
Modelo de datos
Los modelos son una parte del diseño. Los Ingenieros construyen un modelo de un auto para
trabajar en los detalles antes de ponerlo en producción. De la misma forma, el diseño de sistemas
desarrolla modelos para explorar las ideas y generar el diseño de la base de datos.
Database
Almacenando la información
Cada organización tiene sus propias necesidades. Una librería mantiene una lista de clientes,
libros, etc. Una compañía necesita almacenar la información de sus empleados, departamentos y
salarios. Estas piezas de información son llamadas datos.
Estos datos se pueden almacenar en diferentes medios - por ejemplo, una copia de los
documentos en un archivero o almacenados en una hoja de cálculo o en una base de datos.
Una base de datos es una colección organizada de información.
Para administrar una base de datos, necesita un sistema manejador de bases de datos (DBMS).
Un DBMS es un programa que almacena, recupera y modifica los datos de una base de datos.
Existen cuatro tipos de modelos de bases de datos:
• jerárquico,
• red,
• relacional y muy recientemente
• orientado a objetos.
Introducción-
Introducción-6 SQL Server
Base de datos
Una base de datos de SQL Server es una colección objetos que contiene y maneja datos :
• Es una colección de muchos objetos, como tablas, vistas, procedimientos almacenados y
restricciones.
• Es una propiedad de una única cuenta de usuario, pero puede contener objetos propiedad de
otros usuarios.
• Tiene su propio conjunto de tablas del sistema que catalogan la definición de la base de datos.
• Mantiene su propio conjunto de cuentas de usuario y seguridad.
• Es la unidad principal de recuperación y mantiene la coherencia lógica entre los objetos de la
base de datos (por ejemplo, las relaciones entre llave primaria y llave foránea hacen referencia
a otras tablas dentro de la misma base de datos, no a otras bases de datos).
• Puede estar distribuida por varias unidades de disco y archivos del sistema operativo.
• Puede tener un tamaño comprendido entre 1 Mb y 1 Tb (límite teórico 1 Tb = 1024 Gb).
Introducción-
Introducción-7 SQL Server
Modelo Relacional
Los principios del modelo relacional fueron propuestos por el Dr. E. F. Codd en Junio de 1970 en
un documento llamado “Un modelo relacional de datos para Grandes bancos de información
compartida”. En este documento el Dr. Codd propuso el modelo relacional para las bases de
datos.
Los modelos más populares que se utilizaban hasta ese momento eran el jerárquico y el de red, o
en simples estructuras de archivos planos. Los sistemas manejadores de bases de datos
relacionales empezaron a ser muy populares, especialmente por su facilidad y flexibilidad en su
estructura.
Componentes del Modelo Relacional
• Colección de objetos o relaciones que almacenan datos
• Un conjunto de operadores que operan sobre las relaciones y producen otras relaciones
• Integridad y consistencia en los datos
Database
Table Name:
Name: EMP Table Name:
Name: DEPT
EMPNO ENAME JOB DEPTNO DEPTNO DNAME LOC
7839 KING PRESIDENT 10 10 ACCOUNTING NEW YORK
7698 BLAKE MANAGER 30 20 RESEARCH DALLAS
7782 CLARK MANAGER 10 30 SALES CHICAGO
7566 JONES MANAGER 20 40 OPERATIONS BOSTON
Introducción-
Introducción-8 SQL Server
REP_
ID NOMBRE TELEFONO VTAS
Renglón (Tupla
(Tupla)) 201 Unisports 55-
55-2066101 12
202 Atléticos 81-
81-20101 14
203 Ropa Sport 91-
91-10351 14
204 Olimpia 1-206-
206-104-
104-0103 11
Columna (Atributo)
Introducción-
Introducción-9 SQL Server
Concepto Descripción
Tabla Es la estructura básica de almacenamiento de un RDBMS, consiste de una
o más columnas y cero o más renglones.
Renglón Es una combinación de columnas en una tabla; por ejemplo, la
información acerca de un departamento en la tabla DEPT. Un renglón
es también llamado un “registro”.
Columna Una columna representa un tipo de datos en la tabla; por ejemplo, el
nombre del departamento en la la tabla DEPT. Se describe con un
nombre de columna y representa datos de un tipo y tamaño específicos.
Campo La intersección de un renglón y una columna, se encuentra un campo.
Contiene datos. Si no existen datos en el campo, se dice que contiene un
valor NULL.
Introducción-
Introducción-10 SQL Server
Terminología
1. Un simple renglón o tupla. Cada renglón en una tabla debe ser identificado por una llave
primaria, la cual no debe permitir valores repetidos. El orden de los renglones no tiene
significado, este se especifica cuando se recuperan los renglones.
2. Una columna o atributo contienen el número de empleado, que es la llave primaria(Primary
Key). El número de empleado es identificado como único en la tabla EMP. Una llave primaria
siempre debe tener un valor.
3. Una columna que no es llave, representa un tipo de datos en la tabla.
4. Una columna que contiene el número de departamento, y es conocida como llave foránea
(Foreign Key). Una llave foránea es una columna que relaciona dos tablas entre sí. Una llave
foránea hace referencia a la llave primaria de otra tabla.
5. Un campo se encuentra en la intersección de renglón con columna.
6. Un campo puedo no tener valor. A este valor se llama NULL, en la tabla solo aquellos
empleados que son vendedores (salesman) pueden tener una comisión.
La intersección
debe ser
atómica
REP_
ID NOMBRE TELEFONO VTAS
201 Unisports 55-
55-2066101 12
202 Atléticos 81-
81-20101 14
203 Ropa Sport 91-
91-10351 14
204 Olimpia 1-206-
206-104-
104-0103 11
Introducción-
Introducción-11 SQL Server
ID NOMBRE EMPLEADOS
A10 Contabilidad 10, 12
B12 Compras 11
A11 Almacén 10, 14, 11
A12 Ventas 11
Conjunto de
valores
Introducción-
Introducción-12 SQL Server
Relacionando tablas
Cada tabla contiene datos que describen exactamente una entidad. Por ejemplo, la tabla EMP
contiene información acerca de empleados.
Debido a que se almacenan datos de diferentes entidades en diferentes tablas, necesitará
combinar dos o más tablas para responder ciertas cuestiones. Por ejemplo, conocer la
localización de los departamentos donde laboran los empleados. Para este caso, necesita
información de la tabla EMP (que contiene la información de los empleados) y de la tabla DEPT
(que contiene información acerca de los departamentos).
Un RDBMS le permite relacionar los datos de una tabla con otra utilizando llaves foráneas. Una
llave foránea es una columna o un conjunto de columnas que hacen referencia a la llave primaria
en la misma tabla o en otra tabla.
Introducción-
Introducción-15 SQL Server
Database
Introducción-
Introducción-16 SQL Server
INSERT
UPDATE Data manipulation language (DML)
DELETE
CREATE
ALTER Data definition language (DDL)
DROP
COMMIT
ROLLBACK Transaction control
GRANT
Data control language (DCL)
REVOKE
Introducción-
Introducción-17 SQL Server
Instrucciones de SQL
Los comités de la American National Standards Institute (ANSI) y de la International Standards
Organization (ISO), han designado a SQL como el lenguaje estándar para las bases de datos
relacionales, en 1992 denominado ANSI SQL-92.
Instrucción Descripción
SELECT Recupera datos de una tabla
INSERT Agrega nuevos registros a las tablas
UPDATE Modica los valores de los campos en un registro
DELETE Elimina registros de una tabla
CREATE Crea tablas
ALTER Permite modificar la estructura de una tabla
DROP Elimina una tabla
COMMIT Permite grabar los cambios a la base de datos en disco
ROLLBACK Restaura los cambios hechos a la base de datos hasta el último COMMIT
GRANT Permite otorgar privilegios a los usuarios
REVOKE Elimina los privilegios otorgados a los usuarios
Introducción-
Introducción-18 SQL Server
Relational DBMS
Un sistema manejador de bases de datos relacionales consta de los siguientes elementos :
• Interface de Usuario: Lo que el usuario visualizará en pantalla
• Aplicaciones: El software que ejecuta las tareas específicas para el usuario final. Utiliza
un API (Application Program Interface) de bases de datos para ejecutar estas tareas.
• Database AP: El código que interactúa con el DBMS. Normalmente el API provee un
mecanismo para obtener los resultados solicitados por SQL y retornarlos a la aplicación.
ODBC es una API para DBMS así como el Oracle OCI, Sybase DB-Library y el SQL
embebido.
Manejadores
Actualmente, algunos productos no son estrictamente “database products” , pero pueden
manipular listas, en simples archivos de texto (planos), tales como hojas de cálculo o
procesadores de palabras.
Si los datos tienen una forma consistente de renglones y columnas, podrán ser tratados en una
tabla en el modelo relacional.
ISAM (Indexed sequential access method) Una técnica que agrega a los
archivos secuenciales el poder buscar y ordenar con índices los valores de
columnas de datos.
Server
Introducción-
Introducción-20 SQL Server
Resultados
Transact-
Transact-SQL
Database
Cliente Servidor
Introducción-
Introducción-21 SQL Server
Arquitectura Cliente/Servidor
SQL Server utiliza la arquitectura Cliente/Servidor para dividir la carga de trabajo entre dos
tareas que corren unas en el servidor y otras en el cliente :
• El cliente es el responsable de la lógica del modelo de negocios y de la presentación de
los datos a los usuarios. El cliente típicamente corre en una o mas computadoras clientes
• SQL Server administra la base de datos y permite la disponibilidad de los recursos del
servidor, tales como memoria, recursos de red, operaciones en disco; para responder a
múltiples peticiones.
Cliente
Servidor
Windows NT
Windows 9x
Introducción-
Introducción-22 SQL Server
Plataformas
SQL Server corre en los sistemas operativos mostrados en la figura. Puede utilizar alguno o todos
los sistemas operativos para crear y ejecutar aplicaciones.
Introducción-
Introducción-23 SQL Server
Transact-SQL
SQL Server utiliza Transact-SQL, una versión del SQL, con Transact-SQL, puede accesar datos
y consultar, actualizar y administrar sistemas de bases de datos relacionales.
Selección Proyección
Tabla 1 Tabla 1
Join
Tabla 1 Tabla 2
Escribiendo Querys básicos 2-
2-3 SQL Server
SELECT *
FROM dept;
deptno loc
--------- -------------
10 NEW YORK
20 DALLAS
30 CHICAGO
40 BOSTON
loc deptno
------------- ---------
NEW YORK 10
DALLAS 20
CHICAGO 30
BOSTON 40
Operador Descripción
+ Add
- Subtract
* Multiply
/ Divide
Expresiones Aritméticas
Puede modificar la forma en que es mostrada la información de las columnas,
ejecutando cálculos. Esto es posible utilizando expresiones aritméticas. Una
Expresiones Aritméticas debe contener nombres de columnas, valores numéricos
constantes y operadores aritméticos.
Operadores Aritméticos
Aquí se muestran los operadores aritméticos disponibles en SQL. Puede
utilizarlos en cualquier cláusula de SQL excepto en la cláusula FROM.
ename sal
---------- --------- ---------
KING 5000 5300
BLAKE 2850 3150
CLARK 2450 2750
JONES 2975 3275
MARTIN 1250 1550
ALLEN 1600 1900
...
(14 row(s) affected)
_
* / +
– Multiplicación y división tienen la mayor
prioridad sobre los otros operadores.
– Los operadores con igual prioridad son
evaluados de izquierda a derecha.
– Los paréntesis son utilizados para forzar
la evaluación de prioridad y hacer más
clara la expresión.
ename sal
---------- --------- ----------
KING 5000 60100
BLAKE 2850 34300
CLARK 2450 29500
JONES 2975 35800
MARTIN 1250 15100
ALLEN 1600 19300
...
(14 row(s) affected)
ename sal
---------- --------- -----------
KING 5000 61200
BLAKE 2850 35400
CLARK 2450 30600
JONES 2975 36900
MARTIN 1250 16200
...
(14 row(s) affected)
Utilizando Paréntesis
Puede modificar las reglas de evaluación utilizando paréntesis para indicar el
orden en que se evaluarán los operadores.
El ejemplo muestra el nombre, salario y una compensación anual para los
empleados. La compensación se calcula como el salario mensual mas un bono
mensual, multiplicado por 12. Debido a que los paréntesis tienen mayor
prioridad sobre la multiplicación.
ename
---------- -----------
....
KING NULL
name salary
------------- ---------
...
Utilizando Alias
El primer ejemplo muestra el nombre y el salario de todos los empleados. Note
que la palabra AS es opcional y debe ser usada antes del alias de la columna. El
encabezado de la columna será el mismo que se especifique en el alias.
El segundo ejemplo muestra el nombre y el salario de todos los empleados, como
Annual Salary contiene espacios debe ir encerrado entre apóstrofos (‘ ‘) o
comillas dobles (“ “).
Nota: utilice AS para darle más claridad a la consulta.
Operador de Concatenación
Puede encadenar columnas con otras columnas, expresiones aritméticas o valores
constantes utilizando el operador de concatenación (+). Todas las columnas
utilizadas con el operador (+) producen un solo resultado en la misma columna.
Employees
-------------------
KINGPRESIDENT
BLAKEMANAGER
CLARKMANAGER
JONESMANAGER
MARTINSALESMAN
ALLENSALESMAN
...
(14 row(s) affected)
Employee Details
-------------------------
KING is a PRESIDENT
BLAKE is a MANAGER
CLARK is a MANAGER
JONES is a MANAGER
MARTIN is a SALESMAN
...
(14 row(s) affected)
Usando Literales
El ejemplo muestra los nombres y puestos de los empleados en forma más
legible.
En el siguiente ejemplo, el nombre y el salario de cada empleado son
desplegados dando más significado al resultado.
Monthly sal
---------------------- --------------
KING: 1 Month salary 5000
BLAKE: 1 Month salary 2850
CLARK: 1 Month salary 2450
JONES: 1 Month salary 2975
MARTIN: 1 Month salary 1250
ALLEN: 1 Month salary 1600
TURNER: 1 Month salary 1500
...
(14 row(s) selected)
deptno
---------
10
30
10
20
...
(14 row(s) affected)
Renglones duplicados
A menos de que indique lo contrario, el resultado de una consulta mostrará todos
los renglones aunque se repitan. El ejemplo anterior muestra el número de
departamento de los empleados. Puede notar que existen departamentos
repetidos.
deptno
---------
10
20
30
deptno job
------ ---------
10 CLERK
10 MANAGER
10 PRESIDENT
20 ANALYST
...
(9 row(s) affected)
EMP
EMPNO ENAME JOB ... DEPTNO
Limitando Renglones
Puede restringir los renglones retornados por una consulta utilizando la cláusula
WHERE. Una cláusula WHERE contiene una condición que debe ser cumplida
por cada registro en la tabla, y va después de la cláusula FROM.
Sintaxis :
WHERE restringe la consulta, y muestra solo aquellos que
cumplan la condición.
condition está compuesta por nombres de columnas, expresiones,
constantes y operadores de comparación.
Operador Descripción
= Igual
<> Diferente
Operadores de Comparación
Los operadores de comparación son utilizados para comparar expresiones con
otras. Se utilizan en la cláusula WHERE con el siguiente formato :
Sintaxis
Ejemplos
… WHERE hiredate='01-JAN-95'
… WHERE sal>=1500
… WHERE ename='SMITH'
Operador Descripción
ename sal
---------- --------- Límite Límite
MARTIN 1250
inferior superior
TURNER 1500
WARD 1250
ADAMS 1100
MILLER 1300
El Operador BETWEEN
Puede desplegar renglones basados en rangos de valores utilizando el operador
BETWEEN. Los rangos que especifique contienen límites inferior y superior.
El ejemplo anterior obtiene los empleados que ganen entre $1000 y $1500
inclusive.
El operador IN
Para verificar si un valor específico se encuentra en una lista, utilice el operador
IN.
El ejemplo anterior muestra el número de empleado, el nombre, el salario y su
respectivo manager para aquellos empleados cuyos “jefes” sean 7902, 7566 o
7788.
El operador IN puede ser utilizado con otros tipos de datos. El siguiente ejemplo
retorna los empleados cuyos nombres estén en la lista.
SELECT ename
FROM emp
WHERE ename LIKE 'S%';
El Operador LIKE
Puede seleccionar renglones que coincidan con un patrón de caracteres
utilizando el operador LIKE. Se pueden utilizar dos caracteres (comodines) para
la realización de búsquedas con patrones.
La consulta anterior retorna el nombre del empleado para aquellos cuyo nombre
inicie con una “S”. Nombres que inicien con una “s” no serán mostrados.
SELECT ename
FROM emp
WHERE ename LIKE '_A%';
ENAME
----------
JAMES
WARD
MARTIN
ename mgr
---------- ---------
KING NULL
Operador Descripción
Utilizando el operador OR
En el ejemplo, se muestran aquellos empleados que ganen de $2000 en adelante
o tengan el puesto CLERK.
ename job
---------- ---------
KING PRESIDENT
MARTIN SALESMAN
ALLEN SALESMAN
TURNER SALESMAN
WARD SALESMAN
Orden Operador
1 Todos los operadores
de comparación
2 NOT
3 AND
4 OR
Usando paréntesis
En el ejemplo, existen dos condiciones :
• La primer condición es que el puesto sea PRESIDENT o SALESMAN
• La segunda condición es que el salario sea mayor a $1500
La consulta se puede leer de la siguiente forma :
“Obtener los empleados que sean PRESIDENTES o VENDEDORES y ganen
más de $1500”.
Cláusula ORDER BY
El orden en que se muestran los renglones de una tabla no está definido, de
hecho aparecen en el orden en el que los registros fueron almacenados por
primera vez en la tabla.
Puede especificar una expresión o un alias para ordenar.
Sintaxis
SELECT expr
FROM table
[WHERE condition(s)]
[ORDER BY {column, expr} [ASC|DESC]];
Ordenando datos
El orden por default es ascendente :
• Los valores numéricos son mostrados del menor al mayor
• Las fechas son mostradas con el valor de la fecha más pasada, por
ejemplo, 01-ENE-92 es primero que 01-ENE-95.
• Las cadenas de caracteres son desplegadas en orden alfabético.
• Los valores nulos aparecen al principio cuando es ascendente y al final
cuando es descendente el ordenamiento.
SELECT *
FROM emp
ORDER BY empno, deptno, sal DESC;
Entrada Salida
Función
arg n
Funciones de SQL
Las funciones son herramientas muy poderosas de SQL y pueden ser utilizadas de la
siguiente forma :
•Ejecutar cálculos sobre los datos
•Modificar datos individuales
Las funciones aceptan argumentos y devuelven un resultado.
Funciones
Funciones Funciones
Renglón-
Renglón-simple Renglón-
Renglón-Múltiple
Funciones de SQL
Existen dos tipos de funciones :
• Funciones de Renglón-simple
• Funciones de Renglón-múltiple
Funciones de Renglón-simple
Estas funciones operan con renglones individuales y retornan un resultado por
renglón, los tipos de función son para manipular :
• Caracteres
• Números
• Fechas
Funciones de Renglón-múltiple
Estas funciones manipulan grupos de renglones para retornar solo un resultado
por cada grupo de registros. Estas funciones se analizarán en la siguiente lección.
– Manipulan datos
– Aceptan argumentos y retornan un valor
– Actúan sobre cada renglón
– Retornan un resultado por renglón
– Pueden ser anidadas
Funciones de Renglón-simple
Son utilizadas para manipular datos. Aceptan uno o más argumentos y devuelven
un solo valor por cada registro procesado.
Sintaxis :
function_name es el nombre de la función.
column una columna de la base de datos.
expression es una cadena de caracteres o una expresión.
arg1, arg2 es cualquier argumento de la función.
Caracter Numéricas
Funciones
Renglón-
Renglón-simple
Conversión Fecha
Función Propósito
Retorna una cadena de caracteres convertida a
LOWER(c_expression)
minúsculas.
Retorna una cadena de caracteres convertida a
UPPER(c_expression)
mayúsculas.
Retorna los n caracteres más a la izquierda de la
LEFT(c_expression, n)
cadena.
Retorna el número de caracteres que contiene la
LEN(c_expression)
cadena.
Elimina los caracteres en blanco de la izquierda de
LTRIM(c_expression)
c_expression.
Retorna los n caracteres más a la derecha de la
RIGHT(c_expression, n)
cadena.
Elimina los caracteres en blanco de la derecha de
RTRIM(c_expression)
c_expression.
Retorna los n carateres de c_expression empezando en
SUBSTRING(c_expression, start, n)
start.
REPLICATE(caracter, n) Repite n veces caracter.
Función Resultado
LOWER('SQL Course') sql course
UPPER('SQL Course') SQL COURSE
EMPLOYEE DETAILS
-----------------------------------------
The job title for SMITH is clerk
The job title for ALLEN is salesman
The job title for WARD is salesman
The job title for JONES is manager
The job title for MARTIN is salesman
........
Función Resultado
LEFT('Good', 2) Go
SUBSTRING('String',1,3) Str
LEN('String') 6
LTRIM(' String') String
RIGHT('Good', 2) od
RTRIM('String ') String
REPLICATE('S’, 4) SSSS
Sintaxis :
ename hiredate
---------- --------------------------- ---------------------------
CLARK 1981-06-09 00:00:00.000 1981-11-09 00:00:00.000
KING 1981-11-17 00:00:00.000 1982-04-17 00:00:00.000
MILLER 1982-01-23 00:00:00.000 1982-06-23 00:00:00.000
Conversiones
de tipo
Conversiones Conversiones
de tipo implícitas de tipo explícitas
Funciones de Conversión
Existen dos tipos de conversión entre tipos de datos:
• Conversiones de tipo Implícitas
• Conversiones de tipo Explícitas
Conversiones de tipo Implícitas : son aquellas que ocurren sin tener que realizar
la conversión de tipo.
Conversiones de tipo Explícitas : son aquellas que necesitan una conversión de
tipo para poder operar.
SELECT ename,
CAST( hiredate AS char) "Hire Date"
FROM emp;
106 - dd mon yy
Función ISNULL
Convierte un valor nulo a un valor indicado.
Sintaxis
donde :
expr1 es el valor o expresión que contiene valores nulos.
expr2 es el valor por el que se reemplazará NULL.
Función ISNULL
En el ejemplo se calcula el sueldo anual mas la comisión, los empleados que no
ganan comisión se reemplaza el valor nulo por cero, por lo que el resultado se
muestra en el ejemplo. En caso contrario si no se utiliza la función ISNULL el
resultado no es el mismo (ver página 2-13).
– Funciones de Renglón-
Renglón-simple pueden estar
anidadas a cualquier nivel.
– Las funciones anidadas son evaluadas desde la
más interna a la más externa.
Paso 2 = Resultado 2
Paso 3 = Resultado 3
Funciones Anidadas
Funciones de Renglón-simple pueden estar anidadas a cualquier nivel de
profundidad. Las funciones anidadas son evaluadas desde la más interna a la más
externa.
SELECT ename
, ISNULL(CONVERT(char(10), mgr), 'No manager') Manager
FROM emp
ORDER BY mgr
ename Manager
---------- -----------------------------
KING No Manager
…
14 rows selected
– Escriba la condición-
condición-join en la cláusula FROM
utilizando ON.
– Incluya el nombre de la tabla como prefijo del
nombre de la columna, cuando el nombre de la
columna aparezca en dos o más tablas.
Definición de Join
Cuando se requieren datos que están en mas de una tabla, se requiere utilizar una
condición-join. Los renglones de una tabla pueden ser “unidos” (joined) a los de otra
tabla, solo si existen en ambas tablas un atributo que sea común entre ellas,
normalmente, una relación de llave primaria y llave foránea.
Para desplegar datos de dos o más tablas que están relacionadas, escriba una simple
condición-join en la cláusula FROM.
Sintaxis :
table.column
denota la tabla y columna donde los datos serán recuperados.
table1.column1 = table2.column2
es la condición que “junta” las tablas.
• Cuando escriba una consulta que relacione dos tablas, preceda cada columna
con el nombre de su respectiva tabla por claridad y mejorar el acceso a la base
de datos.
• Si el mismo nombre de columna aparece en más de una tabla, el nombre de la
columna debe ser precedido por el nombre de la tabla.
• Para relacionar n tablas, necesita realizar un mínimo de n-1 condiciones-join.
Si relaciona cuatro tablas necesita hacer tres condiciones-join.
1- (A TIMES B)
producto cartesiano, produce una relación C.
2- (C WHERE X theta Y)
restricción, obtiene las tuplas de la relación C que cumplan la condición X theta
Y, donde X y Y, son atributos comunes en las relaciones A,B y theta es
cualquier operador de comparación; produce una relación D.
3- D[m,n,..,q]
Y por último se proyectan todos los atributos del la relación D.
A x B
a x
A B
a y
a b x
x
b × = b y
y c x
c c y
Producto Cartesiano
En matemáticas, el producto cartesiano de dos conjuntos; es el conjunto de
todos los pares ordenados de elementos tales que el primer elemento de
cada par pertenece a A y el segundo elemento de cada par pertenece a B.
Representado por la siguiente expresión :
A×B = {(x, y) : x ∈ A∧ y ∈B }
Producto Cartesiano
Cuando una condición-join es inválida o se omite, el resultado es un
Producto Cartesiano en el que se combinan cada uno de los renglones de la
tabla 1 con todos los de la tabla 2, hasta terminar el último registro de la
tabla 1, con todos los de la tabla 2.
Un Producto Cartesiano tiende a generar un gran número de renglo nes
(multiplicar la Cardinalidad de la tabla 1 por la Cardinalidad de la tabla
2, y se obtiene la Cardinalidad del producto cartesiano).
ENAME DNAME
------ ----------
KING
ACCOUNTING
BLAKE
“ Producto ACCOUNTING
...
Cartesiano: KING RESEARCH
BLAKE RESEARCH
14*4=56 reng
reng.”
.” ...
(56 row(s) afected)
Producto Cartesiano
En el ejemplo se muestran el nombre de los empleados y el de los
departamentos de las tablas EMP y DEPT, debido a que no se indicó condición
en la cláusula WHERE, todos los renglones (14) de la tabla EMP son unidos
(joined) a los renglones (4) de la tabla DEPT, el resultado es una tabla con 56
renglones.
ENAME DNAME
---------- --------------
KING ACCOUNTING
BLAKE ACCOUNTING
...
KING RESEARCH
BLAKE RESEARCH
...
56 rows selected.
Tipos de Joins
Existen dos tipos principales de condición-join.
• Equijoins (inner join)
• Non-equijoins
Equijoins
Para determinar el nombre de los departamentos a los que pertenecen cada
empleado, necesita comparar el valor en la columna DEPTNO de la tabla
EMP con los valores de DEPTNO en la tabla DEPT. La relación entre las
tablas EMP y DEPT son conocidas como un equijoin, es decir, los valores
de las columnas DEPTNO en ambas tablas deben coincidir.
Nota : Los equijoins son también llamados simplemente joins o inner joins.
EMP DEPT
EMPNO ENAME DEPTNO DEPTNO DNAME LOC
------ ------- ------- ------ --------- --------
7839 KING 10 10 ACCOUNTING NEW YORK
7698 BLAKE 30 30 SALES CHICAGO
7782 CLARK 10 10 ACCOUNTING NEW YORK
7566 JONES 20 20 RESEARCH DALLAS
7654 MARTIN 30 30 SALES CHICAGO
7499 ALLEN 30 30 SALES CHICAGO
7844 TURNER 30 30 SALES CHICAGO
7900 JAMES 30 30 SALES CHICAGO
7521 WARD 30 30 SALES CHICAGO
7902 FORD 20 20 RESEARCH DALLAS
7369 SMITH 20 20 RESEARCH DALLAS
... ...
Condiciones adicionales
Además de la condición-join, puede indicar otros criterios de búsqueda en
la cláusula WHERE. Por ejemplo, mostrar el número y nombre del
empleado, número y localización del departamento para el empleado
KING.
CUSTOMER ORD
NAME CUSTID CUSTID ORDID
----------- ------ ------- -------
JOCKSPORTS 100 101 610
TKB SPORT SHOP 101 102 611
VOLLYRITE 102 104 612
JUST TENNIS 103 106 601
K+T SPORTS 105 102 602 ITEM
SHAPE UP 106 106 604 ITEMID
ORDID
WOMENS SPORTS 107 106 ------
605 -------
... ... ...
610 3
9 rows selected. 21 rows selected.
611 1
612 1
– Obtener los items comprados 601 1
por Tkb Sports Shop. 602 1
...
64 rows selected.
Non-Equijoins
La relación entre las tablas EMP y SALGRADE son un Non-Equijoins, es
decir, que ninguna columna de la tabla EMP corresponde directamente a
una columna en la tabla SALGRADE.
La relación entre estas dos tablas es por la columna LOSAL y HISAL de la
tabla SALGRADE. La relación se obtiene utilizando otro operador
diferente del (=).
No existen empleados en el
departamento OPERATIONS
Outer Joins
Los renglones que no cumplen la condición pueden ser mostrados
dependiendo de que lado se encuentren.
Utilice LEFT o RIGHT dependiendo de que lado se encuentran los
renglones que desee aparezcan aun cuando no cumpla la condición-join.
Nota : Este método no se aplica de la misma forma que los demás tipos de
join para el método tradicional (de colocar la condición-join en la cláusula
WHERE), por lo que cada manejador utiliza su propia sintaxis para
implementar este tipo de joins, en ORACLE por ejemplo se utiliza el
operador (+) del lado de la condición que evaluará el LEFT o RIGHT.
Self Joins
En ocasiones necesitará hacer join con la misma tabla. Por ejemplo, para
encontrar el nombre del jefe de cada empleado, necesita hacer un join con
EMP y con la misma tabla.
Por ejemplo, para encontrar el nombre del “Jefe”de Blake, necesita :
• Encontrar a Blake en la tabla EMP mediante la columna ENAME.
• Encontrar el número de jefe para Blake en la columna MGR. El
número del jefe de Blake es 7839.
• Encontrar el nombre del jefe con EMPNO = 7839, mirando en la
columna ENAME, King es el nombre que tiene el número 7839. De
tal forma que, King es el Jefe de Blake.
-------------------------------
BLAKE works for KING
CLARK works for KING
JONES works for KING
MARTIN works for BLAKE
...
13 rows selected.
– Utilice equi
equi--joins para unir tablas
– Ejecute outer
outer--joins y self
self--joins
– Agrege condiciones adicionales
Función Descripción
AVG([DISTINCT|ALL]n) Valor promedio de n, ignora valores null
COUNT({*|[DISTINCT|ALL]expr}) Número de renglones, donde expr evalue otro valor
diferente de null. Cuenta todos los renglones seleccionado
utilizando *, incluyendo renglones duplicados con valores
nulos.
MAX([DISTINCT|ALL]expr) Valor Máximo de expr, ignorando valores null
---------- ----------
ADAMS WARD
Nota : Las funciones AVG y SUM solo pueden ser utilizadas con datos
numéricos.
SELECT COUNT(*)
FROM emp
WHERE deptno = 30;
---------
6
La función COUNT
La función COUNT tiene dos formatos :
• COUNT (*)
• COUNT(expr)
COUNT (*) retorna el número de renglones en una tabla, incluyendo renglones
que contengan valores null.
A diferencia de COUNT(expr), esta retorna el número de renglones no nulos en
la columna identificada por expr.
En el ejemplo, el query retorna el número de empleados en el departamento 30.
COUNT(expr
COUNT(expr)) retorna el número de renglones non-
non-null.
null.
SELECT COUNT(comm)
FROM emp
WHERE deptno = 30;
-----------
4
SELECT COUNT(deptno)
FROM emp;
-------------
14
-----------
3
---------
550
SELECT AVG(ISNULL(comm,0))
FROM emp;
----------------
157.14286
EMP “promedio
DEPTNO SAL salarial en la
--------- --------- tabla EMP
10 2450 por cada
10 5000 2916.6667 departamento”
10 1300
20 800 deptno avg(sal)
20 1100 ------- ---------
20 3000 2175
10 2916.6667
20 3000
20 2975 20 2175.0000
30 1600 30 1566.6667
30 2850
30 1250 1566.6667
30 950
30 1500
30 1250
Grupos de Datos
Hasta ahora, todas las funciones de grupo tratan a la tabla como un solo grupo de
información. En ocasiones, necesitará dividir la tabla en pequeños grupos de
información. Esto se puede realizar utilizando la cláusula GROUP BY.
La cláusula GROUP BY
Puede utilizar la cláusula GROUP BY para dividir en pequeños grupos de
información a una tabla. Entonces puede utilizar las funciones de grupo para
resumir la información de estos grupos.
deptno
--------- ---------
10 2916.6667
20 2175.0000
30 1566.6667
SELECT AVG(sal)
FROM emp
GROUP BY deptno;
---------
2916.6667
2175.0000
1566.6667
DEPTNO AVG
---------- ------------
30 1566.6667
20 2175.0000
10 2916.6667
EMP
DEPTNO JOB SAL
--------- --------- ---------
10 MANAGER 2450
DEPTNO JOB SUM(SAL)
10 PRESIDENT 5000
-------- --------- ---------
10 CLERK 1300
10 CLERK 1300
20 CLERK 800 “sumar los 10 MANAGER 2450
20 CLERK 1100 salarios de 10 PRESIDENT 5000
20 ANALYST 3000 la tabla EMP 20 ANALYST 6000
20 ANALYST 3000 por puesto,
20 CLERK 1900
20 MANAGER 2975 agrupados por
20 MANAGER 2975
30 SALESMAN 1600 departamento”
30 CLERK 950
30 SALESMAN 1250
30 MANAGER 2850
30 SALESMAN 1500
30 SALESMAN 5600
30 SALESMAN 1250
30 MANAGER 2850
30 CLERK 950
DEPTNO COUNT
---------- -----------
10 3
20 5
30 6
DEPTNO AVG
---------- --------------
10 2916.6667
20 2175.0000
Cláusula HAVING
Utilice HAVING para especificar cuales grupos serán mostrados. SQL Server
realiza los siguientes pasos cuando utiliza HAVING :
• Los renglones son agrupados.
• Las funciones de grupo son aplicadas a cada grupo.
• Los grupos que cumplan la condición HAVING, serán mostrados.
DEPTNO AVG
--------- ---------
10 2916.6667
20 2175.0000
JOB PAYROLL
--------- ---------
ANALYST 6000
MANAGER 8275
Query Principal
Subquery
?
“¿Cuál es salario de Jones?”
Suponga que quiere escribir un query para encontrar a los empleados que ganan
más que el salario de Jones.
Para resolver este problema, necesita dos queries: uno por encontrar el salario
Jones y otro par encontrar quien ganan más que este salario.
Puede resolver este problema combinando dos queries , colocando un query
interno dentro del otro.
Un query interno o subquery retorna un valor que es utilizado por un query
externo o query principal. Usar un subquery es equivalente a ejecutar dos query
secuenciales y utilizar el resultado del primer query como búsqueda en el
segundo query.
SELECT select_list
FROM table
WHERE expr operator
(SELECT select_list
FROM table);
Subqueries
Un subquery es una instrucción SELECT que está embebida en otra instrucción
SELECT. Puede construir instrucciones poderosas con tan sólo utilizar
subqueries. Pueden ser muy útiles cuando necesite seleccionar renglones de una
tabla con una condición que depende de datos en la misma tabla.
Puede colocar un subquery en las siguientes cláusulas:
- cláusula WHERE
- cláusula HAVING
- cláusula FROM
En la sintaxis :
operator incluye un operador de comparación tal como: >, = o IN.
Nota: los operadores de comparación se dividen en dos tipos:
- operadores de renglón-simple (>,=,>=,>,<>,<=)
- operadores de renglón-múltiple (IN, ALL, ANY).
Un subquery es a menudo llamado un SELECT anidado. El subquery
generalmente se ejecuta primero y su salida es utilizada para completar la
condición del query principal.
ename sal
---------- ---------
SCOTT 3000.00
KING 5000.00
FORD 3000.00
Utilizando un subquery
En el ejemplo, el query interno determina el salario del empleado Jones. El query
externo toma el resultado del query interno y lo utiliza para desplegar a todos los
empleados que ganen más que esta cantidad.
• Subquery de renglón-Multiple
Main query
Subquery
retorna CLERK
MANAGER
Tipos de subqueries
• Subqueries de renglón-simple: son queries que retornan sólo un valor en
la instrucción SELECT del query interno.
• Subqueries de múltiple-renglón: son queries que retornan más de un
renglón en la instrucción SELECT del query interno.
Operador Descripción
= Igual
<> Diferente
Subqueries de renglón-simple
Son queries que retornan sólo un valor en la instrucción SELECT del query
interno. Este tipo de subqueries utiliza operadores de renglón simple.
Ejemplo
Desplegar a todos los empleados cuyo puesto sea el mismo que el del
empleado 7369.
Operador Significado
Subqueries de múltiple-renglón
Los subqueries que retornan más de un renglón, son llamados subqueries de múltiple-
renglón. Debe utilizar un operador de múltiple-renglón en lugar de los operadores de
renglón-simple. Los operadores de renglón-múltiple esperan uno o más valores.
Ejemplo
Encontrar a los empleados que ganen el mismo salario que el salario mínimo de los
departamentos. El query interno se ejecuta primero, produciendo un resultado con tres
renglones: 800, 950, 1300. El query principal procesa estos valores para completar su
condición. De hecho, el query externo se convertiría en:
FROM emp
WHERE sal < ANY (SELECT sal
FROM emp
WHERE job = 'CLERK')
AND job <> 'CLERK';
(SELECT avg(sal)
FROM emp
GROUP BY deptno);
deptno salavg
------- ---------
10 2916.6667
20 2175.0000
30 1566.6667
El operador EXISTS
Con instrucciónes SELECT anidadas, puede utilizar el operador EXISTS. Este
operador es frecuentemente utilizado para correlacionar subqueries.
El query externo se ejecuta registro tras registro, tal y como lo hacen los
querys normales, pero por cada renglon del query externo, se evalúa la
condición EXIST recorriendo el query interno, renglón tras renglón hasta que
algún renglón del query interno cumpla la condicón que se haya especificado,
entonces, si se encuentra un renglón en el query interno que cumpla la
condición, la condición EXIST se evalúa a verdadero, sin tener que terminar
de recorrer el query interno, en caso contrario, si ningún renglón del query
interno cumple la condición especificada, la condición EXIST se evalúa a
falso, para el renglón del query externo que se esté evaluando.
De la misma forma NOT EXISTS evalúa si no existe algún valor.
El operador EXISTS
El operador EXISTS asegura que la búsqueda en el query interno no continúe
cuando al menos encuentre un renglón que cumpla la condición de que un
manager tenga al menos un empleado como subordinado.
deptno dname
------ --------------
40 OPERATIONS
Solución alternativa
Como se mostró en el ejemplo anterior, un NOT IN puede ser utilizado como
una alternativa al NOT EXISTS. Sin embargo, NOT IN se evaluará a falso si
cualquier miembro del conjunto es nulo. En este caso el query no retornará
renglones.
Objeto Descripción
Table Unidad básica de almacenamiento;
compuesta de renglones
View Representación lógica de un grupo de
datos de una o más tablas
Index Para mejorar el desempeño de los queries
– Debe especificar :
• El nombre de la tabla
• El nombre de las columnas, tipo y tamaño
La opción default
A una columna se le puede dar un valor por default utilizando la opción
DEFAULT. Esta opción previene la inserción de valores NULL, si se inserta un
renglón sin un valor indicado para esta columna. El valor por default puede ser
una literal, una expresión o una función SQL; tales como GETDATE() o
USER_NAME(). La expresión por default debe coincidir con el tipo de dato de
la columna.
SELECT *
FROM dept2;
Creando tablas
El ejemplo crea la tabla DEPT, con tres columna (DEPTNO, DNAME y LOC).
Para confirmar la creación de la tabla ejecute el query mostrado en el ejemplo.
Ejemplo:
sp_help dept2;
Datatype Descripción
VARCHAR(size) Caracter de longitud-Variable
CHAR(size) Caracter de longitud-Fija
NUMERIC(p,s) Datos numéricos
DATETIME Valores tipo fecha y hora
TEXT Dato tipo caracter de longitud-Variable
hasta 2 gigabytes
IMAGE Dato Binario con una longitud
máxima hasta 2,147,483,647 bytes
DEPT30
EMPNO ENAME SAL HIREDATE AGE
------ ---------- --------
7698 BLAKE 34200 01-MAY-81
7654 MARTIN 15000 28-SEP-81
7499 ALLEN 19200 20-FEB-81
7844 TURNER 18000 08-SEP-81
...
Agregando columna
El ejemplo agregue a la columna AGE a la tabla EMP. Note que la nueva
columna se coloca al final de las columnas en la tabla.
¿Qué es un Constraint?
Constraints
Microsoft SQL Server utiliza constraints para prevenir la inserción de datos
inválidos en las tablas.
Constraint implícitos : Abreviatura
NOT NULL NN
UNIQUE UK
PRIMARY KEY PK
FOREIGN KEY FK
Estos constraints se denominan implícitos, porque la regla de validación ya está
dada por el manejador.
Constraint explícitos : Abreviatura
CHECK CK
Constraints (continuación)
Todos los constraints son almacenados en el diccionario de datos. Los
constraints serán fáciles de referenciar si les otorga un nombre adecuado. Para
asignar un nombre a un constraint debe utilizar las reglas estándar para el
nombrado de objetos de la base de datos. Si no asigna un nombre al constraint,
Microsoft SQL Server le asignará un nombre interno, lo cual puede confundir al
momento de obtener errores.
Los constraints pueden ser definidos al momento en que es creada la tabla o
después de haberla creado.
Definiendo Constraints
El ejemplo muestra la sintaxis para definir constraints mientras se crea una tabla.
Sintaxis:
table es el nombre de la tabla.
DEFAULT expr especificar un valor por default si el valor es
omitido en instrucción INSERT.
column es el nombre de la columna.
datatype ese el tipo y longitud de la columna.
column_constraint es la restricción como parte de la definición de
la columna.
table_constraint es la restricción como parte de la definición de la
tabla.
EMP
EMPNO ENAME JOB ... COMM DEPTNO
– REFERENCES
Identifica a la tabla y columna que hace
referencia en la tabla "padre"
Constraint CHECK
El constraint CHECK define una condición que cada renglón debe cumplir. La
condición puede ser definida al igual que las condiciones de los queries.
Una simple columna puede tener múltiples constraints CHECK, no hay límite
para el número de constraints CHECK que defina para una columna.
Agregando constraints
Puede agregar constraints a la tabla existentes utilizando la excepción ALTER
TABLE con la cláusula de ADD.
Sintaxis:
table es el nombre de la tabla.
column es el nombre de la columna afectada.
type ese el tipo de constraint.
constraint es el nombre del constraint.
El nombre del constraint es opcional, sin embargo se recomienda asignar uno.
Sino define un nombre al constraint, el sistema generará uno para ese constraint
por default, el cual al momento de obtener errores, no proporcionarán
información descriptiva del error.
Eliminando un Constraint
Para eliminar un constraint, debe identificar el nombre con el que fue asignado,
entonces utilice la instrucción ALTER TABLE con la cláusula DROP.
Insertando datos 9-
9-1 SQL Server
Insertando datos 9-
9-2 SQL Server
Insertando datos 9-
9-3 SQL Server
50 DEVELOPMENT DETROIT
“…insertar un nuevo
New row
renglón en la tabla
DEPT DEPT …”
DEPTNO DNAME LOC
------ ---------- --------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS DEPT
30 SALES CHICAGO DEPTNO DNAME LOC
40 OPERATIONS BOSTON ------ ---------- --------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
50 DEVELOPMENT DETROIT
Insertando datos 9-
9-4 SQL Server
Insertando datos 9-
9-5 SQL Server
Sintaxis:
table es el nombre de la tabla.
column es el nombre de la columna.
values es valor que le corresponderá a la columna
Insertando datos 9-
9-7 SQL Server
Method Description
Implícito Omite la columna de la lista de columnas.
Explícito Especifique la palabra NULL la lista de valores (VALUES)
Insertando datos 9-
9-8 SQL Server
EMP
EMPNO ENAME JOB ... DEPTNO
Insertando datos 9-
9-9 SQL Server
UPDATE table
SET column = value [, column = value]
[WHERE condition];
Insertando datos 9-
9-10 SQL Server
Sintaxis:
table es el nombre de la tabla.
column es el nombre de la columna.
values es valor que le corresponderá a la columna.
condition identifica a los renglones que serán actualizados y se compone
por nombres de columnas, expresiones, constantes, subqueries
y operadores de comparación.
UPDATE emp
SET deptno = 20
WHERE ename = 'CLARK';
(1 row(s) affected)
Insertando datos 9-
9-11 SQL Server
UPDATE emp
SET deptno = (SELECT deptno
FROM emp
WHERE ename = 'JONES')
WHERE job = (SELECT job
FROM emp
WHERE ename = 'CLARK');
(2 row(s) affected)
Insertando datos 9-
9-12 SQL Server
UPDATE emp
SET deptno = 55 e
WHERE deptno = 20; x ist
e
n o
55
ro
e
m
Servidor: mensaje 547, nivel 16,núestado 1, línea 1
to
en
Instrucción UPDATE en conflicto con la restricción
tam
COLUMN FOREIGNpaKEY 'EMP_DEPTNO_FK'. El
r
de en la base de datos 'cursosql', tabla
conflicto ha aparecido
El
'DEPT', column 'DEPTNO'.
Se terminó la instrucción.
Insertando datos 9-
9-13 SQL Server
Errores de integridad
Si intenta actualizar un registro con un valor que viola una regla de integridad
(como la referencial), obtendrá un error.
En el ejemplo, el número de departamento 55 no existe en la tabla padre,
DEPT, obtendrá un error de violación del constraint referencial.
Insertando datos 9-
9-14 SQL Server
Insertando datos 9-
9-15 SQL Server
Eliminando renglones
Puede eliminar renglones existentes utilizando instrucción DELETE.
Sintaxis:
table es el nombre de la tabla.
condition identifica a los renglones que serán borrados y se compone
por nombres de columnas, expresiones, constantes, subqueries
y operadores de comparación.
Insertando datos 9-
9-16 SQL Server
Insertando datos 9-
9-17 SQL Server
Insertando datos 9-
9-18 SQL Server
Errores de integridad
Si intenta borrar un renglón con valor que pertenece a una regla de integridad
obtendrá un error. El ejemplo intenta borrar el departamento 10 de la tabla
DEPT. Si la tabla padre que intenta borrar tiene registros hijos, entonces
obtiene un error de integridad referencial.
Transacciones 10-
10-1 SQL Server
Transacciones 10-
10-2 SQL Server
-- complete transacction
COMMIT TRAN[SACTION] transacction_name
-- undo transacction
ROLLBACK
Transacciones 10-
10-3 SQL Server
Transacciones
Una transacción asegura que múltiples modificaciones a los datos sean
procesados como una unidad; esto se conoce como atomicida.
Por ejemplo, en una transacción bancaria, un cliente pudiera realizar un traspaso
de fondos de una cuenta de ahorros a una cuenta de cheques. Ambas operaciones
deben ser completadas juntas para asegurar la consistencia de los datos.
Se dice que las transacciones tienen propiedades “ácidas”, por las siglas ACID:
Atomicity, Consistency, Isolation y Durability. (atomicidad, consistencia,
Aislamiento y durabilidad). La atomicidad se refiere al hecho de que deben ser
indivisibles; se realizan todas las operaciones, o ninguna. Consistencia quiere
decir, que una transacción debe llevar la base de datos de un estado consistente a
otro. Aislamiento, a pesar de que existan transacciones ejecutándose
concurrentemente, debemos percibir que somos los únicos con acceso a los
datos. Es decir, no se deben de leer valores de otras transacciones que no hayan
sido confirmados. Y la durabilidad se refiere a que cuando una transacción se
confirma, los cambios solamente pueden deshacerse mediante otra transacción.
Transacciones 10-
10-4 SQL Server
BEGIN TRAN x
UPDATE emp
SET deptno = 40
WHERE empno = 7782;
COMMIT TRAN x;
(1 row(s) affected)
Transacciones 10-
10-5 SQL Server
Instrucción COMMIT
• Una transacción se considera completada solo si una entrada BEGIN
TRANSACTION está asociada con un COMMIT TRANSACTION.
• Los cambios se hacen permanentes en la base de datos.
• Todos los usuarios pueden ver los resultados.
• Los renglones bloqueados son liberados; estos renglones quedan disponibles
para que otros usuarios los pueden manipular.
BEGIN TRAN x
...
...
ROLLBACK;
Transacciones 10-
10-6 SQL Server
Instrucción ROLLBACK
Como parte del manejo de errores, puede incluir instrucciones dentro de una
transacción que permitan deshacer completamente las operaciones afectadas
desde el inicio de la transacción utilizando la instrucción ROLLBACK.
BEGIN TRAN x
UPDATE emp
SET deptno = 30
WHERE empno = 7782;
(1 row(s) affected)
Transacciones 10-
10-7 SQL Server
Transacciones 10-
10-8 SQL Server
Log
2
Las páginas de datos Data
son colocadas o leídas 4
dentro del Buffer cache. Todas las
transacciones son
grabadas a la Base
de datos.
Transacciones 10-
10-9 SQL Server