Sunteți pe pagina 1din 70

Microsoft SQL SERVER / Desarrollo de Aplicaciones utilizando Visual Studio Net 2005

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.

Importante Se recomienda no crear objetos de usuario, como tablas, vistas, procedimientos


almacenados o desencadenadores en la base de datos master. La base de datos master contiene las
tablas del sistema con la información del sistema que utiliza SQL Server, como por ejemplo los
valores de las opciones de configuración.

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.

Especificar un tipo de datos para una columna

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.

Prof.: Diego Alberto Cueva Valverde diegoalberto_1987@hotmail.com 1


Microsoft SQL SERVER / Desarrollo de Aplicaciones utilizando Visual Studio Net 2005

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.

Prof.: Diego Alberto Cueva Valverde diegoalberto_1987@hotmail.com 2


Microsoft SQL SERVER / Desarrollo de Aplicaciones utilizando Visual Studio Net 2005

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.

Datos de fecha y hora

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.

Prof.: Diego Alberto Cueva Valverde diegoalberto_1987@hotmail.com 3


Microsoft SQL SERVER / Desarrollo de Aplicaciones utilizando Visual Studio Net 2005

Datos numéricos aproximados

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.

Microsoft® SQL Server™ 2005 incluye cuatro tipos de datos especiales:

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.

Nota En SQL Server, rowversion es un sinónimo de timestamp.

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.

Prof.: Diego Alberto Cueva Valverde diegoalberto_1987@hotmail.com 4


Microsoft SQL SERVER / Desarrollo de Aplicaciones utilizando Visual Studio Net 2005

uniqueidentifier

Se trata de un número hexadecimal de 16 bytes que hace referencia a un identificador


exclusivo global (GUID). El GUID es especialmente útil cuando una fila debe ser única entre
otras muchas. Por ejemplo, utilice el tipo de datos uniqueidentifier en una columna con números
de identificación de los clientes para compilar una lista de clientes de una compañía en varios
países.

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.

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

Definir una clave principal

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.

Para definir una clave principal

1. En el diagrama de base de datos o en el Diseñador de tablas, haga clic en el selector de fila de


la columna de la base de datos que desee definir como clave principal. Si desea seleccionar
varias columnas, mantenga presionada la tecla CTRL mientras hace clic en los selectores de fila
para las otras columnas.

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.

Prof.: Diego Alberto Cueva Valverde diegoalberto_1987@hotmail.com 5


Microsoft SQL SERVER / Desarrollo de Aplicaciones utilizando Visual Studio Net 2005

Cómo crear una relación de varios a varios entre tablas

Para crear una relación de varios a varios entre tablas

1. Abra un diagrama de base de datos.

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.

Ésta se convertirá en la tabla de unión.

4. En el cuadro de diálogo Elegir nombre, escriba un nombre para la 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.

Fundamentos de Programación con SQL

Existen 3 tipos de instrucciones para el lenguaje en SQL.

- Lenguaje de control de datos (DDL): Creación y eliminación de tipos de datos y objetos.

. CREATE Crear Objeto


. ALTER Modificar los datos creados
. DROP Eliminar el Objeto

- Lenguaje de control de datos (DCL): Se basa en los derechos que tiene el usuario sobre la
base da datos (Permisos).

. GRANT Dar permisos a un usuario para efectuar determinadas


Instrucciones
. DENY Eliminar el permiso que se ha concedido con el GRANT
. REVOKE Eliminar todos los permisos

- Lenguaje de manipulación de datos (DML): Desarrollo de la programación de la base de


datos.

. SELECT
. INSERT

Prof.: Diego Alberto Cueva Valverde diegoalberto_1987@hotmail.com 6


Microsoft SQL SERVER / Desarrollo de Aplicaciones utilizando Visual Studio Net 2005

. UPDATE
. DELETE

Elementos de sintaxis:

Directivas de procesos por lotes

- 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

Prof.: Diego Alberto Cueva Valverde diegoalberto_1987@hotmail.com 7


Microsoft SQL SERVER / Desarrollo de Aplicaciones utilizando Visual Studio Net 2005

- Texto e Imagen:

Text
Ntext
Rowversion

- Binario:
Binary, varbinary  Valores tipo byte
Bit  Un solo bit (1 o ninguno)

- Identificadores Únicos:

Representa un identificador global único (GUID)


Si queremos que no se repita el dato en la base de datos, usamos este identificador

Uniqueidentifier

Operadores de SQL:

Lógicos:

AND, OR, NOT

De Comparación:

=  Igual
<  Menor
>  Mayor
<>  Diferente
>=  Mayor o igual
<=  Menor o igual

Crear una Base de Datos Utilizando el Lenguaje SQL

Ejemplo:

Para crear la base de datos es la siguiente opción database seguido del nombre de la Base de Datos

--Create database Itae

On primary

(Name= Itae _data, Filename='C: \ itae.mdf', size=10, maxsize=15, filegrowth=25%)

Log On

(Name= Itae _log, filename='C: \ itae.ldf', size=4, maxsize=6, filegrowth=1MB)

Prof.: Diego Alberto Cueva Valverde diegoalberto_1987@hotmail.com 8


Microsoft SQL SERVER / Desarrollo de Aplicaciones utilizando Visual Studio Net 2005

 Después de la sentencia Create database, Se especifica el nombre de la base de datos. Un


nombre en la base de datos debe de ser único en el servidor.

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

Size. – Especifica el tamaño del Archivo.

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.

Para comprobar si la base de datos existe ejecutaremos la siguiente sentencia SQL.


Se procederá abrir la base de datos con el use nombre de la base de datos y luego el Use Go.

Use master

Go

Luego se procederá abrir la tabla Sysdatabases y ahí se podrá visualizar si la base de datos ah
sido creada.

Select * from Sysdatabases

Luego se procederá abrir la base de datos con el use nombre de la base de datos y luego el go

Prof.: Diego Alberto Cueva Valverde diegoalberto_1987@hotmail.com 9


Microsoft SQL SERVER / Desarrollo de Aplicaciones utilizando Visual Studio Net 2005

INSERCIÓN, ELIMINACIÓN Y MODIFICACIÓN DE DATOS

- Inserción de una fila mediante valores:

INSERT INTO {NombreTabla | NombreVista} [Valor de la Columna] VALUES Valores

* 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:

INSERT NombreTabla SELECT ListaColumnas FROM ListaTablas WHERE


CondicionBusqueda

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.

SELECT ListaColumnas INTO NuevaTabla FROM TablaOrigen


WHERE CondicionBusqueda

Se utiliza mucho para crear tablas temporales

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

- Inserción de datos mediante valores de columna predeterminados: Se usa para no


dejar a las tablas con el valor null y así no da error.

Se utilizan dos clausulas:

DEFAULT: Especificar que cogiera en la lista de valores el valor por defecto


de esa columna
DEFAULT VALUES: Crea una nueva fila con los valores por defecto de todas
las columnas

ELIMINACIÓN DE DATOS

- DELETE: Elimina una o varias filas. Hay un control de las modificaciones (Borrado) que se
estan haciendo.

DELETE [FROM (Opcional) ] {NombreTabla | NombreVista }


WHERE CondicionBusqueda
Delete from emp where apellido = „SERRA‟

Prof.: Diego Alberto Cueva Valverde diegoalberto_1987@hotmail.com 10


Microsoft SQL SERVER / Desarrollo de Aplicaciones utilizando Visual Studio Net 2005

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

TRUNCATE TABLE NombreTabla


Truncate Table emp

- Eliminación de filas basada en otras tablas

DELETE [ FROM ] {NombreTabla | NombreVista}


[ FROM, OrigenTabla,... ] [ WHERE CondicionBusqueda ]

ACTUALIZACIONES

- Actualización de filas basadas en datos de la propia tabla

UPDATE {NombreTabla | NombreVista }


SET NombreColumna = expresión { DEFAULT | NULL, ... }

USE Northwind
UPDATE products
SET unitprice = (unitprice * 1.1 )

- Actualización de filas basadas en otras tablas

UPDATE {NombreTabla | NombreVista }


SET NombreColumna = expresión { DEFAULT | NULL, ... }
FROM OrigenTabla
WHERE CondicionBusqueda

Ejercicios:

Ejemplo 1

Abrir la base de datos creada anteriormente

--use Itae

//* se procederá abrir la base de datos *//

--go

Ejemplo 2

Crearemos la Tabla alumnos

--CREATE TABLE alumnos

Prof.: Diego Alberto Cueva Valverde diegoalberto_1987@hotmail.com 11


Microsoft SQL SERVER / Desarrollo de Aplicaciones utilizando Visual Studio Net 2005

--(

--Idalumno VarChar(8)not null,

--nom_alumno Varchar (50) Not Null,

--ape_alumno Varchar (50) Not Null,

--dir_alumno Varchar (50) Not Null,

--tel_alumno VarChar(8),

--Email_alumno Varchar (50),

--)

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.

--select * from alumnos

Ejemplo 4

Ingreso de Datos a la Tabla alumnos se utiliza la sentencia insert into

--Insert into alumnos (idalumno,nom_alumno,ape_alumno,dir_alumno,tel_alumno,email_alumno)Values


('Cli01','james','james','Ventanilla','252511','jazoon_28@hotmail.com')

--Insert into alumnos (idalumno,nom_alumno,ape_alumno,dir_alumno,tel_alumno,email_alumno)Values


('Cli01','Juan Carlos','Ochoa Valverde','Coop. Primavera Mz. R1. Lote 16','557-
2147','jaz_28@hotmail.com')

--Insert into alumnos (idalumno,nom_alumno,ape_alumno,dir_alumno,tel_alumno,email_alumno) Values


('Cli02','Arturo','Capuñay Laqui','Jr. Viru 406 Nº8','481-6507','eternal_alcaris@Hotmail.com')

--Insert into alumnos (idalumno,nom_alumno,ape_alumno,dir_alumno,tel_alumno,email_alumno) Values


('Cli03','Luis Alexander','Aguilar Wong','Jr. Hon ','920-1090','luis_hexen@Hotmail.com')

--Insert into alumnos (idalumno,nom_alumno,ape_alumno,dir_alumno,tel_alumno,email_alumno) Values


('Cli04','Fredy Richard',' Anaya Jesus','Residencial ','539-0886','fredyanaya@Hotmail.com')

Prof.: Diego Alberto Cueva Valverde diegoalberto_1987@hotmail.com 12


Microsoft SQL SERVER / Desarrollo de Aplicaciones utilizando Visual Studio Net 2005

Ejemplo 5

Si deseáramos Eliminar seria con la sentencia Delete

--delete from alumnos where nom_alumno='juan Carlos'

Ejemplo 6

Para Actualizar se Utiliza la sentencia Update y Set

--Update alumnos set nom_alumno='diego', ape_alumno='cueva', dir_alumno='los olivos',


tel_alumno='5402972', email_alumno='hades_278@hotmail.com' where idalumno='01'

Ejemplo 7

Para Realizar una Consulta se utiliza el Where

--select* from alumnos where idalumno='Cli01'

Ejemplo 8

Si también uno desea se puede poner en orden ascendente y descendente pará ello se utilizar el
ASC y Desc

--select * from alumnos ORDER BY nom_alumno Asc

Prof.: Diego Alberto Cueva Valverde diegoalberto_1987@hotmail.com 13


Microsoft SQL SERVER / Desarrollo de Aplicaciones utilizando Visual Studio Net 2005

--select * from alumnos ORDER BY nom_alumno desc

Ejemplo 9

Para eliminar un Objeto de la base de datos se utiliza la sentencia Drop.

Eliminar de la base de Datos Itae la Tabla Alumnos.

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

OPERADORES DE CONDICIÓN _ FILAS

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

LIKE.- Para comparación de cadenas de caracteres admite los comodines % y _.

OPERADOR LIKE

% Cualquier número de caracteres

_ Para un carácter individual

[ ] Para un conjunto de caracteres que esté dentro del corchete

[ ^ ] Que el carácter individual que no esté dentro del corchete

EJEMPLO: LIKE ‘%een’ Muestra todos los caracteres que acaben con een

Prof.: Diego Alberto Cueva Valverde diegoalberto_1987@hotmail.com 14


Microsoft SQL SERVER / Desarrollo de Aplicaciones utilizando Visual Studio Net 2005

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

Lista de productos cuyo nombre contenga la palabra vino

Use Poseidon

Go

Select * from productos where nombreproducto like '%vino%'

Prof.: Diego Alberto Cueva Valverde diegoalberto_1987@hotmail.com 15


Microsoft SQL SERVER / Desarrollo de Aplicaciones utilizando Visual Studio Net 2005

Luego procedemos a ejecutar la aplicación.

El símbolo % representa a cualquier cadena de caracteres, inclusive la cadena nula.

Ejemplo 12

Lista de productos cuya primera letea empieza con la letra a.

Select * from productos where nombreproducto like '[a]%'

Ejemplo 13

Lista de productos cuya primera letea empieza con la letra a y la tercera con la letra e.

Select * from productos where nombreproducto like '[a]%[e]'

Ejemplo 14

Lista de productos cuyo nombre empieza con cualquier carácter que va en el rango de la M a la
T.

Select * from productos where nombreproducto like '[m-t]%'

Prof.: Diego Alberto Cueva Valverde diegoalberto_1987@hotmail.com 16


Microsoft SQL SERVER / Desarrollo de Aplicaciones utilizando Visual Studio Net 2005

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.

Select * from productos where nombreproducto like '[^b-t][^r]%'

 El Carácter ^ significa incluir.


 El Carácter % representa cualquier cadena de caracteres, inclusive la cadena nula
 El Carácter _ Representa cualquier carácter imprimible no puede ser nulo.

Ejemplo 16

Lista de productos cuyo nombre empieza con la palabra Queso.

Select * from productos where nombreproducto like 'queso%'

Ejemplo 17

Lista productos cuyo segundo carácter empiece con la letra e.

Select * from productos where nombreproducto like '_e%'

Prof.: Diego Alberto Cueva Valverde diegoalberto_1987@hotmail.com 17


Microsoft SQL SERVER / Desarrollo de Aplicaciones utilizando Visual Studio Net 2005

Ejemplo 18

Lista de productos cuyo nombre empiece con C, M Ò R.

Select * from productos where nombreproducto like „[cmr] %'

Ejemplo 19

Lista de productos cuyo nombre empiece con C, M Ò R. El segundo Carácter debe ser A.

Select * from productos where nombreproducto like „[cmr] a%'

 El comodín [cmr], representa el conjunto de caracteres validos en la posición en la que


aparecerá el comodín.

Ejemplo 20

Seleccionar todos los productos que termine con la letra Z

Select * from productos where nombreproducto like '%z'

Prof.: Diego Alberto Cueva Valverde diegoalberto_1987@hotmail.com 18


Microsoft SQL SERVER / Desarrollo de Aplicaciones utilizando Visual Studio Net 2005

Ejemplo 21

Mostrar todos los productos cuya cuarta letra sea A

Select * from productos where nombreproducto like '___a%'

USO DEL OPERADOR BETWEEN

Permite seleccionar en base a un rango de valores.

Ejemplo 22

Lista de productos cuyo precio se encuentra en el rango que va de 15 a 21 nuevos soles.

Select * from productos where preciounidad between 15 and 21

Ejemplo 23

Lista de productos cuyo nombre se encuentren en el rango de Cerveza y galletas

Select * from productos where nombreproducto between 'cerveza' and 'galletas'

Prof.: Diego Alberto Cueva Valverde diegoalberto_1987@hotmail.com 19


Microsoft SQL SERVER / Desarrollo de Aplicaciones utilizando Visual Studio Net 2005

USO DEL OPERADOR IN

Permite seleccionar en base a un conjunto de valores

Ejemplo 24

Lista de proveedores ubicados en las ciudades de Londres, Paris, Lima.

Select * from proveedores where ciudad in ('londres','París','Tokyo')

Ejercicios de Repaso

Ejemplo 25

Mostrar todos los datos de los empleados de nuestra tabla Empleados

Select * from empleados

Ejemplo 26

Mostrar la tabla detalles de Pedido el 19 % de cada compra realizada.

Select idpedido, idproducto, preciounidad, cantidad, (preciounidad*cantidad)*0.19 as IGV


from [detalles de pedidos]

Prof.: Diego Alberto Cueva Valverde diegoalberto_1987@hotmail.com 20


Microsoft SQL SERVER / Desarrollo de Aplicaciones utilizando Visual Studio Net 2005

Ejemplo 27

Mostar los productos cuyo precio sea mayor a 40

Select * from productos where Preciounidad > 40

Ejemplo 28

Mostrar todos los datos de los Clientes ordenados por Ciudad.

Select * from clientes order by ciudad

Prof.: Diego Alberto Cueva Valverde diegoalberto_1987@hotmail.com 21


Microsoft SQL SERVER / Desarrollo de Aplicaciones utilizando Visual Studio Net 2005

Ejemplo 29

Mostrar todos los productos de la Categoría 2.

Select * from productos where IdCategoría='2'

Ejemplo 30

Mostrar todos los pedidos realizados en la fecha 1996-06-05

Select * from Pedidos where FechaPedido ='1996-06-05'

Prof.: Diego Alberto Cueva Valverde diegoalberto_1987@hotmail.com 22


Microsoft SQL SERVER / Desarrollo de Aplicaciones utilizando Visual Studio Net 2005

Ejemplo 31

Mostrar todos los pedidos mayores a la Fecha 1996-05-05

Select * from Pedidos where FechaPedido > '1996-05-05'

Ejemplo 32

Visualizar los productos que el precio unitario esta comprendido entre 20 a 25.

Select * from productos where preciounidad between 20 and 25

Ejemplo 33

Mostrar todos los productos cuya IdCategoría no sea 3.

Select * from productos where IdCategoría<> 3

Prof.: Diego Alberto Cueva Valverde diegoalberto_1987@hotmail.com 23


Microsoft SQL SERVER / Desarrollo de Aplicaciones utilizando Visual Studio Net 2005

Ejemplo 34

Mostrar los distintos IdPedido de la Tabla Pedidos.

Select distinct IdPedido from [detalles de pedidos]

Ejemplo 35

Mostrar de la Tabla producto los que no son de la Categoría (1,2,3)

Select * from productos where IdCategoría not in (1, 2, 3) order by IdProducto

Prof.: Diego Alberto Cueva Valverde diegoalberto_1987@hotmail.com 24


Microsoft SQL SERVER / Desarrollo de Aplicaciones utilizando Visual Studio Net 2005

Agrupar y resumir datos

Sacar los n primeros valores

SELECT TOP n Nombre, Apellido... (Saca los n primeros valores)


SELECT TOP n PERCENT Nombre, Apellido... (Saca el n por ciento)
SELECT TOP n WITH TIES Nombre, Apellido.. ORDER BY (Saca los n primeros ordenados por
lo que sea y con coincidencias en el valor n.)

Ejemplo 36

Select top 5 * from productos Devuelve los 5 primeros Productos

Ejemplo 37

Select top 50 percent * from productos  Devuelve el 50% de los Productos

Prof.: Diego Alberto Cueva Valverde diegoalberto_1987@hotmail.com 25


Microsoft SQL SERVER / Desarrollo de Aplicaciones utilizando Visual Studio Net 2005

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.

COUNT: Cuenta los registros que hay en la consulta.


Si pongo un valor dentro de la expresión devolverá la cuenta de todos los
registros no nulos.
Si pongo un asterisco contará todos los registros aunque tengan valores
nulos.

Select count (*) from Pedidos  Valores con Nulos

Select count (FechaEnvío) from Pedidos  Valores sin nulos

AVG: Realiza la media sobre la expresión dada, debe ser un tipo de dato
Int.

Select avg(Preciounidad) from productos

MAX: Saca el valor máximo de una consulta.

Select max (FechaPedido) from Pedidos

Prof.: Diego Alberto Cueva Valverde diegoalberto_1987@hotmail.com 26


Microsoft SQL SERVER / Desarrollo de Aplicaciones utilizando Visual Studio Net 2005

MIN: Devuelve el valor mínimo de una consulta.

Select min (FechaPedido) from Pedidos

SUM: Devuelve la suma de los salarios

Select sum(Cantidad) from [Detalles de pedidos]

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.

Select count (*) as [Numero de Facturas], PaísDestinatario,


Avg (Preciounidad) as [Precio Medio] from
Facturas group by PaísDestinatario having PaísDestinatario ='Brasil'

Ejemplo 39

Encontrar el precio más alto, mas bajo y la diferencia entre ambos de todos los productos con
IdCategoría 2.

Select IdCategoría, Max (Preciounidad) as [Precio mas alto] , min(Preciounidad) as


[Precio mas Bajo] , Max(Preciounidad) - min(Preciounidad) as [Diferencia entre Ambos]
from Productos group by IdCategoría having IdCategoría = '2'

Ejemplo 40

Visualizar el número de productos por Categoría.

Select IdCategoría as [Nº de Categoría], Count (IdCategoría) as [Nº de Productos]


From Productos group by IdCategoría.

Prof.: Diego Alberto Cueva Valverde diegoalberto_1987@hotmail.com 27


Microsoft SQL SERVER / Desarrollo de Aplicaciones utilizando Visual Studio Net 2005

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

Lista de productos cuya venta allá sido mayor a 50000.

Select IdProducto, Monto=Sum (Preciounidad * Cantidad) from [Detalles de pedidos] group


by IdProducto having Sum (Preciounidad * Cantidad)>50000 order by IdProducto

Ejemplo 43

Cuantos Clientes no tienen Fax.

Select Count (*) as [Total de Clientes sin Fax] from clientes where fax is null

Prof.: Diego Alberto Cueva Valverde diegoalberto_1987@hotmail.com 28


Microsoft SQL SERVER / Desarrollo de Aplicaciones utilizando Visual Studio Net 2005

Ejemplo 44

Cuantos Clientes tienen Fax.

Select Count (*) as [Total de Clientes Tienen Fax] from clientes where fax is Not null

Funciones de Fecha y Hora

La siguiente tabla muestra las funciones de fecha y hora disponibles en SQL server.

Función Resultado

GETDATE() Retorna la fecha y hora del sistema

DATEADD(partefecha,n,fecha) Retorna una nueva fecha añadiendo n


unidades de partefecha a fecha
DATEDIFF(parteFecha,fecha1,fecha2) Retorna la diferencia en parteFecha entre
fecha1 y fecha2.
DATENAME(partefecha,fecha) Retorna la cadena correspondiente a
partefecha en fecha
DATEPART(partefecha,fecha) Retorna el numero correspondiente a
partefecha y fecha
DAY(fecha) Retorna el numero correspondiente a la
parte del día de fecha
MONTH(fecha) Retorna el numero correspondiente a la
parte del mes de fecha
YEAR(fecha) Retorna el numero correspondiente a la
parte del año de fecha
GETUTCDATE() Retorna la fecha y hora del meridiano de
Greenwich

La siguiente tabla muestra los valores de partefecha que podemos utilizar.

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

Prof.: Diego Alberto Cueva Valverde diegoalberto_1987@hotmail.com 29


Microsoft SQL SERVER / Desarrollo de Aplicaciones utilizando Visual Studio Net 2005

Getdate

Select getdate () Función que recupera la fecha actual del sistema.

Convert, Cast

Convierten explícitamente una expresión de un tipo de datos en otro. CAST y CONVERT


proporcionan funciones similares.
Convert (Tipodedatosdestino, Origen, Estilo)
o Tipodedatosdestino: Siempre ha de ser tipo carácter
o Origen: Puede ser tipo fecha, numérico o moneda.
o Estilo: Opcional. Es un código que indica el formato en el que devuelve la cadena de
caracteres.
Sintaxis:

Convert (TipoDato, Dato)


Cast (Dato as TipoDato)

Ejemplo:

declare @n int,@palabra nvarchar(10)


set @n = 1
set @palabra ='Número'
print convert(nvarchar(2),@n) + ' ' + @palabra
print cast(@n as nvarchar(2)) + ' ' + @palabra

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

Prof.: Diego Alberto Cueva Valverde diegoalberto_1987@hotmail.com 30


Microsoft SQL SERVER / Desarrollo de Aplicaciones utilizando Visual Studio Net 2005

Ejemplo 46

Select IdPedido, DateName (week, FechaPedido) as 'Numero de Semana' from Pedidos where IdPedido
= 1035251

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

Select DateName (minute, getdate ()) as 'minutos'

Ejemplo 50

Select DateName (Hh, FechaPedido) as 'hora' from Pedidos where IdPedido = 10352

Prof.: Diego Alberto Cueva Valverde diegoalberto_1987@hotmail.com 31


Microsoft SQL SERVER / Desarrollo de Aplicaciones utilizando Visual Studio Net 2005

Ejemplo 51

Select DateName (Hour, getdate ()) as 'hora'-->18

Ejemplo 52

Select DateName (Hh, getdate ()) as 'hora'-->18

DatePart

Devuelve la parte de la fecha u hora indicada. Sintaxis:

Datepart (Valor devolver, fecha)

Ejemplo 53

Select IdPedido, datepart (mm, FechaPedido) as 'Mes' from Pedidos where IdPedido = 10352

Ejemplo 54

Select Datepart (Hh, getdate ()) as 'Hora'-->17

Ejemplo 55

Select Datepart (mi, getdate ()) as 'Minutos'-->54

Prof.: Diego Alberto Cueva Valverde diegoalberto_1987@hotmail.com 32


Microsoft SQL SERVER / Desarrollo de Aplicaciones utilizando Visual Studio Net 2005

Nombres de Fechas

Day (fecha)
Devuelve UN INT, equivale a Datepart

Select day (getdate ()) as día-->6 (día en la que se ejecuta la sentencia)


Select Datepart (dd, getdate ()) -->6 (día en la que se ejecuta la sentencia)
Select Month (getdate ()) -->1 (Mes en la que se ejecuta la sentencia)
Select Datepart (mm, getdate ()) -->1 (Mes en la que se ejecuta la sentencia)
Select Year (getdate ()) -->2008 (Año en la que se ejecuta la sentencia)

Ejemplo 56

Select year (FechaPedido) as 'Año' from Pedidos where IdPedido = 10352

Ejemplo 57

Select datediff (yyyy, FechaPedido, getdate()) as 'Dia' from Pedidos where IdPedido = 10352

DateAdd

DateAdd (Datepart, number, date)


Añade un número a la fecha puesta
DatePart es el formato de lo que queremos añadir.
Number es el número que queremos incrementar la fecha expuesta.

Select convert (datetime,'1-1-02')

Select dateadd (dd, 7,'1-1-02')

DateDiff

Devuelve la diferencia entre dos fechas en el intervalo que le indiquemos. Sintaxis:


DateDiff (DatoqueDevuelve, Fecha1, Fecha2)
o Datoquedevuelve: Indicamos como queremos que haga la comparación y el tipo de dato
que nos devolverá, años, días, minutos etc.

Prof.: Diego Alberto Cueva Valverde diegoalberto_1987@hotmail.com 33


Microsoft SQL SERVER / Desarrollo de Aplicaciones utilizando Visual Studio Net 2005

Ejemplo 58

Select datediff (yyyy, FechaPedido, getdate ()) as 'Dia' from Pedidos where IdPedido = 10352

Ejercicios de funciones de Fecha

Ejemplo 59

Lista de pedidos emitidos en febrero de 1996

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

Prof.: Diego Alberto Cueva Valverde diegoalberto_1987@hotmail.com 34


Microsoft SQL SERVER / Desarrollo de Aplicaciones utilizando Visual Studio Net 2005

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

Mostrar de la tabla pedidos la fecha de pedidos en fecha corta.

Select IdPedido, convert (varchar (30), FechaPedido, 106) as [Fecha Corta] from pedidos

Prof.: Diego Alberto Cueva Valverde diegoalberto_1987@hotmail.com 35


Microsoft SQL SERVER / Desarrollo de Aplicaciones utilizando Visual Studio Net 2005

FUNCIONES MATEMATICAS

ABS

Es el valor Absoluto

Select ABS (-4) as 'VALOR ABSOLUTO'-->4

CEILING

Devuelve el entero más pequeño mayor o igual que la expresión numérica dada.

Select CEILING (5.4) as 'CEILING'--6

FLOOR

Devuelve el entero más grande menor o igual que la expresión numérica dada.

Select FLOOR (5) as 'FLOOR'-->5

POWER

Devuelve el valor de la expresión indicada elevada a la potencia especificada.

Select POWER (3, 2) as '3 ELEVADO A 2'-->9

RAND

Devuelve un valor float aleatorio de 0 a 1.


Las llamadas repetitivas de RAND() en una única consulta producirán el mismo valor.

Select RAND(6) as 'ALEATORIO'--0.71368515806921451


Select RAND(6) as 'ALEATORIO'--0.71368515806921451
Select RAND(4) as 'ALEATORIO'--0.7136478921266981

Rand sobre los milisegundos actuales

Select RAND(DATEPART(ms,GETDATE())) as 'ALEATORIO'-->0.71443047691954253


Select RAND(999999999)-->0.68504257551273573

ROUND

Devuelve una expresión numérica, redondeada a la longitud o precisión especificada.


Round (Número, Redondeo del Número)
ROUND siempre devuelve un valor. Si length es un valor negativo y mayor que el número de
dígitos anteriores al separador decimal, ROUND devuelve 0.

Select ROUND (123.4567, 2) -->123.4600

Prof.: Diego Alberto Cueva Valverde diegoalberto_1987@hotmail.com 36


Microsoft SQL SERVER / Desarrollo de Aplicaciones utilizando Visual Studio Net 2005

Select ROUND (123.4567,-2) -->100.0000


Select ROUND (123.4567, 0) -->123.0000
Select ROUND (123.4567,-3) --->0

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

Select SIGN (-3) -->-1


Select SIGN (3) -->1
Select SIGN (0) -->0

SQUARE

Devuelve el cuadrado de la expresión especificada.

Select SQUARE (4) as „Cuadrado‟-->16.0

SQRT

Devuelve la raíz cuadrada de la expresión especificada.

Select SQRT (4) as [RAIZ CUADRADA] -->2.0

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

Una función de cadena que convierte un código ASCII int en un carácter.

select char(65)-->A
select char(97)-->a

Prof.: Diego Alberto Cueva Valverde diegoalberto_1987@hotmail.com 37


Microsoft SQL SERVER / Desarrollo de Aplicaciones utilizando Visual Studio Net 2005

CHARINDEX

Devuelve la posición inicial de la expresión especificada en una cadena de caracteres.

CHARINDEX (expression1, expression2 [, start_location])

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.

Si expression1 no se encuentra en expression2, CHARINDEX devuelve 0.


Si alguno de los dos es null, devuelve null

Select charindex ('cie','murcielago') -->4


Select charindex ('cie','murcielago', 2) -->4
Select charindex ('cie','murcielago', 5) -->0
Select charindex ('cie','murcielago',-6) -->4

LEFT

Devuelve la parte de una cadena de caracteres que comienza en un número de caracteres


especificado a partir de la izquierda

Select left ('murcielago',5) -->murci

RIGHT

Devuelve la parte de una cadena de caracteres que


Comienza en el número de caracteres especificado
En integer_expression a partir de la derecha.

Select right ('hola que tal',5) -->e tal

LEN

Cuenta el número de caracteres que se incluyen en la cadena.

Select len ('murciélago') -->10

Prof.: Diego Alberto Cueva Valverde diegoalberto_1987@hotmail.com 38


Microsoft SQL SERVER / Desarrollo de Aplicaciones utilizando Visual Studio Net 2005

LOWER

Convierte a Minúsculas la cadena especificada

Select lower ('MurcIELaGO') as [minusculas] -->murcielago

UPPER

Convierte a Mayúsculas la cadena especificada

Select upper ('murcielago') as [MAYUSCULAS] -->MURCIELAGO

RTRIM y LTRIM

Elimina los espacios que existen a la izquierda y a la derecha respectivamente.

Select Rtrim (' murciélago ') AS [SIN ESPACIOS] -->murciélago


Select Ltrim (' murciélago ') AS [SIN ESPACIOS] -->murciélago
Select ltrim(rtrim(' hola '))+'.'

REPLACE

Reemplaza por una tercera expresión todas las apariciones


de la segunda expresión de cadena proporcionada en la primera expresión de cadena

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.

Select 'hola'+space(5)+'que tal'-->hola que tal

SUBSTRING

Devuelve parte de una expresión de caracteres, binaria, de texto o de imagen.


Sintaxis:

SUBSTRING (Expresión, Comienzo, Duración)

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.

Prof.: Diego Alberto Cueva Valverde diegoalberto_1987@hotmail.com 39


Microsoft SQL SERVER / Desarrollo de Aplicaciones utilizando Visual Studio Net 2005

Length
Es un entero que especifica la longitud de la subcadena
(El número de caracteres o bytes que se devuelven).

Select substring ('murcielago', 3, 5) -->rciel


Select substring ('murcielago', 3, len ('murcielago')) -->rciel

REVERSE

Devuelve invertida una expresión de carácter.

Select reverse ('hola')

REPLICATE

Repite una expresión de caracteres un número especificado de veces.


Select replicate ('murcielago', 5)

Replicate, replicate, replicate, replicate, replicate

STUFF

Elimina el número de caracteres especificados e insertados


Otro conjunto de caracteres en un punto de inicio indicado.

Select STUFF ('Murciélago', 2, 3, 'ijklmn') Mijklmnielago

FUNCIONES DE SISTEMA

- APP_NAME () Devuelve el nombre de la aplicación actual

Select app_name () as [Nombre de la aplicacion]

- DATALENGTH (Expresión) Devuelve un entero que es numero de bites necesarios para


representar esa expresión  int

Select datalength ('Ninoni') as [Numero de bites]

- ISDATE (Expresión) Dice si la expresión es una fecha o no. Devuelve 1 si la expresión es


una fecha y 0 si no es una fecha.

Prof.: Diego Alberto Cueva Valverde diegoalberto_1987@hotmail.com 40


Microsoft SQL SERVER / Desarrollo de Aplicaciones utilizando Visual Studio Net 2005

Select isdate ('12/10/01') as [Validación Fecha]

- ISNUMERIC (Expresion) Dice si la expresión es un numero o no. Devuelve 1 si la


expresión es un número y 0 si la expresión no es número.

Select isnumeric ('ddd') as [Validacion Numero]

- ISNULL (Expresión , ExpresionDevuelta) Si la expresión es nula te devuelve la Expresión


Devuelta y si no devuelve la primera Expresión

Select isnull (null,'No nulo') as [Es Nulo]

- PARSENAME („NombreObjeto‟, ParteNombre)


ParteNombre es un valor de tipo Int que coge unos determinados valores del
NombreObjeto:
1 Objeto.
2 Propietario
3 Base de Datos
4 Servidor

Select parsename ('sa.poseidon.dbo.pedidos',1) as [Parte Expresión]


Select parsename ('sa.poseidon.dbo.pedidos', 2) as [Parte Expresión]
Select parsename ('sa.poseidon.dbo.pedidos',3) as [Parte Expresión]
Select parsename (' sa.poseidon.dbo.pedidos', 4) as [Parte Expresión]

Prof.: Diego Alberto Cueva Valverde diegoalberto_1987@hotmail.com 41


Microsoft SQL SERVER / Desarrollo de Aplicaciones utilizando Visual Studio Net 2005

- SYSTEM_USER
Devuelve el usuario del sistema actual
Depende de la autentificación con la que te hayas conectado

Select system_user as [Usuario conectado]

- USER_NAME()
Devuelve el nombre del usuario actual

Select user_name ()

- COALESCE (expresión1, expresión2, ...)

Devuelve la primera expresión no NULL


Si todos son NULL devuelve NULL

Select coalesce (PrecioUnidad, Cantidad) from [detalles de Pedidos]  Si el PrecioUnidad es nulo


devolverá la Cantidad, y si los dos son nulos, devolverá un campo Null.

PROCEDIMIENTOS PARA AGRUPAR Y RESUMIR DATOS

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

Select * from [Order Details]

[Order Details]

Esta tabla perteneciente a la Northwind, se encarga de manejar los pedidos

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

Prof.: Diego Alberto Cueva Valverde diegoalberto_1987@hotmail.com 42


Microsoft SQL SERVER / Desarrollo de Aplicaciones utilizando Visual Studio Net 2005

1 C
2 A
3 C

Es decir en este caso no podría existir una nueva combinación “1 A” o “2 A”.


Quantity: Es la cantidad del producto del pedido.

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

Select ProductID, OrderId,


Sum(Quantity) As Cantidad_Total
From [Order Details]
Group by ProductID, OrderID
with Rollup
Order by ProductID, OrderID

Este ejemplo suma todas las cantidades, y mediante


rollup, muestra una fila con la suma de todas las
cantidades de cada producto, y además, otra fila con la
suma de todas las cantidades de todos los productos. El
resultado de este ejemplo, sería el que muestra la
imagen:

Ejemplo 64

Select ProductID, OrderId,


Sum(Quantity) As Cantidad_Total
From [Order Details]
where orderid < 10250
Group by ProductID, OrderID
with Rollup
Order by ProductID, OrderID

Prof.: Diego Alberto Cueva Valverde diegoalberto_1987@hotmail.com 43


Microsoft SQL SERVER / Desarrollo de Aplicaciones utilizando Visual Studio Net 2005

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

Select ProductID, OrderId,


Sum(Quantity) As Cantidad_Total
From [Order Details]
where orderid < 10250
Group by ProductID, OrderID
with Cube
Order by ProductID, OrderID

En este caso como vemos en la imagen, hace un resumen con


la suma de la cantidad de cada combinación posible entre el
productid y el orderid

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

Select Productid, grouping(ProductID), Orderid, grouping(OrderId),


Sum(Quantity) As Cantidad_Total From [Order Details] where orderid < 10250 Group by ProductID,
OrderID with Cube Order by ProductID, OrderID

Prof.: Diego Alberto Cueva Valverde diegoalberto_1987@hotmail.com 44


Microsoft SQL SERVER / Desarrollo de Aplicaciones utilizando Visual Studio Net 2005

Vemos que por cada


grouping que hemos puesto,
sale una columna, 1 indica
que el Null es creado por la
clausula Cube y 0 indica que
es de la tabla.
Poniéndole un alias al
grouping saldría el nombre
de columna que le
indiquemos.

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)

Vemos que muestra la


columna con la suma
total de todas las
cantidades.

Prof.: Diego Alberto Cueva Valverde diegoalberto_1987@hotmail.com 45


Microsoft SQL SERVER / Desarrollo de Aplicaciones utilizando Visual Studio Net 2005

Ejercicios de ROLLUP, GROUPING y CUBE

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.

select productid as [PRODUCTO] ,orderid as [Nº PEDIDO] ,sum(quantity) as [SUMA TOTAL]


from [Order Details] group by productid, orderid with rollup order by productid, orderid

PRODUCTO Nº PEDIDO SUMA TOTAL


----------- ----------- -----------
NULL NULL 51317
1 NULL 828
1 10285 45
1 10294 18
1 10317 20
1 10348 15
1 10354 12
1 10370 15
1 10406 10
1 10413 24
1 10477 15
1 10522 40
1 10526 8
1 10576 10
1 10590 20

Ejemplo 69

Modificación al ejercicio anterior: Realizar el mismo resumen pero únicamente para el producto
cuyo id es 50

select productid as [PRODUCTO] ,orderid as [Nº PEDIDO] ,sum(quantity) as [SUMA TOTAL]


from [Order Details] where productid = 50 group by productid, orderid with rollup
order by productid, ordered

PRODUCTO Nº PEDIDO SUMA TOTAL


----------- ----------- -----------
NULL NULL 235
50 NULL 235
50 10350 15
50 10383 15
50 10429 40
50 10465 25
50 10637 25
50 10729 40

Prof.: Diego Alberto Cueva Valverde diegoalberto_1987@hotmail.com 46


Microsoft SQL SERVER / Desarrollo de Aplicaciones utilizando Visual Studio Net 2005

50 10751 20
50 10920 24
50 10948 9
50 11072 22

(12 filas afectadas)

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.

select Productid as [PRODUCTO] ,grouping(productid) as [GRUPO PRODUCTO]


,orderid as [Nº PEDIDO] ,grouping(orderid) as [GRUPO PEDIDO] ,sum(quantity) as [SUMA TOTAL]
from [Order Details] where productid = 50 group by Productid,orderid
with cube order by productid,orderid

PRODUCTO GRUPO PRODUCTO Nº PEDIDO GRUPO PEDIDO SUMA TOTAL


----------- -------------- ----------- ------------ -----------
NULL 1 NULL 1 235
NULL 1 10350 0 15
NULL 1 10383 0 15
NULL 1 10429 0 40
NULL 1 10465 0 25
NULL 1 10637 0 25
NULL 1 10729 0 40
NULL 1 10751 0 20
NULL 1 10920 0 24
NULL 1 10948 0 9
NULL 1 11072 0 22
50 0 NULL 1 235
50 0 10350 0 15
50 0 10383 0 15
50 0 10429 0 40
50 0 10465 0 25
50 0 10637 0 25
50 0 10729 0 40
50 0 10751 0 20
50 0 10920 0 24
50 0 10948 0 9
50 0 11072 0 22

(22 filas afectadas)

Prof.: Diego Alberto Cueva Valverde diegoalberto_1987@hotmail.com 47


Microsoft SQL SERVER / Desarrollo de Aplicaciones utilizando Visual Studio Net 2005

Obtención de resúmenes detallados con Computer by

SELECT lista_columna FROM tabla ORDER BY columnax COMPUTE FUNCION_AGREGACION


(columna) BY columnax

Columnax.- Es la Columna en base a cuyos valores se formaran los grupos.

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.

select Idpedido,idproducto,preciounidad,cantidad,[Sub Total]=sum(Preciounidad*Cantidad) from


[detalles de pedidos] group by Idpedido,idproducto,preciounidad,cantidad order by IdPedido compute
sum(Cantidad) by IdPedido

EJERCICIOS CON COMPUTE:

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

Prof.: Diego Alberto Cueva Valverde diegoalberto_1987@hotmail.com 48


Microsoft SQL SERVER / Desarrollo de Aplicaciones utilizando Visual Studio Net 2005

Select Orderid as [Nº PEDIDO], Quantity AS [CANTIDAD]


From [Order Details] where orderid >= 11070 order by Orderid
compute Sum(quantity) by orderid compute sum(quantity)

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

Select Orderid as [Nº PEDIDO], Quantity as [CANTIDAD]


From [Order Details] where orderid = 11075 or orderid = 11076
order by Orderid compute Sum(quantity) by ordered

Nº PEDIDO CANTIDAD
----------- --------
11075 10
11075 30
11075 2

sum
===========
42

Nº PEDIDO CANTIDAD
----------- --------
11076 20
11076 20
11076 10

Prof.: Diego Alberto Cueva Valverde diegoalberto_1987@hotmail.com 49


Microsoft SQL SERVER / Desarrollo de Aplicaciones utilizando Visual Studio Net 2005

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

(10 filas afectadas)

Prof.: Diego Alberto Cueva Valverde diegoalberto_1987@hotmail.com 50


Microsoft SQL SERVER / Desarrollo de Aplicaciones utilizando Visual Studio Net 2005

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

TIPO PRECIO ANTICIPO


------------ --------------------- ---------------------
business 19.9900 5000.0000
business 11.9500 5000.0000
business 2.9900 10125.0000
business 19.9900 5000.0000

sum
=====================
54.9200

avg
=====================
6281.2500

TIPO PRECIO ANTICIPO


------------ --------------------- ---------------------
mod_cook 19.9900 .0000
mod_cook 2.9900 15000.0000

sum
=====================
22.9800

avg
=====================
7500.0000

TIPO PRECIO ANTICIPO


------------ --------------------- ---------------------
popular_comp 22.9500 7000.0000
popular_comp 20.0000 8000.0000
popular_comp NULL NULL

sum
=====================
42.9500

Prof.: Diego Alberto Cueva Valverde diegoalberto_1987@hotmail.com 51


Microsoft SQL SERVER / Desarrollo de Aplicaciones utilizando Visual Studio Net 2005

avg
=====================
7500.0000

TIPO PRECIO ANTICIPO


------------ --------------------- ---------------------
psychology 21.5900 7000.0000
psychology 10.9500 2275.0000
psychology 7.0000 6000.0000
psychology 19.9900 2000.0000
psychology 7.9900 4000.0000

sum
=====================
67.5200

avg
=====================
4255.0000

(30 filas afectadas)

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

Select type as [TIPO], price as [PRECIO], advance as [ANTICIPO]


From titles
order by type
compute sum(price) by type
compute sum(advance) by type

TIPO PRECIO ANTICIPO


------------ --------------------- ---------------------
business 19.9900 5000.0000
business 11.9500 5000.0000
business 2.9900 10125.0000
business 19.9900 5000.0000

sum
=====================
54.9200

sum

Prof.: Diego Alberto Cueva Valverde diegoalberto_1987@hotmail.com 52


Microsoft SQL SERVER / Desarrollo de Aplicaciones utilizando Visual Studio Net 2005

=====================
25125.0000

TIPO PRECIO ANTICIPO


------------ --------------------- ---------------------
mod_cook 19.9900 .0000
mod_cook 2.9900 15000.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

(30 filas afectadas)

Ejemplo 77

Generar un informe que muestre la suma de los precios de los libros de psicología de cada editor

Select type AS [TIPO]


,pub_id as [CODIGO EDITOR]
,price as [PRECIO]
From titles
where type = 'psychology'
order by pub_id
compute sum(price) by pub_id

TIPO CODIGO EDITOR PRECIO


------------ ------------- ---------------------
psychology 0736 10.9500

Prof.: Diego Alberto Cueva Valverde diegoalberto_1987@hotmail.com 53


Microsoft SQL SERVER / Desarrollo de Aplicaciones utilizando Visual Studio Net 2005

psychology 0736 7.0000


psychology 0736 19.9900
psychology 0736 7.9900

sum
=====================
45.9300

TIPO CODIGO EDITOR PRECIO


------------ ------------- ---------------------
psychology 0877 21.5900

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.

Select type as [TIPO]


,pub_id as [CODIGO EDITOR]
,price as [PRECIO]
From titles
where type = 'psychology'
order by pub_id
compute sum(price) by pub_id
compute sum(price)

TIPO CODIGO EDITOR PRECIO


------------ ------------- ---------------------
psychology 0736 10.9500
psychology 0736 7.0000
psychology 0736 19.9900
psychology 0736 7.9900

sum
=====================
45.9300

TIPO CODIGO EDITOR PRECIO

Prof.: Diego Alberto Cueva Valverde diegoalberto_1987@hotmail.com 54


Microsoft SQL SERVER / Desarrollo de Aplicaciones utilizando Visual Studio Net 2005

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


psychology 0877 21.5900

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

Select type as [TIPO]


,pub_id [CODIGO EDITOR]
,price as [PRECIO]
,advance as [ANTICIPO]
From titles
where type like '%cook'
order by type, advance
compute sum(price) by type
compute sum(advance) by type

TIPO CODIGO EDITOR PRECIO ANTICIPO


------------ ------------- --------------------- ---------------------
mod_cook 0877 19.9900 .0000
mod_cook 0877 2.9900 15000.0000

sum
=====================
22.9800

sum
=====================
15000.0000

TIPO CODIGO EDITOR PRECIO ANTICIPO


------------ ------------- --------------------- ---------------------
trad_cook 0877 11.9500 4000.0000
trad_cook 0877 20.9500 7000.0000
trad_cook 0877 14.9900 8000.0000

Prof.: Diego Alberto Cueva Valverde diegoalberto_1987@hotmail.com 55


Microsoft SQL SERVER / Desarrollo de Aplicaciones utilizando Visual Studio Net 2005

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.

Select title as [TITULO] ,price as [PRECIO] ,advance as [ANTICIPO]


From titles where price > 20 order by title compute sum(price) compute sum(advance)

TITULO PRECIO ANTICIPO


-------------------------------------------------------------------------------- --------------------- -------------
--------
But Is It User Friendly? 22.9500 7000.0000
Computer Phobic AND Non-Phobic Individuals: Behavior Variations 21.5900
7000.0000
Onions, Leeks, and Garlic: Cooking Secrets of the Mediterranean 20.9500
7000.0000

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

Prof.: Diego Alberto Cueva Valverde diegoalberto_1987@hotmail.com 56


Microsoft SQL SERVER / Desarrollo de Aplicaciones utilizando Visual Studio Net 2005

Select type as [TIPO] ,price as [PRECIO] ,pub_id as [CODIGO EDITOR]


From titles where type = 'business' order by pub_id compute sum(price)
compute max(pub_id)

TIPO PRECIO CODIGO EDITOR


------------ --------------------- -------------
business 2.9900 0736
business 19.9900 1389
business 19.9900 1389
business 11.9500 1389

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.

Select type as [TIPO] ,price as [PRECIO] ,advance as [ANTICIPO]


From titles where type like '%cook'
order by type compute sum(price) by type compute sum(advance) by type
compute sum(price) compute sum(advance)

TIPO PRECIO ANTICIPO


------------ --------------------- ---------------------
mod_cook 19.9900 .0000
mod_cook 2.9900 15000.0000

sum
=====================
22.9800

sum
=====================
15000.0000

TIPO PRECIO ANTICIPO


------------ --------------------- ---------------------
trad_cook 20.9500 7000.0000
trad_cook 11.9500 4000.0000
trad_cook 14.9900 8000.0000

sum
=====================

Prof.: Diego Alberto Cueva Valverde diegoalberto_1987@hotmail.com 57


Microsoft SQL SERVER / Desarrollo de Aplicaciones utilizando Visual Studio Net 2005

47.8900

sum
=====================
19000.0000

sum
=====================
70.8700

sum
=====================
34000.0000

(11 filas afectadas)

Eliminación de filas duplicadas del resultado de una consulta

SELECT DISTINCT lista_columnas FROM tabla [WHERE Condicion_filas] [ORDER BY columnas(s)]

Cuando se utiliza la clausula DISTINCT, SQL Elimina las filas que se duplican en el resultado de la
consulta.

Ejemplo 83

1. ¿A que precio se ah vendido los productos?

Select IdProducto, Preciounidad from [Detalles de pedidos] order by IdProducto

Prof.: Diego Alberto Cueva Valverde diegoalberto_1987@hotmail.com 58


Microsoft SQL SERVER / Desarrollo de Aplicaciones utilizando Visual Studio Net 2005

Si observa el resultado contiene filas duplicadas si se desea eliminar esas filas se agrega a la
consulta la clausula DISTINCT.

Select distinct IdProducto, Preciounidad from [Detalles de pedidos]

CONSULTAS A PARTIR DE MULTIPLES TABLAS

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.

INNER JOIN.- son las filas que satisfacen la condición de la combinación.

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.

La única condición es que las 2 tablas tengan un campo en común.

Ejemplo 84

select clientes.NombreCompañía,pedidos.idpedido from clientes inner join pedidos on


clientes.idcliente=pedidos.idcliente

Prof.: Diego Alberto Cueva Valverde diegoalberto_1987@hotmail.com 59


Microsoft SQL SERVER / Desarrollo de Aplicaciones utilizando Visual Studio Net 2005

Ejemplo 85

Mostrar de la tabla pedidos y detalle de pedidos el total de cada compra realizada de cada uno
de los pedidos

Select distinct pedidos.IdPedido, pedidos.IdCliente, Total=sum ([detalles de


pedidos].Preciounidad*[detalles de pedidos].Cantidad) From [detalles de pedidos] inner join pedidos on
[detalles de pedidos].IdPedido=pedidos. IdPedido Group by pedidos.IdPedido, pedidos.IdCliente order
by pedidos. IdPedido

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

select productos.NombreProducto,categorias.Nombrecategoria from productos cross join categorias


order by productos.NombreProducto

Prof.: Diego Alberto Cueva Valverde diegoalberto_1987@hotmail.com 60


Microsoft SQL SERVER / Desarrollo de Aplicaciones utilizando Visual Studio Net 2005

Ejercicios de consultas Múltiples

Ejemplo 87

Mostrar el pedidos completo con el id='10248'

Select pedidos.IdPedido, pedidos.IdCliente,


Total=sum ([detalles de pedidos].Preciounidad*[detalles de pedidos].Cantidad)
From [detalles de pedidos] inner join pedidos on
[Detalles de pedidos].IdPedido=pedidos.IdPedido where pedidos.IdPedido='10248'
Group by pedidos.IdPedido, pedidos.IdCliente

Ejemplo 88

1. Mostrar la cantidad de productos por categoría.

Select Categorías.IdCategoría, Categorías.NombreCategoría,


[Total de Producto]=sum (UnidadesEnExistencia) from Categorías inner join
Productos on Categorías.IdCategoría=productos.IdCategoría
Group by Categorías.IdCategoría, Categorías.NombreCategoría

Prof.: Diego Alberto Cueva Valverde diegoalberto_1987@hotmail.com 61


Microsoft SQL SERVER / Desarrollo de Aplicaciones utilizando Visual Studio Net 2005

Ejemplo 89

Calcular cuantas ventas tiene cada uno de los vendedores.

Select empleados.IdEmpleado, empleados.Nombre, empleados.Apellidos,


[Total de ventas]=count (pedidos.IdPedido) from empleados
Inner join Pedidos on empleados.IdEmpleado=pedidos.IdEmpleado
Group by empleados.IdEmpleado, empleados.Nombre, empleados.Apellidos

Prof.: Diego Alberto Cueva Valverde diegoalberto_1987@hotmail.com 62


Microsoft SQL SERVER / Desarrollo de Aplicaciones utilizando Visual Studio Net 2005

OPERADOR UNION

Es un operador que combina un conjunto de resultados, por ejemplo, una sentencia SELECT con
OTRA

Saca las filas de los empleados y después saca la de Plantilla

Select Apellido,
Oficio as
'OFICIO/FUNCION'
,salario from emp
UNION
Select Apellido,
Funcion, Salario from
Plantilla

Recomendaciones a la hora de usar las combinaciones:

Combinar tablas en función de claves principales y externas


Limite el número de tablas de las combinaciones.

Prof.: Diego Alberto Cueva Valverde diegoalberto_1987@hotmail.com 63


Microsoft SQL SERVER / Desarrollo de Aplicaciones utilizando Visual Studio Net 2005

SUBCONSULTAS

Es una SELECT anidada en una instrucción INSERT, DELETE, SELECT o UPDATE.

Como una tabla derivada

Select e.emp_no as Numero


,e.Apellido
from (select emp_no, apellido from emp) as e

Como una expresión

Select emp_no as [Numero]


,Apellido
,Salario
,(select avg(Salario) from emp)
as Diferencia
from emp
where oficio = 'Empleado'

Para correlacionar datos:

- Expresión dinámica que cambia en cada fila de una consulta externa


- Es una combinación entre la subconsulta y la fila de la consulta externa.
- Dividen consultas complejas con dos o más consultas simples relacionadas

Subconsulta correlacionada

Select apellido, oficio,dept_no


from emp as e
where 20 <
(select dept_no from dept as d
where e.dept_no = d.dept_no
and d.dnombre = 'Ventas')

SUBCONSULTAS

1. Mostrar el numero de empleado, el apellido y la fecha de alta del empleado mas antiguo de la
empresa

Prof.: Diego Alberto Cueva Valverde diegoalberto_1987@hotmail.com 64


Microsoft SQL SERVER / Desarrollo de Aplicaciones utilizando Visual Studio Net 2005

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.

select apellido, oficio from emp where


oficio = (select oficio from emp where apellido = 'JIMENEZ')

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)

Prof.: Diego Alberto Cueva Valverde diegoalberto_1987@hotmail.com 65


Microsoft SQL SERVER / Desarrollo de Aplicaciones utilizando Visual Studio Net 2005

5. Mostrar el apellido, la función, sala o departamento de todos los empleados que trabajen en la
empresa.

select e.Apellido, e.Oficio as [Cargo en Empresa], d.dnombre as [Oficina]


from emp as e
inner join dept as d
on e.dept_no = d.dept_no
union
select p.Apellido, p.funcion, s.nombre
from plantilla as p
inner join sala as s
on p.hospital_cod = s.hospital_cod
and p.sala_cod = s.sala_cod
union
select d.Apellido, d.especialidad, h.nombre
from doctor as d
inner join hospital as h
on d.hospital_cod = h.hospital_cod
order by 3

6. Averiguar el salario de todos los empleados de la empresa, de forma que se aprecien las
diferencias entre ellos.

select Apellido, Salario from emp


union
select Apellido, Salario from plantilla
order by 2 desc

7. Mostrar apellidos y oficio de los empleados del departamento 20 cuyo trabajo sea el mismo que
el de cualquier empleado de ventas.

Select apellido, oficio from emp where dept_no = 20 and oficio in


(select oficio from emp where dept_no =

(select dept_no from dept where dnombre = ‘ventas’))


order by 2

Prof.: Diego Alberto Cueva Valverde diegoalberto_1987@hotmail.com 66


Microsoft SQL SERVER / Desarrollo de Aplicaciones utilizando Visual Studio Net 2005

8. Mostrar los empleados que tienen mejor salario que la media de los directores, no incluyendo al
presidente.

Select * from emp where salario >

(select avg (salario) from emp where oficio = 'DIRECTOR')

and oficio <> '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’)

Select apellido, funcion, salario, hospital_cod from plantilla where


funcion in ('ENFERMERO','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’)

Prof.: Diego Alberto Cueva Valverde diegoalberto_1987@hotmail.com 67


Microsoft SQL SERVER / Desarrollo de Aplicaciones utilizando Visual Studio Net 2005

11. Visualizar el salario anual de los empleados de la plantilla del Hospital Provincial y General.

Select apellido, funcion, salario * 12 as [SALARIO ANUAL] from plantilla where


hospital_cod in (select hospital_cod from hospital where nombre = ‘PROVINCIAL’ or
nombre= ‘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.’)

Prof.: Diego Alberto Cueva Valverde diegoalberto_1987@hotmail.com 68


Microsoft SQL SERVER / Desarrollo de Aplicaciones utilizando Visual Studio Net 2005

Simulacion de una clausula JOIN

Vamos a mostrar los oficios que están en más de un departamento.

Select distinct e1.oficio from emp as e1


where e1.oficio in(Select e2.oficio from emp as e2
where e1.dept_no <> e2.dept_no)

Se debe utilizar antes una combinación que una subconsulta, la combinación sería asi, dando los
mismos resultados:

Select distinct e1.Oficio from emp as e1


inner join emp as e2
on e1.oficio = e2.oficio
where e1.dept_no <> e2.dept_no

Estos son los dos oficios que están en


más de un departamento.

Subconsulta para simular una clausula HAVING

select e1.apellido,e1.oficio, e1.salario


from emp as e1
where e1.salario >
(select avg(e2.salario) from emp as e2
where e1.oficio = e2.oficio)

Esta es la consulta utilizando el HAVING, que es la que deberíamos utilizar antes que una
subconsulta de simulación HAVING:

SELECT e1.apellido,e1.oficio, e1.salario


FROM emp AS e1
INNER JOIN emp AS e2
ON e1.oficio = e2.oficio
GROUP BY e1.oficio, e1.salario,e1.apellido
HAVING e1.salario > AVG (e2.salario)

Prof.: Diego Alberto Cueva Valverde diegoalberto_1987@hotmail.com 69


Microsoft SQL SERVER / Desarrollo de Aplicaciones utilizando Visual Studio Net 2005

Prof.: Diego Alberto Cueva Valverde diegoalberto_1987@hotmail.com 70

S-ar putea să vă placă și