Sei sulla pagina 1di 74

Desarrollo de Software

Bases de datos
Una base de datos de Microsoft SQL Server 2005 consta de una coleccin 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 informacin de inventario para el almacn de una fbrica. 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 podra 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 elaboracin de los informes anuales. Antes de crear una base de datos, es importante entender las partes que la componen y cmo disearlas 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 informacin del sistema que utiliza SQL Server, como por ejemplo los valores de las opciones de configuracin.

Tablas
Las tablas son objetos de la base de datos que contienen todos sus datos. Una tabla se define mediante una coleccin de columnas. En las tablas, los datos se organizan con arreglo a un formato de filas y columnas, similar al de una hoja de clculo. 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 compaa puede haber una fila para cada empleado y distintas columnas en las que figuren detalles de los empleados tales como el nmero de empleado, el nombre, la direccin, el puesto que ocupa y su nmero de telfono particular.

Especificar un tipo de datos para una columna


La asignacin de un tipo de datos a cada columna es uno de los primeros pasos que debe llevarse a cabo para disear 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 basndose en los del sistema. Por ejemplo, si slo desea incluir nombres en una columna, puede asignar un tipo de datos de carcter para la misma. Asimismo, si desea que una columna slo contenga nmeros, puede asignar un tipo de datos numrico. Para obtener ms informacin acerca de los tipos de datos definidos por el usuario. SQL Server tambin admite sinnimos de SQL-92 para varios tipos de bases de datos. Para obtener ms informacin.

Recopilado por Yuri Marquez Solis

Desarrollo de Software

Datos binarios
Los datos binarios se componen de nmeros hexadecimales. Por ejemplo, el nmero 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 nmero de dgitos 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 clculo de Microsoft Excel e imgenes 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 mxima prevista para los datos binarios que deben almacenarse.

Datos de carcter
Se define como dato de carcter cualquier combinacin de letras, smbolos y caracteres numricos. Por ejemplo, son datos de carcter vlidos "928", "Johnson" y "(0*&(%B99nh jkJ.". En Microsoft SQL Server 2005, los datos de carcter se almacenan utilizando los tipos de datos char, varchar y text. Utilice varchar cuando vare el nmero 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 ms de 8 KB. Por ejemplo, dado que los documentos HTML son caracteres ASCII y suelen ocupar ms 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 mxima prevista para los datos de carcter 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 utilizacin de caracteres definidos por un conjunto de caracteres determinado. El conjunto de caracteres se elige durante la instalacin de SQL Server y no puede modificarse. Si se utilizan los tipos de datos Unicode, una columna puede almacenar cualquier carcter definido por el estndar 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 ms de un conjunto de caracteres. Utilice nvarchar cuando las entradas de una columna varen en cuanto al nmero de caracteres Unicode que contienen (hasta 4.000). Utilice nchar cuando todas las entradas de una

Recopilado por Yuri Marquez Solis

Desarrollo de Software
columna tengan la misma longitud fija (hasta 4.000 caracteres Unicode). Utilice ntext cuando alguna entrada de una columna ocupe ms 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 carcter 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 vlidas de fecha y hora. Por ejemplo, datos vlidos 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 ao 2079 (para cada valor se necesitan 4 bytes de espacio de almacenamiento).

Datos numricos
Los datos numricos se componen exclusivamente de nmeros. Incluyen nmeros positivos y negativos, decimales, fracciones y nmeros enteros.

Datos enteros
Los datos enteros constan de nmeros 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 nmeros 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 nmeros que tinyint. Utilice el tipo de datos bigint para almacenar nmeros del intervalo comprendido entre -2^63 (9223372036854775808) y 2^63-1 (9223372036854775807). El tamao de almacenamiento es de 8 bytes. Utilice el tipo de datos int para almacenar nmeros 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 nmeros 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 nmeros 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 dgito menos significativo. Estos datos se almacenan mediante los tipos de datos decimal o numeric de SQL Server. El nmero de bytes necesarios para almacenar un valor decimal o numeric depende del nmero total de dgitos de Recopilado por Yuri Marquez Solis

Desarrollo de Software
datos y del nmero de cifras a la derecha del separador decimal. Por ejemplo, se necesitan ms bytes para almacenar el valor 19.283,29383 que para almacenar el valor 1,1. En SQL Server, el tipo de datos numeric es sinnimo del tipo de datos decimal.

Datos numricos aproximados


Los datos numricos aproximados (coma flotante) constan de datos que se almacenan con tanta precisin como permite el sistema de numeracin binario. Los datos numricos aproximados se almacenan mediante los tipos de datos float y real de SQL Server. Por ejemplo, dado que, en notacin decimal, la fraccin "un tercio" se expresa como 0,333333 (hasta el infinito), este valor no se puede representar con total precisin 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 numricas 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 precisin mxima 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 nmero mayor de decimales, utilice el tipo de datos decimal.

Datos especiales
Los datos especiales son aqullos que no se ajustan a ninguna de las categoras de datos, como los datos binarios, de carcter, Unicode, de fecha y hora, numricos 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 nmero 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 funcin @@DBTS. Los datos de tipo timestamp no estn relacionados con la fecha ni la hora de una insercin ni de un cambio en los datos. Si desea registrar automticamente 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 sinnimo de timestamp.

Recopilado por Yuri Marquez Solis

Desarrollo de Software
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 Se trata de un nmero 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 nmeros de identificacin de los clientes para compilar una lista de clientes de una compaa en varios pases.

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 slo puede utilizarse para definir variables locales del tipo table o el valor de retorno de una funcin 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 maysculas seguidas de un nmero 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 slo puede tener una clave principal.

Para definir una clave principal


1. En el diagrama de base de datos o en el Diseador 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.

Recopilado por Yuri Marquez Solis

Desarrollo de Software
2. Haga clic con el botn secundario en el selector de fila para la columna y seleccione Establecer clave principal. En la ficha ndices y claves de las pginas de propiedades se crea automticamente 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 eliminarn automticamente como parte de este proceso.

Una columna de clave principal se identifica por un smbolo de llave principal

en el selector de fila.

Si una clave principal consta de ms de una columna, se permiten valores duplicados en una columna, pero cada combinacin de valores de todas las columnas de la clave principal debe ser nica.

Cmo crear una relacin de varios a varios entre tablas


Para crear una relacin de varios a varios entre tablas 1. Abra un diagrama de base de datos.

2. Agregue las tablas entre las que desea crear una relacin de varios a varios. 3. Cree una tercera tabla. Para ello, haga clic con el botn secundario del mouse dentro del diagrama de la base de datos y, a continuacin, haga clic en Nueva tabla. sta se convertir en la tabla de unin. 4. En el cuadro de dilogo Elegir nombre, escriba un nombre para la tabla. Por ejemplo, la tabla de unin entre la tabla de ttulos 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 unin. Puede agregar otras columnas a esta tabla, igual que en cualquier otra tabla. 6. En la tabla de unin, establezca la clave principal para que incluya todas las columnas de la clave principal de las otras dos tablas. 7. Defina una relacin de uno a varios entre cada una de las dos tablas principales y la tabla de unin.

Fundamentos de Programacin con SQL


Existen 3 tipos de instrucciones para el lenguaje en SQL. Lenguaje de control de datos (DDL): Creacin y eliminacin de tipos de datos y objetos. . CREATE Crear Objeto

Recopilado por Yuri Marquez Solis

Desarrollo de Software
. ALTER . DROP Modificar los datos creados 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 manipulacin de datos (DML): Desarrollo de la programacin de la base de datos. . . . . SELECT INSERT UPDATE DELETE

Elementos de sintaxis: Directivas de procesos por lotes GO: Enva 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 lnea: -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 nmero, deben empezar por un signo alfabtico, pueden incluir el guion bajo (_), la arroba @ y la almohadilla #. Generalmente para las variables locales se usan @ + el nombre. EJEMPLO: @Contador. Recopilado por Yuri Marquez Solis

Desarrollo de Software
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: Numricos: Fechas: datetime 0,333 s smalldatetime 1 minuto Enteros int, tinyint, smallint, bigint Decimales numeric, decimal, money, smallmoney Coma Flotante float, real

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: 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:
Lgicos: AND, OR, NOT De Comparacin: = < > <> Igual Menor Mayor Diferente

Recopilado por Yuri Marquez Solis

Desarrollo de Software
>= 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 opcin 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) Despus 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 tamao del Archivo. Maxsize. Especifica el tamao mximo que puede alcanzar el archive si se requiere espacio adicional Filegrowth. Es la cantidad de espacio que se aade 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.

Recopilado por Yuri Marquez Solis

Desarrollo de Software
Select * from Sysdatabases

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

INSERCIN, ELIMINACIN Y MODIFICACIN DE DATOS


Insercin 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. Creacin de una tabla mediante SELECT INTO: Creacin 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

Recopilado por Yuri Marquez Solis

10

Desarrollo de Software
Insercin de datos parciales: No introducir todos los datos, solo meter datos en un determinado campo o en varios, pero no en toda la tabla. Insercin 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

ELIMINACIN 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 TRUNCATE TABLE: Elimina todas las filas de la tabla (La tabla con su estructura no se elimina, slo los datos de la tabla). No crea filas en el registro de transacciones, con lo cual es el mtodo ms rpido de borrar. TRUNCATE TABLE NombreTabla Truncate Table emp Eliminacin de filas basada en otras tablas DELETE [ FROM ] {NombreTabla | NombreVista} [ FROM, OrigenTabla,... ] [ WHERE CondicionBusqueda ]

ACTUALIZACIONES
Actualizacin de filas basadas en datos de la propia tabla UPDATE {NombreTabla | NombreVista } SET NombreColumna = expresin { DEFAULT | NULL, ... } USE Northwind UPDATE products SET unitprice = (unitprice * 1.1 ) Actualizacin de filas basadas en otras tablas

Recopilado por Yuri Marquez Solis

11

Desarrollo de Software
UPDATE {NombreTabla | NombreVista } SET NombreColumna = expresin { 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 --( --Idalumno --nom_alumno --ape_alumno --dir_alumno --tel_alumno --Email_alumno --) VarChar(8)not null, Varchar (50) Not Null, Varchar (50) Not Null, Varchar (50) Not Null, VarChar(8), 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

Recopilado por Yuri Marquez Solis

12

Desarrollo de Software 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','5572147','jaz_28@hotmail.com') --Insert into alumnos (idalumno,nom_alumno,ape_alumno,dir_alumno,tel_alumno,email_alumno) Values ('Cli02','Arturo','Capuay Laqui','Jr. Viru 406 N8','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')

Ejemplo 5
Si deseramos 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

Recopilado por Yuri Marquez Solis

13

Desarrollo de Software
--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 tambin 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

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

Recopilado por Yuri Marquez Solis

14

Desarrollo de Software

Drop database Itae Elimina la Base de Datos Itae con la sentencia Drop, seguido del tipo de objeto y finalizando el nombre.

OPERADORES DE CONDICIN _ FILAS


En la expresin lgica que especifica condicin _ filas se puede utilizar, adems de los operadores relacin o de comparacin los siguientes operadores SQL

LIKE.- Para comparacin de cadenas de caracteres admite los comodines % y _.


OPERADOR LIKE % Cualquier nmero de caracteres _ Para un carcter individual [ ] Para un conjunto de caracteres que est dentro del corchete [ ^ ] Que el carcter individual que no est dentro del corchete 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 seleccin en base a un rango de valores. Los valores pueden ser numricos, de
cana, fechas y horas.

In.-Para seleccin en base a un conjunto de valores, los valores pueden ser numricos, de cadena,
fechas y horas. Para estos ejemplos ah utilizado la base de datos con el nombre de Poseidn y contiene las siguientes tablas y campos.

Recopilado por Yuri Marquez Solis

15

Desarrollo de Software

Ejemplo 10
Lista de productos cuyo nombre contenga la palabra vino

Use Poseidon Go Select * from productos where nombreproducto like '%vino%' Luego procedemos a ejecutar la aplicacin.

El smbolo % 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]%'

Recopilado por Yuri Marquez Solis

16

Desarrollo de Software

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 carcter que va en el rango de la M a la T.

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

Ejemplo 15
Lista de productos cuyo nombre empieza con A con cualquier carcter en el rango que va de U a la Adems, el segundo carcter no debe ser la letra r.

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

Recopilado por Yuri Marquez Solis

17

Desarrollo de Software
El Carcter ^ significa incluir. El Carcter % representa cualquier cadena de caracteres, inclusive la cadena nula El Carcter _ Representa cualquier carcter 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 carcter empiece con la letra e.

Select * from productos where nombreproducto like '_e%'

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

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

Recopilado por Yuri Marquez Solis

18

Desarrollo de Software

Ejemplo 19
Lista de productos cuyo nombre empiece con C, M R. El segundo Carcter debe ser A.

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

El comodn [cmr], representa el conjunto de caracteres validos en la posicin en la que aparecer el comodn.

Ejemplo 20
Seleccionar todos los productos que termine con la letra Z

Select * from productos where nombreproducto like '%z'

Ejemplo 21
Mostrar todos los productos cuya cuarta letra sea A

Recopilado por Yuri Marquez Solis

19

Desarrollo de Software
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'

Recopilado por Yuri Marquez Solis

20

Desarrollo de Software

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','Pars','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]

Recopilado por Yuri Marquez Solis

21

Desarrollo de Software

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

Recopilado por Yuri Marquez Solis

22

Desarrollo de Software

Ejemplo 29
Mostrar todos los productos de la Categora 2. Select * from productos where IdCategora='2'

Ejemplo 30
Mostrar todos los pedidos realizados en la fecha 1996-06-05 Select * from Pedidos where FechaPedido ='1996-06-05'

Recopilado por Yuri Marquez Solis

23

Desarrollo de Software

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 IdCategora no sea 3. Select * from productos where IdCategora<> 3

Recopilado por Yuri Marquez Solis

24

Desarrollo de Software

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 Categora (1,2,3) Select * from productos where IdCategora not in (1, 2, 3) order by IdProducto

Recopilado por Yuri Marquez Solis

25

Desarrollo de Software

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

Recopilado por Yuri Marquez Solis

26

Desarrollo de Software

USO DE FUNCIONES
Podemos utilizar funciones para construir expresiones y generar columnas computadoras O condiciones complejas.

Funcin de agregacin:
Son funciones que se utilizan para calcular valores en las tablas. Si queremos usarlas combinndolas 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 expresin: HAVING. Equivalente a where Todos estos ejercicios han sido desarrollado con la base de datos Poseidn.

COUNT: Cuenta los registros que hay en la consulta.


Si pongo un valor dentro de la expresin 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 (FechaEnvo) from Pedidos Valores sin nulos

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

Select avg(Preciounidad) from productos

MAX: Saca el valor mximo de una consulta.

Select max (FechaPedido) from Pedidos

Recopilado por Yuri Marquez Solis

27

Desarrollo de Software

MIN: Devuelve el valor mnimo 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 pas Brasil, mostrando el nmero de los Factura con el pas de Destinatario Brasil. Select count (*) as [Numero de Facturas], PasDestinatario, Avg (Preciounidad) as [Precio Medio] from Facturas group by PasDestinatario having PasDestinatario ='Brasil'

Ejemplo 39
Encontrar el precio ms alto, mas bajo y la diferencia entre ambos de todos los productos con IdCategora 2. Select IdCategora, Max (Preciounidad) as [Precio mas alto] , min(Preciounidad) as [Precio mas Bajo] , Max(Preciounidad) - min(Preciounidad) as [Diferencia entre Ambos] from Productos group by IdCategora having IdCategora = '2'

Recopilado por Yuri Marquez Solis

28

Desarrollo de Software Ejemplo 40


Visualizar el nmero de productos por Categora. Select IdCategora as [N de Categora], Count (IdCategora) as [N de Productos] From Productos group by IdCategora.

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
Recopilado por Yuri Marquez Solis

29

Desarrollo de Software
Cuantos Clientes no tienen Fax. Select Count (*) as [Total de Clientes sin Fax] from clientes where fax is null

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. Funcin GETDATE() DATEADD(partefecha,n,fecha) DATEDIFF(parteFecha,fecha1,fecha2) DATENAME(partefecha,fecha) DATEPART(partefecha,fecha) DAY(fecha) MONTH(fecha) YEAR(fecha) GETUTCDATE() Resultado Retorna la fecha y hora del sistema Retorna una nueva fecha aadiendo n unidades de partefecha a fecha Retorna la diferencia en parteFecha entre fecha1 y fecha2. Retorna la cadena correspondiente a partefecha en fecha Retorna el numero correspondiente a partefecha y fecha Retorna el numero correspondiente a la parte del da de fecha Retorna el numero correspondiente a la parte del mes de fecha Retorna el numero correspondiente a la parte del ao de fecha Retorna la fecha y hora del meridiano de Greenwich

La siguiente tabla muestra los valores de partefecha que podemos utilizar. partefecha Recopilado por Yuri Marquez Solis Abreviatura

30

Desarrollo de Software
Year Quarter Month Dayofyear Day Week weekday Hour minute second milisecond Yy, yyyy Qq ,q Mm, m Dy, y Dd, d Wk, ww Dw Hh Mi, n Ss, s Ms

Getdate
Select getdate () Funcin que recupera la fecha actual del sistema.

Convert, Cast
Convierten explcitamente una expresin de un tipo de datos en otro. CAST y CONVERT proporcionan funciones similares. Convert (Tipodedatosdestino, Origen, Estilo) o Tipodedatosdestino: Siempre ha de ser tipo carcter o Origen: Puede ser tipo fecha, numrico o moneda. o Estilo: Opcional. Es un cdigo 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 ='Nmero' 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

Recopilado por Yuri Marquez Solis

31

Desarrollo de Software
Devuelve una cadena de caracteres que representa la parte de la fecha especificada de la fecha especificada Los clculos 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 'Da 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

Recopilado por Yuri Marquez Solis

32

Desarrollo de Software
Select DateName (minute, getdate ()) as 'minutos'

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

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

Recopilado por Yuri Marquez Solis

33

Desarrollo de Software

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

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

Nombres de Fechas
Day (fecha) Devuelve UN INT, equivale a Datepart Select Select Select Select Select day (getdate ()) as da-->6 (da en la que se ejecuta la sentencia) Datepart (dd, getdate ()) -->6 (da en la que se ejecuta la sentencia) Month (getdate ()) -->1 (Mes en la que se ejecuta la sentencia) Datepart (mm, getdate ()) -->1 (Mes en la que se ejecuta la sentencia) Year (getdate ()) -->2008 (Ao en la que se ejecuta la sentencia)

Ejemplo 56
Select year (FechaPedido) as 'Ao' from Pedidos where IdPedido = 10352

Ejemplo 57

Recopilado por Yuri Marquez Solis

34

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

DateAdd
DateAdd (Datepart, number, date) Aade un nmero a la fecha puesta DatePart es el formato de lo que queremos aadir. Number es el nmero 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 comparacin y el tipo de dato que nos devolver, aos, das, minutos etc.

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

Recopilado por Yuri Marquez Solis

35

Desarrollo de Software

Ejemplo 60
Lista de Pedidos mostrando la diferencia en das entre la fecha del pedido y la fecha de Envi. Select IdPedido, FechaPedido, FechaEnvo, das =datediff (day, FechaPedido, FechaEnvo) from pedidos

Ejemplo 61
Genere un listado de pedidos en el que la fecha del pedido se muestre en el formato nombre del da, da de mes ao. Select IdPedido, FechaPedido, Fecha=datename (dw, IdPedido)+ ', ' + str (datepart (dd, IdPedido) ,2)+' de '+datename (mm, IdPedido)+' de '+str (datepart (yy, IdPedido) ,4) from pedidos

Recopilado por Yuri Marquez Solis

36

Desarrollo de Software

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

FUNCIONES MATEMATICAS
ABS
Es el valor Absoluto

Recopilado por Yuri Marquez Solis

37

Desarrollo de Software
Select ABS (-4) as 'VALOR ABSOLUTO'-->4

CEILING
Devuelve el entero ms pequeo mayor o igual que la expresin numrica dada. Select CEILING (5.4) as 'CEILING'--6

FLOOR
Devuelve el entero ms grande menor o igual que la expresin numrica dada. Select FLOOR (5) as 'FLOOR'-->5

POWER
Devuelve el valor de la expresin 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 producirn 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 expresin numrica, redondeada a la longitud o precisin especificada. Round (Nmero, Redondeo del Nmero) ROUND siempre devuelve un valor. Si length es un valor negativo y mayor que el nmero de dgitos anteriores al separador decimal, ROUND devuelve 0. Select Select Select Select ROUND (123.4567, 2) -->123.4600 ROUND (123.4567,-2) -->100.0000 ROUND (123.4567, 0) -->123.0000 ROUND (123.4567,-3) --->0

SIGN
Recopilado por Yuri Marquez Solis

38

Desarrollo de Software
Devuelve el signo positivo (+1), cero (0) o negativo (-1) de la expresin 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 expresin especificada. Select SQUARE (4) as Cuadrado-->16.0

SQRT
Devuelve la raz cuadrada de la expresin especificada. Select SQRT (4) as [RAIZ CUADRADA] -->2.0

FUNCIONES DE CADENA
ASCII
Devuelve el cdigo ASCII del carcter ms a la izquierda de una expresin de caracteres. Select ASCII('A')-->65 Select ASCII('a')-->97 Select ascii('aula')-->97

CHAR
Una funcin de cadena que convierte un cdigo ASCII int en un carcter. select char(65)-->A select char(97)-->a

CHARINDEX
Devuelve la posicin inicial de la expresin especificada en una cadena de caracteres. Recopilado por Yuri Marquez Solis

39

Desarrollo de Software
CHARINDEX (expression1, expression2 [, start_location]) Argumentos expression1 Es una expresin que contiene la secuencia de caracteres que se desea buscar. Expression1 es una expresin del tipo de cadenas cortas de caracteres. Expression2 Es una expresin, normalmente una columna, en la que se busca la cadena especificada. Expression2 es de la categora del tipo de datos cadena de caracteres. start_location Es la posicin del carcter de expression2 en el que se empieza la bsqueda de expression1. Si no se especifica start_location, es un nmero negativo o es cero, la bsqueda 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 Select Select Select charindex charindex charindex charindex ('cie','murcielago') -->4 ('cie','murcielago', 2) -->4 ('cie','murcielago', 5) -->0 ('cie','murcielago',-6) -->4

LEFT
Devuelve la parte de una cadena de caracteres que comienza en un nmero 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 nmero de caracteres especificado En integer_expression a partir de la derecha. Select right ('hola que tal',5) -->e tal

LEN
Cuenta el nmero de caracteres que se incluyen en la cadena. Select len ('murcilago') -->10

LOWER
Recopilado por Yuri Marquez Solis

40

Desarrollo de Software
Convierte a Minsculas la cadena especificada Select lower ('MurcIELaGO') as [minusculas] -->murcielago

UPPER
Convierte a Maysculas 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 (' murcilago ') AS [SIN ESPACIOS] -->murcilago Select Ltrim (' murcilago ') AS [SIN ESPACIOS] -->murcilago Select ltrim(rtrim(' hola '))+'.'

REPLACE
Reemplaza por una tercera expresin todas las apariciones de la segunda expresin de cadena proporcionada en la primera expresin de cadena Select replace ('hola que tal estas','a','A') -->holA que tAl estAs Select replace ('buenos dias, que tal estas','ue','') -->bnos dias,q tal estas

SPACE
Coloca el nmero 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 expresin de caracteres, binaria, de texto o de imagen. Sintaxis: SUBSTRING (Expresin, Comienzo, Duracin) Argumentos Expresin Es una cadena de caracteres, cadena binaria, texto, imagen, Columna o expresin que incluye una columna. No deben usarse expresiones que incluyan funciones de agregado. Start Recopilado por Yuri Marquez Solis

41

Desarrollo de Software
Es un entero que especifica el punto en que comienza la subcadena. Length Es un entero que especifica la longitud de la subcadena (El nmero de caracteres o bytes que se devuelven). Select substring ('murcielago', 3, 5) -->rciel Select substring ('murcielago', 3, len ('murcielago')) -->rciel

REVERSE
Devuelve invertida una expresin de carcter. Select reverse ('hola')

REPLICATE
Repite una expresin de caracteres un nmero especificado de veces. Select replicate ('murcielago', 5) Replicate, replicate, replicate, replicate, replicate

STUFF
Elimina el nmero de caracteres especificados e insertados Otro conjunto de caracteres en un punto de inicio indicado. Select STUFF ('Murcilago', 2, 3, 'ijklmn') Mijklmnielago

FUNCIONES DE SISTEMA

APP_NAME () Devuelve el nombre de la aplicacin actual


Select app_name () as [Nombre de la aplicacion]

DATALENGTH (Expresin) Devuelve un entero que es numero de bites necesarios para


representar esa expresin int Select datalength ('Ninoni') as [Numero de bites]

Recopilado por Yuri Marquez Solis

42

Desarrollo de Software ISDATE (Expresin) Dice si la expresin es una fecha o no. Devuelve 1 si la expresin es
una fecha y 0 si no es una fecha. Select isdate ('12/10/01') as [Validacin Fecha]

ISNUMERIC (Expresion) Dice si la expresin es un numero o no. Devuelve 1 si la


expresin es un nmero y 0 si la expresin no es nmero. Select isnumeric ('ddd') as [Validacion Numero]

ISNULL (Expresin , ExpresionDevuelta) Si la expresin es nula te devuelve la Expresin


Devuelta y si no devuelve la primera Expresin 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 Select Select Select parsename parsename parsename parsename ('sa.poseidon.dbo.pedidos',1) as [Parte Expresin] ('sa.poseidon.dbo.pedidos', 2) as [Parte Expresin] ('sa.poseidon.dbo.pedidos',3) as [Parte Expresin] (' sa.poseidon.dbo.pedidos', 4) as [Parte Expresin]

Recopilado por Yuri Marquez Solis

43

Desarrollo de Software

SYSTEM_USER
Devuelve el usuario del sistema actual Depende de la autentificacin con la que te hayas conectado

Select system_user as [Usuario conectado]

USER_NAME()
Devuelve el nombre del usuario actual Select user_name ()

COALESCE (expresin1, expresin2, ...)


Devuelve la primera expresin 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 certificacin 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:

Recopilado por Yuri Marquez Solis

44

Desarrollo de Software
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 combinacin de ambos campos que sea igual. OrderId 1 1 1 2 3 ProductId A B C A C

Es decir en este caso no podra existir una nueva combinacin 1 A o 2 A. Quantity: Es la cantidad del producto del pedido.

ROLLUP
Se usa para presentar resmenes 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

Recopilado por Yuri Marquez Solis

45

Desarrollo de Software
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 adems, otra fila con la suma de todas las cantidades de todos los productos. El resultado de este ejemplo, sera 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

CUBE
Al igual que Rollup realiza resmenes de campos agrupados. Pero en este caso muestra un resumen con cada combinacin 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 combinacin posible entre el Recopilado por Yuri Marquez Solis

46

Desarrollo de Software
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 clusula 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 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. Ponindole un alias al grouping saldra el nombre de columna que le indiquemos.

COMPUTE
Realiza un resumen en una columna aparte con el resultado de la funcin de agregado indicada. Su formato sera Compute funcin(campo). No se puede utilizar en aplicaciones cliente / servidor, es una clausula meramente informativa. Tampoco se le pueden poner alias a los resmenes.

Ejemplo 67
Select Productid, Orderid, Quantity From [Order Details] order by ProductID, Orderid compute Sum(quantity) Recopilado por Yuri Marquez Solis

47

Desarrollo de Software
Vemos que muestra la columna con la suma total de todas las cantidades.

Ejercicios de ROLLUP, GROUPING y CUBE

Ejemplo 68
Realizar una consulta que resuma la cantidad de artculos pedidos por cada ndice de producto y nmero de pedido. Realizando un clculo 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
Recopilado por Yuri Marquez Solis

48

Desarrollo de Software
Modificacin 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 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 modificacin 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 Recopilado por Yuri Marquez Solis

49

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

(22 filas afectadas)

Obtencin de resmenes 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 ms columnas, y luego efectuar alguna operacin de resumen sobre cada grupo as generado. La diferencia con GROUP BY es que permite mostrar informacin mas detallada de cada grupo.

Ejemplo 71
Lista de pedidos que muestre por cdigo 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

Recopilado por Yuri Marquez Solis

50

Desarrollo de Software

EJERCICIOS CON COMPUTE:

Ejemplo 72
Generar un resumen de subtotales en una consulta que devuelva el nmero de pedido, la cantidad pedida para todos los orderid 11070

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 Recopilado por Yuri Marquez Solis

51

Desarrollo de Software

(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 sum =========== 50 (8 filas afectadas)

Ejemplo 74
Modificacin 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)

Recopilado por Yuri Marquez Solis

52

Desarrollo de Software
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)

Ejemplo 75
Seleccionar de forma agrupada por tipo, todos los tipos, la suma de los precios y la suma del anticipo de la tabla ttulos

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 Recopilado por Yuri Marquez Solis

53

Desarrollo de Software
business business 2.9900 19.9900 10125.0000 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

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

TIPO PRECIO ANTICIPO ------------ --------------------- --------------------psychology 21.5900 7000.0000 psychology 10.9500 2275.0000 psychology 7.0000 6000.0000 Recopilado por Yuri Marquez Solis

54

Desarrollo de Software
psychology 19.9900 psychology 7.9900 2000.0000 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, adems, 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 ===================== 25125.0000

TIPO PRECIO ANTICIPO ------------ --------------------- --------------------mod_cook 19.9900 .0000 mod_cook 2.9900 15000.0000

Recopilado por Yuri Marquez Solis

55

Desarrollo de Software
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 psicologa 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 psychology 0736 7.0000 psychology 0736 19.9900 psychology 0736 7.9900 sum ===================== Recopilado por Yuri Marquez Solis

56

Desarrollo de Software
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 psicologa, as como la suma de los precios de los libros de psicologa 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 ------------ ------------- --------------------psychology 0877 21.5900

Recopilado por Yuri Marquez Solis

57

Desarrollo de Software
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 Recopilado por Yuri Marquez Solis

58

Desarrollo de Software
sum ===================== 47.8900

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

(9 filas afectadas)

Ejemplo 80
Generar un informe que muestre todos los ttulos, precio y anticipo de aquellos ttulos que tengan un precio superior a 20 dlares. Ofrecer tambin 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

Recopilado por Yuri Marquez Solis

59

Desarrollo de Software
Generar un informe que muestre el precio, el tipo y el nmero de editor de la tabla titles de todos aquellas obras que pertenezcan la categora de business. Adems aparecer la suma total de precios y el mximo pub_id de esta seleccin

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

Recopilado por Yuri Marquez Solis

60

Desarrollo de Software
TIPO PRECIO ANTICIPO ------------ --------------------- --------------------trad_cook 20.9500 7000.0000 trad_cook 11.9500 4000.0000 trad_cook 14.9900 8000.0000 sum ===================== 47.8900

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

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

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

(11 filas afectadas)

Eliminacin 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

Recopilado por Yuri Marquez Solis

61

Desarrollo de Software

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 mayora de las consultas que se hacen en una base de datos requiere que se lean datos procedentes de dos ms tablas.

INNER JOIN.- son las filas que satisfacen la condicin de la combinacin.


En la siguiente sentencia SQL enlaza 2 tablas la tabla clientes y la tabla pedidos en esta ejemplo me muestra los campos nombre compaa y el campo idpedido.

Recopilado por Yuri Marquez Solis

62

Desarrollo de Software
La nica condicin es que las 2 tablas tengan un campo en comn.

Ejemplo 84
select clientes.NombreCompaa,pedidos.idpedido from clientes inner join pedidos on clientes.idcliente=pedidos.idcliente

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
Recopilado por Yuri Marquez Solis

63

Desarrollo de Software
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 comn para ejecutar el Cross Join.

Ejemplo 86
La siguiente consulta combina cada una de las filas de la tabla categoras con cada una de las filas de la tabla productos select productos.NombreProducto,categorias.Nombrecategoria from productos cross join categorias order by productos.NombreProducto

Ejercicios de consultas Mltiples Ejemplo 87

Mostrar el pedido 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
Recopilado por Yuri Marquez Solis

64

Desarrollo de Software
1. Mostrar la cantidad de productos por categora. Select Categoras.IdCategora, Categoras.NombreCategora, [Total de Producto]=sum (UnidadesEnExistencia) from Categoras inner join Productos on Categoras.IdCategora=productos.IdCategora Group by Categoras.IdCategora, Categoras.NombreCategora

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

Recopilado por Yuri Marquez Solis

65

Desarrollo de Software

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 despus saca la de Plantilla

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

Recopilado por Yuri Marquez Solis

66

Desarrollo de Software

Recomendaciones a la hora de usar las combinaciones: Combinar tablas en funcin de claves principales y externas Limite el nmero de tablas de las combinaciones.

Recopilado por Yuri Marquez Solis

67

Desarrollo de Software
SUBCONSULTAS Es una SELECT anidada en una instruccin 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 expresin

Select emp_no as [Numero] ,Apellido ,Salario ,(select avg(Salario) from emp) as Diferencia from emp where oficio = 'Empleado'

Para correlacionar datos: Expresin dinmica que cambia en cada fila de una consulta externa Es una combinacin entre la subconsulta y la fila de la consulta externa. Dividen consultas complejas con dos o ms 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

Recopilado por Yuri Marquez Solis

68

Desarrollo de Software 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 Jimnez.
select apellido, oficio from emp where oficio = (select oficio from emp where apellido = 'JIMENEZ')

4. Queremos saber el apellido, oficio, salario y nmero 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)

Recopilado por Yuri Marquez Solis

69

Desarrollo de Software 5. Mostrar el apellido, la funcin, 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

Recopilado por Yuri Marquez Solis

70

Desarrollo de Software 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, funcin, salario y cdigo 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 cardiologa.
Select * from hospital where hospital_cod in (select hospital_cod from doctor where especialidad = Cardiologa)

Recopilado por Yuri Marquez Solis

71

Desarrollo de Software

Recopilado por Yuri Marquez Solis

72

Desarrollo de Software 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 Seor Miller.
Select apellido from enfermo where Fecha_nac < (select fecha_nac from enfermo where apellido = MILLER B.)

Recopilado por Yuri Marquez Solis

73

Desarrollo de Software
Simulacion de una clausula JOIN Vamos a mostrar los oficios que estn en ms 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 combinacin que una subconsulta, la combinacin sera 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 estn en ms 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 deberamos utilizar antes que una subconsulta de simulacin 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)

Recopilado por Yuri Marquez Solis

74

Potrebbero piacerti anche