Você está na página 1de 137

Manual para usar SQL Server

Unidad I
Entorno grafico SSMS
Introduccin
SQL Server 2005 es un sistema gestor de bases de datos relacionales de
Microsoft Corporation orientado a sistemas medianos y grandes aunque
tambin puede rodar en ordenadores personales. SQL Server Management
Studio (SSMS) es la herramienta de SQL Server que permite definir y gestionar
todas las bases de datos almacenadas en el servidor SQL Server 2005.
En este tema veremos cmo utilizar el SQL Server Management Studio
para manejar las bases de datos del servidor y organizaremos el texto
en los siguientes puntos:

Instalar SQL Server 2005.

Entrada al SQL Server Management Studio

Las bases de datos: Estructura interna, crear, adjuntar, conectar y


desconectar.

Las tablas: crear tablas, definirlas, modificar su contenido, etc.

Relacionar tablas

Las Consultas

Las Vistas

Si no sabes lo que es una base de datos relacional o no tienes conocimientos


previos acerca de las bases de datos, puedes leer una introduccin a las bases
de datos en el siguiente bsico.

1.2. Instalar SQL Server 2005


Existen diferentes versiones (ediciones) del producto, por lo que es un producto
muy verstil, que puede cumplir con las exigencias de cualquier empresa,
puede ser utilizado para gestionar bases de datos en un PC en modo local a
gestionar todo el sistema de informacin de grandes empresas pasando por
sistemas que requieran menos potencia y por sistemas mviles.
Actualmente se utiliza ms en entornos Cliente/servidor con equipos medianos
y grandes.
Para realizar este curso te recomendamos instalar la versin gratuita: Express.
Puedes descargarla desde la pgina web de Microsoft, desde el enlace
para iniciar descarga. Si quieres ver las diferentes ediciones y sus
caractersticas principales visita el siguiente avanzado.

Si la instalacin se realiza a partir del archivo descargado de Internet, la


descarga se empaqueta como un nico ejecutable mediante una tecnologa de
instalacin de Microsoft llamada SFXCab. Al hacer doble clic en el .exe se inicia
automticamente el proceso de instalacin.
Tan slo deberemos seguir el asistente. Los puntos ms importantes a tener en
cuenta son:

Habilitar el SQL Server Management Studio en la instalacin (si no lo


est por defecto) cuando nos pregunte qu componentes deseamos
instalar.

Indicar que se trata de una Instancia predeterminada.

Lo ideal es que en este punto instales el programa, para ir probando lo que


vayas aprendiendo de aqu en adelante. Puedes realizar el siguiente Ejercicio
Instalacin de SQL Server 2005. El videotutorial prctico de instalacin tambin
te ayudar.

1.3. Entrada al SQL Server Management Studio


Aunque trabajemos en modo local, la entrada a la herramienta es la misma.
Para empezar entramos a travs del acceso directo
o a travs de Inicio,
Programas, Microsoft SQL Server 2005, SQL Server Management Studio.
Lo primero que deberemos hacer es establecer la conexin con el servidor:

Seleccionamos el nombre del servidor y pulsamos el botn Conectar. Se abrir


la ventana inicial del SQL Server Management Studio (en adelante SSMS):

En la parte izquierda tenemos abierto el panel Explorador de Objetos en el


que aparece debajo del nombre del servidor con el que estamos conectados
una serie de carpetas y objetos que forman parte del servidor.
En el panel de la derecha se muestra la zona de trabajo, que vara segn lo que
tengamos seleccionado en el Explorador de objetos, en este caso vemos el
contenido de la carpeta que representa el servidor ord01.

En la parte superior tenemos el


herramientas Estndar.

men

de

opciones y la barra de

Con las siguientes opciones:


1. Nueva consulta

6. Consulta
Server Mobile

2. Consulta de motor de
Base de datos

7. Abrir archivo

3. Consulta MDX de Analysis


8. Guardar
Services

de

SQL

11. Resumen
12. Explorador de
Objetos
13. Explorador de
Plantillas

4. Consulta DMX de Analysis


9. Guardar todo
Services
5. Consulta MXLA de
Analysis Services

14. Ventana de
Propiedades

10. Servidores
registrados

En caso de que utilices la versin Express, es posible que no dispongas de


algunos de stos botones.

1.4. Estructura interna de una base de datos


Antes de empezar tenemos que tener claro cmo se organiza la informacin en
una base de datos SQL Server 2005.
Las bases de datos de SQL Server 2005 utilizan tres tipos de archivos:

Archivos de datos principales


En una base de datos SQLServer los datos se pueden repartir en varios
archivos para mejorar el rendimiento de la base de datos.
El archivo de datos principal es el punto de partida de la base de datos y
apunta a los otros archivos de datos de la base de datos. Cada base de
datos tiene obligatoriamente un archivo de datos principal. La extensin
recomendada para los nombres de archivos de datos principales
es .mdf.

Archivos de datos secundarios


Los archivos de datos secundarios son todos los archivos de datos
menos el archivo de datos principal. Puede que algunas bases de datos
no tengan archivos de datos secundarios, mientras que otras pueden
tener varios archivos de datos secundarios. La extensin de nombre de
archivo recomendada para los archivos de datos secundarios es .ndf.
Adems los archivos de datos se pueden agrupar en grupos de archivos.
Para cada base de datos pueden especificarse hasta 32.767 archivos y
32.767 grupos de archivos.

Archivos de registro
Los archivos de registro (archivos de log) almacenan toda la informacin
de registro que se utiliza para recuperar la base de datos, el tambin
denominado registro de transacciones. Como mnimo, tiene que haber
un archivo de registro por cada base de datos, aunque puede haber
varios. La extensin recomendada para los nombres de archivos de
registro es .ldf.

SQL Server 2005 no exige las extensiones de nombre de archivo .mdf, .ndf y
.ldf, pero estas extensiones ayudan a identificar las distintas clases de archivos
y su uso.

Cada base de datos tiene al menos 2 archivos (un archivo de datos


principal y un archivo de registro) y opcionalmente un grupo de
archivos.
Los archivos de datos y de registro de SQL Server se pueden colocar en
sistemas de archivos FAT o NTFS. Se recomienda utilizar NTFS por los aspectos
de seguridad que ofrece. No se pueden colocar grupos de archivos de datos de
lectura y escritura, y archivos de registro, en un sistema de archivos NTFS
comprimido. Slo las bases de datos de slo lectura y los grupos de archivos
secundarios de slo lectura se pueden colocar en un sistema de archivos NTFS
comprimido.
1.5. Crear una base de datos en SSMS
En el Explorador de objetos, si desplegamos la carpeta Bases de datos nos
aparecen Bases de datos del sistema y las bases de datos de usuario
despus de la carpeta Instantneas...

Despus de la instalacin, en la carpeta Bases de datos del sistema se habr


creado una especial denominada master se utiliza como base de datos de
usuario por defecto.
Las dems bases de datos forman tambin parte del diccionario de datos y las
utiliza el sistema para llevar a cabo su gestin.

Las bases de datos de los usuarios se deben crear preferentemente fuera de la


carpeta Bases de datos del sistema.

El entorno grfico SSMS (III)


Para crear una nueva base de datos de usuario nos posicionamos
sobre la carpeta Bases de datos y con el botn derecho del ratn
desplegamos el men contextual del que elegimos la opcinNueva
base de datos

Se abre a continuacin el cuadro de dilogo donde definiremos la


base de datos que queremos crear:

Lo mnimo a introducir ser el campo Nombre de la base de datos,


ste es el nombre de la base de datos lgica, la base de datos a la
que nos referiremos dentro del SSMS, a nivel conceptual (en la
imagen Mibase).
Esta base de datos est asociada a dos archivos fsicos, en la parte
inferior aparecen esos archivos. Para facilitarnos la tarea, al teclear
el nombre de la bd lgica, se rellenan automticamente los nombres
de los archivos fsicos, el de datos con el mismo nombre y el del
archivo de registro con el mismo nombre seguido de _log. Estos
nombres son los nombres que se asumen por defecto pero los
podemos cambiar, posicionando el cursor en el nombre y
cambindolo.
Para cada archivo fsico podemos definir una serie de parmetros
como el tipo de archivo (si es de datos o de transacciones Registro) y
su ocupacin inicial (Tamao inicial).
Si no indicamos ninguna ubicacin podemos ver que los guarda en
la carpeta del SQL Server/MSSQL.n/MSSQL/DATA.
n representa un nmero que puede variar de una instalacin a otra.

Estos son los archivos mnimos en los que se almacenar la base


de datos, pero como ya vimos anteriormente se puede almacenar en
ms archivos, los tenemos que definir todos en esta ventana a
continuacin de los dos obligatorios.
Para aadir ms archivos fsicos disponemos del botn Agregar.
Al pulsar el botn Agregar se crea una nueva fila en la tabla de
archivos fsicos donde deberemos escribir el nombre del archivo, su
tipo (desplegando la lista podemos elegir entre de datos o de
registro) y dems parmetros.

Al agregar un nuevo archivo se activa el botn Quitar, siempre que estemos


posicionados encima de un archivo secundario para poder as eliminarlo si lo
queremos.
No podemos eliminar ni el de datos primario, ni el de registro inicial.
Pg. 1.3

Unidad 1. Bsico: Introduccin a las bases de datos (I)


Objetivos de un SGBD
Un sistema gestor de bases de datos por definicin debe cumplir los siguientes
objetivos:
Independencia de los datos.
Recordando uno de los problemas que plantean los ficheros convencionales. La
independencia de los datos consiste en hacer que los programas no sean tan
dependientes de la estructura de los datos.
Se han definido dos tipos de independencia:
1. La independencia fsica: consiste en poder modificar la definicin
interna de los datos (el esquema interno) sin que ello suponga una
modificacin de los programas existentes.
Por ejemplo, se puede cambiar la ubicacin de la base de datos, o se
puede aadir un ndice sobre una tabla para que las consultas se
ejecuten ms rpidamente, sin que eso suponga una variacin en los
esquemas externos y conceptual, por lo que los programas (que utilizan
el esquema externo) no se vern afectados.
2. La independencia lgica: consiste en poder cambiar el esquema
conceptual sin que ello suponga una modificacin de los programas
existentes.
Por ejemplo podemos aadir un nuevo dato en la tabla de clientes como la
direccin de email sin que los esquemas externos se vean afectados.
Seguridad e integridad.
La seguridad consiste en que los usuarios no puedan acceder a datos sin
autorizacin.
Si juntamos toda la informacin de la empresa en un mismo sitio, el SGBD debe
tener mecanismos para que cualquier usuario pueda tener acceso a
nicamente la informacin que necesita para las tareas que tiene
encomendadas.
Esta seguridad se consigue por medio de los esquemas externos, ya que el
usuario slo tiene acceso a su esquema externo que le proporciona los datos
que el administrador ha considerado incluir en ese esquema. Para el usuario no
habr ms datos que estos.
Adems los SGBD tienen mecanismos para definir autorizaciones que pueden
ser de distinto tipo: autorizacin de lectura, de insercin, de actualizacin,
autorizaciones especiales para poder variar el esquema conceptual etc.
La integridad se refiere a que la informacin almacenada en la base de datos
est libre de errores. Esto no siempre es posible ya que existen distintos tipos
de errores que tienen diferentes soluciones:

* Fallos de hardware. Estos errores no los puede evitar el SGBD pero se pueden
subsanar facilitando copias de seguridad y procesos de recuperacin.
* Fallos del programador. Puede que aparezcan datos errneos en la base de
datos como consecuencia de errores en el programa que genera estos datos.
Para evitar al mximo este tipo de errores el sistema debe ser fcil de
programar, cuantos ms controles realice el sistema de forma automtica,
menos controles habr que incluir a nivel de programacin por lo que
limitaremos la probabilidad de fallo y los programas deben ser probados con
juegos de ensayos bien definidos.
* Fallos del usuario final. El usuario que introduce datos en la base de datos
tambin puede cometer errores, el sistema debe permitir controlar al mximo
la informacin que se introduce para limitar el nmero de estos errores, para
ello los SGBD incluyen clusulas de validacin de los datos, validaciones de
diferentes tipos que veremos con ms detalle ms adelante.
* Fallos derivados de la concurrencia. Ya que toda la informacin est
centralizada y los distintos usuarios acceden a ella de forma simultnea,
pueden ocurrir problemas cuando dos usuarios quieren acceder al mismo dato
a la vez. Por ello el SGBD debe tener establecidos mecanismos para evitar este
tipo de problema, bloquear registros, abortar automticamente transacciones
etc.
Redundancia mnima
La redundancia consiste en que exista algn dato repetido en varios lugares.
Por ejemplo si tenemos la direccin del cliente en la factura, en la cuenta
contable, en los datos generales del cliente; esto como ya vimos anteriormente
nos producir varios problemas:

la informacin repetida ocupa espacio innecesario.

la variacin de un domicilio supone el variar ese domicilio en todos los


lugares donde est almacenado.
o

mayor tiempo de proceso

posibilidad de inconsistencia

Por todo ello hay que evitar al mximo esa redundancia, esto se consigue
utilizando herramientas de diseo y obteniendo un diseo ptimo de la base de
datos.
Facilidad de recuperacin de la informacin
Otro objetivo muy importante de un SGBD es el proporcionar al usuario (o
programador) unas herramientas potentes de manejo de datos para que pueda
de manera sencilla y rpida, obtener toda la informacin que desea sin que,
por ello se tenga que hacer un programa complejo.
Veremos que el SQL, lenguaje empleado para recuperar informacin de la base

de datos, es un lenguaje muy potente y cercano al lenguaje hablado, y adems


los SGBD incluyen entornos grficos sencillos de utilizar.
Introduccin a las bases de datos (II)
El administrador de la base de datos
El administrador es el encargado de gestionar y controlar todo el sistema con
la ayuda que le proporciona el SGBD. Tiene una gran responsabilidad ya que de
l depende que el sistema funcione correctamente y como tiene el mximo
nivel de privilegios, sus errores pueden ser desastrosos.
Entre sus responsabilidades se incluye:

Instalar el SGBD en el sistema informtico (a veces).

Realizar el diseo de la base de datos.

Crear las bases de datos que se vayan a gestionar.

Crear y mantener los esquemas de las bases de datos.

Crear y mantener las cuentas de los usuarios de las bases de datos.

Colaborar con el administrador del sistema en las tareas de ubicacin,


dimensionado y control de los archivos y espacios de disco ocupados por
el SGBD.

Establecer estndares de uso, polticas de acceso y protocolos de trabajo


diario para los usuarios de las bases de datos.

Efectuar tareas de explotacin como:


o

Vigilar el trabajo diario colaborando en la resolucin de las dudas


de los usuarios.

Controlar los tiempos de acceso, tasas de uso, cargas en los


servidores, anomalas, etc.

Llegado el caso, reorganizar las bases de datos.

Disear y efectuar el planning de copias de seguridad peridicas.

Restaurar la base de datos despus de un incidente.

Estudiar las auditoras mediante el ajuste de parmetros y con


ayuda de las herramientas de monitorizacin del sistema y de las
estadsticas.

El diccionario de datos
Dentro del SGBD, hay una parte que son datos sobre los datos, es una base de
datos en la que se almacena toda la informacin necesaria para que el sistema
funcione. Esta base de datos es el diccionario de datos y contiene:

La estructura lgica y fsica de la base de datos.

Las definiciones de todos los objetos de la base de datos: tablas, vistas,


ndices, disparadores (triggers) funciones, procedimientos almacenados,
etc.

El espacio asignado y utilizado por los objetos.

Los valores por defecto de las columnas de las tablas.

Los privilegios otorgados a los usuarios.

Informacin que permita obtener estadsticas y evaluaciones del


rendimiento del sistema.

Introduccin a las bases de datos (III)


Tipos de bases de datos
Podemos realizar distintas clasificaciones de las bases de datos:

Segn su ubicacin

Segn la organizacin lgica de la informacin.


Tipos de bases de datos segn su ubicacin

1. Bases de datos locales.


En modo local tenemos la base de datos y el usuario ubicados en el mismo ordenador. Un
ejemplo de base de datos que funciona en modo local es Microsoft Access, MS Access es una
base de datos fcil de manejar por usuarios poco expertos que funciona bien en modo local y
mientras no tenga que albergar grandes cantidades de informacin.
Ventajas
Economa
Es la ms barata.

Desventajas
Monousuario
En un instante determinado slo la puede
utilizar una persona.

Simplicidad
Capacidad
No se necesita llevar controles de accesos Suele
tener
una
capacidad
concurrentes, de transmisin de datos, etc.
almacenamiento limitado.
2. Bases de datos centralizadas
En los sistemas centralizados tenemos la base de datos completa en un mismo servidor, y
todos los usuarios acceden a ese servidor. Que la base de datos est en un mismo servidor
no implica que est en un solo archivo o en el mismo disco, puede estar repartida.

de

En modo Cliente/Servidor, la base de datos se encuentra en un ordenador (el Servidor) y


los usuarios acceden simultneamente a esa base de datos a travs de la red (sea una red
local o Internet) desde sus ordenadores a travs de un programa Cliente.
A nivel de empresas es el sistema que ms se utiliza en la actualidad.
Ventajas

Desventajas

Multiusuario
Complejidad
Permite que varios usuarios accedan a la vez Tiene que incluir y gestionar un sistema de
a la misma informacin.
usuario y subesquemas.
No
redundancia
Al estar todos los datos en el mismo servidor,
la informacin no se duplica y es ms facil
evitar fallos debidos a redundancias.

Seguridad
Se tienen que realizar controles para garantizar
la seguridad de los datos, tanto a nivel interno
como a nivel de comunicaciones.

3. Bases de datos distribuidas


Tenemos la informacin repartida en distintas localizaciones unidas todas ellas mediante
red y un sistema gestor de bases de datos distribuidas.
Las distintas localizaciones suelen ser distintas geogrficamente.

Ventajas

Desventajas

Rendimiento
Una clara ventaja es que es posible ubicar los
datos en lugares donde se necesitan con ms
frecuencia, aunque tambin se permita a
usuarios no locales acceder a los datos segn
sus necesidades. Esto hace que la informacin
se recupere de forma ms rpida y gil en las
ubicaciones locales. Adems los sistemas
trabajan en paralelo, lo cual permite balancear
la carga en los servidores.

Complejidad en el diseo de datos


Adems de las dificultades que generalmente
se encuentran al disear una base de datos, el
diseo de una base de datos distribuida debe
considerar la fragmentacin, replicacin y
ubicacin de los fragmentos en sitios
especficos, se tiene que trabajar tomando en
cuenta su naturaleza distribuida, por lo cual no
podemos pensar en hacer joins que afecten a
tablas de varios sistemas, etc.

Disponibilidad
En caso de que falle la base de datos de
alguna localidad, el sistema no se colapsa,
puede seguir funcionando excluyendo los datos
de la localidad que haya fallado.

Complejidad
tcnica
Se debe asegurar que la base de datos sea
transparente, se debe lidiar con varios sistemas
diferentes que pueden presentar dificultades
nicas.

Autonoma
local Economa
en
el
mantenimiento
Un departamento puede controlar los datos que La complejidad y la infraestructura necesaria
le pertenecen.
implica que se necesitar mayor mano de obra.
Economa
en
la
implantacin
Es ms barato crear una red de muchas
mquinas pequeas, que tener una sola
mquina muy poderosa.

Seguridad
Se debe trabajar en la seguridad de la
infraestructura as como cada uno de los
sistemas.

Integridad
Modularidad
Se vuelve difcil mantener la integridad, aplicar
Se pueden modificar, agregar o quitar sistemas
las reglas de integridad a travs de la red
de la base de datos distribuida sin afectar a los
puede ser muy caro en trminos de transmisin
dems sistemas (mdulos).
de datos.

Falta
de
experiencia
Las bases de datos distribuidas son un campo
relativamente nuevo y poco comn por lo cual
no existe mucho personal con experiencia o
conocimientos adecuados.
Carencia
de
estndares
An no existen herramientas o metodologas
que ayuden a los usuarios a convertir un DBMS
centralizado en un DBMS distribuido.

Introduccin a las bases de datos (IV)


Tipos de bases de datos segn la organizacin lgica de los datos
En un principio existan tres tipos de bases de datos segn su estructura
interna (la manera de organizar la informacin):
Bases de datos jerrquicas
Bases de datos en red
Bases de datos relacionales.
Ms recientes son las bases de datos orientadas a objetos y las bases de datos
multidimensionales.
1. Las bases de datos jerrquicas
En una base de datos jerrquica se organizan los datos utilizando estructuras
arborescentes (en rbol).
Un RBOL es una estructura jerrquica en la que los elementos se suelen
denominar NODOS y existen dependencias entre los nodos.
La dependencia es de 1:M del tipo padre/hijo. Un hijo no puede tener ms de
un padre, pero un padre varios hijos.

Un ejemplo de base de datos jerrquica es el sistema IMS.


2. Las bases de datos en red
Tambin en desuso, en una base de datos en red se utiliza la estructura de
grafo/red, como en el caso anterior los distintos objetos estn relacionados
entre s mediante relaciones del tipo 1:M pero en este caso un objeto puede
estar relacionado como hijo con varios elementos que sern sus padres. Un
este caso las relaciones que se crean se denominan SET y el equivalente al
padre se denomina PROPIETARIO (OWNER) y el equivalente al hijo se denomina
MIEMBRO (MEMBER).
Un ejemplo de sistema en red es el CODASYL. Tambin existen modelos para
realizar el diseo de datos orientado a bases de datos en red.
En red podramos representar lo mismo que la estructura anterior y adems lo
siguiente:

Los sistemas jerrquico y en red constituyen la primera generacin de los


SGBD. Pero estos sistemas presentan algunos inconvenientes:

Es necesario escribir complejos programas de aplicacin para responder


a cualquier tipo de consulta de datos, por simple que sta sea.

La independencia de datos es mnima.

No incluyen controles de integridad.

Por lo que pronto fueron sustituidos por los sistemas relacionales.


3. Las bases de datos relacionales
Esta es la estructura que se ha impuesto para aplicaciones de gestin, consiste
en organizar los datos en forma de tablas, las relaciones entre los objetos se
consiguen incluyendo en la tabla del hijo, la clave del objeto padre. Como son
las que utilizaremos durante todo el mdulo hemos reservado un apartado
especial para ellas.
4. Las bases de datos orientadas a objetos
Es un modelo ms reciente, trata de almacenar en la base de datos los objetos
completos (estado y comportamiento). La informacin que contienen se
organiza en atributos y el comportamiento enoperaciones.
5. Las bases de datos mutidimensionales
En una base de datos multidimensional los datos se almacenan en tablas de
mltiples dimensiones en vez de tablas bidimensionales como las del modelo
relacional. Se utilizan para grandes volmenes de informacin.

Introduccin a las bases de datos (V)


La base de datos relacional
Elementos de una base de datos relacional

Los datos se organizan en relaciones compuestas


por tuplas de atributos. Si convertimos esta definicin a tablas
tenemos que los datos se organizan en tablas compuestas
por filas(registros) y columnas (campos).

A cada tabla se le asigna un nombre nico.

Una tabla tiene 0 o ms filas, y cada fila contiene la informacin de un


determinado sujeto de la relacin.

Las filas en un principio estn desordenadas.

La lista de los atributos dispuestos en un orden especfico de izquierda a


derecha y que forman la definicin de una tabla se denomina esquema
de la tabla, mientras que los valores concretos de los datos que estn
almacenados en la tabla se llaman ocurrencias.

Por ejemplo, tenemos estas dos tablas:

El esquema de la tabla Piezas est compuesto por las columnas


(Codigo, Denominacin, Precio, Fabricante, Codigo_segn_fab).
Codigo es el cdigo de la pieza, Denominacion el nombre de la
pieza, Fabricante el cdigo del fabricante que nos suministra la pieza
y Cdigo_segn_fab el cdigo que utiliza ese fabricante para identificar la pieza
en su sistema de gestin.
Una ocurrencia de fila de la tabla Piezas sera:1, Taburete 3 patas, 25, Fab1,
T123-34.

Todos los valores de una columna determinada tienen el mismo tipo de


datos, y stos estn extrados de un conjunto de valores legales
llamado dominio de la columna. Muchas veces el dominio se
corresponder con un tipo de datos estndar del sistema.
Por ejemplo en la tabla Piezas la columna Codigo est definida sobre el
dominio de los enteros.

A parte de los valores del dominio, la columna puede contener un valor


especial, el valor nulo. El valor nulo (NULL) es importante porque
representa la ausencia de valor en el campo y no es lo mismo que el
valor cero 0 o la cadena vaca o espacios en blanco. De hecho es un
valor tan especial que no funciona como los dems valores, por ejemplo
no podemos comparar (con el operador de comparacin =) un campo
con el valor nulo, tenemos que utilizar un operador especial (IS NULL).
Incluso se han tenido que redefinir los operadores lgicos para tener en

cuenta el valor nulo.


Ej. En la tabla Fabricantes el campo direccin de la primera fila contiene
el valor nulo (null) esto significa que este fabricante no tiene direccin
(al menos conocida).

En una tabla cada columna tiene un nico nombre y ste no se puede


utilizar para nombrar otra columna de la misma tabla pero s de otra
tabla.
Por ejemplo en la tabla Piezas no se pueden definir dos columnas
llamadas Codigo, por eso el segundo cdigo lo hemos
llamado Codigo_segun_fab. Pero en la tabla Fabricantes la
columnaIdFab se poda haber llamado Codigo sin problema.

En una tabla no se admiten dos filas con los valores coincidentes en


todos sus campos. Esta restriccin no se suele cumplir.
Esta regla nos dice que por ejemplo en la tabla Fabricantes no pueden
haber dos filas con los valores Fab1, Muebles la Madera, null.
Realmente sera informacin redundante, por eso la existencia de esta
regla, no obstante en algunos casos muy concretos s es necesario poder
almacenar dos ocurrencias de fila idnticas, por esta razn muchos
SGBD no cumplen esta regla.

Toda tabla debe tener una clave principal (clave primaria).


Una clave primaria es cualquier una columna (o combinacin de
columnas) que permite identificar de forma unvoca cada una de las filas
de la tabla. Para que pueda cumplir su cometido, la clave primaria no
puede contener valores nulos ni valores duplicados (no podr
haber dos filas con el mismo valor en este campo). Hay SGBD que
incluyen el concepto de clave primaria pero no la hacen obligatoria, por
lo que en estos sistemas se pueden definir tablas sin clave primaria.

En una tabla pueden existir ms de una columna que permita identificar


las filas de la tabla, si queremos utilizar tales columnas como
identificadores las definiremos como
claves secundarias(alternativas). Una clave secundaria tiene las
mismas restricciones que una clave primaria, pero como no podemos
definir dos claves primarias, definimos la que se vaya a utilizar ms
frecuentemente como clave primaria y la otra (u otras) como
secundarias.
Por ejemplo en la tabla Piezas la clave primaria es el campo Codigo ya
que no hay ni puede haber dos piezas con el mismo cdigo. Este campo
realmente sirve para identificar las filas de la tabla, sabiendo un valor de
cdigo (por ejemplo el 2) sabremos que nos referimos a la fila de la
mesa ovalada.
En esta misma tabla tenemos una posible clave alternativa, la formada
por los campos Fabricante y Codigo_segun_fab ya que en la
tabla Piezas es imposible tener dos filas con la misma combinacin de

valores en estos campos (el cdigo_segun_fab es el cdigo que utiliza el


fabricante para identificar sus piezas).

Otro concepto muy importante, fundamental en las bases de datos


relacionales, es la clave ajena (externa o fornea).
Una clave ajena es un campo (o combinacin de campos) que contiene
la referencia a una fila de otra tabla, tambin puede referirse a la misma
tabla. En otras palabras, es un campo que seala a un registro de otra
tabla, contiene un valor que identifica un registro de la otra tabla. Son
los campos que se utilizan para relacionar las tablas entre s.
Una tabla puede tener 0, una o varias claves
ajenas (externas, forneas).

Una clave ajena puede contener valores duplicados y valores


nulos.
Siguiendo el ejemplo anterior, en la tabla Piezas tenemos la clave
ajena Fabricante ya que en este campo nos guardamos un valor que
seala a una fila de la tabla Fabricantes, en este campo tenemos el
cdigo del fabricante que nos suministra la pieza y este cdigo nos lleva
al fabricante correspondiente en la tabla Fabricantes.
Por ejemplo la pieza 3 es servida por el fabricante Fab2, valor que seala
al fabricante Maderas Asociados.

El SGBD deber velar por la integridad de los datos, para ello incluye
varias reglas de integridad que se comprobarn de forma automtica sin
necesidad de la intervencin externa de los usuarios o de los programas
de aplicacin.
Existen distintos tipos de reglas de integridad:

La integridad de entidades (integridad de claves): Toda


tabla debe tener una clave primaria que permite identificar
unvocamente los registros que contiene, por lo tanto no puede
contener el valor nulo ni valores duplicados.
En el ejemplo anterior si intentamos insertar una nueva pieza con
el cdigo 2, el sistema no nos dejar porque ya hay una pieza con
este mismo cdigo en la tabla.

La integridad referencial: En una clave ajena no puede haber


un valor no nulo que no exista en la tabla de referencia. Para que
no existan errores de integridad referencial en la base de datos, el
sistema comprueba automticamente que los valores introducidos
en las claves ajenas existan en el campo de referencia en la otra
tabla, si no existe, no nos dejar insertar el registro.
Volviendo al ejemplo anterior, si intentamos insertar una pieza con
un cdigo de fabricante que no existe en la tabla de fabricantes, el
sistema no nos dejar.

A nivel de control sobre los datos, el SGBD debe de proporcionar


herramientas para poder definir restricciones de dominio que se

comprobarn de forma automtica (se comprueba que el valor


introducido en una columna pertenece al dominio de la columna, al tipo
de datos), y reglas de negocio, que son reglas especficas sobre los
datos, en este tipo de reglas entran las reglas de validacin y reglas
definidas a nivel superior que veremos ms adelante.
Una regla de validacin sera por ejemplo que el precio no pueda ser
inferior a 10 euros, y una regla de negocio, que no pueda haber ms de
20 fabricantes.

Un SGBD relacional sigue la arquitectura de tres niveles en la que


tenemos en el nivel externo las vistas, en nivel conceptual el esquema
conceptual con la definicin de todas las tablas, columnas que las
componen y relaciones entre ellas, en el nivel interno tenemos la
definicin fsica de la base de datos.

Finalmente tenemos para poder manejar la informacin almacenada en


la base de datos un lenguaje que cumple las reglas de Codd, el lenguaje
SQL que veremos en prximos temas.

Ediciones de SQL Server 2005


Las ediciones disponibles SQL Server 2005 son las siguientes:
SQL Server 2005 Express Edition.

Gratuita.

Con lmite de memoria (lo que limitar tambin en nmero de usuarios)


y tamao de las BD.

SQL Server 2005 Workgroup Edition.

Para pequeas empresas.

Sin lmite de usuarios y tamao de las BD.

No incluye caractersticas avanzadas.

SQL Server 2005 Standard Edition.

Para empresas medianas.

Sin lmite de usuarios y tamao de las BD.

Incluye herramientas avanzadas de administracin y anlisis de datos.

SQL Server 2005 Enterprise Edition.

Es el nivel ms alto, para grandes empresas.

Aade al nivel anterior:


o

Mayor potencia.

Servicios especficos para grandes empresas.

Puede aprovechar configuraciones multiprocesador, grandes


cantidades de RAM, almacenes de datos del orden de TeraBytes
(1000 GB).

SQL Server 2005 Developer Edition.

Para entornos de desarrollo.

Mismas posibilidades que la Enterprise.

Licencia que limita su uso en entornos de explotacin.

SQL Server 2005 Mobile Edition.

Para dispositivos pequeos.

Base de datos compacta

Diseada para admitir una lista amplia de dispositivos inteligentes y


Tablet PC.

SQL Server 2005 Compact Edition.

Gratuita.

Formato compacto.

Para aplicaciones de mviles y escritorio.

1.4. Estructura interna de una base de datos


Antes de empezar tenemos que tener claro cmo se organiza la informacin en
una base de datos SQL Server 2005.
Las bases de datos de SQL Server 2005 utilizan tres tipos de archivos:

Archivos de datos principales


En una base de datos SQLServer los datos se pueden repartir en varios
archivos para mejorar el rendimiento de la base de datos.
El archivo de datos principal es el punto de partida de la base de datos y
apunta a los otros archivos de datos de la base de datos. Cada base de
datos tiene obligatoriamente un archivo de datos principal. La extensin
recomendada para los nombres de archivos de datos principales
es .mdf.

Archivos de datos secundarios


Los archivos de datos secundarios son todos los archivos de datos
menos el archivo de datos principal. Puede que algunas bases de datos
no tengan archivos de datos secundarios, mientras que otras pueden
tener varios archivos de datos secundarios. La extensin de nombre de
archivo recomendada para los archivos de datos secundarios es .ndf.
Adems los archivos de datos se pueden agrupar en grupos de archivos.
Para cada base de datos pueden especificarse hasta 32.767 archivos y
32.767 grupos de archivos.

Archivos de registro
Los archivos de registro (archivos de log) almacenan toda la informacin
de registro que se utiliza para recuperar la base de datos, el tambin
denominado registro de transacciones. Como mnimo, tiene que haber
un archivo de registro por cada base de datos, aunque puede haber
varios. La extensin recomendada para los nombres de archivos de
registro es .ldf.

SQL Server 2005 no exige las extensiones de nombre de archivo .mdf, .ndf y
.ldf, pero estas extensiones ayudan a identificar las distintas clases de archivos
y su uso.
Cada base de datos tiene al menos 2 archivos (un archivo de datos principal y
un archivo de registro) y opcionalmente un grupo de archivos.
Los archivos de datos y de registro de SQL Server se pueden colocar en
sistemas de archivos FAT o NTFS. Se recomienda utilizar NTFS por los aspectos
de seguridad que ofrece. No se pueden colocar grupos de archivos de datos de
lectura y escritura, y archivos de registro, en un sistema de archivos NTFS
comprimido. Slo las bases de datos de slo lectura y los grupos de archivos
secundarios de slo lectura se pueden colocar en un sistema de archivos NTFS
comprimido.
1.5. Crear una base de datos en SSMS

En el Explorador de objetos, si desplegamos la carpeta Bases de datos nos


aparecen Bases de datos del sistema y las bases de datos de usuario
despus de la carpeta Instantneas...

Despus de la instalacin, en la carpeta Bases de datos del sistema se habr


creado una especial denominada master se utiliza como base de datos de
usuario por defecto.
Las dems bases de datos forman tambin parte del diccionario de datos y las
utiliza el sistema para llevar a cabo su gestin.

Las bases de datos de los usuarios se deben crear preferentemente fuera de la


carpeta Bases de datos del sistema.

El entorno grfico SSMS (III)


Para crear una nueva base de datos de usuario nos posicionamos sobre la
carpeta Bases de datos y con el botn derecho del ratn desplegamos el
men contextual del que elegimos la opcinNueva base de datos

Se abre a continuacin el cuadro de dilogo donde definiremos la base de


datos que queremos crear:

Lo mnimo a introducir ser el campo Nombre de la base de datos, ste es el


nombre de la base de datos lgica, la base de datos a la que nos referiremos
dentro del SSMS, a nivel conceptual (en la imagen Mibase).
Esta base de datos est asociada a dos archivos fsicos, en la parte inferior
aparecen esos archivos. Para facilitarnos la tarea, al teclear el nombre de la bd
lgica, se rellenan automticamente los nombres de los archivos fsicos, el de
datos con el mismo nombre y el del archivo de registro con el mismo nombre
seguido de _log. Estos nombres son los nombres que se asumen por defecto
pero los podemos cambiar, posicionando el cursor en el nombre y cambindolo.

Para cada archivo fsico podemos definir una serie de parmetros como el tipo
de archivo (si es de datos o de transacciones Registro) y su ocupacin inicial
(Tamao inicial).
Si no indicamos ninguna ubicacin podemos ver que los guarda en la carpeta
del SQL Server/MSSQL.n/MSSQL/DATA.
n representa un nmero que puede variar de una instalacin a otra.

Estos son los archivos mnimos en los que se almacenar la base de datos,
pero como ya vimos anteriormente se puede almacenar en ms archivos, los
tenemos que definir todos en esta ventana a continuacin de los dos
obligatorios.
Para aadir ms archivos fsicos disponemos del botn Agregar.
Al pulsar el botn Agregar se crea una nueva fila en la tabla de archivos fsicos
donde deberemos escribir el nombre del archivo, su tipo (desplegando la lista
podemos elegir entre de datos o de registro) y dems parmetros.

Al agregar un nuevo archivo se activa el botn Quitar, siempre que estemos


posicionados encima de un archivo secundario para poder as eliminarlo si lo
queremos.
No podemos eliminar ni el de datos primario, ni el de registro inicial.

El entorno grfico SSMS (IV)


Si nos fijamos en la zona de la izquierda, vemos que nos encontramos en la
pestaa General, podemos cambiar otros parmetros de la base de datos
pulsando en Grupos de archivos o enOpciones:

Al final pulsamos en Aceptar y se crear la base de datos.

Aparecer dentro de la carpeta Bases de datos. Si no se ve pulsa en el icono


Actualizar

Desde el Explorador de Windows podemos ver que en la carpeta indicada se


han creado los archivos fsicos con los nombres que le hemos indicado.

El entorno grfico SSMS (V)


1.6. Adjuntar una base de datos
En ocasiones no necesitaremos crear la base de datos desde cero, porque sta
ya estar creada. ste es el caso de los ejercicios del curso. Para realizarlos,
debers adjuntar una base de datos ya existente a tu servidor. Para ello,
lo que tenemos que hacer es pegar los archivos en la ubicacin que queramos,
y luego indicar al SQL Server que vamos a utilizar esta base de datos, de la
siguiente manera:
En el Explorador de objetos, sobre la carpeta Bases de datos desplegar el
men contextual y elegir Adjuntar...

En la siguiente ventana elegimos la base de datos:

Pulsando en Agregar indicamos el archivo de datos primario en su ubicacin y


automticamente se adjuntar la base de datos lgica asociada a este archivo.

Finalmente pulsamos en Aceptar y aparece la base de datos en nuestro


servidor.

La opcin Adjuntar slo se utiliza la primera vez, cuando todava no tenemos


la base de datos en el disco.
Realiza el siguiente Ejercicio Adjuntar base de datos. En l adjuntars las
bases de datos que vas a utilizar en los ejercicios que se plantearn ms
adelante.
1.7. Conectar y Desconectar la base de datos
Una vez hemos creado la base de datos o la hemos adjuntado a nuestro
servidor, nos daremos cuenta de que no podremos manipular los archivos de la
base desde fuera del gestor SSMS, por ejemplo, desde el Explorador de
Windows. Es decir, no podremos copiar, cortar, mover o eliminar los archivos
fuente mdf, ndf y ldf. Si lo intentamos se mostrar un aviso de que la base de
datos est en uso.
sto es as porque SQL Server sigue en marcha, a pesar de que se cierre el
gestor. Ten en cuenta que el servidor de base de datos normalmente se crea
para que sirva informacin a diferentes programas, por eso sera absurdo que
dejara de funcionar cuando cerramos el programa gestor, que slo se utiliza
para realizar modificaciones sobre la base.
Para poder realizar acciones sobre la base de datos, sta debe
estar desconectada. Para ello, desde el SSMS, desplegamos el men
contextual de la base de datos que nos interese manipular y seleccionaremos
la opcin Poner fuera de conexin:

Aparecer un smbolo a la izquierda de la base de datos


indicndonos que la
base de datos est desconectada, a partir de este momento Windows nos
dejar manipular los archivos.

Para volver a conectar la base de datos y seguir trabajando con ella,


accederemos al mismo men contextual pero elegiremos la opcin Poner en
conexin:

El caso ms inmediato en el que puedes necesitar conectar y desconectar la


base de datos es copiar a un pendrive los archivos de las bases que utilizars
en los ejercicios para poder trabajar en diferentes ordenadores con ellos. Para
aprender cmo hacerlo, visita el siguiente Ejercicio Trasladar una base de datos
a otro equipo.
En caso de que tu versin de SQL Server no tenga las opciones Poner en
conexin y Poner fuera de conexin, debers utilizar la opcin Separar... y
luego volver a adjuntarla.

El entorno grfico SSMS (VI)


1.8. Crear una nueva tabla

Para crear una nueva tabla primero nos tenemos que posicionar en la base de
datos donde queremos que se almacene la tabla, desplegar el men contextual
y seleccionar la opcin Nueva tabla.

En la ventana que se abre debemos definir las columnas de la tabla:

A cada columna se le asigna un nombre, un tipo de datos, y opcionalmente una


serie de propiedades, en este tema veremos las bsicas y las dems las
veremos con ms detalle cuando veamos la instruccin SQL CREATE TABLE.
De momento no tenemos definida ninguna columna, al teclear un nombre se
crea una primera entrada en esta tabla con la definicin de la primera
columna. En la columna Tipo de datos elegimos qu tipo de valores se podrn
almacenar en la columna.
1.9. Tipos de datos

Podemos elegir entre todos los tipos que aparecen arriba.


Algunos tipos no necesitan ms, como por ejemplo el tipo entero (int), y otros
se pueden completar con una longitud, como los tipos alfanumricos:

En este ejemplo hemos definido una columna (Codigo) de tipo Entero corto
(Smallint), y una columna (Nombre) que almacenar hasta 20 caracteres
alfanumricos (nchar(20)), en este caso la longitud la indicamos en la
pestaa Propiedades de
columna
en
la
propiedad
Longitud.
Las propiedades de la columna pueden variar dependiendo del tipo de datos de
la columna seleccionada, por ejemplo los campos enteros no tienen la
propiedad longitud, ya que el propio tipo define la longitud del campo, en
cambio los campos de tipo numeric o decimal no tiene la propiedad longitud
pero s las propiedades escala y precisin, los valores que permiten definir el
tamao del campo.
1.10. Valores nulos
Tambin podemos indicar si la columna permitir valores nulos o no, o bien
cambiando la propiedad Permitir valores nulos que aparece debajo de la
propiedad Longitud, o bien simplemente marcando o desmarcando la casilla
de la columna Permitir valores nulos que se encuentra al lado de la
columna Tipo de datos. Si la casilla est marcada, el usuario podr no rellenar
el campo cuando inserte una fila de datos en la tabla.
1.11. Columna con contador

En la mayora de los sistemas gestores


de bases de datos tenemos un tipo de datos de tipo contador, autonumrico,
autoincremental, etc. Este tipo hace que el propio sistema es el encargado de
rellenar el campo con un valor que va incrementando conforme se crean ms
filas de datos en la tabla.
Las columnas de este tipo se utilizan normalmente para numerar las filas de la
tabla, como no habrn dos filas con el mismo valor (el sistema se encarga de
incrementar el valor cada vez que se crea una nueva fila), estos campos se
suelen utilizar como claves primarias.
En SQL Server 2005 no existe el tipo de datos Contador pero se consigue el
mismo funcionamiento asignando a la columna un tipo de datos numrico y
definiendo la columna como columna de identidad.
En las propiedades de la columna marcamos S en la propiedad (Identidad) y
a continuacin podemos indicar en qu valor queremos que empiece el
contador (Inicializacin de identidad) y en cunto incrementar cada vez que
se cree un nuevo registro (Incremento de identidad).
Aunque este tipo de columnas se utiliza frecuentemente como clave primaria,
SQL Server no le asigna automticamente esta funcin, la tenemos que definir
nosotros mismos, pero s fuerza a que sea una columna sin valores nulos. No se
puede definir ms de una columna de identidad por tabla.
1.12. Clave primaria
Para definir una columna como clave primaria, posicionamos el puntero del
ratn sobre la columna, desplegamos el men contextual y seleccionamos la
opcin Establecer Clave principal:

Aparecer una llave a la izquierda del nombre, smbolo de las claves


principales:

Para definir una clave primaria compuesta por varias columnas, seleccionamos
las columnas manteniendo pulsada la tecla Ctrl y luego seleccionamos la
opcin.
Para quitar una clave principal, hacemos lo mismo pero en esta ocasin
seleccionamos la opcin Quitar clave principal.

Tambin podemos utilizar el icono de la barra de herramientas.

1.13. Aadir o eliminar columnas


Una vez definidas algunas columnas, si queremos aadir una nueva columna
entre dos, nos posicionamos en la segunda y seleccionamos la opcin Insertar
columna del men contextual.

La nueva columna se colocar delante:

Del mismo modo si queremos eliminar la definicin de una columna, nos


posicionamos en la columna a eliminar y seleccionamos la opcin Eliminar
columna:

O simplemente hacemos clic en la zona a la izquierda del nombre y pulsamos


la tecla Supr.
Finalmente guardamos la tabla, nos pedir el nombre de la tabla:

La nueva tabla aparecer en la lista de tablas de la base de datos:

1.14. Modificar la definicin de una tabla


Para entrar a la ventana de definicin de la tabla utilizamos la
opcin Modificar de su men contextual (Tambin es posible que se
llame Diseo):

Se abrir la ventana que ya conocemos para definir las columnas de la tabla.

1.15. Insertar datos en la tabla


Ahora que tenemos la tabla creada podemos rellenarla con datos. Para eso
debemos abrir la tabla:

Se abrir una ventana parecida a esta:

La primera columna sirve para indicarnos el


estado de una fila, por ejemplo el * nos indica que es una nueva fila, esta fila
realmente no est en la tabla, nos sirve de contenedor para los nuevos datos
que queremos insertar.
Para insertar una nueva fila de datos slo tenemos que rellenar los campos que
aparecen en esa fila (la del *), al cambiar de fila los datos se guardarn
automticamente en la tabla a no ser que alguno infrinja alguna regla de
integridad, en ese caso SQL Server nos devuelve un mensaje de error para que
corrijamos el dato errneo, si no lo podemos corregir entonces slo podemos
deshacer los cambios.
1.16. Modificar datos
Para modificar un valor que ya est en una fila de la tabla slo tenemos que
posicionarnos en el campo y rectificar el valor. En cuanto modificamos un valor,
la fila aparece con un lpiz escribiendo (ver imagen), este lpiz nos indica que
la fila se ha modificado y tiene nuevos datos por guardar. Al salir de la fila sta
se guardar automticamente a no ser que el nuevo valor infrinja alguna regla
de integridad. Si queremos salir de la fila sin guardar los cambios, tenemos que
cancelar la actualizacin pulsando la tecla ESC.
1.17. Eliminar filas

Para eliminar una fila completa, la seleccionamos y pulsamos la tecla Supr o


bien desplegamos su men contextual y seleccionamos la opcin Eliminar.

En cualquiera de los dos casos nos aparece un mensaje de confirmacin.

1.18. Relacionar tablas

Como ya hemos visto, en una base de datos relacional, las relaciones entre las
tablas se implementan mediante la definicin de claves ajenas, que son
campos que contienen valores que sealan a un registro en otra tabla, en esta
relacin as creada, la tabla referenciada se considera principal y la que
contiene la clave ajena es la subordinada.
Desde el entorno grfico del SSMS podemos definir claves ajenas entrando en
el diseo de la tabla y desplegando el men contextual del campo que va a ser
clave ajena:

Seleccionamos la opcin Relaciones y se abre la ventana:

Al pulsar el botn que se encuentra en la fila Especificacin de tablas y


columnas se abre el dilogo donde definiremos la relacin:

El entorno grfico SSMS (X)


En la parte derecha tenemos la tabla en la que estamos y el campo que va a
actuar como clave ajena, slo nos queda elegir en el desplegable de la
izquierda la tabla a la que hace referencia la clave y al seleccionar una tabla, a

la izquierda del campo clave ajena podremos elegir el campo de la otra tabla
por el que se relacionarn las tablas. En nuestro caso ser:

De esta forma hemos definido una relacin entre las


tablas Facturas y Clientes. Para ver las relaciones existentes entre las
diferentes tablas tenemos los diagramas.
Primero debemos definir el diagrama, para ello seleccionamos la opcin
correspondiente:

Si no tenemos todava ningn diagrama creado, nos aparece un mensaje:

Elegimos S y se crea digamos el soporte donde se pintar el diagrama.


A continuacin nos aparece el nuevo diagrama ahora si elegimos crear un
nuevo diagrama nos preguntar las tablas a incluir en el diagrama:

Seleccionamos cada una y pulsamos Agregar, cuando hayamos agregado al


diagrama todas las que queremos pulsamos en Cerrar y aparecern en el
diagrama las tablas con las relaciones que tengan definidas en ese momento:

La llave indica la tabla principal (padre) y el smbolo infinito seala la tabla que
contiene la clave ajena.
En el examinador de objetos en la carpeta Diagramas de base de
datos aparecen todos los diagramas definidos hasta el momento:

Hemos aprendido hasta ahora lo bsico para poder crear una base de datos y
rellenarla con tablas relacionadas entre s y con datos, ahora veamos cmo
recuperar esos datos.

El entorno grfico SSMS (XI)


1.19. Abrir una nueva consulta
Vamos a ver ahora cmo crear consultas SQL y ejecutarlas desde el entorno del
SSMS.
Para ello debemos abrir la zona de trabajo de tipo Query, abriendo una nueva
consulta, seleccionando previamente el servidor y pulsando el
botn
de la barra de botones o si queremos realizar la consulta
sobre un servidor con el cual todava no hemos establecido conexin,
seleccionando de la barra de mens la opcin Nuevo > Consulta de motor
de base de datos:

.
En este ltimo caso nos aparecer el cuadro de dilogo para establecer la
conexin (el mismo que vimos al principio del tema).
A continuacin se abrir una nueva pestaa donde podremos teclear las
sentencias SQL:

Adems aparece una nueva barra de botones que nos permitir ejecutar los
comandos ms tiles del modo query.
1.20. Escribir y ejecutar cdigo TRANSACT-SQL

Slo tenemos que teclear la sentencia a ejecutar, por ejemplo empezaremos


por crear la base de datos.
Utilizaremos la sentencia CREATE DATABASE mnima:
CREATE DATABASE ventas;
Al pulsar el botn Ejecutar se ejecuta la sentencia y aparece en la parte
inferior el resultado de la ejecucin, en la pestaa Mensajes:

Si ahora desplegamos la carpeta Bases de Datos del Explorador de


Objetos, observaremos la base de datos que hemos creado:

Si la ejecucin de la sentencia produce un error, el sistema nos devolver el


mensaje de error escrito en rojo en la pestaa Mensajes.
Podemos incluir en una misma consulta varias sentencias SQL, cuando
pulsamos Ejecutar se ejecutarn todas una detrs de otra. Si tenemos varias
consultas y slo queremos ejecutar una, la seleccionaremos antes de
ejecutarla.

Unidad 1. El entorno grfico SSMS (XII)


1.21. La base de datos predeterminada
Cuando ejecutamos consultas desde el editor, nos tenemos que fijar sobre qu
base de datos se va a actuar.
Fijndonos en la pestaa de la consulta, en el nombre aparece el nombre del
servidor seguido de un punto y el nombre de la base de datos sobre la que se
va a actuar y luego un guin y el nombre de la consulta.
En la imagen anterior tenemos ord01.master SQLQuery1.sql, lo que nos
indica que la consulta se llama SQLQuery1.sql, y que se va a ejecutar sobre
la base de datos master que se encuentra en el servidor ord01.
Cuando creamos una nueva consulta, sta actuar sobre la base de datos
activa en ese momento. Por defecto la base de datos activa es la
predeterminada (master). Si queremos que la base de datos activa sea por
ejemplo la base de datos ventas, hacemos clic sobre su nombre en
el Explorador de objetos, y sta pasar a ser la base de datos activa. Si
ahora creamos una nueva consulta, sta actuar sobre la base de datos
ventas.

Si queremos crear una consulta que siempre acte sobre una determinada
base de datos y no nos queremos preocupar de qu base de datos tenemos
activa podemos aadir al principio de la consulta la instruccin USE
nombreBaseDatos; esto har que todas las instrucciones que aparezcan
despus, se ejecuten sobre la base de datos indicada.
Por ejemplo:
USE ventas;
SELECT * FROM pedidos;
Obtiene todos los datos de la tabla pedidos que se encuentra en la base de
datos ventas.
Si no utilizamos USE y almacenamos la consulta, al abrirla otra vez, coger
como base de datos la predeterminada (no la activa) y se volver a ejecutar
sobre la base de datos master.
Normalmente utilizaremos como base de datos la nuestra y no la base de
datos master, por lo que nos ser til cambiar el nombre de la base de datos
por defecto, esto lo podemos hacer cambiando la base de datos por defecto en
el id de sesin.
Para ello, cuando vamos a conectar con el servidor:

Pulsamos en el botn Opciones >>

En la pestaa Propiedades de conexin, en el cuadro Conectar con base


de datos: Seleccionamos <Examinar servidor > para elegir la base de
datos.

La elegimos y aceptamos. A partir de ese momento la base de datos elegida


ser la que SQL Server coja por defecto en todas las sesiones de ese usuario.

Unidad 1. El entorno grfico SSMS (XIII)


1.22. El editor de texto
Para facilitarnos la redaccin y correccin de las sentencias, el editor de SQL
presenta las palabras de distintos colores segn su categora y podemos
utilizar el panel Explorador de Objetospara arrastrar desde l los objetos
sobre la zona de trabajo y as asegurarnos de que los nombres de los objetos
(por ejemplo nombre de tabla, de columna, etc.) sean los correctos.
Como hemos dicho el texto que se escribe en este editor de cdigo se colorea
por categora. Los colores son los mismos que se utilizan en todo el entorno
SQL Server. En esta tabla aparecen los colores ms comunes.
Color

Categora

Rojo

Cadena de caracteres

Verde oscuro

Comentario

Negro sobre fondo plateado

Comando SQLCMD

Fucsia

Funcin del sistema

Verde

Tabla del sistema

Azul

Palabra clave

Verde azulado

Nmeros de lnea o parmetro de plantilla

Rojo oscuro

Procedimiento almacenado de SQL Server

Gris oscuro

Operadores

1.23. Configurar un esquema de colores personalizado


En el men Herramientas > Opciones, desplegando la
opcin Entorno, Fuentes y colores, se puede ver la lista completa de colores
y sus categoras, as como configurar un esquema de colores personalizado:

En la lista Mostrar valores para, seleccionamos el entorno que se ver


afectado.
El botn Usar predeterminados nos permite volver a la configuracin
predeterminada.
Ahora slo nos queda aprender a redactar sentencias SQL, cosa que se ver en
otro momento, mientras tanto podemos utilizar el Generador de
Consulta que incluye SSMS y que veremos a continuacin en el apartado
sobre vistas.
1.24. Las Vistas
Las consultas que hemos visto hasta ahora son trozos de cdigo SQL que
podemos guardar en un archivo de texto y abrir y ejecutar cuando queramos,
pero si queremos que nuestra consulta de recuperacin de datos se guarde en
la propia base de datos y se comporte como una tabla (algo parecido a una
consulta almacenada de Access), la tenemos que definir como una vista. Esta
vista tiene la ventaja entre otras de poder ser utilizada como si fuese una tabla
en otras consultas. Realmente al ejecutarla obtenemos una tabla lgica
almacenada en memoria y lo que se guarda en la base de datos es su
definicin, la instruccin SQL que permite recuperar los datos.

Para definir una vista en el Explorador de Objetos desplegamos la base de


datos donde la guardaremos y elegimos la opcin Nueva vista del men
contextual de la carpeta Vistas, se pondr en funcionamiento el generador de
consultas pidindonos las tablas en las que se basar la vista. Pulsamos sobre
la tabla a aadir al diseo de la vista y pulsamos el botn Agregar, podemos
aadir as cuntas tablas queramos.
Despus de Cerrar, vemos a la derecha del Explorador de Objetos la
pestaa con la definicin de la vista que puede incluir varios paneles:

La aparicin de estos paneles es configurable, en la barra de


herramientas Diseador de vistas los iconos remarcados en azul son los

correspondientes a cada panel:

Unidad 1. El entorno grfico SSMS (XIV)


Nosotros, a lo largo del curso, crearemos las vistas desde el panel SQL que
veremos ms adelante.
1.25. El panel de diagrama
Es el primero que aparece, incluye una representacin grfica de las tablas
con sus campos y de la forma en que se juntan en la vista. En este caso, como
las tablas tienen relaciones definidas (claves ajenas), esta relacin ha
aparecido automticamente al aadir la segunda tabla. Pero se puede cambiar
el tipo de relacin eligiendo la opcin correspondiente en el men contextual
que aparece con el clic derecho sobre la relacin:

Desde el panel diagrama podemos aadir cmodamente campos de las tablas


a la consulta marcando la casilla correspondiente. En la imagen anterior la
nica casilla seleccionada es la del * en la tabla Libros por lo que se
visualizarn todas las columnas de la tabla Libros y ninguna de la
tabla Prstamos.
Conforme vamos marcando casillas de las tablas del panel diagrama, los
cambios se ven reflejados en los dems paneles excepto en el panel de
resultados que se actualiza ejecutando la consulta.
1.26. El panel de criterios
Es una rejilla en la que podemos definir las columnas del resultado de la
consulta (las columnas de la vista).

En cada fila de la rejilla se define una columna del resultado o una


columna que se utiliza para obtener el resultado.

En Columna tenemos el nombre de la columna de la se obtienen los


datos o la expresin cuando se trata de una columna calculada.

En Alias escribimos el nombre que tendr la columna en la vista,


tambin corresponde con el encabezado de la columna en la rejilla de
resultado. Si se deja el campo en blanco, por defecto se asume el mismo
nombre que hay en Columna.

En Tabla tenemos el nombre de la tabla del origen de la consulta a la


que pertenece la Columna, por ejemplo la primera columna del resultado
se saca de la columna Codigo de la tabla LIBROSy se llamar CodLibro.
La cuarta columna de la vista coger sus datos de la columna Usuario de
la tabla Prestamos y se llamar Usuario (Alias se ha dejado en blanco por
lo que asume el nombre que hay en Columna.

En la columna Resultados indicamos si queremos que la columna se


visualice o no, las columnas con la casilla marcada se visualizan.

Las columnas Criterio de ordenacin y Tipo de orden permiten ordenar


las filas del resultado segn una o ms columnas. Se ordena por las
columnas que tienen algo en Tipo de orden y cuando se ordena por
varias columnas Criterio de ordenacin indica que primero se ordena por
la columna que lleva el n 1 y despus por la columna que lleva el n 2 y
as sucesivamente. En el ejemplo las filas del resultado se ordenarn
primero por cdigo de libro y despus por cdigo de prstamo, todas las
filas dentro del mismo libro se ordenarn por cdigo de prstamo.

Si queremos aadir unos criterios de seleccin tenemos las


columnas Filtro y O

En cada celda indicamos una condicin que debe cumplir la columna


correspondiente y se puede combinar varias condiciones mediante O (OR) e Y
(AND) segn coloquemos las condiciones en la misma columna o en columnas
diferentes. En el ejemplo anterior tenemos la condicin compuesta:
((usuario=1) AND (Dias>5)) OR (Usuario=2).
Podemos variar el orden de aparicin de las columnas arrastrando la fila
correspondiente de la rejilla hasta el lugar deseado.
Tambin podemos Elimnar filas de la rejilla para eliminar columnas del
resultado, lo conseguimos seleccionando la fila haciendo clic sobre su extremo
izquierda y cuando aparece toda la fila remarcada pulsamos Supr o desde el
men contextual de la fila.
Podemos definir consultas ms complejas como por ejemplo consultas de
resumen, pulsando sobre el botn Agrupar por de la barra de herramientas,
se aade a la rejilla una nueva columnaAgrupar por con las siguientes
opciones:

Unidad 1. El entorno grfico SSMS (XV)


1.27. El panel SQL
En l vemos la instruccin SQL generada, tambin podemos redactar
directamente la sentencia SQL en el panel y ver los cambios equivalentes en

los distintos paneles. Para ver estos cambios debemos de ejecutar


o Comprobar la sintaxis para que se actualicen los dems paneles.
Por defecto el generador aade a la consulta una clusula TOP (100) PERCENT
que indica que se visualizarn el 100% de las filas. Esta clusula no la hemos
definido nosotros sino que la aade automticamente el generador.

Una vez tenemos la vista definida la guardamos y podremos hacer con ella casi
todo lo que podemos hacer con una tabla. De hecho si nos fijamos en
el Explorador de objetos, en la carpetaVistas:

Vemos que la estructura es muy similar a la estrutura de una tabla. Y que


podemos modificar su definicin y ejecutarla, igual que con las tablas:

Modificar para modificar la definicin de la vista

Abrir vista para ejecutarla y ver los datos como si fuese una tabla real.

Ejercicio propuesto de la Unidad 1

Prueba evaluativa de la Unidad 1

Unidad 2. Introduccin al SQL. Transact-SQL (I)


2.1. Conceptos bsicos de SQL
SQL (Structured Query Language), Lenguaje Estructurado de Consulta es el
lenguaje utilizado para definir, controlar y acceder a los datos almacenados en
una base de datos relacional.
Como ejemplos de sistemas gestores de bases de datos que utilizan SQL
podemos citar DB2, SQL Server, Oracle, MySql, Sybase, PostgreSQL o Access.
El SQL es un lenguaje universal que se emplea en cualquier sistema gestor de
bases de datos relacional. Tiene un estndar definido, a partir del cual cada
sistema gestor ha desarrollado su versin propia.
En SQL Server la versin de SQL que se utiliza se llama TRANSACT-SQL.
EL SQL en principio es un lenguaje orientado nicamente a la definicin y al
acceso a los datos por lo que no se puede considerar como un lenguaje de
programacin como tal ya que no incluye funcionalidades como son
estructuras condicionales, bucles, formateo de la salida, etc. (aunque veremos
que esto est evolucionando).
Se puede ejecutar directamente en modo interactivo, pero tambin se suele
emplear embebido en programas escritos en lenguajes de programacin
convencionales. En estos programas se mezclan las instrucciones del propio
lenguaje (denominado anfitrin) con llamadas a procedimientos de acceso a la
base de datos que utilizan el SQL como lenguaje de acceso. Como por ejemplo
en Visual Basic, Java, C#, PHP .NET, etc.
Las instrucciones SQL se clasifican segn su propsito en tres grupos:

El DDL (Data Description Language) Lenguaje de Descripcin de Datos.

El DCL (Data Control Language) Lenguaje de Control de Datos.

El DML (Data Manipulation Language) Lenguaje de Manipulacin de


Datos.

El DDL, es la parte del SQL dedicada a la definicin de la base de datos,


consta de sentencias para definir la estructura de la base de datos, permiten
crear la base de datos, crear, modificar o eliminar la estructura de las tablas,
crear ndices, definir reglas de validacin de datos, relaciones entre las tablas,
etc. Permite definir gran parte del nivel interno de la base de datos. Por este
motivo estas sentencias sern utilizadas normalmente por el administrador
de la base de datos.

El DCL (Data Control Language) se compone de instrucciones que permiten:

Ejercer un control sobre los datos tal como la asignacin de privilegios


de acceso a los datos (GRANT/REVOKE).

La gestin de transacciones (COMMIT/ROLLBACK).

Una transaccin se puede definir como un conjunto de acciones que se tienen


que realizar todas o ninguna para preservar la integridad de la base de datos.
Por ejemplo supongamos que tenemos una base de datos para las reservas de
avin. Cuando un usuario pide reservar una plaza en un determinado vuelo, el
sistema tiene que comprobar que queden plazas libres, si quedan plazas
reservar la que quiera el usuario generando un nuevo billete y marcando la
plaza como ocupada. Aqu tenemos un proceso que consta de dos operaciones
de actualizacin de la base de datos (crear una nueva fila en la tabla de billetes
y actualizar la plaza reservada en el vuelo, ponindola como ocupada) estas
dos operaciones se tienen que ejecutar o todas o ninguna, si despus de crear
el billete no se actualiza la plaza porque se cae el sistema, por ejemplo, la base
de datos quedara en un estado inconsistente ya que la plaza constara como
libre cuando realmente habra un billete emitido para esta plaza. En este caso
el sistema tiene el mecanismo de transacciones para evitar este error. Las
operaciones se incluyen las dos en una misma transaccin y as el sistema
sabe que las tiene que ejecutar las dos, si por lo que sea no se pueden ejecutar
las dos, se encarga de deshacer los cambios que se hubiesen producido para
no ejecutar ninguna.
Las instrucciones que gestionan las autorizaciones sern utilizadas
normalmente por el administrador mientras que las otras, referentes a
proceso de transacciones sern utilizadas tambin por los programadores.
No todos los sistemas disponen de ellas.
El DML se compone de las instrucciones para el manejo de los datos, para
insertar nuevos datos, modificar datos existentes, para eliminar datos y la ms
utilizada, para recuperar datos de la base de datos. Veremos que una sola
instruccin de recuperacin de datos es tan potente que permite recuperar
datos de varias tablas a la vez, realizar clculos sobre estos datos y obtener
resmenes.
El DML interacta con el nivel externo de la base de datos por lo que sus
instrucciones son muy parecidas, por no decir casi idnticas, de un sistema a
otro, el usuario slo indica lo que quiere recuperar no cmo se tiene que
recuperar, no influye el cmo estn almacenados los datos.
Es el lenguaje que utilizan los programadores y los usuarios de la base de
datos.
A lo largo del curso se explicarn cada una de las formas de explotacin de la
base de datos. Dependiendo de tu perfil profesional (programador o
administrador) o de tu inters personal te resultar ms til un bloque u otro.

2.2. Introduccin al TRANSACT-SQL


Como hemos dicho, el sistema gestor de base de datos SQL-Server
2005 utiliza su propia versin del lenguaje SQL, el TRANSACT-SQL.
TRANSACT-SQL es un lenguaje muy potente que nos permite definir casi
cualquier tarea que queramos efectuar sobre la base de datos. En este tema
veremos que TRANSACT-SQL va ms all de un lenguaje SQL cualquiera ya que
incluye caractersticas propias de cualquier lenguaje de programacin,
caractersticas que nos permiten definir la lgica necesaria para el tratamiento
de la informacin:

Tipos de datos.

Definicin de variables.

Estructuras de control de flujo.

Gestin de excepciones.

Funciones predefinidas.

Sin embargo no permite:

Crear interfaces de usuario.

Crear aplicaciones ejecutables, sino elementos que en algn momento


llegarn al servidor de datos y sern ejecutados.

Debido a estas restricciones se emplea generalmente para crear


procedimientos almacenados, triggers y funciones de usuario.
Puede ser utilizado como cualquier SQL como lenguaje embebido en
aplicaciones desarrolladas en otros lenguajes de programacin como Visual
Basic, C, Java, etc. Y por supuesto los lenguajes incluidos en la plataforma .NET.
Tambin lo podremos ejecutar directamente de manera interactiva, por
ejemplo desde el editor de consultas de SSMS (SQL Server Management
Studio) el entorno de gestin que ya conocemos. Esta es la forma en que lo
utilizaremos nosotros.

Unidad 2. Introduccin al SQL. Transact-SQL (II)


2.3. Caractersticas generales del lenguaje Transact-SQL
El lenguaje SQL se cre con la finalidad de ser un lenguaje muy potente y a la
vez muy fcil de utilizar, se ha conseguido en gran medida ya que con una sola
frase (instruccin) podemos recuperar datos complejos (por ejemplo datos que
se encuentran en varias tablas, combinndolos, calculando resmenes), y
utilizando un lenguaje muy cercano al lenguaje hablado (suponiendo que
hablamos ingls, claro!).

Por ejemplo:
SELECT codigo, nombre FROM Clientes WHERE localidad=Valencia;
Esta instruccin nos permite SELECCIONAR el cdigo y nombre DE los Clientes
CUYA localidad sea Valencia.
La sencillez tambin radica en que lo que indicamos es lo que queremos
obtener, no el cmo lo tenemos que obtener, de eso se encargar el sistema
automticamente.
Las sentencias SQL adems siguen todas el mismo patrn:

Empiezan por un verbo que indica la accin a realizar,

completado por el objeto sobre el cual queremos realizar la accin,

seguido de una serie de clusulas (unas obligatorias, otras opcionales)


que completan la frase, y proporcionan ms detalles acerca de lo que se
quiere hacer.

Si sabemos algo de ingls nos ser ms fcil interpretar a la primera lo que


quiere decir la instruccin, y de lo contrario, como el nmero de palabras que
se emplean es muy reducido, enseguida nos las aprenderemos.
Por ejemplo en el DDL (acciones sobre la definicin de la base de
datos), tenemos 3 verbos bsicos:
CREATE (Crear)
DROP (Eliminar)
ALTER (Modificar)
Completados por el tipo de objeto sobre el que actan y el objeto concreto:
CREATE DATABASE mibase .......;
Permite crear una base de datos llamada mibase, a continuacin escribiremos
las dems clusulas que completarn la accin, en este caso dnde se
almacenar la base de datos, cunto ocupar, etc...
CREATE TABLE mitabla (.....);
Permite crear una nueva tabla llamada mitabla, entre parntesis
completaremos la accin indicando la definicin de las columnas de la tabla.
CREATE INDEX miindex...;
Lo mismo para crear un ndice (a que lo habais adivinado?).
DROP DATABASE mibase;
Permite borrar, eliminar la base de datos mibase.
DROP TABLE mitabla;

Elimina la tabla mitabla.


ALTER TABLE mitabla.....;
Permite modificar la definicin de la tabla mitabla.
En el DML (acciones sobre los datos almacenados) utilizaremos los verbos:
INSERT (Crear, es decir, insertar una nueva fila de datos)
DELETE (Eliminar filas de datos)
UPDATE (Modificar filas de datos)
SELECT (Seleccionar, obtener)
Por ejemplo:
INSERT INTO mitabla ..... Inserta nuevas filas en mitabla
DELETE FROM mitabla Eliminar filas de mitabla
UPDATE mitabla ....... Actualiza filas de mitabla
Como ejemplo de clusula dentro de una instruccin tenemos:
SELECT codigo, nombre
FROM Clientes
WHERE localidad=Valencia;
En esta sentencia nos aparecen dos clusulas, la clusula FROM que nos
permite indicar de dnde hay que coger los datos y la clusula WHERE que
permite indicar una condicin de seleccin.
Otra caracterstica de una sentencia SQL es que acaba con un punto y
coma (;) originalmente ste era obligatorio y serva para indicar el fin de la
instruccin, pero ahora se puede omitir, aunque se recomienda su uso.
En una sentencia utilizaremos palabras reservadas (las fijas del lenguaje),
y nombres de objetos y variables (identificadores).
Las palabras reservadas no se pueden utilizar para otro propsito, por ejemplo
una tabla no se puede llamar FROM, y los nombres (los identificadores) siguen
las reglas detalladas en el punto siguiente.
Nombres cualificados. En ocasiones deberemos utilizar nombres
cualificados, por ejemplo cuando se escribe un nombre de tabla, SQL
presupone que se est refiriendo a una de las tablas de la base de datos activa,
si queremos hacer referencia a una tabla de otra base de datos utilizamos su
nombre cualificado nombrebasedatos.nombredeesquema.nombretabla,
utilizamos el punto para separar el nombre del objeto y el nombre de su
contenedor.
O por ejemplo si en una consulta cuyo origen son dos tablas, queremos hacer
referencia a un campo y ese nombre de campo es un nombre de campo en las

dos tablas, pues utilizaremos su nombre


cualificado nombretabla.nombrecampo.
El valor NULL.
Puesto que una base de datos es un modelo de una situacin del mundo real,
ciertos datos pueden inevitablemente faltar, ser desconocidos o no ser
aplicables, esto se debe de indicar de alguna manera especial para no
confundirlo con un valor conocido pero que sea cero por ejemplo, SQL tiene
para tal efecto el valor NULL que indica precisamente la ausencia de valor.
Por ejemplo: no es lo mismo que el alumno no tenga nota a que tenga la nota
cero, esto afectara tambin a todos los clculos que se pueden realizar sobre
la columna nota.

Unidad 2. Introduccin al SQL. Transact-SQL (III)


2.4. Reglas de formato de los identificadores
Los identificadores son los nombres de los objetos de la base de datos.
Cualquier elemento de Microsoft SQL Server 2005 puede tener un identificador:
servidores, bases de datos, tablas, vistas, columnas, ndices,
desencadenadores, procedimientos, restricciones, reglas, etc.
Las reglas de formato de los identificadores normales dependen del nivel de
compatibilidad de la base de datos, que se estableca con el parmetro
sp_dbcmptlevel pero que ahora Microsoft aconseja no utilizar ya que
desaparecer en versiones posteriores en vez de eso se tiene que utilizar la
clusula SET COMPATIBILITY_LEVEL de la instruccin ALTER TABLE. Cuando el
nivel de compatibilidad es 90, (el asignado por defecto) se aplican las reglas
siguientes para los nombres de los identificadores:

No puede ser una palabra reservada.

El nombre debe tener entre 1 y 128 caracteres, excepto para algunos


tipos de objetos en los que el nmero es ms limitado.

El nombre debe empezar por:

Una letra, como aparece definida por el estndar Unicode 3.2. La


definicin Unicode de letras incluye los caracteres latinos de
la "a" a la "z" y de la "A" a la "Z".

El carcter de subrayado ( _ ), arroba ( @ ) o nmero ( # ).

Ciertos smbolos al principio de un identificador tienen un significado


especial en SQL Server. Un identificador que empieza con el signo de

arroba indica un parmetro o una variable local. Un identificador que


empieza con el signo de nmero indica una tabla o procedimiento
temporal. Un identificador que empieza con un signo de nmero doble
(##) indica un objeto temporal global.

Algunas funciones de Transact-SQL tienen nombres que empiezan con un


doble signo de arroba (@@). Para evitar confusiones con estas
funciones, se recomienda no utilizar nombres que empiecen con @@.

No se permiten los caracteres especiales o los espacios incrustados.

Si queremos utilizar un nombre que no siga estas reglas, normalmente para


poder incluir espacios en blanco, lo tenemos que escribir encerrado entre
corchetes [ ] (tambin se pueden utilizar las comillas pero recomendamos
utilizar los corchetes).

2.5. Tipos de datos


En SQL Server 2005, cada columna, expresin, variable y parmetro est
asociado a un tipo de datos.
Un tipo de datos, realmente define el conjunto de valores vlidos para los
campos definidos de ese tipo. Indica si el campo puede contener: datos
numricos, de caracteres, moneda, fecha y hora, etc.
SQL Server proporciona un conjunto de tipos de datos del sistema que define
todos los tipos de datos que pueden utilizarse. Tambin podemos definir
nuestros propios tipos de datos en Transact-SQL o Microsoft .NET Framework.
Los tipos de datos ms utilizados son:

Los numricos: int, decimal, money

Los de fecha y hora: datetime

Y las cadenas de caracteres: varchar

Si quieres conocer todos los tipos de datos disponibles en SQLServer 2005,


visita el siguiente avanzado .
2.6. Las constantes
Una constante es un valor especfico o un smbolo que representa un valor de
dato especfico. El formato de las constantes depende del tipo de datos del
valor que representan. En este apartado veremos las ms utilizadas.

Las constantes numricas se escriben mediante una cadena de


nmeros, con la consideracin de que el separador decimal es un punto,
no una coma, y que si se trata de un valor monetario deberemos incluir
la moneda al inicio de la constante. Por ejemplo: 85.90 y 85.90, el
primero sera un valor decimal y el segundo un valor money. De forma
predeterminada, los valores sern positivos. Para indicar lo contrario
escribimos el signo - al principio.

Las constantes de fecha y hora van entre comillas simples y con un


formato de fecha y hora adecuado. Por ejemplo: '03/10/90'.

Y las constantes en cadenas de caracteres van entre comillas


simples. Por ejemplo: 'Juan Garca Lpez'.

Para indicar valores negativos y positivos aadimos el prefijo + o - segn sea el


valor positivo o negativo. Sin prefijo se entiende que el valor es positivo.
Si quieres ver cmo definir constantes para otros tipos de datos, visita el
siguiente avanzado .

Unidad 2. Introduccin al SQL. Transact-SQL (IV)


2.7. Las expresiones
Una expresin es una combinacin de smbolos y operadores que el motor de
base de datos de SQL Server evala para obtener un nico valor. Una expresin
simple puede ser una sola constante, variable, columna o funcin escalar. Los
operadores se pueden usar para combinar dos o ms expresiones simples y
formar una expresin compleja.
Dos expresiones pueden combinarse mediante un operador si ambas tienen
tipos de datos admitidos por el operador y se cumple al menos una de estas
condiciones:

Las expresiones tienen el mismo tipo de datos.

El tipo de datos de menor prioridad se puede convertir implcitamente al


tipo de datos de mayor prioridad.

La funcin CAST puede convertir explcitamente el tipo de datos con


menor prioridad al tipo de datos con mayor prioridad o a un tipo de
datos intermedio que pueda convertirse implcitamente al tipo de datos
con la mayor prioridad.

Tipos de operadores:
- Operadores numricos:

suma

resta

multiplicacin

divisin

mdulo
(resto de una
divisin)

- Operadores bit a bit: realizan manipulaciones de bits entre dos expresiones de


cualquiera de los tipos de datos de la categora del tipo de datos entero.
AND

&

OR

OR exclusivo

- Operadores de comparacin:
Igual a

Mayor que

>

Menor que

<

Mayor o igual que

>=

Menor o igual que

<=

Distinto de

<>

No es igual a

!=

No menor que

!<

No mayor que

!>

- Operadores lgicos:
Aqu slo los nombraremos ya que en el tema de consultas simples los veremos
en detalle.
ALL

IN

AND

LIKE

ANY

NOT

BETWEEN

OR

EXISTS

SOME

- Operadores de cadenas:
Concatenacin

Resultados de la expresin
- Si se combinan dos expresiones mediante operadores de comparacin o
lgicos, el tipo de datos resultante es booleano y el valor es uno de los
siguientes: TRUE, FALSE o UNKNOWN.
- Cuando dos expresiones se combinan mediante operadores aritmticos, bit a
bit o de cadena, el operador determina el tipo de datos resultante.
Las expresiones complejas formadas por varios smbolos y operadores se
evalan como un resultado formado por un solo valor. El tipo de datos,
intercalacin, precisin y valor de la expresin resultante se determina al
combinar las expresiones componentes de dos en dos, hasta que se alcanza un
resultado final. La prioridad de los operadores de la expresin define la
secuencia en que se combinan las expresiones.

Unidad 2. Introduccin al SQL. Transact-SQL (V)


2.8. Funciones
SQL Server 2005 proporciona numerosas funciones integradas y permite crear
funciones definidas por el usuario.
Existen diferentes tipos de funciones:

Funciones de conjuntos de filas: devuelven un objeto que se puede


utilizar, en instrucciones Transact-SQL, en lugar de una referencia a una
tabla.

Funciones de agregado (tambin llamadas funciones de columna):


Operan sobre una coleccin de valores y devuelven un solo valor de
resumen. Por ejemplo, la funcin de suma sobre la
columna importe para conocer el importe total: SUM(importe)

Funciones de categora: Devuelven un valor de categora para cada fila


de un conjunto de filas, por ejemplo devuelve el nmero de la fila, el
ranking de la fila en una determinada ordenacin, etc.

Funciones escalares: Operan sobre un valor y despus devuelven otro


valor. Son las funciones que estamos acostumbrados a utilizar. Las
funciones escalares se clasifican segn el tipo de datos de sus
operandos

Las variables

En Transact-SQL podemos definir variables, que sern de un tipo de datos


determinado, como tipos de datos podemos utilizar los propios de la base de
datos SQL-SERVER, pero tambin podemos utilizar tipos propios del lenguaje
que no pueden ser utilizados en DDL. El tipo Cursor y el tipo Table son dos de
estos tipos.
Las variables se definen utilizando la instruccin DECLARE con el siguiente
formato:
DECLARE @nbvariable tipo
El nombre de la variable debe empezar por el smbolo @, este smbolo hace
que SQL interprete el nombre como un nombre de variable y no un nombre de
objeto de la base de datos.
Por ejemplo: DECLARE @empleados INT
Con esto hemos definido la variable @empleados de tipo entero.
Para asignar un valor a una variable, la asignacin se realiza con la palabra
SELECT y el signo igual con el formato:
SELECT @nbvariable = valor
El valor puede ser cualquier valor constante, otro nombre de variable, una
expresin vlida o algo ms potente, parte de una sentencia SELECT de SQL.
Por ejemplo:
SELECT @empleados = 0;
SELECT @empleados = @otra * 100;
SELECT @EMPLEADOS = COUNT(numemp) FROM empleados;
El valor almacenado en la variable se puede visualizar mediante la orden
PRINT. o SELECT
PRINT @nbvariable o SELECT @nbvariable
El valor almacenado en la variable se visualizar en la pestaa de resultados.
Tambin se puede usar para escribir mensajes:
PRINT 'Este es el mensaje'
Otros elementos del lenguaje
Comentarios. Como en cualquier otro lenguaje de programacin, debemos
utilizar comentarios destinados a facilitar la legibilidad del cdigo. En SQL se
insertan comentarios con los signos:
/* */

Varias lneas

/* Esto es un comentario
en varias lneas */

--

Una nica lnea

-- Esto es un comentario en una nica lnea.

USE. Cambia el contexto de la base de datos al de la base de datos


especificada.
USE nbBaseDeDatos
Hace que la base de datos activa pase a ser la base de datos indicada en la
instruccin, las consultas que se ejecuten a continuacin se harn sobre tablas
de esa base de datos si no se indica lo contrario. Es una instruccin til para
asegurarnos de que la consulta se ejecuta sobre la base de datos correcta.
GO
GO no es una instruccin Transact-SQL, sino un comando reconocido por las
utilidades sqlcmd y osql, as como por el Editor de cdigo de SQL Server
Management Studio.
Las utilidades de SQL Server interpretan GO como una seal de que deben
enviar el lote actual de instrucciones Transact-SQL a una instancia de SQL
Server. El lote actual de instrucciones est formado por todas las instrucciones
especficadas desde el ltimo comando GO o desde el comienzo de la sesin o
script si se trata del primer comando GO.
Por ejemplo si queremos crear una consulta para crear una base de datos y sus
tablas, despus del CREATE DATABASE; tenemos que poner GO antes del
primer CREATE TABLE para que el sistema efecte la primera operacin y la
base de datos est creada antes de ejecutar el primer CREATE TABLE.
BEGIN...END
Encierra un conjunto de instrucciones Transact-SQL de forma que estas
instrucciones formen un bloque de instrucciones.

Prueba evaluativa unidad 1: El entorno grfico SSMS


Slo una respuesta es vlida por pregunta. Haz clic en la respuesta que consideres correcta.
Contesta todas las preguntas y haz clic en el botn Corregir para ver la solucin.
Si pulsas Restablecer podrs repetir la evaluacin.

1. El Explorador de objetos...
a) Es un panel que muestra el contenido de nuestro servidor: bases de datos, tablas, etc.
ordenados jerrquicamente.
b) Permite acceder a elementos de nuestro servidor rpidamente y efectuar acciones sobre ellos
mediante el men contextual.
c) A y B son ciertas.

d) A y B son falsas.

2. En qu carpeta se deben, por lo general, crear las bases de datos?


a) Bases de datos > Bases de datos del sistema.
b) Bases de datos.
c) Objetos del servidor.
d) Administracin.

3. Como mnimo, una base de datos en SQL Server debe conener los archivos fsicos:
a) mdf y ldf, es decir, el principal y el de registro.
b) mdf, ndf y ldf: Principal, secundario y de registro.
c) mdf y ndf: Principal y secundario.
d) mdf: Principal.

4. Para copiar los archivos fsicos de una base de datos...


a) Deberemos acceder a la carpeta donde est guardada, mediante el explorador de windows, y
copiarlos.
b) Deberemos desconectarla antes de intentar copiarla, si no el sistema no nos dejar hacerlo
porque est en uso.
c) Deberemos utilizar la herramienta de copias de seguridad, porque no se puede acceder a ella
desde fuera del gestor SSMS.
d) Todas son falsas.

5. Para incluir una base de datos en nuestro servidor...


a) Es necesario crearlo desde el mismo servidor.

b) Es necesario, por seguridad, crear la base de datos en un servidor diferente al que lo


ejecutar.
c) Podemos crear una nueva o adjuntar una ya existente.
d) Deberemos hacerlo mediante instrucciones SQL, ya que el entorno grfico no lo permite.

6. Al definir las columnas de una tabla, qu informacin deberemos especificar?


a) El rango de valores que soporta.
b) El nombre, tipo y si admite nulos, para cada columna.
c) La longitud de la cadena.
d) Las variables.

7. Si definimos una columna de identidad (IDENTITY)...


a) SQL Server automticamente la define como clave principal.
b) sta admitir nulos.
c) sta deber ser de tipo nchar.
d) El sistema generar su valor, que ser un nmero incrementado.

8. Para modificar los datos de una tabla:


a) Desde el Explorador de objetos, desplegamos su men contextual y elegimos la
opcin Modificar.
b) Desde el Explorador de objetos, desplegamos su men contextual y elegimos la opcin Abrir
tabla.
c) A y B son ciertas.

d) A y B son falsas.

9. Para relacionar dos tablas, por ejemplo empleados y oficinas.


a) Deberemos llamar del mismo modo al campo que las relacionar y el gestor se encarga
automticamente de crear la relacin.
b) Deberemos seleccionar el campo de la tabla padre empleados y pulsar el botn definir
hijos para aadir el campo de oficinas.
c) Deberemos, necesariamente, escribir instrucciones SQL que se encarguen de establecer las
relaciones.
d) Deberemos desplegar el men contextual del campo que las relaciona y elegir Relaciones.

10. Si pulsamos el botn Nueva consulta...


a) Se abrir una pestaa nueva en forma de editor, donde podremos escribir consultas SQL.
b) Podremos utilizar la zona de edicin para escribir varias consultas, una detrs de otra.
c) Dispondremos de un editor que colorear las palabras en funcin de su categora.
d) Todas son ciertas.

Unidad 3. Consultas simples (I)


3.1. Introduccin
Vamos a empezar por la instruccin que ms se utiliza en SQL, la sentencia SELECT. La
sentencia SELECT es, con diferencia, la ms compleja y potente de las sentencias SQL, con
ella podemos recuperar datos de una o ms tablas, seleccionar ciertos registros e incluso
obtener resmenes de los datos almacenados en la base de datos. Es tan compleja que la
estudiaremos a lo largo de varias unidades didcticas incorporando poco a poco nuevas
funcionalidades.
El resultado de una SELECT es una tabla lgica que alberga las filas resultantes de la
ejecucin de la sentencia.
La sintaxis completa es la siguiente:

SELECT sentencia::=[WITH

<expresion_tabla_comun> [,...n]]

<expresion_consulta>

[ORDER BY {expression_columna|posicion_columna [ASC|DESC] }

[ ,...n ]]

[COMPUTE

{{AVG|COUNT|MAX|MIN|SUM}
expression[ ,...n ]]

(expression)}[

,...n

[BY

[<FOR clausula_for>]

[OPTION (<query_hint>[ ,...n ])]

<expresion_consulta> ::=

{<especificacion_consulta>

[ {UNION

| ( < expresion_consulta > ) }

[ALL]|EXCEPT|INTERSECT}

<especificacion_consulta> |

[...n ]

<especificacion_consulta> ::=

SELECT [ALL|DISTINCT]

(<expresion_consulta>)

[TOP expresion [PERCENT] [WITH TIES] ]

<lista_seleccion>

[INTO nueva_tabla]

[FROM { <origen> } [ ,...n ] ]

[WHERE <condicion_busqueda> ]

[GROUP BY [ ALL ] expresion_agrupacion [ ,...n ]

[WITH { CUBE | ROLLUP } ]

[HAVING < condicion_busqueda > ]


Debido a la complejidad de la sentencia (en la sintaxis anterior no se han detallado algunos
elementos), la iremos viendo poco a poco, empezaremos por ver consultas bsicas para
luego ir aadiendo ms clusulas.
Empezaremos por ver las consultas ms simples, basadas en una sola tabla y nos
limitaremos a la siguiente sintaxis:

SELECT [ALL|DISTINCT]

[TOP expresion [PERCENT] [WITH TIES]]

<lista_seleccion>

FROM

<origen>

[WHERE

<condicion_busqueda> ]

[ORDER
[ ,...n ]]

BY

{expression_columna|posicion_columna

[ASC|DESC]}

3.2. Origen de datos FROM


De la sintaxis anterior, el elemento <origen> indica de dnde se va a extraer la informacin
y se indica en la clusula FROM, es la nica clusula obligatoria. En este tema veremos un
origen de datos basado en una sola tabla.
La sintaxis ser la siguiente:

<origen>::=

nb_tabla | nb_vista [[ AS ] alias_tabla ]


nb_tabla representa un nombre de tabla.
nb_vista un nombre de vista.
Tanto para las tablas como para las vistas, podemos hacer referencia a tablas que estn en
otras bases de datos (siempre que tengamos los permisos adecuados), en este caso tenemos
que cualificar el nombre de la tabla, indicando delante el nombre de la base de datos (Lgica)
y el nombre del esquema al que pertenece la tabla dentro de la base de datos.
Por ejemplo: MiBase.dbo.MiTabla se refiere a la tabla MiTabla que se encuentra en el
esquema dbo de la base de datos MiBase.
Cuando no se definen esquemas, SQL-Server crea uno por defecto en cada base de datos
denominado dbo.
Opcionalmente podemos definir un nombre de alias.
Un nombre de alias (alias_tabla) es un nombre alternativo que se le da a la tabla dentro de
la consulta.
Si se define un nombre de alias, dentro de la consulta, ser el nombre a utilizar para
referirnos a la tabla, el nombre original de la tabla ya no tendr validez.
Se utilizan los nombres de alias para simplificar los nombres de tablas a veces largos y
tambin cuando queremos combinar una tabla consigo misma; ya volveremos sobre los alias
de tabla cuando veamos consultas multitabla.

La palabra AS no aade ninguna operatividad, est ms por esttica.


Podemos escribir:

SELECT ...

FROM tabla1

Sacamos los datos de la tabla tabla1

SELECT ...

FROM tabla1 t1
Sacamos
asignamos un alias de tabla: t1

los datos de la tabla tabla1 y le

SELECT ...

FROM tabla1 AS t1

Es

equivalente a la sentencia anterior.

Si la tabla o la vista estn en otra base de datos del mismo equipo que est ejecutando la
instancia
de
SQL
Server,
se
utiliza
el
nombre
cualificado
con
el
formatonbBaseDatos.nbEsquema.nbTabla.
Si la tabla o la vista estn fuera del servidor local en un servidor vinculado, se utiliza un
nombre de cuatro partes con el formato nbservidor.catalogo.nbEsquema.nbTabla.
Volveremos ms adelante sobre las conexiones remotas.

Unidad 3. Consultas simples (II)


3.3. La lista de seleccin
En la lista de seleccin <lista_seleccion> indicamos las columnas que se tienen que
visualizar en el resultado de la consulta.
<lista_seleccion> ::=

| {nombre_tabla|nombre_vista|alias_tabla}.*

| { [{nombre_tabla|nombre_vista|alias_tabla}.]

{nb_columna|$IDENTITY|$ROWGUID}

|<expresion>

}[[AS] alias_columna]

| alias_columna = <expresion>

} [ ,...n ]

Separamos la definicin de cada columna por una coma y las columnas del resultado
aparecern en el mismo orden que en la lista de seleccin.
Para cada columna del resultado su tipo de datos, tamao, precisin y escala son los
mismos que los de la expresin que da origen a esa columna.
Podemos definir las columnas del resultado de varias formas, mediante:

Una expresin simple:


o

una referencia a una funcin.

una variable local

una constante

una columna del origen de datos,

Una subconsulta escalar, que es otra instruccin SELECT que devuelve un nico valor y
se evala para cada fila del origen de datos (esto no lo veremos de momento).

Una expresin compleja generada al usar operadores en una o ms expresiones


simples.

La palabra clave *.

La asignacin de variables con el formato @variable_local = expresin.

La palabra clave $IDENTITY.

La palabra clave $ROWGUID.

3.4. Columnas del origen de datos


Cuando queremos indicar en la lista de seleccin una columna del origen de datos, la
especificamos mediante su nombre simple o nombre cualificado. El nombre cualificado
consiste en el nombre de la columna precedido del nombre de la tabla donde se encuentra la
columna.
Si en el origen de datos hemos utilizado una vista o un nombre de alias, deberemos utilizar
ese nombre. Es obligatorio utilizar el nombre cualificado cuando el nombre de la columna
aparece en ms de una tabla del origen de datos.
Ejemplos de consulta simple.
Listar nombres, oficinas, y fechas de contrato de todos los empleados:
SELECT

FROM

nombre, oficina, contrato

empleados;

El resultado sera:
nombre

oficina

contrato

Antonio Viguer

12

1986-10-20

Alvaro Jaumes

21

1986-12-10

Juan Rovira

12

1987-03-01

Jos Gonzlez

12

1987-05-19

Vicente Pantalla

13

1988-02-12

Luis Antonio

11

1988-06-14

Jorge Gutirrez

22

1988-11-14

Ana Bustamante

21

1989-10-12

Mara Sunta

11

1999-10-12

Juan Victor

NULL

1990-01-13

Listar una tarifa de productos:

SELECT

FROM

idfab, idproducto, descripcion, productos.precio

productos;

Hemos cualificado la columna precio aunque no es necesario en este caso.


El resultado sera:
Idfab

idproducto

descripcion

precio

aci

41001

arandela

0,58

aci

41002

bisagra

0,80

aci

41003

art t3

1,12

aci

41004

art t4

1,23

aci

4100x

junta

0,26

aci

4100y

extractor

28,88

aci

4100z

mont

26,25

bic

41003

manivela

6,52

bic

41089

rodamiento

2,25

Unidad 3. Consultas simples (III)


3.5. Alias de columna
Por defecto, en el encabezado de cada columna del resultado, aparece el nombre de la
columna origen, pero esto se puede cambiar definiendo un alias de columna, el alias de
columna es un nombre alternativo que se le da a esa columna.
El alias de columna se indica mediante la clusula AS. Se escribe el nuevo texto tal cual sin
comillas
siguiendo
las
reglas
de
los
identificadores.
Ejemplo:
SELECT numclie,nombre AS

FROM clientes;
El resultado ser :

nombrecliente

Numclie

nombrecliente

2101

Luis Garca Antn

2102

Alvaro Rodrguez

2103

Jaime Llorens

en vez de:
Numclie

nombre

2101

Luis Garca Antn

2102

Alvaro Rodrguez

2103

Jaime Llorens

La palabra AS es opcional.
SELECT numclie,nombre nombrecliente

FROM clientes;
Sera equivalente a la consulta anterior
Si queremos incluir espacios en blanco en el nombre lo debemos encerrar entre corchetes.
SELECT numclie,nombre AS [nombre cliente]

FROM clientes;
Nota importante: Este nombre de alias se podr utilizar en la lista de seleccin y en la
clusula ORDER BY pero no en la clusula WHERE.

3.6. Funciones
Existen funciones que podemos utilizar en la lista de seleccin, e incluso en otras clusulas
que veremos ms adelante, como el WHERE. Las principales funciones son las siguientes:
Funciones de fecha:
Funcin

Descripcin

Ver
+

GETDATE

Devuelve la fecha actual.

GETUTCDATE

Devuelve la hora UTC.

DATEPART

Devuelve un entero que corresponde a la parte de la fecha solicitada.

DAY

Devuelve el da de la fecha indicada.

MONTH

Devuelve el mes de la fecha indicada.

YEAR

Devuelve el ao de la fecha indicada.

DATENAME

Devuelve una cadena de caracteres que representa el valor de la unidad


especificada de una fecha especificada.

DATEADD

Devuelve un valor datetime nuevo que resulta de sumar un intervalo de


tiempo a una fecha especificada.>

DATEDIFF

Devuelve el n de intervalos que hay entre dos fechas.

@@DATEFIRST

Devuelve el primer da de la semana establecido con SET DATEFIRST.

SET DATEFIRST

Establece el primer da de la semana en un nmero del 1 al 7.

Unidad 3. Consultas simples (IV)


Funciones de cadena:
Funcin

Descripcin

ASCII

Devuelve el valor de cdigo ASCII del carcter situado ms a la izquierda de una expresin
de caracteres.

CHAR

Devuelve el carcter ASCII del entero indicado.

NCHAR

Devuelve el carcter Unicode del entero indicado.

UNICODE

Devuelve el entero que se corresponde al carcter Unicode indicado.

LEN

Devuelve el total de caracteres de una cadena, excluidos los espacios en blanco finales.

LTRIM

Devuelve una cadena tras quitarle los espacios en blanco iniciales.

RTRIM

Devuelve una cadena tras quitarle los espacios en blanco finales.

LEFT

Devuelve los N ltimos caracteres de una cadena.

RIGHT

Devuelve los N primeros caracteres de una cadena.

SUBSTRING

Devuelve parte de una expresin.

LOWER

Devuelve la cadena convertida a minsculas.

UPPER

Devuelve la cadena convertida a maysculas.

REPLACE

Reemplaza una determinada cadena.

STUFF
QUOTENAME

Elimina el nmero de caracteres especificado e inserta otro conjunto de caracteres en el


punto de inicio indicado.
Devuelve una cadena Unicode con los delimitadores agregados para convertirla en un
identificador delimitado vlido de Microsoft SQL Server 2005.

SPACE

Devuelve una cadena de espacios repetidos.

STR

Devuelve una cadena de caracteres a partir de datos numricos.

REPLICATE

Repite una cadena N veces.

REVERSE

Devuelve una cadena invertida.

CHARINDEX

Devuelve la posicin inicial de la expresin especificada en una cadena de caracteres.

PATINDEX

Devuelve la posicin inicial de la primera repeticin de un patrn en la expresin


especificada, o ceros si el patrn no se encuentra, en todos los tipos de datos de texto y
caracteres.

Otras funciones:

Funcin

Descripcin

ROUND

Redondea un valor a la longitud y precisin indicadas.

CAST y CONVERT

Convierten de un tipo de datos a otro de forma explcita.

CASE

Evala una lista de condiciones.

ISNULL

Reemplaza el valor NULL por otro especificado.

COALESCE

Devuelve la primera expresin distinta de NULL entre sus argumentos.

Unidad 3. Consultas simples (V)


3.7. Columnas calculadas
Adems de las columnas que provienen directamente de la tabla origen, una consulta SQL puede incluir columnas
calculadas cuyos valores se evalan a partir de una expresin.
La expresin puede contener cualquier operador vlido (+, -, *, /, &), cualquier funcin vlida, nombres de columnas del
origen de datos, nombres de parmetros o constantes y para combinar varias operaciones se pueden utilizar los parntesis.
Ejemplos de columnas calculadas:
Listar la ciudad, regin y el supervit de cada oficina. Consideraremos el supervit como el volumen de ventas que se
encuentran por encima o por debajo del objetivo de la oficina.
SELECT ciudad, region, (ventas-objetivo) AS superavit

FROM oficinas;
El resultado ser:
ciudad

region

superavit

Valencia

este

11800,00

Alicante

este

-6500,00

Castellon

este

1800,00

Badajoz

oeste

11100,00

A Corua

oeste

-11400,00

Madrid

centro

NULL

Madrid

centro

-10000,00

Pamplona

norte

NULL

Valencia

este

-90000,00

De cada producto queremos saber el id de fabricante, id de producto, su descripcin y el valor de sus existencias.

SELECT idfab,idproducto,descripcion,(existencias*precio) AS valoracion

FROM productos;
El resultado sera:

Ver
+

Idfab

idproducto

descripcion

valoracion

aci

41001

arandela

160,66

aci

41002

bisagra

133,60

aci

41003

art t3

231,84

aci

41004

art t4

170,97

aci

4100x

junta

9,62

aci

4100y

extractor

722,00

aci

4100z

mont

735,00

bic

41003

manivela

19,56

bic

41089

rodamiento

175,50

Para practicar puedes realizar este Ejercicio Columna calculada.

Unidad 3. Consultas simples (VI)


Listar el nombre, mes y ao del contrato de cada vendedor.
SELECT nombre, MONTH(contrato) AS
AS [Ao de contrato]

FROM

[Mes de contrato], YEAR(contrato)

empleados;

El resultado ser:
Nombre

Mes de contrato

Ao de contrato

Antonio Viguer

10

1986

Alvaro Jaumes

12

1986

Juan Rovira

1987

Para practicar puedes realizar este Ejercicio Funciones en la lista de seleccin.


Listar las ventas en cada oficina con el formato: 22 tiene ventas de 186,042.00
SELECT

oficina, 'tiene ventas de ' AS [ ], ventas

FROM oficinas;

El resultado sera:
oficina

ventas

11

tiene ventas de

69300,00

12

tiene ventas de

73500,00

13

tiene ventas de

36800,00

21

tiene ventas de

83600,00

22

tiene ventas de

18600,00

23

tiene ventas de

NULL

24

tiene ventas de

15000,00

26

tiene ventas de

NULL

28

tiene ventas de

0,00

El incluir una constante como columna en la lista de seleccin puede parecer intil (se
repetir el mismo valor en todas las filas) pero veremos ms adelante que tiene utilidad en
ciertos casos.
Tambin podemos utilizar la sintaxis:
alias_columna = <expresion>
Ejemplo:
SELECT oficina, superavit =

ventas-objetivo

Esto tiene el mismo efecto que


SELECT oficina, ventas-objetivo AS

superavit

Unidad 3. Consultas simples (VII)


3.8. Utilizacin del asterisco *
Si queremos visualizar todas las columnas del origen de datos, en lugar de indicar todas las
columnas una a una se puede utilizar el carcter de sustitucin *.

Mostrar todos los datos de la tabla oficinas.


SELECT

FROM

oficinas;

Obtener todos los datos y el supervit de cada oficina.


SELECT

FROM

*, (ventas-objetivo) AS superavit

oficinas;

Tambin podemos cualificar el * con un nombre de tabla, de vista o un alias de tabla:


SELECT oficinas.*

FROM oficinas;
oficinas.* se interpreta como: todas las columnas de la tabla oficinas.
Esta forma se utiliza normalmente cuando el origen est basado en varias tablas y
queremos indicar todas las columnas no del origen completo sino de una tabla concreta.
Para practicar puedes realizar este Ejercicio La palabra clave *.

3.9. Las palabras clave $IDENTITY y $ROWGUID


La palabra clave $IDENTITY se interpreta como la columna de la tabla que tiene la
propiedad IDENTITY (la columna de identidad que vimos en un tema anterior).
Por ejemplo, si en la columna codigo de la tabla usuarios (BD Biblio) se ha definido la
propiedad IDENTITY.
SELECT $IDENTITY, nombre, apellidos

FROM usuarios;
Es equivalente a:

SELECT codigo, nombre, apellidos

FROM usuarios;
La palabra clave $ROWGUID se interpreta como la columna de la tabla que tiene la
propiedad ROWGUIDCOL y se puede utilizar de la misma forma que $IDENTITY.

Unidad 3. Consultas simples (VIII)


3.10. Ordenacin de las filas del resultado ORDER BY
Si queremos que las filas del resultado de la consulta aparezcan ordenadas, lo podemos
indicar mediante la clusula ORDER BY.
ORDER BY {expression_columna|posicion_columna [ASC|DESC]}[ ,...n ]
Podemos indicar una columna o varias separadas por una coma, la columna de ordenacin
se especifica mediante el nombre de columna en el origen de datos o su posicin dentro de la
lista de seleccin. Si utilizamos el nombre de columna, no hace falta que la columna aparezca
en la lista de seleccin. Si utilizamos la posicin es la posicin de la columna dentro de la lista
de seleccin empezando en 1.
Por defecto la filas se ordenarn en modo ascendente (ASC), de menor a mayor; si
queremos invertir ese orden aadimos detrs de la columna la palabra DESC.

Si la columna de ordenacin es alfanumrica, las filas se ordenarn por orden alfabtico.

Si la columna de ordenacin es numrica, las filas se ordenarn de menor a mayor.

Si la columna de ordenacin es de tipo fecha, las filas se ordenarn de ms antigua a


ms reciente o futura.

Ejemplos:
Mostrar las ventas de cada oficina, ordenadas por orden alfabtico de regin y dentro de
cada regin por ciudad.
SELECT

FROM

ORDER

oficina, region, ciudad, ventas

oficinas

BY region, ciudad;

Da como resultado:
Oficina

region

ciudad

ventas

24

centro

Aranjuez

15000,00

23

centro

Madrid

NULL

12

este

Alicante

73500,00

13

este

Castelln

36800,00

11

este

Valencia

69300,00

28

este

Valencia

0,00

26

norte

Pamplona

NULL

22

oeste

A Corua

18600,00

21

oeste

Badajoz

83600,00

Listar las oficinas de manera que las oficinas de mayores ventas aparezcan en primer lugar.
SELECT

FROM

ciudad, region, ventas

oficinas

ORDER

BY ventas DESC;
ciudad

region

ventas

Badajoz

oeste

83600,00

Alicante

este

73500,00

Valencia

este

69300,00

Castellon

este

36800,00

A Corua

oeste

18600,00

Aranjuez

centro

15000,00

Valencia

este

0,00

Pamplona

norte

NULL

Madrid

centro

NULL

Listar las oficinas clasificadas en orden descendente de rendimiento de ventas, de modo


que las de mayor rendimiento aparezcan las primeras.
SELECT

FROM

ciudad, region, ventas-objetivo

oficinas

ORDER

BY 3 DESC;

Lo mismo que el anterior pero agrupadas por regin.


SELECT

region, ciudad, (ventas-objetivo) AS superavit

FROM oficinas

ORDER BY region, superavit DESC;


Resultado:
Region

ciudad

superavit

centro

Aranjuez

-10000,00

centro

Madrid

NULL

este

Valencia

11800,00

este

Castelln

1800,00

este

Alicante

-6500,00

este

Valencia

-90000,00

norte

Pamplona

NULL

oeste

Badajoz

11100,00

oeste

A Corua

-11400,00

En este caso hemos utilizado el alias de columna para hacer referencia a la columna
calculada y tambin se puede observar que las filas aparecen ordenadas por regin
ascendente (no hemos incluido nada despus del nombre de la columna) y dentro de cada
regin por supervit y descendente.
Para practicar puedes realizar este Ejercicio Ordenar los datos.

Unidad 3. Consultas simples (IX)


3.11. Eliminar filas duplicadas DISTINCT/ALL
SQL no elimina las filas duplicadas en el resultado de la consulta, si nosotros no
queremos que se repitan las filas, tenemos la clusula DISTINCT.
Al incluir la clusula DISTINCT en la SELECT, se eliminar del resultado las
repeticiones de filas de resultado. Si por el contrario queremos que aparezcan todas las
filas seleccionadas podemos incluir la clusula ALL o nada, ya que ALL es el valor por
defecto.
Listar los n de empleado de los directores de las oficinas.
SELECT

dir

FROM oficinas;

dir
106
104
105
108
108
108
108
NULL
NULL

Si un mismo empleado dirige varias oficinas (por ejemplo el 108), su cdigo aparece
repetido en el resultado. Para evitarlo modificamos la consulta:
SELECT DISTINCT dir

FROM oficinas;

dir
NULL
104
105
106
108

Han desaparecido los valores duplicados.


Los que se eliminan son valores duplicados de filas del resultado, por ejemplo:
SELECT DISTINCT dir, region

FROM oficinas;

dir

region

NULL

este

NULL

norte

104

este

105

este

106

este

108

centro

108

oeste

Ahora el 108 aparece dos veces porque las dos filas donde aparece no son iguales
(porque tienen distinta regin).
NOTA: La clusula DISTINCT hace que la consulta tarde algo ms en ejecutarse
debido al proceso adicional de buscar y eliminar las repeticiones, por lo que se
aconseja utilizarla nicamente cuando sea imprescindible.
Para practicar puedes realizar este Ejercicio Eliminar filas duplicadas.

Unidad 3. Consultas simples (X)

3.12. La clusula TOP


[TOP <expresin>

[PERCENT] [WITH TIES]]

La clusula TOP indica que en el resultado no deben aparecer todas las filas resultantes
sino un cierto nmero de registros, las n primeras. Si la consulta incluye la clusula ORDER
BY, se realiza la ordenacin antes de extraer los n primeros registros.
La expresin representa ese nmero n y debe devolver un nmero entero sin signo.
Por ejemplo tenemos la siguiente tabla:
SELECT

* FROM

productos:

Si ordenamos por ventas:


SELECT * FROM

productos

ORDER BY ventas;

Obtenemos el siguiente resultado:


Si aadimos la clusula TOP:

SELECT TOP 3 *

FROM productos

ORDER BY ventas
Obtenemos los 3 primeros registros:

Si existen ms registros con las mismas ventas que el ltimo valor de la lista, stos no
saldrn en el resultado de la consulta.
En el ejemplo el registro con cod = 2 no sale en el resultado y tiene las mismas ventas que
cod = 3.
Si queremos que salgan aadimos la clusula WITH TIES. La clusula WITH TIES slo se
puede emplear si la SELECT incluye un ORDER BY, de lo contrario dar error.
Si aadimos la clusula WITH TIES:
SELECT TOP 3 WITH TIES *

FROM productos

ORDER BY ventas
Obtenemos:

Se incluyen en el resultado todos los registros que tienen ventas iguales al ltimo registro.
Otro ejemplo:
SELECT TOP 10 oficina, ciudad,

ventas

FROM oficinas

ORDER BY ventas;
Devuelve las 10 peores oficinas en cuanto a ventas: ordenamos las oficinas por ventas de
menor a mayor y sacamos las 10 primeras.
Si incluimos la palabra PERCENT, entonces n no indica el nmero de registros a recuperar
sino el porcentaje de registros a recuperar del total de filas recuperadas despus de ejecutar
la clusula WHERE.
SELECT TOP 50 PERCENT

FROM productos

ORDER BY ventas
Devuelve:

Si el porcentaje no da exacto, siempre redondea al alza.


Para practicar puedes realizar este Ejercicio La clusula TOP.

Unidad 3. Consultas simples (XI)


3.13. Seleccin de filas WHERE
La clusula WHERE se emplea para especificar las filas que se desean recuperar del
origen de datos.
WHERE <condicion_bsqueda>

<condicion_bsqueda> ::=

{ [NOT]<predicado>

|(<condicion_bsqueda>)

[{AND|OR} [NOT] {<predicado>|(<condicion_bsqueda>)}]

[ ...n ]

En el resultado de la consulta slo aparecern las filas que cumplan que la condicin de
bsqueda sea TRUE, los valores NULL no se incluyen, por lo tanto, en las filas del resultado.
La condicin de bsqueda puede ser una condicin simple o una condicin compuesta por
varias condiciones (predicados) unidas por operadores AND y OR, no hay lmite en cuanto al
nmero de predicados que se pueden incluir. En las condiciones compuestas se pueden
utilizar parntesis para delimitar predicados y se aconseja su uso cuando se incluyen
operadores AND y OR en la misma condicin de bsqueda.

3.14. Predicados
En SQL tenemos 7 tipos de predicados, condiciones bsicas de bsqueda:

Comparacin estndar

Pertenencia a un intervalo (BETWEEN)

Pertenencia a un conjunto (IN)

Test de valor nulo (IS NULL).

Coincidencia con patrn (LIKE)

Si contiene (CONTAINS)

FREETEXT

Comparacin estndar.
Compara el valor de una expresin con el valor de otra. Para la comparacin se pueden
emplear = , <> , !=, < , <= , !<, > , >= ,!>
Sintaxis:
<expresion>

{=|<>|!=|>|>=|!>|<|<=|!<} <expresion>

<expresion> Puede ser:

Un nombre de columna,

una constante,

una funcin (inclusive la funcin CASE),

una variable,

una subconsulta escalar o

cualquier combinacin de nombres de columna, constantes y funciones conectados


mediante uno o varios operadores o una subconsulta.

Ejemplo:
Listar los "buenos" vendedores (los que han rebasado su cuota).

SELECT numemp, nombre,

ventas, cuota

FROM empleados

WHERE ventas > cuota


numemp

nombre

ventas

cuota

101

Antonio Viguer

30500,00

30000,00

102

Alvaro Jaumes

47400,00

35000,00

103

Juan Rovira

28600,00

27500,00

105

Vicente Pantalla

36800,00

35000,00

106

Luis Antonio

29900,00

27500,00

108

Ana Bustamante

36100,00

35000,00

109

Mara Sunta

39200,00

3000,00

Las columnas que aparecen en el WHERE no tienen por qu aparecer en la lista de


seleccin, esta instruccin es igual de vlida:
SELECT numemp, nombre

FROM empleados

WHERE ventas > cuota;


Hallar vendedores contratados antes de 1988.
SELECT numemp, nombre, contrato

FROM empleados

WHERE contrato < '01/01/1988';


numemp

nombre

contrato

101

Antonio Viguer

1986-10-20

102

Alvaro Jaumes

1986-12-10

103

Juan Rovira

1987-03-01

104

Jos Gonzlez

1987-05-19

Tambin podemos utilizar funciones, sta es equivalente a la anterior:


SELECT numemp, nombre

FROM empleados

WHERE YEAR(contrato) < 1988;

La funcin YEAR(fecha) devuelve el ao de una fecha.


Hallar oficinas cuyas ventas estn por debajo del 80% de su objetivo:
SELECT

FROM

oficina

oficinas

WHERE

ventas < (.8 * objetivo);

Hallar las oficinas dirigidas por el empleado 108:


SELECT

oficina

FROM

WHERE

oficinas

dir = 108;

Unidad 3. Consultas simples (XII)


Pertenencia a un intervalo. BETWEEN
<expresion> [NOT] BETWEEN <expresion2> AND <expresion3>
Examina si el valor de la expresin de test est en el rango delimitado por los valores
resultantes de expresion1 y expresion2, estos valores no tienen porqu estar ordenados en
ANSI/ISO; expresion1 debe ser menor o igual a expresion2.
Hallar vendedores cuyas ventas estn entre 20.000 euros y 50.000.
SELECT numemp, nombre, ventas

FROM empleados

WHERE

ventas BETWEEN 20000 AND

numemp

nombre

100000;
ventas

101

Antonio Viguer

30500,00

102

Alvaro Jaumes

47400,00

103

Juan Rovira

28600,00

105

Vicente Pantalla

36800,00

106

Luis Antonio

29900,00

108

Ana Bustamante

36100,00

109

Mara Sunta

39200,00

La instruccin anterior es equivalente a:

SELECT numemp, nombre, ventas

FROM empleados

WHERE

ventas >= 20000 AND ventas <=100000;

Parece que con BETWEEN se lee mejor.


Observa que no hemos utilizado separadores de millares (100.000), porque se habra
interpretado por una coma decimal.
Para practicar puedes realizar este Ejercicio Intervalos con BETWEEN.
Test de pertenencia a conjunto IN
<expresion> IN (

<exp_valor> [ ,...n ] )

Examina si el valor de la expresion es uno de los valores incluidos en la lista de valores


indicados entre parntesis. Se pueden expresar los valores mediante cualquier expresin, la
nica condicin es que todas las exp_valor devuelvan el mismo tipo de datos.
Ejemplo:
Obtener los empleados que trabajan en las oficinas 11, 20 o 22:
SELECT oficina, numemp, nombre

FROM empleados

WHERE oficina IN (11,20,22);


oficina

numemp

nombre

11

106

Luis Antonio

22

107

Jorge Gutirrez

11

109

Mara Sunta

Para practicar puedes realizar este Ejercicio Pertenencia a un conjunto con IN.
Test de valor nulo IS NULL
<expression> IS [NOT] NULL
Una condicin de bsqueda puede ser TRUE, FALSE o NULL/UNKNOW, este ltimo caso
se produce cuando algn campo que interviene en la condicin tiene valor NULL.
A veces es til comprobar explcitamente los valores NULL en una condicin de bsqueda ya
que estas filas puede que queramos darles un tratamiento especial, para ello tenemos el
predicado IS NULL.
Este test produce un valor TRUE o FALSE, por lo que se podr combinar con otras
condiciones. El valor NULL no es en s un valor por eso no lo podemos utilizar en una
igualdad.
SELECT numemp,nombre

FROM empleados

WHERE oficina = NULL;


Esta instruccin no da error pero no obtiene lo que en principio parece que quiere obtener.
No obtenemos los empleados cuya oficina sea un valor nulo (es decir los empleados que no
tienen oficina), no obtenemos nada, en cambio los obtendremos utilizando el test de valor
nulo:
SELECT numemp,nombre, oficina

FROM empleados

WHERE oficina IS NULL;


Resultado:
numemp
110

nombre
Juan Victor

oficina
NULL

Juan Victor es el nico empleado que no tiene oficina asignada.


Listar los vendedores asignados a alguna oficina.
SELECT numemp, nombre, oficina

FROM empleados

WHERE oficina IS NOT NULL;


numemp

nombre

oficina

101

Antonio Viguer

12

102

Alvaro Jaumes

21

103

Juan Rovira

12

104

Jos Gonzlez

12

105

Vicente Pantalla

13

106

Luis Antonio

11

107

Jorge Gutirrez

22

108

Ana Bustamante

21

109

Mara Sunta

11

Para practicar puedes realizar este Ejercicio Test de valor nulo.

Unidad 3. Consultas simples (XIII)

Test de correspondencia con patrn LIKE


Se utiliza cuando queremos comparar el valor de una columna con un patrn en el que se
utilice caracteres comodines.

<expression>

[NOT] LIKE

<patron>

[ESCAPE 'car_escape']

Con expresin indicamos el valor a comparar (normalmente ser el nombre de una


columna) y patrn es la cadena que se busca. El patrn es de tipo texto y tiene que escribirse
entre comillas simples. Dentro del patrn podemos utilizar los siguientes comodines:
%

representa cualquier cadena de cero o ms caracteres.

SELECT numemp,nombre

FROM empleados

WHERE nombre LIKE An%;


numemp

nombre

101

Antonio Viguer

108

Ana Bustamante

Obtiene todos los nombres que empiecen por An.


SELECT numemp,nombre

FROM empleados

WHERE nombre LIKE %z;


numemp

nombre

104

Jos Gonzlez

107

Jos Gonzlez

Obtiene los nombres que acaban en z.

SELECT numemp,nombre

FROM empleados

WHERE nombre LIKE %on%;


numemp

nombre

101

Antonio Viguer

104

Jos Gonzlez

106

Luis Antonio

Obtiene los nombres que contienen on.


_

representa cualquier carcter (slo uno).

SELECT numemp,nombre

FROM empleados

WHERE nombre LIKE '__a%';


numemp

nombre

103

Juan Rovira

108

Ana Bustamante

110

Juan Victor

Obtiene los nombres cuya tercera letra sea una a (en el patrn tenemos dos caracteres
subrayado).
[

] sirve para indicar un carcter cualquiera perteneciente al conjunto indicando.


El conjunto se indica enumerando los caracteres o indicando un intervalo.

SELECT numemp,nombre

FROM empleados

WHERE nombre LIKE '[a-d]%';


Obtiene los nombres que empiezan por cualquier letra de la a a la d.
Es equivalente a escribir:
SELECT numemp,nombre

FROM empleados

WHERE nombre LIKE '[abcd]%';


[^] significa cualquier carcter individual que no se encuentre en el conjunto.
SELECT numemp,nombre

FROM empleados

WHERE nombre LIKE '[^abcd]%';


Y
SELECT numemp,nombre

FROM empleados

WHERE nombre LIKE '[^a-d]%';


Obtienen los nombres que no empiecen por a, b, c ni d.
Es importante tener en cuenta que dentro del patrn el espacio en blanco es considerado
como un carcter ms, si colocamos dos espacios en el patrn, se buscarn dos espacios en
el campo.
Si queremos incluir en el patrn uno de los caracteres comodines y que no sea interpretado
como un comodn, sino como un carcter normal, lo tenemos que encerrar entre corchetes o
utilizar un carcter de escape.
[ESCAPE 'car_escape']

La clusula ESCAPE es opcional y permite definir un carcter de escape.


Un carcter de escape es un carcter que se coloca delante de un carcter comodn para
indicar que el comodn no debe interpretarse como tal, sino como un carcter normal.
Por ejemplo queremos buscar los nombres compuestos que incluyen un subrayado. En
este caso tenemos que poner el carcter _ como un carcter normal no como un comodn, as
que lo escribiremos as:
SELECT numemp,nombre

FROM empleados

WHERE nombre LIKE '%[_]%';


O bien,
SELECT numemp,nombre

FROM empleados

WHERE nombre LIKE '%!_%' ESCAPE '!';


Para practicar puedes realizar este Ejercicio Test de correspondencia con LIKE.
Existen dos predicados ms para evaluar expresiones: CONTAINS y FREETEXT. Puedes
ver ms informacin sobre ellas en este avanzado

Unidad 3. Consultas simples (XIV)


3.15. Condiciones de bsqueda compuestas
En una clusula WHERE podemos incluir una condicin de bsqueda simple (formada por
un solo predicado) o compuesta (formada por la combinacin de predicados unidos por los
operadores lgicos NOT, AND, OR).
Cuando la condicin incluye varios operadores lgicos, el orden de prioridad de estos
operadores es:

NOT (el ms alto),

seguido de AND y OR (estos dos al mismo nivel).

Como siempre, se pueden utilizar parntesis para alterar esta prioridad en una condicin de
bsqueda.
El orden de evaluacin de los operadores lgicos puede variar dependiendo de las
opciones elegidas por el optimizador de consultas.
Los operadores lgicos pueden devolver tres valores distintos: TRUE, FALSE, NULL
(UNKNOWN).
Tablas de verdad de los operadores:
AND Combina dos condiciones y se evala como TRUE cuando ambas condiciones son
TRUE.
AND

TRUE

FALSE

NULL

TRUE

TRUE

FALSE

NULL

FALSE

FALSE

FALSE

FALSE

NULL

NULL

FALSE

NULL

OR Combina dos condiciones y se evala como TRUE cuando alguna de las condiciones
es TRUE.
OR

TRUE

FALSE

NULL

TRUE

TRUE

TRUE

TRUE

FALSE

TRUE

FALSE

NULL

NULL

TRUE

NULL

NULL

NOT Niega la expresin booleana que especifica el predicado


NOT

TRUE

FALSE

NULL

FALSE

TRUE

NULL

Hallar los vendedores que estn por debajo de su cuota y tienen ventas inferiores a 30.000.
SELECT nombre

FROM empleados

WHERE ventas < cuota AND ventas

< 30000;

Hallar los vendedores que estn debajo de su cuota, pero cuyas ventas no sean inferiores a
150.000.
SELECT nombre

FROM empleados

WHERE ventas < cuota AND ventas

< 150000;

Hallar las oficinas no dirigidas por el empleado 108


SELECT oficina

FROM oficinas

WHERE NOT dir = 108;


O
SELECT oficina

FROM oficinas

WHERE

dir <> 108;

Devuelven:
oficina
11
12
13
Las oficinas sin director no aparecen, para que aparezcan deben aadir otro predicado:

SELECT oficina, dir

FROM oficinas

WHERE NOT dir = 108 or dir is


oficina

null;

dir

11

106

12

104

13

105

26

NULL

28

NULL

Para practicar puedes realizar este Ejercicio Consultas con mltiples condiciones.

Ejercicios unidad 3: Consultas simples


Te aconsejamos que, para realizar consultas SQL ms fcilmente, te hagas estas
preguntas:

Dnde estn los datos necesarios? La respuesta dar la FROM.

Qu columnas quiero que se visualicen en el listado? La respuesta dar la lista de


seleccin (SELECT).

Quiero que se ordenen por algn valor? Si la respuesta es s, necesitars utilizar


ORDER BY.

Tienen que aparecer todas las filas del resultado? Si la respuesta es NO, debers:
o

Utilizar TOP para quedarte con las N primeras.

Utilizar DISTINCT si no quieres que se muestren las repetidas.

O bien utilizar la clusula WHERE para expresar la condicin que deben


cumplir para ser mostradas.

Para realizar los ejercicios, debers utilizar la base de datos GestionSimples, en la carpeta
Ejercicios del curso tienes el PDF Tablas_Gestion para consultar en qu tablas est cada
campo.

Ejercicio 1: Listas de seleccin


1. Listar todos los empleados.
Resultado:

Nume
mp

Nombre Eda Ofici


d
na

Titulo

Contrato Jefe

Cuota

ventas

101

Antonio
Viguer

45

12

representa
nte

1986-1020
00:00:00.
000

104

30000,
00

30500,
00

102

Alvaro
Jaumes

48

21

representa
nte

1986-1210
00:00:00.
000

108

35000,
00

47400,
00

103

Juan
Rovira

29

12

representa
nte

1987-0301
00:00:00.
000

104

27500,
00

28600,
00

104

Jos
Gonzlez

33

12

dir ventas

1987-0519
00:00:00.
000

106

20000,
00

14300,
00

105

Vicente
Pantalla

37

13

representa
nte

1988-0212
00:00:00.
000

104

35000,
00

36800,
00

106

Luis
Antonio

52

11

director
general

1988-0614
00:00:00.
000

NUL
L

27500,
00

29900,
00

107

Jorge
Gutirrez

49

22

representa
nte

1988-1114
00:00:00.
000

108

30000,
00

18600,
00

108

Ana
Bustama
nte

62

21

dir ventas

1989-1012
00:00:00.
000

106

35000,
00

36100,
00

109

Mara

31

NUL

representa

1999-10-

106

3000,0

39200,

Sunta

nte

12
00:00:00.
000

00

110

Juan
Victor

41

NUL
L

representa
nte

1990-0113
00:00:00.
000

104

NULL

7600,0
0

111

Juan Gris

50

NUL
L

representa
nte

2005-0501
00:00:00.
000

NUL
L

10000,
00

60000,
00

112

Julin
Martorell

50

NUL
L

representa
nte

2006-0501
00:00:00.
000

NUL
L

10000,
00

91000,
00

113

Juan Gris

18

NUL
L

representa
nte

2007-0101
00:00:00.
000

NUL
L

10000,
00

0,00

2. Listar todos los empleados, al igual que en el ejercicio anterior, pero cambiando el
nombre de la columna contrato por Fecha de contrato.
Puedes consultar aqu las soluciones propuestas.

Ejercicio 2: Utilizando ORDER BY


1. Listar de cada regin las oficinas por orden de mejores ventas.
Resultado:

Regin

Ciudad

Ventas

NULL

Elx

0,00

NULL

Valencia

NULL

centro

Aranjuez

15000,00

Centro

Mstoles

0,00

centro

Madrid

NULL

este

Alicante

73500,00

este

Valencia

69300,00

este

Castellon

36800,00

este

Valencia

2100,00

este

Valencia

0,00

norte

Pamplona

200000,00

norte

pamplona

NULL

oeste

Badajoz

84400,00

oeste

A Corua

18600,00

2. Saber los productos que tienen un precio superior o igual al precio de la mitad de los
productos.
Resultado:

Idfab

Idproducto

Descripcin

Precio

existencias

rei

2a44l

bomba l

45,00

12

rei

2a44r

bomba r

45,00

12

imm

779c

reostato 3

18,75

imm

775c

reostato 2

14,25

imm

773c

reostato

9,75

28

bic

41003

manivela

6,52

imm

887x

manivela

4,75

32

qsa

xk47

red

3,55

38

rei

2a44g

pas

3,50

14

fea

114

cubo

2,43

15

bic

41089

rodamiento

2,25

78

bic

41672

plato

1,80

fea

112

cubo

1,48

115

qsa

xk48a

red

1,48

37

Puedes consultar aqu las soluciones propuestas.

Ejercicio 2: Utilizando WHERE


1. Listar los empleados que tienen ventas pero que no han alcanzado su cuota.
Resultado:

Numemp

Nombre

Ventas

cuota

104

Jos Gonzlez

14300,00

20000,00

107

Jorge Gutirrez

18600,00

30000,00

2. Hallar los empleados que no estn a cargo del empleado 106.


Resultado:

Numemp

3.

nombre

101

Antonio Viguer

102

Alvaro Jaumes

103

Juan Rovira

105

Vicente Pantalla

106

Luis Antonio

107

Jorge Gutirrez

110

Juan Victor

111

Juan Gris

112

Julin Martorell

113

Juan Gris

Listar de cada jefe su cdigo y el cdigo y nombre de sus subordinados ordenados


por nombres.
Resultado:

Jefe

Numemp

nombre

104

101

Antonio Viguer

104

103

Juan Rovira

104

110

Juan Victor

104

105

Vicente Pantalla

106

108

Ana Bustamante

106

104

Jos Gonzlez

106

109

Mara Sunta

108

102

Alvaro Jaumes

108

107

Jorge Gutirrez

Puedes consultar aqu las soluciones propuestas.

Prueba evaluativa unidad 3: Consultas simples


Slo una respuesta es vlida por pregunta. Haz clic en la respuesta que consideres correcta.
Contesta todas las preguntas y haz clic en el botn Corregir para ver la solucin.
Si pulsas Restablecer podrs repetir la evaluacin.

1. La clusula FROM indica el origen de datos para la consulta y puede constar de:
a) Una tabla.
b) Una vista.
c) A y B son ciertas.
d) A y B son falsas.

2. Si queremos utilizar la tabla de una base de datos externa (Base2) en nuestra consulta...
a) Deberemos cualificarla, de la siguiente forma: FROM Base2.tabla.

b) Podremos indicar el nombre de la tabla directamente : FROM tabla.


c) No podemos utilizar ms de una base de datos en la misma consulta.
d) Deberemos desconectar de la base de datos actual y conectar con la Base2.

3. El alias se puede aplicar en:


a) El origen, por ejemplo: tablaempleados as Empleados
b) La lista de seleccin, por ejemplo: nomemp as [Nombre Empleado]
c) A y B son ciertas.
d) A y B son falsas.

4. Seala cul de los siguientes ejemplos es correcto:


a) SELECT nom as Nombre FROM empleados WHERE Nombre='Juan'.
b) SELECT nom Nombre FROM empleados WHERE Nombre='Juan'
c) SELECT nom Nombre FROM empleados ORDER BY Nombre
d) SELECT nom Nombre FROM empleados ORDER BY Apellido='Garca'

5. Seala cul de los siguientes ejemplos es incorrecto:


a) SELECT precio_unidad = (importe/cantidad)...
b) SELECT (importe/cantidad) AS precio_unidad...
c) SELECT precio_unidad = ROUND(importe/cantidad)...
d) SELECT precio_unidad = ROUND((importe/cantidad), 2)...

6. Dnde utilizamos la palabra clave *?

a) En la lista de seleccin, para indicar que queremos mostrar todas las columnas del
origen indicado.
b) En el origen de datos, para indicar que queremos utilizar como origen todas las
tablas de la base de datos.
c) A y B son ciertas.
d) A y B son falsas.

7. Si a una consulta aplicamos una ordenacin mediante el ORDER BY...


a) Deberemos indicar si queremos ordenar de forma ascendente (ASC) o descendente
(DESC) o dar error.
b) Deberemos indicar si queremos ordenar de forma ascendente o descendente. Si no
indicamos nada, se ordenar de forma ascendente por defecto.
c) Deberemos indicar ASC o DESC, pero slo en caso de que se trate de un campo
alfabtico. Para otros tipos de datos no funciona (como fechas o campos numricos).
d) Todas son falsas.

8. La clusula DISTINCT...
a) Agiliza las consultas, porque debe mostrar menos resultados.
b) Se utiliza para no mostrar las filas que repitan el mismo valor en un determinado
campo (columna).
c) Se utiliza para no mostrar las filas que se repitan en todos sus campos, es decir, que
sea idnticas. Ralentiza la consulta porque debe evaluar al final si se repiten y eliminarlas del
listado generado.
d) Se ejecuta de forma predeterminada. Para que no sea as debemos indicar ALL, por
ejemplo: SELECT ALL oficina FROM empleados.
9. La clusula TOP...

a) Tiene ms sentido en consultas con ORDER BY. Al ejecutarse, primero se ordenan


segn un criterio y luego se extraen las N primeras.
b) Puede ir acompaada de WITH TIES, si queremos mostrar todos los valores iguales
al ltimo del ranking.
c) Puede ser porcentual, es decir, mostrar el 8% del total de registros, por ejemplo, para
que el listado sea proporcional a su volumen.
d) Todas son ciertas.

10. La clusula WHERE...


a) Permite indicar una condicin para filtrar los resultados. Por ejemplo: WHERE
nombre='Juan'.
b) Admite funciones. Por ejemplo: WHERE YEAR(contrato)=1985.
c) Admite intervalos de valores. Por ejemplo: WHERE YEAR(contrato) BETWEEN
1985 AND 1995.
d) Todas son ciertas.

Unidad 4. Consultas multitabla (I)


4.1. Introduccin
Hasta ahora hemos visto consultas que obtienen los datos de una sola tabla, en este
tema veremos cmo obtener datos de diferentes tablas.
En esta parte ampliaremos la clusula FROM y descubriremos nuevas palabras
reservadas (UNION, EXCEPT e INTERSECT) que corresponden a operaciones
relacionales.
Para obtener datos de varias tablas tenemos que combinar estas tablas mediante alguna
operacin basada en el lgebra relacional.
El lgebra relacional define una serie de operaciones cuyos operandos son tablas y
cuyo resultado es tambin una tabla.
Las operaciones de lgebra relacional implementadas en Transact-Sql son:

La unin UNION

La diferencia EXCEPT

La interseccin INTERSECT

El producto cartesiano CROSS JOIN

La composicin interna INNER JOIN

La composicin externa LEFT JOIN, RIGHT JOIN Y FULL JOIN

En todo el tema cuando hablemos de tablas nos referiremos tanto a las tablas que
fsicamente estn almacenadas en la base de datos como a las tablas temporales y a las
resultantes de una consulta o vista.

4.2. La unin de tablas UNION


La unin de tablas consiste en coger dos tablas y obtener una tabla con las filas de
las dos tablas, en el resultado aparecern las filas de una tabla y, a continuacin, las
filas de la otra tabla.
Para poder realizar la operacin, las dos tablas tienen que tener el mismo esquema
(mismo nmero de columnas y tipos compatibles) y la tabla resultante hereda los
encabezados de la primera tabla.
La sintaxis es la siguiente:
{< consulta >|(<

consulta >)}

UNION [ALL]

{<

consulta >|(< consulta >)}

[{UNION

[ORDER

[ALL] {< consulta >|(< consulta >)}}[ ...n ] ]

BY {expression_columna|posicion_columna [ASC|DESC]}

,...n ]]

< consulta > representa la especificacin de la consulta que nos devolver la tabla a
combinar.
Puede ser cualquier especificacin de consulta con la limitacin de que no admite la
clusula ORDER BY, los alias de campo se pueden definir pero slo tienen efecto
cuando se indican en la primera consulta ya que el resultado toma los nombres de
columna de esta.
Ejemplo: Suponemos que tenemos una tabla Valencia con las nuevas oficinas de
Valencia y otra tabla Madrid con las nuevas oficinas de Madrid y queremos obtener
una tabla con las nuevas oficinas de las dos ciudades:
SELECT oficina as OFI, ciudad FROM Valencia

UNION ALL

SELECT oficina,

ciudad FROM Madrid;

El resultado sera:
OFI

ciudad

11

Valencia

28

Valencia

23

Madrid

El resultado coge los nombres de columna de la primera consulta y aparecen


primero las filas de la primera consulta y despus las de la segunda.
Si queremos que el resultado aparezca ordenado podemos incluir la clusula
ORDER BY, pero despus de la ltima especificacin de consulta, y
expresion_columna ser cualquier columna vlida de la primera consulta.
SELECT oficina as OFI, ciudad FROM Valencia

UNION

SELECT oficina, ciudad FROM Madrid

ORDER BY ofi;

OFI

ciudad

11

Valencia

23

Madrid

28

Valencia

Ahora las filas aparecen ordenadas por el nmero de oficina y hemos utilizado el
nombre de columna de la primera consulta.
Cuando aparezcan en el resultado varias filas iguales, el sistema por defecto elimina
las repeticiones.
Si se especifica ALL, el sistema devuelve todas las filas resultante de la unin
incluidas las repetidas
El empleo de ALL tambin hace que la consulta se ejecute ms rpidamente ya que el
sistema no tiene que eliminar las repeticiones.
Se pueden combinar varias tablas con el operador UNION. Por ejemplo supongamos
que tenemos otra tabla Pamplona con las oficinas nuevas de Pamplona:
SELECT oficina, ciudad FROM Valencia

UNION

SELECT oficina, ciudad FROM Madrid

UNION

SELECT oficina, ciudad FROM Pamplona;

Combinamos las tres tablas.


Otro ejemplo:
Obtener todos los productos cuyo precio exceda de 20 o que se haya vendido ms de
300 euros del producto en algn pedido.
SELECT idfab, idproducto

FROM

productos

WHERE precio > 20

UNION

SELECT fab, producto

FROM pedidos

WHERE importe > 300;

Unidad 4. Consultas multitabla (II)


4.3. La diferencia EXCEPT
Aparecen en la tabla resultante las filas de la primera consulta que no aparecen en la
segunda.
Las condiciones son las mismas que las de la unin.
{<consulta>|(<consulta>)}

EXCEPT

{<consulta>|(<consulta>)}

[{EXCEPT

[ORDER

{<consulta>|(<consulta>)}}[ ...n ] ]

BY {expression_columna|posicion_columna [ASC|DESC]}

,...n ]]

Por ejemplo tenemos las tablas T1 y T2.


T1

1
2
4
5
6

T2

2
3
4
5

SELECT cod FROM T1

EXCEPT

SELECT codigo FROM T2;


Devuelve:
Cod
1
6
Ejemplo:
Listar los productos que no aparezcan en ningn pedido.

SELECT idfab, idproducto

FROM

productos

EXCEPT

SELECT DISTINCT fab, producto

FROM pedidos;
Para practicar puedes realizar este Ejercicio La diferencia EXCEPT.

4.4. La interseccin INTERSECT


Tiene una sintaxis parecida a las anteriores pero en el resultado de la interseccin
aparecen
las
filas
que
estn
simultneamente
en
las
dos
consultas.
Las condiciones son las mismas que las de la unin.
{ <consulta>|(<consulta>)}

INTERSECT

{<especificacion_consulta>|(<especificacion_consulta>)}

[{INTERSECT {<consulta>|(<consulta>)}} [ ...n ] ]

[ORDER

BY {expression_columna|posicion_columna [ASC|DESC]}

,...n ]]

Retomando el ejemplo anterior:


SELECT cod FROM T1

INTERSECT

SELECT cod FROM T2;


Devuelve:
Cod
2
4
5
Ejemplo: Obtener todos los productos que valen ms de 20 euros y que adems se haya
vendido en un pedido ms de 300 euros de ese producto.
SELECT idfab, idproducto

FROM

productos

WHERE precio > 20

INTERSECT

SELECT fab, producto

FROM pedidos

WHERE importe > 300;


Para practicar puedes realizar este Ejercicio La interseccin INTERSECT.
Direccion de donde se tomo la informacin http://www.aulaclic.es/sqlserver/t_4_2.htm

Prueba evaluativa unidad 2: Introduccin al SQL. Transact-SQL


Slo una respuesta es vlida por pregunta. Haz clic en la respuesta
que consideres correcta.
Contesta todas las preguntas y haz clic en el botn Corregir para ver
la solucin.
Si pulsas Restablecer podrs repetir la evaluacin.

1. El lenguaje SQL es:


a) Propio de SQLServer.

b) Propio de SQLServer y otros sistemas gestores de Microsoft, como


Access.
c) Universal, se puede utilizar en cualquier sistema gestor de base de
datos relacional.
d) Todas son falsas.

2. El DDL engloba las instrucciones SQL que permiten:


a) Definir la estructura de una base de datos, como: crear una base de
datos o crear y eliminar tablas.
b) Realizar cambios en los datos contenidos en la base de datos: incluir
registros, borrarlos, editarlos...
c) Ejercer control sobre los procesos que ejecutan transacciones y los
permisos de la base de datos.
d) Todas son ciertas.

3. El DCL engloba las instrucciones SQL que permiten:


a) Definir la estructura de una base de datos, como: crear una base de
datos o crear y eliminar tablas.
b) Realizar cambios en los datos contenidos en la base de datos: incluir
registros, borrarlos, editarlos...
c) Ejercer control sobre los procesos que ejecutan transacciones y los
permisos de la base de datos.
d) Todas son ciertas.

4. El DML engloba las instrucciones SQL que permiten:


a) Definir la estructura de una base de datos, como: crear una base de
datos o crear y eliminar tablas.
b) Realizar cambios en los datos contenidos en la base de datos: incluir
registros, borrarlos, editarlos...
c) Ejercer control sobre los procesos que ejecutan transacciones y los
permisos de la base de datos.
d) Todas son ciertas.

5. El lenguaje Transact-SQL es una variante del SQL estndar, que


incluye caracersticas como:
a) Herramientas para la creacin de interfaces para el usuario de la base
de datos.
b) La posibilidad de crear aplicaciones ejecutables.

c) Estructuras de control de flujo.

d) Todas son ciertas.

6. Deberemos cualificar un nombre cuando:


a) Referenciemos un campo, tabla o vista que forme parte de una base
de datos externa, es decir, que no forme parte de la base de datos que est
activa.
b) Si realizamos una consulta con varias tablas y necesitamos referenciar
un campo que se encuentra en ms de una de ellas.
c) A y B son ciertas.

d) A y B son falsas.

7. Para llamar a un campo Fecha contrato deberemos...


a) Escribir (Fecha contrato). Entre parntesis.

b) Escribir [Fecha contrato]. Entre corchetes.

c) No se puede escribir espacios en los nombres de los campos,


deberemos escribir Fecha_contrato.
d) Todas son falsas.

8. Seala cul es un comentario vlido para SQL.


a) /* Esto es un comentario */

b) - Esto es un comentario.

c) // Esto es un comentario.

d) <!-- Esto es un comentario -->

9. Transact-SQL permite definir:


a) Variables.

b) Constantes.

c) Funciones propias.

d) Todas son ciertas.

Prueba evaluativa unidad 2: Introduccin al SQL. Transact-SQL


Slo una respuesta es vlida por pregunta. Haz clic en la respuesta que
consideres correcta.
Contesta todas las preguntas y haz clic en el botn Corregir para ver la
solucin.
Si pulsas Restablecer podrs repetir la evaluacin.
1. El lenguaje SQL es:
a) Propio de SQLServer.

b) Propio de SQLServer y otros sistemas gestores de Microsoft, como Access.

c) Universal, se puede utilizar en cualquier sistema gestor de base de datos


relacional.
d) Todas son falsas.

2. El DDL engloba las instrucciones SQL que permiten:


a) Definir la estructura de una base de datos, como: crear una base de datos o
crear y eliminar tablas.
b) Realizar cambios en los datos contenidos en la base de datos: incluir
registros, borrarlos, editarlos...
c) Ejercer control sobre los procesos que ejecutan transacciones y los permisos
de la base de datos.
d) Todas son ciertas.

3. El DCL engloba las instrucciones SQL que permiten:


a) Definir la estructura de una base de datos, como: crear una base de datos o

crear y eliminar tablas.


b) Realizar cambios en los datos contenidos en la base de datos: incluir
registros, borrarlos, editarlos...
c) Ejercer control sobre los procesos que ejecutan transacciones y los permisos
de la base de datos.
d) Todas son ciertas.

4. El DML engloba las instrucciones SQL que permiten:


a) Definir la estructura de una base de datos, como: crear una base de datos o
crear y eliminar tablas.
b) Realizar cambios en los datos contenidos en la base de datos: incluir
registros, borrarlos, editarlos...
c) Ejercer control sobre los procesos que ejecutan transacciones y los permisos
de la base de datos.
d) Todas son ciertas.

5. El lenguaje Transact-SQL es una variante del SQL estndar, que incluye


caracersticas como:
a) Herramientas para la creacin de interfaces para el usuario de la base de
datos.
b) La posibilidad de crear aplicaciones ejecutables.

c) Estructuras de control de flujo.

d) Todas son ciertas.

6. Deberemos cualificar un nombre cuando:


a) Referenciemos un campo, tabla o vista que forme parte de una base de
datos externa, es decir, que no forme parte de la base de datos que est activa.
b) Si realizamos una consulta con varias tablas y necesitamos referenciar un
campo que se encuentra en ms de una de ellas.
c) A y B son ciertas.

d) A y B son falsas.

7. Para llamar a un campo Fecha contrato deberemos...


a) Escribir (Fecha contrato). Entre parntesis.

b) Escribir [Fecha contrato]. Entre corchetes.

c) No se puede escribir espacios en los nombres de los campos, deberemos


escribir Fecha_contrato.
d) Todas son falsas.

8. Seala cul es un comentario vlido para SQL.


a) /* Esto es un comentario */

b) - Esto es un comentario.

c) // Esto es un comentario.

d) <!-- Esto es un comentario -->

9. Transact-SQL permite definir:


a) Variables.

b) Constantes.

c) Funciones propias.

d) Todas son ciertas.

Prueba evaluativa unidad 3: Consultas simples


Slo una respuesta es vlida por pregunta. Haz clic en la respuesta
que consideres correcta.
Contesta todas las preguntas y haz clic en el botn Corregir para ver
la solucin.
Si pulsas Restablecer podrs repetir la evaluacin.
1. La clusula FROM indica el origen de datos para la consulta y puede
constar de:
a) Una tabla.

b) Una vista.

c) A y B son ciertas.

d) A y B son falsas.

2. Si queremos utilizar la tabla de una base de datos externa (Base2)


en nuestra consulta...
a) Deberemos cualificarla, de la siguiente forma: FROM Base2.tabla.

b) Podremos indicar el nombre de la tabla directamente : FROM tabla.

c) No podemos utilizar ms de una base de datos en la misma consulta.

d) Deberemos desconectar de la base de datos actual y conectar con la


Base2.
3. El alias se puede aplicar en:

a) El origen, por ejemplo: tablaempleados as Empleados

b) La lista de seleccin, por ejemplo: nomemp as [Nombre Empleado]

c) A y B son ciertas.

d) A y B son falsas.

4. Seala cul de los siguientes ejemplos es correcto:


a) SELECT nom as Nombre FROM empleados WHERE Nombre='Juan'.

b) SELECT nom Nombre FROM empleados WHERE Nombre='Juan'

c) SELECT nom Nombre FROM empleados ORDER BY Nombre

d) SELECT nom Nombre FROM empleados ORDER BY Apellido='Garca'

5. Seala cul de los siguientes ejemplos es incorrecto:


a) SELECT precio_unidad = (importe/cantidad)...

b) SELECT (importe/cantidad) AS precio_unidad...

c) SELECT precio_unidad = ROUND(importe/cantidad)...

d) SELECT precio_unidad = ROUND((importe/cantidad), 2)...

6. Dnde utilizamos la palabra clave *?

a) En la lista de seleccin, para indicar que queremos mostrar todas las


columnas del origen indicado.
b) En el origen de datos, para indicar que queremos utilizar como origen
todas las tablas de la base de datos.
c) A y B son ciertas.

d) A y B son falsas.

7. Si a una consulta aplicamos una ordenacin mediante el ORDER


BY...
a) Deberemos indicar si queremos ordenar de forma ascendente (ASC) o
descendente (DESC) o dar error.
b) Deberemos indicar si queremos ordenar de forma ascendente o
descendente. Si no indicamos nada, se ordenar de forma ascendente por
defecto.
c) Deberemos indicar ASC o DESC, pero slo en caso de que se trate de
un campo alfabtico. Para otros tipos de datos no funciona (como fechas o
campos numricos).
d) Todas son falsas.

8. La clusula DISTINCT...
a) Agiliza las consultas, porque debe mostrar menos resultados.

b) Se utiliza para no mostrar las filas que repitan el mismo valor en un


determinado campo (columna).

c) Se utiliza para no mostrar las filas que se repitan en todos sus


campos, es decir, que sea idnticas. Ralentiza la consulta porque debe evaluar
al final si se repiten y eliminarlas del listado generado.
d) Se ejecuta de forma predeterminada. Para que no sea as debemos
indicar ALL, por ejemplo: SELECT ALL oficina FROM empleados.
9. La clusula TOP...
a) Tiene ms sentido en consultas con ORDER BY. Al ejecutarse, primero
se ordenan segn un criterio y luego se extraen las N primeras.
b) Puede ir acompaada de WITH TIES, si queremos mostrar todos los
valores iguales al ltimo del ranking.
c) Puede ser porcentual, es decir, mostrar el 8% del total de registros,
por ejemplo, para que el listado sea proporcional a su volumen.
d) Todas son ciertas.

10. La clusula WHERE...


a) Permite indicar una condicin para filtrar los resultados. Por ejemplo:
WHERE nombre='Juan'.
b) Admite funciones. Por ejemplo: WHERE YEAR(contrato)=1985.

c) Admite intervalos de valores. Por ejemplo: WHERE YEAR(contrato)


BETWEEN 1985 AND 1995.
d) Todas son ciertas.

Você também pode gostar