Está en la página 1de 222

Introducción

Introducción-
Introducción-1 SQL Server

Introducción a SQL-Server 1-1


Objetivos

• Describir los conceptos y terminología del


Modelo de base de datos relacional
• Describir la implementación de SQL Server como
RDBMS
• Conocer la arquitectura de SQL Server
• Describir los elementos de Transact-
Transact-SQL
• Conocer los componentes del SQL

Introducción-
Introducción-2 SQL Server

En esta lección, entenderá lo que es un sistema manejador de bases de datos relacionales y


también será iniciado a:

• Las instrucciones de SQL


• Los elementos de Transact-SQL
• La arquitectura de SQL-Server

Introducción a SQL-Server 1-2


Ciclo de vida del desarrollo de un sistema

Análisis

Diseño
Construir
la Base
de Datos Refinar
el
prototipo

Producción

Introducción-
Introducción-3 SQL Server

Ciclo de vida del desarrollo de un sistema


Desde el concepto hasta la producción, puede desarrollar una base de datos utilizando el ciclo de
desarrollo de un sistema. Esta técnica (top-down) permite transformar los requerimientos de
información de negocios a una base de datos.
Análisis
Estudiar y analizar los requerimientos del problema. Entrevistando a los usuarios para identificar
los requerimientos de información.
Diseño
Diseñar la base de datos basado en el modelo entidad-relación.
Construir la base de datos
Construir el prototipo. Escribir y ejecutar los comandos para crear tablas para la base de datos.
Desarrollar la documentación, ayuda y manuales de operación para el sistema.
Refinar el prototipo
Mover la aplicación al entorno del usuario para su verificación, conversión de datos existentes, y
realizar las operaciones requeridas.
Producción
Entregar el sistema al usuario. Verificar su rendimiento, y realizar mejoras si es necesario para
refinar el sistema.

Nota: Este curso está enfocado a la fase de construcción de una base de datos.

Introducción a SQL-Server 1-3


Modelo 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.

Introducción a SQL-Server 1-4


Diferentes medios para almacenar datos
SALGRADE
GRADE LOSAL HISAL
--------- --------- ---------
DEPT
1 700 1200
DEPTNO DNAME LOC
2 1201 1400
--------- -------------- ----------
3 1401 2000
10 ACCOUNTING NEW YORK
4 2001 3000
20 RESEARCH DALLAS
5 3001 9999
30 SALES CHICAGO
40 OPERATIONS BOSTON

Database

Electronic Filing cabinet


spreadsheet
Introducción-
Introducción-5 SQL Server

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 a SQL-Server 1-5


¿Qué es una Base de datos ?

Es un conjunto de archivos ( también llamados


tablas ) que tienen relación entre sí, las tablas se
componen de registros (tuplas
(tuplas)) y estas a su vez
de campos (atributos); donde finalmente se
almacenan los datos.

Una base de datos puede suministrar información


útil para la toma de decisiones.

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 a SQL-Server 1-6


El concepto de Base de datos relacional

• El Dr. E. F. Codd propuso el modelo de bases


de datos relacionales en 1970.
• Es la base para los manejadores de bases de
datos relacionales (RDBMS : Relational
DataBase Management Systems).
Systems).
• El modelo relacional contiene los siguientes
componentes:
– Colección de tablas
– Un conjunto de operaciones que actúan
sobre las relaciones
– Integridad y consistencia en los datos

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

Para más información,


E. F. Codd, The Relational Model for Database Management Version 2
(Reading, Mass.: Addison-Wesley, 1990).

Introducción a SQL-Server 1-7


Una base de datos relacional

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

Base de datos relacional


Una base de datos utiliza relaciones o tablas en dos dimensiones para almacenar la información.
Por ejemplo: podría almacenar información acerca de los empleados en su compañía. En una
base de datos relacional, puede crear varias tablas para almacenar diferentes partes de
información acerca de sus empleados, en una tabla de empleados, una de departamentos, etc.

Introducción a SQL-Server 1-8


Terminología del modelo relacional
• Cada tabla esta compuesta por renglones y
columnas

Tabla (Relación) CLIENTES

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 a SQL-Server 1-9


Terminología del modelo relacional
2 3 4
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
6
------------- ------------ --------------------- -------- ---------------- ----------- -------------- -----------
7839 KING PRESIDENT 17-NOV-81 5000 10
7698 BLAKE MANAGER 7839 01-MAY-81 2850 30
7782 CLARK MANAGER 7839 09-JUN-81 2450 10
7566 JONES MANAGER 7839 02-APR-81 2975 20
7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30
7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30
7844 TURNER SALESMAN 7698 08-SEP-81 1500 5 0 30
7900 JAMES CLERK 7698 03-DEC-81 950 30
7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30
7902 FORD ANALYST 7566 03-DEC-81 3000 20
7369 SMITH CLERK 7902 17-DEC-80 800 20
7788 SCOTT ANALYST 7566 09-DEC-82 3000 20
7876 ADAMS CLERK 7788 12-JAN-83 1100 20

1 7934 MILLER CLERK 7782 23-JAN-82 1300 10

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.

Introducción a SQL-Server 1-10


Propiedades de una BDR

• En cada intersección de renglón y columna


deben existir valores “atómicos”, es decir, uno y
solo un valor, nunca un conjunto de valores.

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

Propiedades de una base de datos relacional


Para garantizar el fácil manejo y mantenimiento de una base de datos, sus tablas deben cumplir
las reglas de la normalización, la cual se basa en las siguientes formas normales:
• Primera Forma Normal
• Segunda Forma Normal
• Tercera Forma Normal
• Forma Normal Boyce/Code
• Cuarta Forma Normal
• Quinta Forma Normal
Cuando una tabla está en su primera forma normal se dice que la tabla está normalizada, para
llegar a este estado, se debe cumplir la siguiente condición que es propia de la primera forma
normal:
“En cada intersección de renglón y columna, deben de existir uno y solo un valor, nunca un
conjunto de valores”
Cuando cada campo cumple con esta condición se dice entonces que posee valores atómicos. Y
la tabla se encuentra normalizada o al menos en su primera forma normal.

Introducción a SQL-Server 1-11


La siguiente tabla no cumple la regla de
valores atómicos :

Nombre de la tabla: DEPTOS

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

Tabla sin normalizar


El ejemplo muestra una tabla que no cumple la primera forma normal, debido a que en la
columna Empleados de cada departamento (la cual especifica cuales empleados están asignados a
ese departamento) no contiene solo un valor, contiene un conjunto de valores, es decir, el
conjunto de empleados asignados a ese departamento.

Introducción a SQL-Server 1-12


Relacionando Tablas
• Cada renglón en la tabla debe ser identificado
por una llave primaria (primary key : PK).

• Puede relacionar “lógicamene” los datos de dos


tablas utilizando una llave foránea (foreign keys
:FK).
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

Primary key Foreign key Primary key


Introducción-
Introducción-13 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 a SQL-Server 1-13


• La llave primaria no debe repetirse, debido
a que identifica en forma única a cada
renglón en la tabla, ejemplo, no puede
haber dos clientes con el mismo número.
• La llave foránea es otro atributo diferente a
la llave primaria, esta si puede repetirse,
pero no debe hacer referencia a valores
que no existan en la tabla padre.
• La base fundamental del modelo
relacional, es que las tablas se relacionan
entre sí, a través de los valores de sus
atributos.
Introducción-
Introducción-14 SQL Server

Condiciones para llaves primarias y llaves foráneas


• No se permiten valores duplicados en una llave primaria.
• Las llaves primarias generalmente no son modificadas.
• Las llaves foráneas están basadas en valores y son apuntadores lógicos, no físicos.
• El valor de una llave foránea debe coincidir con el valor de la llave primaria o puede ser nula.

Introducción a SQL-Server 1-14


Propiedades de una BDR
• Una base de datos
– Puede ser accesada y/o modificada
ejecutando instrucciones de SQL
(structured query language)
– Las tablas están relacionadas
mediante los dominios de sus
atributos
– Consistencia e Integridad en los
datos

Introducción-
Introducción-15 SQL Server

Propiedades de una Base de Datos Relacional


En una una Base de Datos, no necesita especificar la ruta de acceso a las tablas, y no necesita
saber como es almacenada físicamente los datos.
Para accesar la Base de Datos, debe ejecutar instrucciones en un lenguaje estructurado de
consultas (SQL), el cual es un estándar de la American National Standards Institute (ANSI) para
operar sobre Bases de Datos.

Introducción a SQL-Server 1-15


Comunicación con RDBMS
utilizando SQL
Una instrucción SQL
es ejecutada La instrucción se
SELECT loc envia
FROM dept;

Database

Los Datos se muestran


LOC
-------------
NEW YORK
DALLAS
CHICAGO
BOSTON

Introducción-
Introducción-16 SQL Server

Lenguaje Estructurado de Consultas


SQL le permite comunicarse con el servidor y tienes las siguientes ventajas :
• Eficiencia
• Fácil de aprender y utilizar
• Funcionalidad completa. SQL le permite también definir, recuperar y manipular datos en
las tablas.

Introducción a SQL-Server 1-16


Lenguaje estructurado de consultas
SQL

SELECT Data retrieval (DML)

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 a SQL-Server 1-17


¿Qué es un RDBMS ?
( Relational DataBase Management Systems )

Un manejador de bases de datos relacionales


permite la creación y mantenimiento de bases
de datos, los usuarios pueden recuperar
información en periodos de tiempo muy
cortos, aseguran la integridad y la
consistencia de los datos mediante el manejo
de transacciones.

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.

Un RDBMS es responsable de mantener la estructura de la base de datos, incluyendo :


• Mantenimiento a las relaciones entre los datos de las tablas
• Asegurar que los datos sean almacenados correctamente, esto es , que las reglas que
definen la integridad de la base de datos no sean violadas
• Recuperar todos los datos al punto en donde los datos sean consistentes después de
ocurrir cualquier falla.

Introducción a SQL-Server 1-18


Existen en el mercado una gran
cantidad de manejadores de bases de
datos relacionales :
Manejadores para
grandes volúmenes de Manejadores
información : de escritorio:

• Oracle • Microsoft Access


• Informix • Microsoft Visual FoxPro
• Microsoft Sql Server • Paradox
• Progress • dBase
• Sybase
• DB2
Introducción-
Introducción-19 SQL Server

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.

Existen tres categorías :


• Los DBMS tradicionales tales como Microsoft SQL Server, Oracle, Informix, DB2,
Progress, Ingress y Sybase
• Manejadores de escritorio tales como Microsoft Access, Microsoft Visual Fox Pro, dBase
y Paradox
• Y los sistemas manejadores de archivos (simples archivos planos), con la adición de una
técnica para mejorar el acceso a estos archivos denominada Archivos ISAMs.

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.

Introducción a SQL-Server 1-19


Relational Database Management
System

Server

User tables Data


dictionary

Introducción-
Introducción-20 SQL Server

Relational Database Management System


Las aplicaciones pueden correr en la misma computadora junto con el Sql Server.
Alternativamente, puede ejecutar aplicaciones en un sistema local al usuario y correr el Servidor
SQL Server en otra computadora (arquitectura Cliente/Servidor).
En este ambiente Cliente/Servidor, un gran número de recursos se pueden compartir. Por
ejemplo, una aplicación para reservación de vuelos aéreos, pueden correr en la computadora
cliente mientras accesa los datos de los vuelos en la computadora del Servidor.

Introducción a SQL-Server 1-20


¿Qué es SQL Server?

Resultados

Transact-
Transact-SQL
Database

Cliente Servidor

Introducción-
Introducción-21 SQL Server

¿Qué es SQL Server?


SQL Server es un manejador de bases de datos relacionales (RDBMS), bajo la arquitectura
Cliente/Servidor, utiliza el Transact-SQL para enviar peticiones entre el cliente y 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.

Introducción a SQL-Server 1 -21


Plataformas que soporta SQL Server
MS-
MS-DOS Browsers
Windows 3.x Windows 9x Third Party
Windows NT

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.

Plataforma Server Software Cliente OS


Windows 9x Si, corre como una aplicación Si
Windows NT Workstation Si, corre como un servidor Si
Windows NT Si, corre como un servidor Si
Windows NT enterprise ed. Si, corre como un servidor Si
Windows 3.x Si
MS-DOS Si
Third Party Si- Unix, Macintosh
Internet browsers Si

El servidor solo aplica para la versión 7.0

Introducción a SQL-Server 1 -22


Elementos de Transact-SQL

• Data Control Language


• Data Definition Language
• Data Manipulation Language
• Additional Language Elements

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.

Introducción a SQL-Server 1-23


Escribiendo sentencias
básicas de SQL

Escribiendo Querys básicos 2-


2-1 SQL Server

Introducción a SQL-Server 2-1


Objetivos
• Al terminar esta lección, deberá ser
capaz de hacer lo siguiente :
– Listar las capacidades de la
instrucción SELECT de SQL
– Ejecutar una sentencia básica de
SELECT

Escribiendo Querys básicos 2-


2-2 SQL Server

Introducción a SQL-Server 2-2


Capacidades de la instrucción SELECT

Selección Proyección

Tabla 1 Tabla 1
Join

Tabla 1 Tabla 2
Escribiendo Querys básicos 2-
2-3 SQL Server

Capacidades de la instrucción SELECT


Una instrucción SELECT recupera información de la base de datos. Utilizando
esta instrucción puede realizar :

• Selección : Puede utilizar esta capacidad de SQL para seleccionar


renglones de la tabla que cumplan alguna condición.
• Proyección : Puede utilizar esta capacidad de SQL para seleccionar
columnas de la tabla, puede indicar tantas columnas tenga la tabla que
desee.
• Join: Puede utilizar esta capacidad para “reunir” datos almacenados en
diferentes tablas, creando una liga mediante un atributo que comparten en
ambas tablas (PK, FK).

Introducción a SQL-Server 2-3


Una instrucción SELECT básica

SELECT [DISTINCT] {*, column [alias],...}


FROM table;

– SELECT identifica que columnas


– FROM identifica cuales tablas

Escribiendo Querys básicos 2-


2-4 SQL Server

Una instrucción SELECT básica


En su forma más simple, una instrucción SELECT debe incluir lo suguiente:
• Una cláusula SELECT, la cual especifica las columnas a ser mostradas
• Una cláusula FROM, la cual indica las tablas donde se tomarán los valores
de las columnas especificadas en la cláusula SELECT.
Sintaxis:
SELECT se indica una lista de una o más columnas.
DISTINCT elimina renglones duplicados.
* muestra todas las columnas.
column selecciona la columna indicada.
alias etiqueta la columna con un nombre diferente del atributo.
FROM especifica la tabla que contiene las columnas.

Introducción a SQL-Server 2-4


Seleccionando todas las Columnas

SELECT *
FROM dept;

deptno dname loc


--------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON

Escribiendo Querys básicos 2-


2-5 SQL Server

Seleccionando todas las Columnas


Para seleccionar todas las columnas de una tabla utilice un asterisco (*). En el
ejemplo, la tabla DEPT contiene tres columnas: DEPTNO, DNAME y LOC.
También puede listar todas las columnas de la tabla indicando los nombres de
estas en la cláusula SELECT. Por ejemplo :

SELECT deptno, dname, loc


FROM dept;

Introducción a SQL-Server 2-5


Seleccionando Columnas Específicas

SELECT deptno, loc


FROM dept;

deptno loc
--------- -------------
10 NEW YORK
20 DALLAS
30 CHICAGO
40 BOSTON

Escribiendo Querys básicos 2-


2-6 SQL Server

Seleccionando Columnas Específicas


Puede seleccionar ciertas columnas de la tabla indicando los nombres de estas en
la cláusula SELECT separadas por comas. El ejemplo muestra todos los números
de departamento y localidades de la tabla DEPT.
Especifique las columnas en el orden en el que desea aparezcan en la consulta.
Por ejemplo, para desplegar la localización antes del número de departamento :

SELECT loc, deptno


FROM dept;

loc deptno
------------- ---------
NEW YORK 10
DALLAS 20
CHICAGO 30
BOSTON 40

Introducción a SQL-Server 2-6


Expresiones Aritméticas

Cree expresiones con datos tipo NUMERIC Y


DATE utilizando operadores aritméticos.

Operador Descripción

+ Add

- Subtract

* Multiply

/ Divide

Escribiendo Querys básicos 2-


2-7 SQL Server

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.

Introducción a SQL-Server 2-7


Utilizando Operadores Aritméticos

SELECT ename, sal, sal+300


FROM emp;

ename sal
---------- --------- ---------
KING 5000 5300
BLAKE 2850 3150
CLARK 2450 2750
JONES 2975 3275
MARTIN 1250 1550
ALLEN 1600 1900
...
(14 row(s) affected)

Escribiendo Querys básicos 2-


2-8 SQL Server

Utilizando Operadores Aritméticos


El ejemplo muestra el uso del operador suma para ejecutar un cálculo,
aumentando el salario en $300 para todos los empleados.
Note que la columna del resultado calculado no es una nueva columna en la tabla
EMP, es solo para la consulta.

Introducción a SQL-Server 2-8


Precedencia de los Operadores

_
* / +
– 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.

Escribiendo Querys básicos 2-


2-9 SQL Server

Precedencia de los Operadores


Si una expresión aritmética contiene más de un operador, la multiplicación y
división son evaluadas primero. Si los operadores de una expresión aritmética
tienen la misma prioridad la evaluación se efectúa de izquierda a derecha.
Puede utilizar paréntesis para forzar la evaluación de los operadores con menor
prioridad.

Introducción a SQL-Server 2-9


Precedencia de los Operadores

SELECT ename, sal, 12*sal+100


FROM emp;

ename sal
---------- --------- ----------
KING 5000 60100
BLAKE 2850 34300
CLARK 2450 29500
JONES 2975 35800
MARTIN 1250 15100
ALLEN 1600 19300
...
(14 row(s) affected)

Escribiendo Querys básicos 2-


2-10 SQL Server

Precedencia de los Operadores


El ejemplo muestra el nombre, salario y una compensación anual de todos los
empleados. Se calcula esta compensación como una multiplicación de del salario
mensual por 12, y agregándole un bono de $100. Note que la multiplicación se
evalúa primero.
Nota : Puede agregar paréntesis en la expresión para mejorar la claridad,
(12*sal) + 100, sin afectar el resultado de la consulta.

Introducción a SQL-Server 2-10


Utilizando Paréntesis

SELECT ename, sal, 12*(sal+100)


FROM emp;

ename sal
---------- --------- -----------
KING 5000 61200
BLAKE 2850 35400
CLARK 2450 30600
JONES 2975 36900
MARTIN 1250 16200
...
(14 row(s) affected)

Escribiendo Querys básicos 2-


2-11 SQL Server

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.

Introducción a SQL-Server 2-11


Definiendo el Valor Null
– Null es un valor que es inaccesible, desconocido
o inaplicable.
– Un null no es lo mismo que cero o un espacio en
blanco.

SELECT ename, job, comm


FROM emp;

ename job comm


---------- --------- ---------
KING PRESIDENT
BLAKE MANAGER
...
TURNER SALESMAN 0
...
(14 row(s) affected)

Escribiendo Querys básicos 2-


2-12 SQL Server

Definiendo el Valor Null


El valor nulo es la ausencia de valor en un campo o intersección de renglón
columna, un valor nulo no es lo mismo que cero o espacios en blanco. El cero es
un número y los espacios en blanco son caracteres.
Las columnas de cualquier tipo pueden contener valores nulos, a menos que
dichas columnas hayan sido definidas cono NOT NULL o llaves primarias
(PRIMARY KEY) cuando se crea la columna.
La columna COMM de la tabla EMP, puede notar que solo aquellos que son
SALESMAN (vendedores) pueden tener una comisión. Turner, que es un
vendedor no gana comisión alguna, pero esta columna tiene cero y no un valor
nulo.

Introducción a SQL-Server 2-12


Valores Null en Expresiones
Aritméticas
Las Expresiones Aritméticas que contienen
un valor null se evaluan como null.

SELECT ename, 12*sal+comm


FROM emp;

ename
---------- -----------
....
KING NULL

Escribiendo Querys básicos 2-


2-13 SQL Server

Valores Nulos (continuación)


Si el contenido de una columna es nulo dentro de una expresión aritmética, el
resultado es NULL. Por ejemplo, si intenta dividir entre cero, obtendrá un error.
Sin embargo, si divide un número entre un valor nulo, el resultado es un nulo.

Introducción a SQL-Server 2-13


Definir un ALIAS para las columnas

– Renombra el encabezado de las


columnas
– Es útil cuando se utilizan cálculos
– Va inmediatamente después del nombre
de la columna; la palabra AS es opcional
y se coloca entre el nombre de la
columna y el alias
– Se requieren apóstrofos si el alias
contiene espacios en blanco

Escribiendo Querys básicos 2-


2-14 SQL Server

Definir un ALIAS para las columnas


Cuando muestra el resultado de una consulta, SQL normalmente utiliza el
nombre de la columna desplegada como encabezado. En muchos casos, este
nombre de encabezado pudiera no ser descriptivo o ser difícil de entender. Puede
cambiar el encabezado de una columna utilizando un alias.
Especifique el alias después de la columna en la cláusula SELECT utilizando un
espacio como separador. Si el alias contiene espacios o caracteres especiales
(tales como $ o %), debe encerrarlo entre apóstrofos (‘‘) o comillas dobles (“ “).

Introducción a SQL-Server 2-14


Utilizando Alias
SELECT ename AS name, sal salary
FROM emp;

name salary
------------- ---------
...

SELECT ename "Name",


sal*12 "Annual Salary"
FROM emp;

Name Annual Salary


------------- -------------
...

Escribiendo Querys básicos 2-


2-15 SQL Server

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.

Introducción a SQL-Server 2-15


Operador de Concatenación

– Concatena columnas o cadenas de


caracteres a otra columna
– Se utiliza el operador +
– Crea una columna resultante que es
una cadena de caracteres

Escribiendo Querys básicos 2-


2-16 SQL Server

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.

Introducción a SQL-Server 2-16


Utilizando el Operador de
Concatenación

SELECT ename + job AS "Employees"


FROM emp;

Employees
-------------------
KINGPRESIDENT
BLAKEMANAGER
CLARKMANAGER
JONESMANAGER
MARTINSALESMAN
ALLENSALESMAN
...
(14 row(s) affected)

Escribiendo Querys básicos 2-


2-17 SQL Server

Operador de Concatenación (continuación)


En el ejemplo, las columnas ENAME y JOB son concatenadas, y se le asigna el
alias Employees.
La palabra AS antes del alias hace que la sentencia SELECT sea más fácil de
leer.

Introducción a SQL-Server 2-17


Usando Literales

SELECT ename + ' ' + 'is a' + ' ' + job


AS "Employee Details"
FROM emp;

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)

Escribiendo Querys básicos 2-


2-18 SQL Server

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.

SELECT ename + ': '+'1'+' Month salary' Monthly, sal


FROM emp;

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)

Introducción a SQL-Server 2-18


Renglones duplicados
El resultado por default de una consulta, son
todos los renglones incluyendo aquellos que
estén repetidos.
SELECT deptno
FROM emp;

deptno
---------
10
30
10
20
...
(14 row(s) affected)

Escribiendo Querys básicos 2-


2-19 SQL Server

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.

Introducción a SQL-Server 2-19


Eliminando renglones duplicados
Elimine los renglones duplicados utilizando la
palabra DISTINCT en la cláusula SELECT.

SELECT DISTINCT deptno


FROM emp;

deptno
---------
10
20
30

Escribiendo Querys básicos 2-


2-20 SQL Server

Eliminando renglones duplicados


Para eliminar renglones duplicados, incluye la palabra DISTINCT en la cláusula
SELECT inmediatamente después de la palabra SELECT. En el ejemplo
anterior, la tabla EMP tiene catorce registros pero solo existen tres
departamentos diferentes.
Puede utilizar DISTINCT antes de varias columnas. El calificador DISTINCT
afecta a todas las columnas seleccionadas, y el resultado es una combinación
diferente de las columnas.

SELECT DISTINCT deptno, job


FROM emp;

deptno job
------ ---------
10 CLERK
10 MANAGER
10 PRESIDENT
20 ANALYST
...
(9 row(s) affected)

Introducción a SQL-Server 2-20


Condicionando y
Ordenando datos

Condicionando y ordenando datos 3-


3-1 SQL Server

Introducción a SQL-Server 3-1


Objetivos
• Al completar esta lección, deberá ser
capaz de hacer lo siguiente :
– Limitar los renglones recuperados
por una consulta
– Ordenar los renglones recuperados
por una consulta

Condicionando y ordenando datos 3-


3-2 SQL Server

Introducción a SQL-Server 3-2


Limitando los Renglones utilizando
una Selección
EMP
EMPNO ENAME JOB ... DEPTNO "…recupera
todos los
7839 KING PRESIDENT 10 empleados del
7698 BLAKE MANAGER 30 departamento 10"
7782 CLARK MANAGER 10
7566 JONES MANAGER 20
...

EMP
EMPNO ENAME JOB ... DEPTNO

7839 KING PRESIDENT 10


7782 CLARK MANAGER 10
7934 MILLER CLERK 10

Condicionando y ordenando datos 3-


3-3 SQL Server

Limitando los Renglones utilizando una Selección


En el ejemplo, se muestran todos los empleados del departamento 10. Sólo los
registros con un valor de 10 en la columna DEPTNO sean mostrados. Esta forma
de restricción es la base de la cláusula WHERE en SQL.

Introducción a SQL-Server 3-3


Limitando Renglones

– Para restringir los renglones utilice la cláusula


WHERE.

SELECT [DISTINCT] {*, column [alias], ...}


FROM table
[WHERE condition(s)];

– La cláusula WHERE se coloca después de la


cláusula FROM.

Condicionando y ordenando datos 3-


3-4 SQL Server

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.

Introducción a SQL-Server 3-4


Utilizando la cláusula WHERE

SELECT ename, job, deptno


FROM emp
WHERE job='CLERK';

ename job deptno


---------- --------- ---------
JAMES CLERK 30
SMITH CLERK 20
ADAMS CLERK 20
MILLER CLERK 10

Condicionando y ordenando datos 3-


3-5 SQL Server

Utilizando la cláusula WHERE


En el ejemplo, la consulta recupera el nombre, el puesto y el número de
departamento de aquellos empleados cuyo puesto sea CLERK.
Note que la palabra CLERK fue especificada en mayúsculas, para que existan
renglones que cumplan la condición.

Introducción a SQL-Server 3-5


Cadenas de caracteres y fechas

– Las cadenas de caracteres y fechas se encierran


entre comillas simples
– Las cadenas de caracteres son sensibles a las
mayúsculas

SELECT ename, job, deptno


FROM emp
WHERE ename = 'JAMES';

Condicionando y ordenando datos 3-


3-6 SQL Server

Cadenas de caracteres y fechas


Las cadenas de caracteres y fechas en la cláusula WHERE deben ir entre
comillas simples, las constantes numéricas no.

Introducción a SQL-Server 3-6


Operadores de Comparación

Operador Descripción

= Igual

> Mayor que

>= Mayor o igual que

< Menor que

<= Menor o igual que

<> Diferente

Condicionando y ordenando datos 3-


3-7 SQL Server

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

… WHERE expr operator value

Ejemplos
… WHERE hiredate='01-JAN-95'
… WHERE sal>=1500
… WHERE ename='SMITH'

Nota: Las fechas dependen del idioma del Sql Server.

Introducción a SQL-Server 3-7


Utilizando los Operadores de
Comparación

SELECT ename, sal, comm


FROM emp
WHERE sal<=comm;

ename sal comm


---------- --------- ---------
MARTIN 1250 1400

Condicionando y ordenando datos 3-


3-8 SQL Server

Utilizando los Operadores de Comparación


En el ejemplo, la instrucción SELECT recupera el nombre y la comisión para
aquellos empleados cuyo salario sea menor o igual que su comisión.
En este ejemplo no se utilizaron valores constantes, por lo que los valores se
toman por cada registro que se vaya procesando.

Introducción a SQL-Server 3-8


Otros Operadores de Comparación

Operador Descripción

BETWEEN Entre dos valores (inclusive)


...AND...

IN(list) Coincida con uno de la lista

LIKE Igual al patrón de caracteres

IS NULL Es un valor null

Condicionando y ordenando datos 3-


3-9 SQL Server

Introducción a SQL-Server 3-9


Utilizando el Operador BETWEEN

• Utilice el operador BETWEEN para condicionar


renglones basados en rangos de valores.

SELECT ename, sal


FROM emp
WHERE sal BETWEEN 1000 AND 1500;

ename sal
---------- --------- Límite Límite
MARTIN 1250
inferior superior
TURNER 1500
WARD 1250
ADAMS 1100
MILLER 1300

Condicionando y ordenando datos 3-


3-10 SQL Server

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.

Introducción a SQL-Server 3-10


Utilizando el Operador IN

• Utilice el operador IN para igualar valores dentro de


la lista.

SELECT empno, ename, sal, mgr


FROM emp
WHERE mgr IN (7902, 7566, 7788);

empno ename sal mgr


--------- ---------- --------- ---------
7902 FORD 3000 7566
7369 SMITH 800 7902
7788 SCOTT 3000 7566
7876 ADAMS 1100 7788

Condicionando y ordenando datos 3-


3-11 SQL Server

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 empno, ename, mgr, deptno


FROM emp
WHERE ename IN ('FORD' , 'ALLEN');

Introducción a SQL-Server 3-11


Utilizando el Operador LIKE
• Utilice el operador LIKE para realizar
búsquedas con caracteres comodines.
• Las condiciones de búsqueda pueden
contener tanto caracteres como números.
– % indica cero o más caracteres
– _ indica un caracter

SELECT ename
FROM emp
WHERE ename LIKE 'S%';

Condicionando y ordenando datos 3-


3-12 SQL Server

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.

Sím bolo D escripción


% R epresenta una secuencia de cero o m ás caracteres
_ R epresenta un solo carácter

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.

Introducción a SQL-Server 3-12


Utilizando el Operador LIKE

– Puede combinar el patrón de caracteres como se


muestra en el ejemplo :

SELECT ename
FROM emp
WHERE ename LIKE '_A%';

ENAME
----------
JAMES
WARD
MARTIN

Condicionando y ordenando datos 3-


3-13 SQL Server

Utilizando el Operador LIKE


Puede utilizar los símbolos comodines % y _ en combinación para hacer más
exacta la búsqueda. En el ejemplo se obtienen aquellos empleados que en el
nombre tengan como segunda letra una A.

Introducción a SQL-Server 3-13


Utilizando el Operador IS NULL

• Verifique los valores nulos con el


operador IS NULL

SELECT ename, mgr


FROM emp
WHERE mgr IS NULL;

ename mgr
---------- ---------
KING NULL

Condicionando y ordenando datos 3-


3-14 SQL Server

Utilizando el Operador IS NULL


El operador IS NULL verifica si existe un valor nulo, entonces devuelve
Verdadero. El ejemplo obtiene los empleados que no tienen manager (jefe).
Por ejemplo, para desplegar el nombre, puesto y comisión para aquellos
empleados que no ganan una comisión :

SELECT ename, job, comm


FROM emp
WHERE comm IS NULL;

ename job comm


-------- ----------- ------
KING PRESIDENT NULL
BLAKE MANAGER NULL
CLARK MANAGER NULL
...

Introducción a SQL-Server 3-14


Operadores Lógicos

Operador Descripción

AND Devuelve TRUE si ambos


componentes son TRUE
OR Devuelve TRUE si al menos uno de
los componentes es TRUE

NOT Devuelve el valor negado según el


valor de la expresión evaluada

Condicionando y ordenando datos 3-


3-15 SQL Server

Introducción a SQL-Server 3-15


Utilizando el operator AND
AND requiere que ambas condiciones
sean TRUE
SELECT empno, ename, job, sal
FROM emp
WHERE sal>=1100
AND job='CLERK';

empno ename job sal


--------- ---------- --------- ---------
7876 ADAMS CLERK 1100
7934 MILLER CLERK 1300

Condicionando y ordenando datos 3-


3-16 SQL Server

Utilizando el operador AND


En el ejemplo ambas condiciones deben ser verdaderas para que un registro sea
mostrado. De tal forma que, si un empleado tiene el puesto de CLERK y gana de
$1100 en adelante será seleccionado.

Introducción a SQL-Server 3-16


Utilizando el operador OR
OR requiere que al menos una condición
sea TRUE.
SELECT empno, ename, job, sal
FROM emp
WHERE sal >= 2000
OR job = 'CLERK';

empno ename job sal


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

7839 KING PRESIDENT 5000


7698 BLAKE MANAGER 2850
7782 CLARK MANAGER 2450
7566 JONES MANAGER 2975
...
(10 row(s) affected)

Condicionando y ordenando datos 3-


3-17 SQL Server

Utilizando el operador OR
En el ejemplo, se muestran aquellos empleados que ganen de $2000 en adelante
o tengan el puesto CLERK.

Introducción a SQL-Server 3-17


Utilizando el operador NOT

SELECT ename, job


FROM emp
WHERE job NOT IN ('CLERK','MANAGER','ANALYST');

ename job
---------- ---------
KING PRESIDENT
MARTIN SALESMAN
ALLEN SALESMAN
TURNER SALESMAN
WARD SALESMAN

Condicionando y ordenando datos 3-


3-18 SQL Server

Utilizando el operador NOT


En el ejemplo se muestran los nombres y puestos de los empleados que no se
encuentren en la lista ('CLERK','MANAGER','ANALYST’).
El operador NOT puede ser utilizado con otros operadores de SQL tales como
BETWEEN, LIKE y NULL.

... WHERE NOT job IN ('CLERK', 'ANALYST')


... WHERE sal NOT BETWEEN 1000 AND 1500
... WHERE ename NOT LIKE '%A%'
... WHERE comm IS NOT NULL

Introducción a SQL-Server 3-18


Reglas de Precedencia

Orden Operador
1 Todos los operadores
de comparación
2 NOT
3 AND
4 OR

• Utilice paréntesis para modificar el orden de


evaluación

Condicionando y ordenando datos 3-


3-19 SQL Server

Introducción a SQL-Server 3-19


Reglas de Precedencia

SELECT ename, job, sal


FROM emp
WHERE job='SALESMAN'
OR job='PRESIDENT'
AND sal>1500;

ename job sal


---------- --------- ---------
KING PRESIDENT 5000
MARTIN SALESMAN 1250
ALLEN SALESMAN 1600
TURNER SALESMAN 1500
WARD SALESMAN 1250

Condicionando y ordenando datos 3-


3-20 SQL Server

Ejemplo de Precedencia de operadores


En el ejemplo, existen dos condiciones :
• La primer condición es que el puesto sea PRESIDENT y el salario mayor a
$1500
• La segunda condición es que tenga el puesto SALESMAN.
La consulta se puede leer de la siguiente forma :
“Obtener los empleados que sean PRESIDENTES y ganen más de $1500 o
aquellos que sean VENDEDORES”.

Introducción a SQL-Server 3-20


Reglas de Precedencia
Usando paréntesis para forzar la prioridad.
SELECT ename, job, sal
FROM emp
WHERE (job='SALESMAN'
OR job='PRESIDENT')
AND sal>1500;

ename job sal


---------- --------- ---------
KING PRESIDENT 5000
ALLEN SALESMAN 1600

Condicionando y ordenando datos 3-


3-21 SQL Server

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”.

Introducción a SQL-Server 3-21


Cláusula ORDER BY
– Ordene la salida con la cláusula ORDER BY
• ASC: ordén ascendente, default
• DESC: ordén descendente
– La cláusula ORDER BY siempre debe ser la
última en una instrucción SELECT.
SELECT ename, job, deptno, hiredate
FROM emp
ORDER BY hiredate;

ename job deptno hiredate


---------- --------- --------- ------------------------
SMITH CLERK 20 1980-12-17 00:00:00.000
ALLEN SALESMAN 30 1981-02-20 00:00:00.000
...
(14 row(s) affected)

Condicionando y ordenando datos 3-


3-22 SQL Server

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]];

donde: ORDER BY especifica el orden en en el que serán mostrados


los renglones.
column, exp el o los atributos por los que se va a ordenar.
ASC ordena en forma ascendente. Este el ordena-
miento por default.
DESC ordena en forma descendente.

Introducción a SQL-Server 3-22


Ordenando en forma descendente

SELECT ename, job, deptno, hiredate


FROM emp
ORDER BY hiredate DESC;

ename job deptno hiredate


---------- --------- --------- ------------------------
ADAMS CLERK 20 1983-01-12 00:00:00.000
SCOTT ANALYST 20 1982-12-09 00:00:00.000
...
(14 row(s) affected)

Condicionando y ordenando datos 3-


3-23 SQL Server

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.

Introducción a SQL-Server 3-23


Ordenando con Alias

SELECT empno, ename, sal*12 ann_sal


FROM emp
ORDER BY ann_sal;

empno ename ann_sal


--------- ---------- ---------
7369 SMITH 9600
7900 JAMES 11400
7876 ADAMS 13200
7654 MARTIN 15000
7521 WARD 15000
7934 MILLER 15600
7844 TURNER 18000
...
(14 row(s) affected)

Condicionando y ordenando datos 3-


3-24 SQL Server

Ordenando con Alias


Puede utilizar una columna renombrada con un alias en la cláusula ORDER BY.
El ejemplo anterior ordena los datos por el salario anual.
Se puede utilizar alias con espacios en blancos y este alias puede aparecer en una
cláusula ORDER BY.
Por ejemplo:

SELECT sal * 12 AS “Sal. Anual”


FROM emp
ORDER BY “Sal. Anual”;

Introducción a SQL-Server 3-24


Ordenando con Múltiples Columnas
– Utilice varias columnas para establecer diferentes
criterios de ordenamiento.
SELECT ename, deptno, sal
FROM emp
ORDER BY deptno, sal DESC;

ename deptno sal


---------- --------- ---------
KING 10 5000
CLARK 10 2450
MILLER 10 1300
FORD 20 3000
...
(14 row(s) affected)

• Puede ordenar por columnas que no aparezcan en la consulta

Condicionando y ordenando datos 3-


3-25 SQL Server

Ordenando con Múltiples Columnas


Puede ordenar los resultados de la consulta con una o más columnas, las cuales
se toman como criterios de ordenamiento, el límite es el número de columnas
que tenga la tabla.
En una cláusula ORDER BY, especifique las columnas separadas por comas, si
desea cambiar el orden por default utilice DESC después de cada columna que
desee cambiar el orden.
En el ejemplo el primer criterio de ordenamiento es por número de departamento
(en forma ascendente, default) y luego por salario en forma descendente.
Nota: Si utiliza más de un criterio de ordenamiento, tome en cuenta que el
primer criterio debe contener valores repetidos para que la consulta tenga
sentido. Como en el ejemplo siguiente :

SELECT *
FROM emp
ORDER BY empno, deptno, sal DESC;

no tiene sentido ya que el primer criterio utilizado, es un atributo que no contiene


valores repetidos, para que los demás criterios puedan afectar el resultado.

Introducción a SQL-Server 3-25


Prácticas

– Seleccionar datos y cambiar el orden en


que son mostrados
– Elimine renglones utilizando WHERE
– Utilice diferentes criterios de
ordenamiento
– Utilice alias en ORDER BY

Condicionando y ordenando datos 3-


3-26 SQL Server

Introducción a SQL-Server 3-26


Funciones de
Renglón Simple

Funciones de renglón simple 4-


4-1 SQL Server

Introducción a SQL-Server 4-1


Objetivos
Al completar esta lección, deberá ser
capaz de hacer lo siguiente :
– Describir los diferentes tipos de
funciones disponibles en SQL
– Utilizar funciones para caracteres,
números y fechas en la instrucción
SELECT

Funciones de renglón simple 4-


4-2 SQL Server

Introducción a SQL-Server 4-2


Funciones de SQL

Entrada Salida
Función

arg 1 Función ejecuta


una acción
arg 2
Resultado

arg n

Funciones de renglón simple 4-


4-3 SQL Server

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.

Introducción a SQL-Server 4-3


Tipos de Funciones de SQL

Funciones

Funciones Funciones
Renglón-
Renglón-simple Renglón-
Renglón-Múltiple

Funciones de renglón simple 4-


4-4 SQL Server

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.

Introducción a SQL-Server 4-4


Funciones de Renglón-simple

– Manipulan datos
– Aceptan argumentos y retornan un valor
– Actúan sobre cada renglón
– Retornan un resultado por renglón
– Pueden ser anidadas

function_name (column|expression, [arg1, arg2,...])

Funciones de renglón simple 4-


4-5 SQL Server

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.

Introducción a SQL-Server 4-5


Funciones de Renglón-simple

Caracter Numéricas

Funciones
Renglón-
Renglón-simple

Conversión Fecha

Funciones de renglón simple 4-


4-6 SQL Server

Funciones de Renglón-simple (continuación)


En esta lección trataremos las siguientes Funciones de Renglón-simple :
• funciones para cadenas : Aceptan parámetros tipo caracter y pueden
retornar tanto como caracteres como números
• funciones numéricas : Aceptan parámetros tipo numérico y retornan
valores numéricos
• funciones para fechas : Operan sobre valores tipo datetime.
• funciones para conversión : Convierten un valor de un tipo a otro

Introducción a SQL-Server 4-6


Funciones para cadenas
Función de
cadena

Funciones para Funciones para


conversión manipular cadenas

LOWER LEFT REPLICATE


UPPER LEN RTRIM
LTRIM SUBSTRING
RIGHT

Funciones de renglón simple 4-


4-7 SQL Server

Funciones para cadenas


Las funciones para cadenas aceptan datos tipo carácter como entrada y pueden
retornar tanto un un número como un carácter. Pueden dividirse en :
• Conversión a Mayúsculas/Minúsculas
• Manipulación de cadenas

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.

Introducción a SQL-Server 4-7


Funciones para Conversión

Función Resultado
LOWER('SQL Course') sql course
UPPER('SQL Course') SQL COURSE

Funciones de renglón simple 4-


4-8 SQL Server

Funciones para Conversión


• LOWER : convierte una cadena a minúsculas.
• UPPER : convierte una cadena a mayúsculas.

SELECT 'The job title for ' + UPPER(ename) + ' is '


+ LOWER(job) AS "EMPLOYEE DETAILS"
FROM emp;

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
........

Introducción a SQL-Server 4-8


Funciones para manipular cadenas

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

Funciones de renglón simple 4-


4-9 SQL Server

Introducción a SQL-Server 4-9


Funciones numéricas

– ROUND: Redondea un valor a las


posiciones decimales indicadas.

– POWER: Eleva una cantidad a la potencia


indicada.

– ABS: Retorna el valor absoluto de una


expresión .

Funciones de renglón simple 4-


4-10 SQL Server

Introducción a SQL-Server 4-10


Utilizando la Función ROUND

SELECT ROUND(45.923,2), ROUND(45.923,0),


ROUND(45.923,-1)

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


45.920 46.000 50.000

Funciones de renglón simple 4-


4-11 SQL Server

Utilizando la Función ROUND


La función ROUND retorna una expresión numérica redondeada a la longitud o
precisión especificada.
>= 5 Redondea
< 5 No Redondea.

Sintaxis :

ROUND(expression, length[, function])


expression : es una expresión numérica.
length : es la precisión a la que la expresión será redondeada.
• Cuando length es positivo, la expresión es redondeada al número de
decimales especificados por length.
• Cuando length es negativo, la expresión es redondeada por el lado
izquierdo del punto decimal, como indique length.
function : Es el tipo de operación a ejecutar. Si function es omitida o tenga un
valor de 0 (default), la expression es redondeada . Si se indica otro valor
diferente que 0, la expression es truncada.

Introducción a SQL-Server 4-11


Utilizando ROUND como
una Función TRUNC

SELECT ROUND(45.923,2,1), ROUND(45.923,0,1),


ROUND(45.923,-1,1)

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


45.920 45.000 40.000

Funciones de renglón simple 4-


4-12 SQL Server

Utilizando ROUND como una Función TRUNC


Utilice la función ROUND para efectuar una función TRUNC, se debe indicar
un valor diferente de cero en el parámetro function de ROUND.

Introducción a SQL-Server 4-12


Utilizando la Función POWER

Obtenga la raíz cuadrada del salario de todos


los empleados cuyo puesto sea “SALESMAN”.

SELECT ename, sal, comm, POWER(sal, 0.5)


FROM emp
WHERE job = 'SALESMAN';

ENAME SAL COMM


---------- --------- --------- -------------
ALLEN 1600.00 300.00 40.00
WARD 1250.00 500.00 35.36
MARTIN 1250.00 1400.00 35.36
TURNER 1500.00 .00 38.73

Funciones de renglón simple 4-


4-13 SQL Server

Utilizando la Función POWER


La función POWER eleva expresión a la potencia indicada.
En el ejemplo, se obtiene la raíz cuadrada que es equivalente a elevar una
cantidad a la potencia 0.5.

Introducción a SQL-Server 4-13


Utilizando la Función ABS
Obtenga cuantas unidades hay entre el salario y la
comisión para los empleados cuyo puesto sea
“SALESMAN”.

SELECT ename, sal, comm, ABS(sal - comm)


FROM emp
WHERE job = 'SALESMAN';

ENAME SAL COMM


---------- --------- --------- -------------
ALLEN 1600.00 300.00 1300.00
WARD 1250.00 500.00 750.00
MARTIN 1250.00 1400.00 150.00
TURNER 1500.00 .00 1500.00

Funciones de renglón simple 4-


4-14 SQL Server

Utilizando la Función ABS


Retorna el valor absoluto de una expresión.
En el ejemplo, se obtiene la distancia en unidades de salario que existen entre la
comisión y el salario.

Introducción a SQL-Server 4-14


Trabajando con Fechas

– SQL Server almacena las fechas en un


formato numérico internamente que
representa : Año, Mes, Día, Hora, Minutos,
Segundos y milésimas de segundo.
– GETDATE() es una función que obtiene la
fecha actual del sistema.

Funciones de renglón simple 4-


4-15 SQL Server

Trabajando con Fechas


Las operaciones típicas con valores de tipo datetime son ”obtener la fecha y
hora actuales”, “aritmética de fechas - ¿Qué fecha será dentro de 50 días?” o
“dime que día de la semana es una fecha dada”.
Los valores de tipo fecha son almacenados internamente por Microsoft® SQL
Server™ como dos enteros de 4 bytes. Los primeros 4 bytes almacenan el
número de días después de la fecha base, January 1, 1900. Los otros 4 bytes
almacenan la hora del día representado como la cantidad de milisegundos
transcurridos después de la medianoche.

Nota : El rango de un entero sin signo de 32 bits es desde 0 hasta 4294967295.


Ref. Programación con C++ Builder, Francisco Charte, Ed. Anaya,
Cap. 3 Tipos de datos, pag. 58.

Introducción a SQL-Server 4-15


Funciones para Fechas
FUNCION DESCRIPCION

Agrega intervalo a la fecha


DATEADD indicada
Devuelve el número de
DATEDIFF unidades entre dos fechas
Devuelve una cadena que
DATENAME representa la fecha
Devuelve un entero representado
DATEPART una parte de la fecha
Obtiene la fecha actual del
GETDATE sistema

Funciones de renglón simple 4-


4-16 SQL Server

Introducción a SQL-Server 4-16


Función DATEADD
DATEADD(datepart
DATEADD(datepart,, number,
number, date)
date)
• Retorna una nueva fecha después de agregarle
number expresado como datepart a date.
date.

SELECT ename, hiredate, DATEADD(mm,5,hiredate)


FROM emp
WHERE deptno = 10;

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

Funciones de renglón simple 4-


4-17 SQL Server

Funciones para Fechas


DATEADD(datepart, number, date)
Retorna una nueva fecha después de agregarle number expresado como
datepart a date.
datepart : indica como se va a tratar el incremento, como se muestra en la
siguiente tabla :
datepart Abreviación
year yy
quarter qq
month mm
day of year dy
day of week dw
day dd
week wk
hour hh
minute mi
second ss
millisecond ms

Introducción a SQL-Server 4-17


Función DATEDIFF
DATEDIFF(datepart
DATEDIFF(datepart,, startdate,
startdate, enddate)
enddate)
• Retorna el número de unidades expresadas como
datepart entre dos fechas.
SELECT ename, hiredate,
DATEDIFF(yy, hiredate, GETDATE()) Years
FROM emp
WHERE deptno = 20;

ename hiredate Years


---------- --------------------------- -----------
SMITH 1980-12-17 00:00:00.000 19
JONES 1981-04-02 00:00:00.000 18
SCOTT 1982-12-09 00:00:00.000 17
ADAMS 1983-01-12 00:00:00.000 16
FORD 1981-12-03 00:00:00.000 18

Funciones de renglón simple 4-


4-18 SQL Server

Funciones para Fechas


DATEDIFF(datepart, startdate, enddate)
Retorna el número de unidades expresadas como datepart entre dos fechas.
En el ejemplo se obtiene los años transcurridos de la fecha de ingreso del
empleado hasta el día de hoy para los empleados del departamento 20.

Introducción a SQL-Server 4-18


Función DATENAME
DATENAME(datepart
DATENAME(datepart,, date)
date)
– Devuelve una cadena que representa la fecha
especificada como datepart.
datepart.

SELECT ename, hiredate,


DATENAME(dw, hiredate) 'Day of week'
FROM emp;

ename hiredate Day of week


---------- --------------------------- -------------------------
SMITH 1980-12-17 00:00:00.000 Wednesday
ALLEN 1981-02-20 00:00:00.000 Friday
WARD 1981-02-22 00:00:00.000 Sunday
JONES 1981-04-02 00:00:00.000 Thursday
....

Funciones de renglón simple 4-


4-19 SQL Server

Funciones para Fechas


DATENAME(datepart, date)
Devuelve una cadena que representa la fecha especificada como datepart.
En el ejemplo se obtiene el nombre del día de la fecha de ingreso de todos los
empleados.

Introducción a SQL-Server 4-19


Función DATEPART
DATEPART(datepart
DATEPART(datepart,, date)
date)
– Devuelve un entero que representa una parte de la
fecha expresada como datepart.
datepart.

SELECT ename, DATEPART(yy, hiredate) Year,


DATEPART(mm, hiredate) Month,
DATEPART(dd, hiredate) Day
from emp

ename Year Month Day


---------- ----------- ----------- -----------
SMITH 1980 12 17
ALLEN 1981 2 20
WARD 1981 2 22
...

Funciones de renglón simple 4-


4-20 SQL Server

Funciones para Fechas


DATEPART(datepart, date)
Devuelve un entero representado una parte de la fecha expresada como
datepart.
En el ejemplo se obtiene el nombre y la fecha de ingreso de todos los
empleados desglosado por año, mes y día.
Existen funciones específicas para obtener en forma particular el año, mes y
día.
YEAR( date)
MONTH(date)
DAY( date)

SELECT ename, YEAR(hiredate) Year,


MONTH(hiredate) Month,
DAY(hiredate) Day
FROM emp

Introducción a SQL-Server 4-20


Funciones de conversión

Conversiones
de tipo

Conversiones Conversiones
de tipo implícitas de tipo explícitas

Funciones de renglón simple 4-


4-21 SQL Server

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.

Introducción a SQL-Server 4-21


Funciones de Conversión CAST
CAST(expression
CAST(expression AS data_type)
data_type)
• Convierte expression al tipo indicado por
data_type.
data_type.

SELECT ename,
CAST( hiredate AS char) "Hire Date"
FROM emp;

ename Hire Date


---------- ------------------------------
SMITH Dec 17 1980 12:00AM
ALLEN Feb 20 1981 12:00AM
WARD Feb 22 1981 12:00AM
........

Funciones de renglón simple 4-


4-22 SQL Server

Funciones de Conversión CAST


CAST(expression AS data_type)
Convierte expression al tipo indicado por data_type.
En el ejemplo, se muestran todos los empleados con su fecha de ingreso
expresada como una cadena de caracteres.

Introducción a SQL-Server 4-22


Funciones de Conversión CONVERT
CONVERT (data_type
(data_type[(
[(length
length)],
)], expression [, style])
style])
Convierte expression al tipo indicado por
data_type con la longitud dada por length
utilizando el estilo style.
style.
SELECT ename,
CONVERT( char(10), hiredate, 103) "Hire Date”
FROM emp;

ename Hire Date


---------- ----------
SMITH 17/12/1980
ALLEN 20/02/1981
WARD 22/02/1981
........

Funciones de renglón simple 4-


4-23 SQL Server

Funciones de Conversión CONVERT


CONVERT (data_type[(length)], expression [, style])
Convierte expression al tipo indicado por data_type con la longitud dada por
length utilizando el estilo style.
CAST(expression AS data_type)
La función CONVERT es un sinónimo de la función CAST.
En el ejemplo, se muestran todos los empleados con su fecha de ingreso
expresada como una cadena de caracteres con el formato británico dd/mm/yyyy
(para mayor referencia consulte los libros en pantalla).

0 o 100 (*) Predeterminado mon dd yyyy hh:miAM (o PM)


101 EE.UU. mm/dd/yy
102 ANSI yy.mm.dd
103 Británico/Francés dd/mm/yy

104 Alemán dd.mm.yy

105 Italiano dd-mm-yy

106 - dd mon yy

107 - mon dd, yy

Introducción a SQL-Server 4-23


Función ISNULL

Convierte un valor nulo a un valor indicado


– Tipos de datos comunes que se utilizan
para evitar un NULL son date, character
y numeric.
– Ejemplos :
• ISNULL(comm, 0)
• ISNULL(hiredate,GETDATE())
• ISNULL(job, 'No Job Yet')

Funciones de renglón simple 4-


4-24 SQL Server

Función ISNULL
Convierte un valor nulo a un valor indicado.

Sintaxis

ISNULL (expr1, expr2)

donde :
expr1 es el valor o expresión que contiene valores nulos.
expr2 es el valor por el que se reemplazará NULL.

Introducción a SQL-Server 4-24


Utilizando la Función ISNULL

SELECT ename, sal, comm, sal*12+ISNULL(comm,0)


FROM emp;

ENAME SAL COMM


---------- --------- --------- --------------------
SMITH 800.00 9600.00
ALLEN 1600.00 300.00 19500.00
WARD 1250.00 500.00 15500.00
JONES 2975.00 35700.00
MARTIN 1250.00 1400.00 16400.00
...
14 rows selected.

Funciones de renglón simple 4-


4-25 SQL Server

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).

Introducción a SQL-Server 4-25


Funciones Anidadas

– 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.

F3(F2( F1(col,arg1), arg2), arg3)


Paso 1 = Resultado 1

Paso 2 = Resultado 2

Paso 3 = Resultado 3

Funciones de renglón simple 4-


4-26 SQL Server

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.

Introducción a SQL-Server 4-26


Funciones Anidadas

SELECT ename
, ISNULL(CONVERT(char(10), mgr), 'No manager') Manager
FROM emp
ORDER BY mgr

ename Manager
---------- -----------------------------
KING No Manager

14 rows selected

Funciones de renglón simple 4-


4-27 SQL Server

Introducción a SQL-Server 4-27


Prácticas

– Crear consultas que requieran el uso de


funciones numéricas, fecha y caracter
– Ejecutar cálculos sobre fechas
– Verificar la fecha de ingreso de los
empleados

Funciones de renglón simple 4-


4-28 SQL Server

Introducción a SQL-Server 4-28


Desplegando datos de
múltiples tablas

Desplegando datos de múltiples tablas 5-


5-1 SQL Server

Introducción a SQL-Server 5-1


Objetivos

Al completar esta lección, deberá ser


capaz de hacer lo siguiente :
– Escribir sentencias que obtengan
datos en más de una tabla
utilizando equi y no-
no-equi joins
– Visualizar datos que generalmente
no son una condición join
– Hacer join en la misma tabla
Desplegando datos de múltiples tablas 5-
5-2 SQL Server

Introducción a SQL-Server 5-2


Obteniendo Datos de Múltiples Tablas
EMP DEPT
EMPNO ENAME ... DEPTNO DEPTNO DNAME LOC
------ ----- ... ------ ------ ---------- --------
7839 KING ... 10 10 ACCOUNTING NEW YORK
7698 BLAKE ... 30 20 RESEARCH DALLAS
... 30 SALES CHICAGO
7934 MILLER ... 10 40 OPERATIONS BOSTON

EMPNO DEPTNO LOC


----- ------- --------
7839 10 NEW YORK
7698 30 CHICAGO
7782 10 NEW YORK
7566 20 DALLAS
7654 30 CHICAGO
7499 30 CHICAGO
...
14 rows selected.

Desplegando datos de múltiples tablas 5-


5-3 SQL Server

Obteniendo Datos de Múltiples Tablas


En algunas ocasiones necesitará utilizar datos que están en más de una
tabla. En el ejemplo, el reporte muestra datos de tablas separadas.
• EMPNO existe en la tabla EMP.
• DEPTNO existe en la tabla EMP y en DEPT.
• LOC existe en la tabla DEPT.
La consulta se puede leer como “Obtener los nombres de empleado, el
departamento y su localización”.
Para producir el reporte, necesita enlazar las tablas EMP y DEPT para
accesar los datos en ambas.

Introducción a SQL-Server 5-3


¿Qué es un Join
Join?
?
Utilice un join para consultar datos en más de una
tabla.

SELECT table1.column, table2.column


FROM table1 INNER JOIN table2
ON table1.column1 = table2.column2;

– 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.

Desplegando datos de múltiples tablas 5-


5-4 SQL Server

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.

Introducción a SQL-Server 5-4


Implementando un Join tradicional
Puede crear un Join utilizando la condición
condición--join en la
cláusula WHERE.

SELECT table1.column, table2.column


FROM table1, table2
WHERE table1.column1 = table2.column2;

– Esta es la sintaxis general para crear un Join


Join..

Desplegando datos de múltiples tablas 5-


5-5 SQL Server

Definición de Join (continuación)


Algunos manejadores de bases de datos no incluyen en su sintaxis las palabras
INNER JOIN, JOIN, LEFT OUTER JOIN. Que pueden ser utilizadas
directamente en la cláusula FROM junto con el indicador ON condición-join. Por
lo que el método tradicional para hacer un join es colocar las tablas afectadas en
la cláusula FROM separadas por comas, y la condición-join colocarla en la
cláusula WHERE. Estas dos formas de crear joins generan exactamente el mismo
resultado, solo que el método anterior (colocando la palabra join en la cláusula
FROM) permite mayor comodidad y claridad para otras condiciones adicionales
que afecten al resultado de la consulta.

La reunión (Join natural) se puede definir según el álgebra relacional como :

A JOIN B = ((A TIMES B) WHERE X theta Y)[m,n,..,q]

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.

Introducción a SQL-Server 5-5


Producto Cartesiano

A x B
a x
A B
a y
a b x
x
b × = b y
y c x
c c y

Desplegando datos de múltiples tablas 5-


5-6 SQL Server

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 }

Introducción a SQL-Server 5-6


Producto Cartesiano

– Un Producto Cartesiano es formado


cuando:
• Una condición-
condición-join es omitida
• Una condición-
condición-join es inválida
• Todos los registros de la primer tabla se
unen con todos los registros de la
segunda tabla.
– Para evitar un Producto Cartesiano,
incluya siempre condición-
condición-join válida en
la cláusula WHERE.

Desplegando datos de múltiples tablas 5-


5-7 SQL Server

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).

Cardinalidad : En el modelo relacional, es el número de renglones de una


tabla.

Introducción a SQL-Server 5-7


Generando un Producto Cartesiano
EMP (14 rows
rows)) DEPT (4 rows
rows))
EMPNO ENAME ... DEPTNO DEPTNO DNAME LOC
------ ----- ... ------ ------ ---------- --------
7839 KING ... 10 10 ACCOUNTING NEW YORK
7698 BLAKE ... 30 20 RESEARCH DALLAS
... 30 SALES CHICAGO
7934 MILLER ... 10 40 OPERATIONS BOSTON

ENAME DNAME
------ ----------
KING
ACCOUNTING
BLAKE
“ Producto ACCOUNTING
...
Cartesiano: KING RESEARCH
BLAKE RESEARCH
14*4=56 reng
reng.”
.” ...
(56 row(s) afected)

Desplegando datos de múltiples tablas 5-


5-8 SQL Server

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.

SELECT ename, dname


FROM emp, dept;

ENAME DNAME
---------- --------------
KING ACCOUNTING
BLAKE ACCOUNTING
...
KING RESEARCH
BLAKE RESEARCH
...
56 rows selected.

Introducción a SQL-Server 5-8


Tipos de Joins

Equijoin Non-equijoin Outer join Self join

Desplegando datos de múltiples tablas 5-


5-9 SQL Server

Tipos de Joins
Existen dos tipos principales de condición-join.
• Equijoins (inner join)
• Non-equijoins

Existen joins adicionales :


• Outer Joins (left | right join)
• Self Joins

Introducción a SQL-Server 5-9


¿Qué es un Equijoin
Equijoin?
?
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
... ...
14 rows selected. 14 rows selected.

Foreign key Primary key

Desplegando datos de múltiples tablas 5-


5-10 SQL Server

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.

Introducción a SQL-Server 5-10


Recuperando Renglones
con Equijoins (inner
inner))

SELECT emp.empno, emp.ename, emp.deptno,


dept.deptno, dept.loc
FROM emp INNER JOIN dept
ON emp.deptno=dept.deptno;

empno ename deptno deptno loc


------ ---------- ------ ------ -------------
7369 SMITH 20 20 DALLAS
7499 ALLEN 30 30 CHICAGO
7521 WARD 30 30 CHICAGO
7566 JONES 20 20 DALLAS
.....
14 rows selected.

Desplegando datos de múltiples tablas 5-


5-11 SQL Server

Recuperando Renglones con Equijoins


En el ejemplo :
• La cláusula SELECT especifica las columnas a recuperar :
– número, nombre del empleado y número del departamento al
que está asignado tal empleado, tomados de la tabla EMP
– número del departamento y localización que son columnas de
la tabla DEPT
• La cláusula FROM especifica las tablas que deberán ser accesadas y
el tipo de join que se efectuará entre ellas (INNER JOIN) :
– Tabla DEPT
– Tabla EMP
– En la cláusula ON se especifica la condición join:
emp.deptno=dept.deptno;
Como la columna DEPTNO es común en ambas tablas debe ser calificado
con el nombre de la tabla respectiva.

Introducción a SQL-Server 5-11


Recuperando Renglones
con Equijoins

SELECT emp.empno, emp.ename, emp.deptno,


dept.deptno, dept.loc
FROM emp , dept
WHERE emp.deptno=dept.deptno;

empno ename deptno deptno loc


------ ---------- ------ ------ -------------
7369 SMITH 20 20 DALLAS
7499 ALLEN 30 30 CHICAGO
7521 WARD 30 30 CHICAGO
7566 JONES 20 20 DALLAS
.....
14 rows selected.

Desplegando datos de múltiples tablas 5-


5-12 SQL Server

Recuperando Renglones con Equijoins (continuación)


En el ejemplo :
• La cláusula FROM especifica las tablas que deberán ser accesadas
sin especificar el tipo de join que se efectuará entre ellas :
– Tabla DEPT
– Tabla EMP
– La cláusula WHERE especifica como las tablas realizarán el join en
este caso es un equi-join:
emp.deptno=dept.deptno;

Introducción a SQL-Server 5-12


Calificando Columnas Repetidas

– Utilice el nombre de la tabla como prefijo


para calificar los nombres de columna
que están en múltiples tablas.
– Mejore el rendimiento utilizando prefijos
de tabla.
– Diferencie las columnas que tienen
nombres idénticos pero se encuentran en
diferentes tablas utilizando alias.

Desplegando datos de múltiples tablas 5-


5-13 SQL Server

Introducción a SQL-Server 5-13


Utilizando condiciones adicionales

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
... ...

Desplegando datos de múltiples tablas 5-


5-14 SQL Server

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.

SELECT empno, ename, emp.deptno, loc


FROM emp INNER JOIN dept
ON emp.deptno = dept.deptno
WHERE ename = 'KING';

empno ename deptno loc


--------- ---------- --------- -------------
7839 KING 10 NEW YORK

O bien utilice la forma tradicional :


SELECT empno, ename, emp.deptno, loc
FROM emp, dept
WHERE emp.deptno = dept.deptno AND
ename = 'KING';

Introducción a SQL-Server 5-14


Usando Alias en Tablas
Simplifique los querys utilizando alias en tablas.

SELECT emp.empno, emp.ename, emp.deptno,


dept.deptno, dept.loc
FROM emp INNER JOIN dept
ON emp.deptno=dept.deptno;

SELECT e.empno, e.ename, e.deptno,


d.deptno, d.loc
FROM emp e INNER JOIN dept d
ON e.deptno=d.deptno;

Desplegando datos de múltiples tablas 5-


5-15 SQL Server

Usando Alias en Tablas


Calificar las columnas con los nombres de las tablas puede consumir
tiempo, sobre todo cuando las tablas tienen nombres largos. Puede utilizar
alias para re- nombrar las tablas.
En el ejemplo la tabla EMP toma el nombre de E, y la tabla DEPT el
nombre D.

Introducción a SQL-Server 5-15


Reuniendo más de dos Tablas

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.

Desplegando datos de múltiples tablas 5-


5-16 SQL Server

Condiciones de búsqueda adicionales


En ocasiones necesitará hacer join con mas de dos tablas. Por ejemplo, para
mostrar el nombre, las órdenes y los items, el total de cada orden para el
cliente TKB SPORT SHOP, necesitará reunir las tablas CUSTOMER, ORD
e ITEM.
SELECT c.name, o.ordid, i.itemid, i.itemtot, o.total
FROM customer c JOIN ord o ON c.custid = o.custid
JOIN item i ON o.ordid = i.ordid
WHERE c.name = 'TKB SPORT SHOP';

NAME ORDID ITEMID ITEMTOT TOTAL


------------ --------- --------- --------- ---------
TKB SPORT SHOP 610 3 58 101.4
TKB SPORT SHOP 610 1 35 101.4
TKB SPORT SHOP 610 2 8.4 101.4

SELECT c.name, o.ordid, i.itemid, i.itemtot, o.total


FROM customer c, ord o, item i
WHERE c.custid = o.custid
AND o.ordid = i.ordid
AND c.name = 'TKB SPORT SHOP';

Introducción a SQL-Server 5-16


Non--Equijoins
Non
EMP SALGRADE
EMPNO ENAME SAL GRADE LOSAL HISAL
------ ------- ------ ----- ----- ------
7839 KING 5000 1 700 1200
7698 BLAKE 2850 2 1201 1400
7782 CLARK 2450 3 1401 2000
7566 JONES 2975 4 2001 3000
7654 MARTIN 1250 5 3001 9999
7499 ALLEN 1600
7844 TURNER 1500
7900 JAMES 950
... “ salario en la tabla EMP
14 rows selected. se encuentre entre
low salary y high
salary en la table
SALGRADE”

Desplegando datos de múltiples tablas 5-


5-17 SQL Server

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 (=).

Introducción a SQL-Server 5-17


Recuperar Registros
con Non-
Non-Equijoins

SELECT e.ename, e.sal, s.grade


FROM emp e JOIN salgrade s
ON e.sal BETWEEN s.losal AND s.hisal;

ENAME SAL GRADE


---------- --------- ---------
JAMES 950 1
SMITH 800 1
ADAMS 1100 1
...
14 rows selected.

Desplegando datos de múltiples tablas 5-


5-18 SQL Server

Recuperar Registros con Non-Equijoins


El ejemplo crea un non-equijoin para evaluar que grado tiene el salario de
cada empleado. Este salario debe estar entre cualquier rango de losal y hisal
de la tabla SALGRADE.
Puede utilizar el método tradicional :

SELECT e.ename, e.sal, s.grade


FROM emp e, salgrade s
WHERE e.sal BETWEEN s.losal AND s.hisal

Introducción a SQL-Server 5-18


Outer Joins (LEFT | RIGHT)
EMP DEPT
ENAME DEPTNO DEPTNO DNAME
----- ------ ------ ----------
KING 10 10 ACCOUNTING
BLAKE 30 30 SALES
CLARK 10 10 ACCOUNTING
JONES 20 20 RESEARCH
... ...
40 OPERATIONS

No existen empleados en el
departamento OPERATIONS

Desplegando datos de múltiples tablas 5-


5-19 SQL Server

Outer Joins (LEFT | RIGHT)


Si los renglones no satisfacen la condición join, el renglón no aparecerá en
el resultado del query. Por ejemplo, en el equi-join de EMP y DEPT, el
departamento 40 OPERATIONS no aparece debido a que ningún empleado
trabaja en ese departamento.

SELECT e.ename, e.deptno, d.dname


FROM emp e JOIN dept d
ON e.deptno = d.deptno;

ENAME DEPTNO DNAME


---------- --------- -------------
KING 10 ACCOUNTING
BLAKE 30 SALES
CLARK 10 ACCOUNTING
JONES 20 RESEARCH
...
ALLEN 30 SALES
TURNER 30 SALES
JAMES 30 SALES
...
14 rows selected.

Introducción a SQL-Server 5-19


Outer Joins
– Puede utilizar un outer join para ver también
aquellos renglones que normalmente no
cumplen la condición-
condición-join
join..
– Outer join puede ser por la izquierda (LEFT) o
por la derecha (RIGHT).
(RIGHT).

SELECT table.column, table.column


FROM table1 LEFT OUTER JOIN table2
ON table1.column = table2.column;

SELECT table.column, table.column


FROM table1 RIGHT OUTER JOIN table2
ON table1.column = table2.column;

Desplegando datos de múltiples tablas 5-


5-20 SQL Server

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.

Introducción a SQL-Server 5-20


Utilizando Outer Joins

SELECT e.ename, d.deptno, d.dname


FROM emp e RIGHT OUTER JOIN dept d
ON e.deptno = d.deptno
ORDER By d.deptno;

ENAME DEPTNO DNAME


---------- --------- -------------
KING 10 ACCOUNTING
CLARK 10 ACCOUNTING
...
40 OPERATIONS
15 rows selected.

Desplegando datos de múltiples tablas 5-


5-21 SQL Server

Utilizando Outer Joins


Coloque la palabra LEFT o RIGHT del lado que desee mostrar los
renglones con la deficiencia de información.

Introducción a SQL-Server 5-21


Self Joins

EMP (WORKER) EMP (MANAGER)


EMPNO ENAME MGR EMPNO ENAME
----- ------ ---- ----- --------
7839 KING
7698 BLAKE 7839 7839 KING
7782 CLARK 7839 7839 KING
7566 JONES 7839 7839 KING
7654 MARTIN 7698 7698 BLAKE
7499 ALLEN 7698 7698 BLAKE

"MGR en la tabla WORKER es igual a EMPNO


en la tabla MANAGER "

Desplegando datos de múltiples tablas 5-


5-22 SQL Server

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.

Introducción a SQL-Server 5-22


Haciendo Join en la misma tabla

SELECT worker.ename + ' works for ' + manager.ename


FROM emp worker JOIN emp manager
ON worker.mgr = manager.empno;

-------------------------------
BLAKE works for KING
CLARK works for KING
JONES works for KING
MARTIN works for BLAKE
...
13 rows selected.

Desplegando datos de múltiples tablas 5-


5-23 SQL Server

Haciendo Join en la misma tabla


Un self-join puede ser implementado con el método tradicional de la
siguiente forma :

SELECT worker.ename + ' works for ' + manager.ename


FROM emp worker, emp manager
WHERE worker.mgr = manager.empno;

Introducción a SQL-Server 5-23


Prácticas

– Utilice equi
equi--joins para unir tablas
– Ejecute outer
outer--joins y self
self--joins
– Agrege condiciones adicionales

Desplegando datos de múltiples tablas 5-


5-24 SQL Server

Introducción a SQL-Server 5-24


Funciones para
Agrupamientos

Funciones para Agrupamientos 6-


6-1 SQL Server

Introducción a SQL-Server 6-1


Objetivos
Al completar esta lección, deberá ser capaz de
hacer lo siguiente :
– Identificar las funciones para grupos
disponibles
– Describir el uso de las funciones para
grupos
– Agrupar los datos utilizando la cláusula
GROUP BY
– Incluir o excluir registros agrupados con
la cláusula HAVING

Funciones para Agrupamientos 6-


6-2 SQL Server

Introducción a SQL-Server 6-2


¿Qué son las funciones para grupos?
Las funciones para grupos operan con un conjunto de
renglones para devolver un solo resultado.
EMP
DEPTNO SAL
--------- ---------
10 2450
10 5000
10 1300
20 800
20 1100
20 3000 “salario MAX(SAL)
20 3000 máximo ---------
20 2975 en la tabla 5000
30 1600 EMP”
30 2850
30 1250
30 950
30 1500
30 1250

Funciones para Agrupamientos 6-


6-3 SQL Server

Funciones para grupos


A diferencia de las funciones de renglón simples, las funciones para grupos,
operan con un conjunto de renglones para obtener un resultado por grupo. Este
conjunto de renglones debe ser, o bien toda la tabla, o la tabla dividida en
grupos.

Introducción a SQL-Server 6-3


Tipos de Funciones
para Grupos
– AVG
– COUNT
– MAX
– MIN
– SUM

Funciones para Agrupamientos 6-


6-4 SQL Server

Funciones para grupos


Cada función acepta un argumento. La siguiente tabla identifica las opciones que
puede utilizar :

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

MIN([DISTINCT|ALL]expr) Valor Mínimo de expr, ignorando valores null


SUM([DISTINCT|ALL]n) Suma los valores de n, ignorando valores null

Introducción a SQL-Server 6-4


Utilizando Funciones
para Grupos

SELECT column, group_function(column)


FROM table
[WHERE condition]
[ORDER BY column];

Funciones para Agrupamientos 6-


6-5 SQL Server

Guía para el uso de funciones de grupos


• DISTINCT realiza la función de considerar solo aquellos renglones no
duplicados; ALL considera los renglones duplicados. Por default es ALL y no
necesita ser especificado.
• Todas las funciones de grupo excepto COUNT(*) ignoran los valores null.
Para sustituir los valores null, utilice la función ISNULL.

Introducción a SQL-Server 6-5


Utilizando las Funciones
AVG, MAX, MIN y SUM

SELECT AVG(sal) ‘AVG’, MAX(sal) ‘MAX’,


MIN(sal) ‘MIN’, SUM(sal) ‘SUM’
FROM emp
WHERE job LIKE 'SALES%';

AVG MAX MIN SUM


-------- --------- --------- ---------
1400 1600 1250 5600

Funciones para Agrupamientos 6-


6-6 SQL Server

Funciones para grupos


Puede utilizar las funciones AVG, MAX, MIN y SUM con columnas que
almacenan datos numéricos. El ejemplo muestra el promedio, el máximo, el
mínimo y la suma de los salarios de los empleados que son vendedores.

Introducción a SQL-Server 6-6


Utilizando las funciones
MIN y MAX
Puede utilizar las funciones MIN y MAX para cualquier
tipo de dato.

SELECT MIN(hiredate) “MIN DATE”,


MAX(hiredate) “MAX DATE”
FROM emp;

MIN DATE MAX DATE


----------------------- ------------------------
1980-12-17 00:00:00.000 1983-01-12 00:00:00.000

Funciones para Agrupamientos 6-


6-7 SQL Server

Funciones para grupos (continuación)


Puede utilizar las funciones MAX y MIN con otros tipos de datos. El ejemplo
muestra el más reciente y mas antiguo empleado.
El siguiente ejemplo muestra el primer y último nombre de empleado ordenados
alfabéticamente.

SELECT MIN(ename), MAX(ename)


FROM emp;

---------- ----------
ADAMS WARD
Nota : Las funciones AVG y SUM solo pueden ser utilizadas con datos
numéricos.

Introducción a SQL-Server 6-7


Utilizando la Función COUNT
COUNT(*) retorna el número de renglones
seleccionados en una tabla.

SELECT COUNT(*)
FROM emp
WHERE deptno = 30;

---------
6

Funciones para Agrupamientos 6-


6-8 SQL Server

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.

Introducción a SQL-Server 6-8


Utilizando la Función COUNT

COUNT(expr
COUNT(expr)) retorna el número de renglones non-
non-null.
null.

SELECT COUNT(comm)
FROM emp
WHERE deptno = 30;

-----------
4

Funciones para Agrupamientos 6-


6-9 SQL Server

La función COUNT (continuación)


El ejemplo muestra el número de empleados del departamento 30 que ganan una
comisión. Note que para el resultado obtenido, el total de renglones es de 4
debido a que existen empleados que no ganan una comisión y contienen un valor
null en su columna comm.
Ejemplo
Mostrar el número de departamentos en la tabla EMP.

SELECT COUNT(deptno)
FROM emp;

-------------
14

Mostrar el número de departamentos distintos.


SELECT COUNT(DISTINCT deptno)
FROM emp;

-----------
3

Introducción a SQL-Server 6-9


Funciones de Grupo y valores Null

Las funciones de Grupo ignoran los valores


null en las columnas.
SELECT AVG(comm)
FROM emp;

---------
550

Funciones para Agrupamientos 6-


6-10 SQL Server

Funciones de Grupo y valores Null


Todas las funciones excepto COUNT(*) ignoran los valores nulos en una
columna. En el ejemplo, el promedio es calculado basado solo en los renglones
que tienen valores válidos almacenados en la columna COMM.
El promedio es calculado como la suma de todas las comisiones dividido entre el
número de empleados (4).

Introducción a SQL-Server 6-10


Utilizando la Función ISNULL
para las Funciones de Grupo

La Función ISNULL hace que las Funciones de Grupo


incluyan valores null.
null.

SELECT AVG(ISNULL(comm,0))
FROM emp;

----------------
157.14286

Funciones para Agrupamientos 6-


6-11 SQL Server

Utilizando la Función ISNULL


La función ISNULL forza a las funciones para incluir los valores nulos. En el
ejemplo, el promedio salarial es calculado basado en todos los renglones ya sea
que tengan o no valores nulos en la columna COMM.

Introducción a SQL-Server 6-11


Creando Grupos de Datos

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

Funciones para Agrupamientos 6-


6-12 SQL Server

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.

Introducción a SQL-Server 6-12


Creando Grupos de Datos:
utilizando la cláusula GROUP BY

SELECT column, group_function(column)


FROM table
[WHERE condition]
[GROUP BY group_by_expression]
[ORDER BY column];

Divida los renglones de una tabla en pequeños


grupos utilizando la cláusula GROUP BY.

Funciones para Agrupamientos 6-


6-13 SQL Server

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.

group_by_expression especifica las columnas por las que se efectuará


el agrupamiento de los renglones de la tabla.

• Si incluye una columna q y funciones de grupo en la cláusula SELECT, no


puede obtener resultados individuales de q, a menos que coloque q en la
cláusula GROUP BY.
• Utilizando WHERE, puede pre-excluir renglones antes de ser divididos en
grupos.
• No puede utilizar alias de columnas en GROUP BY.
• Por default, los renglones son ordenados en orden ascendente por las
columnas especificadas en GROUP BY. Puede alterar este orden
utilizando ORDER BY.

Introducción a SQL-Server 6-13


Utilizando la cláusula GROUP BY
Todas las columnas en la lista de SELECT que no
estén en una función de grupo deben estar en la
cláusula GROUP BY.
BY.

SELECT deptno, AVG(sal)


FROM emp
GROUP BY deptno;

deptno
--------- ---------
10 2916.6667
20 2175.0000
30 1566.6667

Funciones para Agrupamientos 6-


6-14 SQL Server

La cláusula GROUP BY (continuación)


Cuando utilice la cláusula GROUP BY asegurese de que todas las columnas en
la lista de SELECT que no estén en funciones de grupo se encuentren en la
cláusula GROUP BY.
El ejemplo muestra el número de departamento y el promedio salarial por cada
departamento.

Introducción a SQL-Server 6-14


Utilizando la cláusula GROUP BY

Las columnas que estén en GROUP BY no necesitan


estar el la lista SELECT.

SELECT AVG(sal)
FROM emp
GROUP BY deptno;

---------
2916.6667
2175.0000
1566.6667

Funciones para Agrupamientos 6-


6-15 SQL Server

La cláusula GROUP BY (continuación)


Las columnas que aparecen en GROUP BY no necesariamente deben aparecer
en la lista de SELECT.
Puede utilizar funciones de grupo en ORDER BY.

SELECT deptno, AVG(sal)'AVG'


FROM emp
GROUP BY deptno
ORDER BY AVG(sal);

DEPTNO AVG
---------- ------------
30 1566.6667
20 2175.0000
10 2916.6667

Introducción a SQL-Server 6-15


Agrupando por más de una Columna

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

Funciones para Agrupamientos 6-


6-16 SQL Server

Grupos dentro de grupos


En ciertas ocasiones necesitará ver los resultados de grupos más pequeños dentro
de los mismos grupos. El ejemplo muestra un reporte que despliega el salario
total para cada puesto, dentro de cada departamento.

Introducción a SQL-Server 6-16


Agrupando por más de una Columna

SELECT deptno, job, sum(sal) ‘Sum’


FROM emp
GROUP BY deptno, job;

deptno job Sum


--------- --------- ---------
10 CLERK 1300
10 MANAGER 2450
10 PRESIDENT 5000
20 ANALYST 6000
20 CLERK 1900
...
9 rows selected.

Funciones para Agrupamientos 6-


6-17 SQL Server

Grupos dentro de grupos (continuación)


Puede retornar valores por grupos y subgrupos, listando más de una columna en
GROUP BY. La instrucción SELECT del ejemplo es evaluada de la siguiente
forma :
• La cláusula SELECT especifica las columnas a mostrar.
• La cláusula FROM indica de donde se tomarán los datos.
• La cláusula GROUP BY especifica como agrupar los renglones :
• Primero, los renglones son agrupados por número de departamento.
• Segundo, dentro de cada grupo del mismo departamento, los
renglones son reagrupados por puesto.
De esta forma, la suma se aplica al salario para cada puesto dentro de un mismo
departamento.

Introducción a SQL-Server 6-17


Errores al utilizar
Funciones de Grupos
Cualquier columna en la lista de SELECT que no este en
una función de grupo deben estar en la cláusula
GROUP BY.
BY.

SELECT deptno, COUNT(ename)


FROM emp;

Server: Msg 8118, Level 16, State 1


[Microsoft][ODBC SQL Server Driver][SQL Server]
Column 'emp.deptno' is invalid in the select
list because it is not contained in an aggregate
function and there is no GROUP BY clause.

Funciones para Agrupamientos 6-


6-18 SQL Server

Errores al utilizar Funciones de Grupos


Si utiliza columnas individuales (en este caso DEPTNO) junto con una función
de grupo, debe especificar cada una de estas columnas individuales en la
cláusula GROUP BY.

SELECT deptno, COUNT(ename) 'COUNT'


FROM emp
GROUP BY deptno;

DEPTNO COUNT
---------- -----------
10 3
20 5
30 6

Introducción a SQL-Server 6-18


Errores al utilizar
Funciones de Grupos
– No puede utilizar la cláusula WHERE para restringir
grupos.
– Utilice la cláusula HAVING para restringir grupos.

SELECT deptno, AVG(sal)


FROM emp
WHERE AVG(sal) > 2000
GROUP BY deptno;

Server: Msg 147, Level 15, State 1


[Microsoft][ODBC SQL Server Driver][SQL Server]
An aggregate may not appear in the WHERE clause
unless it is in a subquery contained in a HAVING
clause or a select list, and the column being
aggregated is an outer reference.

Funciones para Agrupamientos 6-


6-19 SQL Server

Errores al utilizar Funciones de Grupos (continuación)


La cláusula WHERE no puede ser utilizada para restringir grupos. El error del
ejemplo, es porque se condiciona, que solo se muestren los grupos cuyo
promedio salarial sea mayor a $2000.
Para corregir este error utilice HAVING para restringir grupos.

SELECT deptno, AVG(sal) 'AVG'


FROM emp
GROUP BY deptno
HAVING AVG(sal) > 2000;

DEPTNO AVG
---------- --------------
10 2916.6667
20 2175.0000

Introducción a SQL-Server 6-19


Eliminando Resultados por Grupo
EMP
DEPTNO SAL
--------- ---------
10 2450
10 5000 5000
10 1300
20 800 “salario
20 1100 máximo DEPTNO MAX(SAL)
20 3000 3000 por --------- ---------
20 3000 departamento 10 5000
20 2975 mayores a 20 3000
30 1600 $2900”
30 2850
30 1250
2850
30 950
30 1500
30 1250

Funciones para Agrupamientos 6-


6-20 SQL Server

Eliminando Resultados por Grupo


De la misma forma que WHERE elimina renglones en un SELECT, utilice
HAVING para condicionar resultados por grupo. Para encontrar el salario
máximo de cada departamento, y que muestre solo aquellos departamentos cuyo
salario máximo sea mayor a $2900, necesita realizar lo siguiente :
• Encontrar el salario máximo por cada departamento agrupando por
número de departamento.
• Restringir cada resultado de grupo, para que muestre solo aquellos que el
salario máximo sea mayor a $2900.

SELECT deptno, max(sal)


FROM emp
GROUP BY deptno
HAVING max(sal) > 2900;

Introducción a SQL-Server 6-20


Eliminando Resultados por Grupo :
Cláusula HAVING
Cuando utiliza la cláusula HAVING para restringir
grupos, se realiza lo siguiente :
• Los registros son agrupados.
• Las funciones de grupo son aplicadas.
• Los grupos que cumplan la condición de la
cláusula HAVING serán desplegados.

SELECT column, group_function


FROM table
[WHERE condition]
[GROUP BY group_by_expression]
[HAVING group_condition]
[ORDER BY column];

Funciones para Agrupamientos 6-


6-21 SQL Server

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.

Introducción a SQL-Server 6-21


Utilizando la cláusula HAVING

SELECT deptno, max(sal) ‘MAX SAL’


FROM emp
GROUP BY deptno
HAVING max(sal)>2900;

deptno MAX SAL


--------- ---------
10 5000
20 3000

Funciones para Agrupamientos 6-


6-22 SQL Server

Cláusula HAVING (continuación)


El ejemplo muestra los números de departamento y el salario máximo para
aquellos departamentos con un salario máximo mayor a $2900.
Puede utilizar GROUP BY sin utilizar funciones de grupo.
El ejemplo siguiente muestra los números de departamento y el promedio
salarial para aquellos departamentos cuyo salario máximo sea mayor a $2900.

SELECT deptno, AVG(sal) 'AVG'


FROM emp
GROUP BY deptno
HAVING MAX(sal) > 2900;

DEPTNO AVG
--------- ---------
10 2916.6667
20 2175.0000

Introducción a SQL-Server 6-22


Utilizando la cláusula HAVING

SELECT JOB, SUM(sal) PAYROLL


FROM emp
WHERE job NOT LIKE 'SALES%'
GROUP BY job
HAVING SUM(sal)>5000
ORDER BY SUM(sal);

JOB PAYROLL
--------- ---------
ANALYST 6000
MANAGER 8275

Funciones para Agrupamientos 6-


6-23 SQL Server

Cláusula HAVING (continuación)


El ejemplo muestra el puesto y la suma total salarial por puesto, para aquellos
puestos con una nómina total mayor a $5000. El ejemplo elimina a los puestos
SALESMAN, se ordena por suma total de cada puesto.

Introducción a SQL-Server 6-23


Prácticas

– Realizar consultas que utilicen


funciones de grupos
– Agrupar por renglones para obtener
más de un resultado
– Eliminar grupos utilizando la
cláusula HAVING

Funciones para Agrupamientos 6-


6-24 SQL Server

Introducción a SQL-Server 6-24


Subqueries

Subqueries 7-1 SQL Server

Introducción a SQL-Server 7-1


Objetivos
Al completar esta lección, deberá ser capaz de
hacer lo siguiente :
– Identificar los tipos de problemas que los
subqueries pueden resolver
– Definir un subquery
– Listar los tipos de subqueries
– Escribir queries de renglón-simple y
múltiples renglones

Subqueries 7-2 SQL Server

Introducción a SQL-Server 7-2


Utilizando un Subquery
para resolver un Problema
"¿Quién gana un salario mayor al de Jones?”
Jones?”

Query Principal

"¿Quién gana un salario mayor al de


? Jones?”

Subquery

?
“¿Cuál es salario de Jones?”

Subqueries 7-3 SQL Server

Usando un subquery para resolver un problema

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.

Introducción a SQL-Server 7-3


Subqueries

SELECT select_list
FROM table
WHERE expr operator
(SELECT select_list
FROM table);

– El subquery interno (inner


(inner query)
query) se ejecuta una
vez antes del query principal.
– El resultado del subquery es utilizado por el
query principal (outer
(outer query).
query).

Subqueries 7-4 SQL Server

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.

Introducción a SQL-Server 7-4


Utilizando un Subquery
SELECT ename
, sal 2975
FROM emp
WHERE sal > (SELECT sal
FROM emp
WHERE ename=‘JONES’);

ename sal
---------- ---------
SCOTT 3000.00
KING 5000.00
FORD 3000.00

Subqueries 7-5 SQL Server

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.

Introducción a SQL-Server 7-5


Guía para el uso de Subqueries

– Encierre los subqueries en paréntesis.


– Coloque los subqueries al lado derecho
del operador de comparación.
– No incluya una cláusula ORDER BY al
subquery.

Subqueries 7-6 SQL Server

Guías para el uso de subqueries


• Un subquery debe ir encerrado entre paréntesis.
• Un subquery debe aparecer del lado derecho de un operador de
comparación.
• Un subquery no debe contener una cláusula ORDER BY. Sólo puede
existir una cláusula ORDER BY por instrucción, si se utiliza esta debe ser
la última cláusula del SELECT principal.

Introducción a SQL-Server 7-6


Tipos de Subqueries
• Subquery de renglón-Simple
Main query
retorna
Subquery CLERK

• Subquery de renglón-Multiple
Main query

Subquery
retorna CLERK
MANAGER

Subqueries 7-7 SQL Server

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.

Introducción a SQL-Server 7-7


Subqueries de renglón-simple
– Retornan un solo renglón
– Utilice operadores de comparación para
renglones-
renglones-simples

Operador Descripción

= Igual

> Mayor que

>= Mayor o igual que

< Menor que

<= Menor o igual que

<> Diferente

Subqueries 7-8 SQL Server

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.

Introducción a SQL-Server 7-8


Ejecutando Subqueries
de Renglón-simple
SELECT ename, job, sal
FROM emp
WHERE job = CLERK
(SELECT job
FROM emp
WHERE ename = 'SMITH')
AND sal > 1100
(SELECT sal
FROM emp
WHERE ename = 'ADAMS');

ENAME JOB SAL


---------- --------- --------
MILLER CLERK 1300.00

Subqueries 7-9 SQL Server

Ejecutando subqueries de renglón simple


El ejemplo muestra a todos los empleados cuyo puesto es el mismo que el del
empleado Smith y que ganan más de lo que gana el empleado Adams.
El ejemplo consiste en tres queries: el query externo y dos queries internos.
Los queries internos son ejecutados primero, produciendo los resultados:
CLERK y 1100, respectivamente. El query externo procesa estos valores
retornados por los queries internos para completar su condición en la cláusula
WHERE.
Ambos queries internos retornan un valor (CLERK y 1100, respectiva-mente),
de tal forma que esta instrucción es conocida como Subquery de renglón-
simple.
Nota: los queries internos y externos pueden obtener datos de diferentes
tablas. El siguiente query obtiene el mismo resultado sin usar subqueries.

SELECT e.ename, e.job, e.sal


FROM emp as e, emp as s, emp as a
WHERE s.ename = 'smith'
and a.ename = 'adams'
and e.job = s.job
and e.sal > a.sal;

Introducción a SQL-Server 7-9


Utilizando una Función de Grupo
en un Subquery

SELECT ename, job, sal


FROM emp 800
WHERE sal =
(SELECT MIN(sal)
FROM emp);

ENAME JOB SAL


---------- --------- ---------
SMITH CLERK 800

Subqueries 7-10 SQL Server

Utilizando funciones de grupo en un subquery


Puede desplegar datos desde un query principal utilizando funciones de grupo
en un subquery que retorne un sólo renglón.
El ejemplo obtiene el nombre de empleado, puesto y salario de todos los
empleados cuyo salario sea igual al mínimo. La función de grupo MIN retorna
un sólo valor (800) al query externo.

Introducción a SQL-Server 7-10


Cláusula HAVING con Subqueries

– Sql Server ejecuta el subquerys primero.


– Retorna el resultado al "main
"main query’s"
query’s" para la
cláusula HAVING.

SELECT deptno, MIN(sal)


FROM emp
GROUP BY deptno
800
HAVING MIN(sal) >
(SELECT MIN(sal)
FROM emp
WHERE deptno = 20);

Subqueries 7-11 SQL Server

Utilizando la cláusula HAVING con subqueries


Puede utilizar subqueries no sólo en la cláusula WHERE, sino también en la
cláusula HAVING. SQL Server ejecuta el subquery, y el resultado es devuelto
al query principal en la cláusula HAVING.
El ejemplo muestra todos los departamentos que tengan un salario mínimo
mayor al del departamento 20.

Introducción a SQL-Server 7-11


¿Qué esta mal
es esta instrucción?
SELECT empno, ename
FROM emp
WHERE sal =
(SELECT MIN(sal)
FROM emp
GROUP BY deptno);

Server: Msg 512, Level 16, State 1


[Microsoft][ODBC SQL Server Driver][SQL Server]Subquery returned
more than 1 value. This is illegal when the subquery follows
=, !=, <, <= , >, >= or when the subquery is used as an expression.

Subqueries 7-12 SQL Server

Errores con Subqueries


Un error común al trabajar con subqueries es cuando el query interno retorna
más de un renglón a un operador de renglón-simple.
En el ejemplo, el subquerie contiene una cláusula GROUP BY (deptno), la
cual implica que el subquery retornará múltiples renglones, uno por cada
grupo. En este caso, el resultado del subquery sería 800,1300 y 950.
El query externo toma el resultado del subquery (800, 950, 1300) y utiliza
estos datos en la cláusula WHERE. La cláusula WHERE contiene un operador
(=), el cual es un operador de renglón-simple y espera sólo un valor. El
operador = no puede aceptar más de un sólo valor del subquery y generará un
error.
Para corregir este error, cambie el operador = por el operador IN.

Introducción a SQL-Server 7-12


¿Funcionará esta instrucción?

SELECT ename, job


FROM emp
WHERE job =
(SELECT job es
FROM empal
u
v
WHERE o
ename='SMYTHE');
n
rns
tu
re
(0 row(s) affected)
y
u er
u bq
S

Subqueries 7-13 SQL Server

Problemas con subqueries


Un problema común con los subqueries es cuando el query interno no retorna
valores.
En el ejemplo, el subquery contiene una cláusula WHERE
(ename='SMYTHE'). Se pretende encontrar al empleado cuyo nombre es
SMYTHE. La instrucción parece correcta pero no selecciona renglones
cuando se ejecuta, debido a que no existe un empleado con ese nombre.
El query externo toma el resultado del subquery (NULL) y lo utiliza en la
cláusula WHERE. El query externo no encuentra empleados con un puesto
null, y entonces no retorna renglones.

Introducción a SQL-Server 7-13


Subqueries de renglón - múltiple

– Retornan más de un renglón


– Utilizan operadores de comparación de renglón-
renglón-
múltiple

Operador Significado

IN Igual a cualquier miembro de la lista

ANY Compara el valor con cada valor


retornado por el subquery

ALL Compara el valor con todos los valores


retornados por el subquery

Subqueries 7 - 14 SQL Server

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.

SELECT ename, sal, deptno


FROM emp
WHERE sal IN (SELECT MIN(sal)
FROM emp
GROUP BY deptno);

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:

SELECT ename, sal, deptno


FROM emp
WHERE sal IN (800, 950, 1300);

Introducción a SQL-Server 7-14


Usando el Operador ANY
en Subqueries de renglón-múltiple
SELECT empno
, ename 1300
1100
, job 800
, sal 950

FROM emp
WHERE sal < ANY (SELECT sal
FROM emp
WHERE job = 'CLERK')
AND job <> 'CLERK';

EMPNO ENAME JOB SAL


--------- ---------- --------- -------
7654 MARTIN SALESMAN 1250
7521 WARD SALESMAN 1250

Subqueries 7-15 SQL Server

Subqueries de múltiple-renglón (continuación)


El operador ANY compara un valor para cada valor retornado por el subquery.
El ejemplo muestra aquellos empleados cuyo salario es menor que cualquiera
del puesto CLERK y que no tengan ese puesto. El salario máximo que se
puede ganar en un puesto CLERK es $1300. La instrucción SQL muestra a
todos los empleados que no tienen el puesto de CLERK pero que ganan menos
de $1300.
<ANY significa menor que el máximo del grupo. >ANY significa mayor que
el mínimo del grupo. =ANY es equivalente a IN.

Introducción a SQL-Server 7-15


Usando el Operador ALL
en Subqueries de renglón-múltiple

SELECT empno, ename, job, sal


1566.6667
FROM emp 2175
WHERE sal > ALL 2916.6667

(SELECT avg(sal)
FROM emp
GROUP BY deptno);

EMPNO ENAME JOB SAL


--------- ---------- --------- ------
7839 KING PRESIDENT 5000
7566 JONES MANAGER 2975
7902 FORD ANALYST 3000
7788 SCOTT ANALYST 3000

Subqueries 7-16 SQL Server

Subqueries de múltiple-renglón (continuación)


El operador ALL compara un valor con todos los valores retornados por un
subquery. El ejemplo muestra a los empleados cuyo salario es mayor que el
salario promedio de todos los departamentos. El salario promedio mayor de un
departamento es $2916.66, por lo tanto el query retorna aquellos empleados
cuyo salario sea mayor que $2916.66.
>ALL significa mayor que el máximo y <ALL significa menor que el mínimo.
El operador NOT puede ser utilizado con los operadores IN, ANY y ALL.

Introducción a SQL-Server 7-16


Utilizando un Subquery
en la cláusula FROM
SELECT a.ename, a.sal, a.deptno, b.salavg
FROM emp a, (SELECT deptno, avg(sal) salavg
FROM emp
GROUP BY deptno) b
WHERE a.deptno = b.deptno
AND a.sal > b.salavg;

ENAME SAL DEPTNO SALAVG


---------- --------- --------- ----------
KING 5000 10 2916.6667
JONES 2975 20 2175.0000
SCOTT 3000 20 2175.0000
...
6 rows selected.

Subqueries 7-17 SQL Server

Utilizando un subquery en la cláusula FROM


Puede utilizar un subquery en la cláusula FROM de la instrucción SELECT, la
cual es muy similar a cómo se generan las vistas. El ejemplo muestra los
nombres de empleado, salarios, números de departamento y promedio salarial
para todos los empleados que ganan más del salario promedio en su
departamento.

El query que genera la tabla b tendrá los siguientes datos:

deptno salavg
------- ---------
10 2916.6667
20 2175.0000
30 1566.6667

Introducción a SQL-Server 7-17


Usando el operador EXISTS
Utilizando el operador EXISTS
• Sí un subquery retorna un valor:
– La búsqueda no continúa en el query
interno
– La condición es evaluada a verdadero
• Si un subquery no retorna un valor :
– La condición es evaluada a falso
– La búsqueda no continúa en el query
interno

Subqueries 7-18 SQL Server

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.

Introducción a SQL-Server 7-18


Usando el operador EXISTS
Encuentre los empleados que al menos tienen a una
persona como subordinado.

SELECT empno, ename, job, deptno


FROM emp out
WHERE EXISTS (SELECT empno
FROM emp inn
WHERE inn.mgr = out.empno);

empno ename job deptno


------ ---------- --------- ------
7566 JONES MANAGER 20
7698 BLAKE MANAGER 30
7782 CLARK MANAGER 10
7788 SCOTT ANALYST 20
7839 KING PRESIDENT 10
7902 FORD ANALYST 20

Subqueries 7-19 SQL Server

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.

Introducción a SQL-Server 7-19


Usando el operador NOT EXISTS
Encuentre los departamentos que no tienen empleados.

SELECT deptno, dname


FROM dept d
WHERE NOT EXISTS
(SELECT '1'
FROM emp e
WHERE d.deptno = e.deptno);

deptno dname
------ --------------
40 OPERATIONS

Subqueries 7-20 SQL Server

El operador EXISTS (continuación)


Note que el SELECT interno no necesita retornar un valor específico, se
puede recuperar una literal. Utilice esto para mejorar el desempeño de los
queries, es más rápido seleccionar una constante que una columna.

SELECT deptno, dname


FROM dept
WHERE deptno NOT IN (SELECT deptno
FROM emp);

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.

Introducción a SQL-Server 7-20


Prácticas

– Crear subqueries para buscar


valores con criterios conocidos
– Utilice subqueries para encontrar
que valores existen en un conjunto
de datos

Subqueries 7-21 SQL Server

Introducción a SQL-Server 7-21


Creación y
Mantenimiento de tablas

Creación y Mantenimiento de tablas 8-


8-1 SQL Server

Introducción a SQL-Server 8-1


Objetivos
Al completar esta lección, deberá ser capaz de
hacer lo siguiente :
– Describir los objetos de una base de
datos
– Crear tablas
– Describir los tipos de datos disponibles
en la creación de tablas
– Alterar la definición de tablas
– Borrar tablas

Creación y Mantenimiento de tablas 8-


8-2 SQL Server

Introducción a SQL-Server 8-2


Database Objects

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

Creación y Mantenimiento de tablas 8-


8-3 SQL Server

Objetos de la base de datos


Una base de datos en Microsoft SQL Server puede contener diferentes estructuras
de datos. Cada estructuras pertenecerá a la base de datos, y pueden ser los siguientes
tipos :
• Tabla: almacena datos
• Vista: sub-conjunto datos de una o más tablas
• Indice: para mejorar el rendimiento de los queries

Introducción a SQL-Server 8-3


La instrucción CREATE TABLE

– Debe especificar :
• El nombre de la tabla
• El nombre de las columnas, tipo y tamaño

CREATE TABLE table


(column datatype [DEFAULT expr]);

Creación y Mantenimiento de tablas 8-


8-4 SQL Server

La instrucción CREATE TABLE


Utilice la instrucción CREATE TABLE para crear tablas y almacenar datos. Este
inserción pertenece al lenguaje de definición de datos (DDL). Las instrucciones
DDL son un subjunto de instrucciones de SQL utilizadas para crear, modificar o
eliminar tablas de la base de datos. Estos instrucciones tiene un efecto inmediato
en la base de datos.
Para crear una tabla, debe tener privilegios para crear objetos. El administrador
de la base de datos,utiliza las instrucciones del lenguaje de control de datos
(DCL), para otorgar privilegios a los usuarios.
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.

Introducción a SQL-Server 8-4


La Opción DEFAULT
Debe de especificar un valor por default para una
columna durante su inserción.

… hiredate DATETIME DEFAULT GETDATE(), …

• Los valores permitidos son literales,


expresiones o funciones de SQL.
• Valores no permitidos son nombres de
columnas.
• El valor por default debe ser del mismo
tipo que la columna.
Creación y Mantenimiento de tablas 8-
8-5 SQL Server

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.

Introducción a SQL-Server 8-5


Reglas para el nombrado

• Deben de empezar con una letra


• Deben contener sólo caracteres A-Z,
0-9, _, y #
• No se deben duplicar los nombres
de otros objetos del mismo usuario
• No deben ser palabras reservadas
de Microsoft SQL Server

Creación y Mantenimiento de tablas 8-


8-6 SQL Server

Reglas para el nombrado


Los nombres de tablas y columnas deben cumplir la siguientes reglas de
nombrado:
• Deben de empezar con una letra
• Deben contener sólo caracteres A-Z, 0-9, _, y #
• No se deben duplicar los nombres de otros objetos del mismo usuario
• No deben ser palabras reservadas de Microsoft SQL Server

Introducción a SQL-Server 8-6


Creando Tablas
Creando una tabla.

CREATE TABLE dept2


(deptno NUMERIC(2),
dname VARCHAR(14),
loc VARCHAR(13)
);

SELECT *
FROM dept2;

Creación y Mantenimiento de tablas 8-


8-7 SQL Server

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.

Puede utilizar el procedimiento almacenado que viene con el manejador sp_help


<tabla>.

Ejemplo:
sp_help dept2;

Introducción a SQL-Server 8-7


Tipos de datos

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

Creación y Mantenimiento de tablas 8-


8-8 SQL Server

Introducción a SQL-Server 8-8


La instrucción ALTER TABLE

Utilice la instrucción ALTER TABLE para :


– Agregar nuevas columnas
– Eliminar una columna existente
– Definir un valor por default para una nueva
columna

ALTER TABLE table


ADD column datatype [DEFAULT expr]
[, column datatype]...;

ALTER TABLE table


DROP COLUMN column;

Creación y Mantenimiento de tablas 8-


8-9 SQL Server

La instrucción ALTER TABLE


Después de que haya creado las tablas, puede necesitar realizar cambios en las
estructuras, en el caso de que le hayan faltado columnas. Puede hacer esto
utilizando la instrucción ALTER TABLE. Puede agregar columnas utilizando la
instrucción ALTER TABLE con la cláusula ADD.
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.

Puede eliminar columnas existentes en la tabla utilizando la instrucción ALTER


TABLE con la cláusula de DROP.

Introducción a SQL-Server 8-9


Agregando Columnas
EMP Nueva columna
EMPNO ENAME SAL HIREDATE AGE “…agregar
“…agregar
------ ---------- -------- una nueva
7698 BLAKE 34200 01-MAY-81 columna a la
7654 MARTIN 15000 28-SEP-81 tabla EMP…”
7499 ALLEN 19200 20-FEB-81
7844 TURNER 18000 08-SEP-81
...

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
...

Creación y Mantenimiento de tablas 8-


8-10 SQL Server

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.

Introducción a SQL-Server 8-10


Agregando una Columna

Utilice la cláusula ADD para agregar columnas.

ALTER TABLE EMP


ADD AGE INT;

La nueva columna será la última


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
...

Creación y Mantenimiento de tablas 8-


8-11 SQL Server

Agregando una columna


El ejemplo agrega una columna llamada AGE a la tabla EMP, esta columna se
coloca al final del tabla.
Nota: Si la tabla ya contiene registros, esta nueva columna será inicializada con
NULL en todos los registros existentes.

Introducción a SQL-Server 8-11


Borrando una Tabla

• Cualquier cambió pendiente será


completado
• Todos los índices serán borrados
• No puede deshacer los efectos de esta
instrucción

DROP TABLE dept2;

Creación y Mantenimiento de tablas 8-


8-12 SQL Server

Borrando una tabla


La instrucción DROP TABLE elimina una tabla de la base de datos. Cuando
elimina una tabla, pierde todos los datos y los índices asociados con ella.
La instrucción DROP TABLE, una vez ejecutada, es irreversible. Microsoft SQL
Server no pregunta si decía confirmar esta acción.

Introducción a SQL-Server 8-12


Incluyendo Constraints

¿Qué es un Constraint?

• Los constraints son restricciones a nivel de tablas


• los constraints previenen borrados de una tabla si
existen dependencias.
• Los siguientes tipos de constraints están disponibles
en Microsoft SQL Server.
• NOT NULL
• UNIQUE Key
• PRIMARY KEY
• FOREIGN KEY
• CHECK

Creación y Mantenimiento de tablas 8-


8-13 SQL Server

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

Este es un constraint explícito debido a que, el usuario es quien debe


especificar que tipo de validación se debe llevar a cabo para los valores que
formarán el dominio de una columna afectada por este constraint.

Introducción a SQL-Server 8-13


Reglas para la creación de
Constraints
• Otorgue un nombre a los constraints, de
otra forma Microsoft SQL Server generará
un nombre propio
• Puede crear un constraint:
– Al momento en que crea una tabla
– Después de que la tabla ha sido
creada
• Defina un constraint a nivel de columna o
de tabla

Creación y Mantenimiento de tablas 8-


8-14 SQL Server

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.

Introducción a SQL-Server 8-14


Definiendo Constraints

CREATE TABLE table


(column datatype [DEFAULT expr]
[column_constraint],

[table_constraint]);

CREATE TABLE emp(


empno NUMERIC(4),
ename VARCHAR(10) NOT NULL,
comm MONEY,
...
deptno NUMERIC(7,2),
CONSTRAINT emp_empno_pk
PRIMARY KEY (EMPNO));

Creación y Mantenimiento de tablas 8-


8-15 SQL Server

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.

Introducción a SQL-Server 8-15


El Constraint NOT NULL
Asegura que valores null no sean almacenados en
una columna.

EMP
EMPNO ENAME JOB ... COMM DEPTNO

7839 KING PRESIDENT 10


7698 BLAKE MANAGER 30
7782 CLARK MANAGER 10
7566 JONES MANAGER 20
...

NOT NULL constraint Ausencia del


(ningún renglón puede constraint NOT NULL
contener valores null en (cualquier renglón
esta columna). puede contener null
en esta columna).

Creación y Mantenimiento de tablas 8-


8-16 SQL Server

Constraint NOT NULL


El constraint NOT NULL asegura que valores nulos no sean permitidos en una
columna. Las columnas que no tengan este constraint pueden grabar valores
nulos.

Introducción a SQL-Server 8-16


El Constraint NOT NULL

Definido a nivel de columna

CREATE TABLE emp(


empno NUMERIC(4),
ename VARCHAR(10) NOT NULL,
job VARCHAR(9),
mgr NUMERIC(4),
hiredate DATETIME,
sal NUMERIC(7,2),
comm NUMERIC(7,2),
deptno NUMERIC(2)
);

Creación y Mantenimiento de tablas 8-


8-17 SQL Server

Constraint NOT NULL (continuación)


El constraint NOT NULL sólo puede ser especificado a nivel columna, no a
nivel tabla.
El ejemplo aplica el constraint NOT NULL a la columna ENAME de la tabla
EMP. Debido a que este constraint no tienen nombre, Microsoft SQL Server le
asigna uno.
Puede especificar el nombre del constraint al momento de crearlo.

... ENAME NUMERIC(2),


CONSTRAINT emp_ename_nn NOT NULL...

Introducción a SQL-Server 8-17


El Constraint UNIQUE Key
UNIQUE key constraint
DEPT
DEPTNO DNAME LOC
------ ---------- --------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON

Insert into No permitido


50 SALES DETROIT (DNAME−SALES
(DNAME
ya existe)
60 BOSTON Permitido

Creación y Mantenimiento de tablas 8-


8-18 SQL Server

Constraint UNIQUE key


Un constraint UNIQUE key requiere que cada valor en la columna o conjunto de
columnas sea único, es decir, dos renglones de la misma tabla no pueden tener el
valor duplicado en la columna o columnas especificadas como UNIQUE.
El constraint UNIQUE permite la inserción de valores nulos a menos que defina
un constraint NOT NULL para la misma columna; de hecho, cualquier renglón
puede incluir valores NULL en las columnas debido a que un NULL no es
considerado igual a otro NULL. Un valor NULL en una columna (o en las
columnas compuestas por UNIQUE) siempre satisfacen la restricción UNIQUE.

Introducción a SQL-Server 8-18


El Constraint UNIQUE Key

Definido ya sea a nivel columna o a nivel


tabla

CREATE TABLE dept(


deptno NUMERIC(2),
dname VARCHAR(14),
loc VARCHAR(13),
CONSTRAINT dept_dname_uk UNIQUE(dname));

Creación y Mantenimiento de tablas 8-


8-19 SQL Server

Constraint UNIQUE key (continuación)


El constraint UNIQUE puede ser definido a nivel columna o a nivel tabla. Un
UNIQUE compuesto por dos o más columnas debe ser creado utilizando la
definición a nivel de tabla.
El ejemplo aplica un constraint UNIQUE a la columna de DNAME de la tabla de
DEPT. El nombre del constraint es dept_dname_uk.
Nota: Microsoft SQL Server crea un índice único implícito al constraint
UNIQUE.

Introducción a SQL-Server 8-19


El Constraint PRIMARY KEY
PRIMARY KEY
DEPT
DEPTNO DNAME LOC
------ ---------- --------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON

Insert into No permitido


20 MARKETING DALLAS (DEPTNO−20
(DEPTNO 20
ya existe)
FINANCE NEW YORK No permitido
(DEPTNO es null)
null)

Creación y Mantenimiento de tablas 8-


8-20 SQL Server

Constraint PRIMARY KEY


El el constraint PRIMARY KEY crea la llave primaria de la tabla. Sólo puede
existir una llave primaria por cada tabla. El constraint PRIMARY KEY es una
columna o conjunto de columnas que identifican en forma única a cada registro
en la tabla. Este constraint forza a que los valores de la columna o columnas sean
únicos y que no contengan valores nulos.

Introducción a SQL-Server 8-20


El Constraint PRIMARY KEY

Definido ya sea a nivel columna o a nivel


tabla

CREATE TABLE dept(


deptno NUMERIC(2),
dname VARCHAR(14),
loc VARCHAR(13),
CONSTRAINT dept_dname_uk UNIQUE (dname),
CONSTRAINT dept_deptno_pk PRIMARY KEY(deptno));

Creación y Mantenimiento de tablas 8-


8-21 SQL Server

Constraint PRIMARY KEY (continuación)


El constraint PRIMARY KEY puede ser definido a nivel columna o a nivel
tabla. Sin embargo, una llave primaria compuestas sólo debe ser creada nivel de
tabla.
El ejemplo crea una llave primaria en la columna DEPTNO para la tabla DEPT.
Nota: Un índice único es es creado implícitamente con el constraint PRIMARY
KEY. Si un constraint afecta a más de una columna (constraint compuesto) éste
solo puede ir a nivel de tabla.

Introducción a SQL-Server 8-21


El Constraint FOREIGN KEY
DEPT
PRIMARY DEPTNO DNAME LOC
KEY ------ ---------- --------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
...
EMP
EMPNO ENAME JOB ... COMM DEPTNO FOREIGN
KEY
7839 KING PRESIDENT 10
7698 BLAKE MANAGER 30
...
No permitido
(DEPTNO−9
(DEPTNO 9
Insert into no existe en la
tabla DEPT
7571 FORD MANAGER ... 200 9
7571 FORD MANAGER ... 200 Permitido

Creación y Mantenimiento de tablas 8-


8-22 SQL Server

Constraint FOREIGN KEY


El constraint FOREIGN KEY, o regla de integridad referencial, designa una
columna o combinación de columnas, como una llave foránea y establece una
relación entre una llave primaria en la misma tabla o en una tabla diferente. En el
ejemplo, DEPTNO ha sido definida como la llave foránea en la tabla EMP (tabla
dependiente o tabla hija); hace referencia a la columna DEPTNO de la tabla
DEPT (tabla padre o tabla referenciada).
El valor de una llave foránea debe coincidir con un valor existente en la tabla
padre o ser nula. Las llaves foráneas están basadas en valores y son apuntadores
puramente lógicos, no físicos.

Introducción a SQL-Server 8-22


The FOREIGN KEY Constraint

Definido ya sea a nivel columna o a nivel


tabla
CREATE TABLE emp(
empno NUMERIC(4),
ename VARCHAR(10) NOT NULL,
job VARCHAR(9),
mgr NUMERIC(4),
hiredate DATETIME,
sal NUMERIC(7,2),
comm NUMERIC(7,2),
deptno NUMERIC(7,2),
CONSTRAINT emp_deptno_fk FOREIGN KEY (deptno)
REFERENCES dept (deptno));

Creación y Mantenimiento de tablas 8-


8-23 SQL Server

Constraint FOREIGN KEY (continuación)


El constraint FOREIGN KEY puede ser definido a nivel columna o a nivel tabla.
Sin embargo una llave foránea compuesta debe ser creada a nivel de tabla.
El ejemplo define una llave foránea en la columna DEPTNO de la tabla EMP.
Se puede definir un costraint referencial a nivel columna de la siguiente forma:

CREATE TABLE emp(


empno NUMERIC(4),
ename VARCHAR(10) NOT NULL,
job VARCHAR(9),
mgr NUMERIC(4),
hiredate DATETIME,
sal NUMERIC(7,2),
comm NUMERIC(7,2),
deptno NUMERIC(7,2) CONSTRAINT emp_deptno_fk
REFERENCES dept (deptno)
);

Introducción a SQL-Server 8-23


FOREIGN KEY Constraint
Keywords
– FOREIGN KEY
Define que columna en la tabla "hijo" será
FOREING KEY cuando el constraint sea a
nivel tabla

– REFERENCES
Identifica a la tabla y columna que hace
referencia en la tabla "padre"

Creación y Mantenimiento de tablas 8-


8-24 SQL Server

Constraint FOREIGN KEY (continuación)


Una llave foránea se define en una tabla "hijo", y la tabla que contiene la
columna referenciada es denominada tabla "padre". La llave foránea es definida
utilizando una combinación de las siguientes palabras reservadas:
• FOREIGN KEY es utilizada para definir la columna en la tabla "hijo" a
nivel de tabla.
• REFERENCES identifica a la tabla y columna en la tabla "padre", se
utiliza ya sea a nivel de columna o a nivel de tabla.

Introducción a SQL-Server 8-24


El Constraint CHECK

Define una condición que cada renglón


debe cumplir

..., deptno NUMERIC(2),


CONSTRAINT emp_deptno_ck
CHECK (DEPTNO BETWEEN 10 AND 99),...

Creación y Mantenimiento de tablas 8-


8-25 SQL Server

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.

Introducción a SQL-Server 8-25


Agregando Constraints

ALTER TABLE table


ADD [CONSTRAINT constraint_nombre] type (column);

Agregue o elimine , pero no modifique


un constraint

Creación y Mantenimiento de tablas 8-


8-26 SQL Server

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.

Introducción a SQL-Server 8-26


Agregando Constraints

Agregue un constraint FOREIGN KEY a la


tabla empleados indicando que debe existir
un manager válido para este empleado en la
tabla.

ALTER TABLE emp


ADD CONSTRAINT emp_mgr_fk
FOREIGN KEY(mgr) REFERENCES emp(empno);

Creación y Mantenimiento de tablas 8-


8-27 SQL Server

Agregando constraints (continuación)


El ejemplo crea un constraint FOREIGN KEY en la tabla EMP. Este constraint
asegura que debe existir un manager válido en la tabla EMP para un empleado.

Introducción a SQL-Server 8-27


Eliminando un Constraint
Elimine el constraint de manager de la
tabla EMP.

ALTER TABLE emp


DROP CONSTRAINT emp_mgr_fk;

Creación y Mantenimiento de tablas 8-


8-28 SQL Server

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.

Introducción a SQL-Server 8-28


Prácticas

– Crear nuevas tablas


– Agregar reglas de integridad, para
relacionar las tablas

Creación y Mantenimiento de tablas 8-


8-29 SQL Server

Introducción a SQL-Server 8-29


Insertando,
actualizando y
borrando datos

Insertando datos 9-
9-1 SQL Server

Introducción a SQL-Server 9-1


Objetivos
Al completar esta lección, deberá ser capaz de
hacer lo siguiente :
– Insertar nuevos renglones a una tabla
– Insertar valores nulos
– Modificar valores en los renglones
– Utilizar queries para cambiar valores
– Eliminar renglones en la tabla
– Eliminar renglones basados en otras
tablas
– Verificar las reglas de integridad

Insertando datos 9-
9-2 SQL Server

Introducción a SQL-Server 9-2


Lenguaje de manipulación de datos

– Una instrucción DML es ejecutada cuando:


• Agrega nuevos registros a la tabla
• Modificar los renglones existentes en la tabla
• Elimina renglones existentes de la tabla

– Una transacción consiste de una colección de


instrucciones DML que forman una unidad lógica
de trabajo.

Insertando datos 9-
9-3 SQL Server

Lenguaje de manipulación de datos


El lenguaje de manipulación de datos (DML) es una parte de SQL. Cuando
desea agregar, actualizar o borrar datos en una base de datos, debe ejecutar
instrucciones del DML. Un conjunto de instrucciones DML que forman una
unidad lógica de trabajo es llamada transacción.
Considere una base datos bancaria, cuando un cliente del banco transfiere
dinero de su cuenta de ahorros a una cuenta de cheques, la transacción
consistirá en tres operaciones separadas: decrementar la cuenta de ahorros,
incrementar la cuenta de cheques y registrar la transacción en la bitácora de
transacciones. Microsoft SQL Server debe garantizar que estas tres
instrucciones SQL sean ejecutadas con éxito para mantener la consistencia de
la base de datos.

Introducción a SQL-Server 9-3


Agregando nuevos registros a la Tabla

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

Introducción a SQL-Server 9-4


La instrucción INSERT

– Agregar nuevos registros a la tabla


utilizando la instrucción INSERT

INSERT INTO table [(column [, column...])]


VALUES (value [, value...]);

– Sólo un renglón es insertado a la vez con


esta sintaxis

Insertando datos 9-
9-5 SQL Server

Agregando un nuevo renglón a la tabla


Puede agregar nuevos renglones a la tabla utilizando la instrucción INSERT.

Sintaxis:
table es el nombre de la tabla.
column es el nombre de la columna.
values es valor que le corresponderá a la columna

Introducción a SQL-Server 9-5


Insertando nuevos registros
• Insertar un nuevo renglón conteniendo valores
para cada columna.

• Listar los valores en el orden por default de las


columnas en la tabla.

• Listar opcionalmente las columnas en la cláusula


insert.

INSERT INTO dept (deptno, dname, loc)


VALUES (50, 'DEVELOPMENT', 'DETROIT');

• Encierre los caracteres y fechas en comillas


simples
Insertando datos 9-
9-6 SQL Server

Agregando un nuevo renglón a la tabla (continuación)


Debido a que puede insertar un nuevo renglón que contiene valores para cada
columna, la lista de columnas no es necesaria en la cláusula INSERT. Sin
embargo, sino utiliza la lista de columnas, los valores deben ser listados de
acuerdo al orden por default que tienen las columnas en la tabla.

Introducción a SQL-Server 9-6


Insertando registros
con valores Null
• Método implícito: omita a la columna de la lista de
columnas.

INSERT INTO dept (deptno, dname )


VALUES (60, 'MIS');

• Método explícito: especifique la palabra NULL.

INSERT INTO dept


VALUES (70, 'FINANCE', NULL);

Insertando datos 9-
9-7 SQL Server

Métodos por insertar valores nulos

Method Description
Implícito Omite la columna de la lista de columnas.
Explícito Especifique la palabra NULL la lista de valores (VALUES)

Introducción a SQL-Server 9-7


Insertando valores especiales

La función GETDATE() registra la fecha y hora


actuales.

INSERT INTO emp (empno, ename, job,


mgr, hiredate, sal, comm,
deptno)
VALUES (7196, 'GREEN', 'SALESMAN',
7782, GETDATE(), 2000, NULL,
10);

Insertando datos 9-
9-8 SQL Server

Insertando valores especiales utilizando funciones SQL


Puede utilizar pseudocolumnas para intentar valores especiales en las tablas.
El ejemplo graba al empleado Green en la tabla. Utiliza la función
GETDATE() para obtener la fecha y hora actuales.

Confirmando la inserción en la tabla

SELECT empno, ename, job, hiredate, comm


FROM emp
WHERE empno = 7196;

EMPNO ENAME JOB HIREDATE COMM


--------- ---------- --------- --------- ---------
7196 GREEN SALESMAN 01-DEC-97

Introducción a SQL-Server 9-8


Cambiando Datos en la Tabla
EMP
EMPNO ENAME JOB ... DEPTNO

7839 KING PRESIDENT 10


7698 BLAKE MANAGER 30
7782 CLARK MANAGER 10
7566 JONES MANAGER 20
...

EMP
EMPNO ENAME JOB ... DEPTNO

7839 KING PRESIDENT 10


7698 BLAKE MANAGER 30
7782 CLARK MANAGER 20
7566 JONES MANAGER 20
...

Insertando datos 9-
9-9 SQL Server

Cambiando datos en una tabla


El ejemplo actualiza el número del departamento de Clark de 10 a 20.

Introducción a SQL-Server 9-9


La instrucción UPDATE

– Modificar renglones existentes con la


instrucción UPDATE

UPDATE table
SET column = value [, column = value]
[WHERE condition];

– Actualizar más de un renglón a la vez, si


se requiere.

Insertando datos 9-
9-10 SQL Server

Cambiando datos en una tabla


Puede modificar renglones existentes utilizando la instrucción UPDATE.

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.

Confirme la operación de actualización ejecutando un query a la tabla para


mostrar los registros actualizados.

Introducción a SQL-Server 9-10


Actualizando renglones en una tabla

– Cuando especifica una cláusula WHERE uno


o más renglones son modificados.

UPDATE emp
SET deptno = 20
WHERE ename = 'CLARK';
(1 row(s) affected)

– Todos los renglones son modificados si


omite la cláusula WHERE.
UPDATE emp
SET deptno = 20;
(14 row(s) affected).

Insertando datos 9-
9-11 SQL Server

Actualizando renglones (continuación)


La instrucción se utiliza para UPDATE modificar renglones específicos, si se
especifica una cláusula WHERE. El ejemplo transfiere al empleado Clark al
departamento 20.
Si omite la cláusula WHERE, todos los renglones en la tabla serán
modificados.

Introducción a SQL-Server 9-11


Actualizando renglones
basados en otro tabla
Utilice un subquery en la instrucción UPDATE
para actualizar renglones en una tabla basado
en los valores de otra tabla.

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

Actualizando renglones basados en otro tabla


Puede utilizar subqueries en una instrucción UPDATE para actualizar
renglones en una tabla. El ejemplo actualiza la tabla EMP basada en los
valores de la tabla EMP. Cambia el número de departamento de todos los
empleados cuyo puesto sea el mismo que el del empleado Jones al valor del
departamento del empleado Clark.

Introducción a SQL-Server 9-12


Actualizando renglones:
Errores de integridad

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.

Introducción a SQL-Server 9-13


Eliminando renglones de una tabla
DEPT
DEPTNO DNAME LOC
------ ---------- --------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS “…borrar un renglón
30 SALES CHICAGO
40 OPERATIONS BOSTON de la tabla DEPT…”
50 DEVELOPMENT DETROIT
60 MIS DEPT
...
DEPTNO DNAME LOC
------ ---------- --------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
60 MIS
...

Insertando datos 9-
9-14 SQL Server

Introducción a SQL-Server 9-14


La instrucción DELETE

Puede eliminar renglones de una tabla


utilizando la instrucción DELETE.

DELETE [FROM] table


[WHERE condition];

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.

Introducción a SQL-Server 9-15


Borrando registros de una tabla

– Cuando especifica una cláusula WHERE uno o


más renglones son borrados.

DELETE FROM dept


WHERE dname = 'DEVELOPMENT';

– Todos los renglones son borrados si omite la


cláusula WHERE.

DELETE FROM dept;

Insertando datos 9-
9-16 SQL Server

Eliminando renglones (continuación)


Puede borrar renglones específicos utilizando la cláusula WHERE en la
instrucción DELETE. El ejemplo borrar el departamento DEVELOPMENT
de la tabla departament.

Introducción a SQL-Server 9-16


Eliminando renglones
basados en otras tablas
Utilice un subquery en la instrucción DELETE para
eliminar renglones de una tabla basado en los valores
de otra tabla.

DELETE FROM emp


WHERE deptno = (SELECT deptno
FROM dept
WHERE dname ='SALES');

Insertando datos 9-
9-17 SQL Server

Eliminando renglones basados en otras tablas


Puede utilizar subqueries para borrar renglones de una tabla basado en los
valores de otra tabla. El ejemplo borra todos los empleados que están en el
departamento 30. El subquery busca en la tabla DEPT para encontrar el
número de departamento que pertenece a SALES. El subquery retorna este
número de departamento al query principal, el cual borrar un registro de la
tabla EMP basado en este número de departamento.

Introducción a SQL-Server 9-17


Eliminando renglones:
Errores de integridad
No puede borrar un renglón que contenga una
llave primaria que esté siendo utilizada por una
llave foránea en otra tabla.

DELETE FROM dept


WHERE deptno = 10;

Servidor: mensaje 547, nivel 16, estado 1, línea 1


Instrucción DELETE en conflicto con la restricción COLUMN
REFERENCE 'EMP_DEPTNO_FK'. El conflicto ha aparecido en la
base de datos 'cursosql', tabla 'EMP', column 'DEPTNO'.
Se terminó la instrucción.

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.

Introducción a SQL-Server 9-18


Transacciones

Transacciones 10-
10-1 SQL Server

Introducción a SQL-Server 10-1


Objetivos
Al completar esta lección, deberá ser capaz de
hacer lo siguiente :
– Definir una transacción
– Describir el comando COMMIT
– Describir el comando ROLLBACK

Transacciones 10-
10-2 SQL Server

Introducción a SQL-Server 10-2


Transacciones
Defina una transacción utilizando BEGIN y END
TRAN[SACTION ] seguida por una o más instrucciones de
Transact-
Transact-SQL.

BEGIN TRAN[SACTION] transacction_name

INSERT INTO ...


UPDATE ...
DELETE ...

-- complete transacction
COMMIT TRAN[SACTION] transacction_name

-- undo transacction
ROLLBACK

END TRAN[SACTION] transacction_name

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.

Introducción a SQL-Server 10-3


Instrucciones
COMMIT y ROLLBACK
– Para hacer los cambios
permanentes en la base de
datos utilice COMMIT.
– Para deshacer los cambios
hechos a la base de datos
utilice ROLLBACK.

Transacciones 10-
10-4 SQL Server

Instrucciones COMMIT y ROLLBACK


• Aseguran la consistencia de los datos.
• Previene cambios en los datos antes de que estos sean permanentes.
• Agrupa a las operaciones en unidades de operación.
• Si ocurre un incidente como la interrupción inesperada del suministro
eléctrico, el estado de la transacción no es completado, en el próximo incio de
sesión se aplicará un ROLLBACK implícito.

Introducción a SQL-Server 10-4


Instrucción COMMIT
• Hacer Commit a los cambios.

BEGIN TRAN x
UPDATE emp
SET deptno = 40
WHERE empno = 7782;
COMMIT TRAN x;
(1 row(s) affected)

SELECT empno, ename, deptno


FROM emp
WHERE empno = 7782;

empno ename deptno


------ ---------- ------
7782 CLARK 40

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.

Introducción a SQL-Server 10-5


Instrucción ROLLBACK

ROLLBACK permite deshacer completamente


las operaciones afectadas desde el inicio de la
transacción.

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.

Introducción a SQL-Server 10-6


Instrucción ROLLBACK

BEGIN TRAN x
UPDATE emp
SET deptno = 30
WHERE empno = 7782;
(1 row(s) affected)

Verificar los cambios.


SELECT empno, ename, deptno
FROM emp
WHERE empno = 7782;

empno ename deptno


------ ---------- ------
7782 CLARK 30

Transacciones 10-
10-7 SQL Server

Instrucción ROLLBACK (continuación)


En el ejemplo, se realiza la siguiente transacción:
• Actualiza al empleado número 7782 en la columna DEPTNO, con el valor
de 30.
• Se ejecuta un query en la tabla EMP, para verificar si el cambio fue
realizado.
En este momento los cambios se encuentran en el archivo de transacciones, aún
no en la base datos.

Introducción a SQL-Server 10-7


Instrucción ROLLBACK
....
ROLLBACK;

The command(s) completed successfully.

Verificar los cambios.


SELECT empno, ename, deptno
FROM emp
WHERE empno = 7782;

empno ename deptno


------ ---------- ------
7782 CLARK 40

Transacciones 10-
10-8 SQL Server

Instrucción ROLLBACK (continuación)


Al efectuar la instrucción ROLLBACK los cambio que habían sido realizados,
son desechos y el estado de la base datos quedan como al inicio de la
transacción.

Introducción a SQL-Server 10-8


¿Cómo funciona una transacción?
1
BEGIN TRAN...
UPDATE
3
Buffer Cache COMMIT TRAN...

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

¿Cómo funciona una transacción?


El proceso de transacciones garantiza la consistencia y recuperación de los datos.
SQL Server utiliza el siguiente proceso automático de recuperación para
asegurar que todas las transacciones que fueron exitosas sean reflejadas en la
base de datos.
1. La instrucción BEGIN TRANSACTION es registrada en una archivo Log
cuando se ejecuta la primer operación (por ejemplo, Update).
2. Cuando una modificación es aplicada, SQL Server carga las páginas de
datos afectadas del disco al buffer cache. SQL Server realiza
modificaciones en el cache y los escribe en el archivo de transacciones
Log:
El registro de transacciones graba los datos modificados (por las
instrucciones INSERT, UPDATE o DELETE), conforme son
ejecutadas.
3. La instrucción COMMIT TRANSACTION graba los datos de las
transacciones a la base de datos cuando la transacción es completada. Una
transacción se considera exitosa si una entrada BEGIN TRANSACTION
está asociada a un COMMIT TRANSACTION.
Todas las transacciones que terminan con COMMIT son reflejadas en la base de
datos; todas las demás son eliminadas (Rolled Back).

Introducción a SQL-Server 10-9

También podría gustarte