Escolar Documentos
Profissional Documentos
Cultura Documentos
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:
Relacionar tablas
Las Consultas
Las Vistas
men
de
opciones y la barra de
6. Consulta
Server Mobile
2. Consulta de motor de
Base de datos
7. Abrir archivo
de
SQL
11. Resumen
12. Explorador de
Objetos
13. Explorador de
Plantillas
14. Ventana de
Propiedades
10. Servidores
registrados
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.
* 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:
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
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:
Segn su ubicacin
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
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.
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.
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.
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:
Gratuita.
Mayor potencia.
Gratuita.
Formato compacto.
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
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.
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 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
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.
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:
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:
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.
.
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
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:
Categora
Rojo
Cadena de caracteres
Verde oscuro
Comentario
Comando SQLCMD
Fucsia
Verde
Azul
Palabra clave
Verde azulado
Rojo oscuro
Gris oscuro
Operadores
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:
Abrir vista para ejecutarla y ver los datos como si fuese una tabla real.
Tipos de datos.
Definicin de variables.
Gestin de excepciones.
Funciones predefinidas.
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:
Tipos de operadores:
- Operadores numricos:
suma
resta
multiplicacin
divisin
mdulo
(resto de una
divisin)
&
OR
OR exclusivo
- Operadores de comparacin:
Igual a
Mayor que
>
Menor 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.
Las variables
Varias lneas
/* Esto es un comentario
en varias lneas */
--
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.
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.
d) A y B son falsas.
SELECT sentencia::=[WITH
<expresion_tabla_comun> [,...n]]
<expresion_consulta>
[ ,...n ]]
[COMPUTE
{{AVG|COUNT|MAX|MIN|SUM}
expression[ ,...n ]]
(expression)}[
,...n
[BY
[<FOR clausula_for>]
<expresion_consulta> ::=
{<especificacion_consulta>
[ {UNION
[ALL]|EXCEPT|INTERSECT}
<especificacion_consulta> |
[...n ]
<especificacion_consulta> ::=
SELECT [ALL|DISTINCT]
(<expresion_consulta>)
<lista_seleccion>
[INTO nueva_tabla]
[WHERE <condicion_busqueda> ]
SELECT [ALL|DISTINCT]
<lista_seleccion>
FROM
<origen>
[WHERE
<condicion_busqueda> ]
[ORDER
[ ,...n ]]
BY
{expression_columna|posicion_columna
[ASC|DESC]}
<origen>::=
SELECT ...
FROM tabla1
SELECT ...
FROM tabla1 t1
Sacamos
asignamos un alias de tabla: t1
SELECT ...
FROM tabla1 AS t1
Es
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.
| {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 constante
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).
La palabra clave *.
FROM
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
SELECT
FROM
productos;
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
FROM clientes;
El resultado ser :
nombrecliente
Numclie
nombrecliente
2101
2102
Alvaro Rodrguez
2103
Jaime Llorens
en vez de:
Numclie
nombre
2101
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
GETUTCDATE
DATEPART
DAY
MONTH
YEAR
DATENAME
DATEADD
DATEDIFF
@@DATEFIRST
SET DATEFIRST
Descripcin
ASCII
Devuelve el valor de cdigo ASCII del carcter situado ms a la izquierda de una expresin
de caracteres.
CHAR
NCHAR
UNICODE
LEN
Devuelve el total de caracteres de una cadena, excluidos los espacios en blanco finales.
LTRIM
RTRIM
LEFT
RIGHT
SUBSTRING
LOWER
UPPER
REPLACE
STUFF
QUOTENAME
SPACE
STR
REPLICATE
REVERSE
CHARINDEX
PATINDEX
Otras funciones:
Funcin
Descripcin
ROUND
CAST y CONVERT
CASE
ISNULL
COALESCE
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.
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
FROM
empleados;
El resultado ser:
Nombre
Mes de contrato
Ao de contrato
Antonio Viguer
10
1986
Alvaro Jaumes
12
1986
Juan Rovira
1987
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
superavit
FROM
oficinas;
FROM
*, (ventas-objetivo) AS superavit
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 *.
FROM usuarios;
Es equivalente a:
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.
Ejemplos:
Mostrar las ventas de cada oficina, ordenadas por orden alfabtico de regin y dentro de
cada regin por ciudad.
SELECT
FROM
ORDER
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
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
FROM
oficinas
ORDER
BY 3 DESC;
FROM oficinas
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.
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
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.
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:
productos
ORDER BY ventas;
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:
<condicion_bsqueda> ::=
{ [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
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>
Un nombre de columna,
una constante,
una variable,
Ejemplo:
Listar los "buenos" vendedores (los que han rebasado su cuota).
ventas, cuota
FROM empleados
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
FROM empleados
FROM empleados
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
FROM empleados
FROM
oficina
oficinas
WHERE
oficina
FROM
WHERE
oficinas
dir = 108;
FROM empleados
WHERE
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
FROM empleados
WHERE
<exp_valor> [ ,...n ] )
FROM empleados
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
FROM empleados
nombre
Juan Victor
oficina
NULL
FROM empleados
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
<expression>
[NOT] LIKE
<patron>
[ESCAPE 'car_escape']
SELECT numemp,nombre
FROM empleados
nombre
101
Antonio Viguer
108
Ana Bustamante
FROM empleados
nombre
104
Jos Gonzlez
107
Jos Gonzlez
SELECT numemp,nombre
FROM empleados
nombre
101
Antonio Viguer
104
Jos Gonzlez
106
Luis Antonio
SELECT numemp,nombre
FROM empleados
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).
[
SELECT numemp,nombre
FROM empleados
FROM empleados
FROM empleados
FROM empleados
FROM empleados
FROM empleados
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
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
< 30000;
Hallar los vendedores que estn debajo de su cuota, pero cuyas ventas no sean inferiores a
150.000.
SELECT nombre
FROM empleados
< 150000;
FROM oficinas
FROM oficinas
WHERE
Devuelven:
oficina
11
12
13
Las oficinas sin director no aparecen, para que aparezcan deben aadir otro predicado:
FROM oficinas
null;
dir
11
106
12
104
13
105
26
NULL
28
NULL
Para practicar puedes realizar este Ejercicio Consultas con mltiples condiciones.
Tienen que aparecer todas las filas del resultado? Si la respuesta es NO, debers:
o
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.
Nume
mp
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.
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
Numemp
Nombre
Ventas
cuota
104
Jos Gonzlez
14300,00
20000,00
107
Jorge Gutirrez
18600,00
30000,00
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
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
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.
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.
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...
La unin UNION
La diferencia EXCEPT
La interseccin INTERSECT
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.
consulta >)}
UNION [ALL]
{<
[{UNION
[ORDER
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,
El resultado sera:
OFI
ciudad
11
Valencia
28
Valencia
23
Madrid
UNION
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
UNION
FROM
productos
UNION
FROM pedidos
EXCEPT
{<consulta>|(<consulta>)}
[{EXCEPT
[ORDER
{<consulta>|(<consulta>)}}[ ...n ] ]
BY {expression_columna|posicion_columna [ASC|DESC]}
,...n ]]
1
2
4
5
6
T2
2
3
4
5
EXCEPT
FROM
productos
EXCEPT
FROM pedidos;
Para practicar puedes realizar este Ejercicio La diferencia EXCEPT.
INTERSECT
{<especificacion_consulta>|(<especificacion_consulta>)}
[ORDER
BY {expression_columna|posicion_columna [ASC|DESC]}
,...n ]]
INTERSECT
FROM
productos
INTERSECT
FROM pedidos
d) A y B son falsas.
b) - Esto es un comentario.
c) // Esto es un comentario.
b) Constantes.
c) Funciones propias.
d) A y B son falsas.
b) - Esto es un comentario.
c) // Esto es un comentario.
b) Constantes.
c) Funciones propias.
b) Una vista.
c) A y B son ciertas.
d) A y B son falsas.
c) A y B son ciertas.
d) A y B son falsas.
d) A y B son falsas.
8. La clusula DISTINCT...
a) Agiliza las consultas, porque debe mostrar menos resultados.