Desarrollo de Software

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.

Recopilado por Yuri Marquez Solis

1

Desarrollo de Software

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

Recopilado por Yuri Marquez Solis

2

Desarrollo de Software
columna tengan la misma longitud fija (hasta 4.000 caracteres Unicode). Utilice ntext cuando alguna entrada de una columna ocupe más de 4.000 caracteres Unicode.

Nota Los tipos de datos Unicode de SQL Server se basan en los tipos de datos National Character del conjunto de normas SQL-92. SQL-92 utiliza el carácter n como prefijo para identificar estos tipos de datos y valores.

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

3

283.3. Recopilado por Yuri Marquez Solis 4 .29383 que para almacenar el valor 1. En SQL Server. de fecha y hora. utilice el tipo de datos decimal.3647 (para almacenar cada valor se necesitan 4 bytes). Otros ejemplos de aproximaciones numéricas son los valores de coma flotante que acaban en 0.477. Los datos de moneda pueden almacenarse con una precisión máxima de cuatro decimales. Unicode. 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. el valor recuperado de SQL Server puede no coincidir exactamente con el que se almacenó originalmente en la columna. 0.Desarrollo de Software datos y del número de cifras a la derecha del separador decimal. dado que.685. Por ejemplo. Los datos numéricos aproximados se almacenan mediante los tipos de datos float y real de SQL Server. 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.7. este valor no se puede representar con total precisión mediante los datos decimales aproximados.685.748. Si desea registrar automáticamente en qué momento se producen modificaciones en una tabla.477. de carácter. en notación decimal.5807 (para almacenar cada valor se necesitan 8 bytes).1. representada como un número creciente en formato binario.337.748.6 y 0. numéricos y de moneda. 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. se necesitan más bytes para almacenar el valor 19. Nota En SQL Server. como los datos binarios. Datos especiales Los datos especiales son aquéllos que no se ajustan a ninguna de las categorías de datos. Si se necesita un número mayor de decimales.203.333333 (hasta el infinito). Por lo tanto. Datos de moneda Los datos de moneda representan cantidades positivas o negativas de dinero.203. Por ejemplo. rowversion es un sinónimo de timestamp. utilice un tipo de datos datetime o smalldatetime para registrar los sucesos y los desencadenadores.5808 y +922. Utilice el tipo de datos smallmoney para almacenar valores del intervalo comprendido entre -214. Los datos de moneda se almacenan utilizando los tipos de datos money y smallmoney de Microsoft® SQL Server™ 2005. el tipo de datos numeric es sinónimo del tipo de datos decimal. Utilice el tipo de datos money para almacenar valores del intervalo comprendido entre -922.3648 y 214.337. Cuando se modifica una fila de una tabla. la fracción "un tercio" se expresa como 0. 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.

 definidas por el usuario Permite que el usuario defina tipos de datos. En el diagrama de base de datos o en el Diseñador de tablas. product_code. o YES o NO. 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. Si define una clave principal para una tabla en la base de datos. 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. Si desea seleccionar varias columnas. Recopilado por Yuri Marquez Solis 5 . El GUID es especialmente útil cuando una fila debe ser única entre otras muchas. mantenga presionada la tecla CTRL mientras hace clic en los selectores de fila para las otras columnas. puede relacionar esa tabla con otras tablas. como. Para definir una clave principal 1. ntext. por ejemplo.  table Un tipo de datos especial que se utiliza para almacenar un conjunto de resultados para su proceso posterior. 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. haga clic en el selector de fila de la columna de la base de datos que desee definir como clave principal. así se reduce la necesidad de datos redundantes.Desarrollo de Software  bit Puede ser un 1 o un 0. 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. Utilice el tipo de datos bit para representar los valores TRUE (verdadero) o FALSE (falso). Una tabla sólo puede tener una clave principal. Definir una clave principal Defina una Clave Principalcpara exigir que se escriban valores únicos en columnas especificadas que no permiten nulos. Por ejemplo. timestamp y sql_variant.  sql_variant Un tipo de datos que almacena valores de varios tipos de datos aceptados en SQL Server. excepto text. Por ejemplo.  uniqueidentifier Se trata de un número hexadecimal de 16 bytes que hace referencia a un identificador exclusivo global (GUID).

En el cuadro de diálogo Elegir nombre. 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. Puede agregar otras columnas a esta tabla. Lenguaje de control de datos (DDL): Creación y eliminación de tipos de datos y objetos. Para ello. . Fundamentos de Programación con SQL Existen 3 tipos de instrucciones para el lenguaje en SQL. escriba un nombre para la tabla. Abra un diagrama de base de datos. igual que en cualquier otra tabla. establezca la clave principal para que incluya todas las columnas de la clave principal de las otras dos tablas. 5. Agregue las tablas entre las que desea crear una relación de varios a varios. haga clic con el botón secundario del mouse dentro del diagrama de la base de datos y. haga clic en Nueva tabla. Una columna de clave principal se identifica por un símbolo de llave principal en el selector de fila. 3. Advertencia Si desea volver a definir la clave principal. En la tabla de unión. Un mensaje comunicará que las relaciones existentes se eliminarán automáticamente como parte de este proceso. Por ejemplo. 2. se permiten valores duplicados en una columna. Defina una relación de uno a varios entre cada una de las dos tablas principales y la tabla de unión. Si una clave principal consta de más de una columna. pero cada combinación de valores de todas las columnas de la clave principal debe ser única. Haga clic con el botón secundario en el selector de fila para la columna y seleccione Establecer clave principal. se deben eliminar las relaciones con la clave principal existente antes de poder crear la nueva clave principal. Cómo crear una relación de varios a varios entre tablas Para crear una relación de varios a varios entre tablas 1. la tabla de unión entre la tabla de títulos y la tabla de autores se llama titleauthors. 4. Cree una tercera tabla. Copie las columnas de clave principal de cada una de las otras dos tablas en la tabla de unión.Desarrollo de Software 2. Ésta se convertirá en la tabla de unión. 6. a continuación. CREATE Crear Objeto Recopilado por Yuri Marquez Solis 6 . 7.

GRANT Dar permisos a un usuario para efectuar determinadas Instrucciones . lo primero es que no pueden empezar por un número. la arroba @ y la almohadilla #. Tabla model: Es la tabla modelo. se crean todas las bases de datos. Identificadores para los objetos: Los nombres que se le dan a las tablas. Recopilado por Yuri Marquez Solis 7 .Desarrollo de Software . pueden incluir el guion bajo (_). las bases de datos creadas se basan en esta tabla como modelo. . . Generalmente para las variables locales se usan @ + el nombre. procedimientos de sistema y procedimientos almacenados. . 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). . DENY Eliminar el permiso que se ha concedido con el GRANT . 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. REVOKE Eliminar todos los permisos - Lenguaje de manipulación de datos (DML): Desarrollo de la programación de la base de datos. Tabla Northwind y Pubs: Son tablas de ejemplos que vienen con SQL y todo usuario puede trabajar con ellas. EJEMPLO: @Contador. deben empezar por un signo alfabético. ALTER . . SELECT INSERT 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.

real - Caracteres:  Ancho fijo: char. nvarchar Texto e Imagen:    Text Ntext Rowversion - Binario:   Binary.333 s smalldatetime  1 minuto Enteros  int. OR. usamos este identificador  Uniqueidentifier Operadores de SQL:  Lógicos: AND. tinyint.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. 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. Tipos de datos: Numéricos:    Fechas:   datetime  0. money. smallmoney Coma Flotante  float. decimal. smallint. NOT  De Comparación: = < > <>  Igual  Menor  Mayor  Diferente Recopilado por Yuri Marquez Solis 8 . bigint Decimales  numeric. nchar  Ancho Variable: varchar.

filegrowth=25%) Log On (Name= Itae _log. –Es la cantidad de espacio que se añade al archive cada vez que se necesita espacio adicional.. filegrowth=1MB)  Después de la sentencia Create database. – Especifica el tamaño del Archivo. Se especifica el nombre de la base de datos. Filename.Es el nombre a utilizar cuando una sentencia SQL se tiene que hacer referencia al archivo de datos o al archivo log respectivamente. Se procederá abrir la base de datos con el use nombre de la base de datos y luego el Use Go.ldf'. Filename='C: \ itae. –Especifica el tamaño máximo que puede alcanzar el archive si se requiere espacio adicional Filegrowth. Un nombre en la base de datos debe de ser único en el servidor.   Recopilado por Yuri Marquez Solis 9 .Es una cadena que incluye la ruta y el nombre del archivo. Maxsize. filename='C: \ itae. Se puede especificar en MB o en porcentaje. size=4.mdf'.  Cuando se crea una base de datos. La ruta debe especificar una carpeta existente en el servidor que esta instalado en el SQL Size.. Para comprobar si la base de datos existe ejecutaremos la siguiente sentencia SQL.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 opción database seguido del nombre de la Base de Datos --Create database Itae On primary (Name= Itae _data. maxsize=15. su nombre se registra en la tabla del sistema Sysdatabases de la base de datos master. Name. Use master Go  Luego se procederá abrir la tabla Sysdatabases y ahí se podrá visualizar si la base de datos ah sido creada. size=10. maxsize=6.

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. esta barra | indica que se debe poner uno de los dos valores. La consulta SELECT debe devolver los datos adecuados para la tabla donde vamos a introducir los valores.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 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. SELECT ListaColumnas INTO NuevaTabla FROM TablaOrigen WHERE CondicionBusqueda Se utiliza mucho para crear tablas temporales Recopilado por Yuri Marquez Solis 10 .. Creación de una tabla mediante SELECT INTO: Creación de una tabla que a la vez se le introducen valores.

..1 ) Actualización de filas basadas en otras tablas Recopilado por Yuri Marquez Solis 11 .. OrigenTabla.. } USE Northwind UPDATE products SET unitprice = (unitprice * 1. 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. 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. con lo cual es el método más rápido de borrar. . 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.. pero no en toda la tabla.Desarrollo de Software Inserción de datos parciales: No introducir todos los datos. TRUNCATE TABLE NombreTabla Truncate Table emp Eliminación de filas basada en otras tablas DELETE [ FROM ] {NombreTabla | NombreVista} [ FROM. Hay un control de las modificaciones (Borrado) que se estan haciendo. ] [ WHERE CondicionBusqueda ] ACTUALIZACIONES Actualización de filas basadas en datos de la propia tabla UPDATE {NombreTabla | NombreVista } SET NombreColumna = expresión { DEFAULT | NULL. solo meter datos en un determinado campo o en varios. No crea filas en el registro de transacciones. sólo los datos de la tabla).

Desarrollo de Software UPDATE {NombreTabla | NombreVista } SET NombreColumna = expresión { DEFAULT | NULL.. Varchar (50) Not Null. Varchar (50) Not Null. Varchar (50) Not Null. . --select * from alumnos Recopilado por Yuri Marquez Solis 12 . Ejemplo 3  Para que se muestre la Tabla completa y con todos los registros se utiliza en Select para seleccionar los campos. VarChar(8). Varchar (50). from para seleccionar la tabla que se desea visualizar.. } 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.

'5572147'. Lote 16'.'920-1090'.com') --Insert into alumnos (idalumno.email_alumno) Values ('Cli03'. Hon '.ape_alumno.dir_alumno.'luis_hexen@Hotmail.'fredyanaya@Hotmail.'481-6507'.dir_alumno.dir_alumno.'jaz_28@hotmail.'james'.nom_alumno. R1.com') --Insert into alumnos (idalumno. Primavera Mz.'Coop.'252511'.tel_alumno. Viru 406 Nº8'.'Ventanilla'.nom_alumno.ape_alumno.tel_alumno.'Jr.'Residencial '.com') 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 Recopilado por Yuri Marquez Solis 13 .tel_alumno.ape_alumno.'eternal_alcaris@Hotmail.'Fredy Richard'.ape_alumno.'Jr.ape_alumno.tel_alumno.com') --Insert into alumnos (idalumno.' Anaya Jesus'.email_alumno)Values ('Cli01'.email_alumno) Values ('Cli02'.'Juan Carlos'.email_alumno) Values ('Cli04'.Desarrollo de Software Ejemplo 4  Ingreso de Datos a la Tabla alumnos se utiliza la sentencia insert into --Insert into alumnos (idalumno.'Aguilar Wong'.'Arturo'.'Ochoa Valverde'.'Luis Alexander'.dir_alumno.'Capuñay Laqui'.nom_alumno.com') --Insert into alumnos (idalumno.dir_alumno.'james'.nom_alumno.nom_alumno.tel_alumno.email_alumno)Values ('Cli01'.'jazoon_28@hotmail.'539-0886'.

Desarrollo de Software --Update alumnos set nom_alumno='diego'. Eliminar de la base de Datos Itae la Tabla Alumnos. dir_alumno='los olivos'. email_alumno='hades_278@hotmail. ape_alumno='cueva'. tel_alumno='5402972'. seguido del tipo de objeto y finalizando el nombre. Recopilado por Yuri Marquez Solis 14 .  Drop table alumnos Elimina la Tabla Clientes con la sentencia Drop.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 --select * from alumnos ORDER BY nom_alumno desc Ejemplo 9   Para eliminar un Objeto de la base de datos se utiliza la sentencia Drop.

No hay limite de caracteres. los valores pueden ser numéricos. fechas y horas.. OPERADORES DE CONDICIÓN _ FILAS En la expresión lógica que especifica condición _ filas se puede utilizar. 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 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.Para comparación de cadenas de caracteres admite los comodines % y _. además de los operadores relación o de comparación los siguientes operadores SQL LIKE. de cana.para selección en base a un rango de valores. In.. Para estos ejemplos ah utilizado la base de datos con el nombre de Poseidón y contiene las siguientes tablas y campos. Los valores pueden ser numéricos.-Para selección en base a un conjunto de valores. fechas y horas. BETWEEN. seguido del tipo de objeto y finalizando el nombre. de cadena. Recopilado por Yuri Marquez Solis 15 .Desarrollo de Software  Drop database Itae  Elimina la Base de Datos Itae con la sentencia Drop.

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 aplicación. inclusive la cadena nula. Ejemplo 12  Lista de productos cuya primera letea empieza con la letra a.  El símbolo % representa a cualquier cadena de caracteres. Select * from productos where nombreproducto like '[a]%' Recopilado por Yuri Marquez Solis 16 .

Select * from productos where nombreproducto like '[^b-t][^r]%' Recopilado por Yuri Marquez Solis 17 . Select * from productos where nombreproducto like '[m-t]%' Ejemplo 15  Lista de productos cuyo nombre empieza con A ò con cualquier carácter en el rango que va de U a la Además.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 carácter que va en el rango de la M a la T. el segundo carácter no debe ser la letra r.

M Ò R. Select * from productos where nombreproducto like '_e%' Ejemplo 18  Lista de productos cuyo nombre empiece con C. Ejemplo 16  Lista de productos cuyo nombre empieza con la palabra Queso. El Carácter % representa cualquier cadena de caracteres. Select * from productos where nombreproducto like ‘[cmr] %' Recopilado por Yuri Marquez Solis 18 . inclusive la cadena nula El Carácter _ Representa cualquier carácter imprimible no puede ser nulo.Desarrollo de Software    El Carácter ^ significa incluir. Select * from productos where nombreproducto like 'queso%' Ejemplo 17  Lista productos cuyo segundo carácter empiece con la letra e.

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 . M Ò R. representa el conjunto de caracteres validos en la posición en la que aparecerá el comodín. El segundo Carácter debe ser A. Select * from productos where nombreproducto like ‘[cmr] a%'  El comodín [cmr].Desarrollo de Software Ejemplo 19  Lista de productos cuyo nombre empiece con C.

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

'París'. Select idpedido.19 as IGV from [detalles de pedidos] Recopilado por Yuri Marquez Solis 21 . Select * from proveedores where ciudad in ('londres'.'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. preciounidad. idproducto. Lima.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. (preciounidad*cantidad)*0. cantidad.

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

Select * from productos where IdCategoría<> 3 Recopilado por Yuri Marquez Solis 24 . Select * from productos where preciounidad between 20 and 25 Ejemplo 33  Mostrar todos los productos cuya IdCategoría no sea 3.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.

3) Select * from productos where IdCategoría not in (1. 2.2.Desarrollo de Software Ejemplo 34  Mostrar los distintos IdPedido de la Tabla Pedidos. 3) order by IdProducto Recopilado por Yuri Marquez Solis 25 . Select distinct IdPedido from [detalles de pedidos] Ejemplo 35  Mostrar de la Tabla producto los que no son de la Categoría (1.

.) 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 . Apellido. ORDER BY (Saca los n primeros ordenados por lo que sea y con coincidencias en el valor n..Desarrollo de Software Agrupar y resumir datos Sacar los n primeros valores SELECT TOP n Nombre... Apellido.. Apellido. (Saca los n primeros valores) SELECT TOP n PERCENT Nombre. (Saca el n por ciento) SELECT TOP n WITH TIES Nombre.

 Select avg(Preciounidad) from productos   MAX: Saca el valor máximo de una consulta. Select max (FechaPedido) from Pedidos Recopilado por Yuri Marquez Solis 27 . se utilizara una clausula propia de la expresión: HAVING. 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. Equivalente a where  Todos estos ejercicios han sido desarrollado con la base de datos Poseidón. Si queremos usarlas combinándolas junto con otros campos debemos utilizar Group by y agrupar los datos que no son funciones. debe ser un tipo de dato Int.Desarrollo de Software USO DE FUNCIONES Podemos utilizar funciones para construir expresiones y generar columnas computadoras O condiciones complejas.  COUNT: Cuenta los registros que hay en la consulta.  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. Con la sentencia group by no se utiliza la clausula where. Función de agregación: Son funciones que se utilizan para calcular valores en las tablas.

Max (Preciounidad) as [Precio mas alto] . 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. min(Preciounidad) as [Precio mas Bajo] .Desarrollo de Software   MIN: Devuelve el valor mínimo de una consulta. Select IdCategoría. mostrando el número de los Factura con el país de Destinatario Brasil. Select count (*) as [Numero de Facturas]. 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.min(Preciounidad) as [Diferencia entre Ambos] from Productos group by IdCategoría having IdCategoría = '2' Recopilado por Yuri Marquez Solis 28 . mas bajo y la diferencia entre ambos de todos los productos con IdCategoría 2. Max(Preciounidad) .

Desarrollo de Software Ejemplo 40  Visualizar el número de productos por Categoría.'Barcelona') order by ciudad Ejemplo 42  Lista de productos cuya venta allá sido mayor a 50000. Ejemplo 41  Visualizar los clientes que vivan en las siguientes ciudades Londres. Select IdCategoría as [Nº de Categoría]. 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 . Madrid y Barcelona Select count (*) as [Nº de personas]. ciudad from clientes group by ciudad Having ciudad in ('londres'.'Madrid'. Count (IdCategoría) as [Nº de Productos] From Productos group by IdCategoría. Select IdProducto.

partefecha Recopilado por Yuri Marquez Solis Abreviatura 30 .fecha2) DATENAME(partefecha.Desarrollo de Software  Cuantos Clientes no tienen Fax. Función GETDATE() DATEADD(partefecha.fecha1.fecha) DATEDIFF(parteFecha.fecha) DATEPART(partefecha. 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.n. Select Count (*) as [Total de Clientes sin Fax] from clientes where fax is null Ejemplo 44  Cuantos Clientes tienen Fax. Retorna la cadena correspondiente a partefecha en fecha Retorna el numero correspondiente a partefecha y fecha Retorna el numero correspondiente a la parte del día de fecha Retorna el numero correspondiente a la parte del mes de fecha Retorna el numero correspondiente a la parte del año de fecha Retorna la fecha y hora del meridiano de Greenwich La siguiente tabla muestra los valores de partefecha que podemos utilizar.fecha) DAY(fecha) MONTH(fecha) YEAR(fecha) GETUTCDATE() Resultado Retorna la fecha y hora del sistema Retorna una nueva fecha añadiendo n unidades de partefecha a fecha Retorna la diferencia en parteFecha entre fecha1 y fecha2.

y Dd.@n) + ' ' + @palabra print cast(@n as nvarchar(2)) + ' ' + @palabra while (@n<11) begin print convert(nvarchar(2). Estilo) o Tipodedatosdestino: Siempre ha de ser tipo carácter o Origen: Puede ser tipo fecha. CAST y CONVERT proporcionan funciones similares.Desarrollo de Software Year Quarter Month Dayofyear Day Week weekday Hour minute second milisecond Yy. Es un código que indica el formato en el que devuelve la cadena de caracteres. n Ss. Cast Convierten explícitamente una expresión de un tipo de datos en otro. m Dy. ww Dw Hh Mi. s Ms Getdate Select getdate () Función que recupera la fecha actual del sistema. Sintaxis: Convert (TipoDato. Origen. d Wk. Dato) Cast (Dato as TipoDato) Ejemplo: declare @n int.q Mm. yyyy Qq . Convert. o Estilo: Opcional.@n) + ' ' + @palabra print cast(@n as nvarchar(2)) + ' ' + @palabra set @n = @n + 1 end DateName Recopilado por Yuri Marquez Solis 31 . Convert (Tipodedatosdestino. numérico o moneda.@palabra nvarchar(10) set @n = 1 set @palabra ='Número' print convert(nvarchar(2).

datename (weekday. FechaPedido) as 'Numero de Semana' from Pedidos where IdPedido = 1035251 Ejemplo 47 Select IdPedido. datename (mi. FechaPedido) as 'Día De Semana' from Pedidos where IdPedido = 10352  Martes Horas: Ejemplo 48 Select IdPedido. FechaPedido) as 'Nombre del mes' from Pedidos where IdPedido = 10352 diciembre Ejemplo 46 Select IdPedido. DateName (week. Ejemplo 45 Select IdPedido.Desarrollo de Software 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. FechaPedido) as 'Minutos' from Pedidos where IdPedido = 10352 Ejemplo 49 Recopilado por Yuri Marquez Solis 32 . DateName (Month. por lo que devuelve 0.

FechaPedido) as 'Mes' from Pedidos where IdPedido = 10352 Recopilado por Yuri Marquez Solis 33 . getdate ()) as 'hora'-->18 Ejemplo 52 Select DateName (Hh. FechaPedido) as 'hora' from Pedidos where IdPedido = 10352 Ejemplo 51 Select DateName (Hour. Sintaxis: Datepart (Valor devolver.Desarrollo de Software Select DateName (minute. datepart (mm. getdate ()) as 'hora'-->18 DatePart Devuelve la parte de la fecha u hora indicada. fecha) Ejemplo 53 Select IdPedido. getdate ()) as 'minutos' Ejemplo 50 Select DateName (Hh.

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 día-->6 (día en la que se ejecuta la sentencia) Datepart (dd, getdate ()) -->6 (día 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 (Año en la que se ejecuta la sentencia)

Ejemplo 56
Select year (FechaPedido) as 'Año' 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) 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.

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 días entre la fecha del pedido y la fecha de Envió.  Select IdPedido, FechaPedido, FechaEnvío, días =datediff (day, FechaPedido, FechaEnvío) from pedidos

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

Recopilado por Yuri Marquez Solis

36

106) as [Fecha Corta] from pedidos FUNCIONES MATEMATICAS ABS Es el valor Absoluto Recopilado por Yuri Marquez Solis 37 . Select IdPedido. FechaPedido. convert (varchar (30).Desarrollo de Software Ejemplo 62  Mostrar de la tabla pedidos la fecha de pedidos en fecha corta.

Round (Número.4600 ROUND (123.71443047691954253 Select RAND(999999999)-->0.-3) --->0 SIGN Recopilado por Yuri Marquez Solis 38 . Si length es un valor negativo y mayor que el número de dígitos anteriores al separador decimal. 0) -->123.4567.7136478921266981 Rand sobre los milisegundos actuales Select RAND(DATEPART(ms. ROUND devuelve 0. redondeada a la longitud o precisión especificada.Desarrollo de Software 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.0000 ROUND (123. Select CEILING (5. 2) -->123. Redondeo del Número) ROUND siempre devuelve un valor. Las llamadas repetitivas de RAND() en una única consulta producirán el mismo valor. Select Select Select Select ROUND (123.-2) -->100. Select RAND(6) as 'ALEATORIO'--0.71368515806921451 Select RAND(4) as 'ALEATORIO'--0.4567.71368515806921451 Select RAND(6) as 'ALEATORIO'--0.4) as 'CEILING'--6 FLOOR Devuelve el entero más grande menor o igual que la expresión numérica dada.0000 ROUND (123.68504257551273573 ROUND Devuelve una expresión numérica. Select FLOOR (5) as 'FLOOR'-->5 POWER Devuelve el valor de la expresión indicada elevada a la potencia especificada. 2) as '3 ELEVADO A 2'-->9 RAND Devuelve un valor float aleatorio de 0 a 1.4567. Select POWER (3.GETDATE())) as 'ALEATORIO'-->0.4567.

Dice el valor negativo.Desarrollo de Software Devuelve el signo positivo (+1).0 SQRT Devuelve la raíz cuadrada de la expresión especificada. 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 SQUARE (4) as ‘Cuadrado’-->16.0 FUNCIONES DE CADENA ASCII Devuelve el código ASCII del carácter más a la izquierda de una expresión de caracteres. cero (0) o negativo (-1) de la expresión especificada. 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 char(65)-->A select char(97)-->a CHARINDEX Devuelve la posición inicial de la expresión especificada en una cadena de caracteres. Recopilado por Yuri Marquez Solis 39 . Select SQRT (4) as [RAIZ CUADRADA] -->2.

Expression2 Es una expresión. en la que se busca la cadena especificada. start_location]) Argumentos expression1 Es una expresión que contiene la secuencia de caracteres que se desea buscar.'murcielago') -->4 ('cie'. expression2 [.5) -->e tal LEN Cuenta el número de caracteres que se incluyen en la cadena.'murcielago'. normalmente una columna. 5) -->0 ('cie'.'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.-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'.Desarrollo de Software CHARINDEX (expression1. devuelve null Select Select Select Select charindex charindex charindex charindex ('cie'. Select right ('hola que tal'. Expression1 es una expresión del tipo de cadenas cortas de caracteres. Select len ('murciélago') -->10 LOWER Recopilado por Yuri Marquez Solis 40 . Si no se especifica start_location. start_location Es la posición del carácter de expression2 en el que se empieza la búsqueda de expression1. Si expression1 no se encuentra en expression2. CHARINDEX devuelve 0. la búsqueda empieza al principio de la cadena expression2. Expression2 es de la categoría del tipo de datos cadena de caracteres. 2) -->4 ('cie'. es un número negativo o es cero.'murcielago'. Si alguno de los dos es null.

texto.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. Sintaxis: SUBSTRING (Expresión. binaria.Desarrollo de Software 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. Duración) Argumentos Expresión Es una cadena de caracteres. que tal estas'. imagen. cadena binaria. No deben usarse expresiones que incluyan funciones de agregado. Comienzo.'ue'. Columna o expresión que incluye una columna.' 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'. Select Rtrim (' murciélago ') AS [SIN ESPACIOS] -->murciélago Select Ltrim (' murciélago ') AS [SIN ESPACIOS] -->murciélago Select ltrim(rtrim(' hola '))+'. Start Recopilado por Yuri Marquez Solis 41 . de texto o de imagen.'A') -->holA que tAl estAs Select replace ('buenos dias.'ñññ') -->bñññnos dias.

replicate STUFF Elimina el número de caracteres especificados e insertados Otro conjunto de caracteres en un punto de inicio indicado. 5) Replicate. Select substring ('murcielago'. 3. 3. 2. replicate.Desarrollo de Software Es un entero que especifica el punto en que comienza la subcadena. Select reverse ('hola') REPLICATE Repite una expresión de caracteres un número especificado de veces. Select STUFF ('Murciélago'. len ('murcielago')) -->rciel REVERSE Devuelve invertida una expresión de carácter. Length Es un entero que especifica la longitud de la subcadena (El número de caracteres o bytes que se devuelven). Select replicate ('murcielago'. replicate. 5) -->rciel Select substring ('murcielago'. 3. replicate. '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] Recopilado por Yuri Marquez Solis 42 .

3) as [Parte Expresión] (' sa.pedidos'.'No nulo') as [Es Nulo] - PARSENAME (‘NombreObjeto’.poseidon. Select isnumeric ('ddd') as [Validacion Numero] - ISNULL (Expresión . 2) as [Parte Expresión] ('sa.pedidos'. ExpresionDevuelta) Si la expresión es nula te devuelve la Expresión Devuelta y si no devuelve la primera Expresión Select isnull (null.dbo.poseidon.pedidos'.pedidos'.dbo. Devuelve 1 si la expresión es una fecha y 0 si no es una fecha.poseidon.dbo. Devuelve 1 si la expresión es un número y 0 si la expresión no es número. ParteNombre) ParteNombre es un valor de tipo Int que coge unos determinados valores del NombreObjeto:  1 Objeto.poseidon.1) as [Parte Expresión] ('sa.Desarrollo de Software ISDATE (Expresión) Dice si la expresión es una fecha o no.  2 Propietario  3 Base de Datos  4 Servidor Select Select Select Select parsename parsename parsename parsename ('sa. 4) as [Parte Expresión] Recopilado por Yuri Marquez Solis 43 .dbo. Select isdate ('12/10/01') as [Validación Fecha] - ISNUMERIC (Expresion) Dice si la expresión es un numero o no.

Desarrollo de Software - 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. Cantidad) from [detalles de Pedidos]  Si el PrecioUnidad es nulo devolverá la Cantidad. devolverá un campo Null. Ejemplo: Ponemos en el analizador de consultas lo siguiente: Recopilado por Yuri Marquez Solis 44 . es decir Northwind y Pubs Use Base de datos Indica que la siguiente sentencia usará la base de datos indicada. y si los dos son nulos. expresión2.. 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.) Devuelve la primera expresión no NULL Si todos son NULL devuelve NULL Select coalesce (PrecioUnidad.. .

A de usarse junto con la clausula group by. lo que hace es realizar un resumen de los campos incluidos en el rollup. Sum(Quantity) As Cantidad_Total From [Order Details] Group by ProductID. ROLLUP Se usa para presentar resúmenes de datos. OrderID with Rollup Recopilado por Yuri Marquez Solis 45 . con lo que no puede haber una combinación de ambos campos que sea igual. OrderId 1 1 1 2 3 ProductId A B C A C Es decir en este caso no podría existir una nueva combinación “1 A” o “2 A”. se encarga de manejar los pedidos Order Id : Nº de Pedido.Desarrollo de Software Use Northwind Select * from [Order Details] [Order Details] Esta tabla perteneciente a la Northwind. Ambos campos son Primary Key. Producto Id : Nº de Producto. OrderId. Quantity: Es la cantidad del producto del pedido. Ejemplo 63 Select ProductID.

OrderId. Sum(Quantity) As Cantidad_Total From [Order Details] where orderid < 10250 Group by ProductID. Sum(Quantity) As Cantidad_Total From [Order Details] where orderid < 10250 Group by ProductID.Desarrollo de Software Order by ProductID. muestra una fila con la suma de todas las cantidades de cada producto. El resultado de este ejemplo. OrderId. Pero en este caso muestra un resumen con cada combinación posible de los campos agrupados. hace un resumen con la suma de la cantidad de cada combinación posible entre el Recopilado por Yuri Marquez Solis 46 . Ejemplo 65 Select ProductID. OrderID with Cube Order by ProductID. OrderID Este ejemplo suma todas las cantidades. y además. OrderID CUBE Al igual que Rollup realiza resúmenes de campos agrupados. otra fila con la suma de todas las cantidades de todos los productos. OrderID with Rollup Order by ProductID. y mediante rollup. sería el que muestra la imagen: Ejemplo 64 Select ProductID. OrderID En este caso como vemos en la imagen.

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. es una clausula meramente informativa. sale una columna. es decir. Tampoco se le pueden poner alias a los resúmenes. Ejemplo 67 Select Productid. Sum(Quantity) As Cantidad_Total From [Order Details] where orderid < 10250 Group by ProductID. grouping(ProductID). Orderid. Su formato sería Compute función(campo). OrderID Vemos que por cada grouping que hemos puesto. COMPUTE Realiza un resumen en una columna aparte con el resultado de la función de agregado indicada. grouping(OrderId).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 cláusula de resumen. Poniéndole un alias al grouping saldría el nombre de columna que le indiquemos. Ejemplo 66 Select Productid. Quantity From [Order Details] order by ProductID. 1 indica que el Null es creado por la clausula Cube y 0 indica que es de la tabla. Orderid compute Sum(quantity) Recopilado por Yuri Marquez Solis 47 . No se puede utilizar en aplicaciones cliente / servidor. OrderID with Cube Order by ProductID. Orderid.

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 . Ejercicios de ROLLUP.----------. Realizando un cálculo acumulativo.sum(quantity) as [SUMA TOTAL] from [Order Details] group by productid.Desarrollo de Software Vemos que muestra la columna con la suma total de todas las cantidades. 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. orderid with rollup order by productid. select productid as [PRODUCTO] .orderid as [Nº PEDIDO] .

orderid as [Nº PEDIDO] . orderid with rollup order by productid.sum(quantity) as [SUMA TOTAL] from [Order Details] where productid = 50 group by productid.grouping(orderid) as [GRUPO PEDIDO] .orderid as [Nº PEDIDO] .-----------.orderid with cube order by productid.Desarrollo de Software  Modificación al ejercicio anterior: Realizar el mismo resumen pero únicamente para el producto cuyo id es 50 select productid as [PRODUCTO] .----------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 modificación del ejercicio anterior de tal manera que sea posible obtener un resumen por producto y por pedido.orderid PRODUCTO GRUPO PRODUCTO Nº PEDIDO GRUPO PEDIDO SUMA TOTAL ----------.----------.grouping(productid) as [GRUPO PRODUCTO] .----------. ordered PRODUCTO Nº PEDIDO SUMA TOTAL ----------.-------------. select Productid as [PRODUCTO] .sum(quantity) as [SUMA TOTAL] from [Order Details] where productid = 50 group by Productid.----------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 .

BY permite agrupar las filas en base a los valores de una o más columnas. Ejemplo 71  Lista de pedidos que muestre por código de pedido la cantidad de productos vendidos por cada uno de ellos..idproducto.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) Obtención de resúmenes detallados con Computer by SELECT lista_columna FROM tabla ORDER BY columnax COMPUTE FUNCION_AGREGACION (columna) BY columnax Columnax.idproducto.[Sub Total]=sum(Preciounidad*Cantidad) from [detalles de pedidos] group by Idpedido.cantidad...Es la Columna en base a cuyos valores se formaran los grupos. select Idpedido. La clausula COMPUTE.preciounidad. 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.preciounidad.cantidad order by IdPedido compute sum(Cantidad) by IdPedido Recopilado por Yuri Marquez Solis 50 .

la cantidad pedida para todos los orderid 11070 Select Orderid as [Nº PEDIDO].-------11070 40 11070 20 11070 30 11070 20 sum =========== 110 sum =========== 110 Recopilado por Yuri Marquez Solis 51 .Desarrollo de Software EJERCICIOS CON COMPUTE: Ejemplo 72  Generar un resumen de subtotales en una consulta que devuelva el número de pedido. Quantity AS [CANTIDAD] From [Order Details] where orderid >= 11070 order by Orderid compute Sum(quantity) by orderid compute sum(quantity) Nº PEDIDO CANTIDAD ----------.

-------11076 20 11076 20 11076 10 sum =========== 50 (8 filas afectadas) Ejemplo 74  Modificación al ejercicio anterior: Agregar la cantidad total y la cantidad promedio al final del informe Select Orderid as [Nº PEDIDO]. Quantity as [CANTIDAD] From [Order Details] where orderid = 11075 or orderid = 11076 order by Orderid compute Sum(quantity) by ordered Nº PEDIDO CANTIDAD ----------.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].-------11075 10 11075 30 11075 2 sum =========== 42 Nº PEDIDO CANTIDAD ----------. 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 .

0000 Recopilado por Yuri Marquez Solis 53 . todos los tipos.9900 5000. price as [PRECIO].-------11075 10 11075 30 11075 2 sum =========== 42 Nº PEDIDO CANTIDAD ----------. la suma de los precios y la suma del anticipo de la tabla títulos Select type as [TIPO].-------11076 20 11076 20 11076 10 sum =========== 50 sum =========== 92 avg =========== 15 (10 filas afectadas) Ejemplo 75  Seleccionar de forma agrupada por tipo.9500 5000.0000 business 11.--------------------. advance as [ANTICIPO] From titles order by type compute sum(price) by type compute avg (advance) by type TIPO PRECIO ANTICIPO -----------.Desarrollo de Software Nº PEDIDO CANTIDAD ----------.--------------------business 19.

0000 psychology 10.9500 7000.0000 TIPO PRECIO ANTICIPO -----------.9900 10125.--------------------popular_comp 22.0000 TIPO PRECIO ANTICIPO -----------.9500 2275.0000 5000.9900 15000.--------------------.9800 avg ===================== 7500.0000 psychology 7.2500 TIPO PRECIO ANTICIPO -----------.0000 mod_cook 2.Desarrollo de Software business business 2.--------------------psychology 21.0000 popular_comp 20.0000 sum ===================== 54.0000 popular_comp NULL NULL sum ===================== 42.9900 .9200 avg ===================== 6281.9500 avg ===================== 7500.0000 6000.0000 sum ===================== 22.--------------------.9900 19.0000 Recopilado por Yuri Marquez Solis 54 .--------------------.5900 7000.--------------------mod_cook 19.0000 8000.

9900 15000. muestre la suma total de los precios y anticipo por cada tipo Select type as [TIPO].0000 sum ===================== 54.--------------------business 19.Desarrollo de Software psychology 19. advance as [ANTICIPO] From titles order by type compute sum(price) by type compute sum(advance) by type TIPO PRECIO ANTICIPO -----------.--------------------.0000 business 11.5200 avg ===================== 4255.0000 Recopilado por Yuri Marquez Solis 55 .--------------------mod_cook 19.0000 TIPO PRECIO ANTICIPO -----------. precios y anticipos de la tabla titulos individualmente ordenados por el tipo en un informe que.9900 5000.9900 2000.9500 5000.0000 business 2.0000 (30 filas afectadas) Ejemplo 76  Obtener todos los tipos.9900 psychology 7.9900 . price as [PRECIO].0000 mod_cook 2.0000 business 19.9900 5000.9200 sum ===================== 25125.0000 4000.--------------------. además.9900 10125.0000 sum ===================== 67.

0000 psychology 0736 19.9500 psychology 0736 7.pub_id as [CODIGO EDITOR] .--------------------popular_comp 22.------------.9500 sum ===================== 15000.9900 sum ===================== Recopilado por Yuri Marquez Solis 56 .0000 TIPO PRECIO ANTICIPO -----------.0000 popular_comp NULL NULL sum ===================== 42.9800 sum ===================== 15000.--------------------.9900 psychology 0736 7.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] .9500 7000.0000 popular_comp 20.--------------------psychology 0736 10.Desarrollo de Software sum ===================== 22.price as [PRECIO] From titles where type = 'psychology' order by pub_id compute sum(price) by pub_id TIPO CODIGO EDITOR PRECIO -----------.0000 8000.

9300 TIPO CODIGO EDITOR PRECIO -----------.5900 Recopilado por Yuri Marquez Solis 57 .0000 psychology 0736 19.------------.5900 (7 filas afectadas) Ejemplo 78  Generar un informe que obtenga la suma de los precios de todos los libros de psicología.--------------------psychology 0736 10.--------------------psychology 0877 21.9900 sum ===================== 45.Desarrollo de Software 45. así como la suma de los precios de los libros de psicología por editor.9900 psychology 0736 7.------------.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 -----------.9500 psychology 0736 7.5900 sum ===================== 21.------------.9300 TIPO CODIGO EDITOR PRECIO -----------.--------------------psychology 0877 21. Select type as [TIPO] .

0000 trad_cook 0877 20.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] .9900 8000.------------.9800 sum ===================== 15000.--------------------.0000 TIPO CODIGO EDITOR PRECIO ANTICIPO -----------.pub_id [CODIGO EDITOR] .--------------------mod_cook 0877 19.9900 15000.9900 .5900 sum ===================== 67.--------------------.advance as [ANTICIPO] From titles where type like '%cook' order by type.0000 sum ===================== 22.0000 Recopilado por Yuri Marquez Solis 58 .------------.Desarrollo de Software sum ===================== 21.--------------------trad_cook 0877 11.0000 trad_cook 0877 14.9500 7000.price as [PRECIO] . advance compute sum(price) by type compute sum(advance) by type TIPO CODIGO EDITOR PRECIO ANTICIPO -----------.0000 mod_cook 0877 2.9500 4000.

4900 sum ===================== 21000.9500 7000.Desarrollo de Software sum ===================== 47.0000 Computer Phobic AND Non-Phobic Individuals: Behavior Variations 21.price as [PRECIO] .9500 7000. and Garlic: Cooking Secrets of the Mediterranean 20.0000 (5 filas afectadas) Ejemplo 81 Recopilado por Yuri Marquez Solis 59 . precio y anticipo de aquellos títulos que tengan un precio superior a 20 dólares. Select title as [TITULO] .0000 (9 filas afectadas) Ejemplo 80  Generar un informe que muestre todos los títulos.0000 sum ===================== 65. Ofrecerá también la suma total del precio y del anticipo.advance as [ANTICIPO] From titles where price > 20 order by title compute sum(price) compute sum(advance) TITULO PRECIO ANTICIPO -------------------------------------------------------------------------------.--------------------.0000 Onions.-------------------But Is It User Friendly? 22. Leeks.5900 7000.8900 sum ===================== 19000.

Select type as [TIPO] .9500 1389 sum ===================== 54.0000 mod_cook 2.9200 max ==== 1389 (6 filas afectadas) Ejemplo 82  Realizar una consulta que recupere el tipo.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 -----------.price as [PRECIO] .9800 sum ===================== 15000.9900 .9900 1389 business 11.0000 Recopilado por Yuri Marquez Solis 60 .9900 1389 business 19.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 -----------.0000 sum ===================== 22.------------business 2. precio y anticipo de la tabla titles para los libros de cocina.--------------------mod_cook 19. calculará el total general de los precios y los anticipos para todos los registros seleccionados.--------------------. Además aparecerá la suma total de precios y el máximo pub_id de esta selección Select type as [TIPO] .--------------------.Desarrollo de Software  Generar un informe que muestre el precio.9900 0736 business 19. Mostrará la suma de los precios y los anticipos por tipo y luego. el tipo y el número de editor de la tabla titles de todos aquellas obras que pertenezcan la categoría de “business”.9900 15000.price as [PRECIO] .

Desarrollo de Software TIPO PRECIO ANTICIPO -----------.9900 8000.8900 sum ===================== 19000. ¿A que precio se ah vendido los productos? Select IdProducto.0000 sum ===================== 47.--------------------trad_cook 20.0000 trad_cook 14. Ejemplo 83 1.8700 sum ===================== 34000.0000 trad_cook 11.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.9500 7000.0000 sum ===================== 70.9500 4000.--------------------. Preciounidad from [Detalles de pedidos] order by IdProducto Recopilado por Yuri Marquez Solis 61 .

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. Select distinct IdProducto.. Recopilado por Yuri Marquez Solis 62 .son las filas que satisfacen la condición de la combinación. INNER JOIN.Desarrollo de Software  Si observa el resultado contiene filas duplicadas si se desea eliminar esas filas se agrega a la consulta la clausula DISTINCT. 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.

idpedido from clientes inner join pedidos on clientes.IdPedido.NombreCompañía.Desarrollo de Software La única condición es que las 2 tablas tengan un campo en común.IdCliente order by pedidos.idcliente=pedidos.IdCliente.Cantidad) From [detalles de pedidos] inner join pedidos on [detalles de pedidos]. IdPedido CROSS JOIN Recopilado por Yuri Marquez Solis 63 . pedidos. IdPedido Group by pedidos.pedidos.Preciounidad*[detalles de 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. pedidos.IdPedido=pedidos. Total=sum ([detalles de pedidos]. Ejemplo 84 select clientes.IdPedido.

pedidos.IdPedido='10248' Group by pedidos.Cantidad) From [detalles de pedidos] inner join pedidos on [Detalles de pedidos].IdPedido. No es necesario que exista una columna en común para ejecutar el Cross Join. Total=sum ([detalles de pedidos]. 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.IdPedido=pedidos.IdCliente Ejemplo 88 Recopilado por Yuri Marquez Solis 64 .categorias.NombreProducto Ejercicios de consultas Múltiples Ejemplo 87  Mostrar el pedido completo con el id='10248' Select pedidos. pedidos.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.IdCliente.Preciounidad*[detalles de pedidos].Nombrecategoria from productos cross join categorias order by productos.NombreProducto.IdPedido.IdPedido where pedidos.

NombreCategoría Ejemplo 89  Calcular cuantas ventas tiene cada uno de los vendedores. Mostrar la cantidad de productos por categoría.IdCategoría Group by Categorías. empleados. Categorías. empleados.IdEmpleado Group by empleados.IdCategoría. [Total de ventas]=count (pedidos. Categorías.Nombre. [Total de Producto]=sum (UnidadesEnExistencia) from Categorías inner join Productos on Categorías.IdEmpleado=pedidos.IdCategoría.Apellidos.IdPedido) from empleados Inner join Pedidos on empleados. Select empleados. Select Categorías.Nombre. empleados.Desarrollo de Software 1.NombreCategoría.IdEmpleado. empleados.IdCategoría=productos.IdEmpleado.Apellidos Recopilado por Yuri Marquez Solis 65 .

por ejemplo.salario from emp UNION Select Apellido. Funcion.Desarrollo de Software OPERADOR UNION Es un operador que combina un conjunto de resultados. 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 Plantilla Recopilado por Yuri Marquez Solis 66 .

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

Apellido from (select emp_no.e. Dividen consultas complejas con dos o más consultas simples relacionadas Subconsulta correlacionada Select apellido.dept_no from emp as e where 20 < (select dept_no from dept as d where e. oficio.(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.Apellido .Salario .dnombre = 'Ventas') SUBCONSULTAS Recopilado por Yuri Marquez Solis 68 . apellido from emp) as e  Como una expresión Select emp_no as [Numero] .  Como una tabla derivada Select e.Desarrollo de Software SUBCONSULTAS Es una SELECT anidada en una instrucción INSERT.emp_no as Numero .dept_no = d.dept_no and d. SELECT o UPDATE. DELETE.

apellido. SELECT emp_no. fecha_alt from emp where fecha_alt = (select min(fecha_alt) from emp) 2.Desarrollo de Software 1. dept_no from emp where salario > (select max (salario) from emp where dept_no = 30) Recopilado por Yuri Marquez Solis 69 . oficio. el apellido y la fecha de alta del empleado mas antiguo de la empresa SELECT emp_no. select 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. Queremos saber el apellido. Mostrar el numero de empleado. el apellido y la fecha de alta del empleado mas modernos de la empresa. salario.apellido. oficio. Select apellido. oficio from emp where oficio = (select oficio from emp where apellido = 'JIMENEZ') 4. Mostrar el numero de empleado. salario y número de departamento de los empleados con salario mayor que el mejor salario del departamento 30.

dept_no = d. select e. Select apellido.sala_cod = s. 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 . select Apellido.hospital_cod = h.hospital_cod order by 3 6. sala o departamento de todos los empleados que trabajen en la empresa. la función. d.funcion. de forma que se aprecien las diferencias entre ellos. e. d. Mostrar el apellido. Mostrar apellidos y oficio de los empleados del departamento 20 cuyo trabajo sea el mismo que el de cualquier empleado de ventas. p.hospital_cod and p. Salario from plantilla order by 2 desc 7.sala_cod union select d.dnombre as [Oficina] from emp as e inner join dept as d on e.Apellido.dept_no union select p.Desarrollo de Software 5.Apellido.especialidad. Averiguar el salario de todos los empleados de la empresa.Apellido.nombre from plantilla as p inner join sala as s on p. s.Oficio as [Cargo en Empresa].hospital_cod = s. Salario from emp union select Apellido. h.nombre from doctor as d inner join hospital as h on d.

Mostrar el apellido. hospital_cod from plantilla where funcion in ('ENFERMERO'. salario y código de hospital de los empleados de la plantilla que siendo enfermeros o enfermeras pertenecen al hospital SAN CARLOS. Select * from hospital where hospital_cod in (select hospital_cod from doctor where especialidad = ‘Cardiología’) Recopilado por Yuri Marquez Solis 71 . 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.Desarrollo de Software 8. Mostrar los empleados que tienen mejor salario que la media de los directores. Select apellido. salario. funcion. no incluyendo al presidente. función.'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. funcion. Select * from emp where salario > (select avg (salario) from emp where oficio = 'DIRECTOR') and oficio <> 'PRESIDENTE' 9.

Desarrollo de Software Recopilado por Yuri Marquez Solis 72 .

salario * 12 as [SALARIO ANUAL] from plantilla where hospital_cod in (select hospital_cod from hospital where nombre = ‘PROVINCIAL’ or nombre= ‘GENERAL’) 12. Select apellido from enfermo where Fecha_nac < (select fecha_nac from enfermo where apellido = ‘MILLER B. funcion. Mostrar el apellido de los enfermos que nacieron antes que el Señor Miller. Select apellido. Visualizar el salario anual de los empleados de la plantilla del Hospital Provincial y General.’) Recopilado por Yuri Marquez Solis 73 .Desarrollo de Software 11.

e1.oficio from emp as e2 where e1.apellido. la combinación sería asi.dept_no <> e2.e1.apellido.apellido HAVING e1.salario) from emp as e2 where e1. que es la que deberíamos utilizar antes que una subconsulta de simulación HAVING: SELECT e1.dept_no) Se debe utilizar antes una combinación que una subconsulta.oficio = e2.oficio = e2. Subconsulta para simular una clausula HAVING select e1.oficio = e2.oficio) Esta es la consulta utilizando el HAVING.salario FROM emp AS e1 INNER JOIN emp AS e2 ON e1.salario > (select avg(e2.oficio from emp as e1 where e1.dept_no Estos son los dos oficios que están en más de un departamento. e1.salario from emp as e1 where e1.salario.e1.oficio where e1.dept_no <> e2.oficio. e1. dando los mismos resultados: Select distinct e1.Desarrollo de Software Simulacion de una clausula JOIN Vamos a mostrar los oficios que están en más de un departamento.oficio GROUP BY e1.oficio in(Select e2. Select distinct e1.oficio.salario) Recopilado por Yuri Marquez Solis 74 .oficio. e1.salario > AVG (e2.Oficio from emp as e1 inner join emp as e2 on e1.

Sign up to vote on this title
UsefulNot useful