Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Bases de datos
Una base de datos de Microsoft® SQL Server™ 2005 consta de una colección de tablas que contienen
datos y otros objetos, como vistas, índices, procedimientos almacenados y desencadenadores, que se
definen para poder llevar a cabo distintas operaciones con datos. Los datos almacenados en una base de
datos suelen estar relacionados con un tema o un proceso determinados como, por ejemplo, la
información de inventario para el almacén de una fábrica.
SQL Server admite muchas bases de datos. Cada base de datos puede almacenar datos
interrelacionados o sin relacionar procedentes de otras bases de datos. Por ejemplo, un servidor podría
tener una base de datos que almacena datos del personal y otra que almacena datos relacionados con los
productos. Por otra parte, puede utilizarse una base de datos para almacenar datos acerca de pedidos
actuales de los clientes y otra base de datos relacionada puede almacenar pedidos anteriores de los
clientes que se utilicen para la elaboración de los informes anuales.
Antes de crear una base de datos, es importante entender las partes que la componen y cómo
diseñarlas para asegurar que la base de datos funcione correctamente una vez implementada.
Tablas
Las tablas son objetos de la base de datos que contienen todos sus datos. Una tabla se define mediante
una colección de columnas. En las tablas, los datos se organizan con arreglo a un formato de filas y
columnas, similar al de una hoja de cálculo. Cada fila representa un registro único, y cada columna
representa un campo dentro de un registro. Por ejemplo, en una tabla que contenga los datos de los
empleados de una compañía puede haber una fila para cada empleado y distintas columnas en las que
figuren detalles de los empleados tales como el número de empleado, el nombre, la dirección, el puesto
que ocupa y su número de teléfono particular.
La asignación de un tipo de datos a cada columna es uno de los primeros pasos que debe llevarse a cabo
para diseñar una tabla. Los tipos de datos definen los valores de datos permitidos para cada columna.
Para asignar un tipo de datos a una columna, puede utilizar los tipos de datos de Microsoft® SQL
Server™ 2005 o crear sus propios tipos de datos basándose en los del sistema. Por ejemplo, si sólo
desea incluir nombres en una columna, puede asignar un tipo de datos de carácter para la misma.
Asimismo, si desea que una columna sólo contenga números, puede asignar un tipo de datos numérico.
Para obtener más información acerca de los tipos de datos definidos por el usuario.
SQL Server también admite sinónimos de SQL-92 para varios tipos de bases de datos. Para obtener
más información.
Datos binarios
Los datos binarios se componen de números hexadecimales. Por ejemplo, el número decimal 245
corresponde al hexadecimal F5. Los datos binarios se almacenan utilizando los tipos de datos binary,
varbinary e image de Microsoft® SQL Server™ 2005. Una columna a la que se asigne el tipo de datos
binary debe tener la misma longitud fija (hasta 8 KB) para cada fila. En una columna a la que se asigne
el tipo de datos varbinary, las entradas pueden variar en el número de dígitos hexadecimales (hasta 8
KB) que contienen. Las columnas con datos image pueden utilizarse para almacenar datos binarios de
longitud variable que excedan los 8 KB, como documentos de Microsoft Word®, hojas de cálculo de
Microsoft Excel® e imágenes que incluyan archivos de mapa de bits, archivos con formato GIF
(Graphics Interchange Format) y archivos con formato JPEG (Joint Photographic Experts Group).
En general, utilice varbinary para almacenar datos binarios, excepto si su longitud supera los 8 KB, en
cuyo caso deberá utilizar el tipo de datos image. Es recomendable que la longitud definida de una
columna binaria no supere la longitud máxima prevista para los datos binarios que deben almacenarse.
Datos de carácter
Se define como dato de carácter cualquier combinación de letras, símbolos y caracteres numéricos. Por
ejemplo, son datos de carácter válidos "928", "Johnson" y "(0*&(%B99nh jkJ.". En Microsoft® SQL
Server™ 2005, los datos de carácter se almacenan utilizando los tipos de datos char, varchar y text.
Utilice varchar cuando varíe el número de caracteres de las entradas de una columna, siempre que no
haya ninguna entrada que tenga una longitud mayor que 8 KB. Utilice char cuando todas las entradas de
una columna tengan la misma longitud fija (hasta 8 KB). Las columnas de datos text pueden utilizarse
para almacenar caracteres ASCII de más de 8 KB. Por ejemplo, dado que los documentos HTML son
caracteres ASCII y suelen ocupar más de 8 KB, se pueden almacenar en columnas text en SQL Server
antes de verlos en un examinador.
Se recomienda que la longitud definida para una columna de caracteres no supere a la longitud máxima
prevista para los datos de carácter que vayan a almacenarse.
Para almacenar datos de caracteres internacionales en SQL Server, utilice los tipos de datos nchar,
nvarchar y ntext.
Datos Unicode
Los tipos de datos tradicionales no Unicode de Microsoft® SQL Server™ 2005 permiten la utilización
de caracteres definidos por un conjunto de caracteres determinado. El conjunto de caracteres se elige
durante la instalación de SQL Server y no puede modificarse. Si se utilizan los tipos de datos Unicode,
una columna puede almacenar cualquier carácter definido por el estándar Unicode, que incluye todos los
caracteres definidos en los diversos conjuntos de caracteres. Los tipos de datos Unicode ocupan el
doble de espacio que los que no lo son.
Los datos Unicode se almacenan mediante los tipos de datos nchar, nvarchar y ntext de SQL Server.
Utilice estos tipos de datos para las columnas que almacenen caracteres de más de un conjunto de
caracteres. Utilice nvarchar cuando las entradas de una columna varíen en cuanto al número de
caracteres Unicode que contienen (hasta 4.000). Utilice nchar cuando todas las entradas de una
columna tengan la misma longitud fija (hasta 4.000 caracteres Unicode). Utilice ntext cuando alguna
entrada de una columna ocupe más de 4.000 caracteres Unicode.
Nota Los tipos de datos Unicode de SQL Server se basan en los tipos de datos National Character
del conjunto de normas SQL-92. SQL-92 utiliza el carácter n como prefijo para identificar estos
tipos de datos y valores.
Los datos de fecha y hora constan de combinaciones válidas de fecha y hora. Por ejemplo, datos válidos
de fecha y hora pueden ser "4/01/98 12:15:00:00:00 p.m." y "1:28:29:15:01 a.m. 17/8/98". Los datos de
fecha y hora se almacenan utilizando los tipos de datos datetime y smalldatetime de Microsoft® SQL
Server™ 2005. Utilice datetime para almacenar datos del intervalo que va desde el 1 de enero de 1753
hasta el 31 de diciembre del 9999 (para cada valor se necesitan 8 bytes de espacio de almacenamiento).
Utilice smalldatetime para almacenar fechas en el intervalo que va desde el 1 de enero de 1900 hasta el
6 de junio del año 2079 (para cada valor se necesitan 4 bytes de espacio de almacenamiento).
Datos numéricos
Los datos numéricos se componen exclusivamente de números. Incluyen números positivos y negativos,
decimales, fracciones y números enteros.
Datos enteros
Los datos enteros constan de números enteros positivos o negativos, como –15, 0, 5 y 2509. Los datos
enteros se almacenan utilizando los tipos de datos bigint, int, smallint y tinyint de Microsoft® SQL
Server™ 2005. El tipo de datos bigint puede almacenar un intervalo de números mayor que el tipo de
datos int. El tipo de datos int puede almacenar un intervalo mayor de enteros que smallint, que a su vez
puede almacenar un intervalo mayor de números que tinyint.
Utilice el tipo de datos bigint para almacenar números del intervalo comprendido entre -2^63 (-
9223372036854775808) y 2^63-1 (9223372036854775807). El tamaño de almacenamiento es de 8
bytes.
Utilice el tipo de datos int para almacenar números del intervalo comprendido entre -2.147.483.648 y
2.147.483.647 (para cada valor se necesitan 4 bytes de espacio de almacenamiento).
Utilice el tipo de datos smallint para almacenar números del intervalo que va desde -32.768 hasta
32.767 (para cada valor se necesitan 2 bytes de espacio de almacenamiento), y el tipo de datos tinyint
para almacenar números del intervalo que va desde 0 hasta 255 (para cada valor se necesita 1 byte de
espacio de almacenamiento).
Datos decimales
Los datos decimales se componen de datos de los que se almacena hasta el dígito menos significativo.
Estos datos se almacenan mediante los tipos de datos decimal o numeric de SQL Server. El número de
bytes necesarios para almacenar un valor decimal o numeric depende del número total de dígitos de
datos y del número de cifras a la derecha del separador decimal. Por ejemplo, se necesitan más bytes
para almacenar el valor 19.283,29383 que para almacenar el valor 1,1.
En SQL Server, el tipo de datos numeric es sinónimo del tipo de datos decimal.
Los datos numéricos aproximados (coma flotante) constan de datos que se almacenan con tanta
precisión como permite el sistema de numeración binario. Los datos numéricos aproximados se
almacenan mediante los tipos de datos float y real de SQL Server. Por ejemplo, dado que, en notación
decimal, la fracción "un tercio" se expresa como 0,333333 (hasta el infinito), este valor no se puede
representar con total precisión mediante los datos decimales aproximados. Por lo tanto, el valor
recuperado de SQL Server puede no coincidir exactamente con el que se almacenó originalmente en la
columna. Otros ejemplos de aproximaciones numéricas son los valores de coma flotante que acaban en
0,3, 0,6 y 0,7.
Datos de moneda
Los datos de moneda representan cantidades positivas o negativas de dinero. Los datos de moneda se
almacenan utilizando los tipos de datos money y smallmoney de Microsoft® SQL Server™ 2005. Los
datos de moneda pueden almacenarse con una precisión máxima de cuatro decimales. Utilice el tipo de
datos money para almacenar valores del intervalo comprendido entre -922.337.203.685.477,5808 y
+922.337.203.685.477,5807 (para almacenar cada valor se necesitan 8 bytes). Utilice el tipo de datos
smallmoney para almacenar valores del intervalo comprendido entre -214.748,3648 y 214.748,3647
(para almacenar cada valor se necesitan 4 bytes). Si se necesita un número mayor de decimales, utilice
el tipo de datos decimal.
Datos especiales
Los datos especiales son aquéllos que no se ajustan a ninguna de las categorías de datos, como los datos
binarios, de carácter, Unicode, de fecha y hora, numéricos y de moneda.
timestamp
Se utiliza para indicar la secuencia de actividades de SQL Server en una fila, representada
como un número creciente en formato binario. Cuando se modifica una fila de una tabla, el valor
de timestamp (la marca de tiempo) se actualiza con el valor actual de timestamp de la base de
datos que se obtiene con la función @@DBTS. Los datos de tipo timestamp no están
relacionados con la fecha ni la hora de una inserción ni de un cambio en los datos. Si desea
registrar automáticamente en qué momento se producen modificaciones en una tabla, utilice un
tipo de datos datetime o smalldatetime para registrar los sucesos y los desencadenadores.
bit
Puede ser un 1 o un 0. Utilice el tipo de datos bit para representar los valores TRUE
(verdadero) o FALSE (falso), o YES o NO. Por ejemplo, un cuestionario para los clientes en el
que se pregunte si ésta es la primera visita del cliente puede almacenarse en una columna de
tipo bit.
uniqueidentifier
sql_variant
Un tipo de datos que almacena valores de varios tipos de datos aceptados en SQL Server,
excepto text, ntext, timestamp y sql_variant.
table
Un tipo de datos especial que se utiliza para almacenar un conjunto de resultados para su
proceso posterior. El tipo de datos table sólo puede utilizarse para definir variables locales del
tipo table o el valor de retorno de una función definida por el usuario.
Permite que el usuario defina tipos de datos, como, por ejemplo, product_code, que se basa en
el tipo de datos char y que consta de dos letras mayúsculas seguidas de un número de
proveedor de cinco cifras.
Defina una Clave Principalcpara exigir que se escriban valores únicos en columnas especificadas que no
permiten nulos. Si define una clave principal para una tabla en la base de datos, puede relacionar esa
tabla con otras tablas, así se reduce la necesidad de datos redundantes. Una tabla sólo puede tener una
clave principal.
2. Haga clic con el botón secundario en el selector de fila para la columna y seleccione Establecer
clave principal. En la ficha Índices y claves de las páginas de propiedades se crea
automáticamente un índice de clave principal denominado "PK_" seguido del nombre de la tabla.
Advertencia Si desea volver a definir la clave principal, se deben eliminar las relaciones con la clave
principal existente antes de poder crear la nueva clave principal. Un mensaje comunicará que las
relaciones existentes se eliminarán automáticamente como parte de este proceso.
Una columna de clave principal se identifica por un símbolo de llave principal en el selector de fila.
Si una clave principal consta de más de una columna, se permiten valores duplicados en una columna,
pero cada combinación de valores de todas las columnas de la clave principal debe ser única.
2. Agregue las tablas entre las que desea crear una relación de varios a varios.
3. Cree una tercera tabla. Para ello, haga clic con el botón secundario del mouse dentro del
diagrama de la base de datos y, a continuación, haga clic en Nueva tabla.
Por ejemplo, la tabla de unión entre la tabla de títulos y la tabla de autores se llama
titleauthors.
5. Copie las columnas de clave principal de cada una de las otras dos tablas en la tabla de unión.
Puede agregar otras columnas a esta tabla, igual que en cualquier otra tabla.
6. En la tabla de unión, establezca la clave principal para que incluya todas las columnas de la clave
principal de las otras dos tablas.
7. Defina una relación de uno a varios entre cada una de las dos tablas principales y la tabla de
unión.
- Lenguaje de control de datos (DCL): Se basa en los derechos que tiene el usuario sobre la
base da datos (Permisos).
. SELECT
. INSERT
. UPDATE
. DELETE
Elementos de sintaxis:
- GO: Envía lotes de instrucciones de TRANSACT SQL a las herramientas y utilidades (Sirve
para separar bloques de instrucciones)
- EXEC O EXECUTE: Ejecuta funciones definidas por el usuario, procedimientos de sistema
y procedimientos almacenados.
Comentarios en SQL:
- En línea: --
- En Bloque: /* comentario */
Tablas en SQL:
Tabla master: Es la tabla que contiene como generar una base de datos y sobre ella,
se crean todas las bases de datos.
Tabla model: Es la tabla modelo, las bases de datos creadas se basan en esta tabla
como modelo.
Tabla Northwind y Pubs: Son tablas de ejemplos que vienen con SQL y todo usuario
puede trabajar con ellas.
Identificadores para los objetos:
Los nombres que se le dan a las tablas, lo primero es que no pueden empezar por un número,
deben empezar por un signo alfabético, pueden incluir el guion bajo (_), la arroba @ y la
almohadilla #.
Generalmente para las variables locales se usan @ + el nombre.
EJEMPLO: @Contador.
Para las variables totales se usan dos arrobas + el nombre @@Contador
EJEMPLO: @@Error
#Nombre: indica una tabla o procedimiento temporal (Local)
##Nombre: Igual que el anterior pero global.
Tipos de datos:
- Numéricos:
Enteros int, tinyint, smallint, bigint
Decimales numeric, decimal, money, smallmoney
Coma Flotante float, real
- Fechas:
datetime 0,333 s
smalldatetime 1 minuto
- Caracteres:
Ancho fijo: char, nchar
Ancho Variable: varchar, nvarchar
- Texto e Imagen:
Text
Ntext
Rowversion
- Binario:
Binary, varbinary Valores tipo byte
Bit Un solo bit (1 o ninguno)
- Identificadores Únicos:
Uniqueidentifier
Operadores de SQL:
Lógicos:
De Comparación:
= Igual
< Menor
> Mayor
<> Diferente
>= Mayor o igual
<= Menor o igual
Ejemplo:
Para crear la base de datos es la siguiente opción database seguido del nombre de la Base de Datos
On primary
Log On
Name.- Es el nombre a utilizar cuando una sentencia SQL se tiene que hacer referencia al archivo de
datos o al archivo log respectivamente.
Filename.- Es una cadena que incluye la ruta y el nombre del archivo. La ruta debe especificar una
carpeta existente en el servidor que esta instalado en el SQL
Maxsize. –Especifica el tamaño máximo que puede alcanzar el archive si se requiere espacio adicional
Filegrowth. –Es la cantidad de espacio que se añade al archive cada vez que se necesita espacio
adicional. Se puede especificar en MB o en porcentaje.
Cuando se crea una base de datos, su nombre se registra en la tabla del sistema Sysdatabases
de la base de datos master.
Use master
Go
Luego se procederá abrir la tabla Sysdatabases y ahí se podrá visualizar si la base de datos ah
sido creada.
Luego se procederá abrir la base de datos con el use nombre de la base de datos y luego el go
* Cuando hay llaves es porque se debe elegir entre uno de los dos, esta barra | indica que se debe
poner uno de los dos valores.
- Uso INSERT...SELECT:
Se introducen en la tabla las columnas y filas que devuelva con sus respectivos datos. La consulta
SELECT debe devolver los datos adecuados para la tabla donde vamos a introducir los valores.
- Creación de una tabla mediante SELECT INTO: Creación de una tabla que a la vez se le
introducen valores.
- Inserción de datos parciales: No introducir todos los datos, solo meter datos en un
determinado campo o en varios, pero no en toda la tabla.
ELIMINACIÓN DE DATOS
- DELETE: Elimina una o varias filas. Hay un control de las modificaciones (Borrado) que se
estan haciendo.
- TRUNCATE TABLE: Elimina todas las filas de la tabla (La tabla con su estructura no se
elimina, sólo los datos de la tabla). No crea filas en el registro de transacciones, con lo cual
es el método más rápido de borrar.
ACTUALIZACIONES
USE Northwind
UPDATE products
SET unitprice = (unitprice * 1.1 )
Ejercicios:
Ejemplo 1
--use Itae
--go
Ejemplo 2
--(
--tel_alumno VarChar(8),
--)
Ejemplo 3
Para que se muestre la Tabla completa y con todos los registros se utiliza en Select para
seleccionar los campos, from para seleccionar la tabla que se desea visualizar.
Ejemplo 4
Ejemplo 5
Ejemplo 6
Ejemplo 7
Ejemplo 8
Si también uno desea se puede poner en orden ascendente y descendente pará ello se utilizar el
ASC y Desc
Ejemplo 9
Drop table alumnos Elimina la Tabla Clientes con la sentencia Drop, seguido del tipo de
objeto y finalizando el nombre.
Drop database Itae Elimina la Base de Datos Itae con la sentencia Drop, seguido del
tipo de objeto y finalizando el nombre.
En la expresión lógica que especifica condición _ filas se puede utilizar, además de los operadores
relación o de comparación los siguientes operadores SQL
OPERADOR LIKE
EJEMPLO: LIKE ‘%een’ Muestra todos los caracteres que acaben con een
EJEMPLO: LIKE ‘%een%’ Muestra todos los caracteres que contengan een en ese orden
EJEMPLO: LIKE ‘_en’ Muestra todos los caracteres que contenga tres letras y acaben en en
EJEMPLO: LIKE ‘[CK% ]’ Muestra todos los caracteres que empiecen por C o K
EJEMPLO: LIKE ‘[S-V]ing’ Nombre de 4 letras cuya primera letra estuviera entre S o V y acabe en
ing
EJEMPLO: LIKE ‘M[^c]%’ Todos los que empiecen por M y segunda letra no sea una c. No hay limite
de caracteres.
BETWEEN.- para selección en base a un rango de valores. Los valores pueden ser numéricos, de
cana, fechas y horas.
In.-Para selección en base a un conjunto de valores, los valores pueden ser numéricos, de cadena,
fechas y horas.
Para estos ejemplos ah utilizado la base de datos con el nombre de Poseidón y contiene las siguientes
tablas y campos.
Ejemplo 10
Use Poseidon
Go
Ejemplo 12
Ejemplo 13
Lista de productos cuya primera letea empieza con la letra a y la tercera con la letra e.
Ejemplo 14
Lista de productos cuyo nombre empieza con cualquier carácter que va en el rango de la M a la
T.
Ejemplo 15
Lista de productos cuyo nombre empieza con A ò con cualquier carácter en el rango que va de U
a la Además, el segundo carácter no debe ser la letra r.
Ejemplo 16
Ejemplo 17
Ejemplo 18
Ejemplo 19
Lista de productos cuyo nombre empiece con C, M Ò R. El segundo Carácter debe ser A.
Ejemplo 20
Ejemplo 21
Ejemplo 22
Ejemplo 23
Ejemplo 24
Ejercicios de Repaso
Ejemplo 25
Ejemplo 26
Ejemplo 27
Ejemplo 28
Ejemplo 29
Ejemplo 30
Ejemplo 31
Ejemplo 32
Visualizar los productos que el precio unitario esta comprendido entre 20 a 25.
Ejemplo 33
Ejemplo 34
Ejemplo 35
Ejemplo 36
Ejemplo 37
USO DE FUNCIONES
Podemos utilizar funciones para construir expresiones y generar columnas computadoras O condiciones
complejas.
Función de agregación:
Son funciones que se utilizan para calcular valores en las tablas. Si queremos usarlas
combinándolas junto con otros campos debemos utilizar Group by y agrupar los datos que no son
funciones.
Con la sentencia group by no se utiliza la clausula where, se utilizara una clausula propia de la
expresión: HAVING. Equivalente a where
Todos estos ejercicios han sido desarrollado con la base de datos Poseidón.
AVG: Realiza la media sobre la expresión dada, debe ser un tipo de dato
Int.
Ejercicios
Ejemplo 38
Encontrar la Factura medio del país Brasil, mostrando el número de los Factura con el país de
Destinatario Brasil.
Ejemplo 39
Encontrar el precio más alto, mas bajo y la diferencia entre ambos de todos los productos con
IdCategoría 2.
Ejemplo 40
Ejemplo 41
Visualizar los clientes que vivan en las siguientes ciudades Londres, Madrid y Barcelona
Select count (*) as [Nº de personas], ciudad from clientes group by ciudad Having ciudad in
('londres','Madrid','Barcelona') order by ciudad
Ejemplo 42
Ejemplo 43
Select Count (*) as [Total de Clientes sin Fax] from clientes where fax is null
Ejemplo 44
Select Count (*) as [Total de Clientes Tienen Fax] from clientes where fax is Not null
La siguiente tabla muestra las funciones de fecha y hora disponibles en SQL server.
Función Resultado
partefecha Abreviatura
Year Yy, yyyy
Quarter Qq ,q
Month Mm, m
Dayofyear Dy, y
Day Dd, d
Week Wk, ww
weekday Dw
Hour Hh
minute Mi, n
second Ss, s
milisecond Ms
Getdate
Select getdate () Función que recupera la fecha actual del sistema.
Convert, Cast
Ejemplo:
while (@n<11)
begin
print convert(nvarchar(2),@n) + ' ' + @palabra
print cast(@n as nvarchar(2)) + ' ' + @palabra
set @n = @n + 1
end
DateName
Devuelve una cadena de caracteres que representa la parte de la fecha especificada de la fecha
especificada
Los cálculos para las horas no son exactos cuando se trata de SmallDateTime, por lo que
devuelve 0.
Ejemplo 45
Select IdPedido, DateName (Month, FechaPedido) as 'Nombre del mes' from Pedidos where IdPedido =
10352 diciembre
Ejemplo 46
Select IdPedido, DateName (week, FechaPedido) as 'Numero de Semana' from Pedidos where IdPedido
= 1035251
Ejemplo 47
Select IdPedido, datename (weekday, FechaPedido) as 'Día De Semana' from Pedidos where IdPedido =
10352 Martes
Horas:
Ejemplo 48
Select IdPedido, datename (mi, FechaPedido) as 'Minutos' from Pedidos where IdPedido = 10352
Ejemplo 49
Ejemplo 50
Select DateName (Hh, FechaPedido) as 'hora' from Pedidos where IdPedido = 10352
Ejemplo 51
Ejemplo 52
DatePart
Ejemplo 53
Select IdPedido, datepart (mm, FechaPedido) as 'Mes' from Pedidos where IdPedido = 10352
Ejemplo 54
Ejemplo 55
Nombres de Fechas
Day (fecha)
Devuelve UN INT, equivale a Datepart
Ejemplo 56
Ejemplo 57
Select datediff (yyyy, FechaPedido, getdate()) as 'Dia' from Pedidos where IdPedido = 10352
DateAdd
DateDiff
Ejemplo 58
Select datediff (yyyy, FechaPedido, getdate ()) as 'Dia' from Pedidos where IdPedido = 10352
Ejemplo 59
Select * from Pedidos where month (FechaPedido) =2 and year (FechaPedido) =1996
Ejemplo 60
Lista de Pedidos mostrando la diferencia en días entre la fecha del pedido y la fecha de Envió.
Select IdPedido, FechaPedido, FechaEnvío, días =datediff (day, FechaPedido, FechaEnvío) from
pedidos
Ejemplo 61
Genere un listado de pedidos en el que la fecha del pedido se muestre en el formato nombre del
día, día de mes año.
Select IdPedido, FechaPedido, Fecha=datename (dw, IdPedido)+ ', ' + str (datepart (dd,
IdPedido) ,2)+' de '+datename (mm, IdPedido)+' de '+str (datepart (yy, IdPedido) ,4) from
pedidos
Ejemplo 62
Select IdPedido, convert (varchar (30), FechaPedido, 106) as [Fecha Corta] from pedidos
FUNCIONES MATEMATICAS
ABS
Es el valor Absoluto
CEILING
Devuelve el entero más pequeño mayor o igual que la expresión numérica dada.
FLOOR
Devuelve el entero más grande menor o igual que la expresión numérica dada.
POWER
RAND
ROUND
SIGN
Devuelve el signo positivo (+1), cero (0) o negativo (-1) de la expresión especificada.
Dice el valor negativo, positivo o neutro (0) del valor especificado
SQUARE
SQRT
FUNCIONES DE CADENA
ASCII
Devuelve el código ASCII del carácter más a la izquierda de una expresión de caracteres.
Select ASCII('A')-->65
Select ASCII('a')-->97
Select ascii('aula')-->97
CHAR
select char(65)-->A
select char(97)-->a
CHARINDEX
Argumentos
expression1
Es una expresión que contiene la secuencia de caracteres que se desea buscar.
Expression1 es una expresión del tipo de cadenas cortas de caracteres.
Expression2
Es una expresión, normalmente una columna,
en la que se busca la cadena especificada.
Expression2 es de la categoría del tipo de datos cadena de caracteres.
start_location
Es la posición del carácter de expression2 en el que se empieza la búsqueda de expression1.
Si no se especifica start_location, es un número negativo o es cero,
la búsqueda empieza al principio de la cadena expression2.
LEFT
RIGHT
LEN
LOWER
UPPER
RTRIM y LTRIM
REPLACE
Select replace ('hola que tal estas','a','A') -->holA que tAl estAs
Select replace ('buenos dias, que tal estas','ue','ñññ') -->bñññnos dias,qñññ tal estas
SPACE
Coloca el número de espacios que se le indiquen para entre una cadena de caracteres.
SUBSTRING
Argumentos
Expresión
Es una cadena de caracteres, cadena binaria, texto, imagen,
Columna o expresión que incluye una columna.
No deben usarse expresiones que incluyan funciones de agregado.
Start
Es un entero que especifica el punto en que comienza la subcadena.
Length
Es un entero que especifica la longitud de la subcadena
(El número de caracteres o bytes que se devuelven).
REVERSE
REPLICATE
STUFF
FUNCIONES DE SISTEMA
- SYSTEM_USER
Devuelve el usuario del sistema actual
Depende de la autentificación con la que te hayas conectado
- USER_NAME()
Devuelve el nombre del usuario actual
Select user_name ()
En el examen de certificación las bases de datos que se suelen usar son las que vienen de ejemplo en
SQL, es decir Northwind y Pubs
Use Base de datos Indica que la siguiente sentencia usará la base de datos indicada. Ejemplo: Ponemos
en el analizador de consultas lo siguiente:
Use Northwind
[Order Details]
Order Id : Nº de Pedido.
Producto Id : Nº de Producto.
Ambos campos son Primary Key, con lo que no puede haber una combinación de ambos campos que sea
igual.
OrderId ProductId
1 A
1 B
1 C
2 A
3 C
ROLLUP
Se usa para presentar resúmenes de datos. A de usarse junto con la clausula group by, lo que hace es
realizar un resumen de los campos incluidos en el rollup.
Ejemplo 63
Ejemplo 64
CUBE
Al igual que Rollup realiza resúmenes de campos agrupados. Pero en este caso muestra un resumen con
cada combinación posible de los campos agrupados.
Ejemplo 65
GROUPING
Indica si el resultado de un campo es el que hay en la propia tabla o se ha introducido mediante una
cláusula de resumen, es decir, para saber por ejemplo si un “Null” de una celda es de la propia tabla o ha
es debido a una clausula Cube o Rollup.
Ejemplo 66
COMPUTE
Realiza un resumen en una columna aparte con el resultado de la función de agregado indicada. Su
formato sería Compute función(campo). No se puede utilizar en aplicaciones cliente / servidor, es una
clausula meramente informativa. Tampoco se le pueden poner alias a los resúmenes.
Ejemplo 67
Select Productid, Orderid, Quantity From [Order Details] order by ProductID, Orderid compute
Sum(quantity)
Ejemplo 68
Realizar una consulta que resuma la cantidad de artículos pedidos por cada índice de producto y
número de pedido. Realizando un cálculo acumulativo.
Ejemplo 69
Modificación al ejercicio anterior: Realizar el mismo resumen pero únicamente para el producto
cuyo id es 50
50 10751 20
50 10920 24
50 10948 9
50 11072 22
Ejemplo 70
Realizar un resumen por medio de CUBE y de GROUPING sobre la modificación del ejercicio
anterior de tal manera que sea posible obtener un resumen por producto y por pedido.
La clausula COMPUTE... BY permite agrupar las filas en base a los valores de una o más columnas, y
luego efectuar alguna operación de resumen sobre cada grupo así generado.
La diferencia con GROUP BY es que permite mostrar información mas detallada de cada grupo.
Ejemplo 71
Lista de pedidos que muestre por código de pedido la cantidad de productos vendidos por cada uno
de ellos.
Ejemplo 72
Generar un resumen de subtotales en una consulta que devuelva el número de pedido, la cantidad
pedida para todos los orderid 11070
Nº PEDIDO CANTIDAD
----------- --------
11070 40
11070 20
11070 30
11070 20
sum
===========
110
sum
===========
110
(6 filas afectadas)
Ejemplo 73
Generar un resumen con calculo de subtotales similar al anterior pero para los orderid 11075 y
11076
Nº PEDIDO CANTIDAD
----------- --------
11075 10
11075 30
11075 2
sum
===========
42
Nº PEDIDO CANTIDAD
----------- --------
11076 20
11076 20
11076 10
sum
===========
50
(8 filas afectadas)
Ejemplo 74
Modificación al ejercicio anterior: Agregar la cantidad total y la cantidad promedio al final del
informe
Select Orderid as [Nº PEDIDO], Quantity as [CANTIDAD]
From [Order Details] where orderid = 11075 or orderid = 11076
order by Orderid compute Sum(quantity) by orderid
compute sum(quantity) compute avg(quantity)
Nº PEDIDO CANTIDAD
----------- --------
11075 10
11075 30
11075 2
sum
===========
42
Nº PEDIDO CANTIDAD
----------- --------
11076 20
11076 20
11076 10
sum
===========
50
sum
===========
92
avg
===========
15
Ejemplo 75
Seleccionar de forma agrupada por tipo, todos los tipos, la suma de los precios y la suma del
anticipo de la tabla títulos
Select type as [TIPO], price as [PRECIO], advance as [ANTICIPO]
From titles order by type compute sum(price) by type
compute avg (advance) by type
sum
=====================
54.9200
avg
=====================
6281.2500
sum
=====================
22.9800
avg
=====================
7500.0000
sum
=====================
42.9500
avg
=====================
7500.0000
sum
=====================
67.5200
avg
=====================
4255.0000
Ejemplo 76
Obtener todos los tipos, precios y anticipos de la tabla titulos individualmente ordenados por el tipo
en un informe que, además, muestre la suma total de los precios y anticipo por cada tipo
sum
=====================
54.9200
sum
=====================
25125.0000
sum
=====================
22.9800
sum
=====================
15000.0000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
popular_comp 22.9500 7000.0000
popular_comp 20.0000 8000.0000
popular_comp NULL NULL
sum
=====================
42.9500
sum
=====================
15000.0000
Ejemplo 77
Generar un informe que muestre la suma de los precios de los libros de psicología de cada editor
sum
=====================
45.9300
sum
=====================
21.5900
(7 filas afectadas)
Ejemplo 78
Generar un informe que obtenga la suma de los precios de todos los libros de psicología, así como la
suma de los precios de los libros de psicología por editor.
sum
=====================
45.9300
sum
=====================
21.5900
sum
=====================
67.5200
(8 filas afectadas)
Ejemplo 79
Generar un informe que obtenga la suma de los precios y los anticipos para cada tipo de libro de
cocina
sum
=====================
22.9800
sum
=====================
15000.0000
sum
=====================
47.8900
sum
=====================
19000.0000
(9 filas afectadas)
Ejemplo 80
Generar un informe que muestre todos los títulos, precio y anticipo de aquellos títulos que tengan
un precio superior a 20 dólares. Ofrecerá también la suma total del precio y del anticipo.
sum
=====================
65.4900
sum
=====================
21000.0000
(5 filas afectadas)
Ejemplo 81
Generar un informe que muestre el precio, el tipo y el número de editor de la tabla titles de todos
aquellas obras que pertenezcan la categoría de “business”. Además aparecerá la suma total de
precios y el máximo pub_id de esta selección
sum
=====================
54.9200
max
====
1389
(6 filas afectadas)
Ejemplo 82
Realizar una consulta que recupere el tipo, precio y anticipo de la tabla titles para los libros de
cocina. Mostrará la suma de los precios y los anticipos por tipo y luego, calculará el total general de
los precios y los anticipos para todos los registros seleccionados.
sum
=====================
22.9800
sum
=====================
15000.0000
sum
=====================
47.8900
sum
=====================
19000.0000
sum
=====================
70.8700
sum
=====================
34000.0000
Cuando se utiliza la clausula DISTINCT, SQL Elimina las filas que se duplican en el resultado de la
consulta.
Ejemplo 83
Si observa el resultado contiene filas duplicadas si se desea eliminar esas filas se agrega a la
consulta la clausula DISTINCT.
La mayoría de las consultas que se hacen en una base de datos requiere que se lean datos procedentes
de dos ó más tablas.
En la siguiente sentencia SQL enlaza 2 tablas la tabla clientes y la tabla pedidos en esta ejemplo me
muestra los campos nombre compañía y el campo idpedido.
Ejemplo 84
Ejemplo 85
Mostrar de la tabla pedidos y detalle de pedidos el total de cada compra realizada de cada uno
de los pedidos
CROSS JOIN
Un Cross Join es la consulta correlacionada que combine cada una de las filas de una de las tablas con
todas las filas de la otra tabla.
No es necesario que exista una columna en común para ejecutar el Cross Join.
Ejemplo 86
La siguiente consulta combina cada una de las filas de la tabla categorías con cada una de las filas de la
tabla productos
Ejemplo 87
Ejemplo 88
Ejemplo 89
OPERADOR UNION
Es un operador que combina un conjunto de resultados, por ejemplo, una sentencia SELECT con
OTRA
Select Apellido,
Oficio as
'OFICIO/FUNCION'
,salario from emp
UNION
Select Apellido,
Funcion, Salario from
Plantilla
SUBCONSULTAS
Subconsulta correlacionada
SUBCONSULTAS
1. Mostrar el numero de empleado, el apellido y la fecha de alta del empleado mas antiguo de la
empresa
SELECT emp_no,apellido,
fecha_alt from emp where fecha_alt = (select min(fecha_alt) from emp)
2. Mostrar el numero de empleado, el apellido y la fecha de alta del empleado mas modernos de la
empresa.
SELECT emp_no,apellido,
fecha_alt from emp where fecha_alt = (select max(fecha_alt) from emp)
3. Visualizar el apellido y el oficio de los empleados con el mismo oficio que Jiménez.
4. Queremos saber el apellido, oficio, salario y número de departamento de los empleados con
salario mayor que el mejor salario del departamento 30.
Select apellido, oficio, salario, dept_no from emp where salario > (select max (salario) from
emp where dept_no = 30)
5. Mostrar el apellido, la función, sala o departamento de todos los empleados que trabajen en la
empresa.
6. Averiguar el salario de todos los empleados de la empresa, de forma que se aprecien las
diferencias entre ellos.
7. Mostrar apellidos y oficio de los empleados del departamento 20 cuyo trabajo sea el mismo que
el de cualquier empleado de ventas.
8. Mostrar los empleados que tienen mejor salario que la media de los directores, no incluyendo al
presidente.
9. Mostrar el apellido, función, salario y código de hospital de los empleados de la plantilla que
siendo enfermeros o enfermeras pertenecen al hospital SAN CARLOS.
Select apellido, funcion, salario, hospital_cod from plantilla where (funcion = ‘ENFERMERO’ or
funcion = ‘ENFERMERA’) and hospital_cod = (select hospital_cod from hospital where nombre =
‘SAN CARLOS’)
10. Visualizar los datos de los hospitales que tienen personal (Doctores) de cardiología.
Select * from hospital where hospital_cod in (select hospital_cod from doctor where
especialidad = ‘Cardiología’)
11. Visualizar el salario anual de los empleados de la plantilla del Hospital Provincial y General.
12. Mostrar el apellido de los enfermos que nacieron antes que el Señor Miller.
Select apellido from enfermo where Fecha_nac < (select fecha_nac from enfermo where
apellido = ‘MILLER B.’)
Se debe utilizar antes una combinación que una subconsulta, la combinación sería asi, dando los
mismos resultados:
Esta es la consulta utilizando el HAVING, que es la que deberíamos utilizar antes que una
subconsulta de simulación HAVING: