Upload
saul1466
View
755
Download
12
Embed Size (px)
Citation preview
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 1
Bases de datos
Una base de datos de Microsoftreg SQL Servertrade 2005 consta de una coleccioacuten de tablas que contienen
datos y otros objetos como vistas iacutendices 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
informacioacuten de inventario para el almaceacuten de una faacutebrica
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 podriacutea
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 elaboracioacuten de los informes anuales
Antes de crear una base de datos es importante entender las partes que la componen y coacutemo
disentildearlas 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 informacioacuten del sistema que utiliza SQL Server como por ejemplo los
valores de las opciones de configuracioacuten
Tablas
Las tablas son objetos de la base de datos que contienen todos sus datos Una tabla se define mediante
una coleccioacuten de columnas En las tablas los datos se organizan con arreglo a un formato de filas y
columnas similar al de una hoja de caacutelculo Cada fila representa un registro uacutenico y cada columna
representa un campo dentro de un registro Por ejemplo en una tabla que contenga los datos de los
empleados de una compantildeiacutea puede haber una fila para cada empleado y distintas columnas en las que
figuren detalles de los empleados tales como el nuacutemero de empleado el nombre la direccioacuten el puesto
que ocupa y su nuacutemero de teleacutefono particular
Especificar un tipo de datos para una columna
La asignacioacuten de un tipo de datos a cada columna es uno de los primeros pasos que debe llevarse a cabo
para disentildear 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 Microsoftreg SQL
Servertrade 2005 o crear sus propios tipos de datos basaacutendose en los del sistema Por ejemplo si soacutelo
desea incluir nombres en una columna puede asignar un tipo de datos de caraacutecter para la misma
Asimismo si desea que una columna soacutelo contenga nuacutemeros puede asignar un tipo de datos numeacuterico
Para obtener maacutes informacioacuten acerca de los tipos de datos definidos por el usuario
SQL Server tambieacuten admite sinoacutenimos de SQL-92 para varios tipos de bases de datos Para obtener
maacutes informacioacuten
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 2
Datos binarios
Los datos binarios se componen de nuacutemeros hexadecimales Por ejemplo el nuacutemero decimal 245
corresponde al hexadecimal F5 Los datos binarios se almacenan utilizando los tipos de datos binary
varbinary e image de Microsoftreg SQL Servertrade 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 nuacutemero de diacutegitos 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 Wordreg hojas de caacutelculo de
Microsoft Excelreg e imaacutegenes 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 deberaacute utilizar el tipo de datos image Es recomendable que la longitud definida de una
columna binaria no supere la longitud maacutexima prevista para los datos binarios que deben almacenarse
Datos de caraacutecter
Se define como dato de caraacutecter cualquier combinacioacuten de letras siacutembolos y caracteres numeacutericos Por
ejemplo son datos de caraacutecter vaacutelidos 928 Johnson y (0amp(B99nh jkJ En Microsoftreg SQL
Servertrade 2005 los datos de caraacutecter se almacenan utilizando los tipos de datos char varchar y text
Utilice varchar cuando variacutee el nuacutemero 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 maacutes de 8 KB Por ejemplo dado que los documentos HTML son
caracteres ASCII y suelen ocupar maacutes 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 maacutexima
prevista para los datos de caraacutecter 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 Microsoftreg SQL Servertrade 2005 permiten la utilizacioacuten
de caracteres definidos por un conjunto de caracteres determinado El conjunto de caracteres se elige
durante la instalacioacuten de SQL Server y no puede modificarse Si se utilizan los tipos de datos Unicode
una columna puede almacenar cualquier caraacutecter definido por el estaacutendar 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 maacutes de un conjunto de
caracteres Utilice nvarchar cuando las entradas de una columna variacuteen en cuanto al nuacutemero de
caracteres Unicode que contienen (hasta 4000) Utilice nchar cuando todas las entradas de una
columna tengan la misma longitud fija (hasta 4000 caracteres Unicode) Utilice ntext cuando alguna
entrada de una columna ocupe maacutes de 4000 caracteres Unicode
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 3
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 caraacutecter 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 vaacutelidas de fecha y hora Por ejemplo datos vaacutelidos
de fecha y hora pueden ser 40198 1215000000 pm y 128291501 am 17898 Los datos de
fecha y hora se almacenan utilizando los tipos de datos datetime y smalldatetime de Microsoftreg SQL
Servertrade 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 antildeo 2079 (para cada valor se necesitan 4 bytes de espacio de almacenamiento)
Datos numeacutericos
Los datos numeacutericos se componen exclusivamente de nuacutemeros Incluyen nuacutemeros positivos y negativos
decimales fracciones y nuacutemeros enteros
Datos enteros
Los datos enteros constan de nuacutemeros enteros positivos o negativos como ndash15 0 5 y 2509 Los datos
enteros se almacenan utilizando los tipos de datos bigint int smallint y tinyint de Microsoftreg SQL
Servertrade 2005 El tipo de datos bigint puede almacenar un intervalo de nuacutemeros 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 nuacutemeros que tinyint
Utilice el tipo de datos bigint para almacenar nuacutemeros del intervalo comprendido entre -2^63 (-
9223372036854775808) y 2^63-1 (9223372036854775807) El tamantildeo de almacenamiento es de 8
bytes
Utilice el tipo de datos int para almacenar nuacutemeros del intervalo comprendido entre -2147483648 y
2147483647 (para cada valor se necesitan 4 bytes de espacio de almacenamiento)
Utilice el tipo de datos smallint para almacenar nuacutemeros del intervalo que va desde -32768 hasta
32767 (para cada valor se necesitan 2 bytes de espacio de almacenamiento) y el tipo de datos tinyint
para almacenar nuacutemeros 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 diacutegito menos significativo
Estos datos se almacenan mediante los tipos de datos decimal o numeric de SQL Server El nuacutemero de
bytes necesarios para almacenar un valor decimal o numeric depende del nuacutemero total de diacutegitos de
datos y del nuacutemero de cifras a la derecha del separador decimal Por ejemplo se necesitan maacutes bytes
para almacenar el valor 1928329383 que para almacenar el valor 11
En SQL Server el tipo de datos numeric es sinoacutenimo del tipo de datos decimal
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 4
Datos numeacutericos aproximados
Los datos numeacutericos aproximados (coma flotante) constan de datos que se almacenan con tanta
precisioacuten como permite el sistema de numeracioacuten binario Los datos numeacutericos aproximados se
almacenan mediante los tipos de datos float y real de SQL Server Por ejemplo dado que en notacioacuten
decimal la fraccioacuten un tercio se expresa como 0333333 (hasta el infinito) este valor no se puede
representar con total precisioacuten mediante los datos decimales aproximados Por lo tanto el valor
recuperado de SQL Server puede no coincidir exactamente con el que se almacenoacute originalmente en la
columna Otros ejemplos de aproximaciones numeacutericas son los valores de coma flotante que acaban en
03 06 y 07
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 Microsoftreg SQL Servertrade 2005 Los
datos de moneda pueden almacenarse con una precisioacuten maacutexima de cuatro decimales Utilice el tipo de
datos money para almacenar valores del intervalo comprendido entre -9223372036854775808 y
+9223372036854775807 (para almacenar cada valor se necesitan 8 bytes) Utilice el tipo de datos
smallmoney para almacenar valores del intervalo comprendido entre -2147483648 y 2147483647
(para almacenar cada valor se necesitan 4 bytes) Si se necesita un nuacutemero mayor de decimales utilice
el tipo de datos decimal
Datos especiales
Los datos especiales son aqueacutellos que no se ajustan a ninguna de las categoriacuteas de datos como los datos
binarios de caraacutecter Unicode de fecha y hora numeacutericos y de moneda
Microsoftreg SQL Servertrade 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 nuacutemero 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 funcioacuten DBTS Los datos de tipo timestamp no estaacuten
relacionados con la fecha ni la hora de una insercioacuten ni de un cambio en los datos Si desea
registrar automaacuteticamente en queacute 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 sinoacutenimo de timestamp
bit
Puede ser un 1 o un 0 Utilice el tipo de datos bit para representar los valores TRUE
(verdadero) o FALSE (falso) o YES o NO Por ejemplo un cuestionario para los clientes en el
que se pregunte si eacutesta es la primera visita del cliente puede almacenarse en una columna de
tipo bit
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 5
uniqueidentifier
Se trata de un nuacutemero hexadecimal de 16 bytes que hace referencia a un identificador
exclusivo global (GUID) El GUID es especialmente uacutetil cuando una fila debe ser uacutenica entre
otras muchas Por ejemplo utilice el tipo de datos uniqueidentifier en una columna con nuacutemeros
de identificacioacuten de los clientes para compilar una lista de clientes de una compantildeiacutea en varios
paiacuteses
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 soacutelo puede utilizarse para definir variables locales del
tipo table o el valor de retorno de una funcioacuten 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 mayuacutesculas seguidas de un nuacutemero de
proveedor de cinco cifras
Definir una clave principal
Defina una Clave Principalcpara exigir que se escriban valores uacutenicos 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 asiacute se reduce la necesidad de datos redundantes Una tabla soacutelo puede tener una
clave principal
Para definir una clave principal
1 En el diagrama de base de datos o en el Disentildeador de tablas haga clic en el selector de fila de
la columna de la base de datos que desee definir como clave principal Si desea seleccionar
varias columnas mantenga presionada la tecla CTRL mientras hace clic en los selectores de fila
para las otras columnas
2 Haga clic con el botoacuten secundario en el selector de fila para la columna y seleccione Establecer
clave principal En la ficha Iacutendices y claves de las paacuteginas de propiedades se crea
automaacuteticamente un iacutendice 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 comunicaraacute que las
relaciones existentes se eliminaraacuten automaacuteticamente como parte de este proceso
Una columna de clave principal se identifica por un siacutembolo de llave principal en el selector de fila
Si una clave principal consta de maacutes de una columna se permiten valores duplicados en una columna
pero cada combinacioacuten de valores de todas las columnas de la clave principal debe ser uacutenica
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 6
Coacutemo crear una relacioacuten de varios a varios entre tablas
Para crear una relacioacuten de varios a varios entre tablas
1 Abra un diagrama de base de datos
2 Agregue las tablas entre las que desea crear una relacioacuten de varios a varios
3 Cree una tercera tabla Para ello haga clic con el botoacuten secundario del mouse dentro del
diagrama de la base de datos y a continuacioacuten haga clic en Nueva tabla
Eacutesta se convertiraacute en la tabla de unioacuten
4 En el cuadro de diaacutelogo Elegir nombre escriba un nombre para la tabla
Por ejemplo la tabla de unioacuten entre la tabla de tiacutetulos 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 unioacuten
Puede agregar otras columnas a esta tabla igual que en cualquier otra tabla
6 En la tabla de unioacuten establezca la clave principal para que incluya todas las columnas de la clave
principal de las otras dos tablas
7 Defina una relacioacuten de uno a varios entre cada una de las dos tablas principales y la tabla de
unioacuten
Fundamentos de Programacioacuten con SQL Existen 3 tipos de instrucciones para el lenguaje en SQL
- Lenguaje de control de datos (DDL) Creacioacuten y eliminacioacuten de tipos de datos y objetos
CREATE Crear Objeto
ALTER Modificar los datos creados
DROP Eliminar el Objeto
- Lenguaje de control de datos (DCL) Se basa en los derechos que tiene el usuario sobre la
base da datos (Permisos)
GRANT Dar permisos a un usuario para efectuar determinadas
Instrucciones
DENY Eliminar el permiso que se ha concedido con el GRANT
REVOKE Eliminar todos los permisos
- Lenguaje de manipulacioacuten de datos (DML) Desarrollo de la programacioacuten de la base de
datos
SELECT
INSERT
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 7
UPDATE
DELETE
Elementos de sintaxis
Directivas de procesos por lotes
- GO Enviacutea 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 liacutenea --
- 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 nuacutemero
deben empezar por un signo alfabeacutetico pueden incluir el guion bajo (_) la arroba y la
almohadilla
Generalmente para las variables locales se usan + el nombre
EJEMPLO Contador
Para las variables totales se usan dos arrobas + el nombre Contador
EJEMPLO Error
Nombre indica una tabla o procedimiento temporal (Local)
Nombre Igual que el anterior pero global
Tipos de datos
- Numeacutericos
Enteros int tinyint smallint bigint
Decimales numeric decimal money smallmoney
Coma Flotante float real
- Fechas
datetime 0333 s
smalldatetime 1 minuto
- Caracteres
Ancho fijo char nchar
Ancho Variable varchar nvarchar
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 8
- Texto e Imagen
Text
Ntext
Rowversion
- Binario
Binary varbinary Valores tipo byte
Bit Un solo bit (1 o ninguno)
- Identificadores Uacutenicos
Representa un identificador global uacutenico (GUID)
Si queremos que no se repita el dato en la base de datos usamos este identificador
Uniqueidentifier
Operadores de SQL
Loacutegicos
AND OR NOT
De Comparacioacuten
= Igual
lt Menor
gt Mayor
ltgt Diferente
gt= Mayor o igual
lt= Menor o igual
Crear una Base de Datos Utilizando el Lenguaje SQL
Ejemplo
Para crear la base de datos es la siguiente opcioacuten database seguido del nombre de la Base de Datos
--Create database Itae
On primary
(Name= Itae _data Filename=C itaemdf size=10 maxsize=15 filegrowth=25)
Log On
(Name= Itae _log filename=C itaeldf size=4 maxsize=6 filegrowth=1MB)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 9
Despueacutes de la sentencia Create database Se especifica el nombre de la base de datos Un
nombre en la base de datos debe de ser uacutenico 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 ndash Especifica el tamantildeo del Archivo
Maxsize ndashEspecifica el tamantildeo maacuteximo que puede alcanzar el archive si se requiere espacio adicional
Filegrowth ndashEs la cantidad de espacio que se antildeade 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 procederaacute abrir la base de datos con el use nombre de la base de datos y luego el Use Go
Use master
Go
Luego se procederaacute abrir la tabla Sysdatabases y ahiacute se podraacute visualizar si la base de datos ah
sido creada
Select from Sysdatabases
Luego se procederaacute abrir la base de datos con el use nombre de la base de datos y luego el go
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 10
INSERCIOacuteN ELIMINACIOacuteN Y MODIFICACIOacuteN DE DATOS
- Insercioacuten 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 INSERTSELECT
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
- Creacioacuten de una tabla mediante SELECT INTO Creacioacuten 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
- Insercioacuten de datos parciales No introducir todos los datos solo meter datos en un
determinado campo o en varios pero no en toda la tabla
- Insercioacuten de datos mediante valores de columna predeterminados Se usa para no
dejar a las tablas con el valor null y asiacute 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
ELIMINACIOacuteN 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 = bdquoSERRA‟
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 11
- TRUNCATE TABLE Elimina todas las filas de la tabla (La tabla con su estructura no se
elimina soacutelo los datos de la tabla) No crea filas en el registro de transacciones con lo cual
es el meacutetodo maacutes raacutepido de borrar
TRUNCATE TABLE NombreTabla
Truncate Table emp
- Eliminacioacuten de filas basada en otras tablas
DELETE [ FROM ] NombreTabla | NombreVista
[ FROM OrigenTabla ] [ WHERE CondicionBusqueda ]
ACTUALIZACIONES
- Actualizacioacuten de filas basadas en datos de la propia tabla
UPDATE NombreTabla | NombreVista
SET NombreColumna = expresioacuten DEFAULT | NULL
USE Northwind
UPDATE products
SET unitprice = (unitprice 11 )
- Actualizacioacuten de filas basadas en otras tablas
UPDATE NombreTabla | NombreVista
SET NombreColumna = expresioacuten DEFAULT | NULL
FROM OrigenTabla
WHERE CondicionBusqueda
Ejercicios
Ejemplo 1
Abrir la base de datos creada anteriormente
--use Itae
se procederaacute abrir la base de datos
--go
Ejemplo 2
Crearemos la Tabla alumnos
--CREATE TABLE alumnos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 12
--(
--Idalumno VarChar(8)not null
--nom_alumno Varchar (50) Not Null
--ape_alumno Varchar (50) Not Null
--dir_alumno Varchar (50) Not Null
--tel_alumno VarChar(8)
--Email_alumno Varchar (50)
--)
Ejemplo 3
Para que se muestre la Tabla completa y con todos los registros se utiliza en Select para
seleccionar los campos from para seleccionar la tabla que se desea visualizar
--select from alumnos
Ejemplo 4
Ingreso de Datos a la Tabla alumnos se utiliza la sentencia insert into
--Insert into alumnos (idalumnonom_alumnoape_alumnodir_alumnotel_alumnoemail_alumno)Values
(Cli01jamesjamesVentanilla252511jazoon_28hotmailcom)
--Insert into alumnos (idalumnonom_alumnoape_alumnodir_alumnotel_alumnoemail_alumno)Values
(Cli01Juan CarlosOchoa ValverdeCoop Primavera Mz R1 Lote 16557-
2147jaz_28hotmailcom)
--Insert into alumnos (idalumnonom_alumnoape_alumnodir_alumnotel_alumnoemail_alumno) Values
(Cli02ArturoCapuntildeay LaquiJr Viru 406 Nordm8481-6507eternal_alcarisHotmailcom)
--Insert into alumnos (idalumnonom_alumnoape_alumnodir_alumnotel_alumnoemail_alumno) Values
(Cli03Luis AlexanderAguilar WongJr Hon 920-1090luis_hexenHotmailcom)
--Insert into alumnos (idalumnonom_alumnoape_alumnodir_alumnotel_alumnoemail_alumno) Values
(Cli04Fredy Richard Anaya JesusResidencial 539-0886fredyanayaHotmailcom)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 13
Ejemplo 5
Si deseaacuteramos Eliminar seria con la sentencia Delete
--delete from alumnos where nom_alumno=juan Carlos
Ejemplo 6
Para Actualizar se Utiliza la sentencia Update y Set
--Update alumnos set nom_alumno=diego ape_alumno=cueva dir_alumno=los olivos
tel_alumno=5402972 email_alumno=hades_278hotmailcom where idalumno=01
Ejemplo 7
Para Realizar una Consulta se utiliza el Where
--select from alumnos where idalumno=Cli01
Ejemplo 8
Si tambieacuten uno desea se puede poner en orden ascendente y descendente paraacute ello se utilizar el
ASC y Desc
--select from alumnos ORDER BY nom_alumno Asc
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 14
--select from alumnos ORDER BY nom_alumno desc
Ejemplo 9
Para eliminar un Objeto de la base de datos se utiliza la sentencia Drop
Eliminar de la base de Datos Itae la Tabla Alumnos
Drop table alumnos Elimina la Tabla Clientes con la sentencia Drop seguido del tipo de
objeto y finalizando el nombre
Drop database Itae Elimina la Base de Datos Itae con la sentencia Drop seguido del
tipo de objeto y finalizando el nombre
OPERADORES DE CONDICIOacuteN _ FILAS
En la expresioacuten loacutegica que especifica condicioacuten _ filas se puede utilizar ademaacutes de los operadores
relacioacuten o de comparacioacuten los siguientes operadores SQL
LIKE- Para comparacioacuten de cadenas de caracteres admite los comodines y _
OPERADOR LIKE
Cualquier nuacutemero de caracteres
_ Para un caraacutecter individual
[ ] Para un conjunto de caracteres que esteacute dentro del corchete
[ ^ ] Que el caraacutecter individual que no esteacute dentro del corchete
EJEMPLO LIKE lsquoeenrsquo Muestra todos los caracteres que acaben con een
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 15
EJEMPLO LIKE lsquoeenrsquo Muestra todos los caracteres que contengan een en ese orden
EJEMPLO LIKE lsquo_enrsquo Muestra todos los caracteres que contenga tres letras y acaben en en
EJEMPLO LIKE lsquo[CK ]rsquo Muestra todos los caracteres que empiecen por C o K
EJEMPLO LIKE lsquo[S-V]ingrsquo Nombre de 4 letras cuya primera letra estuviera entre S o V y acabe en
ing
EJEMPLO LIKE lsquoM[^c]rsquo Todos los que empiecen por M y segunda letra no sea una c No hay limite
de caracteres
BETWEEN- para seleccioacuten en base a un rango de valores Los valores pueden ser numeacutericos de
cana fechas y horas
In-Para seleccioacuten en base a un conjunto de valores los valores pueden ser numeacutericos de cadena
fechas y horas
Para estos ejemplos ah utilizado la base de datos con el nombre de Poseidoacuten y contiene las siguientes
tablas y campos
Ejemplo 10
Lista de productos cuyo nombre contenga la palabra vino
Use Poseidon
Go
Select from productos where nombreproducto like vino
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 16
Luego procedemos a ejecutar la aplicacioacuten
El siacutembolo representa a cualquier cadena de caracteres inclusive la cadena nula
Ejemplo 12
Lista de productos cuya primera letea empieza con la letra a
Select from productos where nombreproducto like [a]
Ejemplo 13
Lista de productos cuya primera letea empieza con la letra a y la tercera con la letra e
Select from productos where nombreproducto like [a][e]
Ejemplo 14
Lista de productos cuyo nombre empieza con cualquier caraacutecter que va en el rango de la M a la
T
Select from productos where nombreproducto like [m-t]
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 17
Ejemplo 15
Lista de productos cuyo nombre empieza con A ograve con cualquier caraacutecter en el rango que va de U
a la Ademaacutes el segundo caraacutecter no debe ser la letra r
Select from productos where nombreproducto like [^b-t][^r]
El Caraacutecter ^ significa incluir
El Caraacutecter representa cualquier cadena de caracteres inclusive la cadena nula
El Caraacutecter _ Representa cualquier caraacutecter 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 caraacutecter empiece con la letra e
Select from productos where nombreproducto like _e
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 18
Ejemplo 18
Lista de productos cuyo nombre empiece con C M Ograve R
Select from productos where nombreproducto like bdquo[cmr]
Ejemplo 19
Lista de productos cuyo nombre empiece con C M Ograve R El segundo Caraacutecter debe ser A
Select from productos where nombreproducto like bdquo[cmr] a
El comodiacuten [cmr] representa el conjunto de caracteres validos en la posicioacuten en la que
apareceraacute el comodiacuten
Ejemplo 20
Seleccionar todos los productos que termine con la letra Z
Select from productos where nombreproducto like z
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 19
Ejemplo 21
Mostrar todos los productos cuya cuarta letra sea A
Select from productos where nombreproducto like ___a
USO DEL OPERADOR BETWEEN
Permite seleccionar en base a un rango de valores
Ejemplo 22
Lista de productos cuyo precio se encuentra en el rango que va de 15 a 21 nuevos soles
Select from productos where preciounidad between 15 and 21
Ejemplo 23
Lista de productos cuyo nombre se encuentren en el rango de Cerveza y galletas
Select from productos where nombreproducto between cerveza and galletas
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 20
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 (londresPariacutesTokyo)
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 (preciounidadcantidad)019 as IGV
from [detalles de pedidos]
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 21
Ejemplo 27
Mostar los productos cuyo precio sea mayor a 40
Select from productos where Preciounidad gt 40
Ejemplo 28
Mostrar todos los datos de los Clientes ordenados por Ciudad
Select from clientes order by ciudad
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 22
Ejemplo 29
Mostrar todos los productos de la Categoriacutea 2
Select from productos where IdCategoriacutea=2
Ejemplo 30
Mostrar todos los pedidos realizados en la fecha 1996-06-05
Select from Pedidos where FechaPedido =1996-06-05
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 23
Ejemplo 31
Mostrar todos los pedidos mayores a la Fecha 1996-05-05
Select from Pedidos where FechaPedido gt 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 IdCategoriacutea no sea 3
Select from productos where IdCategoriacutealtgt 3
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 24
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 Categoriacutea (123)
Select from productos where IdCategoriacutea not in (1 2 3) order by IdProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 25
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
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 26
USO DE FUNCIONES
Podemos utilizar funciones para construir expresiones y generar columnas computadoras O condiciones
complejas
Funcioacuten de agregacioacuten
Son funciones que se utilizan para calcular valores en las tablas Si queremos usarlas
combinaacutendolas 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
expresioacuten HAVING Equivalente a where
Todos estos ejercicios han sido desarrollado con la base de datos Poseidoacuten
COUNT Cuenta los registros que hay en la consulta
Si pongo un valor dentro de la expresioacuten devolveraacute la cuenta de todos los
registros no nulos
Si pongo un asterisco contaraacute todos los registros aunque tengan valores
nulos
Select count () from Pedidos Valores con Nulos
Select count (FechaEnviacuteo) from Pedidos Valores sin nulos
AVG Realiza la media sobre la expresioacuten dada debe ser un tipo de dato
Int
Select avg(Preciounidad) from productos
MAX Saca el valor maacuteximo de una consulta
Select max (FechaPedido) from Pedidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 27
MIN Devuelve el valor miacutenimo 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 paiacutes Brasil mostrando el nuacutemero de los Factura con el paiacutes de
Destinatario Brasil
Select count () as [Numero de Facturas] PaiacutesDestinatario
Avg (Preciounidad) as [Precio Medio] from
Facturas group by PaiacutesDestinatario having PaiacutesDestinatario =Brasil
Ejemplo 39
Encontrar el precio maacutes alto mas bajo y la diferencia entre ambos de todos los productos con
IdCategoriacutea 2
Select IdCategoriacutea Max (Preciounidad) as [Precio mas alto] min(Preciounidad) as
[Precio mas Bajo] Max(Preciounidad) - min(Preciounidad) as [Diferencia entre Ambos]
from Productos group by IdCategoriacutea having IdCategoriacutea = 2
Ejemplo 40
Visualizar el nuacutemero de productos por Categoriacutea
Select IdCategoriacutea as [Nordm de Categoriacutea] Count (IdCategoriacutea) as [Nordm de Productos]
From Productos group by IdCategoriacutea
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 28
Ejemplo 41
Visualizar los clientes que vivan en las siguientes ciudades Londres Madrid y Barcelona
Select count () as [Nordm de personas] ciudad from clientes group by ciudad Having ciudad in
(londresMadridBarcelona) order by ciudad
Ejemplo 42
Lista de productos cuya venta allaacute sido mayor a 50000
Select IdProducto Monto=Sum (Preciounidad Cantidad) from [Detalles de pedidos] group
by IdProducto having Sum (Preciounidad Cantidad)gt50000 order by IdProducto
Ejemplo 43
Cuantos Clientes no tienen Fax
Select Count () as [Total de Clientes sin Fax] from clientes where fax is null
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 29
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
Funcioacuten Resultado
GETDATE() Retorna la fecha y hora del sistema
DATEADD(partefechanfecha) Retorna una nueva fecha antildeadiendo n
unidades de partefecha a fecha
DATEDIFF(parteFechafecha1fecha2) Retorna la diferencia en parteFecha entre
fecha1 y fecha2
DATENAME(partefechafecha) Retorna la cadena correspondiente a
partefecha en fecha
DATEPART(partefechafecha) Retorna el numero correspondiente a
partefecha y fecha
DAY(fecha) Retorna el numero correspondiente a la
parte del diacutea de fecha
MONTH(fecha) Retorna el numero correspondiente a la
parte del mes de fecha
YEAR(fecha) Retorna el numero correspondiente a la
parte del antildeo de fecha
GETUTCDATE() Retorna la fecha y hora del meridiano de
Greenwich
La siguiente tabla muestra los valores de partefecha que podemos utilizar
partefecha Abreviatura
Year Yy yyyy
Quarter Qq q
Month Mm m
Dayofyear Dy y
Day Dd d
Week Wk ww
weekday Dw
Hour Hh
minute Mi n
second Ss s
milisecond Ms
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 30
Getdate
Select getdate () Funcioacuten que recupera la fecha actual del sistema
Convert Cast
Convierten expliacutecitamente una expresioacuten de un tipo de datos en otro CAST y CONVERT
proporcionan funciones similares
Convert (Tipodedatosdestino Origen Estilo)
o Tipodedatosdestino Siempre ha de ser tipo caraacutecter
o Origen Puede ser tipo fecha numeacuterico o moneda
o Estilo Opcional Es un coacutedigo que indica el formato en el que devuelve la cadena de
caracteres
Sintaxis
Convert (TipoDato Dato)
Cast (Dato as TipoDato)
Ejemplo
declare n intpalabra nvarchar(10)
set n = 1
set palabra =Nuacutemero
print convert(nvarchar(2)n) + + palabra
print cast(n as nvarchar(2)) + + palabra
while (nlt11)
begin
print convert(nvarchar(2)n) + + palabra
print cast(n as nvarchar(2)) + + palabra
set n = n + 1
end
DateName
Devuelve una cadena de caracteres que representa la parte de la fecha especificada de la fecha
especificada
Los caacutelculos 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
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 31
Ejemplo 46
Select IdPedido DateName (week FechaPedido) as Numero de Semana from Pedidos where IdPedido
= 1035251
Ejemplo 47
Select IdPedido datename (weekday FechaPedido) as Diacutea De Semana from Pedidos where IdPedido =
10352 Martes
Horas
Ejemplo 48
Select IdPedido datename (mi FechaPedido) as Minutos from Pedidos where IdPedido = 10352
Ejemplo 49
Select DateName (minute getdate ()) as minutos
Ejemplo 50
Select DateName (Hh FechaPedido) as hora from Pedidos where IdPedido = 10352
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 32
Ejemplo 51
Select DateName (Hour getdate ()) as hora--gt18
Ejemplo 52
Select DateName (Hh getdate ()) as hora--gt18
DatePart
Devuelve la parte de la fecha u hora indicada Sintaxis
Datepart (Valor devolver fecha)
Ejemplo 53
Select IdPedido datepart (mm FechaPedido) as Mes from Pedidos where IdPedido = 10352
Ejemplo 54
Select Datepart (Hh getdate ()) as Hora--gt17
Ejemplo 55
Select Datepart (mi getdate ()) as Minutos--gt54
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 33
Nombres de Fechas
Day (fecha)
Devuelve UN INT equivale a Datepart
Select day (getdate ()) as diacutea--gt6 (diacutea en la que se ejecuta la sentencia)
Select Datepart (dd getdate ()) --gt6 (diacutea en la que se ejecuta la sentencia)
Select Month (getdate ()) --gt1 (Mes en la que se ejecuta la sentencia)
Select Datepart (mm getdate ()) --gt1 (Mes en la que se ejecuta la sentencia)
Select Year (getdate ()) --gt2008 (Antildeo en la que se ejecuta la sentencia)
Ejemplo 56
Select year (FechaPedido) as Antildeo from Pedidos where IdPedido = 10352
Ejemplo 57
Select datediff (yyyy FechaPedido getdate()) as Dia from Pedidos where IdPedido = 10352
DateAdd
DateAdd (Datepart number date)
Antildeade un nuacutemero a la fecha puesta
DatePart es el formato de lo que queremos antildeadir
Number es el nuacutemero que queremos incrementar la fecha expuesta
Select convert (datetime1-1-02)
Select dateadd (dd 71-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 comparacioacuten y el tipo de dato
que nos devolveraacute antildeos diacuteas minutos etc
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 34
Ejemplo 58
Select datediff (yyyy FechaPedido getdate ()) as Dia from Pedidos where IdPedido = 10352
Ejercicios de funciones de Fecha
Ejemplo 59
Lista de pedidos emitidos en febrero de 1996
Select from Pedidos where month (FechaPedido) =2 and year (FechaPedido) =1996
Ejemplo 60
Lista de Pedidos mostrando la diferencia en diacuteas entre la fecha del pedido y la fecha de Envioacute
Select IdPedido FechaPedido FechaEnviacuteo diacuteas =datediff (day FechaPedido FechaEnviacuteo) from
pedidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 35
Ejemplo 61
Genere un listado de pedidos en el que la fecha del pedido se muestre en el formato nombre del
diacutea diacutea de mes antildeo
Select IdPedido FechaPedido Fecha=datename (dw IdPedido)+ + str (datepart (dd
IdPedido) 2)+ de +datename (mm IdPedido)+ de +str (datepart (yy IdPedido) 4) from
pedidos
Ejemplo 62
Mostrar de la tabla pedidos la fecha de pedidos en fecha corta
Select IdPedido convert (varchar (30) FechaPedido 106) as [Fecha Corta] from pedidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 36
FUNCIONES MATEMATICAS
ABS
Es el valor Absoluto
Select ABS (-4) as VALOR ABSOLUTO--gt4
CEILING
Devuelve el entero maacutes pequentildeo mayor o igual que la expresioacuten numeacuterica dada
Select CEILING (54) as CEILING--6
FLOOR
Devuelve el entero maacutes grande menor o igual que la expresioacuten numeacuterica dada
Select FLOOR (5) as FLOOR--gt5
POWER
Devuelve el valor de la expresioacuten indicada elevada a la potencia especificada
Select POWER (3 2) as 3 ELEVADO A 2--gt9
RAND
Devuelve un valor float aleatorio de 0 a 1
Las llamadas repetitivas de RAND() en una uacutenica consulta produciraacuten el mismo valor
Select RAND(6) as ALEATORIO--071368515806921451
Select RAND(6) as ALEATORIO--071368515806921451
Select RAND(4) as ALEATORIO--07136478921266981
Rand sobre los milisegundos actuales
Select RAND(DATEPART(msGETDATE())) as ALEATORIO--gt071443047691954253
Select RAND(999999999)--gt068504257551273573
ROUND
Devuelve una expresioacuten numeacuterica redondeada a la longitud o precisioacuten especificada
Round (Nuacutemero Redondeo del Nuacutemero)
ROUND siempre devuelve un valor Si length es un valor negativo y mayor que el nuacutemero de
diacutegitos anteriores al separador decimal ROUND devuelve 0
Select ROUND (1234567 2) --gt1234600
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 37
Select ROUND (1234567-2) --gt1000000
Select ROUND (1234567 0) --gt1230000
Select ROUND (1234567-3) ---gt0
SIGN
Devuelve el signo positivo (+1) cero (0) o negativo (-1) de la expresioacuten especificada
Dice el valor negativo positivo o neutro (0) del valor especificado
Select SIGN (-3) --gt-1
Select SIGN (3) --gt1
Select SIGN (0) --gt0
SQUARE
Devuelve el cuadrado de la expresioacuten especificada
Select SQUARE (4) as bdquoCuadrado‟--gt160
SQRT
Devuelve la raiacutez cuadrada de la expresioacuten especificada
Select SQRT (4) as [RAIZ CUADRADA] --gt20
FUNCIONES DE CADENA
ASCII
Devuelve el coacutedigo ASCII del caraacutecter maacutes a la izquierda de una expresioacuten de caracteres
Select ASCII(A)--gt65
Select ASCII(a)--gt97
Select ascii(aula)--gt97
CHAR
Una funcioacuten de cadena que convierte un coacutedigo ASCII int en un caraacutecter
select char(65)--gtA
select char(97)--gta
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 38
CHARINDEX
Devuelve la posicioacuten inicial de la expresioacuten especificada en una cadena de caracteres
CHARINDEX (expression1 expression2 [ start_location])
Argumentos
expression1
Es una expresioacuten que contiene la secuencia de caracteres que se desea buscar
Expression1 es una expresioacuten del tipo de cadenas cortas de caracteres
Expression2
Es una expresioacuten normalmente una columna
en la que se busca la cadena especificada
Expression2 es de la categoriacutea del tipo de datos cadena de caracteres
start_location
Es la posicioacuten del caraacutecter de expression2 en el que se empieza la buacutesqueda de expression1
Si no se especifica start_location es un nuacutemero negativo o es cero
la buacutesqueda empieza al principio de la cadena expression2
Si expression1 no se encuentra en expression2 CHARINDEX devuelve 0
Si alguno de los dos es null devuelve null
Select charindex (ciemurcielago) --gt4
Select charindex (ciemurcielago 2) --gt4
Select charindex (ciemurcielago 5) --gt0
Select charindex (ciemurcielago-6) --gt4
LEFT
Devuelve la parte de una cadena de caracteres que comienza en un nuacutemero de caracteres
especificado a partir de la izquierda
Select left (murcielago5) --gtmurci
RIGHT
Devuelve la parte de una cadena de caracteres que
Comienza en el nuacutemero de caracteres especificado
En integer_expression a partir de la derecha
Select right (hola que tal5) --gte tal
LEN
Cuenta el nuacutemero de caracteres que se incluyen en la cadena
Select len (murcieacutelago) --gt10
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 39
LOWER
Convierte a Minuacutesculas la cadena especificada
Select lower (MurcIELaGO) as [minusculas] --gtmurcielago
UPPER
Convierte a Mayuacutesculas la cadena especificada
Select upper (murcielago) as [MAYUSCULAS] --gtMURCIELAGO
RTRIM y LTRIM
Elimina los espacios que existen a la izquierda y a la derecha respectivamente
Select Rtrim ( murcieacutelago ) AS [SIN ESPACIOS] --gtmurcieacutelago
Select Ltrim ( murcieacutelago ) AS [SIN ESPACIOS] --gtmurcieacutelago
Select ltrim(rtrim( hola ))+
REPLACE
Reemplaza por una tercera expresioacuten todas las apariciones
de la segunda expresioacuten de cadena proporcionada en la primera expresioacuten de cadena
Select replace (hola que tal estasaA) --gtholA que tAl estAs
Select replace (buenos dias que tal estasuentildentildentilde) --gtbntildentildentildenos diasqntildentildentilde tal estas
SPACE
Coloca el nuacutemero de espacios que se le indiquen para entre una cadena de caracteres
Select hola+space(5)+que tal--gthola que tal
SUBSTRING
Devuelve parte de una expresioacuten de caracteres binaria de texto o de imagen
Sintaxis
SUBSTRING (Expresioacuten Comienzo Duracioacuten)
Argumentos
Expresioacuten
Es una cadena de caracteres cadena binaria texto imagen
Columna o expresioacuten que incluye una columna
No deben usarse expresiones que incluyan funciones de agregado
Start
Es un entero que especifica el punto en que comienza la subcadena
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 40
Length
Es un entero que especifica la longitud de la subcadena
(El nuacutemero de caracteres o bytes que se devuelven)
Select substring (murcielago 3 5) --gtrciel
Select substring (murcielago 3 len (murcielago)) --gtrciel
REVERSE
Devuelve invertida una expresioacuten de caraacutecter
Select reverse (hola)
REPLICATE
Repite una expresioacuten de caracteres un nuacutemero especificado de veces
Select replicate (murcielago 5)
Replicate replicate replicate replicate replicate
STUFF
Elimina el nuacutemero de caracteres especificados e insertados
Otro conjunto de caracteres en un punto de inicio indicado
Select STUFF (Murcieacutelago 2 3 ijklmn) Mijklmnielago
FUNCIONES DE SISTEMA
- APP_NAME () Devuelve el nombre de la aplicacioacuten actual
Select app_name () as [Nombre de la aplicacion]
- DATALENGTH (Expresioacuten) Devuelve un entero que es numero de bites necesarios para
representar esa expresioacuten int
Select datalength (Ninoni) as [Numero de bites]
- ISDATE (Expresioacuten) Dice si la expresioacuten es una fecha o no Devuelve 1 si la expresioacuten es
una fecha y 0 si no es una fecha
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 41
Select isdate (121001) as [Validacioacuten Fecha]
- ISNUMERIC (Expresion) Dice si la expresioacuten es un numero o no Devuelve 1 si la
expresioacuten es un nuacutemero y 0 si la expresioacuten no es nuacutemero
Select isnumeric (ddd) as [Validacion Numero]
- ISNULL (Expresioacuten ExpresionDevuelta) Si la expresioacuten es nula te devuelve la Expresioacuten
Devuelta y si no devuelve la primera Expresioacuten
Select isnull (nullNo nulo) as [Es Nulo]
- PARSENAME (bdquoNombreObjeto‟ ParteNombre)
ParteNombre es un valor de tipo Int que coge unos determinados valores del
NombreObjeto
1 Objeto
2 Propietario
3 Base de Datos
4 Servidor
Select parsename (saposeidondbopedidos1) as [Parte Expresioacuten]
Select parsename (saposeidondbopedidos 2) as [Parte Expresioacuten]
Select parsename (saposeidondbopedidos3) as [Parte Expresioacuten]
Select parsename ( saposeidondbopedidos 4) as [Parte Expresioacuten]
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 42
- SYSTEM_USER Devuelve el usuario del sistema actual
Depende de la autentificacioacuten con la que te hayas conectado
Select system_user as [Usuario conectado]
- USER_NAME() Devuelve el nombre del usuario actual
Select user_name ()
- COALESCE (expresioacuten1 expresioacuten2 )
Devuelve la primera expresioacuten no NULL
Si todos son NULL devuelve NULL
Select coalesce (PrecioUnidad Cantidad) from [detalles de Pedidos] Si el PrecioUnidad es nulo
devolveraacute la Cantidad y si los dos son nulos devolveraacute un campo Null
PROCEDIMIENTOS PARA AGRUPAR Y RESUMIR DATOS
En el examen de certificacioacuten 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 usaraacute la base de datos indicada Ejemplo Ponemos
en el analizador de consultas lo siguiente
Use Northwind
Select from [Order Details]
[Order Details]
Esta tabla perteneciente a la Northwind se encarga de manejar los pedidos
Order Id Nordm de Pedido
Producto Id Nordm de Producto
Ambos campos son Primary Key con lo que no puede haber una combinacioacuten de ambos campos que sea
igual
OrderId ProductId
1 A
1 B
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 43
1 C
2 A
3 C
Es decir en este caso no podriacutea existir una nueva combinacioacuten ldquo1 Ardquo o ldquo2 Ardquo
Quantity Es la cantidad del producto del pedido
ROLLUP
Se usa para presentar resuacutemenes de datos A de usarse junto con la clausula group by lo que hace es
realizar un resumen de los campos incluidos en el rollup
Ejemplo 63
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
Group by ProductID OrderID
with Rollup
Order by ProductID OrderID
Este ejemplo suma todas las cantidades y mediante
rollup muestra una fila con la suma de todas las
cantidades de cada producto y ademaacutes otra fila con la
suma de todas las cantidades de todos los productos El
resultado de este ejemplo seriacutea el que muestra la
imagen
Ejemplo 64
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
where orderid lt 10250
Group by ProductID OrderID
with Rollup
Order by ProductID OrderID
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 44
CUBE
Al igual que Rollup realiza resuacutemenes de campos agrupados Pero en este caso muestra un resumen con
cada combinacioacuten posible de los campos agrupados
Ejemplo 65
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
where orderid lt 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 combinacioacuten posible entre el
productid y el orderid
GROUPING
Indica si el resultado de un campo es el que hay en la propia tabla o se ha introducido mediante una
claacuteusula de resumen es decir para saber por ejemplo si un ldquoNullrdquo 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 lt 10250 Group by ProductID
OrderID with Cube Order by ProductID OrderID
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 45
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
Ponieacutendole un alias al
grouping saldriacutea el nombre
de columna que le
indiquemos
COMPUTE
Realiza un resumen en una columna aparte con el resultado de la funcioacuten de agregado indicada Su
formato seriacutea Compute funcioacuten(campo) No se puede utilizar en aplicaciones cliente servidor es una
clausula meramente informativa Tampoco se le pueden poner alias a los resuacutemenes
Ejemplo 67
Select Productid Orderid Quantity From [Order Details] order by ProductID Orderid compute
Sum(quantity)
Vemos que muestra la
columna con la suma
total de todas las
cantidades
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 46
Ejercicios de ROLLUP GROUPING y CUBE
Ejemplo 68
Realizar una consulta que resuma la cantidad de artiacuteculos pedidos por cada iacutendice de producto y
nuacutemero de pedido Realizando un caacutelculo acumulativo
select productid as [PRODUCTO] orderid as [Nordm PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] group by productid orderid with rollup order by productid orderid
PRODUCTO Nordm 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
hellip
Ejemplo 69
Modificacioacuten al ejercicio anterior Realizar el mismo resumen pero uacutenicamente para el producto
cuyo id es 50
select productid as [PRODUCTO] orderid as [Nordm PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] where productid = 50 group by productid orderid with rollup order by productid ordered
PRODUCTO Nordm 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
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 47
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 modificacioacuten 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 [Nordm PEDIDO] grouping(orderid) as [GRUPO PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] where productid = 50 group by Productidorderid with cube order by productidorderid
PRODUCTO GRUPO PRODUCTO Nordm PEDIDO GRUPO PEDIDO SUMA TOTAL
----------- -------------- ----------- ------------ -----------
NULL 1 NULL 1 235
NULL 1 10350 0 15
NULL 1 10383 0 15
NULL 1 10429 0 40
NULL 1 10465 0 25
NULL 1 10637 0 25
NULL 1 10729 0 40
NULL 1 10751 0 20
NULL 1 10920 0 24
NULL 1 10948 0 9
NULL 1 11072 0 22
50 0 NULL 1 235
50 0 10350 0 15
50 0 10383 0 15
50 0 10429 0 40
50 0 10465 0 25
50 0 10637 0 25
50 0 10729 0 40
50 0 10751 0 20
50 0 10920 0 24
50 0 10948 0 9
50 0 11072 0 22
(22 filas afectadas)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 48
Obtencioacuten de resuacutemenes 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 maacutes columnas y
luego efectuar alguna operacioacuten de resumen sobre cada grupo asiacute generado
La diferencia con GROUP BY es que permite mostrar informacioacuten mas detallada de cada grupo
Ejemplo 71
Lista de pedidos que muestre por coacutedigo de pedido la cantidad de productos vendidos por cada uno
de ellos
select Idpedidoidproductopreciounidadcantidad[Sub Total]=sum(PreciounidadCantidad) from
[detalles de pedidos] group by Idpedidoidproductopreciounidadcantidad order by IdPedido compute
sum(Cantidad) by IdPedido
EJERCICIOS CON COMPUTE
Ejemplo 72
Generar un resumen de subtotales en una consulta que devuelva el nuacutemero de pedido la cantidad
pedida para todos los orderid 11070
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 49
Select Orderid as [Nordm PEDIDO] Quantity AS [CANTIDAD] From [Order Details] where orderid gt= 11070 order by Orderid compute Sum(quantity) by orderid compute sum(quantity)
Nordm PEDIDO CANTIDAD
----------- --------
11070 40
11070 20
11070 30
11070 20
sum
===========
110
sum
===========
110
(6 filas afectadas)
Ejemplo 73
Generar un resumen con calculo de subtotales similar al anterior pero para los orderid 11075 y
11076
Select Orderid as [Nordm PEDIDO] Quantity as [CANTIDAD] From [Order Details] where orderid = 11075 or orderid = 11076 order by Orderid compute Sum(quantity) by ordered Nordm PEDIDO CANTIDAD ----------- -------- 11075 10 11075 30 11075 2 sum =========== 42 Nordm PEDIDO CANTIDAD ----------- -------- 11076 20 11076 20 11076 10
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 50
sum =========== 50 (8 filas afectadas)
Ejemplo 74
Modificacioacuten al ejercicio anterior Agregar la cantidad total y la cantidad promedio al final del
informe
Select Orderid as [Nordm 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)
Nordm PEDIDO CANTIDAD
----------- --------
11075 10
11075 30
11075 2
sum
===========
42
Nordm PEDIDO CANTIDAD
----------- --------
11076 20
11076 20
11076 10
sum
===========
50
sum
===========
92
avg
===========
15
(10 filas afectadas)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 51
Ejemplo 75
Seleccionar de forma agrupada por tipo todos los tipos la suma de los precios y la suma del
anticipo de la tabla tiacutetulos
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 199900 50000000
business 119500 50000000
business 29900 101250000
business 199900 50000000
sum
=====================
549200
avg
=====================
62812500
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
mod_cook 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
avg
=====================
75000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
popular_comp 229500 70000000
popular_comp 200000 80000000
popular_comp NULL NULL
sum
=====================
429500
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 52
avg
=====================
75000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
psychology 215900 70000000
psychology 109500 22750000
psychology 70000 60000000
psychology 199900 20000000
psychology 79900 40000000
sum
=====================
675200
avg
=====================
42550000
(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 ademaacutes 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 199900 50000000
business 119500 50000000
business 29900 101250000
business 199900 50000000
sum
=====================
549200
sum
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 53
=====================
251250000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
mod_cook 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
popular_comp 229500 70000000
popular_comp 200000 80000000
popular_comp NULL NULL
sum
=====================
429500
sum
=====================
150000000
(30 filas afectadas)
Ejemplo 77
Generar un informe que muestre la suma de los precios de los libros de psicologiacutea 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 109500
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 54
psychology 0736 70000
psychology 0736 199900
psychology 0736 79900
sum
=====================
459300
TIPO CODIGO EDITOR PRECIO
------------ ------------- ---------------------
psychology 0877 215900
sum
=====================
215900
(7 filas afectadas)
Ejemplo 78
Generar un informe que obtenga la suma de los precios de todos los libros de psicologiacutea asiacute como la
suma de los precios de los libros de psicologiacutea 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 109500
psychology 0736 70000
psychology 0736 199900
psychology 0736 79900
sum
=====================
459300
TIPO CODIGO EDITOR PRECIO
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 55
------------ ------------- ---------------------
psychology 0877 215900
sum
=====================
215900
sum
=====================
675200
(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 199900 0000
mod_cook 0877 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO CODIGO EDITOR PRECIO ANTICIPO
------------ ------------- --------------------- ---------------------
trad_cook 0877 119500 40000000
trad_cook 0877 209500 70000000
trad_cook 0877 149900 80000000
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 56
sum
=====================
478900
sum
=====================
190000000
(9 filas afectadas)
Ejemplo 80
Generar un informe que muestre todos los tiacutetulos precio y anticipo de aquellos tiacutetulos que tengan
un precio superior a 20 doacutelares Ofreceraacute tambieacuten la suma total del precio y del anticipo
Select title as [TITULO] price as [PRECIO] advance as [ANTICIPO] From titles where price gt 20 order by title compute sum(price) compute sum(advance)
TITULO PRECIO ANTICIPO
-------------------------------------------------------------------------------- --------------------- -------------
--------
But Is It User Friendly 229500 70000000
Computer Phobic AND Non-Phobic Individuals Behavior Variations 215900
70000000
Onions Leeks and Garlic Cooking Secrets of the Mediterranean 209500
70000000
sum
=====================
654900
sum
=====================
210000000
(5 filas afectadas)
Ejemplo 81
Generar un informe que muestre el precio el tipo y el nuacutemero de editor de la tabla titles de todos
aquellas obras que pertenezcan la categoriacutea de ldquobusinessrdquo Ademaacutes apareceraacute la suma total de
precios y el maacuteximo pub_id de esta seleccioacuten
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 57
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 29900 0736
business 199900 1389
business 199900 1389
business 119500 1389
sum
=====================
549200
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 Mostraraacute la suma de los precios y los anticipos por tipo y luego calcularaacute 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 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
trad_cook 209500 70000000
trad_cook 119500 40000000
trad_cook 149900 80000000
sum
=====================
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 58
478900
sum
=====================
190000000
sum
=====================
708700
sum
=====================
340000000
(11 filas afectadas)
Eliminacioacuten 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 iquestA que precio se ah vendido los productos
Select IdProducto Preciounidad from [Detalles de pedidos] order by IdProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 59
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 mayoriacutea de las consultas que se hacen en una base de datos requiere que se lean datos procedentes
de dos oacute maacutes tablas
INNER JOIN- son las filas que satisfacen la condicioacuten de la combinacioacuten
En la siguiente sentencia SQL enlaza 2 tablas la tabla clientes y la tabla pedidos en esta ejemplo me
muestra los campos nombre compantildeiacutea y el campo idpedido
La uacutenica condicioacuten es que las 2 tablas tengan un campo en comuacuten
Ejemplo 84
select clientesNombreCompantildeiacuteapedidosidpedido from clientes inner join pedidos on
clientesidcliente=pedidosidcliente
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 60
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 pedidosIdPedido pedidosIdCliente 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 pedidosIdPedido pedidosIdCliente order
by pedidos IdPedido
CROSS JOIN
Un Cross Join es la consulta correlacionada que combine cada una de las filas de una de las tablas con
todas las filas de la otra tabla
No es necesario que exista una columna en comuacuten para ejecutar el Cross Join
Ejemplo 86
La siguiente consulta combina cada una de las filas de la tabla categoriacuteas con cada una de las filas de la
tabla productos
select productosNombreProductocategoriasNombrecategoria from productos cross join categorias
order by productosNombreProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 61
Ejercicios de consultas Muacuteltiples
Ejemplo 87
Mostrar el pedidos completo con el id=10248
Select pedidosIdPedido pedidosIdCliente
Total=sum ([detalles de pedidos]Preciounidad[detalles de pedidos]Cantidad)
From [detalles de pedidos] inner join pedidos on
[Detalles de pedidos]IdPedido=pedidosIdPedido where pedidosIdPedido=10248
Group by pedidosIdPedido pedidosIdCliente
Ejemplo 88
1 Mostrar la cantidad de productos por categoriacutea
Select CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
[Total de Producto]=sum (UnidadesEnExistencia) from Categoriacuteas inner join
Productos on CategoriacuteasIdCategoriacutea=productosIdCategoriacutea
Group by CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 62
Ejemplo 89
Calcular cuantas ventas tiene cada uno de los vendedores
Select empleadosIdEmpleado empleadosNombre empleadosApellidos
[Total de ventas]=count (pedidosIdPedido) from empleados
Inner join Pedidos on empleadosIdEmpleado=pedidosIdEmpleado
Group by empleadosIdEmpleado empleadosNombre empleadosApellidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 63
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 despueacutes saca la de Plantilla
Recomendaciones a la hora de usar las combinaciones
Combinar tablas en funcioacuten de claves principales y externas
Limite el nuacutemero de tablas de las combinaciones
Select Apellido
Oficio as
OFICIOFUNCION
salario from emp
UNION
Select Apellido
Funcion Salario from
Plantilla
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 64
SUBCONSULTAS
Es una SELECT anidada en una instruccioacuten INSERT DELETE SELECT o UPDATE
Como una tabla derivada
Select eemp_no as Numero
eApellido
from (select emp_no apellido from emp) as e
Como una expresioacuten
Select emp_no as [Numero]
Apellido
Salario
(select avg(Salario) from emp)
as Diferencia
from emp
where oficio = Empleado
Para correlacionar datos
- Expresioacuten dinaacutemica que cambia en cada fila de una consulta externa
- Es una combinacioacuten entre la subconsulta y la fila de la consulta externa
- Dividen consultas complejas con dos o maacutes consultas simples relacionadas
Subconsulta correlacionada
Select apellido oficiodept_no
from emp as e
where 20 lt
(select dept_no from dept as d
where edept_no = ddept_no
and ddnombre = Ventas)
SUBCONSULTAS
1 Mostrar el numero de empleado el apellido y la fecha de alta del empleado mas antiguo de la
empresa
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 65
SELECT emp_noapellido
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_noapellido
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 Jimeacutenez
select apellido oficio from emp where
oficio = (select oficio from emp where apellido = JIMENEZ)
4 Queremos saber el apellido oficio salario y nuacutemero 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 gt (select max (salario) from
emp where dept_no = 30)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 66
5 Mostrar el apellido la funcioacuten sala o departamento de todos los empleados que trabajen en la
empresa
select eApellido eOficio as [Cargo en Empresa] ddnombre as [Oficina]
from emp as e
inner join dept as d
on edept_no = ddept_no
union
select pApellido pfuncion snombre
from plantilla as p
inner join sala as s
on phospital_cod = shospital_cod
and psala_cod = ssala_cod
union
select dApellido despecialidad hnombre
from doctor as d
inner join hospital as h
on dhospital_cod = hhospital_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 = lsquoventasrsquo))
order by 2
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 67
8 Mostrar los empleados que tienen mejor salario que la media de los directores no incluyendo al
presidente
Select from emp where salario gt
(select avg (salario) from emp where oficio = DIRECTOR)
and oficio ltgt PRESIDENTE
9 Mostrar el apellido funcioacuten salario y coacutedigo 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 = lsquoENFERMEROrsquo or
funcion = lsquoENFERMERArsquo) and hospital_cod = (select hospital_cod from hospital where nombre =
lsquoSAN CARLOSrsquo)
Select apellido funcion salario hospital_cod from plantilla where
funcion in (ENFERMEROENFERMERA)
and hospital_cod = (select hospital_cod from hospital
where nombre = SAN CARLOS)
10 Visualizar los datos de los hospitales que tienen personal (Doctores) de cardiologiacutea
Select from hospital where hospital_cod in (select hospital_cod from doctor where
especialidad = lsquoCardiologiacutearsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 68
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 = lsquoPROVINCIALrsquo or
nombre= lsquoGENERALrsquo)
12 Mostrar el apellido de los enfermos que nacieron antes que el Sentildeor Miller
Select apellido from enfermo where Fecha_nac lt (select fecha_nac from enfermo where
apellido = lsquoMILLER Brsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 69
Simulacion de una clausula JOIN
Vamos a mostrar los oficios que estaacuten en maacutes de un departamento
Select distinct e1oficio from emp as e1
where e1oficio in(Select e2oficio from emp as e2
where e1dept_no ltgt e2dept_no)
Se debe utilizar antes una combinacioacuten que una subconsulta la combinacioacuten seriacutea asi dando los
mismos resultados
Select distinct e1Oficio from emp as e1
inner join emp as e2
on e1oficio = e2oficio
where e1dept_no ltgt e2dept_no
Estos son los dos oficios que estaacuten en
maacutes de un departamento
Subconsulta para simular una clausula HAVING
select e1apellidoe1oficio e1salario
from emp as e1
where e1salario gt
(select avg(e2salario) from emp as e2
where e1oficio = e2oficio)
Esta es la consulta utilizando el HAVING que es la que deberiacuteamos utilizar antes que una
subconsulta de simulacioacuten HAVING
SELECT e1apellidoe1oficio e1salario
FROM emp AS e1
INNER JOIN emp AS e2
ON e1oficio = e2oficio
GROUP BY e1oficio e1salarioe1apellido
HAVING e1salario gt AVG (e2salario)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 70
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 2
Datos binarios
Los datos binarios se componen de nuacutemeros hexadecimales Por ejemplo el nuacutemero decimal 245
corresponde al hexadecimal F5 Los datos binarios se almacenan utilizando los tipos de datos binary
varbinary e image de Microsoftreg SQL Servertrade 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 nuacutemero de diacutegitos 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 Wordreg hojas de caacutelculo de
Microsoft Excelreg e imaacutegenes 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 deberaacute utilizar el tipo de datos image Es recomendable que la longitud definida de una
columna binaria no supere la longitud maacutexima prevista para los datos binarios que deben almacenarse
Datos de caraacutecter
Se define como dato de caraacutecter cualquier combinacioacuten de letras siacutembolos y caracteres numeacutericos Por
ejemplo son datos de caraacutecter vaacutelidos 928 Johnson y (0amp(B99nh jkJ En Microsoftreg SQL
Servertrade 2005 los datos de caraacutecter se almacenan utilizando los tipos de datos char varchar y text
Utilice varchar cuando variacutee el nuacutemero 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 maacutes de 8 KB Por ejemplo dado que los documentos HTML son
caracteres ASCII y suelen ocupar maacutes 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 maacutexima
prevista para los datos de caraacutecter 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 Microsoftreg SQL Servertrade 2005 permiten la utilizacioacuten
de caracteres definidos por un conjunto de caracteres determinado El conjunto de caracteres se elige
durante la instalacioacuten de SQL Server y no puede modificarse Si se utilizan los tipos de datos Unicode
una columna puede almacenar cualquier caraacutecter definido por el estaacutendar 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 maacutes de un conjunto de
caracteres Utilice nvarchar cuando las entradas de una columna variacuteen en cuanto al nuacutemero de
caracteres Unicode que contienen (hasta 4000) Utilice nchar cuando todas las entradas de una
columna tengan la misma longitud fija (hasta 4000 caracteres Unicode) Utilice ntext cuando alguna
entrada de una columna ocupe maacutes de 4000 caracteres Unicode
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 3
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 caraacutecter 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 vaacutelidas de fecha y hora Por ejemplo datos vaacutelidos
de fecha y hora pueden ser 40198 1215000000 pm y 128291501 am 17898 Los datos de
fecha y hora se almacenan utilizando los tipos de datos datetime y smalldatetime de Microsoftreg SQL
Servertrade 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 antildeo 2079 (para cada valor se necesitan 4 bytes de espacio de almacenamiento)
Datos numeacutericos
Los datos numeacutericos se componen exclusivamente de nuacutemeros Incluyen nuacutemeros positivos y negativos
decimales fracciones y nuacutemeros enteros
Datos enteros
Los datos enteros constan de nuacutemeros enteros positivos o negativos como ndash15 0 5 y 2509 Los datos
enteros se almacenan utilizando los tipos de datos bigint int smallint y tinyint de Microsoftreg SQL
Servertrade 2005 El tipo de datos bigint puede almacenar un intervalo de nuacutemeros 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 nuacutemeros que tinyint
Utilice el tipo de datos bigint para almacenar nuacutemeros del intervalo comprendido entre -2^63 (-
9223372036854775808) y 2^63-1 (9223372036854775807) El tamantildeo de almacenamiento es de 8
bytes
Utilice el tipo de datos int para almacenar nuacutemeros del intervalo comprendido entre -2147483648 y
2147483647 (para cada valor se necesitan 4 bytes de espacio de almacenamiento)
Utilice el tipo de datos smallint para almacenar nuacutemeros del intervalo que va desde -32768 hasta
32767 (para cada valor se necesitan 2 bytes de espacio de almacenamiento) y el tipo de datos tinyint
para almacenar nuacutemeros 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 diacutegito menos significativo
Estos datos se almacenan mediante los tipos de datos decimal o numeric de SQL Server El nuacutemero de
bytes necesarios para almacenar un valor decimal o numeric depende del nuacutemero total de diacutegitos de
datos y del nuacutemero de cifras a la derecha del separador decimal Por ejemplo se necesitan maacutes bytes
para almacenar el valor 1928329383 que para almacenar el valor 11
En SQL Server el tipo de datos numeric es sinoacutenimo del tipo de datos decimal
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 4
Datos numeacutericos aproximados
Los datos numeacutericos aproximados (coma flotante) constan de datos que se almacenan con tanta
precisioacuten como permite el sistema de numeracioacuten binario Los datos numeacutericos aproximados se
almacenan mediante los tipos de datos float y real de SQL Server Por ejemplo dado que en notacioacuten
decimal la fraccioacuten un tercio se expresa como 0333333 (hasta el infinito) este valor no se puede
representar con total precisioacuten mediante los datos decimales aproximados Por lo tanto el valor
recuperado de SQL Server puede no coincidir exactamente con el que se almacenoacute originalmente en la
columna Otros ejemplos de aproximaciones numeacutericas son los valores de coma flotante que acaban en
03 06 y 07
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 Microsoftreg SQL Servertrade 2005 Los
datos de moneda pueden almacenarse con una precisioacuten maacutexima de cuatro decimales Utilice el tipo de
datos money para almacenar valores del intervalo comprendido entre -9223372036854775808 y
+9223372036854775807 (para almacenar cada valor se necesitan 8 bytes) Utilice el tipo de datos
smallmoney para almacenar valores del intervalo comprendido entre -2147483648 y 2147483647
(para almacenar cada valor se necesitan 4 bytes) Si se necesita un nuacutemero mayor de decimales utilice
el tipo de datos decimal
Datos especiales
Los datos especiales son aqueacutellos que no se ajustan a ninguna de las categoriacuteas de datos como los datos
binarios de caraacutecter Unicode de fecha y hora numeacutericos y de moneda
Microsoftreg SQL Servertrade 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 nuacutemero 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 funcioacuten DBTS Los datos de tipo timestamp no estaacuten
relacionados con la fecha ni la hora de una insercioacuten ni de un cambio en los datos Si desea
registrar automaacuteticamente en queacute 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 sinoacutenimo de timestamp
bit
Puede ser un 1 o un 0 Utilice el tipo de datos bit para representar los valores TRUE
(verdadero) o FALSE (falso) o YES o NO Por ejemplo un cuestionario para los clientes en el
que se pregunte si eacutesta es la primera visita del cliente puede almacenarse en una columna de
tipo bit
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 5
uniqueidentifier
Se trata de un nuacutemero hexadecimal de 16 bytes que hace referencia a un identificador
exclusivo global (GUID) El GUID es especialmente uacutetil cuando una fila debe ser uacutenica entre
otras muchas Por ejemplo utilice el tipo de datos uniqueidentifier en una columna con nuacutemeros
de identificacioacuten de los clientes para compilar una lista de clientes de una compantildeiacutea en varios
paiacuteses
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 soacutelo puede utilizarse para definir variables locales del
tipo table o el valor de retorno de una funcioacuten 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 mayuacutesculas seguidas de un nuacutemero de
proveedor de cinco cifras
Definir una clave principal
Defina una Clave Principalcpara exigir que se escriban valores uacutenicos 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 asiacute se reduce la necesidad de datos redundantes Una tabla soacutelo puede tener una
clave principal
Para definir una clave principal
1 En el diagrama de base de datos o en el Disentildeador de tablas haga clic en el selector de fila de
la columna de la base de datos que desee definir como clave principal Si desea seleccionar
varias columnas mantenga presionada la tecla CTRL mientras hace clic en los selectores de fila
para las otras columnas
2 Haga clic con el botoacuten secundario en el selector de fila para la columna y seleccione Establecer
clave principal En la ficha Iacutendices y claves de las paacuteginas de propiedades se crea
automaacuteticamente un iacutendice 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 comunicaraacute que las
relaciones existentes se eliminaraacuten automaacuteticamente como parte de este proceso
Una columna de clave principal se identifica por un siacutembolo de llave principal en el selector de fila
Si una clave principal consta de maacutes de una columna se permiten valores duplicados en una columna
pero cada combinacioacuten de valores de todas las columnas de la clave principal debe ser uacutenica
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 6
Coacutemo crear una relacioacuten de varios a varios entre tablas
Para crear una relacioacuten de varios a varios entre tablas
1 Abra un diagrama de base de datos
2 Agregue las tablas entre las que desea crear una relacioacuten de varios a varios
3 Cree una tercera tabla Para ello haga clic con el botoacuten secundario del mouse dentro del
diagrama de la base de datos y a continuacioacuten haga clic en Nueva tabla
Eacutesta se convertiraacute en la tabla de unioacuten
4 En el cuadro de diaacutelogo Elegir nombre escriba un nombre para la tabla
Por ejemplo la tabla de unioacuten entre la tabla de tiacutetulos 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 unioacuten
Puede agregar otras columnas a esta tabla igual que en cualquier otra tabla
6 En la tabla de unioacuten establezca la clave principal para que incluya todas las columnas de la clave
principal de las otras dos tablas
7 Defina una relacioacuten de uno a varios entre cada una de las dos tablas principales y la tabla de
unioacuten
Fundamentos de Programacioacuten con SQL Existen 3 tipos de instrucciones para el lenguaje en SQL
- Lenguaje de control de datos (DDL) Creacioacuten y eliminacioacuten de tipos de datos y objetos
CREATE Crear Objeto
ALTER Modificar los datos creados
DROP Eliminar el Objeto
- Lenguaje de control de datos (DCL) Se basa en los derechos que tiene el usuario sobre la
base da datos (Permisos)
GRANT Dar permisos a un usuario para efectuar determinadas
Instrucciones
DENY Eliminar el permiso que se ha concedido con el GRANT
REVOKE Eliminar todos los permisos
- Lenguaje de manipulacioacuten de datos (DML) Desarrollo de la programacioacuten de la base de
datos
SELECT
INSERT
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 7
UPDATE
DELETE
Elementos de sintaxis
Directivas de procesos por lotes
- GO Enviacutea 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 liacutenea --
- 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 nuacutemero
deben empezar por un signo alfabeacutetico pueden incluir el guion bajo (_) la arroba y la
almohadilla
Generalmente para las variables locales se usan + el nombre
EJEMPLO Contador
Para las variables totales se usan dos arrobas + el nombre Contador
EJEMPLO Error
Nombre indica una tabla o procedimiento temporal (Local)
Nombre Igual que el anterior pero global
Tipos de datos
- Numeacutericos
Enteros int tinyint smallint bigint
Decimales numeric decimal money smallmoney
Coma Flotante float real
- Fechas
datetime 0333 s
smalldatetime 1 minuto
- Caracteres
Ancho fijo char nchar
Ancho Variable varchar nvarchar
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 8
- Texto e Imagen
Text
Ntext
Rowversion
- Binario
Binary varbinary Valores tipo byte
Bit Un solo bit (1 o ninguno)
- Identificadores Uacutenicos
Representa un identificador global uacutenico (GUID)
Si queremos que no se repita el dato en la base de datos usamos este identificador
Uniqueidentifier
Operadores de SQL
Loacutegicos
AND OR NOT
De Comparacioacuten
= Igual
lt Menor
gt Mayor
ltgt Diferente
gt= Mayor o igual
lt= Menor o igual
Crear una Base de Datos Utilizando el Lenguaje SQL
Ejemplo
Para crear la base de datos es la siguiente opcioacuten database seguido del nombre de la Base de Datos
--Create database Itae
On primary
(Name= Itae _data Filename=C itaemdf size=10 maxsize=15 filegrowth=25)
Log On
(Name= Itae _log filename=C itaeldf size=4 maxsize=6 filegrowth=1MB)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 9
Despueacutes de la sentencia Create database Se especifica el nombre de la base de datos Un
nombre en la base de datos debe de ser uacutenico 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 ndash Especifica el tamantildeo del Archivo
Maxsize ndashEspecifica el tamantildeo maacuteximo que puede alcanzar el archive si se requiere espacio adicional
Filegrowth ndashEs la cantidad de espacio que se antildeade 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 procederaacute abrir la base de datos con el use nombre de la base de datos y luego el Use Go
Use master
Go
Luego se procederaacute abrir la tabla Sysdatabases y ahiacute se podraacute visualizar si la base de datos ah
sido creada
Select from Sysdatabases
Luego se procederaacute abrir la base de datos con el use nombre de la base de datos y luego el go
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 10
INSERCIOacuteN ELIMINACIOacuteN Y MODIFICACIOacuteN DE DATOS
- Insercioacuten 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 INSERTSELECT
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
- Creacioacuten de una tabla mediante SELECT INTO Creacioacuten 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
- Insercioacuten de datos parciales No introducir todos los datos solo meter datos en un
determinado campo o en varios pero no en toda la tabla
- Insercioacuten de datos mediante valores de columna predeterminados Se usa para no
dejar a las tablas con el valor null y asiacute 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
ELIMINACIOacuteN 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 = bdquoSERRA‟
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 11
- TRUNCATE TABLE Elimina todas las filas de la tabla (La tabla con su estructura no se
elimina soacutelo los datos de la tabla) No crea filas en el registro de transacciones con lo cual
es el meacutetodo maacutes raacutepido de borrar
TRUNCATE TABLE NombreTabla
Truncate Table emp
- Eliminacioacuten de filas basada en otras tablas
DELETE [ FROM ] NombreTabla | NombreVista
[ FROM OrigenTabla ] [ WHERE CondicionBusqueda ]
ACTUALIZACIONES
- Actualizacioacuten de filas basadas en datos de la propia tabla
UPDATE NombreTabla | NombreVista
SET NombreColumna = expresioacuten DEFAULT | NULL
USE Northwind
UPDATE products
SET unitprice = (unitprice 11 )
- Actualizacioacuten de filas basadas en otras tablas
UPDATE NombreTabla | NombreVista
SET NombreColumna = expresioacuten DEFAULT | NULL
FROM OrigenTabla
WHERE CondicionBusqueda
Ejercicios
Ejemplo 1
Abrir la base de datos creada anteriormente
--use Itae
se procederaacute abrir la base de datos
--go
Ejemplo 2
Crearemos la Tabla alumnos
--CREATE TABLE alumnos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 12
--(
--Idalumno VarChar(8)not null
--nom_alumno Varchar (50) Not Null
--ape_alumno Varchar (50) Not Null
--dir_alumno Varchar (50) Not Null
--tel_alumno VarChar(8)
--Email_alumno Varchar (50)
--)
Ejemplo 3
Para que se muestre la Tabla completa y con todos los registros se utiliza en Select para
seleccionar los campos from para seleccionar la tabla que se desea visualizar
--select from alumnos
Ejemplo 4
Ingreso de Datos a la Tabla alumnos se utiliza la sentencia insert into
--Insert into alumnos (idalumnonom_alumnoape_alumnodir_alumnotel_alumnoemail_alumno)Values
(Cli01jamesjamesVentanilla252511jazoon_28hotmailcom)
--Insert into alumnos (idalumnonom_alumnoape_alumnodir_alumnotel_alumnoemail_alumno)Values
(Cli01Juan CarlosOchoa ValverdeCoop Primavera Mz R1 Lote 16557-
2147jaz_28hotmailcom)
--Insert into alumnos (idalumnonom_alumnoape_alumnodir_alumnotel_alumnoemail_alumno) Values
(Cli02ArturoCapuntildeay LaquiJr Viru 406 Nordm8481-6507eternal_alcarisHotmailcom)
--Insert into alumnos (idalumnonom_alumnoape_alumnodir_alumnotel_alumnoemail_alumno) Values
(Cli03Luis AlexanderAguilar WongJr Hon 920-1090luis_hexenHotmailcom)
--Insert into alumnos (idalumnonom_alumnoape_alumnodir_alumnotel_alumnoemail_alumno) Values
(Cli04Fredy Richard Anaya JesusResidencial 539-0886fredyanayaHotmailcom)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 13
Ejemplo 5
Si deseaacuteramos Eliminar seria con la sentencia Delete
--delete from alumnos where nom_alumno=juan Carlos
Ejemplo 6
Para Actualizar se Utiliza la sentencia Update y Set
--Update alumnos set nom_alumno=diego ape_alumno=cueva dir_alumno=los olivos
tel_alumno=5402972 email_alumno=hades_278hotmailcom where idalumno=01
Ejemplo 7
Para Realizar una Consulta se utiliza el Where
--select from alumnos where idalumno=Cli01
Ejemplo 8
Si tambieacuten uno desea se puede poner en orden ascendente y descendente paraacute ello se utilizar el
ASC y Desc
--select from alumnos ORDER BY nom_alumno Asc
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 14
--select from alumnos ORDER BY nom_alumno desc
Ejemplo 9
Para eliminar un Objeto de la base de datos se utiliza la sentencia Drop
Eliminar de la base de Datos Itae la Tabla Alumnos
Drop table alumnos Elimina la Tabla Clientes con la sentencia Drop seguido del tipo de
objeto y finalizando el nombre
Drop database Itae Elimina la Base de Datos Itae con la sentencia Drop seguido del
tipo de objeto y finalizando el nombre
OPERADORES DE CONDICIOacuteN _ FILAS
En la expresioacuten loacutegica que especifica condicioacuten _ filas se puede utilizar ademaacutes de los operadores
relacioacuten o de comparacioacuten los siguientes operadores SQL
LIKE- Para comparacioacuten de cadenas de caracteres admite los comodines y _
OPERADOR LIKE
Cualquier nuacutemero de caracteres
_ Para un caraacutecter individual
[ ] Para un conjunto de caracteres que esteacute dentro del corchete
[ ^ ] Que el caraacutecter individual que no esteacute dentro del corchete
EJEMPLO LIKE lsquoeenrsquo Muestra todos los caracteres que acaben con een
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 15
EJEMPLO LIKE lsquoeenrsquo Muestra todos los caracteres que contengan een en ese orden
EJEMPLO LIKE lsquo_enrsquo Muestra todos los caracteres que contenga tres letras y acaben en en
EJEMPLO LIKE lsquo[CK ]rsquo Muestra todos los caracteres que empiecen por C o K
EJEMPLO LIKE lsquo[S-V]ingrsquo Nombre de 4 letras cuya primera letra estuviera entre S o V y acabe en
ing
EJEMPLO LIKE lsquoM[^c]rsquo Todos los que empiecen por M y segunda letra no sea una c No hay limite
de caracteres
BETWEEN- para seleccioacuten en base a un rango de valores Los valores pueden ser numeacutericos de
cana fechas y horas
In-Para seleccioacuten en base a un conjunto de valores los valores pueden ser numeacutericos de cadena
fechas y horas
Para estos ejemplos ah utilizado la base de datos con el nombre de Poseidoacuten y contiene las siguientes
tablas y campos
Ejemplo 10
Lista de productos cuyo nombre contenga la palabra vino
Use Poseidon
Go
Select from productos where nombreproducto like vino
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 16
Luego procedemos a ejecutar la aplicacioacuten
El siacutembolo representa a cualquier cadena de caracteres inclusive la cadena nula
Ejemplo 12
Lista de productos cuya primera letea empieza con la letra a
Select from productos where nombreproducto like [a]
Ejemplo 13
Lista de productos cuya primera letea empieza con la letra a y la tercera con la letra e
Select from productos where nombreproducto like [a][e]
Ejemplo 14
Lista de productos cuyo nombre empieza con cualquier caraacutecter que va en el rango de la M a la
T
Select from productos where nombreproducto like [m-t]
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 17
Ejemplo 15
Lista de productos cuyo nombre empieza con A ograve con cualquier caraacutecter en el rango que va de U
a la Ademaacutes el segundo caraacutecter no debe ser la letra r
Select from productos where nombreproducto like [^b-t][^r]
El Caraacutecter ^ significa incluir
El Caraacutecter representa cualquier cadena de caracteres inclusive la cadena nula
El Caraacutecter _ Representa cualquier caraacutecter 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 caraacutecter empiece con la letra e
Select from productos where nombreproducto like _e
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 18
Ejemplo 18
Lista de productos cuyo nombre empiece con C M Ograve R
Select from productos where nombreproducto like bdquo[cmr]
Ejemplo 19
Lista de productos cuyo nombre empiece con C M Ograve R El segundo Caraacutecter debe ser A
Select from productos where nombreproducto like bdquo[cmr] a
El comodiacuten [cmr] representa el conjunto de caracteres validos en la posicioacuten en la que
apareceraacute el comodiacuten
Ejemplo 20
Seleccionar todos los productos que termine con la letra Z
Select from productos where nombreproducto like z
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 19
Ejemplo 21
Mostrar todos los productos cuya cuarta letra sea A
Select from productos where nombreproducto like ___a
USO DEL OPERADOR BETWEEN
Permite seleccionar en base a un rango de valores
Ejemplo 22
Lista de productos cuyo precio se encuentra en el rango que va de 15 a 21 nuevos soles
Select from productos where preciounidad between 15 and 21
Ejemplo 23
Lista de productos cuyo nombre se encuentren en el rango de Cerveza y galletas
Select from productos where nombreproducto between cerveza and galletas
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 20
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 (londresPariacutesTokyo)
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 (preciounidadcantidad)019 as IGV
from [detalles de pedidos]
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 21
Ejemplo 27
Mostar los productos cuyo precio sea mayor a 40
Select from productos where Preciounidad gt 40
Ejemplo 28
Mostrar todos los datos de los Clientes ordenados por Ciudad
Select from clientes order by ciudad
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 22
Ejemplo 29
Mostrar todos los productos de la Categoriacutea 2
Select from productos where IdCategoriacutea=2
Ejemplo 30
Mostrar todos los pedidos realizados en la fecha 1996-06-05
Select from Pedidos where FechaPedido =1996-06-05
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 23
Ejemplo 31
Mostrar todos los pedidos mayores a la Fecha 1996-05-05
Select from Pedidos where FechaPedido gt 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 IdCategoriacutea no sea 3
Select from productos where IdCategoriacutealtgt 3
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 24
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 Categoriacutea (123)
Select from productos where IdCategoriacutea not in (1 2 3) order by IdProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 25
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
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 26
USO DE FUNCIONES
Podemos utilizar funciones para construir expresiones y generar columnas computadoras O condiciones
complejas
Funcioacuten de agregacioacuten
Son funciones que se utilizan para calcular valores en las tablas Si queremos usarlas
combinaacutendolas 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
expresioacuten HAVING Equivalente a where
Todos estos ejercicios han sido desarrollado con la base de datos Poseidoacuten
COUNT Cuenta los registros que hay en la consulta
Si pongo un valor dentro de la expresioacuten devolveraacute la cuenta de todos los
registros no nulos
Si pongo un asterisco contaraacute todos los registros aunque tengan valores
nulos
Select count () from Pedidos Valores con Nulos
Select count (FechaEnviacuteo) from Pedidos Valores sin nulos
AVG Realiza la media sobre la expresioacuten dada debe ser un tipo de dato
Int
Select avg(Preciounidad) from productos
MAX Saca el valor maacuteximo de una consulta
Select max (FechaPedido) from Pedidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 27
MIN Devuelve el valor miacutenimo 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 paiacutes Brasil mostrando el nuacutemero de los Factura con el paiacutes de
Destinatario Brasil
Select count () as [Numero de Facturas] PaiacutesDestinatario
Avg (Preciounidad) as [Precio Medio] from
Facturas group by PaiacutesDestinatario having PaiacutesDestinatario =Brasil
Ejemplo 39
Encontrar el precio maacutes alto mas bajo y la diferencia entre ambos de todos los productos con
IdCategoriacutea 2
Select IdCategoriacutea Max (Preciounidad) as [Precio mas alto] min(Preciounidad) as
[Precio mas Bajo] Max(Preciounidad) - min(Preciounidad) as [Diferencia entre Ambos]
from Productos group by IdCategoriacutea having IdCategoriacutea = 2
Ejemplo 40
Visualizar el nuacutemero de productos por Categoriacutea
Select IdCategoriacutea as [Nordm de Categoriacutea] Count (IdCategoriacutea) as [Nordm de Productos]
From Productos group by IdCategoriacutea
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 28
Ejemplo 41
Visualizar los clientes que vivan en las siguientes ciudades Londres Madrid y Barcelona
Select count () as [Nordm de personas] ciudad from clientes group by ciudad Having ciudad in
(londresMadridBarcelona) order by ciudad
Ejemplo 42
Lista de productos cuya venta allaacute sido mayor a 50000
Select IdProducto Monto=Sum (Preciounidad Cantidad) from [Detalles de pedidos] group
by IdProducto having Sum (Preciounidad Cantidad)gt50000 order by IdProducto
Ejemplo 43
Cuantos Clientes no tienen Fax
Select Count () as [Total de Clientes sin Fax] from clientes where fax is null
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 29
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
Funcioacuten Resultado
GETDATE() Retorna la fecha y hora del sistema
DATEADD(partefechanfecha) Retorna una nueva fecha antildeadiendo n
unidades de partefecha a fecha
DATEDIFF(parteFechafecha1fecha2) Retorna la diferencia en parteFecha entre
fecha1 y fecha2
DATENAME(partefechafecha) Retorna la cadena correspondiente a
partefecha en fecha
DATEPART(partefechafecha) Retorna el numero correspondiente a
partefecha y fecha
DAY(fecha) Retorna el numero correspondiente a la
parte del diacutea de fecha
MONTH(fecha) Retorna el numero correspondiente a la
parte del mes de fecha
YEAR(fecha) Retorna el numero correspondiente a la
parte del antildeo de fecha
GETUTCDATE() Retorna la fecha y hora del meridiano de
Greenwich
La siguiente tabla muestra los valores de partefecha que podemos utilizar
partefecha Abreviatura
Year Yy yyyy
Quarter Qq q
Month Mm m
Dayofyear Dy y
Day Dd d
Week Wk ww
weekday Dw
Hour Hh
minute Mi n
second Ss s
milisecond Ms
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 30
Getdate
Select getdate () Funcioacuten que recupera la fecha actual del sistema
Convert Cast
Convierten expliacutecitamente una expresioacuten de un tipo de datos en otro CAST y CONVERT
proporcionan funciones similares
Convert (Tipodedatosdestino Origen Estilo)
o Tipodedatosdestino Siempre ha de ser tipo caraacutecter
o Origen Puede ser tipo fecha numeacuterico o moneda
o Estilo Opcional Es un coacutedigo que indica el formato en el que devuelve la cadena de
caracteres
Sintaxis
Convert (TipoDato Dato)
Cast (Dato as TipoDato)
Ejemplo
declare n intpalabra nvarchar(10)
set n = 1
set palabra =Nuacutemero
print convert(nvarchar(2)n) + + palabra
print cast(n as nvarchar(2)) + + palabra
while (nlt11)
begin
print convert(nvarchar(2)n) + + palabra
print cast(n as nvarchar(2)) + + palabra
set n = n + 1
end
DateName
Devuelve una cadena de caracteres que representa la parte de la fecha especificada de la fecha
especificada
Los caacutelculos 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
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 31
Ejemplo 46
Select IdPedido DateName (week FechaPedido) as Numero de Semana from Pedidos where IdPedido
= 1035251
Ejemplo 47
Select IdPedido datename (weekday FechaPedido) as Diacutea De Semana from Pedidos where IdPedido =
10352 Martes
Horas
Ejemplo 48
Select IdPedido datename (mi FechaPedido) as Minutos from Pedidos where IdPedido = 10352
Ejemplo 49
Select DateName (minute getdate ()) as minutos
Ejemplo 50
Select DateName (Hh FechaPedido) as hora from Pedidos where IdPedido = 10352
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 32
Ejemplo 51
Select DateName (Hour getdate ()) as hora--gt18
Ejemplo 52
Select DateName (Hh getdate ()) as hora--gt18
DatePart
Devuelve la parte de la fecha u hora indicada Sintaxis
Datepart (Valor devolver fecha)
Ejemplo 53
Select IdPedido datepart (mm FechaPedido) as Mes from Pedidos where IdPedido = 10352
Ejemplo 54
Select Datepart (Hh getdate ()) as Hora--gt17
Ejemplo 55
Select Datepart (mi getdate ()) as Minutos--gt54
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 33
Nombres de Fechas
Day (fecha)
Devuelve UN INT equivale a Datepart
Select day (getdate ()) as diacutea--gt6 (diacutea en la que se ejecuta la sentencia)
Select Datepart (dd getdate ()) --gt6 (diacutea en la que se ejecuta la sentencia)
Select Month (getdate ()) --gt1 (Mes en la que se ejecuta la sentencia)
Select Datepart (mm getdate ()) --gt1 (Mes en la que se ejecuta la sentencia)
Select Year (getdate ()) --gt2008 (Antildeo en la que se ejecuta la sentencia)
Ejemplo 56
Select year (FechaPedido) as Antildeo from Pedidos where IdPedido = 10352
Ejemplo 57
Select datediff (yyyy FechaPedido getdate()) as Dia from Pedidos where IdPedido = 10352
DateAdd
DateAdd (Datepart number date)
Antildeade un nuacutemero a la fecha puesta
DatePart es el formato de lo que queremos antildeadir
Number es el nuacutemero que queremos incrementar la fecha expuesta
Select convert (datetime1-1-02)
Select dateadd (dd 71-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 comparacioacuten y el tipo de dato
que nos devolveraacute antildeos diacuteas minutos etc
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 34
Ejemplo 58
Select datediff (yyyy FechaPedido getdate ()) as Dia from Pedidos where IdPedido = 10352
Ejercicios de funciones de Fecha
Ejemplo 59
Lista de pedidos emitidos en febrero de 1996
Select from Pedidos where month (FechaPedido) =2 and year (FechaPedido) =1996
Ejemplo 60
Lista de Pedidos mostrando la diferencia en diacuteas entre la fecha del pedido y la fecha de Envioacute
Select IdPedido FechaPedido FechaEnviacuteo diacuteas =datediff (day FechaPedido FechaEnviacuteo) from
pedidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 35
Ejemplo 61
Genere un listado de pedidos en el que la fecha del pedido se muestre en el formato nombre del
diacutea diacutea de mes antildeo
Select IdPedido FechaPedido Fecha=datename (dw IdPedido)+ + str (datepart (dd
IdPedido) 2)+ de +datename (mm IdPedido)+ de +str (datepart (yy IdPedido) 4) from
pedidos
Ejemplo 62
Mostrar de la tabla pedidos la fecha de pedidos en fecha corta
Select IdPedido convert (varchar (30) FechaPedido 106) as [Fecha Corta] from pedidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 36
FUNCIONES MATEMATICAS
ABS
Es el valor Absoluto
Select ABS (-4) as VALOR ABSOLUTO--gt4
CEILING
Devuelve el entero maacutes pequentildeo mayor o igual que la expresioacuten numeacuterica dada
Select CEILING (54) as CEILING--6
FLOOR
Devuelve el entero maacutes grande menor o igual que la expresioacuten numeacuterica dada
Select FLOOR (5) as FLOOR--gt5
POWER
Devuelve el valor de la expresioacuten indicada elevada a la potencia especificada
Select POWER (3 2) as 3 ELEVADO A 2--gt9
RAND
Devuelve un valor float aleatorio de 0 a 1
Las llamadas repetitivas de RAND() en una uacutenica consulta produciraacuten el mismo valor
Select RAND(6) as ALEATORIO--071368515806921451
Select RAND(6) as ALEATORIO--071368515806921451
Select RAND(4) as ALEATORIO--07136478921266981
Rand sobre los milisegundos actuales
Select RAND(DATEPART(msGETDATE())) as ALEATORIO--gt071443047691954253
Select RAND(999999999)--gt068504257551273573
ROUND
Devuelve una expresioacuten numeacuterica redondeada a la longitud o precisioacuten especificada
Round (Nuacutemero Redondeo del Nuacutemero)
ROUND siempre devuelve un valor Si length es un valor negativo y mayor que el nuacutemero de
diacutegitos anteriores al separador decimal ROUND devuelve 0
Select ROUND (1234567 2) --gt1234600
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 37
Select ROUND (1234567-2) --gt1000000
Select ROUND (1234567 0) --gt1230000
Select ROUND (1234567-3) ---gt0
SIGN
Devuelve el signo positivo (+1) cero (0) o negativo (-1) de la expresioacuten especificada
Dice el valor negativo positivo o neutro (0) del valor especificado
Select SIGN (-3) --gt-1
Select SIGN (3) --gt1
Select SIGN (0) --gt0
SQUARE
Devuelve el cuadrado de la expresioacuten especificada
Select SQUARE (4) as bdquoCuadrado‟--gt160
SQRT
Devuelve la raiacutez cuadrada de la expresioacuten especificada
Select SQRT (4) as [RAIZ CUADRADA] --gt20
FUNCIONES DE CADENA
ASCII
Devuelve el coacutedigo ASCII del caraacutecter maacutes a la izquierda de una expresioacuten de caracteres
Select ASCII(A)--gt65
Select ASCII(a)--gt97
Select ascii(aula)--gt97
CHAR
Una funcioacuten de cadena que convierte un coacutedigo ASCII int en un caraacutecter
select char(65)--gtA
select char(97)--gta
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 38
CHARINDEX
Devuelve la posicioacuten inicial de la expresioacuten especificada en una cadena de caracteres
CHARINDEX (expression1 expression2 [ start_location])
Argumentos
expression1
Es una expresioacuten que contiene la secuencia de caracteres que se desea buscar
Expression1 es una expresioacuten del tipo de cadenas cortas de caracteres
Expression2
Es una expresioacuten normalmente una columna
en la que se busca la cadena especificada
Expression2 es de la categoriacutea del tipo de datos cadena de caracteres
start_location
Es la posicioacuten del caraacutecter de expression2 en el que se empieza la buacutesqueda de expression1
Si no se especifica start_location es un nuacutemero negativo o es cero
la buacutesqueda empieza al principio de la cadena expression2
Si expression1 no se encuentra en expression2 CHARINDEX devuelve 0
Si alguno de los dos es null devuelve null
Select charindex (ciemurcielago) --gt4
Select charindex (ciemurcielago 2) --gt4
Select charindex (ciemurcielago 5) --gt0
Select charindex (ciemurcielago-6) --gt4
LEFT
Devuelve la parte de una cadena de caracteres que comienza en un nuacutemero de caracteres
especificado a partir de la izquierda
Select left (murcielago5) --gtmurci
RIGHT
Devuelve la parte de una cadena de caracteres que
Comienza en el nuacutemero de caracteres especificado
En integer_expression a partir de la derecha
Select right (hola que tal5) --gte tal
LEN
Cuenta el nuacutemero de caracteres que se incluyen en la cadena
Select len (murcieacutelago) --gt10
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 39
LOWER
Convierte a Minuacutesculas la cadena especificada
Select lower (MurcIELaGO) as [minusculas] --gtmurcielago
UPPER
Convierte a Mayuacutesculas la cadena especificada
Select upper (murcielago) as [MAYUSCULAS] --gtMURCIELAGO
RTRIM y LTRIM
Elimina los espacios que existen a la izquierda y a la derecha respectivamente
Select Rtrim ( murcieacutelago ) AS [SIN ESPACIOS] --gtmurcieacutelago
Select Ltrim ( murcieacutelago ) AS [SIN ESPACIOS] --gtmurcieacutelago
Select ltrim(rtrim( hola ))+
REPLACE
Reemplaza por una tercera expresioacuten todas las apariciones
de la segunda expresioacuten de cadena proporcionada en la primera expresioacuten de cadena
Select replace (hola que tal estasaA) --gtholA que tAl estAs
Select replace (buenos dias que tal estasuentildentildentilde) --gtbntildentildentildenos diasqntildentildentilde tal estas
SPACE
Coloca el nuacutemero de espacios que se le indiquen para entre una cadena de caracteres
Select hola+space(5)+que tal--gthola que tal
SUBSTRING
Devuelve parte de una expresioacuten de caracteres binaria de texto o de imagen
Sintaxis
SUBSTRING (Expresioacuten Comienzo Duracioacuten)
Argumentos
Expresioacuten
Es una cadena de caracteres cadena binaria texto imagen
Columna o expresioacuten que incluye una columna
No deben usarse expresiones que incluyan funciones de agregado
Start
Es un entero que especifica el punto en que comienza la subcadena
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 40
Length
Es un entero que especifica la longitud de la subcadena
(El nuacutemero de caracteres o bytes que se devuelven)
Select substring (murcielago 3 5) --gtrciel
Select substring (murcielago 3 len (murcielago)) --gtrciel
REVERSE
Devuelve invertida una expresioacuten de caraacutecter
Select reverse (hola)
REPLICATE
Repite una expresioacuten de caracteres un nuacutemero especificado de veces
Select replicate (murcielago 5)
Replicate replicate replicate replicate replicate
STUFF
Elimina el nuacutemero de caracteres especificados e insertados
Otro conjunto de caracteres en un punto de inicio indicado
Select STUFF (Murcieacutelago 2 3 ijklmn) Mijklmnielago
FUNCIONES DE SISTEMA
- APP_NAME () Devuelve el nombre de la aplicacioacuten actual
Select app_name () as [Nombre de la aplicacion]
- DATALENGTH (Expresioacuten) Devuelve un entero que es numero de bites necesarios para
representar esa expresioacuten int
Select datalength (Ninoni) as [Numero de bites]
- ISDATE (Expresioacuten) Dice si la expresioacuten es una fecha o no Devuelve 1 si la expresioacuten es
una fecha y 0 si no es una fecha
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 41
Select isdate (121001) as [Validacioacuten Fecha]
- ISNUMERIC (Expresion) Dice si la expresioacuten es un numero o no Devuelve 1 si la
expresioacuten es un nuacutemero y 0 si la expresioacuten no es nuacutemero
Select isnumeric (ddd) as [Validacion Numero]
- ISNULL (Expresioacuten ExpresionDevuelta) Si la expresioacuten es nula te devuelve la Expresioacuten
Devuelta y si no devuelve la primera Expresioacuten
Select isnull (nullNo nulo) as [Es Nulo]
- PARSENAME (bdquoNombreObjeto‟ ParteNombre)
ParteNombre es un valor de tipo Int que coge unos determinados valores del
NombreObjeto
1 Objeto
2 Propietario
3 Base de Datos
4 Servidor
Select parsename (saposeidondbopedidos1) as [Parte Expresioacuten]
Select parsename (saposeidondbopedidos 2) as [Parte Expresioacuten]
Select parsename (saposeidondbopedidos3) as [Parte Expresioacuten]
Select parsename ( saposeidondbopedidos 4) as [Parte Expresioacuten]
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 42
- SYSTEM_USER Devuelve el usuario del sistema actual
Depende de la autentificacioacuten con la que te hayas conectado
Select system_user as [Usuario conectado]
- USER_NAME() Devuelve el nombre del usuario actual
Select user_name ()
- COALESCE (expresioacuten1 expresioacuten2 )
Devuelve la primera expresioacuten no NULL
Si todos son NULL devuelve NULL
Select coalesce (PrecioUnidad Cantidad) from [detalles de Pedidos] Si el PrecioUnidad es nulo
devolveraacute la Cantidad y si los dos son nulos devolveraacute un campo Null
PROCEDIMIENTOS PARA AGRUPAR Y RESUMIR DATOS
En el examen de certificacioacuten 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 usaraacute la base de datos indicada Ejemplo Ponemos
en el analizador de consultas lo siguiente
Use Northwind
Select from [Order Details]
[Order Details]
Esta tabla perteneciente a la Northwind se encarga de manejar los pedidos
Order Id Nordm de Pedido
Producto Id Nordm de Producto
Ambos campos son Primary Key con lo que no puede haber una combinacioacuten de ambos campos que sea
igual
OrderId ProductId
1 A
1 B
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 43
1 C
2 A
3 C
Es decir en este caso no podriacutea existir una nueva combinacioacuten ldquo1 Ardquo o ldquo2 Ardquo
Quantity Es la cantidad del producto del pedido
ROLLUP
Se usa para presentar resuacutemenes de datos A de usarse junto con la clausula group by lo que hace es
realizar un resumen de los campos incluidos en el rollup
Ejemplo 63
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
Group by ProductID OrderID
with Rollup
Order by ProductID OrderID
Este ejemplo suma todas las cantidades y mediante
rollup muestra una fila con la suma de todas las
cantidades de cada producto y ademaacutes otra fila con la
suma de todas las cantidades de todos los productos El
resultado de este ejemplo seriacutea el que muestra la
imagen
Ejemplo 64
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
where orderid lt 10250
Group by ProductID OrderID
with Rollup
Order by ProductID OrderID
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 44
CUBE
Al igual que Rollup realiza resuacutemenes de campos agrupados Pero en este caso muestra un resumen con
cada combinacioacuten posible de los campos agrupados
Ejemplo 65
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
where orderid lt 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 combinacioacuten posible entre el
productid y el orderid
GROUPING
Indica si el resultado de un campo es el que hay en la propia tabla o se ha introducido mediante una
claacuteusula de resumen es decir para saber por ejemplo si un ldquoNullrdquo 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 lt 10250 Group by ProductID
OrderID with Cube Order by ProductID OrderID
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 45
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
Ponieacutendole un alias al
grouping saldriacutea el nombre
de columna que le
indiquemos
COMPUTE
Realiza un resumen en una columna aparte con el resultado de la funcioacuten de agregado indicada Su
formato seriacutea Compute funcioacuten(campo) No se puede utilizar en aplicaciones cliente servidor es una
clausula meramente informativa Tampoco se le pueden poner alias a los resuacutemenes
Ejemplo 67
Select Productid Orderid Quantity From [Order Details] order by ProductID Orderid compute
Sum(quantity)
Vemos que muestra la
columna con la suma
total de todas las
cantidades
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 46
Ejercicios de ROLLUP GROUPING y CUBE
Ejemplo 68
Realizar una consulta que resuma la cantidad de artiacuteculos pedidos por cada iacutendice de producto y
nuacutemero de pedido Realizando un caacutelculo acumulativo
select productid as [PRODUCTO] orderid as [Nordm PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] group by productid orderid with rollup order by productid orderid
PRODUCTO Nordm 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
hellip
Ejemplo 69
Modificacioacuten al ejercicio anterior Realizar el mismo resumen pero uacutenicamente para el producto
cuyo id es 50
select productid as [PRODUCTO] orderid as [Nordm PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] where productid = 50 group by productid orderid with rollup order by productid ordered
PRODUCTO Nordm 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
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 47
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 modificacioacuten 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 [Nordm PEDIDO] grouping(orderid) as [GRUPO PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] where productid = 50 group by Productidorderid with cube order by productidorderid
PRODUCTO GRUPO PRODUCTO Nordm PEDIDO GRUPO PEDIDO SUMA TOTAL
----------- -------------- ----------- ------------ -----------
NULL 1 NULL 1 235
NULL 1 10350 0 15
NULL 1 10383 0 15
NULL 1 10429 0 40
NULL 1 10465 0 25
NULL 1 10637 0 25
NULL 1 10729 0 40
NULL 1 10751 0 20
NULL 1 10920 0 24
NULL 1 10948 0 9
NULL 1 11072 0 22
50 0 NULL 1 235
50 0 10350 0 15
50 0 10383 0 15
50 0 10429 0 40
50 0 10465 0 25
50 0 10637 0 25
50 0 10729 0 40
50 0 10751 0 20
50 0 10920 0 24
50 0 10948 0 9
50 0 11072 0 22
(22 filas afectadas)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 48
Obtencioacuten de resuacutemenes 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 maacutes columnas y
luego efectuar alguna operacioacuten de resumen sobre cada grupo asiacute generado
La diferencia con GROUP BY es que permite mostrar informacioacuten mas detallada de cada grupo
Ejemplo 71
Lista de pedidos que muestre por coacutedigo de pedido la cantidad de productos vendidos por cada uno
de ellos
select Idpedidoidproductopreciounidadcantidad[Sub Total]=sum(PreciounidadCantidad) from
[detalles de pedidos] group by Idpedidoidproductopreciounidadcantidad order by IdPedido compute
sum(Cantidad) by IdPedido
EJERCICIOS CON COMPUTE
Ejemplo 72
Generar un resumen de subtotales en una consulta que devuelva el nuacutemero de pedido la cantidad
pedida para todos los orderid 11070
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 49
Select Orderid as [Nordm PEDIDO] Quantity AS [CANTIDAD] From [Order Details] where orderid gt= 11070 order by Orderid compute Sum(quantity) by orderid compute sum(quantity)
Nordm PEDIDO CANTIDAD
----------- --------
11070 40
11070 20
11070 30
11070 20
sum
===========
110
sum
===========
110
(6 filas afectadas)
Ejemplo 73
Generar un resumen con calculo de subtotales similar al anterior pero para los orderid 11075 y
11076
Select Orderid as [Nordm PEDIDO] Quantity as [CANTIDAD] From [Order Details] where orderid = 11075 or orderid = 11076 order by Orderid compute Sum(quantity) by ordered Nordm PEDIDO CANTIDAD ----------- -------- 11075 10 11075 30 11075 2 sum =========== 42 Nordm PEDIDO CANTIDAD ----------- -------- 11076 20 11076 20 11076 10
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 50
sum =========== 50 (8 filas afectadas)
Ejemplo 74
Modificacioacuten al ejercicio anterior Agregar la cantidad total y la cantidad promedio al final del
informe
Select Orderid as [Nordm 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)
Nordm PEDIDO CANTIDAD
----------- --------
11075 10
11075 30
11075 2
sum
===========
42
Nordm PEDIDO CANTIDAD
----------- --------
11076 20
11076 20
11076 10
sum
===========
50
sum
===========
92
avg
===========
15
(10 filas afectadas)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 51
Ejemplo 75
Seleccionar de forma agrupada por tipo todos los tipos la suma de los precios y la suma del
anticipo de la tabla tiacutetulos
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 199900 50000000
business 119500 50000000
business 29900 101250000
business 199900 50000000
sum
=====================
549200
avg
=====================
62812500
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
mod_cook 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
avg
=====================
75000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
popular_comp 229500 70000000
popular_comp 200000 80000000
popular_comp NULL NULL
sum
=====================
429500
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 52
avg
=====================
75000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
psychology 215900 70000000
psychology 109500 22750000
psychology 70000 60000000
psychology 199900 20000000
psychology 79900 40000000
sum
=====================
675200
avg
=====================
42550000
(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 ademaacutes 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 199900 50000000
business 119500 50000000
business 29900 101250000
business 199900 50000000
sum
=====================
549200
sum
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 53
=====================
251250000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
mod_cook 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
popular_comp 229500 70000000
popular_comp 200000 80000000
popular_comp NULL NULL
sum
=====================
429500
sum
=====================
150000000
(30 filas afectadas)
Ejemplo 77
Generar un informe que muestre la suma de los precios de los libros de psicologiacutea 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 109500
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 54
psychology 0736 70000
psychology 0736 199900
psychology 0736 79900
sum
=====================
459300
TIPO CODIGO EDITOR PRECIO
------------ ------------- ---------------------
psychology 0877 215900
sum
=====================
215900
(7 filas afectadas)
Ejemplo 78
Generar un informe que obtenga la suma de los precios de todos los libros de psicologiacutea asiacute como la
suma de los precios de los libros de psicologiacutea 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 109500
psychology 0736 70000
psychology 0736 199900
psychology 0736 79900
sum
=====================
459300
TIPO CODIGO EDITOR PRECIO
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 55
------------ ------------- ---------------------
psychology 0877 215900
sum
=====================
215900
sum
=====================
675200
(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 199900 0000
mod_cook 0877 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO CODIGO EDITOR PRECIO ANTICIPO
------------ ------------- --------------------- ---------------------
trad_cook 0877 119500 40000000
trad_cook 0877 209500 70000000
trad_cook 0877 149900 80000000
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 56
sum
=====================
478900
sum
=====================
190000000
(9 filas afectadas)
Ejemplo 80
Generar un informe que muestre todos los tiacutetulos precio y anticipo de aquellos tiacutetulos que tengan
un precio superior a 20 doacutelares Ofreceraacute tambieacuten la suma total del precio y del anticipo
Select title as [TITULO] price as [PRECIO] advance as [ANTICIPO] From titles where price gt 20 order by title compute sum(price) compute sum(advance)
TITULO PRECIO ANTICIPO
-------------------------------------------------------------------------------- --------------------- -------------
--------
But Is It User Friendly 229500 70000000
Computer Phobic AND Non-Phobic Individuals Behavior Variations 215900
70000000
Onions Leeks and Garlic Cooking Secrets of the Mediterranean 209500
70000000
sum
=====================
654900
sum
=====================
210000000
(5 filas afectadas)
Ejemplo 81
Generar un informe que muestre el precio el tipo y el nuacutemero de editor de la tabla titles de todos
aquellas obras que pertenezcan la categoriacutea de ldquobusinessrdquo Ademaacutes apareceraacute la suma total de
precios y el maacuteximo pub_id de esta seleccioacuten
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 57
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 29900 0736
business 199900 1389
business 199900 1389
business 119500 1389
sum
=====================
549200
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 Mostraraacute la suma de los precios y los anticipos por tipo y luego calcularaacute 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 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
trad_cook 209500 70000000
trad_cook 119500 40000000
trad_cook 149900 80000000
sum
=====================
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 58
478900
sum
=====================
190000000
sum
=====================
708700
sum
=====================
340000000
(11 filas afectadas)
Eliminacioacuten 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 iquestA que precio se ah vendido los productos
Select IdProducto Preciounidad from [Detalles de pedidos] order by IdProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 59
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 mayoriacutea de las consultas que se hacen en una base de datos requiere que se lean datos procedentes
de dos oacute maacutes tablas
INNER JOIN- son las filas que satisfacen la condicioacuten de la combinacioacuten
En la siguiente sentencia SQL enlaza 2 tablas la tabla clientes y la tabla pedidos en esta ejemplo me
muestra los campos nombre compantildeiacutea y el campo idpedido
La uacutenica condicioacuten es que las 2 tablas tengan un campo en comuacuten
Ejemplo 84
select clientesNombreCompantildeiacuteapedidosidpedido from clientes inner join pedidos on
clientesidcliente=pedidosidcliente
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 60
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 pedidosIdPedido pedidosIdCliente 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 pedidosIdPedido pedidosIdCliente order
by pedidos IdPedido
CROSS JOIN
Un Cross Join es la consulta correlacionada que combine cada una de las filas de una de las tablas con
todas las filas de la otra tabla
No es necesario que exista una columna en comuacuten para ejecutar el Cross Join
Ejemplo 86
La siguiente consulta combina cada una de las filas de la tabla categoriacuteas con cada una de las filas de la
tabla productos
select productosNombreProductocategoriasNombrecategoria from productos cross join categorias
order by productosNombreProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 61
Ejercicios de consultas Muacuteltiples
Ejemplo 87
Mostrar el pedidos completo con el id=10248
Select pedidosIdPedido pedidosIdCliente
Total=sum ([detalles de pedidos]Preciounidad[detalles de pedidos]Cantidad)
From [detalles de pedidos] inner join pedidos on
[Detalles de pedidos]IdPedido=pedidosIdPedido where pedidosIdPedido=10248
Group by pedidosIdPedido pedidosIdCliente
Ejemplo 88
1 Mostrar la cantidad de productos por categoriacutea
Select CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
[Total de Producto]=sum (UnidadesEnExistencia) from Categoriacuteas inner join
Productos on CategoriacuteasIdCategoriacutea=productosIdCategoriacutea
Group by CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 62
Ejemplo 89
Calcular cuantas ventas tiene cada uno de los vendedores
Select empleadosIdEmpleado empleadosNombre empleadosApellidos
[Total de ventas]=count (pedidosIdPedido) from empleados
Inner join Pedidos on empleadosIdEmpleado=pedidosIdEmpleado
Group by empleadosIdEmpleado empleadosNombre empleadosApellidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 63
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 despueacutes saca la de Plantilla
Recomendaciones a la hora de usar las combinaciones
Combinar tablas en funcioacuten de claves principales y externas
Limite el nuacutemero de tablas de las combinaciones
Select Apellido
Oficio as
OFICIOFUNCION
salario from emp
UNION
Select Apellido
Funcion Salario from
Plantilla
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 64
SUBCONSULTAS
Es una SELECT anidada en una instruccioacuten INSERT DELETE SELECT o UPDATE
Como una tabla derivada
Select eemp_no as Numero
eApellido
from (select emp_no apellido from emp) as e
Como una expresioacuten
Select emp_no as [Numero]
Apellido
Salario
(select avg(Salario) from emp)
as Diferencia
from emp
where oficio = Empleado
Para correlacionar datos
- Expresioacuten dinaacutemica que cambia en cada fila de una consulta externa
- Es una combinacioacuten entre la subconsulta y la fila de la consulta externa
- Dividen consultas complejas con dos o maacutes consultas simples relacionadas
Subconsulta correlacionada
Select apellido oficiodept_no
from emp as e
where 20 lt
(select dept_no from dept as d
where edept_no = ddept_no
and ddnombre = Ventas)
SUBCONSULTAS
1 Mostrar el numero de empleado el apellido y la fecha de alta del empleado mas antiguo de la
empresa
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 65
SELECT emp_noapellido
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_noapellido
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 Jimeacutenez
select apellido oficio from emp where
oficio = (select oficio from emp where apellido = JIMENEZ)
4 Queremos saber el apellido oficio salario y nuacutemero 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 gt (select max (salario) from
emp where dept_no = 30)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 66
5 Mostrar el apellido la funcioacuten sala o departamento de todos los empleados que trabajen en la
empresa
select eApellido eOficio as [Cargo en Empresa] ddnombre as [Oficina]
from emp as e
inner join dept as d
on edept_no = ddept_no
union
select pApellido pfuncion snombre
from plantilla as p
inner join sala as s
on phospital_cod = shospital_cod
and psala_cod = ssala_cod
union
select dApellido despecialidad hnombre
from doctor as d
inner join hospital as h
on dhospital_cod = hhospital_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 = lsquoventasrsquo))
order by 2
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 67
8 Mostrar los empleados que tienen mejor salario que la media de los directores no incluyendo al
presidente
Select from emp where salario gt
(select avg (salario) from emp where oficio = DIRECTOR)
and oficio ltgt PRESIDENTE
9 Mostrar el apellido funcioacuten salario y coacutedigo 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 = lsquoENFERMEROrsquo or
funcion = lsquoENFERMERArsquo) and hospital_cod = (select hospital_cod from hospital where nombre =
lsquoSAN CARLOSrsquo)
Select apellido funcion salario hospital_cod from plantilla where
funcion in (ENFERMEROENFERMERA)
and hospital_cod = (select hospital_cod from hospital
where nombre = SAN CARLOS)
10 Visualizar los datos de los hospitales que tienen personal (Doctores) de cardiologiacutea
Select from hospital where hospital_cod in (select hospital_cod from doctor where
especialidad = lsquoCardiologiacutearsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 68
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 = lsquoPROVINCIALrsquo or
nombre= lsquoGENERALrsquo)
12 Mostrar el apellido de los enfermos que nacieron antes que el Sentildeor Miller
Select apellido from enfermo where Fecha_nac lt (select fecha_nac from enfermo where
apellido = lsquoMILLER Brsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 69
Simulacion de una clausula JOIN
Vamos a mostrar los oficios que estaacuten en maacutes de un departamento
Select distinct e1oficio from emp as e1
where e1oficio in(Select e2oficio from emp as e2
where e1dept_no ltgt e2dept_no)
Se debe utilizar antes una combinacioacuten que una subconsulta la combinacioacuten seriacutea asi dando los
mismos resultados
Select distinct e1Oficio from emp as e1
inner join emp as e2
on e1oficio = e2oficio
where e1dept_no ltgt e2dept_no
Estos son los dos oficios que estaacuten en
maacutes de un departamento
Subconsulta para simular una clausula HAVING
select e1apellidoe1oficio e1salario
from emp as e1
where e1salario gt
(select avg(e2salario) from emp as e2
where e1oficio = e2oficio)
Esta es la consulta utilizando el HAVING que es la que deberiacuteamos utilizar antes que una
subconsulta de simulacioacuten HAVING
SELECT e1apellidoe1oficio e1salario
FROM emp AS e1
INNER JOIN emp AS e2
ON e1oficio = e2oficio
GROUP BY e1oficio e1salarioe1apellido
HAVING e1salario gt AVG (e2salario)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 70
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 3
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 caraacutecter 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 vaacutelidas de fecha y hora Por ejemplo datos vaacutelidos
de fecha y hora pueden ser 40198 1215000000 pm y 128291501 am 17898 Los datos de
fecha y hora se almacenan utilizando los tipos de datos datetime y smalldatetime de Microsoftreg SQL
Servertrade 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 antildeo 2079 (para cada valor se necesitan 4 bytes de espacio de almacenamiento)
Datos numeacutericos
Los datos numeacutericos se componen exclusivamente de nuacutemeros Incluyen nuacutemeros positivos y negativos
decimales fracciones y nuacutemeros enteros
Datos enteros
Los datos enteros constan de nuacutemeros enteros positivos o negativos como ndash15 0 5 y 2509 Los datos
enteros se almacenan utilizando los tipos de datos bigint int smallint y tinyint de Microsoftreg SQL
Servertrade 2005 El tipo de datos bigint puede almacenar un intervalo de nuacutemeros 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 nuacutemeros que tinyint
Utilice el tipo de datos bigint para almacenar nuacutemeros del intervalo comprendido entre -2^63 (-
9223372036854775808) y 2^63-1 (9223372036854775807) El tamantildeo de almacenamiento es de 8
bytes
Utilice el tipo de datos int para almacenar nuacutemeros del intervalo comprendido entre -2147483648 y
2147483647 (para cada valor se necesitan 4 bytes de espacio de almacenamiento)
Utilice el tipo de datos smallint para almacenar nuacutemeros del intervalo que va desde -32768 hasta
32767 (para cada valor se necesitan 2 bytes de espacio de almacenamiento) y el tipo de datos tinyint
para almacenar nuacutemeros 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 diacutegito menos significativo
Estos datos se almacenan mediante los tipos de datos decimal o numeric de SQL Server El nuacutemero de
bytes necesarios para almacenar un valor decimal o numeric depende del nuacutemero total de diacutegitos de
datos y del nuacutemero de cifras a la derecha del separador decimal Por ejemplo se necesitan maacutes bytes
para almacenar el valor 1928329383 que para almacenar el valor 11
En SQL Server el tipo de datos numeric es sinoacutenimo del tipo de datos decimal
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 4
Datos numeacutericos aproximados
Los datos numeacutericos aproximados (coma flotante) constan de datos que se almacenan con tanta
precisioacuten como permite el sistema de numeracioacuten binario Los datos numeacutericos aproximados se
almacenan mediante los tipos de datos float y real de SQL Server Por ejemplo dado que en notacioacuten
decimal la fraccioacuten un tercio se expresa como 0333333 (hasta el infinito) este valor no se puede
representar con total precisioacuten mediante los datos decimales aproximados Por lo tanto el valor
recuperado de SQL Server puede no coincidir exactamente con el que se almacenoacute originalmente en la
columna Otros ejemplos de aproximaciones numeacutericas son los valores de coma flotante que acaban en
03 06 y 07
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 Microsoftreg SQL Servertrade 2005 Los
datos de moneda pueden almacenarse con una precisioacuten maacutexima de cuatro decimales Utilice el tipo de
datos money para almacenar valores del intervalo comprendido entre -9223372036854775808 y
+9223372036854775807 (para almacenar cada valor se necesitan 8 bytes) Utilice el tipo de datos
smallmoney para almacenar valores del intervalo comprendido entre -2147483648 y 2147483647
(para almacenar cada valor se necesitan 4 bytes) Si se necesita un nuacutemero mayor de decimales utilice
el tipo de datos decimal
Datos especiales
Los datos especiales son aqueacutellos que no se ajustan a ninguna de las categoriacuteas de datos como los datos
binarios de caraacutecter Unicode de fecha y hora numeacutericos y de moneda
Microsoftreg SQL Servertrade 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 nuacutemero 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 funcioacuten DBTS Los datos de tipo timestamp no estaacuten
relacionados con la fecha ni la hora de una insercioacuten ni de un cambio en los datos Si desea
registrar automaacuteticamente en queacute 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 sinoacutenimo de timestamp
bit
Puede ser un 1 o un 0 Utilice el tipo de datos bit para representar los valores TRUE
(verdadero) o FALSE (falso) o YES o NO Por ejemplo un cuestionario para los clientes en el
que se pregunte si eacutesta es la primera visita del cliente puede almacenarse en una columna de
tipo bit
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 5
uniqueidentifier
Se trata de un nuacutemero hexadecimal de 16 bytes que hace referencia a un identificador
exclusivo global (GUID) El GUID es especialmente uacutetil cuando una fila debe ser uacutenica entre
otras muchas Por ejemplo utilice el tipo de datos uniqueidentifier en una columna con nuacutemeros
de identificacioacuten de los clientes para compilar una lista de clientes de una compantildeiacutea en varios
paiacuteses
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 soacutelo puede utilizarse para definir variables locales del
tipo table o el valor de retorno de una funcioacuten 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 mayuacutesculas seguidas de un nuacutemero de
proveedor de cinco cifras
Definir una clave principal
Defina una Clave Principalcpara exigir que se escriban valores uacutenicos 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 asiacute se reduce la necesidad de datos redundantes Una tabla soacutelo puede tener una
clave principal
Para definir una clave principal
1 En el diagrama de base de datos o en el Disentildeador de tablas haga clic en el selector de fila de
la columna de la base de datos que desee definir como clave principal Si desea seleccionar
varias columnas mantenga presionada la tecla CTRL mientras hace clic en los selectores de fila
para las otras columnas
2 Haga clic con el botoacuten secundario en el selector de fila para la columna y seleccione Establecer
clave principal En la ficha Iacutendices y claves de las paacuteginas de propiedades se crea
automaacuteticamente un iacutendice 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 comunicaraacute que las
relaciones existentes se eliminaraacuten automaacuteticamente como parte de este proceso
Una columna de clave principal se identifica por un siacutembolo de llave principal en el selector de fila
Si una clave principal consta de maacutes de una columna se permiten valores duplicados en una columna
pero cada combinacioacuten de valores de todas las columnas de la clave principal debe ser uacutenica
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 6
Coacutemo crear una relacioacuten de varios a varios entre tablas
Para crear una relacioacuten de varios a varios entre tablas
1 Abra un diagrama de base de datos
2 Agregue las tablas entre las que desea crear una relacioacuten de varios a varios
3 Cree una tercera tabla Para ello haga clic con el botoacuten secundario del mouse dentro del
diagrama de la base de datos y a continuacioacuten haga clic en Nueva tabla
Eacutesta se convertiraacute en la tabla de unioacuten
4 En el cuadro de diaacutelogo Elegir nombre escriba un nombre para la tabla
Por ejemplo la tabla de unioacuten entre la tabla de tiacutetulos 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 unioacuten
Puede agregar otras columnas a esta tabla igual que en cualquier otra tabla
6 En la tabla de unioacuten establezca la clave principal para que incluya todas las columnas de la clave
principal de las otras dos tablas
7 Defina una relacioacuten de uno a varios entre cada una de las dos tablas principales y la tabla de
unioacuten
Fundamentos de Programacioacuten con SQL Existen 3 tipos de instrucciones para el lenguaje en SQL
- Lenguaje de control de datos (DDL) Creacioacuten y eliminacioacuten de tipos de datos y objetos
CREATE Crear Objeto
ALTER Modificar los datos creados
DROP Eliminar el Objeto
- Lenguaje de control de datos (DCL) Se basa en los derechos que tiene el usuario sobre la
base da datos (Permisos)
GRANT Dar permisos a un usuario para efectuar determinadas
Instrucciones
DENY Eliminar el permiso que se ha concedido con el GRANT
REVOKE Eliminar todos los permisos
- Lenguaje de manipulacioacuten de datos (DML) Desarrollo de la programacioacuten de la base de
datos
SELECT
INSERT
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 7
UPDATE
DELETE
Elementos de sintaxis
Directivas de procesos por lotes
- GO Enviacutea 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 liacutenea --
- 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 nuacutemero
deben empezar por un signo alfabeacutetico pueden incluir el guion bajo (_) la arroba y la
almohadilla
Generalmente para las variables locales se usan + el nombre
EJEMPLO Contador
Para las variables totales se usan dos arrobas + el nombre Contador
EJEMPLO Error
Nombre indica una tabla o procedimiento temporal (Local)
Nombre Igual que el anterior pero global
Tipos de datos
- Numeacutericos
Enteros int tinyint smallint bigint
Decimales numeric decimal money smallmoney
Coma Flotante float real
- Fechas
datetime 0333 s
smalldatetime 1 minuto
- Caracteres
Ancho fijo char nchar
Ancho Variable varchar nvarchar
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 8
- Texto e Imagen
Text
Ntext
Rowversion
- Binario
Binary varbinary Valores tipo byte
Bit Un solo bit (1 o ninguno)
- Identificadores Uacutenicos
Representa un identificador global uacutenico (GUID)
Si queremos que no se repita el dato en la base de datos usamos este identificador
Uniqueidentifier
Operadores de SQL
Loacutegicos
AND OR NOT
De Comparacioacuten
= Igual
lt Menor
gt Mayor
ltgt Diferente
gt= Mayor o igual
lt= Menor o igual
Crear una Base de Datos Utilizando el Lenguaje SQL
Ejemplo
Para crear la base de datos es la siguiente opcioacuten database seguido del nombre de la Base de Datos
--Create database Itae
On primary
(Name= Itae _data Filename=C itaemdf size=10 maxsize=15 filegrowth=25)
Log On
(Name= Itae _log filename=C itaeldf size=4 maxsize=6 filegrowth=1MB)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 9
Despueacutes de la sentencia Create database Se especifica el nombre de la base de datos Un
nombre en la base de datos debe de ser uacutenico 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 ndash Especifica el tamantildeo del Archivo
Maxsize ndashEspecifica el tamantildeo maacuteximo que puede alcanzar el archive si se requiere espacio adicional
Filegrowth ndashEs la cantidad de espacio que se antildeade 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 procederaacute abrir la base de datos con el use nombre de la base de datos y luego el Use Go
Use master
Go
Luego se procederaacute abrir la tabla Sysdatabases y ahiacute se podraacute visualizar si la base de datos ah
sido creada
Select from Sysdatabases
Luego se procederaacute abrir la base de datos con el use nombre de la base de datos y luego el go
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 10
INSERCIOacuteN ELIMINACIOacuteN Y MODIFICACIOacuteN DE DATOS
- Insercioacuten 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 INSERTSELECT
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
- Creacioacuten de una tabla mediante SELECT INTO Creacioacuten 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
- Insercioacuten de datos parciales No introducir todos los datos solo meter datos en un
determinado campo o en varios pero no en toda la tabla
- Insercioacuten de datos mediante valores de columna predeterminados Se usa para no
dejar a las tablas con el valor null y asiacute 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
ELIMINACIOacuteN 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 = bdquoSERRA‟
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 11
- TRUNCATE TABLE Elimina todas las filas de la tabla (La tabla con su estructura no se
elimina soacutelo los datos de la tabla) No crea filas en el registro de transacciones con lo cual
es el meacutetodo maacutes raacutepido de borrar
TRUNCATE TABLE NombreTabla
Truncate Table emp
- Eliminacioacuten de filas basada en otras tablas
DELETE [ FROM ] NombreTabla | NombreVista
[ FROM OrigenTabla ] [ WHERE CondicionBusqueda ]
ACTUALIZACIONES
- Actualizacioacuten de filas basadas en datos de la propia tabla
UPDATE NombreTabla | NombreVista
SET NombreColumna = expresioacuten DEFAULT | NULL
USE Northwind
UPDATE products
SET unitprice = (unitprice 11 )
- Actualizacioacuten de filas basadas en otras tablas
UPDATE NombreTabla | NombreVista
SET NombreColumna = expresioacuten DEFAULT | NULL
FROM OrigenTabla
WHERE CondicionBusqueda
Ejercicios
Ejemplo 1
Abrir la base de datos creada anteriormente
--use Itae
se procederaacute abrir la base de datos
--go
Ejemplo 2
Crearemos la Tabla alumnos
--CREATE TABLE alumnos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 12
--(
--Idalumno VarChar(8)not null
--nom_alumno Varchar (50) Not Null
--ape_alumno Varchar (50) Not Null
--dir_alumno Varchar (50) Not Null
--tel_alumno VarChar(8)
--Email_alumno Varchar (50)
--)
Ejemplo 3
Para que se muestre la Tabla completa y con todos los registros se utiliza en Select para
seleccionar los campos from para seleccionar la tabla que se desea visualizar
--select from alumnos
Ejemplo 4
Ingreso de Datos a la Tabla alumnos se utiliza la sentencia insert into
--Insert into alumnos (idalumnonom_alumnoape_alumnodir_alumnotel_alumnoemail_alumno)Values
(Cli01jamesjamesVentanilla252511jazoon_28hotmailcom)
--Insert into alumnos (idalumnonom_alumnoape_alumnodir_alumnotel_alumnoemail_alumno)Values
(Cli01Juan CarlosOchoa ValverdeCoop Primavera Mz R1 Lote 16557-
2147jaz_28hotmailcom)
--Insert into alumnos (idalumnonom_alumnoape_alumnodir_alumnotel_alumnoemail_alumno) Values
(Cli02ArturoCapuntildeay LaquiJr Viru 406 Nordm8481-6507eternal_alcarisHotmailcom)
--Insert into alumnos (idalumnonom_alumnoape_alumnodir_alumnotel_alumnoemail_alumno) Values
(Cli03Luis AlexanderAguilar WongJr Hon 920-1090luis_hexenHotmailcom)
--Insert into alumnos (idalumnonom_alumnoape_alumnodir_alumnotel_alumnoemail_alumno) Values
(Cli04Fredy Richard Anaya JesusResidencial 539-0886fredyanayaHotmailcom)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 13
Ejemplo 5
Si deseaacuteramos Eliminar seria con la sentencia Delete
--delete from alumnos where nom_alumno=juan Carlos
Ejemplo 6
Para Actualizar se Utiliza la sentencia Update y Set
--Update alumnos set nom_alumno=diego ape_alumno=cueva dir_alumno=los olivos
tel_alumno=5402972 email_alumno=hades_278hotmailcom where idalumno=01
Ejemplo 7
Para Realizar una Consulta se utiliza el Where
--select from alumnos where idalumno=Cli01
Ejemplo 8
Si tambieacuten uno desea se puede poner en orden ascendente y descendente paraacute ello se utilizar el
ASC y Desc
--select from alumnos ORDER BY nom_alumno Asc
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 14
--select from alumnos ORDER BY nom_alumno desc
Ejemplo 9
Para eliminar un Objeto de la base de datos se utiliza la sentencia Drop
Eliminar de la base de Datos Itae la Tabla Alumnos
Drop table alumnos Elimina la Tabla Clientes con la sentencia Drop seguido del tipo de
objeto y finalizando el nombre
Drop database Itae Elimina la Base de Datos Itae con la sentencia Drop seguido del
tipo de objeto y finalizando el nombre
OPERADORES DE CONDICIOacuteN _ FILAS
En la expresioacuten loacutegica que especifica condicioacuten _ filas se puede utilizar ademaacutes de los operadores
relacioacuten o de comparacioacuten los siguientes operadores SQL
LIKE- Para comparacioacuten de cadenas de caracteres admite los comodines y _
OPERADOR LIKE
Cualquier nuacutemero de caracteres
_ Para un caraacutecter individual
[ ] Para un conjunto de caracteres que esteacute dentro del corchete
[ ^ ] Que el caraacutecter individual que no esteacute dentro del corchete
EJEMPLO LIKE lsquoeenrsquo Muestra todos los caracteres que acaben con een
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 15
EJEMPLO LIKE lsquoeenrsquo Muestra todos los caracteres que contengan een en ese orden
EJEMPLO LIKE lsquo_enrsquo Muestra todos los caracteres que contenga tres letras y acaben en en
EJEMPLO LIKE lsquo[CK ]rsquo Muestra todos los caracteres que empiecen por C o K
EJEMPLO LIKE lsquo[S-V]ingrsquo Nombre de 4 letras cuya primera letra estuviera entre S o V y acabe en
ing
EJEMPLO LIKE lsquoM[^c]rsquo Todos los que empiecen por M y segunda letra no sea una c No hay limite
de caracteres
BETWEEN- para seleccioacuten en base a un rango de valores Los valores pueden ser numeacutericos de
cana fechas y horas
In-Para seleccioacuten en base a un conjunto de valores los valores pueden ser numeacutericos de cadena
fechas y horas
Para estos ejemplos ah utilizado la base de datos con el nombre de Poseidoacuten y contiene las siguientes
tablas y campos
Ejemplo 10
Lista de productos cuyo nombre contenga la palabra vino
Use Poseidon
Go
Select from productos where nombreproducto like vino
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 16
Luego procedemos a ejecutar la aplicacioacuten
El siacutembolo representa a cualquier cadena de caracteres inclusive la cadena nula
Ejemplo 12
Lista de productos cuya primera letea empieza con la letra a
Select from productos where nombreproducto like [a]
Ejemplo 13
Lista de productos cuya primera letea empieza con la letra a y la tercera con la letra e
Select from productos where nombreproducto like [a][e]
Ejemplo 14
Lista de productos cuyo nombre empieza con cualquier caraacutecter que va en el rango de la M a la
T
Select from productos where nombreproducto like [m-t]
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 17
Ejemplo 15
Lista de productos cuyo nombre empieza con A ograve con cualquier caraacutecter en el rango que va de U
a la Ademaacutes el segundo caraacutecter no debe ser la letra r
Select from productos where nombreproducto like [^b-t][^r]
El Caraacutecter ^ significa incluir
El Caraacutecter representa cualquier cadena de caracteres inclusive la cadena nula
El Caraacutecter _ Representa cualquier caraacutecter 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 caraacutecter empiece con la letra e
Select from productos where nombreproducto like _e
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 18
Ejemplo 18
Lista de productos cuyo nombre empiece con C M Ograve R
Select from productos where nombreproducto like bdquo[cmr]
Ejemplo 19
Lista de productos cuyo nombre empiece con C M Ograve R El segundo Caraacutecter debe ser A
Select from productos where nombreproducto like bdquo[cmr] a
El comodiacuten [cmr] representa el conjunto de caracteres validos en la posicioacuten en la que
apareceraacute el comodiacuten
Ejemplo 20
Seleccionar todos los productos que termine con la letra Z
Select from productos where nombreproducto like z
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 19
Ejemplo 21
Mostrar todos los productos cuya cuarta letra sea A
Select from productos where nombreproducto like ___a
USO DEL OPERADOR BETWEEN
Permite seleccionar en base a un rango de valores
Ejemplo 22
Lista de productos cuyo precio se encuentra en el rango que va de 15 a 21 nuevos soles
Select from productos where preciounidad between 15 and 21
Ejemplo 23
Lista de productos cuyo nombre se encuentren en el rango de Cerveza y galletas
Select from productos where nombreproducto between cerveza and galletas
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 20
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 (londresPariacutesTokyo)
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 (preciounidadcantidad)019 as IGV
from [detalles de pedidos]
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 21
Ejemplo 27
Mostar los productos cuyo precio sea mayor a 40
Select from productos where Preciounidad gt 40
Ejemplo 28
Mostrar todos los datos de los Clientes ordenados por Ciudad
Select from clientes order by ciudad
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 22
Ejemplo 29
Mostrar todos los productos de la Categoriacutea 2
Select from productos where IdCategoriacutea=2
Ejemplo 30
Mostrar todos los pedidos realizados en la fecha 1996-06-05
Select from Pedidos where FechaPedido =1996-06-05
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 23
Ejemplo 31
Mostrar todos los pedidos mayores a la Fecha 1996-05-05
Select from Pedidos where FechaPedido gt 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 IdCategoriacutea no sea 3
Select from productos where IdCategoriacutealtgt 3
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 24
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 Categoriacutea (123)
Select from productos where IdCategoriacutea not in (1 2 3) order by IdProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 25
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
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 26
USO DE FUNCIONES
Podemos utilizar funciones para construir expresiones y generar columnas computadoras O condiciones
complejas
Funcioacuten de agregacioacuten
Son funciones que se utilizan para calcular valores en las tablas Si queremos usarlas
combinaacutendolas 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
expresioacuten HAVING Equivalente a where
Todos estos ejercicios han sido desarrollado con la base de datos Poseidoacuten
COUNT Cuenta los registros que hay en la consulta
Si pongo un valor dentro de la expresioacuten devolveraacute la cuenta de todos los
registros no nulos
Si pongo un asterisco contaraacute todos los registros aunque tengan valores
nulos
Select count () from Pedidos Valores con Nulos
Select count (FechaEnviacuteo) from Pedidos Valores sin nulos
AVG Realiza la media sobre la expresioacuten dada debe ser un tipo de dato
Int
Select avg(Preciounidad) from productos
MAX Saca el valor maacuteximo de una consulta
Select max (FechaPedido) from Pedidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 27
MIN Devuelve el valor miacutenimo 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 paiacutes Brasil mostrando el nuacutemero de los Factura con el paiacutes de
Destinatario Brasil
Select count () as [Numero de Facturas] PaiacutesDestinatario
Avg (Preciounidad) as [Precio Medio] from
Facturas group by PaiacutesDestinatario having PaiacutesDestinatario =Brasil
Ejemplo 39
Encontrar el precio maacutes alto mas bajo y la diferencia entre ambos de todos los productos con
IdCategoriacutea 2
Select IdCategoriacutea Max (Preciounidad) as [Precio mas alto] min(Preciounidad) as
[Precio mas Bajo] Max(Preciounidad) - min(Preciounidad) as [Diferencia entre Ambos]
from Productos group by IdCategoriacutea having IdCategoriacutea = 2
Ejemplo 40
Visualizar el nuacutemero de productos por Categoriacutea
Select IdCategoriacutea as [Nordm de Categoriacutea] Count (IdCategoriacutea) as [Nordm de Productos]
From Productos group by IdCategoriacutea
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 28
Ejemplo 41
Visualizar los clientes que vivan en las siguientes ciudades Londres Madrid y Barcelona
Select count () as [Nordm de personas] ciudad from clientes group by ciudad Having ciudad in
(londresMadridBarcelona) order by ciudad
Ejemplo 42
Lista de productos cuya venta allaacute sido mayor a 50000
Select IdProducto Monto=Sum (Preciounidad Cantidad) from [Detalles de pedidos] group
by IdProducto having Sum (Preciounidad Cantidad)gt50000 order by IdProducto
Ejemplo 43
Cuantos Clientes no tienen Fax
Select Count () as [Total de Clientes sin Fax] from clientes where fax is null
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 29
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
Funcioacuten Resultado
GETDATE() Retorna la fecha y hora del sistema
DATEADD(partefechanfecha) Retorna una nueva fecha antildeadiendo n
unidades de partefecha a fecha
DATEDIFF(parteFechafecha1fecha2) Retorna la diferencia en parteFecha entre
fecha1 y fecha2
DATENAME(partefechafecha) Retorna la cadena correspondiente a
partefecha en fecha
DATEPART(partefechafecha) Retorna el numero correspondiente a
partefecha y fecha
DAY(fecha) Retorna el numero correspondiente a la
parte del diacutea de fecha
MONTH(fecha) Retorna el numero correspondiente a la
parte del mes de fecha
YEAR(fecha) Retorna el numero correspondiente a la
parte del antildeo de fecha
GETUTCDATE() Retorna la fecha y hora del meridiano de
Greenwich
La siguiente tabla muestra los valores de partefecha que podemos utilizar
partefecha Abreviatura
Year Yy yyyy
Quarter Qq q
Month Mm m
Dayofyear Dy y
Day Dd d
Week Wk ww
weekday Dw
Hour Hh
minute Mi n
second Ss s
milisecond Ms
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 30
Getdate
Select getdate () Funcioacuten que recupera la fecha actual del sistema
Convert Cast
Convierten expliacutecitamente una expresioacuten de un tipo de datos en otro CAST y CONVERT
proporcionan funciones similares
Convert (Tipodedatosdestino Origen Estilo)
o Tipodedatosdestino Siempre ha de ser tipo caraacutecter
o Origen Puede ser tipo fecha numeacuterico o moneda
o Estilo Opcional Es un coacutedigo que indica el formato en el que devuelve la cadena de
caracteres
Sintaxis
Convert (TipoDato Dato)
Cast (Dato as TipoDato)
Ejemplo
declare n intpalabra nvarchar(10)
set n = 1
set palabra =Nuacutemero
print convert(nvarchar(2)n) + + palabra
print cast(n as nvarchar(2)) + + palabra
while (nlt11)
begin
print convert(nvarchar(2)n) + + palabra
print cast(n as nvarchar(2)) + + palabra
set n = n + 1
end
DateName
Devuelve una cadena de caracteres que representa la parte de la fecha especificada de la fecha
especificada
Los caacutelculos 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
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 31
Ejemplo 46
Select IdPedido DateName (week FechaPedido) as Numero de Semana from Pedidos where IdPedido
= 1035251
Ejemplo 47
Select IdPedido datename (weekday FechaPedido) as Diacutea De Semana from Pedidos where IdPedido =
10352 Martes
Horas
Ejemplo 48
Select IdPedido datename (mi FechaPedido) as Minutos from Pedidos where IdPedido = 10352
Ejemplo 49
Select DateName (minute getdate ()) as minutos
Ejemplo 50
Select DateName (Hh FechaPedido) as hora from Pedidos where IdPedido = 10352
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 32
Ejemplo 51
Select DateName (Hour getdate ()) as hora--gt18
Ejemplo 52
Select DateName (Hh getdate ()) as hora--gt18
DatePart
Devuelve la parte de la fecha u hora indicada Sintaxis
Datepart (Valor devolver fecha)
Ejemplo 53
Select IdPedido datepart (mm FechaPedido) as Mes from Pedidos where IdPedido = 10352
Ejemplo 54
Select Datepart (Hh getdate ()) as Hora--gt17
Ejemplo 55
Select Datepart (mi getdate ()) as Minutos--gt54
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 33
Nombres de Fechas
Day (fecha)
Devuelve UN INT equivale a Datepart
Select day (getdate ()) as diacutea--gt6 (diacutea en la que se ejecuta la sentencia)
Select Datepart (dd getdate ()) --gt6 (diacutea en la que se ejecuta la sentencia)
Select Month (getdate ()) --gt1 (Mes en la que se ejecuta la sentencia)
Select Datepart (mm getdate ()) --gt1 (Mes en la que se ejecuta la sentencia)
Select Year (getdate ()) --gt2008 (Antildeo en la que se ejecuta la sentencia)
Ejemplo 56
Select year (FechaPedido) as Antildeo from Pedidos where IdPedido = 10352
Ejemplo 57
Select datediff (yyyy FechaPedido getdate()) as Dia from Pedidos where IdPedido = 10352
DateAdd
DateAdd (Datepart number date)
Antildeade un nuacutemero a la fecha puesta
DatePart es el formato de lo que queremos antildeadir
Number es el nuacutemero que queremos incrementar la fecha expuesta
Select convert (datetime1-1-02)
Select dateadd (dd 71-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 comparacioacuten y el tipo de dato
que nos devolveraacute antildeos diacuteas minutos etc
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 34
Ejemplo 58
Select datediff (yyyy FechaPedido getdate ()) as Dia from Pedidos where IdPedido = 10352
Ejercicios de funciones de Fecha
Ejemplo 59
Lista de pedidos emitidos en febrero de 1996
Select from Pedidos where month (FechaPedido) =2 and year (FechaPedido) =1996
Ejemplo 60
Lista de Pedidos mostrando la diferencia en diacuteas entre la fecha del pedido y la fecha de Envioacute
Select IdPedido FechaPedido FechaEnviacuteo diacuteas =datediff (day FechaPedido FechaEnviacuteo) from
pedidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 35
Ejemplo 61
Genere un listado de pedidos en el que la fecha del pedido se muestre en el formato nombre del
diacutea diacutea de mes antildeo
Select IdPedido FechaPedido Fecha=datename (dw IdPedido)+ + str (datepart (dd
IdPedido) 2)+ de +datename (mm IdPedido)+ de +str (datepart (yy IdPedido) 4) from
pedidos
Ejemplo 62
Mostrar de la tabla pedidos la fecha de pedidos en fecha corta
Select IdPedido convert (varchar (30) FechaPedido 106) as [Fecha Corta] from pedidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 36
FUNCIONES MATEMATICAS
ABS
Es el valor Absoluto
Select ABS (-4) as VALOR ABSOLUTO--gt4
CEILING
Devuelve el entero maacutes pequentildeo mayor o igual que la expresioacuten numeacuterica dada
Select CEILING (54) as CEILING--6
FLOOR
Devuelve el entero maacutes grande menor o igual que la expresioacuten numeacuterica dada
Select FLOOR (5) as FLOOR--gt5
POWER
Devuelve el valor de la expresioacuten indicada elevada a la potencia especificada
Select POWER (3 2) as 3 ELEVADO A 2--gt9
RAND
Devuelve un valor float aleatorio de 0 a 1
Las llamadas repetitivas de RAND() en una uacutenica consulta produciraacuten el mismo valor
Select RAND(6) as ALEATORIO--071368515806921451
Select RAND(6) as ALEATORIO--071368515806921451
Select RAND(4) as ALEATORIO--07136478921266981
Rand sobre los milisegundos actuales
Select RAND(DATEPART(msGETDATE())) as ALEATORIO--gt071443047691954253
Select RAND(999999999)--gt068504257551273573
ROUND
Devuelve una expresioacuten numeacuterica redondeada a la longitud o precisioacuten especificada
Round (Nuacutemero Redondeo del Nuacutemero)
ROUND siempre devuelve un valor Si length es un valor negativo y mayor que el nuacutemero de
diacutegitos anteriores al separador decimal ROUND devuelve 0
Select ROUND (1234567 2) --gt1234600
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 37
Select ROUND (1234567-2) --gt1000000
Select ROUND (1234567 0) --gt1230000
Select ROUND (1234567-3) ---gt0
SIGN
Devuelve el signo positivo (+1) cero (0) o negativo (-1) de la expresioacuten especificada
Dice el valor negativo positivo o neutro (0) del valor especificado
Select SIGN (-3) --gt-1
Select SIGN (3) --gt1
Select SIGN (0) --gt0
SQUARE
Devuelve el cuadrado de la expresioacuten especificada
Select SQUARE (4) as bdquoCuadrado‟--gt160
SQRT
Devuelve la raiacutez cuadrada de la expresioacuten especificada
Select SQRT (4) as [RAIZ CUADRADA] --gt20
FUNCIONES DE CADENA
ASCII
Devuelve el coacutedigo ASCII del caraacutecter maacutes a la izquierda de una expresioacuten de caracteres
Select ASCII(A)--gt65
Select ASCII(a)--gt97
Select ascii(aula)--gt97
CHAR
Una funcioacuten de cadena que convierte un coacutedigo ASCII int en un caraacutecter
select char(65)--gtA
select char(97)--gta
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 38
CHARINDEX
Devuelve la posicioacuten inicial de la expresioacuten especificada en una cadena de caracteres
CHARINDEX (expression1 expression2 [ start_location])
Argumentos
expression1
Es una expresioacuten que contiene la secuencia de caracteres que se desea buscar
Expression1 es una expresioacuten del tipo de cadenas cortas de caracteres
Expression2
Es una expresioacuten normalmente una columna
en la que se busca la cadena especificada
Expression2 es de la categoriacutea del tipo de datos cadena de caracteres
start_location
Es la posicioacuten del caraacutecter de expression2 en el que se empieza la buacutesqueda de expression1
Si no se especifica start_location es un nuacutemero negativo o es cero
la buacutesqueda empieza al principio de la cadena expression2
Si expression1 no se encuentra en expression2 CHARINDEX devuelve 0
Si alguno de los dos es null devuelve null
Select charindex (ciemurcielago) --gt4
Select charindex (ciemurcielago 2) --gt4
Select charindex (ciemurcielago 5) --gt0
Select charindex (ciemurcielago-6) --gt4
LEFT
Devuelve la parte de una cadena de caracteres que comienza en un nuacutemero de caracteres
especificado a partir de la izquierda
Select left (murcielago5) --gtmurci
RIGHT
Devuelve la parte de una cadena de caracteres que
Comienza en el nuacutemero de caracteres especificado
En integer_expression a partir de la derecha
Select right (hola que tal5) --gte tal
LEN
Cuenta el nuacutemero de caracteres que se incluyen en la cadena
Select len (murcieacutelago) --gt10
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 39
LOWER
Convierte a Minuacutesculas la cadena especificada
Select lower (MurcIELaGO) as [minusculas] --gtmurcielago
UPPER
Convierte a Mayuacutesculas la cadena especificada
Select upper (murcielago) as [MAYUSCULAS] --gtMURCIELAGO
RTRIM y LTRIM
Elimina los espacios que existen a la izquierda y a la derecha respectivamente
Select Rtrim ( murcieacutelago ) AS [SIN ESPACIOS] --gtmurcieacutelago
Select Ltrim ( murcieacutelago ) AS [SIN ESPACIOS] --gtmurcieacutelago
Select ltrim(rtrim( hola ))+
REPLACE
Reemplaza por una tercera expresioacuten todas las apariciones
de la segunda expresioacuten de cadena proporcionada en la primera expresioacuten de cadena
Select replace (hola que tal estasaA) --gtholA que tAl estAs
Select replace (buenos dias que tal estasuentildentildentilde) --gtbntildentildentildenos diasqntildentildentilde tal estas
SPACE
Coloca el nuacutemero de espacios que se le indiquen para entre una cadena de caracteres
Select hola+space(5)+que tal--gthola que tal
SUBSTRING
Devuelve parte de una expresioacuten de caracteres binaria de texto o de imagen
Sintaxis
SUBSTRING (Expresioacuten Comienzo Duracioacuten)
Argumentos
Expresioacuten
Es una cadena de caracteres cadena binaria texto imagen
Columna o expresioacuten que incluye una columna
No deben usarse expresiones que incluyan funciones de agregado
Start
Es un entero que especifica el punto en que comienza la subcadena
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 40
Length
Es un entero que especifica la longitud de la subcadena
(El nuacutemero de caracteres o bytes que se devuelven)
Select substring (murcielago 3 5) --gtrciel
Select substring (murcielago 3 len (murcielago)) --gtrciel
REVERSE
Devuelve invertida una expresioacuten de caraacutecter
Select reverse (hola)
REPLICATE
Repite una expresioacuten de caracteres un nuacutemero especificado de veces
Select replicate (murcielago 5)
Replicate replicate replicate replicate replicate
STUFF
Elimina el nuacutemero de caracteres especificados e insertados
Otro conjunto de caracteres en un punto de inicio indicado
Select STUFF (Murcieacutelago 2 3 ijklmn) Mijklmnielago
FUNCIONES DE SISTEMA
- APP_NAME () Devuelve el nombre de la aplicacioacuten actual
Select app_name () as [Nombre de la aplicacion]
- DATALENGTH (Expresioacuten) Devuelve un entero que es numero de bites necesarios para
representar esa expresioacuten int
Select datalength (Ninoni) as [Numero de bites]
- ISDATE (Expresioacuten) Dice si la expresioacuten es una fecha o no Devuelve 1 si la expresioacuten es
una fecha y 0 si no es una fecha
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 41
Select isdate (121001) as [Validacioacuten Fecha]
- ISNUMERIC (Expresion) Dice si la expresioacuten es un numero o no Devuelve 1 si la
expresioacuten es un nuacutemero y 0 si la expresioacuten no es nuacutemero
Select isnumeric (ddd) as [Validacion Numero]
- ISNULL (Expresioacuten ExpresionDevuelta) Si la expresioacuten es nula te devuelve la Expresioacuten
Devuelta y si no devuelve la primera Expresioacuten
Select isnull (nullNo nulo) as [Es Nulo]
- PARSENAME (bdquoNombreObjeto‟ ParteNombre)
ParteNombre es un valor de tipo Int que coge unos determinados valores del
NombreObjeto
1 Objeto
2 Propietario
3 Base de Datos
4 Servidor
Select parsename (saposeidondbopedidos1) as [Parte Expresioacuten]
Select parsename (saposeidondbopedidos 2) as [Parte Expresioacuten]
Select parsename (saposeidondbopedidos3) as [Parte Expresioacuten]
Select parsename ( saposeidondbopedidos 4) as [Parte Expresioacuten]
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 42
- SYSTEM_USER Devuelve el usuario del sistema actual
Depende de la autentificacioacuten con la que te hayas conectado
Select system_user as [Usuario conectado]
- USER_NAME() Devuelve el nombre del usuario actual
Select user_name ()
- COALESCE (expresioacuten1 expresioacuten2 )
Devuelve la primera expresioacuten no NULL
Si todos son NULL devuelve NULL
Select coalesce (PrecioUnidad Cantidad) from [detalles de Pedidos] Si el PrecioUnidad es nulo
devolveraacute la Cantidad y si los dos son nulos devolveraacute un campo Null
PROCEDIMIENTOS PARA AGRUPAR Y RESUMIR DATOS
En el examen de certificacioacuten 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 usaraacute la base de datos indicada Ejemplo Ponemos
en el analizador de consultas lo siguiente
Use Northwind
Select from [Order Details]
[Order Details]
Esta tabla perteneciente a la Northwind se encarga de manejar los pedidos
Order Id Nordm de Pedido
Producto Id Nordm de Producto
Ambos campos son Primary Key con lo que no puede haber una combinacioacuten de ambos campos que sea
igual
OrderId ProductId
1 A
1 B
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 43
1 C
2 A
3 C
Es decir en este caso no podriacutea existir una nueva combinacioacuten ldquo1 Ardquo o ldquo2 Ardquo
Quantity Es la cantidad del producto del pedido
ROLLUP
Se usa para presentar resuacutemenes de datos A de usarse junto con la clausula group by lo que hace es
realizar un resumen de los campos incluidos en el rollup
Ejemplo 63
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
Group by ProductID OrderID
with Rollup
Order by ProductID OrderID
Este ejemplo suma todas las cantidades y mediante
rollup muestra una fila con la suma de todas las
cantidades de cada producto y ademaacutes otra fila con la
suma de todas las cantidades de todos los productos El
resultado de este ejemplo seriacutea el que muestra la
imagen
Ejemplo 64
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
where orderid lt 10250
Group by ProductID OrderID
with Rollup
Order by ProductID OrderID
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 44
CUBE
Al igual que Rollup realiza resuacutemenes de campos agrupados Pero en este caso muestra un resumen con
cada combinacioacuten posible de los campos agrupados
Ejemplo 65
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
where orderid lt 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 combinacioacuten posible entre el
productid y el orderid
GROUPING
Indica si el resultado de un campo es el que hay en la propia tabla o se ha introducido mediante una
claacuteusula de resumen es decir para saber por ejemplo si un ldquoNullrdquo 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 lt 10250 Group by ProductID
OrderID with Cube Order by ProductID OrderID
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 45
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
Ponieacutendole un alias al
grouping saldriacutea el nombre
de columna que le
indiquemos
COMPUTE
Realiza un resumen en una columna aparte con el resultado de la funcioacuten de agregado indicada Su
formato seriacutea Compute funcioacuten(campo) No se puede utilizar en aplicaciones cliente servidor es una
clausula meramente informativa Tampoco se le pueden poner alias a los resuacutemenes
Ejemplo 67
Select Productid Orderid Quantity From [Order Details] order by ProductID Orderid compute
Sum(quantity)
Vemos que muestra la
columna con la suma
total de todas las
cantidades
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 46
Ejercicios de ROLLUP GROUPING y CUBE
Ejemplo 68
Realizar una consulta que resuma la cantidad de artiacuteculos pedidos por cada iacutendice de producto y
nuacutemero de pedido Realizando un caacutelculo acumulativo
select productid as [PRODUCTO] orderid as [Nordm PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] group by productid orderid with rollup order by productid orderid
PRODUCTO Nordm 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
hellip
Ejemplo 69
Modificacioacuten al ejercicio anterior Realizar el mismo resumen pero uacutenicamente para el producto
cuyo id es 50
select productid as [PRODUCTO] orderid as [Nordm PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] where productid = 50 group by productid orderid with rollup order by productid ordered
PRODUCTO Nordm 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
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 47
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 modificacioacuten 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 [Nordm PEDIDO] grouping(orderid) as [GRUPO PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] where productid = 50 group by Productidorderid with cube order by productidorderid
PRODUCTO GRUPO PRODUCTO Nordm PEDIDO GRUPO PEDIDO SUMA TOTAL
----------- -------------- ----------- ------------ -----------
NULL 1 NULL 1 235
NULL 1 10350 0 15
NULL 1 10383 0 15
NULL 1 10429 0 40
NULL 1 10465 0 25
NULL 1 10637 0 25
NULL 1 10729 0 40
NULL 1 10751 0 20
NULL 1 10920 0 24
NULL 1 10948 0 9
NULL 1 11072 0 22
50 0 NULL 1 235
50 0 10350 0 15
50 0 10383 0 15
50 0 10429 0 40
50 0 10465 0 25
50 0 10637 0 25
50 0 10729 0 40
50 0 10751 0 20
50 0 10920 0 24
50 0 10948 0 9
50 0 11072 0 22
(22 filas afectadas)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 48
Obtencioacuten de resuacutemenes 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 maacutes columnas y
luego efectuar alguna operacioacuten de resumen sobre cada grupo asiacute generado
La diferencia con GROUP BY es que permite mostrar informacioacuten mas detallada de cada grupo
Ejemplo 71
Lista de pedidos que muestre por coacutedigo de pedido la cantidad de productos vendidos por cada uno
de ellos
select Idpedidoidproductopreciounidadcantidad[Sub Total]=sum(PreciounidadCantidad) from
[detalles de pedidos] group by Idpedidoidproductopreciounidadcantidad order by IdPedido compute
sum(Cantidad) by IdPedido
EJERCICIOS CON COMPUTE
Ejemplo 72
Generar un resumen de subtotales en una consulta que devuelva el nuacutemero de pedido la cantidad
pedida para todos los orderid 11070
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 49
Select Orderid as [Nordm PEDIDO] Quantity AS [CANTIDAD] From [Order Details] where orderid gt= 11070 order by Orderid compute Sum(quantity) by orderid compute sum(quantity)
Nordm PEDIDO CANTIDAD
----------- --------
11070 40
11070 20
11070 30
11070 20
sum
===========
110
sum
===========
110
(6 filas afectadas)
Ejemplo 73
Generar un resumen con calculo de subtotales similar al anterior pero para los orderid 11075 y
11076
Select Orderid as [Nordm PEDIDO] Quantity as [CANTIDAD] From [Order Details] where orderid = 11075 or orderid = 11076 order by Orderid compute Sum(quantity) by ordered Nordm PEDIDO CANTIDAD ----------- -------- 11075 10 11075 30 11075 2 sum =========== 42 Nordm PEDIDO CANTIDAD ----------- -------- 11076 20 11076 20 11076 10
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 50
sum =========== 50 (8 filas afectadas)
Ejemplo 74
Modificacioacuten al ejercicio anterior Agregar la cantidad total y la cantidad promedio al final del
informe
Select Orderid as [Nordm 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)
Nordm PEDIDO CANTIDAD
----------- --------
11075 10
11075 30
11075 2
sum
===========
42
Nordm PEDIDO CANTIDAD
----------- --------
11076 20
11076 20
11076 10
sum
===========
50
sum
===========
92
avg
===========
15
(10 filas afectadas)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 51
Ejemplo 75
Seleccionar de forma agrupada por tipo todos los tipos la suma de los precios y la suma del
anticipo de la tabla tiacutetulos
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 199900 50000000
business 119500 50000000
business 29900 101250000
business 199900 50000000
sum
=====================
549200
avg
=====================
62812500
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
mod_cook 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
avg
=====================
75000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
popular_comp 229500 70000000
popular_comp 200000 80000000
popular_comp NULL NULL
sum
=====================
429500
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 52
avg
=====================
75000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
psychology 215900 70000000
psychology 109500 22750000
psychology 70000 60000000
psychology 199900 20000000
psychology 79900 40000000
sum
=====================
675200
avg
=====================
42550000
(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 ademaacutes 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 199900 50000000
business 119500 50000000
business 29900 101250000
business 199900 50000000
sum
=====================
549200
sum
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 53
=====================
251250000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
mod_cook 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
popular_comp 229500 70000000
popular_comp 200000 80000000
popular_comp NULL NULL
sum
=====================
429500
sum
=====================
150000000
(30 filas afectadas)
Ejemplo 77
Generar un informe que muestre la suma de los precios de los libros de psicologiacutea 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 109500
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 54
psychology 0736 70000
psychology 0736 199900
psychology 0736 79900
sum
=====================
459300
TIPO CODIGO EDITOR PRECIO
------------ ------------- ---------------------
psychology 0877 215900
sum
=====================
215900
(7 filas afectadas)
Ejemplo 78
Generar un informe que obtenga la suma de los precios de todos los libros de psicologiacutea asiacute como la
suma de los precios de los libros de psicologiacutea 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 109500
psychology 0736 70000
psychology 0736 199900
psychology 0736 79900
sum
=====================
459300
TIPO CODIGO EDITOR PRECIO
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 55
------------ ------------- ---------------------
psychology 0877 215900
sum
=====================
215900
sum
=====================
675200
(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 199900 0000
mod_cook 0877 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO CODIGO EDITOR PRECIO ANTICIPO
------------ ------------- --------------------- ---------------------
trad_cook 0877 119500 40000000
trad_cook 0877 209500 70000000
trad_cook 0877 149900 80000000
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 56
sum
=====================
478900
sum
=====================
190000000
(9 filas afectadas)
Ejemplo 80
Generar un informe que muestre todos los tiacutetulos precio y anticipo de aquellos tiacutetulos que tengan
un precio superior a 20 doacutelares Ofreceraacute tambieacuten la suma total del precio y del anticipo
Select title as [TITULO] price as [PRECIO] advance as [ANTICIPO] From titles where price gt 20 order by title compute sum(price) compute sum(advance)
TITULO PRECIO ANTICIPO
-------------------------------------------------------------------------------- --------------------- -------------
--------
But Is It User Friendly 229500 70000000
Computer Phobic AND Non-Phobic Individuals Behavior Variations 215900
70000000
Onions Leeks and Garlic Cooking Secrets of the Mediterranean 209500
70000000
sum
=====================
654900
sum
=====================
210000000
(5 filas afectadas)
Ejemplo 81
Generar un informe que muestre el precio el tipo y el nuacutemero de editor de la tabla titles de todos
aquellas obras que pertenezcan la categoriacutea de ldquobusinessrdquo Ademaacutes apareceraacute la suma total de
precios y el maacuteximo pub_id de esta seleccioacuten
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 57
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 29900 0736
business 199900 1389
business 199900 1389
business 119500 1389
sum
=====================
549200
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 Mostraraacute la suma de los precios y los anticipos por tipo y luego calcularaacute 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 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
trad_cook 209500 70000000
trad_cook 119500 40000000
trad_cook 149900 80000000
sum
=====================
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 58
478900
sum
=====================
190000000
sum
=====================
708700
sum
=====================
340000000
(11 filas afectadas)
Eliminacioacuten 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 iquestA que precio se ah vendido los productos
Select IdProducto Preciounidad from [Detalles de pedidos] order by IdProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 59
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 mayoriacutea de las consultas que se hacen en una base de datos requiere que se lean datos procedentes
de dos oacute maacutes tablas
INNER JOIN- son las filas que satisfacen la condicioacuten de la combinacioacuten
En la siguiente sentencia SQL enlaza 2 tablas la tabla clientes y la tabla pedidos en esta ejemplo me
muestra los campos nombre compantildeiacutea y el campo idpedido
La uacutenica condicioacuten es que las 2 tablas tengan un campo en comuacuten
Ejemplo 84
select clientesNombreCompantildeiacuteapedidosidpedido from clientes inner join pedidos on
clientesidcliente=pedidosidcliente
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 60
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 pedidosIdPedido pedidosIdCliente 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 pedidosIdPedido pedidosIdCliente order
by pedidos IdPedido
CROSS JOIN
Un Cross Join es la consulta correlacionada que combine cada una de las filas de una de las tablas con
todas las filas de la otra tabla
No es necesario que exista una columna en comuacuten para ejecutar el Cross Join
Ejemplo 86
La siguiente consulta combina cada una de las filas de la tabla categoriacuteas con cada una de las filas de la
tabla productos
select productosNombreProductocategoriasNombrecategoria from productos cross join categorias
order by productosNombreProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 61
Ejercicios de consultas Muacuteltiples
Ejemplo 87
Mostrar el pedidos completo con el id=10248
Select pedidosIdPedido pedidosIdCliente
Total=sum ([detalles de pedidos]Preciounidad[detalles de pedidos]Cantidad)
From [detalles de pedidos] inner join pedidos on
[Detalles de pedidos]IdPedido=pedidosIdPedido where pedidosIdPedido=10248
Group by pedidosIdPedido pedidosIdCliente
Ejemplo 88
1 Mostrar la cantidad de productos por categoriacutea
Select CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
[Total de Producto]=sum (UnidadesEnExistencia) from Categoriacuteas inner join
Productos on CategoriacuteasIdCategoriacutea=productosIdCategoriacutea
Group by CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 62
Ejemplo 89
Calcular cuantas ventas tiene cada uno de los vendedores
Select empleadosIdEmpleado empleadosNombre empleadosApellidos
[Total de ventas]=count (pedidosIdPedido) from empleados
Inner join Pedidos on empleadosIdEmpleado=pedidosIdEmpleado
Group by empleadosIdEmpleado empleadosNombre empleadosApellidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 63
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 despueacutes saca la de Plantilla
Recomendaciones a la hora de usar las combinaciones
Combinar tablas en funcioacuten de claves principales y externas
Limite el nuacutemero de tablas de las combinaciones
Select Apellido
Oficio as
OFICIOFUNCION
salario from emp
UNION
Select Apellido
Funcion Salario from
Plantilla
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 64
SUBCONSULTAS
Es una SELECT anidada en una instruccioacuten INSERT DELETE SELECT o UPDATE
Como una tabla derivada
Select eemp_no as Numero
eApellido
from (select emp_no apellido from emp) as e
Como una expresioacuten
Select emp_no as [Numero]
Apellido
Salario
(select avg(Salario) from emp)
as Diferencia
from emp
where oficio = Empleado
Para correlacionar datos
- Expresioacuten dinaacutemica que cambia en cada fila de una consulta externa
- Es una combinacioacuten entre la subconsulta y la fila de la consulta externa
- Dividen consultas complejas con dos o maacutes consultas simples relacionadas
Subconsulta correlacionada
Select apellido oficiodept_no
from emp as e
where 20 lt
(select dept_no from dept as d
where edept_no = ddept_no
and ddnombre = Ventas)
SUBCONSULTAS
1 Mostrar el numero de empleado el apellido y la fecha de alta del empleado mas antiguo de la
empresa
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 65
SELECT emp_noapellido
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_noapellido
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 Jimeacutenez
select apellido oficio from emp where
oficio = (select oficio from emp where apellido = JIMENEZ)
4 Queremos saber el apellido oficio salario y nuacutemero 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 gt (select max (salario) from
emp where dept_no = 30)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 66
5 Mostrar el apellido la funcioacuten sala o departamento de todos los empleados que trabajen en la
empresa
select eApellido eOficio as [Cargo en Empresa] ddnombre as [Oficina]
from emp as e
inner join dept as d
on edept_no = ddept_no
union
select pApellido pfuncion snombre
from plantilla as p
inner join sala as s
on phospital_cod = shospital_cod
and psala_cod = ssala_cod
union
select dApellido despecialidad hnombre
from doctor as d
inner join hospital as h
on dhospital_cod = hhospital_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 = lsquoventasrsquo))
order by 2
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 67
8 Mostrar los empleados que tienen mejor salario que la media de los directores no incluyendo al
presidente
Select from emp where salario gt
(select avg (salario) from emp where oficio = DIRECTOR)
and oficio ltgt PRESIDENTE
9 Mostrar el apellido funcioacuten salario y coacutedigo 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 = lsquoENFERMEROrsquo or
funcion = lsquoENFERMERArsquo) and hospital_cod = (select hospital_cod from hospital where nombre =
lsquoSAN CARLOSrsquo)
Select apellido funcion salario hospital_cod from plantilla where
funcion in (ENFERMEROENFERMERA)
and hospital_cod = (select hospital_cod from hospital
where nombre = SAN CARLOS)
10 Visualizar los datos de los hospitales que tienen personal (Doctores) de cardiologiacutea
Select from hospital where hospital_cod in (select hospital_cod from doctor where
especialidad = lsquoCardiologiacutearsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 68
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 = lsquoPROVINCIALrsquo or
nombre= lsquoGENERALrsquo)
12 Mostrar el apellido de los enfermos que nacieron antes que el Sentildeor Miller
Select apellido from enfermo where Fecha_nac lt (select fecha_nac from enfermo where
apellido = lsquoMILLER Brsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 69
Simulacion de una clausula JOIN
Vamos a mostrar los oficios que estaacuten en maacutes de un departamento
Select distinct e1oficio from emp as e1
where e1oficio in(Select e2oficio from emp as e2
where e1dept_no ltgt e2dept_no)
Se debe utilizar antes una combinacioacuten que una subconsulta la combinacioacuten seriacutea asi dando los
mismos resultados
Select distinct e1Oficio from emp as e1
inner join emp as e2
on e1oficio = e2oficio
where e1dept_no ltgt e2dept_no
Estos son los dos oficios que estaacuten en
maacutes de un departamento
Subconsulta para simular una clausula HAVING
select e1apellidoe1oficio e1salario
from emp as e1
where e1salario gt
(select avg(e2salario) from emp as e2
where e1oficio = e2oficio)
Esta es la consulta utilizando el HAVING que es la que deberiacuteamos utilizar antes que una
subconsulta de simulacioacuten HAVING
SELECT e1apellidoe1oficio e1salario
FROM emp AS e1
INNER JOIN emp AS e2
ON e1oficio = e2oficio
GROUP BY e1oficio e1salarioe1apellido
HAVING e1salario gt AVG (e2salario)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 70
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 4
Datos numeacutericos aproximados
Los datos numeacutericos aproximados (coma flotante) constan de datos que se almacenan con tanta
precisioacuten como permite el sistema de numeracioacuten binario Los datos numeacutericos aproximados se
almacenan mediante los tipos de datos float y real de SQL Server Por ejemplo dado que en notacioacuten
decimal la fraccioacuten un tercio se expresa como 0333333 (hasta el infinito) este valor no se puede
representar con total precisioacuten mediante los datos decimales aproximados Por lo tanto el valor
recuperado de SQL Server puede no coincidir exactamente con el que se almacenoacute originalmente en la
columna Otros ejemplos de aproximaciones numeacutericas son los valores de coma flotante que acaban en
03 06 y 07
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 Microsoftreg SQL Servertrade 2005 Los
datos de moneda pueden almacenarse con una precisioacuten maacutexima de cuatro decimales Utilice el tipo de
datos money para almacenar valores del intervalo comprendido entre -9223372036854775808 y
+9223372036854775807 (para almacenar cada valor se necesitan 8 bytes) Utilice el tipo de datos
smallmoney para almacenar valores del intervalo comprendido entre -2147483648 y 2147483647
(para almacenar cada valor se necesitan 4 bytes) Si se necesita un nuacutemero mayor de decimales utilice
el tipo de datos decimal
Datos especiales
Los datos especiales son aqueacutellos que no se ajustan a ninguna de las categoriacuteas de datos como los datos
binarios de caraacutecter Unicode de fecha y hora numeacutericos y de moneda
Microsoftreg SQL Servertrade 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 nuacutemero 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 funcioacuten DBTS Los datos de tipo timestamp no estaacuten
relacionados con la fecha ni la hora de una insercioacuten ni de un cambio en los datos Si desea
registrar automaacuteticamente en queacute 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 sinoacutenimo de timestamp
bit
Puede ser un 1 o un 0 Utilice el tipo de datos bit para representar los valores TRUE
(verdadero) o FALSE (falso) o YES o NO Por ejemplo un cuestionario para los clientes en el
que se pregunte si eacutesta es la primera visita del cliente puede almacenarse en una columna de
tipo bit
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 5
uniqueidentifier
Se trata de un nuacutemero hexadecimal de 16 bytes que hace referencia a un identificador
exclusivo global (GUID) El GUID es especialmente uacutetil cuando una fila debe ser uacutenica entre
otras muchas Por ejemplo utilice el tipo de datos uniqueidentifier en una columna con nuacutemeros
de identificacioacuten de los clientes para compilar una lista de clientes de una compantildeiacutea en varios
paiacuteses
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 soacutelo puede utilizarse para definir variables locales del
tipo table o el valor de retorno de una funcioacuten 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 mayuacutesculas seguidas de un nuacutemero de
proveedor de cinco cifras
Definir una clave principal
Defina una Clave Principalcpara exigir que se escriban valores uacutenicos 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 asiacute se reduce la necesidad de datos redundantes Una tabla soacutelo puede tener una
clave principal
Para definir una clave principal
1 En el diagrama de base de datos o en el Disentildeador de tablas haga clic en el selector de fila de
la columna de la base de datos que desee definir como clave principal Si desea seleccionar
varias columnas mantenga presionada la tecla CTRL mientras hace clic en los selectores de fila
para las otras columnas
2 Haga clic con el botoacuten secundario en el selector de fila para la columna y seleccione Establecer
clave principal En la ficha Iacutendices y claves de las paacuteginas de propiedades se crea
automaacuteticamente un iacutendice 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 comunicaraacute que las
relaciones existentes se eliminaraacuten automaacuteticamente como parte de este proceso
Una columna de clave principal se identifica por un siacutembolo de llave principal en el selector de fila
Si una clave principal consta de maacutes de una columna se permiten valores duplicados en una columna
pero cada combinacioacuten de valores de todas las columnas de la clave principal debe ser uacutenica
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 6
Coacutemo crear una relacioacuten de varios a varios entre tablas
Para crear una relacioacuten de varios a varios entre tablas
1 Abra un diagrama de base de datos
2 Agregue las tablas entre las que desea crear una relacioacuten de varios a varios
3 Cree una tercera tabla Para ello haga clic con el botoacuten secundario del mouse dentro del
diagrama de la base de datos y a continuacioacuten haga clic en Nueva tabla
Eacutesta se convertiraacute en la tabla de unioacuten
4 En el cuadro de diaacutelogo Elegir nombre escriba un nombre para la tabla
Por ejemplo la tabla de unioacuten entre la tabla de tiacutetulos 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 unioacuten
Puede agregar otras columnas a esta tabla igual que en cualquier otra tabla
6 En la tabla de unioacuten establezca la clave principal para que incluya todas las columnas de la clave
principal de las otras dos tablas
7 Defina una relacioacuten de uno a varios entre cada una de las dos tablas principales y la tabla de
unioacuten
Fundamentos de Programacioacuten con SQL Existen 3 tipos de instrucciones para el lenguaje en SQL
- Lenguaje de control de datos (DDL) Creacioacuten y eliminacioacuten de tipos de datos y objetos
CREATE Crear Objeto
ALTER Modificar los datos creados
DROP Eliminar el Objeto
- Lenguaje de control de datos (DCL) Se basa en los derechos que tiene el usuario sobre la
base da datos (Permisos)
GRANT Dar permisos a un usuario para efectuar determinadas
Instrucciones
DENY Eliminar el permiso que se ha concedido con el GRANT
REVOKE Eliminar todos los permisos
- Lenguaje de manipulacioacuten de datos (DML) Desarrollo de la programacioacuten de la base de
datos
SELECT
INSERT
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 7
UPDATE
DELETE
Elementos de sintaxis
Directivas de procesos por lotes
- GO Enviacutea 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 liacutenea --
- 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 nuacutemero
deben empezar por un signo alfabeacutetico pueden incluir el guion bajo (_) la arroba y la
almohadilla
Generalmente para las variables locales se usan + el nombre
EJEMPLO Contador
Para las variables totales se usan dos arrobas + el nombre Contador
EJEMPLO Error
Nombre indica una tabla o procedimiento temporal (Local)
Nombre Igual que el anterior pero global
Tipos de datos
- Numeacutericos
Enteros int tinyint smallint bigint
Decimales numeric decimal money smallmoney
Coma Flotante float real
- Fechas
datetime 0333 s
smalldatetime 1 minuto
- Caracteres
Ancho fijo char nchar
Ancho Variable varchar nvarchar
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 8
- Texto e Imagen
Text
Ntext
Rowversion
- Binario
Binary varbinary Valores tipo byte
Bit Un solo bit (1 o ninguno)
- Identificadores Uacutenicos
Representa un identificador global uacutenico (GUID)
Si queremos que no se repita el dato en la base de datos usamos este identificador
Uniqueidentifier
Operadores de SQL
Loacutegicos
AND OR NOT
De Comparacioacuten
= Igual
lt Menor
gt Mayor
ltgt Diferente
gt= Mayor o igual
lt= Menor o igual
Crear una Base de Datos Utilizando el Lenguaje SQL
Ejemplo
Para crear la base de datos es la siguiente opcioacuten database seguido del nombre de la Base de Datos
--Create database Itae
On primary
(Name= Itae _data Filename=C itaemdf size=10 maxsize=15 filegrowth=25)
Log On
(Name= Itae _log filename=C itaeldf size=4 maxsize=6 filegrowth=1MB)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 9
Despueacutes de la sentencia Create database Se especifica el nombre de la base de datos Un
nombre en la base de datos debe de ser uacutenico 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 ndash Especifica el tamantildeo del Archivo
Maxsize ndashEspecifica el tamantildeo maacuteximo que puede alcanzar el archive si se requiere espacio adicional
Filegrowth ndashEs la cantidad de espacio que se antildeade 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 procederaacute abrir la base de datos con el use nombre de la base de datos y luego el Use Go
Use master
Go
Luego se procederaacute abrir la tabla Sysdatabases y ahiacute se podraacute visualizar si la base de datos ah
sido creada
Select from Sysdatabases
Luego se procederaacute abrir la base de datos con el use nombre de la base de datos y luego el go
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 10
INSERCIOacuteN ELIMINACIOacuteN Y MODIFICACIOacuteN DE DATOS
- Insercioacuten 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 INSERTSELECT
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
- Creacioacuten de una tabla mediante SELECT INTO Creacioacuten 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
- Insercioacuten de datos parciales No introducir todos los datos solo meter datos en un
determinado campo o en varios pero no en toda la tabla
- Insercioacuten de datos mediante valores de columna predeterminados Se usa para no
dejar a las tablas con el valor null y asiacute 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
ELIMINACIOacuteN 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 = bdquoSERRA‟
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 11
- TRUNCATE TABLE Elimina todas las filas de la tabla (La tabla con su estructura no se
elimina soacutelo los datos de la tabla) No crea filas en el registro de transacciones con lo cual
es el meacutetodo maacutes raacutepido de borrar
TRUNCATE TABLE NombreTabla
Truncate Table emp
- Eliminacioacuten de filas basada en otras tablas
DELETE [ FROM ] NombreTabla | NombreVista
[ FROM OrigenTabla ] [ WHERE CondicionBusqueda ]
ACTUALIZACIONES
- Actualizacioacuten de filas basadas en datos de la propia tabla
UPDATE NombreTabla | NombreVista
SET NombreColumna = expresioacuten DEFAULT | NULL
USE Northwind
UPDATE products
SET unitprice = (unitprice 11 )
- Actualizacioacuten de filas basadas en otras tablas
UPDATE NombreTabla | NombreVista
SET NombreColumna = expresioacuten DEFAULT | NULL
FROM OrigenTabla
WHERE CondicionBusqueda
Ejercicios
Ejemplo 1
Abrir la base de datos creada anteriormente
--use Itae
se procederaacute abrir la base de datos
--go
Ejemplo 2
Crearemos la Tabla alumnos
--CREATE TABLE alumnos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 12
--(
--Idalumno VarChar(8)not null
--nom_alumno Varchar (50) Not Null
--ape_alumno Varchar (50) Not Null
--dir_alumno Varchar (50) Not Null
--tel_alumno VarChar(8)
--Email_alumno Varchar (50)
--)
Ejemplo 3
Para que se muestre la Tabla completa y con todos los registros se utiliza en Select para
seleccionar los campos from para seleccionar la tabla que se desea visualizar
--select from alumnos
Ejemplo 4
Ingreso de Datos a la Tabla alumnos se utiliza la sentencia insert into
--Insert into alumnos (idalumnonom_alumnoape_alumnodir_alumnotel_alumnoemail_alumno)Values
(Cli01jamesjamesVentanilla252511jazoon_28hotmailcom)
--Insert into alumnos (idalumnonom_alumnoape_alumnodir_alumnotel_alumnoemail_alumno)Values
(Cli01Juan CarlosOchoa ValverdeCoop Primavera Mz R1 Lote 16557-
2147jaz_28hotmailcom)
--Insert into alumnos (idalumnonom_alumnoape_alumnodir_alumnotel_alumnoemail_alumno) Values
(Cli02ArturoCapuntildeay LaquiJr Viru 406 Nordm8481-6507eternal_alcarisHotmailcom)
--Insert into alumnos (idalumnonom_alumnoape_alumnodir_alumnotel_alumnoemail_alumno) Values
(Cli03Luis AlexanderAguilar WongJr Hon 920-1090luis_hexenHotmailcom)
--Insert into alumnos (idalumnonom_alumnoape_alumnodir_alumnotel_alumnoemail_alumno) Values
(Cli04Fredy Richard Anaya JesusResidencial 539-0886fredyanayaHotmailcom)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 13
Ejemplo 5
Si deseaacuteramos Eliminar seria con la sentencia Delete
--delete from alumnos where nom_alumno=juan Carlos
Ejemplo 6
Para Actualizar se Utiliza la sentencia Update y Set
--Update alumnos set nom_alumno=diego ape_alumno=cueva dir_alumno=los olivos
tel_alumno=5402972 email_alumno=hades_278hotmailcom where idalumno=01
Ejemplo 7
Para Realizar una Consulta se utiliza el Where
--select from alumnos where idalumno=Cli01
Ejemplo 8
Si tambieacuten uno desea se puede poner en orden ascendente y descendente paraacute ello se utilizar el
ASC y Desc
--select from alumnos ORDER BY nom_alumno Asc
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 14
--select from alumnos ORDER BY nom_alumno desc
Ejemplo 9
Para eliminar un Objeto de la base de datos se utiliza la sentencia Drop
Eliminar de la base de Datos Itae la Tabla Alumnos
Drop table alumnos Elimina la Tabla Clientes con la sentencia Drop seguido del tipo de
objeto y finalizando el nombre
Drop database Itae Elimina la Base de Datos Itae con la sentencia Drop seguido del
tipo de objeto y finalizando el nombre
OPERADORES DE CONDICIOacuteN _ FILAS
En la expresioacuten loacutegica que especifica condicioacuten _ filas se puede utilizar ademaacutes de los operadores
relacioacuten o de comparacioacuten los siguientes operadores SQL
LIKE- Para comparacioacuten de cadenas de caracteres admite los comodines y _
OPERADOR LIKE
Cualquier nuacutemero de caracteres
_ Para un caraacutecter individual
[ ] Para un conjunto de caracteres que esteacute dentro del corchete
[ ^ ] Que el caraacutecter individual que no esteacute dentro del corchete
EJEMPLO LIKE lsquoeenrsquo Muestra todos los caracteres que acaben con een
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 15
EJEMPLO LIKE lsquoeenrsquo Muestra todos los caracteres que contengan een en ese orden
EJEMPLO LIKE lsquo_enrsquo Muestra todos los caracteres que contenga tres letras y acaben en en
EJEMPLO LIKE lsquo[CK ]rsquo Muestra todos los caracteres que empiecen por C o K
EJEMPLO LIKE lsquo[S-V]ingrsquo Nombre de 4 letras cuya primera letra estuviera entre S o V y acabe en
ing
EJEMPLO LIKE lsquoM[^c]rsquo Todos los que empiecen por M y segunda letra no sea una c No hay limite
de caracteres
BETWEEN- para seleccioacuten en base a un rango de valores Los valores pueden ser numeacutericos de
cana fechas y horas
In-Para seleccioacuten en base a un conjunto de valores los valores pueden ser numeacutericos de cadena
fechas y horas
Para estos ejemplos ah utilizado la base de datos con el nombre de Poseidoacuten y contiene las siguientes
tablas y campos
Ejemplo 10
Lista de productos cuyo nombre contenga la palabra vino
Use Poseidon
Go
Select from productos where nombreproducto like vino
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 16
Luego procedemos a ejecutar la aplicacioacuten
El siacutembolo representa a cualquier cadena de caracteres inclusive la cadena nula
Ejemplo 12
Lista de productos cuya primera letea empieza con la letra a
Select from productos where nombreproducto like [a]
Ejemplo 13
Lista de productos cuya primera letea empieza con la letra a y la tercera con la letra e
Select from productos where nombreproducto like [a][e]
Ejemplo 14
Lista de productos cuyo nombre empieza con cualquier caraacutecter que va en el rango de la M a la
T
Select from productos where nombreproducto like [m-t]
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 17
Ejemplo 15
Lista de productos cuyo nombre empieza con A ograve con cualquier caraacutecter en el rango que va de U
a la Ademaacutes el segundo caraacutecter no debe ser la letra r
Select from productos where nombreproducto like [^b-t][^r]
El Caraacutecter ^ significa incluir
El Caraacutecter representa cualquier cadena de caracteres inclusive la cadena nula
El Caraacutecter _ Representa cualquier caraacutecter 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 caraacutecter empiece con la letra e
Select from productos where nombreproducto like _e
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 18
Ejemplo 18
Lista de productos cuyo nombre empiece con C M Ograve R
Select from productos where nombreproducto like bdquo[cmr]
Ejemplo 19
Lista de productos cuyo nombre empiece con C M Ograve R El segundo Caraacutecter debe ser A
Select from productos where nombreproducto like bdquo[cmr] a
El comodiacuten [cmr] representa el conjunto de caracteres validos en la posicioacuten en la que
apareceraacute el comodiacuten
Ejemplo 20
Seleccionar todos los productos que termine con la letra Z
Select from productos where nombreproducto like z
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 19
Ejemplo 21
Mostrar todos los productos cuya cuarta letra sea A
Select from productos where nombreproducto like ___a
USO DEL OPERADOR BETWEEN
Permite seleccionar en base a un rango de valores
Ejemplo 22
Lista de productos cuyo precio se encuentra en el rango que va de 15 a 21 nuevos soles
Select from productos where preciounidad between 15 and 21
Ejemplo 23
Lista de productos cuyo nombre se encuentren en el rango de Cerveza y galletas
Select from productos where nombreproducto between cerveza and galletas
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 20
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 (londresPariacutesTokyo)
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 (preciounidadcantidad)019 as IGV
from [detalles de pedidos]
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 21
Ejemplo 27
Mostar los productos cuyo precio sea mayor a 40
Select from productos where Preciounidad gt 40
Ejemplo 28
Mostrar todos los datos de los Clientes ordenados por Ciudad
Select from clientes order by ciudad
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 22
Ejemplo 29
Mostrar todos los productos de la Categoriacutea 2
Select from productos where IdCategoriacutea=2
Ejemplo 30
Mostrar todos los pedidos realizados en la fecha 1996-06-05
Select from Pedidos where FechaPedido =1996-06-05
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 23
Ejemplo 31
Mostrar todos los pedidos mayores a la Fecha 1996-05-05
Select from Pedidos where FechaPedido gt 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 IdCategoriacutea no sea 3
Select from productos where IdCategoriacutealtgt 3
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 24
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 Categoriacutea (123)
Select from productos where IdCategoriacutea not in (1 2 3) order by IdProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 25
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
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 26
USO DE FUNCIONES
Podemos utilizar funciones para construir expresiones y generar columnas computadoras O condiciones
complejas
Funcioacuten de agregacioacuten
Son funciones que se utilizan para calcular valores en las tablas Si queremos usarlas
combinaacutendolas 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
expresioacuten HAVING Equivalente a where
Todos estos ejercicios han sido desarrollado con la base de datos Poseidoacuten
COUNT Cuenta los registros que hay en la consulta
Si pongo un valor dentro de la expresioacuten devolveraacute la cuenta de todos los
registros no nulos
Si pongo un asterisco contaraacute todos los registros aunque tengan valores
nulos
Select count () from Pedidos Valores con Nulos
Select count (FechaEnviacuteo) from Pedidos Valores sin nulos
AVG Realiza la media sobre la expresioacuten dada debe ser un tipo de dato
Int
Select avg(Preciounidad) from productos
MAX Saca el valor maacuteximo de una consulta
Select max (FechaPedido) from Pedidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 27
MIN Devuelve el valor miacutenimo 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 paiacutes Brasil mostrando el nuacutemero de los Factura con el paiacutes de
Destinatario Brasil
Select count () as [Numero de Facturas] PaiacutesDestinatario
Avg (Preciounidad) as [Precio Medio] from
Facturas group by PaiacutesDestinatario having PaiacutesDestinatario =Brasil
Ejemplo 39
Encontrar el precio maacutes alto mas bajo y la diferencia entre ambos de todos los productos con
IdCategoriacutea 2
Select IdCategoriacutea Max (Preciounidad) as [Precio mas alto] min(Preciounidad) as
[Precio mas Bajo] Max(Preciounidad) - min(Preciounidad) as [Diferencia entre Ambos]
from Productos group by IdCategoriacutea having IdCategoriacutea = 2
Ejemplo 40
Visualizar el nuacutemero de productos por Categoriacutea
Select IdCategoriacutea as [Nordm de Categoriacutea] Count (IdCategoriacutea) as [Nordm de Productos]
From Productos group by IdCategoriacutea
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 28
Ejemplo 41
Visualizar los clientes que vivan en las siguientes ciudades Londres Madrid y Barcelona
Select count () as [Nordm de personas] ciudad from clientes group by ciudad Having ciudad in
(londresMadridBarcelona) order by ciudad
Ejemplo 42
Lista de productos cuya venta allaacute sido mayor a 50000
Select IdProducto Monto=Sum (Preciounidad Cantidad) from [Detalles de pedidos] group
by IdProducto having Sum (Preciounidad Cantidad)gt50000 order by IdProducto
Ejemplo 43
Cuantos Clientes no tienen Fax
Select Count () as [Total de Clientes sin Fax] from clientes where fax is null
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 29
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
Funcioacuten Resultado
GETDATE() Retorna la fecha y hora del sistema
DATEADD(partefechanfecha) Retorna una nueva fecha antildeadiendo n
unidades de partefecha a fecha
DATEDIFF(parteFechafecha1fecha2) Retorna la diferencia en parteFecha entre
fecha1 y fecha2
DATENAME(partefechafecha) Retorna la cadena correspondiente a
partefecha en fecha
DATEPART(partefechafecha) Retorna el numero correspondiente a
partefecha y fecha
DAY(fecha) Retorna el numero correspondiente a la
parte del diacutea de fecha
MONTH(fecha) Retorna el numero correspondiente a la
parte del mes de fecha
YEAR(fecha) Retorna el numero correspondiente a la
parte del antildeo de fecha
GETUTCDATE() Retorna la fecha y hora del meridiano de
Greenwich
La siguiente tabla muestra los valores de partefecha que podemos utilizar
partefecha Abreviatura
Year Yy yyyy
Quarter Qq q
Month Mm m
Dayofyear Dy y
Day Dd d
Week Wk ww
weekday Dw
Hour Hh
minute Mi n
second Ss s
milisecond Ms
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 30
Getdate
Select getdate () Funcioacuten que recupera la fecha actual del sistema
Convert Cast
Convierten expliacutecitamente una expresioacuten de un tipo de datos en otro CAST y CONVERT
proporcionan funciones similares
Convert (Tipodedatosdestino Origen Estilo)
o Tipodedatosdestino Siempre ha de ser tipo caraacutecter
o Origen Puede ser tipo fecha numeacuterico o moneda
o Estilo Opcional Es un coacutedigo que indica el formato en el que devuelve la cadena de
caracteres
Sintaxis
Convert (TipoDato Dato)
Cast (Dato as TipoDato)
Ejemplo
declare n intpalabra nvarchar(10)
set n = 1
set palabra =Nuacutemero
print convert(nvarchar(2)n) + + palabra
print cast(n as nvarchar(2)) + + palabra
while (nlt11)
begin
print convert(nvarchar(2)n) + + palabra
print cast(n as nvarchar(2)) + + palabra
set n = n + 1
end
DateName
Devuelve una cadena de caracteres que representa la parte de la fecha especificada de la fecha
especificada
Los caacutelculos 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
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 31
Ejemplo 46
Select IdPedido DateName (week FechaPedido) as Numero de Semana from Pedidos where IdPedido
= 1035251
Ejemplo 47
Select IdPedido datename (weekday FechaPedido) as Diacutea De Semana from Pedidos where IdPedido =
10352 Martes
Horas
Ejemplo 48
Select IdPedido datename (mi FechaPedido) as Minutos from Pedidos where IdPedido = 10352
Ejemplo 49
Select DateName (minute getdate ()) as minutos
Ejemplo 50
Select DateName (Hh FechaPedido) as hora from Pedidos where IdPedido = 10352
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 32
Ejemplo 51
Select DateName (Hour getdate ()) as hora--gt18
Ejemplo 52
Select DateName (Hh getdate ()) as hora--gt18
DatePart
Devuelve la parte de la fecha u hora indicada Sintaxis
Datepart (Valor devolver fecha)
Ejemplo 53
Select IdPedido datepart (mm FechaPedido) as Mes from Pedidos where IdPedido = 10352
Ejemplo 54
Select Datepart (Hh getdate ()) as Hora--gt17
Ejemplo 55
Select Datepart (mi getdate ()) as Minutos--gt54
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 33
Nombres de Fechas
Day (fecha)
Devuelve UN INT equivale a Datepart
Select day (getdate ()) as diacutea--gt6 (diacutea en la que se ejecuta la sentencia)
Select Datepart (dd getdate ()) --gt6 (diacutea en la que se ejecuta la sentencia)
Select Month (getdate ()) --gt1 (Mes en la que se ejecuta la sentencia)
Select Datepart (mm getdate ()) --gt1 (Mes en la que se ejecuta la sentencia)
Select Year (getdate ()) --gt2008 (Antildeo en la que se ejecuta la sentencia)
Ejemplo 56
Select year (FechaPedido) as Antildeo from Pedidos where IdPedido = 10352
Ejemplo 57
Select datediff (yyyy FechaPedido getdate()) as Dia from Pedidos where IdPedido = 10352
DateAdd
DateAdd (Datepart number date)
Antildeade un nuacutemero a la fecha puesta
DatePart es el formato de lo que queremos antildeadir
Number es el nuacutemero que queremos incrementar la fecha expuesta
Select convert (datetime1-1-02)
Select dateadd (dd 71-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 comparacioacuten y el tipo de dato
que nos devolveraacute antildeos diacuteas minutos etc
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 34
Ejemplo 58
Select datediff (yyyy FechaPedido getdate ()) as Dia from Pedidos where IdPedido = 10352
Ejercicios de funciones de Fecha
Ejemplo 59
Lista de pedidos emitidos en febrero de 1996
Select from Pedidos where month (FechaPedido) =2 and year (FechaPedido) =1996
Ejemplo 60
Lista de Pedidos mostrando la diferencia en diacuteas entre la fecha del pedido y la fecha de Envioacute
Select IdPedido FechaPedido FechaEnviacuteo diacuteas =datediff (day FechaPedido FechaEnviacuteo) from
pedidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 35
Ejemplo 61
Genere un listado de pedidos en el que la fecha del pedido se muestre en el formato nombre del
diacutea diacutea de mes antildeo
Select IdPedido FechaPedido Fecha=datename (dw IdPedido)+ + str (datepart (dd
IdPedido) 2)+ de +datename (mm IdPedido)+ de +str (datepart (yy IdPedido) 4) from
pedidos
Ejemplo 62
Mostrar de la tabla pedidos la fecha de pedidos en fecha corta
Select IdPedido convert (varchar (30) FechaPedido 106) as [Fecha Corta] from pedidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 36
FUNCIONES MATEMATICAS
ABS
Es el valor Absoluto
Select ABS (-4) as VALOR ABSOLUTO--gt4
CEILING
Devuelve el entero maacutes pequentildeo mayor o igual que la expresioacuten numeacuterica dada
Select CEILING (54) as CEILING--6
FLOOR
Devuelve el entero maacutes grande menor o igual que la expresioacuten numeacuterica dada
Select FLOOR (5) as FLOOR--gt5
POWER
Devuelve el valor de la expresioacuten indicada elevada a la potencia especificada
Select POWER (3 2) as 3 ELEVADO A 2--gt9
RAND
Devuelve un valor float aleatorio de 0 a 1
Las llamadas repetitivas de RAND() en una uacutenica consulta produciraacuten el mismo valor
Select RAND(6) as ALEATORIO--071368515806921451
Select RAND(6) as ALEATORIO--071368515806921451
Select RAND(4) as ALEATORIO--07136478921266981
Rand sobre los milisegundos actuales
Select RAND(DATEPART(msGETDATE())) as ALEATORIO--gt071443047691954253
Select RAND(999999999)--gt068504257551273573
ROUND
Devuelve una expresioacuten numeacuterica redondeada a la longitud o precisioacuten especificada
Round (Nuacutemero Redondeo del Nuacutemero)
ROUND siempre devuelve un valor Si length es un valor negativo y mayor que el nuacutemero de
diacutegitos anteriores al separador decimal ROUND devuelve 0
Select ROUND (1234567 2) --gt1234600
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 37
Select ROUND (1234567-2) --gt1000000
Select ROUND (1234567 0) --gt1230000
Select ROUND (1234567-3) ---gt0
SIGN
Devuelve el signo positivo (+1) cero (0) o negativo (-1) de la expresioacuten especificada
Dice el valor negativo positivo o neutro (0) del valor especificado
Select SIGN (-3) --gt-1
Select SIGN (3) --gt1
Select SIGN (0) --gt0
SQUARE
Devuelve el cuadrado de la expresioacuten especificada
Select SQUARE (4) as bdquoCuadrado‟--gt160
SQRT
Devuelve la raiacutez cuadrada de la expresioacuten especificada
Select SQRT (4) as [RAIZ CUADRADA] --gt20
FUNCIONES DE CADENA
ASCII
Devuelve el coacutedigo ASCII del caraacutecter maacutes a la izquierda de una expresioacuten de caracteres
Select ASCII(A)--gt65
Select ASCII(a)--gt97
Select ascii(aula)--gt97
CHAR
Una funcioacuten de cadena que convierte un coacutedigo ASCII int en un caraacutecter
select char(65)--gtA
select char(97)--gta
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 38
CHARINDEX
Devuelve la posicioacuten inicial de la expresioacuten especificada en una cadena de caracteres
CHARINDEX (expression1 expression2 [ start_location])
Argumentos
expression1
Es una expresioacuten que contiene la secuencia de caracteres que se desea buscar
Expression1 es una expresioacuten del tipo de cadenas cortas de caracteres
Expression2
Es una expresioacuten normalmente una columna
en la que se busca la cadena especificada
Expression2 es de la categoriacutea del tipo de datos cadena de caracteres
start_location
Es la posicioacuten del caraacutecter de expression2 en el que se empieza la buacutesqueda de expression1
Si no se especifica start_location es un nuacutemero negativo o es cero
la buacutesqueda empieza al principio de la cadena expression2
Si expression1 no se encuentra en expression2 CHARINDEX devuelve 0
Si alguno de los dos es null devuelve null
Select charindex (ciemurcielago) --gt4
Select charindex (ciemurcielago 2) --gt4
Select charindex (ciemurcielago 5) --gt0
Select charindex (ciemurcielago-6) --gt4
LEFT
Devuelve la parte de una cadena de caracteres que comienza en un nuacutemero de caracteres
especificado a partir de la izquierda
Select left (murcielago5) --gtmurci
RIGHT
Devuelve la parte de una cadena de caracteres que
Comienza en el nuacutemero de caracteres especificado
En integer_expression a partir de la derecha
Select right (hola que tal5) --gte tal
LEN
Cuenta el nuacutemero de caracteres que se incluyen en la cadena
Select len (murcieacutelago) --gt10
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 39
LOWER
Convierte a Minuacutesculas la cadena especificada
Select lower (MurcIELaGO) as [minusculas] --gtmurcielago
UPPER
Convierte a Mayuacutesculas la cadena especificada
Select upper (murcielago) as [MAYUSCULAS] --gtMURCIELAGO
RTRIM y LTRIM
Elimina los espacios que existen a la izquierda y a la derecha respectivamente
Select Rtrim ( murcieacutelago ) AS [SIN ESPACIOS] --gtmurcieacutelago
Select Ltrim ( murcieacutelago ) AS [SIN ESPACIOS] --gtmurcieacutelago
Select ltrim(rtrim( hola ))+
REPLACE
Reemplaza por una tercera expresioacuten todas las apariciones
de la segunda expresioacuten de cadena proporcionada en la primera expresioacuten de cadena
Select replace (hola que tal estasaA) --gtholA que tAl estAs
Select replace (buenos dias que tal estasuentildentildentilde) --gtbntildentildentildenos diasqntildentildentilde tal estas
SPACE
Coloca el nuacutemero de espacios que se le indiquen para entre una cadena de caracteres
Select hola+space(5)+que tal--gthola que tal
SUBSTRING
Devuelve parte de una expresioacuten de caracteres binaria de texto o de imagen
Sintaxis
SUBSTRING (Expresioacuten Comienzo Duracioacuten)
Argumentos
Expresioacuten
Es una cadena de caracteres cadena binaria texto imagen
Columna o expresioacuten que incluye una columna
No deben usarse expresiones que incluyan funciones de agregado
Start
Es un entero que especifica el punto en que comienza la subcadena
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 40
Length
Es un entero que especifica la longitud de la subcadena
(El nuacutemero de caracteres o bytes que se devuelven)
Select substring (murcielago 3 5) --gtrciel
Select substring (murcielago 3 len (murcielago)) --gtrciel
REVERSE
Devuelve invertida una expresioacuten de caraacutecter
Select reverse (hola)
REPLICATE
Repite una expresioacuten de caracteres un nuacutemero especificado de veces
Select replicate (murcielago 5)
Replicate replicate replicate replicate replicate
STUFF
Elimina el nuacutemero de caracteres especificados e insertados
Otro conjunto de caracteres en un punto de inicio indicado
Select STUFF (Murcieacutelago 2 3 ijklmn) Mijklmnielago
FUNCIONES DE SISTEMA
- APP_NAME () Devuelve el nombre de la aplicacioacuten actual
Select app_name () as [Nombre de la aplicacion]
- DATALENGTH (Expresioacuten) Devuelve un entero que es numero de bites necesarios para
representar esa expresioacuten int
Select datalength (Ninoni) as [Numero de bites]
- ISDATE (Expresioacuten) Dice si la expresioacuten es una fecha o no Devuelve 1 si la expresioacuten es
una fecha y 0 si no es una fecha
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 41
Select isdate (121001) as [Validacioacuten Fecha]
- ISNUMERIC (Expresion) Dice si la expresioacuten es un numero o no Devuelve 1 si la
expresioacuten es un nuacutemero y 0 si la expresioacuten no es nuacutemero
Select isnumeric (ddd) as [Validacion Numero]
- ISNULL (Expresioacuten ExpresionDevuelta) Si la expresioacuten es nula te devuelve la Expresioacuten
Devuelta y si no devuelve la primera Expresioacuten
Select isnull (nullNo nulo) as [Es Nulo]
- PARSENAME (bdquoNombreObjeto‟ ParteNombre)
ParteNombre es un valor de tipo Int que coge unos determinados valores del
NombreObjeto
1 Objeto
2 Propietario
3 Base de Datos
4 Servidor
Select parsename (saposeidondbopedidos1) as [Parte Expresioacuten]
Select parsename (saposeidondbopedidos 2) as [Parte Expresioacuten]
Select parsename (saposeidondbopedidos3) as [Parte Expresioacuten]
Select parsename ( saposeidondbopedidos 4) as [Parte Expresioacuten]
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 42
- SYSTEM_USER Devuelve el usuario del sistema actual
Depende de la autentificacioacuten con la que te hayas conectado
Select system_user as [Usuario conectado]
- USER_NAME() Devuelve el nombre del usuario actual
Select user_name ()
- COALESCE (expresioacuten1 expresioacuten2 )
Devuelve la primera expresioacuten no NULL
Si todos son NULL devuelve NULL
Select coalesce (PrecioUnidad Cantidad) from [detalles de Pedidos] Si el PrecioUnidad es nulo
devolveraacute la Cantidad y si los dos son nulos devolveraacute un campo Null
PROCEDIMIENTOS PARA AGRUPAR Y RESUMIR DATOS
En el examen de certificacioacuten 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 usaraacute la base de datos indicada Ejemplo Ponemos
en el analizador de consultas lo siguiente
Use Northwind
Select from [Order Details]
[Order Details]
Esta tabla perteneciente a la Northwind se encarga de manejar los pedidos
Order Id Nordm de Pedido
Producto Id Nordm de Producto
Ambos campos son Primary Key con lo que no puede haber una combinacioacuten de ambos campos que sea
igual
OrderId ProductId
1 A
1 B
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 43
1 C
2 A
3 C
Es decir en este caso no podriacutea existir una nueva combinacioacuten ldquo1 Ardquo o ldquo2 Ardquo
Quantity Es la cantidad del producto del pedido
ROLLUP
Se usa para presentar resuacutemenes de datos A de usarse junto con la clausula group by lo que hace es
realizar un resumen de los campos incluidos en el rollup
Ejemplo 63
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
Group by ProductID OrderID
with Rollup
Order by ProductID OrderID
Este ejemplo suma todas las cantidades y mediante
rollup muestra una fila con la suma de todas las
cantidades de cada producto y ademaacutes otra fila con la
suma de todas las cantidades de todos los productos El
resultado de este ejemplo seriacutea el que muestra la
imagen
Ejemplo 64
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
where orderid lt 10250
Group by ProductID OrderID
with Rollup
Order by ProductID OrderID
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 44
CUBE
Al igual que Rollup realiza resuacutemenes de campos agrupados Pero en este caso muestra un resumen con
cada combinacioacuten posible de los campos agrupados
Ejemplo 65
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
where orderid lt 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 combinacioacuten posible entre el
productid y el orderid
GROUPING
Indica si el resultado de un campo es el que hay en la propia tabla o se ha introducido mediante una
claacuteusula de resumen es decir para saber por ejemplo si un ldquoNullrdquo 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 lt 10250 Group by ProductID
OrderID with Cube Order by ProductID OrderID
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 45
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
Ponieacutendole un alias al
grouping saldriacutea el nombre
de columna que le
indiquemos
COMPUTE
Realiza un resumen en una columna aparte con el resultado de la funcioacuten de agregado indicada Su
formato seriacutea Compute funcioacuten(campo) No se puede utilizar en aplicaciones cliente servidor es una
clausula meramente informativa Tampoco se le pueden poner alias a los resuacutemenes
Ejemplo 67
Select Productid Orderid Quantity From [Order Details] order by ProductID Orderid compute
Sum(quantity)
Vemos que muestra la
columna con la suma
total de todas las
cantidades
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 46
Ejercicios de ROLLUP GROUPING y CUBE
Ejemplo 68
Realizar una consulta que resuma la cantidad de artiacuteculos pedidos por cada iacutendice de producto y
nuacutemero de pedido Realizando un caacutelculo acumulativo
select productid as [PRODUCTO] orderid as [Nordm PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] group by productid orderid with rollup order by productid orderid
PRODUCTO Nordm 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
hellip
Ejemplo 69
Modificacioacuten al ejercicio anterior Realizar el mismo resumen pero uacutenicamente para el producto
cuyo id es 50
select productid as [PRODUCTO] orderid as [Nordm PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] where productid = 50 group by productid orderid with rollup order by productid ordered
PRODUCTO Nordm 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
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 47
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 modificacioacuten 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 [Nordm PEDIDO] grouping(orderid) as [GRUPO PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] where productid = 50 group by Productidorderid with cube order by productidorderid
PRODUCTO GRUPO PRODUCTO Nordm PEDIDO GRUPO PEDIDO SUMA TOTAL
----------- -------------- ----------- ------------ -----------
NULL 1 NULL 1 235
NULL 1 10350 0 15
NULL 1 10383 0 15
NULL 1 10429 0 40
NULL 1 10465 0 25
NULL 1 10637 0 25
NULL 1 10729 0 40
NULL 1 10751 0 20
NULL 1 10920 0 24
NULL 1 10948 0 9
NULL 1 11072 0 22
50 0 NULL 1 235
50 0 10350 0 15
50 0 10383 0 15
50 0 10429 0 40
50 0 10465 0 25
50 0 10637 0 25
50 0 10729 0 40
50 0 10751 0 20
50 0 10920 0 24
50 0 10948 0 9
50 0 11072 0 22
(22 filas afectadas)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 48
Obtencioacuten de resuacutemenes 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 maacutes columnas y
luego efectuar alguna operacioacuten de resumen sobre cada grupo asiacute generado
La diferencia con GROUP BY es que permite mostrar informacioacuten mas detallada de cada grupo
Ejemplo 71
Lista de pedidos que muestre por coacutedigo de pedido la cantidad de productos vendidos por cada uno
de ellos
select Idpedidoidproductopreciounidadcantidad[Sub Total]=sum(PreciounidadCantidad) from
[detalles de pedidos] group by Idpedidoidproductopreciounidadcantidad order by IdPedido compute
sum(Cantidad) by IdPedido
EJERCICIOS CON COMPUTE
Ejemplo 72
Generar un resumen de subtotales en una consulta que devuelva el nuacutemero de pedido la cantidad
pedida para todos los orderid 11070
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 49
Select Orderid as [Nordm PEDIDO] Quantity AS [CANTIDAD] From [Order Details] where orderid gt= 11070 order by Orderid compute Sum(quantity) by orderid compute sum(quantity)
Nordm PEDIDO CANTIDAD
----------- --------
11070 40
11070 20
11070 30
11070 20
sum
===========
110
sum
===========
110
(6 filas afectadas)
Ejemplo 73
Generar un resumen con calculo de subtotales similar al anterior pero para los orderid 11075 y
11076
Select Orderid as [Nordm PEDIDO] Quantity as [CANTIDAD] From [Order Details] where orderid = 11075 or orderid = 11076 order by Orderid compute Sum(quantity) by ordered Nordm PEDIDO CANTIDAD ----------- -------- 11075 10 11075 30 11075 2 sum =========== 42 Nordm PEDIDO CANTIDAD ----------- -------- 11076 20 11076 20 11076 10
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 50
sum =========== 50 (8 filas afectadas)
Ejemplo 74
Modificacioacuten al ejercicio anterior Agregar la cantidad total y la cantidad promedio al final del
informe
Select Orderid as [Nordm 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)
Nordm PEDIDO CANTIDAD
----------- --------
11075 10
11075 30
11075 2
sum
===========
42
Nordm PEDIDO CANTIDAD
----------- --------
11076 20
11076 20
11076 10
sum
===========
50
sum
===========
92
avg
===========
15
(10 filas afectadas)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 51
Ejemplo 75
Seleccionar de forma agrupada por tipo todos los tipos la suma de los precios y la suma del
anticipo de la tabla tiacutetulos
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 199900 50000000
business 119500 50000000
business 29900 101250000
business 199900 50000000
sum
=====================
549200
avg
=====================
62812500
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
mod_cook 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
avg
=====================
75000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
popular_comp 229500 70000000
popular_comp 200000 80000000
popular_comp NULL NULL
sum
=====================
429500
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 52
avg
=====================
75000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
psychology 215900 70000000
psychology 109500 22750000
psychology 70000 60000000
psychology 199900 20000000
psychology 79900 40000000
sum
=====================
675200
avg
=====================
42550000
(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 ademaacutes 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 199900 50000000
business 119500 50000000
business 29900 101250000
business 199900 50000000
sum
=====================
549200
sum
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 53
=====================
251250000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
mod_cook 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
popular_comp 229500 70000000
popular_comp 200000 80000000
popular_comp NULL NULL
sum
=====================
429500
sum
=====================
150000000
(30 filas afectadas)
Ejemplo 77
Generar un informe que muestre la suma de los precios de los libros de psicologiacutea 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 109500
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 54
psychology 0736 70000
psychology 0736 199900
psychology 0736 79900
sum
=====================
459300
TIPO CODIGO EDITOR PRECIO
------------ ------------- ---------------------
psychology 0877 215900
sum
=====================
215900
(7 filas afectadas)
Ejemplo 78
Generar un informe que obtenga la suma de los precios de todos los libros de psicologiacutea asiacute como la
suma de los precios de los libros de psicologiacutea 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 109500
psychology 0736 70000
psychology 0736 199900
psychology 0736 79900
sum
=====================
459300
TIPO CODIGO EDITOR PRECIO
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 55
------------ ------------- ---------------------
psychology 0877 215900
sum
=====================
215900
sum
=====================
675200
(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 199900 0000
mod_cook 0877 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO CODIGO EDITOR PRECIO ANTICIPO
------------ ------------- --------------------- ---------------------
trad_cook 0877 119500 40000000
trad_cook 0877 209500 70000000
trad_cook 0877 149900 80000000
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 56
sum
=====================
478900
sum
=====================
190000000
(9 filas afectadas)
Ejemplo 80
Generar un informe que muestre todos los tiacutetulos precio y anticipo de aquellos tiacutetulos que tengan
un precio superior a 20 doacutelares Ofreceraacute tambieacuten la suma total del precio y del anticipo
Select title as [TITULO] price as [PRECIO] advance as [ANTICIPO] From titles where price gt 20 order by title compute sum(price) compute sum(advance)
TITULO PRECIO ANTICIPO
-------------------------------------------------------------------------------- --------------------- -------------
--------
But Is It User Friendly 229500 70000000
Computer Phobic AND Non-Phobic Individuals Behavior Variations 215900
70000000
Onions Leeks and Garlic Cooking Secrets of the Mediterranean 209500
70000000
sum
=====================
654900
sum
=====================
210000000
(5 filas afectadas)
Ejemplo 81
Generar un informe que muestre el precio el tipo y el nuacutemero de editor de la tabla titles de todos
aquellas obras que pertenezcan la categoriacutea de ldquobusinessrdquo Ademaacutes apareceraacute la suma total de
precios y el maacuteximo pub_id de esta seleccioacuten
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 57
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 29900 0736
business 199900 1389
business 199900 1389
business 119500 1389
sum
=====================
549200
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 Mostraraacute la suma de los precios y los anticipos por tipo y luego calcularaacute 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 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
trad_cook 209500 70000000
trad_cook 119500 40000000
trad_cook 149900 80000000
sum
=====================
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 58
478900
sum
=====================
190000000
sum
=====================
708700
sum
=====================
340000000
(11 filas afectadas)
Eliminacioacuten 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 iquestA que precio se ah vendido los productos
Select IdProducto Preciounidad from [Detalles de pedidos] order by IdProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 59
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 mayoriacutea de las consultas que se hacen en una base de datos requiere que se lean datos procedentes
de dos oacute maacutes tablas
INNER JOIN- son las filas que satisfacen la condicioacuten de la combinacioacuten
En la siguiente sentencia SQL enlaza 2 tablas la tabla clientes y la tabla pedidos en esta ejemplo me
muestra los campos nombre compantildeiacutea y el campo idpedido
La uacutenica condicioacuten es que las 2 tablas tengan un campo en comuacuten
Ejemplo 84
select clientesNombreCompantildeiacuteapedidosidpedido from clientes inner join pedidos on
clientesidcliente=pedidosidcliente
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 60
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 pedidosIdPedido pedidosIdCliente 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 pedidosIdPedido pedidosIdCliente order
by pedidos IdPedido
CROSS JOIN
Un Cross Join es la consulta correlacionada que combine cada una de las filas de una de las tablas con
todas las filas de la otra tabla
No es necesario que exista una columna en comuacuten para ejecutar el Cross Join
Ejemplo 86
La siguiente consulta combina cada una de las filas de la tabla categoriacuteas con cada una de las filas de la
tabla productos
select productosNombreProductocategoriasNombrecategoria from productos cross join categorias
order by productosNombreProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 61
Ejercicios de consultas Muacuteltiples
Ejemplo 87
Mostrar el pedidos completo con el id=10248
Select pedidosIdPedido pedidosIdCliente
Total=sum ([detalles de pedidos]Preciounidad[detalles de pedidos]Cantidad)
From [detalles de pedidos] inner join pedidos on
[Detalles de pedidos]IdPedido=pedidosIdPedido where pedidosIdPedido=10248
Group by pedidosIdPedido pedidosIdCliente
Ejemplo 88
1 Mostrar la cantidad de productos por categoriacutea
Select CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
[Total de Producto]=sum (UnidadesEnExistencia) from Categoriacuteas inner join
Productos on CategoriacuteasIdCategoriacutea=productosIdCategoriacutea
Group by CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 62
Ejemplo 89
Calcular cuantas ventas tiene cada uno de los vendedores
Select empleadosIdEmpleado empleadosNombre empleadosApellidos
[Total de ventas]=count (pedidosIdPedido) from empleados
Inner join Pedidos on empleadosIdEmpleado=pedidosIdEmpleado
Group by empleadosIdEmpleado empleadosNombre empleadosApellidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 63
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 despueacutes saca la de Plantilla
Recomendaciones a la hora de usar las combinaciones
Combinar tablas en funcioacuten de claves principales y externas
Limite el nuacutemero de tablas de las combinaciones
Select Apellido
Oficio as
OFICIOFUNCION
salario from emp
UNION
Select Apellido
Funcion Salario from
Plantilla
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 64
SUBCONSULTAS
Es una SELECT anidada en una instruccioacuten INSERT DELETE SELECT o UPDATE
Como una tabla derivada
Select eemp_no as Numero
eApellido
from (select emp_no apellido from emp) as e
Como una expresioacuten
Select emp_no as [Numero]
Apellido
Salario
(select avg(Salario) from emp)
as Diferencia
from emp
where oficio = Empleado
Para correlacionar datos
- Expresioacuten dinaacutemica que cambia en cada fila de una consulta externa
- Es una combinacioacuten entre la subconsulta y la fila de la consulta externa
- Dividen consultas complejas con dos o maacutes consultas simples relacionadas
Subconsulta correlacionada
Select apellido oficiodept_no
from emp as e
where 20 lt
(select dept_no from dept as d
where edept_no = ddept_no
and ddnombre = Ventas)
SUBCONSULTAS
1 Mostrar el numero de empleado el apellido y la fecha de alta del empleado mas antiguo de la
empresa
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 65
SELECT emp_noapellido
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_noapellido
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 Jimeacutenez
select apellido oficio from emp where
oficio = (select oficio from emp where apellido = JIMENEZ)
4 Queremos saber el apellido oficio salario y nuacutemero 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 gt (select max (salario) from
emp where dept_no = 30)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 66
5 Mostrar el apellido la funcioacuten sala o departamento de todos los empleados que trabajen en la
empresa
select eApellido eOficio as [Cargo en Empresa] ddnombre as [Oficina]
from emp as e
inner join dept as d
on edept_no = ddept_no
union
select pApellido pfuncion snombre
from plantilla as p
inner join sala as s
on phospital_cod = shospital_cod
and psala_cod = ssala_cod
union
select dApellido despecialidad hnombre
from doctor as d
inner join hospital as h
on dhospital_cod = hhospital_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 = lsquoventasrsquo))
order by 2
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 67
8 Mostrar los empleados que tienen mejor salario que la media de los directores no incluyendo al
presidente
Select from emp where salario gt
(select avg (salario) from emp where oficio = DIRECTOR)
and oficio ltgt PRESIDENTE
9 Mostrar el apellido funcioacuten salario y coacutedigo 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 = lsquoENFERMEROrsquo or
funcion = lsquoENFERMERArsquo) and hospital_cod = (select hospital_cod from hospital where nombre =
lsquoSAN CARLOSrsquo)
Select apellido funcion salario hospital_cod from plantilla where
funcion in (ENFERMEROENFERMERA)
and hospital_cod = (select hospital_cod from hospital
where nombre = SAN CARLOS)
10 Visualizar los datos de los hospitales que tienen personal (Doctores) de cardiologiacutea
Select from hospital where hospital_cod in (select hospital_cod from doctor where
especialidad = lsquoCardiologiacutearsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 68
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 = lsquoPROVINCIALrsquo or
nombre= lsquoGENERALrsquo)
12 Mostrar el apellido de los enfermos que nacieron antes que el Sentildeor Miller
Select apellido from enfermo where Fecha_nac lt (select fecha_nac from enfermo where
apellido = lsquoMILLER Brsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 69
Simulacion de una clausula JOIN
Vamos a mostrar los oficios que estaacuten en maacutes de un departamento
Select distinct e1oficio from emp as e1
where e1oficio in(Select e2oficio from emp as e2
where e1dept_no ltgt e2dept_no)
Se debe utilizar antes una combinacioacuten que una subconsulta la combinacioacuten seriacutea asi dando los
mismos resultados
Select distinct e1Oficio from emp as e1
inner join emp as e2
on e1oficio = e2oficio
where e1dept_no ltgt e2dept_no
Estos son los dos oficios que estaacuten en
maacutes de un departamento
Subconsulta para simular una clausula HAVING
select e1apellidoe1oficio e1salario
from emp as e1
where e1salario gt
(select avg(e2salario) from emp as e2
where e1oficio = e2oficio)
Esta es la consulta utilizando el HAVING que es la que deberiacuteamos utilizar antes que una
subconsulta de simulacioacuten HAVING
SELECT e1apellidoe1oficio e1salario
FROM emp AS e1
INNER JOIN emp AS e2
ON e1oficio = e2oficio
GROUP BY e1oficio e1salarioe1apellido
HAVING e1salario gt AVG (e2salario)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 70
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 5
uniqueidentifier
Se trata de un nuacutemero hexadecimal de 16 bytes que hace referencia a un identificador
exclusivo global (GUID) El GUID es especialmente uacutetil cuando una fila debe ser uacutenica entre
otras muchas Por ejemplo utilice el tipo de datos uniqueidentifier en una columna con nuacutemeros
de identificacioacuten de los clientes para compilar una lista de clientes de una compantildeiacutea en varios
paiacuteses
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 soacutelo puede utilizarse para definir variables locales del
tipo table o el valor de retorno de una funcioacuten 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 mayuacutesculas seguidas de un nuacutemero de
proveedor de cinco cifras
Definir una clave principal
Defina una Clave Principalcpara exigir que se escriban valores uacutenicos 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 asiacute se reduce la necesidad de datos redundantes Una tabla soacutelo puede tener una
clave principal
Para definir una clave principal
1 En el diagrama de base de datos o en el Disentildeador de tablas haga clic en el selector de fila de
la columna de la base de datos que desee definir como clave principal Si desea seleccionar
varias columnas mantenga presionada la tecla CTRL mientras hace clic en los selectores de fila
para las otras columnas
2 Haga clic con el botoacuten secundario en el selector de fila para la columna y seleccione Establecer
clave principal En la ficha Iacutendices y claves de las paacuteginas de propiedades se crea
automaacuteticamente un iacutendice 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 comunicaraacute que las
relaciones existentes se eliminaraacuten automaacuteticamente como parte de este proceso
Una columna de clave principal se identifica por un siacutembolo de llave principal en el selector de fila
Si una clave principal consta de maacutes de una columna se permiten valores duplicados en una columna
pero cada combinacioacuten de valores de todas las columnas de la clave principal debe ser uacutenica
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 6
Coacutemo crear una relacioacuten de varios a varios entre tablas
Para crear una relacioacuten de varios a varios entre tablas
1 Abra un diagrama de base de datos
2 Agregue las tablas entre las que desea crear una relacioacuten de varios a varios
3 Cree una tercera tabla Para ello haga clic con el botoacuten secundario del mouse dentro del
diagrama de la base de datos y a continuacioacuten haga clic en Nueva tabla
Eacutesta se convertiraacute en la tabla de unioacuten
4 En el cuadro de diaacutelogo Elegir nombre escriba un nombre para la tabla
Por ejemplo la tabla de unioacuten entre la tabla de tiacutetulos 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 unioacuten
Puede agregar otras columnas a esta tabla igual que en cualquier otra tabla
6 En la tabla de unioacuten establezca la clave principal para que incluya todas las columnas de la clave
principal de las otras dos tablas
7 Defina una relacioacuten de uno a varios entre cada una de las dos tablas principales y la tabla de
unioacuten
Fundamentos de Programacioacuten con SQL Existen 3 tipos de instrucciones para el lenguaje en SQL
- Lenguaje de control de datos (DDL) Creacioacuten y eliminacioacuten de tipos de datos y objetos
CREATE Crear Objeto
ALTER Modificar los datos creados
DROP Eliminar el Objeto
- Lenguaje de control de datos (DCL) Se basa en los derechos que tiene el usuario sobre la
base da datos (Permisos)
GRANT Dar permisos a un usuario para efectuar determinadas
Instrucciones
DENY Eliminar el permiso que se ha concedido con el GRANT
REVOKE Eliminar todos los permisos
- Lenguaje de manipulacioacuten de datos (DML) Desarrollo de la programacioacuten de la base de
datos
SELECT
INSERT
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 7
UPDATE
DELETE
Elementos de sintaxis
Directivas de procesos por lotes
- GO Enviacutea 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 liacutenea --
- 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 nuacutemero
deben empezar por un signo alfabeacutetico pueden incluir el guion bajo (_) la arroba y la
almohadilla
Generalmente para las variables locales se usan + el nombre
EJEMPLO Contador
Para las variables totales se usan dos arrobas + el nombre Contador
EJEMPLO Error
Nombre indica una tabla o procedimiento temporal (Local)
Nombre Igual que el anterior pero global
Tipos de datos
- Numeacutericos
Enteros int tinyint smallint bigint
Decimales numeric decimal money smallmoney
Coma Flotante float real
- Fechas
datetime 0333 s
smalldatetime 1 minuto
- Caracteres
Ancho fijo char nchar
Ancho Variable varchar nvarchar
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 8
- Texto e Imagen
Text
Ntext
Rowversion
- Binario
Binary varbinary Valores tipo byte
Bit Un solo bit (1 o ninguno)
- Identificadores Uacutenicos
Representa un identificador global uacutenico (GUID)
Si queremos que no se repita el dato en la base de datos usamos este identificador
Uniqueidentifier
Operadores de SQL
Loacutegicos
AND OR NOT
De Comparacioacuten
= Igual
lt Menor
gt Mayor
ltgt Diferente
gt= Mayor o igual
lt= Menor o igual
Crear una Base de Datos Utilizando el Lenguaje SQL
Ejemplo
Para crear la base de datos es la siguiente opcioacuten database seguido del nombre de la Base de Datos
--Create database Itae
On primary
(Name= Itae _data Filename=C itaemdf size=10 maxsize=15 filegrowth=25)
Log On
(Name= Itae _log filename=C itaeldf size=4 maxsize=6 filegrowth=1MB)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 9
Despueacutes de la sentencia Create database Se especifica el nombre de la base de datos Un
nombre en la base de datos debe de ser uacutenico 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 ndash Especifica el tamantildeo del Archivo
Maxsize ndashEspecifica el tamantildeo maacuteximo que puede alcanzar el archive si se requiere espacio adicional
Filegrowth ndashEs la cantidad de espacio que se antildeade 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 procederaacute abrir la base de datos con el use nombre de la base de datos y luego el Use Go
Use master
Go
Luego se procederaacute abrir la tabla Sysdatabases y ahiacute se podraacute visualizar si la base de datos ah
sido creada
Select from Sysdatabases
Luego se procederaacute abrir la base de datos con el use nombre de la base de datos y luego el go
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 10
INSERCIOacuteN ELIMINACIOacuteN Y MODIFICACIOacuteN DE DATOS
- Insercioacuten 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 INSERTSELECT
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
- Creacioacuten de una tabla mediante SELECT INTO Creacioacuten 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
- Insercioacuten de datos parciales No introducir todos los datos solo meter datos en un
determinado campo o en varios pero no en toda la tabla
- Insercioacuten de datos mediante valores de columna predeterminados Se usa para no
dejar a las tablas con el valor null y asiacute 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
ELIMINACIOacuteN 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 = bdquoSERRA‟
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 11
- TRUNCATE TABLE Elimina todas las filas de la tabla (La tabla con su estructura no se
elimina soacutelo los datos de la tabla) No crea filas en el registro de transacciones con lo cual
es el meacutetodo maacutes raacutepido de borrar
TRUNCATE TABLE NombreTabla
Truncate Table emp
- Eliminacioacuten de filas basada en otras tablas
DELETE [ FROM ] NombreTabla | NombreVista
[ FROM OrigenTabla ] [ WHERE CondicionBusqueda ]
ACTUALIZACIONES
- Actualizacioacuten de filas basadas en datos de la propia tabla
UPDATE NombreTabla | NombreVista
SET NombreColumna = expresioacuten DEFAULT | NULL
USE Northwind
UPDATE products
SET unitprice = (unitprice 11 )
- Actualizacioacuten de filas basadas en otras tablas
UPDATE NombreTabla | NombreVista
SET NombreColumna = expresioacuten DEFAULT | NULL
FROM OrigenTabla
WHERE CondicionBusqueda
Ejercicios
Ejemplo 1
Abrir la base de datos creada anteriormente
--use Itae
se procederaacute abrir la base de datos
--go
Ejemplo 2
Crearemos la Tabla alumnos
--CREATE TABLE alumnos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 12
--(
--Idalumno VarChar(8)not null
--nom_alumno Varchar (50) Not Null
--ape_alumno Varchar (50) Not Null
--dir_alumno Varchar (50) Not Null
--tel_alumno VarChar(8)
--Email_alumno Varchar (50)
--)
Ejemplo 3
Para que se muestre la Tabla completa y con todos los registros se utiliza en Select para
seleccionar los campos from para seleccionar la tabla que se desea visualizar
--select from alumnos
Ejemplo 4
Ingreso de Datos a la Tabla alumnos se utiliza la sentencia insert into
--Insert into alumnos (idalumnonom_alumnoape_alumnodir_alumnotel_alumnoemail_alumno)Values
(Cli01jamesjamesVentanilla252511jazoon_28hotmailcom)
--Insert into alumnos (idalumnonom_alumnoape_alumnodir_alumnotel_alumnoemail_alumno)Values
(Cli01Juan CarlosOchoa ValverdeCoop Primavera Mz R1 Lote 16557-
2147jaz_28hotmailcom)
--Insert into alumnos (idalumnonom_alumnoape_alumnodir_alumnotel_alumnoemail_alumno) Values
(Cli02ArturoCapuntildeay LaquiJr Viru 406 Nordm8481-6507eternal_alcarisHotmailcom)
--Insert into alumnos (idalumnonom_alumnoape_alumnodir_alumnotel_alumnoemail_alumno) Values
(Cli03Luis AlexanderAguilar WongJr Hon 920-1090luis_hexenHotmailcom)
--Insert into alumnos (idalumnonom_alumnoape_alumnodir_alumnotel_alumnoemail_alumno) Values
(Cli04Fredy Richard Anaya JesusResidencial 539-0886fredyanayaHotmailcom)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 13
Ejemplo 5
Si deseaacuteramos Eliminar seria con la sentencia Delete
--delete from alumnos where nom_alumno=juan Carlos
Ejemplo 6
Para Actualizar se Utiliza la sentencia Update y Set
--Update alumnos set nom_alumno=diego ape_alumno=cueva dir_alumno=los olivos
tel_alumno=5402972 email_alumno=hades_278hotmailcom where idalumno=01
Ejemplo 7
Para Realizar una Consulta se utiliza el Where
--select from alumnos where idalumno=Cli01
Ejemplo 8
Si tambieacuten uno desea se puede poner en orden ascendente y descendente paraacute ello se utilizar el
ASC y Desc
--select from alumnos ORDER BY nom_alumno Asc
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 14
--select from alumnos ORDER BY nom_alumno desc
Ejemplo 9
Para eliminar un Objeto de la base de datos se utiliza la sentencia Drop
Eliminar de la base de Datos Itae la Tabla Alumnos
Drop table alumnos Elimina la Tabla Clientes con la sentencia Drop seguido del tipo de
objeto y finalizando el nombre
Drop database Itae Elimina la Base de Datos Itae con la sentencia Drop seguido del
tipo de objeto y finalizando el nombre
OPERADORES DE CONDICIOacuteN _ FILAS
En la expresioacuten loacutegica que especifica condicioacuten _ filas se puede utilizar ademaacutes de los operadores
relacioacuten o de comparacioacuten los siguientes operadores SQL
LIKE- Para comparacioacuten de cadenas de caracteres admite los comodines y _
OPERADOR LIKE
Cualquier nuacutemero de caracteres
_ Para un caraacutecter individual
[ ] Para un conjunto de caracteres que esteacute dentro del corchete
[ ^ ] Que el caraacutecter individual que no esteacute dentro del corchete
EJEMPLO LIKE lsquoeenrsquo Muestra todos los caracteres que acaben con een
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 15
EJEMPLO LIKE lsquoeenrsquo Muestra todos los caracteres que contengan een en ese orden
EJEMPLO LIKE lsquo_enrsquo Muestra todos los caracteres que contenga tres letras y acaben en en
EJEMPLO LIKE lsquo[CK ]rsquo Muestra todos los caracteres que empiecen por C o K
EJEMPLO LIKE lsquo[S-V]ingrsquo Nombre de 4 letras cuya primera letra estuviera entre S o V y acabe en
ing
EJEMPLO LIKE lsquoM[^c]rsquo Todos los que empiecen por M y segunda letra no sea una c No hay limite
de caracteres
BETWEEN- para seleccioacuten en base a un rango de valores Los valores pueden ser numeacutericos de
cana fechas y horas
In-Para seleccioacuten en base a un conjunto de valores los valores pueden ser numeacutericos de cadena
fechas y horas
Para estos ejemplos ah utilizado la base de datos con el nombre de Poseidoacuten y contiene las siguientes
tablas y campos
Ejemplo 10
Lista de productos cuyo nombre contenga la palabra vino
Use Poseidon
Go
Select from productos where nombreproducto like vino
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 16
Luego procedemos a ejecutar la aplicacioacuten
El siacutembolo representa a cualquier cadena de caracteres inclusive la cadena nula
Ejemplo 12
Lista de productos cuya primera letea empieza con la letra a
Select from productos where nombreproducto like [a]
Ejemplo 13
Lista de productos cuya primera letea empieza con la letra a y la tercera con la letra e
Select from productos where nombreproducto like [a][e]
Ejemplo 14
Lista de productos cuyo nombre empieza con cualquier caraacutecter que va en el rango de la M a la
T
Select from productos where nombreproducto like [m-t]
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 17
Ejemplo 15
Lista de productos cuyo nombre empieza con A ograve con cualquier caraacutecter en el rango que va de U
a la Ademaacutes el segundo caraacutecter no debe ser la letra r
Select from productos where nombreproducto like [^b-t][^r]
El Caraacutecter ^ significa incluir
El Caraacutecter representa cualquier cadena de caracteres inclusive la cadena nula
El Caraacutecter _ Representa cualquier caraacutecter 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 caraacutecter empiece con la letra e
Select from productos where nombreproducto like _e
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 18
Ejemplo 18
Lista de productos cuyo nombre empiece con C M Ograve R
Select from productos where nombreproducto like bdquo[cmr]
Ejemplo 19
Lista de productos cuyo nombre empiece con C M Ograve R El segundo Caraacutecter debe ser A
Select from productos where nombreproducto like bdquo[cmr] a
El comodiacuten [cmr] representa el conjunto de caracteres validos en la posicioacuten en la que
apareceraacute el comodiacuten
Ejemplo 20
Seleccionar todos los productos que termine con la letra Z
Select from productos where nombreproducto like z
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 19
Ejemplo 21
Mostrar todos los productos cuya cuarta letra sea A
Select from productos where nombreproducto like ___a
USO DEL OPERADOR BETWEEN
Permite seleccionar en base a un rango de valores
Ejemplo 22
Lista de productos cuyo precio se encuentra en el rango que va de 15 a 21 nuevos soles
Select from productos where preciounidad between 15 and 21
Ejemplo 23
Lista de productos cuyo nombre se encuentren en el rango de Cerveza y galletas
Select from productos where nombreproducto between cerveza and galletas
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 20
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 (londresPariacutesTokyo)
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 (preciounidadcantidad)019 as IGV
from [detalles de pedidos]
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 21
Ejemplo 27
Mostar los productos cuyo precio sea mayor a 40
Select from productos where Preciounidad gt 40
Ejemplo 28
Mostrar todos los datos de los Clientes ordenados por Ciudad
Select from clientes order by ciudad
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 22
Ejemplo 29
Mostrar todos los productos de la Categoriacutea 2
Select from productos where IdCategoriacutea=2
Ejemplo 30
Mostrar todos los pedidos realizados en la fecha 1996-06-05
Select from Pedidos where FechaPedido =1996-06-05
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 23
Ejemplo 31
Mostrar todos los pedidos mayores a la Fecha 1996-05-05
Select from Pedidos where FechaPedido gt 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 IdCategoriacutea no sea 3
Select from productos where IdCategoriacutealtgt 3
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 24
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 Categoriacutea (123)
Select from productos where IdCategoriacutea not in (1 2 3) order by IdProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 25
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
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 26
USO DE FUNCIONES
Podemos utilizar funciones para construir expresiones y generar columnas computadoras O condiciones
complejas
Funcioacuten de agregacioacuten
Son funciones que se utilizan para calcular valores en las tablas Si queremos usarlas
combinaacutendolas 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
expresioacuten HAVING Equivalente a where
Todos estos ejercicios han sido desarrollado con la base de datos Poseidoacuten
COUNT Cuenta los registros que hay en la consulta
Si pongo un valor dentro de la expresioacuten devolveraacute la cuenta de todos los
registros no nulos
Si pongo un asterisco contaraacute todos los registros aunque tengan valores
nulos
Select count () from Pedidos Valores con Nulos
Select count (FechaEnviacuteo) from Pedidos Valores sin nulos
AVG Realiza la media sobre la expresioacuten dada debe ser un tipo de dato
Int
Select avg(Preciounidad) from productos
MAX Saca el valor maacuteximo de una consulta
Select max (FechaPedido) from Pedidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 27
MIN Devuelve el valor miacutenimo 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 paiacutes Brasil mostrando el nuacutemero de los Factura con el paiacutes de
Destinatario Brasil
Select count () as [Numero de Facturas] PaiacutesDestinatario
Avg (Preciounidad) as [Precio Medio] from
Facturas group by PaiacutesDestinatario having PaiacutesDestinatario =Brasil
Ejemplo 39
Encontrar el precio maacutes alto mas bajo y la diferencia entre ambos de todos los productos con
IdCategoriacutea 2
Select IdCategoriacutea Max (Preciounidad) as [Precio mas alto] min(Preciounidad) as
[Precio mas Bajo] Max(Preciounidad) - min(Preciounidad) as [Diferencia entre Ambos]
from Productos group by IdCategoriacutea having IdCategoriacutea = 2
Ejemplo 40
Visualizar el nuacutemero de productos por Categoriacutea
Select IdCategoriacutea as [Nordm de Categoriacutea] Count (IdCategoriacutea) as [Nordm de Productos]
From Productos group by IdCategoriacutea
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 28
Ejemplo 41
Visualizar los clientes que vivan en las siguientes ciudades Londres Madrid y Barcelona
Select count () as [Nordm de personas] ciudad from clientes group by ciudad Having ciudad in
(londresMadridBarcelona) order by ciudad
Ejemplo 42
Lista de productos cuya venta allaacute sido mayor a 50000
Select IdProducto Monto=Sum (Preciounidad Cantidad) from [Detalles de pedidos] group
by IdProducto having Sum (Preciounidad Cantidad)gt50000 order by IdProducto
Ejemplo 43
Cuantos Clientes no tienen Fax
Select Count () as [Total de Clientes sin Fax] from clientes where fax is null
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 29
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
Funcioacuten Resultado
GETDATE() Retorna la fecha y hora del sistema
DATEADD(partefechanfecha) Retorna una nueva fecha antildeadiendo n
unidades de partefecha a fecha
DATEDIFF(parteFechafecha1fecha2) Retorna la diferencia en parteFecha entre
fecha1 y fecha2
DATENAME(partefechafecha) Retorna la cadena correspondiente a
partefecha en fecha
DATEPART(partefechafecha) Retorna el numero correspondiente a
partefecha y fecha
DAY(fecha) Retorna el numero correspondiente a la
parte del diacutea de fecha
MONTH(fecha) Retorna el numero correspondiente a la
parte del mes de fecha
YEAR(fecha) Retorna el numero correspondiente a la
parte del antildeo de fecha
GETUTCDATE() Retorna la fecha y hora del meridiano de
Greenwich
La siguiente tabla muestra los valores de partefecha que podemos utilizar
partefecha Abreviatura
Year Yy yyyy
Quarter Qq q
Month Mm m
Dayofyear Dy y
Day Dd d
Week Wk ww
weekday Dw
Hour Hh
minute Mi n
second Ss s
milisecond Ms
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 30
Getdate
Select getdate () Funcioacuten que recupera la fecha actual del sistema
Convert Cast
Convierten expliacutecitamente una expresioacuten de un tipo de datos en otro CAST y CONVERT
proporcionan funciones similares
Convert (Tipodedatosdestino Origen Estilo)
o Tipodedatosdestino Siempre ha de ser tipo caraacutecter
o Origen Puede ser tipo fecha numeacuterico o moneda
o Estilo Opcional Es un coacutedigo que indica el formato en el que devuelve la cadena de
caracteres
Sintaxis
Convert (TipoDato Dato)
Cast (Dato as TipoDato)
Ejemplo
declare n intpalabra nvarchar(10)
set n = 1
set palabra =Nuacutemero
print convert(nvarchar(2)n) + + palabra
print cast(n as nvarchar(2)) + + palabra
while (nlt11)
begin
print convert(nvarchar(2)n) + + palabra
print cast(n as nvarchar(2)) + + palabra
set n = n + 1
end
DateName
Devuelve una cadena de caracteres que representa la parte de la fecha especificada de la fecha
especificada
Los caacutelculos 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
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 31
Ejemplo 46
Select IdPedido DateName (week FechaPedido) as Numero de Semana from Pedidos where IdPedido
= 1035251
Ejemplo 47
Select IdPedido datename (weekday FechaPedido) as Diacutea De Semana from Pedidos where IdPedido =
10352 Martes
Horas
Ejemplo 48
Select IdPedido datename (mi FechaPedido) as Minutos from Pedidos where IdPedido = 10352
Ejemplo 49
Select DateName (minute getdate ()) as minutos
Ejemplo 50
Select DateName (Hh FechaPedido) as hora from Pedidos where IdPedido = 10352
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 32
Ejemplo 51
Select DateName (Hour getdate ()) as hora--gt18
Ejemplo 52
Select DateName (Hh getdate ()) as hora--gt18
DatePart
Devuelve la parte de la fecha u hora indicada Sintaxis
Datepart (Valor devolver fecha)
Ejemplo 53
Select IdPedido datepart (mm FechaPedido) as Mes from Pedidos where IdPedido = 10352
Ejemplo 54
Select Datepart (Hh getdate ()) as Hora--gt17
Ejemplo 55
Select Datepart (mi getdate ()) as Minutos--gt54
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 33
Nombres de Fechas
Day (fecha)
Devuelve UN INT equivale a Datepart
Select day (getdate ()) as diacutea--gt6 (diacutea en la que se ejecuta la sentencia)
Select Datepart (dd getdate ()) --gt6 (diacutea en la que se ejecuta la sentencia)
Select Month (getdate ()) --gt1 (Mes en la que se ejecuta la sentencia)
Select Datepart (mm getdate ()) --gt1 (Mes en la que se ejecuta la sentencia)
Select Year (getdate ()) --gt2008 (Antildeo en la que se ejecuta la sentencia)
Ejemplo 56
Select year (FechaPedido) as Antildeo from Pedidos where IdPedido = 10352
Ejemplo 57
Select datediff (yyyy FechaPedido getdate()) as Dia from Pedidos where IdPedido = 10352
DateAdd
DateAdd (Datepart number date)
Antildeade un nuacutemero a la fecha puesta
DatePart es el formato de lo que queremos antildeadir
Number es el nuacutemero que queremos incrementar la fecha expuesta
Select convert (datetime1-1-02)
Select dateadd (dd 71-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 comparacioacuten y el tipo de dato
que nos devolveraacute antildeos diacuteas minutos etc
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 34
Ejemplo 58
Select datediff (yyyy FechaPedido getdate ()) as Dia from Pedidos where IdPedido = 10352
Ejercicios de funciones de Fecha
Ejemplo 59
Lista de pedidos emitidos en febrero de 1996
Select from Pedidos where month (FechaPedido) =2 and year (FechaPedido) =1996
Ejemplo 60
Lista de Pedidos mostrando la diferencia en diacuteas entre la fecha del pedido y la fecha de Envioacute
Select IdPedido FechaPedido FechaEnviacuteo diacuteas =datediff (day FechaPedido FechaEnviacuteo) from
pedidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 35
Ejemplo 61
Genere un listado de pedidos en el que la fecha del pedido se muestre en el formato nombre del
diacutea diacutea de mes antildeo
Select IdPedido FechaPedido Fecha=datename (dw IdPedido)+ + str (datepart (dd
IdPedido) 2)+ de +datename (mm IdPedido)+ de +str (datepart (yy IdPedido) 4) from
pedidos
Ejemplo 62
Mostrar de la tabla pedidos la fecha de pedidos en fecha corta
Select IdPedido convert (varchar (30) FechaPedido 106) as [Fecha Corta] from pedidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 36
FUNCIONES MATEMATICAS
ABS
Es el valor Absoluto
Select ABS (-4) as VALOR ABSOLUTO--gt4
CEILING
Devuelve el entero maacutes pequentildeo mayor o igual que la expresioacuten numeacuterica dada
Select CEILING (54) as CEILING--6
FLOOR
Devuelve el entero maacutes grande menor o igual que la expresioacuten numeacuterica dada
Select FLOOR (5) as FLOOR--gt5
POWER
Devuelve el valor de la expresioacuten indicada elevada a la potencia especificada
Select POWER (3 2) as 3 ELEVADO A 2--gt9
RAND
Devuelve un valor float aleatorio de 0 a 1
Las llamadas repetitivas de RAND() en una uacutenica consulta produciraacuten el mismo valor
Select RAND(6) as ALEATORIO--071368515806921451
Select RAND(6) as ALEATORIO--071368515806921451
Select RAND(4) as ALEATORIO--07136478921266981
Rand sobre los milisegundos actuales
Select RAND(DATEPART(msGETDATE())) as ALEATORIO--gt071443047691954253
Select RAND(999999999)--gt068504257551273573
ROUND
Devuelve una expresioacuten numeacuterica redondeada a la longitud o precisioacuten especificada
Round (Nuacutemero Redondeo del Nuacutemero)
ROUND siempre devuelve un valor Si length es un valor negativo y mayor que el nuacutemero de
diacutegitos anteriores al separador decimal ROUND devuelve 0
Select ROUND (1234567 2) --gt1234600
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 37
Select ROUND (1234567-2) --gt1000000
Select ROUND (1234567 0) --gt1230000
Select ROUND (1234567-3) ---gt0
SIGN
Devuelve el signo positivo (+1) cero (0) o negativo (-1) de la expresioacuten especificada
Dice el valor negativo positivo o neutro (0) del valor especificado
Select SIGN (-3) --gt-1
Select SIGN (3) --gt1
Select SIGN (0) --gt0
SQUARE
Devuelve el cuadrado de la expresioacuten especificada
Select SQUARE (4) as bdquoCuadrado‟--gt160
SQRT
Devuelve la raiacutez cuadrada de la expresioacuten especificada
Select SQRT (4) as [RAIZ CUADRADA] --gt20
FUNCIONES DE CADENA
ASCII
Devuelve el coacutedigo ASCII del caraacutecter maacutes a la izquierda de una expresioacuten de caracteres
Select ASCII(A)--gt65
Select ASCII(a)--gt97
Select ascii(aula)--gt97
CHAR
Una funcioacuten de cadena que convierte un coacutedigo ASCII int en un caraacutecter
select char(65)--gtA
select char(97)--gta
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 38
CHARINDEX
Devuelve la posicioacuten inicial de la expresioacuten especificada en una cadena de caracteres
CHARINDEX (expression1 expression2 [ start_location])
Argumentos
expression1
Es una expresioacuten que contiene la secuencia de caracteres que se desea buscar
Expression1 es una expresioacuten del tipo de cadenas cortas de caracteres
Expression2
Es una expresioacuten normalmente una columna
en la que se busca la cadena especificada
Expression2 es de la categoriacutea del tipo de datos cadena de caracteres
start_location
Es la posicioacuten del caraacutecter de expression2 en el que se empieza la buacutesqueda de expression1
Si no se especifica start_location es un nuacutemero negativo o es cero
la buacutesqueda empieza al principio de la cadena expression2
Si expression1 no se encuentra en expression2 CHARINDEX devuelve 0
Si alguno de los dos es null devuelve null
Select charindex (ciemurcielago) --gt4
Select charindex (ciemurcielago 2) --gt4
Select charindex (ciemurcielago 5) --gt0
Select charindex (ciemurcielago-6) --gt4
LEFT
Devuelve la parte de una cadena de caracteres que comienza en un nuacutemero de caracteres
especificado a partir de la izquierda
Select left (murcielago5) --gtmurci
RIGHT
Devuelve la parte de una cadena de caracteres que
Comienza en el nuacutemero de caracteres especificado
En integer_expression a partir de la derecha
Select right (hola que tal5) --gte tal
LEN
Cuenta el nuacutemero de caracteres que se incluyen en la cadena
Select len (murcieacutelago) --gt10
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 39
LOWER
Convierte a Minuacutesculas la cadena especificada
Select lower (MurcIELaGO) as [minusculas] --gtmurcielago
UPPER
Convierte a Mayuacutesculas la cadena especificada
Select upper (murcielago) as [MAYUSCULAS] --gtMURCIELAGO
RTRIM y LTRIM
Elimina los espacios que existen a la izquierda y a la derecha respectivamente
Select Rtrim ( murcieacutelago ) AS [SIN ESPACIOS] --gtmurcieacutelago
Select Ltrim ( murcieacutelago ) AS [SIN ESPACIOS] --gtmurcieacutelago
Select ltrim(rtrim( hola ))+
REPLACE
Reemplaza por una tercera expresioacuten todas las apariciones
de la segunda expresioacuten de cadena proporcionada en la primera expresioacuten de cadena
Select replace (hola que tal estasaA) --gtholA que tAl estAs
Select replace (buenos dias que tal estasuentildentildentilde) --gtbntildentildentildenos diasqntildentildentilde tal estas
SPACE
Coloca el nuacutemero de espacios que se le indiquen para entre una cadena de caracteres
Select hola+space(5)+que tal--gthola que tal
SUBSTRING
Devuelve parte de una expresioacuten de caracteres binaria de texto o de imagen
Sintaxis
SUBSTRING (Expresioacuten Comienzo Duracioacuten)
Argumentos
Expresioacuten
Es una cadena de caracteres cadena binaria texto imagen
Columna o expresioacuten que incluye una columna
No deben usarse expresiones que incluyan funciones de agregado
Start
Es un entero que especifica el punto en que comienza la subcadena
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 40
Length
Es un entero que especifica la longitud de la subcadena
(El nuacutemero de caracteres o bytes que se devuelven)
Select substring (murcielago 3 5) --gtrciel
Select substring (murcielago 3 len (murcielago)) --gtrciel
REVERSE
Devuelve invertida una expresioacuten de caraacutecter
Select reverse (hola)
REPLICATE
Repite una expresioacuten de caracteres un nuacutemero especificado de veces
Select replicate (murcielago 5)
Replicate replicate replicate replicate replicate
STUFF
Elimina el nuacutemero de caracteres especificados e insertados
Otro conjunto de caracteres en un punto de inicio indicado
Select STUFF (Murcieacutelago 2 3 ijklmn) Mijklmnielago
FUNCIONES DE SISTEMA
- APP_NAME () Devuelve el nombre de la aplicacioacuten actual
Select app_name () as [Nombre de la aplicacion]
- DATALENGTH (Expresioacuten) Devuelve un entero que es numero de bites necesarios para
representar esa expresioacuten int
Select datalength (Ninoni) as [Numero de bites]
- ISDATE (Expresioacuten) Dice si la expresioacuten es una fecha o no Devuelve 1 si la expresioacuten es
una fecha y 0 si no es una fecha
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 41
Select isdate (121001) as [Validacioacuten Fecha]
- ISNUMERIC (Expresion) Dice si la expresioacuten es un numero o no Devuelve 1 si la
expresioacuten es un nuacutemero y 0 si la expresioacuten no es nuacutemero
Select isnumeric (ddd) as [Validacion Numero]
- ISNULL (Expresioacuten ExpresionDevuelta) Si la expresioacuten es nula te devuelve la Expresioacuten
Devuelta y si no devuelve la primera Expresioacuten
Select isnull (nullNo nulo) as [Es Nulo]
- PARSENAME (bdquoNombreObjeto‟ ParteNombre)
ParteNombre es un valor de tipo Int que coge unos determinados valores del
NombreObjeto
1 Objeto
2 Propietario
3 Base de Datos
4 Servidor
Select parsename (saposeidondbopedidos1) as [Parte Expresioacuten]
Select parsename (saposeidondbopedidos 2) as [Parte Expresioacuten]
Select parsename (saposeidondbopedidos3) as [Parte Expresioacuten]
Select parsename ( saposeidondbopedidos 4) as [Parte Expresioacuten]
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 42
- SYSTEM_USER Devuelve el usuario del sistema actual
Depende de la autentificacioacuten con la que te hayas conectado
Select system_user as [Usuario conectado]
- USER_NAME() Devuelve el nombre del usuario actual
Select user_name ()
- COALESCE (expresioacuten1 expresioacuten2 )
Devuelve la primera expresioacuten no NULL
Si todos son NULL devuelve NULL
Select coalesce (PrecioUnidad Cantidad) from [detalles de Pedidos] Si el PrecioUnidad es nulo
devolveraacute la Cantidad y si los dos son nulos devolveraacute un campo Null
PROCEDIMIENTOS PARA AGRUPAR Y RESUMIR DATOS
En el examen de certificacioacuten 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 usaraacute la base de datos indicada Ejemplo Ponemos
en el analizador de consultas lo siguiente
Use Northwind
Select from [Order Details]
[Order Details]
Esta tabla perteneciente a la Northwind se encarga de manejar los pedidos
Order Id Nordm de Pedido
Producto Id Nordm de Producto
Ambos campos son Primary Key con lo que no puede haber una combinacioacuten de ambos campos que sea
igual
OrderId ProductId
1 A
1 B
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 43
1 C
2 A
3 C
Es decir en este caso no podriacutea existir una nueva combinacioacuten ldquo1 Ardquo o ldquo2 Ardquo
Quantity Es la cantidad del producto del pedido
ROLLUP
Se usa para presentar resuacutemenes de datos A de usarse junto con la clausula group by lo que hace es
realizar un resumen de los campos incluidos en el rollup
Ejemplo 63
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
Group by ProductID OrderID
with Rollup
Order by ProductID OrderID
Este ejemplo suma todas las cantidades y mediante
rollup muestra una fila con la suma de todas las
cantidades de cada producto y ademaacutes otra fila con la
suma de todas las cantidades de todos los productos El
resultado de este ejemplo seriacutea el que muestra la
imagen
Ejemplo 64
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
where orderid lt 10250
Group by ProductID OrderID
with Rollup
Order by ProductID OrderID
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 44
CUBE
Al igual que Rollup realiza resuacutemenes de campos agrupados Pero en este caso muestra un resumen con
cada combinacioacuten posible de los campos agrupados
Ejemplo 65
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
where orderid lt 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 combinacioacuten posible entre el
productid y el orderid
GROUPING
Indica si el resultado de un campo es el que hay en la propia tabla o se ha introducido mediante una
claacuteusula de resumen es decir para saber por ejemplo si un ldquoNullrdquo 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 lt 10250 Group by ProductID
OrderID with Cube Order by ProductID OrderID
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 45
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
Ponieacutendole un alias al
grouping saldriacutea el nombre
de columna que le
indiquemos
COMPUTE
Realiza un resumen en una columna aparte con el resultado de la funcioacuten de agregado indicada Su
formato seriacutea Compute funcioacuten(campo) No se puede utilizar en aplicaciones cliente servidor es una
clausula meramente informativa Tampoco se le pueden poner alias a los resuacutemenes
Ejemplo 67
Select Productid Orderid Quantity From [Order Details] order by ProductID Orderid compute
Sum(quantity)
Vemos que muestra la
columna con la suma
total de todas las
cantidades
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 46
Ejercicios de ROLLUP GROUPING y CUBE
Ejemplo 68
Realizar una consulta que resuma la cantidad de artiacuteculos pedidos por cada iacutendice de producto y
nuacutemero de pedido Realizando un caacutelculo acumulativo
select productid as [PRODUCTO] orderid as [Nordm PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] group by productid orderid with rollup order by productid orderid
PRODUCTO Nordm 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
hellip
Ejemplo 69
Modificacioacuten al ejercicio anterior Realizar el mismo resumen pero uacutenicamente para el producto
cuyo id es 50
select productid as [PRODUCTO] orderid as [Nordm PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] where productid = 50 group by productid orderid with rollup order by productid ordered
PRODUCTO Nordm 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
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 47
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 modificacioacuten 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 [Nordm PEDIDO] grouping(orderid) as [GRUPO PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] where productid = 50 group by Productidorderid with cube order by productidorderid
PRODUCTO GRUPO PRODUCTO Nordm PEDIDO GRUPO PEDIDO SUMA TOTAL
----------- -------------- ----------- ------------ -----------
NULL 1 NULL 1 235
NULL 1 10350 0 15
NULL 1 10383 0 15
NULL 1 10429 0 40
NULL 1 10465 0 25
NULL 1 10637 0 25
NULL 1 10729 0 40
NULL 1 10751 0 20
NULL 1 10920 0 24
NULL 1 10948 0 9
NULL 1 11072 0 22
50 0 NULL 1 235
50 0 10350 0 15
50 0 10383 0 15
50 0 10429 0 40
50 0 10465 0 25
50 0 10637 0 25
50 0 10729 0 40
50 0 10751 0 20
50 0 10920 0 24
50 0 10948 0 9
50 0 11072 0 22
(22 filas afectadas)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 48
Obtencioacuten de resuacutemenes 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 maacutes columnas y
luego efectuar alguna operacioacuten de resumen sobre cada grupo asiacute generado
La diferencia con GROUP BY es que permite mostrar informacioacuten mas detallada de cada grupo
Ejemplo 71
Lista de pedidos que muestre por coacutedigo de pedido la cantidad de productos vendidos por cada uno
de ellos
select Idpedidoidproductopreciounidadcantidad[Sub Total]=sum(PreciounidadCantidad) from
[detalles de pedidos] group by Idpedidoidproductopreciounidadcantidad order by IdPedido compute
sum(Cantidad) by IdPedido
EJERCICIOS CON COMPUTE
Ejemplo 72
Generar un resumen de subtotales en una consulta que devuelva el nuacutemero de pedido la cantidad
pedida para todos los orderid 11070
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 49
Select Orderid as [Nordm PEDIDO] Quantity AS [CANTIDAD] From [Order Details] where orderid gt= 11070 order by Orderid compute Sum(quantity) by orderid compute sum(quantity)
Nordm PEDIDO CANTIDAD
----------- --------
11070 40
11070 20
11070 30
11070 20
sum
===========
110
sum
===========
110
(6 filas afectadas)
Ejemplo 73
Generar un resumen con calculo de subtotales similar al anterior pero para los orderid 11075 y
11076
Select Orderid as [Nordm PEDIDO] Quantity as [CANTIDAD] From [Order Details] where orderid = 11075 or orderid = 11076 order by Orderid compute Sum(quantity) by ordered Nordm PEDIDO CANTIDAD ----------- -------- 11075 10 11075 30 11075 2 sum =========== 42 Nordm PEDIDO CANTIDAD ----------- -------- 11076 20 11076 20 11076 10
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 50
sum =========== 50 (8 filas afectadas)
Ejemplo 74
Modificacioacuten al ejercicio anterior Agregar la cantidad total y la cantidad promedio al final del
informe
Select Orderid as [Nordm 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)
Nordm PEDIDO CANTIDAD
----------- --------
11075 10
11075 30
11075 2
sum
===========
42
Nordm PEDIDO CANTIDAD
----------- --------
11076 20
11076 20
11076 10
sum
===========
50
sum
===========
92
avg
===========
15
(10 filas afectadas)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 51
Ejemplo 75
Seleccionar de forma agrupada por tipo todos los tipos la suma de los precios y la suma del
anticipo de la tabla tiacutetulos
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 199900 50000000
business 119500 50000000
business 29900 101250000
business 199900 50000000
sum
=====================
549200
avg
=====================
62812500
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
mod_cook 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
avg
=====================
75000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
popular_comp 229500 70000000
popular_comp 200000 80000000
popular_comp NULL NULL
sum
=====================
429500
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 52
avg
=====================
75000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
psychology 215900 70000000
psychology 109500 22750000
psychology 70000 60000000
psychology 199900 20000000
psychology 79900 40000000
sum
=====================
675200
avg
=====================
42550000
(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 ademaacutes 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 199900 50000000
business 119500 50000000
business 29900 101250000
business 199900 50000000
sum
=====================
549200
sum
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 53
=====================
251250000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
mod_cook 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
popular_comp 229500 70000000
popular_comp 200000 80000000
popular_comp NULL NULL
sum
=====================
429500
sum
=====================
150000000
(30 filas afectadas)
Ejemplo 77
Generar un informe que muestre la suma de los precios de los libros de psicologiacutea 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 109500
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 54
psychology 0736 70000
psychology 0736 199900
psychology 0736 79900
sum
=====================
459300
TIPO CODIGO EDITOR PRECIO
------------ ------------- ---------------------
psychology 0877 215900
sum
=====================
215900
(7 filas afectadas)
Ejemplo 78
Generar un informe que obtenga la suma de los precios de todos los libros de psicologiacutea asiacute como la
suma de los precios de los libros de psicologiacutea 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 109500
psychology 0736 70000
psychology 0736 199900
psychology 0736 79900
sum
=====================
459300
TIPO CODIGO EDITOR PRECIO
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 55
------------ ------------- ---------------------
psychology 0877 215900
sum
=====================
215900
sum
=====================
675200
(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 199900 0000
mod_cook 0877 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO CODIGO EDITOR PRECIO ANTICIPO
------------ ------------- --------------------- ---------------------
trad_cook 0877 119500 40000000
trad_cook 0877 209500 70000000
trad_cook 0877 149900 80000000
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 56
sum
=====================
478900
sum
=====================
190000000
(9 filas afectadas)
Ejemplo 80
Generar un informe que muestre todos los tiacutetulos precio y anticipo de aquellos tiacutetulos que tengan
un precio superior a 20 doacutelares Ofreceraacute tambieacuten la suma total del precio y del anticipo
Select title as [TITULO] price as [PRECIO] advance as [ANTICIPO] From titles where price gt 20 order by title compute sum(price) compute sum(advance)
TITULO PRECIO ANTICIPO
-------------------------------------------------------------------------------- --------------------- -------------
--------
But Is It User Friendly 229500 70000000
Computer Phobic AND Non-Phobic Individuals Behavior Variations 215900
70000000
Onions Leeks and Garlic Cooking Secrets of the Mediterranean 209500
70000000
sum
=====================
654900
sum
=====================
210000000
(5 filas afectadas)
Ejemplo 81
Generar un informe que muestre el precio el tipo y el nuacutemero de editor de la tabla titles de todos
aquellas obras que pertenezcan la categoriacutea de ldquobusinessrdquo Ademaacutes apareceraacute la suma total de
precios y el maacuteximo pub_id de esta seleccioacuten
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 57
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 29900 0736
business 199900 1389
business 199900 1389
business 119500 1389
sum
=====================
549200
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 Mostraraacute la suma de los precios y los anticipos por tipo y luego calcularaacute 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 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
trad_cook 209500 70000000
trad_cook 119500 40000000
trad_cook 149900 80000000
sum
=====================
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 58
478900
sum
=====================
190000000
sum
=====================
708700
sum
=====================
340000000
(11 filas afectadas)
Eliminacioacuten 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 iquestA que precio se ah vendido los productos
Select IdProducto Preciounidad from [Detalles de pedidos] order by IdProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 59
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 mayoriacutea de las consultas que se hacen en una base de datos requiere que se lean datos procedentes
de dos oacute maacutes tablas
INNER JOIN- son las filas que satisfacen la condicioacuten de la combinacioacuten
En la siguiente sentencia SQL enlaza 2 tablas la tabla clientes y la tabla pedidos en esta ejemplo me
muestra los campos nombre compantildeiacutea y el campo idpedido
La uacutenica condicioacuten es que las 2 tablas tengan un campo en comuacuten
Ejemplo 84
select clientesNombreCompantildeiacuteapedidosidpedido from clientes inner join pedidos on
clientesidcliente=pedidosidcliente
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 60
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 pedidosIdPedido pedidosIdCliente 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 pedidosIdPedido pedidosIdCliente order
by pedidos IdPedido
CROSS JOIN
Un Cross Join es la consulta correlacionada que combine cada una de las filas de una de las tablas con
todas las filas de la otra tabla
No es necesario que exista una columna en comuacuten para ejecutar el Cross Join
Ejemplo 86
La siguiente consulta combina cada una de las filas de la tabla categoriacuteas con cada una de las filas de la
tabla productos
select productosNombreProductocategoriasNombrecategoria from productos cross join categorias
order by productosNombreProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 61
Ejercicios de consultas Muacuteltiples
Ejemplo 87
Mostrar el pedidos completo con el id=10248
Select pedidosIdPedido pedidosIdCliente
Total=sum ([detalles de pedidos]Preciounidad[detalles de pedidos]Cantidad)
From [detalles de pedidos] inner join pedidos on
[Detalles de pedidos]IdPedido=pedidosIdPedido where pedidosIdPedido=10248
Group by pedidosIdPedido pedidosIdCliente
Ejemplo 88
1 Mostrar la cantidad de productos por categoriacutea
Select CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
[Total de Producto]=sum (UnidadesEnExistencia) from Categoriacuteas inner join
Productos on CategoriacuteasIdCategoriacutea=productosIdCategoriacutea
Group by CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 62
Ejemplo 89
Calcular cuantas ventas tiene cada uno de los vendedores
Select empleadosIdEmpleado empleadosNombre empleadosApellidos
[Total de ventas]=count (pedidosIdPedido) from empleados
Inner join Pedidos on empleadosIdEmpleado=pedidosIdEmpleado
Group by empleadosIdEmpleado empleadosNombre empleadosApellidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 63
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 despueacutes saca la de Plantilla
Recomendaciones a la hora de usar las combinaciones
Combinar tablas en funcioacuten de claves principales y externas
Limite el nuacutemero de tablas de las combinaciones
Select Apellido
Oficio as
OFICIOFUNCION
salario from emp
UNION
Select Apellido
Funcion Salario from
Plantilla
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 64
SUBCONSULTAS
Es una SELECT anidada en una instruccioacuten INSERT DELETE SELECT o UPDATE
Como una tabla derivada
Select eemp_no as Numero
eApellido
from (select emp_no apellido from emp) as e
Como una expresioacuten
Select emp_no as [Numero]
Apellido
Salario
(select avg(Salario) from emp)
as Diferencia
from emp
where oficio = Empleado
Para correlacionar datos
- Expresioacuten dinaacutemica que cambia en cada fila de una consulta externa
- Es una combinacioacuten entre la subconsulta y la fila de la consulta externa
- Dividen consultas complejas con dos o maacutes consultas simples relacionadas
Subconsulta correlacionada
Select apellido oficiodept_no
from emp as e
where 20 lt
(select dept_no from dept as d
where edept_no = ddept_no
and ddnombre = Ventas)
SUBCONSULTAS
1 Mostrar el numero de empleado el apellido y la fecha de alta del empleado mas antiguo de la
empresa
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 65
SELECT emp_noapellido
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_noapellido
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 Jimeacutenez
select apellido oficio from emp where
oficio = (select oficio from emp where apellido = JIMENEZ)
4 Queremos saber el apellido oficio salario y nuacutemero 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 gt (select max (salario) from
emp where dept_no = 30)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 66
5 Mostrar el apellido la funcioacuten sala o departamento de todos los empleados que trabajen en la
empresa
select eApellido eOficio as [Cargo en Empresa] ddnombre as [Oficina]
from emp as e
inner join dept as d
on edept_no = ddept_no
union
select pApellido pfuncion snombre
from plantilla as p
inner join sala as s
on phospital_cod = shospital_cod
and psala_cod = ssala_cod
union
select dApellido despecialidad hnombre
from doctor as d
inner join hospital as h
on dhospital_cod = hhospital_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 = lsquoventasrsquo))
order by 2
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 67
8 Mostrar los empleados que tienen mejor salario que la media de los directores no incluyendo al
presidente
Select from emp where salario gt
(select avg (salario) from emp where oficio = DIRECTOR)
and oficio ltgt PRESIDENTE
9 Mostrar el apellido funcioacuten salario y coacutedigo 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 = lsquoENFERMEROrsquo or
funcion = lsquoENFERMERArsquo) and hospital_cod = (select hospital_cod from hospital where nombre =
lsquoSAN CARLOSrsquo)
Select apellido funcion salario hospital_cod from plantilla where
funcion in (ENFERMEROENFERMERA)
and hospital_cod = (select hospital_cod from hospital
where nombre = SAN CARLOS)
10 Visualizar los datos de los hospitales que tienen personal (Doctores) de cardiologiacutea
Select from hospital where hospital_cod in (select hospital_cod from doctor where
especialidad = lsquoCardiologiacutearsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 68
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 = lsquoPROVINCIALrsquo or
nombre= lsquoGENERALrsquo)
12 Mostrar el apellido de los enfermos que nacieron antes que el Sentildeor Miller
Select apellido from enfermo where Fecha_nac lt (select fecha_nac from enfermo where
apellido = lsquoMILLER Brsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 69
Simulacion de una clausula JOIN
Vamos a mostrar los oficios que estaacuten en maacutes de un departamento
Select distinct e1oficio from emp as e1
where e1oficio in(Select e2oficio from emp as e2
where e1dept_no ltgt e2dept_no)
Se debe utilizar antes una combinacioacuten que una subconsulta la combinacioacuten seriacutea asi dando los
mismos resultados
Select distinct e1Oficio from emp as e1
inner join emp as e2
on e1oficio = e2oficio
where e1dept_no ltgt e2dept_no
Estos son los dos oficios que estaacuten en
maacutes de un departamento
Subconsulta para simular una clausula HAVING
select e1apellidoe1oficio e1salario
from emp as e1
where e1salario gt
(select avg(e2salario) from emp as e2
where e1oficio = e2oficio)
Esta es la consulta utilizando el HAVING que es la que deberiacuteamos utilizar antes que una
subconsulta de simulacioacuten HAVING
SELECT e1apellidoe1oficio e1salario
FROM emp AS e1
INNER JOIN emp AS e2
ON e1oficio = e2oficio
GROUP BY e1oficio e1salarioe1apellido
HAVING e1salario gt AVG (e2salario)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 70
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 6
Coacutemo crear una relacioacuten de varios a varios entre tablas
Para crear una relacioacuten de varios a varios entre tablas
1 Abra un diagrama de base de datos
2 Agregue las tablas entre las que desea crear una relacioacuten de varios a varios
3 Cree una tercera tabla Para ello haga clic con el botoacuten secundario del mouse dentro del
diagrama de la base de datos y a continuacioacuten haga clic en Nueva tabla
Eacutesta se convertiraacute en la tabla de unioacuten
4 En el cuadro de diaacutelogo Elegir nombre escriba un nombre para la tabla
Por ejemplo la tabla de unioacuten entre la tabla de tiacutetulos 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 unioacuten
Puede agregar otras columnas a esta tabla igual que en cualquier otra tabla
6 En la tabla de unioacuten establezca la clave principal para que incluya todas las columnas de la clave
principal de las otras dos tablas
7 Defina una relacioacuten de uno a varios entre cada una de las dos tablas principales y la tabla de
unioacuten
Fundamentos de Programacioacuten con SQL Existen 3 tipos de instrucciones para el lenguaje en SQL
- Lenguaje de control de datos (DDL) Creacioacuten y eliminacioacuten de tipos de datos y objetos
CREATE Crear Objeto
ALTER Modificar los datos creados
DROP Eliminar el Objeto
- Lenguaje de control de datos (DCL) Se basa en los derechos que tiene el usuario sobre la
base da datos (Permisos)
GRANT Dar permisos a un usuario para efectuar determinadas
Instrucciones
DENY Eliminar el permiso que se ha concedido con el GRANT
REVOKE Eliminar todos los permisos
- Lenguaje de manipulacioacuten de datos (DML) Desarrollo de la programacioacuten de la base de
datos
SELECT
INSERT
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 7
UPDATE
DELETE
Elementos de sintaxis
Directivas de procesos por lotes
- GO Enviacutea 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 liacutenea --
- 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 nuacutemero
deben empezar por un signo alfabeacutetico pueden incluir el guion bajo (_) la arroba y la
almohadilla
Generalmente para las variables locales se usan + el nombre
EJEMPLO Contador
Para las variables totales se usan dos arrobas + el nombre Contador
EJEMPLO Error
Nombre indica una tabla o procedimiento temporal (Local)
Nombre Igual que el anterior pero global
Tipos de datos
- Numeacutericos
Enteros int tinyint smallint bigint
Decimales numeric decimal money smallmoney
Coma Flotante float real
- Fechas
datetime 0333 s
smalldatetime 1 minuto
- Caracteres
Ancho fijo char nchar
Ancho Variable varchar nvarchar
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 8
- Texto e Imagen
Text
Ntext
Rowversion
- Binario
Binary varbinary Valores tipo byte
Bit Un solo bit (1 o ninguno)
- Identificadores Uacutenicos
Representa un identificador global uacutenico (GUID)
Si queremos que no se repita el dato en la base de datos usamos este identificador
Uniqueidentifier
Operadores de SQL
Loacutegicos
AND OR NOT
De Comparacioacuten
= Igual
lt Menor
gt Mayor
ltgt Diferente
gt= Mayor o igual
lt= Menor o igual
Crear una Base de Datos Utilizando el Lenguaje SQL
Ejemplo
Para crear la base de datos es la siguiente opcioacuten database seguido del nombre de la Base de Datos
--Create database Itae
On primary
(Name= Itae _data Filename=C itaemdf size=10 maxsize=15 filegrowth=25)
Log On
(Name= Itae _log filename=C itaeldf size=4 maxsize=6 filegrowth=1MB)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 9
Despueacutes de la sentencia Create database Se especifica el nombre de la base de datos Un
nombre en la base de datos debe de ser uacutenico 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 ndash Especifica el tamantildeo del Archivo
Maxsize ndashEspecifica el tamantildeo maacuteximo que puede alcanzar el archive si se requiere espacio adicional
Filegrowth ndashEs la cantidad de espacio que se antildeade 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 procederaacute abrir la base de datos con el use nombre de la base de datos y luego el Use Go
Use master
Go
Luego se procederaacute abrir la tabla Sysdatabases y ahiacute se podraacute visualizar si la base de datos ah
sido creada
Select from Sysdatabases
Luego se procederaacute abrir la base de datos con el use nombre de la base de datos y luego el go
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 10
INSERCIOacuteN ELIMINACIOacuteN Y MODIFICACIOacuteN DE DATOS
- Insercioacuten 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 INSERTSELECT
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
- Creacioacuten de una tabla mediante SELECT INTO Creacioacuten 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
- Insercioacuten de datos parciales No introducir todos los datos solo meter datos en un
determinado campo o en varios pero no en toda la tabla
- Insercioacuten de datos mediante valores de columna predeterminados Se usa para no
dejar a las tablas con el valor null y asiacute 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
ELIMINACIOacuteN 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 = bdquoSERRA‟
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 11
- TRUNCATE TABLE Elimina todas las filas de la tabla (La tabla con su estructura no se
elimina soacutelo los datos de la tabla) No crea filas en el registro de transacciones con lo cual
es el meacutetodo maacutes raacutepido de borrar
TRUNCATE TABLE NombreTabla
Truncate Table emp
- Eliminacioacuten de filas basada en otras tablas
DELETE [ FROM ] NombreTabla | NombreVista
[ FROM OrigenTabla ] [ WHERE CondicionBusqueda ]
ACTUALIZACIONES
- Actualizacioacuten de filas basadas en datos de la propia tabla
UPDATE NombreTabla | NombreVista
SET NombreColumna = expresioacuten DEFAULT | NULL
USE Northwind
UPDATE products
SET unitprice = (unitprice 11 )
- Actualizacioacuten de filas basadas en otras tablas
UPDATE NombreTabla | NombreVista
SET NombreColumna = expresioacuten DEFAULT | NULL
FROM OrigenTabla
WHERE CondicionBusqueda
Ejercicios
Ejemplo 1
Abrir la base de datos creada anteriormente
--use Itae
se procederaacute abrir la base de datos
--go
Ejemplo 2
Crearemos la Tabla alumnos
--CREATE TABLE alumnos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 12
--(
--Idalumno VarChar(8)not null
--nom_alumno Varchar (50) Not Null
--ape_alumno Varchar (50) Not Null
--dir_alumno Varchar (50) Not Null
--tel_alumno VarChar(8)
--Email_alumno Varchar (50)
--)
Ejemplo 3
Para que se muestre la Tabla completa y con todos los registros se utiliza en Select para
seleccionar los campos from para seleccionar la tabla que se desea visualizar
--select from alumnos
Ejemplo 4
Ingreso de Datos a la Tabla alumnos se utiliza la sentencia insert into
--Insert into alumnos (idalumnonom_alumnoape_alumnodir_alumnotel_alumnoemail_alumno)Values
(Cli01jamesjamesVentanilla252511jazoon_28hotmailcom)
--Insert into alumnos (idalumnonom_alumnoape_alumnodir_alumnotel_alumnoemail_alumno)Values
(Cli01Juan CarlosOchoa ValverdeCoop Primavera Mz R1 Lote 16557-
2147jaz_28hotmailcom)
--Insert into alumnos (idalumnonom_alumnoape_alumnodir_alumnotel_alumnoemail_alumno) Values
(Cli02ArturoCapuntildeay LaquiJr Viru 406 Nordm8481-6507eternal_alcarisHotmailcom)
--Insert into alumnos (idalumnonom_alumnoape_alumnodir_alumnotel_alumnoemail_alumno) Values
(Cli03Luis AlexanderAguilar WongJr Hon 920-1090luis_hexenHotmailcom)
--Insert into alumnos (idalumnonom_alumnoape_alumnodir_alumnotel_alumnoemail_alumno) Values
(Cli04Fredy Richard Anaya JesusResidencial 539-0886fredyanayaHotmailcom)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 13
Ejemplo 5
Si deseaacuteramos Eliminar seria con la sentencia Delete
--delete from alumnos where nom_alumno=juan Carlos
Ejemplo 6
Para Actualizar se Utiliza la sentencia Update y Set
--Update alumnos set nom_alumno=diego ape_alumno=cueva dir_alumno=los olivos
tel_alumno=5402972 email_alumno=hades_278hotmailcom where idalumno=01
Ejemplo 7
Para Realizar una Consulta se utiliza el Where
--select from alumnos where idalumno=Cli01
Ejemplo 8
Si tambieacuten uno desea se puede poner en orden ascendente y descendente paraacute ello se utilizar el
ASC y Desc
--select from alumnos ORDER BY nom_alumno Asc
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 14
--select from alumnos ORDER BY nom_alumno desc
Ejemplo 9
Para eliminar un Objeto de la base de datos se utiliza la sentencia Drop
Eliminar de la base de Datos Itae la Tabla Alumnos
Drop table alumnos Elimina la Tabla Clientes con la sentencia Drop seguido del tipo de
objeto y finalizando el nombre
Drop database Itae Elimina la Base de Datos Itae con la sentencia Drop seguido del
tipo de objeto y finalizando el nombre
OPERADORES DE CONDICIOacuteN _ FILAS
En la expresioacuten loacutegica que especifica condicioacuten _ filas se puede utilizar ademaacutes de los operadores
relacioacuten o de comparacioacuten los siguientes operadores SQL
LIKE- Para comparacioacuten de cadenas de caracteres admite los comodines y _
OPERADOR LIKE
Cualquier nuacutemero de caracteres
_ Para un caraacutecter individual
[ ] Para un conjunto de caracteres que esteacute dentro del corchete
[ ^ ] Que el caraacutecter individual que no esteacute dentro del corchete
EJEMPLO LIKE lsquoeenrsquo Muestra todos los caracteres que acaben con een
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 15
EJEMPLO LIKE lsquoeenrsquo Muestra todos los caracteres que contengan een en ese orden
EJEMPLO LIKE lsquo_enrsquo Muestra todos los caracteres que contenga tres letras y acaben en en
EJEMPLO LIKE lsquo[CK ]rsquo Muestra todos los caracteres que empiecen por C o K
EJEMPLO LIKE lsquo[S-V]ingrsquo Nombre de 4 letras cuya primera letra estuviera entre S o V y acabe en
ing
EJEMPLO LIKE lsquoM[^c]rsquo Todos los que empiecen por M y segunda letra no sea una c No hay limite
de caracteres
BETWEEN- para seleccioacuten en base a un rango de valores Los valores pueden ser numeacutericos de
cana fechas y horas
In-Para seleccioacuten en base a un conjunto de valores los valores pueden ser numeacutericos de cadena
fechas y horas
Para estos ejemplos ah utilizado la base de datos con el nombre de Poseidoacuten y contiene las siguientes
tablas y campos
Ejemplo 10
Lista de productos cuyo nombre contenga la palabra vino
Use Poseidon
Go
Select from productos where nombreproducto like vino
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 16
Luego procedemos a ejecutar la aplicacioacuten
El siacutembolo representa a cualquier cadena de caracteres inclusive la cadena nula
Ejemplo 12
Lista de productos cuya primera letea empieza con la letra a
Select from productos where nombreproducto like [a]
Ejemplo 13
Lista de productos cuya primera letea empieza con la letra a y la tercera con la letra e
Select from productos where nombreproducto like [a][e]
Ejemplo 14
Lista de productos cuyo nombre empieza con cualquier caraacutecter que va en el rango de la M a la
T
Select from productos where nombreproducto like [m-t]
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 17
Ejemplo 15
Lista de productos cuyo nombre empieza con A ograve con cualquier caraacutecter en el rango que va de U
a la Ademaacutes el segundo caraacutecter no debe ser la letra r
Select from productos where nombreproducto like [^b-t][^r]
El Caraacutecter ^ significa incluir
El Caraacutecter representa cualquier cadena de caracteres inclusive la cadena nula
El Caraacutecter _ Representa cualquier caraacutecter 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 caraacutecter empiece con la letra e
Select from productos where nombreproducto like _e
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 18
Ejemplo 18
Lista de productos cuyo nombre empiece con C M Ograve R
Select from productos where nombreproducto like bdquo[cmr]
Ejemplo 19
Lista de productos cuyo nombre empiece con C M Ograve R El segundo Caraacutecter debe ser A
Select from productos where nombreproducto like bdquo[cmr] a
El comodiacuten [cmr] representa el conjunto de caracteres validos en la posicioacuten en la que
apareceraacute el comodiacuten
Ejemplo 20
Seleccionar todos los productos que termine con la letra Z
Select from productos where nombreproducto like z
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 19
Ejemplo 21
Mostrar todos los productos cuya cuarta letra sea A
Select from productos where nombreproducto like ___a
USO DEL OPERADOR BETWEEN
Permite seleccionar en base a un rango de valores
Ejemplo 22
Lista de productos cuyo precio se encuentra en el rango que va de 15 a 21 nuevos soles
Select from productos where preciounidad between 15 and 21
Ejemplo 23
Lista de productos cuyo nombre se encuentren en el rango de Cerveza y galletas
Select from productos where nombreproducto between cerveza and galletas
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 20
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 (londresPariacutesTokyo)
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 (preciounidadcantidad)019 as IGV
from [detalles de pedidos]
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 21
Ejemplo 27
Mostar los productos cuyo precio sea mayor a 40
Select from productos where Preciounidad gt 40
Ejemplo 28
Mostrar todos los datos de los Clientes ordenados por Ciudad
Select from clientes order by ciudad
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 22
Ejemplo 29
Mostrar todos los productos de la Categoriacutea 2
Select from productos where IdCategoriacutea=2
Ejemplo 30
Mostrar todos los pedidos realizados en la fecha 1996-06-05
Select from Pedidos where FechaPedido =1996-06-05
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 23
Ejemplo 31
Mostrar todos los pedidos mayores a la Fecha 1996-05-05
Select from Pedidos where FechaPedido gt 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 IdCategoriacutea no sea 3
Select from productos where IdCategoriacutealtgt 3
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 24
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 Categoriacutea (123)
Select from productos where IdCategoriacutea not in (1 2 3) order by IdProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 25
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
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 26
USO DE FUNCIONES
Podemos utilizar funciones para construir expresiones y generar columnas computadoras O condiciones
complejas
Funcioacuten de agregacioacuten
Son funciones que se utilizan para calcular valores en las tablas Si queremos usarlas
combinaacutendolas 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
expresioacuten HAVING Equivalente a where
Todos estos ejercicios han sido desarrollado con la base de datos Poseidoacuten
COUNT Cuenta los registros que hay en la consulta
Si pongo un valor dentro de la expresioacuten devolveraacute la cuenta de todos los
registros no nulos
Si pongo un asterisco contaraacute todos los registros aunque tengan valores
nulos
Select count () from Pedidos Valores con Nulos
Select count (FechaEnviacuteo) from Pedidos Valores sin nulos
AVG Realiza la media sobre la expresioacuten dada debe ser un tipo de dato
Int
Select avg(Preciounidad) from productos
MAX Saca el valor maacuteximo de una consulta
Select max (FechaPedido) from Pedidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 27
MIN Devuelve el valor miacutenimo 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 paiacutes Brasil mostrando el nuacutemero de los Factura con el paiacutes de
Destinatario Brasil
Select count () as [Numero de Facturas] PaiacutesDestinatario
Avg (Preciounidad) as [Precio Medio] from
Facturas group by PaiacutesDestinatario having PaiacutesDestinatario =Brasil
Ejemplo 39
Encontrar el precio maacutes alto mas bajo y la diferencia entre ambos de todos los productos con
IdCategoriacutea 2
Select IdCategoriacutea Max (Preciounidad) as [Precio mas alto] min(Preciounidad) as
[Precio mas Bajo] Max(Preciounidad) - min(Preciounidad) as [Diferencia entre Ambos]
from Productos group by IdCategoriacutea having IdCategoriacutea = 2
Ejemplo 40
Visualizar el nuacutemero de productos por Categoriacutea
Select IdCategoriacutea as [Nordm de Categoriacutea] Count (IdCategoriacutea) as [Nordm de Productos]
From Productos group by IdCategoriacutea
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 28
Ejemplo 41
Visualizar los clientes que vivan en las siguientes ciudades Londres Madrid y Barcelona
Select count () as [Nordm de personas] ciudad from clientes group by ciudad Having ciudad in
(londresMadridBarcelona) order by ciudad
Ejemplo 42
Lista de productos cuya venta allaacute sido mayor a 50000
Select IdProducto Monto=Sum (Preciounidad Cantidad) from [Detalles de pedidos] group
by IdProducto having Sum (Preciounidad Cantidad)gt50000 order by IdProducto
Ejemplo 43
Cuantos Clientes no tienen Fax
Select Count () as [Total de Clientes sin Fax] from clientes where fax is null
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 29
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
Funcioacuten Resultado
GETDATE() Retorna la fecha y hora del sistema
DATEADD(partefechanfecha) Retorna una nueva fecha antildeadiendo n
unidades de partefecha a fecha
DATEDIFF(parteFechafecha1fecha2) Retorna la diferencia en parteFecha entre
fecha1 y fecha2
DATENAME(partefechafecha) Retorna la cadena correspondiente a
partefecha en fecha
DATEPART(partefechafecha) Retorna el numero correspondiente a
partefecha y fecha
DAY(fecha) Retorna el numero correspondiente a la
parte del diacutea de fecha
MONTH(fecha) Retorna el numero correspondiente a la
parte del mes de fecha
YEAR(fecha) Retorna el numero correspondiente a la
parte del antildeo de fecha
GETUTCDATE() Retorna la fecha y hora del meridiano de
Greenwich
La siguiente tabla muestra los valores de partefecha que podemos utilizar
partefecha Abreviatura
Year Yy yyyy
Quarter Qq q
Month Mm m
Dayofyear Dy y
Day Dd d
Week Wk ww
weekday Dw
Hour Hh
minute Mi n
second Ss s
milisecond Ms
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 30
Getdate
Select getdate () Funcioacuten que recupera la fecha actual del sistema
Convert Cast
Convierten expliacutecitamente una expresioacuten de un tipo de datos en otro CAST y CONVERT
proporcionan funciones similares
Convert (Tipodedatosdestino Origen Estilo)
o Tipodedatosdestino Siempre ha de ser tipo caraacutecter
o Origen Puede ser tipo fecha numeacuterico o moneda
o Estilo Opcional Es un coacutedigo que indica el formato en el que devuelve la cadena de
caracteres
Sintaxis
Convert (TipoDato Dato)
Cast (Dato as TipoDato)
Ejemplo
declare n intpalabra nvarchar(10)
set n = 1
set palabra =Nuacutemero
print convert(nvarchar(2)n) + + palabra
print cast(n as nvarchar(2)) + + palabra
while (nlt11)
begin
print convert(nvarchar(2)n) + + palabra
print cast(n as nvarchar(2)) + + palabra
set n = n + 1
end
DateName
Devuelve una cadena de caracteres que representa la parte de la fecha especificada de la fecha
especificada
Los caacutelculos 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
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 31
Ejemplo 46
Select IdPedido DateName (week FechaPedido) as Numero de Semana from Pedidos where IdPedido
= 1035251
Ejemplo 47
Select IdPedido datename (weekday FechaPedido) as Diacutea De Semana from Pedidos where IdPedido =
10352 Martes
Horas
Ejemplo 48
Select IdPedido datename (mi FechaPedido) as Minutos from Pedidos where IdPedido = 10352
Ejemplo 49
Select DateName (minute getdate ()) as minutos
Ejemplo 50
Select DateName (Hh FechaPedido) as hora from Pedidos where IdPedido = 10352
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 32
Ejemplo 51
Select DateName (Hour getdate ()) as hora--gt18
Ejemplo 52
Select DateName (Hh getdate ()) as hora--gt18
DatePart
Devuelve la parte de la fecha u hora indicada Sintaxis
Datepart (Valor devolver fecha)
Ejemplo 53
Select IdPedido datepart (mm FechaPedido) as Mes from Pedidos where IdPedido = 10352
Ejemplo 54
Select Datepart (Hh getdate ()) as Hora--gt17
Ejemplo 55
Select Datepart (mi getdate ()) as Minutos--gt54
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 33
Nombres de Fechas
Day (fecha)
Devuelve UN INT equivale a Datepart
Select day (getdate ()) as diacutea--gt6 (diacutea en la que se ejecuta la sentencia)
Select Datepart (dd getdate ()) --gt6 (diacutea en la que se ejecuta la sentencia)
Select Month (getdate ()) --gt1 (Mes en la que se ejecuta la sentencia)
Select Datepart (mm getdate ()) --gt1 (Mes en la que se ejecuta la sentencia)
Select Year (getdate ()) --gt2008 (Antildeo en la que se ejecuta la sentencia)
Ejemplo 56
Select year (FechaPedido) as Antildeo from Pedidos where IdPedido = 10352
Ejemplo 57
Select datediff (yyyy FechaPedido getdate()) as Dia from Pedidos where IdPedido = 10352
DateAdd
DateAdd (Datepart number date)
Antildeade un nuacutemero a la fecha puesta
DatePart es el formato de lo que queremos antildeadir
Number es el nuacutemero que queremos incrementar la fecha expuesta
Select convert (datetime1-1-02)
Select dateadd (dd 71-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 comparacioacuten y el tipo de dato
que nos devolveraacute antildeos diacuteas minutos etc
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 34
Ejemplo 58
Select datediff (yyyy FechaPedido getdate ()) as Dia from Pedidos where IdPedido = 10352
Ejercicios de funciones de Fecha
Ejemplo 59
Lista de pedidos emitidos en febrero de 1996
Select from Pedidos where month (FechaPedido) =2 and year (FechaPedido) =1996
Ejemplo 60
Lista de Pedidos mostrando la diferencia en diacuteas entre la fecha del pedido y la fecha de Envioacute
Select IdPedido FechaPedido FechaEnviacuteo diacuteas =datediff (day FechaPedido FechaEnviacuteo) from
pedidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 35
Ejemplo 61
Genere un listado de pedidos en el que la fecha del pedido se muestre en el formato nombre del
diacutea diacutea de mes antildeo
Select IdPedido FechaPedido Fecha=datename (dw IdPedido)+ + str (datepart (dd
IdPedido) 2)+ de +datename (mm IdPedido)+ de +str (datepart (yy IdPedido) 4) from
pedidos
Ejemplo 62
Mostrar de la tabla pedidos la fecha de pedidos en fecha corta
Select IdPedido convert (varchar (30) FechaPedido 106) as [Fecha Corta] from pedidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 36
FUNCIONES MATEMATICAS
ABS
Es el valor Absoluto
Select ABS (-4) as VALOR ABSOLUTO--gt4
CEILING
Devuelve el entero maacutes pequentildeo mayor o igual que la expresioacuten numeacuterica dada
Select CEILING (54) as CEILING--6
FLOOR
Devuelve el entero maacutes grande menor o igual que la expresioacuten numeacuterica dada
Select FLOOR (5) as FLOOR--gt5
POWER
Devuelve el valor de la expresioacuten indicada elevada a la potencia especificada
Select POWER (3 2) as 3 ELEVADO A 2--gt9
RAND
Devuelve un valor float aleatorio de 0 a 1
Las llamadas repetitivas de RAND() en una uacutenica consulta produciraacuten el mismo valor
Select RAND(6) as ALEATORIO--071368515806921451
Select RAND(6) as ALEATORIO--071368515806921451
Select RAND(4) as ALEATORIO--07136478921266981
Rand sobre los milisegundos actuales
Select RAND(DATEPART(msGETDATE())) as ALEATORIO--gt071443047691954253
Select RAND(999999999)--gt068504257551273573
ROUND
Devuelve una expresioacuten numeacuterica redondeada a la longitud o precisioacuten especificada
Round (Nuacutemero Redondeo del Nuacutemero)
ROUND siempre devuelve un valor Si length es un valor negativo y mayor que el nuacutemero de
diacutegitos anteriores al separador decimal ROUND devuelve 0
Select ROUND (1234567 2) --gt1234600
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 37
Select ROUND (1234567-2) --gt1000000
Select ROUND (1234567 0) --gt1230000
Select ROUND (1234567-3) ---gt0
SIGN
Devuelve el signo positivo (+1) cero (0) o negativo (-1) de la expresioacuten especificada
Dice el valor negativo positivo o neutro (0) del valor especificado
Select SIGN (-3) --gt-1
Select SIGN (3) --gt1
Select SIGN (0) --gt0
SQUARE
Devuelve el cuadrado de la expresioacuten especificada
Select SQUARE (4) as bdquoCuadrado‟--gt160
SQRT
Devuelve la raiacutez cuadrada de la expresioacuten especificada
Select SQRT (4) as [RAIZ CUADRADA] --gt20
FUNCIONES DE CADENA
ASCII
Devuelve el coacutedigo ASCII del caraacutecter maacutes a la izquierda de una expresioacuten de caracteres
Select ASCII(A)--gt65
Select ASCII(a)--gt97
Select ascii(aula)--gt97
CHAR
Una funcioacuten de cadena que convierte un coacutedigo ASCII int en un caraacutecter
select char(65)--gtA
select char(97)--gta
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 38
CHARINDEX
Devuelve la posicioacuten inicial de la expresioacuten especificada en una cadena de caracteres
CHARINDEX (expression1 expression2 [ start_location])
Argumentos
expression1
Es una expresioacuten que contiene la secuencia de caracteres que se desea buscar
Expression1 es una expresioacuten del tipo de cadenas cortas de caracteres
Expression2
Es una expresioacuten normalmente una columna
en la que se busca la cadena especificada
Expression2 es de la categoriacutea del tipo de datos cadena de caracteres
start_location
Es la posicioacuten del caraacutecter de expression2 en el que se empieza la buacutesqueda de expression1
Si no se especifica start_location es un nuacutemero negativo o es cero
la buacutesqueda empieza al principio de la cadena expression2
Si expression1 no se encuentra en expression2 CHARINDEX devuelve 0
Si alguno de los dos es null devuelve null
Select charindex (ciemurcielago) --gt4
Select charindex (ciemurcielago 2) --gt4
Select charindex (ciemurcielago 5) --gt0
Select charindex (ciemurcielago-6) --gt4
LEFT
Devuelve la parte de una cadena de caracteres que comienza en un nuacutemero de caracteres
especificado a partir de la izquierda
Select left (murcielago5) --gtmurci
RIGHT
Devuelve la parte de una cadena de caracteres que
Comienza en el nuacutemero de caracteres especificado
En integer_expression a partir de la derecha
Select right (hola que tal5) --gte tal
LEN
Cuenta el nuacutemero de caracteres que se incluyen en la cadena
Select len (murcieacutelago) --gt10
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 39
LOWER
Convierte a Minuacutesculas la cadena especificada
Select lower (MurcIELaGO) as [minusculas] --gtmurcielago
UPPER
Convierte a Mayuacutesculas la cadena especificada
Select upper (murcielago) as [MAYUSCULAS] --gtMURCIELAGO
RTRIM y LTRIM
Elimina los espacios que existen a la izquierda y a la derecha respectivamente
Select Rtrim ( murcieacutelago ) AS [SIN ESPACIOS] --gtmurcieacutelago
Select Ltrim ( murcieacutelago ) AS [SIN ESPACIOS] --gtmurcieacutelago
Select ltrim(rtrim( hola ))+
REPLACE
Reemplaza por una tercera expresioacuten todas las apariciones
de la segunda expresioacuten de cadena proporcionada en la primera expresioacuten de cadena
Select replace (hola que tal estasaA) --gtholA que tAl estAs
Select replace (buenos dias que tal estasuentildentildentilde) --gtbntildentildentildenos diasqntildentildentilde tal estas
SPACE
Coloca el nuacutemero de espacios que se le indiquen para entre una cadena de caracteres
Select hola+space(5)+que tal--gthola que tal
SUBSTRING
Devuelve parte de una expresioacuten de caracteres binaria de texto o de imagen
Sintaxis
SUBSTRING (Expresioacuten Comienzo Duracioacuten)
Argumentos
Expresioacuten
Es una cadena de caracteres cadena binaria texto imagen
Columna o expresioacuten que incluye una columna
No deben usarse expresiones que incluyan funciones de agregado
Start
Es un entero que especifica el punto en que comienza la subcadena
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 40
Length
Es un entero que especifica la longitud de la subcadena
(El nuacutemero de caracteres o bytes que se devuelven)
Select substring (murcielago 3 5) --gtrciel
Select substring (murcielago 3 len (murcielago)) --gtrciel
REVERSE
Devuelve invertida una expresioacuten de caraacutecter
Select reverse (hola)
REPLICATE
Repite una expresioacuten de caracteres un nuacutemero especificado de veces
Select replicate (murcielago 5)
Replicate replicate replicate replicate replicate
STUFF
Elimina el nuacutemero de caracteres especificados e insertados
Otro conjunto de caracteres en un punto de inicio indicado
Select STUFF (Murcieacutelago 2 3 ijklmn) Mijklmnielago
FUNCIONES DE SISTEMA
- APP_NAME () Devuelve el nombre de la aplicacioacuten actual
Select app_name () as [Nombre de la aplicacion]
- DATALENGTH (Expresioacuten) Devuelve un entero que es numero de bites necesarios para
representar esa expresioacuten int
Select datalength (Ninoni) as [Numero de bites]
- ISDATE (Expresioacuten) Dice si la expresioacuten es una fecha o no Devuelve 1 si la expresioacuten es
una fecha y 0 si no es una fecha
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 41
Select isdate (121001) as [Validacioacuten Fecha]
- ISNUMERIC (Expresion) Dice si la expresioacuten es un numero o no Devuelve 1 si la
expresioacuten es un nuacutemero y 0 si la expresioacuten no es nuacutemero
Select isnumeric (ddd) as [Validacion Numero]
- ISNULL (Expresioacuten ExpresionDevuelta) Si la expresioacuten es nula te devuelve la Expresioacuten
Devuelta y si no devuelve la primera Expresioacuten
Select isnull (nullNo nulo) as [Es Nulo]
- PARSENAME (bdquoNombreObjeto‟ ParteNombre)
ParteNombre es un valor de tipo Int que coge unos determinados valores del
NombreObjeto
1 Objeto
2 Propietario
3 Base de Datos
4 Servidor
Select parsename (saposeidondbopedidos1) as [Parte Expresioacuten]
Select parsename (saposeidondbopedidos 2) as [Parte Expresioacuten]
Select parsename (saposeidondbopedidos3) as [Parte Expresioacuten]
Select parsename ( saposeidondbopedidos 4) as [Parte Expresioacuten]
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 42
- SYSTEM_USER Devuelve el usuario del sistema actual
Depende de la autentificacioacuten con la que te hayas conectado
Select system_user as [Usuario conectado]
- USER_NAME() Devuelve el nombre del usuario actual
Select user_name ()
- COALESCE (expresioacuten1 expresioacuten2 )
Devuelve la primera expresioacuten no NULL
Si todos son NULL devuelve NULL
Select coalesce (PrecioUnidad Cantidad) from [detalles de Pedidos] Si el PrecioUnidad es nulo
devolveraacute la Cantidad y si los dos son nulos devolveraacute un campo Null
PROCEDIMIENTOS PARA AGRUPAR Y RESUMIR DATOS
En el examen de certificacioacuten 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 usaraacute la base de datos indicada Ejemplo Ponemos
en el analizador de consultas lo siguiente
Use Northwind
Select from [Order Details]
[Order Details]
Esta tabla perteneciente a la Northwind se encarga de manejar los pedidos
Order Id Nordm de Pedido
Producto Id Nordm de Producto
Ambos campos son Primary Key con lo que no puede haber una combinacioacuten de ambos campos que sea
igual
OrderId ProductId
1 A
1 B
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 43
1 C
2 A
3 C
Es decir en este caso no podriacutea existir una nueva combinacioacuten ldquo1 Ardquo o ldquo2 Ardquo
Quantity Es la cantidad del producto del pedido
ROLLUP
Se usa para presentar resuacutemenes de datos A de usarse junto con la clausula group by lo que hace es
realizar un resumen de los campos incluidos en el rollup
Ejemplo 63
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
Group by ProductID OrderID
with Rollup
Order by ProductID OrderID
Este ejemplo suma todas las cantidades y mediante
rollup muestra una fila con la suma de todas las
cantidades de cada producto y ademaacutes otra fila con la
suma de todas las cantidades de todos los productos El
resultado de este ejemplo seriacutea el que muestra la
imagen
Ejemplo 64
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
where orderid lt 10250
Group by ProductID OrderID
with Rollup
Order by ProductID OrderID
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 44
CUBE
Al igual que Rollup realiza resuacutemenes de campos agrupados Pero en este caso muestra un resumen con
cada combinacioacuten posible de los campos agrupados
Ejemplo 65
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
where orderid lt 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 combinacioacuten posible entre el
productid y el orderid
GROUPING
Indica si el resultado de un campo es el que hay en la propia tabla o se ha introducido mediante una
claacuteusula de resumen es decir para saber por ejemplo si un ldquoNullrdquo 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 lt 10250 Group by ProductID
OrderID with Cube Order by ProductID OrderID
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 45
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
Ponieacutendole un alias al
grouping saldriacutea el nombre
de columna que le
indiquemos
COMPUTE
Realiza un resumen en una columna aparte con el resultado de la funcioacuten de agregado indicada Su
formato seriacutea Compute funcioacuten(campo) No se puede utilizar en aplicaciones cliente servidor es una
clausula meramente informativa Tampoco se le pueden poner alias a los resuacutemenes
Ejemplo 67
Select Productid Orderid Quantity From [Order Details] order by ProductID Orderid compute
Sum(quantity)
Vemos que muestra la
columna con la suma
total de todas las
cantidades
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 46
Ejercicios de ROLLUP GROUPING y CUBE
Ejemplo 68
Realizar una consulta que resuma la cantidad de artiacuteculos pedidos por cada iacutendice de producto y
nuacutemero de pedido Realizando un caacutelculo acumulativo
select productid as [PRODUCTO] orderid as [Nordm PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] group by productid orderid with rollup order by productid orderid
PRODUCTO Nordm 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
hellip
Ejemplo 69
Modificacioacuten al ejercicio anterior Realizar el mismo resumen pero uacutenicamente para el producto
cuyo id es 50
select productid as [PRODUCTO] orderid as [Nordm PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] where productid = 50 group by productid orderid with rollup order by productid ordered
PRODUCTO Nordm 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
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 47
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 modificacioacuten 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 [Nordm PEDIDO] grouping(orderid) as [GRUPO PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] where productid = 50 group by Productidorderid with cube order by productidorderid
PRODUCTO GRUPO PRODUCTO Nordm PEDIDO GRUPO PEDIDO SUMA TOTAL
----------- -------------- ----------- ------------ -----------
NULL 1 NULL 1 235
NULL 1 10350 0 15
NULL 1 10383 0 15
NULL 1 10429 0 40
NULL 1 10465 0 25
NULL 1 10637 0 25
NULL 1 10729 0 40
NULL 1 10751 0 20
NULL 1 10920 0 24
NULL 1 10948 0 9
NULL 1 11072 0 22
50 0 NULL 1 235
50 0 10350 0 15
50 0 10383 0 15
50 0 10429 0 40
50 0 10465 0 25
50 0 10637 0 25
50 0 10729 0 40
50 0 10751 0 20
50 0 10920 0 24
50 0 10948 0 9
50 0 11072 0 22
(22 filas afectadas)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 48
Obtencioacuten de resuacutemenes 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 maacutes columnas y
luego efectuar alguna operacioacuten de resumen sobre cada grupo asiacute generado
La diferencia con GROUP BY es que permite mostrar informacioacuten mas detallada de cada grupo
Ejemplo 71
Lista de pedidos que muestre por coacutedigo de pedido la cantidad de productos vendidos por cada uno
de ellos
select Idpedidoidproductopreciounidadcantidad[Sub Total]=sum(PreciounidadCantidad) from
[detalles de pedidos] group by Idpedidoidproductopreciounidadcantidad order by IdPedido compute
sum(Cantidad) by IdPedido
EJERCICIOS CON COMPUTE
Ejemplo 72
Generar un resumen de subtotales en una consulta que devuelva el nuacutemero de pedido la cantidad
pedida para todos los orderid 11070
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 49
Select Orderid as [Nordm PEDIDO] Quantity AS [CANTIDAD] From [Order Details] where orderid gt= 11070 order by Orderid compute Sum(quantity) by orderid compute sum(quantity)
Nordm PEDIDO CANTIDAD
----------- --------
11070 40
11070 20
11070 30
11070 20
sum
===========
110
sum
===========
110
(6 filas afectadas)
Ejemplo 73
Generar un resumen con calculo de subtotales similar al anterior pero para los orderid 11075 y
11076
Select Orderid as [Nordm PEDIDO] Quantity as [CANTIDAD] From [Order Details] where orderid = 11075 or orderid = 11076 order by Orderid compute Sum(quantity) by ordered Nordm PEDIDO CANTIDAD ----------- -------- 11075 10 11075 30 11075 2 sum =========== 42 Nordm PEDIDO CANTIDAD ----------- -------- 11076 20 11076 20 11076 10
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 50
sum =========== 50 (8 filas afectadas)
Ejemplo 74
Modificacioacuten al ejercicio anterior Agregar la cantidad total y la cantidad promedio al final del
informe
Select Orderid as [Nordm 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)
Nordm PEDIDO CANTIDAD
----------- --------
11075 10
11075 30
11075 2
sum
===========
42
Nordm PEDIDO CANTIDAD
----------- --------
11076 20
11076 20
11076 10
sum
===========
50
sum
===========
92
avg
===========
15
(10 filas afectadas)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 51
Ejemplo 75
Seleccionar de forma agrupada por tipo todos los tipos la suma de los precios y la suma del
anticipo de la tabla tiacutetulos
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 199900 50000000
business 119500 50000000
business 29900 101250000
business 199900 50000000
sum
=====================
549200
avg
=====================
62812500
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
mod_cook 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
avg
=====================
75000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
popular_comp 229500 70000000
popular_comp 200000 80000000
popular_comp NULL NULL
sum
=====================
429500
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 52
avg
=====================
75000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
psychology 215900 70000000
psychology 109500 22750000
psychology 70000 60000000
psychology 199900 20000000
psychology 79900 40000000
sum
=====================
675200
avg
=====================
42550000
(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 ademaacutes 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 199900 50000000
business 119500 50000000
business 29900 101250000
business 199900 50000000
sum
=====================
549200
sum
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 53
=====================
251250000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
mod_cook 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
popular_comp 229500 70000000
popular_comp 200000 80000000
popular_comp NULL NULL
sum
=====================
429500
sum
=====================
150000000
(30 filas afectadas)
Ejemplo 77
Generar un informe que muestre la suma de los precios de los libros de psicologiacutea 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 109500
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 54
psychology 0736 70000
psychology 0736 199900
psychology 0736 79900
sum
=====================
459300
TIPO CODIGO EDITOR PRECIO
------------ ------------- ---------------------
psychology 0877 215900
sum
=====================
215900
(7 filas afectadas)
Ejemplo 78
Generar un informe que obtenga la suma de los precios de todos los libros de psicologiacutea asiacute como la
suma de los precios de los libros de psicologiacutea 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 109500
psychology 0736 70000
psychology 0736 199900
psychology 0736 79900
sum
=====================
459300
TIPO CODIGO EDITOR PRECIO
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 55
------------ ------------- ---------------------
psychology 0877 215900
sum
=====================
215900
sum
=====================
675200
(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 199900 0000
mod_cook 0877 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO CODIGO EDITOR PRECIO ANTICIPO
------------ ------------- --------------------- ---------------------
trad_cook 0877 119500 40000000
trad_cook 0877 209500 70000000
trad_cook 0877 149900 80000000
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 56
sum
=====================
478900
sum
=====================
190000000
(9 filas afectadas)
Ejemplo 80
Generar un informe que muestre todos los tiacutetulos precio y anticipo de aquellos tiacutetulos que tengan
un precio superior a 20 doacutelares Ofreceraacute tambieacuten la suma total del precio y del anticipo
Select title as [TITULO] price as [PRECIO] advance as [ANTICIPO] From titles where price gt 20 order by title compute sum(price) compute sum(advance)
TITULO PRECIO ANTICIPO
-------------------------------------------------------------------------------- --------------------- -------------
--------
But Is It User Friendly 229500 70000000
Computer Phobic AND Non-Phobic Individuals Behavior Variations 215900
70000000
Onions Leeks and Garlic Cooking Secrets of the Mediterranean 209500
70000000
sum
=====================
654900
sum
=====================
210000000
(5 filas afectadas)
Ejemplo 81
Generar un informe que muestre el precio el tipo y el nuacutemero de editor de la tabla titles de todos
aquellas obras que pertenezcan la categoriacutea de ldquobusinessrdquo Ademaacutes apareceraacute la suma total de
precios y el maacuteximo pub_id de esta seleccioacuten
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 57
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 29900 0736
business 199900 1389
business 199900 1389
business 119500 1389
sum
=====================
549200
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 Mostraraacute la suma de los precios y los anticipos por tipo y luego calcularaacute 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 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
trad_cook 209500 70000000
trad_cook 119500 40000000
trad_cook 149900 80000000
sum
=====================
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 58
478900
sum
=====================
190000000
sum
=====================
708700
sum
=====================
340000000
(11 filas afectadas)
Eliminacioacuten 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 iquestA que precio se ah vendido los productos
Select IdProducto Preciounidad from [Detalles de pedidos] order by IdProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 59
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 mayoriacutea de las consultas que se hacen en una base de datos requiere que se lean datos procedentes
de dos oacute maacutes tablas
INNER JOIN- son las filas que satisfacen la condicioacuten de la combinacioacuten
En la siguiente sentencia SQL enlaza 2 tablas la tabla clientes y la tabla pedidos en esta ejemplo me
muestra los campos nombre compantildeiacutea y el campo idpedido
La uacutenica condicioacuten es que las 2 tablas tengan un campo en comuacuten
Ejemplo 84
select clientesNombreCompantildeiacuteapedidosidpedido from clientes inner join pedidos on
clientesidcliente=pedidosidcliente
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 60
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 pedidosIdPedido pedidosIdCliente 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 pedidosIdPedido pedidosIdCliente order
by pedidos IdPedido
CROSS JOIN
Un Cross Join es la consulta correlacionada que combine cada una de las filas de una de las tablas con
todas las filas de la otra tabla
No es necesario que exista una columna en comuacuten para ejecutar el Cross Join
Ejemplo 86
La siguiente consulta combina cada una de las filas de la tabla categoriacuteas con cada una de las filas de la
tabla productos
select productosNombreProductocategoriasNombrecategoria from productos cross join categorias
order by productosNombreProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 61
Ejercicios de consultas Muacuteltiples
Ejemplo 87
Mostrar el pedidos completo con el id=10248
Select pedidosIdPedido pedidosIdCliente
Total=sum ([detalles de pedidos]Preciounidad[detalles de pedidos]Cantidad)
From [detalles de pedidos] inner join pedidos on
[Detalles de pedidos]IdPedido=pedidosIdPedido where pedidosIdPedido=10248
Group by pedidosIdPedido pedidosIdCliente
Ejemplo 88
1 Mostrar la cantidad de productos por categoriacutea
Select CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
[Total de Producto]=sum (UnidadesEnExistencia) from Categoriacuteas inner join
Productos on CategoriacuteasIdCategoriacutea=productosIdCategoriacutea
Group by CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 62
Ejemplo 89
Calcular cuantas ventas tiene cada uno de los vendedores
Select empleadosIdEmpleado empleadosNombre empleadosApellidos
[Total de ventas]=count (pedidosIdPedido) from empleados
Inner join Pedidos on empleadosIdEmpleado=pedidosIdEmpleado
Group by empleadosIdEmpleado empleadosNombre empleadosApellidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 63
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 despueacutes saca la de Plantilla
Recomendaciones a la hora de usar las combinaciones
Combinar tablas en funcioacuten de claves principales y externas
Limite el nuacutemero de tablas de las combinaciones
Select Apellido
Oficio as
OFICIOFUNCION
salario from emp
UNION
Select Apellido
Funcion Salario from
Plantilla
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 64
SUBCONSULTAS
Es una SELECT anidada en una instruccioacuten INSERT DELETE SELECT o UPDATE
Como una tabla derivada
Select eemp_no as Numero
eApellido
from (select emp_no apellido from emp) as e
Como una expresioacuten
Select emp_no as [Numero]
Apellido
Salario
(select avg(Salario) from emp)
as Diferencia
from emp
where oficio = Empleado
Para correlacionar datos
- Expresioacuten dinaacutemica que cambia en cada fila de una consulta externa
- Es una combinacioacuten entre la subconsulta y la fila de la consulta externa
- Dividen consultas complejas con dos o maacutes consultas simples relacionadas
Subconsulta correlacionada
Select apellido oficiodept_no
from emp as e
where 20 lt
(select dept_no from dept as d
where edept_no = ddept_no
and ddnombre = Ventas)
SUBCONSULTAS
1 Mostrar el numero de empleado el apellido y la fecha de alta del empleado mas antiguo de la
empresa
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 65
SELECT emp_noapellido
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_noapellido
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 Jimeacutenez
select apellido oficio from emp where
oficio = (select oficio from emp where apellido = JIMENEZ)
4 Queremos saber el apellido oficio salario y nuacutemero 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 gt (select max (salario) from
emp where dept_no = 30)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 66
5 Mostrar el apellido la funcioacuten sala o departamento de todos los empleados que trabajen en la
empresa
select eApellido eOficio as [Cargo en Empresa] ddnombre as [Oficina]
from emp as e
inner join dept as d
on edept_no = ddept_no
union
select pApellido pfuncion snombre
from plantilla as p
inner join sala as s
on phospital_cod = shospital_cod
and psala_cod = ssala_cod
union
select dApellido despecialidad hnombre
from doctor as d
inner join hospital as h
on dhospital_cod = hhospital_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 = lsquoventasrsquo))
order by 2
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 67
8 Mostrar los empleados que tienen mejor salario que la media de los directores no incluyendo al
presidente
Select from emp where salario gt
(select avg (salario) from emp where oficio = DIRECTOR)
and oficio ltgt PRESIDENTE
9 Mostrar el apellido funcioacuten salario y coacutedigo 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 = lsquoENFERMEROrsquo or
funcion = lsquoENFERMERArsquo) and hospital_cod = (select hospital_cod from hospital where nombre =
lsquoSAN CARLOSrsquo)
Select apellido funcion salario hospital_cod from plantilla where
funcion in (ENFERMEROENFERMERA)
and hospital_cod = (select hospital_cod from hospital
where nombre = SAN CARLOS)
10 Visualizar los datos de los hospitales que tienen personal (Doctores) de cardiologiacutea
Select from hospital where hospital_cod in (select hospital_cod from doctor where
especialidad = lsquoCardiologiacutearsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 68
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 = lsquoPROVINCIALrsquo or
nombre= lsquoGENERALrsquo)
12 Mostrar el apellido de los enfermos que nacieron antes que el Sentildeor Miller
Select apellido from enfermo where Fecha_nac lt (select fecha_nac from enfermo where
apellido = lsquoMILLER Brsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 69
Simulacion de una clausula JOIN
Vamos a mostrar los oficios que estaacuten en maacutes de un departamento
Select distinct e1oficio from emp as e1
where e1oficio in(Select e2oficio from emp as e2
where e1dept_no ltgt e2dept_no)
Se debe utilizar antes una combinacioacuten que una subconsulta la combinacioacuten seriacutea asi dando los
mismos resultados
Select distinct e1Oficio from emp as e1
inner join emp as e2
on e1oficio = e2oficio
where e1dept_no ltgt e2dept_no
Estos son los dos oficios que estaacuten en
maacutes de un departamento
Subconsulta para simular una clausula HAVING
select e1apellidoe1oficio e1salario
from emp as e1
where e1salario gt
(select avg(e2salario) from emp as e2
where e1oficio = e2oficio)
Esta es la consulta utilizando el HAVING que es la que deberiacuteamos utilizar antes que una
subconsulta de simulacioacuten HAVING
SELECT e1apellidoe1oficio e1salario
FROM emp AS e1
INNER JOIN emp AS e2
ON e1oficio = e2oficio
GROUP BY e1oficio e1salarioe1apellido
HAVING e1salario gt AVG (e2salario)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 70
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 7
UPDATE
DELETE
Elementos de sintaxis
Directivas de procesos por lotes
- GO Enviacutea 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 liacutenea --
- 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 nuacutemero
deben empezar por un signo alfabeacutetico pueden incluir el guion bajo (_) la arroba y la
almohadilla
Generalmente para las variables locales se usan + el nombre
EJEMPLO Contador
Para las variables totales se usan dos arrobas + el nombre Contador
EJEMPLO Error
Nombre indica una tabla o procedimiento temporal (Local)
Nombre Igual que el anterior pero global
Tipos de datos
- Numeacutericos
Enteros int tinyint smallint bigint
Decimales numeric decimal money smallmoney
Coma Flotante float real
- Fechas
datetime 0333 s
smalldatetime 1 minuto
- Caracteres
Ancho fijo char nchar
Ancho Variable varchar nvarchar
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 8
- Texto e Imagen
Text
Ntext
Rowversion
- Binario
Binary varbinary Valores tipo byte
Bit Un solo bit (1 o ninguno)
- Identificadores Uacutenicos
Representa un identificador global uacutenico (GUID)
Si queremos que no se repita el dato en la base de datos usamos este identificador
Uniqueidentifier
Operadores de SQL
Loacutegicos
AND OR NOT
De Comparacioacuten
= Igual
lt Menor
gt Mayor
ltgt Diferente
gt= Mayor o igual
lt= Menor o igual
Crear una Base de Datos Utilizando el Lenguaje SQL
Ejemplo
Para crear la base de datos es la siguiente opcioacuten database seguido del nombre de la Base de Datos
--Create database Itae
On primary
(Name= Itae _data Filename=C itaemdf size=10 maxsize=15 filegrowth=25)
Log On
(Name= Itae _log filename=C itaeldf size=4 maxsize=6 filegrowth=1MB)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 9
Despueacutes de la sentencia Create database Se especifica el nombre de la base de datos Un
nombre en la base de datos debe de ser uacutenico 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 ndash Especifica el tamantildeo del Archivo
Maxsize ndashEspecifica el tamantildeo maacuteximo que puede alcanzar el archive si se requiere espacio adicional
Filegrowth ndashEs la cantidad de espacio que se antildeade 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 procederaacute abrir la base de datos con el use nombre de la base de datos y luego el Use Go
Use master
Go
Luego se procederaacute abrir la tabla Sysdatabases y ahiacute se podraacute visualizar si la base de datos ah
sido creada
Select from Sysdatabases
Luego se procederaacute abrir la base de datos con el use nombre de la base de datos y luego el go
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 10
INSERCIOacuteN ELIMINACIOacuteN Y MODIFICACIOacuteN DE DATOS
- Insercioacuten 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 INSERTSELECT
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
- Creacioacuten de una tabla mediante SELECT INTO Creacioacuten 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
- Insercioacuten de datos parciales No introducir todos los datos solo meter datos en un
determinado campo o en varios pero no en toda la tabla
- Insercioacuten de datos mediante valores de columna predeterminados Se usa para no
dejar a las tablas con el valor null y asiacute 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
ELIMINACIOacuteN 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 = bdquoSERRA‟
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 11
- TRUNCATE TABLE Elimina todas las filas de la tabla (La tabla con su estructura no se
elimina soacutelo los datos de la tabla) No crea filas en el registro de transacciones con lo cual
es el meacutetodo maacutes raacutepido de borrar
TRUNCATE TABLE NombreTabla
Truncate Table emp
- Eliminacioacuten de filas basada en otras tablas
DELETE [ FROM ] NombreTabla | NombreVista
[ FROM OrigenTabla ] [ WHERE CondicionBusqueda ]
ACTUALIZACIONES
- Actualizacioacuten de filas basadas en datos de la propia tabla
UPDATE NombreTabla | NombreVista
SET NombreColumna = expresioacuten DEFAULT | NULL
USE Northwind
UPDATE products
SET unitprice = (unitprice 11 )
- Actualizacioacuten de filas basadas en otras tablas
UPDATE NombreTabla | NombreVista
SET NombreColumna = expresioacuten DEFAULT | NULL
FROM OrigenTabla
WHERE CondicionBusqueda
Ejercicios
Ejemplo 1
Abrir la base de datos creada anteriormente
--use Itae
se procederaacute abrir la base de datos
--go
Ejemplo 2
Crearemos la Tabla alumnos
--CREATE TABLE alumnos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 12
--(
--Idalumno VarChar(8)not null
--nom_alumno Varchar (50) Not Null
--ape_alumno Varchar (50) Not Null
--dir_alumno Varchar (50) Not Null
--tel_alumno VarChar(8)
--Email_alumno Varchar (50)
--)
Ejemplo 3
Para que se muestre la Tabla completa y con todos los registros se utiliza en Select para
seleccionar los campos from para seleccionar la tabla que se desea visualizar
--select from alumnos
Ejemplo 4
Ingreso de Datos a la Tabla alumnos se utiliza la sentencia insert into
--Insert into alumnos (idalumnonom_alumnoape_alumnodir_alumnotel_alumnoemail_alumno)Values
(Cli01jamesjamesVentanilla252511jazoon_28hotmailcom)
--Insert into alumnos (idalumnonom_alumnoape_alumnodir_alumnotel_alumnoemail_alumno)Values
(Cli01Juan CarlosOchoa ValverdeCoop Primavera Mz R1 Lote 16557-
2147jaz_28hotmailcom)
--Insert into alumnos (idalumnonom_alumnoape_alumnodir_alumnotel_alumnoemail_alumno) Values
(Cli02ArturoCapuntildeay LaquiJr Viru 406 Nordm8481-6507eternal_alcarisHotmailcom)
--Insert into alumnos (idalumnonom_alumnoape_alumnodir_alumnotel_alumnoemail_alumno) Values
(Cli03Luis AlexanderAguilar WongJr Hon 920-1090luis_hexenHotmailcom)
--Insert into alumnos (idalumnonom_alumnoape_alumnodir_alumnotel_alumnoemail_alumno) Values
(Cli04Fredy Richard Anaya JesusResidencial 539-0886fredyanayaHotmailcom)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 13
Ejemplo 5
Si deseaacuteramos Eliminar seria con la sentencia Delete
--delete from alumnos where nom_alumno=juan Carlos
Ejemplo 6
Para Actualizar se Utiliza la sentencia Update y Set
--Update alumnos set nom_alumno=diego ape_alumno=cueva dir_alumno=los olivos
tel_alumno=5402972 email_alumno=hades_278hotmailcom where idalumno=01
Ejemplo 7
Para Realizar una Consulta se utiliza el Where
--select from alumnos where idalumno=Cli01
Ejemplo 8
Si tambieacuten uno desea se puede poner en orden ascendente y descendente paraacute ello se utilizar el
ASC y Desc
--select from alumnos ORDER BY nom_alumno Asc
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 14
--select from alumnos ORDER BY nom_alumno desc
Ejemplo 9
Para eliminar un Objeto de la base de datos se utiliza la sentencia Drop
Eliminar de la base de Datos Itae la Tabla Alumnos
Drop table alumnos Elimina la Tabla Clientes con la sentencia Drop seguido del tipo de
objeto y finalizando el nombre
Drop database Itae Elimina la Base de Datos Itae con la sentencia Drop seguido del
tipo de objeto y finalizando el nombre
OPERADORES DE CONDICIOacuteN _ FILAS
En la expresioacuten loacutegica que especifica condicioacuten _ filas se puede utilizar ademaacutes de los operadores
relacioacuten o de comparacioacuten los siguientes operadores SQL
LIKE- Para comparacioacuten de cadenas de caracteres admite los comodines y _
OPERADOR LIKE
Cualquier nuacutemero de caracteres
_ Para un caraacutecter individual
[ ] Para un conjunto de caracteres que esteacute dentro del corchete
[ ^ ] Que el caraacutecter individual que no esteacute dentro del corchete
EJEMPLO LIKE lsquoeenrsquo Muestra todos los caracteres que acaben con een
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 15
EJEMPLO LIKE lsquoeenrsquo Muestra todos los caracteres que contengan een en ese orden
EJEMPLO LIKE lsquo_enrsquo Muestra todos los caracteres que contenga tres letras y acaben en en
EJEMPLO LIKE lsquo[CK ]rsquo Muestra todos los caracteres que empiecen por C o K
EJEMPLO LIKE lsquo[S-V]ingrsquo Nombre de 4 letras cuya primera letra estuviera entre S o V y acabe en
ing
EJEMPLO LIKE lsquoM[^c]rsquo Todos los que empiecen por M y segunda letra no sea una c No hay limite
de caracteres
BETWEEN- para seleccioacuten en base a un rango de valores Los valores pueden ser numeacutericos de
cana fechas y horas
In-Para seleccioacuten en base a un conjunto de valores los valores pueden ser numeacutericos de cadena
fechas y horas
Para estos ejemplos ah utilizado la base de datos con el nombre de Poseidoacuten y contiene las siguientes
tablas y campos
Ejemplo 10
Lista de productos cuyo nombre contenga la palabra vino
Use Poseidon
Go
Select from productos where nombreproducto like vino
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 16
Luego procedemos a ejecutar la aplicacioacuten
El siacutembolo representa a cualquier cadena de caracteres inclusive la cadena nula
Ejemplo 12
Lista de productos cuya primera letea empieza con la letra a
Select from productos where nombreproducto like [a]
Ejemplo 13
Lista de productos cuya primera letea empieza con la letra a y la tercera con la letra e
Select from productos where nombreproducto like [a][e]
Ejemplo 14
Lista de productos cuyo nombre empieza con cualquier caraacutecter que va en el rango de la M a la
T
Select from productos where nombreproducto like [m-t]
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 17
Ejemplo 15
Lista de productos cuyo nombre empieza con A ograve con cualquier caraacutecter en el rango que va de U
a la Ademaacutes el segundo caraacutecter no debe ser la letra r
Select from productos where nombreproducto like [^b-t][^r]
El Caraacutecter ^ significa incluir
El Caraacutecter representa cualquier cadena de caracteres inclusive la cadena nula
El Caraacutecter _ Representa cualquier caraacutecter 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 caraacutecter empiece con la letra e
Select from productos where nombreproducto like _e
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 18
Ejemplo 18
Lista de productos cuyo nombre empiece con C M Ograve R
Select from productos where nombreproducto like bdquo[cmr]
Ejemplo 19
Lista de productos cuyo nombre empiece con C M Ograve R El segundo Caraacutecter debe ser A
Select from productos where nombreproducto like bdquo[cmr] a
El comodiacuten [cmr] representa el conjunto de caracteres validos en la posicioacuten en la que
apareceraacute el comodiacuten
Ejemplo 20
Seleccionar todos los productos que termine con la letra Z
Select from productos where nombreproducto like z
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 19
Ejemplo 21
Mostrar todos los productos cuya cuarta letra sea A
Select from productos where nombreproducto like ___a
USO DEL OPERADOR BETWEEN
Permite seleccionar en base a un rango de valores
Ejemplo 22
Lista de productos cuyo precio se encuentra en el rango que va de 15 a 21 nuevos soles
Select from productos where preciounidad between 15 and 21
Ejemplo 23
Lista de productos cuyo nombre se encuentren en el rango de Cerveza y galletas
Select from productos where nombreproducto between cerveza and galletas
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 20
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 (londresPariacutesTokyo)
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 (preciounidadcantidad)019 as IGV
from [detalles de pedidos]
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 21
Ejemplo 27
Mostar los productos cuyo precio sea mayor a 40
Select from productos where Preciounidad gt 40
Ejemplo 28
Mostrar todos los datos de los Clientes ordenados por Ciudad
Select from clientes order by ciudad
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 22
Ejemplo 29
Mostrar todos los productos de la Categoriacutea 2
Select from productos where IdCategoriacutea=2
Ejemplo 30
Mostrar todos los pedidos realizados en la fecha 1996-06-05
Select from Pedidos where FechaPedido =1996-06-05
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 23
Ejemplo 31
Mostrar todos los pedidos mayores a la Fecha 1996-05-05
Select from Pedidos where FechaPedido gt 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 IdCategoriacutea no sea 3
Select from productos where IdCategoriacutealtgt 3
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 24
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 Categoriacutea (123)
Select from productos where IdCategoriacutea not in (1 2 3) order by IdProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 25
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
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 26
USO DE FUNCIONES
Podemos utilizar funciones para construir expresiones y generar columnas computadoras O condiciones
complejas
Funcioacuten de agregacioacuten
Son funciones que se utilizan para calcular valores en las tablas Si queremos usarlas
combinaacutendolas 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
expresioacuten HAVING Equivalente a where
Todos estos ejercicios han sido desarrollado con la base de datos Poseidoacuten
COUNT Cuenta los registros que hay en la consulta
Si pongo un valor dentro de la expresioacuten devolveraacute la cuenta de todos los
registros no nulos
Si pongo un asterisco contaraacute todos los registros aunque tengan valores
nulos
Select count () from Pedidos Valores con Nulos
Select count (FechaEnviacuteo) from Pedidos Valores sin nulos
AVG Realiza la media sobre la expresioacuten dada debe ser un tipo de dato
Int
Select avg(Preciounidad) from productos
MAX Saca el valor maacuteximo de una consulta
Select max (FechaPedido) from Pedidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 27
MIN Devuelve el valor miacutenimo 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 paiacutes Brasil mostrando el nuacutemero de los Factura con el paiacutes de
Destinatario Brasil
Select count () as [Numero de Facturas] PaiacutesDestinatario
Avg (Preciounidad) as [Precio Medio] from
Facturas group by PaiacutesDestinatario having PaiacutesDestinatario =Brasil
Ejemplo 39
Encontrar el precio maacutes alto mas bajo y la diferencia entre ambos de todos los productos con
IdCategoriacutea 2
Select IdCategoriacutea Max (Preciounidad) as [Precio mas alto] min(Preciounidad) as
[Precio mas Bajo] Max(Preciounidad) - min(Preciounidad) as [Diferencia entre Ambos]
from Productos group by IdCategoriacutea having IdCategoriacutea = 2
Ejemplo 40
Visualizar el nuacutemero de productos por Categoriacutea
Select IdCategoriacutea as [Nordm de Categoriacutea] Count (IdCategoriacutea) as [Nordm de Productos]
From Productos group by IdCategoriacutea
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 28
Ejemplo 41
Visualizar los clientes que vivan en las siguientes ciudades Londres Madrid y Barcelona
Select count () as [Nordm de personas] ciudad from clientes group by ciudad Having ciudad in
(londresMadridBarcelona) order by ciudad
Ejemplo 42
Lista de productos cuya venta allaacute sido mayor a 50000
Select IdProducto Monto=Sum (Preciounidad Cantidad) from [Detalles de pedidos] group
by IdProducto having Sum (Preciounidad Cantidad)gt50000 order by IdProducto
Ejemplo 43
Cuantos Clientes no tienen Fax
Select Count () as [Total de Clientes sin Fax] from clientes where fax is null
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 29
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
Funcioacuten Resultado
GETDATE() Retorna la fecha y hora del sistema
DATEADD(partefechanfecha) Retorna una nueva fecha antildeadiendo n
unidades de partefecha a fecha
DATEDIFF(parteFechafecha1fecha2) Retorna la diferencia en parteFecha entre
fecha1 y fecha2
DATENAME(partefechafecha) Retorna la cadena correspondiente a
partefecha en fecha
DATEPART(partefechafecha) Retorna el numero correspondiente a
partefecha y fecha
DAY(fecha) Retorna el numero correspondiente a la
parte del diacutea de fecha
MONTH(fecha) Retorna el numero correspondiente a la
parte del mes de fecha
YEAR(fecha) Retorna el numero correspondiente a la
parte del antildeo de fecha
GETUTCDATE() Retorna la fecha y hora del meridiano de
Greenwich
La siguiente tabla muestra los valores de partefecha que podemos utilizar
partefecha Abreviatura
Year Yy yyyy
Quarter Qq q
Month Mm m
Dayofyear Dy y
Day Dd d
Week Wk ww
weekday Dw
Hour Hh
minute Mi n
second Ss s
milisecond Ms
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 30
Getdate
Select getdate () Funcioacuten que recupera la fecha actual del sistema
Convert Cast
Convierten expliacutecitamente una expresioacuten de un tipo de datos en otro CAST y CONVERT
proporcionan funciones similares
Convert (Tipodedatosdestino Origen Estilo)
o Tipodedatosdestino Siempre ha de ser tipo caraacutecter
o Origen Puede ser tipo fecha numeacuterico o moneda
o Estilo Opcional Es un coacutedigo que indica el formato en el que devuelve la cadena de
caracteres
Sintaxis
Convert (TipoDato Dato)
Cast (Dato as TipoDato)
Ejemplo
declare n intpalabra nvarchar(10)
set n = 1
set palabra =Nuacutemero
print convert(nvarchar(2)n) + + palabra
print cast(n as nvarchar(2)) + + palabra
while (nlt11)
begin
print convert(nvarchar(2)n) + + palabra
print cast(n as nvarchar(2)) + + palabra
set n = n + 1
end
DateName
Devuelve una cadena de caracteres que representa la parte de la fecha especificada de la fecha
especificada
Los caacutelculos 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
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 31
Ejemplo 46
Select IdPedido DateName (week FechaPedido) as Numero de Semana from Pedidos where IdPedido
= 1035251
Ejemplo 47
Select IdPedido datename (weekday FechaPedido) as Diacutea De Semana from Pedidos where IdPedido =
10352 Martes
Horas
Ejemplo 48
Select IdPedido datename (mi FechaPedido) as Minutos from Pedidos where IdPedido = 10352
Ejemplo 49
Select DateName (minute getdate ()) as minutos
Ejemplo 50
Select DateName (Hh FechaPedido) as hora from Pedidos where IdPedido = 10352
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 32
Ejemplo 51
Select DateName (Hour getdate ()) as hora--gt18
Ejemplo 52
Select DateName (Hh getdate ()) as hora--gt18
DatePart
Devuelve la parte de la fecha u hora indicada Sintaxis
Datepart (Valor devolver fecha)
Ejemplo 53
Select IdPedido datepart (mm FechaPedido) as Mes from Pedidos where IdPedido = 10352
Ejemplo 54
Select Datepart (Hh getdate ()) as Hora--gt17
Ejemplo 55
Select Datepart (mi getdate ()) as Minutos--gt54
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 33
Nombres de Fechas
Day (fecha)
Devuelve UN INT equivale a Datepart
Select day (getdate ()) as diacutea--gt6 (diacutea en la que se ejecuta la sentencia)
Select Datepart (dd getdate ()) --gt6 (diacutea en la que se ejecuta la sentencia)
Select Month (getdate ()) --gt1 (Mes en la que se ejecuta la sentencia)
Select Datepart (mm getdate ()) --gt1 (Mes en la que se ejecuta la sentencia)
Select Year (getdate ()) --gt2008 (Antildeo en la que se ejecuta la sentencia)
Ejemplo 56
Select year (FechaPedido) as Antildeo from Pedidos where IdPedido = 10352
Ejemplo 57
Select datediff (yyyy FechaPedido getdate()) as Dia from Pedidos where IdPedido = 10352
DateAdd
DateAdd (Datepart number date)
Antildeade un nuacutemero a la fecha puesta
DatePart es el formato de lo que queremos antildeadir
Number es el nuacutemero que queremos incrementar la fecha expuesta
Select convert (datetime1-1-02)
Select dateadd (dd 71-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 comparacioacuten y el tipo de dato
que nos devolveraacute antildeos diacuteas minutos etc
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 34
Ejemplo 58
Select datediff (yyyy FechaPedido getdate ()) as Dia from Pedidos where IdPedido = 10352
Ejercicios de funciones de Fecha
Ejemplo 59
Lista de pedidos emitidos en febrero de 1996
Select from Pedidos where month (FechaPedido) =2 and year (FechaPedido) =1996
Ejemplo 60
Lista de Pedidos mostrando la diferencia en diacuteas entre la fecha del pedido y la fecha de Envioacute
Select IdPedido FechaPedido FechaEnviacuteo diacuteas =datediff (day FechaPedido FechaEnviacuteo) from
pedidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 35
Ejemplo 61
Genere un listado de pedidos en el que la fecha del pedido se muestre en el formato nombre del
diacutea diacutea de mes antildeo
Select IdPedido FechaPedido Fecha=datename (dw IdPedido)+ + str (datepart (dd
IdPedido) 2)+ de +datename (mm IdPedido)+ de +str (datepart (yy IdPedido) 4) from
pedidos
Ejemplo 62
Mostrar de la tabla pedidos la fecha de pedidos en fecha corta
Select IdPedido convert (varchar (30) FechaPedido 106) as [Fecha Corta] from pedidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 36
FUNCIONES MATEMATICAS
ABS
Es el valor Absoluto
Select ABS (-4) as VALOR ABSOLUTO--gt4
CEILING
Devuelve el entero maacutes pequentildeo mayor o igual que la expresioacuten numeacuterica dada
Select CEILING (54) as CEILING--6
FLOOR
Devuelve el entero maacutes grande menor o igual que la expresioacuten numeacuterica dada
Select FLOOR (5) as FLOOR--gt5
POWER
Devuelve el valor de la expresioacuten indicada elevada a la potencia especificada
Select POWER (3 2) as 3 ELEVADO A 2--gt9
RAND
Devuelve un valor float aleatorio de 0 a 1
Las llamadas repetitivas de RAND() en una uacutenica consulta produciraacuten el mismo valor
Select RAND(6) as ALEATORIO--071368515806921451
Select RAND(6) as ALEATORIO--071368515806921451
Select RAND(4) as ALEATORIO--07136478921266981
Rand sobre los milisegundos actuales
Select RAND(DATEPART(msGETDATE())) as ALEATORIO--gt071443047691954253
Select RAND(999999999)--gt068504257551273573
ROUND
Devuelve una expresioacuten numeacuterica redondeada a la longitud o precisioacuten especificada
Round (Nuacutemero Redondeo del Nuacutemero)
ROUND siempre devuelve un valor Si length es un valor negativo y mayor que el nuacutemero de
diacutegitos anteriores al separador decimal ROUND devuelve 0
Select ROUND (1234567 2) --gt1234600
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 37
Select ROUND (1234567-2) --gt1000000
Select ROUND (1234567 0) --gt1230000
Select ROUND (1234567-3) ---gt0
SIGN
Devuelve el signo positivo (+1) cero (0) o negativo (-1) de la expresioacuten especificada
Dice el valor negativo positivo o neutro (0) del valor especificado
Select SIGN (-3) --gt-1
Select SIGN (3) --gt1
Select SIGN (0) --gt0
SQUARE
Devuelve el cuadrado de la expresioacuten especificada
Select SQUARE (4) as bdquoCuadrado‟--gt160
SQRT
Devuelve la raiacutez cuadrada de la expresioacuten especificada
Select SQRT (4) as [RAIZ CUADRADA] --gt20
FUNCIONES DE CADENA
ASCII
Devuelve el coacutedigo ASCII del caraacutecter maacutes a la izquierda de una expresioacuten de caracteres
Select ASCII(A)--gt65
Select ASCII(a)--gt97
Select ascii(aula)--gt97
CHAR
Una funcioacuten de cadena que convierte un coacutedigo ASCII int en un caraacutecter
select char(65)--gtA
select char(97)--gta
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 38
CHARINDEX
Devuelve la posicioacuten inicial de la expresioacuten especificada en una cadena de caracteres
CHARINDEX (expression1 expression2 [ start_location])
Argumentos
expression1
Es una expresioacuten que contiene la secuencia de caracteres que se desea buscar
Expression1 es una expresioacuten del tipo de cadenas cortas de caracteres
Expression2
Es una expresioacuten normalmente una columna
en la que se busca la cadena especificada
Expression2 es de la categoriacutea del tipo de datos cadena de caracteres
start_location
Es la posicioacuten del caraacutecter de expression2 en el que se empieza la buacutesqueda de expression1
Si no se especifica start_location es un nuacutemero negativo o es cero
la buacutesqueda empieza al principio de la cadena expression2
Si expression1 no se encuentra en expression2 CHARINDEX devuelve 0
Si alguno de los dos es null devuelve null
Select charindex (ciemurcielago) --gt4
Select charindex (ciemurcielago 2) --gt4
Select charindex (ciemurcielago 5) --gt0
Select charindex (ciemurcielago-6) --gt4
LEFT
Devuelve la parte de una cadena de caracteres que comienza en un nuacutemero de caracteres
especificado a partir de la izquierda
Select left (murcielago5) --gtmurci
RIGHT
Devuelve la parte de una cadena de caracteres que
Comienza en el nuacutemero de caracteres especificado
En integer_expression a partir de la derecha
Select right (hola que tal5) --gte tal
LEN
Cuenta el nuacutemero de caracteres que se incluyen en la cadena
Select len (murcieacutelago) --gt10
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 39
LOWER
Convierte a Minuacutesculas la cadena especificada
Select lower (MurcIELaGO) as [minusculas] --gtmurcielago
UPPER
Convierte a Mayuacutesculas la cadena especificada
Select upper (murcielago) as [MAYUSCULAS] --gtMURCIELAGO
RTRIM y LTRIM
Elimina los espacios que existen a la izquierda y a la derecha respectivamente
Select Rtrim ( murcieacutelago ) AS [SIN ESPACIOS] --gtmurcieacutelago
Select Ltrim ( murcieacutelago ) AS [SIN ESPACIOS] --gtmurcieacutelago
Select ltrim(rtrim( hola ))+
REPLACE
Reemplaza por una tercera expresioacuten todas las apariciones
de la segunda expresioacuten de cadena proporcionada en la primera expresioacuten de cadena
Select replace (hola que tal estasaA) --gtholA que tAl estAs
Select replace (buenos dias que tal estasuentildentildentilde) --gtbntildentildentildenos diasqntildentildentilde tal estas
SPACE
Coloca el nuacutemero de espacios que se le indiquen para entre una cadena de caracteres
Select hola+space(5)+que tal--gthola que tal
SUBSTRING
Devuelve parte de una expresioacuten de caracteres binaria de texto o de imagen
Sintaxis
SUBSTRING (Expresioacuten Comienzo Duracioacuten)
Argumentos
Expresioacuten
Es una cadena de caracteres cadena binaria texto imagen
Columna o expresioacuten que incluye una columna
No deben usarse expresiones que incluyan funciones de agregado
Start
Es un entero que especifica el punto en que comienza la subcadena
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 40
Length
Es un entero que especifica la longitud de la subcadena
(El nuacutemero de caracteres o bytes que se devuelven)
Select substring (murcielago 3 5) --gtrciel
Select substring (murcielago 3 len (murcielago)) --gtrciel
REVERSE
Devuelve invertida una expresioacuten de caraacutecter
Select reverse (hola)
REPLICATE
Repite una expresioacuten de caracteres un nuacutemero especificado de veces
Select replicate (murcielago 5)
Replicate replicate replicate replicate replicate
STUFF
Elimina el nuacutemero de caracteres especificados e insertados
Otro conjunto de caracteres en un punto de inicio indicado
Select STUFF (Murcieacutelago 2 3 ijklmn) Mijklmnielago
FUNCIONES DE SISTEMA
- APP_NAME () Devuelve el nombre de la aplicacioacuten actual
Select app_name () as [Nombre de la aplicacion]
- DATALENGTH (Expresioacuten) Devuelve un entero que es numero de bites necesarios para
representar esa expresioacuten int
Select datalength (Ninoni) as [Numero de bites]
- ISDATE (Expresioacuten) Dice si la expresioacuten es una fecha o no Devuelve 1 si la expresioacuten es
una fecha y 0 si no es una fecha
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 41
Select isdate (121001) as [Validacioacuten Fecha]
- ISNUMERIC (Expresion) Dice si la expresioacuten es un numero o no Devuelve 1 si la
expresioacuten es un nuacutemero y 0 si la expresioacuten no es nuacutemero
Select isnumeric (ddd) as [Validacion Numero]
- ISNULL (Expresioacuten ExpresionDevuelta) Si la expresioacuten es nula te devuelve la Expresioacuten
Devuelta y si no devuelve la primera Expresioacuten
Select isnull (nullNo nulo) as [Es Nulo]
- PARSENAME (bdquoNombreObjeto‟ ParteNombre)
ParteNombre es un valor de tipo Int que coge unos determinados valores del
NombreObjeto
1 Objeto
2 Propietario
3 Base de Datos
4 Servidor
Select parsename (saposeidondbopedidos1) as [Parte Expresioacuten]
Select parsename (saposeidondbopedidos 2) as [Parte Expresioacuten]
Select parsename (saposeidondbopedidos3) as [Parte Expresioacuten]
Select parsename ( saposeidondbopedidos 4) as [Parte Expresioacuten]
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 42
- SYSTEM_USER Devuelve el usuario del sistema actual
Depende de la autentificacioacuten con la que te hayas conectado
Select system_user as [Usuario conectado]
- USER_NAME() Devuelve el nombre del usuario actual
Select user_name ()
- COALESCE (expresioacuten1 expresioacuten2 )
Devuelve la primera expresioacuten no NULL
Si todos son NULL devuelve NULL
Select coalesce (PrecioUnidad Cantidad) from [detalles de Pedidos] Si el PrecioUnidad es nulo
devolveraacute la Cantidad y si los dos son nulos devolveraacute un campo Null
PROCEDIMIENTOS PARA AGRUPAR Y RESUMIR DATOS
En el examen de certificacioacuten 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 usaraacute la base de datos indicada Ejemplo Ponemos
en el analizador de consultas lo siguiente
Use Northwind
Select from [Order Details]
[Order Details]
Esta tabla perteneciente a la Northwind se encarga de manejar los pedidos
Order Id Nordm de Pedido
Producto Id Nordm de Producto
Ambos campos son Primary Key con lo que no puede haber una combinacioacuten de ambos campos que sea
igual
OrderId ProductId
1 A
1 B
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 43
1 C
2 A
3 C
Es decir en este caso no podriacutea existir una nueva combinacioacuten ldquo1 Ardquo o ldquo2 Ardquo
Quantity Es la cantidad del producto del pedido
ROLLUP
Se usa para presentar resuacutemenes de datos A de usarse junto con la clausula group by lo que hace es
realizar un resumen de los campos incluidos en el rollup
Ejemplo 63
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
Group by ProductID OrderID
with Rollup
Order by ProductID OrderID
Este ejemplo suma todas las cantidades y mediante
rollup muestra una fila con la suma de todas las
cantidades de cada producto y ademaacutes otra fila con la
suma de todas las cantidades de todos los productos El
resultado de este ejemplo seriacutea el que muestra la
imagen
Ejemplo 64
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
where orderid lt 10250
Group by ProductID OrderID
with Rollup
Order by ProductID OrderID
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 44
CUBE
Al igual que Rollup realiza resuacutemenes de campos agrupados Pero en este caso muestra un resumen con
cada combinacioacuten posible de los campos agrupados
Ejemplo 65
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
where orderid lt 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 combinacioacuten posible entre el
productid y el orderid
GROUPING
Indica si el resultado de un campo es el que hay en la propia tabla o se ha introducido mediante una
claacuteusula de resumen es decir para saber por ejemplo si un ldquoNullrdquo 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 lt 10250 Group by ProductID
OrderID with Cube Order by ProductID OrderID
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 45
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
Ponieacutendole un alias al
grouping saldriacutea el nombre
de columna que le
indiquemos
COMPUTE
Realiza un resumen en una columna aparte con el resultado de la funcioacuten de agregado indicada Su
formato seriacutea Compute funcioacuten(campo) No se puede utilizar en aplicaciones cliente servidor es una
clausula meramente informativa Tampoco se le pueden poner alias a los resuacutemenes
Ejemplo 67
Select Productid Orderid Quantity From [Order Details] order by ProductID Orderid compute
Sum(quantity)
Vemos que muestra la
columna con la suma
total de todas las
cantidades
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 46
Ejercicios de ROLLUP GROUPING y CUBE
Ejemplo 68
Realizar una consulta que resuma la cantidad de artiacuteculos pedidos por cada iacutendice de producto y
nuacutemero de pedido Realizando un caacutelculo acumulativo
select productid as [PRODUCTO] orderid as [Nordm PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] group by productid orderid with rollup order by productid orderid
PRODUCTO Nordm 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
hellip
Ejemplo 69
Modificacioacuten al ejercicio anterior Realizar el mismo resumen pero uacutenicamente para el producto
cuyo id es 50
select productid as [PRODUCTO] orderid as [Nordm PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] where productid = 50 group by productid orderid with rollup order by productid ordered
PRODUCTO Nordm 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
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 47
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 modificacioacuten 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 [Nordm PEDIDO] grouping(orderid) as [GRUPO PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] where productid = 50 group by Productidorderid with cube order by productidorderid
PRODUCTO GRUPO PRODUCTO Nordm PEDIDO GRUPO PEDIDO SUMA TOTAL
----------- -------------- ----------- ------------ -----------
NULL 1 NULL 1 235
NULL 1 10350 0 15
NULL 1 10383 0 15
NULL 1 10429 0 40
NULL 1 10465 0 25
NULL 1 10637 0 25
NULL 1 10729 0 40
NULL 1 10751 0 20
NULL 1 10920 0 24
NULL 1 10948 0 9
NULL 1 11072 0 22
50 0 NULL 1 235
50 0 10350 0 15
50 0 10383 0 15
50 0 10429 0 40
50 0 10465 0 25
50 0 10637 0 25
50 0 10729 0 40
50 0 10751 0 20
50 0 10920 0 24
50 0 10948 0 9
50 0 11072 0 22
(22 filas afectadas)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 48
Obtencioacuten de resuacutemenes 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 maacutes columnas y
luego efectuar alguna operacioacuten de resumen sobre cada grupo asiacute generado
La diferencia con GROUP BY es que permite mostrar informacioacuten mas detallada de cada grupo
Ejemplo 71
Lista de pedidos que muestre por coacutedigo de pedido la cantidad de productos vendidos por cada uno
de ellos
select Idpedidoidproductopreciounidadcantidad[Sub Total]=sum(PreciounidadCantidad) from
[detalles de pedidos] group by Idpedidoidproductopreciounidadcantidad order by IdPedido compute
sum(Cantidad) by IdPedido
EJERCICIOS CON COMPUTE
Ejemplo 72
Generar un resumen de subtotales en una consulta que devuelva el nuacutemero de pedido la cantidad
pedida para todos los orderid 11070
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 49
Select Orderid as [Nordm PEDIDO] Quantity AS [CANTIDAD] From [Order Details] where orderid gt= 11070 order by Orderid compute Sum(quantity) by orderid compute sum(quantity)
Nordm PEDIDO CANTIDAD
----------- --------
11070 40
11070 20
11070 30
11070 20
sum
===========
110
sum
===========
110
(6 filas afectadas)
Ejemplo 73
Generar un resumen con calculo de subtotales similar al anterior pero para los orderid 11075 y
11076
Select Orderid as [Nordm PEDIDO] Quantity as [CANTIDAD] From [Order Details] where orderid = 11075 or orderid = 11076 order by Orderid compute Sum(quantity) by ordered Nordm PEDIDO CANTIDAD ----------- -------- 11075 10 11075 30 11075 2 sum =========== 42 Nordm PEDIDO CANTIDAD ----------- -------- 11076 20 11076 20 11076 10
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 50
sum =========== 50 (8 filas afectadas)
Ejemplo 74
Modificacioacuten al ejercicio anterior Agregar la cantidad total y la cantidad promedio al final del
informe
Select Orderid as [Nordm 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)
Nordm PEDIDO CANTIDAD
----------- --------
11075 10
11075 30
11075 2
sum
===========
42
Nordm PEDIDO CANTIDAD
----------- --------
11076 20
11076 20
11076 10
sum
===========
50
sum
===========
92
avg
===========
15
(10 filas afectadas)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 51
Ejemplo 75
Seleccionar de forma agrupada por tipo todos los tipos la suma de los precios y la suma del
anticipo de la tabla tiacutetulos
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 199900 50000000
business 119500 50000000
business 29900 101250000
business 199900 50000000
sum
=====================
549200
avg
=====================
62812500
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
mod_cook 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
avg
=====================
75000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
popular_comp 229500 70000000
popular_comp 200000 80000000
popular_comp NULL NULL
sum
=====================
429500
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 52
avg
=====================
75000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
psychology 215900 70000000
psychology 109500 22750000
psychology 70000 60000000
psychology 199900 20000000
psychology 79900 40000000
sum
=====================
675200
avg
=====================
42550000
(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 ademaacutes 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 199900 50000000
business 119500 50000000
business 29900 101250000
business 199900 50000000
sum
=====================
549200
sum
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 53
=====================
251250000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
mod_cook 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
popular_comp 229500 70000000
popular_comp 200000 80000000
popular_comp NULL NULL
sum
=====================
429500
sum
=====================
150000000
(30 filas afectadas)
Ejemplo 77
Generar un informe que muestre la suma de los precios de los libros de psicologiacutea 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 109500
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 54
psychology 0736 70000
psychology 0736 199900
psychology 0736 79900
sum
=====================
459300
TIPO CODIGO EDITOR PRECIO
------------ ------------- ---------------------
psychology 0877 215900
sum
=====================
215900
(7 filas afectadas)
Ejemplo 78
Generar un informe que obtenga la suma de los precios de todos los libros de psicologiacutea asiacute como la
suma de los precios de los libros de psicologiacutea 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 109500
psychology 0736 70000
psychology 0736 199900
psychology 0736 79900
sum
=====================
459300
TIPO CODIGO EDITOR PRECIO
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 55
------------ ------------- ---------------------
psychology 0877 215900
sum
=====================
215900
sum
=====================
675200
(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 199900 0000
mod_cook 0877 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO CODIGO EDITOR PRECIO ANTICIPO
------------ ------------- --------------------- ---------------------
trad_cook 0877 119500 40000000
trad_cook 0877 209500 70000000
trad_cook 0877 149900 80000000
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 56
sum
=====================
478900
sum
=====================
190000000
(9 filas afectadas)
Ejemplo 80
Generar un informe que muestre todos los tiacutetulos precio y anticipo de aquellos tiacutetulos que tengan
un precio superior a 20 doacutelares Ofreceraacute tambieacuten la suma total del precio y del anticipo
Select title as [TITULO] price as [PRECIO] advance as [ANTICIPO] From titles where price gt 20 order by title compute sum(price) compute sum(advance)
TITULO PRECIO ANTICIPO
-------------------------------------------------------------------------------- --------------------- -------------
--------
But Is It User Friendly 229500 70000000
Computer Phobic AND Non-Phobic Individuals Behavior Variations 215900
70000000
Onions Leeks and Garlic Cooking Secrets of the Mediterranean 209500
70000000
sum
=====================
654900
sum
=====================
210000000
(5 filas afectadas)
Ejemplo 81
Generar un informe que muestre el precio el tipo y el nuacutemero de editor de la tabla titles de todos
aquellas obras que pertenezcan la categoriacutea de ldquobusinessrdquo Ademaacutes apareceraacute la suma total de
precios y el maacuteximo pub_id de esta seleccioacuten
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 57
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 29900 0736
business 199900 1389
business 199900 1389
business 119500 1389
sum
=====================
549200
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 Mostraraacute la suma de los precios y los anticipos por tipo y luego calcularaacute 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 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
trad_cook 209500 70000000
trad_cook 119500 40000000
trad_cook 149900 80000000
sum
=====================
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 58
478900
sum
=====================
190000000
sum
=====================
708700
sum
=====================
340000000
(11 filas afectadas)
Eliminacioacuten 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 iquestA que precio se ah vendido los productos
Select IdProducto Preciounidad from [Detalles de pedidos] order by IdProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 59
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 mayoriacutea de las consultas que se hacen en una base de datos requiere que se lean datos procedentes
de dos oacute maacutes tablas
INNER JOIN- son las filas que satisfacen la condicioacuten de la combinacioacuten
En la siguiente sentencia SQL enlaza 2 tablas la tabla clientes y la tabla pedidos en esta ejemplo me
muestra los campos nombre compantildeiacutea y el campo idpedido
La uacutenica condicioacuten es que las 2 tablas tengan un campo en comuacuten
Ejemplo 84
select clientesNombreCompantildeiacuteapedidosidpedido from clientes inner join pedidos on
clientesidcliente=pedidosidcliente
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 60
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 pedidosIdPedido pedidosIdCliente 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 pedidosIdPedido pedidosIdCliente order
by pedidos IdPedido
CROSS JOIN
Un Cross Join es la consulta correlacionada que combine cada una de las filas de una de las tablas con
todas las filas de la otra tabla
No es necesario que exista una columna en comuacuten para ejecutar el Cross Join
Ejemplo 86
La siguiente consulta combina cada una de las filas de la tabla categoriacuteas con cada una de las filas de la
tabla productos
select productosNombreProductocategoriasNombrecategoria from productos cross join categorias
order by productosNombreProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 61
Ejercicios de consultas Muacuteltiples
Ejemplo 87
Mostrar el pedidos completo con el id=10248
Select pedidosIdPedido pedidosIdCliente
Total=sum ([detalles de pedidos]Preciounidad[detalles de pedidos]Cantidad)
From [detalles de pedidos] inner join pedidos on
[Detalles de pedidos]IdPedido=pedidosIdPedido where pedidosIdPedido=10248
Group by pedidosIdPedido pedidosIdCliente
Ejemplo 88
1 Mostrar la cantidad de productos por categoriacutea
Select CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
[Total de Producto]=sum (UnidadesEnExistencia) from Categoriacuteas inner join
Productos on CategoriacuteasIdCategoriacutea=productosIdCategoriacutea
Group by CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 62
Ejemplo 89
Calcular cuantas ventas tiene cada uno de los vendedores
Select empleadosIdEmpleado empleadosNombre empleadosApellidos
[Total de ventas]=count (pedidosIdPedido) from empleados
Inner join Pedidos on empleadosIdEmpleado=pedidosIdEmpleado
Group by empleadosIdEmpleado empleadosNombre empleadosApellidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 63
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 despueacutes saca la de Plantilla
Recomendaciones a la hora de usar las combinaciones
Combinar tablas en funcioacuten de claves principales y externas
Limite el nuacutemero de tablas de las combinaciones
Select Apellido
Oficio as
OFICIOFUNCION
salario from emp
UNION
Select Apellido
Funcion Salario from
Plantilla
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 64
SUBCONSULTAS
Es una SELECT anidada en una instruccioacuten INSERT DELETE SELECT o UPDATE
Como una tabla derivada
Select eemp_no as Numero
eApellido
from (select emp_no apellido from emp) as e
Como una expresioacuten
Select emp_no as [Numero]
Apellido
Salario
(select avg(Salario) from emp)
as Diferencia
from emp
where oficio = Empleado
Para correlacionar datos
- Expresioacuten dinaacutemica que cambia en cada fila de una consulta externa
- Es una combinacioacuten entre la subconsulta y la fila de la consulta externa
- Dividen consultas complejas con dos o maacutes consultas simples relacionadas
Subconsulta correlacionada
Select apellido oficiodept_no
from emp as e
where 20 lt
(select dept_no from dept as d
where edept_no = ddept_no
and ddnombre = Ventas)
SUBCONSULTAS
1 Mostrar el numero de empleado el apellido y la fecha de alta del empleado mas antiguo de la
empresa
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 65
SELECT emp_noapellido
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_noapellido
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 Jimeacutenez
select apellido oficio from emp where
oficio = (select oficio from emp where apellido = JIMENEZ)
4 Queremos saber el apellido oficio salario y nuacutemero 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 gt (select max (salario) from
emp where dept_no = 30)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 66
5 Mostrar el apellido la funcioacuten sala o departamento de todos los empleados que trabajen en la
empresa
select eApellido eOficio as [Cargo en Empresa] ddnombre as [Oficina]
from emp as e
inner join dept as d
on edept_no = ddept_no
union
select pApellido pfuncion snombre
from plantilla as p
inner join sala as s
on phospital_cod = shospital_cod
and psala_cod = ssala_cod
union
select dApellido despecialidad hnombre
from doctor as d
inner join hospital as h
on dhospital_cod = hhospital_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 = lsquoventasrsquo))
order by 2
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 67
8 Mostrar los empleados que tienen mejor salario que la media de los directores no incluyendo al
presidente
Select from emp where salario gt
(select avg (salario) from emp where oficio = DIRECTOR)
and oficio ltgt PRESIDENTE
9 Mostrar el apellido funcioacuten salario y coacutedigo 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 = lsquoENFERMEROrsquo or
funcion = lsquoENFERMERArsquo) and hospital_cod = (select hospital_cod from hospital where nombre =
lsquoSAN CARLOSrsquo)
Select apellido funcion salario hospital_cod from plantilla where
funcion in (ENFERMEROENFERMERA)
and hospital_cod = (select hospital_cod from hospital
where nombre = SAN CARLOS)
10 Visualizar los datos de los hospitales que tienen personal (Doctores) de cardiologiacutea
Select from hospital where hospital_cod in (select hospital_cod from doctor where
especialidad = lsquoCardiologiacutearsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 68
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 = lsquoPROVINCIALrsquo or
nombre= lsquoGENERALrsquo)
12 Mostrar el apellido de los enfermos que nacieron antes que el Sentildeor Miller
Select apellido from enfermo where Fecha_nac lt (select fecha_nac from enfermo where
apellido = lsquoMILLER Brsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 69
Simulacion de una clausula JOIN
Vamos a mostrar los oficios que estaacuten en maacutes de un departamento
Select distinct e1oficio from emp as e1
where e1oficio in(Select e2oficio from emp as e2
where e1dept_no ltgt e2dept_no)
Se debe utilizar antes una combinacioacuten que una subconsulta la combinacioacuten seriacutea asi dando los
mismos resultados
Select distinct e1Oficio from emp as e1
inner join emp as e2
on e1oficio = e2oficio
where e1dept_no ltgt e2dept_no
Estos son los dos oficios que estaacuten en
maacutes de un departamento
Subconsulta para simular una clausula HAVING
select e1apellidoe1oficio e1salario
from emp as e1
where e1salario gt
(select avg(e2salario) from emp as e2
where e1oficio = e2oficio)
Esta es la consulta utilizando el HAVING que es la que deberiacuteamos utilizar antes que una
subconsulta de simulacioacuten HAVING
SELECT e1apellidoe1oficio e1salario
FROM emp AS e1
INNER JOIN emp AS e2
ON e1oficio = e2oficio
GROUP BY e1oficio e1salarioe1apellido
HAVING e1salario gt AVG (e2salario)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 70
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 8
- Texto e Imagen
Text
Ntext
Rowversion
- Binario
Binary varbinary Valores tipo byte
Bit Un solo bit (1 o ninguno)
- Identificadores Uacutenicos
Representa un identificador global uacutenico (GUID)
Si queremos que no se repita el dato en la base de datos usamos este identificador
Uniqueidentifier
Operadores de SQL
Loacutegicos
AND OR NOT
De Comparacioacuten
= Igual
lt Menor
gt Mayor
ltgt Diferente
gt= Mayor o igual
lt= Menor o igual
Crear una Base de Datos Utilizando el Lenguaje SQL
Ejemplo
Para crear la base de datos es la siguiente opcioacuten database seguido del nombre de la Base de Datos
--Create database Itae
On primary
(Name= Itae _data Filename=C itaemdf size=10 maxsize=15 filegrowth=25)
Log On
(Name= Itae _log filename=C itaeldf size=4 maxsize=6 filegrowth=1MB)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 9
Despueacutes de la sentencia Create database Se especifica el nombre de la base de datos Un
nombre en la base de datos debe de ser uacutenico 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 ndash Especifica el tamantildeo del Archivo
Maxsize ndashEspecifica el tamantildeo maacuteximo que puede alcanzar el archive si se requiere espacio adicional
Filegrowth ndashEs la cantidad de espacio que se antildeade 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 procederaacute abrir la base de datos con el use nombre de la base de datos y luego el Use Go
Use master
Go
Luego se procederaacute abrir la tabla Sysdatabases y ahiacute se podraacute visualizar si la base de datos ah
sido creada
Select from Sysdatabases
Luego se procederaacute abrir la base de datos con el use nombre de la base de datos y luego el go
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 10
INSERCIOacuteN ELIMINACIOacuteN Y MODIFICACIOacuteN DE DATOS
- Insercioacuten 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 INSERTSELECT
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
- Creacioacuten de una tabla mediante SELECT INTO Creacioacuten 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
- Insercioacuten de datos parciales No introducir todos los datos solo meter datos en un
determinado campo o en varios pero no en toda la tabla
- Insercioacuten de datos mediante valores de columna predeterminados Se usa para no
dejar a las tablas con el valor null y asiacute 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
ELIMINACIOacuteN 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 = bdquoSERRA‟
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 11
- TRUNCATE TABLE Elimina todas las filas de la tabla (La tabla con su estructura no se
elimina soacutelo los datos de la tabla) No crea filas en el registro de transacciones con lo cual
es el meacutetodo maacutes raacutepido de borrar
TRUNCATE TABLE NombreTabla
Truncate Table emp
- Eliminacioacuten de filas basada en otras tablas
DELETE [ FROM ] NombreTabla | NombreVista
[ FROM OrigenTabla ] [ WHERE CondicionBusqueda ]
ACTUALIZACIONES
- Actualizacioacuten de filas basadas en datos de la propia tabla
UPDATE NombreTabla | NombreVista
SET NombreColumna = expresioacuten DEFAULT | NULL
USE Northwind
UPDATE products
SET unitprice = (unitprice 11 )
- Actualizacioacuten de filas basadas en otras tablas
UPDATE NombreTabla | NombreVista
SET NombreColumna = expresioacuten DEFAULT | NULL
FROM OrigenTabla
WHERE CondicionBusqueda
Ejercicios
Ejemplo 1
Abrir la base de datos creada anteriormente
--use Itae
se procederaacute abrir la base de datos
--go
Ejemplo 2
Crearemos la Tabla alumnos
--CREATE TABLE alumnos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 12
--(
--Idalumno VarChar(8)not null
--nom_alumno Varchar (50) Not Null
--ape_alumno Varchar (50) Not Null
--dir_alumno Varchar (50) Not Null
--tel_alumno VarChar(8)
--Email_alumno Varchar (50)
--)
Ejemplo 3
Para que se muestre la Tabla completa y con todos los registros se utiliza en Select para
seleccionar los campos from para seleccionar la tabla que se desea visualizar
--select from alumnos
Ejemplo 4
Ingreso de Datos a la Tabla alumnos se utiliza la sentencia insert into
--Insert into alumnos (idalumnonom_alumnoape_alumnodir_alumnotel_alumnoemail_alumno)Values
(Cli01jamesjamesVentanilla252511jazoon_28hotmailcom)
--Insert into alumnos (idalumnonom_alumnoape_alumnodir_alumnotel_alumnoemail_alumno)Values
(Cli01Juan CarlosOchoa ValverdeCoop Primavera Mz R1 Lote 16557-
2147jaz_28hotmailcom)
--Insert into alumnos (idalumnonom_alumnoape_alumnodir_alumnotel_alumnoemail_alumno) Values
(Cli02ArturoCapuntildeay LaquiJr Viru 406 Nordm8481-6507eternal_alcarisHotmailcom)
--Insert into alumnos (idalumnonom_alumnoape_alumnodir_alumnotel_alumnoemail_alumno) Values
(Cli03Luis AlexanderAguilar WongJr Hon 920-1090luis_hexenHotmailcom)
--Insert into alumnos (idalumnonom_alumnoape_alumnodir_alumnotel_alumnoemail_alumno) Values
(Cli04Fredy Richard Anaya JesusResidencial 539-0886fredyanayaHotmailcom)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 13
Ejemplo 5
Si deseaacuteramos Eliminar seria con la sentencia Delete
--delete from alumnos where nom_alumno=juan Carlos
Ejemplo 6
Para Actualizar se Utiliza la sentencia Update y Set
--Update alumnos set nom_alumno=diego ape_alumno=cueva dir_alumno=los olivos
tel_alumno=5402972 email_alumno=hades_278hotmailcom where idalumno=01
Ejemplo 7
Para Realizar una Consulta se utiliza el Where
--select from alumnos where idalumno=Cli01
Ejemplo 8
Si tambieacuten uno desea se puede poner en orden ascendente y descendente paraacute ello se utilizar el
ASC y Desc
--select from alumnos ORDER BY nom_alumno Asc
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 14
--select from alumnos ORDER BY nom_alumno desc
Ejemplo 9
Para eliminar un Objeto de la base de datos se utiliza la sentencia Drop
Eliminar de la base de Datos Itae la Tabla Alumnos
Drop table alumnos Elimina la Tabla Clientes con la sentencia Drop seguido del tipo de
objeto y finalizando el nombre
Drop database Itae Elimina la Base de Datos Itae con la sentencia Drop seguido del
tipo de objeto y finalizando el nombre
OPERADORES DE CONDICIOacuteN _ FILAS
En la expresioacuten loacutegica que especifica condicioacuten _ filas se puede utilizar ademaacutes de los operadores
relacioacuten o de comparacioacuten los siguientes operadores SQL
LIKE- Para comparacioacuten de cadenas de caracteres admite los comodines y _
OPERADOR LIKE
Cualquier nuacutemero de caracteres
_ Para un caraacutecter individual
[ ] Para un conjunto de caracteres que esteacute dentro del corchete
[ ^ ] Que el caraacutecter individual que no esteacute dentro del corchete
EJEMPLO LIKE lsquoeenrsquo Muestra todos los caracteres que acaben con een
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 15
EJEMPLO LIKE lsquoeenrsquo Muestra todos los caracteres que contengan een en ese orden
EJEMPLO LIKE lsquo_enrsquo Muestra todos los caracteres que contenga tres letras y acaben en en
EJEMPLO LIKE lsquo[CK ]rsquo Muestra todos los caracteres que empiecen por C o K
EJEMPLO LIKE lsquo[S-V]ingrsquo Nombre de 4 letras cuya primera letra estuviera entre S o V y acabe en
ing
EJEMPLO LIKE lsquoM[^c]rsquo Todos los que empiecen por M y segunda letra no sea una c No hay limite
de caracteres
BETWEEN- para seleccioacuten en base a un rango de valores Los valores pueden ser numeacutericos de
cana fechas y horas
In-Para seleccioacuten en base a un conjunto de valores los valores pueden ser numeacutericos de cadena
fechas y horas
Para estos ejemplos ah utilizado la base de datos con el nombre de Poseidoacuten y contiene las siguientes
tablas y campos
Ejemplo 10
Lista de productos cuyo nombre contenga la palabra vino
Use Poseidon
Go
Select from productos where nombreproducto like vino
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 16
Luego procedemos a ejecutar la aplicacioacuten
El siacutembolo representa a cualquier cadena de caracteres inclusive la cadena nula
Ejemplo 12
Lista de productos cuya primera letea empieza con la letra a
Select from productos where nombreproducto like [a]
Ejemplo 13
Lista de productos cuya primera letea empieza con la letra a y la tercera con la letra e
Select from productos where nombreproducto like [a][e]
Ejemplo 14
Lista de productos cuyo nombre empieza con cualquier caraacutecter que va en el rango de la M a la
T
Select from productos where nombreproducto like [m-t]
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 17
Ejemplo 15
Lista de productos cuyo nombre empieza con A ograve con cualquier caraacutecter en el rango que va de U
a la Ademaacutes el segundo caraacutecter no debe ser la letra r
Select from productos where nombreproducto like [^b-t][^r]
El Caraacutecter ^ significa incluir
El Caraacutecter representa cualquier cadena de caracteres inclusive la cadena nula
El Caraacutecter _ Representa cualquier caraacutecter 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 caraacutecter empiece con la letra e
Select from productos where nombreproducto like _e
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 18
Ejemplo 18
Lista de productos cuyo nombre empiece con C M Ograve R
Select from productos where nombreproducto like bdquo[cmr]
Ejemplo 19
Lista de productos cuyo nombre empiece con C M Ograve R El segundo Caraacutecter debe ser A
Select from productos where nombreproducto like bdquo[cmr] a
El comodiacuten [cmr] representa el conjunto de caracteres validos en la posicioacuten en la que
apareceraacute el comodiacuten
Ejemplo 20
Seleccionar todos los productos que termine con la letra Z
Select from productos where nombreproducto like z
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 19
Ejemplo 21
Mostrar todos los productos cuya cuarta letra sea A
Select from productos where nombreproducto like ___a
USO DEL OPERADOR BETWEEN
Permite seleccionar en base a un rango de valores
Ejemplo 22
Lista de productos cuyo precio se encuentra en el rango que va de 15 a 21 nuevos soles
Select from productos where preciounidad between 15 and 21
Ejemplo 23
Lista de productos cuyo nombre se encuentren en el rango de Cerveza y galletas
Select from productos where nombreproducto between cerveza and galletas
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 20
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 (londresPariacutesTokyo)
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 (preciounidadcantidad)019 as IGV
from [detalles de pedidos]
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 21
Ejemplo 27
Mostar los productos cuyo precio sea mayor a 40
Select from productos where Preciounidad gt 40
Ejemplo 28
Mostrar todos los datos de los Clientes ordenados por Ciudad
Select from clientes order by ciudad
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 22
Ejemplo 29
Mostrar todos los productos de la Categoriacutea 2
Select from productos where IdCategoriacutea=2
Ejemplo 30
Mostrar todos los pedidos realizados en la fecha 1996-06-05
Select from Pedidos where FechaPedido =1996-06-05
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 23
Ejemplo 31
Mostrar todos los pedidos mayores a la Fecha 1996-05-05
Select from Pedidos where FechaPedido gt 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 IdCategoriacutea no sea 3
Select from productos where IdCategoriacutealtgt 3
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 24
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 Categoriacutea (123)
Select from productos where IdCategoriacutea not in (1 2 3) order by IdProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 25
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
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 26
USO DE FUNCIONES
Podemos utilizar funciones para construir expresiones y generar columnas computadoras O condiciones
complejas
Funcioacuten de agregacioacuten
Son funciones que se utilizan para calcular valores en las tablas Si queremos usarlas
combinaacutendolas 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
expresioacuten HAVING Equivalente a where
Todos estos ejercicios han sido desarrollado con la base de datos Poseidoacuten
COUNT Cuenta los registros que hay en la consulta
Si pongo un valor dentro de la expresioacuten devolveraacute la cuenta de todos los
registros no nulos
Si pongo un asterisco contaraacute todos los registros aunque tengan valores
nulos
Select count () from Pedidos Valores con Nulos
Select count (FechaEnviacuteo) from Pedidos Valores sin nulos
AVG Realiza la media sobre la expresioacuten dada debe ser un tipo de dato
Int
Select avg(Preciounidad) from productos
MAX Saca el valor maacuteximo de una consulta
Select max (FechaPedido) from Pedidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 27
MIN Devuelve el valor miacutenimo 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 paiacutes Brasil mostrando el nuacutemero de los Factura con el paiacutes de
Destinatario Brasil
Select count () as [Numero de Facturas] PaiacutesDestinatario
Avg (Preciounidad) as [Precio Medio] from
Facturas group by PaiacutesDestinatario having PaiacutesDestinatario =Brasil
Ejemplo 39
Encontrar el precio maacutes alto mas bajo y la diferencia entre ambos de todos los productos con
IdCategoriacutea 2
Select IdCategoriacutea Max (Preciounidad) as [Precio mas alto] min(Preciounidad) as
[Precio mas Bajo] Max(Preciounidad) - min(Preciounidad) as [Diferencia entre Ambos]
from Productos group by IdCategoriacutea having IdCategoriacutea = 2
Ejemplo 40
Visualizar el nuacutemero de productos por Categoriacutea
Select IdCategoriacutea as [Nordm de Categoriacutea] Count (IdCategoriacutea) as [Nordm de Productos]
From Productos group by IdCategoriacutea
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 28
Ejemplo 41
Visualizar los clientes que vivan en las siguientes ciudades Londres Madrid y Barcelona
Select count () as [Nordm de personas] ciudad from clientes group by ciudad Having ciudad in
(londresMadridBarcelona) order by ciudad
Ejemplo 42
Lista de productos cuya venta allaacute sido mayor a 50000
Select IdProducto Monto=Sum (Preciounidad Cantidad) from [Detalles de pedidos] group
by IdProducto having Sum (Preciounidad Cantidad)gt50000 order by IdProducto
Ejemplo 43
Cuantos Clientes no tienen Fax
Select Count () as [Total de Clientes sin Fax] from clientes where fax is null
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 29
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
Funcioacuten Resultado
GETDATE() Retorna la fecha y hora del sistema
DATEADD(partefechanfecha) Retorna una nueva fecha antildeadiendo n
unidades de partefecha a fecha
DATEDIFF(parteFechafecha1fecha2) Retorna la diferencia en parteFecha entre
fecha1 y fecha2
DATENAME(partefechafecha) Retorna la cadena correspondiente a
partefecha en fecha
DATEPART(partefechafecha) Retorna el numero correspondiente a
partefecha y fecha
DAY(fecha) Retorna el numero correspondiente a la
parte del diacutea de fecha
MONTH(fecha) Retorna el numero correspondiente a la
parte del mes de fecha
YEAR(fecha) Retorna el numero correspondiente a la
parte del antildeo de fecha
GETUTCDATE() Retorna la fecha y hora del meridiano de
Greenwich
La siguiente tabla muestra los valores de partefecha que podemos utilizar
partefecha Abreviatura
Year Yy yyyy
Quarter Qq q
Month Mm m
Dayofyear Dy y
Day Dd d
Week Wk ww
weekday Dw
Hour Hh
minute Mi n
second Ss s
milisecond Ms
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 30
Getdate
Select getdate () Funcioacuten que recupera la fecha actual del sistema
Convert Cast
Convierten expliacutecitamente una expresioacuten de un tipo de datos en otro CAST y CONVERT
proporcionan funciones similares
Convert (Tipodedatosdestino Origen Estilo)
o Tipodedatosdestino Siempre ha de ser tipo caraacutecter
o Origen Puede ser tipo fecha numeacuterico o moneda
o Estilo Opcional Es un coacutedigo que indica el formato en el que devuelve la cadena de
caracteres
Sintaxis
Convert (TipoDato Dato)
Cast (Dato as TipoDato)
Ejemplo
declare n intpalabra nvarchar(10)
set n = 1
set palabra =Nuacutemero
print convert(nvarchar(2)n) + + palabra
print cast(n as nvarchar(2)) + + palabra
while (nlt11)
begin
print convert(nvarchar(2)n) + + palabra
print cast(n as nvarchar(2)) + + palabra
set n = n + 1
end
DateName
Devuelve una cadena de caracteres que representa la parte de la fecha especificada de la fecha
especificada
Los caacutelculos 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
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 31
Ejemplo 46
Select IdPedido DateName (week FechaPedido) as Numero de Semana from Pedidos where IdPedido
= 1035251
Ejemplo 47
Select IdPedido datename (weekday FechaPedido) as Diacutea De Semana from Pedidos where IdPedido =
10352 Martes
Horas
Ejemplo 48
Select IdPedido datename (mi FechaPedido) as Minutos from Pedidos where IdPedido = 10352
Ejemplo 49
Select DateName (minute getdate ()) as minutos
Ejemplo 50
Select DateName (Hh FechaPedido) as hora from Pedidos where IdPedido = 10352
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 32
Ejemplo 51
Select DateName (Hour getdate ()) as hora--gt18
Ejemplo 52
Select DateName (Hh getdate ()) as hora--gt18
DatePart
Devuelve la parte de la fecha u hora indicada Sintaxis
Datepart (Valor devolver fecha)
Ejemplo 53
Select IdPedido datepart (mm FechaPedido) as Mes from Pedidos where IdPedido = 10352
Ejemplo 54
Select Datepart (Hh getdate ()) as Hora--gt17
Ejemplo 55
Select Datepart (mi getdate ()) as Minutos--gt54
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 33
Nombres de Fechas
Day (fecha)
Devuelve UN INT equivale a Datepart
Select day (getdate ()) as diacutea--gt6 (diacutea en la que se ejecuta la sentencia)
Select Datepart (dd getdate ()) --gt6 (diacutea en la que se ejecuta la sentencia)
Select Month (getdate ()) --gt1 (Mes en la que se ejecuta la sentencia)
Select Datepart (mm getdate ()) --gt1 (Mes en la que se ejecuta la sentencia)
Select Year (getdate ()) --gt2008 (Antildeo en la que se ejecuta la sentencia)
Ejemplo 56
Select year (FechaPedido) as Antildeo from Pedidos where IdPedido = 10352
Ejemplo 57
Select datediff (yyyy FechaPedido getdate()) as Dia from Pedidos where IdPedido = 10352
DateAdd
DateAdd (Datepart number date)
Antildeade un nuacutemero a la fecha puesta
DatePart es el formato de lo que queremos antildeadir
Number es el nuacutemero que queremos incrementar la fecha expuesta
Select convert (datetime1-1-02)
Select dateadd (dd 71-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 comparacioacuten y el tipo de dato
que nos devolveraacute antildeos diacuteas minutos etc
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 34
Ejemplo 58
Select datediff (yyyy FechaPedido getdate ()) as Dia from Pedidos where IdPedido = 10352
Ejercicios de funciones de Fecha
Ejemplo 59
Lista de pedidos emitidos en febrero de 1996
Select from Pedidos where month (FechaPedido) =2 and year (FechaPedido) =1996
Ejemplo 60
Lista de Pedidos mostrando la diferencia en diacuteas entre la fecha del pedido y la fecha de Envioacute
Select IdPedido FechaPedido FechaEnviacuteo diacuteas =datediff (day FechaPedido FechaEnviacuteo) from
pedidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 35
Ejemplo 61
Genere un listado de pedidos en el que la fecha del pedido se muestre en el formato nombre del
diacutea diacutea de mes antildeo
Select IdPedido FechaPedido Fecha=datename (dw IdPedido)+ + str (datepart (dd
IdPedido) 2)+ de +datename (mm IdPedido)+ de +str (datepart (yy IdPedido) 4) from
pedidos
Ejemplo 62
Mostrar de la tabla pedidos la fecha de pedidos en fecha corta
Select IdPedido convert (varchar (30) FechaPedido 106) as [Fecha Corta] from pedidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 36
FUNCIONES MATEMATICAS
ABS
Es el valor Absoluto
Select ABS (-4) as VALOR ABSOLUTO--gt4
CEILING
Devuelve el entero maacutes pequentildeo mayor o igual que la expresioacuten numeacuterica dada
Select CEILING (54) as CEILING--6
FLOOR
Devuelve el entero maacutes grande menor o igual que la expresioacuten numeacuterica dada
Select FLOOR (5) as FLOOR--gt5
POWER
Devuelve el valor de la expresioacuten indicada elevada a la potencia especificada
Select POWER (3 2) as 3 ELEVADO A 2--gt9
RAND
Devuelve un valor float aleatorio de 0 a 1
Las llamadas repetitivas de RAND() en una uacutenica consulta produciraacuten el mismo valor
Select RAND(6) as ALEATORIO--071368515806921451
Select RAND(6) as ALEATORIO--071368515806921451
Select RAND(4) as ALEATORIO--07136478921266981
Rand sobre los milisegundos actuales
Select RAND(DATEPART(msGETDATE())) as ALEATORIO--gt071443047691954253
Select RAND(999999999)--gt068504257551273573
ROUND
Devuelve una expresioacuten numeacuterica redondeada a la longitud o precisioacuten especificada
Round (Nuacutemero Redondeo del Nuacutemero)
ROUND siempre devuelve un valor Si length es un valor negativo y mayor que el nuacutemero de
diacutegitos anteriores al separador decimal ROUND devuelve 0
Select ROUND (1234567 2) --gt1234600
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 37
Select ROUND (1234567-2) --gt1000000
Select ROUND (1234567 0) --gt1230000
Select ROUND (1234567-3) ---gt0
SIGN
Devuelve el signo positivo (+1) cero (0) o negativo (-1) de la expresioacuten especificada
Dice el valor negativo positivo o neutro (0) del valor especificado
Select SIGN (-3) --gt-1
Select SIGN (3) --gt1
Select SIGN (0) --gt0
SQUARE
Devuelve el cuadrado de la expresioacuten especificada
Select SQUARE (4) as bdquoCuadrado‟--gt160
SQRT
Devuelve la raiacutez cuadrada de la expresioacuten especificada
Select SQRT (4) as [RAIZ CUADRADA] --gt20
FUNCIONES DE CADENA
ASCII
Devuelve el coacutedigo ASCII del caraacutecter maacutes a la izquierda de una expresioacuten de caracteres
Select ASCII(A)--gt65
Select ASCII(a)--gt97
Select ascii(aula)--gt97
CHAR
Una funcioacuten de cadena que convierte un coacutedigo ASCII int en un caraacutecter
select char(65)--gtA
select char(97)--gta
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 38
CHARINDEX
Devuelve la posicioacuten inicial de la expresioacuten especificada en una cadena de caracteres
CHARINDEX (expression1 expression2 [ start_location])
Argumentos
expression1
Es una expresioacuten que contiene la secuencia de caracteres que se desea buscar
Expression1 es una expresioacuten del tipo de cadenas cortas de caracteres
Expression2
Es una expresioacuten normalmente una columna
en la que se busca la cadena especificada
Expression2 es de la categoriacutea del tipo de datos cadena de caracteres
start_location
Es la posicioacuten del caraacutecter de expression2 en el que se empieza la buacutesqueda de expression1
Si no se especifica start_location es un nuacutemero negativo o es cero
la buacutesqueda empieza al principio de la cadena expression2
Si expression1 no se encuentra en expression2 CHARINDEX devuelve 0
Si alguno de los dos es null devuelve null
Select charindex (ciemurcielago) --gt4
Select charindex (ciemurcielago 2) --gt4
Select charindex (ciemurcielago 5) --gt0
Select charindex (ciemurcielago-6) --gt4
LEFT
Devuelve la parte de una cadena de caracteres que comienza en un nuacutemero de caracteres
especificado a partir de la izquierda
Select left (murcielago5) --gtmurci
RIGHT
Devuelve la parte de una cadena de caracteres que
Comienza en el nuacutemero de caracteres especificado
En integer_expression a partir de la derecha
Select right (hola que tal5) --gte tal
LEN
Cuenta el nuacutemero de caracteres que se incluyen en la cadena
Select len (murcieacutelago) --gt10
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 39
LOWER
Convierte a Minuacutesculas la cadena especificada
Select lower (MurcIELaGO) as [minusculas] --gtmurcielago
UPPER
Convierte a Mayuacutesculas la cadena especificada
Select upper (murcielago) as [MAYUSCULAS] --gtMURCIELAGO
RTRIM y LTRIM
Elimina los espacios que existen a la izquierda y a la derecha respectivamente
Select Rtrim ( murcieacutelago ) AS [SIN ESPACIOS] --gtmurcieacutelago
Select Ltrim ( murcieacutelago ) AS [SIN ESPACIOS] --gtmurcieacutelago
Select ltrim(rtrim( hola ))+
REPLACE
Reemplaza por una tercera expresioacuten todas las apariciones
de la segunda expresioacuten de cadena proporcionada en la primera expresioacuten de cadena
Select replace (hola que tal estasaA) --gtholA que tAl estAs
Select replace (buenos dias que tal estasuentildentildentilde) --gtbntildentildentildenos diasqntildentildentilde tal estas
SPACE
Coloca el nuacutemero de espacios que se le indiquen para entre una cadena de caracteres
Select hola+space(5)+que tal--gthola que tal
SUBSTRING
Devuelve parte de una expresioacuten de caracteres binaria de texto o de imagen
Sintaxis
SUBSTRING (Expresioacuten Comienzo Duracioacuten)
Argumentos
Expresioacuten
Es una cadena de caracteres cadena binaria texto imagen
Columna o expresioacuten que incluye una columna
No deben usarse expresiones que incluyan funciones de agregado
Start
Es un entero que especifica el punto en que comienza la subcadena
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 40
Length
Es un entero que especifica la longitud de la subcadena
(El nuacutemero de caracteres o bytes que se devuelven)
Select substring (murcielago 3 5) --gtrciel
Select substring (murcielago 3 len (murcielago)) --gtrciel
REVERSE
Devuelve invertida una expresioacuten de caraacutecter
Select reverse (hola)
REPLICATE
Repite una expresioacuten de caracteres un nuacutemero especificado de veces
Select replicate (murcielago 5)
Replicate replicate replicate replicate replicate
STUFF
Elimina el nuacutemero de caracteres especificados e insertados
Otro conjunto de caracteres en un punto de inicio indicado
Select STUFF (Murcieacutelago 2 3 ijklmn) Mijklmnielago
FUNCIONES DE SISTEMA
- APP_NAME () Devuelve el nombre de la aplicacioacuten actual
Select app_name () as [Nombre de la aplicacion]
- DATALENGTH (Expresioacuten) Devuelve un entero que es numero de bites necesarios para
representar esa expresioacuten int
Select datalength (Ninoni) as [Numero de bites]
- ISDATE (Expresioacuten) Dice si la expresioacuten es una fecha o no Devuelve 1 si la expresioacuten es
una fecha y 0 si no es una fecha
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 41
Select isdate (121001) as [Validacioacuten Fecha]
- ISNUMERIC (Expresion) Dice si la expresioacuten es un numero o no Devuelve 1 si la
expresioacuten es un nuacutemero y 0 si la expresioacuten no es nuacutemero
Select isnumeric (ddd) as [Validacion Numero]
- ISNULL (Expresioacuten ExpresionDevuelta) Si la expresioacuten es nula te devuelve la Expresioacuten
Devuelta y si no devuelve la primera Expresioacuten
Select isnull (nullNo nulo) as [Es Nulo]
- PARSENAME (bdquoNombreObjeto‟ ParteNombre)
ParteNombre es un valor de tipo Int que coge unos determinados valores del
NombreObjeto
1 Objeto
2 Propietario
3 Base de Datos
4 Servidor
Select parsename (saposeidondbopedidos1) as [Parte Expresioacuten]
Select parsename (saposeidondbopedidos 2) as [Parte Expresioacuten]
Select parsename (saposeidondbopedidos3) as [Parte Expresioacuten]
Select parsename ( saposeidondbopedidos 4) as [Parte Expresioacuten]
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 42
- SYSTEM_USER Devuelve el usuario del sistema actual
Depende de la autentificacioacuten con la que te hayas conectado
Select system_user as [Usuario conectado]
- USER_NAME() Devuelve el nombre del usuario actual
Select user_name ()
- COALESCE (expresioacuten1 expresioacuten2 )
Devuelve la primera expresioacuten no NULL
Si todos son NULL devuelve NULL
Select coalesce (PrecioUnidad Cantidad) from [detalles de Pedidos] Si el PrecioUnidad es nulo
devolveraacute la Cantidad y si los dos son nulos devolveraacute un campo Null
PROCEDIMIENTOS PARA AGRUPAR Y RESUMIR DATOS
En el examen de certificacioacuten 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 usaraacute la base de datos indicada Ejemplo Ponemos
en el analizador de consultas lo siguiente
Use Northwind
Select from [Order Details]
[Order Details]
Esta tabla perteneciente a la Northwind se encarga de manejar los pedidos
Order Id Nordm de Pedido
Producto Id Nordm de Producto
Ambos campos son Primary Key con lo que no puede haber una combinacioacuten de ambos campos que sea
igual
OrderId ProductId
1 A
1 B
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 43
1 C
2 A
3 C
Es decir en este caso no podriacutea existir una nueva combinacioacuten ldquo1 Ardquo o ldquo2 Ardquo
Quantity Es la cantidad del producto del pedido
ROLLUP
Se usa para presentar resuacutemenes de datos A de usarse junto con la clausula group by lo que hace es
realizar un resumen de los campos incluidos en el rollup
Ejemplo 63
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
Group by ProductID OrderID
with Rollup
Order by ProductID OrderID
Este ejemplo suma todas las cantidades y mediante
rollup muestra una fila con la suma de todas las
cantidades de cada producto y ademaacutes otra fila con la
suma de todas las cantidades de todos los productos El
resultado de este ejemplo seriacutea el que muestra la
imagen
Ejemplo 64
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
where orderid lt 10250
Group by ProductID OrderID
with Rollup
Order by ProductID OrderID
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 44
CUBE
Al igual que Rollup realiza resuacutemenes de campos agrupados Pero en este caso muestra un resumen con
cada combinacioacuten posible de los campos agrupados
Ejemplo 65
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
where orderid lt 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 combinacioacuten posible entre el
productid y el orderid
GROUPING
Indica si el resultado de un campo es el que hay en la propia tabla o se ha introducido mediante una
claacuteusula de resumen es decir para saber por ejemplo si un ldquoNullrdquo 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 lt 10250 Group by ProductID
OrderID with Cube Order by ProductID OrderID
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 45
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
Ponieacutendole un alias al
grouping saldriacutea el nombre
de columna que le
indiquemos
COMPUTE
Realiza un resumen en una columna aparte con el resultado de la funcioacuten de agregado indicada Su
formato seriacutea Compute funcioacuten(campo) No se puede utilizar en aplicaciones cliente servidor es una
clausula meramente informativa Tampoco se le pueden poner alias a los resuacutemenes
Ejemplo 67
Select Productid Orderid Quantity From [Order Details] order by ProductID Orderid compute
Sum(quantity)
Vemos que muestra la
columna con la suma
total de todas las
cantidades
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 46
Ejercicios de ROLLUP GROUPING y CUBE
Ejemplo 68
Realizar una consulta que resuma la cantidad de artiacuteculos pedidos por cada iacutendice de producto y
nuacutemero de pedido Realizando un caacutelculo acumulativo
select productid as [PRODUCTO] orderid as [Nordm PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] group by productid orderid with rollup order by productid orderid
PRODUCTO Nordm 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
hellip
Ejemplo 69
Modificacioacuten al ejercicio anterior Realizar el mismo resumen pero uacutenicamente para el producto
cuyo id es 50
select productid as [PRODUCTO] orderid as [Nordm PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] where productid = 50 group by productid orderid with rollup order by productid ordered
PRODUCTO Nordm 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
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 47
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 modificacioacuten 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 [Nordm PEDIDO] grouping(orderid) as [GRUPO PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] where productid = 50 group by Productidorderid with cube order by productidorderid
PRODUCTO GRUPO PRODUCTO Nordm PEDIDO GRUPO PEDIDO SUMA TOTAL
----------- -------------- ----------- ------------ -----------
NULL 1 NULL 1 235
NULL 1 10350 0 15
NULL 1 10383 0 15
NULL 1 10429 0 40
NULL 1 10465 0 25
NULL 1 10637 0 25
NULL 1 10729 0 40
NULL 1 10751 0 20
NULL 1 10920 0 24
NULL 1 10948 0 9
NULL 1 11072 0 22
50 0 NULL 1 235
50 0 10350 0 15
50 0 10383 0 15
50 0 10429 0 40
50 0 10465 0 25
50 0 10637 0 25
50 0 10729 0 40
50 0 10751 0 20
50 0 10920 0 24
50 0 10948 0 9
50 0 11072 0 22
(22 filas afectadas)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 48
Obtencioacuten de resuacutemenes 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 maacutes columnas y
luego efectuar alguna operacioacuten de resumen sobre cada grupo asiacute generado
La diferencia con GROUP BY es que permite mostrar informacioacuten mas detallada de cada grupo
Ejemplo 71
Lista de pedidos que muestre por coacutedigo de pedido la cantidad de productos vendidos por cada uno
de ellos
select Idpedidoidproductopreciounidadcantidad[Sub Total]=sum(PreciounidadCantidad) from
[detalles de pedidos] group by Idpedidoidproductopreciounidadcantidad order by IdPedido compute
sum(Cantidad) by IdPedido
EJERCICIOS CON COMPUTE
Ejemplo 72
Generar un resumen de subtotales en una consulta que devuelva el nuacutemero de pedido la cantidad
pedida para todos los orderid 11070
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 49
Select Orderid as [Nordm PEDIDO] Quantity AS [CANTIDAD] From [Order Details] where orderid gt= 11070 order by Orderid compute Sum(quantity) by orderid compute sum(quantity)
Nordm PEDIDO CANTIDAD
----------- --------
11070 40
11070 20
11070 30
11070 20
sum
===========
110
sum
===========
110
(6 filas afectadas)
Ejemplo 73
Generar un resumen con calculo de subtotales similar al anterior pero para los orderid 11075 y
11076
Select Orderid as [Nordm PEDIDO] Quantity as [CANTIDAD] From [Order Details] where orderid = 11075 or orderid = 11076 order by Orderid compute Sum(quantity) by ordered Nordm PEDIDO CANTIDAD ----------- -------- 11075 10 11075 30 11075 2 sum =========== 42 Nordm PEDIDO CANTIDAD ----------- -------- 11076 20 11076 20 11076 10
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 50
sum =========== 50 (8 filas afectadas)
Ejemplo 74
Modificacioacuten al ejercicio anterior Agregar la cantidad total y la cantidad promedio al final del
informe
Select Orderid as [Nordm 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)
Nordm PEDIDO CANTIDAD
----------- --------
11075 10
11075 30
11075 2
sum
===========
42
Nordm PEDIDO CANTIDAD
----------- --------
11076 20
11076 20
11076 10
sum
===========
50
sum
===========
92
avg
===========
15
(10 filas afectadas)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 51
Ejemplo 75
Seleccionar de forma agrupada por tipo todos los tipos la suma de los precios y la suma del
anticipo de la tabla tiacutetulos
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 199900 50000000
business 119500 50000000
business 29900 101250000
business 199900 50000000
sum
=====================
549200
avg
=====================
62812500
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
mod_cook 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
avg
=====================
75000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
popular_comp 229500 70000000
popular_comp 200000 80000000
popular_comp NULL NULL
sum
=====================
429500
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 52
avg
=====================
75000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
psychology 215900 70000000
psychology 109500 22750000
psychology 70000 60000000
psychology 199900 20000000
psychology 79900 40000000
sum
=====================
675200
avg
=====================
42550000
(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 ademaacutes 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 199900 50000000
business 119500 50000000
business 29900 101250000
business 199900 50000000
sum
=====================
549200
sum
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 53
=====================
251250000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
mod_cook 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
popular_comp 229500 70000000
popular_comp 200000 80000000
popular_comp NULL NULL
sum
=====================
429500
sum
=====================
150000000
(30 filas afectadas)
Ejemplo 77
Generar un informe que muestre la suma de los precios de los libros de psicologiacutea 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 109500
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 54
psychology 0736 70000
psychology 0736 199900
psychology 0736 79900
sum
=====================
459300
TIPO CODIGO EDITOR PRECIO
------------ ------------- ---------------------
psychology 0877 215900
sum
=====================
215900
(7 filas afectadas)
Ejemplo 78
Generar un informe que obtenga la suma de los precios de todos los libros de psicologiacutea asiacute como la
suma de los precios de los libros de psicologiacutea 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 109500
psychology 0736 70000
psychology 0736 199900
psychology 0736 79900
sum
=====================
459300
TIPO CODIGO EDITOR PRECIO
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 55
------------ ------------- ---------------------
psychology 0877 215900
sum
=====================
215900
sum
=====================
675200
(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 199900 0000
mod_cook 0877 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO CODIGO EDITOR PRECIO ANTICIPO
------------ ------------- --------------------- ---------------------
trad_cook 0877 119500 40000000
trad_cook 0877 209500 70000000
trad_cook 0877 149900 80000000
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 56
sum
=====================
478900
sum
=====================
190000000
(9 filas afectadas)
Ejemplo 80
Generar un informe que muestre todos los tiacutetulos precio y anticipo de aquellos tiacutetulos que tengan
un precio superior a 20 doacutelares Ofreceraacute tambieacuten la suma total del precio y del anticipo
Select title as [TITULO] price as [PRECIO] advance as [ANTICIPO] From titles where price gt 20 order by title compute sum(price) compute sum(advance)
TITULO PRECIO ANTICIPO
-------------------------------------------------------------------------------- --------------------- -------------
--------
But Is It User Friendly 229500 70000000
Computer Phobic AND Non-Phobic Individuals Behavior Variations 215900
70000000
Onions Leeks and Garlic Cooking Secrets of the Mediterranean 209500
70000000
sum
=====================
654900
sum
=====================
210000000
(5 filas afectadas)
Ejemplo 81
Generar un informe que muestre el precio el tipo y el nuacutemero de editor de la tabla titles de todos
aquellas obras que pertenezcan la categoriacutea de ldquobusinessrdquo Ademaacutes apareceraacute la suma total de
precios y el maacuteximo pub_id de esta seleccioacuten
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 57
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 29900 0736
business 199900 1389
business 199900 1389
business 119500 1389
sum
=====================
549200
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 Mostraraacute la suma de los precios y los anticipos por tipo y luego calcularaacute 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 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
trad_cook 209500 70000000
trad_cook 119500 40000000
trad_cook 149900 80000000
sum
=====================
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 58
478900
sum
=====================
190000000
sum
=====================
708700
sum
=====================
340000000
(11 filas afectadas)
Eliminacioacuten 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 iquestA que precio se ah vendido los productos
Select IdProducto Preciounidad from [Detalles de pedidos] order by IdProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 59
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 mayoriacutea de las consultas que se hacen en una base de datos requiere que se lean datos procedentes
de dos oacute maacutes tablas
INNER JOIN- son las filas que satisfacen la condicioacuten de la combinacioacuten
En la siguiente sentencia SQL enlaza 2 tablas la tabla clientes y la tabla pedidos en esta ejemplo me
muestra los campos nombre compantildeiacutea y el campo idpedido
La uacutenica condicioacuten es que las 2 tablas tengan un campo en comuacuten
Ejemplo 84
select clientesNombreCompantildeiacuteapedidosidpedido from clientes inner join pedidos on
clientesidcliente=pedidosidcliente
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 60
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 pedidosIdPedido pedidosIdCliente 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 pedidosIdPedido pedidosIdCliente order
by pedidos IdPedido
CROSS JOIN
Un Cross Join es la consulta correlacionada que combine cada una de las filas de una de las tablas con
todas las filas de la otra tabla
No es necesario que exista una columna en comuacuten para ejecutar el Cross Join
Ejemplo 86
La siguiente consulta combina cada una de las filas de la tabla categoriacuteas con cada una de las filas de la
tabla productos
select productosNombreProductocategoriasNombrecategoria from productos cross join categorias
order by productosNombreProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 61
Ejercicios de consultas Muacuteltiples
Ejemplo 87
Mostrar el pedidos completo con el id=10248
Select pedidosIdPedido pedidosIdCliente
Total=sum ([detalles de pedidos]Preciounidad[detalles de pedidos]Cantidad)
From [detalles de pedidos] inner join pedidos on
[Detalles de pedidos]IdPedido=pedidosIdPedido where pedidosIdPedido=10248
Group by pedidosIdPedido pedidosIdCliente
Ejemplo 88
1 Mostrar la cantidad de productos por categoriacutea
Select CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
[Total de Producto]=sum (UnidadesEnExistencia) from Categoriacuteas inner join
Productos on CategoriacuteasIdCategoriacutea=productosIdCategoriacutea
Group by CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 62
Ejemplo 89
Calcular cuantas ventas tiene cada uno de los vendedores
Select empleadosIdEmpleado empleadosNombre empleadosApellidos
[Total de ventas]=count (pedidosIdPedido) from empleados
Inner join Pedidos on empleadosIdEmpleado=pedidosIdEmpleado
Group by empleadosIdEmpleado empleadosNombre empleadosApellidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 63
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 despueacutes saca la de Plantilla
Recomendaciones a la hora de usar las combinaciones
Combinar tablas en funcioacuten de claves principales y externas
Limite el nuacutemero de tablas de las combinaciones
Select Apellido
Oficio as
OFICIOFUNCION
salario from emp
UNION
Select Apellido
Funcion Salario from
Plantilla
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 64
SUBCONSULTAS
Es una SELECT anidada en una instruccioacuten INSERT DELETE SELECT o UPDATE
Como una tabla derivada
Select eemp_no as Numero
eApellido
from (select emp_no apellido from emp) as e
Como una expresioacuten
Select emp_no as [Numero]
Apellido
Salario
(select avg(Salario) from emp)
as Diferencia
from emp
where oficio = Empleado
Para correlacionar datos
- Expresioacuten dinaacutemica que cambia en cada fila de una consulta externa
- Es una combinacioacuten entre la subconsulta y la fila de la consulta externa
- Dividen consultas complejas con dos o maacutes consultas simples relacionadas
Subconsulta correlacionada
Select apellido oficiodept_no
from emp as e
where 20 lt
(select dept_no from dept as d
where edept_no = ddept_no
and ddnombre = Ventas)
SUBCONSULTAS
1 Mostrar el numero de empleado el apellido y la fecha de alta del empleado mas antiguo de la
empresa
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 65
SELECT emp_noapellido
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_noapellido
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 Jimeacutenez
select apellido oficio from emp where
oficio = (select oficio from emp where apellido = JIMENEZ)
4 Queremos saber el apellido oficio salario y nuacutemero 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 gt (select max (salario) from
emp where dept_no = 30)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 66
5 Mostrar el apellido la funcioacuten sala o departamento de todos los empleados que trabajen en la
empresa
select eApellido eOficio as [Cargo en Empresa] ddnombre as [Oficina]
from emp as e
inner join dept as d
on edept_no = ddept_no
union
select pApellido pfuncion snombre
from plantilla as p
inner join sala as s
on phospital_cod = shospital_cod
and psala_cod = ssala_cod
union
select dApellido despecialidad hnombre
from doctor as d
inner join hospital as h
on dhospital_cod = hhospital_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 = lsquoventasrsquo))
order by 2
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 67
8 Mostrar los empleados que tienen mejor salario que la media de los directores no incluyendo al
presidente
Select from emp where salario gt
(select avg (salario) from emp where oficio = DIRECTOR)
and oficio ltgt PRESIDENTE
9 Mostrar el apellido funcioacuten salario y coacutedigo 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 = lsquoENFERMEROrsquo or
funcion = lsquoENFERMERArsquo) and hospital_cod = (select hospital_cod from hospital where nombre =
lsquoSAN CARLOSrsquo)
Select apellido funcion salario hospital_cod from plantilla where
funcion in (ENFERMEROENFERMERA)
and hospital_cod = (select hospital_cod from hospital
where nombre = SAN CARLOS)
10 Visualizar los datos de los hospitales que tienen personal (Doctores) de cardiologiacutea
Select from hospital where hospital_cod in (select hospital_cod from doctor where
especialidad = lsquoCardiologiacutearsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 68
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 = lsquoPROVINCIALrsquo or
nombre= lsquoGENERALrsquo)
12 Mostrar el apellido de los enfermos que nacieron antes que el Sentildeor Miller
Select apellido from enfermo where Fecha_nac lt (select fecha_nac from enfermo where
apellido = lsquoMILLER Brsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 69
Simulacion de una clausula JOIN
Vamos a mostrar los oficios que estaacuten en maacutes de un departamento
Select distinct e1oficio from emp as e1
where e1oficio in(Select e2oficio from emp as e2
where e1dept_no ltgt e2dept_no)
Se debe utilizar antes una combinacioacuten que una subconsulta la combinacioacuten seriacutea asi dando los
mismos resultados
Select distinct e1Oficio from emp as e1
inner join emp as e2
on e1oficio = e2oficio
where e1dept_no ltgt e2dept_no
Estos son los dos oficios que estaacuten en
maacutes de un departamento
Subconsulta para simular una clausula HAVING
select e1apellidoe1oficio e1salario
from emp as e1
where e1salario gt
(select avg(e2salario) from emp as e2
where e1oficio = e2oficio)
Esta es la consulta utilizando el HAVING que es la que deberiacuteamos utilizar antes que una
subconsulta de simulacioacuten HAVING
SELECT e1apellidoe1oficio e1salario
FROM emp AS e1
INNER JOIN emp AS e2
ON e1oficio = e2oficio
GROUP BY e1oficio e1salarioe1apellido
HAVING e1salario gt AVG (e2salario)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 70
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 9
Despueacutes de la sentencia Create database Se especifica el nombre de la base de datos Un
nombre en la base de datos debe de ser uacutenico 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 ndash Especifica el tamantildeo del Archivo
Maxsize ndashEspecifica el tamantildeo maacuteximo que puede alcanzar el archive si se requiere espacio adicional
Filegrowth ndashEs la cantidad de espacio que se antildeade 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 procederaacute abrir la base de datos con el use nombre de la base de datos y luego el Use Go
Use master
Go
Luego se procederaacute abrir la tabla Sysdatabases y ahiacute se podraacute visualizar si la base de datos ah
sido creada
Select from Sysdatabases
Luego se procederaacute abrir la base de datos con el use nombre de la base de datos y luego el go
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 10
INSERCIOacuteN ELIMINACIOacuteN Y MODIFICACIOacuteN DE DATOS
- Insercioacuten 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 INSERTSELECT
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
- Creacioacuten de una tabla mediante SELECT INTO Creacioacuten 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
- Insercioacuten de datos parciales No introducir todos los datos solo meter datos en un
determinado campo o en varios pero no en toda la tabla
- Insercioacuten de datos mediante valores de columna predeterminados Se usa para no
dejar a las tablas con el valor null y asiacute 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
ELIMINACIOacuteN 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 = bdquoSERRA‟
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 11
- TRUNCATE TABLE Elimina todas las filas de la tabla (La tabla con su estructura no se
elimina soacutelo los datos de la tabla) No crea filas en el registro de transacciones con lo cual
es el meacutetodo maacutes raacutepido de borrar
TRUNCATE TABLE NombreTabla
Truncate Table emp
- Eliminacioacuten de filas basada en otras tablas
DELETE [ FROM ] NombreTabla | NombreVista
[ FROM OrigenTabla ] [ WHERE CondicionBusqueda ]
ACTUALIZACIONES
- Actualizacioacuten de filas basadas en datos de la propia tabla
UPDATE NombreTabla | NombreVista
SET NombreColumna = expresioacuten DEFAULT | NULL
USE Northwind
UPDATE products
SET unitprice = (unitprice 11 )
- Actualizacioacuten de filas basadas en otras tablas
UPDATE NombreTabla | NombreVista
SET NombreColumna = expresioacuten DEFAULT | NULL
FROM OrigenTabla
WHERE CondicionBusqueda
Ejercicios
Ejemplo 1
Abrir la base de datos creada anteriormente
--use Itae
se procederaacute abrir la base de datos
--go
Ejemplo 2
Crearemos la Tabla alumnos
--CREATE TABLE alumnos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 12
--(
--Idalumno VarChar(8)not null
--nom_alumno Varchar (50) Not Null
--ape_alumno Varchar (50) Not Null
--dir_alumno Varchar (50) Not Null
--tel_alumno VarChar(8)
--Email_alumno Varchar (50)
--)
Ejemplo 3
Para que se muestre la Tabla completa y con todos los registros se utiliza en Select para
seleccionar los campos from para seleccionar la tabla que se desea visualizar
--select from alumnos
Ejemplo 4
Ingreso de Datos a la Tabla alumnos se utiliza la sentencia insert into
--Insert into alumnos (idalumnonom_alumnoape_alumnodir_alumnotel_alumnoemail_alumno)Values
(Cli01jamesjamesVentanilla252511jazoon_28hotmailcom)
--Insert into alumnos (idalumnonom_alumnoape_alumnodir_alumnotel_alumnoemail_alumno)Values
(Cli01Juan CarlosOchoa ValverdeCoop Primavera Mz R1 Lote 16557-
2147jaz_28hotmailcom)
--Insert into alumnos (idalumnonom_alumnoape_alumnodir_alumnotel_alumnoemail_alumno) Values
(Cli02ArturoCapuntildeay LaquiJr Viru 406 Nordm8481-6507eternal_alcarisHotmailcom)
--Insert into alumnos (idalumnonom_alumnoape_alumnodir_alumnotel_alumnoemail_alumno) Values
(Cli03Luis AlexanderAguilar WongJr Hon 920-1090luis_hexenHotmailcom)
--Insert into alumnos (idalumnonom_alumnoape_alumnodir_alumnotel_alumnoemail_alumno) Values
(Cli04Fredy Richard Anaya JesusResidencial 539-0886fredyanayaHotmailcom)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 13
Ejemplo 5
Si deseaacuteramos Eliminar seria con la sentencia Delete
--delete from alumnos where nom_alumno=juan Carlos
Ejemplo 6
Para Actualizar se Utiliza la sentencia Update y Set
--Update alumnos set nom_alumno=diego ape_alumno=cueva dir_alumno=los olivos
tel_alumno=5402972 email_alumno=hades_278hotmailcom where idalumno=01
Ejemplo 7
Para Realizar una Consulta se utiliza el Where
--select from alumnos where idalumno=Cli01
Ejemplo 8
Si tambieacuten uno desea se puede poner en orden ascendente y descendente paraacute ello se utilizar el
ASC y Desc
--select from alumnos ORDER BY nom_alumno Asc
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 14
--select from alumnos ORDER BY nom_alumno desc
Ejemplo 9
Para eliminar un Objeto de la base de datos se utiliza la sentencia Drop
Eliminar de la base de Datos Itae la Tabla Alumnos
Drop table alumnos Elimina la Tabla Clientes con la sentencia Drop seguido del tipo de
objeto y finalizando el nombre
Drop database Itae Elimina la Base de Datos Itae con la sentencia Drop seguido del
tipo de objeto y finalizando el nombre
OPERADORES DE CONDICIOacuteN _ FILAS
En la expresioacuten loacutegica que especifica condicioacuten _ filas se puede utilizar ademaacutes de los operadores
relacioacuten o de comparacioacuten los siguientes operadores SQL
LIKE- Para comparacioacuten de cadenas de caracteres admite los comodines y _
OPERADOR LIKE
Cualquier nuacutemero de caracteres
_ Para un caraacutecter individual
[ ] Para un conjunto de caracteres que esteacute dentro del corchete
[ ^ ] Que el caraacutecter individual que no esteacute dentro del corchete
EJEMPLO LIKE lsquoeenrsquo Muestra todos los caracteres que acaben con een
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 15
EJEMPLO LIKE lsquoeenrsquo Muestra todos los caracteres que contengan een en ese orden
EJEMPLO LIKE lsquo_enrsquo Muestra todos los caracteres que contenga tres letras y acaben en en
EJEMPLO LIKE lsquo[CK ]rsquo Muestra todos los caracteres que empiecen por C o K
EJEMPLO LIKE lsquo[S-V]ingrsquo Nombre de 4 letras cuya primera letra estuviera entre S o V y acabe en
ing
EJEMPLO LIKE lsquoM[^c]rsquo Todos los que empiecen por M y segunda letra no sea una c No hay limite
de caracteres
BETWEEN- para seleccioacuten en base a un rango de valores Los valores pueden ser numeacutericos de
cana fechas y horas
In-Para seleccioacuten en base a un conjunto de valores los valores pueden ser numeacutericos de cadena
fechas y horas
Para estos ejemplos ah utilizado la base de datos con el nombre de Poseidoacuten y contiene las siguientes
tablas y campos
Ejemplo 10
Lista de productos cuyo nombre contenga la palabra vino
Use Poseidon
Go
Select from productos where nombreproducto like vino
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 16
Luego procedemos a ejecutar la aplicacioacuten
El siacutembolo representa a cualquier cadena de caracteres inclusive la cadena nula
Ejemplo 12
Lista de productos cuya primera letea empieza con la letra a
Select from productos where nombreproducto like [a]
Ejemplo 13
Lista de productos cuya primera letea empieza con la letra a y la tercera con la letra e
Select from productos where nombreproducto like [a][e]
Ejemplo 14
Lista de productos cuyo nombre empieza con cualquier caraacutecter que va en el rango de la M a la
T
Select from productos where nombreproducto like [m-t]
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 17
Ejemplo 15
Lista de productos cuyo nombre empieza con A ograve con cualquier caraacutecter en el rango que va de U
a la Ademaacutes el segundo caraacutecter no debe ser la letra r
Select from productos where nombreproducto like [^b-t][^r]
El Caraacutecter ^ significa incluir
El Caraacutecter representa cualquier cadena de caracteres inclusive la cadena nula
El Caraacutecter _ Representa cualquier caraacutecter 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 caraacutecter empiece con la letra e
Select from productos where nombreproducto like _e
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 18
Ejemplo 18
Lista de productos cuyo nombre empiece con C M Ograve R
Select from productos where nombreproducto like bdquo[cmr]
Ejemplo 19
Lista de productos cuyo nombre empiece con C M Ograve R El segundo Caraacutecter debe ser A
Select from productos where nombreproducto like bdquo[cmr] a
El comodiacuten [cmr] representa el conjunto de caracteres validos en la posicioacuten en la que
apareceraacute el comodiacuten
Ejemplo 20
Seleccionar todos los productos que termine con la letra Z
Select from productos where nombreproducto like z
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 19
Ejemplo 21
Mostrar todos los productos cuya cuarta letra sea A
Select from productos where nombreproducto like ___a
USO DEL OPERADOR BETWEEN
Permite seleccionar en base a un rango de valores
Ejemplo 22
Lista de productos cuyo precio se encuentra en el rango que va de 15 a 21 nuevos soles
Select from productos where preciounidad between 15 and 21
Ejemplo 23
Lista de productos cuyo nombre se encuentren en el rango de Cerveza y galletas
Select from productos where nombreproducto between cerveza and galletas
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 20
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 (londresPariacutesTokyo)
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 (preciounidadcantidad)019 as IGV
from [detalles de pedidos]
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 21
Ejemplo 27
Mostar los productos cuyo precio sea mayor a 40
Select from productos where Preciounidad gt 40
Ejemplo 28
Mostrar todos los datos de los Clientes ordenados por Ciudad
Select from clientes order by ciudad
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 22
Ejemplo 29
Mostrar todos los productos de la Categoriacutea 2
Select from productos where IdCategoriacutea=2
Ejemplo 30
Mostrar todos los pedidos realizados en la fecha 1996-06-05
Select from Pedidos where FechaPedido =1996-06-05
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 23
Ejemplo 31
Mostrar todos los pedidos mayores a la Fecha 1996-05-05
Select from Pedidos where FechaPedido gt 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 IdCategoriacutea no sea 3
Select from productos where IdCategoriacutealtgt 3
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 24
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 Categoriacutea (123)
Select from productos where IdCategoriacutea not in (1 2 3) order by IdProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 25
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
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 26
USO DE FUNCIONES
Podemos utilizar funciones para construir expresiones y generar columnas computadoras O condiciones
complejas
Funcioacuten de agregacioacuten
Son funciones que se utilizan para calcular valores en las tablas Si queremos usarlas
combinaacutendolas 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
expresioacuten HAVING Equivalente a where
Todos estos ejercicios han sido desarrollado con la base de datos Poseidoacuten
COUNT Cuenta los registros que hay en la consulta
Si pongo un valor dentro de la expresioacuten devolveraacute la cuenta de todos los
registros no nulos
Si pongo un asterisco contaraacute todos los registros aunque tengan valores
nulos
Select count () from Pedidos Valores con Nulos
Select count (FechaEnviacuteo) from Pedidos Valores sin nulos
AVG Realiza la media sobre la expresioacuten dada debe ser un tipo de dato
Int
Select avg(Preciounidad) from productos
MAX Saca el valor maacuteximo de una consulta
Select max (FechaPedido) from Pedidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 27
MIN Devuelve el valor miacutenimo 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 paiacutes Brasil mostrando el nuacutemero de los Factura con el paiacutes de
Destinatario Brasil
Select count () as [Numero de Facturas] PaiacutesDestinatario
Avg (Preciounidad) as [Precio Medio] from
Facturas group by PaiacutesDestinatario having PaiacutesDestinatario =Brasil
Ejemplo 39
Encontrar el precio maacutes alto mas bajo y la diferencia entre ambos de todos los productos con
IdCategoriacutea 2
Select IdCategoriacutea Max (Preciounidad) as [Precio mas alto] min(Preciounidad) as
[Precio mas Bajo] Max(Preciounidad) - min(Preciounidad) as [Diferencia entre Ambos]
from Productos group by IdCategoriacutea having IdCategoriacutea = 2
Ejemplo 40
Visualizar el nuacutemero de productos por Categoriacutea
Select IdCategoriacutea as [Nordm de Categoriacutea] Count (IdCategoriacutea) as [Nordm de Productos]
From Productos group by IdCategoriacutea
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 28
Ejemplo 41
Visualizar los clientes que vivan en las siguientes ciudades Londres Madrid y Barcelona
Select count () as [Nordm de personas] ciudad from clientes group by ciudad Having ciudad in
(londresMadridBarcelona) order by ciudad
Ejemplo 42
Lista de productos cuya venta allaacute sido mayor a 50000
Select IdProducto Monto=Sum (Preciounidad Cantidad) from [Detalles de pedidos] group
by IdProducto having Sum (Preciounidad Cantidad)gt50000 order by IdProducto
Ejemplo 43
Cuantos Clientes no tienen Fax
Select Count () as [Total de Clientes sin Fax] from clientes where fax is null
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 29
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
Funcioacuten Resultado
GETDATE() Retorna la fecha y hora del sistema
DATEADD(partefechanfecha) Retorna una nueva fecha antildeadiendo n
unidades de partefecha a fecha
DATEDIFF(parteFechafecha1fecha2) Retorna la diferencia en parteFecha entre
fecha1 y fecha2
DATENAME(partefechafecha) Retorna la cadena correspondiente a
partefecha en fecha
DATEPART(partefechafecha) Retorna el numero correspondiente a
partefecha y fecha
DAY(fecha) Retorna el numero correspondiente a la
parte del diacutea de fecha
MONTH(fecha) Retorna el numero correspondiente a la
parte del mes de fecha
YEAR(fecha) Retorna el numero correspondiente a la
parte del antildeo de fecha
GETUTCDATE() Retorna la fecha y hora del meridiano de
Greenwich
La siguiente tabla muestra los valores de partefecha que podemos utilizar
partefecha Abreviatura
Year Yy yyyy
Quarter Qq q
Month Mm m
Dayofyear Dy y
Day Dd d
Week Wk ww
weekday Dw
Hour Hh
minute Mi n
second Ss s
milisecond Ms
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 30
Getdate
Select getdate () Funcioacuten que recupera la fecha actual del sistema
Convert Cast
Convierten expliacutecitamente una expresioacuten de un tipo de datos en otro CAST y CONVERT
proporcionan funciones similares
Convert (Tipodedatosdestino Origen Estilo)
o Tipodedatosdestino Siempre ha de ser tipo caraacutecter
o Origen Puede ser tipo fecha numeacuterico o moneda
o Estilo Opcional Es un coacutedigo que indica el formato en el que devuelve la cadena de
caracteres
Sintaxis
Convert (TipoDato Dato)
Cast (Dato as TipoDato)
Ejemplo
declare n intpalabra nvarchar(10)
set n = 1
set palabra =Nuacutemero
print convert(nvarchar(2)n) + + palabra
print cast(n as nvarchar(2)) + + palabra
while (nlt11)
begin
print convert(nvarchar(2)n) + + palabra
print cast(n as nvarchar(2)) + + palabra
set n = n + 1
end
DateName
Devuelve una cadena de caracteres que representa la parte de la fecha especificada de la fecha
especificada
Los caacutelculos 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
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 31
Ejemplo 46
Select IdPedido DateName (week FechaPedido) as Numero de Semana from Pedidos where IdPedido
= 1035251
Ejemplo 47
Select IdPedido datename (weekday FechaPedido) as Diacutea De Semana from Pedidos where IdPedido =
10352 Martes
Horas
Ejemplo 48
Select IdPedido datename (mi FechaPedido) as Minutos from Pedidos where IdPedido = 10352
Ejemplo 49
Select DateName (minute getdate ()) as minutos
Ejemplo 50
Select DateName (Hh FechaPedido) as hora from Pedidos where IdPedido = 10352
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 32
Ejemplo 51
Select DateName (Hour getdate ()) as hora--gt18
Ejemplo 52
Select DateName (Hh getdate ()) as hora--gt18
DatePart
Devuelve la parte de la fecha u hora indicada Sintaxis
Datepart (Valor devolver fecha)
Ejemplo 53
Select IdPedido datepart (mm FechaPedido) as Mes from Pedidos where IdPedido = 10352
Ejemplo 54
Select Datepart (Hh getdate ()) as Hora--gt17
Ejemplo 55
Select Datepart (mi getdate ()) as Minutos--gt54
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 33
Nombres de Fechas
Day (fecha)
Devuelve UN INT equivale a Datepart
Select day (getdate ()) as diacutea--gt6 (diacutea en la que se ejecuta la sentencia)
Select Datepart (dd getdate ()) --gt6 (diacutea en la que se ejecuta la sentencia)
Select Month (getdate ()) --gt1 (Mes en la que se ejecuta la sentencia)
Select Datepart (mm getdate ()) --gt1 (Mes en la que se ejecuta la sentencia)
Select Year (getdate ()) --gt2008 (Antildeo en la que se ejecuta la sentencia)
Ejemplo 56
Select year (FechaPedido) as Antildeo from Pedidos where IdPedido = 10352
Ejemplo 57
Select datediff (yyyy FechaPedido getdate()) as Dia from Pedidos where IdPedido = 10352
DateAdd
DateAdd (Datepart number date)
Antildeade un nuacutemero a la fecha puesta
DatePart es el formato de lo que queremos antildeadir
Number es el nuacutemero que queremos incrementar la fecha expuesta
Select convert (datetime1-1-02)
Select dateadd (dd 71-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 comparacioacuten y el tipo de dato
que nos devolveraacute antildeos diacuteas minutos etc
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 34
Ejemplo 58
Select datediff (yyyy FechaPedido getdate ()) as Dia from Pedidos where IdPedido = 10352
Ejercicios de funciones de Fecha
Ejemplo 59
Lista de pedidos emitidos en febrero de 1996
Select from Pedidos where month (FechaPedido) =2 and year (FechaPedido) =1996
Ejemplo 60
Lista de Pedidos mostrando la diferencia en diacuteas entre la fecha del pedido y la fecha de Envioacute
Select IdPedido FechaPedido FechaEnviacuteo diacuteas =datediff (day FechaPedido FechaEnviacuteo) from
pedidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 35
Ejemplo 61
Genere un listado de pedidos en el que la fecha del pedido se muestre en el formato nombre del
diacutea diacutea de mes antildeo
Select IdPedido FechaPedido Fecha=datename (dw IdPedido)+ + str (datepart (dd
IdPedido) 2)+ de +datename (mm IdPedido)+ de +str (datepart (yy IdPedido) 4) from
pedidos
Ejemplo 62
Mostrar de la tabla pedidos la fecha de pedidos en fecha corta
Select IdPedido convert (varchar (30) FechaPedido 106) as [Fecha Corta] from pedidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 36
FUNCIONES MATEMATICAS
ABS
Es el valor Absoluto
Select ABS (-4) as VALOR ABSOLUTO--gt4
CEILING
Devuelve el entero maacutes pequentildeo mayor o igual que la expresioacuten numeacuterica dada
Select CEILING (54) as CEILING--6
FLOOR
Devuelve el entero maacutes grande menor o igual que la expresioacuten numeacuterica dada
Select FLOOR (5) as FLOOR--gt5
POWER
Devuelve el valor de la expresioacuten indicada elevada a la potencia especificada
Select POWER (3 2) as 3 ELEVADO A 2--gt9
RAND
Devuelve un valor float aleatorio de 0 a 1
Las llamadas repetitivas de RAND() en una uacutenica consulta produciraacuten el mismo valor
Select RAND(6) as ALEATORIO--071368515806921451
Select RAND(6) as ALEATORIO--071368515806921451
Select RAND(4) as ALEATORIO--07136478921266981
Rand sobre los milisegundos actuales
Select RAND(DATEPART(msGETDATE())) as ALEATORIO--gt071443047691954253
Select RAND(999999999)--gt068504257551273573
ROUND
Devuelve una expresioacuten numeacuterica redondeada a la longitud o precisioacuten especificada
Round (Nuacutemero Redondeo del Nuacutemero)
ROUND siempre devuelve un valor Si length es un valor negativo y mayor que el nuacutemero de
diacutegitos anteriores al separador decimal ROUND devuelve 0
Select ROUND (1234567 2) --gt1234600
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 37
Select ROUND (1234567-2) --gt1000000
Select ROUND (1234567 0) --gt1230000
Select ROUND (1234567-3) ---gt0
SIGN
Devuelve el signo positivo (+1) cero (0) o negativo (-1) de la expresioacuten especificada
Dice el valor negativo positivo o neutro (0) del valor especificado
Select SIGN (-3) --gt-1
Select SIGN (3) --gt1
Select SIGN (0) --gt0
SQUARE
Devuelve el cuadrado de la expresioacuten especificada
Select SQUARE (4) as bdquoCuadrado‟--gt160
SQRT
Devuelve la raiacutez cuadrada de la expresioacuten especificada
Select SQRT (4) as [RAIZ CUADRADA] --gt20
FUNCIONES DE CADENA
ASCII
Devuelve el coacutedigo ASCII del caraacutecter maacutes a la izquierda de una expresioacuten de caracteres
Select ASCII(A)--gt65
Select ASCII(a)--gt97
Select ascii(aula)--gt97
CHAR
Una funcioacuten de cadena que convierte un coacutedigo ASCII int en un caraacutecter
select char(65)--gtA
select char(97)--gta
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 38
CHARINDEX
Devuelve la posicioacuten inicial de la expresioacuten especificada en una cadena de caracteres
CHARINDEX (expression1 expression2 [ start_location])
Argumentos
expression1
Es una expresioacuten que contiene la secuencia de caracteres que se desea buscar
Expression1 es una expresioacuten del tipo de cadenas cortas de caracteres
Expression2
Es una expresioacuten normalmente una columna
en la que se busca la cadena especificada
Expression2 es de la categoriacutea del tipo de datos cadena de caracteres
start_location
Es la posicioacuten del caraacutecter de expression2 en el que se empieza la buacutesqueda de expression1
Si no se especifica start_location es un nuacutemero negativo o es cero
la buacutesqueda empieza al principio de la cadena expression2
Si expression1 no se encuentra en expression2 CHARINDEX devuelve 0
Si alguno de los dos es null devuelve null
Select charindex (ciemurcielago) --gt4
Select charindex (ciemurcielago 2) --gt4
Select charindex (ciemurcielago 5) --gt0
Select charindex (ciemurcielago-6) --gt4
LEFT
Devuelve la parte de una cadena de caracteres que comienza en un nuacutemero de caracteres
especificado a partir de la izquierda
Select left (murcielago5) --gtmurci
RIGHT
Devuelve la parte de una cadena de caracteres que
Comienza en el nuacutemero de caracteres especificado
En integer_expression a partir de la derecha
Select right (hola que tal5) --gte tal
LEN
Cuenta el nuacutemero de caracteres que se incluyen en la cadena
Select len (murcieacutelago) --gt10
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 39
LOWER
Convierte a Minuacutesculas la cadena especificada
Select lower (MurcIELaGO) as [minusculas] --gtmurcielago
UPPER
Convierte a Mayuacutesculas la cadena especificada
Select upper (murcielago) as [MAYUSCULAS] --gtMURCIELAGO
RTRIM y LTRIM
Elimina los espacios que existen a la izquierda y a la derecha respectivamente
Select Rtrim ( murcieacutelago ) AS [SIN ESPACIOS] --gtmurcieacutelago
Select Ltrim ( murcieacutelago ) AS [SIN ESPACIOS] --gtmurcieacutelago
Select ltrim(rtrim( hola ))+
REPLACE
Reemplaza por una tercera expresioacuten todas las apariciones
de la segunda expresioacuten de cadena proporcionada en la primera expresioacuten de cadena
Select replace (hola que tal estasaA) --gtholA que tAl estAs
Select replace (buenos dias que tal estasuentildentildentilde) --gtbntildentildentildenos diasqntildentildentilde tal estas
SPACE
Coloca el nuacutemero de espacios que se le indiquen para entre una cadena de caracteres
Select hola+space(5)+que tal--gthola que tal
SUBSTRING
Devuelve parte de una expresioacuten de caracteres binaria de texto o de imagen
Sintaxis
SUBSTRING (Expresioacuten Comienzo Duracioacuten)
Argumentos
Expresioacuten
Es una cadena de caracteres cadena binaria texto imagen
Columna o expresioacuten que incluye una columna
No deben usarse expresiones que incluyan funciones de agregado
Start
Es un entero que especifica el punto en que comienza la subcadena
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 40
Length
Es un entero que especifica la longitud de la subcadena
(El nuacutemero de caracteres o bytes que se devuelven)
Select substring (murcielago 3 5) --gtrciel
Select substring (murcielago 3 len (murcielago)) --gtrciel
REVERSE
Devuelve invertida una expresioacuten de caraacutecter
Select reverse (hola)
REPLICATE
Repite una expresioacuten de caracteres un nuacutemero especificado de veces
Select replicate (murcielago 5)
Replicate replicate replicate replicate replicate
STUFF
Elimina el nuacutemero de caracteres especificados e insertados
Otro conjunto de caracteres en un punto de inicio indicado
Select STUFF (Murcieacutelago 2 3 ijklmn) Mijklmnielago
FUNCIONES DE SISTEMA
- APP_NAME () Devuelve el nombre de la aplicacioacuten actual
Select app_name () as [Nombre de la aplicacion]
- DATALENGTH (Expresioacuten) Devuelve un entero que es numero de bites necesarios para
representar esa expresioacuten int
Select datalength (Ninoni) as [Numero de bites]
- ISDATE (Expresioacuten) Dice si la expresioacuten es una fecha o no Devuelve 1 si la expresioacuten es
una fecha y 0 si no es una fecha
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 41
Select isdate (121001) as [Validacioacuten Fecha]
- ISNUMERIC (Expresion) Dice si la expresioacuten es un numero o no Devuelve 1 si la
expresioacuten es un nuacutemero y 0 si la expresioacuten no es nuacutemero
Select isnumeric (ddd) as [Validacion Numero]
- ISNULL (Expresioacuten ExpresionDevuelta) Si la expresioacuten es nula te devuelve la Expresioacuten
Devuelta y si no devuelve la primera Expresioacuten
Select isnull (nullNo nulo) as [Es Nulo]
- PARSENAME (bdquoNombreObjeto‟ ParteNombre)
ParteNombre es un valor de tipo Int que coge unos determinados valores del
NombreObjeto
1 Objeto
2 Propietario
3 Base de Datos
4 Servidor
Select parsename (saposeidondbopedidos1) as [Parte Expresioacuten]
Select parsename (saposeidondbopedidos 2) as [Parte Expresioacuten]
Select parsename (saposeidondbopedidos3) as [Parte Expresioacuten]
Select parsename ( saposeidondbopedidos 4) as [Parte Expresioacuten]
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 42
- SYSTEM_USER Devuelve el usuario del sistema actual
Depende de la autentificacioacuten con la que te hayas conectado
Select system_user as [Usuario conectado]
- USER_NAME() Devuelve el nombre del usuario actual
Select user_name ()
- COALESCE (expresioacuten1 expresioacuten2 )
Devuelve la primera expresioacuten no NULL
Si todos son NULL devuelve NULL
Select coalesce (PrecioUnidad Cantidad) from [detalles de Pedidos] Si el PrecioUnidad es nulo
devolveraacute la Cantidad y si los dos son nulos devolveraacute un campo Null
PROCEDIMIENTOS PARA AGRUPAR Y RESUMIR DATOS
En el examen de certificacioacuten 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 usaraacute la base de datos indicada Ejemplo Ponemos
en el analizador de consultas lo siguiente
Use Northwind
Select from [Order Details]
[Order Details]
Esta tabla perteneciente a la Northwind se encarga de manejar los pedidos
Order Id Nordm de Pedido
Producto Id Nordm de Producto
Ambos campos son Primary Key con lo que no puede haber una combinacioacuten de ambos campos que sea
igual
OrderId ProductId
1 A
1 B
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 43
1 C
2 A
3 C
Es decir en este caso no podriacutea existir una nueva combinacioacuten ldquo1 Ardquo o ldquo2 Ardquo
Quantity Es la cantidad del producto del pedido
ROLLUP
Se usa para presentar resuacutemenes de datos A de usarse junto con la clausula group by lo que hace es
realizar un resumen de los campos incluidos en el rollup
Ejemplo 63
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
Group by ProductID OrderID
with Rollup
Order by ProductID OrderID
Este ejemplo suma todas las cantidades y mediante
rollup muestra una fila con la suma de todas las
cantidades de cada producto y ademaacutes otra fila con la
suma de todas las cantidades de todos los productos El
resultado de este ejemplo seriacutea el que muestra la
imagen
Ejemplo 64
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
where orderid lt 10250
Group by ProductID OrderID
with Rollup
Order by ProductID OrderID
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 44
CUBE
Al igual que Rollup realiza resuacutemenes de campos agrupados Pero en este caso muestra un resumen con
cada combinacioacuten posible de los campos agrupados
Ejemplo 65
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
where orderid lt 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 combinacioacuten posible entre el
productid y el orderid
GROUPING
Indica si el resultado de un campo es el que hay en la propia tabla o se ha introducido mediante una
claacuteusula de resumen es decir para saber por ejemplo si un ldquoNullrdquo 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 lt 10250 Group by ProductID
OrderID with Cube Order by ProductID OrderID
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 45
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
Ponieacutendole un alias al
grouping saldriacutea el nombre
de columna que le
indiquemos
COMPUTE
Realiza un resumen en una columna aparte con el resultado de la funcioacuten de agregado indicada Su
formato seriacutea Compute funcioacuten(campo) No se puede utilizar en aplicaciones cliente servidor es una
clausula meramente informativa Tampoco se le pueden poner alias a los resuacutemenes
Ejemplo 67
Select Productid Orderid Quantity From [Order Details] order by ProductID Orderid compute
Sum(quantity)
Vemos que muestra la
columna con la suma
total de todas las
cantidades
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 46
Ejercicios de ROLLUP GROUPING y CUBE
Ejemplo 68
Realizar una consulta que resuma la cantidad de artiacuteculos pedidos por cada iacutendice de producto y
nuacutemero de pedido Realizando un caacutelculo acumulativo
select productid as [PRODUCTO] orderid as [Nordm PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] group by productid orderid with rollup order by productid orderid
PRODUCTO Nordm 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
hellip
Ejemplo 69
Modificacioacuten al ejercicio anterior Realizar el mismo resumen pero uacutenicamente para el producto
cuyo id es 50
select productid as [PRODUCTO] orderid as [Nordm PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] where productid = 50 group by productid orderid with rollup order by productid ordered
PRODUCTO Nordm 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
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 47
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 modificacioacuten 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 [Nordm PEDIDO] grouping(orderid) as [GRUPO PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] where productid = 50 group by Productidorderid with cube order by productidorderid
PRODUCTO GRUPO PRODUCTO Nordm PEDIDO GRUPO PEDIDO SUMA TOTAL
----------- -------------- ----------- ------------ -----------
NULL 1 NULL 1 235
NULL 1 10350 0 15
NULL 1 10383 0 15
NULL 1 10429 0 40
NULL 1 10465 0 25
NULL 1 10637 0 25
NULL 1 10729 0 40
NULL 1 10751 0 20
NULL 1 10920 0 24
NULL 1 10948 0 9
NULL 1 11072 0 22
50 0 NULL 1 235
50 0 10350 0 15
50 0 10383 0 15
50 0 10429 0 40
50 0 10465 0 25
50 0 10637 0 25
50 0 10729 0 40
50 0 10751 0 20
50 0 10920 0 24
50 0 10948 0 9
50 0 11072 0 22
(22 filas afectadas)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 48
Obtencioacuten de resuacutemenes 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 maacutes columnas y
luego efectuar alguna operacioacuten de resumen sobre cada grupo asiacute generado
La diferencia con GROUP BY es que permite mostrar informacioacuten mas detallada de cada grupo
Ejemplo 71
Lista de pedidos que muestre por coacutedigo de pedido la cantidad de productos vendidos por cada uno
de ellos
select Idpedidoidproductopreciounidadcantidad[Sub Total]=sum(PreciounidadCantidad) from
[detalles de pedidos] group by Idpedidoidproductopreciounidadcantidad order by IdPedido compute
sum(Cantidad) by IdPedido
EJERCICIOS CON COMPUTE
Ejemplo 72
Generar un resumen de subtotales en una consulta que devuelva el nuacutemero de pedido la cantidad
pedida para todos los orderid 11070
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 49
Select Orderid as [Nordm PEDIDO] Quantity AS [CANTIDAD] From [Order Details] where orderid gt= 11070 order by Orderid compute Sum(quantity) by orderid compute sum(quantity)
Nordm PEDIDO CANTIDAD
----------- --------
11070 40
11070 20
11070 30
11070 20
sum
===========
110
sum
===========
110
(6 filas afectadas)
Ejemplo 73
Generar un resumen con calculo de subtotales similar al anterior pero para los orderid 11075 y
11076
Select Orderid as [Nordm PEDIDO] Quantity as [CANTIDAD] From [Order Details] where orderid = 11075 or orderid = 11076 order by Orderid compute Sum(quantity) by ordered Nordm PEDIDO CANTIDAD ----------- -------- 11075 10 11075 30 11075 2 sum =========== 42 Nordm PEDIDO CANTIDAD ----------- -------- 11076 20 11076 20 11076 10
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 50
sum =========== 50 (8 filas afectadas)
Ejemplo 74
Modificacioacuten al ejercicio anterior Agregar la cantidad total y la cantidad promedio al final del
informe
Select Orderid as [Nordm 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)
Nordm PEDIDO CANTIDAD
----------- --------
11075 10
11075 30
11075 2
sum
===========
42
Nordm PEDIDO CANTIDAD
----------- --------
11076 20
11076 20
11076 10
sum
===========
50
sum
===========
92
avg
===========
15
(10 filas afectadas)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 51
Ejemplo 75
Seleccionar de forma agrupada por tipo todos los tipos la suma de los precios y la suma del
anticipo de la tabla tiacutetulos
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 199900 50000000
business 119500 50000000
business 29900 101250000
business 199900 50000000
sum
=====================
549200
avg
=====================
62812500
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
mod_cook 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
avg
=====================
75000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
popular_comp 229500 70000000
popular_comp 200000 80000000
popular_comp NULL NULL
sum
=====================
429500
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 52
avg
=====================
75000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
psychology 215900 70000000
psychology 109500 22750000
psychology 70000 60000000
psychology 199900 20000000
psychology 79900 40000000
sum
=====================
675200
avg
=====================
42550000
(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 ademaacutes 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 199900 50000000
business 119500 50000000
business 29900 101250000
business 199900 50000000
sum
=====================
549200
sum
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 53
=====================
251250000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
mod_cook 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
popular_comp 229500 70000000
popular_comp 200000 80000000
popular_comp NULL NULL
sum
=====================
429500
sum
=====================
150000000
(30 filas afectadas)
Ejemplo 77
Generar un informe que muestre la suma de los precios de los libros de psicologiacutea 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 109500
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 54
psychology 0736 70000
psychology 0736 199900
psychology 0736 79900
sum
=====================
459300
TIPO CODIGO EDITOR PRECIO
------------ ------------- ---------------------
psychology 0877 215900
sum
=====================
215900
(7 filas afectadas)
Ejemplo 78
Generar un informe que obtenga la suma de los precios de todos los libros de psicologiacutea asiacute como la
suma de los precios de los libros de psicologiacutea 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 109500
psychology 0736 70000
psychology 0736 199900
psychology 0736 79900
sum
=====================
459300
TIPO CODIGO EDITOR PRECIO
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 55
------------ ------------- ---------------------
psychology 0877 215900
sum
=====================
215900
sum
=====================
675200
(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 199900 0000
mod_cook 0877 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO CODIGO EDITOR PRECIO ANTICIPO
------------ ------------- --------------------- ---------------------
trad_cook 0877 119500 40000000
trad_cook 0877 209500 70000000
trad_cook 0877 149900 80000000
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 56
sum
=====================
478900
sum
=====================
190000000
(9 filas afectadas)
Ejemplo 80
Generar un informe que muestre todos los tiacutetulos precio y anticipo de aquellos tiacutetulos que tengan
un precio superior a 20 doacutelares Ofreceraacute tambieacuten la suma total del precio y del anticipo
Select title as [TITULO] price as [PRECIO] advance as [ANTICIPO] From titles where price gt 20 order by title compute sum(price) compute sum(advance)
TITULO PRECIO ANTICIPO
-------------------------------------------------------------------------------- --------------------- -------------
--------
But Is It User Friendly 229500 70000000
Computer Phobic AND Non-Phobic Individuals Behavior Variations 215900
70000000
Onions Leeks and Garlic Cooking Secrets of the Mediterranean 209500
70000000
sum
=====================
654900
sum
=====================
210000000
(5 filas afectadas)
Ejemplo 81
Generar un informe que muestre el precio el tipo y el nuacutemero de editor de la tabla titles de todos
aquellas obras que pertenezcan la categoriacutea de ldquobusinessrdquo Ademaacutes apareceraacute la suma total de
precios y el maacuteximo pub_id de esta seleccioacuten
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 57
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 29900 0736
business 199900 1389
business 199900 1389
business 119500 1389
sum
=====================
549200
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 Mostraraacute la suma de los precios y los anticipos por tipo y luego calcularaacute 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 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
trad_cook 209500 70000000
trad_cook 119500 40000000
trad_cook 149900 80000000
sum
=====================
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 58
478900
sum
=====================
190000000
sum
=====================
708700
sum
=====================
340000000
(11 filas afectadas)
Eliminacioacuten 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 iquestA que precio se ah vendido los productos
Select IdProducto Preciounidad from [Detalles de pedidos] order by IdProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 59
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 mayoriacutea de las consultas que se hacen en una base de datos requiere que se lean datos procedentes
de dos oacute maacutes tablas
INNER JOIN- son las filas que satisfacen la condicioacuten de la combinacioacuten
En la siguiente sentencia SQL enlaza 2 tablas la tabla clientes y la tabla pedidos en esta ejemplo me
muestra los campos nombre compantildeiacutea y el campo idpedido
La uacutenica condicioacuten es que las 2 tablas tengan un campo en comuacuten
Ejemplo 84
select clientesNombreCompantildeiacuteapedidosidpedido from clientes inner join pedidos on
clientesidcliente=pedidosidcliente
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 60
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 pedidosIdPedido pedidosIdCliente 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 pedidosIdPedido pedidosIdCliente order
by pedidos IdPedido
CROSS JOIN
Un Cross Join es la consulta correlacionada que combine cada una de las filas de una de las tablas con
todas las filas de la otra tabla
No es necesario que exista una columna en comuacuten para ejecutar el Cross Join
Ejemplo 86
La siguiente consulta combina cada una de las filas de la tabla categoriacuteas con cada una de las filas de la
tabla productos
select productosNombreProductocategoriasNombrecategoria from productos cross join categorias
order by productosNombreProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 61
Ejercicios de consultas Muacuteltiples
Ejemplo 87
Mostrar el pedidos completo con el id=10248
Select pedidosIdPedido pedidosIdCliente
Total=sum ([detalles de pedidos]Preciounidad[detalles de pedidos]Cantidad)
From [detalles de pedidos] inner join pedidos on
[Detalles de pedidos]IdPedido=pedidosIdPedido where pedidosIdPedido=10248
Group by pedidosIdPedido pedidosIdCliente
Ejemplo 88
1 Mostrar la cantidad de productos por categoriacutea
Select CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
[Total de Producto]=sum (UnidadesEnExistencia) from Categoriacuteas inner join
Productos on CategoriacuteasIdCategoriacutea=productosIdCategoriacutea
Group by CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 62
Ejemplo 89
Calcular cuantas ventas tiene cada uno de los vendedores
Select empleadosIdEmpleado empleadosNombre empleadosApellidos
[Total de ventas]=count (pedidosIdPedido) from empleados
Inner join Pedidos on empleadosIdEmpleado=pedidosIdEmpleado
Group by empleadosIdEmpleado empleadosNombre empleadosApellidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 63
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 despueacutes saca la de Plantilla
Recomendaciones a la hora de usar las combinaciones
Combinar tablas en funcioacuten de claves principales y externas
Limite el nuacutemero de tablas de las combinaciones
Select Apellido
Oficio as
OFICIOFUNCION
salario from emp
UNION
Select Apellido
Funcion Salario from
Plantilla
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 64
SUBCONSULTAS
Es una SELECT anidada en una instruccioacuten INSERT DELETE SELECT o UPDATE
Como una tabla derivada
Select eemp_no as Numero
eApellido
from (select emp_no apellido from emp) as e
Como una expresioacuten
Select emp_no as [Numero]
Apellido
Salario
(select avg(Salario) from emp)
as Diferencia
from emp
where oficio = Empleado
Para correlacionar datos
- Expresioacuten dinaacutemica que cambia en cada fila de una consulta externa
- Es una combinacioacuten entre la subconsulta y la fila de la consulta externa
- Dividen consultas complejas con dos o maacutes consultas simples relacionadas
Subconsulta correlacionada
Select apellido oficiodept_no
from emp as e
where 20 lt
(select dept_no from dept as d
where edept_no = ddept_no
and ddnombre = Ventas)
SUBCONSULTAS
1 Mostrar el numero de empleado el apellido y la fecha de alta del empleado mas antiguo de la
empresa
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 65
SELECT emp_noapellido
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_noapellido
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 Jimeacutenez
select apellido oficio from emp where
oficio = (select oficio from emp where apellido = JIMENEZ)
4 Queremos saber el apellido oficio salario y nuacutemero 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 gt (select max (salario) from
emp where dept_no = 30)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 66
5 Mostrar el apellido la funcioacuten sala o departamento de todos los empleados que trabajen en la
empresa
select eApellido eOficio as [Cargo en Empresa] ddnombre as [Oficina]
from emp as e
inner join dept as d
on edept_no = ddept_no
union
select pApellido pfuncion snombre
from plantilla as p
inner join sala as s
on phospital_cod = shospital_cod
and psala_cod = ssala_cod
union
select dApellido despecialidad hnombre
from doctor as d
inner join hospital as h
on dhospital_cod = hhospital_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 = lsquoventasrsquo))
order by 2
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 67
8 Mostrar los empleados que tienen mejor salario que la media de los directores no incluyendo al
presidente
Select from emp where salario gt
(select avg (salario) from emp where oficio = DIRECTOR)
and oficio ltgt PRESIDENTE
9 Mostrar el apellido funcioacuten salario y coacutedigo 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 = lsquoENFERMEROrsquo or
funcion = lsquoENFERMERArsquo) and hospital_cod = (select hospital_cod from hospital where nombre =
lsquoSAN CARLOSrsquo)
Select apellido funcion salario hospital_cod from plantilla where
funcion in (ENFERMEROENFERMERA)
and hospital_cod = (select hospital_cod from hospital
where nombre = SAN CARLOS)
10 Visualizar los datos de los hospitales que tienen personal (Doctores) de cardiologiacutea
Select from hospital where hospital_cod in (select hospital_cod from doctor where
especialidad = lsquoCardiologiacutearsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 68
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 = lsquoPROVINCIALrsquo or
nombre= lsquoGENERALrsquo)
12 Mostrar el apellido de los enfermos que nacieron antes que el Sentildeor Miller
Select apellido from enfermo where Fecha_nac lt (select fecha_nac from enfermo where
apellido = lsquoMILLER Brsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 69
Simulacion de una clausula JOIN
Vamos a mostrar los oficios que estaacuten en maacutes de un departamento
Select distinct e1oficio from emp as e1
where e1oficio in(Select e2oficio from emp as e2
where e1dept_no ltgt e2dept_no)
Se debe utilizar antes una combinacioacuten que una subconsulta la combinacioacuten seriacutea asi dando los
mismos resultados
Select distinct e1Oficio from emp as e1
inner join emp as e2
on e1oficio = e2oficio
where e1dept_no ltgt e2dept_no
Estos son los dos oficios que estaacuten en
maacutes de un departamento
Subconsulta para simular una clausula HAVING
select e1apellidoe1oficio e1salario
from emp as e1
where e1salario gt
(select avg(e2salario) from emp as e2
where e1oficio = e2oficio)
Esta es la consulta utilizando el HAVING que es la que deberiacuteamos utilizar antes que una
subconsulta de simulacioacuten HAVING
SELECT e1apellidoe1oficio e1salario
FROM emp AS e1
INNER JOIN emp AS e2
ON e1oficio = e2oficio
GROUP BY e1oficio e1salarioe1apellido
HAVING e1salario gt AVG (e2salario)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 70
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 10
INSERCIOacuteN ELIMINACIOacuteN Y MODIFICACIOacuteN DE DATOS
- Insercioacuten 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 INSERTSELECT
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
- Creacioacuten de una tabla mediante SELECT INTO Creacioacuten 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
- Insercioacuten de datos parciales No introducir todos los datos solo meter datos en un
determinado campo o en varios pero no en toda la tabla
- Insercioacuten de datos mediante valores de columna predeterminados Se usa para no
dejar a las tablas con el valor null y asiacute 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
ELIMINACIOacuteN 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 = bdquoSERRA‟
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 11
- TRUNCATE TABLE Elimina todas las filas de la tabla (La tabla con su estructura no se
elimina soacutelo los datos de la tabla) No crea filas en el registro de transacciones con lo cual
es el meacutetodo maacutes raacutepido de borrar
TRUNCATE TABLE NombreTabla
Truncate Table emp
- Eliminacioacuten de filas basada en otras tablas
DELETE [ FROM ] NombreTabla | NombreVista
[ FROM OrigenTabla ] [ WHERE CondicionBusqueda ]
ACTUALIZACIONES
- Actualizacioacuten de filas basadas en datos de la propia tabla
UPDATE NombreTabla | NombreVista
SET NombreColumna = expresioacuten DEFAULT | NULL
USE Northwind
UPDATE products
SET unitprice = (unitprice 11 )
- Actualizacioacuten de filas basadas en otras tablas
UPDATE NombreTabla | NombreVista
SET NombreColumna = expresioacuten DEFAULT | NULL
FROM OrigenTabla
WHERE CondicionBusqueda
Ejercicios
Ejemplo 1
Abrir la base de datos creada anteriormente
--use Itae
se procederaacute abrir la base de datos
--go
Ejemplo 2
Crearemos la Tabla alumnos
--CREATE TABLE alumnos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 12
--(
--Idalumno VarChar(8)not null
--nom_alumno Varchar (50) Not Null
--ape_alumno Varchar (50) Not Null
--dir_alumno Varchar (50) Not Null
--tel_alumno VarChar(8)
--Email_alumno Varchar (50)
--)
Ejemplo 3
Para que se muestre la Tabla completa y con todos los registros se utiliza en Select para
seleccionar los campos from para seleccionar la tabla que se desea visualizar
--select from alumnos
Ejemplo 4
Ingreso de Datos a la Tabla alumnos se utiliza la sentencia insert into
--Insert into alumnos (idalumnonom_alumnoape_alumnodir_alumnotel_alumnoemail_alumno)Values
(Cli01jamesjamesVentanilla252511jazoon_28hotmailcom)
--Insert into alumnos (idalumnonom_alumnoape_alumnodir_alumnotel_alumnoemail_alumno)Values
(Cli01Juan CarlosOchoa ValverdeCoop Primavera Mz R1 Lote 16557-
2147jaz_28hotmailcom)
--Insert into alumnos (idalumnonom_alumnoape_alumnodir_alumnotel_alumnoemail_alumno) Values
(Cli02ArturoCapuntildeay LaquiJr Viru 406 Nordm8481-6507eternal_alcarisHotmailcom)
--Insert into alumnos (idalumnonom_alumnoape_alumnodir_alumnotel_alumnoemail_alumno) Values
(Cli03Luis AlexanderAguilar WongJr Hon 920-1090luis_hexenHotmailcom)
--Insert into alumnos (idalumnonom_alumnoape_alumnodir_alumnotel_alumnoemail_alumno) Values
(Cli04Fredy Richard Anaya JesusResidencial 539-0886fredyanayaHotmailcom)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 13
Ejemplo 5
Si deseaacuteramos Eliminar seria con la sentencia Delete
--delete from alumnos where nom_alumno=juan Carlos
Ejemplo 6
Para Actualizar se Utiliza la sentencia Update y Set
--Update alumnos set nom_alumno=diego ape_alumno=cueva dir_alumno=los olivos
tel_alumno=5402972 email_alumno=hades_278hotmailcom where idalumno=01
Ejemplo 7
Para Realizar una Consulta se utiliza el Where
--select from alumnos where idalumno=Cli01
Ejemplo 8
Si tambieacuten uno desea se puede poner en orden ascendente y descendente paraacute ello se utilizar el
ASC y Desc
--select from alumnos ORDER BY nom_alumno Asc
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 14
--select from alumnos ORDER BY nom_alumno desc
Ejemplo 9
Para eliminar un Objeto de la base de datos se utiliza la sentencia Drop
Eliminar de la base de Datos Itae la Tabla Alumnos
Drop table alumnos Elimina la Tabla Clientes con la sentencia Drop seguido del tipo de
objeto y finalizando el nombre
Drop database Itae Elimina la Base de Datos Itae con la sentencia Drop seguido del
tipo de objeto y finalizando el nombre
OPERADORES DE CONDICIOacuteN _ FILAS
En la expresioacuten loacutegica que especifica condicioacuten _ filas se puede utilizar ademaacutes de los operadores
relacioacuten o de comparacioacuten los siguientes operadores SQL
LIKE- Para comparacioacuten de cadenas de caracteres admite los comodines y _
OPERADOR LIKE
Cualquier nuacutemero de caracteres
_ Para un caraacutecter individual
[ ] Para un conjunto de caracteres que esteacute dentro del corchete
[ ^ ] Que el caraacutecter individual que no esteacute dentro del corchete
EJEMPLO LIKE lsquoeenrsquo Muestra todos los caracteres que acaben con een
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 15
EJEMPLO LIKE lsquoeenrsquo Muestra todos los caracteres que contengan een en ese orden
EJEMPLO LIKE lsquo_enrsquo Muestra todos los caracteres que contenga tres letras y acaben en en
EJEMPLO LIKE lsquo[CK ]rsquo Muestra todos los caracteres que empiecen por C o K
EJEMPLO LIKE lsquo[S-V]ingrsquo Nombre de 4 letras cuya primera letra estuviera entre S o V y acabe en
ing
EJEMPLO LIKE lsquoM[^c]rsquo Todos los que empiecen por M y segunda letra no sea una c No hay limite
de caracteres
BETWEEN- para seleccioacuten en base a un rango de valores Los valores pueden ser numeacutericos de
cana fechas y horas
In-Para seleccioacuten en base a un conjunto de valores los valores pueden ser numeacutericos de cadena
fechas y horas
Para estos ejemplos ah utilizado la base de datos con el nombre de Poseidoacuten y contiene las siguientes
tablas y campos
Ejemplo 10
Lista de productos cuyo nombre contenga la palabra vino
Use Poseidon
Go
Select from productos where nombreproducto like vino
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 16
Luego procedemos a ejecutar la aplicacioacuten
El siacutembolo representa a cualquier cadena de caracteres inclusive la cadena nula
Ejemplo 12
Lista de productos cuya primera letea empieza con la letra a
Select from productos where nombreproducto like [a]
Ejemplo 13
Lista de productos cuya primera letea empieza con la letra a y la tercera con la letra e
Select from productos where nombreproducto like [a][e]
Ejemplo 14
Lista de productos cuyo nombre empieza con cualquier caraacutecter que va en el rango de la M a la
T
Select from productos where nombreproducto like [m-t]
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 17
Ejemplo 15
Lista de productos cuyo nombre empieza con A ograve con cualquier caraacutecter en el rango que va de U
a la Ademaacutes el segundo caraacutecter no debe ser la letra r
Select from productos where nombreproducto like [^b-t][^r]
El Caraacutecter ^ significa incluir
El Caraacutecter representa cualquier cadena de caracteres inclusive la cadena nula
El Caraacutecter _ Representa cualquier caraacutecter 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 caraacutecter empiece con la letra e
Select from productos where nombreproducto like _e
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 18
Ejemplo 18
Lista de productos cuyo nombre empiece con C M Ograve R
Select from productos where nombreproducto like bdquo[cmr]
Ejemplo 19
Lista de productos cuyo nombre empiece con C M Ograve R El segundo Caraacutecter debe ser A
Select from productos where nombreproducto like bdquo[cmr] a
El comodiacuten [cmr] representa el conjunto de caracteres validos en la posicioacuten en la que
apareceraacute el comodiacuten
Ejemplo 20
Seleccionar todos los productos que termine con la letra Z
Select from productos where nombreproducto like z
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 19
Ejemplo 21
Mostrar todos los productos cuya cuarta letra sea A
Select from productos where nombreproducto like ___a
USO DEL OPERADOR BETWEEN
Permite seleccionar en base a un rango de valores
Ejemplo 22
Lista de productos cuyo precio se encuentra en el rango que va de 15 a 21 nuevos soles
Select from productos where preciounidad between 15 and 21
Ejemplo 23
Lista de productos cuyo nombre se encuentren en el rango de Cerveza y galletas
Select from productos where nombreproducto between cerveza and galletas
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 20
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 (londresPariacutesTokyo)
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 (preciounidadcantidad)019 as IGV
from [detalles de pedidos]
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 21
Ejemplo 27
Mostar los productos cuyo precio sea mayor a 40
Select from productos where Preciounidad gt 40
Ejemplo 28
Mostrar todos los datos de los Clientes ordenados por Ciudad
Select from clientes order by ciudad
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 22
Ejemplo 29
Mostrar todos los productos de la Categoriacutea 2
Select from productos where IdCategoriacutea=2
Ejemplo 30
Mostrar todos los pedidos realizados en la fecha 1996-06-05
Select from Pedidos where FechaPedido =1996-06-05
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 23
Ejemplo 31
Mostrar todos los pedidos mayores a la Fecha 1996-05-05
Select from Pedidos where FechaPedido gt 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 IdCategoriacutea no sea 3
Select from productos where IdCategoriacutealtgt 3
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 24
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 Categoriacutea (123)
Select from productos where IdCategoriacutea not in (1 2 3) order by IdProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 25
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
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 26
USO DE FUNCIONES
Podemos utilizar funciones para construir expresiones y generar columnas computadoras O condiciones
complejas
Funcioacuten de agregacioacuten
Son funciones que se utilizan para calcular valores en las tablas Si queremos usarlas
combinaacutendolas 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
expresioacuten HAVING Equivalente a where
Todos estos ejercicios han sido desarrollado con la base de datos Poseidoacuten
COUNT Cuenta los registros que hay en la consulta
Si pongo un valor dentro de la expresioacuten devolveraacute la cuenta de todos los
registros no nulos
Si pongo un asterisco contaraacute todos los registros aunque tengan valores
nulos
Select count () from Pedidos Valores con Nulos
Select count (FechaEnviacuteo) from Pedidos Valores sin nulos
AVG Realiza la media sobre la expresioacuten dada debe ser un tipo de dato
Int
Select avg(Preciounidad) from productos
MAX Saca el valor maacuteximo de una consulta
Select max (FechaPedido) from Pedidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 27
MIN Devuelve el valor miacutenimo 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 paiacutes Brasil mostrando el nuacutemero de los Factura con el paiacutes de
Destinatario Brasil
Select count () as [Numero de Facturas] PaiacutesDestinatario
Avg (Preciounidad) as [Precio Medio] from
Facturas group by PaiacutesDestinatario having PaiacutesDestinatario =Brasil
Ejemplo 39
Encontrar el precio maacutes alto mas bajo y la diferencia entre ambos de todos los productos con
IdCategoriacutea 2
Select IdCategoriacutea Max (Preciounidad) as [Precio mas alto] min(Preciounidad) as
[Precio mas Bajo] Max(Preciounidad) - min(Preciounidad) as [Diferencia entre Ambos]
from Productos group by IdCategoriacutea having IdCategoriacutea = 2
Ejemplo 40
Visualizar el nuacutemero de productos por Categoriacutea
Select IdCategoriacutea as [Nordm de Categoriacutea] Count (IdCategoriacutea) as [Nordm de Productos]
From Productos group by IdCategoriacutea
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 28
Ejemplo 41
Visualizar los clientes que vivan en las siguientes ciudades Londres Madrid y Barcelona
Select count () as [Nordm de personas] ciudad from clientes group by ciudad Having ciudad in
(londresMadridBarcelona) order by ciudad
Ejemplo 42
Lista de productos cuya venta allaacute sido mayor a 50000
Select IdProducto Monto=Sum (Preciounidad Cantidad) from [Detalles de pedidos] group
by IdProducto having Sum (Preciounidad Cantidad)gt50000 order by IdProducto
Ejemplo 43
Cuantos Clientes no tienen Fax
Select Count () as [Total de Clientes sin Fax] from clientes where fax is null
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 29
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
Funcioacuten Resultado
GETDATE() Retorna la fecha y hora del sistema
DATEADD(partefechanfecha) Retorna una nueva fecha antildeadiendo n
unidades de partefecha a fecha
DATEDIFF(parteFechafecha1fecha2) Retorna la diferencia en parteFecha entre
fecha1 y fecha2
DATENAME(partefechafecha) Retorna la cadena correspondiente a
partefecha en fecha
DATEPART(partefechafecha) Retorna el numero correspondiente a
partefecha y fecha
DAY(fecha) Retorna el numero correspondiente a la
parte del diacutea de fecha
MONTH(fecha) Retorna el numero correspondiente a la
parte del mes de fecha
YEAR(fecha) Retorna el numero correspondiente a la
parte del antildeo de fecha
GETUTCDATE() Retorna la fecha y hora del meridiano de
Greenwich
La siguiente tabla muestra los valores de partefecha que podemos utilizar
partefecha Abreviatura
Year Yy yyyy
Quarter Qq q
Month Mm m
Dayofyear Dy y
Day Dd d
Week Wk ww
weekday Dw
Hour Hh
minute Mi n
second Ss s
milisecond Ms
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 30
Getdate
Select getdate () Funcioacuten que recupera la fecha actual del sistema
Convert Cast
Convierten expliacutecitamente una expresioacuten de un tipo de datos en otro CAST y CONVERT
proporcionan funciones similares
Convert (Tipodedatosdestino Origen Estilo)
o Tipodedatosdestino Siempre ha de ser tipo caraacutecter
o Origen Puede ser tipo fecha numeacuterico o moneda
o Estilo Opcional Es un coacutedigo que indica el formato en el que devuelve la cadena de
caracteres
Sintaxis
Convert (TipoDato Dato)
Cast (Dato as TipoDato)
Ejemplo
declare n intpalabra nvarchar(10)
set n = 1
set palabra =Nuacutemero
print convert(nvarchar(2)n) + + palabra
print cast(n as nvarchar(2)) + + palabra
while (nlt11)
begin
print convert(nvarchar(2)n) + + palabra
print cast(n as nvarchar(2)) + + palabra
set n = n + 1
end
DateName
Devuelve una cadena de caracteres que representa la parte de la fecha especificada de la fecha
especificada
Los caacutelculos 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
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 31
Ejemplo 46
Select IdPedido DateName (week FechaPedido) as Numero de Semana from Pedidos where IdPedido
= 1035251
Ejemplo 47
Select IdPedido datename (weekday FechaPedido) as Diacutea De Semana from Pedidos where IdPedido =
10352 Martes
Horas
Ejemplo 48
Select IdPedido datename (mi FechaPedido) as Minutos from Pedidos where IdPedido = 10352
Ejemplo 49
Select DateName (minute getdate ()) as minutos
Ejemplo 50
Select DateName (Hh FechaPedido) as hora from Pedidos where IdPedido = 10352
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 32
Ejemplo 51
Select DateName (Hour getdate ()) as hora--gt18
Ejemplo 52
Select DateName (Hh getdate ()) as hora--gt18
DatePart
Devuelve la parte de la fecha u hora indicada Sintaxis
Datepart (Valor devolver fecha)
Ejemplo 53
Select IdPedido datepart (mm FechaPedido) as Mes from Pedidos where IdPedido = 10352
Ejemplo 54
Select Datepart (Hh getdate ()) as Hora--gt17
Ejemplo 55
Select Datepart (mi getdate ()) as Minutos--gt54
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 33
Nombres de Fechas
Day (fecha)
Devuelve UN INT equivale a Datepart
Select day (getdate ()) as diacutea--gt6 (diacutea en la que se ejecuta la sentencia)
Select Datepart (dd getdate ()) --gt6 (diacutea en la que se ejecuta la sentencia)
Select Month (getdate ()) --gt1 (Mes en la que se ejecuta la sentencia)
Select Datepart (mm getdate ()) --gt1 (Mes en la que se ejecuta la sentencia)
Select Year (getdate ()) --gt2008 (Antildeo en la que se ejecuta la sentencia)
Ejemplo 56
Select year (FechaPedido) as Antildeo from Pedidos where IdPedido = 10352
Ejemplo 57
Select datediff (yyyy FechaPedido getdate()) as Dia from Pedidos where IdPedido = 10352
DateAdd
DateAdd (Datepart number date)
Antildeade un nuacutemero a la fecha puesta
DatePart es el formato de lo que queremos antildeadir
Number es el nuacutemero que queremos incrementar la fecha expuesta
Select convert (datetime1-1-02)
Select dateadd (dd 71-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 comparacioacuten y el tipo de dato
que nos devolveraacute antildeos diacuteas minutos etc
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 34
Ejemplo 58
Select datediff (yyyy FechaPedido getdate ()) as Dia from Pedidos where IdPedido = 10352
Ejercicios de funciones de Fecha
Ejemplo 59
Lista de pedidos emitidos en febrero de 1996
Select from Pedidos where month (FechaPedido) =2 and year (FechaPedido) =1996
Ejemplo 60
Lista de Pedidos mostrando la diferencia en diacuteas entre la fecha del pedido y la fecha de Envioacute
Select IdPedido FechaPedido FechaEnviacuteo diacuteas =datediff (day FechaPedido FechaEnviacuteo) from
pedidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 35
Ejemplo 61
Genere un listado de pedidos en el que la fecha del pedido se muestre en el formato nombre del
diacutea diacutea de mes antildeo
Select IdPedido FechaPedido Fecha=datename (dw IdPedido)+ + str (datepart (dd
IdPedido) 2)+ de +datename (mm IdPedido)+ de +str (datepart (yy IdPedido) 4) from
pedidos
Ejemplo 62
Mostrar de la tabla pedidos la fecha de pedidos en fecha corta
Select IdPedido convert (varchar (30) FechaPedido 106) as [Fecha Corta] from pedidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 36
FUNCIONES MATEMATICAS
ABS
Es el valor Absoluto
Select ABS (-4) as VALOR ABSOLUTO--gt4
CEILING
Devuelve el entero maacutes pequentildeo mayor o igual que la expresioacuten numeacuterica dada
Select CEILING (54) as CEILING--6
FLOOR
Devuelve el entero maacutes grande menor o igual que la expresioacuten numeacuterica dada
Select FLOOR (5) as FLOOR--gt5
POWER
Devuelve el valor de la expresioacuten indicada elevada a la potencia especificada
Select POWER (3 2) as 3 ELEVADO A 2--gt9
RAND
Devuelve un valor float aleatorio de 0 a 1
Las llamadas repetitivas de RAND() en una uacutenica consulta produciraacuten el mismo valor
Select RAND(6) as ALEATORIO--071368515806921451
Select RAND(6) as ALEATORIO--071368515806921451
Select RAND(4) as ALEATORIO--07136478921266981
Rand sobre los milisegundos actuales
Select RAND(DATEPART(msGETDATE())) as ALEATORIO--gt071443047691954253
Select RAND(999999999)--gt068504257551273573
ROUND
Devuelve una expresioacuten numeacuterica redondeada a la longitud o precisioacuten especificada
Round (Nuacutemero Redondeo del Nuacutemero)
ROUND siempre devuelve un valor Si length es un valor negativo y mayor que el nuacutemero de
diacutegitos anteriores al separador decimal ROUND devuelve 0
Select ROUND (1234567 2) --gt1234600
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 37
Select ROUND (1234567-2) --gt1000000
Select ROUND (1234567 0) --gt1230000
Select ROUND (1234567-3) ---gt0
SIGN
Devuelve el signo positivo (+1) cero (0) o negativo (-1) de la expresioacuten especificada
Dice el valor negativo positivo o neutro (0) del valor especificado
Select SIGN (-3) --gt-1
Select SIGN (3) --gt1
Select SIGN (0) --gt0
SQUARE
Devuelve el cuadrado de la expresioacuten especificada
Select SQUARE (4) as bdquoCuadrado‟--gt160
SQRT
Devuelve la raiacutez cuadrada de la expresioacuten especificada
Select SQRT (4) as [RAIZ CUADRADA] --gt20
FUNCIONES DE CADENA
ASCII
Devuelve el coacutedigo ASCII del caraacutecter maacutes a la izquierda de una expresioacuten de caracteres
Select ASCII(A)--gt65
Select ASCII(a)--gt97
Select ascii(aula)--gt97
CHAR
Una funcioacuten de cadena que convierte un coacutedigo ASCII int en un caraacutecter
select char(65)--gtA
select char(97)--gta
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 38
CHARINDEX
Devuelve la posicioacuten inicial de la expresioacuten especificada en una cadena de caracteres
CHARINDEX (expression1 expression2 [ start_location])
Argumentos
expression1
Es una expresioacuten que contiene la secuencia de caracteres que se desea buscar
Expression1 es una expresioacuten del tipo de cadenas cortas de caracteres
Expression2
Es una expresioacuten normalmente una columna
en la que se busca la cadena especificada
Expression2 es de la categoriacutea del tipo de datos cadena de caracteres
start_location
Es la posicioacuten del caraacutecter de expression2 en el que se empieza la buacutesqueda de expression1
Si no se especifica start_location es un nuacutemero negativo o es cero
la buacutesqueda empieza al principio de la cadena expression2
Si expression1 no se encuentra en expression2 CHARINDEX devuelve 0
Si alguno de los dos es null devuelve null
Select charindex (ciemurcielago) --gt4
Select charindex (ciemurcielago 2) --gt4
Select charindex (ciemurcielago 5) --gt0
Select charindex (ciemurcielago-6) --gt4
LEFT
Devuelve la parte de una cadena de caracteres que comienza en un nuacutemero de caracteres
especificado a partir de la izquierda
Select left (murcielago5) --gtmurci
RIGHT
Devuelve la parte de una cadena de caracteres que
Comienza en el nuacutemero de caracteres especificado
En integer_expression a partir de la derecha
Select right (hola que tal5) --gte tal
LEN
Cuenta el nuacutemero de caracteres que se incluyen en la cadena
Select len (murcieacutelago) --gt10
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 39
LOWER
Convierte a Minuacutesculas la cadena especificada
Select lower (MurcIELaGO) as [minusculas] --gtmurcielago
UPPER
Convierte a Mayuacutesculas la cadena especificada
Select upper (murcielago) as [MAYUSCULAS] --gtMURCIELAGO
RTRIM y LTRIM
Elimina los espacios que existen a la izquierda y a la derecha respectivamente
Select Rtrim ( murcieacutelago ) AS [SIN ESPACIOS] --gtmurcieacutelago
Select Ltrim ( murcieacutelago ) AS [SIN ESPACIOS] --gtmurcieacutelago
Select ltrim(rtrim( hola ))+
REPLACE
Reemplaza por una tercera expresioacuten todas las apariciones
de la segunda expresioacuten de cadena proporcionada en la primera expresioacuten de cadena
Select replace (hola que tal estasaA) --gtholA que tAl estAs
Select replace (buenos dias que tal estasuentildentildentilde) --gtbntildentildentildenos diasqntildentildentilde tal estas
SPACE
Coloca el nuacutemero de espacios que se le indiquen para entre una cadena de caracteres
Select hola+space(5)+que tal--gthola que tal
SUBSTRING
Devuelve parte de una expresioacuten de caracteres binaria de texto o de imagen
Sintaxis
SUBSTRING (Expresioacuten Comienzo Duracioacuten)
Argumentos
Expresioacuten
Es una cadena de caracteres cadena binaria texto imagen
Columna o expresioacuten que incluye una columna
No deben usarse expresiones que incluyan funciones de agregado
Start
Es un entero que especifica el punto en que comienza la subcadena
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 40
Length
Es un entero que especifica la longitud de la subcadena
(El nuacutemero de caracteres o bytes que se devuelven)
Select substring (murcielago 3 5) --gtrciel
Select substring (murcielago 3 len (murcielago)) --gtrciel
REVERSE
Devuelve invertida una expresioacuten de caraacutecter
Select reverse (hola)
REPLICATE
Repite una expresioacuten de caracteres un nuacutemero especificado de veces
Select replicate (murcielago 5)
Replicate replicate replicate replicate replicate
STUFF
Elimina el nuacutemero de caracteres especificados e insertados
Otro conjunto de caracteres en un punto de inicio indicado
Select STUFF (Murcieacutelago 2 3 ijklmn) Mijklmnielago
FUNCIONES DE SISTEMA
- APP_NAME () Devuelve el nombre de la aplicacioacuten actual
Select app_name () as [Nombre de la aplicacion]
- DATALENGTH (Expresioacuten) Devuelve un entero que es numero de bites necesarios para
representar esa expresioacuten int
Select datalength (Ninoni) as [Numero de bites]
- ISDATE (Expresioacuten) Dice si la expresioacuten es una fecha o no Devuelve 1 si la expresioacuten es
una fecha y 0 si no es una fecha
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 41
Select isdate (121001) as [Validacioacuten Fecha]
- ISNUMERIC (Expresion) Dice si la expresioacuten es un numero o no Devuelve 1 si la
expresioacuten es un nuacutemero y 0 si la expresioacuten no es nuacutemero
Select isnumeric (ddd) as [Validacion Numero]
- ISNULL (Expresioacuten ExpresionDevuelta) Si la expresioacuten es nula te devuelve la Expresioacuten
Devuelta y si no devuelve la primera Expresioacuten
Select isnull (nullNo nulo) as [Es Nulo]
- PARSENAME (bdquoNombreObjeto‟ ParteNombre)
ParteNombre es un valor de tipo Int que coge unos determinados valores del
NombreObjeto
1 Objeto
2 Propietario
3 Base de Datos
4 Servidor
Select parsename (saposeidondbopedidos1) as [Parte Expresioacuten]
Select parsename (saposeidondbopedidos 2) as [Parte Expresioacuten]
Select parsename (saposeidondbopedidos3) as [Parte Expresioacuten]
Select parsename ( saposeidondbopedidos 4) as [Parte Expresioacuten]
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 42
- SYSTEM_USER Devuelve el usuario del sistema actual
Depende de la autentificacioacuten con la que te hayas conectado
Select system_user as [Usuario conectado]
- USER_NAME() Devuelve el nombre del usuario actual
Select user_name ()
- COALESCE (expresioacuten1 expresioacuten2 )
Devuelve la primera expresioacuten no NULL
Si todos son NULL devuelve NULL
Select coalesce (PrecioUnidad Cantidad) from [detalles de Pedidos] Si el PrecioUnidad es nulo
devolveraacute la Cantidad y si los dos son nulos devolveraacute un campo Null
PROCEDIMIENTOS PARA AGRUPAR Y RESUMIR DATOS
En el examen de certificacioacuten 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 usaraacute la base de datos indicada Ejemplo Ponemos
en el analizador de consultas lo siguiente
Use Northwind
Select from [Order Details]
[Order Details]
Esta tabla perteneciente a la Northwind se encarga de manejar los pedidos
Order Id Nordm de Pedido
Producto Id Nordm de Producto
Ambos campos son Primary Key con lo que no puede haber una combinacioacuten de ambos campos que sea
igual
OrderId ProductId
1 A
1 B
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 43
1 C
2 A
3 C
Es decir en este caso no podriacutea existir una nueva combinacioacuten ldquo1 Ardquo o ldquo2 Ardquo
Quantity Es la cantidad del producto del pedido
ROLLUP
Se usa para presentar resuacutemenes de datos A de usarse junto con la clausula group by lo que hace es
realizar un resumen de los campos incluidos en el rollup
Ejemplo 63
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
Group by ProductID OrderID
with Rollup
Order by ProductID OrderID
Este ejemplo suma todas las cantidades y mediante
rollup muestra una fila con la suma de todas las
cantidades de cada producto y ademaacutes otra fila con la
suma de todas las cantidades de todos los productos El
resultado de este ejemplo seriacutea el que muestra la
imagen
Ejemplo 64
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
where orderid lt 10250
Group by ProductID OrderID
with Rollup
Order by ProductID OrderID
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 44
CUBE
Al igual que Rollup realiza resuacutemenes de campos agrupados Pero en este caso muestra un resumen con
cada combinacioacuten posible de los campos agrupados
Ejemplo 65
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
where orderid lt 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 combinacioacuten posible entre el
productid y el orderid
GROUPING
Indica si el resultado de un campo es el que hay en la propia tabla o se ha introducido mediante una
claacuteusula de resumen es decir para saber por ejemplo si un ldquoNullrdquo 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 lt 10250 Group by ProductID
OrderID with Cube Order by ProductID OrderID
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 45
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
Ponieacutendole un alias al
grouping saldriacutea el nombre
de columna que le
indiquemos
COMPUTE
Realiza un resumen en una columna aparte con el resultado de la funcioacuten de agregado indicada Su
formato seriacutea Compute funcioacuten(campo) No se puede utilizar en aplicaciones cliente servidor es una
clausula meramente informativa Tampoco se le pueden poner alias a los resuacutemenes
Ejemplo 67
Select Productid Orderid Quantity From [Order Details] order by ProductID Orderid compute
Sum(quantity)
Vemos que muestra la
columna con la suma
total de todas las
cantidades
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 46
Ejercicios de ROLLUP GROUPING y CUBE
Ejemplo 68
Realizar una consulta que resuma la cantidad de artiacuteculos pedidos por cada iacutendice de producto y
nuacutemero de pedido Realizando un caacutelculo acumulativo
select productid as [PRODUCTO] orderid as [Nordm PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] group by productid orderid with rollup order by productid orderid
PRODUCTO Nordm 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
hellip
Ejemplo 69
Modificacioacuten al ejercicio anterior Realizar el mismo resumen pero uacutenicamente para el producto
cuyo id es 50
select productid as [PRODUCTO] orderid as [Nordm PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] where productid = 50 group by productid orderid with rollup order by productid ordered
PRODUCTO Nordm 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
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 47
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 modificacioacuten 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 [Nordm PEDIDO] grouping(orderid) as [GRUPO PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] where productid = 50 group by Productidorderid with cube order by productidorderid
PRODUCTO GRUPO PRODUCTO Nordm PEDIDO GRUPO PEDIDO SUMA TOTAL
----------- -------------- ----------- ------------ -----------
NULL 1 NULL 1 235
NULL 1 10350 0 15
NULL 1 10383 0 15
NULL 1 10429 0 40
NULL 1 10465 0 25
NULL 1 10637 0 25
NULL 1 10729 0 40
NULL 1 10751 0 20
NULL 1 10920 0 24
NULL 1 10948 0 9
NULL 1 11072 0 22
50 0 NULL 1 235
50 0 10350 0 15
50 0 10383 0 15
50 0 10429 0 40
50 0 10465 0 25
50 0 10637 0 25
50 0 10729 0 40
50 0 10751 0 20
50 0 10920 0 24
50 0 10948 0 9
50 0 11072 0 22
(22 filas afectadas)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 48
Obtencioacuten de resuacutemenes 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 maacutes columnas y
luego efectuar alguna operacioacuten de resumen sobre cada grupo asiacute generado
La diferencia con GROUP BY es que permite mostrar informacioacuten mas detallada de cada grupo
Ejemplo 71
Lista de pedidos que muestre por coacutedigo de pedido la cantidad de productos vendidos por cada uno
de ellos
select Idpedidoidproductopreciounidadcantidad[Sub Total]=sum(PreciounidadCantidad) from
[detalles de pedidos] group by Idpedidoidproductopreciounidadcantidad order by IdPedido compute
sum(Cantidad) by IdPedido
EJERCICIOS CON COMPUTE
Ejemplo 72
Generar un resumen de subtotales en una consulta que devuelva el nuacutemero de pedido la cantidad
pedida para todos los orderid 11070
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 49
Select Orderid as [Nordm PEDIDO] Quantity AS [CANTIDAD] From [Order Details] where orderid gt= 11070 order by Orderid compute Sum(quantity) by orderid compute sum(quantity)
Nordm PEDIDO CANTIDAD
----------- --------
11070 40
11070 20
11070 30
11070 20
sum
===========
110
sum
===========
110
(6 filas afectadas)
Ejemplo 73
Generar un resumen con calculo de subtotales similar al anterior pero para los orderid 11075 y
11076
Select Orderid as [Nordm PEDIDO] Quantity as [CANTIDAD] From [Order Details] where orderid = 11075 or orderid = 11076 order by Orderid compute Sum(quantity) by ordered Nordm PEDIDO CANTIDAD ----------- -------- 11075 10 11075 30 11075 2 sum =========== 42 Nordm PEDIDO CANTIDAD ----------- -------- 11076 20 11076 20 11076 10
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 50
sum =========== 50 (8 filas afectadas)
Ejemplo 74
Modificacioacuten al ejercicio anterior Agregar la cantidad total y la cantidad promedio al final del
informe
Select Orderid as [Nordm 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)
Nordm PEDIDO CANTIDAD
----------- --------
11075 10
11075 30
11075 2
sum
===========
42
Nordm PEDIDO CANTIDAD
----------- --------
11076 20
11076 20
11076 10
sum
===========
50
sum
===========
92
avg
===========
15
(10 filas afectadas)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 51
Ejemplo 75
Seleccionar de forma agrupada por tipo todos los tipos la suma de los precios y la suma del
anticipo de la tabla tiacutetulos
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 199900 50000000
business 119500 50000000
business 29900 101250000
business 199900 50000000
sum
=====================
549200
avg
=====================
62812500
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
mod_cook 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
avg
=====================
75000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
popular_comp 229500 70000000
popular_comp 200000 80000000
popular_comp NULL NULL
sum
=====================
429500
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 52
avg
=====================
75000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
psychology 215900 70000000
psychology 109500 22750000
psychology 70000 60000000
psychology 199900 20000000
psychology 79900 40000000
sum
=====================
675200
avg
=====================
42550000
(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 ademaacutes 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 199900 50000000
business 119500 50000000
business 29900 101250000
business 199900 50000000
sum
=====================
549200
sum
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 53
=====================
251250000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
mod_cook 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
popular_comp 229500 70000000
popular_comp 200000 80000000
popular_comp NULL NULL
sum
=====================
429500
sum
=====================
150000000
(30 filas afectadas)
Ejemplo 77
Generar un informe que muestre la suma de los precios de los libros de psicologiacutea 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 109500
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 54
psychology 0736 70000
psychology 0736 199900
psychology 0736 79900
sum
=====================
459300
TIPO CODIGO EDITOR PRECIO
------------ ------------- ---------------------
psychology 0877 215900
sum
=====================
215900
(7 filas afectadas)
Ejemplo 78
Generar un informe que obtenga la suma de los precios de todos los libros de psicologiacutea asiacute como la
suma de los precios de los libros de psicologiacutea 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 109500
psychology 0736 70000
psychology 0736 199900
psychology 0736 79900
sum
=====================
459300
TIPO CODIGO EDITOR PRECIO
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 55
------------ ------------- ---------------------
psychology 0877 215900
sum
=====================
215900
sum
=====================
675200
(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 199900 0000
mod_cook 0877 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO CODIGO EDITOR PRECIO ANTICIPO
------------ ------------- --------------------- ---------------------
trad_cook 0877 119500 40000000
trad_cook 0877 209500 70000000
trad_cook 0877 149900 80000000
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 56
sum
=====================
478900
sum
=====================
190000000
(9 filas afectadas)
Ejemplo 80
Generar un informe que muestre todos los tiacutetulos precio y anticipo de aquellos tiacutetulos que tengan
un precio superior a 20 doacutelares Ofreceraacute tambieacuten la suma total del precio y del anticipo
Select title as [TITULO] price as [PRECIO] advance as [ANTICIPO] From titles where price gt 20 order by title compute sum(price) compute sum(advance)
TITULO PRECIO ANTICIPO
-------------------------------------------------------------------------------- --------------------- -------------
--------
But Is It User Friendly 229500 70000000
Computer Phobic AND Non-Phobic Individuals Behavior Variations 215900
70000000
Onions Leeks and Garlic Cooking Secrets of the Mediterranean 209500
70000000
sum
=====================
654900
sum
=====================
210000000
(5 filas afectadas)
Ejemplo 81
Generar un informe que muestre el precio el tipo y el nuacutemero de editor de la tabla titles de todos
aquellas obras que pertenezcan la categoriacutea de ldquobusinessrdquo Ademaacutes apareceraacute la suma total de
precios y el maacuteximo pub_id de esta seleccioacuten
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 57
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 29900 0736
business 199900 1389
business 199900 1389
business 119500 1389
sum
=====================
549200
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 Mostraraacute la suma de los precios y los anticipos por tipo y luego calcularaacute 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 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
trad_cook 209500 70000000
trad_cook 119500 40000000
trad_cook 149900 80000000
sum
=====================
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 58
478900
sum
=====================
190000000
sum
=====================
708700
sum
=====================
340000000
(11 filas afectadas)
Eliminacioacuten 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 iquestA que precio se ah vendido los productos
Select IdProducto Preciounidad from [Detalles de pedidos] order by IdProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 59
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 mayoriacutea de las consultas que se hacen en una base de datos requiere que se lean datos procedentes
de dos oacute maacutes tablas
INNER JOIN- son las filas que satisfacen la condicioacuten de la combinacioacuten
En la siguiente sentencia SQL enlaza 2 tablas la tabla clientes y la tabla pedidos en esta ejemplo me
muestra los campos nombre compantildeiacutea y el campo idpedido
La uacutenica condicioacuten es que las 2 tablas tengan un campo en comuacuten
Ejemplo 84
select clientesNombreCompantildeiacuteapedidosidpedido from clientes inner join pedidos on
clientesidcliente=pedidosidcliente
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 60
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 pedidosIdPedido pedidosIdCliente 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 pedidosIdPedido pedidosIdCliente order
by pedidos IdPedido
CROSS JOIN
Un Cross Join es la consulta correlacionada que combine cada una de las filas de una de las tablas con
todas las filas de la otra tabla
No es necesario que exista una columna en comuacuten para ejecutar el Cross Join
Ejemplo 86
La siguiente consulta combina cada una de las filas de la tabla categoriacuteas con cada una de las filas de la
tabla productos
select productosNombreProductocategoriasNombrecategoria from productos cross join categorias
order by productosNombreProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 61
Ejercicios de consultas Muacuteltiples
Ejemplo 87
Mostrar el pedidos completo con el id=10248
Select pedidosIdPedido pedidosIdCliente
Total=sum ([detalles de pedidos]Preciounidad[detalles de pedidos]Cantidad)
From [detalles de pedidos] inner join pedidos on
[Detalles de pedidos]IdPedido=pedidosIdPedido where pedidosIdPedido=10248
Group by pedidosIdPedido pedidosIdCliente
Ejemplo 88
1 Mostrar la cantidad de productos por categoriacutea
Select CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
[Total de Producto]=sum (UnidadesEnExistencia) from Categoriacuteas inner join
Productos on CategoriacuteasIdCategoriacutea=productosIdCategoriacutea
Group by CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 62
Ejemplo 89
Calcular cuantas ventas tiene cada uno de los vendedores
Select empleadosIdEmpleado empleadosNombre empleadosApellidos
[Total de ventas]=count (pedidosIdPedido) from empleados
Inner join Pedidos on empleadosIdEmpleado=pedidosIdEmpleado
Group by empleadosIdEmpleado empleadosNombre empleadosApellidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 63
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 despueacutes saca la de Plantilla
Recomendaciones a la hora de usar las combinaciones
Combinar tablas en funcioacuten de claves principales y externas
Limite el nuacutemero de tablas de las combinaciones
Select Apellido
Oficio as
OFICIOFUNCION
salario from emp
UNION
Select Apellido
Funcion Salario from
Plantilla
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 64
SUBCONSULTAS
Es una SELECT anidada en una instruccioacuten INSERT DELETE SELECT o UPDATE
Como una tabla derivada
Select eemp_no as Numero
eApellido
from (select emp_no apellido from emp) as e
Como una expresioacuten
Select emp_no as [Numero]
Apellido
Salario
(select avg(Salario) from emp)
as Diferencia
from emp
where oficio = Empleado
Para correlacionar datos
- Expresioacuten dinaacutemica que cambia en cada fila de una consulta externa
- Es una combinacioacuten entre la subconsulta y la fila de la consulta externa
- Dividen consultas complejas con dos o maacutes consultas simples relacionadas
Subconsulta correlacionada
Select apellido oficiodept_no
from emp as e
where 20 lt
(select dept_no from dept as d
where edept_no = ddept_no
and ddnombre = Ventas)
SUBCONSULTAS
1 Mostrar el numero de empleado el apellido y la fecha de alta del empleado mas antiguo de la
empresa
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 65
SELECT emp_noapellido
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_noapellido
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 Jimeacutenez
select apellido oficio from emp where
oficio = (select oficio from emp where apellido = JIMENEZ)
4 Queremos saber el apellido oficio salario y nuacutemero 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 gt (select max (salario) from
emp where dept_no = 30)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 66
5 Mostrar el apellido la funcioacuten sala o departamento de todos los empleados que trabajen en la
empresa
select eApellido eOficio as [Cargo en Empresa] ddnombre as [Oficina]
from emp as e
inner join dept as d
on edept_no = ddept_no
union
select pApellido pfuncion snombre
from plantilla as p
inner join sala as s
on phospital_cod = shospital_cod
and psala_cod = ssala_cod
union
select dApellido despecialidad hnombre
from doctor as d
inner join hospital as h
on dhospital_cod = hhospital_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 = lsquoventasrsquo))
order by 2
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 67
8 Mostrar los empleados que tienen mejor salario que la media de los directores no incluyendo al
presidente
Select from emp where salario gt
(select avg (salario) from emp where oficio = DIRECTOR)
and oficio ltgt PRESIDENTE
9 Mostrar el apellido funcioacuten salario y coacutedigo 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 = lsquoENFERMEROrsquo or
funcion = lsquoENFERMERArsquo) and hospital_cod = (select hospital_cod from hospital where nombre =
lsquoSAN CARLOSrsquo)
Select apellido funcion salario hospital_cod from plantilla where
funcion in (ENFERMEROENFERMERA)
and hospital_cod = (select hospital_cod from hospital
where nombre = SAN CARLOS)
10 Visualizar los datos de los hospitales que tienen personal (Doctores) de cardiologiacutea
Select from hospital where hospital_cod in (select hospital_cod from doctor where
especialidad = lsquoCardiologiacutearsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 68
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 = lsquoPROVINCIALrsquo or
nombre= lsquoGENERALrsquo)
12 Mostrar el apellido de los enfermos que nacieron antes que el Sentildeor Miller
Select apellido from enfermo where Fecha_nac lt (select fecha_nac from enfermo where
apellido = lsquoMILLER Brsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 69
Simulacion de una clausula JOIN
Vamos a mostrar los oficios que estaacuten en maacutes de un departamento
Select distinct e1oficio from emp as e1
where e1oficio in(Select e2oficio from emp as e2
where e1dept_no ltgt e2dept_no)
Se debe utilizar antes una combinacioacuten que una subconsulta la combinacioacuten seriacutea asi dando los
mismos resultados
Select distinct e1Oficio from emp as e1
inner join emp as e2
on e1oficio = e2oficio
where e1dept_no ltgt e2dept_no
Estos son los dos oficios que estaacuten en
maacutes de un departamento
Subconsulta para simular una clausula HAVING
select e1apellidoe1oficio e1salario
from emp as e1
where e1salario gt
(select avg(e2salario) from emp as e2
where e1oficio = e2oficio)
Esta es la consulta utilizando el HAVING que es la que deberiacuteamos utilizar antes que una
subconsulta de simulacioacuten HAVING
SELECT e1apellidoe1oficio e1salario
FROM emp AS e1
INNER JOIN emp AS e2
ON e1oficio = e2oficio
GROUP BY e1oficio e1salarioe1apellido
HAVING e1salario gt AVG (e2salario)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 70
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 11
- TRUNCATE TABLE Elimina todas las filas de la tabla (La tabla con su estructura no se
elimina soacutelo los datos de la tabla) No crea filas en el registro de transacciones con lo cual
es el meacutetodo maacutes raacutepido de borrar
TRUNCATE TABLE NombreTabla
Truncate Table emp
- Eliminacioacuten de filas basada en otras tablas
DELETE [ FROM ] NombreTabla | NombreVista
[ FROM OrigenTabla ] [ WHERE CondicionBusqueda ]
ACTUALIZACIONES
- Actualizacioacuten de filas basadas en datos de la propia tabla
UPDATE NombreTabla | NombreVista
SET NombreColumna = expresioacuten DEFAULT | NULL
USE Northwind
UPDATE products
SET unitprice = (unitprice 11 )
- Actualizacioacuten de filas basadas en otras tablas
UPDATE NombreTabla | NombreVista
SET NombreColumna = expresioacuten DEFAULT | NULL
FROM OrigenTabla
WHERE CondicionBusqueda
Ejercicios
Ejemplo 1
Abrir la base de datos creada anteriormente
--use Itae
se procederaacute abrir la base de datos
--go
Ejemplo 2
Crearemos la Tabla alumnos
--CREATE TABLE alumnos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 12
--(
--Idalumno VarChar(8)not null
--nom_alumno Varchar (50) Not Null
--ape_alumno Varchar (50) Not Null
--dir_alumno Varchar (50) Not Null
--tel_alumno VarChar(8)
--Email_alumno Varchar (50)
--)
Ejemplo 3
Para que se muestre la Tabla completa y con todos los registros se utiliza en Select para
seleccionar los campos from para seleccionar la tabla que se desea visualizar
--select from alumnos
Ejemplo 4
Ingreso de Datos a la Tabla alumnos se utiliza la sentencia insert into
--Insert into alumnos (idalumnonom_alumnoape_alumnodir_alumnotel_alumnoemail_alumno)Values
(Cli01jamesjamesVentanilla252511jazoon_28hotmailcom)
--Insert into alumnos (idalumnonom_alumnoape_alumnodir_alumnotel_alumnoemail_alumno)Values
(Cli01Juan CarlosOchoa ValverdeCoop Primavera Mz R1 Lote 16557-
2147jaz_28hotmailcom)
--Insert into alumnos (idalumnonom_alumnoape_alumnodir_alumnotel_alumnoemail_alumno) Values
(Cli02ArturoCapuntildeay LaquiJr Viru 406 Nordm8481-6507eternal_alcarisHotmailcom)
--Insert into alumnos (idalumnonom_alumnoape_alumnodir_alumnotel_alumnoemail_alumno) Values
(Cli03Luis AlexanderAguilar WongJr Hon 920-1090luis_hexenHotmailcom)
--Insert into alumnos (idalumnonom_alumnoape_alumnodir_alumnotel_alumnoemail_alumno) Values
(Cli04Fredy Richard Anaya JesusResidencial 539-0886fredyanayaHotmailcom)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 13
Ejemplo 5
Si deseaacuteramos Eliminar seria con la sentencia Delete
--delete from alumnos where nom_alumno=juan Carlos
Ejemplo 6
Para Actualizar se Utiliza la sentencia Update y Set
--Update alumnos set nom_alumno=diego ape_alumno=cueva dir_alumno=los olivos
tel_alumno=5402972 email_alumno=hades_278hotmailcom where idalumno=01
Ejemplo 7
Para Realizar una Consulta se utiliza el Where
--select from alumnos where idalumno=Cli01
Ejemplo 8
Si tambieacuten uno desea se puede poner en orden ascendente y descendente paraacute ello se utilizar el
ASC y Desc
--select from alumnos ORDER BY nom_alumno Asc
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 14
--select from alumnos ORDER BY nom_alumno desc
Ejemplo 9
Para eliminar un Objeto de la base de datos se utiliza la sentencia Drop
Eliminar de la base de Datos Itae la Tabla Alumnos
Drop table alumnos Elimina la Tabla Clientes con la sentencia Drop seguido del tipo de
objeto y finalizando el nombre
Drop database Itae Elimina la Base de Datos Itae con la sentencia Drop seguido del
tipo de objeto y finalizando el nombre
OPERADORES DE CONDICIOacuteN _ FILAS
En la expresioacuten loacutegica que especifica condicioacuten _ filas se puede utilizar ademaacutes de los operadores
relacioacuten o de comparacioacuten los siguientes operadores SQL
LIKE- Para comparacioacuten de cadenas de caracteres admite los comodines y _
OPERADOR LIKE
Cualquier nuacutemero de caracteres
_ Para un caraacutecter individual
[ ] Para un conjunto de caracteres que esteacute dentro del corchete
[ ^ ] Que el caraacutecter individual que no esteacute dentro del corchete
EJEMPLO LIKE lsquoeenrsquo Muestra todos los caracteres que acaben con een
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 15
EJEMPLO LIKE lsquoeenrsquo Muestra todos los caracteres que contengan een en ese orden
EJEMPLO LIKE lsquo_enrsquo Muestra todos los caracteres que contenga tres letras y acaben en en
EJEMPLO LIKE lsquo[CK ]rsquo Muestra todos los caracteres que empiecen por C o K
EJEMPLO LIKE lsquo[S-V]ingrsquo Nombre de 4 letras cuya primera letra estuviera entre S o V y acabe en
ing
EJEMPLO LIKE lsquoM[^c]rsquo Todos los que empiecen por M y segunda letra no sea una c No hay limite
de caracteres
BETWEEN- para seleccioacuten en base a un rango de valores Los valores pueden ser numeacutericos de
cana fechas y horas
In-Para seleccioacuten en base a un conjunto de valores los valores pueden ser numeacutericos de cadena
fechas y horas
Para estos ejemplos ah utilizado la base de datos con el nombre de Poseidoacuten y contiene las siguientes
tablas y campos
Ejemplo 10
Lista de productos cuyo nombre contenga la palabra vino
Use Poseidon
Go
Select from productos where nombreproducto like vino
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 16
Luego procedemos a ejecutar la aplicacioacuten
El siacutembolo representa a cualquier cadena de caracteres inclusive la cadena nula
Ejemplo 12
Lista de productos cuya primera letea empieza con la letra a
Select from productos where nombreproducto like [a]
Ejemplo 13
Lista de productos cuya primera letea empieza con la letra a y la tercera con la letra e
Select from productos where nombreproducto like [a][e]
Ejemplo 14
Lista de productos cuyo nombre empieza con cualquier caraacutecter que va en el rango de la M a la
T
Select from productos where nombreproducto like [m-t]
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 17
Ejemplo 15
Lista de productos cuyo nombre empieza con A ograve con cualquier caraacutecter en el rango que va de U
a la Ademaacutes el segundo caraacutecter no debe ser la letra r
Select from productos where nombreproducto like [^b-t][^r]
El Caraacutecter ^ significa incluir
El Caraacutecter representa cualquier cadena de caracteres inclusive la cadena nula
El Caraacutecter _ Representa cualquier caraacutecter 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 caraacutecter empiece con la letra e
Select from productos where nombreproducto like _e
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 18
Ejemplo 18
Lista de productos cuyo nombre empiece con C M Ograve R
Select from productos where nombreproducto like bdquo[cmr]
Ejemplo 19
Lista de productos cuyo nombre empiece con C M Ograve R El segundo Caraacutecter debe ser A
Select from productos where nombreproducto like bdquo[cmr] a
El comodiacuten [cmr] representa el conjunto de caracteres validos en la posicioacuten en la que
apareceraacute el comodiacuten
Ejemplo 20
Seleccionar todos los productos que termine con la letra Z
Select from productos where nombreproducto like z
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 19
Ejemplo 21
Mostrar todos los productos cuya cuarta letra sea A
Select from productos where nombreproducto like ___a
USO DEL OPERADOR BETWEEN
Permite seleccionar en base a un rango de valores
Ejemplo 22
Lista de productos cuyo precio se encuentra en el rango que va de 15 a 21 nuevos soles
Select from productos where preciounidad between 15 and 21
Ejemplo 23
Lista de productos cuyo nombre se encuentren en el rango de Cerveza y galletas
Select from productos where nombreproducto between cerveza and galletas
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 20
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 (londresPariacutesTokyo)
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 (preciounidadcantidad)019 as IGV
from [detalles de pedidos]
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 21
Ejemplo 27
Mostar los productos cuyo precio sea mayor a 40
Select from productos where Preciounidad gt 40
Ejemplo 28
Mostrar todos los datos de los Clientes ordenados por Ciudad
Select from clientes order by ciudad
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 22
Ejemplo 29
Mostrar todos los productos de la Categoriacutea 2
Select from productos where IdCategoriacutea=2
Ejemplo 30
Mostrar todos los pedidos realizados en la fecha 1996-06-05
Select from Pedidos where FechaPedido =1996-06-05
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 23
Ejemplo 31
Mostrar todos los pedidos mayores a la Fecha 1996-05-05
Select from Pedidos where FechaPedido gt 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 IdCategoriacutea no sea 3
Select from productos where IdCategoriacutealtgt 3
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 24
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 Categoriacutea (123)
Select from productos where IdCategoriacutea not in (1 2 3) order by IdProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 25
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
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 26
USO DE FUNCIONES
Podemos utilizar funciones para construir expresiones y generar columnas computadoras O condiciones
complejas
Funcioacuten de agregacioacuten
Son funciones que se utilizan para calcular valores en las tablas Si queremos usarlas
combinaacutendolas 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
expresioacuten HAVING Equivalente a where
Todos estos ejercicios han sido desarrollado con la base de datos Poseidoacuten
COUNT Cuenta los registros que hay en la consulta
Si pongo un valor dentro de la expresioacuten devolveraacute la cuenta de todos los
registros no nulos
Si pongo un asterisco contaraacute todos los registros aunque tengan valores
nulos
Select count () from Pedidos Valores con Nulos
Select count (FechaEnviacuteo) from Pedidos Valores sin nulos
AVG Realiza la media sobre la expresioacuten dada debe ser un tipo de dato
Int
Select avg(Preciounidad) from productos
MAX Saca el valor maacuteximo de una consulta
Select max (FechaPedido) from Pedidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 27
MIN Devuelve el valor miacutenimo 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 paiacutes Brasil mostrando el nuacutemero de los Factura con el paiacutes de
Destinatario Brasil
Select count () as [Numero de Facturas] PaiacutesDestinatario
Avg (Preciounidad) as [Precio Medio] from
Facturas group by PaiacutesDestinatario having PaiacutesDestinatario =Brasil
Ejemplo 39
Encontrar el precio maacutes alto mas bajo y la diferencia entre ambos de todos los productos con
IdCategoriacutea 2
Select IdCategoriacutea Max (Preciounidad) as [Precio mas alto] min(Preciounidad) as
[Precio mas Bajo] Max(Preciounidad) - min(Preciounidad) as [Diferencia entre Ambos]
from Productos group by IdCategoriacutea having IdCategoriacutea = 2
Ejemplo 40
Visualizar el nuacutemero de productos por Categoriacutea
Select IdCategoriacutea as [Nordm de Categoriacutea] Count (IdCategoriacutea) as [Nordm de Productos]
From Productos group by IdCategoriacutea
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 28
Ejemplo 41
Visualizar los clientes que vivan en las siguientes ciudades Londres Madrid y Barcelona
Select count () as [Nordm de personas] ciudad from clientes group by ciudad Having ciudad in
(londresMadridBarcelona) order by ciudad
Ejemplo 42
Lista de productos cuya venta allaacute sido mayor a 50000
Select IdProducto Monto=Sum (Preciounidad Cantidad) from [Detalles de pedidos] group
by IdProducto having Sum (Preciounidad Cantidad)gt50000 order by IdProducto
Ejemplo 43
Cuantos Clientes no tienen Fax
Select Count () as [Total de Clientes sin Fax] from clientes where fax is null
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 29
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
Funcioacuten Resultado
GETDATE() Retorna la fecha y hora del sistema
DATEADD(partefechanfecha) Retorna una nueva fecha antildeadiendo n
unidades de partefecha a fecha
DATEDIFF(parteFechafecha1fecha2) Retorna la diferencia en parteFecha entre
fecha1 y fecha2
DATENAME(partefechafecha) Retorna la cadena correspondiente a
partefecha en fecha
DATEPART(partefechafecha) Retorna el numero correspondiente a
partefecha y fecha
DAY(fecha) Retorna el numero correspondiente a la
parte del diacutea de fecha
MONTH(fecha) Retorna el numero correspondiente a la
parte del mes de fecha
YEAR(fecha) Retorna el numero correspondiente a la
parte del antildeo de fecha
GETUTCDATE() Retorna la fecha y hora del meridiano de
Greenwich
La siguiente tabla muestra los valores de partefecha que podemos utilizar
partefecha Abreviatura
Year Yy yyyy
Quarter Qq q
Month Mm m
Dayofyear Dy y
Day Dd d
Week Wk ww
weekday Dw
Hour Hh
minute Mi n
second Ss s
milisecond Ms
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 30
Getdate
Select getdate () Funcioacuten que recupera la fecha actual del sistema
Convert Cast
Convierten expliacutecitamente una expresioacuten de un tipo de datos en otro CAST y CONVERT
proporcionan funciones similares
Convert (Tipodedatosdestino Origen Estilo)
o Tipodedatosdestino Siempre ha de ser tipo caraacutecter
o Origen Puede ser tipo fecha numeacuterico o moneda
o Estilo Opcional Es un coacutedigo que indica el formato en el que devuelve la cadena de
caracteres
Sintaxis
Convert (TipoDato Dato)
Cast (Dato as TipoDato)
Ejemplo
declare n intpalabra nvarchar(10)
set n = 1
set palabra =Nuacutemero
print convert(nvarchar(2)n) + + palabra
print cast(n as nvarchar(2)) + + palabra
while (nlt11)
begin
print convert(nvarchar(2)n) + + palabra
print cast(n as nvarchar(2)) + + palabra
set n = n + 1
end
DateName
Devuelve una cadena de caracteres que representa la parte de la fecha especificada de la fecha
especificada
Los caacutelculos 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
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 31
Ejemplo 46
Select IdPedido DateName (week FechaPedido) as Numero de Semana from Pedidos where IdPedido
= 1035251
Ejemplo 47
Select IdPedido datename (weekday FechaPedido) as Diacutea De Semana from Pedidos where IdPedido =
10352 Martes
Horas
Ejemplo 48
Select IdPedido datename (mi FechaPedido) as Minutos from Pedidos where IdPedido = 10352
Ejemplo 49
Select DateName (minute getdate ()) as minutos
Ejemplo 50
Select DateName (Hh FechaPedido) as hora from Pedidos where IdPedido = 10352
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 32
Ejemplo 51
Select DateName (Hour getdate ()) as hora--gt18
Ejemplo 52
Select DateName (Hh getdate ()) as hora--gt18
DatePart
Devuelve la parte de la fecha u hora indicada Sintaxis
Datepart (Valor devolver fecha)
Ejemplo 53
Select IdPedido datepart (mm FechaPedido) as Mes from Pedidos where IdPedido = 10352
Ejemplo 54
Select Datepart (Hh getdate ()) as Hora--gt17
Ejemplo 55
Select Datepart (mi getdate ()) as Minutos--gt54
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 33
Nombres de Fechas
Day (fecha)
Devuelve UN INT equivale a Datepart
Select day (getdate ()) as diacutea--gt6 (diacutea en la que se ejecuta la sentencia)
Select Datepart (dd getdate ()) --gt6 (diacutea en la que se ejecuta la sentencia)
Select Month (getdate ()) --gt1 (Mes en la que se ejecuta la sentencia)
Select Datepart (mm getdate ()) --gt1 (Mes en la que se ejecuta la sentencia)
Select Year (getdate ()) --gt2008 (Antildeo en la que se ejecuta la sentencia)
Ejemplo 56
Select year (FechaPedido) as Antildeo from Pedidos where IdPedido = 10352
Ejemplo 57
Select datediff (yyyy FechaPedido getdate()) as Dia from Pedidos where IdPedido = 10352
DateAdd
DateAdd (Datepart number date)
Antildeade un nuacutemero a la fecha puesta
DatePart es el formato de lo que queremos antildeadir
Number es el nuacutemero que queremos incrementar la fecha expuesta
Select convert (datetime1-1-02)
Select dateadd (dd 71-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 comparacioacuten y el tipo de dato
que nos devolveraacute antildeos diacuteas minutos etc
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 34
Ejemplo 58
Select datediff (yyyy FechaPedido getdate ()) as Dia from Pedidos where IdPedido = 10352
Ejercicios de funciones de Fecha
Ejemplo 59
Lista de pedidos emitidos en febrero de 1996
Select from Pedidos where month (FechaPedido) =2 and year (FechaPedido) =1996
Ejemplo 60
Lista de Pedidos mostrando la diferencia en diacuteas entre la fecha del pedido y la fecha de Envioacute
Select IdPedido FechaPedido FechaEnviacuteo diacuteas =datediff (day FechaPedido FechaEnviacuteo) from
pedidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 35
Ejemplo 61
Genere un listado de pedidos en el que la fecha del pedido se muestre en el formato nombre del
diacutea diacutea de mes antildeo
Select IdPedido FechaPedido Fecha=datename (dw IdPedido)+ + str (datepart (dd
IdPedido) 2)+ de +datename (mm IdPedido)+ de +str (datepart (yy IdPedido) 4) from
pedidos
Ejemplo 62
Mostrar de la tabla pedidos la fecha de pedidos en fecha corta
Select IdPedido convert (varchar (30) FechaPedido 106) as [Fecha Corta] from pedidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 36
FUNCIONES MATEMATICAS
ABS
Es el valor Absoluto
Select ABS (-4) as VALOR ABSOLUTO--gt4
CEILING
Devuelve el entero maacutes pequentildeo mayor o igual que la expresioacuten numeacuterica dada
Select CEILING (54) as CEILING--6
FLOOR
Devuelve el entero maacutes grande menor o igual que la expresioacuten numeacuterica dada
Select FLOOR (5) as FLOOR--gt5
POWER
Devuelve el valor de la expresioacuten indicada elevada a la potencia especificada
Select POWER (3 2) as 3 ELEVADO A 2--gt9
RAND
Devuelve un valor float aleatorio de 0 a 1
Las llamadas repetitivas de RAND() en una uacutenica consulta produciraacuten el mismo valor
Select RAND(6) as ALEATORIO--071368515806921451
Select RAND(6) as ALEATORIO--071368515806921451
Select RAND(4) as ALEATORIO--07136478921266981
Rand sobre los milisegundos actuales
Select RAND(DATEPART(msGETDATE())) as ALEATORIO--gt071443047691954253
Select RAND(999999999)--gt068504257551273573
ROUND
Devuelve una expresioacuten numeacuterica redondeada a la longitud o precisioacuten especificada
Round (Nuacutemero Redondeo del Nuacutemero)
ROUND siempre devuelve un valor Si length es un valor negativo y mayor que el nuacutemero de
diacutegitos anteriores al separador decimal ROUND devuelve 0
Select ROUND (1234567 2) --gt1234600
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 37
Select ROUND (1234567-2) --gt1000000
Select ROUND (1234567 0) --gt1230000
Select ROUND (1234567-3) ---gt0
SIGN
Devuelve el signo positivo (+1) cero (0) o negativo (-1) de la expresioacuten especificada
Dice el valor negativo positivo o neutro (0) del valor especificado
Select SIGN (-3) --gt-1
Select SIGN (3) --gt1
Select SIGN (0) --gt0
SQUARE
Devuelve el cuadrado de la expresioacuten especificada
Select SQUARE (4) as bdquoCuadrado‟--gt160
SQRT
Devuelve la raiacutez cuadrada de la expresioacuten especificada
Select SQRT (4) as [RAIZ CUADRADA] --gt20
FUNCIONES DE CADENA
ASCII
Devuelve el coacutedigo ASCII del caraacutecter maacutes a la izquierda de una expresioacuten de caracteres
Select ASCII(A)--gt65
Select ASCII(a)--gt97
Select ascii(aula)--gt97
CHAR
Una funcioacuten de cadena que convierte un coacutedigo ASCII int en un caraacutecter
select char(65)--gtA
select char(97)--gta
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 38
CHARINDEX
Devuelve la posicioacuten inicial de la expresioacuten especificada en una cadena de caracteres
CHARINDEX (expression1 expression2 [ start_location])
Argumentos
expression1
Es una expresioacuten que contiene la secuencia de caracteres que se desea buscar
Expression1 es una expresioacuten del tipo de cadenas cortas de caracteres
Expression2
Es una expresioacuten normalmente una columna
en la que se busca la cadena especificada
Expression2 es de la categoriacutea del tipo de datos cadena de caracteres
start_location
Es la posicioacuten del caraacutecter de expression2 en el que se empieza la buacutesqueda de expression1
Si no se especifica start_location es un nuacutemero negativo o es cero
la buacutesqueda empieza al principio de la cadena expression2
Si expression1 no se encuentra en expression2 CHARINDEX devuelve 0
Si alguno de los dos es null devuelve null
Select charindex (ciemurcielago) --gt4
Select charindex (ciemurcielago 2) --gt4
Select charindex (ciemurcielago 5) --gt0
Select charindex (ciemurcielago-6) --gt4
LEFT
Devuelve la parte de una cadena de caracteres que comienza en un nuacutemero de caracteres
especificado a partir de la izquierda
Select left (murcielago5) --gtmurci
RIGHT
Devuelve la parte de una cadena de caracteres que
Comienza en el nuacutemero de caracteres especificado
En integer_expression a partir de la derecha
Select right (hola que tal5) --gte tal
LEN
Cuenta el nuacutemero de caracteres que se incluyen en la cadena
Select len (murcieacutelago) --gt10
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 39
LOWER
Convierte a Minuacutesculas la cadena especificada
Select lower (MurcIELaGO) as [minusculas] --gtmurcielago
UPPER
Convierte a Mayuacutesculas la cadena especificada
Select upper (murcielago) as [MAYUSCULAS] --gtMURCIELAGO
RTRIM y LTRIM
Elimina los espacios que existen a la izquierda y a la derecha respectivamente
Select Rtrim ( murcieacutelago ) AS [SIN ESPACIOS] --gtmurcieacutelago
Select Ltrim ( murcieacutelago ) AS [SIN ESPACIOS] --gtmurcieacutelago
Select ltrim(rtrim( hola ))+
REPLACE
Reemplaza por una tercera expresioacuten todas las apariciones
de la segunda expresioacuten de cadena proporcionada en la primera expresioacuten de cadena
Select replace (hola que tal estasaA) --gtholA que tAl estAs
Select replace (buenos dias que tal estasuentildentildentilde) --gtbntildentildentildenos diasqntildentildentilde tal estas
SPACE
Coloca el nuacutemero de espacios que se le indiquen para entre una cadena de caracteres
Select hola+space(5)+que tal--gthola que tal
SUBSTRING
Devuelve parte de una expresioacuten de caracteres binaria de texto o de imagen
Sintaxis
SUBSTRING (Expresioacuten Comienzo Duracioacuten)
Argumentos
Expresioacuten
Es una cadena de caracteres cadena binaria texto imagen
Columna o expresioacuten que incluye una columna
No deben usarse expresiones que incluyan funciones de agregado
Start
Es un entero que especifica el punto en que comienza la subcadena
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 40
Length
Es un entero que especifica la longitud de la subcadena
(El nuacutemero de caracteres o bytes que se devuelven)
Select substring (murcielago 3 5) --gtrciel
Select substring (murcielago 3 len (murcielago)) --gtrciel
REVERSE
Devuelve invertida una expresioacuten de caraacutecter
Select reverse (hola)
REPLICATE
Repite una expresioacuten de caracteres un nuacutemero especificado de veces
Select replicate (murcielago 5)
Replicate replicate replicate replicate replicate
STUFF
Elimina el nuacutemero de caracteres especificados e insertados
Otro conjunto de caracteres en un punto de inicio indicado
Select STUFF (Murcieacutelago 2 3 ijklmn) Mijklmnielago
FUNCIONES DE SISTEMA
- APP_NAME () Devuelve el nombre de la aplicacioacuten actual
Select app_name () as [Nombre de la aplicacion]
- DATALENGTH (Expresioacuten) Devuelve un entero que es numero de bites necesarios para
representar esa expresioacuten int
Select datalength (Ninoni) as [Numero de bites]
- ISDATE (Expresioacuten) Dice si la expresioacuten es una fecha o no Devuelve 1 si la expresioacuten es
una fecha y 0 si no es una fecha
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 41
Select isdate (121001) as [Validacioacuten Fecha]
- ISNUMERIC (Expresion) Dice si la expresioacuten es un numero o no Devuelve 1 si la
expresioacuten es un nuacutemero y 0 si la expresioacuten no es nuacutemero
Select isnumeric (ddd) as [Validacion Numero]
- ISNULL (Expresioacuten ExpresionDevuelta) Si la expresioacuten es nula te devuelve la Expresioacuten
Devuelta y si no devuelve la primera Expresioacuten
Select isnull (nullNo nulo) as [Es Nulo]
- PARSENAME (bdquoNombreObjeto‟ ParteNombre)
ParteNombre es un valor de tipo Int que coge unos determinados valores del
NombreObjeto
1 Objeto
2 Propietario
3 Base de Datos
4 Servidor
Select parsename (saposeidondbopedidos1) as [Parte Expresioacuten]
Select parsename (saposeidondbopedidos 2) as [Parte Expresioacuten]
Select parsename (saposeidondbopedidos3) as [Parte Expresioacuten]
Select parsename ( saposeidondbopedidos 4) as [Parte Expresioacuten]
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 42
- SYSTEM_USER Devuelve el usuario del sistema actual
Depende de la autentificacioacuten con la que te hayas conectado
Select system_user as [Usuario conectado]
- USER_NAME() Devuelve el nombre del usuario actual
Select user_name ()
- COALESCE (expresioacuten1 expresioacuten2 )
Devuelve la primera expresioacuten no NULL
Si todos son NULL devuelve NULL
Select coalesce (PrecioUnidad Cantidad) from [detalles de Pedidos] Si el PrecioUnidad es nulo
devolveraacute la Cantidad y si los dos son nulos devolveraacute un campo Null
PROCEDIMIENTOS PARA AGRUPAR Y RESUMIR DATOS
En el examen de certificacioacuten 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 usaraacute la base de datos indicada Ejemplo Ponemos
en el analizador de consultas lo siguiente
Use Northwind
Select from [Order Details]
[Order Details]
Esta tabla perteneciente a la Northwind se encarga de manejar los pedidos
Order Id Nordm de Pedido
Producto Id Nordm de Producto
Ambos campos son Primary Key con lo que no puede haber una combinacioacuten de ambos campos que sea
igual
OrderId ProductId
1 A
1 B
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 43
1 C
2 A
3 C
Es decir en este caso no podriacutea existir una nueva combinacioacuten ldquo1 Ardquo o ldquo2 Ardquo
Quantity Es la cantidad del producto del pedido
ROLLUP
Se usa para presentar resuacutemenes de datos A de usarse junto con la clausula group by lo que hace es
realizar un resumen de los campos incluidos en el rollup
Ejemplo 63
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
Group by ProductID OrderID
with Rollup
Order by ProductID OrderID
Este ejemplo suma todas las cantidades y mediante
rollup muestra una fila con la suma de todas las
cantidades de cada producto y ademaacutes otra fila con la
suma de todas las cantidades de todos los productos El
resultado de este ejemplo seriacutea el que muestra la
imagen
Ejemplo 64
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
where orderid lt 10250
Group by ProductID OrderID
with Rollup
Order by ProductID OrderID
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 44
CUBE
Al igual que Rollup realiza resuacutemenes de campos agrupados Pero en este caso muestra un resumen con
cada combinacioacuten posible de los campos agrupados
Ejemplo 65
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
where orderid lt 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 combinacioacuten posible entre el
productid y el orderid
GROUPING
Indica si el resultado de un campo es el que hay en la propia tabla o se ha introducido mediante una
claacuteusula de resumen es decir para saber por ejemplo si un ldquoNullrdquo 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 lt 10250 Group by ProductID
OrderID with Cube Order by ProductID OrderID
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 45
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
Ponieacutendole un alias al
grouping saldriacutea el nombre
de columna que le
indiquemos
COMPUTE
Realiza un resumen en una columna aparte con el resultado de la funcioacuten de agregado indicada Su
formato seriacutea Compute funcioacuten(campo) No se puede utilizar en aplicaciones cliente servidor es una
clausula meramente informativa Tampoco se le pueden poner alias a los resuacutemenes
Ejemplo 67
Select Productid Orderid Quantity From [Order Details] order by ProductID Orderid compute
Sum(quantity)
Vemos que muestra la
columna con la suma
total de todas las
cantidades
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 46
Ejercicios de ROLLUP GROUPING y CUBE
Ejemplo 68
Realizar una consulta que resuma la cantidad de artiacuteculos pedidos por cada iacutendice de producto y
nuacutemero de pedido Realizando un caacutelculo acumulativo
select productid as [PRODUCTO] orderid as [Nordm PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] group by productid orderid with rollup order by productid orderid
PRODUCTO Nordm 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
hellip
Ejemplo 69
Modificacioacuten al ejercicio anterior Realizar el mismo resumen pero uacutenicamente para el producto
cuyo id es 50
select productid as [PRODUCTO] orderid as [Nordm PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] where productid = 50 group by productid orderid with rollup order by productid ordered
PRODUCTO Nordm 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
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 47
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 modificacioacuten 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 [Nordm PEDIDO] grouping(orderid) as [GRUPO PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] where productid = 50 group by Productidorderid with cube order by productidorderid
PRODUCTO GRUPO PRODUCTO Nordm PEDIDO GRUPO PEDIDO SUMA TOTAL
----------- -------------- ----------- ------------ -----------
NULL 1 NULL 1 235
NULL 1 10350 0 15
NULL 1 10383 0 15
NULL 1 10429 0 40
NULL 1 10465 0 25
NULL 1 10637 0 25
NULL 1 10729 0 40
NULL 1 10751 0 20
NULL 1 10920 0 24
NULL 1 10948 0 9
NULL 1 11072 0 22
50 0 NULL 1 235
50 0 10350 0 15
50 0 10383 0 15
50 0 10429 0 40
50 0 10465 0 25
50 0 10637 0 25
50 0 10729 0 40
50 0 10751 0 20
50 0 10920 0 24
50 0 10948 0 9
50 0 11072 0 22
(22 filas afectadas)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 48
Obtencioacuten de resuacutemenes 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 maacutes columnas y
luego efectuar alguna operacioacuten de resumen sobre cada grupo asiacute generado
La diferencia con GROUP BY es que permite mostrar informacioacuten mas detallada de cada grupo
Ejemplo 71
Lista de pedidos que muestre por coacutedigo de pedido la cantidad de productos vendidos por cada uno
de ellos
select Idpedidoidproductopreciounidadcantidad[Sub Total]=sum(PreciounidadCantidad) from
[detalles de pedidos] group by Idpedidoidproductopreciounidadcantidad order by IdPedido compute
sum(Cantidad) by IdPedido
EJERCICIOS CON COMPUTE
Ejemplo 72
Generar un resumen de subtotales en una consulta que devuelva el nuacutemero de pedido la cantidad
pedida para todos los orderid 11070
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 49
Select Orderid as [Nordm PEDIDO] Quantity AS [CANTIDAD] From [Order Details] where orderid gt= 11070 order by Orderid compute Sum(quantity) by orderid compute sum(quantity)
Nordm PEDIDO CANTIDAD
----------- --------
11070 40
11070 20
11070 30
11070 20
sum
===========
110
sum
===========
110
(6 filas afectadas)
Ejemplo 73
Generar un resumen con calculo de subtotales similar al anterior pero para los orderid 11075 y
11076
Select Orderid as [Nordm PEDIDO] Quantity as [CANTIDAD] From [Order Details] where orderid = 11075 or orderid = 11076 order by Orderid compute Sum(quantity) by ordered Nordm PEDIDO CANTIDAD ----------- -------- 11075 10 11075 30 11075 2 sum =========== 42 Nordm PEDIDO CANTIDAD ----------- -------- 11076 20 11076 20 11076 10
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 50
sum =========== 50 (8 filas afectadas)
Ejemplo 74
Modificacioacuten al ejercicio anterior Agregar la cantidad total y la cantidad promedio al final del
informe
Select Orderid as [Nordm 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)
Nordm PEDIDO CANTIDAD
----------- --------
11075 10
11075 30
11075 2
sum
===========
42
Nordm PEDIDO CANTIDAD
----------- --------
11076 20
11076 20
11076 10
sum
===========
50
sum
===========
92
avg
===========
15
(10 filas afectadas)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 51
Ejemplo 75
Seleccionar de forma agrupada por tipo todos los tipos la suma de los precios y la suma del
anticipo de la tabla tiacutetulos
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 199900 50000000
business 119500 50000000
business 29900 101250000
business 199900 50000000
sum
=====================
549200
avg
=====================
62812500
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
mod_cook 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
avg
=====================
75000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
popular_comp 229500 70000000
popular_comp 200000 80000000
popular_comp NULL NULL
sum
=====================
429500
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 52
avg
=====================
75000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
psychology 215900 70000000
psychology 109500 22750000
psychology 70000 60000000
psychology 199900 20000000
psychology 79900 40000000
sum
=====================
675200
avg
=====================
42550000
(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 ademaacutes 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 199900 50000000
business 119500 50000000
business 29900 101250000
business 199900 50000000
sum
=====================
549200
sum
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 53
=====================
251250000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
mod_cook 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
popular_comp 229500 70000000
popular_comp 200000 80000000
popular_comp NULL NULL
sum
=====================
429500
sum
=====================
150000000
(30 filas afectadas)
Ejemplo 77
Generar un informe que muestre la suma de los precios de los libros de psicologiacutea 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 109500
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 54
psychology 0736 70000
psychology 0736 199900
psychology 0736 79900
sum
=====================
459300
TIPO CODIGO EDITOR PRECIO
------------ ------------- ---------------------
psychology 0877 215900
sum
=====================
215900
(7 filas afectadas)
Ejemplo 78
Generar un informe que obtenga la suma de los precios de todos los libros de psicologiacutea asiacute como la
suma de los precios de los libros de psicologiacutea 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 109500
psychology 0736 70000
psychology 0736 199900
psychology 0736 79900
sum
=====================
459300
TIPO CODIGO EDITOR PRECIO
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 55
------------ ------------- ---------------------
psychology 0877 215900
sum
=====================
215900
sum
=====================
675200
(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 199900 0000
mod_cook 0877 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO CODIGO EDITOR PRECIO ANTICIPO
------------ ------------- --------------------- ---------------------
trad_cook 0877 119500 40000000
trad_cook 0877 209500 70000000
trad_cook 0877 149900 80000000
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 56
sum
=====================
478900
sum
=====================
190000000
(9 filas afectadas)
Ejemplo 80
Generar un informe que muestre todos los tiacutetulos precio y anticipo de aquellos tiacutetulos que tengan
un precio superior a 20 doacutelares Ofreceraacute tambieacuten la suma total del precio y del anticipo
Select title as [TITULO] price as [PRECIO] advance as [ANTICIPO] From titles where price gt 20 order by title compute sum(price) compute sum(advance)
TITULO PRECIO ANTICIPO
-------------------------------------------------------------------------------- --------------------- -------------
--------
But Is It User Friendly 229500 70000000
Computer Phobic AND Non-Phobic Individuals Behavior Variations 215900
70000000
Onions Leeks and Garlic Cooking Secrets of the Mediterranean 209500
70000000
sum
=====================
654900
sum
=====================
210000000
(5 filas afectadas)
Ejemplo 81
Generar un informe que muestre el precio el tipo y el nuacutemero de editor de la tabla titles de todos
aquellas obras que pertenezcan la categoriacutea de ldquobusinessrdquo Ademaacutes apareceraacute la suma total de
precios y el maacuteximo pub_id de esta seleccioacuten
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 57
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 29900 0736
business 199900 1389
business 199900 1389
business 119500 1389
sum
=====================
549200
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 Mostraraacute la suma de los precios y los anticipos por tipo y luego calcularaacute 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 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
trad_cook 209500 70000000
trad_cook 119500 40000000
trad_cook 149900 80000000
sum
=====================
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 58
478900
sum
=====================
190000000
sum
=====================
708700
sum
=====================
340000000
(11 filas afectadas)
Eliminacioacuten 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 iquestA que precio se ah vendido los productos
Select IdProducto Preciounidad from [Detalles de pedidos] order by IdProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 59
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 mayoriacutea de las consultas que se hacen en una base de datos requiere que se lean datos procedentes
de dos oacute maacutes tablas
INNER JOIN- son las filas que satisfacen la condicioacuten de la combinacioacuten
En la siguiente sentencia SQL enlaza 2 tablas la tabla clientes y la tabla pedidos en esta ejemplo me
muestra los campos nombre compantildeiacutea y el campo idpedido
La uacutenica condicioacuten es que las 2 tablas tengan un campo en comuacuten
Ejemplo 84
select clientesNombreCompantildeiacuteapedidosidpedido from clientes inner join pedidos on
clientesidcliente=pedidosidcliente
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 60
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 pedidosIdPedido pedidosIdCliente 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 pedidosIdPedido pedidosIdCliente order
by pedidos IdPedido
CROSS JOIN
Un Cross Join es la consulta correlacionada que combine cada una de las filas de una de las tablas con
todas las filas de la otra tabla
No es necesario que exista una columna en comuacuten para ejecutar el Cross Join
Ejemplo 86
La siguiente consulta combina cada una de las filas de la tabla categoriacuteas con cada una de las filas de la
tabla productos
select productosNombreProductocategoriasNombrecategoria from productos cross join categorias
order by productosNombreProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 61
Ejercicios de consultas Muacuteltiples
Ejemplo 87
Mostrar el pedidos completo con el id=10248
Select pedidosIdPedido pedidosIdCliente
Total=sum ([detalles de pedidos]Preciounidad[detalles de pedidos]Cantidad)
From [detalles de pedidos] inner join pedidos on
[Detalles de pedidos]IdPedido=pedidosIdPedido where pedidosIdPedido=10248
Group by pedidosIdPedido pedidosIdCliente
Ejemplo 88
1 Mostrar la cantidad de productos por categoriacutea
Select CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
[Total de Producto]=sum (UnidadesEnExistencia) from Categoriacuteas inner join
Productos on CategoriacuteasIdCategoriacutea=productosIdCategoriacutea
Group by CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 62
Ejemplo 89
Calcular cuantas ventas tiene cada uno de los vendedores
Select empleadosIdEmpleado empleadosNombre empleadosApellidos
[Total de ventas]=count (pedidosIdPedido) from empleados
Inner join Pedidos on empleadosIdEmpleado=pedidosIdEmpleado
Group by empleadosIdEmpleado empleadosNombre empleadosApellidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 63
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 despueacutes saca la de Plantilla
Recomendaciones a la hora de usar las combinaciones
Combinar tablas en funcioacuten de claves principales y externas
Limite el nuacutemero de tablas de las combinaciones
Select Apellido
Oficio as
OFICIOFUNCION
salario from emp
UNION
Select Apellido
Funcion Salario from
Plantilla
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 64
SUBCONSULTAS
Es una SELECT anidada en una instruccioacuten INSERT DELETE SELECT o UPDATE
Como una tabla derivada
Select eemp_no as Numero
eApellido
from (select emp_no apellido from emp) as e
Como una expresioacuten
Select emp_no as [Numero]
Apellido
Salario
(select avg(Salario) from emp)
as Diferencia
from emp
where oficio = Empleado
Para correlacionar datos
- Expresioacuten dinaacutemica que cambia en cada fila de una consulta externa
- Es una combinacioacuten entre la subconsulta y la fila de la consulta externa
- Dividen consultas complejas con dos o maacutes consultas simples relacionadas
Subconsulta correlacionada
Select apellido oficiodept_no
from emp as e
where 20 lt
(select dept_no from dept as d
where edept_no = ddept_no
and ddnombre = Ventas)
SUBCONSULTAS
1 Mostrar el numero de empleado el apellido y la fecha de alta del empleado mas antiguo de la
empresa
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 65
SELECT emp_noapellido
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_noapellido
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 Jimeacutenez
select apellido oficio from emp where
oficio = (select oficio from emp where apellido = JIMENEZ)
4 Queremos saber el apellido oficio salario y nuacutemero 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 gt (select max (salario) from
emp where dept_no = 30)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 66
5 Mostrar el apellido la funcioacuten sala o departamento de todos los empleados que trabajen en la
empresa
select eApellido eOficio as [Cargo en Empresa] ddnombre as [Oficina]
from emp as e
inner join dept as d
on edept_no = ddept_no
union
select pApellido pfuncion snombre
from plantilla as p
inner join sala as s
on phospital_cod = shospital_cod
and psala_cod = ssala_cod
union
select dApellido despecialidad hnombre
from doctor as d
inner join hospital as h
on dhospital_cod = hhospital_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 = lsquoventasrsquo))
order by 2
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 67
8 Mostrar los empleados que tienen mejor salario que la media de los directores no incluyendo al
presidente
Select from emp where salario gt
(select avg (salario) from emp where oficio = DIRECTOR)
and oficio ltgt PRESIDENTE
9 Mostrar el apellido funcioacuten salario y coacutedigo 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 = lsquoENFERMEROrsquo or
funcion = lsquoENFERMERArsquo) and hospital_cod = (select hospital_cod from hospital where nombre =
lsquoSAN CARLOSrsquo)
Select apellido funcion salario hospital_cod from plantilla where
funcion in (ENFERMEROENFERMERA)
and hospital_cod = (select hospital_cod from hospital
where nombre = SAN CARLOS)
10 Visualizar los datos de los hospitales que tienen personal (Doctores) de cardiologiacutea
Select from hospital where hospital_cod in (select hospital_cod from doctor where
especialidad = lsquoCardiologiacutearsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 68
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 = lsquoPROVINCIALrsquo or
nombre= lsquoGENERALrsquo)
12 Mostrar el apellido de los enfermos que nacieron antes que el Sentildeor Miller
Select apellido from enfermo where Fecha_nac lt (select fecha_nac from enfermo where
apellido = lsquoMILLER Brsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 69
Simulacion de una clausula JOIN
Vamos a mostrar los oficios que estaacuten en maacutes de un departamento
Select distinct e1oficio from emp as e1
where e1oficio in(Select e2oficio from emp as e2
where e1dept_no ltgt e2dept_no)
Se debe utilizar antes una combinacioacuten que una subconsulta la combinacioacuten seriacutea asi dando los
mismos resultados
Select distinct e1Oficio from emp as e1
inner join emp as e2
on e1oficio = e2oficio
where e1dept_no ltgt e2dept_no
Estos son los dos oficios que estaacuten en
maacutes de un departamento
Subconsulta para simular una clausula HAVING
select e1apellidoe1oficio e1salario
from emp as e1
where e1salario gt
(select avg(e2salario) from emp as e2
where e1oficio = e2oficio)
Esta es la consulta utilizando el HAVING que es la que deberiacuteamos utilizar antes que una
subconsulta de simulacioacuten HAVING
SELECT e1apellidoe1oficio e1salario
FROM emp AS e1
INNER JOIN emp AS e2
ON e1oficio = e2oficio
GROUP BY e1oficio e1salarioe1apellido
HAVING e1salario gt AVG (e2salario)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 70
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 12
--(
--Idalumno VarChar(8)not null
--nom_alumno Varchar (50) Not Null
--ape_alumno Varchar (50) Not Null
--dir_alumno Varchar (50) Not Null
--tel_alumno VarChar(8)
--Email_alumno Varchar (50)
--)
Ejemplo 3
Para que se muestre la Tabla completa y con todos los registros se utiliza en Select para
seleccionar los campos from para seleccionar la tabla que se desea visualizar
--select from alumnos
Ejemplo 4
Ingreso de Datos a la Tabla alumnos se utiliza la sentencia insert into
--Insert into alumnos (idalumnonom_alumnoape_alumnodir_alumnotel_alumnoemail_alumno)Values
(Cli01jamesjamesVentanilla252511jazoon_28hotmailcom)
--Insert into alumnos (idalumnonom_alumnoape_alumnodir_alumnotel_alumnoemail_alumno)Values
(Cli01Juan CarlosOchoa ValverdeCoop Primavera Mz R1 Lote 16557-
2147jaz_28hotmailcom)
--Insert into alumnos (idalumnonom_alumnoape_alumnodir_alumnotel_alumnoemail_alumno) Values
(Cli02ArturoCapuntildeay LaquiJr Viru 406 Nordm8481-6507eternal_alcarisHotmailcom)
--Insert into alumnos (idalumnonom_alumnoape_alumnodir_alumnotel_alumnoemail_alumno) Values
(Cli03Luis AlexanderAguilar WongJr Hon 920-1090luis_hexenHotmailcom)
--Insert into alumnos (idalumnonom_alumnoape_alumnodir_alumnotel_alumnoemail_alumno) Values
(Cli04Fredy Richard Anaya JesusResidencial 539-0886fredyanayaHotmailcom)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 13
Ejemplo 5
Si deseaacuteramos Eliminar seria con la sentencia Delete
--delete from alumnos where nom_alumno=juan Carlos
Ejemplo 6
Para Actualizar se Utiliza la sentencia Update y Set
--Update alumnos set nom_alumno=diego ape_alumno=cueva dir_alumno=los olivos
tel_alumno=5402972 email_alumno=hades_278hotmailcom where idalumno=01
Ejemplo 7
Para Realizar una Consulta se utiliza el Where
--select from alumnos where idalumno=Cli01
Ejemplo 8
Si tambieacuten uno desea se puede poner en orden ascendente y descendente paraacute ello se utilizar el
ASC y Desc
--select from alumnos ORDER BY nom_alumno Asc
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 14
--select from alumnos ORDER BY nom_alumno desc
Ejemplo 9
Para eliminar un Objeto de la base de datos se utiliza la sentencia Drop
Eliminar de la base de Datos Itae la Tabla Alumnos
Drop table alumnos Elimina la Tabla Clientes con la sentencia Drop seguido del tipo de
objeto y finalizando el nombre
Drop database Itae Elimina la Base de Datos Itae con la sentencia Drop seguido del
tipo de objeto y finalizando el nombre
OPERADORES DE CONDICIOacuteN _ FILAS
En la expresioacuten loacutegica que especifica condicioacuten _ filas se puede utilizar ademaacutes de los operadores
relacioacuten o de comparacioacuten los siguientes operadores SQL
LIKE- Para comparacioacuten de cadenas de caracteres admite los comodines y _
OPERADOR LIKE
Cualquier nuacutemero de caracteres
_ Para un caraacutecter individual
[ ] Para un conjunto de caracteres que esteacute dentro del corchete
[ ^ ] Que el caraacutecter individual que no esteacute dentro del corchete
EJEMPLO LIKE lsquoeenrsquo Muestra todos los caracteres que acaben con een
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 15
EJEMPLO LIKE lsquoeenrsquo Muestra todos los caracteres que contengan een en ese orden
EJEMPLO LIKE lsquo_enrsquo Muestra todos los caracteres que contenga tres letras y acaben en en
EJEMPLO LIKE lsquo[CK ]rsquo Muestra todos los caracteres que empiecen por C o K
EJEMPLO LIKE lsquo[S-V]ingrsquo Nombre de 4 letras cuya primera letra estuviera entre S o V y acabe en
ing
EJEMPLO LIKE lsquoM[^c]rsquo Todos los que empiecen por M y segunda letra no sea una c No hay limite
de caracteres
BETWEEN- para seleccioacuten en base a un rango de valores Los valores pueden ser numeacutericos de
cana fechas y horas
In-Para seleccioacuten en base a un conjunto de valores los valores pueden ser numeacutericos de cadena
fechas y horas
Para estos ejemplos ah utilizado la base de datos con el nombre de Poseidoacuten y contiene las siguientes
tablas y campos
Ejemplo 10
Lista de productos cuyo nombre contenga la palabra vino
Use Poseidon
Go
Select from productos where nombreproducto like vino
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 16
Luego procedemos a ejecutar la aplicacioacuten
El siacutembolo representa a cualquier cadena de caracteres inclusive la cadena nula
Ejemplo 12
Lista de productos cuya primera letea empieza con la letra a
Select from productos where nombreproducto like [a]
Ejemplo 13
Lista de productos cuya primera letea empieza con la letra a y la tercera con la letra e
Select from productos where nombreproducto like [a][e]
Ejemplo 14
Lista de productos cuyo nombre empieza con cualquier caraacutecter que va en el rango de la M a la
T
Select from productos where nombreproducto like [m-t]
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 17
Ejemplo 15
Lista de productos cuyo nombre empieza con A ograve con cualquier caraacutecter en el rango que va de U
a la Ademaacutes el segundo caraacutecter no debe ser la letra r
Select from productos where nombreproducto like [^b-t][^r]
El Caraacutecter ^ significa incluir
El Caraacutecter representa cualquier cadena de caracteres inclusive la cadena nula
El Caraacutecter _ Representa cualquier caraacutecter 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 caraacutecter empiece con la letra e
Select from productos where nombreproducto like _e
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 18
Ejemplo 18
Lista de productos cuyo nombre empiece con C M Ograve R
Select from productos where nombreproducto like bdquo[cmr]
Ejemplo 19
Lista de productos cuyo nombre empiece con C M Ograve R El segundo Caraacutecter debe ser A
Select from productos where nombreproducto like bdquo[cmr] a
El comodiacuten [cmr] representa el conjunto de caracteres validos en la posicioacuten en la que
apareceraacute el comodiacuten
Ejemplo 20
Seleccionar todos los productos que termine con la letra Z
Select from productos where nombreproducto like z
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 19
Ejemplo 21
Mostrar todos los productos cuya cuarta letra sea A
Select from productos where nombreproducto like ___a
USO DEL OPERADOR BETWEEN
Permite seleccionar en base a un rango de valores
Ejemplo 22
Lista de productos cuyo precio se encuentra en el rango que va de 15 a 21 nuevos soles
Select from productos where preciounidad between 15 and 21
Ejemplo 23
Lista de productos cuyo nombre se encuentren en el rango de Cerveza y galletas
Select from productos where nombreproducto between cerveza and galletas
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 20
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 (londresPariacutesTokyo)
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 (preciounidadcantidad)019 as IGV
from [detalles de pedidos]
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 21
Ejemplo 27
Mostar los productos cuyo precio sea mayor a 40
Select from productos where Preciounidad gt 40
Ejemplo 28
Mostrar todos los datos de los Clientes ordenados por Ciudad
Select from clientes order by ciudad
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 22
Ejemplo 29
Mostrar todos los productos de la Categoriacutea 2
Select from productos where IdCategoriacutea=2
Ejemplo 30
Mostrar todos los pedidos realizados en la fecha 1996-06-05
Select from Pedidos where FechaPedido =1996-06-05
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 23
Ejemplo 31
Mostrar todos los pedidos mayores a la Fecha 1996-05-05
Select from Pedidos where FechaPedido gt 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 IdCategoriacutea no sea 3
Select from productos where IdCategoriacutealtgt 3
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 24
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 Categoriacutea (123)
Select from productos where IdCategoriacutea not in (1 2 3) order by IdProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 25
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
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 26
USO DE FUNCIONES
Podemos utilizar funciones para construir expresiones y generar columnas computadoras O condiciones
complejas
Funcioacuten de agregacioacuten
Son funciones que se utilizan para calcular valores en las tablas Si queremos usarlas
combinaacutendolas 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
expresioacuten HAVING Equivalente a where
Todos estos ejercicios han sido desarrollado con la base de datos Poseidoacuten
COUNT Cuenta los registros que hay en la consulta
Si pongo un valor dentro de la expresioacuten devolveraacute la cuenta de todos los
registros no nulos
Si pongo un asterisco contaraacute todos los registros aunque tengan valores
nulos
Select count () from Pedidos Valores con Nulos
Select count (FechaEnviacuteo) from Pedidos Valores sin nulos
AVG Realiza la media sobre la expresioacuten dada debe ser un tipo de dato
Int
Select avg(Preciounidad) from productos
MAX Saca el valor maacuteximo de una consulta
Select max (FechaPedido) from Pedidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 27
MIN Devuelve el valor miacutenimo 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 paiacutes Brasil mostrando el nuacutemero de los Factura con el paiacutes de
Destinatario Brasil
Select count () as [Numero de Facturas] PaiacutesDestinatario
Avg (Preciounidad) as [Precio Medio] from
Facturas group by PaiacutesDestinatario having PaiacutesDestinatario =Brasil
Ejemplo 39
Encontrar el precio maacutes alto mas bajo y la diferencia entre ambos de todos los productos con
IdCategoriacutea 2
Select IdCategoriacutea Max (Preciounidad) as [Precio mas alto] min(Preciounidad) as
[Precio mas Bajo] Max(Preciounidad) - min(Preciounidad) as [Diferencia entre Ambos]
from Productos group by IdCategoriacutea having IdCategoriacutea = 2
Ejemplo 40
Visualizar el nuacutemero de productos por Categoriacutea
Select IdCategoriacutea as [Nordm de Categoriacutea] Count (IdCategoriacutea) as [Nordm de Productos]
From Productos group by IdCategoriacutea
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 28
Ejemplo 41
Visualizar los clientes que vivan en las siguientes ciudades Londres Madrid y Barcelona
Select count () as [Nordm de personas] ciudad from clientes group by ciudad Having ciudad in
(londresMadridBarcelona) order by ciudad
Ejemplo 42
Lista de productos cuya venta allaacute sido mayor a 50000
Select IdProducto Monto=Sum (Preciounidad Cantidad) from [Detalles de pedidos] group
by IdProducto having Sum (Preciounidad Cantidad)gt50000 order by IdProducto
Ejemplo 43
Cuantos Clientes no tienen Fax
Select Count () as [Total de Clientes sin Fax] from clientes where fax is null
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 29
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
Funcioacuten Resultado
GETDATE() Retorna la fecha y hora del sistema
DATEADD(partefechanfecha) Retorna una nueva fecha antildeadiendo n
unidades de partefecha a fecha
DATEDIFF(parteFechafecha1fecha2) Retorna la diferencia en parteFecha entre
fecha1 y fecha2
DATENAME(partefechafecha) Retorna la cadena correspondiente a
partefecha en fecha
DATEPART(partefechafecha) Retorna el numero correspondiente a
partefecha y fecha
DAY(fecha) Retorna el numero correspondiente a la
parte del diacutea de fecha
MONTH(fecha) Retorna el numero correspondiente a la
parte del mes de fecha
YEAR(fecha) Retorna el numero correspondiente a la
parte del antildeo de fecha
GETUTCDATE() Retorna la fecha y hora del meridiano de
Greenwich
La siguiente tabla muestra los valores de partefecha que podemos utilizar
partefecha Abreviatura
Year Yy yyyy
Quarter Qq q
Month Mm m
Dayofyear Dy y
Day Dd d
Week Wk ww
weekday Dw
Hour Hh
minute Mi n
second Ss s
milisecond Ms
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 30
Getdate
Select getdate () Funcioacuten que recupera la fecha actual del sistema
Convert Cast
Convierten expliacutecitamente una expresioacuten de un tipo de datos en otro CAST y CONVERT
proporcionan funciones similares
Convert (Tipodedatosdestino Origen Estilo)
o Tipodedatosdestino Siempre ha de ser tipo caraacutecter
o Origen Puede ser tipo fecha numeacuterico o moneda
o Estilo Opcional Es un coacutedigo que indica el formato en el que devuelve la cadena de
caracteres
Sintaxis
Convert (TipoDato Dato)
Cast (Dato as TipoDato)
Ejemplo
declare n intpalabra nvarchar(10)
set n = 1
set palabra =Nuacutemero
print convert(nvarchar(2)n) + + palabra
print cast(n as nvarchar(2)) + + palabra
while (nlt11)
begin
print convert(nvarchar(2)n) + + palabra
print cast(n as nvarchar(2)) + + palabra
set n = n + 1
end
DateName
Devuelve una cadena de caracteres que representa la parte de la fecha especificada de la fecha
especificada
Los caacutelculos 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
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 31
Ejemplo 46
Select IdPedido DateName (week FechaPedido) as Numero de Semana from Pedidos where IdPedido
= 1035251
Ejemplo 47
Select IdPedido datename (weekday FechaPedido) as Diacutea De Semana from Pedidos where IdPedido =
10352 Martes
Horas
Ejemplo 48
Select IdPedido datename (mi FechaPedido) as Minutos from Pedidos where IdPedido = 10352
Ejemplo 49
Select DateName (minute getdate ()) as minutos
Ejemplo 50
Select DateName (Hh FechaPedido) as hora from Pedidos where IdPedido = 10352
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 32
Ejemplo 51
Select DateName (Hour getdate ()) as hora--gt18
Ejemplo 52
Select DateName (Hh getdate ()) as hora--gt18
DatePart
Devuelve la parte de la fecha u hora indicada Sintaxis
Datepart (Valor devolver fecha)
Ejemplo 53
Select IdPedido datepart (mm FechaPedido) as Mes from Pedidos where IdPedido = 10352
Ejemplo 54
Select Datepart (Hh getdate ()) as Hora--gt17
Ejemplo 55
Select Datepart (mi getdate ()) as Minutos--gt54
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 33
Nombres de Fechas
Day (fecha)
Devuelve UN INT equivale a Datepart
Select day (getdate ()) as diacutea--gt6 (diacutea en la que se ejecuta la sentencia)
Select Datepart (dd getdate ()) --gt6 (diacutea en la que se ejecuta la sentencia)
Select Month (getdate ()) --gt1 (Mes en la que se ejecuta la sentencia)
Select Datepart (mm getdate ()) --gt1 (Mes en la que se ejecuta la sentencia)
Select Year (getdate ()) --gt2008 (Antildeo en la que se ejecuta la sentencia)
Ejemplo 56
Select year (FechaPedido) as Antildeo from Pedidos where IdPedido = 10352
Ejemplo 57
Select datediff (yyyy FechaPedido getdate()) as Dia from Pedidos where IdPedido = 10352
DateAdd
DateAdd (Datepart number date)
Antildeade un nuacutemero a la fecha puesta
DatePart es el formato de lo que queremos antildeadir
Number es el nuacutemero que queremos incrementar la fecha expuesta
Select convert (datetime1-1-02)
Select dateadd (dd 71-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 comparacioacuten y el tipo de dato
que nos devolveraacute antildeos diacuteas minutos etc
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 34
Ejemplo 58
Select datediff (yyyy FechaPedido getdate ()) as Dia from Pedidos where IdPedido = 10352
Ejercicios de funciones de Fecha
Ejemplo 59
Lista de pedidos emitidos en febrero de 1996
Select from Pedidos where month (FechaPedido) =2 and year (FechaPedido) =1996
Ejemplo 60
Lista de Pedidos mostrando la diferencia en diacuteas entre la fecha del pedido y la fecha de Envioacute
Select IdPedido FechaPedido FechaEnviacuteo diacuteas =datediff (day FechaPedido FechaEnviacuteo) from
pedidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 35
Ejemplo 61
Genere un listado de pedidos en el que la fecha del pedido se muestre en el formato nombre del
diacutea diacutea de mes antildeo
Select IdPedido FechaPedido Fecha=datename (dw IdPedido)+ + str (datepart (dd
IdPedido) 2)+ de +datename (mm IdPedido)+ de +str (datepart (yy IdPedido) 4) from
pedidos
Ejemplo 62
Mostrar de la tabla pedidos la fecha de pedidos en fecha corta
Select IdPedido convert (varchar (30) FechaPedido 106) as [Fecha Corta] from pedidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 36
FUNCIONES MATEMATICAS
ABS
Es el valor Absoluto
Select ABS (-4) as VALOR ABSOLUTO--gt4
CEILING
Devuelve el entero maacutes pequentildeo mayor o igual que la expresioacuten numeacuterica dada
Select CEILING (54) as CEILING--6
FLOOR
Devuelve el entero maacutes grande menor o igual que la expresioacuten numeacuterica dada
Select FLOOR (5) as FLOOR--gt5
POWER
Devuelve el valor de la expresioacuten indicada elevada a la potencia especificada
Select POWER (3 2) as 3 ELEVADO A 2--gt9
RAND
Devuelve un valor float aleatorio de 0 a 1
Las llamadas repetitivas de RAND() en una uacutenica consulta produciraacuten el mismo valor
Select RAND(6) as ALEATORIO--071368515806921451
Select RAND(6) as ALEATORIO--071368515806921451
Select RAND(4) as ALEATORIO--07136478921266981
Rand sobre los milisegundos actuales
Select RAND(DATEPART(msGETDATE())) as ALEATORIO--gt071443047691954253
Select RAND(999999999)--gt068504257551273573
ROUND
Devuelve una expresioacuten numeacuterica redondeada a la longitud o precisioacuten especificada
Round (Nuacutemero Redondeo del Nuacutemero)
ROUND siempre devuelve un valor Si length es un valor negativo y mayor que el nuacutemero de
diacutegitos anteriores al separador decimal ROUND devuelve 0
Select ROUND (1234567 2) --gt1234600
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 37
Select ROUND (1234567-2) --gt1000000
Select ROUND (1234567 0) --gt1230000
Select ROUND (1234567-3) ---gt0
SIGN
Devuelve el signo positivo (+1) cero (0) o negativo (-1) de la expresioacuten especificada
Dice el valor negativo positivo o neutro (0) del valor especificado
Select SIGN (-3) --gt-1
Select SIGN (3) --gt1
Select SIGN (0) --gt0
SQUARE
Devuelve el cuadrado de la expresioacuten especificada
Select SQUARE (4) as bdquoCuadrado‟--gt160
SQRT
Devuelve la raiacutez cuadrada de la expresioacuten especificada
Select SQRT (4) as [RAIZ CUADRADA] --gt20
FUNCIONES DE CADENA
ASCII
Devuelve el coacutedigo ASCII del caraacutecter maacutes a la izquierda de una expresioacuten de caracteres
Select ASCII(A)--gt65
Select ASCII(a)--gt97
Select ascii(aula)--gt97
CHAR
Una funcioacuten de cadena que convierte un coacutedigo ASCII int en un caraacutecter
select char(65)--gtA
select char(97)--gta
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 38
CHARINDEX
Devuelve la posicioacuten inicial de la expresioacuten especificada en una cadena de caracteres
CHARINDEX (expression1 expression2 [ start_location])
Argumentos
expression1
Es una expresioacuten que contiene la secuencia de caracteres que se desea buscar
Expression1 es una expresioacuten del tipo de cadenas cortas de caracteres
Expression2
Es una expresioacuten normalmente una columna
en la que se busca la cadena especificada
Expression2 es de la categoriacutea del tipo de datos cadena de caracteres
start_location
Es la posicioacuten del caraacutecter de expression2 en el que se empieza la buacutesqueda de expression1
Si no se especifica start_location es un nuacutemero negativo o es cero
la buacutesqueda empieza al principio de la cadena expression2
Si expression1 no se encuentra en expression2 CHARINDEX devuelve 0
Si alguno de los dos es null devuelve null
Select charindex (ciemurcielago) --gt4
Select charindex (ciemurcielago 2) --gt4
Select charindex (ciemurcielago 5) --gt0
Select charindex (ciemurcielago-6) --gt4
LEFT
Devuelve la parte de una cadena de caracteres que comienza en un nuacutemero de caracteres
especificado a partir de la izquierda
Select left (murcielago5) --gtmurci
RIGHT
Devuelve la parte de una cadena de caracteres que
Comienza en el nuacutemero de caracteres especificado
En integer_expression a partir de la derecha
Select right (hola que tal5) --gte tal
LEN
Cuenta el nuacutemero de caracteres que se incluyen en la cadena
Select len (murcieacutelago) --gt10
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 39
LOWER
Convierte a Minuacutesculas la cadena especificada
Select lower (MurcIELaGO) as [minusculas] --gtmurcielago
UPPER
Convierte a Mayuacutesculas la cadena especificada
Select upper (murcielago) as [MAYUSCULAS] --gtMURCIELAGO
RTRIM y LTRIM
Elimina los espacios que existen a la izquierda y a la derecha respectivamente
Select Rtrim ( murcieacutelago ) AS [SIN ESPACIOS] --gtmurcieacutelago
Select Ltrim ( murcieacutelago ) AS [SIN ESPACIOS] --gtmurcieacutelago
Select ltrim(rtrim( hola ))+
REPLACE
Reemplaza por una tercera expresioacuten todas las apariciones
de la segunda expresioacuten de cadena proporcionada en la primera expresioacuten de cadena
Select replace (hola que tal estasaA) --gtholA que tAl estAs
Select replace (buenos dias que tal estasuentildentildentilde) --gtbntildentildentildenos diasqntildentildentilde tal estas
SPACE
Coloca el nuacutemero de espacios que se le indiquen para entre una cadena de caracteres
Select hola+space(5)+que tal--gthola que tal
SUBSTRING
Devuelve parte de una expresioacuten de caracteres binaria de texto o de imagen
Sintaxis
SUBSTRING (Expresioacuten Comienzo Duracioacuten)
Argumentos
Expresioacuten
Es una cadena de caracteres cadena binaria texto imagen
Columna o expresioacuten que incluye una columna
No deben usarse expresiones que incluyan funciones de agregado
Start
Es un entero que especifica el punto en que comienza la subcadena
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 40
Length
Es un entero que especifica la longitud de la subcadena
(El nuacutemero de caracteres o bytes que se devuelven)
Select substring (murcielago 3 5) --gtrciel
Select substring (murcielago 3 len (murcielago)) --gtrciel
REVERSE
Devuelve invertida una expresioacuten de caraacutecter
Select reverse (hola)
REPLICATE
Repite una expresioacuten de caracteres un nuacutemero especificado de veces
Select replicate (murcielago 5)
Replicate replicate replicate replicate replicate
STUFF
Elimina el nuacutemero de caracteres especificados e insertados
Otro conjunto de caracteres en un punto de inicio indicado
Select STUFF (Murcieacutelago 2 3 ijklmn) Mijklmnielago
FUNCIONES DE SISTEMA
- APP_NAME () Devuelve el nombre de la aplicacioacuten actual
Select app_name () as [Nombre de la aplicacion]
- DATALENGTH (Expresioacuten) Devuelve un entero que es numero de bites necesarios para
representar esa expresioacuten int
Select datalength (Ninoni) as [Numero de bites]
- ISDATE (Expresioacuten) Dice si la expresioacuten es una fecha o no Devuelve 1 si la expresioacuten es
una fecha y 0 si no es una fecha
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 41
Select isdate (121001) as [Validacioacuten Fecha]
- ISNUMERIC (Expresion) Dice si la expresioacuten es un numero o no Devuelve 1 si la
expresioacuten es un nuacutemero y 0 si la expresioacuten no es nuacutemero
Select isnumeric (ddd) as [Validacion Numero]
- ISNULL (Expresioacuten ExpresionDevuelta) Si la expresioacuten es nula te devuelve la Expresioacuten
Devuelta y si no devuelve la primera Expresioacuten
Select isnull (nullNo nulo) as [Es Nulo]
- PARSENAME (bdquoNombreObjeto‟ ParteNombre)
ParteNombre es un valor de tipo Int que coge unos determinados valores del
NombreObjeto
1 Objeto
2 Propietario
3 Base de Datos
4 Servidor
Select parsename (saposeidondbopedidos1) as [Parte Expresioacuten]
Select parsename (saposeidondbopedidos 2) as [Parte Expresioacuten]
Select parsename (saposeidondbopedidos3) as [Parte Expresioacuten]
Select parsename ( saposeidondbopedidos 4) as [Parte Expresioacuten]
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 42
- SYSTEM_USER Devuelve el usuario del sistema actual
Depende de la autentificacioacuten con la que te hayas conectado
Select system_user as [Usuario conectado]
- USER_NAME() Devuelve el nombre del usuario actual
Select user_name ()
- COALESCE (expresioacuten1 expresioacuten2 )
Devuelve la primera expresioacuten no NULL
Si todos son NULL devuelve NULL
Select coalesce (PrecioUnidad Cantidad) from [detalles de Pedidos] Si el PrecioUnidad es nulo
devolveraacute la Cantidad y si los dos son nulos devolveraacute un campo Null
PROCEDIMIENTOS PARA AGRUPAR Y RESUMIR DATOS
En el examen de certificacioacuten 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 usaraacute la base de datos indicada Ejemplo Ponemos
en el analizador de consultas lo siguiente
Use Northwind
Select from [Order Details]
[Order Details]
Esta tabla perteneciente a la Northwind se encarga de manejar los pedidos
Order Id Nordm de Pedido
Producto Id Nordm de Producto
Ambos campos son Primary Key con lo que no puede haber una combinacioacuten de ambos campos que sea
igual
OrderId ProductId
1 A
1 B
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 43
1 C
2 A
3 C
Es decir en este caso no podriacutea existir una nueva combinacioacuten ldquo1 Ardquo o ldquo2 Ardquo
Quantity Es la cantidad del producto del pedido
ROLLUP
Se usa para presentar resuacutemenes de datos A de usarse junto con la clausula group by lo que hace es
realizar un resumen de los campos incluidos en el rollup
Ejemplo 63
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
Group by ProductID OrderID
with Rollup
Order by ProductID OrderID
Este ejemplo suma todas las cantidades y mediante
rollup muestra una fila con la suma de todas las
cantidades de cada producto y ademaacutes otra fila con la
suma de todas las cantidades de todos los productos El
resultado de este ejemplo seriacutea el que muestra la
imagen
Ejemplo 64
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
where orderid lt 10250
Group by ProductID OrderID
with Rollup
Order by ProductID OrderID
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 44
CUBE
Al igual que Rollup realiza resuacutemenes de campos agrupados Pero en este caso muestra un resumen con
cada combinacioacuten posible de los campos agrupados
Ejemplo 65
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
where orderid lt 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 combinacioacuten posible entre el
productid y el orderid
GROUPING
Indica si el resultado de un campo es el que hay en la propia tabla o se ha introducido mediante una
claacuteusula de resumen es decir para saber por ejemplo si un ldquoNullrdquo 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 lt 10250 Group by ProductID
OrderID with Cube Order by ProductID OrderID
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 45
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
Ponieacutendole un alias al
grouping saldriacutea el nombre
de columna que le
indiquemos
COMPUTE
Realiza un resumen en una columna aparte con el resultado de la funcioacuten de agregado indicada Su
formato seriacutea Compute funcioacuten(campo) No se puede utilizar en aplicaciones cliente servidor es una
clausula meramente informativa Tampoco se le pueden poner alias a los resuacutemenes
Ejemplo 67
Select Productid Orderid Quantity From [Order Details] order by ProductID Orderid compute
Sum(quantity)
Vemos que muestra la
columna con la suma
total de todas las
cantidades
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 46
Ejercicios de ROLLUP GROUPING y CUBE
Ejemplo 68
Realizar una consulta que resuma la cantidad de artiacuteculos pedidos por cada iacutendice de producto y
nuacutemero de pedido Realizando un caacutelculo acumulativo
select productid as [PRODUCTO] orderid as [Nordm PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] group by productid orderid with rollup order by productid orderid
PRODUCTO Nordm 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
hellip
Ejemplo 69
Modificacioacuten al ejercicio anterior Realizar el mismo resumen pero uacutenicamente para el producto
cuyo id es 50
select productid as [PRODUCTO] orderid as [Nordm PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] where productid = 50 group by productid orderid with rollup order by productid ordered
PRODUCTO Nordm 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
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 47
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 modificacioacuten 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 [Nordm PEDIDO] grouping(orderid) as [GRUPO PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] where productid = 50 group by Productidorderid with cube order by productidorderid
PRODUCTO GRUPO PRODUCTO Nordm PEDIDO GRUPO PEDIDO SUMA TOTAL
----------- -------------- ----------- ------------ -----------
NULL 1 NULL 1 235
NULL 1 10350 0 15
NULL 1 10383 0 15
NULL 1 10429 0 40
NULL 1 10465 0 25
NULL 1 10637 0 25
NULL 1 10729 0 40
NULL 1 10751 0 20
NULL 1 10920 0 24
NULL 1 10948 0 9
NULL 1 11072 0 22
50 0 NULL 1 235
50 0 10350 0 15
50 0 10383 0 15
50 0 10429 0 40
50 0 10465 0 25
50 0 10637 0 25
50 0 10729 0 40
50 0 10751 0 20
50 0 10920 0 24
50 0 10948 0 9
50 0 11072 0 22
(22 filas afectadas)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 48
Obtencioacuten de resuacutemenes 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 maacutes columnas y
luego efectuar alguna operacioacuten de resumen sobre cada grupo asiacute generado
La diferencia con GROUP BY es que permite mostrar informacioacuten mas detallada de cada grupo
Ejemplo 71
Lista de pedidos que muestre por coacutedigo de pedido la cantidad de productos vendidos por cada uno
de ellos
select Idpedidoidproductopreciounidadcantidad[Sub Total]=sum(PreciounidadCantidad) from
[detalles de pedidos] group by Idpedidoidproductopreciounidadcantidad order by IdPedido compute
sum(Cantidad) by IdPedido
EJERCICIOS CON COMPUTE
Ejemplo 72
Generar un resumen de subtotales en una consulta que devuelva el nuacutemero de pedido la cantidad
pedida para todos los orderid 11070
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 49
Select Orderid as [Nordm PEDIDO] Quantity AS [CANTIDAD] From [Order Details] where orderid gt= 11070 order by Orderid compute Sum(quantity) by orderid compute sum(quantity)
Nordm PEDIDO CANTIDAD
----------- --------
11070 40
11070 20
11070 30
11070 20
sum
===========
110
sum
===========
110
(6 filas afectadas)
Ejemplo 73
Generar un resumen con calculo de subtotales similar al anterior pero para los orderid 11075 y
11076
Select Orderid as [Nordm PEDIDO] Quantity as [CANTIDAD] From [Order Details] where orderid = 11075 or orderid = 11076 order by Orderid compute Sum(quantity) by ordered Nordm PEDIDO CANTIDAD ----------- -------- 11075 10 11075 30 11075 2 sum =========== 42 Nordm PEDIDO CANTIDAD ----------- -------- 11076 20 11076 20 11076 10
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 50
sum =========== 50 (8 filas afectadas)
Ejemplo 74
Modificacioacuten al ejercicio anterior Agregar la cantidad total y la cantidad promedio al final del
informe
Select Orderid as [Nordm 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)
Nordm PEDIDO CANTIDAD
----------- --------
11075 10
11075 30
11075 2
sum
===========
42
Nordm PEDIDO CANTIDAD
----------- --------
11076 20
11076 20
11076 10
sum
===========
50
sum
===========
92
avg
===========
15
(10 filas afectadas)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 51
Ejemplo 75
Seleccionar de forma agrupada por tipo todos los tipos la suma de los precios y la suma del
anticipo de la tabla tiacutetulos
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 199900 50000000
business 119500 50000000
business 29900 101250000
business 199900 50000000
sum
=====================
549200
avg
=====================
62812500
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
mod_cook 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
avg
=====================
75000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
popular_comp 229500 70000000
popular_comp 200000 80000000
popular_comp NULL NULL
sum
=====================
429500
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 52
avg
=====================
75000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
psychology 215900 70000000
psychology 109500 22750000
psychology 70000 60000000
psychology 199900 20000000
psychology 79900 40000000
sum
=====================
675200
avg
=====================
42550000
(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 ademaacutes 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 199900 50000000
business 119500 50000000
business 29900 101250000
business 199900 50000000
sum
=====================
549200
sum
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 53
=====================
251250000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
mod_cook 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
popular_comp 229500 70000000
popular_comp 200000 80000000
popular_comp NULL NULL
sum
=====================
429500
sum
=====================
150000000
(30 filas afectadas)
Ejemplo 77
Generar un informe que muestre la suma de los precios de los libros de psicologiacutea 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 109500
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 54
psychology 0736 70000
psychology 0736 199900
psychology 0736 79900
sum
=====================
459300
TIPO CODIGO EDITOR PRECIO
------------ ------------- ---------------------
psychology 0877 215900
sum
=====================
215900
(7 filas afectadas)
Ejemplo 78
Generar un informe que obtenga la suma de los precios de todos los libros de psicologiacutea asiacute como la
suma de los precios de los libros de psicologiacutea 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 109500
psychology 0736 70000
psychology 0736 199900
psychology 0736 79900
sum
=====================
459300
TIPO CODIGO EDITOR PRECIO
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 55
------------ ------------- ---------------------
psychology 0877 215900
sum
=====================
215900
sum
=====================
675200
(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 199900 0000
mod_cook 0877 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO CODIGO EDITOR PRECIO ANTICIPO
------------ ------------- --------------------- ---------------------
trad_cook 0877 119500 40000000
trad_cook 0877 209500 70000000
trad_cook 0877 149900 80000000
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 56
sum
=====================
478900
sum
=====================
190000000
(9 filas afectadas)
Ejemplo 80
Generar un informe que muestre todos los tiacutetulos precio y anticipo de aquellos tiacutetulos que tengan
un precio superior a 20 doacutelares Ofreceraacute tambieacuten la suma total del precio y del anticipo
Select title as [TITULO] price as [PRECIO] advance as [ANTICIPO] From titles where price gt 20 order by title compute sum(price) compute sum(advance)
TITULO PRECIO ANTICIPO
-------------------------------------------------------------------------------- --------------------- -------------
--------
But Is It User Friendly 229500 70000000
Computer Phobic AND Non-Phobic Individuals Behavior Variations 215900
70000000
Onions Leeks and Garlic Cooking Secrets of the Mediterranean 209500
70000000
sum
=====================
654900
sum
=====================
210000000
(5 filas afectadas)
Ejemplo 81
Generar un informe que muestre el precio el tipo y el nuacutemero de editor de la tabla titles de todos
aquellas obras que pertenezcan la categoriacutea de ldquobusinessrdquo Ademaacutes apareceraacute la suma total de
precios y el maacuteximo pub_id de esta seleccioacuten
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 57
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 29900 0736
business 199900 1389
business 199900 1389
business 119500 1389
sum
=====================
549200
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 Mostraraacute la suma de los precios y los anticipos por tipo y luego calcularaacute 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 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
trad_cook 209500 70000000
trad_cook 119500 40000000
trad_cook 149900 80000000
sum
=====================
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 58
478900
sum
=====================
190000000
sum
=====================
708700
sum
=====================
340000000
(11 filas afectadas)
Eliminacioacuten 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 iquestA que precio se ah vendido los productos
Select IdProducto Preciounidad from [Detalles de pedidos] order by IdProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 59
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 mayoriacutea de las consultas que se hacen en una base de datos requiere que se lean datos procedentes
de dos oacute maacutes tablas
INNER JOIN- son las filas que satisfacen la condicioacuten de la combinacioacuten
En la siguiente sentencia SQL enlaza 2 tablas la tabla clientes y la tabla pedidos en esta ejemplo me
muestra los campos nombre compantildeiacutea y el campo idpedido
La uacutenica condicioacuten es que las 2 tablas tengan un campo en comuacuten
Ejemplo 84
select clientesNombreCompantildeiacuteapedidosidpedido from clientes inner join pedidos on
clientesidcliente=pedidosidcliente
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 60
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 pedidosIdPedido pedidosIdCliente 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 pedidosIdPedido pedidosIdCliente order
by pedidos IdPedido
CROSS JOIN
Un Cross Join es la consulta correlacionada que combine cada una de las filas de una de las tablas con
todas las filas de la otra tabla
No es necesario que exista una columna en comuacuten para ejecutar el Cross Join
Ejemplo 86
La siguiente consulta combina cada una de las filas de la tabla categoriacuteas con cada una de las filas de la
tabla productos
select productosNombreProductocategoriasNombrecategoria from productos cross join categorias
order by productosNombreProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 61
Ejercicios de consultas Muacuteltiples
Ejemplo 87
Mostrar el pedidos completo con el id=10248
Select pedidosIdPedido pedidosIdCliente
Total=sum ([detalles de pedidos]Preciounidad[detalles de pedidos]Cantidad)
From [detalles de pedidos] inner join pedidos on
[Detalles de pedidos]IdPedido=pedidosIdPedido where pedidosIdPedido=10248
Group by pedidosIdPedido pedidosIdCliente
Ejemplo 88
1 Mostrar la cantidad de productos por categoriacutea
Select CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
[Total de Producto]=sum (UnidadesEnExistencia) from Categoriacuteas inner join
Productos on CategoriacuteasIdCategoriacutea=productosIdCategoriacutea
Group by CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 62
Ejemplo 89
Calcular cuantas ventas tiene cada uno de los vendedores
Select empleadosIdEmpleado empleadosNombre empleadosApellidos
[Total de ventas]=count (pedidosIdPedido) from empleados
Inner join Pedidos on empleadosIdEmpleado=pedidosIdEmpleado
Group by empleadosIdEmpleado empleadosNombre empleadosApellidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 63
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 despueacutes saca la de Plantilla
Recomendaciones a la hora de usar las combinaciones
Combinar tablas en funcioacuten de claves principales y externas
Limite el nuacutemero de tablas de las combinaciones
Select Apellido
Oficio as
OFICIOFUNCION
salario from emp
UNION
Select Apellido
Funcion Salario from
Plantilla
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 64
SUBCONSULTAS
Es una SELECT anidada en una instruccioacuten INSERT DELETE SELECT o UPDATE
Como una tabla derivada
Select eemp_no as Numero
eApellido
from (select emp_no apellido from emp) as e
Como una expresioacuten
Select emp_no as [Numero]
Apellido
Salario
(select avg(Salario) from emp)
as Diferencia
from emp
where oficio = Empleado
Para correlacionar datos
- Expresioacuten dinaacutemica que cambia en cada fila de una consulta externa
- Es una combinacioacuten entre la subconsulta y la fila de la consulta externa
- Dividen consultas complejas con dos o maacutes consultas simples relacionadas
Subconsulta correlacionada
Select apellido oficiodept_no
from emp as e
where 20 lt
(select dept_no from dept as d
where edept_no = ddept_no
and ddnombre = Ventas)
SUBCONSULTAS
1 Mostrar el numero de empleado el apellido y la fecha de alta del empleado mas antiguo de la
empresa
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 65
SELECT emp_noapellido
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_noapellido
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 Jimeacutenez
select apellido oficio from emp where
oficio = (select oficio from emp where apellido = JIMENEZ)
4 Queremos saber el apellido oficio salario y nuacutemero 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 gt (select max (salario) from
emp where dept_no = 30)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 66
5 Mostrar el apellido la funcioacuten sala o departamento de todos los empleados que trabajen en la
empresa
select eApellido eOficio as [Cargo en Empresa] ddnombre as [Oficina]
from emp as e
inner join dept as d
on edept_no = ddept_no
union
select pApellido pfuncion snombre
from plantilla as p
inner join sala as s
on phospital_cod = shospital_cod
and psala_cod = ssala_cod
union
select dApellido despecialidad hnombre
from doctor as d
inner join hospital as h
on dhospital_cod = hhospital_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 = lsquoventasrsquo))
order by 2
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 67
8 Mostrar los empleados que tienen mejor salario que la media de los directores no incluyendo al
presidente
Select from emp where salario gt
(select avg (salario) from emp where oficio = DIRECTOR)
and oficio ltgt PRESIDENTE
9 Mostrar el apellido funcioacuten salario y coacutedigo 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 = lsquoENFERMEROrsquo or
funcion = lsquoENFERMERArsquo) and hospital_cod = (select hospital_cod from hospital where nombre =
lsquoSAN CARLOSrsquo)
Select apellido funcion salario hospital_cod from plantilla where
funcion in (ENFERMEROENFERMERA)
and hospital_cod = (select hospital_cod from hospital
where nombre = SAN CARLOS)
10 Visualizar los datos de los hospitales que tienen personal (Doctores) de cardiologiacutea
Select from hospital where hospital_cod in (select hospital_cod from doctor where
especialidad = lsquoCardiologiacutearsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 68
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 = lsquoPROVINCIALrsquo or
nombre= lsquoGENERALrsquo)
12 Mostrar el apellido de los enfermos que nacieron antes que el Sentildeor Miller
Select apellido from enfermo where Fecha_nac lt (select fecha_nac from enfermo where
apellido = lsquoMILLER Brsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 69
Simulacion de una clausula JOIN
Vamos a mostrar los oficios que estaacuten en maacutes de un departamento
Select distinct e1oficio from emp as e1
where e1oficio in(Select e2oficio from emp as e2
where e1dept_no ltgt e2dept_no)
Se debe utilizar antes una combinacioacuten que una subconsulta la combinacioacuten seriacutea asi dando los
mismos resultados
Select distinct e1Oficio from emp as e1
inner join emp as e2
on e1oficio = e2oficio
where e1dept_no ltgt e2dept_no
Estos son los dos oficios que estaacuten en
maacutes de un departamento
Subconsulta para simular una clausula HAVING
select e1apellidoe1oficio e1salario
from emp as e1
where e1salario gt
(select avg(e2salario) from emp as e2
where e1oficio = e2oficio)
Esta es la consulta utilizando el HAVING que es la que deberiacuteamos utilizar antes que una
subconsulta de simulacioacuten HAVING
SELECT e1apellidoe1oficio e1salario
FROM emp AS e1
INNER JOIN emp AS e2
ON e1oficio = e2oficio
GROUP BY e1oficio e1salarioe1apellido
HAVING e1salario gt AVG (e2salario)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 70
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 13
Ejemplo 5
Si deseaacuteramos Eliminar seria con la sentencia Delete
--delete from alumnos where nom_alumno=juan Carlos
Ejemplo 6
Para Actualizar se Utiliza la sentencia Update y Set
--Update alumnos set nom_alumno=diego ape_alumno=cueva dir_alumno=los olivos
tel_alumno=5402972 email_alumno=hades_278hotmailcom where idalumno=01
Ejemplo 7
Para Realizar una Consulta se utiliza el Where
--select from alumnos where idalumno=Cli01
Ejemplo 8
Si tambieacuten uno desea se puede poner en orden ascendente y descendente paraacute ello se utilizar el
ASC y Desc
--select from alumnos ORDER BY nom_alumno Asc
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 14
--select from alumnos ORDER BY nom_alumno desc
Ejemplo 9
Para eliminar un Objeto de la base de datos se utiliza la sentencia Drop
Eliminar de la base de Datos Itae la Tabla Alumnos
Drop table alumnos Elimina la Tabla Clientes con la sentencia Drop seguido del tipo de
objeto y finalizando el nombre
Drop database Itae Elimina la Base de Datos Itae con la sentencia Drop seguido del
tipo de objeto y finalizando el nombre
OPERADORES DE CONDICIOacuteN _ FILAS
En la expresioacuten loacutegica que especifica condicioacuten _ filas se puede utilizar ademaacutes de los operadores
relacioacuten o de comparacioacuten los siguientes operadores SQL
LIKE- Para comparacioacuten de cadenas de caracteres admite los comodines y _
OPERADOR LIKE
Cualquier nuacutemero de caracteres
_ Para un caraacutecter individual
[ ] Para un conjunto de caracteres que esteacute dentro del corchete
[ ^ ] Que el caraacutecter individual que no esteacute dentro del corchete
EJEMPLO LIKE lsquoeenrsquo Muestra todos los caracteres que acaben con een
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 15
EJEMPLO LIKE lsquoeenrsquo Muestra todos los caracteres que contengan een en ese orden
EJEMPLO LIKE lsquo_enrsquo Muestra todos los caracteres que contenga tres letras y acaben en en
EJEMPLO LIKE lsquo[CK ]rsquo Muestra todos los caracteres que empiecen por C o K
EJEMPLO LIKE lsquo[S-V]ingrsquo Nombre de 4 letras cuya primera letra estuviera entre S o V y acabe en
ing
EJEMPLO LIKE lsquoM[^c]rsquo Todos los que empiecen por M y segunda letra no sea una c No hay limite
de caracteres
BETWEEN- para seleccioacuten en base a un rango de valores Los valores pueden ser numeacutericos de
cana fechas y horas
In-Para seleccioacuten en base a un conjunto de valores los valores pueden ser numeacutericos de cadena
fechas y horas
Para estos ejemplos ah utilizado la base de datos con el nombre de Poseidoacuten y contiene las siguientes
tablas y campos
Ejemplo 10
Lista de productos cuyo nombre contenga la palabra vino
Use Poseidon
Go
Select from productos where nombreproducto like vino
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 16
Luego procedemos a ejecutar la aplicacioacuten
El siacutembolo representa a cualquier cadena de caracteres inclusive la cadena nula
Ejemplo 12
Lista de productos cuya primera letea empieza con la letra a
Select from productos where nombreproducto like [a]
Ejemplo 13
Lista de productos cuya primera letea empieza con la letra a y la tercera con la letra e
Select from productos where nombreproducto like [a][e]
Ejemplo 14
Lista de productos cuyo nombre empieza con cualquier caraacutecter que va en el rango de la M a la
T
Select from productos where nombreproducto like [m-t]
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 17
Ejemplo 15
Lista de productos cuyo nombre empieza con A ograve con cualquier caraacutecter en el rango que va de U
a la Ademaacutes el segundo caraacutecter no debe ser la letra r
Select from productos where nombreproducto like [^b-t][^r]
El Caraacutecter ^ significa incluir
El Caraacutecter representa cualquier cadena de caracteres inclusive la cadena nula
El Caraacutecter _ Representa cualquier caraacutecter 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 caraacutecter empiece con la letra e
Select from productos where nombreproducto like _e
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 18
Ejemplo 18
Lista de productos cuyo nombre empiece con C M Ograve R
Select from productos where nombreproducto like bdquo[cmr]
Ejemplo 19
Lista de productos cuyo nombre empiece con C M Ograve R El segundo Caraacutecter debe ser A
Select from productos where nombreproducto like bdquo[cmr] a
El comodiacuten [cmr] representa el conjunto de caracteres validos en la posicioacuten en la que
apareceraacute el comodiacuten
Ejemplo 20
Seleccionar todos los productos que termine con la letra Z
Select from productos where nombreproducto like z
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 19
Ejemplo 21
Mostrar todos los productos cuya cuarta letra sea A
Select from productos where nombreproducto like ___a
USO DEL OPERADOR BETWEEN
Permite seleccionar en base a un rango de valores
Ejemplo 22
Lista de productos cuyo precio se encuentra en el rango que va de 15 a 21 nuevos soles
Select from productos where preciounidad between 15 and 21
Ejemplo 23
Lista de productos cuyo nombre se encuentren en el rango de Cerveza y galletas
Select from productos where nombreproducto between cerveza and galletas
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 20
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 (londresPariacutesTokyo)
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 (preciounidadcantidad)019 as IGV
from [detalles de pedidos]
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 21
Ejemplo 27
Mostar los productos cuyo precio sea mayor a 40
Select from productos where Preciounidad gt 40
Ejemplo 28
Mostrar todos los datos de los Clientes ordenados por Ciudad
Select from clientes order by ciudad
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 22
Ejemplo 29
Mostrar todos los productos de la Categoriacutea 2
Select from productos where IdCategoriacutea=2
Ejemplo 30
Mostrar todos los pedidos realizados en la fecha 1996-06-05
Select from Pedidos where FechaPedido =1996-06-05
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 23
Ejemplo 31
Mostrar todos los pedidos mayores a la Fecha 1996-05-05
Select from Pedidos where FechaPedido gt 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 IdCategoriacutea no sea 3
Select from productos where IdCategoriacutealtgt 3
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 24
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 Categoriacutea (123)
Select from productos where IdCategoriacutea not in (1 2 3) order by IdProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 25
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
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 26
USO DE FUNCIONES
Podemos utilizar funciones para construir expresiones y generar columnas computadoras O condiciones
complejas
Funcioacuten de agregacioacuten
Son funciones que se utilizan para calcular valores en las tablas Si queremos usarlas
combinaacutendolas 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
expresioacuten HAVING Equivalente a where
Todos estos ejercicios han sido desarrollado con la base de datos Poseidoacuten
COUNT Cuenta los registros que hay en la consulta
Si pongo un valor dentro de la expresioacuten devolveraacute la cuenta de todos los
registros no nulos
Si pongo un asterisco contaraacute todos los registros aunque tengan valores
nulos
Select count () from Pedidos Valores con Nulos
Select count (FechaEnviacuteo) from Pedidos Valores sin nulos
AVG Realiza la media sobre la expresioacuten dada debe ser un tipo de dato
Int
Select avg(Preciounidad) from productos
MAX Saca el valor maacuteximo de una consulta
Select max (FechaPedido) from Pedidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 27
MIN Devuelve el valor miacutenimo 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 paiacutes Brasil mostrando el nuacutemero de los Factura con el paiacutes de
Destinatario Brasil
Select count () as [Numero de Facturas] PaiacutesDestinatario
Avg (Preciounidad) as [Precio Medio] from
Facturas group by PaiacutesDestinatario having PaiacutesDestinatario =Brasil
Ejemplo 39
Encontrar el precio maacutes alto mas bajo y la diferencia entre ambos de todos los productos con
IdCategoriacutea 2
Select IdCategoriacutea Max (Preciounidad) as [Precio mas alto] min(Preciounidad) as
[Precio mas Bajo] Max(Preciounidad) - min(Preciounidad) as [Diferencia entre Ambos]
from Productos group by IdCategoriacutea having IdCategoriacutea = 2
Ejemplo 40
Visualizar el nuacutemero de productos por Categoriacutea
Select IdCategoriacutea as [Nordm de Categoriacutea] Count (IdCategoriacutea) as [Nordm de Productos]
From Productos group by IdCategoriacutea
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 28
Ejemplo 41
Visualizar los clientes que vivan en las siguientes ciudades Londres Madrid y Barcelona
Select count () as [Nordm de personas] ciudad from clientes group by ciudad Having ciudad in
(londresMadridBarcelona) order by ciudad
Ejemplo 42
Lista de productos cuya venta allaacute sido mayor a 50000
Select IdProducto Monto=Sum (Preciounidad Cantidad) from [Detalles de pedidos] group
by IdProducto having Sum (Preciounidad Cantidad)gt50000 order by IdProducto
Ejemplo 43
Cuantos Clientes no tienen Fax
Select Count () as [Total de Clientes sin Fax] from clientes where fax is null
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 29
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
Funcioacuten Resultado
GETDATE() Retorna la fecha y hora del sistema
DATEADD(partefechanfecha) Retorna una nueva fecha antildeadiendo n
unidades de partefecha a fecha
DATEDIFF(parteFechafecha1fecha2) Retorna la diferencia en parteFecha entre
fecha1 y fecha2
DATENAME(partefechafecha) Retorna la cadena correspondiente a
partefecha en fecha
DATEPART(partefechafecha) Retorna el numero correspondiente a
partefecha y fecha
DAY(fecha) Retorna el numero correspondiente a la
parte del diacutea de fecha
MONTH(fecha) Retorna el numero correspondiente a la
parte del mes de fecha
YEAR(fecha) Retorna el numero correspondiente a la
parte del antildeo de fecha
GETUTCDATE() Retorna la fecha y hora del meridiano de
Greenwich
La siguiente tabla muestra los valores de partefecha que podemos utilizar
partefecha Abreviatura
Year Yy yyyy
Quarter Qq q
Month Mm m
Dayofyear Dy y
Day Dd d
Week Wk ww
weekday Dw
Hour Hh
minute Mi n
second Ss s
milisecond Ms
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 30
Getdate
Select getdate () Funcioacuten que recupera la fecha actual del sistema
Convert Cast
Convierten expliacutecitamente una expresioacuten de un tipo de datos en otro CAST y CONVERT
proporcionan funciones similares
Convert (Tipodedatosdestino Origen Estilo)
o Tipodedatosdestino Siempre ha de ser tipo caraacutecter
o Origen Puede ser tipo fecha numeacuterico o moneda
o Estilo Opcional Es un coacutedigo que indica el formato en el que devuelve la cadena de
caracteres
Sintaxis
Convert (TipoDato Dato)
Cast (Dato as TipoDato)
Ejemplo
declare n intpalabra nvarchar(10)
set n = 1
set palabra =Nuacutemero
print convert(nvarchar(2)n) + + palabra
print cast(n as nvarchar(2)) + + palabra
while (nlt11)
begin
print convert(nvarchar(2)n) + + palabra
print cast(n as nvarchar(2)) + + palabra
set n = n + 1
end
DateName
Devuelve una cadena de caracteres que representa la parte de la fecha especificada de la fecha
especificada
Los caacutelculos 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
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 31
Ejemplo 46
Select IdPedido DateName (week FechaPedido) as Numero de Semana from Pedidos where IdPedido
= 1035251
Ejemplo 47
Select IdPedido datename (weekday FechaPedido) as Diacutea De Semana from Pedidos where IdPedido =
10352 Martes
Horas
Ejemplo 48
Select IdPedido datename (mi FechaPedido) as Minutos from Pedidos where IdPedido = 10352
Ejemplo 49
Select DateName (minute getdate ()) as minutos
Ejemplo 50
Select DateName (Hh FechaPedido) as hora from Pedidos where IdPedido = 10352
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 32
Ejemplo 51
Select DateName (Hour getdate ()) as hora--gt18
Ejemplo 52
Select DateName (Hh getdate ()) as hora--gt18
DatePart
Devuelve la parte de la fecha u hora indicada Sintaxis
Datepart (Valor devolver fecha)
Ejemplo 53
Select IdPedido datepart (mm FechaPedido) as Mes from Pedidos where IdPedido = 10352
Ejemplo 54
Select Datepart (Hh getdate ()) as Hora--gt17
Ejemplo 55
Select Datepart (mi getdate ()) as Minutos--gt54
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 33
Nombres de Fechas
Day (fecha)
Devuelve UN INT equivale a Datepart
Select day (getdate ()) as diacutea--gt6 (diacutea en la que se ejecuta la sentencia)
Select Datepart (dd getdate ()) --gt6 (diacutea en la que se ejecuta la sentencia)
Select Month (getdate ()) --gt1 (Mes en la que se ejecuta la sentencia)
Select Datepart (mm getdate ()) --gt1 (Mes en la que se ejecuta la sentencia)
Select Year (getdate ()) --gt2008 (Antildeo en la que se ejecuta la sentencia)
Ejemplo 56
Select year (FechaPedido) as Antildeo from Pedidos where IdPedido = 10352
Ejemplo 57
Select datediff (yyyy FechaPedido getdate()) as Dia from Pedidos where IdPedido = 10352
DateAdd
DateAdd (Datepart number date)
Antildeade un nuacutemero a la fecha puesta
DatePart es el formato de lo que queremos antildeadir
Number es el nuacutemero que queremos incrementar la fecha expuesta
Select convert (datetime1-1-02)
Select dateadd (dd 71-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 comparacioacuten y el tipo de dato
que nos devolveraacute antildeos diacuteas minutos etc
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 34
Ejemplo 58
Select datediff (yyyy FechaPedido getdate ()) as Dia from Pedidos where IdPedido = 10352
Ejercicios de funciones de Fecha
Ejemplo 59
Lista de pedidos emitidos en febrero de 1996
Select from Pedidos where month (FechaPedido) =2 and year (FechaPedido) =1996
Ejemplo 60
Lista de Pedidos mostrando la diferencia en diacuteas entre la fecha del pedido y la fecha de Envioacute
Select IdPedido FechaPedido FechaEnviacuteo diacuteas =datediff (day FechaPedido FechaEnviacuteo) from
pedidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 35
Ejemplo 61
Genere un listado de pedidos en el que la fecha del pedido se muestre en el formato nombre del
diacutea diacutea de mes antildeo
Select IdPedido FechaPedido Fecha=datename (dw IdPedido)+ + str (datepart (dd
IdPedido) 2)+ de +datename (mm IdPedido)+ de +str (datepart (yy IdPedido) 4) from
pedidos
Ejemplo 62
Mostrar de la tabla pedidos la fecha de pedidos en fecha corta
Select IdPedido convert (varchar (30) FechaPedido 106) as [Fecha Corta] from pedidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 36
FUNCIONES MATEMATICAS
ABS
Es el valor Absoluto
Select ABS (-4) as VALOR ABSOLUTO--gt4
CEILING
Devuelve el entero maacutes pequentildeo mayor o igual que la expresioacuten numeacuterica dada
Select CEILING (54) as CEILING--6
FLOOR
Devuelve el entero maacutes grande menor o igual que la expresioacuten numeacuterica dada
Select FLOOR (5) as FLOOR--gt5
POWER
Devuelve el valor de la expresioacuten indicada elevada a la potencia especificada
Select POWER (3 2) as 3 ELEVADO A 2--gt9
RAND
Devuelve un valor float aleatorio de 0 a 1
Las llamadas repetitivas de RAND() en una uacutenica consulta produciraacuten el mismo valor
Select RAND(6) as ALEATORIO--071368515806921451
Select RAND(6) as ALEATORIO--071368515806921451
Select RAND(4) as ALEATORIO--07136478921266981
Rand sobre los milisegundos actuales
Select RAND(DATEPART(msGETDATE())) as ALEATORIO--gt071443047691954253
Select RAND(999999999)--gt068504257551273573
ROUND
Devuelve una expresioacuten numeacuterica redondeada a la longitud o precisioacuten especificada
Round (Nuacutemero Redondeo del Nuacutemero)
ROUND siempre devuelve un valor Si length es un valor negativo y mayor que el nuacutemero de
diacutegitos anteriores al separador decimal ROUND devuelve 0
Select ROUND (1234567 2) --gt1234600
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 37
Select ROUND (1234567-2) --gt1000000
Select ROUND (1234567 0) --gt1230000
Select ROUND (1234567-3) ---gt0
SIGN
Devuelve el signo positivo (+1) cero (0) o negativo (-1) de la expresioacuten especificada
Dice el valor negativo positivo o neutro (0) del valor especificado
Select SIGN (-3) --gt-1
Select SIGN (3) --gt1
Select SIGN (0) --gt0
SQUARE
Devuelve el cuadrado de la expresioacuten especificada
Select SQUARE (4) as bdquoCuadrado‟--gt160
SQRT
Devuelve la raiacutez cuadrada de la expresioacuten especificada
Select SQRT (4) as [RAIZ CUADRADA] --gt20
FUNCIONES DE CADENA
ASCII
Devuelve el coacutedigo ASCII del caraacutecter maacutes a la izquierda de una expresioacuten de caracteres
Select ASCII(A)--gt65
Select ASCII(a)--gt97
Select ascii(aula)--gt97
CHAR
Una funcioacuten de cadena que convierte un coacutedigo ASCII int en un caraacutecter
select char(65)--gtA
select char(97)--gta
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 38
CHARINDEX
Devuelve la posicioacuten inicial de la expresioacuten especificada en una cadena de caracteres
CHARINDEX (expression1 expression2 [ start_location])
Argumentos
expression1
Es una expresioacuten que contiene la secuencia de caracteres que se desea buscar
Expression1 es una expresioacuten del tipo de cadenas cortas de caracteres
Expression2
Es una expresioacuten normalmente una columna
en la que se busca la cadena especificada
Expression2 es de la categoriacutea del tipo de datos cadena de caracteres
start_location
Es la posicioacuten del caraacutecter de expression2 en el que se empieza la buacutesqueda de expression1
Si no se especifica start_location es un nuacutemero negativo o es cero
la buacutesqueda empieza al principio de la cadena expression2
Si expression1 no se encuentra en expression2 CHARINDEX devuelve 0
Si alguno de los dos es null devuelve null
Select charindex (ciemurcielago) --gt4
Select charindex (ciemurcielago 2) --gt4
Select charindex (ciemurcielago 5) --gt0
Select charindex (ciemurcielago-6) --gt4
LEFT
Devuelve la parte de una cadena de caracteres que comienza en un nuacutemero de caracteres
especificado a partir de la izquierda
Select left (murcielago5) --gtmurci
RIGHT
Devuelve la parte de una cadena de caracteres que
Comienza en el nuacutemero de caracteres especificado
En integer_expression a partir de la derecha
Select right (hola que tal5) --gte tal
LEN
Cuenta el nuacutemero de caracteres que se incluyen en la cadena
Select len (murcieacutelago) --gt10
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 39
LOWER
Convierte a Minuacutesculas la cadena especificada
Select lower (MurcIELaGO) as [minusculas] --gtmurcielago
UPPER
Convierte a Mayuacutesculas la cadena especificada
Select upper (murcielago) as [MAYUSCULAS] --gtMURCIELAGO
RTRIM y LTRIM
Elimina los espacios que existen a la izquierda y a la derecha respectivamente
Select Rtrim ( murcieacutelago ) AS [SIN ESPACIOS] --gtmurcieacutelago
Select Ltrim ( murcieacutelago ) AS [SIN ESPACIOS] --gtmurcieacutelago
Select ltrim(rtrim( hola ))+
REPLACE
Reemplaza por una tercera expresioacuten todas las apariciones
de la segunda expresioacuten de cadena proporcionada en la primera expresioacuten de cadena
Select replace (hola que tal estasaA) --gtholA que tAl estAs
Select replace (buenos dias que tal estasuentildentildentilde) --gtbntildentildentildenos diasqntildentildentilde tal estas
SPACE
Coloca el nuacutemero de espacios que se le indiquen para entre una cadena de caracteres
Select hola+space(5)+que tal--gthola que tal
SUBSTRING
Devuelve parte de una expresioacuten de caracteres binaria de texto o de imagen
Sintaxis
SUBSTRING (Expresioacuten Comienzo Duracioacuten)
Argumentos
Expresioacuten
Es una cadena de caracteres cadena binaria texto imagen
Columna o expresioacuten que incluye una columna
No deben usarse expresiones que incluyan funciones de agregado
Start
Es un entero que especifica el punto en que comienza la subcadena
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 40
Length
Es un entero que especifica la longitud de la subcadena
(El nuacutemero de caracteres o bytes que se devuelven)
Select substring (murcielago 3 5) --gtrciel
Select substring (murcielago 3 len (murcielago)) --gtrciel
REVERSE
Devuelve invertida una expresioacuten de caraacutecter
Select reverse (hola)
REPLICATE
Repite una expresioacuten de caracteres un nuacutemero especificado de veces
Select replicate (murcielago 5)
Replicate replicate replicate replicate replicate
STUFF
Elimina el nuacutemero de caracteres especificados e insertados
Otro conjunto de caracteres en un punto de inicio indicado
Select STUFF (Murcieacutelago 2 3 ijklmn) Mijklmnielago
FUNCIONES DE SISTEMA
- APP_NAME () Devuelve el nombre de la aplicacioacuten actual
Select app_name () as [Nombre de la aplicacion]
- DATALENGTH (Expresioacuten) Devuelve un entero que es numero de bites necesarios para
representar esa expresioacuten int
Select datalength (Ninoni) as [Numero de bites]
- ISDATE (Expresioacuten) Dice si la expresioacuten es una fecha o no Devuelve 1 si la expresioacuten es
una fecha y 0 si no es una fecha
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 41
Select isdate (121001) as [Validacioacuten Fecha]
- ISNUMERIC (Expresion) Dice si la expresioacuten es un numero o no Devuelve 1 si la
expresioacuten es un nuacutemero y 0 si la expresioacuten no es nuacutemero
Select isnumeric (ddd) as [Validacion Numero]
- ISNULL (Expresioacuten ExpresionDevuelta) Si la expresioacuten es nula te devuelve la Expresioacuten
Devuelta y si no devuelve la primera Expresioacuten
Select isnull (nullNo nulo) as [Es Nulo]
- PARSENAME (bdquoNombreObjeto‟ ParteNombre)
ParteNombre es un valor de tipo Int que coge unos determinados valores del
NombreObjeto
1 Objeto
2 Propietario
3 Base de Datos
4 Servidor
Select parsename (saposeidondbopedidos1) as [Parte Expresioacuten]
Select parsename (saposeidondbopedidos 2) as [Parte Expresioacuten]
Select parsename (saposeidondbopedidos3) as [Parte Expresioacuten]
Select parsename ( saposeidondbopedidos 4) as [Parte Expresioacuten]
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 42
- SYSTEM_USER Devuelve el usuario del sistema actual
Depende de la autentificacioacuten con la que te hayas conectado
Select system_user as [Usuario conectado]
- USER_NAME() Devuelve el nombre del usuario actual
Select user_name ()
- COALESCE (expresioacuten1 expresioacuten2 )
Devuelve la primera expresioacuten no NULL
Si todos son NULL devuelve NULL
Select coalesce (PrecioUnidad Cantidad) from [detalles de Pedidos] Si el PrecioUnidad es nulo
devolveraacute la Cantidad y si los dos son nulos devolveraacute un campo Null
PROCEDIMIENTOS PARA AGRUPAR Y RESUMIR DATOS
En el examen de certificacioacuten 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 usaraacute la base de datos indicada Ejemplo Ponemos
en el analizador de consultas lo siguiente
Use Northwind
Select from [Order Details]
[Order Details]
Esta tabla perteneciente a la Northwind se encarga de manejar los pedidos
Order Id Nordm de Pedido
Producto Id Nordm de Producto
Ambos campos son Primary Key con lo que no puede haber una combinacioacuten de ambos campos que sea
igual
OrderId ProductId
1 A
1 B
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 43
1 C
2 A
3 C
Es decir en este caso no podriacutea existir una nueva combinacioacuten ldquo1 Ardquo o ldquo2 Ardquo
Quantity Es la cantidad del producto del pedido
ROLLUP
Se usa para presentar resuacutemenes de datos A de usarse junto con la clausula group by lo que hace es
realizar un resumen de los campos incluidos en el rollup
Ejemplo 63
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
Group by ProductID OrderID
with Rollup
Order by ProductID OrderID
Este ejemplo suma todas las cantidades y mediante
rollup muestra una fila con la suma de todas las
cantidades de cada producto y ademaacutes otra fila con la
suma de todas las cantidades de todos los productos El
resultado de este ejemplo seriacutea el que muestra la
imagen
Ejemplo 64
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
where orderid lt 10250
Group by ProductID OrderID
with Rollup
Order by ProductID OrderID
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 44
CUBE
Al igual que Rollup realiza resuacutemenes de campos agrupados Pero en este caso muestra un resumen con
cada combinacioacuten posible de los campos agrupados
Ejemplo 65
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
where orderid lt 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 combinacioacuten posible entre el
productid y el orderid
GROUPING
Indica si el resultado de un campo es el que hay en la propia tabla o se ha introducido mediante una
claacuteusula de resumen es decir para saber por ejemplo si un ldquoNullrdquo 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 lt 10250 Group by ProductID
OrderID with Cube Order by ProductID OrderID
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 45
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
Ponieacutendole un alias al
grouping saldriacutea el nombre
de columna que le
indiquemos
COMPUTE
Realiza un resumen en una columna aparte con el resultado de la funcioacuten de agregado indicada Su
formato seriacutea Compute funcioacuten(campo) No se puede utilizar en aplicaciones cliente servidor es una
clausula meramente informativa Tampoco se le pueden poner alias a los resuacutemenes
Ejemplo 67
Select Productid Orderid Quantity From [Order Details] order by ProductID Orderid compute
Sum(quantity)
Vemos que muestra la
columna con la suma
total de todas las
cantidades
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 46
Ejercicios de ROLLUP GROUPING y CUBE
Ejemplo 68
Realizar una consulta que resuma la cantidad de artiacuteculos pedidos por cada iacutendice de producto y
nuacutemero de pedido Realizando un caacutelculo acumulativo
select productid as [PRODUCTO] orderid as [Nordm PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] group by productid orderid with rollup order by productid orderid
PRODUCTO Nordm 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
hellip
Ejemplo 69
Modificacioacuten al ejercicio anterior Realizar el mismo resumen pero uacutenicamente para el producto
cuyo id es 50
select productid as [PRODUCTO] orderid as [Nordm PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] where productid = 50 group by productid orderid with rollup order by productid ordered
PRODUCTO Nordm 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
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 47
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 modificacioacuten 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 [Nordm PEDIDO] grouping(orderid) as [GRUPO PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] where productid = 50 group by Productidorderid with cube order by productidorderid
PRODUCTO GRUPO PRODUCTO Nordm PEDIDO GRUPO PEDIDO SUMA TOTAL
----------- -------------- ----------- ------------ -----------
NULL 1 NULL 1 235
NULL 1 10350 0 15
NULL 1 10383 0 15
NULL 1 10429 0 40
NULL 1 10465 0 25
NULL 1 10637 0 25
NULL 1 10729 0 40
NULL 1 10751 0 20
NULL 1 10920 0 24
NULL 1 10948 0 9
NULL 1 11072 0 22
50 0 NULL 1 235
50 0 10350 0 15
50 0 10383 0 15
50 0 10429 0 40
50 0 10465 0 25
50 0 10637 0 25
50 0 10729 0 40
50 0 10751 0 20
50 0 10920 0 24
50 0 10948 0 9
50 0 11072 0 22
(22 filas afectadas)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 48
Obtencioacuten de resuacutemenes 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 maacutes columnas y
luego efectuar alguna operacioacuten de resumen sobre cada grupo asiacute generado
La diferencia con GROUP BY es que permite mostrar informacioacuten mas detallada de cada grupo
Ejemplo 71
Lista de pedidos que muestre por coacutedigo de pedido la cantidad de productos vendidos por cada uno
de ellos
select Idpedidoidproductopreciounidadcantidad[Sub Total]=sum(PreciounidadCantidad) from
[detalles de pedidos] group by Idpedidoidproductopreciounidadcantidad order by IdPedido compute
sum(Cantidad) by IdPedido
EJERCICIOS CON COMPUTE
Ejemplo 72
Generar un resumen de subtotales en una consulta que devuelva el nuacutemero de pedido la cantidad
pedida para todos los orderid 11070
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 49
Select Orderid as [Nordm PEDIDO] Quantity AS [CANTIDAD] From [Order Details] where orderid gt= 11070 order by Orderid compute Sum(quantity) by orderid compute sum(quantity)
Nordm PEDIDO CANTIDAD
----------- --------
11070 40
11070 20
11070 30
11070 20
sum
===========
110
sum
===========
110
(6 filas afectadas)
Ejemplo 73
Generar un resumen con calculo de subtotales similar al anterior pero para los orderid 11075 y
11076
Select Orderid as [Nordm PEDIDO] Quantity as [CANTIDAD] From [Order Details] where orderid = 11075 or orderid = 11076 order by Orderid compute Sum(quantity) by ordered Nordm PEDIDO CANTIDAD ----------- -------- 11075 10 11075 30 11075 2 sum =========== 42 Nordm PEDIDO CANTIDAD ----------- -------- 11076 20 11076 20 11076 10
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 50
sum =========== 50 (8 filas afectadas)
Ejemplo 74
Modificacioacuten al ejercicio anterior Agregar la cantidad total y la cantidad promedio al final del
informe
Select Orderid as [Nordm 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)
Nordm PEDIDO CANTIDAD
----------- --------
11075 10
11075 30
11075 2
sum
===========
42
Nordm PEDIDO CANTIDAD
----------- --------
11076 20
11076 20
11076 10
sum
===========
50
sum
===========
92
avg
===========
15
(10 filas afectadas)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 51
Ejemplo 75
Seleccionar de forma agrupada por tipo todos los tipos la suma de los precios y la suma del
anticipo de la tabla tiacutetulos
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 199900 50000000
business 119500 50000000
business 29900 101250000
business 199900 50000000
sum
=====================
549200
avg
=====================
62812500
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
mod_cook 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
avg
=====================
75000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
popular_comp 229500 70000000
popular_comp 200000 80000000
popular_comp NULL NULL
sum
=====================
429500
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 52
avg
=====================
75000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
psychology 215900 70000000
psychology 109500 22750000
psychology 70000 60000000
psychology 199900 20000000
psychology 79900 40000000
sum
=====================
675200
avg
=====================
42550000
(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 ademaacutes 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 199900 50000000
business 119500 50000000
business 29900 101250000
business 199900 50000000
sum
=====================
549200
sum
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 53
=====================
251250000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
mod_cook 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
popular_comp 229500 70000000
popular_comp 200000 80000000
popular_comp NULL NULL
sum
=====================
429500
sum
=====================
150000000
(30 filas afectadas)
Ejemplo 77
Generar un informe que muestre la suma de los precios de los libros de psicologiacutea 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 109500
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 54
psychology 0736 70000
psychology 0736 199900
psychology 0736 79900
sum
=====================
459300
TIPO CODIGO EDITOR PRECIO
------------ ------------- ---------------------
psychology 0877 215900
sum
=====================
215900
(7 filas afectadas)
Ejemplo 78
Generar un informe que obtenga la suma de los precios de todos los libros de psicologiacutea asiacute como la
suma de los precios de los libros de psicologiacutea 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 109500
psychology 0736 70000
psychology 0736 199900
psychology 0736 79900
sum
=====================
459300
TIPO CODIGO EDITOR PRECIO
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 55
------------ ------------- ---------------------
psychology 0877 215900
sum
=====================
215900
sum
=====================
675200
(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 199900 0000
mod_cook 0877 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO CODIGO EDITOR PRECIO ANTICIPO
------------ ------------- --------------------- ---------------------
trad_cook 0877 119500 40000000
trad_cook 0877 209500 70000000
trad_cook 0877 149900 80000000
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 56
sum
=====================
478900
sum
=====================
190000000
(9 filas afectadas)
Ejemplo 80
Generar un informe que muestre todos los tiacutetulos precio y anticipo de aquellos tiacutetulos que tengan
un precio superior a 20 doacutelares Ofreceraacute tambieacuten la suma total del precio y del anticipo
Select title as [TITULO] price as [PRECIO] advance as [ANTICIPO] From titles where price gt 20 order by title compute sum(price) compute sum(advance)
TITULO PRECIO ANTICIPO
-------------------------------------------------------------------------------- --------------------- -------------
--------
But Is It User Friendly 229500 70000000
Computer Phobic AND Non-Phobic Individuals Behavior Variations 215900
70000000
Onions Leeks and Garlic Cooking Secrets of the Mediterranean 209500
70000000
sum
=====================
654900
sum
=====================
210000000
(5 filas afectadas)
Ejemplo 81
Generar un informe que muestre el precio el tipo y el nuacutemero de editor de la tabla titles de todos
aquellas obras que pertenezcan la categoriacutea de ldquobusinessrdquo Ademaacutes apareceraacute la suma total de
precios y el maacuteximo pub_id de esta seleccioacuten
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 57
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 29900 0736
business 199900 1389
business 199900 1389
business 119500 1389
sum
=====================
549200
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 Mostraraacute la suma de los precios y los anticipos por tipo y luego calcularaacute 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 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
trad_cook 209500 70000000
trad_cook 119500 40000000
trad_cook 149900 80000000
sum
=====================
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 58
478900
sum
=====================
190000000
sum
=====================
708700
sum
=====================
340000000
(11 filas afectadas)
Eliminacioacuten 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 iquestA que precio se ah vendido los productos
Select IdProducto Preciounidad from [Detalles de pedidos] order by IdProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 59
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 mayoriacutea de las consultas que se hacen en una base de datos requiere que se lean datos procedentes
de dos oacute maacutes tablas
INNER JOIN- son las filas que satisfacen la condicioacuten de la combinacioacuten
En la siguiente sentencia SQL enlaza 2 tablas la tabla clientes y la tabla pedidos en esta ejemplo me
muestra los campos nombre compantildeiacutea y el campo idpedido
La uacutenica condicioacuten es que las 2 tablas tengan un campo en comuacuten
Ejemplo 84
select clientesNombreCompantildeiacuteapedidosidpedido from clientes inner join pedidos on
clientesidcliente=pedidosidcliente
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 60
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 pedidosIdPedido pedidosIdCliente 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 pedidosIdPedido pedidosIdCliente order
by pedidos IdPedido
CROSS JOIN
Un Cross Join es la consulta correlacionada que combine cada una de las filas de una de las tablas con
todas las filas de la otra tabla
No es necesario que exista una columna en comuacuten para ejecutar el Cross Join
Ejemplo 86
La siguiente consulta combina cada una de las filas de la tabla categoriacuteas con cada una de las filas de la
tabla productos
select productosNombreProductocategoriasNombrecategoria from productos cross join categorias
order by productosNombreProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 61
Ejercicios de consultas Muacuteltiples
Ejemplo 87
Mostrar el pedidos completo con el id=10248
Select pedidosIdPedido pedidosIdCliente
Total=sum ([detalles de pedidos]Preciounidad[detalles de pedidos]Cantidad)
From [detalles de pedidos] inner join pedidos on
[Detalles de pedidos]IdPedido=pedidosIdPedido where pedidosIdPedido=10248
Group by pedidosIdPedido pedidosIdCliente
Ejemplo 88
1 Mostrar la cantidad de productos por categoriacutea
Select CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
[Total de Producto]=sum (UnidadesEnExistencia) from Categoriacuteas inner join
Productos on CategoriacuteasIdCategoriacutea=productosIdCategoriacutea
Group by CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 62
Ejemplo 89
Calcular cuantas ventas tiene cada uno de los vendedores
Select empleadosIdEmpleado empleadosNombre empleadosApellidos
[Total de ventas]=count (pedidosIdPedido) from empleados
Inner join Pedidos on empleadosIdEmpleado=pedidosIdEmpleado
Group by empleadosIdEmpleado empleadosNombre empleadosApellidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 63
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 despueacutes saca la de Plantilla
Recomendaciones a la hora de usar las combinaciones
Combinar tablas en funcioacuten de claves principales y externas
Limite el nuacutemero de tablas de las combinaciones
Select Apellido
Oficio as
OFICIOFUNCION
salario from emp
UNION
Select Apellido
Funcion Salario from
Plantilla
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 64
SUBCONSULTAS
Es una SELECT anidada en una instruccioacuten INSERT DELETE SELECT o UPDATE
Como una tabla derivada
Select eemp_no as Numero
eApellido
from (select emp_no apellido from emp) as e
Como una expresioacuten
Select emp_no as [Numero]
Apellido
Salario
(select avg(Salario) from emp)
as Diferencia
from emp
where oficio = Empleado
Para correlacionar datos
- Expresioacuten dinaacutemica que cambia en cada fila de una consulta externa
- Es una combinacioacuten entre la subconsulta y la fila de la consulta externa
- Dividen consultas complejas con dos o maacutes consultas simples relacionadas
Subconsulta correlacionada
Select apellido oficiodept_no
from emp as e
where 20 lt
(select dept_no from dept as d
where edept_no = ddept_no
and ddnombre = Ventas)
SUBCONSULTAS
1 Mostrar el numero de empleado el apellido y la fecha de alta del empleado mas antiguo de la
empresa
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 65
SELECT emp_noapellido
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_noapellido
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 Jimeacutenez
select apellido oficio from emp where
oficio = (select oficio from emp where apellido = JIMENEZ)
4 Queremos saber el apellido oficio salario y nuacutemero 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 gt (select max (salario) from
emp where dept_no = 30)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 66
5 Mostrar el apellido la funcioacuten sala o departamento de todos los empleados que trabajen en la
empresa
select eApellido eOficio as [Cargo en Empresa] ddnombre as [Oficina]
from emp as e
inner join dept as d
on edept_no = ddept_no
union
select pApellido pfuncion snombre
from plantilla as p
inner join sala as s
on phospital_cod = shospital_cod
and psala_cod = ssala_cod
union
select dApellido despecialidad hnombre
from doctor as d
inner join hospital as h
on dhospital_cod = hhospital_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 = lsquoventasrsquo))
order by 2
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 67
8 Mostrar los empleados que tienen mejor salario que la media de los directores no incluyendo al
presidente
Select from emp where salario gt
(select avg (salario) from emp where oficio = DIRECTOR)
and oficio ltgt PRESIDENTE
9 Mostrar el apellido funcioacuten salario y coacutedigo 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 = lsquoENFERMEROrsquo or
funcion = lsquoENFERMERArsquo) and hospital_cod = (select hospital_cod from hospital where nombre =
lsquoSAN CARLOSrsquo)
Select apellido funcion salario hospital_cod from plantilla where
funcion in (ENFERMEROENFERMERA)
and hospital_cod = (select hospital_cod from hospital
where nombre = SAN CARLOS)
10 Visualizar los datos de los hospitales que tienen personal (Doctores) de cardiologiacutea
Select from hospital where hospital_cod in (select hospital_cod from doctor where
especialidad = lsquoCardiologiacutearsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 68
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 = lsquoPROVINCIALrsquo or
nombre= lsquoGENERALrsquo)
12 Mostrar el apellido de los enfermos que nacieron antes que el Sentildeor Miller
Select apellido from enfermo where Fecha_nac lt (select fecha_nac from enfermo where
apellido = lsquoMILLER Brsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 69
Simulacion de una clausula JOIN
Vamos a mostrar los oficios que estaacuten en maacutes de un departamento
Select distinct e1oficio from emp as e1
where e1oficio in(Select e2oficio from emp as e2
where e1dept_no ltgt e2dept_no)
Se debe utilizar antes una combinacioacuten que una subconsulta la combinacioacuten seriacutea asi dando los
mismos resultados
Select distinct e1Oficio from emp as e1
inner join emp as e2
on e1oficio = e2oficio
where e1dept_no ltgt e2dept_no
Estos son los dos oficios que estaacuten en
maacutes de un departamento
Subconsulta para simular una clausula HAVING
select e1apellidoe1oficio e1salario
from emp as e1
where e1salario gt
(select avg(e2salario) from emp as e2
where e1oficio = e2oficio)
Esta es la consulta utilizando el HAVING que es la que deberiacuteamos utilizar antes que una
subconsulta de simulacioacuten HAVING
SELECT e1apellidoe1oficio e1salario
FROM emp AS e1
INNER JOIN emp AS e2
ON e1oficio = e2oficio
GROUP BY e1oficio e1salarioe1apellido
HAVING e1salario gt AVG (e2salario)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 70
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 14
--select from alumnos ORDER BY nom_alumno desc
Ejemplo 9
Para eliminar un Objeto de la base de datos se utiliza la sentencia Drop
Eliminar de la base de Datos Itae la Tabla Alumnos
Drop table alumnos Elimina la Tabla Clientes con la sentencia Drop seguido del tipo de
objeto y finalizando el nombre
Drop database Itae Elimina la Base de Datos Itae con la sentencia Drop seguido del
tipo de objeto y finalizando el nombre
OPERADORES DE CONDICIOacuteN _ FILAS
En la expresioacuten loacutegica que especifica condicioacuten _ filas se puede utilizar ademaacutes de los operadores
relacioacuten o de comparacioacuten los siguientes operadores SQL
LIKE- Para comparacioacuten de cadenas de caracteres admite los comodines y _
OPERADOR LIKE
Cualquier nuacutemero de caracteres
_ Para un caraacutecter individual
[ ] Para un conjunto de caracteres que esteacute dentro del corchete
[ ^ ] Que el caraacutecter individual que no esteacute dentro del corchete
EJEMPLO LIKE lsquoeenrsquo Muestra todos los caracteres que acaben con een
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 15
EJEMPLO LIKE lsquoeenrsquo Muestra todos los caracteres que contengan een en ese orden
EJEMPLO LIKE lsquo_enrsquo Muestra todos los caracteres que contenga tres letras y acaben en en
EJEMPLO LIKE lsquo[CK ]rsquo Muestra todos los caracteres que empiecen por C o K
EJEMPLO LIKE lsquo[S-V]ingrsquo Nombre de 4 letras cuya primera letra estuviera entre S o V y acabe en
ing
EJEMPLO LIKE lsquoM[^c]rsquo Todos los que empiecen por M y segunda letra no sea una c No hay limite
de caracteres
BETWEEN- para seleccioacuten en base a un rango de valores Los valores pueden ser numeacutericos de
cana fechas y horas
In-Para seleccioacuten en base a un conjunto de valores los valores pueden ser numeacutericos de cadena
fechas y horas
Para estos ejemplos ah utilizado la base de datos con el nombre de Poseidoacuten y contiene las siguientes
tablas y campos
Ejemplo 10
Lista de productos cuyo nombre contenga la palabra vino
Use Poseidon
Go
Select from productos where nombreproducto like vino
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 16
Luego procedemos a ejecutar la aplicacioacuten
El siacutembolo representa a cualquier cadena de caracteres inclusive la cadena nula
Ejemplo 12
Lista de productos cuya primera letea empieza con la letra a
Select from productos where nombreproducto like [a]
Ejemplo 13
Lista de productos cuya primera letea empieza con la letra a y la tercera con la letra e
Select from productos where nombreproducto like [a][e]
Ejemplo 14
Lista de productos cuyo nombre empieza con cualquier caraacutecter que va en el rango de la M a la
T
Select from productos where nombreproducto like [m-t]
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 17
Ejemplo 15
Lista de productos cuyo nombre empieza con A ograve con cualquier caraacutecter en el rango que va de U
a la Ademaacutes el segundo caraacutecter no debe ser la letra r
Select from productos where nombreproducto like [^b-t][^r]
El Caraacutecter ^ significa incluir
El Caraacutecter representa cualquier cadena de caracteres inclusive la cadena nula
El Caraacutecter _ Representa cualquier caraacutecter 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 caraacutecter empiece con la letra e
Select from productos where nombreproducto like _e
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 18
Ejemplo 18
Lista de productos cuyo nombre empiece con C M Ograve R
Select from productos where nombreproducto like bdquo[cmr]
Ejemplo 19
Lista de productos cuyo nombre empiece con C M Ograve R El segundo Caraacutecter debe ser A
Select from productos where nombreproducto like bdquo[cmr] a
El comodiacuten [cmr] representa el conjunto de caracteres validos en la posicioacuten en la que
apareceraacute el comodiacuten
Ejemplo 20
Seleccionar todos los productos que termine con la letra Z
Select from productos where nombreproducto like z
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 19
Ejemplo 21
Mostrar todos los productos cuya cuarta letra sea A
Select from productos where nombreproducto like ___a
USO DEL OPERADOR BETWEEN
Permite seleccionar en base a un rango de valores
Ejemplo 22
Lista de productos cuyo precio se encuentra en el rango que va de 15 a 21 nuevos soles
Select from productos where preciounidad between 15 and 21
Ejemplo 23
Lista de productos cuyo nombre se encuentren en el rango de Cerveza y galletas
Select from productos where nombreproducto between cerveza and galletas
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 20
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 (londresPariacutesTokyo)
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 (preciounidadcantidad)019 as IGV
from [detalles de pedidos]
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 21
Ejemplo 27
Mostar los productos cuyo precio sea mayor a 40
Select from productos where Preciounidad gt 40
Ejemplo 28
Mostrar todos los datos de los Clientes ordenados por Ciudad
Select from clientes order by ciudad
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 22
Ejemplo 29
Mostrar todos los productos de la Categoriacutea 2
Select from productos where IdCategoriacutea=2
Ejemplo 30
Mostrar todos los pedidos realizados en la fecha 1996-06-05
Select from Pedidos where FechaPedido =1996-06-05
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 23
Ejemplo 31
Mostrar todos los pedidos mayores a la Fecha 1996-05-05
Select from Pedidos where FechaPedido gt 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 IdCategoriacutea no sea 3
Select from productos where IdCategoriacutealtgt 3
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 24
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 Categoriacutea (123)
Select from productos where IdCategoriacutea not in (1 2 3) order by IdProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 25
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
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 26
USO DE FUNCIONES
Podemos utilizar funciones para construir expresiones y generar columnas computadoras O condiciones
complejas
Funcioacuten de agregacioacuten
Son funciones que se utilizan para calcular valores en las tablas Si queremos usarlas
combinaacutendolas 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
expresioacuten HAVING Equivalente a where
Todos estos ejercicios han sido desarrollado con la base de datos Poseidoacuten
COUNT Cuenta los registros que hay en la consulta
Si pongo un valor dentro de la expresioacuten devolveraacute la cuenta de todos los
registros no nulos
Si pongo un asterisco contaraacute todos los registros aunque tengan valores
nulos
Select count () from Pedidos Valores con Nulos
Select count (FechaEnviacuteo) from Pedidos Valores sin nulos
AVG Realiza la media sobre la expresioacuten dada debe ser un tipo de dato
Int
Select avg(Preciounidad) from productos
MAX Saca el valor maacuteximo de una consulta
Select max (FechaPedido) from Pedidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 27
MIN Devuelve el valor miacutenimo 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 paiacutes Brasil mostrando el nuacutemero de los Factura con el paiacutes de
Destinatario Brasil
Select count () as [Numero de Facturas] PaiacutesDestinatario
Avg (Preciounidad) as [Precio Medio] from
Facturas group by PaiacutesDestinatario having PaiacutesDestinatario =Brasil
Ejemplo 39
Encontrar el precio maacutes alto mas bajo y la diferencia entre ambos de todos los productos con
IdCategoriacutea 2
Select IdCategoriacutea Max (Preciounidad) as [Precio mas alto] min(Preciounidad) as
[Precio mas Bajo] Max(Preciounidad) - min(Preciounidad) as [Diferencia entre Ambos]
from Productos group by IdCategoriacutea having IdCategoriacutea = 2
Ejemplo 40
Visualizar el nuacutemero de productos por Categoriacutea
Select IdCategoriacutea as [Nordm de Categoriacutea] Count (IdCategoriacutea) as [Nordm de Productos]
From Productos group by IdCategoriacutea
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 28
Ejemplo 41
Visualizar los clientes que vivan en las siguientes ciudades Londres Madrid y Barcelona
Select count () as [Nordm de personas] ciudad from clientes group by ciudad Having ciudad in
(londresMadridBarcelona) order by ciudad
Ejemplo 42
Lista de productos cuya venta allaacute sido mayor a 50000
Select IdProducto Monto=Sum (Preciounidad Cantidad) from [Detalles de pedidos] group
by IdProducto having Sum (Preciounidad Cantidad)gt50000 order by IdProducto
Ejemplo 43
Cuantos Clientes no tienen Fax
Select Count () as [Total de Clientes sin Fax] from clientes where fax is null
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 29
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
Funcioacuten Resultado
GETDATE() Retorna la fecha y hora del sistema
DATEADD(partefechanfecha) Retorna una nueva fecha antildeadiendo n
unidades de partefecha a fecha
DATEDIFF(parteFechafecha1fecha2) Retorna la diferencia en parteFecha entre
fecha1 y fecha2
DATENAME(partefechafecha) Retorna la cadena correspondiente a
partefecha en fecha
DATEPART(partefechafecha) Retorna el numero correspondiente a
partefecha y fecha
DAY(fecha) Retorna el numero correspondiente a la
parte del diacutea de fecha
MONTH(fecha) Retorna el numero correspondiente a la
parte del mes de fecha
YEAR(fecha) Retorna el numero correspondiente a la
parte del antildeo de fecha
GETUTCDATE() Retorna la fecha y hora del meridiano de
Greenwich
La siguiente tabla muestra los valores de partefecha que podemos utilizar
partefecha Abreviatura
Year Yy yyyy
Quarter Qq q
Month Mm m
Dayofyear Dy y
Day Dd d
Week Wk ww
weekday Dw
Hour Hh
minute Mi n
second Ss s
milisecond Ms
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 30
Getdate
Select getdate () Funcioacuten que recupera la fecha actual del sistema
Convert Cast
Convierten expliacutecitamente una expresioacuten de un tipo de datos en otro CAST y CONVERT
proporcionan funciones similares
Convert (Tipodedatosdestino Origen Estilo)
o Tipodedatosdestino Siempre ha de ser tipo caraacutecter
o Origen Puede ser tipo fecha numeacuterico o moneda
o Estilo Opcional Es un coacutedigo que indica el formato en el que devuelve la cadena de
caracteres
Sintaxis
Convert (TipoDato Dato)
Cast (Dato as TipoDato)
Ejemplo
declare n intpalabra nvarchar(10)
set n = 1
set palabra =Nuacutemero
print convert(nvarchar(2)n) + + palabra
print cast(n as nvarchar(2)) + + palabra
while (nlt11)
begin
print convert(nvarchar(2)n) + + palabra
print cast(n as nvarchar(2)) + + palabra
set n = n + 1
end
DateName
Devuelve una cadena de caracteres que representa la parte de la fecha especificada de la fecha
especificada
Los caacutelculos 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
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 31
Ejemplo 46
Select IdPedido DateName (week FechaPedido) as Numero de Semana from Pedidos where IdPedido
= 1035251
Ejemplo 47
Select IdPedido datename (weekday FechaPedido) as Diacutea De Semana from Pedidos where IdPedido =
10352 Martes
Horas
Ejemplo 48
Select IdPedido datename (mi FechaPedido) as Minutos from Pedidos where IdPedido = 10352
Ejemplo 49
Select DateName (minute getdate ()) as minutos
Ejemplo 50
Select DateName (Hh FechaPedido) as hora from Pedidos where IdPedido = 10352
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 32
Ejemplo 51
Select DateName (Hour getdate ()) as hora--gt18
Ejemplo 52
Select DateName (Hh getdate ()) as hora--gt18
DatePart
Devuelve la parte de la fecha u hora indicada Sintaxis
Datepart (Valor devolver fecha)
Ejemplo 53
Select IdPedido datepart (mm FechaPedido) as Mes from Pedidos where IdPedido = 10352
Ejemplo 54
Select Datepart (Hh getdate ()) as Hora--gt17
Ejemplo 55
Select Datepart (mi getdate ()) as Minutos--gt54
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 33
Nombres de Fechas
Day (fecha)
Devuelve UN INT equivale a Datepart
Select day (getdate ()) as diacutea--gt6 (diacutea en la que se ejecuta la sentencia)
Select Datepart (dd getdate ()) --gt6 (diacutea en la que se ejecuta la sentencia)
Select Month (getdate ()) --gt1 (Mes en la que se ejecuta la sentencia)
Select Datepart (mm getdate ()) --gt1 (Mes en la que se ejecuta la sentencia)
Select Year (getdate ()) --gt2008 (Antildeo en la que se ejecuta la sentencia)
Ejemplo 56
Select year (FechaPedido) as Antildeo from Pedidos where IdPedido = 10352
Ejemplo 57
Select datediff (yyyy FechaPedido getdate()) as Dia from Pedidos where IdPedido = 10352
DateAdd
DateAdd (Datepart number date)
Antildeade un nuacutemero a la fecha puesta
DatePart es el formato de lo que queremos antildeadir
Number es el nuacutemero que queremos incrementar la fecha expuesta
Select convert (datetime1-1-02)
Select dateadd (dd 71-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 comparacioacuten y el tipo de dato
que nos devolveraacute antildeos diacuteas minutos etc
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 34
Ejemplo 58
Select datediff (yyyy FechaPedido getdate ()) as Dia from Pedidos where IdPedido = 10352
Ejercicios de funciones de Fecha
Ejemplo 59
Lista de pedidos emitidos en febrero de 1996
Select from Pedidos where month (FechaPedido) =2 and year (FechaPedido) =1996
Ejemplo 60
Lista de Pedidos mostrando la diferencia en diacuteas entre la fecha del pedido y la fecha de Envioacute
Select IdPedido FechaPedido FechaEnviacuteo diacuteas =datediff (day FechaPedido FechaEnviacuteo) from
pedidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 35
Ejemplo 61
Genere un listado de pedidos en el que la fecha del pedido se muestre en el formato nombre del
diacutea diacutea de mes antildeo
Select IdPedido FechaPedido Fecha=datename (dw IdPedido)+ + str (datepart (dd
IdPedido) 2)+ de +datename (mm IdPedido)+ de +str (datepart (yy IdPedido) 4) from
pedidos
Ejemplo 62
Mostrar de la tabla pedidos la fecha de pedidos en fecha corta
Select IdPedido convert (varchar (30) FechaPedido 106) as [Fecha Corta] from pedidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 36
FUNCIONES MATEMATICAS
ABS
Es el valor Absoluto
Select ABS (-4) as VALOR ABSOLUTO--gt4
CEILING
Devuelve el entero maacutes pequentildeo mayor o igual que la expresioacuten numeacuterica dada
Select CEILING (54) as CEILING--6
FLOOR
Devuelve el entero maacutes grande menor o igual que la expresioacuten numeacuterica dada
Select FLOOR (5) as FLOOR--gt5
POWER
Devuelve el valor de la expresioacuten indicada elevada a la potencia especificada
Select POWER (3 2) as 3 ELEVADO A 2--gt9
RAND
Devuelve un valor float aleatorio de 0 a 1
Las llamadas repetitivas de RAND() en una uacutenica consulta produciraacuten el mismo valor
Select RAND(6) as ALEATORIO--071368515806921451
Select RAND(6) as ALEATORIO--071368515806921451
Select RAND(4) as ALEATORIO--07136478921266981
Rand sobre los milisegundos actuales
Select RAND(DATEPART(msGETDATE())) as ALEATORIO--gt071443047691954253
Select RAND(999999999)--gt068504257551273573
ROUND
Devuelve una expresioacuten numeacuterica redondeada a la longitud o precisioacuten especificada
Round (Nuacutemero Redondeo del Nuacutemero)
ROUND siempre devuelve un valor Si length es un valor negativo y mayor que el nuacutemero de
diacutegitos anteriores al separador decimal ROUND devuelve 0
Select ROUND (1234567 2) --gt1234600
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 37
Select ROUND (1234567-2) --gt1000000
Select ROUND (1234567 0) --gt1230000
Select ROUND (1234567-3) ---gt0
SIGN
Devuelve el signo positivo (+1) cero (0) o negativo (-1) de la expresioacuten especificada
Dice el valor negativo positivo o neutro (0) del valor especificado
Select SIGN (-3) --gt-1
Select SIGN (3) --gt1
Select SIGN (0) --gt0
SQUARE
Devuelve el cuadrado de la expresioacuten especificada
Select SQUARE (4) as bdquoCuadrado‟--gt160
SQRT
Devuelve la raiacutez cuadrada de la expresioacuten especificada
Select SQRT (4) as [RAIZ CUADRADA] --gt20
FUNCIONES DE CADENA
ASCII
Devuelve el coacutedigo ASCII del caraacutecter maacutes a la izquierda de una expresioacuten de caracteres
Select ASCII(A)--gt65
Select ASCII(a)--gt97
Select ascii(aula)--gt97
CHAR
Una funcioacuten de cadena que convierte un coacutedigo ASCII int en un caraacutecter
select char(65)--gtA
select char(97)--gta
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 38
CHARINDEX
Devuelve la posicioacuten inicial de la expresioacuten especificada en una cadena de caracteres
CHARINDEX (expression1 expression2 [ start_location])
Argumentos
expression1
Es una expresioacuten que contiene la secuencia de caracteres que se desea buscar
Expression1 es una expresioacuten del tipo de cadenas cortas de caracteres
Expression2
Es una expresioacuten normalmente una columna
en la que se busca la cadena especificada
Expression2 es de la categoriacutea del tipo de datos cadena de caracteres
start_location
Es la posicioacuten del caraacutecter de expression2 en el que se empieza la buacutesqueda de expression1
Si no se especifica start_location es un nuacutemero negativo o es cero
la buacutesqueda empieza al principio de la cadena expression2
Si expression1 no se encuentra en expression2 CHARINDEX devuelve 0
Si alguno de los dos es null devuelve null
Select charindex (ciemurcielago) --gt4
Select charindex (ciemurcielago 2) --gt4
Select charindex (ciemurcielago 5) --gt0
Select charindex (ciemurcielago-6) --gt4
LEFT
Devuelve la parte de una cadena de caracteres que comienza en un nuacutemero de caracteres
especificado a partir de la izquierda
Select left (murcielago5) --gtmurci
RIGHT
Devuelve la parte de una cadena de caracteres que
Comienza en el nuacutemero de caracteres especificado
En integer_expression a partir de la derecha
Select right (hola que tal5) --gte tal
LEN
Cuenta el nuacutemero de caracteres que se incluyen en la cadena
Select len (murcieacutelago) --gt10
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 39
LOWER
Convierte a Minuacutesculas la cadena especificada
Select lower (MurcIELaGO) as [minusculas] --gtmurcielago
UPPER
Convierte a Mayuacutesculas la cadena especificada
Select upper (murcielago) as [MAYUSCULAS] --gtMURCIELAGO
RTRIM y LTRIM
Elimina los espacios que existen a la izquierda y a la derecha respectivamente
Select Rtrim ( murcieacutelago ) AS [SIN ESPACIOS] --gtmurcieacutelago
Select Ltrim ( murcieacutelago ) AS [SIN ESPACIOS] --gtmurcieacutelago
Select ltrim(rtrim( hola ))+
REPLACE
Reemplaza por una tercera expresioacuten todas las apariciones
de la segunda expresioacuten de cadena proporcionada en la primera expresioacuten de cadena
Select replace (hola que tal estasaA) --gtholA que tAl estAs
Select replace (buenos dias que tal estasuentildentildentilde) --gtbntildentildentildenos diasqntildentildentilde tal estas
SPACE
Coloca el nuacutemero de espacios que se le indiquen para entre una cadena de caracteres
Select hola+space(5)+que tal--gthola que tal
SUBSTRING
Devuelve parte de una expresioacuten de caracteres binaria de texto o de imagen
Sintaxis
SUBSTRING (Expresioacuten Comienzo Duracioacuten)
Argumentos
Expresioacuten
Es una cadena de caracteres cadena binaria texto imagen
Columna o expresioacuten que incluye una columna
No deben usarse expresiones que incluyan funciones de agregado
Start
Es un entero que especifica el punto en que comienza la subcadena
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 40
Length
Es un entero que especifica la longitud de la subcadena
(El nuacutemero de caracteres o bytes que se devuelven)
Select substring (murcielago 3 5) --gtrciel
Select substring (murcielago 3 len (murcielago)) --gtrciel
REVERSE
Devuelve invertida una expresioacuten de caraacutecter
Select reverse (hola)
REPLICATE
Repite una expresioacuten de caracteres un nuacutemero especificado de veces
Select replicate (murcielago 5)
Replicate replicate replicate replicate replicate
STUFF
Elimina el nuacutemero de caracteres especificados e insertados
Otro conjunto de caracteres en un punto de inicio indicado
Select STUFF (Murcieacutelago 2 3 ijklmn) Mijklmnielago
FUNCIONES DE SISTEMA
- APP_NAME () Devuelve el nombre de la aplicacioacuten actual
Select app_name () as [Nombre de la aplicacion]
- DATALENGTH (Expresioacuten) Devuelve un entero que es numero de bites necesarios para
representar esa expresioacuten int
Select datalength (Ninoni) as [Numero de bites]
- ISDATE (Expresioacuten) Dice si la expresioacuten es una fecha o no Devuelve 1 si la expresioacuten es
una fecha y 0 si no es una fecha
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 41
Select isdate (121001) as [Validacioacuten Fecha]
- ISNUMERIC (Expresion) Dice si la expresioacuten es un numero o no Devuelve 1 si la
expresioacuten es un nuacutemero y 0 si la expresioacuten no es nuacutemero
Select isnumeric (ddd) as [Validacion Numero]
- ISNULL (Expresioacuten ExpresionDevuelta) Si la expresioacuten es nula te devuelve la Expresioacuten
Devuelta y si no devuelve la primera Expresioacuten
Select isnull (nullNo nulo) as [Es Nulo]
- PARSENAME (bdquoNombreObjeto‟ ParteNombre)
ParteNombre es un valor de tipo Int que coge unos determinados valores del
NombreObjeto
1 Objeto
2 Propietario
3 Base de Datos
4 Servidor
Select parsename (saposeidondbopedidos1) as [Parte Expresioacuten]
Select parsename (saposeidondbopedidos 2) as [Parte Expresioacuten]
Select parsename (saposeidondbopedidos3) as [Parte Expresioacuten]
Select parsename ( saposeidondbopedidos 4) as [Parte Expresioacuten]
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 42
- SYSTEM_USER Devuelve el usuario del sistema actual
Depende de la autentificacioacuten con la que te hayas conectado
Select system_user as [Usuario conectado]
- USER_NAME() Devuelve el nombre del usuario actual
Select user_name ()
- COALESCE (expresioacuten1 expresioacuten2 )
Devuelve la primera expresioacuten no NULL
Si todos son NULL devuelve NULL
Select coalesce (PrecioUnidad Cantidad) from [detalles de Pedidos] Si el PrecioUnidad es nulo
devolveraacute la Cantidad y si los dos son nulos devolveraacute un campo Null
PROCEDIMIENTOS PARA AGRUPAR Y RESUMIR DATOS
En el examen de certificacioacuten 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 usaraacute la base de datos indicada Ejemplo Ponemos
en el analizador de consultas lo siguiente
Use Northwind
Select from [Order Details]
[Order Details]
Esta tabla perteneciente a la Northwind se encarga de manejar los pedidos
Order Id Nordm de Pedido
Producto Id Nordm de Producto
Ambos campos son Primary Key con lo que no puede haber una combinacioacuten de ambos campos que sea
igual
OrderId ProductId
1 A
1 B
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 43
1 C
2 A
3 C
Es decir en este caso no podriacutea existir una nueva combinacioacuten ldquo1 Ardquo o ldquo2 Ardquo
Quantity Es la cantidad del producto del pedido
ROLLUP
Se usa para presentar resuacutemenes de datos A de usarse junto con la clausula group by lo que hace es
realizar un resumen de los campos incluidos en el rollup
Ejemplo 63
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
Group by ProductID OrderID
with Rollup
Order by ProductID OrderID
Este ejemplo suma todas las cantidades y mediante
rollup muestra una fila con la suma de todas las
cantidades de cada producto y ademaacutes otra fila con la
suma de todas las cantidades de todos los productos El
resultado de este ejemplo seriacutea el que muestra la
imagen
Ejemplo 64
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
where orderid lt 10250
Group by ProductID OrderID
with Rollup
Order by ProductID OrderID
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 44
CUBE
Al igual que Rollup realiza resuacutemenes de campos agrupados Pero en este caso muestra un resumen con
cada combinacioacuten posible de los campos agrupados
Ejemplo 65
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
where orderid lt 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 combinacioacuten posible entre el
productid y el orderid
GROUPING
Indica si el resultado de un campo es el que hay en la propia tabla o se ha introducido mediante una
claacuteusula de resumen es decir para saber por ejemplo si un ldquoNullrdquo 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 lt 10250 Group by ProductID
OrderID with Cube Order by ProductID OrderID
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 45
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
Ponieacutendole un alias al
grouping saldriacutea el nombre
de columna que le
indiquemos
COMPUTE
Realiza un resumen en una columna aparte con el resultado de la funcioacuten de agregado indicada Su
formato seriacutea Compute funcioacuten(campo) No se puede utilizar en aplicaciones cliente servidor es una
clausula meramente informativa Tampoco se le pueden poner alias a los resuacutemenes
Ejemplo 67
Select Productid Orderid Quantity From [Order Details] order by ProductID Orderid compute
Sum(quantity)
Vemos que muestra la
columna con la suma
total de todas las
cantidades
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 46
Ejercicios de ROLLUP GROUPING y CUBE
Ejemplo 68
Realizar una consulta que resuma la cantidad de artiacuteculos pedidos por cada iacutendice de producto y
nuacutemero de pedido Realizando un caacutelculo acumulativo
select productid as [PRODUCTO] orderid as [Nordm PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] group by productid orderid with rollup order by productid orderid
PRODUCTO Nordm 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
hellip
Ejemplo 69
Modificacioacuten al ejercicio anterior Realizar el mismo resumen pero uacutenicamente para el producto
cuyo id es 50
select productid as [PRODUCTO] orderid as [Nordm PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] where productid = 50 group by productid orderid with rollup order by productid ordered
PRODUCTO Nordm 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
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 47
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 modificacioacuten 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 [Nordm PEDIDO] grouping(orderid) as [GRUPO PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] where productid = 50 group by Productidorderid with cube order by productidorderid
PRODUCTO GRUPO PRODUCTO Nordm PEDIDO GRUPO PEDIDO SUMA TOTAL
----------- -------------- ----------- ------------ -----------
NULL 1 NULL 1 235
NULL 1 10350 0 15
NULL 1 10383 0 15
NULL 1 10429 0 40
NULL 1 10465 0 25
NULL 1 10637 0 25
NULL 1 10729 0 40
NULL 1 10751 0 20
NULL 1 10920 0 24
NULL 1 10948 0 9
NULL 1 11072 0 22
50 0 NULL 1 235
50 0 10350 0 15
50 0 10383 0 15
50 0 10429 0 40
50 0 10465 0 25
50 0 10637 0 25
50 0 10729 0 40
50 0 10751 0 20
50 0 10920 0 24
50 0 10948 0 9
50 0 11072 0 22
(22 filas afectadas)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 48
Obtencioacuten de resuacutemenes 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 maacutes columnas y
luego efectuar alguna operacioacuten de resumen sobre cada grupo asiacute generado
La diferencia con GROUP BY es que permite mostrar informacioacuten mas detallada de cada grupo
Ejemplo 71
Lista de pedidos que muestre por coacutedigo de pedido la cantidad de productos vendidos por cada uno
de ellos
select Idpedidoidproductopreciounidadcantidad[Sub Total]=sum(PreciounidadCantidad) from
[detalles de pedidos] group by Idpedidoidproductopreciounidadcantidad order by IdPedido compute
sum(Cantidad) by IdPedido
EJERCICIOS CON COMPUTE
Ejemplo 72
Generar un resumen de subtotales en una consulta que devuelva el nuacutemero de pedido la cantidad
pedida para todos los orderid 11070
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 49
Select Orderid as [Nordm PEDIDO] Quantity AS [CANTIDAD] From [Order Details] where orderid gt= 11070 order by Orderid compute Sum(quantity) by orderid compute sum(quantity)
Nordm PEDIDO CANTIDAD
----------- --------
11070 40
11070 20
11070 30
11070 20
sum
===========
110
sum
===========
110
(6 filas afectadas)
Ejemplo 73
Generar un resumen con calculo de subtotales similar al anterior pero para los orderid 11075 y
11076
Select Orderid as [Nordm PEDIDO] Quantity as [CANTIDAD] From [Order Details] where orderid = 11075 or orderid = 11076 order by Orderid compute Sum(quantity) by ordered Nordm PEDIDO CANTIDAD ----------- -------- 11075 10 11075 30 11075 2 sum =========== 42 Nordm PEDIDO CANTIDAD ----------- -------- 11076 20 11076 20 11076 10
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 50
sum =========== 50 (8 filas afectadas)
Ejemplo 74
Modificacioacuten al ejercicio anterior Agregar la cantidad total y la cantidad promedio al final del
informe
Select Orderid as [Nordm 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)
Nordm PEDIDO CANTIDAD
----------- --------
11075 10
11075 30
11075 2
sum
===========
42
Nordm PEDIDO CANTIDAD
----------- --------
11076 20
11076 20
11076 10
sum
===========
50
sum
===========
92
avg
===========
15
(10 filas afectadas)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 51
Ejemplo 75
Seleccionar de forma agrupada por tipo todos los tipos la suma de los precios y la suma del
anticipo de la tabla tiacutetulos
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 199900 50000000
business 119500 50000000
business 29900 101250000
business 199900 50000000
sum
=====================
549200
avg
=====================
62812500
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
mod_cook 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
avg
=====================
75000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
popular_comp 229500 70000000
popular_comp 200000 80000000
popular_comp NULL NULL
sum
=====================
429500
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 52
avg
=====================
75000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
psychology 215900 70000000
psychology 109500 22750000
psychology 70000 60000000
psychology 199900 20000000
psychology 79900 40000000
sum
=====================
675200
avg
=====================
42550000
(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 ademaacutes 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 199900 50000000
business 119500 50000000
business 29900 101250000
business 199900 50000000
sum
=====================
549200
sum
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 53
=====================
251250000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
mod_cook 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
popular_comp 229500 70000000
popular_comp 200000 80000000
popular_comp NULL NULL
sum
=====================
429500
sum
=====================
150000000
(30 filas afectadas)
Ejemplo 77
Generar un informe que muestre la suma de los precios de los libros de psicologiacutea 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 109500
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 54
psychology 0736 70000
psychology 0736 199900
psychology 0736 79900
sum
=====================
459300
TIPO CODIGO EDITOR PRECIO
------------ ------------- ---------------------
psychology 0877 215900
sum
=====================
215900
(7 filas afectadas)
Ejemplo 78
Generar un informe que obtenga la suma de los precios de todos los libros de psicologiacutea asiacute como la
suma de los precios de los libros de psicologiacutea 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 109500
psychology 0736 70000
psychology 0736 199900
psychology 0736 79900
sum
=====================
459300
TIPO CODIGO EDITOR PRECIO
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 55
------------ ------------- ---------------------
psychology 0877 215900
sum
=====================
215900
sum
=====================
675200
(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 199900 0000
mod_cook 0877 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO CODIGO EDITOR PRECIO ANTICIPO
------------ ------------- --------------------- ---------------------
trad_cook 0877 119500 40000000
trad_cook 0877 209500 70000000
trad_cook 0877 149900 80000000
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 56
sum
=====================
478900
sum
=====================
190000000
(9 filas afectadas)
Ejemplo 80
Generar un informe que muestre todos los tiacutetulos precio y anticipo de aquellos tiacutetulos que tengan
un precio superior a 20 doacutelares Ofreceraacute tambieacuten la suma total del precio y del anticipo
Select title as [TITULO] price as [PRECIO] advance as [ANTICIPO] From titles where price gt 20 order by title compute sum(price) compute sum(advance)
TITULO PRECIO ANTICIPO
-------------------------------------------------------------------------------- --------------------- -------------
--------
But Is It User Friendly 229500 70000000
Computer Phobic AND Non-Phobic Individuals Behavior Variations 215900
70000000
Onions Leeks and Garlic Cooking Secrets of the Mediterranean 209500
70000000
sum
=====================
654900
sum
=====================
210000000
(5 filas afectadas)
Ejemplo 81
Generar un informe que muestre el precio el tipo y el nuacutemero de editor de la tabla titles de todos
aquellas obras que pertenezcan la categoriacutea de ldquobusinessrdquo Ademaacutes apareceraacute la suma total de
precios y el maacuteximo pub_id de esta seleccioacuten
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 57
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 29900 0736
business 199900 1389
business 199900 1389
business 119500 1389
sum
=====================
549200
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 Mostraraacute la suma de los precios y los anticipos por tipo y luego calcularaacute 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 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
trad_cook 209500 70000000
trad_cook 119500 40000000
trad_cook 149900 80000000
sum
=====================
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 58
478900
sum
=====================
190000000
sum
=====================
708700
sum
=====================
340000000
(11 filas afectadas)
Eliminacioacuten 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 iquestA que precio se ah vendido los productos
Select IdProducto Preciounidad from [Detalles de pedidos] order by IdProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 59
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 mayoriacutea de las consultas que se hacen en una base de datos requiere que se lean datos procedentes
de dos oacute maacutes tablas
INNER JOIN- son las filas que satisfacen la condicioacuten de la combinacioacuten
En la siguiente sentencia SQL enlaza 2 tablas la tabla clientes y la tabla pedidos en esta ejemplo me
muestra los campos nombre compantildeiacutea y el campo idpedido
La uacutenica condicioacuten es que las 2 tablas tengan un campo en comuacuten
Ejemplo 84
select clientesNombreCompantildeiacuteapedidosidpedido from clientes inner join pedidos on
clientesidcliente=pedidosidcliente
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 60
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 pedidosIdPedido pedidosIdCliente 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 pedidosIdPedido pedidosIdCliente order
by pedidos IdPedido
CROSS JOIN
Un Cross Join es la consulta correlacionada que combine cada una de las filas de una de las tablas con
todas las filas de la otra tabla
No es necesario que exista una columna en comuacuten para ejecutar el Cross Join
Ejemplo 86
La siguiente consulta combina cada una de las filas de la tabla categoriacuteas con cada una de las filas de la
tabla productos
select productosNombreProductocategoriasNombrecategoria from productos cross join categorias
order by productosNombreProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 61
Ejercicios de consultas Muacuteltiples
Ejemplo 87
Mostrar el pedidos completo con el id=10248
Select pedidosIdPedido pedidosIdCliente
Total=sum ([detalles de pedidos]Preciounidad[detalles de pedidos]Cantidad)
From [detalles de pedidos] inner join pedidos on
[Detalles de pedidos]IdPedido=pedidosIdPedido where pedidosIdPedido=10248
Group by pedidosIdPedido pedidosIdCliente
Ejemplo 88
1 Mostrar la cantidad de productos por categoriacutea
Select CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
[Total de Producto]=sum (UnidadesEnExistencia) from Categoriacuteas inner join
Productos on CategoriacuteasIdCategoriacutea=productosIdCategoriacutea
Group by CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 62
Ejemplo 89
Calcular cuantas ventas tiene cada uno de los vendedores
Select empleadosIdEmpleado empleadosNombre empleadosApellidos
[Total de ventas]=count (pedidosIdPedido) from empleados
Inner join Pedidos on empleadosIdEmpleado=pedidosIdEmpleado
Group by empleadosIdEmpleado empleadosNombre empleadosApellidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 63
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 despueacutes saca la de Plantilla
Recomendaciones a la hora de usar las combinaciones
Combinar tablas en funcioacuten de claves principales y externas
Limite el nuacutemero de tablas de las combinaciones
Select Apellido
Oficio as
OFICIOFUNCION
salario from emp
UNION
Select Apellido
Funcion Salario from
Plantilla
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 64
SUBCONSULTAS
Es una SELECT anidada en una instruccioacuten INSERT DELETE SELECT o UPDATE
Como una tabla derivada
Select eemp_no as Numero
eApellido
from (select emp_no apellido from emp) as e
Como una expresioacuten
Select emp_no as [Numero]
Apellido
Salario
(select avg(Salario) from emp)
as Diferencia
from emp
where oficio = Empleado
Para correlacionar datos
- Expresioacuten dinaacutemica que cambia en cada fila de una consulta externa
- Es una combinacioacuten entre la subconsulta y la fila de la consulta externa
- Dividen consultas complejas con dos o maacutes consultas simples relacionadas
Subconsulta correlacionada
Select apellido oficiodept_no
from emp as e
where 20 lt
(select dept_no from dept as d
where edept_no = ddept_no
and ddnombre = Ventas)
SUBCONSULTAS
1 Mostrar el numero de empleado el apellido y la fecha de alta del empleado mas antiguo de la
empresa
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 65
SELECT emp_noapellido
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_noapellido
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 Jimeacutenez
select apellido oficio from emp where
oficio = (select oficio from emp where apellido = JIMENEZ)
4 Queremos saber el apellido oficio salario y nuacutemero 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 gt (select max (salario) from
emp where dept_no = 30)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 66
5 Mostrar el apellido la funcioacuten sala o departamento de todos los empleados que trabajen en la
empresa
select eApellido eOficio as [Cargo en Empresa] ddnombre as [Oficina]
from emp as e
inner join dept as d
on edept_no = ddept_no
union
select pApellido pfuncion snombre
from plantilla as p
inner join sala as s
on phospital_cod = shospital_cod
and psala_cod = ssala_cod
union
select dApellido despecialidad hnombre
from doctor as d
inner join hospital as h
on dhospital_cod = hhospital_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 = lsquoventasrsquo))
order by 2
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 67
8 Mostrar los empleados que tienen mejor salario que la media de los directores no incluyendo al
presidente
Select from emp where salario gt
(select avg (salario) from emp where oficio = DIRECTOR)
and oficio ltgt PRESIDENTE
9 Mostrar el apellido funcioacuten salario y coacutedigo 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 = lsquoENFERMEROrsquo or
funcion = lsquoENFERMERArsquo) and hospital_cod = (select hospital_cod from hospital where nombre =
lsquoSAN CARLOSrsquo)
Select apellido funcion salario hospital_cod from plantilla where
funcion in (ENFERMEROENFERMERA)
and hospital_cod = (select hospital_cod from hospital
where nombre = SAN CARLOS)
10 Visualizar los datos de los hospitales que tienen personal (Doctores) de cardiologiacutea
Select from hospital where hospital_cod in (select hospital_cod from doctor where
especialidad = lsquoCardiologiacutearsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 68
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 = lsquoPROVINCIALrsquo or
nombre= lsquoGENERALrsquo)
12 Mostrar el apellido de los enfermos que nacieron antes que el Sentildeor Miller
Select apellido from enfermo where Fecha_nac lt (select fecha_nac from enfermo where
apellido = lsquoMILLER Brsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 69
Simulacion de una clausula JOIN
Vamos a mostrar los oficios que estaacuten en maacutes de un departamento
Select distinct e1oficio from emp as e1
where e1oficio in(Select e2oficio from emp as e2
where e1dept_no ltgt e2dept_no)
Se debe utilizar antes una combinacioacuten que una subconsulta la combinacioacuten seriacutea asi dando los
mismos resultados
Select distinct e1Oficio from emp as e1
inner join emp as e2
on e1oficio = e2oficio
where e1dept_no ltgt e2dept_no
Estos son los dos oficios que estaacuten en
maacutes de un departamento
Subconsulta para simular una clausula HAVING
select e1apellidoe1oficio e1salario
from emp as e1
where e1salario gt
(select avg(e2salario) from emp as e2
where e1oficio = e2oficio)
Esta es la consulta utilizando el HAVING que es la que deberiacuteamos utilizar antes que una
subconsulta de simulacioacuten HAVING
SELECT e1apellidoe1oficio e1salario
FROM emp AS e1
INNER JOIN emp AS e2
ON e1oficio = e2oficio
GROUP BY e1oficio e1salarioe1apellido
HAVING e1salario gt AVG (e2salario)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 70
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 15
EJEMPLO LIKE lsquoeenrsquo Muestra todos los caracteres que contengan een en ese orden
EJEMPLO LIKE lsquo_enrsquo Muestra todos los caracteres que contenga tres letras y acaben en en
EJEMPLO LIKE lsquo[CK ]rsquo Muestra todos los caracteres que empiecen por C o K
EJEMPLO LIKE lsquo[S-V]ingrsquo Nombre de 4 letras cuya primera letra estuviera entre S o V y acabe en
ing
EJEMPLO LIKE lsquoM[^c]rsquo Todos los que empiecen por M y segunda letra no sea una c No hay limite
de caracteres
BETWEEN- para seleccioacuten en base a un rango de valores Los valores pueden ser numeacutericos de
cana fechas y horas
In-Para seleccioacuten en base a un conjunto de valores los valores pueden ser numeacutericos de cadena
fechas y horas
Para estos ejemplos ah utilizado la base de datos con el nombre de Poseidoacuten y contiene las siguientes
tablas y campos
Ejemplo 10
Lista de productos cuyo nombre contenga la palabra vino
Use Poseidon
Go
Select from productos where nombreproducto like vino
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 16
Luego procedemos a ejecutar la aplicacioacuten
El siacutembolo representa a cualquier cadena de caracteres inclusive la cadena nula
Ejemplo 12
Lista de productos cuya primera letea empieza con la letra a
Select from productos where nombreproducto like [a]
Ejemplo 13
Lista de productos cuya primera letea empieza con la letra a y la tercera con la letra e
Select from productos where nombreproducto like [a][e]
Ejemplo 14
Lista de productos cuyo nombre empieza con cualquier caraacutecter que va en el rango de la M a la
T
Select from productos where nombreproducto like [m-t]
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 17
Ejemplo 15
Lista de productos cuyo nombre empieza con A ograve con cualquier caraacutecter en el rango que va de U
a la Ademaacutes el segundo caraacutecter no debe ser la letra r
Select from productos where nombreproducto like [^b-t][^r]
El Caraacutecter ^ significa incluir
El Caraacutecter representa cualquier cadena de caracteres inclusive la cadena nula
El Caraacutecter _ Representa cualquier caraacutecter 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 caraacutecter empiece con la letra e
Select from productos where nombreproducto like _e
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 18
Ejemplo 18
Lista de productos cuyo nombre empiece con C M Ograve R
Select from productos where nombreproducto like bdquo[cmr]
Ejemplo 19
Lista de productos cuyo nombre empiece con C M Ograve R El segundo Caraacutecter debe ser A
Select from productos where nombreproducto like bdquo[cmr] a
El comodiacuten [cmr] representa el conjunto de caracteres validos en la posicioacuten en la que
apareceraacute el comodiacuten
Ejemplo 20
Seleccionar todos los productos que termine con la letra Z
Select from productos where nombreproducto like z
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 19
Ejemplo 21
Mostrar todos los productos cuya cuarta letra sea A
Select from productos where nombreproducto like ___a
USO DEL OPERADOR BETWEEN
Permite seleccionar en base a un rango de valores
Ejemplo 22
Lista de productos cuyo precio se encuentra en el rango que va de 15 a 21 nuevos soles
Select from productos where preciounidad between 15 and 21
Ejemplo 23
Lista de productos cuyo nombre se encuentren en el rango de Cerveza y galletas
Select from productos where nombreproducto between cerveza and galletas
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 20
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 (londresPariacutesTokyo)
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 (preciounidadcantidad)019 as IGV
from [detalles de pedidos]
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 21
Ejemplo 27
Mostar los productos cuyo precio sea mayor a 40
Select from productos where Preciounidad gt 40
Ejemplo 28
Mostrar todos los datos de los Clientes ordenados por Ciudad
Select from clientes order by ciudad
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 22
Ejemplo 29
Mostrar todos los productos de la Categoriacutea 2
Select from productos where IdCategoriacutea=2
Ejemplo 30
Mostrar todos los pedidos realizados en la fecha 1996-06-05
Select from Pedidos where FechaPedido =1996-06-05
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 23
Ejemplo 31
Mostrar todos los pedidos mayores a la Fecha 1996-05-05
Select from Pedidos where FechaPedido gt 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 IdCategoriacutea no sea 3
Select from productos where IdCategoriacutealtgt 3
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 24
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 Categoriacutea (123)
Select from productos where IdCategoriacutea not in (1 2 3) order by IdProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 25
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
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 26
USO DE FUNCIONES
Podemos utilizar funciones para construir expresiones y generar columnas computadoras O condiciones
complejas
Funcioacuten de agregacioacuten
Son funciones que se utilizan para calcular valores en las tablas Si queremos usarlas
combinaacutendolas 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
expresioacuten HAVING Equivalente a where
Todos estos ejercicios han sido desarrollado con la base de datos Poseidoacuten
COUNT Cuenta los registros que hay en la consulta
Si pongo un valor dentro de la expresioacuten devolveraacute la cuenta de todos los
registros no nulos
Si pongo un asterisco contaraacute todos los registros aunque tengan valores
nulos
Select count () from Pedidos Valores con Nulos
Select count (FechaEnviacuteo) from Pedidos Valores sin nulos
AVG Realiza la media sobre la expresioacuten dada debe ser un tipo de dato
Int
Select avg(Preciounidad) from productos
MAX Saca el valor maacuteximo de una consulta
Select max (FechaPedido) from Pedidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 27
MIN Devuelve el valor miacutenimo 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 paiacutes Brasil mostrando el nuacutemero de los Factura con el paiacutes de
Destinatario Brasil
Select count () as [Numero de Facturas] PaiacutesDestinatario
Avg (Preciounidad) as [Precio Medio] from
Facturas group by PaiacutesDestinatario having PaiacutesDestinatario =Brasil
Ejemplo 39
Encontrar el precio maacutes alto mas bajo y la diferencia entre ambos de todos los productos con
IdCategoriacutea 2
Select IdCategoriacutea Max (Preciounidad) as [Precio mas alto] min(Preciounidad) as
[Precio mas Bajo] Max(Preciounidad) - min(Preciounidad) as [Diferencia entre Ambos]
from Productos group by IdCategoriacutea having IdCategoriacutea = 2
Ejemplo 40
Visualizar el nuacutemero de productos por Categoriacutea
Select IdCategoriacutea as [Nordm de Categoriacutea] Count (IdCategoriacutea) as [Nordm de Productos]
From Productos group by IdCategoriacutea
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 28
Ejemplo 41
Visualizar los clientes que vivan en las siguientes ciudades Londres Madrid y Barcelona
Select count () as [Nordm de personas] ciudad from clientes group by ciudad Having ciudad in
(londresMadridBarcelona) order by ciudad
Ejemplo 42
Lista de productos cuya venta allaacute sido mayor a 50000
Select IdProducto Monto=Sum (Preciounidad Cantidad) from [Detalles de pedidos] group
by IdProducto having Sum (Preciounidad Cantidad)gt50000 order by IdProducto
Ejemplo 43
Cuantos Clientes no tienen Fax
Select Count () as [Total de Clientes sin Fax] from clientes where fax is null
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 29
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
Funcioacuten Resultado
GETDATE() Retorna la fecha y hora del sistema
DATEADD(partefechanfecha) Retorna una nueva fecha antildeadiendo n
unidades de partefecha a fecha
DATEDIFF(parteFechafecha1fecha2) Retorna la diferencia en parteFecha entre
fecha1 y fecha2
DATENAME(partefechafecha) Retorna la cadena correspondiente a
partefecha en fecha
DATEPART(partefechafecha) Retorna el numero correspondiente a
partefecha y fecha
DAY(fecha) Retorna el numero correspondiente a la
parte del diacutea de fecha
MONTH(fecha) Retorna el numero correspondiente a la
parte del mes de fecha
YEAR(fecha) Retorna el numero correspondiente a la
parte del antildeo de fecha
GETUTCDATE() Retorna la fecha y hora del meridiano de
Greenwich
La siguiente tabla muestra los valores de partefecha que podemos utilizar
partefecha Abreviatura
Year Yy yyyy
Quarter Qq q
Month Mm m
Dayofyear Dy y
Day Dd d
Week Wk ww
weekday Dw
Hour Hh
minute Mi n
second Ss s
milisecond Ms
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 30
Getdate
Select getdate () Funcioacuten que recupera la fecha actual del sistema
Convert Cast
Convierten expliacutecitamente una expresioacuten de un tipo de datos en otro CAST y CONVERT
proporcionan funciones similares
Convert (Tipodedatosdestino Origen Estilo)
o Tipodedatosdestino Siempre ha de ser tipo caraacutecter
o Origen Puede ser tipo fecha numeacuterico o moneda
o Estilo Opcional Es un coacutedigo que indica el formato en el que devuelve la cadena de
caracteres
Sintaxis
Convert (TipoDato Dato)
Cast (Dato as TipoDato)
Ejemplo
declare n intpalabra nvarchar(10)
set n = 1
set palabra =Nuacutemero
print convert(nvarchar(2)n) + + palabra
print cast(n as nvarchar(2)) + + palabra
while (nlt11)
begin
print convert(nvarchar(2)n) + + palabra
print cast(n as nvarchar(2)) + + palabra
set n = n + 1
end
DateName
Devuelve una cadena de caracteres que representa la parte de la fecha especificada de la fecha
especificada
Los caacutelculos 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
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 31
Ejemplo 46
Select IdPedido DateName (week FechaPedido) as Numero de Semana from Pedidos where IdPedido
= 1035251
Ejemplo 47
Select IdPedido datename (weekday FechaPedido) as Diacutea De Semana from Pedidos where IdPedido =
10352 Martes
Horas
Ejemplo 48
Select IdPedido datename (mi FechaPedido) as Minutos from Pedidos where IdPedido = 10352
Ejemplo 49
Select DateName (minute getdate ()) as minutos
Ejemplo 50
Select DateName (Hh FechaPedido) as hora from Pedidos where IdPedido = 10352
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 32
Ejemplo 51
Select DateName (Hour getdate ()) as hora--gt18
Ejemplo 52
Select DateName (Hh getdate ()) as hora--gt18
DatePart
Devuelve la parte de la fecha u hora indicada Sintaxis
Datepart (Valor devolver fecha)
Ejemplo 53
Select IdPedido datepart (mm FechaPedido) as Mes from Pedidos where IdPedido = 10352
Ejemplo 54
Select Datepart (Hh getdate ()) as Hora--gt17
Ejemplo 55
Select Datepart (mi getdate ()) as Minutos--gt54
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 33
Nombres de Fechas
Day (fecha)
Devuelve UN INT equivale a Datepart
Select day (getdate ()) as diacutea--gt6 (diacutea en la que se ejecuta la sentencia)
Select Datepart (dd getdate ()) --gt6 (diacutea en la que se ejecuta la sentencia)
Select Month (getdate ()) --gt1 (Mes en la que se ejecuta la sentencia)
Select Datepart (mm getdate ()) --gt1 (Mes en la que se ejecuta la sentencia)
Select Year (getdate ()) --gt2008 (Antildeo en la que se ejecuta la sentencia)
Ejemplo 56
Select year (FechaPedido) as Antildeo from Pedidos where IdPedido = 10352
Ejemplo 57
Select datediff (yyyy FechaPedido getdate()) as Dia from Pedidos where IdPedido = 10352
DateAdd
DateAdd (Datepart number date)
Antildeade un nuacutemero a la fecha puesta
DatePart es el formato de lo que queremos antildeadir
Number es el nuacutemero que queremos incrementar la fecha expuesta
Select convert (datetime1-1-02)
Select dateadd (dd 71-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 comparacioacuten y el tipo de dato
que nos devolveraacute antildeos diacuteas minutos etc
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 34
Ejemplo 58
Select datediff (yyyy FechaPedido getdate ()) as Dia from Pedidos where IdPedido = 10352
Ejercicios de funciones de Fecha
Ejemplo 59
Lista de pedidos emitidos en febrero de 1996
Select from Pedidos where month (FechaPedido) =2 and year (FechaPedido) =1996
Ejemplo 60
Lista de Pedidos mostrando la diferencia en diacuteas entre la fecha del pedido y la fecha de Envioacute
Select IdPedido FechaPedido FechaEnviacuteo diacuteas =datediff (day FechaPedido FechaEnviacuteo) from
pedidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 35
Ejemplo 61
Genere un listado de pedidos en el que la fecha del pedido se muestre en el formato nombre del
diacutea diacutea de mes antildeo
Select IdPedido FechaPedido Fecha=datename (dw IdPedido)+ + str (datepart (dd
IdPedido) 2)+ de +datename (mm IdPedido)+ de +str (datepart (yy IdPedido) 4) from
pedidos
Ejemplo 62
Mostrar de la tabla pedidos la fecha de pedidos en fecha corta
Select IdPedido convert (varchar (30) FechaPedido 106) as [Fecha Corta] from pedidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 36
FUNCIONES MATEMATICAS
ABS
Es el valor Absoluto
Select ABS (-4) as VALOR ABSOLUTO--gt4
CEILING
Devuelve el entero maacutes pequentildeo mayor o igual que la expresioacuten numeacuterica dada
Select CEILING (54) as CEILING--6
FLOOR
Devuelve el entero maacutes grande menor o igual que la expresioacuten numeacuterica dada
Select FLOOR (5) as FLOOR--gt5
POWER
Devuelve el valor de la expresioacuten indicada elevada a la potencia especificada
Select POWER (3 2) as 3 ELEVADO A 2--gt9
RAND
Devuelve un valor float aleatorio de 0 a 1
Las llamadas repetitivas de RAND() en una uacutenica consulta produciraacuten el mismo valor
Select RAND(6) as ALEATORIO--071368515806921451
Select RAND(6) as ALEATORIO--071368515806921451
Select RAND(4) as ALEATORIO--07136478921266981
Rand sobre los milisegundos actuales
Select RAND(DATEPART(msGETDATE())) as ALEATORIO--gt071443047691954253
Select RAND(999999999)--gt068504257551273573
ROUND
Devuelve una expresioacuten numeacuterica redondeada a la longitud o precisioacuten especificada
Round (Nuacutemero Redondeo del Nuacutemero)
ROUND siempre devuelve un valor Si length es un valor negativo y mayor que el nuacutemero de
diacutegitos anteriores al separador decimal ROUND devuelve 0
Select ROUND (1234567 2) --gt1234600
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 37
Select ROUND (1234567-2) --gt1000000
Select ROUND (1234567 0) --gt1230000
Select ROUND (1234567-3) ---gt0
SIGN
Devuelve el signo positivo (+1) cero (0) o negativo (-1) de la expresioacuten especificada
Dice el valor negativo positivo o neutro (0) del valor especificado
Select SIGN (-3) --gt-1
Select SIGN (3) --gt1
Select SIGN (0) --gt0
SQUARE
Devuelve el cuadrado de la expresioacuten especificada
Select SQUARE (4) as bdquoCuadrado‟--gt160
SQRT
Devuelve la raiacutez cuadrada de la expresioacuten especificada
Select SQRT (4) as [RAIZ CUADRADA] --gt20
FUNCIONES DE CADENA
ASCII
Devuelve el coacutedigo ASCII del caraacutecter maacutes a la izquierda de una expresioacuten de caracteres
Select ASCII(A)--gt65
Select ASCII(a)--gt97
Select ascii(aula)--gt97
CHAR
Una funcioacuten de cadena que convierte un coacutedigo ASCII int en un caraacutecter
select char(65)--gtA
select char(97)--gta
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 38
CHARINDEX
Devuelve la posicioacuten inicial de la expresioacuten especificada en una cadena de caracteres
CHARINDEX (expression1 expression2 [ start_location])
Argumentos
expression1
Es una expresioacuten que contiene la secuencia de caracteres que se desea buscar
Expression1 es una expresioacuten del tipo de cadenas cortas de caracteres
Expression2
Es una expresioacuten normalmente una columna
en la que se busca la cadena especificada
Expression2 es de la categoriacutea del tipo de datos cadena de caracteres
start_location
Es la posicioacuten del caraacutecter de expression2 en el que se empieza la buacutesqueda de expression1
Si no se especifica start_location es un nuacutemero negativo o es cero
la buacutesqueda empieza al principio de la cadena expression2
Si expression1 no se encuentra en expression2 CHARINDEX devuelve 0
Si alguno de los dos es null devuelve null
Select charindex (ciemurcielago) --gt4
Select charindex (ciemurcielago 2) --gt4
Select charindex (ciemurcielago 5) --gt0
Select charindex (ciemurcielago-6) --gt4
LEFT
Devuelve la parte de una cadena de caracteres que comienza en un nuacutemero de caracteres
especificado a partir de la izquierda
Select left (murcielago5) --gtmurci
RIGHT
Devuelve la parte de una cadena de caracteres que
Comienza en el nuacutemero de caracteres especificado
En integer_expression a partir de la derecha
Select right (hola que tal5) --gte tal
LEN
Cuenta el nuacutemero de caracteres que se incluyen en la cadena
Select len (murcieacutelago) --gt10
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 39
LOWER
Convierte a Minuacutesculas la cadena especificada
Select lower (MurcIELaGO) as [minusculas] --gtmurcielago
UPPER
Convierte a Mayuacutesculas la cadena especificada
Select upper (murcielago) as [MAYUSCULAS] --gtMURCIELAGO
RTRIM y LTRIM
Elimina los espacios que existen a la izquierda y a la derecha respectivamente
Select Rtrim ( murcieacutelago ) AS [SIN ESPACIOS] --gtmurcieacutelago
Select Ltrim ( murcieacutelago ) AS [SIN ESPACIOS] --gtmurcieacutelago
Select ltrim(rtrim( hola ))+
REPLACE
Reemplaza por una tercera expresioacuten todas las apariciones
de la segunda expresioacuten de cadena proporcionada en la primera expresioacuten de cadena
Select replace (hola que tal estasaA) --gtholA que tAl estAs
Select replace (buenos dias que tal estasuentildentildentilde) --gtbntildentildentildenos diasqntildentildentilde tal estas
SPACE
Coloca el nuacutemero de espacios que se le indiquen para entre una cadena de caracteres
Select hola+space(5)+que tal--gthola que tal
SUBSTRING
Devuelve parte de una expresioacuten de caracteres binaria de texto o de imagen
Sintaxis
SUBSTRING (Expresioacuten Comienzo Duracioacuten)
Argumentos
Expresioacuten
Es una cadena de caracteres cadena binaria texto imagen
Columna o expresioacuten que incluye una columna
No deben usarse expresiones que incluyan funciones de agregado
Start
Es un entero que especifica el punto en que comienza la subcadena
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 40
Length
Es un entero que especifica la longitud de la subcadena
(El nuacutemero de caracteres o bytes que se devuelven)
Select substring (murcielago 3 5) --gtrciel
Select substring (murcielago 3 len (murcielago)) --gtrciel
REVERSE
Devuelve invertida una expresioacuten de caraacutecter
Select reverse (hola)
REPLICATE
Repite una expresioacuten de caracteres un nuacutemero especificado de veces
Select replicate (murcielago 5)
Replicate replicate replicate replicate replicate
STUFF
Elimina el nuacutemero de caracteres especificados e insertados
Otro conjunto de caracteres en un punto de inicio indicado
Select STUFF (Murcieacutelago 2 3 ijklmn) Mijklmnielago
FUNCIONES DE SISTEMA
- APP_NAME () Devuelve el nombre de la aplicacioacuten actual
Select app_name () as [Nombre de la aplicacion]
- DATALENGTH (Expresioacuten) Devuelve un entero que es numero de bites necesarios para
representar esa expresioacuten int
Select datalength (Ninoni) as [Numero de bites]
- ISDATE (Expresioacuten) Dice si la expresioacuten es una fecha o no Devuelve 1 si la expresioacuten es
una fecha y 0 si no es una fecha
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 41
Select isdate (121001) as [Validacioacuten Fecha]
- ISNUMERIC (Expresion) Dice si la expresioacuten es un numero o no Devuelve 1 si la
expresioacuten es un nuacutemero y 0 si la expresioacuten no es nuacutemero
Select isnumeric (ddd) as [Validacion Numero]
- ISNULL (Expresioacuten ExpresionDevuelta) Si la expresioacuten es nula te devuelve la Expresioacuten
Devuelta y si no devuelve la primera Expresioacuten
Select isnull (nullNo nulo) as [Es Nulo]
- PARSENAME (bdquoNombreObjeto‟ ParteNombre)
ParteNombre es un valor de tipo Int que coge unos determinados valores del
NombreObjeto
1 Objeto
2 Propietario
3 Base de Datos
4 Servidor
Select parsename (saposeidondbopedidos1) as [Parte Expresioacuten]
Select parsename (saposeidondbopedidos 2) as [Parte Expresioacuten]
Select parsename (saposeidondbopedidos3) as [Parte Expresioacuten]
Select parsename ( saposeidondbopedidos 4) as [Parte Expresioacuten]
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 42
- SYSTEM_USER Devuelve el usuario del sistema actual
Depende de la autentificacioacuten con la que te hayas conectado
Select system_user as [Usuario conectado]
- USER_NAME() Devuelve el nombre del usuario actual
Select user_name ()
- COALESCE (expresioacuten1 expresioacuten2 )
Devuelve la primera expresioacuten no NULL
Si todos son NULL devuelve NULL
Select coalesce (PrecioUnidad Cantidad) from [detalles de Pedidos] Si el PrecioUnidad es nulo
devolveraacute la Cantidad y si los dos son nulos devolveraacute un campo Null
PROCEDIMIENTOS PARA AGRUPAR Y RESUMIR DATOS
En el examen de certificacioacuten 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 usaraacute la base de datos indicada Ejemplo Ponemos
en el analizador de consultas lo siguiente
Use Northwind
Select from [Order Details]
[Order Details]
Esta tabla perteneciente a la Northwind se encarga de manejar los pedidos
Order Id Nordm de Pedido
Producto Id Nordm de Producto
Ambos campos son Primary Key con lo que no puede haber una combinacioacuten de ambos campos que sea
igual
OrderId ProductId
1 A
1 B
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 43
1 C
2 A
3 C
Es decir en este caso no podriacutea existir una nueva combinacioacuten ldquo1 Ardquo o ldquo2 Ardquo
Quantity Es la cantidad del producto del pedido
ROLLUP
Se usa para presentar resuacutemenes de datos A de usarse junto con la clausula group by lo que hace es
realizar un resumen de los campos incluidos en el rollup
Ejemplo 63
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
Group by ProductID OrderID
with Rollup
Order by ProductID OrderID
Este ejemplo suma todas las cantidades y mediante
rollup muestra una fila con la suma de todas las
cantidades de cada producto y ademaacutes otra fila con la
suma de todas las cantidades de todos los productos El
resultado de este ejemplo seriacutea el que muestra la
imagen
Ejemplo 64
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
where orderid lt 10250
Group by ProductID OrderID
with Rollup
Order by ProductID OrderID
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 44
CUBE
Al igual que Rollup realiza resuacutemenes de campos agrupados Pero en este caso muestra un resumen con
cada combinacioacuten posible de los campos agrupados
Ejemplo 65
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
where orderid lt 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 combinacioacuten posible entre el
productid y el orderid
GROUPING
Indica si el resultado de un campo es el que hay en la propia tabla o se ha introducido mediante una
claacuteusula de resumen es decir para saber por ejemplo si un ldquoNullrdquo 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 lt 10250 Group by ProductID
OrderID with Cube Order by ProductID OrderID
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 45
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
Ponieacutendole un alias al
grouping saldriacutea el nombre
de columna que le
indiquemos
COMPUTE
Realiza un resumen en una columna aparte con el resultado de la funcioacuten de agregado indicada Su
formato seriacutea Compute funcioacuten(campo) No se puede utilizar en aplicaciones cliente servidor es una
clausula meramente informativa Tampoco se le pueden poner alias a los resuacutemenes
Ejemplo 67
Select Productid Orderid Quantity From [Order Details] order by ProductID Orderid compute
Sum(quantity)
Vemos que muestra la
columna con la suma
total de todas las
cantidades
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 46
Ejercicios de ROLLUP GROUPING y CUBE
Ejemplo 68
Realizar una consulta que resuma la cantidad de artiacuteculos pedidos por cada iacutendice de producto y
nuacutemero de pedido Realizando un caacutelculo acumulativo
select productid as [PRODUCTO] orderid as [Nordm PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] group by productid orderid with rollup order by productid orderid
PRODUCTO Nordm 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
hellip
Ejemplo 69
Modificacioacuten al ejercicio anterior Realizar el mismo resumen pero uacutenicamente para el producto
cuyo id es 50
select productid as [PRODUCTO] orderid as [Nordm PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] where productid = 50 group by productid orderid with rollup order by productid ordered
PRODUCTO Nordm 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
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 47
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 modificacioacuten 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 [Nordm PEDIDO] grouping(orderid) as [GRUPO PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] where productid = 50 group by Productidorderid with cube order by productidorderid
PRODUCTO GRUPO PRODUCTO Nordm PEDIDO GRUPO PEDIDO SUMA TOTAL
----------- -------------- ----------- ------------ -----------
NULL 1 NULL 1 235
NULL 1 10350 0 15
NULL 1 10383 0 15
NULL 1 10429 0 40
NULL 1 10465 0 25
NULL 1 10637 0 25
NULL 1 10729 0 40
NULL 1 10751 0 20
NULL 1 10920 0 24
NULL 1 10948 0 9
NULL 1 11072 0 22
50 0 NULL 1 235
50 0 10350 0 15
50 0 10383 0 15
50 0 10429 0 40
50 0 10465 0 25
50 0 10637 0 25
50 0 10729 0 40
50 0 10751 0 20
50 0 10920 0 24
50 0 10948 0 9
50 0 11072 0 22
(22 filas afectadas)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 48
Obtencioacuten de resuacutemenes 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 maacutes columnas y
luego efectuar alguna operacioacuten de resumen sobre cada grupo asiacute generado
La diferencia con GROUP BY es que permite mostrar informacioacuten mas detallada de cada grupo
Ejemplo 71
Lista de pedidos que muestre por coacutedigo de pedido la cantidad de productos vendidos por cada uno
de ellos
select Idpedidoidproductopreciounidadcantidad[Sub Total]=sum(PreciounidadCantidad) from
[detalles de pedidos] group by Idpedidoidproductopreciounidadcantidad order by IdPedido compute
sum(Cantidad) by IdPedido
EJERCICIOS CON COMPUTE
Ejemplo 72
Generar un resumen de subtotales en una consulta que devuelva el nuacutemero de pedido la cantidad
pedida para todos los orderid 11070
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 49
Select Orderid as [Nordm PEDIDO] Quantity AS [CANTIDAD] From [Order Details] where orderid gt= 11070 order by Orderid compute Sum(quantity) by orderid compute sum(quantity)
Nordm PEDIDO CANTIDAD
----------- --------
11070 40
11070 20
11070 30
11070 20
sum
===========
110
sum
===========
110
(6 filas afectadas)
Ejemplo 73
Generar un resumen con calculo de subtotales similar al anterior pero para los orderid 11075 y
11076
Select Orderid as [Nordm PEDIDO] Quantity as [CANTIDAD] From [Order Details] where orderid = 11075 or orderid = 11076 order by Orderid compute Sum(quantity) by ordered Nordm PEDIDO CANTIDAD ----------- -------- 11075 10 11075 30 11075 2 sum =========== 42 Nordm PEDIDO CANTIDAD ----------- -------- 11076 20 11076 20 11076 10
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 50
sum =========== 50 (8 filas afectadas)
Ejemplo 74
Modificacioacuten al ejercicio anterior Agregar la cantidad total y la cantidad promedio al final del
informe
Select Orderid as [Nordm 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)
Nordm PEDIDO CANTIDAD
----------- --------
11075 10
11075 30
11075 2
sum
===========
42
Nordm PEDIDO CANTIDAD
----------- --------
11076 20
11076 20
11076 10
sum
===========
50
sum
===========
92
avg
===========
15
(10 filas afectadas)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 51
Ejemplo 75
Seleccionar de forma agrupada por tipo todos los tipos la suma de los precios y la suma del
anticipo de la tabla tiacutetulos
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 199900 50000000
business 119500 50000000
business 29900 101250000
business 199900 50000000
sum
=====================
549200
avg
=====================
62812500
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
mod_cook 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
avg
=====================
75000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
popular_comp 229500 70000000
popular_comp 200000 80000000
popular_comp NULL NULL
sum
=====================
429500
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 52
avg
=====================
75000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
psychology 215900 70000000
psychology 109500 22750000
psychology 70000 60000000
psychology 199900 20000000
psychology 79900 40000000
sum
=====================
675200
avg
=====================
42550000
(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 ademaacutes 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 199900 50000000
business 119500 50000000
business 29900 101250000
business 199900 50000000
sum
=====================
549200
sum
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 53
=====================
251250000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
mod_cook 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
popular_comp 229500 70000000
popular_comp 200000 80000000
popular_comp NULL NULL
sum
=====================
429500
sum
=====================
150000000
(30 filas afectadas)
Ejemplo 77
Generar un informe que muestre la suma de los precios de los libros de psicologiacutea 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 109500
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 54
psychology 0736 70000
psychology 0736 199900
psychology 0736 79900
sum
=====================
459300
TIPO CODIGO EDITOR PRECIO
------------ ------------- ---------------------
psychology 0877 215900
sum
=====================
215900
(7 filas afectadas)
Ejemplo 78
Generar un informe que obtenga la suma de los precios de todos los libros de psicologiacutea asiacute como la
suma de los precios de los libros de psicologiacutea 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 109500
psychology 0736 70000
psychology 0736 199900
psychology 0736 79900
sum
=====================
459300
TIPO CODIGO EDITOR PRECIO
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 55
------------ ------------- ---------------------
psychology 0877 215900
sum
=====================
215900
sum
=====================
675200
(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 199900 0000
mod_cook 0877 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO CODIGO EDITOR PRECIO ANTICIPO
------------ ------------- --------------------- ---------------------
trad_cook 0877 119500 40000000
trad_cook 0877 209500 70000000
trad_cook 0877 149900 80000000
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 56
sum
=====================
478900
sum
=====================
190000000
(9 filas afectadas)
Ejemplo 80
Generar un informe que muestre todos los tiacutetulos precio y anticipo de aquellos tiacutetulos que tengan
un precio superior a 20 doacutelares Ofreceraacute tambieacuten la suma total del precio y del anticipo
Select title as [TITULO] price as [PRECIO] advance as [ANTICIPO] From titles where price gt 20 order by title compute sum(price) compute sum(advance)
TITULO PRECIO ANTICIPO
-------------------------------------------------------------------------------- --------------------- -------------
--------
But Is It User Friendly 229500 70000000
Computer Phobic AND Non-Phobic Individuals Behavior Variations 215900
70000000
Onions Leeks and Garlic Cooking Secrets of the Mediterranean 209500
70000000
sum
=====================
654900
sum
=====================
210000000
(5 filas afectadas)
Ejemplo 81
Generar un informe que muestre el precio el tipo y el nuacutemero de editor de la tabla titles de todos
aquellas obras que pertenezcan la categoriacutea de ldquobusinessrdquo Ademaacutes apareceraacute la suma total de
precios y el maacuteximo pub_id de esta seleccioacuten
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 57
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 29900 0736
business 199900 1389
business 199900 1389
business 119500 1389
sum
=====================
549200
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 Mostraraacute la suma de los precios y los anticipos por tipo y luego calcularaacute 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 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
trad_cook 209500 70000000
trad_cook 119500 40000000
trad_cook 149900 80000000
sum
=====================
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 58
478900
sum
=====================
190000000
sum
=====================
708700
sum
=====================
340000000
(11 filas afectadas)
Eliminacioacuten 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 iquestA que precio se ah vendido los productos
Select IdProducto Preciounidad from [Detalles de pedidos] order by IdProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 59
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 mayoriacutea de las consultas que se hacen en una base de datos requiere que se lean datos procedentes
de dos oacute maacutes tablas
INNER JOIN- son las filas que satisfacen la condicioacuten de la combinacioacuten
En la siguiente sentencia SQL enlaza 2 tablas la tabla clientes y la tabla pedidos en esta ejemplo me
muestra los campos nombre compantildeiacutea y el campo idpedido
La uacutenica condicioacuten es que las 2 tablas tengan un campo en comuacuten
Ejemplo 84
select clientesNombreCompantildeiacuteapedidosidpedido from clientes inner join pedidos on
clientesidcliente=pedidosidcliente
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 60
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 pedidosIdPedido pedidosIdCliente 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 pedidosIdPedido pedidosIdCliente order
by pedidos IdPedido
CROSS JOIN
Un Cross Join es la consulta correlacionada que combine cada una de las filas de una de las tablas con
todas las filas de la otra tabla
No es necesario que exista una columna en comuacuten para ejecutar el Cross Join
Ejemplo 86
La siguiente consulta combina cada una de las filas de la tabla categoriacuteas con cada una de las filas de la
tabla productos
select productosNombreProductocategoriasNombrecategoria from productos cross join categorias
order by productosNombreProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 61
Ejercicios de consultas Muacuteltiples
Ejemplo 87
Mostrar el pedidos completo con el id=10248
Select pedidosIdPedido pedidosIdCliente
Total=sum ([detalles de pedidos]Preciounidad[detalles de pedidos]Cantidad)
From [detalles de pedidos] inner join pedidos on
[Detalles de pedidos]IdPedido=pedidosIdPedido where pedidosIdPedido=10248
Group by pedidosIdPedido pedidosIdCliente
Ejemplo 88
1 Mostrar la cantidad de productos por categoriacutea
Select CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
[Total de Producto]=sum (UnidadesEnExistencia) from Categoriacuteas inner join
Productos on CategoriacuteasIdCategoriacutea=productosIdCategoriacutea
Group by CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 62
Ejemplo 89
Calcular cuantas ventas tiene cada uno de los vendedores
Select empleadosIdEmpleado empleadosNombre empleadosApellidos
[Total de ventas]=count (pedidosIdPedido) from empleados
Inner join Pedidos on empleadosIdEmpleado=pedidosIdEmpleado
Group by empleadosIdEmpleado empleadosNombre empleadosApellidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 63
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 despueacutes saca la de Plantilla
Recomendaciones a la hora de usar las combinaciones
Combinar tablas en funcioacuten de claves principales y externas
Limite el nuacutemero de tablas de las combinaciones
Select Apellido
Oficio as
OFICIOFUNCION
salario from emp
UNION
Select Apellido
Funcion Salario from
Plantilla
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 64
SUBCONSULTAS
Es una SELECT anidada en una instruccioacuten INSERT DELETE SELECT o UPDATE
Como una tabla derivada
Select eemp_no as Numero
eApellido
from (select emp_no apellido from emp) as e
Como una expresioacuten
Select emp_no as [Numero]
Apellido
Salario
(select avg(Salario) from emp)
as Diferencia
from emp
where oficio = Empleado
Para correlacionar datos
- Expresioacuten dinaacutemica que cambia en cada fila de una consulta externa
- Es una combinacioacuten entre la subconsulta y la fila de la consulta externa
- Dividen consultas complejas con dos o maacutes consultas simples relacionadas
Subconsulta correlacionada
Select apellido oficiodept_no
from emp as e
where 20 lt
(select dept_no from dept as d
where edept_no = ddept_no
and ddnombre = Ventas)
SUBCONSULTAS
1 Mostrar el numero de empleado el apellido y la fecha de alta del empleado mas antiguo de la
empresa
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 65
SELECT emp_noapellido
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_noapellido
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 Jimeacutenez
select apellido oficio from emp where
oficio = (select oficio from emp where apellido = JIMENEZ)
4 Queremos saber el apellido oficio salario y nuacutemero 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 gt (select max (salario) from
emp where dept_no = 30)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 66
5 Mostrar el apellido la funcioacuten sala o departamento de todos los empleados que trabajen en la
empresa
select eApellido eOficio as [Cargo en Empresa] ddnombre as [Oficina]
from emp as e
inner join dept as d
on edept_no = ddept_no
union
select pApellido pfuncion snombre
from plantilla as p
inner join sala as s
on phospital_cod = shospital_cod
and psala_cod = ssala_cod
union
select dApellido despecialidad hnombre
from doctor as d
inner join hospital as h
on dhospital_cod = hhospital_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 = lsquoventasrsquo))
order by 2
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 67
8 Mostrar los empleados que tienen mejor salario que la media de los directores no incluyendo al
presidente
Select from emp where salario gt
(select avg (salario) from emp where oficio = DIRECTOR)
and oficio ltgt PRESIDENTE
9 Mostrar el apellido funcioacuten salario y coacutedigo 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 = lsquoENFERMEROrsquo or
funcion = lsquoENFERMERArsquo) and hospital_cod = (select hospital_cod from hospital where nombre =
lsquoSAN CARLOSrsquo)
Select apellido funcion salario hospital_cod from plantilla where
funcion in (ENFERMEROENFERMERA)
and hospital_cod = (select hospital_cod from hospital
where nombre = SAN CARLOS)
10 Visualizar los datos de los hospitales que tienen personal (Doctores) de cardiologiacutea
Select from hospital where hospital_cod in (select hospital_cod from doctor where
especialidad = lsquoCardiologiacutearsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 68
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 = lsquoPROVINCIALrsquo or
nombre= lsquoGENERALrsquo)
12 Mostrar el apellido de los enfermos que nacieron antes que el Sentildeor Miller
Select apellido from enfermo where Fecha_nac lt (select fecha_nac from enfermo where
apellido = lsquoMILLER Brsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 69
Simulacion de una clausula JOIN
Vamos a mostrar los oficios que estaacuten en maacutes de un departamento
Select distinct e1oficio from emp as e1
where e1oficio in(Select e2oficio from emp as e2
where e1dept_no ltgt e2dept_no)
Se debe utilizar antes una combinacioacuten que una subconsulta la combinacioacuten seriacutea asi dando los
mismos resultados
Select distinct e1Oficio from emp as e1
inner join emp as e2
on e1oficio = e2oficio
where e1dept_no ltgt e2dept_no
Estos son los dos oficios que estaacuten en
maacutes de un departamento
Subconsulta para simular una clausula HAVING
select e1apellidoe1oficio e1salario
from emp as e1
where e1salario gt
(select avg(e2salario) from emp as e2
where e1oficio = e2oficio)
Esta es la consulta utilizando el HAVING que es la que deberiacuteamos utilizar antes que una
subconsulta de simulacioacuten HAVING
SELECT e1apellidoe1oficio e1salario
FROM emp AS e1
INNER JOIN emp AS e2
ON e1oficio = e2oficio
GROUP BY e1oficio e1salarioe1apellido
HAVING e1salario gt AVG (e2salario)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 70
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 16
Luego procedemos a ejecutar la aplicacioacuten
El siacutembolo representa a cualquier cadena de caracteres inclusive la cadena nula
Ejemplo 12
Lista de productos cuya primera letea empieza con la letra a
Select from productos where nombreproducto like [a]
Ejemplo 13
Lista de productos cuya primera letea empieza con la letra a y la tercera con la letra e
Select from productos where nombreproducto like [a][e]
Ejemplo 14
Lista de productos cuyo nombre empieza con cualquier caraacutecter que va en el rango de la M a la
T
Select from productos where nombreproducto like [m-t]
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 17
Ejemplo 15
Lista de productos cuyo nombre empieza con A ograve con cualquier caraacutecter en el rango que va de U
a la Ademaacutes el segundo caraacutecter no debe ser la letra r
Select from productos where nombreproducto like [^b-t][^r]
El Caraacutecter ^ significa incluir
El Caraacutecter representa cualquier cadena de caracteres inclusive la cadena nula
El Caraacutecter _ Representa cualquier caraacutecter 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 caraacutecter empiece con la letra e
Select from productos where nombreproducto like _e
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 18
Ejemplo 18
Lista de productos cuyo nombre empiece con C M Ograve R
Select from productos where nombreproducto like bdquo[cmr]
Ejemplo 19
Lista de productos cuyo nombre empiece con C M Ograve R El segundo Caraacutecter debe ser A
Select from productos where nombreproducto like bdquo[cmr] a
El comodiacuten [cmr] representa el conjunto de caracteres validos en la posicioacuten en la que
apareceraacute el comodiacuten
Ejemplo 20
Seleccionar todos los productos que termine con la letra Z
Select from productos where nombreproducto like z
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 19
Ejemplo 21
Mostrar todos los productos cuya cuarta letra sea A
Select from productos where nombreproducto like ___a
USO DEL OPERADOR BETWEEN
Permite seleccionar en base a un rango de valores
Ejemplo 22
Lista de productos cuyo precio se encuentra en el rango que va de 15 a 21 nuevos soles
Select from productos where preciounidad between 15 and 21
Ejemplo 23
Lista de productos cuyo nombre se encuentren en el rango de Cerveza y galletas
Select from productos where nombreproducto between cerveza and galletas
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 20
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 (londresPariacutesTokyo)
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 (preciounidadcantidad)019 as IGV
from [detalles de pedidos]
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 21
Ejemplo 27
Mostar los productos cuyo precio sea mayor a 40
Select from productos where Preciounidad gt 40
Ejemplo 28
Mostrar todos los datos de los Clientes ordenados por Ciudad
Select from clientes order by ciudad
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 22
Ejemplo 29
Mostrar todos los productos de la Categoriacutea 2
Select from productos where IdCategoriacutea=2
Ejemplo 30
Mostrar todos los pedidos realizados en la fecha 1996-06-05
Select from Pedidos where FechaPedido =1996-06-05
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 23
Ejemplo 31
Mostrar todos los pedidos mayores a la Fecha 1996-05-05
Select from Pedidos where FechaPedido gt 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 IdCategoriacutea no sea 3
Select from productos where IdCategoriacutealtgt 3
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 24
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 Categoriacutea (123)
Select from productos where IdCategoriacutea not in (1 2 3) order by IdProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 25
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
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 26
USO DE FUNCIONES
Podemos utilizar funciones para construir expresiones y generar columnas computadoras O condiciones
complejas
Funcioacuten de agregacioacuten
Son funciones que se utilizan para calcular valores en las tablas Si queremos usarlas
combinaacutendolas 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
expresioacuten HAVING Equivalente a where
Todos estos ejercicios han sido desarrollado con la base de datos Poseidoacuten
COUNT Cuenta los registros que hay en la consulta
Si pongo un valor dentro de la expresioacuten devolveraacute la cuenta de todos los
registros no nulos
Si pongo un asterisco contaraacute todos los registros aunque tengan valores
nulos
Select count () from Pedidos Valores con Nulos
Select count (FechaEnviacuteo) from Pedidos Valores sin nulos
AVG Realiza la media sobre la expresioacuten dada debe ser un tipo de dato
Int
Select avg(Preciounidad) from productos
MAX Saca el valor maacuteximo de una consulta
Select max (FechaPedido) from Pedidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 27
MIN Devuelve el valor miacutenimo 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 paiacutes Brasil mostrando el nuacutemero de los Factura con el paiacutes de
Destinatario Brasil
Select count () as [Numero de Facturas] PaiacutesDestinatario
Avg (Preciounidad) as [Precio Medio] from
Facturas group by PaiacutesDestinatario having PaiacutesDestinatario =Brasil
Ejemplo 39
Encontrar el precio maacutes alto mas bajo y la diferencia entre ambos de todos los productos con
IdCategoriacutea 2
Select IdCategoriacutea Max (Preciounidad) as [Precio mas alto] min(Preciounidad) as
[Precio mas Bajo] Max(Preciounidad) - min(Preciounidad) as [Diferencia entre Ambos]
from Productos group by IdCategoriacutea having IdCategoriacutea = 2
Ejemplo 40
Visualizar el nuacutemero de productos por Categoriacutea
Select IdCategoriacutea as [Nordm de Categoriacutea] Count (IdCategoriacutea) as [Nordm de Productos]
From Productos group by IdCategoriacutea
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 28
Ejemplo 41
Visualizar los clientes que vivan en las siguientes ciudades Londres Madrid y Barcelona
Select count () as [Nordm de personas] ciudad from clientes group by ciudad Having ciudad in
(londresMadridBarcelona) order by ciudad
Ejemplo 42
Lista de productos cuya venta allaacute sido mayor a 50000
Select IdProducto Monto=Sum (Preciounidad Cantidad) from [Detalles de pedidos] group
by IdProducto having Sum (Preciounidad Cantidad)gt50000 order by IdProducto
Ejemplo 43
Cuantos Clientes no tienen Fax
Select Count () as [Total de Clientes sin Fax] from clientes where fax is null
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 29
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
Funcioacuten Resultado
GETDATE() Retorna la fecha y hora del sistema
DATEADD(partefechanfecha) Retorna una nueva fecha antildeadiendo n
unidades de partefecha a fecha
DATEDIFF(parteFechafecha1fecha2) Retorna la diferencia en parteFecha entre
fecha1 y fecha2
DATENAME(partefechafecha) Retorna la cadena correspondiente a
partefecha en fecha
DATEPART(partefechafecha) Retorna el numero correspondiente a
partefecha y fecha
DAY(fecha) Retorna el numero correspondiente a la
parte del diacutea de fecha
MONTH(fecha) Retorna el numero correspondiente a la
parte del mes de fecha
YEAR(fecha) Retorna el numero correspondiente a la
parte del antildeo de fecha
GETUTCDATE() Retorna la fecha y hora del meridiano de
Greenwich
La siguiente tabla muestra los valores de partefecha que podemos utilizar
partefecha Abreviatura
Year Yy yyyy
Quarter Qq q
Month Mm m
Dayofyear Dy y
Day Dd d
Week Wk ww
weekday Dw
Hour Hh
minute Mi n
second Ss s
milisecond Ms
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 30
Getdate
Select getdate () Funcioacuten que recupera la fecha actual del sistema
Convert Cast
Convierten expliacutecitamente una expresioacuten de un tipo de datos en otro CAST y CONVERT
proporcionan funciones similares
Convert (Tipodedatosdestino Origen Estilo)
o Tipodedatosdestino Siempre ha de ser tipo caraacutecter
o Origen Puede ser tipo fecha numeacuterico o moneda
o Estilo Opcional Es un coacutedigo que indica el formato en el que devuelve la cadena de
caracteres
Sintaxis
Convert (TipoDato Dato)
Cast (Dato as TipoDato)
Ejemplo
declare n intpalabra nvarchar(10)
set n = 1
set palabra =Nuacutemero
print convert(nvarchar(2)n) + + palabra
print cast(n as nvarchar(2)) + + palabra
while (nlt11)
begin
print convert(nvarchar(2)n) + + palabra
print cast(n as nvarchar(2)) + + palabra
set n = n + 1
end
DateName
Devuelve una cadena de caracteres que representa la parte de la fecha especificada de la fecha
especificada
Los caacutelculos 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
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 31
Ejemplo 46
Select IdPedido DateName (week FechaPedido) as Numero de Semana from Pedidos where IdPedido
= 1035251
Ejemplo 47
Select IdPedido datename (weekday FechaPedido) as Diacutea De Semana from Pedidos where IdPedido =
10352 Martes
Horas
Ejemplo 48
Select IdPedido datename (mi FechaPedido) as Minutos from Pedidos where IdPedido = 10352
Ejemplo 49
Select DateName (minute getdate ()) as minutos
Ejemplo 50
Select DateName (Hh FechaPedido) as hora from Pedidos where IdPedido = 10352
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 32
Ejemplo 51
Select DateName (Hour getdate ()) as hora--gt18
Ejemplo 52
Select DateName (Hh getdate ()) as hora--gt18
DatePart
Devuelve la parte de la fecha u hora indicada Sintaxis
Datepart (Valor devolver fecha)
Ejemplo 53
Select IdPedido datepart (mm FechaPedido) as Mes from Pedidos where IdPedido = 10352
Ejemplo 54
Select Datepart (Hh getdate ()) as Hora--gt17
Ejemplo 55
Select Datepart (mi getdate ()) as Minutos--gt54
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 33
Nombres de Fechas
Day (fecha)
Devuelve UN INT equivale a Datepart
Select day (getdate ()) as diacutea--gt6 (diacutea en la que se ejecuta la sentencia)
Select Datepart (dd getdate ()) --gt6 (diacutea en la que se ejecuta la sentencia)
Select Month (getdate ()) --gt1 (Mes en la que se ejecuta la sentencia)
Select Datepart (mm getdate ()) --gt1 (Mes en la que se ejecuta la sentencia)
Select Year (getdate ()) --gt2008 (Antildeo en la que se ejecuta la sentencia)
Ejemplo 56
Select year (FechaPedido) as Antildeo from Pedidos where IdPedido = 10352
Ejemplo 57
Select datediff (yyyy FechaPedido getdate()) as Dia from Pedidos where IdPedido = 10352
DateAdd
DateAdd (Datepart number date)
Antildeade un nuacutemero a la fecha puesta
DatePart es el formato de lo que queremos antildeadir
Number es el nuacutemero que queremos incrementar la fecha expuesta
Select convert (datetime1-1-02)
Select dateadd (dd 71-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 comparacioacuten y el tipo de dato
que nos devolveraacute antildeos diacuteas minutos etc
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 34
Ejemplo 58
Select datediff (yyyy FechaPedido getdate ()) as Dia from Pedidos where IdPedido = 10352
Ejercicios de funciones de Fecha
Ejemplo 59
Lista de pedidos emitidos en febrero de 1996
Select from Pedidos where month (FechaPedido) =2 and year (FechaPedido) =1996
Ejemplo 60
Lista de Pedidos mostrando la diferencia en diacuteas entre la fecha del pedido y la fecha de Envioacute
Select IdPedido FechaPedido FechaEnviacuteo diacuteas =datediff (day FechaPedido FechaEnviacuteo) from
pedidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 35
Ejemplo 61
Genere un listado de pedidos en el que la fecha del pedido se muestre en el formato nombre del
diacutea diacutea de mes antildeo
Select IdPedido FechaPedido Fecha=datename (dw IdPedido)+ + str (datepart (dd
IdPedido) 2)+ de +datename (mm IdPedido)+ de +str (datepart (yy IdPedido) 4) from
pedidos
Ejemplo 62
Mostrar de la tabla pedidos la fecha de pedidos en fecha corta
Select IdPedido convert (varchar (30) FechaPedido 106) as [Fecha Corta] from pedidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 36
FUNCIONES MATEMATICAS
ABS
Es el valor Absoluto
Select ABS (-4) as VALOR ABSOLUTO--gt4
CEILING
Devuelve el entero maacutes pequentildeo mayor o igual que la expresioacuten numeacuterica dada
Select CEILING (54) as CEILING--6
FLOOR
Devuelve el entero maacutes grande menor o igual que la expresioacuten numeacuterica dada
Select FLOOR (5) as FLOOR--gt5
POWER
Devuelve el valor de la expresioacuten indicada elevada a la potencia especificada
Select POWER (3 2) as 3 ELEVADO A 2--gt9
RAND
Devuelve un valor float aleatorio de 0 a 1
Las llamadas repetitivas de RAND() en una uacutenica consulta produciraacuten el mismo valor
Select RAND(6) as ALEATORIO--071368515806921451
Select RAND(6) as ALEATORIO--071368515806921451
Select RAND(4) as ALEATORIO--07136478921266981
Rand sobre los milisegundos actuales
Select RAND(DATEPART(msGETDATE())) as ALEATORIO--gt071443047691954253
Select RAND(999999999)--gt068504257551273573
ROUND
Devuelve una expresioacuten numeacuterica redondeada a la longitud o precisioacuten especificada
Round (Nuacutemero Redondeo del Nuacutemero)
ROUND siempre devuelve un valor Si length es un valor negativo y mayor que el nuacutemero de
diacutegitos anteriores al separador decimal ROUND devuelve 0
Select ROUND (1234567 2) --gt1234600
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 37
Select ROUND (1234567-2) --gt1000000
Select ROUND (1234567 0) --gt1230000
Select ROUND (1234567-3) ---gt0
SIGN
Devuelve el signo positivo (+1) cero (0) o negativo (-1) de la expresioacuten especificada
Dice el valor negativo positivo o neutro (0) del valor especificado
Select SIGN (-3) --gt-1
Select SIGN (3) --gt1
Select SIGN (0) --gt0
SQUARE
Devuelve el cuadrado de la expresioacuten especificada
Select SQUARE (4) as bdquoCuadrado‟--gt160
SQRT
Devuelve la raiacutez cuadrada de la expresioacuten especificada
Select SQRT (4) as [RAIZ CUADRADA] --gt20
FUNCIONES DE CADENA
ASCII
Devuelve el coacutedigo ASCII del caraacutecter maacutes a la izquierda de una expresioacuten de caracteres
Select ASCII(A)--gt65
Select ASCII(a)--gt97
Select ascii(aula)--gt97
CHAR
Una funcioacuten de cadena que convierte un coacutedigo ASCII int en un caraacutecter
select char(65)--gtA
select char(97)--gta
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 38
CHARINDEX
Devuelve la posicioacuten inicial de la expresioacuten especificada en una cadena de caracteres
CHARINDEX (expression1 expression2 [ start_location])
Argumentos
expression1
Es una expresioacuten que contiene la secuencia de caracteres que se desea buscar
Expression1 es una expresioacuten del tipo de cadenas cortas de caracteres
Expression2
Es una expresioacuten normalmente una columna
en la que se busca la cadena especificada
Expression2 es de la categoriacutea del tipo de datos cadena de caracteres
start_location
Es la posicioacuten del caraacutecter de expression2 en el que se empieza la buacutesqueda de expression1
Si no se especifica start_location es un nuacutemero negativo o es cero
la buacutesqueda empieza al principio de la cadena expression2
Si expression1 no se encuentra en expression2 CHARINDEX devuelve 0
Si alguno de los dos es null devuelve null
Select charindex (ciemurcielago) --gt4
Select charindex (ciemurcielago 2) --gt4
Select charindex (ciemurcielago 5) --gt0
Select charindex (ciemurcielago-6) --gt4
LEFT
Devuelve la parte de una cadena de caracteres que comienza en un nuacutemero de caracteres
especificado a partir de la izquierda
Select left (murcielago5) --gtmurci
RIGHT
Devuelve la parte de una cadena de caracteres que
Comienza en el nuacutemero de caracteres especificado
En integer_expression a partir de la derecha
Select right (hola que tal5) --gte tal
LEN
Cuenta el nuacutemero de caracteres que se incluyen en la cadena
Select len (murcieacutelago) --gt10
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 39
LOWER
Convierte a Minuacutesculas la cadena especificada
Select lower (MurcIELaGO) as [minusculas] --gtmurcielago
UPPER
Convierte a Mayuacutesculas la cadena especificada
Select upper (murcielago) as [MAYUSCULAS] --gtMURCIELAGO
RTRIM y LTRIM
Elimina los espacios que existen a la izquierda y a la derecha respectivamente
Select Rtrim ( murcieacutelago ) AS [SIN ESPACIOS] --gtmurcieacutelago
Select Ltrim ( murcieacutelago ) AS [SIN ESPACIOS] --gtmurcieacutelago
Select ltrim(rtrim( hola ))+
REPLACE
Reemplaza por una tercera expresioacuten todas las apariciones
de la segunda expresioacuten de cadena proporcionada en la primera expresioacuten de cadena
Select replace (hola que tal estasaA) --gtholA que tAl estAs
Select replace (buenos dias que tal estasuentildentildentilde) --gtbntildentildentildenos diasqntildentildentilde tal estas
SPACE
Coloca el nuacutemero de espacios que se le indiquen para entre una cadena de caracteres
Select hola+space(5)+que tal--gthola que tal
SUBSTRING
Devuelve parte de una expresioacuten de caracteres binaria de texto o de imagen
Sintaxis
SUBSTRING (Expresioacuten Comienzo Duracioacuten)
Argumentos
Expresioacuten
Es una cadena de caracteres cadena binaria texto imagen
Columna o expresioacuten que incluye una columna
No deben usarse expresiones que incluyan funciones de agregado
Start
Es un entero que especifica el punto en que comienza la subcadena
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 40
Length
Es un entero que especifica la longitud de la subcadena
(El nuacutemero de caracteres o bytes que se devuelven)
Select substring (murcielago 3 5) --gtrciel
Select substring (murcielago 3 len (murcielago)) --gtrciel
REVERSE
Devuelve invertida una expresioacuten de caraacutecter
Select reverse (hola)
REPLICATE
Repite una expresioacuten de caracteres un nuacutemero especificado de veces
Select replicate (murcielago 5)
Replicate replicate replicate replicate replicate
STUFF
Elimina el nuacutemero de caracteres especificados e insertados
Otro conjunto de caracteres en un punto de inicio indicado
Select STUFF (Murcieacutelago 2 3 ijklmn) Mijklmnielago
FUNCIONES DE SISTEMA
- APP_NAME () Devuelve el nombre de la aplicacioacuten actual
Select app_name () as [Nombre de la aplicacion]
- DATALENGTH (Expresioacuten) Devuelve un entero que es numero de bites necesarios para
representar esa expresioacuten int
Select datalength (Ninoni) as [Numero de bites]
- ISDATE (Expresioacuten) Dice si la expresioacuten es una fecha o no Devuelve 1 si la expresioacuten es
una fecha y 0 si no es una fecha
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 41
Select isdate (121001) as [Validacioacuten Fecha]
- ISNUMERIC (Expresion) Dice si la expresioacuten es un numero o no Devuelve 1 si la
expresioacuten es un nuacutemero y 0 si la expresioacuten no es nuacutemero
Select isnumeric (ddd) as [Validacion Numero]
- ISNULL (Expresioacuten ExpresionDevuelta) Si la expresioacuten es nula te devuelve la Expresioacuten
Devuelta y si no devuelve la primera Expresioacuten
Select isnull (nullNo nulo) as [Es Nulo]
- PARSENAME (bdquoNombreObjeto‟ ParteNombre)
ParteNombre es un valor de tipo Int que coge unos determinados valores del
NombreObjeto
1 Objeto
2 Propietario
3 Base de Datos
4 Servidor
Select parsename (saposeidondbopedidos1) as [Parte Expresioacuten]
Select parsename (saposeidondbopedidos 2) as [Parte Expresioacuten]
Select parsename (saposeidondbopedidos3) as [Parte Expresioacuten]
Select parsename ( saposeidondbopedidos 4) as [Parte Expresioacuten]
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 42
- SYSTEM_USER Devuelve el usuario del sistema actual
Depende de la autentificacioacuten con la que te hayas conectado
Select system_user as [Usuario conectado]
- USER_NAME() Devuelve el nombre del usuario actual
Select user_name ()
- COALESCE (expresioacuten1 expresioacuten2 )
Devuelve la primera expresioacuten no NULL
Si todos son NULL devuelve NULL
Select coalesce (PrecioUnidad Cantidad) from [detalles de Pedidos] Si el PrecioUnidad es nulo
devolveraacute la Cantidad y si los dos son nulos devolveraacute un campo Null
PROCEDIMIENTOS PARA AGRUPAR Y RESUMIR DATOS
En el examen de certificacioacuten 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 usaraacute la base de datos indicada Ejemplo Ponemos
en el analizador de consultas lo siguiente
Use Northwind
Select from [Order Details]
[Order Details]
Esta tabla perteneciente a la Northwind se encarga de manejar los pedidos
Order Id Nordm de Pedido
Producto Id Nordm de Producto
Ambos campos son Primary Key con lo que no puede haber una combinacioacuten de ambos campos que sea
igual
OrderId ProductId
1 A
1 B
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 43
1 C
2 A
3 C
Es decir en este caso no podriacutea existir una nueva combinacioacuten ldquo1 Ardquo o ldquo2 Ardquo
Quantity Es la cantidad del producto del pedido
ROLLUP
Se usa para presentar resuacutemenes de datos A de usarse junto con la clausula group by lo que hace es
realizar un resumen de los campos incluidos en el rollup
Ejemplo 63
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
Group by ProductID OrderID
with Rollup
Order by ProductID OrderID
Este ejemplo suma todas las cantidades y mediante
rollup muestra una fila con la suma de todas las
cantidades de cada producto y ademaacutes otra fila con la
suma de todas las cantidades de todos los productos El
resultado de este ejemplo seriacutea el que muestra la
imagen
Ejemplo 64
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
where orderid lt 10250
Group by ProductID OrderID
with Rollup
Order by ProductID OrderID
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 44
CUBE
Al igual que Rollup realiza resuacutemenes de campos agrupados Pero en este caso muestra un resumen con
cada combinacioacuten posible de los campos agrupados
Ejemplo 65
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
where orderid lt 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 combinacioacuten posible entre el
productid y el orderid
GROUPING
Indica si el resultado de un campo es el que hay en la propia tabla o se ha introducido mediante una
claacuteusula de resumen es decir para saber por ejemplo si un ldquoNullrdquo 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 lt 10250 Group by ProductID
OrderID with Cube Order by ProductID OrderID
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 45
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
Ponieacutendole un alias al
grouping saldriacutea el nombre
de columna que le
indiquemos
COMPUTE
Realiza un resumen en una columna aparte con el resultado de la funcioacuten de agregado indicada Su
formato seriacutea Compute funcioacuten(campo) No se puede utilizar en aplicaciones cliente servidor es una
clausula meramente informativa Tampoco se le pueden poner alias a los resuacutemenes
Ejemplo 67
Select Productid Orderid Quantity From [Order Details] order by ProductID Orderid compute
Sum(quantity)
Vemos que muestra la
columna con la suma
total de todas las
cantidades
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 46
Ejercicios de ROLLUP GROUPING y CUBE
Ejemplo 68
Realizar una consulta que resuma la cantidad de artiacuteculos pedidos por cada iacutendice de producto y
nuacutemero de pedido Realizando un caacutelculo acumulativo
select productid as [PRODUCTO] orderid as [Nordm PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] group by productid orderid with rollup order by productid orderid
PRODUCTO Nordm 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
hellip
Ejemplo 69
Modificacioacuten al ejercicio anterior Realizar el mismo resumen pero uacutenicamente para el producto
cuyo id es 50
select productid as [PRODUCTO] orderid as [Nordm PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] where productid = 50 group by productid orderid with rollup order by productid ordered
PRODUCTO Nordm 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
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 47
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 modificacioacuten 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 [Nordm PEDIDO] grouping(orderid) as [GRUPO PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] where productid = 50 group by Productidorderid with cube order by productidorderid
PRODUCTO GRUPO PRODUCTO Nordm PEDIDO GRUPO PEDIDO SUMA TOTAL
----------- -------------- ----------- ------------ -----------
NULL 1 NULL 1 235
NULL 1 10350 0 15
NULL 1 10383 0 15
NULL 1 10429 0 40
NULL 1 10465 0 25
NULL 1 10637 0 25
NULL 1 10729 0 40
NULL 1 10751 0 20
NULL 1 10920 0 24
NULL 1 10948 0 9
NULL 1 11072 0 22
50 0 NULL 1 235
50 0 10350 0 15
50 0 10383 0 15
50 0 10429 0 40
50 0 10465 0 25
50 0 10637 0 25
50 0 10729 0 40
50 0 10751 0 20
50 0 10920 0 24
50 0 10948 0 9
50 0 11072 0 22
(22 filas afectadas)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 48
Obtencioacuten de resuacutemenes 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 maacutes columnas y
luego efectuar alguna operacioacuten de resumen sobre cada grupo asiacute generado
La diferencia con GROUP BY es que permite mostrar informacioacuten mas detallada de cada grupo
Ejemplo 71
Lista de pedidos que muestre por coacutedigo de pedido la cantidad de productos vendidos por cada uno
de ellos
select Idpedidoidproductopreciounidadcantidad[Sub Total]=sum(PreciounidadCantidad) from
[detalles de pedidos] group by Idpedidoidproductopreciounidadcantidad order by IdPedido compute
sum(Cantidad) by IdPedido
EJERCICIOS CON COMPUTE
Ejemplo 72
Generar un resumen de subtotales en una consulta que devuelva el nuacutemero de pedido la cantidad
pedida para todos los orderid 11070
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 49
Select Orderid as [Nordm PEDIDO] Quantity AS [CANTIDAD] From [Order Details] where orderid gt= 11070 order by Orderid compute Sum(quantity) by orderid compute sum(quantity)
Nordm PEDIDO CANTIDAD
----------- --------
11070 40
11070 20
11070 30
11070 20
sum
===========
110
sum
===========
110
(6 filas afectadas)
Ejemplo 73
Generar un resumen con calculo de subtotales similar al anterior pero para los orderid 11075 y
11076
Select Orderid as [Nordm PEDIDO] Quantity as [CANTIDAD] From [Order Details] where orderid = 11075 or orderid = 11076 order by Orderid compute Sum(quantity) by ordered Nordm PEDIDO CANTIDAD ----------- -------- 11075 10 11075 30 11075 2 sum =========== 42 Nordm PEDIDO CANTIDAD ----------- -------- 11076 20 11076 20 11076 10
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 50
sum =========== 50 (8 filas afectadas)
Ejemplo 74
Modificacioacuten al ejercicio anterior Agregar la cantidad total y la cantidad promedio al final del
informe
Select Orderid as [Nordm 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)
Nordm PEDIDO CANTIDAD
----------- --------
11075 10
11075 30
11075 2
sum
===========
42
Nordm PEDIDO CANTIDAD
----------- --------
11076 20
11076 20
11076 10
sum
===========
50
sum
===========
92
avg
===========
15
(10 filas afectadas)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 51
Ejemplo 75
Seleccionar de forma agrupada por tipo todos los tipos la suma de los precios y la suma del
anticipo de la tabla tiacutetulos
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 199900 50000000
business 119500 50000000
business 29900 101250000
business 199900 50000000
sum
=====================
549200
avg
=====================
62812500
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
mod_cook 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
avg
=====================
75000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
popular_comp 229500 70000000
popular_comp 200000 80000000
popular_comp NULL NULL
sum
=====================
429500
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 52
avg
=====================
75000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
psychology 215900 70000000
psychology 109500 22750000
psychology 70000 60000000
psychology 199900 20000000
psychology 79900 40000000
sum
=====================
675200
avg
=====================
42550000
(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 ademaacutes 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 199900 50000000
business 119500 50000000
business 29900 101250000
business 199900 50000000
sum
=====================
549200
sum
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 53
=====================
251250000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
mod_cook 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
popular_comp 229500 70000000
popular_comp 200000 80000000
popular_comp NULL NULL
sum
=====================
429500
sum
=====================
150000000
(30 filas afectadas)
Ejemplo 77
Generar un informe que muestre la suma de los precios de los libros de psicologiacutea 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 109500
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 54
psychology 0736 70000
psychology 0736 199900
psychology 0736 79900
sum
=====================
459300
TIPO CODIGO EDITOR PRECIO
------------ ------------- ---------------------
psychology 0877 215900
sum
=====================
215900
(7 filas afectadas)
Ejemplo 78
Generar un informe que obtenga la suma de los precios de todos los libros de psicologiacutea asiacute como la
suma de los precios de los libros de psicologiacutea 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 109500
psychology 0736 70000
psychology 0736 199900
psychology 0736 79900
sum
=====================
459300
TIPO CODIGO EDITOR PRECIO
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 55
------------ ------------- ---------------------
psychology 0877 215900
sum
=====================
215900
sum
=====================
675200
(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 199900 0000
mod_cook 0877 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO CODIGO EDITOR PRECIO ANTICIPO
------------ ------------- --------------------- ---------------------
trad_cook 0877 119500 40000000
trad_cook 0877 209500 70000000
trad_cook 0877 149900 80000000
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 56
sum
=====================
478900
sum
=====================
190000000
(9 filas afectadas)
Ejemplo 80
Generar un informe que muestre todos los tiacutetulos precio y anticipo de aquellos tiacutetulos que tengan
un precio superior a 20 doacutelares Ofreceraacute tambieacuten la suma total del precio y del anticipo
Select title as [TITULO] price as [PRECIO] advance as [ANTICIPO] From titles where price gt 20 order by title compute sum(price) compute sum(advance)
TITULO PRECIO ANTICIPO
-------------------------------------------------------------------------------- --------------------- -------------
--------
But Is It User Friendly 229500 70000000
Computer Phobic AND Non-Phobic Individuals Behavior Variations 215900
70000000
Onions Leeks and Garlic Cooking Secrets of the Mediterranean 209500
70000000
sum
=====================
654900
sum
=====================
210000000
(5 filas afectadas)
Ejemplo 81
Generar un informe que muestre el precio el tipo y el nuacutemero de editor de la tabla titles de todos
aquellas obras que pertenezcan la categoriacutea de ldquobusinessrdquo Ademaacutes apareceraacute la suma total de
precios y el maacuteximo pub_id de esta seleccioacuten
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 57
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 29900 0736
business 199900 1389
business 199900 1389
business 119500 1389
sum
=====================
549200
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 Mostraraacute la suma de los precios y los anticipos por tipo y luego calcularaacute 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 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
trad_cook 209500 70000000
trad_cook 119500 40000000
trad_cook 149900 80000000
sum
=====================
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 58
478900
sum
=====================
190000000
sum
=====================
708700
sum
=====================
340000000
(11 filas afectadas)
Eliminacioacuten 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 iquestA que precio se ah vendido los productos
Select IdProducto Preciounidad from [Detalles de pedidos] order by IdProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 59
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 mayoriacutea de las consultas que se hacen en una base de datos requiere que se lean datos procedentes
de dos oacute maacutes tablas
INNER JOIN- son las filas que satisfacen la condicioacuten de la combinacioacuten
En la siguiente sentencia SQL enlaza 2 tablas la tabla clientes y la tabla pedidos en esta ejemplo me
muestra los campos nombre compantildeiacutea y el campo idpedido
La uacutenica condicioacuten es que las 2 tablas tengan un campo en comuacuten
Ejemplo 84
select clientesNombreCompantildeiacuteapedidosidpedido from clientes inner join pedidos on
clientesidcliente=pedidosidcliente
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 60
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 pedidosIdPedido pedidosIdCliente 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 pedidosIdPedido pedidosIdCliente order
by pedidos IdPedido
CROSS JOIN
Un Cross Join es la consulta correlacionada que combine cada una de las filas de una de las tablas con
todas las filas de la otra tabla
No es necesario que exista una columna en comuacuten para ejecutar el Cross Join
Ejemplo 86
La siguiente consulta combina cada una de las filas de la tabla categoriacuteas con cada una de las filas de la
tabla productos
select productosNombreProductocategoriasNombrecategoria from productos cross join categorias
order by productosNombreProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 61
Ejercicios de consultas Muacuteltiples
Ejemplo 87
Mostrar el pedidos completo con el id=10248
Select pedidosIdPedido pedidosIdCliente
Total=sum ([detalles de pedidos]Preciounidad[detalles de pedidos]Cantidad)
From [detalles de pedidos] inner join pedidos on
[Detalles de pedidos]IdPedido=pedidosIdPedido where pedidosIdPedido=10248
Group by pedidosIdPedido pedidosIdCliente
Ejemplo 88
1 Mostrar la cantidad de productos por categoriacutea
Select CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
[Total de Producto]=sum (UnidadesEnExistencia) from Categoriacuteas inner join
Productos on CategoriacuteasIdCategoriacutea=productosIdCategoriacutea
Group by CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 62
Ejemplo 89
Calcular cuantas ventas tiene cada uno de los vendedores
Select empleadosIdEmpleado empleadosNombre empleadosApellidos
[Total de ventas]=count (pedidosIdPedido) from empleados
Inner join Pedidos on empleadosIdEmpleado=pedidosIdEmpleado
Group by empleadosIdEmpleado empleadosNombre empleadosApellidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 63
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 despueacutes saca la de Plantilla
Recomendaciones a la hora de usar las combinaciones
Combinar tablas en funcioacuten de claves principales y externas
Limite el nuacutemero de tablas de las combinaciones
Select Apellido
Oficio as
OFICIOFUNCION
salario from emp
UNION
Select Apellido
Funcion Salario from
Plantilla
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 64
SUBCONSULTAS
Es una SELECT anidada en una instruccioacuten INSERT DELETE SELECT o UPDATE
Como una tabla derivada
Select eemp_no as Numero
eApellido
from (select emp_no apellido from emp) as e
Como una expresioacuten
Select emp_no as [Numero]
Apellido
Salario
(select avg(Salario) from emp)
as Diferencia
from emp
where oficio = Empleado
Para correlacionar datos
- Expresioacuten dinaacutemica que cambia en cada fila de una consulta externa
- Es una combinacioacuten entre la subconsulta y la fila de la consulta externa
- Dividen consultas complejas con dos o maacutes consultas simples relacionadas
Subconsulta correlacionada
Select apellido oficiodept_no
from emp as e
where 20 lt
(select dept_no from dept as d
where edept_no = ddept_no
and ddnombre = Ventas)
SUBCONSULTAS
1 Mostrar el numero de empleado el apellido y la fecha de alta del empleado mas antiguo de la
empresa
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 65
SELECT emp_noapellido
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_noapellido
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 Jimeacutenez
select apellido oficio from emp where
oficio = (select oficio from emp where apellido = JIMENEZ)
4 Queremos saber el apellido oficio salario y nuacutemero 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 gt (select max (salario) from
emp where dept_no = 30)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 66
5 Mostrar el apellido la funcioacuten sala o departamento de todos los empleados que trabajen en la
empresa
select eApellido eOficio as [Cargo en Empresa] ddnombre as [Oficina]
from emp as e
inner join dept as d
on edept_no = ddept_no
union
select pApellido pfuncion snombre
from plantilla as p
inner join sala as s
on phospital_cod = shospital_cod
and psala_cod = ssala_cod
union
select dApellido despecialidad hnombre
from doctor as d
inner join hospital as h
on dhospital_cod = hhospital_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 = lsquoventasrsquo))
order by 2
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 67
8 Mostrar los empleados que tienen mejor salario que la media de los directores no incluyendo al
presidente
Select from emp where salario gt
(select avg (salario) from emp where oficio = DIRECTOR)
and oficio ltgt PRESIDENTE
9 Mostrar el apellido funcioacuten salario y coacutedigo 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 = lsquoENFERMEROrsquo or
funcion = lsquoENFERMERArsquo) and hospital_cod = (select hospital_cod from hospital where nombre =
lsquoSAN CARLOSrsquo)
Select apellido funcion salario hospital_cod from plantilla where
funcion in (ENFERMEROENFERMERA)
and hospital_cod = (select hospital_cod from hospital
where nombre = SAN CARLOS)
10 Visualizar los datos de los hospitales que tienen personal (Doctores) de cardiologiacutea
Select from hospital where hospital_cod in (select hospital_cod from doctor where
especialidad = lsquoCardiologiacutearsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 68
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 = lsquoPROVINCIALrsquo or
nombre= lsquoGENERALrsquo)
12 Mostrar el apellido de los enfermos que nacieron antes que el Sentildeor Miller
Select apellido from enfermo where Fecha_nac lt (select fecha_nac from enfermo where
apellido = lsquoMILLER Brsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 69
Simulacion de una clausula JOIN
Vamos a mostrar los oficios que estaacuten en maacutes de un departamento
Select distinct e1oficio from emp as e1
where e1oficio in(Select e2oficio from emp as e2
where e1dept_no ltgt e2dept_no)
Se debe utilizar antes una combinacioacuten que una subconsulta la combinacioacuten seriacutea asi dando los
mismos resultados
Select distinct e1Oficio from emp as e1
inner join emp as e2
on e1oficio = e2oficio
where e1dept_no ltgt e2dept_no
Estos son los dos oficios que estaacuten en
maacutes de un departamento
Subconsulta para simular una clausula HAVING
select e1apellidoe1oficio e1salario
from emp as e1
where e1salario gt
(select avg(e2salario) from emp as e2
where e1oficio = e2oficio)
Esta es la consulta utilizando el HAVING que es la que deberiacuteamos utilizar antes que una
subconsulta de simulacioacuten HAVING
SELECT e1apellidoe1oficio e1salario
FROM emp AS e1
INNER JOIN emp AS e2
ON e1oficio = e2oficio
GROUP BY e1oficio e1salarioe1apellido
HAVING e1salario gt AVG (e2salario)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 70
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 17
Ejemplo 15
Lista de productos cuyo nombre empieza con A ograve con cualquier caraacutecter en el rango que va de U
a la Ademaacutes el segundo caraacutecter no debe ser la letra r
Select from productos where nombreproducto like [^b-t][^r]
El Caraacutecter ^ significa incluir
El Caraacutecter representa cualquier cadena de caracteres inclusive la cadena nula
El Caraacutecter _ Representa cualquier caraacutecter 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 caraacutecter empiece con la letra e
Select from productos where nombreproducto like _e
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 18
Ejemplo 18
Lista de productos cuyo nombre empiece con C M Ograve R
Select from productos where nombreproducto like bdquo[cmr]
Ejemplo 19
Lista de productos cuyo nombre empiece con C M Ograve R El segundo Caraacutecter debe ser A
Select from productos where nombreproducto like bdquo[cmr] a
El comodiacuten [cmr] representa el conjunto de caracteres validos en la posicioacuten en la que
apareceraacute el comodiacuten
Ejemplo 20
Seleccionar todos los productos que termine con la letra Z
Select from productos where nombreproducto like z
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 19
Ejemplo 21
Mostrar todos los productos cuya cuarta letra sea A
Select from productos where nombreproducto like ___a
USO DEL OPERADOR BETWEEN
Permite seleccionar en base a un rango de valores
Ejemplo 22
Lista de productos cuyo precio se encuentra en el rango que va de 15 a 21 nuevos soles
Select from productos where preciounidad between 15 and 21
Ejemplo 23
Lista de productos cuyo nombre se encuentren en el rango de Cerveza y galletas
Select from productos where nombreproducto between cerveza and galletas
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 20
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 (londresPariacutesTokyo)
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 (preciounidadcantidad)019 as IGV
from [detalles de pedidos]
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 21
Ejemplo 27
Mostar los productos cuyo precio sea mayor a 40
Select from productos where Preciounidad gt 40
Ejemplo 28
Mostrar todos los datos de los Clientes ordenados por Ciudad
Select from clientes order by ciudad
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 22
Ejemplo 29
Mostrar todos los productos de la Categoriacutea 2
Select from productos where IdCategoriacutea=2
Ejemplo 30
Mostrar todos los pedidos realizados en la fecha 1996-06-05
Select from Pedidos where FechaPedido =1996-06-05
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 23
Ejemplo 31
Mostrar todos los pedidos mayores a la Fecha 1996-05-05
Select from Pedidos where FechaPedido gt 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 IdCategoriacutea no sea 3
Select from productos where IdCategoriacutealtgt 3
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 24
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 Categoriacutea (123)
Select from productos where IdCategoriacutea not in (1 2 3) order by IdProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 25
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
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 26
USO DE FUNCIONES
Podemos utilizar funciones para construir expresiones y generar columnas computadoras O condiciones
complejas
Funcioacuten de agregacioacuten
Son funciones que se utilizan para calcular valores en las tablas Si queremos usarlas
combinaacutendolas 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
expresioacuten HAVING Equivalente a where
Todos estos ejercicios han sido desarrollado con la base de datos Poseidoacuten
COUNT Cuenta los registros que hay en la consulta
Si pongo un valor dentro de la expresioacuten devolveraacute la cuenta de todos los
registros no nulos
Si pongo un asterisco contaraacute todos los registros aunque tengan valores
nulos
Select count () from Pedidos Valores con Nulos
Select count (FechaEnviacuteo) from Pedidos Valores sin nulos
AVG Realiza la media sobre la expresioacuten dada debe ser un tipo de dato
Int
Select avg(Preciounidad) from productos
MAX Saca el valor maacuteximo de una consulta
Select max (FechaPedido) from Pedidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 27
MIN Devuelve el valor miacutenimo 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 paiacutes Brasil mostrando el nuacutemero de los Factura con el paiacutes de
Destinatario Brasil
Select count () as [Numero de Facturas] PaiacutesDestinatario
Avg (Preciounidad) as [Precio Medio] from
Facturas group by PaiacutesDestinatario having PaiacutesDestinatario =Brasil
Ejemplo 39
Encontrar el precio maacutes alto mas bajo y la diferencia entre ambos de todos los productos con
IdCategoriacutea 2
Select IdCategoriacutea Max (Preciounidad) as [Precio mas alto] min(Preciounidad) as
[Precio mas Bajo] Max(Preciounidad) - min(Preciounidad) as [Diferencia entre Ambos]
from Productos group by IdCategoriacutea having IdCategoriacutea = 2
Ejemplo 40
Visualizar el nuacutemero de productos por Categoriacutea
Select IdCategoriacutea as [Nordm de Categoriacutea] Count (IdCategoriacutea) as [Nordm de Productos]
From Productos group by IdCategoriacutea
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 28
Ejemplo 41
Visualizar los clientes que vivan en las siguientes ciudades Londres Madrid y Barcelona
Select count () as [Nordm de personas] ciudad from clientes group by ciudad Having ciudad in
(londresMadridBarcelona) order by ciudad
Ejemplo 42
Lista de productos cuya venta allaacute sido mayor a 50000
Select IdProducto Monto=Sum (Preciounidad Cantidad) from [Detalles de pedidos] group
by IdProducto having Sum (Preciounidad Cantidad)gt50000 order by IdProducto
Ejemplo 43
Cuantos Clientes no tienen Fax
Select Count () as [Total de Clientes sin Fax] from clientes where fax is null
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 29
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
Funcioacuten Resultado
GETDATE() Retorna la fecha y hora del sistema
DATEADD(partefechanfecha) Retorna una nueva fecha antildeadiendo n
unidades de partefecha a fecha
DATEDIFF(parteFechafecha1fecha2) Retorna la diferencia en parteFecha entre
fecha1 y fecha2
DATENAME(partefechafecha) Retorna la cadena correspondiente a
partefecha en fecha
DATEPART(partefechafecha) Retorna el numero correspondiente a
partefecha y fecha
DAY(fecha) Retorna el numero correspondiente a la
parte del diacutea de fecha
MONTH(fecha) Retorna el numero correspondiente a la
parte del mes de fecha
YEAR(fecha) Retorna el numero correspondiente a la
parte del antildeo de fecha
GETUTCDATE() Retorna la fecha y hora del meridiano de
Greenwich
La siguiente tabla muestra los valores de partefecha que podemos utilizar
partefecha Abreviatura
Year Yy yyyy
Quarter Qq q
Month Mm m
Dayofyear Dy y
Day Dd d
Week Wk ww
weekday Dw
Hour Hh
minute Mi n
second Ss s
milisecond Ms
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 30
Getdate
Select getdate () Funcioacuten que recupera la fecha actual del sistema
Convert Cast
Convierten expliacutecitamente una expresioacuten de un tipo de datos en otro CAST y CONVERT
proporcionan funciones similares
Convert (Tipodedatosdestino Origen Estilo)
o Tipodedatosdestino Siempre ha de ser tipo caraacutecter
o Origen Puede ser tipo fecha numeacuterico o moneda
o Estilo Opcional Es un coacutedigo que indica el formato en el que devuelve la cadena de
caracteres
Sintaxis
Convert (TipoDato Dato)
Cast (Dato as TipoDato)
Ejemplo
declare n intpalabra nvarchar(10)
set n = 1
set palabra =Nuacutemero
print convert(nvarchar(2)n) + + palabra
print cast(n as nvarchar(2)) + + palabra
while (nlt11)
begin
print convert(nvarchar(2)n) + + palabra
print cast(n as nvarchar(2)) + + palabra
set n = n + 1
end
DateName
Devuelve una cadena de caracteres que representa la parte de la fecha especificada de la fecha
especificada
Los caacutelculos 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
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 31
Ejemplo 46
Select IdPedido DateName (week FechaPedido) as Numero de Semana from Pedidos where IdPedido
= 1035251
Ejemplo 47
Select IdPedido datename (weekday FechaPedido) as Diacutea De Semana from Pedidos where IdPedido =
10352 Martes
Horas
Ejemplo 48
Select IdPedido datename (mi FechaPedido) as Minutos from Pedidos where IdPedido = 10352
Ejemplo 49
Select DateName (minute getdate ()) as minutos
Ejemplo 50
Select DateName (Hh FechaPedido) as hora from Pedidos where IdPedido = 10352
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 32
Ejemplo 51
Select DateName (Hour getdate ()) as hora--gt18
Ejemplo 52
Select DateName (Hh getdate ()) as hora--gt18
DatePart
Devuelve la parte de la fecha u hora indicada Sintaxis
Datepart (Valor devolver fecha)
Ejemplo 53
Select IdPedido datepart (mm FechaPedido) as Mes from Pedidos where IdPedido = 10352
Ejemplo 54
Select Datepart (Hh getdate ()) as Hora--gt17
Ejemplo 55
Select Datepart (mi getdate ()) as Minutos--gt54
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 33
Nombres de Fechas
Day (fecha)
Devuelve UN INT equivale a Datepart
Select day (getdate ()) as diacutea--gt6 (diacutea en la que se ejecuta la sentencia)
Select Datepart (dd getdate ()) --gt6 (diacutea en la que se ejecuta la sentencia)
Select Month (getdate ()) --gt1 (Mes en la que se ejecuta la sentencia)
Select Datepart (mm getdate ()) --gt1 (Mes en la que se ejecuta la sentencia)
Select Year (getdate ()) --gt2008 (Antildeo en la que se ejecuta la sentencia)
Ejemplo 56
Select year (FechaPedido) as Antildeo from Pedidos where IdPedido = 10352
Ejemplo 57
Select datediff (yyyy FechaPedido getdate()) as Dia from Pedidos where IdPedido = 10352
DateAdd
DateAdd (Datepart number date)
Antildeade un nuacutemero a la fecha puesta
DatePart es el formato de lo que queremos antildeadir
Number es el nuacutemero que queremos incrementar la fecha expuesta
Select convert (datetime1-1-02)
Select dateadd (dd 71-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 comparacioacuten y el tipo de dato
que nos devolveraacute antildeos diacuteas minutos etc
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 34
Ejemplo 58
Select datediff (yyyy FechaPedido getdate ()) as Dia from Pedidos where IdPedido = 10352
Ejercicios de funciones de Fecha
Ejemplo 59
Lista de pedidos emitidos en febrero de 1996
Select from Pedidos where month (FechaPedido) =2 and year (FechaPedido) =1996
Ejemplo 60
Lista de Pedidos mostrando la diferencia en diacuteas entre la fecha del pedido y la fecha de Envioacute
Select IdPedido FechaPedido FechaEnviacuteo diacuteas =datediff (day FechaPedido FechaEnviacuteo) from
pedidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 35
Ejemplo 61
Genere un listado de pedidos en el que la fecha del pedido se muestre en el formato nombre del
diacutea diacutea de mes antildeo
Select IdPedido FechaPedido Fecha=datename (dw IdPedido)+ + str (datepart (dd
IdPedido) 2)+ de +datename (mm IdPedido)+ de +str (datepart (yy IdPedido) 4) from
pedidos
Ejemplo 62
Mostrar de la tabla pedidos la fecha de pedidos en fecha corta
Select IdPedido convert (varchar (30) FechaPedido 106) as [Fecha Corta] from pedidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 36
FUNCIONES MATEMATICAS
ABS
Es el valor Absoluto
Select ABS (-4) as VALOR ABSOLUTO--gt4
CEILING
Devuelve el entero maacutes pequentildeo mayor o igual que la expresioacuten numeacuterica dada
Select CEILING (54) as CEILING--6
FLOOR
Devuelve el entero maacutes grande menor o igual que la expresioacuten numeacuterica dada
Select FLOOR (5) as FLOOR--gt5
POWER
Devuelve el valor de la expresioacuten indicada elevada a la potencia especificada
Select POWER (3 2) as 3 ELEVADO A 2--gt9
RAND
Devuelve un valor float aleatorio de 0 a 1
Las llamadas repetitivas de RAND() en una uacutenica consulta produciraacuten el mismo valor
Select RAND(6) as ALEATORIO--071368515806921451
Select RAND(6) as ALEATORIO--071368515806921451
Select RAND(4) as ALEATORIO--07136478921266981
Rand sobre los milisegundos actuales
Select RAND(DATEPART(msGETDATE())) as ALEATORIO--gt071443047691954253
Select RAND(999999999)--gt068504257551273573
ROUND
Devuelve una expresioacuten numeacuterica redondeada a la longitud o precisioacuten especificada
Round (Nuacutemero Redondeo del Nuacutemero)
ROUND siempre devuelve un valor Si length es un valor negativo y mayor que el nuacutemero de
diacutegitos anteriores al separador decimal ROUND devuelve 0
Select ROUND (1234567 2) --gt1234600
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 37
Select ROUND (1234567-2) --gt1000000
Select ROUND (1234567 0) --gt1230000
Select ROUND (1234567-3) ---gt0
SIGN
Devuelve el signo positivo (+1) cero (0) o negativo (-1) de la expresioacuten especificada
Dice el valor negativo positivo o neutro (0) del valor especificado
Select SIGN (-3) --gt-1
Select SIGN (3) --gt1
Select SIGN (0) --gt0
SQUARE
Devuelve el cuadrado de la expresioacuten especificada
Select SQUARE (4) as bdquoCuadrado‟--gt160
SQRT
Devuelve la raiacutez cuadrada de la expresioacuten especificada
Select SQRT (4) as [RAIZ CUADRADA] --gt20
FUNCIONES DE CADENA
ASCII
Devuelve el coacutedigo ASCII del caraacutecter maacutes a la izquierda de una expresioacuten de caracteres
Select ASCII(A)--gt65
Select ASCII(a)--gt97
Select ascii(aula)--gt97
CHAR
Una funcioacuten de cadena que convierte un coacutedigo ASCII int en un caraacutecter
select char(65)--gtA
select char(97)--gta
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 38
CHARINDEX
Devuelve la posicioacuten inicial de la expresioacuten especificada en una cadena de caracteres
CHARINDEX (expression1 expression2 [ start_location])
Argumentos
expression1
Es una expresioacuten que contiene la secuencia de caracteres que se desea buscar
Expression1 es una expresioacuten del tipo de cadenas cortas de caracteres
Expression2
Es una expresioacuten normalmente una columna
en la que se busca la cadena especificada
Expression2 es de la categoriacutea del tipo de datos cadena de caracteres
start_location
Es la posicioacuten del caraacutecter de expression2 en el que se empieza la buacutesqueda de expression1
Si no se especifica start_location es un nuacutemero negativo o es cero
la buacutesqueda empieza al principio de la cadena expression2
Si expression1 no se encuentra en expression2 CHARINDEX devuelve 0
Si alguno de los dos es null devuelve null
Select charindex (ciemurcielago) --gt4
Select charindex (ciemurcielago 2) --gt4
Select charindex (ciemurcielago 5) --gt0
Select charindex (ciemurcielago-6) --gt4
LEFT
Devuelve la parte de una cadena de caracteres que comienza en un nuacutemero de caracteres
especificado a partir de la izquierda
Select left (murcielago5) --gtmurci
RIGHT
Devuelve la parte de una cadena de caracteres que
Comienza en el nuacutemero de caracteres especificado
En integer_expression a partir de la derecha
Select right (hola que tal5) --gte tal
LEN
Cuenta el nuacutemero de caracteres que se incluyen en la cadena
Select len (murcieacutelago) --gt10
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 39
LOWER
Convierte a Minuacutesculas la cadena especificada
Select lower (MurcIELaGO) as [minusculas] --gtmurcielago
UPPER
Convierte a Mayuacutesculas la cadena especificada
Select upper (murcielago) as [MAYUSCULAS] --gtMURCIELAGO
RTRIM y LTRIM
Elimina los espacios que existen a la izquierda y a la derecha respectivamente
Select Rtrim ( murcieacutelago ) AS [SIN ESPACIOS] --gtmurcieacutelago
Select Ltrim ( murcieacutelago ) AS [SIN ESPACIOS] --gtmurcieacutelago
Select ltrim(rtrim( hola ))+
REPLACE
Reemplaza por una tercera expresioacuten todas las apariciones
de la segunda expresioacuten de cadena proporcionada en la primera expresioacuten de cadena
Select replace (hola que tal estasaA) --gtholA que tAl estAs
Select replace (buenos dias que tal estasuentildentildentilde) --gtbntildentildentildenos diasqntildentildentilde tal estas
SPACE
Coloca el nuacutemero de espacios que se le indiquen para entre una cadena de caracteres
Select hola+space(5)+que tal--gthola que tal
SUBSTRING
Devuelve parte de una expresioacuten de caracteres binaria de texto o de imagen
Sintaxis
SUBSTRING (Expresioacuten Comienzo Duracioacuten)
Argumentos
Expresioacuten
Es una cadena de caracteres cadena binaria texto imagen
Columna o expresioacuten que incluye una columna
No deben usarse expresiones que incluyan funciones de agregado
Start
Es un entero que especifica el punto en que comienza la subcadena
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 40
Length
Es un entero que especifica la longitud de la subcadena
(El nuacutemero de caracteres o bytes que se devuelven)
Select substring (murcielago 3 5) --gtrciel
Select substring (murcielago 3 len (murcielago)) --gtrciel
REVERSE
Devuelve invertida una expresioacuten de caraacutecter
Select reverse (hola)
REPLICATE
Repite una expresioacuten de caracteres un nuacutemero especificado de veces
Select replicate (murcielago 5)
Replicate replicate replicate replicate replicate
STUFF
Elimina el nuacutemero de caracteres especificados e insertados
Otro conjunto de caracteres en un punto de inicio indicado
Select STUFF (Murcieacutelago 2 3 ijklmn) Mijklmnielago
FUNCIONES DE SISTEMA
- APP_NAME () Devuelve el nombre de la aplicacioacuten actual
Select app_name () as [Nombre de la aplicacion]
- DATALENGTH (Expresioacuten) Devuelve un entero que es numero de bites necesarios para
representar esa expresioacuten int
Select datalength (Ninoni) as [Numero de bites]
- ISDATE (Expresioacuten) Dice si la expresioacuten es una fecha o no Devuelve 1 si la expresioacuten es
una fecha y 0 si no es una fecha
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 41
Select isdate (121001) as [Validacioacuten Fecha]
- ISNUMERIC (Expresion) Dice si la expresioacuten es un numero o no Devuelve 1 si la
expresioacuten es un nuacutemero y 0 si la expresioacuten no es nuacutemero
Select isnumeric (ddd) as [Validacion Numero]
- ISNULL (Expresioacuten ExpresionDevuelta) Si la expresioacuten es nula te devuelve la Expresioacuten
Devuelta y si no devuelve la primera Expresioacuten
Select isnull (nullNo nulo) as [Es Nulo]
- PARSENAME (bdquoNombreObjeto‟ ParteNombre)
ParteNombre es un valor de tipo Int que coge unos determinados valores del
NombreObjeto
1 Objeto
2 Propietario
3 Base de Datos
4 Servidor
Select parsename (saposeidondbopedidos1) as [Parte Expresioacuten]
Select parsename (saposeidondbopedidos 2) as [Parte Expresioacuten]
Select parsename (saposeidondbopedidos3) as [Parte Expresioacuten]
Select parsename ( saposeidondbopedidos 4) as [Parte Expresioacuten]
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 42
- SYSTEM_USER Devuelve el usuario del sistema actual
Depende de la autentificacioacuten con la que te hayas conectado
Select system_user as [Usuario conectado]
- USER_NAME() Devuelve el nombre del usuario actual
Select user_name ()
- COALESCE (expresioacuten1 expresioacuten2 )
Devuelve la primera expresioacuten no NULL
Si todos son NULL devuelve NULL
Select coalesce (PrecioUnidad Cantidad) from [detalles de Pedidos] Si el PrecioUnidad es nulo
devolveraacute la Cantidad y si los dos son nulos devolveraacute un campo Null
PROCEDIMIENTOS PARA AGRUPAR Y RESUMIR DATOS
En el examen de certificacioacuten 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 usaraacute la base de datos indicada Ejemplo Ponemos
en el analizador de consultas lo siguiente
Use Northwind
Select from [Order Details]
[Order Details]
Esta tabla perteneciente a la Northwind se encarga de manejar los pedidos
Order Id Nordm de Pedido
Producto Id Nordm de Producto
Ambos campos son Primary Key con lo que no puede haber una combinacioacuten de ambos campos que sea
igual
OrderId ProductId
1 A
1 B
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 43
1 C
2 A
3 C
Es decir en este caso no podriacutea existir una nueva combinacioacuten ldquo1 Ardquo o ldquo2 Ardquo
Quantity Es la cantidad del producto del pedido
ROLLUP
Se usa para presentar resuacutemenes de datos A de usarse junto con la clausula group by lo que hace es
realizar un resumen de los campos incluidos en el rollup
Ejemplo 63
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
Group by ProductID OrderID
with Rollup
Order by ProductID OrderID
Este ejemplo suma todas las cantidades y mediante
rollup muestra una fila con la suma de todas las
cantidades de cada producto y ademaacutes otra fila con la
suma de todas las cantidades de todos los productos El
resultado de este ejemplo seriacutea el que muestra la
imagen
Ejemplo 64
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
where orderid lt 10250
Group by ProductID OrderID
with Rollup
Order by ProductID OrderID
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 44
CUBE
Al igual que Rollup realiza resuacutemenes de campos agrupados Pero en este caso muestra un resumen con
cada combinacioacuten posible de los campos agrupados
Ejemplo 65
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
where orderid lt 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 combinacioacuten posible entre el
productid y el orderid
GROUPING
Indica si el resultado de un campo es el que hay en la propia tabla o se ha introducido mediante una
claacuteusula de resumen es decir para saber por ejemplo si un ldquoNullrdquo 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 lt 10250 Group by ProductID
OrderID with Cube Order by ProductID OrderID
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 45
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
Ponieacutendole un alias al
grouping saldriacutea el nombre
de columna que le
indiquemos
COMPUTE
Realiza un resumen en una columna aparte con el resultado de la funcioacuten de agregado indicada Su
formato seriacutea Compute funcioacuten(campo) No se puede utilizar en aplicaciones cliente servidor es una
clausula meramente informativa Tampoco se le pueden poner alias a los resuacutemenes
Ejemplo 67
Select Productid Orderid Quantity From [Order Details] order by ProductID Orderid compute
Sum(quantity)
Vemos que muestra la
columna con la suma
total de todas las
cantidades
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 46
Ejercicios de ROLLUP GROUPING y CUBE
Ejemplo 68
Realizar una consulta que resuma la cantidad de artiacuteculos pedidos por cada iacutendice de producto y
nuacutemero de pedido Realizando un caacutelculo acumulativo
select productid as [PRODUCTO] orderid as [Nordm PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] group by productid orderid with rollup order by productid orderid
PRODUCTO Nordm 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
hellip
Ejemplo 69
Modificacioacuten al ejercicio anterior Realizar el mismo resumen pero uacutenicamente para el producto
cuyo id es 50
select productid as [PRODUCTO] orderid as [Nordm PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] where productid = 50 group by productid orderid with rollup order by productid ordered
PRODUCTO Nordm 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
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 47
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 modificacioacuten 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 [Nordm PEDIDO] grouping(orderid) as [GRUPO PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] where productid = 50 group by Productidorderid with cube order by productidorderid
PRODUCTO GRUPO PRODUCTO Nordm PEDIDO GRUPO PEDIDO SUMA TOTAL
----------- -------------- ----------- ------------ -----------
NULL 1 NULL 1 235
NULL 1 10350 0 15
NULL 1 10383 0 15
NULL 1 10429 0 40
NULL 1 10465 0 25
NULL 1 10637 0 25
NULL 1 10729 0 40
NULL 1 10751 0 20
NULL 1 10920 0 24
NULL 1 10948 0 9
NULL 1 11072 0 22
50 0 NULL 1 235
50 0 10350 0 15
50 0 10383 0 15
50 0 10429 0 40
50 0 10465 0 25
50 0 10637 0 25
50 0 10729 0 40
50 0 10751 0 20
50 0 10920 0 24
50 0 10948 0 9
50 0 11072 0 22
(22 filas afectadas)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 48
Obtencioacuten de resuacutemenes 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 maacutes columnas y
luego efectuar alguna operacioacuten de resumen sobre cada grupo asiacute generado
La diferencia con GROUP BY es que permite mostrar informacioacuten mas detallada de cada grupo
Ejemplo 71
Lista de pedidos que muestre por coacutedigo de pedido la cantidad de productos vendidos por cada uno
de ellos
select Idpedidoidproductopreciounidadcantidad[Sub Total]=sum(PreciounidadCantidad) from
[detalles de pedidos] group by Idpedidoidproductopreciounidadcantidad order by IdPedido compute
sum(Cantidad) by IdPedido
EJERCICIOS CON COMPUTE
Ejemplo 72
Generar un resumen de subtotales en una consulta que devuelva el nuacutemero de pedido la cantidad
pedida para todos los orderid 11070
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 49
Select Orderid as [Nordm PEDIDO] Quantity AS [CANTIDAD] From [Order Details] where orderid gt= 11070 order by Orderid compute Sum(quantity) by orderid compute sum(quantity)
Nordm PEDIDO CANTIDAD
----------- --------
11070 40
11070 20
11070 30
11070 20
sum
===========
110
sum
===========
110
(6 filas afectadas)
Ejemplo 73
Generar un resumen con calculo de subtotales similar al anterior pero para los orderid 11075 y
11076
Select Orderid as [Nordm PEDIDO] Quantity as [CANTIDAD] From [Order Details] where orderid = 11075 or orderid = 11076 order by Orderid compute Sum(quantity) by ordered Nordm PEDIDO CANTIDAD ----------- -------- 11075 10 11075 30 11075 2 sum =========== 42 Nordm PEDIDO CANTIDAD ----------- -------- 11076 20 11076 20 11076 10
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 50
sum =========== 50 (8 filas afectadas)
Ejemplo 74
Modificacioacuten al ejercicio anterior Agregar la cantidad total y la cantidad promedio al final del
informe
Select Orderid as [Nordm 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)
Nordm PEDIDO CANTIDAD
----------- --------
11075 10
11075 30
11075 2
sum
===========
42
Nordm PEDIDO CANTIDAD
----------- --------
11076 20
11076 20
11076 10
sum
===========
50
sum
===========
92
avg
===========
15
(10 filas afectadas)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 51
Ejemplo 75
Seleccionar de forma agrupada por tipo todos los tipos la suma de los precios y la suma del
anticipo de la tabla tiacutetulos
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 199900 50000000
business 119500 50000000
business 29900 101250000
business 199900 50000000
sum
=====================
549200
avg
=====================
62812500
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
mod_cook 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
avg
=====================
75000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
popular_comp 229500 70000000
popular_comp 200000 80000000
popular_comp NULL NULL
sum
=====================
429500
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 52
avg
=====================
75000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
psychology 215900 70000000
psychology 109500 22750000
psychology 70000 60000000
psychology 199900 20000000
psychology 79900 40000000
sum
=====================
675200
avg
=====================
42550000
(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 ademaacutes 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 199900 50000000
business 119500 50000000
business 29900 101250000
business 199900 50000000
sum
=====================
549200
sum
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 53
=====================
251250000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
mod_cook 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
popular_comp 229500 70000000
popular_comp 200000 80000000
popular_comp NULL NULL
sum
=====================
429500
sum
=====================
150000000
(30 filas afectadas)
Ejemplo 77
Generar un informe que muestre la suma de los precios de los libros de psicologiacutea 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 109500
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 54
psychology 0736 70000
psychology 0736 199900
psychology 0736 79900
sum
=====================
459300
TIPO CODIGO EDITOR PRECIO
------------ ------------- ---------------------
psychology 0877 215900
sum
=====================
215900
(7 filas afectadas)
Ejemplo 78
Generar un informe que obtenga la suma de los precios de todos los libros de psicologiacutea asiacute como la
suma de los precios de los libros de psicologiacutea 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 109500
psychology 0736 70000
psychology 0736 199900
psychology 0736 79900
sum
=====================
459300
TIPO CODIGO EDITOR PRECIO
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 55
------------ ------------- ---------------------
psychology 0877 215900
sum
=====================
215900
sum
=====================
675200
(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 199900 0000
mod_cook 0877 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO CODIGO EDITOR PRECIO ANTICIPO
------------ ------------- --------------------- ---------------------
trad_cook 0877 119500 40000000
trad_cook 0877 209500 70000000
trad_cook 0877 149900 80000000
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 56
sum
=====================
478900
sum
=====================
190000000
(9 filas afectadas)
Ejemplo 80
Generar un informe que muestre todos los tiacutetulos precio y anticipo de aquellos tiacutetulos que tengan
un precio superior a 20 doacutelares Ofreceraacute tambieacuten la suma total del precio y del anticipo
Select title as [TITULO] price as [PRECIO] advance as [ANTICIPO] From titles where price gt 20 order by title compute sum(price) compute sum(advance)
TITULO PRECIO ANTICIPO
-------------------------------------------------------------------------------- --------------------- -------------
--------
But Is It User Friendly 229500 70000000
Computer Phobic AND Non-Phobic Individuals Behavior Variations 215900
70000000
Onions Leeks and Garlic Cooking Secrets of the Mediterranean 209500
70000000
sum
=====================
654900
sum
=====================
210000000
(5 filas afectadas)
Ejemplo 81
Generar un informe que muestre el precio el tipo y el nuacutemero de editor de la tabla titles de todos
aquellas obras que pertenezcan la categoriacutea de ldquobusinessrdquo Ademaacutes apareceraacute la suma total de
precios y el maacuteximo pub_id de esta seleccioacuten
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 57
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 29900 0736
business 199900 1389
business 199900 1389
business 119500 1389
sum
=====================
549200
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 Mostraraacute la suma de los precios y los anticipos por tipo y luego calcularaacute 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 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
trad_cook 209500 70000000
trad_cook 119500 40000000
trad_cook 149900 80000000
sum
=====================
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 58
478900
sum
=====================
190000000
sum
=====================
708700
sum
=====================
340000000
(11 filas afectadas)
Eliminacioacuten 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 iquestA que precio se ah vendido los productos
Select IdProducto Preciounidad from [Detalles de pedidos] order by IdProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 59
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 mayoriacutea de las consultas que se hacen en una base de datos requiere que se lean datos procedentes
de dos oacute maacutes tablas
INNER JOIN- son las filas que satisfacen la condicioacuten de la combinacioacuten
En la siguiente sentencia SQL enlaza 2 tablas la tabla clientes y la tabla pedidos en esta ejemplo me
muestra los campos nombre compantildeiacutea y el campo idpedido
La uacutenica condicioacuten es que las 2 tablas tengan un campo en comuacuten
Ejemplo 84
select clientesNombreCompantildeiacuteapedidosidpedido from clientes inner join pedidos on
clientesidcliente=pedidosidcliente
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 60
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 pedidosIdPedido pedidosIdCliente 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 pedidosIdPedido pedidosIdCliente order
by pedidos IdPedido
CROSS JOIN
Un Cross Join es la consulta correlacionada que combine cada una de las filas de una de las tablas con
todas las filas de la otra tabla
No es necesario que exista una columna en comuacuten para ejecutar el Cross Join
Ejemplo 86
La siguiente consulta combina cada una de las filas de la tabla categoriacuteas con cada una de las filas de la
tabla productos
select productosNombreProductocategoriasNombrecategoria from productos cross join categorias
order by productosNombreProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 61
Ejercicios de consultas Muacuteltiples
Ejemplo 87
Mostrar el pedidos completo con el id=10248
Select pedidosIdPedido pedidosIdCliente
Total=sum ([detalles de pedidos]Preciounidad[detalles de pedidos]Cantidad)
From [detalles de pedidos] inner join pedidos on
[Detalles de pedidos]IdPedido=pedidosIdPedido where pedidosIdPedido=10248
Group by pedidosIdPedido pedidosIdCliente
Ejemplo 88
1 Mostrar la cantidad de productos por categoriacutea
Select CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
[Total de Producto]=sum (UnidadesEnExistencia) from Categoriacuteas inner join
Productos on CategoriacuteasIdCategoriacutea=productosIdCategoriacutea
Group by CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 62
Ejemplo 89
Calcular cuantas ventas tiene cada uno de los vendedores
Select empleadosIdEmpleado empleadosNombre empleadosApellidos
[Total de ventas]=count (pedidosIdPedido) from empleados
Inner join Pedidos on empleadosIdEmpleado=pedidosIdEmpleado
Group by empleadosIdEmpleado empleadosNombre empleadosApellidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 63
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 despueacutes saca la de Plantilla
Recomendaciones a la hora de usar las combinaciones
Combinar tablas en funcioacuten de claves principales y externas
Limite el nuacutemero de tablas de las combinaciones
Select Apellido
Oficio as
OFICIOFUNCION
salario from emp
UNION
Select Apellido
Funcion Salario from
Plantilla
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 64
SUBCONSULTAS
Es una SELECT anidada en una instruccioacuten INSERT DELETE SELECT o UPDATE
Como una tabla derivada
Select eemp_no as Numero
eApellido
from (select emp_no apellido from emp) as e
Como una expresioacuten
Select emp_no as [Numero]
Apellido
Salario
(select avg(Salario) from emp)
as Diferencia
from emp
where oficio = Empleado
Para correlacionar datos
- Expresioacuten dinaacutemica que cambia en cada fila de una consulta externa
- Es una combinacioacuten entre la subconsulta y la fila de la consulta externa
- Dividen consultas complejas con dos o maacutes consultas simples relacionadas
Subconsulta correlacionada
Select apellido oficiodept_no
from emp as e
where 20 lt
(select dept_no from dept as d
where edept_no = ddept_no
and ddnombre = Ventas)
SUBCONSULTAS
1 Mostrar el numero de empleado el apellido y la fecha de alta del empleado mas antiguo de la
empresa
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 65
SELECT emp_noapellido
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_noapellido
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 Jimeacutenez
select apellido oficio from emp where
oficio = (select oficio from emp where apellido = JIMENEZ)
4 Queremos saber el apellido oficio salario y nuacutemero 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 gt (select max (salario) from
emp where dept_no = 30)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 66
5 Mostrar el apellido la funcioacuten sala o departamento de todos los empleados que trabajen en la
empresa
select eApellido eOficio as [Cargo en Empresa] ddnombre as [Oficina]
from emp as e
inner join dept as d
on edept_no = ddept_no
union
select pApellido pfuncion snombre
from plantilla as p
inner join sala as s
on phospital_cod = shospital_cod
and psala_cod = ssala_cod
union
select dApellido despecialidad hnombre
from doctor as d
inner join hospital as h
on dhospital_cod = hhospital_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 = lsquoventasrsquo))
order by 2
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 67
8 Mostrar los empleados que tienen mejor salario que la media de los directores no incluyendo al
presidente
Select from emp where salario gt
(select avg (salario) from emp where oficio = DIRECTOR)
and oficio ltgt PRESIDENTE
9 Mostrar el apellido funcioacuten salario y coacutedigo 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 = lsquoENFERMEROrsquo or
funcion = lsquoENFERMERArsquo) and hospital_cod = (select hospital_cod from hospital where nombre =
lsquoSAN CARLOSrsquo)
Select apellido funcion salario hospital_cod from plantilla where
funcion in (ENFERMEROENFERMERA)
and hospital_cod = (select hospital_cod from hospital
where nombre = SAN CARLOS)
10 Visualizar los datos de los hospitales que tienen personal (Doctores) de cardiologiacutea
Select from hospital where hospital_cod in (select hospital_cod from doctor where
especialidad = lsquoCardiologiacutearsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 68
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 = lsquoPROVINCIALrsquo or
nombre= lsquoGENERALrsquo)
12 Mostrar el apellido de los enfermos que nacieron antes que el Sentildeor Miller
Select apellido from enfermo where Fecha_nac lt (select fecha_nac from enfermo where
apellido = lsquoMILLER Brsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 69
Simulacion de una clausula JOIN
Vamos a mostrar los oficios que estaacuten en maacutes de un departamento
Select distinct e1oficio from emp as e1
where e1oficio in(Select e2oficio from emp as e2
where e1dept_no ltgt e2dept_no)
Se debe utilizar antes una combinacioacuten que una subconsulta la combinacioacuten seriacutea asi dando los
mismos resultados
Select distinct e1Oficio from emp as e1
inner join emp as e2
on e1oficio = e2oficio
where e1dept_no ltgt e2dept_no
Estos son los dos oficios que estaacuten en
maacutes de un departamento
Subconsulta para simular una clausula HAVING
select e1apellidoe1oficio e1salario
from emp as e1
where e1salario gt
(select avg(e2salario) from emp as e2
where e1oficio = e2oficio)
Esta es la consulta utilizando el HAVING que es la que deberiacuteamos utilizar antes que una
subconsulta de simulacioacuten HAVING
SELECT e1apellidoe1oficio e1salario
FROM emp AS e1
INNER JOIN emp AS e2
ON e1oficio = e2oficio
GROUP BY e1oficio e1salarioe1apellido
HAVING e1salario gt AVG (e2salario)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 70
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 18
Ejemplo 18
Lista de productos cuyo nombre empiece con C M Ograve R
Select from productos where nombreproducto like bdquo[cmr]
Ejemplo 19
Lista de productos cuyo nombre empiece con C M Ograve R El segundo Caraacutecter debe ser A
Select from productos where nombreproducto like bdquo[cmr] a
El comodiacuten [cmr] representa el conjunto de caracteres validos en la posicioacuten en la que
apareceraacute el comodiacuten
Ejemplo 20
Seleccionar todos los productos que termine con la letra Z
Select from productos where nombreproducto like z
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 19
Ejemplo 21
Mostrar todos los productos cuya cuarta letra sea A
Select from productos where nombreproducto like ___a
USO DEL OPERADOR BETWEEN
Permite seleccionar en base a un rango de valores
Ejemplo 22
Lista de productos cuyo precio se encuentra en el rango que va de 15 a 21 nuevos soles
Select from productos where preciounidad between 15 and 21
Ejemplo 23
Lista de productos cuyo nombre se encuentren en el rango de Cerveza y galletas
Select from productos where nombreproducto between cerveza and galletas
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 20
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 (londresPariacutesTokyo)
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 (preciounidadcantidad)019 as IGV
from [detalles de pedidos]
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 21
Ejemplo 27
Mostar los productos cuyo precio sea mayor a 40
Select from productos where Preciounidad gt 40
Ejemplo 28
Mostrar todos los datos de los Clientes ordenados por Ciudad
Select from clientes order by ciudad
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 22
Ejemplo 29
Mostrar todos los productos de la Categoriacutea 2
Select from productos where IdCategoriacutea=2
Ejemplo 30
Mostrar todos los pedidos realizados en la fecha 1996-06-05
Select from Pedidos where FechaPedido =1996-06-05
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 23
Ejemplo 31
Mostrar todos los pedidos mayores a la Fecha 1996-05-05
Select from Pedidos where FechaPedido gt 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 IdCategoriacutea no sea 3
Select from productos where IdCategoriacutealtgt 3
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 24
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 Categoriacutea (123)
Select from productos where IdCategoriacutea not in (1 2 3) order by IdProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 25
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
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 26
USO DE FUNCIONES
Podemos utilizar funciones para construir expresiones y generar columnas computadoras O condiciones
complejas
Funcioacuten de agregacioacuten
Son funciones que se utilizan para calcular valores en las tablas Si queremos usarlas
combinaacutendolas 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
expresioacuten HAVING Equivalente a where
Todos estos ejercicios han sido desarrollado con la base de datos Poseidoacuten
COUNT Cuenta los registros que hay en la consulta
Si pongo un valor dentro de la expresioacuten devolveraacute la cuenta de todos los
registros no nulos
Si pongo un asterisco contaraacute todos los registros aunque tengan valores
nulos
Select count () from Pedidos Valores con Nulos
Select count (FechaEnviacuteo) from Pedidos Valores sin nulos
AVG Realiza la media sobre la expresioacuten dada debe ser un tipo de dato
Int
Select avg(Preciounidad) from productos
MAX Saca el valor maacuteximo de una consulta
Select max (FechaPedido) from Pedidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 27
MIN Devuelve el valor miacutenimo 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 paiacutes Brasil mostrando el nuacutemero de los Factura con el paiacutes de
Destinatario Brasil
Select count () as [Numero de Facturas] PaiacutesDestinatario
Avg (Preciounidad) as [Precio Medio] from
Facturas group by PaiacutesDestinatario having PaiacutesDestinatario =Brasil
Ejemplo 39
Encontrar el precio maacutes alto mas bajo y la diferencia entre ambos de todos los productos con
IdCategoriacutea 2
Select IdCategoriacutea Max (Preciounidad) as [Precio mas alto] min(Preciounidad) as
[Precio mas Bajo] Max(Preciounidad) - min(Preciounidad) as [Diferencia entre Ambos]
from Productos group by IdCategoriacutea having IdCategoriacutea = 2
Ejemplo 40
Visualizar el nuacutemero de productos por Categoriacutea
Select IdCategoriacutea as [Nordm de Categoriacutea] Count (IdCategoriacutea) as [Nordm de Productos]
From Productos group by IdCategoriacutea
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 28
Ejemplo 41
Visualizar los clientes que vivan en las siguientes ciudades Londres Madrid y Barcelona
Select count () as [Nordm de personas] ciudad from clientes group by ciudad Having ciudad in
(londresMadridBarcelona) order by ciudad
Ejemplo 42
Lista de productos cuya venta allaacute sido mayor a 50000
Select IdProducto Monto=Sum (Preciounidad Cantidad) from [Detalles de pedidos] group
by IdProducto having Sum (Preciounidad Cantidad)gt50000 order by IdProducto
Ejemplo 43
Cuantos Clientes no tienen Fax
Select Count () as [Total de Clientes sin Fax] from clientes where fax is null
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 29
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
Funcioacuten Resultado
GETDATE() Retorna la fecha y hora del sistema
DATEADD(partefechanfecha) Retorna una nueva fecha antildeadiendo n
unidades de partefecha a fecha
DATEDIFF(parteFechafecha1fecha2) Retorna la diferencia en parteFecha entre
fecha1 y fecha2
DATENAME(partefechafecha) Retorna la cadena correspondiente a
partefecha en fecha
DATEPART(partefechafecha) Retorna el numero correspondiente a
partefecha y fecha
DAY(fecha) Retorna el numero correspondiente a la
parte del diacutea de fecha
MONTH(fecha) Retorna el numero correspondiente a la
parte del mes de fecha
YEAR(fecha) Retorna el numero correspondiente a la
parte del antildeo de fecha
GETUTCDATE() Retorna la fecha y hora del meridiano de
Greenwich
La siguiente tabla muestra los valores de partefecha que podemos utilizar
partefecha Abreviatura
Year Yy yyyy
Quarter Qq q
Month Mm m
Dayofyear Dy y
Day Dd d
Week Wk ww
weekday Dw
Hour Hh
minute Mi n
second Ss s
milisecond Ms
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 30
Getdate
Select getdate () Funcioacuten que recupera la fecha actual del sistema
Convert Cast
Convierten expliacutecitamente una expresioacuten de un tipo de datos en otro CAST y CONVERT
proporcionan funciones similares
Convert (Tipodedatosdestino Origen Estilo)
o Tipodedatosdestino Siempre ha de ser tipo caraacutecter
o Origen Puede ser tipo fecha numeacuterico o moneda
o Estilo Opcional Es un coacutedigo que indica el formato en el que devuelve la cadena de
caracteres
Sintaxis
Convert (TipoDato Dato)
Cast (Dato as TipoDato)
Ejemplo
declare n intpalabra nvarchar(10)
set n = 1
set palabra =Nuacutemero
print convert(nvarchar(2)n) + + palabra
print cast(n as nvarchar(2)) + + palabra
while (nlt11)
begin
print convert(nvarchar(2)n) + + palabra
print cast(n as nvarchar(2)) + + palabra
set n = n + 1
end
DateName
Devuelve una cadena de caracteres que representa la parte de la fecha especificada de la fecha
especificada
Los caacutelculos 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
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 31
Ejemplo 46
Select IdPedido DateName (week FechaPedido) as Numero de Semana from Pedidos where IdPedido
= 1035251
Ejemplo 47
Select IdPedido datename (weekday FechaPedido) as Diacutea De Semana from Pedidos where IdPedido =
10352 Martes
Horas
Ejemplo 48
Select IdPedido datename (mi FechaPedido) as Minutos from Pedidos where IdPedido = 10352
Ejemplo 49
Select DateName (minute getdate ()) as minutos
Ejemplo 50
Select DateName (Hh FechaPedido) as hora from Pedidos where IdPedido = 10352
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 32
Ejemplo 51
Select DateName (Hour getdate ()) as hora--gt18
Ejemplo 52
Select DateName (Hh getdate ()) as hora--gt18
DatePart
Devuelve la parte de la fecha u hora indicada Sintaxis
Datepart (Valor devolver fecha)
Ejemplo 53
Select IdPedido datepart (mm FechaPedido) as Mes from Pedidos where IdPedido = 10352
Ejemplo 54
Select Datepart (Hh getdate ()) as Hora--gt17
Ejemplo 55
Select Datepart (mi getdate ()) as Minutos--gt54
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 33
Nombres de Fechas
Day (fecha)
Devuelve UN INT equivale a Datepart
Select day (getdate ()) as diacutea--gt6 (diacutea en la que se ejecuta la sentencia)
Select Datepart (dd getdate ()) --gt6 (diacutea en la que se ejecuta la sentencia)
Select Month (getdate ()) --gt1 (Mes en la que se ejecuta la sentencia)
Select Datepart (mm getdate ()) --gt1 (Mes en la que se ejecuta la sentencia)
Select Year (getdate ()) --gt2008 (Antildeo en la que se ejecuta la sentencia)
Ejemplo 56
Select year (FechaPedido) as Antildeo from Pedidos where IdPedido = 10352
Ejemplo 57
Select datediff (yyyy FechaPedido getdate()) as Dia from Pedidos where IdPedido = 10352
DateAdd
DateAdd (Datepart number date)
Antildeade un nuacutemero a la fecha puesta
DatePart es el formato de lo que queremos antildeadir
Number es el nuacutemero que queremos incrementar la fecha expuesta
Select convert (datetime1-1-02)
Select dateadd (dd 71-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 comparacioacuten y el tipo de dato
que nos devolveraacute antildeos diacuteas minutos etc
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 34
Ejemplo 58
Select datediff (yyyy FechaPedido getdate ()) as Dia from Pedidos where IdPedido = 10352
Ejercicios de funciones de Fecha
Ejemplo 59
Lista de pedidos emitidos en febrero de 1996
Select from Pedidos where month (FechaPedido) =2 and year (FechaPedido) =1996
Ejemplo 60
Lista de Pedidos mostrando la diferencia en diacuteas entre la fecha del pedido y la fecha de Envioacute
Select IdPedido FechaPedido FechaEnviacuteo diacuteas =datediff (day FechaPedido FechaEnviacuteo) from
pedidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 35
Ejemplo 61
Genere un listado de pedidos en el que la fecha del pedido se muestre en el formato nombre del
diacutea diacutea de mes antildeo
Select IdPedido FechaPedido Fecha=datename (dw IdPedido)+ + str (datepart (dd
IdPedido) 2)+ de +datename (mm IdPedido)+ de +str (datepart (yy IdPedido) 4) from
pedidos
Ejemplo 62
Mostrar de la tabla pedidos la fecha de pedidos en fecha corta
Select IdPedido convert (varchar (30) FechaPedido 106) as [Fecha Corta] from pedidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 36
FUNCIONES MATEMATICAS
ABS
Es el valor Absoluto
Select ABS (-4) as VALOR ABSOLUTO--gt4
CEILING
Devuelve el entero maacutes pequentildeo mayor o igual que la expresioacuten numeacuterica dada
Select CEILING (54) as CEILING--6
FLOOR
Devuelve el entero maacutes grande menor o igual que la expresioacuten numeacuterica dada
Select FLOOR (5) as FLOOR--gt5
POWER
Devuelve el valor de la expresioacuten indicada elevada a la potencia especificada
Select POWER (3 2) as 3 ELEVADO A 2--gt9
RAND
Devuelve un valor float aleatorio de 0 a 1
Las llamadas repetitivas de RAND() en una uacutenica consulta produciraacuten el mismo valor
Select RAND(6) as ALEATORIO--071368515806921451
Select RAND(6) as ALEATORIO--071368515806921451
Select RAND(4) as ALEATORIO--07136478921266981
Rand sobre los milisegundos actuales
Select RAND(DATEPART(msGETDATE())) as ALEATORIO--gt071443047691954253
Select RAND(999999999)--gt068504257551273573
ROUND
Devuelve una expresioacuten numeacuterica redondeada a la longitud o precisioacuten especificada
Round (Nuacutemero Redondeo del Nuacutemero)
ROUND siempre devuelve un valor Si length es un valor negativo y mayor que el nuacutemero de
diacutegitos anteriores al separador decimal ROUND devuelve 0
Select ROUND (1234567 2) --gt1234600
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 37
Select ROUND (1234567-2) --gt1000000
Select ROUND (1234567 0) --gt1230000
Select ROUND (1234567-3) ---gt0
SIGN
Devuelve el signo positivo (+1) cero (0) o negativo (-1) de la expresioacuten especificada
Dice el valor negativo positivo o neutro (0) del valor especificado
Select SIGN (-3) --gt-1
Select SIGN (3) --gt1
Select SIGN (0) --gt0
SQUARE
Devuelve el cuadrado de la expresioacuten especificada
Select SQUARE (4) as bdquoCuadrado‟--gt160
SQRT
Devuelve la raiacutez cuadrada de la expresioacuten especificada
Select SQRT (4) as [RAIZ CUADRADA] --gt20
FUNCIONES DE CADENA
ASCII
Devuelve el coacutedigo ASCII del caraacutecter maacutes a la izquierda de una expresioacuten de caracteres
Select ASCII(A)--gt65
Select ASCII(a)--gt97
Select ascii(aula)--gt97
CHAR
Una funcioacuten de cadena que convierte un coacutedigo ASCII int en un caraacutecter
select char(65)--gtA
select char(97)--gta
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 38
CHARINDEX
Devuelve la posicioacuten inicial de la expresioacuten especificada en una cadena de caracteres
CHARINDEX (expression1 expression2 [ start_location])
Argumentos
expression1
Es una expresioacuten que contiene la secuencia de caracteres que se desea buscar
Expression1 es una expresioacuten del tipo de cadenas cortas de caracteres
Expression2
Es una expresioacuten normalmente una columna
en la que se busca la cadena especificada
Expression2 es de la categoriacutea del tipo de datos cadena de caracteres
start_location
Es la posicioacuten del caraacutecter de expression2 en el que se empieza la buacutesqueda de expression1
Si no se especifica start_location es un nuacutemero negativo o es cero
la buacutesqueda empieza al principio de la cadena expression2
Si expression1 no se encuentra en expression2 CHARINDEX devuelve 0
Si alguno de los dos es null devuelve null
Select charindex (ciemurcielago) --gt4
Select charindex (ciemurcielago 2) --gt4
Select charindex (ciemurcielago 5) --gt0
Select charindex (ciemurcielago-6) --gt4
LEFT
Devuelve la parte de una cadena de caracteres que comienza en un nuacutemero de caracteres
especificado a partir de la izquierda
Select left (murcielago5) --gtmurci
RIGHT
Devuelve la parte de una cadena de caracteres que
Comienza en el nuacutemero de caracteres especificado
En integer_expression a partir de la derecha
Select right (hola que tal5) --gte tal
LEN
Cuenta el nuacutemero de caracteres que se incluyen en la cadena
Select len (murcieacutelago) --gt10
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 39
LOWER
Convierte a Minuacutesculas la cadena especificada
Select lower (MurcIELaGO) as [minusculas] --gtmurcielago
UPPER
Convierte a Mayuacutesculas la cadena especificada
Select upper (murcielago) as [MAYUSCULAS] --gtMURCIELAGO
RTRIM y LTRIM
Elimina los espacios que existen a la izquierda y a la derecha respectivamente
Select Rtrim ( murcieacutelago ) AS [SIN ESPACIOS] --gtmurcieacutelago
Select Ltrim ( murcieacutelago ) AS [SIN ESPACIOS] --gtmurcieacutelago
Select ltrim(rtrim( hola ))+
REPLACE
Reemplaza por una tercera expresioacuten todas las apariciones
de la segunda expresioacuten de cadena proporcionada en la primera expresioacuten de cadena
Select replace (hola que tal estasaA) --gtholA que tAl estAs
Select replace (buenos dias que tal estasuentildentildentilde) --gtbntildentildentildenos diasqntildentildentilde tal estas
SPACE
Coloca el nuacutemero de espacios que se le indiquen para entre una cadena de caracteres
Select hola+space(5)+que tal--gthola que tal
SUBSTRING
Devuelve parte de una expresioacuten de caracteres binaria de texto o de imagen
Sintaxis
SUBSTRING (Expresioacuten Comienzo Duracioacuten)
Argumentos
Expresioacuten
Es una cadena de caracteres cadena binaria texto imagen
Columna o expresioacuten que incluye una columna
No deben usarse expresiones que incluyan funciones de agregado
Start
Es un entero que especifica el punto en que comienza la subcadena
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 40
Length
Es un entero que especifica la longitud de la subcadena
(El nuacutemero de caracteres o bytes que se devuelven)
Select substring (murcielago 3 5) --gtrciel
Select substring (murcielago 3 len (murcielago)) --gtrciel
REVERSE
Devuelve invertida una expresioacuten de caraacutecter
Select reverse (hola)
REPLICATE
Repite una expresioacuten de caracteres un nuacutemero especificado de veces
Select replicate (murcielago 5)
Replicate replicate replicate replicate replicate
STUFF
Elimina el nuacutemero de caracteres especificados e insertados
Otro conjunto de caracteres en un punto de inicio indicado
Select STUFF (Murcieacutelago 2 3 ijklmn) Mijklmnielago
FUNCIONES DE SISTEMA
- APP_NAME () Devuelve el nombre de la aplicacioacuten actual
Select app_name () as [Nombre de la aplicacion]
- DATALENGTH (Expresioacuten) Devuelve un entero que es numero de bites necesarios para
representar esa expresioacuten int
Select datalength (Ninoni) as [Numero de bites]
- ISDATE (Expresioacuten) Dice si la expresioacuten es una fecha o no Devuelve 1 si la expresioacuten es
una fecha y 0 si no es una fecha
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 41
Select isdate (121001) as [Validacioacuten Fecha]
- ISNUMERIC (Expresion) Dice si la expresioacuten es un numero o no Devuelve 1 si la
expresioacuten es un nuacutemero y 0 si la expresioacuten no es nuacutemero
Select isnumeric (ddd) as [Validacion Numero]
- ISNULL (Expresioacuten ExpresionDevuelta) Si la expresioacuten es nula te devuelve la Expresioacuten
Devuelta y si no devuelve la primera Expresioacuten
Select isnull (nullNo nulo) as [Es Nulo]
- PARSENAME (bdquoNombreObjeto‟ ParteNombre)
ParteNombre es un valor de tipo Int que coge unos determinados valores del
NombreObjeto
1 Objeto
2 Propietario
3 Base de Datos
4 Servidor
Select parsename (saposeidondbopedidos1) as [Parte Expresioacuten]
Select parsename (saposeidondbopedidos 2) as [Parte Expresioacuten]
Select parsename (saposeidondbopedidos3) as [Parte Expresioacuten]
Select parsename ( saposeidondbopedidos 4) as [Parte Expresioacuten]
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 42
- SYSTEM_USER Devuelve el usuario del sistema actual
Depende de la autentificacioacuten con la que te hayas conectado
Select system_user as [Usuario conectado]
- USER_NAME() Devuelve el nombre del usuario actual
Select user_name ()
- COALESCE (expresioacuten1 expresioacuten2 )
Devuelve la primera expresioacuten no NULL
Si todos son NULL devuelve NULL
Select coalesce (PrecioUnidad Cantidad) from [detalles de Pedidos] Si el PrecioUnidad es nulo
devolveraacute la Cantidad y si los dos son nulos devolveraacute un campo Null
PROCEDIMIENTOS PARA AGRUPAR Y RESUMIR DATOS
En el examen de certificacioacuten 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 usaraacute la base de datos indicada Ejemplo Ponemos
en el analizador de consultas lo siguiente
Use Northwind
Select from [Order Details]
[Order Details]
Esta tabla perteneciente a la Northwind se encarga de manejar los pedidos
Order Id Nordm de Pedido
Producto Id Nordm de Producto
Ambos campos son Primary Key con lo que no puede haber una combinacioacuten de ambos campos que sea
igual
OrderId ProductId
1 A
1 B
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 43
1 C
2 A
3 C
Es decir en este caso no podriacutea existir una nueva combinacioacuten ldquo1 Ardquo o ldquo2 Ardquo
Quantity Es la cantidad del producto del pedido
ROLLUP
Se usa para presentar resuacutemenes de datos A de usarse junto con la clausula group by lo que hace es
realizar un resumen de los campos incluidos en el rollup
Ejemplo 63
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
Group by ProductID OrderID
with Rollup
Order by ProductID OrderID
Este ejemplo suma todas las cantidades y mediante
rollup muestra una fila con la suma de todas las
cantidades de cada producto y ademaacutes otra fila con la
suma de todas las cantidades de todos los productos El
resultado de este ejemplo seriacutea el que muestra la
imagen
Ejemplo 64
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
where orderid lt 10250
Group by ProductID OrderID
with Rollup
Order by ProductID OrderID
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 44
CUBE
Al igual que Rollup realiza resuacutemenes de campos agrupados Pero en este caso muestra un resumen con
cada combinacioacuten posible de los campos agrupados
Ejemplo 65
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
where orderid lt 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 combinacioacuten posible entre el
productid y el orderid
GROUPING
Indica si el resultado de un campo es el que hay en la propia tabla o se ha introducido mediante una
claacuteusula de resumen es decir para saber por ejemplo si un ldquoNullrdquo 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 lt 10250 Group by ProductID
OrderID with Cube Order by ProductID OrderID
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 45
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
Ponieacutendole un alias al
grouping saldriacutea el nombre
de columna que le
indiquemos
COMPUTE
Realiza un resumen en una columna aparte con el resultado de la funcioacuten de agregado indicada Su
formato seriacutea Compute funcioacuten(campo) No se puede utilizar en aplicaciones cliente servidor es una
clausula meramente informativa Tampoco se le pueden poner alias a los resuacutemenes
Ejemplo 67
Select Productid Orderid Quantity From [Order Details] order by ProductID Orderid compute
Sum(quantity)
Vemos que muestra la
columna con la suma
total de todas las
cantidades
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 46
Ejercicios de ROLLUP GROUPING y CUBE
Ejemplo 68
Realizar una consulta que resuma la cantidad de artiacuteculos pedidos por cada iacutendice de producto y
nuacutemero de pedido Realizando un caacutelculo acumulativo
select productid as [PRODUCTO] orderid as [Nordm PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] group by productid orderid with rollup order by productid orderid
PRODUCTO Nordm 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
hellip
Ejemplo 69
Modificacioacuten al ejercicio anterior Realizar el mismo resumen pero uacutenicamente para el producto
cuyo id es 50
select productid as [PRODUCTO] orderid as [Nordm PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] where productid = 50 group by productid orderid with rollup order by productid ordered
PRODUCTO Nordm 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
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 47
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 modificacioacuten 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 [Nordm PEDIDO] grouping(orderid) as [GRUPO PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] where productid = 50 group by Productidorderid with cube order by productidorderid
PRODUCTO GRUPO PRODUCTO Nordm PEDIDO GRUPO PEDIDO SUMA TOTAL
----------- -------------- ----------- ------------ -----------
NULL 1 NULL 1 235
NULL 1 10350 0 15
NULL 1 10383 0 15
NULL 1 10429 0 40
NULL 1 10465 0 25
NULL 1 10637 0 25
NULL 1 10729 0 40
NULL 1 10751 0 20
NULL 1 10920 0 24
NULL 1 10948 0 9
NULL 1 11072 0 22
50 0 NULL 1 235
50 0 10350 0 15
50 0 10383 0 15
50 0 10429 0 40
50 0 10465 0 25
50 0 10637 0 25
50 0 10729 0 40
50 0 10751 0 20
50 0 10920 0 24
50 0 10948 0 9
50 0 11072 0 22
(22 filas afectadas)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 48
Obtencioacuten de resuacutemenes 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 maacutes columnas y
luego efectuar alguna operacioacuten de resumen sobre cada grupo asiacute generado
La diferencia con GROUP BY es que permite mostrar informacioacuten mas detallada de cada grupo
Ejemplo 71
Lista de pedidos que muestre por coacutedigo de pedido la cantidad de productos vendidos por cada uno
de ellos
select Idpedidoidproductopreciounidadcantidad[Sub Total]=sum(PreciounidadCantidad) from
[detalles de pedidos] group by Idpedidoidproductopreciounidadcantidad order by IdPedido compute
sum(Cantidad) by IdPedido
EJERCICIOS CON COMPUTE
Ejemplo 72
Generar un resumen de subtotales en una consulta que devuelva el nuacutemero de pedido la cantidad
pedida para todos los orderid 11070
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 49
Select Orderid as [Nordm PEDIDO] Quantity AS [CANTIDAD] From [Order Details] where orderid gt= 11070 order by Orderid compute Sum(quantity) by orderid compute sum(quantity)
Nordm PEDIDO CANTIDAD
----------- --------
11070 40
11070 20
11070 30
11070 20
sum
===========
110
sum
===========
110
(6 filas afectadas)
Ejemplo 73
Generar un resumen con calculo de subtotales similar al anterior pero para los orderid 11075 y
11076
Select Orderid as [Nordm PEDIDO] Quantity as [CANTIDAD] From [Order Details] where orderid = 11075 or orderid = 11076 order by Orderid compute Sum(quantity) by ordered Nordm PEDIDO CANTIDAD ----------- -------- 11075 10 11075 30 11075 2 sum =========== 42 Nordm PEDIDO CANTIDAD ----------- -------- 11076 20 11076 20 11076 10
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 50
sum =========== 50 (8 filas afectadas)
Ejemplo 74
Modificacioacuten al ejercicio anterior Agregar la cantidad total y la cantidad promedio al final del
informe
Select Orderid as [Nordm 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)
Nordm PEDIDO CANTIDAD
----------- --------
11075 10
11075 30
11075 2
sum
===========
42
Nordm PEDIDO CANTIDAD
----------- --------
11076 20
11076 20
11076 10
sum
===========
50
sum
===========
92
avg
===========
15
(10 filas afectadas)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 51
Ejemplo 75
Seleccionar de forma agrupada por tipo todos los tipos la suma de los precios y la suma del
anticipo de la tabla tiacutetulos
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 199900 50000000
business 119500 50000000
business 29900 101250000
business 199900 50000000
sum
=====================
549200
avg
=====================
62812500
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
mod_cook 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
avg
=====================
75000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
popular_comp 229500 70000000
popular_comp 200000 80000000
popular_comp NULL NULL
sum
=====================
429500
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 52
avg
=====================
75000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
psychology 215900 70000000
psychology 109500 22750000
psychology 70000 60000000
psychology 199900 20000000
psychology 79900 40000000
sum
=====================
675200
avg
=====================
42550000
(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 ademaacutes 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 199900 50000000
business 119500 50000000
business 29900 101250000
business 199900 50000000
sum
=====================
549200
sum
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 53
=====================
251250000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
mod_cook 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
popular_comp 229500 70000000
popular_comp 200000 80000000
popular_comp NULL NULL
sum
=====================
429500
sum
=====================
150000000
(30 filas afectadas)
Ejemplo 77
Generar un informe que muestre la suma de los precios de los libros de psicologiacutea 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 109500
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 54
psychology 0736 70000
psychology 0736 199900
psychology 0736 79900
sum
=====================
459300
TIPO CODIGO EDITOR PRECIO
------------ ------------- ---------------------
psychology 0877 215900
sum
=====================
215900
(7 filas afectadas)
Ejemplo 78
Generar un informe que obtenga la suma de los precios de todos los libros de psicologiacutea asiacute como la
suma de los precios de los libros de psicologiacutea 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 109500
psychology 0736 70000
psychology 0736 199900
psychology 0736 79900
sum
=====================
459300
TIPO CODIGO EDITOR PRECIO
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 55
------------ ------------- ---------------------
psychology 0877 215900
sum
=====================
215900
sum
=====================
675200
(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 199900 0000
mod_cook 0877 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO CODIGO EDITOR PRECIO ANTICIPO
------------ ------------- --------------------- ---------------------
trad_cook 0877 119500 40000000
trad_cook 0877 209500 70000000
trad_cook 0877 149900 80000000
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 56
sum
=====================
478900
sum
=====================
190000000
(9 filas afectadas)
Ejemplo 80
Generar un informe que muestre todos los tiacutetulos precio y anticipo de aquellos tiacutetulos que tengan
un precio superior a 20 doacutelares Ofreceraacute tambieacuten la suma total del precio y del anticipo
Select title as [TITULO] price as [PRECIO] advance as [ANTICIPO] From titles where price gt 20 order by title compute sum(price) compute sum(advance)
TITULO PRECIO ANTICIPO
-------------------------------------------------------------------------------- --------------------- -------------
--------
But Is It User Friendly 229500 70000000
Computer Phobic AND Non-Phobic Individuals Behavior Variations 215900
70000000
Onions Leeks and Garlic Cooking Secrets of the Mediterranean 209500
70000000
sum
=====================
654900
sum
=====================
210000000
(5 filas afectadas)
Ejemplo 81
Generar un informe que muestre el precio el tipo y el nuacutemero de editor de la tabla titles de todos
aquellas obras que pertenezcan la categoriacutea de ldquobusinessrdquo Ademaacutes apareceraacute la suma total de
precios y el maacuteximo pub_id de esta seleccioacuten
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 57
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 29900 0736
business 199900 1389
business 199900 1389
business 119500 1389
sum
=====================
549200
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 Mostraraacute la suma de los precios y los anticipos por tipo y luego calcularaacute 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 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
trad_cook 209500 70000000
trad_cook 119500 40000000
trad_cook 149900 80000000
sum
=====================
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 58
478900
sum
=====================
190000000
sum
=====================
708700
sum
=====================
340000000
(11 filas afectadas)
Eliminacioacuten 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 iquestA que precio se ah vendido los productos
Select IdProducto Preciounidad from [Detalles de pedidos] order by IdProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 59
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 mayoriacutea de las consultas que se hacen en una base de datos requiere que se lean datos procedentes
de dos oacute maacutes tablas
INNER JOIN- son las filas que satisfacen la condicioacuten de la combinacioacuten
En la siguiente sentencia SQL enlaza 2 tablas la tabla clientes y la tabla pedidos en esta ejemplo me
muestra los campos nombre compantildeiacutea y el campo idpedido
La uacutenica condicioacuten es que las 2 tablas tengan un campo en comuacuten
Ejemplo 84
select clientesNombreCompantildeiacuteapedidosidpedido from clientes inner join pedidos on
clientesidcliente=pedidosidcliente
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 60
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 pedidosIdPedido pedidosIdCliente 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 pedidosIdPedido pedidosIdCliente order
by pedidos IdPedido
CROSS JOIN
Un Cross Join es la consulta correlacionada que combine cada una de las filas de una de las tablas con
todas las filas de la otra tabla
No es necesario que exista una columna en comuacuten para ejecutar el Cross Join
Ejemplo 86
La siguiente consulta combina cada una de las filas de la tabla categoriacuteas con cada una de las filas de la
tabla productos
select productosNombreProductocategoriasNombrecategoria from productos cross join categorias
order by productosNombreProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 61
Ejercicios de consultas Muacuteltiples
Ejemplo 87
Mostrar el pedidos completo con el id=10248
Select pedidosIdPedido pedidosIdCliente
Total=sum ([detalles de pedidos]Preciounidad[detalles de pedidos]Cantidad)
From [detalles de pedidos] inner join pedidos on
[Detalles de pedidos]IdPedido=pedidosIdPedido where pedidosIdPedido=10248
Group by pedidosIdPedido pedidosIdCliente
Ejemplo 88
1 Mostrar la cantidad de productos por categoriacutea
Select CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
[Total de Producto]=sum (UnidadesEnExistencia) from Categoriacuteas inner join
Productos on CategoriacuteasIdCategoriacutea=productosIdCategoriacutea
Group by CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 62
Ejemplo 89
Calcular cuantas ventas tiene cada uno de los vendedores
Select empleadosIdEmpleado empleadosNombre empleadosApellidos
[Total de ventas]=count (pedidosIdPedido) from empleados
Inner join Pedidos on empleadosIdEmpleado=pedidosIdEmpleado
Group by empleadosIdEmpleado empleadosNombre empleadosApellidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 63
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 despueacutes saca la de Plantilla
Recomendaciones a la hora de usar las combinaciones
Combinar tablas en funcioacuten de claves principales y externas
Limite el nuacutemero de tablas de las combinaciones
Select Apellido
Oficio as
OFICIOFUNCION
salario from emp
UNION
Select Apellido
Funcion Salario from
Plantilla
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 64
SUBCONSULTAS
Es una SELECT anidada en una instruccioacuten INSERT DELETE SELECT o UPDATE
Como una tabla derivada
Select eemp_no as Numero
eApellido
from (select emp_no apellido from emp) as e
Como una expresioacuten
Select emp_no as [Numero]
Apellido
Salario
(select avg(Salario) from emp)
as Diferencia
from emp
where oficio = Empleado
Para correlacionar datos
- Expresioacuten dinaacutemica que cambia en cada fila de una consulta externa
- Es una combinacioacuten entre la subconsulta y la fila de la consulta externa
- Dividen consultas complejas con dos o maacutes consultas simples relacionadas
Subconsulta correlacionada
Select apellido oficiodept_no
from emp as e
where 20 lt
(select dept_no from dept as d
where edept_no = ddept_no
and ddnombre = Ventas)
SUBCONSULTAS
1 Mostrar el numero de empleado el apellido y la fecha de alta del empleado mas antiguo de la
empresa
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 65
SELECT emp_noapellido
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_noapellido
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 Jimeacutenez
select apellido oficio from emp where
oficio = (select oficio from emp where apellido = JIMENEZ)
4 Queremos saber el apellido oficio salario y nuacutemero 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 gt (select max (salario) from
emp where dept_no = 30)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 66
5 Mostrar el apellido la funcioacuten sala o departamento de todos los empleados que trabajen en la
empresa
select eApellido eOficio as [Cargo en Empresa] ddnombre as [Oficina]
from emp as e
inner join dept as d
on edept_no = ddept_no
union
select pApellido pfuncion snombre
from plantilla as p
inner join sala as s
on phospital_cod = shospital_cod
and psala_cod = ssala_cod
union
select dApellido despecialidad hnombre
from doctor as d
inner join hospital as h
on dhospital_cod = hhospital_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 = lsquoventasrsquo))
order by 2
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 67
8 Mostrar los empleados que tienen mejor salario que la media de los directores no incluyendo al
presidente
Select from emp where salario gt
(select avg (salario) from emp where oficio = DIRECTOR)
and oficio ltgt PRESIDENTE
9 Mostrar el apellido funcioacuten salario y coacutedigo 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 = lsquoENFERMEROrsquo or
funcion = lsquoENFERMERArsquo) and hospital_cod = (select hospital_cod from hospital where nombre =
lsquoSAN CARLOSrsquo)
Select apellido funcion salario hospital_cod from plantilla where
funcion in (ENFERMEROENFERMERA)
and hospital_cod = (select hospital_cod from hospital
where nombre = SAN CARLOS)
10 Visualizar los datos de los hospitales que tienen personal (Doctores) de cardiologiacutea
Select from hospital where hospital_cod in (select hospital_cod from doctor where
especialidad = lsquoCardiologiacutearsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 68
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 = lsquoPROVINCIALrsquo or
nombre= lsquoGENERALrsquo)
12 Mostrar el apellido de los enfermos que nacieron antes que el Sentildeor Miller
Select apellido from enfermo where Fecha_nac lt (select fecha_nac from enfermo where
apellido = lsquoMILLER Brsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 69
Simulacion de una clausula JOIN
Vamos a mostrar los oficios que estaacuten en maacutes de un departamento
Select distinct e1oficio from emp as e1
where e1oficio in(Select e2oficio from emp as e2
where e1dept_no ltgt e2dept_no)
Se debe utilizar antes una combinacioacuten que una subconsulta la combinacioacuten seriacutea asi dando los
mismos resultados
Select distinct e1Oficio from emp as e1
inner join emp as e2
on e1oficio = e2oficio
where e1dept_no ltgt e2dept_no
Estos son los dos oficios que estaacuten en
maacutes de un departamento
Subconsulta para simular una clausula HAVING
select e1apellidoe1oficio e1salario
from emp as e1
where e1salario gt
(select avg(e2salario) from emp as e2
where e1oficio = e2oficio)
Esta es la consulta utilizando el HAVING que es la que deberiacuteamos utilizar antes que una
subconsulta de simulacioacuten HAVING
SELECT e1apellidoe1oficio e1salario
FROM emp AS e1
INNER JOIN emp AS e2
ON e1oficio = e2oficio
GROUP BY e1oficio e1salarioe1apellido
HAVING e1salario gt AVG (e2salario)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 70
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 19
Ejemplo 21
Mostrar todos los productos cuya cuarta letra sea A
Select from productos where nombreproducto like ___a
USO DEL OPERADOR BETWEEN
Permite seleccionar en base a un rango de valores
Ejemplo 22
Lista de productos cuyo precio se encuentra en el rango que va de 15 a 21 nuevos soles
Select from productos where preciounidad between 15 and 21
Ejemplo 23
Lista de productos cuyo nombre se encuentren en el rango de Cerveza y galletas
Select from productos where nombreproducto between cerveza and galletas
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 20
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 (londresPariacutesTokyo)
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 (preciounidadcantidad)019 as IGV
from [detalles de pedidos]
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 21
Ejemplo 27
Mostar los productos cuyo precio sea mayor a 40
Select from productos where Preciounidad gt 40
Ejemplo 28
Mostrar todos los datos de los Clientes ordenados por Ciudad
Select from clientes order by ciudad
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 22
Ejemplo 29
Mostrar todos los productos de la Categoriacutea 2
Select from productos where IdCategoriacutea=2
Ejemplo 30
Mostrar todos los pedidos realizados en la fecha 1996-06-05
Select from Pedidos where FechaPedido =1996-06-05
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 23
Ejemplo 31
Mostrar todos los pedidos mayores a la Fecha 1996-05-05
Select from Pedidos where FechaPedido gt 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 IdCategoriacutea no sea 3
Select from productos where IdCategoriacutealtgt 3
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 24
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 Categoriacutea (123)
Select from productos where IdCategoriacutea not in (1 2 3) order by IdProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 25
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
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 26
USO DE FUNCIONES
Podemos utilizar funciones para construir expresiones y generar columnas computadoras O condiciones
complejas
Funcioacuten de agregacioacuten
Son funciones que se utilizan para calcular valores en las tablas Si queremos usarlas
combinaacutendolas 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
expresioacuten HAVING Equivalente a where
Todos estos ejercicios han sido desarrollado con la base de datos Poseidoacuten
COUNT Cuenta los registros que hay en la consulta
Si pongo un valor dentro de la expresioacuten devolveraacute la cuenta de todos los
registros no nulos
Si pongo un asterisco contaraacute todos los registros aunque tengan valores
nulos
Select count () from Pedidos Valores con Nulos
Select count (FechaEnviacuteo) from Pedidos Valores sin nulos
AVG Realiza la media sobre la expresioacuten dada debe ser un tipo de dato
Int
Select avg(Preciounidad) from productos
MAX Saca el valor maacuteximo de una consulta
Select max (FechaPedido) from Pedidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 27
MIN Devuelve el valor miacutenimo 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 paiacutes Brasil mostrando el nuacutemero de los Factura con el paiacutes de
Destinatario Brasil
Select count () as [Numero de Facturas] PaiacutesDestinatario
Avg (Preciounidad) as [Precio Medio] from
Facturas group by PaiacutesDestinatario having PaiacutesDestinatario =Brasil
Ejemplo 39
Encontrar el precio maacutes alto mas bajo y la diferencia entre ambos de todos los productos con
IdCategoriacutea 2
Select IdCategoriacutea Max (Preciounidad) as [Precio mas alto] min(Preciounidad) as
[Precio mas Bajo] Max(Preciounidad) - min(Preciounidad) as [Diferencia entre Ambos]
from Productos group by IdCategoriacutea having IdCategoriacutea = 2
Ejemplo 40
Visualizar el nuacutemero de productos por Categoriacutea
Select IdCategoriacutea as [Nordm de Categoriacutea] Count (IdCategoriacutea) as [Nordm de Productos]
From Productos group by IdCategoriacutea
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 28
Ejemplo 41
Visualizar los clientes que vivan en las siguientes ciudades Londres Madrid y Barcelona
Select count () as [Nordm de personas] ciudad from clientes group by ciudad Having ciudad in
(londresMadridBarcelona) order by ciudad
Ejemplo 42
Lista de productos cuya venta allaacute sido mayor a 50000
Select IdProducto Monto=Sum (Preciounidad Cantidad) from [Detalles de pedidos] group
by IdProducto having Sum (Preciounidad Cantidad)gt50000 order by IdProducto
Ejemplo 43
Cuantos Clientes no tienen Fax
Select Count () as [Total de Clientes sin Fax] from clientes where fax is null
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 29
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
Funcioacuten Resultado
GETDATE() Retorna la fecha y hora del sistema
DATEADD(partefechanfecha) Retorna una nueva fecha antildeadiendo n
unidades de partefecha a fecha
DATEDIFF(parteFechafecha1fecha2) Retorna la diferencia en parteFecha entre
fecha1 y fecha2
DATENAME(partefechafecha) Retorna la cadena correspondiente a
partefecha en fecha
DATEPART(partefechafecha) Retorna el numero correspondiente a
partefecha y fecha
DAY(fecha) Retorna el numero correspondiente a la
parte del diacutea de fecha
MONTH(fecha) Retorna el numero correspondiente a la
parte del mes de fecha
YEAR(fecha) Retorna el numero correspondiente a la
parte del antildeo de fecha
GETUTCDATE() Retorna la fecha y hora del meridiano de
Greenwich
La siguiente tabla muestra los valores de partefecha que podemos utilizar
partefecha Abreviatura
Year Yy yyyy
Quarter Qq q
Month Mm m
Dayofyear Dy y
Day Dd d
Week Wk ww
weekday Dw
Hour Hh
minute Mi n
second Ss s
milisecond Ms
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 30
Getdate
Select getdate () Funcioacuten que recupera la fecha actual del sistema
Convert Cast
Convierten expliacutecitamente una expresioacuten de un tipo de datos en otro CAST y CONVERT
proporcionan funciones similares
Convert (Tipodedatosdestino Origen Estilo)
o Tipodedatosdestino Siempre ha de ser tipo caraacutecter
o Origen Puede ser tipo fecha numeacuterico o moneda
o Estilo Opcional Es un coacutedigo que indica el formato en el que devuelve la cadena de
caracteres
Sintaxis
Convert (TipoDato Dato)
Cast (Dato as TipoDato)
Ejemplo
declare n intpalabra nvarchar(10)
set n = 1
set palabra =Nuacutemero
print convert(nvarchar(2)n) + + palabra
print cast(n as nvarchar(2)) + + palabra
while (nlt11)
begin
print convert(nvarchar(2)n) + + palabra
print cast(n as nvarchar(2)) + + palabra
set n = n + 1
end
DateName
Devuelve una cadena de caracteres que representa la parte de la fecha especificada de la fecha
especificada
Los caacutelculos 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
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 31
Ejemplo 46
Select IdPedido DateName (week FechaPedido) as Numero de Semana from Pedidos where IdPedido
= 1035251
Ejemplo 47
Select IdPedido datename (weekday FechaPedido) as Diacutea De Semana from Pedidos where IdPedido =
10352 Martes
Horas
Ejemplo 48
Select IdPedido datename (mi FechaPedido) as Minutos from Pedidos where IdPedido = 10352
Ejemplo 49
Select DateName (minute getdate ()) as minutos
Ejemplo 50
Select DateName (Hh FechaPedido) as hora from Pedidos where IdPedido = 10352
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 32
Ejemplo 51
Select DateName (Hour getdate ()) as hora--gt18
Ejemplo 52
Select DateName (Hh getdate ()) as hora--gt18
DatePart
Devuelve la parte de la fecha u hora indicada Sintaxis
Datepart (Valor devolver fecha)
Ejemplo 53
Select IdPedido datepart (mm FechaPedido) as Mes from Pedidos where IdPedido = 10352
Ejemplo 54
Select Datepart (Hh getdate ()) as Hora--gt17
Ejemplo 55
Select Datepart (mi getdate ()) as Minutos--gt54
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 33
Nombres de Fechas
Day (fecha)
Devuelve UN INT equivale a Datepart
Select day (getdate ()) as diacutea--gt6 (diacutea en la que se ejecuta la sentencia)
Select Datepart (dd getdate ()) --gt6 (diacutea en la que se ejecuta la sentencia)
Select Month (getdate ()) --gt1 (Mes en la que se ejecuta la sentencia)
Select Datepart (mm getdate ()) --gt1 (Mes en la que se ejecuta la sentencia)
Select Year (getdate ()) --gt2008 (Antildeo en la que se ejecuta la sentencia)
Ejemplo 56
Select year (FechaPedido) as Antildeo from Pedidos where IdPedido = 10352
Ejemplo 57
Select datediff (yyyy FechaPedido getdate()) as Dia from Pedidos where IdPedido = 10352
DateAdd
DateAdd (Datepart number date)
Antildeade un nuacutemero a la fecha puesta
DatePart es el formato de lo que queremos antildeadir
Number es el nuacutemero que queremos incrementar la fecha expuesta
Select convert (datetime1-1-02)
Select dateadd (dd 71-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 comparacioacuten y el tipo de dato
que nos devolveraacute antildeos diacuteas minutos etc
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 34
Ejemplo 58
Select datediff (yyyy FechaPedido getdate ()) as Dia from Pedidos where IdPedido = 10352
Ejercicios de funciones de Fecha
Ejemplo 59
Lista de pedidos emitidos en febrero de 1996
Select from Pedidos where month (FechaPedido) =2 and year (FechaPedido) =1996
Ejemplo 60
Lista de Pedidos mostrando la diferencia en diacuteas entre la fecha del pedido y la fecha de Envioacute
Select IdPedido FechaPedido FechaEnviacuteo diacuteas =datediff (day FechaPedido FechaEnviacuteo) from
pedidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 35
Ejemplo 61
Genere un listado de pedidos en el que la fecha del pedido se muestre en el formato nombre del
diacutea diacutea de mes antildeo
Select IdPedido FechaPedido Fecha=datename (dw IdPedido)+ + str (datepart (dd
IdPedido) 2)+ de +datename (mm IdPedido)+ de +str (datepart (yy IdPedido) 4) from
pedidos
Ejemplo 62
Mostrar de la tabla pedidos la fecha de pedidos en fecha corta
Select IdPedido convert (varchar (30) FechaPedido 106) as [Fecha Corta] from pedidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 36
FUNCIONES MATEMATICAS
ABS
Es el valor Absoluto
Select ABS (-4) as VALOR ABSOLUTO--gt4
CEILING
Devuelve el entero maacutes pequentildeo mayor o igual que la expresioacuten numeacuterica dada
Select CEILING (54) as CEILING--6
FLOOR
Devuelve el entero maacutes grande menor o igual que la expresioacuten numeacuterica dada
Select FLOOR (5) as FLOOR--gt5
POWER
Devuelve el valor de la expresioacuten indicada elevada a la potencia especificada
Select POWER (3 2) as 3 ELEVADO A 2--gt9
RAND
Devuelve un valor float aleatorio de 0 a 1
Las llamadas repetitivas de RAND() en una uacutenica consulta produciraacuten el mismo valor
Select RAND(6) as ALEATORIO--071368515806921451
Select RAND(6) as ALEATORIO--071368515806921451
Select RAND(4) as ALEATORIO--07136478921266981
Rand sobre los milisegundos actuales
Select RAND(DATEPART(msGETDATE())) as ALEATORIO--gt071443047691954253
Select RAND(999999999)--gt068504257551273573
ROUND
Devuelve una expresioacuten numeacuterica redondeada a la longitud o precisioacuten especificada
Round (Nuacutemero Redondeo del Nuacutemero)
ROUND siempre devuelve un valor Si length es un valor negativo y mayor que el nuacutemero de
diacutegitos anteriores al separador decimal ROUND devuelve 0
Select ROUND (1234567 2) --gt1234600
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 37
Select ROUND (1234567-2) --gt1000000
Select ROUND (1234567 0) --gt1230000
Select ROUND (1234567-3) ---gt0
SIGN
Devuelve el signo positivo (+1) cero (0) o negativo (-1) de la expresioacuten especificada
Dice el valor negativo positivo o neutro (0) del valor especificado
Select SIGN (-3) --gt-1
Select SIGN (3) --gt1
Select SIGN (0) --gt0
SQUARE
Devuelve el cuadrado de la expresioacuten especificada
Select SQUARE (4) as bdquoCuadrado‟--gt160
SQRT
Devuelve la raiacutez cuadrada de la expresioacuten especificada
Select SQRT (4) as [RAIZ CUADRADA] --gt20
FUNCIONES DE CADENA
ASCII
Devuelve el coacutedigo ASCII del caraacutecter maacutes a la izquierda de una expresioacuten de caracteres
Select ASCII(A)--gt65
Select ASCII(a)--gt97
Select ascii(aula)--gt97
CHAR
Una funcioacuten de cadena que convierte un coacutedigo ASCII int en un caraacutecter
select char(65)--gtA
select char(97)--gta
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 38
CHARINDEX
Devuelve la posicioacuten inicial de la expresioacuten especificada en una cadena de caracteres
CHARINDEX (expression1 expression2 [ start_location])
Argumentos
expression1
Es una expresioacuten que contiene la secuencia de caracteres que se desea buscar
Expression1 es una expresioacuten del tipo de cadenas cortas de caracteres
Expression2
Es una expresioacuten normalmente una columna
en la que se busca la cadena especificada
Expression2 es de la categoriacutea del tipo de datos cadena de caracteres
start_location
Es la posicioacuten del caraacutecter de expression2 en el que se empieza la buacutesqueda de expression1
Si no se especifica start_location es un nuacutemero negativo o es cero
la buacutesqueda empieza al principio de la cadena expression2
Si expression1 no se encuentra en expression2 CHARINDEX devuelve 0
Si alguno de los dos es null devuelve null
Select charindex (ciemurcielago) --gt4
Select charindex (ciemurcielago 2) --gt4
Select charindex (ciemurcielago 5) --gt0
Select charindex (ciemurcielago-6) --gt4
LEFT
Devuelve la parte de una cadena de caracteres que comienza en un nuacutemero de caracteres
especificado a partir de la izquierda
Select left (murcielago5) --gtmurci
RIGHT
Devuelve la parte de una cadena de caracteres que
Comienza en el nuacutemero de caracteres especificado
En integer_expression a partir de la derecha
Select right (hola que tal5) --gte tal
LEN
Cuenta el nuacutemero de caracteres que se incluyen en la cadena
Select len (murcieacutelago) --gt10
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 39
LOWER
Convierte a Minuacutesculas la cadena especificada
Select lower (MurcIELaGO) as [minusculas] --gtmurcielago
UPPER
Convierte a Mayuacutesculas la cadena especificada
Select upper (murcielago) as [MAYUSCULAS] --gtMURCIELAGO
RTRIM y LTRIM
Elimina los espacios que existen a la izquierda y a la derecha respectivamente
Select Rtrim ( murcieacutelago ) AS [SIN ESPACIOS] --gtmurcieacutelago
Select Ltrim ( murcieacutelago ) AS [SIN ESPACIOS] --gtmurcieacutelago
Select ltrim(rtrim( hola ))+
REPLACE
Reemplaza por una tercera expresioacuten todas las apariciones
de la segunda expresioacuten de cadena proporcionada en la primera expresioacuten de cadena
Select replace (hola que tal estasaA) --gtholA que tAl estAs
Select replace (buenos dias que tal estasuentildentildentilde) --gtbntildentildentildenos diasqntildentildentilde tal estas
SPACE
Coloca el nuacutemero de espacios que se le indiquen para entre una cadena de caracteres
Select hola+space(5)+que tal--gthola que tal
SUBSTRING
Devuelve parte de una expresioacuten de caracteres binaria de texto o de imagen
Sintaxis
SUBSTRING (Expresioacuten Comienzo Duracioacuten)
Argumentos
Expresioacuten
Es una cadena de caracteres cadena binaria texto imagen
Columna o expresioacuten que incluye una columna
No deben usarse expresiones que incluyan funciones de agregado
Start
Es un entero que especifica el punto en que comienza la subcadena
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 40
Length
Es un entero que especifica la longitud de la subcadena
(El nuacutemero de caracteres o bytes que se devuelven)
Select substring (murcielago 3 5) --gtrciel
Select substring (murcielago 3 len (murcielago)) --gtrciel
REVERSE
Devuelve invertida una expresioacuten de caraacutecter
Select reverse (hola)
REPLICATE
Repite una expresioacuten de caracteres un nuacutemero especificado de veces
Select replicate (murcielago 5)
Replicate replicate replicate replicate replicate
STUFF
Elimina el nuacutemero de caracteres especificados e insertados
Otro conjunto de caracteres en un punto de inicio indicado
Select STUFF (Murcieacutelago 2 3 ijklmn) Mijklmnielago
FUNCIONES DE SISTEMA
- APP_NAME () Devuelve el nombre de la aplicacioacuten actual
Select app_name () as [Nombre de la aplicacion]
- DATALENGTH (Expresioacuten) Devuelve un entero que es numero de bites necesarios para
representar esa expresioacuten int
Select datalength (Ninoni) as [Numero de bites]
- ISDATE (Expresioacuten) Dice si la expresioacuten es una fecha o no Devuelve 1 si la expresioacuten es
una fecha y 0 si no es una fecha
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 41
Select isdate (121001) as [Validacioacuten Fecha]
- ISNUMERIC (Expresion) Dice si la expresioacuten es un numero o no Devuelve 1 si la
expresioacuten es un nuacutemero y 0 si la expresioacuten no es nuacutemero
Select isnumeric (ddd) as [Validacion Numero]
- ISNULL (Expresioacuten ExpresionDevuelta) Si la expresioacuten es nula te devuelve la Expresioacuten
Devuelta y si no devuelve la primera Expresioacuten
Select isnull (nullNo nulo) as [Es Nulo]
- PARSENAME (bdquoNombreObjeto‟ ParteNombre)
ParteNombre es un valor de tipo Int que coge unos determinados valores del
NombreObjeto
1 Objeto
2 Propietario
3 Base de Datos
4 Servidor
Select parsename (saposeidondbopedidos1) as [Parte Expresioacuten]
Select parsename (saposeidondbopedidos 2) as [Parte Expresioacuten]
Select parsename (saposeidondbopedidos3) as [Parte Expresioacuten]
Select parsename ( saposeidondbopedidos 4) as [Parte Expresioacuten]
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 42
- SYSTEM_USER Devuelve el usuario del sistema actual
Depende de la autentificacioacuten con la que te hayas conectado
Select system_user as [Usuario conectado]
- USER_NAME() Devuelve el nombre del usuario actual
Select user_name ()
- COALESCE (expresioacuten1 expresioacuten2 )
Devuelve la primera expresioacuten no NULL
Si todos son NULL devuelve NULL
Select coalesce (PrecioUnidad Cantidad) from [detalles de Pedidos] Si el PrecioUnidad es nulo
devolveraacute la Cantidad y si los dos son nulos devolveraacute un campo Null
PROCEDIMIENTOS PARA AGRUPAR Y RESUMIR DATOS
En el examen de certificacioacuten 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 usaraacute la base de datos indicada Ejemplo Ponemos
en el analizador de consultas lo siguiente
Use Northwind
Select from [Order Details]
[Order Details]
Esta tabla perteneciente a la Northwind se encarga de manejar los pedidos
Order Id Nordm de Pedido
Producto Id Nordm de Producto
Ambos campos son Primary Key con lo que no puede haber una combinacioacuten de ambos campos que sea
igual
OrderId ProductId
1 A
1 B
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 43
1 C
2 A
3 C
Es decir en este caso no podriacutea existir una nueva combinacioacuten ldquo1 Ardquo o ldquo2 Ardquo
Quantity Es la cantidad del producto del pedido
ROLLUP
Se usa para presentar resuacutemenes de datos A de usarse junto con la clausula group by lo que hace es
realizar un resumen de los campos incluidos en el rollup
Ejemplo 63
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
Group by ProductID OrderID
with Rollup
Order by ProductID OrderID
Este ejemplo suma todas las cantidades y mediante
rollup muestra una fila con la suma de todas las
cantidades de cada producto y ademaacutes otra fila con la
suma de todas las cantidades de todos los productos El
resultado de este ejemplo seriacutea el que muestra la
imagen
Ejemplo 64
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
where orderid lt 10250
Group by ProductID OrderID
with Rollup
Order by ProductID OrderID
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 44
CUBE
Al igual que Rollup realiza resuacutemenes de campos agrupados Pero en este caso muestra un resumen con
cada combinacioacuten posible de los campos agrupados
Ejemplo 65
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
where orderid lt 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 combinacioacuten posible entre el
productid y el orderid
GROUPING
Indica si el resultado de un campo es el que hay en la propia tabla o se ha introducido mediante una
claacuteusula de resumen es decir para saber por ejemplo si un ldquoNullrdquo 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 lt 10250 Group by ProductID
OrderID with Cube Order by ProductID OrderID
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 45
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
Ponieacutendole un alias al
grouping saldriacutea el nombre
de columna que le
indiquemos
COMPUTE
Realiza un resumen en una columna aparte con el resultado de la funcioacuten de agregado indicada Su
formato seriacutea Compute funcioacuten(campo) No se puede utilizar en aplicaciones cliente servidor es una
clausula meramente informativa Tampoco se le pueden poner alias a los resuacutemenes
Ejemplo 67
Select Productid Orderid Quantity From [Order Details] order by ProductID Orderid compute
Sum(quantity)
Vemos que muestra la
columna con la suma
total de todas las
cantidades
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 46
Ejercicios de ROLLUP GROUPING y CUBE
Ejemplo 68
Realizar una consulta que resuma la cantidad de artiacuteculos pedidos por cada iacutendice de producto y
nuacutemero de pedido Realizando un caacutelculo acumulativo
select productid as [PRODUCTO] orderid as [Nordm PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] group by productid orderid with rollup order by productid orderid
PRODUCTO Nordm 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
hellip
Ejemplo 69
Modificacioacuten al ejercicio anterior Realizar el mismo resumen pero uacutenicamente para el producto
cuyo id es 50
select productid as [PRODUCTO] orderid as [Nordm PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] where productid = 50 group by productid orderid with rollup order by productid ordered
PRODUCTO Nordm 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
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 47
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 modificacioacuten 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 [Nordm PEDIDO] grouping(orderid) as [GRUPO PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] where productid = 50 group by Productidorderid with cube order by productidorderid
PRODUCTO GRUPO PRODUCTO Nordm PEDIDO GRUPO PEDIDO SUMA TOTAL
----------- -------------- ----------- ------------ -----------
NULL 1 NULL 1 235
NULL 1 10350 0 15
NULL 1 10383 0 15
NULL 1 10429 0 40
NULL 1 10465 0 25
NULL 1 10637 0 25
NULL 1 10729 0 40
NULL 1 10751 0 20
NULL 1 10920 0 24
NULL 1 10948 0 9
NULL 1 11072 0 22
50 0 NULL 1 235
50 0 10350 0 15
50 0 10383 0 15
50 0 10429 0 40
50 0 10465 0 25
50 0 10637 0 25
50 0 10729 0 40
50 0 10751 0 20
50 0 10920 0 24
50 0 10948 0 9
50 0 11072 0 22
(22 filas afectadas)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 48
Obtencioacuten de resuacutemenes 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 maacutes columnas y
luego efectuar alguna operacioacuten de resumen sobre cada grupo asiacute generado
La diferencia con GROUP BY es que permite mostrar informacioacuten mas detallada de cada grupo
Ejemplo 71
Lista de pedidos que muestre por coacutedigo de pedido la cantidad de productos vendidos por cada uno
de ellos
select Idpedidoidproductopreciounidadcantidad[Sub Total]=sum(PreciounidadCantidad) from
[detalles de pedidos] group by Idpedidoidproductopreciounidadcantidad order by IdPedido compute
sum(Cantidad) by IdPedido
EJERCICIOS CON COMPUTE
Ejemplo 72
Generar un resumen de subtotales en una consulta que devuelva el nuacutemero de pedido la cantidad
pedida para todos los orderid 11070
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 49
Select Orderid as [Nordm PEDIDO] Quantity AS [CANTIDAD] From [Order Details] where orderid gt= 11070 order by Orderid compute Sum(quantity) by orderid compute sum(quantity)
Nordm PEDIDO CANTIDAD
----------- --------
11070 40
11070 20
11070 30
11070 20
sum
===========
110
sum
===========
110
(6 filas afectadas)
Ejemplo 73
Generar un resumen con calculo de subtotales similar al anterior pero para los orderid 11075 y
11076
Select Orderid as [Nordm PEDIDO] Quantity as [CANTIDAD] From [Order Details] where orderid = 11075 or orderid = 11076 order by Orderid compute Sum(quantity) by ordered Nordm PEDIDO CANTIDAD ----------- -------- 11075 10 11075 30 11075 2 sum =========== 42 Nordm PEDIDO CANTIDAD ----------- -------- 11076 20 11076 20 11076 10
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 50
sum =========== 50 (8 filas afectadas)
Ejemplo 74
Modificacioacuten al ejercicio anterior Agregar la cantidad total y la cantidad promedio al final del
informe
Select Orderid as [Nordm 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)
Nordm PEDIDO CANTIDAD
----------- --------
11075 10
11075 30
11075 2
sum
===========
42
Nordm PEDIDO CANTIDAD
----------- --------
11076 20
11076 20
11076 10
sum
===========
50
sum
===========
92
avg
===========
15
(10 filas afectadas)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 51
Ejemplo 75
Seleccionar de forma agrupada por tipo todos los tipos la suma de los precios y la suma del
anticipo de la tabla tiacutetulos
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 199900 50000000
business 119500 50000000
business 29900 101250000
business 199900 50000000
sum
=====================
549200
avg
=====================
62812500
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
mod_cook 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
avg
=====================
75000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
popular_comp 229500 70000000
popular_comp 200000 80000000
popular_comp NULL NULL
sum
=====================
429500
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 52
avg
=====================
75000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
psychology 215900 70000000
psychology 109500 22750000
psychology 70000 60000000
psychology 199900 20000000
psychology 79900 40000000
sum
=====================
675200
avg
=====================
42550000
(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 ademaacutes 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 199900 50000000
business 119500 50000000
business 29900 101250000
business 199900 50000000
sum
=====================
549200
sum
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 53
=====================
251250000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
mod_cook 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
popular_comp 229500 70000000
popular_comp 200000 80000000
popular_comp NULL NULL
sum
=====================
429500
sum
=====================
150000000
(30 filas afectadas)
Ejemplo 77
Generar un informe que muestre la suma de los precios de los libros de psicologiacutea 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 109500
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 54
psychology 0736 70000
psychology 0736 199900
psychology 0736 79900
sum
=====================
459300
TIPO CODIGO EDITOR PRECIO
------------ ------------- ---------------------
psychology 0877 215900
sum
=====================
215900
(7 filas afectadas)
Ejemplo 78
Generar un informe que obtenga la suma de los precios de todos los libros de psicologiacutea asiacute como la
suma de los precios de los libros de psicologiacutea 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 109500
psychology 0736 70000
psychology 0736 199900
psychology 0736 79900
sum
=====================
459300
TIPO CODIGO EDITOR PRECIO
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 55
------------ ------------- ---------------------
psychology 0877 215900
sum
=====================
215900
sum
=====================
675200
(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 199900 0000
mod_cook 0877 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO CODIGO EDITOR PRECIO ANTICIPO
------------ ------------- --------------------- ---------------------
trad_cook 0877 119500 40000000
trad_cook 0877 209500 70000000
trad_cook 0877 149900 80000000
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 56
sum
=====================
478900
sum
=====================
190000000
(9 filas afectadas)
Ejemplo 80
Generar un informe que muestre todos los tiacutetulos precio y anticipo de aquellos tiacutetulos que tengan
un precio superior a 20 doacutelares Ofreceraacute tambieacuten la suma total del precio y del anticipo
Select title as [TITULO] price as [PRECIO] advance as [ANTICIPO] From titles where price gt 20 order by title compute sum(price) compute sum(advance)
TITULO PRECIO ANTICIPO
-------------------------------------------------------------------------------- --------------------- -------------
--------
But Is It User Friendly 229500 70000000
Computer Phobic AND Non-Phobic Individuals Behavior Variations 215900
70000000
Onions Leeks and Garlic Cooking Secrets of the Mediterranean 209500
70000000
sum
=====================
654900
sum
=====================
210000000
(5 filas afectadas)
Ejemplo 81
Generar un informe que muestre el precio el tipo y el nuacutemero de editor de la tabla titles de todos
aquellas obras que pertenezcan la categoriacutea de ldquobusinessrdquo Ademaacutes apareceraacute la suma total de
precios y el maacuteximo pub_id de esta seleccioacuten
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 57
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 29900 0736
business 199900 1389
business 199900 1389
business 119500 1389
sum
=====================
549200
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 Mostraraacute la suma de los precios y los anticipos por tipo y luego calcularaacute 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 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
trad_cook 209500 70000000
trad_cook 119500 40000000
trad_cook 149900 80000000
sum
=====================
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 58
478900
sum
=====================
190000000
sum
=====================
708700
sum
=====================
340000000
(11 filas afectadas)
Eliminacioacuten 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 iquestA que precio se ah vendido los productos
Select IdProducto Preciounidad from [Detalles de pedidos] order by IdProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 59
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 mayoriacutea de las consultas que se hacen en una base de datos requiere que se lean datos procedentes
de dos oacute maacutes tablas
INNER JOIN- son las filas que satisfacen la condicioacuten de la combinacioacuten
En la siguiente sentencia SQL enlaza 2 tablas la tabla clientes y la tabla pedidos en esta ejemplo me
muestra los campos nombre compantildeiacutea y el campo idpedido
La uacutenica condicioacuten es que las 2 tablas tengan un campo en comuacuten
Ejemplo 84
select clientesNombreCompantildeiacuteapedidosidpedido from clientes inner join pedidos on
clientesidcliente=pedidosidcliente
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 60
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 pedidosIdPedido pedidosIdCliente 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 pedidosIdPedido pedidosIdCliente order
by pedidos IdPedido
CROSS JOIN
Un Cross Join es la consulta correlacionada que combine cada una de las filas de una de las tablas con
todas las filas de la otra tabla
No es necesario que exista una columna en comuacuten para ejecutar el Cross Join
Ejemplo 86
La siguiente consulta combina cada una de las filas de la tabla categoriacuteas con cada una de las filas de la
tabla productos
select productosNombreProductocategoriasNombrecategoria from productos cross join categorias
order by productosNombreProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 61
Ejercicios de consultas Muacuteltiples
Ejemplo 87
Mostrar el pedidos completo con el id=10248
Select pedidosIdPedido pedidosIdCliente
Total=sum ([detalles de pedidos]Preciounidad[detalles de pedidos]Cantidad)
From [detalles de pedidos] inner join pedidos on
[Detalles de pedidos]IdPedido=pedidosIdPedido where pedidosIdPedido=10248
Group by pedidosIdPedido pedidosIdCliente
Ejemplo 88
1 Mostrar la cantidad de productos por categoriacutea
Select CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
[Total de Producto]=sum (UnidadesEnExistencia) from Categoriacuteas inner join
Productos on CategoriacuteasIdCategoriacutea=productosIdCategoriacutea
Group by CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 62
Ejemplo 89
Calcular cuantas ventas tiene cada uno de los vendedores
Select empleadosIdEmpleado empleadosNombre empleadosApellidos
[Total de ventas]=count (pedidosIdPedido) from empleados
Inner join Pedidos on empleadosIdEmpleado=pedidosIdEmpleado
Group by empleadosIdEmpleado empleadosNombre empleadosApellidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 63
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 despueacutes saca la de Plantilla
Recomendaciones a la hora de usar las combinaciones
Combinar tablas en funcioacuten de claves principales y externas
Limite el nuacutemero de tablas de las combinaciones
Select Apellido
Oficio as
OFICIOFUNCION
salario from emp
UNION
Select Apellido
Funcion Salario from
Plantilla
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 64
SUBCONSULTAS
Es una SELECT anidada en una instruccioacuten INSERT DELETE SELECT o UPDATE
Como una tabla derivada
Select eemp_no as Numero
eApellido
from (select emp_no apellido from emp) as e
Como una expresioacuten
Select emp_no as [Numero]
Apellido
Salario
(select avg(Salario) from emp)
as Diferencia
from emp
where oficio = Empleado
Para correlacionar datos
- Expresioacuten dinaacutemica que cambia en cada fila de una consulta externa
- Es una combinacioacuten entre la subconsulta y la fila de la consulta externa
- Dividen consultas complejas con dos o maacutes consultas simples relacionadas
Subconsulta correlacionada
Select apellido oficiodept_no
from emp as e
where 20 lt
(select dept_no from dept as d
where edept_no = ddept_no
and ddnombre = Ventas)
SUBCONSULTAS
1 Mostrar el numero de empleado el apellido y la fecha de alta del empleado mas antiguo de la
empresa
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 65
SELECT emp_noapellido
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_noapellido
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 Jimeacutenez
select apellido oficio from emp where
oficio = (select oficio from emp where apellido = JIMENEZ)
4 Queremos saber el apellido oficio salario y nuacutemero 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 gt (select max (salario) from
emp where dept_no = 30)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 66
5 Mostrar el apellido la funcioacuten sala o departamento de todos los empleados que trabajen en la
empresa
select eApellido eOficio as [Cargo en Empresa] ddnombre as [Oficina]
from emp as e
inner join dept as d
on edept_no = ddept_no
union
select pApellido pfuncion snombre
from plantilla as p
inner join sala as s
on phospital_cod = shospital_cod
and psala_cod = ssala_cod
union
select dApellido despecialidad hnombre
from doctor as d
inner join hospital as h
on dhospital_cod = hhospital_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 = lsquoventasrsquo))
order by 2
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 67
8 Mostrar los empleados que tienen mejor salario que la media de los directores no incluyendo al
presidente
Select from emp where salario gt
(select avg (salario) from emp where oficio = DIRECTOR)
and oficio ltgt PRESIDENTE
9 Mostrar el apellido funcioacuten salario y coacutedigo 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 = lsquoENFERMEROrsquo or
funcion = lsquoENFERMERArsquo) and hospital_cod = (select hospital_cod from hospital where nombre =
lsquoSAN CARLOSrsquo)
Select apellido funcion salario hospital_cod from plantilla where
funcion in (ENFERMEROENFERMERA)
and hospital_cod = (select hospital_cod from hospital
where nombre = SAN CARLOS)
10 Visualizar los datos de los hospitales que tienen personal (Doctores) de cardiologiacutea
Select from hospital where hospital_cod in (select hospital_cod from doctor where
especialidad = lsquoCardiologiacutearsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 68
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 = lsquoPROVINCIALrsquo or
nombre= lsquoGENERALrsquo)
12 Mostrar el apellido de los enfermos que nacieron antes que el Sentildeor Miller
Select apellido from enfermo where Fecha_nac lt (select fecha_nac from enfermo where
apellido = lsquoMILLER Brsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 69
Simulacion de una clausula JOIN
Vamos a mostrar los oficios que estaacuten en maacutes de un departamento
Select distinct e1oficio from emp as e1
where e1oficio in(Select e2oficio from emp as e2
where e1dept_no ltgt e2dept_no)
Se debe utilizar antes una combinacioacuten que una subconsulta la combinacioacuten seriacutea asi dando los
mismos resultados
Select distinct e1Oficio from emp as e1
inner join emp as e2
on e1oficio = e2oficio
where e1dept_no ltgt e2dept_no
Estos son los dos oficios que estaacuten en
maacutes de un departamento
Subconsulta para simular una clausula HAVING
select e1apellidoe1oficio e1salario
from emp as e1
where e1salario gt
(select avg(e2salario) from emp as e2
where e1oficio = e2oficio)
Esta es la consulta utilizando el HAVING que es la que deberiacuteamos utilizar antes que una
subconsulta de simulacioacuten HAVING
SELECT e1apellidoe1oficio e1salario
FROM emp AS e1
INNER JOIN emp AS e2
ON e1oficio = e2oficio
GROUP BY e1oficio e1salarioe1apellido
HAVING e1salario gt AVG (e2salario)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 70
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 20
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 (londresPariacutesTokyo)
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 (preciounidadcantidad)019 as IGV
from [detalles de pedidos]
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 21
Ejemplo 27
Mostar los productos cuyo precio sea mayor a 40
Select from productos where Preciounidad gt 40
Ejemplo 28
Mostrar todos los datos de los Clientes ordenados por Ciudad
Select from clientes order by ciudad
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 22
Ejemplo 29
Mostrar todos los productos de la Categoriacutea 2
Select from productos where IdCategoriacutea=2
Ejemplo 30
Mostrar todos los pedidos realizados en la fecha 1996-06-05
Select from Pedidos where FechaPedido =1996-06-05
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 23
Ejemplo 31
Mostrar todos los pedidos mayores a la Fecha 1996-05-05
Select from Pedidos where FechaPedido gt 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 IdCategoriacutea no sea 3
Select from productos where IdCategoriacutealtgt 3
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 24
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 Categoriacutea (123)
Select from productos where IdCategoriacutea not in (1 2 3) order by IdProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 25
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
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 26
USO DE FUNCIONES
Podemos utilizar funciones para construir expresiones y generar columnas computadoras O condiciones
complejas
Funcioacuten de agregacioacuten
Son funciones que se utilizan para calcular valores en las tablas Si queremos usarlas
combinaacutendolas 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
expresioacuten HAVING Equivalente a where
Todos estos ejercicios han sido desarrollado con la base de datos Poseidoacuten
COUNT Cuenta los registros que hay en la consulta
Si pongo un valor dentro de la expresioacuten devolveraacute la cuenta de todos los
registros no nulos
Si pongo un asterisco contaraacute todos los registros aunque tengan valores
nulos
Select count () from Pedidos Valores con Nulos
Select count (FechaEnviacuteo) from Pedidos Valores sin nulos
AVG Realiza la media sobre la expresioacuten dada debe ser un tipo de dato
Int
Select avg(Preciounidad) from productos
MAX Saca el valor maacuteximo de una consulta
Select max (FechaPedido) from Pedidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 27
MIN Devuelve el valor miacutenimo 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 paiacutes Brasil mostrando el nuacutemero de los Factura con el paiacutes de
Destinatario Brasil
Select count () as [Numero de Facturas] PaiacutesDestinatario
Avg (Preciounidad) as [Precio Medio] from
Facturas group by PaiacutesDestinatario having PaiacutesDestinatario =Brasil
Ejemplo 39
Encontrar el precio maacutes alto mas bajo y la diferencia entre ambos de todos los productos con
IdCategoriacutea 2
Select IdCategoriacutea Max (Preciounidad) as [Precio mas alto] min(Preciounidad) as
[Precio mas Bajo] Max(Preciounidad) - min(Preciounidad) as [Diferencia entre Ambos]
from Productos group by IdCategoriacutea having IdCategoriacutea = 2
Ejemplo 40
Visualizar el nuacutemero de productos por Categoriacutea
Select IdCategoriacutea as [Nordm de Categoriacutea] Count (IdCategoriacutea) as [Nordm de Productos]
From Productos group by IdCategoriacutea
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 28
Ejemplo 41
Visualizar los clientes que vivan en las siguientes ciudades Londres Madrid y Barcelona
Select count () as [Nordm de personas] ciudad from clientes group by ciudad Having ciudad in
(londresMadridBarcelona) order by ciudad
Ejemplo 42
Lista de productos cuya venta allaacute sido mayor a 50000
Select IdProducto Monto=Sum (Preciounidad Cantidad) from [Detalles de pedidos] group
by IdProducto having Sum (Preciounidad Cantidad)gt50000 order by IdProducto
Ejemplo 43
Cuantos Clientes no tienen Fax
Select Count () as [Total de Clientes sin Fax] from clientes where fax is null
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 29
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
Funcioacuten Resultado
GETDATE() Retorna la fecha y hora del sistema
DATEADD(partefechanfecha) Retorna una nueva fecha antildeadiendo n
unidades de partefecha a fecha
DATEDIFF(parteFechafecha1fecha2) Retorna la diferencia en parteFecha entre
fecha1 y fecha2
DATENAME(partefechafecha) Retorna la cadena correspondiente a
partefecha en fecha
DATEPART(partefechafecha) Retorna el numero correspondiente a
partefecha y fecha
DAY(fecha) Retorna el numero correspondiente a la
parte del diacutea de fecha
MONTH(fecha) Retorna el numero correspondiente a la
parte del mes de fecha
YEAR(fecha) Retorna el numero correspondiente a la
parte del antildeo de fecha
GETUTCDATE() Retorna la fecha y hora del meridiano de
Greenwich
La siguiente tabla muestra los valores de partefecha que podemos utilizar
partefecha Abreviatura
Year Yy yyyy
Quarter Qq q
Month Mm m
Dayofyear Dy y
Day Dd d
Week Wk ww
weekday Dw
Hour Hh
minute Mi n
second Ss s
milisecond Ms
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 30
Getdate
Select getdate () Funcioacuten que recupera la fecha actual del sistema
Convert Cast
Convierten expliacutecitamente una expresioacuten de un tipo de datos en otro CAST y CONVERT
proporcionan funciones similares
Convert (Tipodedatosdestino Origen Estilo)
o Tipodedatosdestino Siempre ha de ser tipo caraacutecter
o Origen Puede ser tipo fecha numeacuterico o moneda
o Estilo Opcional Es un coacutedigo que indica el formato en el que devuelve la cadena de
caracteres
Sintaxis
Convert (TipoDato Dato)
Cast (Dato as TipoDato)
Ejemplo
declare n intpalabra nvarchar(10)
set n = 1
set palabra =Nuacutemero
print convert(nvarchar(2)n) + + palabra
print cast(n as nvarchar(2)) + + palabra
while (nlt11)
begin
print convert(nvarchar(2)n) + + palabra
print cast(n as nvarchar(2)) + + palabra
set n = n + 1
end
DateName
Devuelve una cadena de caracteres que representa la parte de la fecha especificada de la fecha
especificada
Los caacutelculos 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
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 31
Ejemplo 46
Select IdPedido DateName (week FechaPedido) as Numero de Semana from Pedidos where IdPedido
= 1035251
Ejemplo 47
Select IdPedido datename (weekday FechaPedido) as Diacutea De Semana from Pedidos where IdPedido =
10352 Martes
Horas
Ejemplo 48
Select IdPedido datename (mi FechaPedido) as Minutos from Pedidos where IdPedido = 10352
Ejemplo 49
Select DateName (minute getdate ()) as minutos
Ejemplo 50
Select DateName (Hh FechaPedido) as hora from Pedidos where IdPedido = 10352
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 32
Ejemplo 51
Select DateName (Hour getdate ()) as hora--gt18
Ejemplo 52
Select DateName (Hh getdate ()) as hora--gt18
DatePart
Devuelve la parte de la fecha u hora indicada Sintaxis
Datepart (Valor devolver fecha)
Ejemplo 53
Select IdPedido datepart (mm FechaPedido) as Mes from Pedidos where IdPedido = 10352
Ejemplo 54
Select Datepart (Hh getdate ()) as Hora--gt17
Ejemplo 55
Select Datepart (mi getdate ()) as Minutos--gt54
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 33
Nombres de Fechas
Day (fecha)
Devuelve UN INT equivale a Datepart
Select day (getdate ()) as diacutea--gt6 (diacutea en la que se ejecuta la sentencia)
Select Datepart (dd getdate ()) --gt6 (diacutea en la que se ejecuta la sentencia)
Select Month (getdate ()) --gt1 (Mes en la que se ejecuta la sentencia)
Select Datepart (mm getdate ()) --gt1 (Mes en la que se ejecuta la sentencia)
Select Year (getdate ()) --gt2008 (Antildeo en la que se ejecuta la sentencia)
Ejemplo 56
Select year (FechaPedido) as Antildeo from Pedidos where IdPedido = 10352
Ejemplo 57
Select datediff (yyyy FechaPedido getdate()) as Dia from Pedidos where IdPedido = 10352
DateAdd
DateAdd (Datepart number date)
Antildeade un nuacutemero a la fecha puesta
DatePart es el formato de lo que queremos antildeadir
Number es el nuacutemero que queremos incrementar la fecha expuesta
Select convert (datetime1-1-02)
Select dateadd (dd 71-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 comparacioacuten y el tipo de dato
que nos devolveraacute antildeos diacuteas minutos etc
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 34
Ejemplo 58
Select datediff (yyyy FechaPedido getdate ()) as Dia from Pedidos where IdPedido = 10352
Ejercicios de funciones de Fecha
Ejemplo 59
Lista de pedidos emitidos en febrero de 1996
Select from Pedidos where month (FechaPedido) =2 and year (FechaPedido) =1996
Ejemplo 60
Lista de Pedidos mostrando la diferencia en diacuteas entre la fecha del pedido y la fecha de Envioacute
Select IdPedido FechaPedido FechaEnviacuteo diacuteas =datediff (day FechaPedido FechaEnviacuteo) from
pedidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 35
Ejemplo 61
Genere un listado de pedidos en el que la fecha del pedido se muestre en el formato nombre del
diacutea diacutea de mes antildeo
Select IdPedido FechaPedido Fecha=datename (dw IdPedido)+ + str (datepart (dd
IdPedido) 2)+ de +datename (mm IdPedido)+ de +str (datepart (yy IdPedido) 4) from
pedidos
Ejemplo 62
Mostrar de la tabla pedidos la fecha de pedidos en fecha corta
Select IdPedido convert (varchar (30) FechaPedido 106) as [Fecha Corta] from pedidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 36
FUNCIONES MATEMATICAS
ABS
Es el valor Absoluto
Select ABS (-4) as VALOR ABSOLUTO--gt4
CEILING
Devuelve el entero maacutes pequentildeo mayor o igual que la expresioacuten numeacuterica dada
Select CEILING (54) as CEILING--6
FLOOR
Devuelve el entero maacutes grande menor o igual que la expresioacuten numeacuterica dada
Select FLOOR (5) as FLOOR--gt5
POWER
Devuelve el valor de la expresioacuten indicada elevada a la potencia especificada
Select POWER (3 2) as 3 ELEVADO A 2--gt9
RAND
Devuelve un valor float aleatorio de 0 a 1
Las llamadas repetitivas de RAND() en una uacutenica consulta produciraacuten el mismo valor
Select RAND(6) as ALEATORIO--071368515806921451
Select RAND(6) as ALEATORIO--071368515806921451
Select RAND(4) as ALEATORIO--07136478921266981
Rand sobre los milisegundos actuales
Select RAND(DATEPART(msGETDATE())) as ALEATORIO--gt071443047691954253
Select RAND(999999999)--gt068504257551273573
ROUND
Devuelve una expresioacuten numeacuterica redondeada a la longitud o precisioacuten especificada
Round (Nuacutemero Redondeo del Nuacutemero)
ROUND siempre devuelve un valor Si length es un valor negativo y mayor que el nuacutemero de
diacutegitos anteriores al separador decimal ROUND devuelve 0
Select ROUND (1234567 2) --gt1234600
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 37
Select ROUND (1234567-2) --gt1000000
Select ROUND (1234567 0) --gt1230000
Select ROUND (1234567-3) ---gt0
SIGN
Devuelve el signo positivo (+1) cero (0) o negativo (-1) de la expresioacuten especificada
Dice el valor negativo positivo o neutro (0) del valor especificado
Select SIGN (-3) --gt-1
Select SIGN (3) --gt1
Select SIGN (0) --gt0
SQUARE
Devuelve el cuadrado de la expresioacuten especificada
Select SQUARE (4) as bdquoCuadrado‟--gt160
SQRT
Devuelve la raiacutez cuadrada de la expresioacuten especificada
Select SQRT (4) as [RAIZ CUADRADA] --gt20
FUNCIONES DE CADENA
ASCII
Devuelve el coacutedigo ASCII del caraacutecter maacutes a la izquierda de una expresioacuten de caracteres
Select ASCII(A)--gt65
Select ASCII(a)--gt97
Select ascii(aula)--gt97
CHAR
Una funcioacuten de cadena que convierte un coacutedigo ASCII int en un caraacutecter
select char(65)--gtA
select char(97)--gta
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 38
CHARINDEX
Devuelve la posicioacuten inicial de la expresioacuten especificada en una cadena de caracteres
CHARINDEX (expression1 expression2 [ start_location])
Argumentos
expression1
Es una expresioacuten que contiene la secuencia de caracteres que se desea buscar
Expression1 es una expresioacuten del tipo de cadenas cortas de caracteres
Expression2
Es una expresioacuten normalmente una columna
en la que se busca la cadena especificada
Expression2 es de la categoriacutea del tipo de datos cadena de caracteres
start_location
Es la posicioacuten del caraacutecter de expression2 en el que se empieza la buacutesqueda de expression1
Si no se especifica start_location es un nuacutemero negativo o es cero
la buacutesqueda empieza al principio de la cadena expression2
Si expression1 no se encuentra en expression2 CHARINDEX devuelve 0
Si alguno de los dos es null devuelve null
Select charindex (ciemurcielago) --gt4
Select charindex (ciemurcielago 2) --gt4
Select charindex (ciemurcielago 5) --gt0
Select charindex (ciemurcielago-6) --gt4
LEFT
Devuelve la parte de una cadena de caracteres que comienza en un nuacutemero de caracteres
especificado a partir de la izquierda
Select left (murcielago5) --gtmurci
RIGHT
Devuelve la parte de una cadena de caracteres que
Comienza en el nuacutemero de caracteres especificado
En integer_expression a partir de la derecha
Select right (hola que tal5) --gte tal
LEN
Cuenta el nuacutemero de caracteres que se incluyen en la cadena
Select len (murcieacutelago) --gt10
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 39
LOWER
Convierte a Minuacutesculas la cadena especificada
Select lower (MurcIELaGO) as [minusculas] --gtmurcielago
UPPER
Convierte a Mayuacutesculas la cadena especificada
Select upper (murcielago) as [MAYUSCULAS] --gtMURCIELAGO
RTRIM y LTRIM
Elimina los espacios que existen a la izquierda y a la derecha respectivamente
Select Rtrim ( murcieacutelago ) AS [SIN ESPACIOS] --gtmurcieacutelago
Select Ltrim ( murcieacutelago ) AS [SIN ESPACIOS] --gtmurcieacutelago
Select ltrim(rtrim( hola ))+
REPLACE
Reemplaza por una tercera expresioacuten todas las apariciones
de la segunda expresioacuten de cadena proporcionada en la primera expresioacuten de cadena
Select replace (hola que tal estasaA) --gtholA que tAl estAs
Select replace (buenos dias que tal estasuentildentildentilde) --gtbntildentildentildenos diasqntildentildentilde tal estas
SPACE
Coloca el nuacutemero de espacios que se le indiquen para entre una cadena de caracteres
Select hola+space(5)+que tal--gthola que tal
SUBSTRING
Devuelve parte de una expresioacuten de caracteres binaria de texto o de imagen
Sintaxis
SUBSTRING (Expresioacuten Comienzo Duracioacuten)
Argumentos
Expresioacuten
Es una cadena de caracteres cadena binaria texto imagen
Columna o expresioacuten que incluye una columna
No deben usarse expresiones que incluyan funciones de agregado
Start
Es un entero que especifica el punto en que comienza la subcadena
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 40
Length
Es un entero que especifica la longitud de la subcadena
(El nuacutemero de caracteres o bytes que se devuelven)
Select substring (murcielago 3 5) --gtrciel
Select substring (murcielago 3 len (murcielago)) --gtrciel
REVERSE
Devuelve invertida una expresioacuten de caraacutecter
Select reverse (hola)
REPLICATE
Repite una expresioacuten de caracteres un nuacutemero especificado de veces
Select replicate (murcielago 5)
Replicate replicate replicate replicate replicate
STUFF
Elimina el nuacutemero de caracteres especificados e insertados
Otro conjunto de caracteres en un punto de inicio indicado
Select STUFF (Murcieacutelago 2 3 ijklmn) Mijklmnielago
FUNCIONES DE SISTEMA
- APP_NAME () Devuelve el nombre de la aplicacioacuten actual
Select app_name () as [Nombre de la aplicacion]
- DATALENGTH (Expresioacuten) Devuelve un entero que es numero de bites necesarios para
representar esa expresioacuten int
Select datalength (Ninoni) as [Numero de bites]
- ISDATE (Expresioacuten) Dice si la expresioacuten es una fecha o no Devuelve 1 si la expresioacuten es
una fecha y 0 si no es una fecha
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 41
Select isdate (121001) as [Validacioacuten Fecha]
- ISNUMERIC (Expresion) Dice si la expresioacuten es un numero o no Devuelve 1 si la
expresioacuten es un nuacutemero y 0 si la expresioacuten no es nuacutemero
Select isnumeric (ddd) as [Validacion Numero]
- ISNULL (Expresioacuten ExpresionDevuelta) Si la expresioacuten es nula te devuelve la Expresioacuten
Devuelta y si no devuelve la primera Expresioacuten
Select isnull (nullNo nulo) as [Es Nulo]
- PARSENAME (bdquoNombreObjeto‟ ParteNombre)
ParteNombre es un valor de tipo Int que coge unos determinados valores del
NombreObjeto
1 Objeto
2 Propietario
3 Base de Datos
4 Servidor
Select parsename (saposeidondbopedidos1) as [Parte Expresioacuten]
Select parsename (saposeidondbopedidos 2) as [Parte Expresioacuten]
Select parsename (saposeidondbopedidos3) as [Parte Expresioacuten]
Select parsename ( saposeidondbopedidos 4) as [Parte Expresioacuten]
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 42
- SYSTEM_USER Devuelve el usuario del sistema actual
Depende de la autentificacioacuten con la que te hayas conectado
Select system_user as [Usuario conectado]
- USER_NAME() Devuelve el nombre del usuario actual
Select user_name ()
- COALESCE (expresioacuten1 expresioacuten2 )
Devuelve la primera expresioacuten no NULL
Si todos son NULL devuelve NULL
Select coalesce (PrecioUnidad Cantidad) from [detalles de Pedidos] Si el PrecioUnidad es nulo
devolveraacute la Cantidad y si los dos son nulos devolveraacute un campo Null
PROCEDIMIENTOS PARA AGRUPAR Y RESUMIR DATOS
En el examen de certificacioacuten 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 usaraacute la base de datos indicada Ejemplo Ponemos
en el analizador de consultas lo siguiente
Use Northwind
Select from [Order Details]
[Order Details]
Esta tabla perteneciente a la Northwind se encarga de manejar los pedidos
Order Id Nordm de Pedido
Producto Id Nordm de Producto
Ambos campos son Primary Key con lo que no puede haber una combinacioacuten de ambos campos que sea
igual
OrderId ProductId
1 A
1 B
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 43
1 C
2 A
3 C
Es decir en este caso no podriacutea existir una nueva combinacioacuten ldquo1 Ardquo o ldquo2 Ardquo
Quantity Es la cantidad del producto del pedido
ROLLUP
Se usa para presentar resuacutemenes de datos A de usarse junto con la clausula group by lo que hace es
realizar un resumen de los campos incluidos en el rollup
Ejemplo 63
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
Group by ProductID OrderID
with Rollup
Order by ProductID OrderID
Este ejemplo suma todas las cantidades y mediante
rollup muestra una fila con la suma de todas las
cantidades de cada producto y ademaacutes otra fila con la
suma de todas las cantidades de todos los productos El
resultado de este ejemplo seriacutea el que muestra la
imagen
Ejemplo 64
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
where orderid lt 10250
Group by ProductID OrderID
with Rollup
Order by ProductID OrderID
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 44
CUBE
Al igual que Rollup realiza resuacutemenes de campos agrupados Pero en este caso muestra un resumen con
cada combinacioacuten posible de los campos agrupados
Ejemplo 65
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
where orderid lt 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 combinacioacuten posible entre el
productid y el orderid
GROUPING
Indica si el resultado de un campo es el que hay en la propia tabla o se ha introducido mediante una
claacuteusula de resumen es decir para saber por ejemplo si un ldquoNullrdquo 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 lt 10250 Group by ProductID
OrderID with Cube Order by ProductID OrderID
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 45
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
Ponieacutendole un alias al
grouping saldriacutea el nombre
de columna que le
indiquemos
COMPUTE
Realiza un resumen en una columna aparte con el resultado de la funcioacuten de agregado indicada Su
formato seriacutea Compute funcioacuten(campo) No se puede utilizar en aplicaciones cliente servidor es una
clausula meramente informativa Tampoco se le pueden poner alias a los resuacutemenes
Ejemplo 67
Select Productid Orderid Quantity From [Order Details] order by ProductID Orderid compute
Sum(quantity)
Vemos que muestra la
columna con la suma
total de todas las
cantidades
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 46
Ejercicios de ROLLUP GROUPING y CUBE
Ejemplo 68
Realizar una consulta que resuma la cantidad de artiacuteculos pedidos por cada iacutendice de producto y
nuacutemero de pedido Realizando un caacutelculo acumulativo
select productid as [PRODUCTO] orderid as [Nordm PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] group by productid orderid with rollup order by productid orderid
PRODUCTO Nordm 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
hellip
Ejemplo 69
Modificacioacuten al ejercicio anterior Realizar el mismo resumen pero uacutenicamente para el producto
cuyo id es 50
select productid as [PRODUCTO] orderid as [Nordm PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] where productid = 50 group by productid orderid with rollup order by productid ordered
PRODUCTO Nordm 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
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 47
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 modificacioacuten 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 [Nordm PEDIDO] grouping(orderid) as [GRUPO PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] where productid = 50 group by Productidorderid with cube order by productidorderid
PRODUCTO GRUPO PRODUCTO Nordm PEDIDO GRUPO PEDIDO SUMA TOTAL
----------- -------------- ----------- ------------ -----------
NULL 1 NULL 1 235
NULL 1 10350 0 15
NULL 1 10383 0 15
NULL 1 10429 0 40
NULL 1 10465 0 25
NULL 1 10637 0 25
NULL 1 10729 0 40
NULL 1 10751 0 20
NULL 1 10920 0 24
NULL 1 10948 0 9
NULL 1 11072 0 22
50 0 NULL 1 235
50 0 10350 0 15
50 0 10383 0 15
50 0 10429 0 40
50 0 10465 0 25
50 0 10637 0 25
50 0 10729 0 40
50 0 10751 0 20
50 0 10920 0 24
50 0 10948 0 9
50 0 11072 0 22
(22 filas afectadas)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 48
Obtencioacuten de resuacutemenes 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 maacutes columnas y
luego efectuar alguna operacioacuten de resumen sobre cada grupo asiacute generado
La diferencia con GROUP BY es que permite mostrar informacioacuten mas detallada de cada grupo
Ejemplo 71
Lista de pedidos que muestre por coacutedigo de pedido la cantidad de productos vendidos por cada uno
de ellos
select Idpedidoidproductopreciounidadcantidad[Sub Total]=sum(PreciounidadCantidad) from
[detalles de pedidos] group by Idpedidoidproductopreciounidadcantidad order by IdPedido compute
sum(Cantidad) by IdPedido
EJERCICIOS CON COMPUTE
Ejemplo 72
Generar un resumen de subtotales en una consulta que devuelva el nuacutemero de pedido la cantidad
pedida para todos los orderid 11070
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 49
Select Orderid as [Nordm PEDIDO] Quantity AS [CANTIDAD] From [Order Details] where orderid gt= 11070 order by Orderid compute Sum(quantity) by orderid compute sum(quantity)
Nordm PEDIDO CANTIDAD
----------- --------
11070 40
11070 20
11070 30
11070 20
sum
===========
110
sum
===========
110
(6 filas afectadas)
Ejemplo 73
Generar un resumen con calculo de subtotales similar al anterior pero para los orderid 11075 y
11076
Select Orderid as [Nordm PEDIDO] Quantity as [CANTIDAD] From [Order Details] where orderid = 11075 or orderid = 11076 order by Orderid compute Sum(quantity) by ordered Nordm PEDIDO CANTIDAD ----------- -------- 11075 10 11075 30 11075 2 sum =========== 42 Nordm PEDIDO CANTIDAD ----------- -------- 11076 20 11076 20 11076 10
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 50
sum =========== 50 (8 filas afectadas)
Ejemplo 74
Modificacioacuten al ejercicio anterior Agregar la cantidad total y la cantidad promedio al final del
informe
Select Orderid as [Nordm 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)
Nordm PEDIDO CANTIDAD
----------- --------
11075 10
11075 30
11075 2
sum
===========
42
Nordm PEDIDO CANTIDAD
----------- --------
11076 20
11076 20
11076 10
sum
===========
50
sum
===========
92
avg
===========
15
(10 filas afectadas)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 51
Ejemplo 75
Seleccionar de forma agrupada por tipo todos los tipos la suma de los precios y la suma del
anticipo de la tabla tiacutetulos
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 199900 50000000
business 119500 50000000
business 29900 101250000
business 199900 50000000
sum
=====================
549200
avg
=====================
62812500
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
mod_cook 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
avg
=====================
75000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
popular_comp 229500 70000000
popular_comp 200000 80000000
popular_comp NULL NULL
sum
=====================
429500
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 52
avg
=====================
75000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
psychology 215900 70000000
psychology 109500 22750000
psychology 70000 60000000
psychology 199900 20000000
psychology 79900 40000000
sum
=====================
675200
avg
=====================
42550000
(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 ademaacutes 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 199900 50000000
business 119500 50000000
business 29900 101250000
business 199900 50000000
sum
=====================
549200
sum
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 53
=====================
251250000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
mod_cook 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
popular_comp 229500 70000000
popular_comp 200000 80000000
popular_comp NULL NULL
sum
=====================
429500
sum
=====================
150000000
(30 filas afectadas)
Ejemplo 77
Generar un informe que muestre la suma de los precios de los libros de psicologiacutea 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 109500
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 54
psychology 0736 70000
psychology 0736 199900
psychology 0736 79900
sum
=====================
459300
TIPO CODIGO EDITOR PRECIO
------------ ------------- ---------------------
psychology 0877 215900
sum
=====================
215900
(7 filas afectadas)
Ejemplo 78
Generar un informe que obtenga la suma de los precios de todos los libros de psicologiacutea asiacute como la
suma de los precios de los libros de psicologiacutea 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 109500
psychology 0736 70000
psychology 0736 199900
psychology 0736 79900
sum
=====================
459300
TIPO CODIGO EDITOR PRECIO
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 55
------------ ------------- ---------------------
psychology 0877 215900
sum
=====================
215900
sum
=====================
675200
(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 199900 0000
mod_cook 0877 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO CODIGO EDITOR PRECIO ANTICIPO
------------ ------------- --------------------- ---------------------
trad_cook 0877 119500 40000000
trad_cook 0877 209500 70000000
trad_cook 0877 149900 80000000
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 56
sum
=====================
478900
sum
=====================
190000000
(9 filas afectadas)
Ejemplo 80
Generar un informe que muestre todos los tiacutetulos precio y anticipo de aquellos tiacutetulos que tengan
un precio superior a 20 doacutelares Ofreceraacute tambieacuten la suma total del precio y del anticipo
Select title as [TITULO] price as [PRECIO] advance as [ANTICIPO] From titles where price gt 20 order by title compute sum(price) compute sum(advance)
TITULO PRECIO ANTICIPO
-------------------------------------------------------------------------------- --------------------- -------------
--------
But Is It User Friendly 229500 70000000
Computer Phobic AND Non-Phobic Individuals Behavior Variations 215900
70000000
Onions Leeks and Garlic Cooking Secrets of the Mediterranean 209500
70000000
sum
=====================
654900
sum
=====================
210000000
(5 filas afectadas)
Ejemplo 81
Generar un informe que muestre el precio el tipo y el nuacutemero de editor de la tabla titles de todos
aquellas obras que pertenezcan la categoriacutea de ldquobusinessrdquo Ademaacutes apareceraacute la suma total de
precios y el maacuteximo pub_id de esta seleccioacuten
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 57
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 29900 0736
business 199900 1389
business 199900 1389
business 119500 1389
sum
=====================
549200
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 Mostraraacute la suma de los precios y los anticipos por tipo y luego calcularaacute 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 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
trad_cook 209500 70000000
trad_cook 119500 40000000
trad_cook 149900 80000000
sum
=====================
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 58
478900
sum
=====================
190000000
sum
=====================
708700
sum
=====================
340000000
(11 filas afectadas)
Eliminacioacuten 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 iquestA que precio se ah vendido los productos
Select IdProducto Preciounidad from [Detalles de pedidos] order by IdProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 59
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 mayoriacutea de las consultas que se hacen en una base de datos requiere que se lean datos procedentes
de dos oacute maacutes tablas
INNER JOIN- son las filas que satisfacen la condicioacuten de la combinacioacuten
En la siguiente sentencia SQL enlaza 2 tablas la tabla clientes y la tabla pedidos en esta ejemplo me
muestra los campos nombre compantildeiacutea y el campo idpedido
La uacutenica condicioacuten es que las 2 tablas tengan un campo en comuacuten
Ejemplo 84
select clientesNombreCompantildeiacuteapedidosidpedido from clientes inner join pedidos on
clientesidcliente=pedidosidcliente
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 60
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 pedidosIdPedido pedidosIdCliente 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 pedidosIdPedido pedidosIdCliente order
by pedidos IdPedido
CROSS JOIN
Un Cross Join es la consulta correlacionada que combine cada una de las filas de una de las tablas con
todas las filas de la otra tabla
No es necesario que exista una columna en comuacuten para ejecutar el Cross Join
Ejemplo 86
La siguiente consulta combina cada una de las filas de la tabla categoriacuteas con cada una de las filas de la
tabla productos
select productosNombreProductocategoriasNombrecategoria from productos cross join categorias
order by productosNombreProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 61
Ejercicios de consultas Muacuteltiples
Ejemplo 87
Mostrar el pedidos completo con el id=10248
Select pedidosIdPedido pedidosIdCliente
Total=sum ([detalles de pedidos]Preciounidad[detalles de pedidos]Cantidad)
From [detalles de pedidos] inner join pedidos on
[Detalles de pedidos]IdPedido=pedidosIdPedido where pedidosIdPedido=10248
Group by pedidosIdPedido pedidosIdCliente
Ejemplo 88
1 Mostrar la cantidad de productos por categoriacutea
Select CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
[Total de Producto]=sum (UnidadesEnExistencia) from Categoriacuteas inner join
Productos on CategoriacuteasIdCategoriacutea=productosIdCategoriacutea
Group by CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 62
Ejemplo 89
Calcular cuantas ventas tiene cada uno de los vendedores
Select empleadosIdEmpleado empleadosNombre empleadosApellidos
[Total de ventas]=count (pedidosIdPedido) from empleados
Inner join Pedidos on empleadosIdEmpleado=pedidosIdEmpleado
Group by empleadosIdEmpleado empleadosNombre empleadosApellidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 63
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 despueacutes saca la de Plantilla
Recomendaciones a la hora de usar las combinaciones
Combinar tablas en funcioacuten de claves principales y externas
Limite el nuacutemero de tablas de las combinaciones
Select Apellido
Oficio as
OFICIOFUNCION
salario from emp
UNION
Select Apellido
Funcion Salario from
Plantilla
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 64
SUBCONSULTAS
Es una SELECT anidada en una instruccioacuten INSERT DELETE SELECT o UPDATE
Como una tabla derivada
Select eemp_no as Numero
eApellido
from (select emp_no apellido from emp) as e
Como una expresioacuten
Select emp_no as [Numero]
Apellido
Salario
(select avg(Salario) from emp)
as Diferencia
from emp
where oficio = Empleado
Para correlacionar datos
- Expresioacuten dinaacutemica que cambia en cada fila de una consulta externa
- Es una combinacioacuten entre la subconsulta y la fila de la consulta externa
- Dividen consultas complejas con dos o maacutes consultas simples relacionadas
Subconsulta correlacionada
Select apellido oficiodept_no
from emp as e
where 20 lt
(select dept_no from dept as d
where edept_no = ddept_no
and ddnombre = Ventas)
SUBCONSULTAS
1 Mostrar el numero de empleado el apellido y la fecha de alta del empleado mas antiguo de la
empresa
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 65
SELECT emp_noapellido
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_noapellido
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 Jimeacutenez
select apellido oficio from emp where
oficio = (select oficio from emp where apellido = JIMENEZ)
4 Queremos saber el apellido oficio salario y nuacutemero 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 gt (select max (salario) from
emp where dept_no = 30)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 66
5 Mostrar el apellido la funcioacuten sala o departamento de todos los empleados que trabajen en la
empresa
select eApellido eOficio as [Cargo en Empresa] ddnombre as [Oficina]
from emp as e
inner join dept as d
on edept_no = ddept_no
union
select pApellido pfuncion snombre
from plantilla as p
inner join sala as s
on phospital_cod = shospital_cod
and psala_cod = ssala_cod
union
select dApellido despecialidad hnombre
from doctor as d
inner join hospital as h
on dhospital_cod = hhospital_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 = lsquoventasrsquo))
order by 2
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 67
8 Mostrar los empleados que tienen mejor salario que la media de los directores no incluyendo al
presidente
Select from emp where salario gt
(select avg (salario) from emp where oficio = DIRECTOR)
and oficio ltgt PRESIDENTE
9 Mostrar el apellido funcioacuten salario y coacutedigo 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 = lsquoENFERMEROrsquo or
funcion = lsquoENFERMERArsquo) and hospital_cod = (select hospital_cod from hospital where nombre =
lsquoSAN CARLOSrsquo)
Select apellido funcion salario hospital_cod from plantilla where
funcion in (ENFERMEROENFERMERA)
and hospital_cod = (select hospital_cod from hospital
where nombre = SAN CARLOS)
10 Visualizar los datos de los hospitales que tienen personal (Doctores) de cardiologiacutea
Select from hospital where hospital_cod in (select hospital_cod from doctor where
especialidad = lsquoCardiologiacutearsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 68
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 = lsquoPROVINCIALrsquo or
nombre= lsquoGENERALrsquo)
12 Mostrar el apellido de los enfermos que nacieron antes que el Sentildeor Miller
Select apellido from enfermo where Fecha_nac lt (select fecha_nac from enfermo where
apellido = lsquoMILLER Brsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 69
Simulacion de una clausula JOIN
Vamos a mostrar los oficios que estaacuten en maacutes de un departamento
Select distinct e1oficio from emp as e1
where e1oficio in(Select e2oficio from emp as e2
where e1dept_no ltgt e2dept_no)
Se debe utilizar antes una combinacioacuten que una subconsulta la combinacioacuten seriacutea asi dando los
mismos resultados
Select distinct e1Oficio from emp as e1
inner join emp as e2
on e1oficio = e2oficio
where e1dept_no ltgt e2dept_no
Estos son los dos oficios que estaacuten en
maacutes de un departamento
Subconsulta para simular una clausula HAVING
select e1apellidoe1oficio e1salario
from emp as e1
where e1salario gt
(select avg(e2salario) from emp as e2
where e1oficio = e2oficio)
Esta es la consulta utilizando el HAVING que es la que deberiacuteamos utilizar antes que una
subconsulta de simulacioacuten HAVING
SELECT e1apellidoe1oficio e1salario
FROM emp AS e1
INNER JOIN emp AS e2
ON e1oficio = e2oficio
GROUP BY e1oficio e1salarioe1apellido
HAVING e1salario gt AVG (e2salario)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 70
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 21
Ejemplo 27
Mostar los productos cuyo precio sea mayor a 40
Select from productos where Preciounidad gt 40
Ejemplo 28
Mostrar todos los datos de los Clientes ordenados por Ciudad
Select from clientes order by ciudad
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 22
Ejemplo 29
Mostrar todos los productos de la Categoriacutea 2
Select from productos where IdCategoriacutea=2
Ejemplo 30
Mostrar todos los pedidos realizados en la fecha 1996-06-05
Select from Pedidos where FechaPedido =1996-06-05
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 23
Ejemplo 31
Mostrar todos los pedidos mayores a la Fecha 1996-05-05
Select from Pedidos where FechaPedido gt 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 IdCategoriacutea no sea 3
Select from productos where IdCategoriacutealtgt 3
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 24
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 Categoriacutea (123)
Select from productos where IdCategoriacutea not in (1 2 3) order by IdProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 25
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
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 26
USO DE FUNCIONES
Podemos utilizar funciones para construir expresiones y generar columnas computadoras O condiciones
complejas
Funcioacuten de agregacioacuten
Son funciones que se utilizan para calcular valores en las tablas Si queremos usarlas
combinaacutendolas 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
expresioacuten HAVING Equivalente a where
Todos estos ejercicios han sido desarrollado con la base de datos Poseidoacuten
COUNT Cuenta los registros que hay en la consulta
Si pongo un valor dentro de la expresioacuten devolveraacute la cuenta de todos los
registros no nulos
Si pongo un asterisco contaraacute todos los registros aunque tengan valores
nulos
Select count () from Pedidos Valores con Nulos
Select count (FechaEnviacuteo) from Pedidos Valores sin nulos
AVG Realiza la media sobre la expresioacuten dada debe ser un tipo de dato
Int
Select avg(Preciounidad) from productos
MAX Saca el valor maacuteximo de una consulta
Select max (FechaPedido) from Pedidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 27
MIN Devuelve el valor miacutenimo 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 paiacutes Brasil mostrando el nuacutemero de los Factura con el paiacutes de
Destinatario Brasil
Select count () as [Numero de Facturas] PaiacutesDestinatario
Avg (Preciounidad) as [Precio Medio] from
Facturas group by PaiacutesDestinatario having PaiacutesDestinatario =Brasil
Ejemplo 39
Encontrar el precio maacutes alto mas bajo y la diferencia entre ambos de todos los productos con
IdCategoriacutea 2
Select IdCategoriacutea Max (Preciounidad) as [Precio mas alto] min(Preciounidad) as
[Precio mas Bajo] Max(Preciounidad) - min(Preciounidad) as [Diferencia entre Ambos]
from Productos group by IdCategoriacutea having IdCategoriacutea = 2
Ejemplo 40
Visualizar el nuacutemero de productos por Categoriacutea
Select IdCategoriacutea as [Nordm de Categoriacutea] Count (IdCategoriacutea) as [Nordm de Productos]
From Productos group by IdCategoriacutea
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 28
Ejemplo 41
Visualizar los clientes que vivan en las siguientes ciudades Londres Madrid y Barcelona
Select count () as [Nordm de personas] ciudad from clientes group by ciudad Having ciudad in
(londresMadridBarcelona) order by ciudad
Ejemplo 42
Lista de productos cuya venta allaacute sido mayor a 50000
Select IdProducto Monto=Sum (Preciounidad Cantidad) from [Detalles de pedidos] group
by IdProducto having Sum (Preciounidad Cantidad)gt50000 order by IdProducto
Ejemplo 43
Cuantos Clientes no tienen Fax
Select Count () as [Total de Clientes sin Fax] from clientes where fax is null
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 29
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
Funcioacuten Resultado
GETDATE() Retorna la fecha y hora del sistema
DATEADD(partefechanfecha) Retorna una nueva fecha antildeadiendo n
unidades de partefecha a fecha
DATEDIFF(parteFechafecha1fecha2) Retorna la diferencia en parteFecha entre
fecha1 y fecha2
DATENAME(partefechafecha) Retorna la cadena correspondiente a
partefecha en fecha
DATEPART(partefechafecha) Retorna el numero correspondiente a
partefecha y fecha
DAY(fecha) Retorna el numero correspondiente a la
parte del diacutea de fecha
MONTH(fecha) Retorna el numero correspondiente a la
parte del mes de fecha
YEAR(fecha) Retorna el numero correspondiente a la
parte del antildeo de fecha
GETUTCDATE() Retorna la fecha y hora del meridiano de
Greenwich
La siguiente tabla muestra los valores de partefecha que podemos utilizar
partefecha Abreviatura
Year Yy yyyy
Quarter Qq q
Month Mm m
Dayofyear Dy y
Day Dd d
Week Wk ww
weekday Dw
Hour Hh
minute Mi n
second Ss s
milisecond Ms
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 30
Getdate
Select getdate () Funcioacuten que recupera la fecha actual del sistema
Convert Cast
Convierten expliacutecitamente una expresioacuten de un tipo de datos en otro CAST y CONVERT
proporcionan funciones similares
Convert (Tipodedatosdestino Origen Estilo)
o Tipodedatosdestino Siempre ha de ser tipo caraacutecter
o Origen Puede ser tipo fecha numeacuterico o moneda
o Estilo Opcional Es un coacutedigo que indica el formato en el que devuelve la cadena de
caracteres
Sintaxis
Convert (TipoDato Dato)
Cast (Dato as TipoDato)
Ejemplo
declare n intpalabra nvarchar(10)
set n = 1
set palabra =Nuacutemero
print convert(nvarchar(2)n) + + palabra
print cast(n as nvarchar(2)) + + palabra
while (nlt11)
begin
print convert(nvarchar(2)n) + + palabra
print cast(n as nvarchar(2)) + + palabra
set n = n + 1
end
DateName
Devuelve una cadena de caracteres que representa la parte de la fecha especificada de la fecha
especificada
Los caacutelculos 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
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 31
Ejemplo 46
Select IdPedido DateName (week FechaPedido) as Numero de Semana from Pedidos where IdPedido
= 1035251
Ejemplo 47
Select IdPedido datename (weekday FechaPedido) as Diacutea De Semana from Pedidos where IdPedido =
10352 Martes
Horas
Ejemplo 48
Select IdPedido datename (mi FechaPedido) as Minutos from Pedidos where IdPedido = 10352
Ejemplo 49
Select DateName (minute getdate ()) as minutos
Ejemplo 50
Select DateName (Hh FechaPedido) as hora from Pedidos where IdPedido = 10352
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 32
Ejemplo 51
Select DateName (Hour getdate ()) as hora--gt18
Ejemplo 52
Select DateName (Hh getdate ()) as hora--gt18
DatePart
Devuelve la parte de la fecha u hora indicada Sintaxis
Datepart (Valor devolver fecha)
Ejemplo 53
Select IdPedido datepart (mm FechaPedido) as Mes from Pedidos where IdPedido = 10352
Ejemplo 54
Select Datepart (Hh getdate ()) as Hora--gt17
Ejemplo 55
Select Datepart (mi getdate ()) as Minutos--gt54
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 33
Nombres de Fechas
Day (fecha)
Devuelve UN INT equivale a Datepart
Select day (getdate ()) as diacutea--gt6 (diacutea en la que se ejecuta la sentencia)
Select Datepart (dd getdate ()) --gt6 (diacutea en la que se ejecuta la sentencia)
Select Month (getdate ()) --gt1 (Mes en la que se ejecuta la sentencia)
Select Datepart (mm getdate ()) --gt1 (Mes en la que se ejecuta la sentencia)
Select Year (getdate ()) --gt2008 (Antildeo en la que se ejecuta la sentencia)
Ejemplo 56
Select year (FechaPedido) as Antildeo from Pedidos where IdPedido = 10352
Ejemplo 57
Select datediff (yyyy FechaPedido getdate()) as Dia from Pedidos where IdPedido = 10352
DateAdd
DateAdd (Datepart number date)
Antildeade un nuacutemero a la fecha puesta
DatePart es el formato de lo que queremos antildeadir
Number es el nuacutemero que queremos incrementar la fecha expuesta
Select convert (datetime1-1-02)
Select dateadd (dd 71-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 comparacioacuten y el tipo de dato
que nos devolveraacute antildeos diacuteas minutos etc
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 34
Ejemplo 58
Select datediff (yyyy FechaPedido getdate ()) as Dia from Pedidos where IdPedido = 10352
Ejercicios de funciones de Fecha
Ejemplo 59
Lista de pedidos emitidos en febrero de 1996
Select from Pedidos where month (FechaPedido) =2 and year (FechaPedido) =1996
Ejemplo 60
Lista de Pedidos mostrando la diferencia en diacuteas entre la fecha del pedido y la fecha de Envioacute
Select IdPedido FechaPedido FechaEnviacuteo diacuteas =datediff (day FechaPedido FechaEnviacuteo) from
pedidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 35
Ejemplo 61
Genere un listado de pedidos en el que la fecha del pedido se muestre en el formato nombre del
diacutea diacutea de mes antildeo
Select IdPedido FechaPedido Fecha=datename (dw IdPedido)+ + str (datepart (dd
IdPedido) 2)+ de +datename (mm IdPedido)+ de +str (datepart (yy IdPedido) 4) from
pedidos
Ejemplo 62
Mostrar de la tabla pedidos la fecha de pedidos en fecha corta
Select IdPedido convert (varchar (30) FechaPedido 106) as [Fecha Corta] from pedidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 36
FUNCIONES MATEMATICAS
ABS
Es el valor Absoluto
Select ABS (-4) as VALOR ABSOLUTO--gt4
CEILING
Devuelve el entero maacutes pequentildeo mayor o igual que la expresioacuten numeacuterica dada
Select CEILING (54) as CEILING--6
FLOOR
Devuelve el entero maacutes grande menor o igual que la expresioacuten numeacuterica dada
Select FLOOR (5) as FLOOR--gt5
POWER
Devuelve el valor de la expresioacuten indicada elevada a la potencia especificada
Select POWER (3 2) as 3 ELEVADO A 2--gt9
RAND
Devuelve un valor float aleatorio de 0 a 1
Las llamadas repetitivas de RAND() en una uacutenica consulta produciraacuten el mismo valor
Select RAND(6) as ALEATORIO--071368515806921451
Select RAND(6) as ALEATORIO--071368515806921451
Select RAND(4) as ALEATORIO--07136478921266981
Rand sobre los milisegundos actuales
Select RAND(DATEPART(msGETDATE())) as ALEATORIO--gt071443047691954253
Select RAND(999999999)--gt068504257551273573
ROUND
Devuelve una expresioacuten numeacuterica redondeada a la longitud o precisioacuten especificada
Round (Nuacutemero Redondeo del Nuacutemero)
ROUND siempre devuelve un valor Si length es un valor negativo y mayor que el nuacutemero de
diacutegitos anteriores al separador decimal ROUND devuelve 0
Select ROUND (1234567 2) --gt1234600
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 37
Select ROUND (1234567-2) --gt1000000
Select ROUND (1234567 0) --gt1230000
Select ROUND (1234567-3) ---gt0
SIGN
Devuelve el signo positivo (+1) cero (0) o negativo (-1) de la expresioacuten especificada
Dice el valor negativo positivo o neutro (0) del valor especificado
Select SIGN (-3) --gt-1
Select SIGN (3) --gt1
Select SIGN (0) --gt0
SQUARE
Devuelve el cuadrado de la expresioacuten especificada
Select SQUARE (4) as bdquoCuadrado‟--gt160
SQRT
Devuelve la raiacutez cuadrada de la expresioacuten especificada
Select SQRT (4) as [RAIZ CUADRADA] --gt20
FUNCIONES DE CADENA
ASCII
Devuelve el coacutedigo ASCII del caraacutecter maacutes a la izquierda de una expresioacuten de caracteres
Select ASCII(A)--gt65
Select ASCII(a)--gt97
Select ascii(aula)--gt97
CHAR
Una funcioacuten de cadena que convierte un coacutedigo ASCII int en un caraacutecter
select char(65)--gtA
select char(97)--gta
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 38
CHARINDEX
Devuelve la posicioacuten inicial de la expresioacuten especificada en una cadena de caracteres
CHARINDEX (expression1 expression2 [ start_location])
Argumentos
expression1
Es una expresioacuten que contiene la secuencia de caracteres que se desea buscar
Expression1 es una expresioacuten del tipo de cadenas cortas de caracteres
Expression2
Es una expresioacuten normalmente una columna
en la que se busca la cadena especificada
Expression2 es de la categoriacutea del tipo de datos cadena de caracteres
start_location
Es la posicioacuten del caraacutecter de expression2 en el que se empieza la buacutesqueda de expression1
Si no se especifica start_location es un nuacutemero negativo o es cero
la buacutesqueda empieza al principio de la cadena expression2
Si expression1 no se encuentra en expression2 CHARINDEX devuelve 0
Si alguno de los dos es null devuelve null
Select charindex (ciemurcielago) --gt4
Select charindex (ciemurcielago 2) --gt4
Select charindex (ciemurcielago 5) --gt0
Select charindex (ciemurcielago-6) --gt4
LEFT
Devuelve la parte de una cadena de caracteres que comienza en un nuacutemero de caracteres
especificado a partir de la izquierda
Select left (murcielago5) --gtmurci
RIGHT
Devuelve la parte de una cadena de caracteres que
Comienza en el nuacutemero de caracteres especificado
En integer_expression a partir de la derecha
Select right (hola que tal5) --gte tal
LEN
Cuenta el nuacutemero de caracteres que se incluyen en la cadena
Select len (murcieacutelago) --gt10
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 39
LOWER
Convierte a Minuacutesculas la cadena especificada
Select lower (MurcIELaGO) as [minusculas] --gtmurcielago
UPPER
Convierte a Mayuacutesculas la cadena especificada
Select upper (murcielago) as [MAYUSCULAS] --gtMURCIELAGO
RTRIM y LTRIM
Elimina los espacios que existen a la izquierda y a la derecha respectivamente
Select Rtrim ( murcieacutelago ) AS [SIN ESPACIOS] --gtmurcieacutelago
Select Ltrim ( murcieacutelago ) AS [SIN ESPACIOS] --gtmurcieacutelago
Select ltrim(rtrim( hola ))+
REPLACE
Reemplaza por una tercera expresioacuten todas las apariciones
de la segunda expresioacuten de cadena proporcionada en la primera expresioacuten de cadena
Select replace (hola que tal estasaA) --gtholA que tAl estAs
Select replace (buenos dias que tal estasuentildentildentilde) --gtbntildentildentildenos diasqntildentildentilde tal estas
SPACE
Coloca el nuacutemero de espacios que se le indiquen para entre una cadena de caracteres
Select hola+space(5)+que tal--gthola que tal
SUBSTRING
Devuelve parte de una expresioacuten de caracteres binaria de texto o de imagen
Sintaxis
SUBSTRING (Expresioacuten Comienzo Duracioacuten)
Argumentos
Expresioacuten
Es una cadena de caracteres cadena binaria texto imagen
Columna o expresioacuten que incluye una columna
No deben usarse expresiones que incluyan funciones de agregado
Start
Es un entero que especifica el punto en que comienza la subcadena
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 40
Length
Es un entero que especifica la longitud de la subcadena
(El nuacutemero de caracteres o bytes que se devuelven)
Select substring (murcielago 3 5) --gtrciel
Select substring (murcielago 3 len (murcielago)) --gtrciel
REVERSE
Devuelve invertida una expresioacuten de caraacutecter
Select reverse (hola)
REPLICATE
Repite una expresioacuten de caracteres un nuacutemero especificado de veces
Select replicate (murcielago 5)
Replicate replicate replicate replicate replicate
STUFF
Elimina el nuacutemero de caracteres especificados e insertados
Otro conjunto de caracteres en un punto de inicio indicado
Select STUFF (Murcieacutelago 2 3 ijklmn) Mijklmnielago
FUNCIONES DE SISTEMA
- APP_NAME () Devuelve el nombre de la aplicacioacuten actual
Select app_name () as [Nombre de la aplicacion]
- DATALENGTH (Expresioacuten) Devuelve un entero que es numero de bites necesarios para
representar esa expresioacuten int
Select datalength (Ninoni) as [Numero de bites]
- ISDATE (Expresioacuten) Dice si la expresioacuten es una fecha o no Devuelve 1 si la expresioacuten es
una fecha y 0 si no es una fecha
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 41
Select isdate (121001) as [Validacioacuten Fecha]
- ISNUMERIC (Expresion) Dice si la expresioacuten es un numero o no Devuelve 1 si la
expresioacuten es un nuacutemero y 0 si la expresioacuten no es nuacutemero
Select isnumeric (ddd) as [Validacion Numero]
- ISNULL (Expresioacuten ExpresionDevuelta) Si la expresioacuten es nula te devuelve la Expresioacuten
Devuelta y si no devuelve la primera Expresioacuten
Select isnull (nullNo nulo) as [Es Nulo]
- PARSENAME (bdquoNombreObjeto‟ ParteNombre)
ParteNombre es un valor de tipo Int que coge unos determinados valores del
NombreObjeto
1 Objeto
2 Propietario
3 Base de Datos
4 Servidor
Select parsename (saposeidondbopedidos1) as [Parte Expresioacuten]
Select parsename (saposeidondbopedidos 2) as [Parte Expresioacuten]
Select parsename (saposeidondbopedidos3) as [Parte Expresioacuten]
Select parsename ( saposeidondbopedidos 4) as [Parte Expresioacuten]
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 42
- SYSTEM_USER Devuelve el usuario del sistema actual
Depende de la autentificacioacuten con la que te hayas conectado
Select system_user as [Usuario conectado]
- USER_NAME() Devuelve el nombre del usuario actual
Select user_name ()
- COALESCE (expresioacuten1 expresioacuten2 )
Devuelve la primera expresioacuten no NULL
Si todos son NULL devuelve NULL
Select coalesce (PrecioUnidad Cantidad) from [detalles de Pedidos] Si el PrecioUnidad es nulo
devolveraacute la Cantidad y si los dos son nulos devolveraacute un campo Null
PROCEDIMIENTOS PARA AGRUPAR Y RESUMIR DATOS
En el examen de certificacioacuten 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 usaraacute la base de datos indicada Ejemplo Ponemos
en el analizador de consultas lo siguiente
Use Northwind
Select from [Order Details]
[Order Details]
Esta tabla perteneciente a la Northwind se encarga de manejar los pedidos
Order Id Nordm de Pedido
Producto Id Nordm de Producto
Ambos campos son Primary Key con lo que no puede haber una combinacioacuten de ambos campos que sea
igual
OrderId ProductId
1 A
1 B
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 43
1 C
2 A
3 C
Es decir en este caso no podriacutea existir una nueva combinacioacuten ldquo1 Ardquo o ldquo2 Ardquo
Quantity Es la cantidad del producto del pedido
ROLLUP
Se usa para presentar resuacutemenes de datos A de usarse junto con la clausula group by lo que hace es
realizar un resumen de los campos incluidos en el rollup
Ejemplo 63
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
Group by ProductID OrderID
with Rollup
Order by ProductID OrderID
Este ejemplo suma todas las cantidades y mediante
rollup muestra una fila con la suma de todas las
cantidades de cada producto y ademaacutes otra fila con la
suma de todas las cantidades de todos los productos El
resultado de este ejemplo seriacutea el que muestra la
imagen
Ejemplo 64
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
where orderid lt 10250
Group by ProductID OrderID
with Rollup
Order by ProductID OrderID
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 44
CUBE
Al igual que Rollup realiza resuacutemenes de campos agrupados Pero en este caso muestra un resumen con
cada combinacioacuten posible de los campos agrupados
Ejemplo 65
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
where orderid lt 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 combinacioacuten posible entre el
productid y el orderid
GROUPING
Indica si el resultado de un campo es el que hay en la propia tabla o se ha introducido mediante una
claacuteusula de resumen es decir para saber por ejemplo si un ldquoNullrdquo 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 lt 10250 Group by ProductID
OrderID with Cube Order by ProductID OrderID
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 45
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
Ponieacutendole un alias al
grouping saldriacutea el nombre
de columna que le
indiquemos
COMPUTE
Realiza un resumen en una columna aparte con el resultado de la funcioacuten de agregado indicada Su
formato seriacutea Compute funcioacuten(campo) No se puede utilizar en aplicaciones cliente servidor es una
clausula meramente informativa Tampoco se le pueden poner alias a los resuacutemenes
Ejemplo 67
Select Productid Orderid Quantity From [Order Details] order by ProductID Orderid compute
Sum(quantity)
Vemos que muestra la
columna con la suma
total de todas las
cantidades
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 46
Ejercicios de ROLLUP GROUPING y CUBE
Ejemplo 68
Realizar una consulta que resuma la cantidad de artiacuteculos pedidos por cada iacutendice de producto y
nuacutemero de pedido Realizando un caacutelculo acumulativo
select productid as [PRODUCTO] orderid as [Nordm PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] group by productid orderid with rollup order by productid orderid
PRODUCTO Nordm 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
hellip
Ejemplo 69
Modificacioacuten al ejercicio anterior Realizar el mismo resumen pero uacutenicamente para el producto
cuyo id es 50
select productid as [PRODUCTO] orderid as [Nordm PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] where productid = 50 group by productid orderid with rollup order by productid ordered
PRODUCTO Nordm 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
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 47
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 modificacioacuten 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 [Nordm PEDIDO] grouping(orderid) as [GRUPO PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] where productid = 50 group by Productidorderid with cube order by productidorderid
PRODUCTO GRUPO PRODUCTO Nordm PEDIDO GRUPO PEDIDO SUMA TOTAL
----------- -------------- ----------- ------------ -----------
NULL 1 NULL 1 235
NULL 1 10350 0 15
NULL 1 10383 0 15
NULL 1 10429 0 40
NULL 1 10465 0 25
NULL 1 10637 0 25
NULL 1 10729 0 40
NULL 1 10751 0 20
NULL 1 10920 0 24
NULL 1 10948 0 9
NULL 1 11072 0 22
50 0 NULL 1 235
50 0 10350 0 15
50 0 10383 0 15
50 0 10429 0 40
50 0 10465 0 25
50 0 10637 0 25
50 0 10729 0 40
50 0 10751 0 20
50 0 10920 0 24
50 0 10948 0 9
50 0 11072 0 22
(22 filas afectadas)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 48
Obtencioacuten de resuacutemenes 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 maacutes columnas y
luego efectuar alguna operacioacuten de resumen sobre cada grupo asiacute generado
La diferencia con GROUP BY es que permite mostrar informacioacuten mas detallada de cada grupo
Ejemplo 71
Lista de pedidos que muestre por coacutedigo de pedido la cantidad de productos vendidos por cada uno
de ellos
select Idpedidoidproductopreciounidadcantidad[Sub Total]=sum(PreciounidadCantidad) from
[detalles de pedidos] group by Idpedidoidproductopreciounidadcantidad order by IdPedido compute
sum(Cantidad) by IdPedido
EJERCICIOS CON COMPUTE
Ejemplo 72
Generar un resumen de subtotales en una consulta que devuelva el nuacutemero de pedido la cantidad
pedida para todos los orderid 11070
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 49
Select Orderid as [Nordm PEDIDO] Quantity AS [CANTIDAD] From [Order Details] where orderid gt= 11070 order by Orderid compute Sum(quantity) by orderid compute sum(quantity)
Nordm PEDIDO CANTIDAD
----------- --------
11070 40
11070 20
11070 30
11070 20
sum
===========
110
sum
===========
110
(6 filas afectadas)
Ejemplo 73
Generar un resumen con calculo de subtotales similar al anterior pero para los orderid 11075 y
11076
Select Orderid as [Nordm PEDIDO] Quantity as [CANTIDAD] From [Order Details] where orderid = 11075 or orderid = 11076 order by Orderid compute Sum(quantity) by ordered Nordm PEDIDO CANTIDAD ----------- -------- 11075 10 11075 30 11075 2 sum =========== 42 Nordm PEDIDO CANTIDAD ----------- -------- 11076 20 11076 20 11076 10
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 50
sum =========== 50 (8 filas afectadas)
Ejemplo 74
Modificacioacuten al ejercicio anterior Agregar la cantidad total y la cantidad promedio al final del
informe
Select Orderid as [Nordm 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)
Nordm PEDIDO CANTIDAD
----------- --------
11075 10
11075 30
11075 2
sum
===========
42
Nordm PEDIDO CANTIDAD
----------- --------
11076 20
11076 20
11076 10
sum
===========
50
sum
===========
92
avg
===========
15
(10 filas afectadas)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 51
Ejemplo 75
Seleccionar de forma agrupada por tipo todos los tipos la suma de los precios y la suma del
anticipo de la tabla tiacutetulos
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 199900 50000000
business 119500 50000000
business 29900 101250000
business 199900 50000000
sum
=====================
549200
avg
=====================
62812500
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
mod_cook 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
avg
=====================
75000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
popular_comp 229500 70000000
popular_comp 200000 80000000
popular_comp NULL NULL
sum
=====================
429500
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 52
avg
=====================
75000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
psychology 215900 70000000
psychology 109500 22750000
psychology 70000 60000000
psychology 199900 20000000
psychology 79900 40000000
sum
=====================
675200
avg
=====================
42550000
(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 ademaacutes 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 199900 50000000
business 119500 50000000
business 29900 101250000
business 199900 50000000
sum
=====================
549200
sum
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 53
=====================
251250000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
mod_cook 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
popular_comp 229500 70000000
popular_comp 200000 80000000
popular_comp NULL NULL
sum
=====================
429500
sum
=====================
150000000
(30 filas afectadas)
Ejemplo 77
Generar un informe que muestre la suma de los precios de los libros de psicologiacutea 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 109500
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 54
psychology 0736 70000
psychology 0736 199900
psychology 0736 79900
sum
=====================
459300
TIPO CODIGO EDITOR PRECIO
------------ ------------- ---------------------
psychology 0877 215900
sum
=====================
215900
(7 filas afectadas)
Ejemplo 78
Generar un informe que obtenga la suma de los precios de todos los libros de psicologiacutea asiacute como la
suma de los precios de los libros de psicologiacutea 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 109500
psychology 0736 70000
psychology 0736 199900
psychology 0736 79900
sum
=====================
459300
TIPO CODIGO EDITOR PRECIO
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 55
------------ ------------- ---------------------
psychology 0877 215900
sum
=====================
215900
sum
=====================
675200
(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 199900 0000
mod_cook 0877 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO CODIGO EDITOR PRECIO ANTICIPO
------------ ------------- --------------------- ---------------------
trad_cook 0877 119500 40000000
trad_cook 0877 209500 70000000
trad_cook 0877 149900 80000000
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 56
sum
=====================
478900
sum
=====================
190000000
(9 filas afectadas)
Ejemplo 80
Generar un informe que muestre todos los tiacutetulos precio y anticipo de aquellos tiacutetulos que tengan
un precio superior a 20 doacutelares Ofreceraacute tambieacuten la suma total del precio y del anticipo
Select title as [TITULO] price as [PRECIO] advance as [ANTICIPO] From titles where price gt 20 order by title compute sum(price) compute sum(advance)
TITULO PRECIO ANTICIPO
-------------------------------------------------------------------------------- --------------------- -------------
--------
But Is It User Friendly 229500 70000000
Computer Phobic AND Non-Phobic Individuals Behavior Variations 215900
70000000
Onions Leeks and Garlic Cooking Secrets of the Mediterranean 209500
70000000
sum
=====================
654900
sum
=====================
210000000
(5 filas afectadas)
Ejemplo 81
Generar un informe que muestre el precio el tipo y el nuacutemero de editor de la tabla titles de todos
aquellas obras que pertenezcan la categoriacutea de ldquobusinessrdquo Ademaacutes apareceraacute la suma total de
precios y el maacuteximo pub_id de esta seleccioacuten
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 57
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 29900 0736
business 199900 1389
business 199900 1389
business 119500 1389
sum
=====================
549200
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 Mostraraacute la suma de los precios y los anticipos por tipo y luego calcularaacute 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 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
trad_cook 209500 70000000
trad_cook 119500 40000000
trad_cook 149900 80000000
sum
=====================
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 58
478900
sum
=====================
190000000
sum
=====================
708700
sum
=====================
340000000
(11 filas afectadas)
Eliminacioacuten 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 iquestA que precio se ah vendido los productos
Select IdProducto Preciounidad from [Detalles de pedidos] order by IdProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 59
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 mayoriacutea de las consultas que se hacen en una base de datos requiere que se lean datos procedentes
de dos oacute maacutes tablas
INNER JOIN- son las filas que satisfacen la condicioacuten de la combinacioacuten
En la siguiente sentencia SQL enlaza 2 tablas la tabla clientes y la tabla pedidos en esta ejemplo me
muestra los campos nombre compantildeiacutea y el campo idpedido
La uacutenica condicioacuten es que las 2 tablas tengan un campo en comuacuten
Ejemplo 84
select clientesNombreCompantildeiacuteapedidosidpedido from clientes inner join pedidos on
clientesidcliente=pedidosidcliente
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 60
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 pedidosIdPedido pedidosIdCliente 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 pedidosIdPedido pedidosIdCliente order
by pedidos IdPedido
CROSS JOIN
Un Cross Join es la consulta correlacionada que combine cada una de las filas de una de las tablas con
todas las filas de la otra tabla
No es necesario que exista una columna en comuacuten para ejecutar el Cross Join
Ejemplo 86
La siguiente consulta combina cada una de las filas de la tabla categoriacuteas con cada una de las filas de la
tabla productos
select productosNombreProductocategoriasNombrecategoria from productos cross join categorias
order by productosNombreProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 61
Ejercicios de consultas Muacuteltiples
Ejemplo 87
Mostrar el pedidos completo con el id=10248
Select pedidosIdPedido pedidosIdCliente
Total=sum ([detalles de pedidos]Preciounidad[detalles de pedidos]Cantidad)
From [detalles de pedidos] inner join pedidos on
[Detalles de pedidos]IdPedido=pedidosIdPedido where pedidosIdPedido=10248
Group by pedidosIdPedido pedidosIdCliente
Ejemplo 88
1 Mostrar la cantidad de productos por categoriacutea
Select CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
[Total de Producto]=sum (UnidadesEnExistencia) from Categoriacuteas inner join
Productos on CategoriacuteasIdCategoriacutea=productosIdCategoriacutea
Group by CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 62
Ejemplo 89
Calcular cuantas ventas tiene cada uno de los vendedores
Select empleadosIdEmpleado empleadosNombre empleadosApellidos
[Total de ventas]=count (pedidosIdPedido) from empleados
Inner join Pedidos on empleadosIdEmpleado=pedidosIdEmpleado
Group by empleadosIdEmpleado empleadosNombre empleadosApellidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 63
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 despueacutes saca la de Plantilla
Recomendaciones a la hora de usar las combinaciones
Combinar tablas en funcioacuten de claves principales y externas
Limite el nuacutemero de tablas de las combinaciones
Select Apellido
Oficio as
OFICIOFUNCION
salario from emp
UNION
Select Apellido
Funcion Salario from
Plantilla
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 64
SUBCONSULTAS
Es una SELECT anidada en una instruccioacuten INSERT DELETE SELECT o UPDATE
Como una tabla derivada
Select eemp_no as Numero
eApellido
from (select emp_no apellido from emp) as e
Como una expresioacuten
Select emp_no as [Numero]
Apellido
Salario
(select avg(Salario) from emp)
as Diferencia
from emp
where oficio = Empleado
Para correlacionar datos
- Expresioacuten dinaacutemica que cambia en cada fila de una consulta externa
- Es una combinacioacuten entre la subconsulta y la fila de la consulta externa
- Dividen consultas complejas con dos o maacutes consultas simples relacionadas
Subconsulta correlacionada
Select apellido oficiodept_no
from emp as e
where 20 lt
(select dept_no from dept as d
where edept_no = ddept_no
and ddnombre = Ventas)
SUBCONSULTAS
1 Mostrar el numero de empleado el apellido y la fecha de alta del empleado mas antiguo de la
empresa
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 65
SELECT emp_noapellido
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_noapellido
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 Jimeacutenez
select apellido oficio from emp where
oficio = (select oficio from emp where apellido = JIMENEZ)
4 Queremos saber el apellido oficio salario y nuacutemero 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 gt (select max (salario) from
emp where dept_no = 30)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 66
5 Mostrar el apellido la funcioacuten sala o departamento de todos los empleados que trabajen en la
empresa
select eApellido eOficio as [Cargo en Empresa] ddnombre as [Oficina]
from emp as e
inner join dept as d
on edept_no = ddept_no
union
select pApellido pfuncion snombre
from plantilla as p
inner join sala as s
on phospital_cod = shospital_cod
and psala_cod = ssala_cod
union
select dApellido despecialidad hnombre
from doctor as d
inner join hospital as h
on dhospital_cod = hhospital_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 = lsquoventasrsquo))
order by 2
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 67
8 Mostrar los empleados que tienen mejor salario que la media de los directores no incluyendo al
presidente
Select from emp where salario gt
(select avg (salario) from emp where oficio = DIRECTOR)
and oficio ltgt PRESIDENTE
9 Mostrar el apellido funcioacuten salario y coacutedigo 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 = lsquoENFERMEROrsquo or
funcion = lsquoENFERMERArsquo) and hospital_cod = (select hospital_cod from hospital where nombre =
lsquoSAN CARLOSrsquo)
Select apellido funcion salario hospital_cod from plantilla where
funcion in (ENFERMEROENFERMERA)
and hospital_cod = (select hospital_cod from hospital
where nombre = SAN CARLOS)
10 Visualizar los datos de los hospitales que tienen personal (Doctores) de cardiologiacutea
Select from hospital where hospital_cod in (select hospital_cod from doctor where
especialidad = lsquoCardiologiacutearsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 68
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 = lsquoPROVINCIALrsquo or
nombre= lsquoGENERALrsquo)
12 Mostrar el apellido de los enfermos que nacieron antes que el Sentildeor Miller
Select apellido from enfermo where Fecha_nac lt (select fecha_nac from enfermo where
apellido = lsquoMILLER Brsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 69
Simulacion de una clausula JOIN
Vamos a mostrar los oficios que estaacuten en maacutes de un departamento
Select distinct e1oficio from emp as e1
where e1oficio in(Select e2oficio from emp as e2
where e1dept_no ltgt e2dept_no)
Se debe utilizar antes una combinacioacuten que una subconsulta la combinacioacuten seriacutea asi dando los
mismos resultados
Select distinct e1Oficio from emp as e1
inner join emp as e2
on e1oficio = e2oficio
where e1dept_no ltgt e2dept_no
Estos son los dos oficios que estaacuten en
maacutes de un departamento
Subconsulta para simular una clausula HAVING
select e1apellidoe1oficio e1salario
from emp as e1
where e1salario gt
(select avg(e2salario) from emp as e2
where e1oficio = e2oficio)
Esta es la consulta utilizando el HAVING que es la que deberiacuteamos utilizar antes que una
subconsulta de simulacioacuten HAVING
SELECT e1apellidoe1oficio e1salario
FROM emp AS e1
INNER JOIN emp AS e2
ON e1oficio = e2oficio
GROUP BY e1oficio e1salarioe1apellido
HAVING e1salario gt AVG (e2salario)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 70
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 22
Ejemplo 29
Mostrar todos los productos de la Categoriacutea 2
Select from productos where IdCategoriacutea=2
Ejemplo 30
Mostrar todos los pedidos realizados en la fecha 1996-06-05
Select from Pedidos where FechaPedido =1996-06-05
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 23
Ejemplo 31
Mostrar todos los pedidos mayores a la Fecha 1996-05-05
Select from Pedidos where FechaPedido gt 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 IdCategoriacutea no sea 3
Select from productos where IdCategoriacutealtgt 3
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 24
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 Categoriacutea (123)
Select from productos where IdCategoriacutea not in (1 2 3) order by IdProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 25
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
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 26
USO DE FUNCIONES
Podemos utilizar funciones para construir expresiones y generar columnas computadoras O condiciones
complejas
Funcioacuten de agregacioacuten
Son funciones que se utilizan para calcular valores en las tablas Si queremos usarlas
combinaacutendolas 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
expresioacuten HAVING Equivalente a where
Todos estos ejercicios han sido desarrollado con la base de datos Poseidoacuten
COUNT Cuenta los registros que hay en la consulta
Si pongo un valor dentro de la expresioacuten devolveraacute la cuenta de todos los
registros no nulos
Si pongo un asterisco contaraacute todos los registros aunque tengan valores
nulos
Select count () from Pedidos Valores con Nulos
Select count (FechaEnviacuteo) from Pedidos Valores sin nulos
AVG Realiza la media sobre la expresioacuten dada debe ser un tipo de dato
Int
Select avg(Preciounidad) from productos
MAX Saca el valor maacuteximo de una consulta
Select max (FechaPedido) from Pedidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 27
MIN Devuelve el valor miacutenimo 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 paiacutes Brasil mostrando el nuacutemero de los Factura con el paiacutes de
Destinatario Brasil
Select count () as [Numero de Facturas] PaiacutesDestinatario
Avg (Preciounidad) as [Precio Medio] from
Facturas group by PaiacutesDestinatario having PaiacutesDestinatario =Brasil
Ejemplo 39
Encontrar el precio maacutes alto mas bajo y la diferencia entre ambos de todos los productos con
IdCategoriacutea 2
Select IdCategoriacutea Max (Preciounidad) as [Precio mas alto] min(Preciounidad) as
[Precio mas Bajo] Max(Preciounidad) - min(Preciounidad) as [Diferencia entre Ambos]
from Productos group by IdCategoriacutea having IdCategoriacutea = 2
Ejemplo 40
Visualizar el nuacutemero de productos por Categoriacutea
Select IdCategoriacutea as [Nordm de Categoriacutea] Count (IdCategoriacutea) as [Nordm de Productos]
From Productos group by IdCategoriacutea
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 28
Ejemplo 41
Visualizar los clientes que vivan en las siguientes ciudades Londres Madrid y Barcelona
Select count () as [Nordm de personas] ciudad from clientes group by ciudad Having ciudad in
(londresMadridBarcelona) order by ciudad
Ejemplo 42
Lista de productos cuya venta allaacute sido mayor a 50000
Select IdProducto Monto=Sum (Preciounidad Cantidad) from [Detalles de pedidos] group
by IdProducto having Sum (Preciounidad Cantidad)gt50000 order by IdProducto
Ejemplo 43
Cuantos Clientes no tienen Fax
Select Count () as [Total de Clientes sin Fax] from clientes where fax is null
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 29
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
Funcioacuten Resultado
GETDATE() Retorna la fecha y hora del sistema
DATEADD(partefechanfecha) Retorna una nueva fecha antildeadiendo n
unidades de partefecha a fecha
DATEDIFF(parteFechafecha1fecha2) Retorna la diferencia en parteFecha entre
fecha1 y fecha2
DATENAME(partefechafecha) Retorna la cadena correspondiente a
partefecha en fecha
DATEPART(partefechafecha) Retorna el numero correspondiente a
partefecha y fecha
DAY(fecha) Retorna el numero correspondiente a la
parte del diacutea de fecha
MONTH(fecha) Retorna el numero correspondiente a la
parte del mes de fecha
YEAR(fecha) Retorna el numero correspondiente a la
parte del antildeo de fecha
GETUTCDATE() Retorna la fecha y hora del meridiano de
Greenwich
La siguiente tabla muestra los valores de partefecha que podemos utilizar
partefecha Abreviatura
Year Yy yyyy
Quarter Qq q
Month Mm m
Dayofyear Dy y
Day Dd d
Week Wk ww
weekday Dw
Hour Hh
minute Mi n
second Ss s
milisecond Ms
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 30
Getdate
Select getdate () Funcioacuten que recupera la fecha actual del sistema
Convert Cast
Convierten expliacutecitamente una expresioacuten de un tipo de datos en otro CAST y CONVERT
proporcionan funciones similares
Convert (Tipodedatosdestino Origen Estilo)
o Tipodedatosdestino Siempre ha de ser tipo caraacutecter
o Origen Puede ser tipo fecha numeacuterico o moneda
o Estilo Opcional Es un coacutedigo que indica el formato en el que devuelve la cadena de
caracteres
Sintaxis
Convert (TipoDato Dato)
Cast (Dato as TipoDato)
Ejemplo
declare n intpalabra nvarchar(10)
set n = 1
set palabra =Nuacutemero
print convert(nvarchar(2)n) + + palabra
print cast(n as nvarchar(2)) + + palabra
while (nlt11)
begin
print convert(nvarchar(2)n) + + palabra
print cast(n as nvarchar(2)) + + palabra
set n = n + 1
end
DateName
Devuelve una cadena de caracteres que representa la parte de la fecha especificada de la fecha
especificada
Los caacutelculos 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
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 31
Ejemplo 46
Select IdPedido DateName (week FechaPedido) as Numero de Semana from Pedidos where IdPedido
= 1035251
Ejemplo 47
Select IdPedido datename (weekday FechaPedido) as Diacutea De Semana from Pedidos where IdPedido =
10352 Martes
Horas
Ejemplo 48
Select IdPedido datename (mi FechaPedido) as Minutos from Pedidos where IdPedido = 10352
Ejemplo 49
Select DateName (minute getdate ()) as minutos
Ejemplo 50
Select DateName (Hh FechaPedido) as hora from Pedidos where IdPedido = 10352
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 32
Ejemplo 51
Select DateName (Hour getdate ()) as hora--gt18
Ejemplo 52
Select DateName (Hh getdate ()) as hora--gt18
DatePart
Devuelve la parte de la fecha u hora indicada Sintaxis
Datepart (Valor devolver fecha)
Ejemplo 53
Select IdPedido datepart (mm FechaPedido) as Mes from Pedidos where IdPedido = 10352
Ejemplo 54
Select Datepart (Hh getdate ()) as Hora--gt17
Ejemplo 55
Select Datepart (mi getdate ()) as Minutos--gt54
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 33
Nombres de Fechas
Day (fecha)
Devuelve UN INT equivale a Datepart
Select day (getdate ()) as diacutea--gt6 (diacutea en la que se ejecuta la sentencia)
Select Datepart (dd getdate ()) --gt6 (diacutea en la que se ejecuta la sentencia)
Select Month (getdate ()) --gt1 (Mes en la que se ejecuta la sentencia)
Select Datepart (mm getdate ()) --gt1 (Mes en la que se ejecuta la sentencia)
Select Year (getdate ()) --gt2008 (Antildeo en la que se ejecuta la sentencia)
Ejemplo 56
Select year (FechaPedido) as Antildeo from Pedidos where IdPedido = 10352
Ejemplo 57
Select datediff (yyyy FechaPedido getdate()) as Dia from Pedidos where IdPedido = 10352
DateAdd
DateAdd (Datepart number date)
Antildeade un nuacutemero a la fecha puesta
DatePart es el formato de lo que queremos antildeadir
Number es el nuacutemero que queremos incrementar la fecha expuesta
Select convert (datetime1-1-02)
Select dateadd (dd 71-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 comparacioacuten y el tipo de dato
que nos devolveraacute antildeos diacuteas minutos etc
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 34
Ejemplo 58
Select datediff (yyyy FechaPedido getdate ()) as Dia from Pedidos where IdPedido = 10352
Ejercicios de funciones de Fecha
Ejemplo 59
Lista de pedidos emitidos en febrero de 1996
Select from Pedidos where month (FechaPedido) =2 and year (FechaPedido) =1996
Ejemplo 60
Lista de Pedidos mostrando la diferencia en diacuteas entre la fecha del pedido y la fecha de Envioacute
Select IdPedido FechaPedido FechaEnviacuteo diacuteas =datediff (day FechaPedido FechaEnviacuteo) from
pedidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 35
Ejemplo 61
Genere un listado de pedidos en el que la fecha del pedido se muestre en el formato nombre del
diacutea diacutea de mes antildeo
Select IdPedido FechaPedido Fecha=datename (dw IdPedido)+ + str (datepart (dd
IdPedido) 2)+ de +datename (mm IdPedido)+ de +str (datepart (yy IdPedido) 4) from
pedidos
Ejemplo 62
Mostrar de la tabla pedidos la fecha de pedidos en fecha corta
Select IdPedido convert (varchar (30) FechaPedido 106) as [Fecha Corta] from pedidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 36
FUNCIONES MATEMATICAS
ABS
Es el valor Absoluto
Select ABS (-4) as VALOR ABSOLUTO--gt4
CEILING
Devuelve el entero maacutes pequentildeo mayor o igual que la expresioacuten numeacuterica dada
Select CEILING (54) as CEILING--6
FLOOR
Devuelve el entero maacutes grande menor o igual que la expresioacuten numeacuterica dada
Select FLOOR (5) as FLOOR--gt5
POWER
Devuelve el valor de la expresioacuten indicada elevada a la potencia especificada
Select POWER (3 2) as 3 ELEVADO A 2--gt9
RAND
Devuelve un valor float aleatorio de 0 a 1
Las llamadas repetitivas de RAND() en una uacutenica consulta produciraacuten el mismo valor
Select RAND(6) as ALEATORIO--071368515806921451
Select RAND(6) as ALEATORIO--071368515806921451
Select RAND(4) as ALEATORIO--07136478921266981
Rand sobre los milisegundos actuales
Select RAND(DATEPART(msGETDATE())) as ALEATORIO--gt071443047691954253
Select RAND(999999999)--gt068504257551273573
ROUND
Devuelve una expresioacuten numeacuterica redondeada a la longitud o precisioacuten especificada
Round (Nuacutemero Redondeo del Nuacutemero)
ROUND siempre devuelve un valor Si length es un valor negativo y mayor que el nuacutemero de
diacutegitos anteriores al separador decimal ROUND devuelve 0
Select ROUND (1234567 2) --gt1234600
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 37
Select ROUND (1234567-2) --gt1000000
Select ROUND (1234567 0) --gt1230000
Select ROUND (1234567-3) ---gt0
SIGN
Devuelve el signo positivo (+1) cero (0) o negativo (-1) de la expresioacuten especificada
Dice el valor negativo positivo o neutro (0) del valor especificado
Select SIGN (-3) --gt-1
Select SIGN (3) --gt1
Select SIGN (0) --gt0
SQUARE
Devuelve el cuadrado de la expresioacuten especificada
Select SQUARE (4) as bdquoCuadrado‟--gt160
SQRT
Devuelve la raiacutez cuadrada de la expresioacuten especificada
Select SQRT (4) as [RAIZ CUADRADA] --gt20
FUNCIONES DE CADENA
ASCII
Devuelve el coacutedigo ASCII del caraacutecter maacutes a la izquierda de una expresioacuten de caracteres
Select ASCII(A)--gt65
Select ASCII(a)--gt97
Select ascii(aula)--gt97
CHAR
Una funcioacuten de cadena que convierte un coacutedigo ASCII int en un caraacutecter
select char(65)--gtA
select char(97)--gta
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 38
CHARINDEX
Devuelve la posicioacuten inicial de la expresioacuten especificada en una cadena de caracteres
CHARINDEX (expression1 expression2 [ start_location])
Argumentos
expression1
Es una expresioacuten que contiene la secuencia de caracteres que se desea buscar
Expression1 es una expresioacuten del tipo de cadenas cortas de caracteres
Expression2
Es una expresioacuten normalmente una columna
en la que se busca la cadena especificada
Expression2 es de la categoriacutea del tipo de datos cadena de caracteres
start_location
Es la posicioacuten del caraacutecter de expression2 en el que se empieza la buacutesqueda de expression1
Si no se especifica start_location es un nuacutemero negativo o es cero
la buacutesqueda empieza al principio de la cadena expression2
Si expression1 no se encuentra en expression2 CHARINDEX devuelve 0
Si alguno de los dos es null devuelve null
Select charindex (ciemurcielago) --gt4
Select charindex (ciemurcielago 2) --gt4
Select charindex (ciemurcielago 5) --gt0
Select charindex (ciemurcielago-6) --gt4
LEFT
Devuelve la parte de una cadena de caracteres que comienza en un nuacutemero de caracteres
especificado a partir de la izquierda
Select left (murcielago5) --gtmurci
RIGHT
Devuelve la parte de una cadena de caracteres que
Comienza en el nuacutemero de caracteres especificado
En integer_expression a partir de la derecha
Select right (hola que tal5) --gte tal
LEN
Cuenta el nuacutemero de caracteres que se incluyen en la cadena
Select len (murcieacutelago) --gt10
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 39
LOWER
Convierte a Minuacutesculas la cadena especificada
Select lower (MurcIELaGO) as [minusculas] --gtmurcielago
UPPER
Convierte a Mayuacutesculas la cadena especificada
Select upper (murcielago) as [MAYUSCULAS] --gtMURCIELAGO
RTRIM y LTRIM
Elimina los espacios que existen a la izquierda y a la derecha respectivamente
Select Rtrim ( murcieacutelago ) AS [SIN ESPACIOS] --gtmurcieacutelago
Select Ltrim ( murcieacutelago ) AS [SIN ESPACIOS] --gtmurcieacutelago
Select ltrim(rtrim( hola ))+
REPLACE
Reemplaza por una tercera expresioacuten todas las apariciones
de la segunda expresioacuten de cadena proporcionada en la primera expresioacuten de cadena
Select replace (hola que tal estasaA) --gtholA que tAl estAs
Select replace (buenos dias que tal estasuentildentildentilde) --gtbntildentildentildenos diasqntildentildentilde tal estas
SPACE
Coloca el nuacutemero de espacios que se le indiquen para entre una cadena de caracteres
Select hola+space(5)+que tal--gthola que tal
SUBSTRING
Devuelve parte de una expresioacuten de caracteres binaria de texto o de imagen
Sintaxis
SUBSTRING (Expresioacuten Comienzo Duracioacuten)
Argumentos
Expresioacuten
Es una cadena de caracteres cadena binaria texto imagen
Columna o expresioacuten que incluye una columna
No deben usarse expresiones que incluyan funciones de agregado
Start
Es un entero que especifica el punto en que comienza la subcadena
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 40
Length
Es un entero que especifica la longitud de la subcadena
(El nuacutemero de caracteres o bytes que se devuelven)
Select substring (murcielago 3 5) --gtrciel
Select substring (murcielago 3 len (murcielago)) --gtrciel
REVERSE
Devuelve invertida una expresioacuten de caraacutecter
Select reverse (hola)
REPLICATE
Repite una expresioacuten de caracteres un nuacutemero especificado de veces
Select replicate (murcielago 5)
Replicate replicate replicate replicate replicate
STUFF
Elimina el nuacutemero de caracteres especificados e insertados
Otro conjunto de caracteres en un punto de inicio indicado
Select STUFF (Murcieacutelago 2 3 ijklmn) Mijklmnielago
FUNCIONES DE SISTEMA
- APP_NAME () Devuelve el nombre de la aplicacioacuten actual
Select app_name () as [Nombre de la aplicacion]
- DATALENGTH (Expresioacuten) Devuelve un entero que es numero de bites necesarios para
representar esa expresioacuten int
Select datalength (Ninoni) as [Numero de bites]
- ISDATE (Expresioacuten) Dice si la expresioacuten es una fecha o no Devuelve 1 si la expresioacuten es
una fecha y 0 si no es una fecha
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 41
Select isdate (121001) as [Validacioacuten Fecha]
- ISNUMERIC (Expresion) Dice si la expresioacuten es un numero o no Devuelve 1 si la
expresioacuten es un nuacutemero y 0 si la expresioacuten no es nuacutemero
Select isnumeric (ddd) as [Validacion Numero]
- ISNULL (Expresioacuten ExpresionDevuelta) Si la expresioacuten es nula te devuelve la Expresioacuten
Devuelta y si no devuelve la primera Expresioacuten
Select isnull (nullNo nulo) as [Es Nulo]
- PARSENAME (bdquoNombreObjeto‟ ParteNombre)
ParteNombre es un valor de tipo Int que coge unos determinados valores del
NombreObjeto
1 Objeto
2 Propietario
3 Base de Datos
4 Servidor
Select parsename (saposeidondbopedidos1) as [Parte Expresioacuten]
Select parsename (saposeidondbopedidos 2) as [Parte Expresioacuten]
Select parsename (saposeidondbopedidos3) as [Parte Expresioacuten]
Select parsename ( saposeidondbopedidos 4) as [Parte Expresioacuten]
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 42
- SYSTEM_USER Devuelve el usuario del sistema actual
Depende de la autentificacioacuten con la que te hayas conectado
Select system_user as [Usuario conectado]
- USER_NAME() Devuelve el nombre del usuario actual
Select user_name ()
- COALESCE (expresioacuten1 expresioacuten2 )
Devuelve la primera expresioacuten no NULL
Si todos son NULL devuelve NULL
Select coalesce (PrecioUnidad Cantidad) from [detalles de Pedidos] Si el PrecioUnidad es nulo
devolveraacute la Cantidad y si los dos son nulos devolveraacute un campo Null
PROCEDIMIENTOS PARA AGRUPAR Y RESUMIR DATOS
En el examen de certificacioacuten 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 usaraacute la base de datos indicada Ejemplo Ponemos
en el analizador de consultas lo siguiente
Use Northwind
Select from [Order Details]
[Order Details]
Esta tabla perteneciente a la Northwind se encarga de manejar los pedidos
Order Id Nordm de Pedido
Producto Id Nordm de Producto
Ambos campos son Primary Key con lo que no puede haber una combinacioacuten de ambos campos que sea
igual
OrderId ProductId
1 A
1 B
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 43
1 C
2 A
3 C
Es decir en este caso no podriacutea existir una nueva combinacioacuten ldquo1 Ardquo o ldquo2 Ardquo
Quantity Es la cantidad del producto del pedido
ROLLUP
Se usa para presentar resuacutemenes de datos A de usarse junto con la clausula group by lo que hace es
realizar un resumen de los campos incluidos en el rollup
Ejemplo 63
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
Group by ProductID OrderID
with Rollup
Order by ProductID OrderID
Este ejemplo suma todas las cantidades y mediante
rollup muestra una fila con la suma de todas las
cantidades de cada producto y ademaacutes otra fila con la
suma de todas las cantidades de todos los productos El
resultado de este ejemplo seriacutea el que muestra la
imagen
Ejemplo 64
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
where orderid lt 10250
Group by ProductID OrderID
with Rollup
Order by ProductID OrderID
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 44
CUBE
Al igual que Rollup realiza resuacutemenes de campos agrupados Pero en este caso muestra un resumen con
cada combinacioacuten posible de los campos agrupados
Ejemplo 65
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
where orderid lt 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 combinacioacuten posible entre el
productid y el orderid
GROUPING
Indica si el resultado de un campo es el que hay en la propia tabla o se ha introducido mediante una
claacuteusula de resumen es decir para saber por ejemplo si un ldquoNullrdquo 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 lt 10250 Group by ProductID
OrderID with Cube Order by ProductID OrderID
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 45
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
Ponieacutendole un alias al
grouping saldriacutea el nombre
de columna que le
indiquemos
COMPUTE
Realiza un resumen en una columna aparte con el resultado de la funcioacuten de agregado indicada Su
formato seriacutea Compute funcioacuten(campo) No se puede utilizar en aplicaciones cliente servidor es una
clausula meramente informativa Tampoco se le pueden poner alias a los resuacutemenes
Ejemplo 67
Select Productid Orderid Quantity From [Order Details] order by ProductID Orderid compute
Sum(quantity)
Vemos que muestra la
columna con la suma
total de todas las
cantidades
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 46
Ejercicios de ROLLUP GROUPING y CUBE
Ejemplo 68
Realizar una consulta que resuma la cantidad de artiacuteculos pedidos por cada iacutendice de producto y
nuacutemero de pedido Realizando un caacutelculo acumulativo
select productid as [PRODUCTO] orderid as [Nordm PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] group by productid orderid with rollup order by productid orderid
PRODUCTO Nordm 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
hellip
Ejemplo 69
Modificacioacuten al ejercicio anterior Realizar el mismo resumen pero uacutenicamente para el producto
cuyo id es 50
select productid as [PRODUCTO] orderid as [Nordm PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] where productid = 50 group by productid orderid with rollup order by productid ordered
PRODUCTO Nordm 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
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 47
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 modificacioacuten 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 [Nordm PEDIDO] grouping(orderid) as [GRUPO PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] where productid = 50 group by Productidorderid with cube order by productidorderid
PRODUCTO GRUPO PRODUCTO Nordm PEDIDO GRUPO PEDIDO SUMA TOTAL
----------- -------------- ----------- ------------ -----------
NULL 1 NULL 1 235
NULL 1 10350 0 15
NULL 1 10383 0 15
NULL 1 10429 0 40
NULL 1 10465 0 25
NULL 1 10637 0 25
NULL 1 10729 0 40
NULL 1 10751 0 20
NULL 1 10920 0 24
NULL 1 10948 0 9
NULL 1 11072 0 22
50 0 NULL 1 235
50 0 10350 0 15
50 0 10383 0 15
50 0 10429 0 40
50 0 10465 0 25
50 0 10637 0 25
50 0 10729 0 40
50 0 10751 0 20
50 0 10920 0 24
50 0 10948 0 9
50 0 11072 0 22
(22 filas afectadas)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 48
Obtencioacuten de resuacutemenes 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 maacutes columnas y
luego efectuar alguna operacioacuten de resumen sobre cada grupo asiacute generado
La diferencia con GROUP BY es que permite mostrar informacioacuten mas detallada de cada grupo
Ejemplo 71
Lista de pedidos que muestre por coacutedigo de pedido la cantidad de productos vendidos por cada uno
de ellos
select Idpedidoidproductopreciounidadcantidad[Sub Total]=sum(PreciounidadCantidad) from
[detalles de pedidos] group by Idpedidoidproductopreciounidadcantidad order by IdPedido compute
sum(Cantidad) by IdPedido
EJERCICIOS CON COMPUTE
Ejemplo 72
Generar un resumen de subtotales en una consulta que devuelva el nuacutemero de pedido la cantidad
pedida para todos los orderid 11070
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 49
Select Orderid as [Nordm PEDIDO] Quantity AS [CANTIDAD] From [Order Details] where orderid gt= 11070 order by Orderid compute Sum(quantity) by orderid compute sum(quantity)
Nordm PEDIDO CANTIDAD
----------- --------
11070 40
11070 20
11070 30
11070 20
sum
===========
110
sum
===========
110
(6 filas afectadas)
Ejemplo 73
Generar un resumen con calculo de subtotales similar al anterior pero para los orderid 11075 y
11076
Select Orderid as [Nordm PEDIDO] Quantity as [CANTIDAD] From [Order Details] where orderid = 11075 or orderid = 11076 order by Orderid compute Sum(quantity) by ordered Nordm PEDIDO CANTIDAD ----------- -------- 11075 10 11075 30 11075 2 sum =========== 42 Nordm PEDIDO CANTIDAD ----------- -------- 11076 20 11076 20 11076 10
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 50
sum =========== 50 (8 filas afectadas)
Ejemplo 74
Modificacioacuten al ejercicio anterior Agregar la cantidad total y la cantidad promedio al final del
informe
Select Orderid as [Nordm 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)
Nordm PEDIDO CANTIDAD
----------- --------
11075 10
11075 30
11075 2
sum
===========
42
Nordm PEDIDO CANTIDAD
----------- --------
11076 20
11076 20
11076 10
sum
===========
50
sum
===========
92
avg
===========
15
(10 filas afectadas)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 51
Ejemplo 75
Seleccionar de forma agrupada por tipo todos los tipos la suma de los precios y la suma del
anticipo de la tabla tiacutetulos
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 199900 50000000
business 119500 50000000
business 29900 101250000
business 199900 50000000
sum
=====================
549200
avg
=====================
62812500
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
mod_cook 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
avg
=====================
75000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
popular_comp 229500 70000000
popular_comp 200000 80000000
popular_comp NULL NULL
sum
=====================
429500
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 52
avg
=====================
75000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
psychology 215900 70000000
psychology 109500 22750000
psychology 70000 60000000
psychology 199900 20000000
psychology 79900 40000000
sum
=====================
675200
avg
=====================
42550000
(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 ademaacutes 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 199900 50000000
business 119500 50000000
business 29900 101250000
business 199900 50000000
sum
=====================
549200
sum
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 53
=====================
251250000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
mod_cook 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
popular_comp 229500 70000000
popular_comp 200000 80000000
popular_comp NULL NULL
sum
=====================
429500
sum
=====================
150000000
(30 filas afectadas)
Ejemplo 77
Generar un informe que muestre la suma de los precios de los libros de psicologiacutea 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 109500
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 54
psychology 0736 70000
psychology 0736 199900
psychology 0736 79900
sum
=====================
459300
TIPO CODIGO EDITOR PRECIO
------------ ------------- ---------------------
psychology 0877 215900
sum
=====================
215900
(7 filas afectadas)
Ejemplo 78
Generar un informe que obtenga la suma de los precios de todos los libros de psicologiacutea asiacute como la
suma de los precios de los libros de psicologiacutea 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 109500
psychology 0736 70000
psychology 0736 199900
psychology 0736 79900
sum
=====================
459300
TIPO CODIGO EDITOR PRECIO
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 55
------------ ------------- ---------------------
psychology 0877 215900
sum
=====================
215900
sum
=====================
675200
(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 199900 0000
mod_cook 0877 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO CODIGO EDITOR PRECIO ANTICIPO
------------ ------------- --------------------- ---------------------
trad_cook 0877 119500 40000000
trad_cook 0877 209500 70000000
trad_cook 0877 149900 80000000
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 56
sum
=====================
478900
sum
=====================
190000000
(9 filas afectadas)
Ejemplo 80
Generar un informe que muestre todos los tiacutetulos precio y anticipo de aquellos tiacutetulos que tengan
un precio superior a 20 doacutelares Ofreceraacute tambieacuten la suma total del precio y del anticipo
Select title as [TITULO] price as [PRECIO] advance as [ANTICIPO] From titles where price gt 20 order by title compute sum(price) compute sum(advance)
TITULO PRECIO ANTICIPO
-------------------------------------------------------------------------------- --------------------- -------------
--------
But Is It User Friendly 229500 70000000
Computer Phobic AND Non-Phobic Individuals Behavior Variations 215900
70000000
Onions Leeks and Garlic Cooking Secrets of the Mediterranean 209500
70000000
sum
=====================
654900
sum
=====================
210000000
(5 filas afectadas)
Ejemplo 81
Generar un informe que muestre el precio el tipo y el nuacutemero de editor de la tabla titles de todos
aquellas obras que pertenezcan la categoriacutea de ldquobusinessrdquo Ademaacutes apareceraacute la suma total de
precios y el maacuteximo pub_id de esta seleccioacuten
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 57
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 29900 0736
business 199900 1389
business 199900 1389
business 119500 1389
sum
=====================
549200
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 Mostraraacute la suma de los precios y los anticipos por tipo y luego calcularaacute 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 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
trad_cook 209500 70000000
trad_cook 119500 40000000
trad_cook 149900 80000000
sum
=====================
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 58
478900
sum
=====================
190000000
sum
=====================
708700
sum
=====================
340000000
(11 filas afectadas)
Eliminacioacuten 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 iquestA que precio se ah vendido los productos
Select IdProducto Preciounidad from [Detalles de pedidos] order by IdProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 59
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 mayoriacutea de las consultas que se hacen en una base de datos requiere que se lean datos procedentes
de dos oacute maacutes tablas
INNER JOIN- son las filas que satisfacen la condicioacuten de la combinacioacuten
En la siguiente sentencia SQL enlaza 2 tablas la tabla clientes y la tabla pedidos en esta ejemplo me
muestra los campos nombre compantildeiacutea y el campo idpedido
La uacutenica condicioacuten es que las 2 tablas tengan un campo en comuacuten
Ejemplo 84
select clientesNombreCompantildeiacuteapedidosidpedido from clientes inner join pedidos on
clientesidcliente=pedidosidcliente
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 60
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 pedidosIdPedido pedidosIdCliente 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 pedidosIdPedido pedidosIdCliente order
by pedidos IdPedido
CROSS JOIN
Un Cross Join es la consulta correlacionada que combine cada una de las filas de una de las tablas con
todas las filas de la otra tabla
No es necesario que exista una columna en comuacuten para ejecutar el Cross Join
Ejemplo 86
La siguiente consulta combina cada una de las filas de la tabla categoriacuteas con cada una de las filas de la
tabla productos
select productosNombreProductocategoriasNombrecategoria from productos cross join categorias
order by productosNombreProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 61
Ejercicios de consultas Muacuteltiples
Ejemplo 87
Mostrar el pedidos completo con el id=10248
Select pedidosIdPedido pedidosIdCliente
Total=sum ([detalles de pedidos]Preciounidad[detalles de pedidos]Cantidad)
From [detalles de pedidos] inner join pedidos on
[Detalles de pedidos]IdPedido=pedidosIdPedido where pedidosIdPedido=10248
Group by pedidosIdPedido pedidosIdCliente
Ejemplo 88
1 Mostrar la cantidad de productos por categoriacutea
Select CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
[Total de Producto]=sum (UnidadesEnExistencia) from Categoriacuteas inner join
Productos on CategoriacuteasIdCategoriacutea=productosIdCategoriacutea
Group by CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 62
Ejemplo 89
Calcular cuantas ventas tiene cada uno de los vendedores
Select empleadosIdEmpleado empleadosNombre empleadosApellidos
[Total de ventas]=count (pedidosIdPedido) from empleados
Inner join Pedidos on empleadosIdEmpleado=pedidosIdEmpleado
Group by empleadosIdEmpleado empleadosNombre empleadosApellidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 63
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 despueacutes saca la de Plantilla
Recomendaciones a la hora de usar las combinaciones
Combinar tablas en funcioacuten de claves principales y externas
Limite el nuacutemero de tablas de las combinaciones
Select Apellido
Oficio as
OFICIOFUNCION
salario from emp
UNION
Select Apellido
Funcion Salario from
Plantilla
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 64
SUBCONSULTAS
Es una SELECT anidada en una instruccioacuten INSERT DELETE SELECT o UPDATE
Como una tabla derivada
Select eemp_no as Numero
eApellido
from (select emp_no apellido from emp) as e
Como una expresioacuten
Select emp_no as [Numero]
Apellido
Salario
(select avg(Salario) from emp)
as Diferencia
from emp
where oficio = Empleado
Para correlacionar datos
- Expresioacuten dinaacutemica que cambia en cada fila de una consulta externa
- Es una combinacioacuten entre la subconsulta y la fila de la consulta externa
- Dividen consultas complejas con dos o maacutes consultas simples relacionadas
Subconsulta correlacionada
Select apellido oficiodept_no
from emp as e
where 20 lt
(select dept_no from dept as d
where edept_no = ddept_no
and ddnombre = Ventas)
SUBCONSULTAS
1 Mostrar el numero de empleado el apellido y la fecha de alta del empleado mas antiguo de la
empresa
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 65
SELECT emp_noapellido
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_noapellido
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 Jimeacutenez
select apellido oficio from emp where
oficio = (select oficio from emp where apellido = JIMENEZ)
4 Queremos saber el apellido oficio salario y nuacutemero 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 gt (select max (salario) from
emp where dept_no = 30)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 66
5 Mostrar el apellido la funcioacuten sala o departamento de todos los empleados que trabajen en la
empresa
select eApellido eOficio as [Cargo en Empresa] ddnombre as [Oficina]
from emp as e
inner join dept as d
on edept_no = ddept_no
union
select pApellido pfuncion snombre
from plantilla as p
inner join sala as s
on phospital_cod = shospital_cod
and psala_cod = ssala_cod
union
select dApellido despecialidad hnombre
from doctor as d
inner join hospital as h
on dhospital_cod = hhospital_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 = lsquoventasrsquo))
order by 2
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 67
8 Mostrar los empleados que tienen mejor salario que la media de los directores no incluyendo al
presidente
Select from emp where salario gt
(select avg (salario) from emp where oficio = DIRECTOR)
and oficio ltgt PRESIDENTE
9 Mostrar el apellido funcioacuten salario y coacutedigo 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 = lsquoENFERMEROrsquo or
funcion = lsquoENFERMERArsquo) and hospital_cod = (select hospital_cod from hospital where nombre =
lsquoSAN CARLOSrsquo)
Select apellido funcion salario hospital_cod from plantilla where
funcion in (ENFERMEROENFERMERA)
and hospital_cod = (select hospital_cod from hospital
where nombre = SAN CARLOS)
10 Visualizar los datos de los hospitales que tienen personal (Doctores) de cardiologiacutea
Select from hospital where hospital_cod in (select hospital_cod from doctor where
especialidad = lsquoCardiologiacutearsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 68
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 = lsquoPROVINCIALrsquo or
nombre= lsquoGENERALrsquo)
12 Mostrar el apellido de los enfermos que nacieron antes que el Sentildeor Miller
Select apellido from enfermo where Fecha_nac lt (select fecha_nac from enfermo where
apellido = lsquoMILLER Brsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 69
Simulacion de una clausula JOIN
Vamos a mostrar los oficios que estaacuten en maacutes de un departamento
Select distinct e1oficio from emp as e1
where e1oficio in(Select e2oficio from emp as e2
where e1dept_no ltgt e2dept_no)
Se debe utilizar antes una combinacioacuten que una subconsulta la combinacioacuten seriacutea asi dando los
mismos resultados
Select distinct e1Oficio from emp as e1
inner join emp as e2
on e1oficio = e2oficio
where e1dept_no ltgt e2dept_no
Estos son los dos oficios que estaacuten en
maacutes de un departamento
Subconsulta para simular una clausula HAVING
select e1apellidoe1oficio e1salario
from emp as e1
where e1salario gt
(select avg(e2salario) from emp as e2
where e1oficio = e2oficio)
Esta es la consulta utilizando el HAVING que es la que deberiacuteamos utilizar antes que una
subconsulta de simulacioacuten HAVING
SELECT e1apellidoe1oficio e1salario
FROM emp AS e1
INNER JOIN emp AS e2
ON e1oficio = e2oficio
GROUP BY e1oficio e1salarioe1apellido
HAVING e1salario gt AVG (e2salario)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 70
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 23
Ejemplo 31
Mostrar todos los pedidos mayores a la Fecha 1996-05-05
Select from Pedidos where FechaPedido gt 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 IdCategoriacutea no sea 3
Select from productos where IdCategoriacutealtgt 3
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 24
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 Categoriacutea (123)
Select from productos where IdCategoriacutea not in (1 2 3) order by IdProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 25
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
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 26
USO DE FUNCIONES
Podemos utilizar funciones para construir expresiones y generar columnas computadoras O condiciones
complejas
Funcioacuten de agregacioacuten
Son funciones que se utilizan para calcular valores en las tablas Si queremos usarlas
combinaacutendolas 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
expresioacuten HAVING Equivalente a where
Todos estos ejercicios han sido desarrollado con la base de datos Poseidoacuten
COUNT Cuenta los registros que hay en la consulta
Si pongo un valor dentro de la expresioacuten devolveraacute la cuenta de todos los
registros no nulos
Si pongo un asterisco contaraacute todos los registros aunque tengan valores
nulos
Select count () from Pedidos Valores con Nulos
Select count (FechaEnviacuteo) from Pedidos Valores sin nulos
AVG Realiza la media sobre la expresioacuten dada debe ser un tipo de dato
Int
Select avg(Preciounidad) from productos
MAX Saca el valor maacuteximo de una consulta
Select max (FechaPedido) from Pedidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 27
MIN Devuelve el valor miacutenimo 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 paiacutes Brasil mostrando el nuacutemero de los Factura con el paiacutes de
Destinatario Brasil
Select count () as [Numero de Facturas] PaiacutesDestinatario
Avg (Preciounidad) as [Precio Medio] from
Facturas group by PaiacutesDestinatario having PaiacutesDestinatario =Brasil
Ejemplo 39
Encontrar el precio maacutes alto mas bajo y la diferencia entre ambos de todos los productos con
IdCategoriacutea 2
Select IdCategoriacutea Max (Preciounidad) as [Precio mas alto] min(Preciounidad) as
[Precio mas Bajo] Max(Preciounidad) - min(Preciounidad) as [Diferencia entre Ambos]
from Productos group by IdCategoriacutea having IdCategoriacutea = 2
Ejemplo 40
Visualizar el nuacutemero de productos por Categoriacutea
Select IdCategoriacutea as [Nordm de Categoriacutea] Count (IdCategoriacutea) as [Nordm de Productos]
From Productos group by IdCategoriacutea
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 28
Ejemplo 41
Visualizar los clientes que vivan en las siguientes ciudades Londres Madrid y Barcelona
Select count () as [Nordm de personas] ciudad from clientes group by ciudad Having ciudad in
(londresMadridBarcelona) order by ciudad
Ejemplo 42
Lista de productos cuya venta allaacute sido mayor a 50000
Select IdProducto Monto=Sum (Preciounidad Cantidad) from [Detalles de pedidos] group
by IdProducto having Sum (Preciounidad Cantidad)gt50000 order by IdProducto
Ejemplo 43
Cuantos Clientes no tienen Fax
Select Count () as [Total de Clientes sin Fax] from clientes where fax is null
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 29
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
Funcioacuten Resultado
GETDATE() Retorna la fecha y hora del sistema
DATEADD(partefechanfecha) Retorna una nueva fecha antildeadiendo n
unidades de partefecha a fecha
DATEDIFF(parteFechafecha1fecha2) Retorna la diferencia en parteFecha entre
fecha1 y fecha2
DATENAME(partefechafecha) Retorna la cadena correspondiente a
partefecha en fecha
DATEPART(partefechafecha) Retorna el numero correspondiente a
partefecha y fecha
DAY(fecha) Retorna el numero correspondiente a la
parte del diacutea de fecha
MONTH(fecha) Retorna el numero correspondiente a la
parte del mes de fecha
YEAR(fecha) Retorna el numero correspondiente a la
parte del antildeo de fecha
GETUTCDATE() Retorna la fecha y hora del meridiano de
Greenwich
La siguiente tabla muestra los valores de partefecha que podemos utilizar
partefecha Abreviatura
Year Yy yyyy
Quarter Qq q
Month Mm m
Dayofyear Dy y
Day Dd d
Week Wk ww
weekday Dw
Hour Hh
minute Mi n
second Ss s
milisecond Ms
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 30
Getdate
Select getdate () Funcioacuten que recupera la fecha actual del sistema
Convert Cast
Convierten expliacutecitamente una expresioacuten de un tipo de datos en otro CAST y CONVERT
proporcionan funciones similares
Convert (Tipodedatosdestino Origen Estilo)
o Tipodedatosdestino Siempre ha de ser tipo caraacutecter
o Origen Puede ser tipo fecha numeacuterico o moneda
o Estilo Opcional Es un coacutedigo que indica el formato en el que devuelve la cadena de
caracteres
Sintaxis
Convert (TipoDato Dato)
Cast (Dato as TipoDato)
Ejemplo
declare n intpalabra nvarchar(10)
set n = 1
set palabra =Nuacutemero
print convert(nvarchar(2)n) + + palabra
print cast(n as nvarchar(2)) + + palabra
while (nlt11)
begin
print convert(nvarchar(2)n) + + palabra
print cast(n as nvarchar(2)) + + palabra
set n = n + 1
end
DateName
Devuelve una cadena de caracteres que representa la parte de la fecha especificada de la fecha
especificada
Los caacutelculos 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
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 31
Ejemplo 46
Select IdPedido DateName (week FechaPedido) as Numero de Semana from Pedidos where IdPedido
= 1035251
Ejemplo 47
Select IdPedido datename (weekday FechaPedido) as Diacutea De Semana from Pedidos where IdPedido =
10352 Martes
Horas
Ejemplo 48
Select IdPedido datename (mi FechaPedido) as Minutos from Pedidos where IdPedido = 10352
Ejemplo 49
Select DateName (minute getdate ()) as minutos
Ejemplo 50
Select DateName (Hh FechaPedido) as hora from Pedidos where IdPedido = 10352
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 32
Ejemplo 51
Select DateName (Hour getdate ()) as hora--gt18
Ejemplo 52
Select DateName (Hh getdate ()) as hora--gt18
DatePart
Devuelve la parte de la fecha u hora indicada Sintaxis
Datepart (Valor devolver fecha)
Ejemplo 53
Select IdPedido datepart (mm FechaPedido) as Mes from Pedidos where IdPedido = 10352
Ejemplo 54
Select Datepart (Hh getdate ()) as Hora--gt17
Ejemplo 55
Select Datepart (mi getdate ()) as Minutos--gt54
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 33
Nombres de Fechas
Day (fecha)
Devuelve UN INT equivale a Datepart
Select day (getdate ()) as diacutea--gt6 (diacutea en la que se ejecuta la sentencia)
Select Datepart (dd getdate ()) --gt6 (diacutea en la que se ejecuta la sentencia)
Select Month (getdate ()) --gt1 (Mes en la que se ejecuta la sentencia)
Select Datepart (mm getdate ()) --gt1 (Mes en la que se ejecuta la sentencia)
Select Year (getdate ()) --gt2008 (Antildeo en la que se ejecuta la sentencia)
Ejemplo 56
Select year (FechaPedido) as Antildeo from Pedidos where IdPedido = 10352
Ejemplo 57
Select datediff (yyyy FechaPedido getdate()) as Dia from Pedidos where IdPedido = 10352
DateAdd
DateAdd (Datepart number date)
Antildeade un nuacutemero a la fecha puesta
DatePart es el formato de lo que queremos antildeadir
Number es el nuacutemero que queremos incrementar la fecha expuesta
Select convert (datetime1-1-02)
Select dateadd (dd 71-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 comparacioacuten y el tipo de dato
que nos devolveraacute antildeos diacuteas minutos etc
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 34
Ejemplo 58
Select datediff (yyyy FechaPedido getdate ()) as Dia from Pedidos where IdPedido = 10352
Ejercicios de funciones de Fecha
Ejemplo 59
Lista de pedidos emitidos en febrero de 1996
Select from Pedidos where month (FechaPedido) =2 and year (FechaPedido) =1996
Ejemplo 60
Lista de Pedidos mostrando la diferencia en diacuteas entre la fecha del pedido y la fecha de Envioacute
Select IdPedido FechaPedido FechaEnviacuteo diacuteas =datediff (day FechaPedido FechaEnviacuteo) from
pedidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 35
Ejemplo 61
Genere un listado de pedidos en el que la fecha del pedido se muestre en el formato nombre del
diacutea diacutea de mes antildeo
Select IdPedido FechaPedido Fecha=datename (dw IdPedido)+ + str (datepart (dd
IdPedido) 2)+ de +datename (mm IdPedido)+ de +str (datepart (yy IdPedido) 4) from
pedidos
Ejemplo 62
Mostrar de la tabla pedidos la fecha de pedidos en fecha corta
Select IdPedido convert (varchar (30) FechaPedido 106) as [Fecha Corta] from pedidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 36
FUNCIONES MATEMATICAS
ABS
Es el valor Absoluto
Select ABS (-4) as VALOR ABSOLUTO--gt4
CEILING
Devuelve el entero maacutes pequentildeo mayor o igual que la expresioacuten numeacuterica dada
Select CEILING (54) as CEILING--6
FLOOR
Devuelve el entero maacutes grande menor o igual que la expresioacuten numeacuterica dada
Select FLOOR (5) as FLOOR--gt5
POWER
Devuelve el valor de la expresioacuten indicada elevada a la potencia especificada
Select POWER (3 2) as 3 ELEVADO A 2--gt9
RAND
Devuelve un valor float aleatorio de 0 a 1
Las llamadas repetitivas de RAND() en una uacutenica consulta produciraacuten el mismo valor
Select RAND(6) as ALEATORIO--071368515806921451
Select RAND(6) as ALEATORIO--071368515806921451
Select RAND(4) as ALEATORIO--07136478921266981
Rand sobre los milisegundos actuales
Select RAND(DATEPART(msGETDATE())) as ALEATORIO--gt071443047691954253
Select RAND(999999999)--gt068504257551273573
ROUND
Devuelve una expresioacuten numeacuterica redondeada a la longitud o precisioacuten especificada
Round (Nuacutemero Redondeo del Nuacutemero)
ROUND siempre devuelve un valor Si length es un valor negativo y mayor que el nuacutemero de
diacutegitos anteriores al separador decimal ROUND devuelve 0
Select ROUND (1234567 2) --gt1234600
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 37
Select ROUND (1234567-2) --gt1000000
Select ROUND (1234567 0) --gt1230000
Select ROUND (1234567-3) ---gt0
SIGN
Devuelve el signo positivo (+1) cero (0) o negativo (-1) de la expresioacuten especificada
Dice el valor negativo positivo o neutro (0) del valor especificado
Select SIGN (-3) --gt-1
Select SIGN (3) --gt1
Select SIGN (0) --gt0
SQUARE
Devuelve el cuadrado de la expresioacuten especificada
Select SQUARE (4) as bdquoCuadrado‟--gt160
SQRT
Devuelve la raiacutez cuadrada de la expresioacuten especificada
Select SQRT (4) as [RAIZ CUADRADA] --gt20
FUNCIONES DE CADENA
ASCII
Devuelve el coacutedigo ASCII del caraacutecter maacutes a la izquierda de una expresioacuten de caracteres
Select ASCII(A)--gt65
Select ASCII(a)--gt97
Select ascii(aula)--gt97
CHAR
Una funcioacuten de cadena que convierte un coacutedigo ASCII int en un caraacutecter
select char(65)--gtA
select char(97)--gta
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 38
CHARINDEX
Devuelve la posicioacuten inicial de la expresioacuten especificada en una cadena de caracteres
CHARINDEX (expression1 expression2 [ start_location])
Argumentos
expression1
Es una expresioacuten que contiene la secuencia de caracteres que se desea buscar
Expression1 es una expresioacuten del tipo de cadenas cortas de caracteres
Expression2
Es una expresioacuten normalmente una columna
en la que se busca la cadena especificada
Expression2 es de la categoriacutea del tipo de datos cadena de caracteres
start_location
Es la posicioacuten del caraacutecter de expression2 en el que se empieza la buacutesqueda de expression1
Si no se especifica start_location es un nuacutemero negativo o es cero
la buacutesqueda empieza al principio de la cadena expression2
Si expression1 no se encuentra en expression2 CHARINDEX devuelve 0
Si alguno de los dos es null devuelve null
Select charindex (ciemurcielago) --gt4
Select charindex (ciemurcielago 2) --gt4
Select charindex (ciemurcielago 5) --gt0
Select charindex (ciemurcielago-6) --gt4
LEFT
Devuelve la parte de una cadena de caracteres que comienza en un nuacutemero de caracteres
especificado a partir de la izquierda
Select left (murcielago5) --gtmurci
RIGHT
Devuelve la parte de una cadena de caracteres que
Comienza en el nuacutemero de caracteres especificado
En integer_expression a partir de la derecha
Select right (hola que tal5) --gte tal
LEN
Cuenta el nuacutemero de caracteres que se incluyen en la cadena
Select len (murcieacutelago) --gt10
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 39
LOWER
Convierte a Minuacutesculas la cadena especificada
Select lower (MurcIELaGO) as [minusculas] --gtmurcielago
UPPER
Convierte a Mayuacutesculas la cadena especificada
Select upper (murcielago) as [MAYUSCULAS] --gtMURCIELAGO
RTRIM y LTRIM
Elimina los espacios que existen a la izquierda y a la derecha respectivamente
Select Rtrim ( murcieacutelago ) AS [SIN ESPACIOS] --gtmurcieacutelago
Select Ltrim ( murcieacutelago ) AS [SIN ESPACIOS] --gtmurcieacutelago
Select ltrim(rtrim( hola ))+
REPLACE
Reemplaza por una tercera expresioacuten todas las apariciones
de la segunda expresioacuten de cadena proporcionada en la primera expresioacuten de cadena
Select replace (hola que tal estasaA) --gtholA que tAl estAs
Select replace (buenos dias que tal estasuentildentildentilde) --gtbntildentildentildenos diasqntildentildentilde tal estas
SPACE
Coloca el nuacutemero de espacios que se le indiquen para entre una cadena de caracteres
Select hola+space(5)+que tal--gthola que tal
SUBSTRING
Devuelve parte de una expresioacuten de caracteres binaria de texto o de imagen
Sintaxis
SUBSTRING (Expresioacuten Comienzo Duracioacuten)
Argumentos
Expresioacuten
Es una cadena de caracteres cadena binaria texto imagen
Columna o expresioacuten que incluye una columna
No deben usarse expresiones que incluyan funciones de agregado
Start
Es un entero que especifica el punto en que comienza la subcadena
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 40
Length
Es un entero que especifica la longitud de la subcadena
(El nuacutemero de caracteres o bytes que se devuelven)
Select substring (murcielago 3 5) --gtrciel
Select substring (murcielago 3 len (murcielago)) --gtrciel
REVERSE
Devuelve invertida una expresioacuten de caraacutecter
Select reverse (hola)
REPLICATE
Repite una expresioacuten de caracteres un nuacutemero especificado de veces
Select replicate (murcielago 5)
Replicate replicate replicate replicate replicate
STUFF
Elimina el nuacutemero de caracteres especificados e insertados
Otro conjunto de caracteres en un punto de inicio indicado
Select STUFF (Murcieacutelago 2 3 ijklmn) Mijklmnielago
FUNCIONES DE SISTEMA
- APP_NAME () Devuelve el nombre de la aplicacioacuten actual
Select app_name () as [Nombre de la aplicacion]
- DATALENGTH (Expresioacuten) Devuelve un entero que es numero de bites necesarios para
representar esa expresioacuten int
Select datalength (Ninoni) as [Numero de bites]
- ISDATE (Expresioacuten) Dice si la expresioacuten es una fecha o no Devuelve 1 si la expresioacuten es
una fecha y 0 si no es una fecha
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 41
Select isdate (121001) as [Validacioacuten Fecha]
- ISNUMERIC (Expresion) Dice si la expresioacuten es un numero o no Devuelve 1 si la
expresioacuten es un nuacutemero y 0 si la expresioacuten no es nuacutemero
Select isnumeric (ddd) as [Validacion Numero]
- ISNULL (Expresioacuten ExpresionDevuelta) Si la expresioacuten es nula te devuelve la Expresioacuten
Devuelta y si no devuelve la primera Expresioacuten
Select isnull (nullNo nulo) as [Es Nulo]
- PARSENAME (bdquoNombreObjeto‟ ParteNombre)
ParteNombre es un valor de tipo Int que coge unos determinados valores del
NombreObjeto
1 Objeto
2 Propietario
3 Base de Datos
4 Servidor
Select parsename (saposeidondbopedidos1) as [Parte Expresioacuten]
Select parsename (saposeidondbopedidos 2) as [Parte Expresioacuten]
Select parsename (saposeidondbopedidos3) as [Parte Expresioacuten]
Select parsename ( saposeidondbopedidos 4) as [Parte Expresioacuten]
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 42
- SYSTEM_USER Devuelve el usuario del sistema actual
Depende de la autentificacioacuten con la que te hayas conectado
Select system_user as [Usuario conectado]
- USER_NAME() Devuelve el nombre del usuario actual
Select user_name ()
- COALESCE (expresioacuten1 expresioacuten2 )
Devuelve la primera expresioacuten no NULL
Si todos son NULL devuelve NULL
Select coalesce (PrecioUnidad Cantidad) from [detalles de Pedidos] Si el PrecioUnidad es nulo
devolveraacute la Cantidad y si los dos son nulos devolveraacute un campo Null
PROCEDIMIENTOS PARA AGRUPAR Y RESUMIR DATOS
En el examen de certificacioacuten 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 usaraacute la base de datos indicada Ejemplo Ponemos
en el analizador de consultas lo siguiente
Use Northwind
Select from [Order Details]
[Order Details]
Esta tabla perteneciente a la Northwind se encarga de manejar los pedidos
Order Id Nordm de Pedido
Producto Id Nordm de Producto
Ambos campos son Primary Key con lo que no puede haber una combinacioacuten de ambos campos que sea
igual
OrderId ProductId
1 A
1 B
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 43
1 C
2 A
3 C
Es decir en este caso no podriacutea existir una nueva combinacioacuten ldquo1 Ardquo o ldquo2 Ardquo
Quantity Es la cantidad del producto del pedido
ROLLUP
Se usa para presentar resuacutemenes de datos A de usarse junto con la clausula group by lo que hace es
realizar un resumen de los campos incluidos en el rollup
Ejemplo 63
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
Group by ProductID OrderID
with Rollup
Order by ProductID OrderID
Este ejemplo suma todas las cantidades y mediante
rollup muestra una fila con la suma de todas las
cantidades de cada producto y ademaacutes otra fila con la
suma de todas las cantidades de todos los productos El
resultado de este ejemplo seriacutea el que muestra la
imagen
Ejemplo 64
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
where orderid lt 10250
Group by ProductID OrderID
with Rollup
Order by ProductID OrderID
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 44
CUBE
Al igual que Rollup realiza resuacutemenes de campos agrupados Pero en este caso muestra un resumen con
cada combinacioacuten posible de los campos agrupados
Ejemplo 65
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
where orderid lt 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 combinacioacuten posible entre el
productid y el orderid
GROUPING
Indica si el resultado de un campo es el que hay en la propia tabla o se ha introducido mediante una
claacuteusula de resumen es decir para saber por ejemplo si un ldquoNullrdquo 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 lt 10250 Group by ProductID
OrderID with Cube Order by ProductID OrderID
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 45
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
Ponieacutendole un alias al
grouping saldriacutea el nombre
de columna que le
indiquemos
COMPUTE
Realiza un resumen en una columna aparte con el resultado de la funcioacuten de agregado indicada Su
formato seriacutea Compute funcioacuten(campo) No se puede utilizar en aplicaciones cliente servidor es una
clausula meramente informativa Tampoco se le pueden poner alias a los resuacutemenes
Ejemplo 67
Select Productid Orderid Quantity From [Order Details] order by ProductID Orderid compute
Sum(quantity)
Vemos que muestra la
columna con la suma
total de todas las
cantidades
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 46
Ejercicios de ROLLUP GROUPING y CUBE
Ejemplo 68
Realizar una consulta que resuma la cantidad de artiacuteculos pedidos por cada iacutendice de producto y
nuacutemero de pedido Realizando un caacutelculo acumulativo
select productid as [PRODUCTO] orderid as [Nordm PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] group by productid orderid with rollup order by productid orderid
PRODUCTO Nordm 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
hellip
Ejemplo 69
Modificacioacuten al ejercicio anterior Realizar el mismo resumen pero uacutenicamente para el producto
cuyo id es 50
select productid as [PRODUCTO] orderid as [Nordm PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] where productid = 50 group by productid orderid with rollup order by productid ordered
PRODUCTO Nordm 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
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 47
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 modificacioacuten 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 [Nordm PEDIDO] grouping(orderid) as [GRUPO PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] where productid = 50 group by Productidorderid with cube order by productidorderid
PRODUCTO GRUPO PRODUCTO Nordm PEDIDO GRUPO PEDIDO SUMA TOTAL
----------- -------------- ----------- ------------ -----------
NULL 1 NULL 1 235
NULL 1 10350 0 15
NULL 1 10383 0 15
NULL 1 10429 0 40
NULL 1 10465 0 25
NULL 1 10637 0 25
NULL 1 10729 0 40
NULL 1 10751 0 20
NULL 1 10920 0 24
NULL 1 10948 0 9
NULL 1 11072 0 22
50 0 NULL 1 235
50 0 10350 0 15
50 0 10383 0 15
50 0 10429 0 40
50 0 10465 0 25
50 0 10637 0 25
50 0 10729 0 40
50 0 10751 0 20
50 0 10920 0 24
50 0 10948 0 9
50 0 11072 0 22
(22 filas afectadas)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 48
Obtencioacuten de resuacutemenes 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 maacutes columnas y
luego efectuar alguna operacioacuten de resumen sobre cada grupo asiacute generado
La diferencia con GROUP BY es que permite mostrar informacioacuten mas detallada de cada grupo
Ejemplo 71
Lista de pedidos que muestre por coacutedigo de pedido la cantidad de productos vendidos por cada uno
de ellos
select Idpedidoidproductopreciounidadcantidad[Sub Total]=sum(PreciounidadCantidad) from
[detalles de pedidos] group by Idpedidoidproductopreciounidadcantidad order by IdPedido compute
sum(Cantidad) by IdPedido
EJERCICIOS CON COMPUTE
Ejemplo 72
Generar un resumen de subtotales en una consulta que devuelva el nuacutemero de pedido la cantidad
pedida para todos los orderid 11070
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 49
Select Orderid as [Nordm PEDIDO] Quantity AS [CANTIDAD] From [Order Details] where orderid gt= 11070 order by Orderid compute Sum(quantity) by orderid compute sum(quantity)
Nordm PEDIDO CANTIDAD
----------- --------
11070 40
11070 20
11070 30
11070 20
sum
===========
110
sum
===========
110
(6 filas afectadas)
Ejemplo 73
Generar un resumen con calculo de subtotales similar al anterior pero para los orderid 11075 y
11076
Select Orderid as [Nordm PEDIDO] Quantity as [CANTIDAD] From [Order Details] where orderid = 11075 or orderid = 11076 order by Orderid compute Sum(quantity) by ordered Nordm PEDIDO CANTIDAD ----------- -------- 11075 10 11075 30 11075 2 sum =========== 42 Nordm PEDIDO CANTIDAD ----------- -------- 11076 20 11076 20 11076 10
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 50
sum =========== 50 (8 filas afectadas)
Ejemplo 74
Modificacioacuten al ejercicio anterior Agregar la cantidad total y la cantidad promedio al final del
informe
Select Orderid as [Nordm 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)
Nordm PEDIDO CANTIDAD
----------- --------
11075 10
11075 30
11075 2
sum
===========
42
Nordm PEDIDO CANTIDAD
----------- --------
11076 20
11076 20
11076 10
sum
===========
50
sum
===========
92
avg
===========
15
(10 filas afectadas)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 51
Ejemplo 75
Seleccionar de forma agrupada por tipo todos los tipos la suma de los precios y la suma del
anticipo de la tabla tiacutetulos
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 199900 50000000
business 119500 50000000
business 29900 101250000
business 199900 50000000
sum
=====================
549200
avg
=====================
62812500
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
mod_cook 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
avg
=====================
75000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
popular_comp 229500 70000000
popular_comp 200000 80000000
popular_comp NULL NULL
sum
=====================
429500
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 52
avg
=====================
75000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
psychology 215900 70000000
psychology 109500 22750000
psychology 70000 60000000
psychology 199900 20000000
psychology 79900 40000000
sum
=====================
675200
avg
=====================
42550000
(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 ademaacutes 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 199900 50000000
business 119500 50000000
business 29900 101250000
business 199900 50000000
sum
=====================
549200
sum
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 53
=====================
251250000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
mod_cook 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
popular_comp 229500 70000000
popular_comp 200000 80000000
popular_comp NULL NULL
sum
=====================
429500
sum
=====================
150000000
(30 filas afectadas)
Ejemplo 77
Generar un informe que muestre la suma de los precios de los libros de psicologiacutea 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 109500
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 54
psychology 0736 70000
psychology 0736 199900
psychology 0736 79900
sum
=====================
459300
TIPO CODIGO EDITOR PRECIO
------------ ------------- ---------------------
psychology 0877 215900
sum
=====================
215900
(7 filas afectadas)
Ejemplo 78
Generar un informe que obtenga la suma de los precios de todos los libros de psicologiacutea asiacute como la
suma de los precios de los libros de psicologiacutea 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 109500
psychology 0736 70000
psychology 0736 199900
psychology 0736 79900
sum
=====================
459300
TIPO CODIGO EDITOR PRECIO
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 55
------------ ------------- ---------------------
psychology 0877 215900
sum
=====================
215900
sum
=====================
675200
(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 199900 0000
mod_cook 0877 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO CODIGO EDITOR PRECIO ANTICIPO
------------ ------------- --------------------- ---------------------
trad_cook 0877 119500 40000000
trad_cook 0877 209500 70000000
trad_cook 0877 149900 80000000
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 56
sum
=====================
478900
sum
=====================
190000000
(9 filas afectadas)
Ejemplo 80
Generar un informe que muestre todos los tiacutetulos precio y anticipo de aquellos tiacutetulos que tengan
un precio superior a 20 doacutelares Ofreceraacute tambieacuten la suma total del precio y del anticipo
Select title as [TITULO] price as [PRECIO] advance as [ANTICIPO] From titles where price gt 20 order by title compute sum(price) compute sum(advance)
TITULO PRECIO ANTICIPO
-------------------------------------------------------------------------------- --------------------- -------------
--------
But Is It User Friendly 229500 70000000
Computer Phobic AND Non-Phobic Individuals Behavior Variations 215900
70000000
Onions Leeks and Garlic Cooking Secrets of the Mediterranean 209500
70000000
sum
=====================
654900
sum
=====================
210000000
(5 filas afectadas)
Ejemplo 81
Generar un informe que muestre el precio el tipo y el nuacutemero de editor de la tabla titles de todos
aquellas obras que pertenezcan la categoriacutea de ldquobusinessrdquo Ademaacutes apareceraacute la suma total de
precios y el maacuteximo pub_id de esta seleccioacuten
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 57
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 29900 0736
business 199900 1389
business 199900 1389
business 119500 1389
sum
=====================
549200
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 Mostraraacute la suma de los precios y los anticipos por tipo y luego calcularaacute 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 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
trad_cook 209500 70000000
trad_cook 119500 40000000
trad_cook 149900 80000000
sum
=====================
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 58
478900
sum
=====================
190000000
sum
=====================
708700
sum
=====================
340000000
(11 filas afectadas)
Eliminacioacuten 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 iquestA que precio se ah vendido los productos
Select IdProducto Preciounidad from [Detalles de pedidos] order by IdProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 59
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 mayoriacutea de las consultas que se hacen en una base de datos requiere que se lean datos procedentes
de dos oacute maacutes tablas
INNER JOIN- son las filas que satisfacen la condicioacuten de la combinacioacuten
En la siguiente sentencia SQL enlaza 2 tablas la tabla clientes y la tabla pedidos en esta ejemplo me
muestra los campos nombre compantildeiacutea y el campo idpedido
La uacutenica condicioacuten es que las 2 tablas tengan un campo en comuacuten
Ejemplo 84
select clientesNombreCompantildeiacuteapedidosidpedido from clientes inner join pedidos on
clientesidcliente=pedidosidcliente
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 60
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 pedidosIdPedido pedidosIdCliente 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 pedidosIdPedido pedidosIdCliente order
by pedidos IdPedido
CROSS JOIN
Un Cross Join es la consulta correlacionada que combine cada una de las filas de una de las tablas con
todas las filas de la otra tabla
No es necesario que exista una columna en comuacuten para ejecutar el Cross Join
Ejemplo 86
La siguiente consulta combina cada una de las filas de la tabla categoriacuteas con cada una de las filas de la
tabla productos
select productosNombreProductocategoriasNombrecategoria from productos cross join categorias
order by productosNombreProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 61
Ejercicios de consultas Muacuteltiples
Ejemplo 87
Mostrar el pedidos completo con el id=10248
Select pedidosIdPedido pedidosIdCliente
Total=sum ([detalles de pedidos]Preciounidad[detalles de pedidos]Cantidad)
From [detalles de pedidos] inner join pedidos on
[Detalles de pedidos]IdPedido=pedidosIdPedido where pedidosIdPedido=10248
Group by pedidosIdPedido pedidosIdCliente
Ejemplo 88
1 Mostrar la cantidad de productos por categoriacutea
Select CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
[Total de Producto]=sum (UnidadesEnExistencia) from Categoriacuteas inner join
Productos on CategoriacuteasIdCategoriacutea=productosIdCategoriacutea
Group by CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 62
Ejemplo 89
Calcular cuantas ventas tiene cada uno de los vendedores
Select empleadosIdEmpleado empleadosNombre empleadosApellidos
[Total de ventas]=count (pedidosIdPedido) from empleados
Inner join Pedidos on empleadosIdEmpleado=pedidosIdEmpleado
Group by empleadosIdEmpleado empleadosNombre empleadosApellidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 63
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 despueacutes saca la de Plantilla
Recomendaciones a la hora de usar las combinaciones
Combinar tablas en funcioacuten de claves principales y externas
Limite el nuacutemero de tablas de las combinaciones
Select Apellido
Oficio as
OFICIOFUNCION
salario from emp
UNION
Select Apellido
Funcion Salario from
Plantilla
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 64
SUBCONSULTAS
Es una SELECT anidada en una instruccioacuten INSERT DELETE SELECT o UPDATE
Como una tabla derivada
Select eemp_no as Numero
eApellido
from (select emp_no apellido from emp) as e
Como una expresioacuten
Select emp_no as [Numero]
Apellido
Salario
(select avg(Salario) from emp)
as Diferencia
from emp
where oficio = Empleado
Para correlacionar datos
- Expresioacuten dinaacutemica que cambia en cada fila de una consulta externa
- Es una combinacioacuten entre la subconsulta y la fila de la consulta externa
- Dividen consultas complejas con dos o maacutes consultas simples relacionadas
Subconsulta correlacionada
Select apellido oficiodept_no
from emp as e
where 20 lt
(select dept_no from dept as d
where edept_no = ddept_no
and ddnombre = Ventas)
SUBCONSULTAS
1 Mostrar el numero de empleado el apellido y la fecha de alta del empleado mas antiguo de la
empresa
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 65
SELECT emp_noapellido
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_noapellido
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 Jimeacutenez
select apellido oficio from emp where
oficio = (select oficio from emp where apellido = JIMENEZ)
4 Queremos saber el apellido oficio salario y nuacutemero 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 gt (select max (salario) from
emp where dept_no = 30)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 66
5 Mostrar el apellido la funcioacuten sala o departamento de todos los empleados que trabajen en la
empresa
select eApellido eOficio as [Cargo en Empresa] ddnombre as [Oficina]
from emp as e
inner join dept as d
on edept_no = ddept_no
union
select pApellido pfuncion snombre
from plantilla as p
inner join sala as s
on phospital_cod = shospital_cod
and psala_cod = ssala_cod
union
select dApellido despecialidad hnombre
from doctor as d
inner join hospital as h
on dhospital_cod = hhospital_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 = lsquoventasrsquo))
order by 2
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 67
8 Mostrar los empleados que tienen mejor salario que la media de los directores no incluyendo al
presidente
Select from emp where salario gt
(select avg (salario) from emp where oficio = DIRECTOR)
and oficio ltgt PRESIDENTE
9 Mostrar el apellido funcioacuten salario y coacutedigo 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 = lsquoENFERMEROrsquo or
funcion = lsquoENFERMERArsquo) and hospital_cod = (select hospital_cod from hospital where nombre =
lsquoSAN CARLOSrsquo)
Select apellido funcion salario hospital_cod from plantilla where
funcion in (ENFERMEROENFERMERA)
and hospital_cod = (select hospital_cod from hospital
where nombre = SAN CARLOS)
10 Visualizar los datos de los hospitales que tienen personal (Doctores) de cardiologiacutea
Select from hospital where hospital_cod in (select hospital_cod from doctor where
especialidad = lsquoCardiologiacutearsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 68
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 = lsquoPROVINCIALrsquo or
nombre= lsquoGENERALrsquo)
12 Mostrar el apellido de los enfermos que nacieron antes que el Sentildeor Miller
Select apellido from enfermo where Fecha_nac lt (select fecha_nac from enfermo where
apellido = lsquoMILLER Brsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 69
Simulacion de una clausula JOIN
Vamos a mostrar los oficios que estaacuten en maacutes de un departamento
Select distinct e1oficio from emp as e1
where e1oficio in(Select e2oficio from emp as e2
where e1dept_no ltgt e2dept_no)
Se debe utilizar antes una combinacioacuten que una subconsulta la combinacioacuten seriacutea asi dando los
mismos resultados
Select distinct e1Oficio from emp as e1
inner join emp as e2
on e1oficio = e2oficio
where e1dept_no ltgt e2dept_no
Estos son los dos oficios que estaacuten en
maacutes de un departamento
Subconsulta para simular una clausula HAVING
select e1apellidoe1oficio e1salario
from emp as e1
where e1salario gt
(select avg(e2salario) from emp as e2
where e1oficio = e2oficio)
Esta es la consulta utilizando el HAVING que es la que deberiacuteamos utilizar antes que una
subconsulta de simulacioacuten HAVING
SELECT e1apellidoe1oficio e1salario
FROM emp AS e1
INNER JOIN emp AS e2
ON e1oficio = e2oficio
GROUP BY e1oficio e1salarioe1apellido
HAVING e1salario gt AVG (e2salario)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 70
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 24
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 Categoriacutea (123)
Select from productos where IdCategoriacutea not in (1 2 3) order by IdProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 25
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
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 26
USO DE FUNCIONES
Podemos utilizar funciones para construir expresiones y generar columnas computadoras O condiciones
complejas
Funcioacuten de agregacioacuten
Son funciones que se utilizan para calcular valores en las tablas Si queremos usarlas
combinaacutendolas 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
expresioacuten HAVING Equivalente a where
Todos estos ejercicios han sido desarrollado con la base de datos Poseidoacuten
COUNT Cuenta los registros que hay en la consulta
Si pongo un valor dentro de la expresioacuten devolveraacute la cuenta de todos los
registros no nulos
Si pongo un asterisco contaraacute todos los registros aunque tengan valores
nulos
Select count () from Pedidos Valores con Nulos
Select count (FechaEnviacuteo) from Pedidos Valores sin nulos
AVG Realiza la media sobre la expresioacuten dada debe ser un tipo de dato
Int
Select avg(Preciounidad) from productos
MAX Saca el valor maacuteximo de una consulta
Select max (FechaPedido) from Pedidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 27
MIN Devuelve el valor miacutenimo 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 paiacutes Brasil mostrando el nuacutemero de los Factura con el paiacutes de
Destinatario Brasil
Select count () as [Numero de Facturas] PaiacutesDestinatario
Avg (Preciounidad) as [Precio Medio] from
Facturas group by PaiacutesDestinatario having PaiacutesDestinatario =Brasil
Ejemplo 39
Encontrar el precio maacutes alto mas bajo y la diferencia entre ambos de todos los productos con
IdCategoriacutea 2
Select IdCategoriacutea Max (Preciounidad) as [Precio mas alto] min(Preciounidad) as
[Precio mas Bajo] Max(Preciounidad) - min(Preciounidad) as [Diferencia entre Ambos]
from Productos group by IdCategoriacutea having IdCategoriacutea = 2
Ejemplo 40
Visualizar el nuacutemero de productos por Categoriacutea
Select IdCategoriacutea as [Nordm de Categoriacutea] Count (IdCategoriacutea) as [Nordm de Productos]
From Productos group by IdCategoriacutea
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 28
Ejemplo 41
Visualizar los clientes que vivan en las siguientes ciudades Londres Madrid y Barcelona
Select count () as [Nordm de personas] ciudad from clientes group by ciudad Having ciudad in
(londresMadridBarcelona) order by ciudad
Ejemplo 42
Lista de productos cuya venta allaacute sido mayor a 50000
Select IdProducto Monto=Sum (Preciounidad Cantidad) from [Detalles de pedidos] group
by IdProducto having Sum (Preciounidad Cantidad)gt50000 order by IdProducto
Ejemplo 43
Cuantos Clientes no tienen Fax
Select Count () as [Total de Clientes sin Fax] from clientes where fax is null
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 29
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
Funcioacuten Resultado
GETDATE() Retorna la fecha y hora del sistema
DATEADD(partefechanfecha) Retorna una nueva fecha antildeadiendo n
unidades de partefecha a fecha
DATEDIFF(parteFechafecha1fecha2) Retorna la diferencia en parteFecha entre
fecha1 y fecha2
DATENAME(partefechafecha) Retorna la cadena correspondiente a
partefecha en fecha
DATEPART(partefechafecha) Retorna el numero correspondiente a
partefecha y fecha
DAY(fecha) Retorna el numero correspondiente a la
parte del diacutea de fecha
MONTH(fecha) Retorna el numero correspondiente a la
parte del mes de fecha
YEAR(fecha) Retorna el numero correspondiente a la
parte del antildeo de fecha
GETUTCDATE() Retorna la fecha y hora del meridiano de
Greenwich
La siguiente tabla muestra los valores de partefecha que podemos utilizar
partefecha Abreviatura
Year Yy yyyy
Quarter Qq q
Month Mm m
Dayofyear Dy y
Day Dd d
Week Wk ww
weekday Dw
Hour Hh
minute Mi n
second Ss s
milisecond Ms
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 30
Getdate
Select getdate () Funcioacuten que recupera la fecha actual del sistema
Convert Cast
Convierten expliacutecitamente una expresioacuten de un tipo de datos en otro CAST y CONVERT
proporcionan funciones similares
Convert (Tipodedatosdestino Origen Estilo)
o Tipodedatosdestino Siempre ha de ser tipo caraacutecter
o Origen Puede ser tipo fecha numeacuterico o moneda
o Estilo Opcional Es un coacutedigo que indica el formato en el que devuelve la cadena de
caracteres
Sintaxis
Convert (TipoDato Dato)
Cast (Dato as TipoDato)
Ejemplo
declare n intpalabra nvarchar(10)
set n = 1
set palabra =Nuacutemero
print convert(nvarchar(2)n) + + palabra
print cast(n as nvarchar(2)) + + palabra
while (nlt11)
begin
print convert(nvarchar(2)n) + + palabra
print cast(n as nvarchar(2)) + + palabra
set n = n + 1
end
DateName
Devuelve una cadena de caracteres que representa la parte de la fecha especificada de la fecha
especificada
Los caacutelculos 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
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 31
Ejemplo 46
Select IdPedido DateName (week FechaPedido) as Numero de Semana from Pedidos where IdPedido
= 1035251
Ejemplo 47
Select IdPedido datename (weekday FechaPedido) as Diacutea De Semana from Pedidos where IdPedido =
10352 Martes
Horas
Ejemplo 48
Select IdPedido datename (mi FechaPedido) as Minutos from Pedidos where IdPedido = 10352
Ejemplo 49
Select DateName (minute getdate ()) as minutos
Ejemplo 50
Select DateName (Hh FechaPedido) as hora from Pedidos where IdPedido = 10352
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 32
Ejemplo 51
Select DateName (Hour getdate ()) as hora--gt18
Ejemplo 52
Select DateName (Hh getdate ()) as hora--gt18
DatePart
Devuelve la parte de la fecha u hora indicada Sintaxis
Datepart (Valor devolver fecha)
Ejemplo 53
Select IdPedido datepart (mm FechaPedido) as Mes from Pedidos where IdPedido = 10352
Ejemplo 54
Select Datepart (Hh getdate ()) as Hora--gt17
Ejemplo 55
Select Datepart (mi getdate ()) as Minutos--gt54
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 33
Nombres de Fechas
Day (fecha)
Devuelve UN INT equivale a Datepart
Select day (getdate ()) as diacutea--gt6 (diacutea en la que se ejecuta la sentencia)
Select Datepart (dd getdate ()) --gt6 (diacutea en la que se ejecuta la sentencia)
Select Month (getdate ()) --gt1 (Mes en la que se ejecuta la sentencia)
Select Datepart (mm getdate ()) --gt1 (Mes en la que se ejecuta la sentencia)
Select Year (getdate ()) --gt2008 (Antildeo en la que se ejecuta la sentencia)
Ejemplo 56
Select year (FechaPedido) as Antildeo from Pedidos where IdPedido = 10352
Ejemplo 57
Select datediff (yyyy FechaPedido getdate()) as Dia from Pedidos where IdPedido = 10352
DateAdd
DateAdd (Datepart number date)
Antildeade un nuacutemero a la fecha puesta
DatePart es el formato de lo que queremos antildeadir
Number es el nuacutemero que queremos incrementar la fecha expuesta
Select convert (datetime1-1-02)
Select dateadd (dd 71-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 comparacioacuten y el tipo de dato
que nos devolveraacute antildeos diacuteas minutos etc
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 34
Ejemplo 58
Select datediff (yyyy FechaPedido getdate ()) as Dia from Pedidos where IdPedido = 10352
Ejercicios de funciones de Fecha
Ejemplo 59
Lista de pedidos emitidos en febrero de 1996
Select from Pedidos where month (FechaPedido) =2 and year (FechaPedido) =1996
Ejemplo 60
Lista de Pedidos mostrando la diferencia en diacuteas entre la fecha del pedido y la fecha de Envioacute
Select IdPedido FechaPedido FechaEnviacuteo diacuteas =datediff (day FechaPedido FechaEnviacuteo) from
pedidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 35
Ejemplo 61
Genere un listado de pedidos en el que la fecha del pedido se muestre en el formato nombre del
diacutea diacutea de mes antildeo
Select IdPedido FechaPedido Fecha=datename (dw IdPedido)+ + str (datepart (dd
IdPedido) 2)+ de +datename (mm IdPedido)+ de +str (datepart (yy IdPedido) 4) from
pedidos
Ejemplo 62
Mostrar de la tabla pedidos la fecha de pedidos en fecha corta
Select IdPedido convert (varchar (30) FechaPedido 106) as [Fecha Corta] from pedidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 36
FUNCIONES MATEMATICAS
ABS
Es el valor Absoluto
Select ABS (-4) as VALOR ABSOLUTO--gt4
CEILING
Devuelve el entero maacutes pequentildeo mayor o igual que la expresioacuten numeacuterica dada
Select CEILING (54) as CEILING--6
FLOOR
Devuelve el entero maacutes grande menor o igual que la expresioacuten numeacuterica dada
Select FLOOR (5) as FLOOR--gt5
POWER
Devuelve el valor de la expresioacuten indicada elevada a la potencia especificada
Select POWER (3 2) as 3 ELEVADO A 2--gt9
RAND
Devuelve un valor float aleatorio de 0 a 1
Las llamadas repetitivas de RAND() en una uacutenica consulta produciraacuten el mismo valor
Select RAND(6) as ALEATORIO--071368515806921451
Select RAND(6) as ALEATORIO--071368515806921451
Select RAND(4) as ALEATORIO--07136478921266981
Rand sobre los milisegundos actuales
Select RAND(DATEPART(msGETDATE())) as ALEATORIO--gt071443047691954253
Select RAND(999999999)--gt068504257551273573
ROUND
Devuelve una expresioacuten numeacuterica redondeada a la longitud o precisioacuten especificada
Round (Nuacutemero Redondeo del Nuacutemero)
ROUND siempre devuelve un valor Si length es un valor negativo y mayor que el nuacutemero de
diacutegitos anteriores al separador decimal ROUND devuelve 0
Select ROUND (1234567 2) --gt1234600
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 37
Select ROUND (1234567-2) --gt1000000
Select ROUND (1234567 0) --gt1230000
Select ROUND (1234567-3) ---gt0
SIGN
Devuelve el signo positivo (+1) cero (0) o negativo (-1) de la expresioacuten especificada
Dice el valor negativo positivo o neutro (0) del valor especificado
Select SIGN (-3) --gt-1
Select SIGN (3) --gt1
Select SIGN (0) --gt0
SQUARE
Devuelve el cuadrado de la expresioacuten especificada
Select SQUARE (4) as bdquoCuadrado‟--gt160
SQRT
Devuelve la raiacutez cuadrada de la expresioacuten especificada
Select SQRT (4) as [RAIZ CUADRADA] --gt20
FUNCIONES DE CADENA
ASCII
Devuelve el coacutedigo ASCII del caraacutecter maacutes a la izquierda de una expresioacuten de caracteres
Select ASCII(A)--gt65
Select ASCII(a)--gt97
Select ascii(aula)--gt97
CHAR
Una funcioacuten de cadena que convierte un coacutedigo ASCII int en un caraacutecter
select char(65)--gtA
select char(97)--gta
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 38
CHARINDEX
Devuelve la posicioacuten inicial de la expresioacuten especificada en una cadena de caracteres
CHARINDEX (expression1 expression2 [ start_location])
Argumentos
expression1
Es una expresioacuten que contiene la secuencia de caracteres que se desea buscar
Expression1 es una expresioacuten del tipo de cadenas cortas de caracteres
Expression2
Es una expresioacuten normalmente una columna
en la que se busca la cadena especificada
Expression2 es de la categoriacutea del tipo de datos cadena de caracteres
start_location
Es la posicioacuten del caraacutecter de expression2 en el que se empieza la buacutesqueda de expression1
Si no se especifica start_location es un nuacutemero negativo o es cero
la buacutesqueda empieza al principio de la cadena expression2
Si expression1 no se encuentra en expression2 CHARINDEX devuelve 0
Si alguno de los dos es null devuelve null
Select charindex (ciemurcielago) --gt4
Select charindex (ciemurcielago 2) --gt4
Select charindex (ciemurcielago 5) --gt0
Select charindex (ciemurcielago-6) --gt4
LEFT
Devuelve la parte de una cadena de caracteres que comienza en un nuacutemero de caracteres
especificado a partir de la izquierda
Select left (murcielago5) --gtmurci
RIGHT
Devuelve la parte de una cadena de caracteres que
Comienza en el nuacutemero de caracteres especificado
En integer_expression a partir de la derecha
Select right (hola que tal5) --gte tal
LEN
Cuenta el nuacutemero de caracteres que se incluyen en la cadena
Select len (murcieacutelago) --gt10
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 39
LOWER
Convierte a Minuacutesculas la cadena especificada
Select lower (MurcIELaGO) as [minusculas] --gtmurcielago
UPPER
Convierte a Mayuacutesculas la cadena especificada
Select upper (murcielago) as [MAYUSCULAS] --gtMURCIELAGO
RTRIM y LTRIM
Elimina los espacios que existen a la izquierda y a la derecha respectivamente
Select Rtrim ( murcieacutelago ) AS [SIN ESPACIOS] --gtmurcieacutelago
Select Ltrim ( murcieacutelago ) AS [SIN ESPACIOS] --gtmurcieacutelago
Select ltrim(rtrim( hola ))+
REPLACE
Reemplaza por una tercera expresioacuten todas las apariciones
de la segunda expresioacuten de cadena proporcionada en la primera expresioacuten de cadena
Select replace (hola que tal estasaA) --gtholA que tAl estAs
Select replace (buenos dias que tal estasuentildentildentilde) --gtbntildentildentildenos diasqntildentildentilde tal estas
SPACE
Coloca el nuacutemero de espacios que se le indiquen para entre una cadena de caracteres
Select hola+space(5)+que tal--gthola que tal
SUBSTRING
Devuelve parte de una expresioacuten de caracteres binaria de texto o de imagen
Sintaxis
SUBSTRING (Expresioacuten Comienzo Duracioacuten)
Argumentos
Expresioacuten
Es una cadena de caracteres cadena binaria texto imagen
Columna o expresioacuten que incluye una columna
No deben usarse expresiones que incluyan funciones de agregado
Start
Es un entero que especifica el punto en que comienza la subcadena
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 40
Length
Es un entero que especifica la longitud de la subcadena
(El nuacutemero de caracteres o bytes que se devuelven)
Select substring (murcielago 3 5) --gtrciel
Select substring (murcielago 3 len (murcielago)) --gtrciel
REVERSE
Devuelve invertida una expresioacuten de caraacutecter
Select reverse (hola)
REPLICATE
Repite una expresioacuten de caracteres un nuacutemero especificado de veces
Select replicate (murcielago 5)
Replicate replicate replicate replicate replicate
STUFF
Elimina el nuacutemero de caracteres especificados e insertados
Otro conjunto de caracteres en un punto de inicio indicado
Select STUFF (Murcieacutelago 2 3 ijklmn) Mijklmnielago
FUNCIONES DE SISTEMA
- APP_NAME () Devuelve el nombre de la aplicacioacuten actual
Select app_name () as [Nombre de la aplicacion]
- DATALENGTH (Expresioacuten) Devuelve un entero que es numero de bites necesarios para
representar esa expresioacuten int
Select datalength (Ninoni) as [Numero de bites]
- ISDATE (Expresioacuten) Dice si la expresioacuten es una fecha o no Devuelve 1 si la expresioacuten es
una fecha y 0 si no es una fecha
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 41
Select isdate (121001) as [Validacioacuten Fecha]
- ISNUMERIC (Expresion) Dice si la expresioacuten es un numero o no Devuelve 1 si la
expresioacuten es un nuacutemero y 0 si la expresioacuten no es nuacutemero
Select isnumeric (ddd) as [Validacion Numero]
- ISNULL (Expresioacuten ExpresionDevuelta) Si la expresioacuten es nula te devuelve la Expresioacuten
Devuelta y si no devuelve la primera Expresioacuten
Select isnull (nullNo nulo) as [Es Nulo]
- PARSENAME (bdquoNombreObjeto‟ ParteNombre)
ParteNombre es un valor de tipo Int que coge unos determinados valores del
NombreObjeto
1 Objeto
2 Propietario
3 Base de Datos
4 Servidor
Select parsename (saposeidondbopedidos1) as [Parte Expresioacuten]
Select parsename (saposeidondbopedidos 2) as [Parte Expresioacuten]
Select parsename (saposeidondbopedidos3) as [Parte Expresioacuten]
Select parsename ( saposeidondbopedidos 4) as [Parte Expresioacuten]
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 42
- SYSTEM_USER Devuelve el usuario del sistema actual
Depende de la autentificacioacuten con la que te hayas conectado
Select system_user as [Usuario conectado]
- USER_NAME() Devuelve el nombre del usuario actual
Select user_name ()
- COALESCE (expresioacuten1 expresioacuten2 )
Devuelve la primera expresioacuten no NULL
Si todos son NULL devuelve NULL
Select coalesce (PrecioUnidad Cantidad) from [detalles de Pedidos] Si el PrecioUnidad es nulo
devolveraacute la Cantidad y si los dos son nulos devolveraacute un campo Null
PROCEDIMIENTOS PARA AGRUPAR Y RESUMIR DATOS
En el examen de certificacioacuten 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 usaraacute la base de datos indicada Ejemplo Ponemos
en el analizador de consultas lo siguiente
Use Northwind
Select from [Order Details]
[Order Details]
Esta tabla perteneciente a la Northwind se encarga de manejar los pedidos
Order Id Nordm de Pedido
Producto Id Nordm de Producto
Ambos campos son Primary Key con lo que no puede haber una combinacioacuten de ambos campos que sea
igual
OrderId ProductId
1 A
1 B
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 43
1 C
2 A
3 C
Es decir en este caso no podriacutea existir una nueva combinacioacuten ldquo1 Ardquo o ldquo2 Ardquo
Quantity Es la cantidad del producto del pedido
ROLLUP
Se usa para presentar resuacutemenes de datos A de usarse junto con la clausula group by lo que hace es
realizar un resumen de los campos incluidos en el rollup
Ejemplo 63
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
Group by ProductID OrderID
with Rollup
Order by ProductID OrderID
Este ejemplo suma todas las cantidades y mediante
rollup muestra una fila con la suma de todas las
cantidades de cada producto y ademaacutes otra fila con la
suma de todas las cantidades de todos los productos El
resultado de este ejemplo seriacutea el que muestra la
imagen
Ejemplo 64
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
where orderid lt 10250
Group by ProductID OrderID
with Rollup
Order by ProductID OrderID
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 44
CUBE
Al igual que Rollup realiza resuacutemenes de campos agrupados Pero en este caso muestra un resumen con
cada combinacioacuten posible de los campos agrupados
Ejemplo 65
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
where orderid lt 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 combinacioacuten posible entre el
productid y el orderid
GROUPING
Indica si el resultado de un campo es el que hay en la propia tabla o se ha introducido mediante una
claacuteusula de resumen es decir para saber por ejemplo si un ldquoNullrdquo 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 lt 10250 Group by ProductID
OrderID with Cube Order by ProductID OrderID
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 45
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
Ponieacutendole un alias al
grouping saldriacutea el nombre
de columna que le
indiquemos
COMPUTE
Realiza un resumen en una columna aparte con el resultado de la funcioacuten de agregado indicada Su
formato seriacutea Compute funcioacuten(campo) No se puede utilizar en aplicaciones cliente servidor es una
clausula meramente informativa Tampoco se le pueden poner alias a los resuacutemenes
Ejemplo 67
Select Productid Orderid Quantity From [Order Details] order by ProductID Orderid compute
Sum(quantity)
Vemos que muestra la
columna con la suma
total de todas las
cantidades
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 46
Ejercicios de ROLLUP GROUPING y CUBE
Ejemplo 68
Realizar una consulta que resuma la cantidad de artiacuteculos pedidos por cada iacutendice de producto y
nuacutemero de pedido Realizando un caacutelculo acumulativo
select productid as [PRODUCTO] orderid as [Nordm PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] group by productid orderid with rollup order by productid orderid
PRODUCTO Nordm 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
hellip
Ejemplo 69
Modificacioacuten al ejercicio anterior Realizar el mismo resumen pero uacutenicamente para el producto
cuyo id es 50
select productid as [PRODUCTO] orderid as [Nordm PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] where productid = 50 group by productid orderid with rollup order by productid ordered
PRODUCTO Nordm 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
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 47
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 modificacioacuten 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 [Nordm PEDIDO] grouping(orderid) as [GRUPO PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] where productid = 50 group by Productidorderid with cube order by productidorderid
PRODUCTO GRUPO PRODUCTO Nordm PEDIDO GRUPO PEDIDO SUMA TOTAL
----------- -------------- ----------- ------------ -----------
NULL 1 NULL 1 235
NULL 1 10350 0 15
NULL 1 10383 0 15
NULL 1 10429 0 40
NULL 1 10465 0 25
NULL 1 10637 0 25
NULL 1 10729 0 40
NULL 1 10751 0 20
NULL 1 10920 0 24
NULL 1 10948 0 9
NULL 1 11072 0 22
50 0 NULL 1 235
50 0 10350 0 15
50 0 10383 0 15
50 0 10429 0 40
50 0 10465 0 25
50 0 10637 0 25
50 0 10729 0 40
50 0 10751 0 20
50 0 10920 0 24
50 0 10948 0 9
50 0 11072 0 22
(22 filas afectadas)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 48
Obtencioacuten de resuacutemenes 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 maacutes columnas y
luego efectuar alguna operacioacuten de resumen sobre cada grupo asiacute generado
La diferencia con GROUP BY es que permite mostrar informacioacuten mas detallada de cada grupo
Ejemplo 71
Lista de pedidos que muestre por coacutedigo de pedido la cantidad de productos vendidos por cada uno
de ellos
select Idpedidoidproductopreciounidadcantidad[Sub Total]=sum(PreciounidadCantidad) from
[detalles de pedidos] group by Idpedidoidproductopreciounidadcantidad order by IdPedido compute
sum(Cantidad) by IdPedido
EJERCICIOS CON COMPUTE
Ejemplo 72
Generar un resumen de subtotales en una consulta que devuelva el nuacutemero de pedido la cantidad
pedida para todos los orderid 11070
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 49
Select Orderid as [Nordm PEDIDO] Quantity AS [CANTIDAD] From [Order Details] where orderid gt= 11070 order by Orderid compute Sum(quantity) by orderid compute sum(quantity)
Nordm PEDIDO CANTIDAD
----------- --------
11070 40
11070 20
11070 30
11070 20
sum
===========
110
sum
===========
110
(6 filas afectadas)
Ejemplo 73
Generar un resumen con calculo de subtotales similar al anterior pero para los orderid 11075 y
11076
Select Orderid as [Nordm PEDIDO] Quantity as [CANTIDAD] From [Order Details] where orderid = 11075 or orderid = 11076 order by Orderid compute Sum(quantity) by ordered Nordm PEDIDO CANTIDAD ----------- -------- 11075 10 11075 30 11075 2 sum =========== 42 Nordm PEDIDO CANTIDAD ----------- -------- 11076 20 11076 20 11076 10
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 50
sum =========== 50 (8 filas afectadas)
Ejemplo 74
Modificacioacuten al ejercicio anterior Agregar la cantidad total y la cantidad promedio al final del
informe
Select Orderid as [Nordm 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)
Nordm PEDIDO CANTIDAD
----------- --------
11075 10
11075 30
11075 2
sum
===========
42
Nordm PEDIDO CANTIDAD
----------- --------
11076 20
11076 20
11076 10
sum
===========
50
sum
===========
92
avg
===========
15
(10 filas afectadas)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 51
Ejemplo 75
Seleccionar de forma agrupada por tipo todos los tipos la suma de los precios y la suma del
anticipo de la tabla tiacutetulos
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 199900 50000000
business 119500 50000000
business 29900 101250000
business 199900 50000000
sum
=====================
549200
avg
=====================
62812500
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
mod_cook 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
avg
=====================
75000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
popular_comp 229500 70000000
popular_comp 200000 80000000
popular_comp NULL NULL
sum
=====================
429500
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 52
avg
=====================
75000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
psychology 215900 70000000
psychology 109500 22750000
psychology 70000 60000000
psychology 199900 20000000
psychology 79900 40000000
sum
=====================
675200
avg
=====================
42550000
(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 ademaacutes 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 199900 50000000
business 119500 50000000
business 29900 101250000
business 199900 50000000
sum
=====================
549200
sum
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 53
=====================
251250000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
mod_cook 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
popular_comp 229500 70000000
popular_comp 200000 80000000
popular_comp NULL NULL
sum
=====================
429500
sum
=====================
150000000
(30 filas afectadas)
Ejemplo 77
Generar un informe que muestre la suma de los precios de los libros de psicologiacutea 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 109500
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 54
psychology 0736 70000
psychology 0736 199900
psychology 0736 79900
sum
=====================
459300
TIPO CODIGO EDITOR PRECIO
------------ ------------- ---------------------
psychology 0877 215900
sum
=====================
215900
(7 filas afectadas)
Ejemplo 78
Generar un informe que obtenga la suma de los precios de todos los libros de psicologiacutea asiacute como la
suma de los precios de los libros de psicologiacutea 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 109500
psychology 0736 70000
psychology 0736 199900
psychology 0736 79900
sum
=====================
459300
TIPO CODIGO EDITOR PRECIO
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 55
------------ ------------- ---------------------
psychology 0877 215900
sum
=====================
215900
sum
=====================
675200
(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 199900 0000
mod_cook 0877 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO CODIGO EDITOR PRECIO ANTICIPO
------------ ------------- --------------------- ---------------------
trad_cook 0877 119500 40000000
trad_cook 0877 209500 70000000
trad_cook 0877 149900 80000000
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 56
sum
=====================
478900
sum
=====================
190000000
(9 filas afectadas)
Ejemplo 80
Generar un informe que muestre todos los tiacutetulos precio y anticipo de aquellos tiacutetulos que tengan
un precio superior a 20 doacutelares Ofreceraacute tambieacuten la suma total del precio y del anticipo
Select title as [TITULO] price as [PRECIO] advance as [ANTICIPO] From titles where price gt 20 order by title compute sum(price) compute sum(advance)
TITULO PRECIO ANTICIPO
-------------------------------------------------------------------------------- --------------------- -------------
--------
But Is It User Friendly 229500 70000000
Computer Phobic AND Non-Phobic Individuals Behavior Variations 215900
70000000
Onions Leeks and Garlic Cooking Secrets of the Mediterranean 209500
70000000
sum
=====================
654900
sum
=====================
210000000
(5 filas afectadas)
Ejemplo 81
Generar un informe que muestre el precio el tipo y el nuacutemero de editor de la tabla titles de todos
aquellas obras que pertenezcan la categoriacutea de ldquobusinessrdquo Ademaacutes apareceraacute la suma total de
precios y el maacuteximo pub_id de esta seleccioacuten
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 57
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 29900 0736
business 199900 1389
business 199900 1389
business 119500 1389
sum
=====================
549200
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 Mostraraacute la suma de los precios y los anticipos por tipo y luego calcularaacute 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 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
trad_cook 209500 70000000
trad_cook 119500 40000000
trad_cook 149900 80000000
sum
=====================
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 58
478900
sum
=====================
190000000
sum
=====================
708700
sum
=====================
340000000
(11 filas afectadas)
Eliminacioacuten 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 iquestA que precio se ah vendido los productos
Select IdProducto Preciounidad from [Detalles de pedidos] order by IdProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 59
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 mayoriacutea de las consultas que se hacen en una base de datos requiere que se lean datos procedentes
de dos oacute maacutes tablas
INNER JOIN- son las filas que satisfacen la condicioacuten de la combinacioacuten
En la siguiente sentencia SQL enlaza 2 tablas la tabla clientes y la tabla pedidos en esta ejemplo me
muestra los campos nombre compantildeiacutea y el campo idpedido
La uacutenica condicioacuten es que las 2 tablas tengan un campo en comuacuten
Ejemplo 84
select clientesNombreCompantildeiacuteapedidosidpedido from clientes inner join pedidos on
clientesidcliente=pedidosidcliente
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 60
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 pedidosIdPedido pedidosIdCliente 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 pedidosIdPedido pedidosIdCliente order
by pedidos IdPedido
CROSS JOIN
Un Cross Join es la consulta correlacionada que combine cada una de las filas de una de las tablas con
todas las filas de la otra tabla
No es necesario que exista una columna en comuacuten para ejecutar el Cross Join
Ejemplo 86
La siguiente consulta combina cada una de las filas de la tabla categoriacuteas con cada una de las filas de la
tabla productos
select productosNombreProductocategoriasNombrecategoria from productos cross join categorias
order by productosNombreProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 61
Ejercicios de consultas Muacuteltiples
Ejemplo 87
Mostrar el pedidos completo con el id=10248
Select pedidosIdPedido pedidosIdCliente
Total=sum ([detalles de pedidos]Preciounidad[detalles de pedidos]Cantidad)
From [detalles de pedidos] inner join pedidos on
[Detalles de pedidos]IdPedido=pedidosIdPedido where pedidosIdPedido=10248
Group by pedidosIdPedido pedidosIdCliente
Ejemplo 88
1 Mostrar la cantidad de productos por categoriacutea
Select CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
[Total de Producto]=sum (UnidadesEnExistencia) from Categoriacuteas inner join
Productos on CategoriacuteasIdCategoriacutea=productosIdCategoriacutea
Group by CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 62
Ejemplo 89
Calcular cuantas ventas tiene cada uno de los vendedores
Select empleadosIdEmpleado empleadosNombre empleadosApellidos
[Total de ventas]=count (pedidosIdPedido) from empleados
Inner join Pedidos on empleadosIdEmpleado=pedidosIdEmpleado
Group by empleadosIdEmpleado empleadosNombre empleadosApellidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 63
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 despueacutes saca la de Plantilla
Recomendaciones a la hora de usar las combinaciones
Combinar tablas en funcioacuten de claves principales y externas
Limite el nuacutemero de tablas de las combinaciones
Select Apellido
Oficio as
OFICIOFUNCION
salario from emp
UNION
Select Apellido
Funcion Salario from
Plantilla
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 64
SUBCONSULTAS
Es una SELECT anidada en una instruccioacuten INSERT DELETE SELECT o UPDATE
Como una tabla derivada
Select eemp_no as Numero
eApellido
from (select emp_no apellido from emp) as e
Como una expresioacuten
Select emp_no as [Numero]
Apellido
Salario
(select avg(Salario) from emp)
as Diferencia
from emp
where oficio = Empleado
Para correlacionar datos
- Expresioacuten dinaacutemica que cambia en cada fila de una consulta externa
- Es una combinacioacuten entre la subconsulta y la fila de la consulta externa
- Dividen consultas complejas con dos o maacutes consultas simples relacionadas
Subconsulta correlacionada
Select apellido oficiodept_no
from emp as e
where 20 lt
(select dept_no from dept as d
where edept_no = ddept_no
and ddnombre = Ventas)
SUBCONSULTAS
1 Mostrar el numero de empleado el apellido y la fecha de alta del empleado mas antiguo de la
empresa
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 65
SELECT emp_noapellido
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_noapellido
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 Jimeacutenez
select apellido oficio from emp where
oficio = (select oficio from emp where apellido = JIMENEZ)
4 Queremos saber el apellido oficio salario y nuacutemero 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 gt (select max (salario) from
emp where dept_no = 30)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 66
5 Mostrar el apellido la funcioacuten sala o departamento de todos los empleados que trabajen en la
empresa
select eApellido eOficio as [Cargo en Empresa] ddnombre as [Oficina]
from emp as e
inner join dept as d
on edept_no = ddept_no
union
select pApellido pfuncion snombre
from plantilla as p
inner join sala as s
on phospital_cod = shospital_cod
and psala_cod = ssala_cod
union
select dApellido despecialidad hnombre
from doctor as d
inner join hospital as h
on dhospital_cod = hhospital_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 = lsquoventasrsquo))
order by 2
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 67
8 Mostrar los empleados que tienen mejor salario que la media de los directores no incluyendo al
presidente
Select from emp where salario gt
(select avg (salario) from emp where oficio = DIRECTOR)
and oficio ltgt PRESIDENTE
9 Mostrar el apellido funcioacuten salario y coacutedigo 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 = lsquoENFERMEROrsquo or
funcion = lsquoENFERMERArsquo) and hospital_cod = (select hospital_cod from hospital where nombre =
lsquoSAN CARLOSrsquo)
Select apellido funcion salario hospital_cod from plantilla where
funcion in (ENFERMEROENFERMERA)
and hospital_cod = (select hospital_cod from hospital
where nombre = SAN CARLOS)
10 Visualizar los datos de los hospitales que tienen personal (Doctores) de cardiologiacutea
Select from hospital where hospital_cod in (select hospital_cod from doctor where
especialidad = lsquoCardiologiacutearsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 68
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 = lsquoPROVINCIALrsquo or
nombre= lsquoGENERALrsquo)
12 Mostrar el apellido de los enfermos que nacieron antes que el Sentildeor Miller
Select apellido from enfermo where Fecha_nac lt (select fecha_nac from enfermo where
apellido = lsquoMILLER Brsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 69
Simulacion de una clausula JOIN
Vamos a mostrar los oficios que estaacuten en maacutes de un departamento
Select distinct e1oficio from emp as e1
where e1oficio in(Select e2oficio from emp as e2
where e1dept_no ltgt e2dept_no)
Se debe utilizar antes una combinacioacuten que una subconsulta la combinacioacuten seriacutea asi dando los
mismos resultados
Select distinct e1Oficio from emp as e1
inner join emp as e2
on e1oficio = e2oficio
where e1dept_no ltgt e2dept_no
Estos son los dos oficios que estaacuten en
maacutes de un departamento
Subconsulta para simular una clausula HAVING
select e1apellidoe1oficio e1salario
from emp as e1
where e1salario gt
(select avg(e2salario) from emp as e2
where e1oficio = e2oficio)
Esta es la consulta utilizando el HAVING que es la que deberiacuteamos utilizar antes que una
subconsulta de simulacioacuten HAVING
SELECT e1apellidoe1oficio e1salario
FROM emp AS e1
INNER JOIN emp AS e2
ON e1oficio = e2oficio
GROUP BY e1oficio e1salarioe1apellido
HAVING e1salario gt AVG (e2salario)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 70
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 25
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
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 26
USO DE FUNCIONES
Podemos utilizar funciones para construir expresiones y generar columnas computadoras O condiciones
complejas
Funcioacuten de agregacioacuten
Son funciones que se utilizan para calcular valores en las tablas Si queremos usarlas
combinaacutendolas 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
expresioacuten HAVING Equivalente a where
Todos estos ejercicios han sido desarrollado con la base de datos Poseidoacuten
COUNT Cuenta los registros que hay en la consulta
Si pongo un valor dentro de la expresioacuten devolveraacute la cuenta de todos los
registros no nulos
Si pongo un asterisco contaraacute todos los registros aunque tengan valores
nulos
Select count () from Pedidos Valores con Nulos
Select count (FechaEnviacuteo) from Pedidos Valores sin nulos
AVG Realiza la media sobre la expresioacuten dada debe ser un tipo de dato
Int
Select avg(Preciounidad) from productos
MAX Saca el valor maacuteximo de una consulta
Select max (FechaPedido) from Pedidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 27
MIN Devuelve el valor miacutenimo 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 paiacutes Brasil mostrando el nuacutemero de los Factura con el paiacutes de
Destinatario Brasil
Select count () as [Numero de Facturas] PaiacutesDestinatario
Avg (Preciounidad) as [Precio Medio] from
Facturas group by PaiacutesDestinatario having PaiacutesDestinatario =Brasil
Ejemplo 39
Encontrar el precio maacutes alto mas bajo y la diferencia entre ambos de todos los productos con
IdCategoriacutea 2
Select IdCategoriacutea Max (Preciounidad) as [Precio mas alto] min(Preciounidad) as
[Precio mas Bajo] Max(Preciounidad) - min(Preciounidad) as [Diferencia entre Ambos]
from Productos group by IdCategoriacutea having IdCategoriacutea = 2
Ejemplo 40
Visualizar el nuacutemero de productos por Categoriacutea
Select IdCategoriacutea as [Nordm de Categoriacutea] Count (IdCategoriacutea) as [Nordm de Productos]
From Productos group by IdCategoriacutea
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 28
Ejemplo 41
Visualizar los clientes que vivan en las siguientes ciudades Londres Madrid y Barcelona
Select count () as [Nordm de personas] ciudad from clientes group by ciudad Having ciudad in
(londresMadridBarcelona) order by ciudad
Ejemplo 42
Lista de productos cuya venta allaacute sido mayor a 50000
Select IdProducto Monto=Sum (Preciounidad Cantidad) from [Detalles de pedidos] group
by IdProducto having Sum (Preciounidad Cantidad)gt50000 order by IdProducto
Ejemplo 43
Cuantos Clientes no tienen Fax
Select Count () as [Total de Clientes sin Fax] from clientes where fax is null
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 29
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
Funcioacuten Resultado
GETDATE() Retorna la fecha y hora del sistema
DATEADD(partefechanfecha) Retorna una nueva fecha antildeadiendo n
unidades de partefecha a fecha
DATEDIFF(parteFechafecha1fecha2) Retorna la diferencia en parteFecha entre
fecha1 y fecha2
DATENAME(partefechafecha) Retorna la cadena correspondiente a
partefecha en fecha
DATEPART(partefechafecha) Retorna el numero correspondiente a
partefecha y fecha
DAY(fecha) Retorna el numero correspondiente a la
parte del diacutea de fecha
MONTH(fecha) Retorna el numero correspondiente a la
parte del mes de fecha
YEAR(fecha) Retorna el numero correspondiente a la
parte del antildeo de fecha
GETUTCDATE() Retorna la fecha y hora del meridiano de
Greenwich
La siguiente tabla muestra los valores de partefecha que podemos utilizar
partefecha Abreviatura
Year Yy yyyy
Quarter Qq q
Month Mm m
Dayofyear Dy y
Day Dd d
Week Wk ww
weekday Dw
Hour Hh
minute Mi n
second Ss s
milisecond Ms
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 30
Getdate
Select getdate () Funcioacuten que recupera la fecha actual del sistema
Convert Cast
Convierten expliacutecitamente una expresioacuten de un tipo de datos en otro CAST y CONVERT
proporcionan funciones similares
Convert (Tipodedatosdestino Origen Estilo)
o Tipodedatosdestino Siempre ha de ser tipo caraacutecter
o Origen Puede ser tipo fecha numeacuterico o moneda
o Estilo Opcional Es un coacutedigo que indica el formato en el que devuelve la cadena de
caracteres
Sintaxis
Convert (TipoDato Dato)
Cast (Dato as TipoDato)
Ejemplo
declare n intpalabra nvarchar(10)
set n = 1
set palabra =Nuacutemero
print convert(nvarchar(2)n) + + palabra
print cast(n as nvarchar(2)) + + palabra
while (nlt11)
begin
print convert(nvarchar(2)n) + + palabra
print cast(n as nvarchar(2)) + + palabra
set n = n + 1
end
DateName
Devuelve una cadena de caracteres que representa la parte de la fecha especificada de la fecha
especificada
Los caacutelculos 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
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 31
Ejemplo 46
Select IdPedido DateName (week FechaPedido) as Numero de Semana from Pedidos where IdPedido
= 1035251
Ejemplo 47
Select IdPedido datename (weekday FechaPedido) as Diacutea De Semana from Pedidos where IdPedido =
10352 Martes
Horas
Ejemplo 48
Select IdPedido datename (mi FechaPedido) as Minutos from Pedidos where IdPedido = 10352
Ejemplo 49
Select DateName (minute getdate ()) as minutos
Ejemplo 50
Select DateName (Hh FechaPedido) as hora from Pedidos where IdPedido = 10352
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 32
Ejemplo 51
Select DateName (Hour getdate ()) as hora--gt18
Ejemplo 52
Select DateName (Hh getdate ()) as hora--gt18
DatePart
Devuelve la parte de la fecha u hora indicada Sintaxis
Datepart (Valor devolver fecha)
Ejemplo 53
Select IdPedido datepart (mm FechaPedido) as Mes from Pedidos where IdPedido = 10352
Ejemplo 54
Select Datepart (Hh getdate ()) as Hora--gt17
Ejemplo 55
Select Datepart (mi getdate ()) as Minutos--gt54
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 33
Nombres de Fechas
Day (fecha)
Devuelve UN INT equivale a Datepart
Select day (getdate ()) as diacutea--gt6 (diacutea en la que se ejecuta la sentencia)
Select Datepart (dd getdate ()) --gt6 (diacutea en la que se ejecuta la sentencia)
Select Month (getdate ()) --gt1 (Mes en la que se ejecuta la sentencia)
Select Datepart (mm getdate ()) --gt1 (Mes en la que se ejecuta la sentencia)
Select Year (getdate ()) --gt2008 (Antildeo en la que se ejecuta la sentencia)
Ejemplo 56
Select year (FechaPedido) as Antildeo from Pedidos where IdPedido = 10352
Ejemplo 57
Select datediff (yyyy FechaPedido getdate()) as Dia from Pedidos where IdPedido = 10352
DateAdd
DateAdd (Datepart number date)
Antildeade un nuacutemero a la fecha puesta
DatePart es el formato de lo que queremos antildeadir
Number es el nuacutemero que queremos incrementar la fecha expuesta
Select convert (datetime1-1-02)
Select dateadd (dd 71-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 comparacioacuten y el tipo de dato
que nos devolveraacute antildeos diacuteas minutos etc
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 34
Ejemplo 58
Select datediff (yyyy FechaPedido getdate ()) as Dia from Pedidos where IdPedido = 10352
Ejercicios de funciones de Fecha
Ejemplo 59
Lista de pedidos emitidos en febrero de 1996
Select from Pedidos where month (FechaPedido) =2 and year (FechaPedido) =1996
Ejemplo 60
Lista de Pedidos mostrando la diferencia en diacuteas entre la fecha del pedido y la fecha de Envioacute
Select IdPedido FechaPedido FechaEnviacuteo diacuteas =datediff (day FechaPedido FechaEnviacuteo) from
pedidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 35
Ejemplo 61
Genere un listado de pedidos en el que la fecha del pedido se muestre en el formato nombre del
diacutea diacutea de mes antildeo
Select IdPedido FechaPedido Fecha=datename (dw IdPedido)+ + str (datepart (dd
IdPedido) 2)+ de +datename (mm IdPedido)+ de +str (datepart (yy IdPedido) 4) from
pedidos
Ejemplo 62
Mostrar de la tabla pedidos la fecha de pedidos en fecha corta
Select IdPedido convert (varchar (30) FechaPedido 106) as [Fecha Corta] from pedidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 36
FUNCIONES MATEMATICAS
ABS
Es el valor Absoluto
Select ABS (-4) as VALOR ABSOLUTO--gt4
CEILING
Devuelve el entero maacutes pequentildeo mayor o igual que la expresioacuten numeacuterica dada
Select CEILING (54) as CEILING--6
FLOOR
Devuelve el entero maacutes grande menor o igual que la expresioacuten numeacuterica dada
Select FLOOR (5) as FLOOR--gt5
POWER
Devuelve el valor de la expresioacuten indicada elevada a la potencia especificada
Select POWER (3 2) as 3 ELEVADO A 2--gt9
RAND
Devuelve un valor float aleatorio de 0 a 1
Las llamadas repetitivas de RAND() en una uacutenica consulta produciraacuten el mismo valor
Select RAND(6) as ALEATORIO--071368515806921451
Select RAND(6) as ALEATORIO--071368515806921451
Select RAND(4) as ALEATORIO--07136478921266981
Rand sobre los milisegundos actuales
Select RAND(DATEPART(msGETDATE())) as ALEATORIO--gt071443047691954253
Select RAND(999999999)--gt068504257551273573
ROUND
Devuelve una expresioacuten numeacuterica redondeada a la longitud o precisioacuten especificada
Round (Nuacutemero Redondeo del Nuacutemero)
ROUND siempre devuelve un valor Si length es un valor negativo y mayor que el nuacutemero de
diacutegitos anteriores al separador decimal ROUND devuelve 0
Select ROUND (1234567 2) --gt1234600
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 37
Select ROUND (1234567-2) --gt1000000
Select ROUND (1234567 0) --gt1230000
Select ROUND (1234567-3) ---gt0
SIGN
Devuelve el signo positivo (+1) cero (0) o negativo (-1) de la expresioacuten especificada
Dice el valor negativo positivo o neutro (0) del valor especificado
Select SIGN (-3) --gt-1
Select SIGN (3) --gt1
Select SIGN (0) --gt0
SQUARE
Devuelve el cuadrado de la expresioacuten especificada
Select SQUARE (4) as bdquoCuadrado‟--gt160
SQRT
Devuelve la raiacutez cuadrada de la expresioacuten especificada
Select SQRT (4) as [RAIZ CUADRADA] --gt20
FUNCIONES DE CADENA
ASCII
Devuelve el coacutedigo ASCII del caraacutecter maacutes a la izquierda de una expresioacuten de caracteres
Select ASCII(A)--gt65
Select ASCII(a)--gt97
Select ascii(aula)--gt97
CHAR
Una funcioacuten de cadena que convierte un coacutedigo ASCII int en un caraacutecter
select char(65)--gtA
select char(97)--gta
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 38
CHARINDEX
Devuelve la posicioacuten inicial de la expresioacuten especificada en una cadena de caracteres
CHARINDEX (expression1 expression2 [ start_location])
Argumentos
expression1
Es una expresioacuten que contiene la secuencia de caracteres que se desea buscar
Expression1 es una expresioacuten del tipo de cadenas cortas de caracteres
Expression2
Es una expresioacuten normalmente una columna
en la que se busca la cadena especificada
Expression2 es de la categoriacutea del tipo de datos cadena de caracteres
start_location
Es la posicioacuten del caraacutecter de expression2 en el que se empieza la buacutesqueda de expression1
Si no se especifica start_location es un nuacutemero negativo o es cero
la buacutesqueda empieza al principio de la cadena expression2
Si expression1 no se encuentra en expression2 CHARINDEX devuelve 0
Si alguno de los dos es null devuelve null
Select charindex (ciemurcielago) --gt4
Select charindex (ciemurcielago 2) --gt4
Select charindex (ciemurcielago 5) --gt0
Select charindex (ciemurcielago-6) --gt4
LEFT
Devuelve la parte de una cadena de caracteres que comienza en un nuacutemero de caracteres
especificado a partir de la izquierda
Select left (murcielago5) --gtmurci
RIGHT
Devuelve la parte de una cadena de caracteres que
Comienza en el nuacutemero de caracteres especificado
En integer_expression a partir de la derecha
Select right (hola que tal5) --gte tal
LEN
Cuenta el nuacutemero de caracteres que se incluyen en la cadena
Select len (murcieacutelago) --gt10
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 39
LOWER
Convierte a Minuacutesculas la cadena especificada
Select lower (MurcIELaGO) as [minusculas] --gtmurcielago
UPPER
Convierte a Mayuacutesculas la cadena especificada
Select upper (murcielago) as [MAYUSCULAS] --gtMURCIELAGO
RTRIM y LTRIM
Elimina los espacios que existen a la izquierda y a la derecha respectivamente
Select Rtrim ( murcieacutelago ) AS [SIN ESPACIOS] --gtmurcieacutelago
Select Ltrim ( murcieacutelago ) AS [SIN ESPACIOS] --gtmurcieacutelago
Select ltrim(rtrim( hola ))+
REPLACE
Reemplaza por una tercera expresioacuten todas las apariciones
de la segunda expresioacuten de cadena proporcionada en la primera expresioacuten de cadena
Select replace (hola que tal estasaA) --gtholA que tAl estAs
Select replace (buenos dias que tal estasuentildentildentilde) --gtbntildentildentildenos diasqntildentildentilde tal estas
SPACE
Coloca el nuacutemero de espacios que se le indiquen para entre una cadena de caracteres
Select hola+space(5)+que tal--gthola que tal
SUBSTRING
Devuelve parte de una expresioacuten de caracteres binaria de texto o de imagen
Sintaxis
SUBSTRING (Expresioacuten Comienzo Duracioacuten)
Argumentos
Expresioacuten
Es una cadena de caracteres cadena binaria texto imagen
Columna o expresioacuten que incluye una columna
No deben usarse expresiones que incluyan funciones de agregado
Start
Es un entero que especifica el punto en que comienza la subcadena
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 40
Length
Es un entero que especifica la longitud de la subcadena
(El nuacutemero de caracteres o bytes que se devuelven)
Select substring (murcielago 3 5) --gtrciel
Select substring (murcielago 3 len (murcielago)) --gtrciel
REVERSE
Devuelve invertida una expresioacuten de caraacutecter
Select reverse (hola)
REPLICATE
Repite una expresioacuten de caracteres un nuacutemero especificado de veces
Select replicate (murcielago 5)
Replicate replicate replicate replicate replicate
STUFF
Elimina el nuacutemero de caracteres especificados e insertados
Otro conjunto de caracteres en un punto de inicio indicado
Select STUFF (Murcieacutelago 2 3 ijklmn) Mijklmnielago
FUNCIONES DE SISTEMA
- APP_NAME () Devuelve el nombre de la aplicacioacuten actual
Select app_name () as [Nombre de la aplicacion]
- DATALENGTH (Expresioacuten) Devuelve un entero que es numero de bites necesarios para
representar esa expresioacuten int
Select datalength (Ninoni) as [Numero de bites]
- ISDATE (Expresioacuten) Dice si la expresioacuten es una fecha o no Devuelve 1 si la expresioacuten es
una fecha y 0 si no es una fecha
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 41
Select isdate (121001) as [Validacioacuten Fecha]
- ISNUMERIC (Expresion) Dice si la expresioacuten es un numero o no Devuelve 1 si la
expresioacuten es un nuacutemero y 0 si la expresioacuten no es nuacutemero
Select isnumeric (ddd) as [Validacion Numero]
- ISNULL (Expresioacuten ExpresionDevuelta) Si la expresioacuten es nula te devuelve la Expresioacuten
Devuelta y si no devuelve la primera Expresioacuten
Select isnull (nullNo nulo) as [Es Nulo]
- PARSENAME (bdquoNombreObjeto‟ ParteNombre)
ParteNombre es un valor de tipo Int que coge unos determinados valores del
NombreObjeto
1 Objeto
2 Propietario
3 Base de Datos
4 Servidor
Select parsename (saposeidondbopedidos1) as [Parte Expresioacuten]
Select parsename (saposeidondbopedidos 2) as [Parte Expresioacuten]
Select parsename (saposeidondbopedidos3) as [Parte Expresioacuten]
Select parsename ( saposeidondbopedidos 4) as [Parte Expresioacuten]
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 42
- SYSTEM_USER Devuelve el usuario del sistema actual
Depende de la autentificacioacuten con la que te hayas conectado
Select system_user as [Usuario conectado]
- USER_NAME() Devuelve el nombre del usuario actual
Select user_name ()
- COALESCE (expresioacuten1 expresioacuten2 )
Devuelve la primera expresioacuten no NULL
Si todos son NULL devuelve NULL
Select coalesce (PrecioUnidad Cantidad) from [detalles de Pedidos] Si el PrecioUnidad es nulo
devolveraacute la Cantidad y si los dos son nulos devolveraacute un campo Null
PROCEDIMIENTOS PARA AGRUPAR Y RESUMIR DATOS
En el examen de certificacioacuten 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 usaraacute la base de datos indicada Ejemplo Ponemos
en el analizador de consultas lo siguiente
Use Northwind
Select from [Order Details]
[Order Details]
Esta tabla perteneciente a la Northwind se encarga de manejar los pedidos
Order Id Nordm de Pedido
Producto Id Nordm de Producto
Ambos campos son Primary Key con lo que no puede haber una combinacioacuten de ambos campos que sea
igual
OrderId ProductId
1 A
1 B
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 43
1 C
2 A
3 C
Es decir en este caso no podriacutea existir una nueva combinacioacuten ldquo1 Ardquo o ldquo2 Ardquo
Quantity Es la cantidad del producto del pedido
ROLLUP
Se usa para presentar resuacutemenes de datos A de usarse junto con la clausula group by lo que hace es
realizar un resumen de los campos incluidos en el rollup
Ejemplo 63
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
Group by ProductID OrderID
with Rollup
Order by ProductID OrderID
Este ejemplo suma todas las cantidades y mediante
rollup muestra una fila con la suma de todas las
cantidades de cada producto y ademaacutes otra fila con la
suma de todas las cantidades de todos los productos El
resultado de este ejemplo seriacutea el que muestra la
imagen
Ejemplo 64
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
where orderid lt 10250
Group by ProductID OrderID
with Rollup
Order by ProductID OrderID
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 44
CUBE
Al igual que Rollup realiza resuacutemenes de campos agrupados Pero en este caso muestra un resumen con
cada combinacioacuten posible de los campos agrupados
Ejemplo 65
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
where orderid lt 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 combinacioacuten posible entre el
productid y el orderid
GROUPING
Indica si el resultado de un campo es el que hay en la propia tabla o se ha introducido mediante una
claacuteusula de resumen es decir para saber por ejemplo si un ldquoNullrdquo 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 lt 10250 Group by ProductID
OrderID with Cube Order by ProductID OrderID
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 45
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
Ponieacutendole un alias al
grouping saldriacutea el nombre
de columna que le
indiquemos
COMPUTE
Realiza un resumen en una columna aparte con el resultado de la funcioacuten de agregado indicada Su
formato seriacutea Compute funcioacuten(campo) No se puede utilizar en aplicaciones cliente servidor es una
clausula meramente informativa Tampoco se le pueden poner alias a los resuacutemenes
Ejemplo 67
Select Productid Orderid Quantity From [Order Details] order by ProductID Orderid compute
Sum(quantity)
Vemos que muestra la
columna con la suma
total de todas las
cantidades
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 46
Ejercicios de ROLLUP GROUPING y CUBE
Ejemplo 68
Realizar una consulta que resuma la cantidad de artiacuteculos pedidos por cada iacutendice de producto y
nuacutemero de pedido Realizando un caacutelculo acumulativo
select productid as [PRODUCTO] orderid as [Nordm PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] group by productid orderid with rollup order by productid orderid
PRODUCTO Nordm 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
hellip
Ejemplo 69
Modificacioacuten al ejercicio anterior Realizar el mismo resumen pero uacutenicamente para el producto
cuyo id es 50
select productid as [PRODUCTO] orderid as [Nordm PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] where productid = 50 group by productid orderid with rollup order by productid ordered
PRODUCTO Nordm 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
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 47
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 modificacioacuten 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 [Nordm PEDIDO] grouping(orderid) as [GRUPO PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] where productid = 50 group by Productidorderid with cube order by productidorderid
PRODUCTO GRUPO PRODUCTO Nordm PEDIDO GRUPO PEDIDO SUMA TOTAL
----------- -------------- ----------- ------------ -----------
NULL 1 NULL 1 235
NULL 1 10350 0 15
NULL 1 10383 0 15
NULL 1 10429 0 40
NULL 1 10465 0 25
NULL 1 10637 0 25
NULL 1 10729 0 40
NULL 1 10751 0 20
NULL 1 10920 0 24
NULL 1 10948 0 9
NULL 1 11072 0 22
50 0 NULL 1 235
50 0 10350 0 15
50 0 10383 0 15
50 0 10429 0 40
50 0 10465 0 25
50 0 10637 0 25
50 0 10729 0 40
50 0 10751 0 20
50 0 10920 0 24
50 0 10948 0 9
50 0 11072 0 22
(22 filas afectadas)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 48
Obtencioacuten de resuacutemenes 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 maacutes columnas y
luego efectuar alguna operacioacuten de resumen sobre cada grupo asiacute generado
La diferencia con GROUP BY es que permite mostrar informacioacuten mas detallada de cada grupo
Ejemplo 71
Lista de pedidos que muestre por coacutedigo de pedido la cantidad de productos vendidos por cada uno
de ellos
select Idpedidoidproductopreciounidadcantidad[Sub Total]=sum(PreciounidadCantidad) from
[detalles de pedidos] group by Idpedidoidproductopreciounidadcantidad order by IdPedido compute
sum(Cantidad) by IdPedido
EJERCICIOS CON COMPUTE
Ejemplo 72
Generar un resumen de subtotales en una consulta que devuelva el nuacutemero de pedido la cantidad
pedida para todos los orderid 11070
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 49
Select Orderid as [Nordm PEDIDO] Quantity AS [CANTIDAD] From [Order Details] where orderid gt= 11070 order by Orderid compute Sum(quantity) by orderid compute sum(quantity)
Nordm PEDIDO CANTIDAD
----------- --------
11070 40
11070 20
11070 30
11070 20
sum
===========
110
sum
===========
110
(6 filas afectadas)
Ejemplo 73
Generar un resumen con calculo de subtotales similar al anterior pero para los orderid 11075 y
11076
Select Orderid as [Nordm PEDIDO] Quantity as [CANTIDAD] From [Order Details] where orderid = 11075 or orderid = 11076 order by Orderid compute Sum(quantity) by ordered Nordm PEDIDO CANTIDAD ----------- -------- 11075 10 11075 30 11075 2 sum =========== 42 Nordm PEDIDO CANTIDAD ----------- -------- 11076 20 11076 20 11076 10
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 50
sum =========== 50 (8 filas afectadas)
Ejemplo 74
Modificacioacuten al ejercicio anterior Agregar la cantidad total y la cantidad promedio al final del
informe
Select Orderid as [Nordm 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)
Nordm PEDIDO CANTIDAD
----------- --------
11075 10
11075 30
11075 2
sum
===========
42
Nordm PEDIDO CANTIDAD
----------- --------
11076 20
11076 20
11076 10
sum
===========
50
sum
===========
92
avg
===========
15
(10 filas afectadas)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 51
Ejemplo 75
Seleccionar de forma agrupada por tipo todos los tipos la suma de los precios y la suma del
anticipo de la tabla tiacutetulos
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 199900 50000000
business 119500 50000000
business 29900 101250000
business 199900 50000000
sum
=====================
549200
avg
=====================
62812500
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
mod_cook 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
avg
=====================
75000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
popular_comp 229500 70000000
popular_comp 200000 80000000
popular_comp NULL NULL
sum
=====================
429500
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 52
avg
=====================
75000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
psychology 215900 70000000
psychology 109500 22750000
psychology 70000 60000000
psychology 199900 20000000
psychology 79900 40000000
sum
=====================
675200
avg
=====================
42550000
(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 ademaacutes 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 199900 50000000
business 119500 50000000
business 29900 101250000
business 199900 50000000
sum
=====================
549200
sum
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 53
=====================
251250000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
mod_cook 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
popular_comp 229500 70000000
popular_comp 200000 80000000
popular_comp NULL NULL
sum
=====================
429500
sum
=====================
150000000
(30 filas afectadas)
Ejemplo 77
Generar un informe que muestre la suma de los precios de los libros de psicologiacutea 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 109500
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 54
psychology 0736 70000
psychology 0736 199900
psychology 0736 79900
sum
=====================
459300
TIPO CODIGO EDITOR PRECIO
------------ ------------- ---------------------
psychology 0877 215900
sum
=====================
215900
(7 filas afectadas)
Ejemplo 78
Generar un informe que obtenga la suma de los precios de todos los libros de psicologiacutea asiacute como la
suma de los precios de los libros de psicologiacutea 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 109500
psychology 0736 70000
psychology 0736 199900
psychology 0736 79900
sum
=====================
459300
TIPO CODIGO EDITOR PRECIO
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 55
------------ ------------- ---------------------
psychology 0877 215900
sum
=====================
215900
sum
=====================
675200
(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 199900 0000
mod_cook 0877 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO CODIGO EDITOR PRECIO ANTICIPO
------------ ------------- --------------------- ---------------------
trad_cook 0877 119500 40000000
trad_cook 0877 209500 70000000
trad_cook 0877 149900 80000000
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 56
sum
=====================
478900
sum
=====================
190000000
(9 filas afectadas)
Ejemplo 80
Generar un informe que muestre todos los tiacutetulos precio y anticipo de aquellos tiacutetulos que tengan
un precio superior a 20 doacutelares Ofreceraacute tambieacuten la suma total del precio y del anticipo
Select title as [TITULO] price as [PRECIO] advance as [ANTICIPO] From titles where price gt 20 order by title compute sum(price) compute sum(advance)
TITULO PRECIO ANTICIPO
-------------------------------------------------------------------------------- --------------------- -------------
--------
But Is It User Friendly 229500 70000000
Computer Phobic AND Non-Phobic Individuals Behavior Variations 215900
70000000
Onions Leeks and Garlic Cooking Secrets of the Mediterranean 209500
70000000
sum
=====================
654900
sum
=====================
210000000
(5 filas afectadas)
Ejemplo 81
Generar un informe que muestre el precio el tipo y el nuacutemero de editor de la tabla titles de todos
aquellas obras que pertenezcan la categoriacutea de ldquobusinessrdquo Ademaacutes apareceraacute la suma total de
precios y el maacuteximo pub_id de esta seleccioacuten
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 57
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 29900 0736
business 199900 1389
business 199900 1389
business 119500 1389
sum
=====================
549200
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 Mostraraacute la suma de los precios y los anticipos por tipo y luego calcularaacute 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 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
trad_cook 209500 70000000
trad_cook 119500 40000000
trad_cook 149900 80000000
sum
=====================
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 58
478900
sum
=====================
190000000
sum
=====================
708700
sum
=====================
340000000
(11 filas afectadas)
Eliminacioacuten 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 iquestA que precio se ah vendido los productos
Select IdProducto Preciounidad from [Detalles de pedidos] order by IdProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 59
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 mayoriacutea de las consultas que se hacen en una base de datos requiere que se lean datos procedentes
de dos oacute maacutes tablas
INNER JOIN- son las filas que satisfacen la condicioacuten de la combinacioacuten
En la siguiente sentencia SQL enlaza 2 tablas la tabla clientes y la tabla pedidos en esta ejemplo me
muestra los campos nombre compantildeiacutea y el campo idpedido
La uacutenica condicioacuten es que las 2 tablas tengan un campo en comuacuten
Ejemplo 84
select clientesNombreCompantildeiacuteapedidosidpedido from clientes inner join pedidos on
clientesidcliente=pedidosidcliente
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 60
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 pedidosIdPedido pedidosIdCliente 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 pedidosIdPedido pedidosIdCliente order
by pedidos IdPedido
CROSS JOIN
Un Cross Join es la consulta correlacionada que combine cada una de las filas de una de las tablas con
todas las filas de la otra tabla
No es necesario que exista una columna en comuacuten para ejecutar el Cross Join
Ejemplo 86
La siguiente consulta combina cada una de las filas de la tabla categoriacuteas con cada una de las filas de la
tabla productos
select productosNombreProductocategoriasNombrecategoria from productos cross join categorias
order by productosNombreProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 61
Ejercicios de consultas Muacuteltiples
Ejemplo 87
Mostrar el pedidos completo con el id=10248
Select pedidosIdPedido pedidosIdCliente
Total=sum ([detalles de pedidos]Preciounidad[detalles de pedidos]Cantidad)
From [detalles de pedidos] inner join pedidos on
[Detalles de pedidos]IdPedido=pedidosIdPedido where pedidosIdPedido=10248
Group by pedidosIdPedido pedidosIdCliente
Ejemplo 88
1 Mostrar la cantidad de productos por categoriacutea
Select CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
[Total de Producto]=sum (UnidadesEnExistencia) from Categoriacuteas inner join
Productos on CategoriacuteasIdCategoriacutea=productosIdCategoriacutea
Group by CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 62
Ejemplo 89
Calcular cuantas ventas tiene cada uno de los vendedores
Select empleadosIdEmpleado empleadosNombre empleadosApellidos
[Total de ventas]=count (pedidosIdPedido) from empleados
Inner join Pedidos on empleadosIdEmpleado=pedidosIdEmpleado
Group by empleadosIdEmpleado empleadosNombre empleadosApellidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 63
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 despueacutes saca la de Plantilla
Recomendaciones a la hora de usar las combinaciones
Combinar tablas en funcioacuten de claves principales y externas
Limite el nuacutemero de tablas de las combinaciones
Select Apellido
Oficio as
OFICIOFUNCION
salario from emp
UNION
Select Apellido
Funcion Salario from
Plantilla
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 64
SUBCONSULTAS
Es una SELECT anidada en una instruccioacuten INSERT DELETE SELECT o UPDATE
Como una tabla derivada
Select eemp_no as Numero
eApellido
from (select emp_no apellido from emp) as e
Como una expresioacuten
Select emp_no as [Numero]
Apellido
Salario
(select avg(Salario) from emp)
as Diferencia
from emp
where oficio = Empleado
Para correlacionar datos
- Expresioacuten dinaacutemica que cambia en cada fila de una consulta externa
- Es una combinacioacuten entre la subconsulta y la fila de la consulta externa
- Dividen consultas complejas con dos o maacutes consultas simples relacionadas
Subconsulta correlacionada
Select apellido oficiodept_no
from emp as e
where 20 lt
(select dept_no from dept as d
where edept_no = ddept_no
and ddnombre = Ventas)
SUBCONSULTAS
1 Mostrar el numero de empleado el apellido y la fecha de alta del empleado mas antiguo de la
empresa
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 65
SELECT emp_noapellido
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_noapellido
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 Jimeacutenez
select apellido oficio from emp where
oficio = (select oficio from emp where apellido = JIMENEZ)
4 Queremos saber el apellido oficio salario y nuacutemero 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 gt (select max (salario) from
emp where dept_no = 30)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 66
5 Mostrar el apellido la funcioacuten sala o departamento de todos los empleados que trabajen en la
empresa
select eApellido eOficio as [Cargo en Empresa] ddnombre as [Oficina]
from emp as e
inner join dept as d
on edept_no = ddept_no
union
select pApellido pfuncion snombre
from plantilla as p
inner join sala as s
on phospital_cod = shospital_cod
and psala_cod = ssala_cod
union
select dApellido despecialidad hnombre
from doctor as d
inner join hospital as h
on dhospital_cod = hhospital_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 = lsquoventasrsquo))
order by 2
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 67
8 Mostrar los empleados que tienen mejor salario que la media de los directores no incluyendo al
presidente
Select from emp where salario gt
(select avg (salario) from emp where oficio = DIRECTOR)
and oficio ltgt PRESIDENTE
9 Mostrar el apellido funcioacuten salario y coacutedigo 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 = lsquoENFERMEROrsquo or
funcion = lsquoENFERMERArsquo) and hospital_cod = (select hospital_cod from hospital where nombre =
lsquoSAN CARLOSrsquo)
Select apellido funcion salario hospital_cod from plantilla where
funcion in (ENFERMEROENFERMERA)
and hospital_cod = (select hospital_cod from hospital
where nombre = SAN CARLOS)
10 Visualizar los datos de los hospitales que tienen personal (Doctores) de cardiologiacutea
Select from hospital where hospital_cod in (select hospital_cod from doctor where
especialidad = lsquoCardiologiacutearsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 68
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 = lsquoPROVINCIALrsquo or
nombre= lsquoGENERALrsquo)
12 Mostrar el apellido de los enfermos que nacieron antes que el Sentildeor Miller
Select apellido from enfermo where Fecha_nac lt (select fecha_nac from enfermo where
apellido = lsquoMILLER Brsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 69
Simulacion de una clausula JOIN
Vamos a mostrar los oficios que estaacuten en maacutes de un departamento
Select distinct e1oficio from emp as e1
where e1oficio in(Select e2oficio from emp as e2
where e1dept_no ltgt e2dept_no)
Se debe utilizar antes una combinacioacuten que una subconsulta la combinacioacuten seriacutea asi dando los
mismos resultados
Select distinct e1Oficio from emp as e1
inner join emp as e2
on e1oficio = e2oficio
where e1dept_no ltgt e2dept_no
Estos son los dos oficios que estaacuten en
maacutes de un departamento
Subconsulta para simular una clausula HAVING
select e1apellidoe1oficio e1salario
from emp as e1
where e1salario gt
(select avg(e2salario) from emp as e2
where e1oficio = e2oficio)
Esta es la consulta utilizando el HAVING que es la que deberiacuteamos utilizar antes que una
subconsulta de simulacioacuten HAVING
SELECT e1apellidoe1oficio e1salario
FROM emp AS e1
INNER JOIN emp AS e2
ON e1oficio = e2oficio
GROUP BY e1oficio e1salarioe1apellido
HAVING e1salario gt AVG (e2salario)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 70
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 26
USO DE FUNCIONES
Podemos utilizar funciones para construir expresiones y generar columnas computadoras O condiciones
complejas
Funcioacuten de agregacioacuten
Son funciones que se utilizan para calcular valores en las tablas Si queremos usarlas
combinaacutendolas 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
expresioacuten HAVING Equivalente a where
Todos estos ejercicios han sido desarrollado con la base de datos Poseidoacuten
COUNT Cuenta los registros que hay en la consulta
Si pongo un valor dentro de la expresioacuten devolveraacute la cuenta de todos los
registros no nulos
Si pongo un asterisco contaraacute todos los registros aunque tengan valores
nulos
Select count () from Pedidos Valores con Nulos
Select count (FechaEnviacuteo) from Pedidos Valores sin nulos
AVG Realiza la media sobre la expresioacuten dada debe ser un tipo de dato
Int
Select avg(Preciounidad) from productos
MAX Saca el valor maacuteximo de una consulta
Select max (FechaPedido) from Pedidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 27
MIN Devuelve el valor miacutenimo 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 paiacutes Brasil mostrando el nuacutemero de los Factura con el paiacutes de
Destinatario Brasil
Select count () as [Numero de Facturas] PaiacutesDestinatario
Avg (Preciounidad) as [Precio Medio] from
Facturas group by PaiacutesDestinatario having PaiacutesDestinatario =Brasil
Ejemplo 39
Encontrar el precio maacutes alto mas bajo y la diferencia entre ambos de todos los productos con
IdCategoriacutea 2
Select IdCategoriacutea Max (Preciounidad) as [Precio mas alto] min(Preciounidad) as
[Precio mas Bajo] Max(Preciounidad) - min(Preciounidad) as [Diferencia entre Ambos]
from Productos group by IdCategoriacutea having IdCategoriacutea = 2
Ejemplo 40
Visualizar el nuacutemero de productos por Categoriacutea
Select IdCategoriacutea as [Nordm de Categoriacutea] Count (IdCategoriacutea) as [Nordm de Productos]
From Productos group by IdCategoriacutea
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 28
Ejemplo 41
Visualizar los clientes que vivan en las siguientes ciudades Londres Madrid y Barcelona
Select count () as [Nordm de personas] ciudad from clientes group by ciudad Having ciudad in
(londresMadridBarcelona) order by ciudad
Ejemplo 42
Lista de productos cuya venta allaacute sido mayor a 50000
Select IdProducto Monto=Sum (Preciounidad Cantidad) from [Detalles de pedidos] group
by IdProducto having Sum (Preciounidad Cantidad)gt50000 order by IdProducto
Ejemplo 43
Cuantos Clientes no tienen Fax
Select Count () as [Total de Clientes sin Fax] from clientes where fax is null
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 29
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
Funcioacuten Resultado
GETDATE() Retorna la fecha y hora del sistema
DATEADD(partefechanfecha) Retorna una nueva fecha antildeadiendo n
unidades de partefecha a fecha
DATEDIFF(parteFechafecha1fecha2) Retorna la diferencia en parteFecha entre
fecha1 y fecha2
DATENAME(partefechafecha) Retorna la cadena correspondiente a
partefecha en fecha
DATEPART(partefechafecha) Retorna el numero correspondiente a
partefecha y fecha
DAY(fecha) Retorna el numero correspondiente a la
parte del diacutea de fecha
MONTH(fecha) Retorna el numero correspondiente a la
parte del mes de fecha
YEAR(fecha) Retorna el numero correspondiente a la
parte del antildeo de fecha
GETUTCDATE() Retorna la fecha y hora del meridiano de
Greenwich
La siguiente tabla muestra los valores de partefecha que podemos utilizar
partefecha Abreviatura
Year Yy yyyy
Quarter Qq q
Month Mm m
Dayofyear Dy y
Day Dd d
Week Wk ww
weekday Dw
Hour Hh
minute Mi n
second Ss s
milisecond Ms
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 30
Getdate
Select getdate () Funcioacuten que recupera la fecha actual del sistema
Convert Cast
Convierten expliacutecitamente una expresioacuten de un tipo de datos en otro CAST y CONVERT
proporcionan funciones similares
Convert (Tipodedatosdestino Origen Estilo)
o Tipodedatosdestino Siempre ha de ser tipo caraacutecter
o Origen Puede ser tipo fecha numeacuterico o moneda
o Estilo Opcional Es un coacutedigo que indica el formato en el que devuelve la cadena de
caracteres
Sintaxis
Convert (TipoDato Dato)
Cast (Dato as TipoDato)
Ejemplo
declare n intpalabra nvarchar(10)
set n = 1
set palabra =Nuacutemero
print convert(nvarchar(2)n) + + palabra
print cast(n as nvarchar(2)) + + palabra
while (nlt11)
begin
print convert(nvarchar(2)n) + + palabra
print cast(n as nvarchar(2)) + + palabra
set n = n + 1
end
DateName
Devuelve una cadena de caracteres que representa la parte de la fecha especificada de la fecha
especificada
Los caacutelculos 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
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 31
Ejemplo 46
Select IdPedido DateName (week FechaPedido) as Numero de Semana from Pedidos where IdPedido
= 1035251
Ejemplo 47
Select IdPedido datename (weekday FechaPedido) as Diacutea De Semana from Pedidos where IdPedido =
10352 Martes
Horas
Ejemplo 48
Select IdPedido datename (mi FechaPedido) as Minutos from Pedidos where IdPedido = 10352
Ejemplo 49
Select DateName (minute getdate ()) as minutos
Ejemplo 50
Select DateName (Hh FechaPedido) as hora from Pedidos where IdPedido = 10352
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 32
Ejemplo 51
Select DateName (Hour getdate ()) as hora--gt18
Ejemplo 52
Select DateName (Hh getdate ()) as hora--gt18
DatePart
Devuelve la parte de la fecha u hora indicada Sintaxis
Datepart (Valor devolver fecha)
Ejemplo 53
Select IdPedido datepart (mm FechaPedido) as Mes from Pedidos where IdPedido = 10352
Ejemplo 54
Select Datepart (Hh getdate ()) as Hora--gt17
Ejemplo 55
Select Datepart (mi getdate ()) as Minutos--gt54
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 33
Nombres de Fechas
Day (fecha)
Devuelve UN INT equivale a Datepart
Select day (getdate ()) as diacutea--gt6 (diacutea en la que se ejecuta la sentencia)
Select Datepart (dd getdate ()) --gt6 (diacutea en la que se ejecuta la sentencia)
Select Month (getdate ()) --gt1 (Mes en la que se ejecuta la sentencia)
Select Datepart (mm getdate ()) --gt1 (Mes en la que se ejecuta la sentencia)
Select Year (getdate ()) --gt2008 (Antildeo en la que se ejecuta la sentencia)
Ejemplo 56
Select year (FechaPedido) as Antildeo from Pedidos where IdPedido = 10352
Ejemplo 57
Select datediff (yyyy FechaPedido getdate()) as Dia from Pedidos where IdPedido = 10352
DateAdd
DateAdd (Datepart number date)
Antildeade un nuacutemero a la fecha puesta
DatePart es el formato de lo que queremos antildeadir
Number es el nuacutemero que queremos incrementar la fecha expuesta
Select convert (datetime1-1-02)
Select dateadd (dd 71-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 comparacioacuten y el tipo de dato
que nos devolveraacute antildeos diacuteas minutos etc
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 34
Ejemplo 58
Select datediff (yyyy FechaPedido getdate ()) as Dia from Pedidos where IdPedido = 10352
Ejercicios de funciones de Fecha
Ejemplo 59
Lista de pedidos emitidos en febrero de 1996
Select from Pedidos where month (FechaPedido) =2 and year (FechaPedido) =1996
Ejemplo 60
Lista de Pedidos mostrando la diferencia en diacuteas entre la fecha del pedido y la fecha de Envioacute
Select IdPedido FechaPedido FechaEnviacuteo diacuteas =datediff (day FechaPedido FechaEnviacuteo) from
pedidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 35
Ejemplo 61
Genere un listado de pedidos en el que la fecha del pedido se muestre en el formato nombre del
diacutea diacutea de mes antildeo
Select IdPedido FechaPedido Fecha=datename (dw IdPedido)+ + str (datepart (dd
IdPedido) 2)+ de +datename (mm IdPedido)+ de +str (datepart (yy IdPedido) 4) from
pedidos
Ejemplo 62
Mostrar de la tabla pedidos la fecha de pedidos en fecha corta
Select IdPedido convert (varchar (30) FechaPedido 106) as [Fecha Corta] from pedidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 36
FUNCIONES MATEMATICAS
ABS
Es el valor Absoluto
Select ABS (-4) as VALOR ABSOLUTO--gt4
CEILING
Devuelve el entero maacutes pequentildeo mayor o igual que la expresioacuten numeacuterica dada
Select CEILING (54) as CEILING--6
FLOOR
Devuelve el entero maacutes grande menor o igual que la expresioacuten numeacuterica dada
Select FLOOR (5) as FLOOR--gt5
POWER
Devuelve el valor de la expresioacuten indicada elevada a la potencia especificada
Select POWER (3 2) as 3 ELEVADO A 2--gt9
RAND
Devuelve un valor float aleatorio de 0 a 1
Las llamadas repetitivas de RAND() en una uacutenica consulta produciraacuten el mismo valor
Select RAND(6) as ALEATORIO--071368515806921451
Select RAND(6) as ALEATORIO--071368515806921451
Select RAND(4) as ALEATORIO--07136478921266981
Rand sobre los milisegundos actuales
Select RAND(DATEPART(msGETDATE())) as ALEATORIO--gt071443047691954253
Select RAND(999999999)--gt068504257551273573
ROUND
Devuelve una expresioacuten numeacuterica redondeada a la longitud o precisioacuten especificada
Round (Nuacutemero Redondeo del Nuacutemero)
ROUND siempre devuelve un valor Si length es un valor negativo y mayor que el nuacutemero de
diacutegitos anteriores al separador decimal ROUND devuelve 0
Select ROUND (1234567 2) --gt1234600
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 37
Select ROUND (1234567-2) --gt1000000
Select ROUND (1234567 0) --gt1230000
Select ROUND (1234567-3) ---gt0
SIGN
Devuelve el signo positivo (+1) cero (0) o negativo (-1) de la expresioacuten especificada
Dice el valor negativo positivo o neutro (0) del valor especificado
Select SIGN (-3) --gt-1
Select SIGN (3) --gt1
Select SIGN (0) --gt0
SQUARE
Devuelve el cuadrado de la expresioacuten especificada
Select SQUARE (4) as bdquoCuadrado‟--gt160
SQRT
Devuelve la raiacutez cuadrada de la expresioacuten especificada
Select SQRT (4) as [RAIZ CUADRADA] --gt20
FUNCIONES DE CADENA
ASCII
Devuelve el coacutedigo ASCII del caraacutecter maacutes a la izquierda de una expresioacuten de caracteres
Select ASCII(A)--gt65
Select ASCII(a)--gt97
Select ascii(aula)--gt97
CHAR
Una funcioacuten de cadena que convierte un coacutedigo ASCII int en un caraacutecter
select char(65)--gtA
select char(97)--gta
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 38
CHARINDEX
Devuelve la posicioacuten inicial de la expresioacuten especificada en una cadena de caracteres
CHARINDEX (expression1 expression2 [ start_location])
Argumentos
expression1
Es una expresioacuten que contiene la secuencia de caracteres que se desea buscar
Expression1 es una expresioacuten del tipo de cadenas cortas de caracteres
Expression2
Es una expresioacuten normalmente una columna
en la que se busca la cadena especificada
Expression2 es de la categoriacutea del tipo de datos cadena de caracteres
start_location
Es la posicioacuten del caraacutecter de expression2 en el que se empieza la buacutesqueda de expression1
Si no se especifica start_location es un nuacutemero negativo o es cero
la buacutesqueda empieza al principio de la cadena expression2
Si expression1 no se encuentra en expression2 CHARINDEX devuelve 0
Si alguno de los dos es null devuelve null
Select charindex (ciemurcielago) --gt4
Select charindex (ciemurcielago 2) --gt4
Select charindex (ciemurcielago 5) --gt0
Select charindex (ciemurcielago-6) --gt4
LEFT
Devuelve la parte de una cadena de caracteres que comienza en un nuacutemero de caracteres
especificado a partir de la izquierda
Select left (murcielago5) --gtmurci
RIGHT
Devuelve la parte de una cadena de caracteres que
Comienza en el nuacutemero de caracteres especificado
En integer_expression a partir de la derecha
Select right (hola que tal5) --gte tal
LEN
Cuenta el nuacutemero de caracteres que se incluyen en la cadena
Select len (murcieacutelago) --gt10
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 39
LOWER
Convierte a Minuacutesculas la cadena especificada
Select lower (MurcIELaGO) as [minusculas] --gtmurcielago
UPPER
Convierte a Mayuacutesculas la cadena especificada
Select upper (murcielago) as [MAYUSCULAS] --gtMURCIELAGO
RTRIM y LTRIM
Elimina los espacios que existen a la izquierda y a la derecha respectivamente
Select Rtrim ( murcieacutelago ) AS [SIN ESPACIOS] --gtmurcieacutelago
Select Ltrim ( murcieacutelago ) AS [SIN ESPACIOS] --gtmurcieacutelago
Select ltrim(rtrim( hola ))+
REPLACE
Reemplaza por una tercera expresioacuten todas las apariciones
de la segunda expresioacuten de cadena proporcionada en la primera expresioacuten de cadena
Select replace (hola que tal estasaA) --gtholA que tAl estAs
Select replace (buenos dias que tal estasuentildentildentilde) --gtbntildentildentildenos diasqntildentildentilde tal estas
SPACE
Coloca el nuacutemero de espacios que se le indiquen para entre una cadena de caracteres
Select hola+space(5)+que tal--gthola que tal
SUBSTRING
Devuelve parte de una expresioacuten de caracteres binaria de texto o de imagen
Sintaxis
SUBSTRING (Expresioacuten Comienzo Duracioacuten)
Argumentos
Expresioacuten
Es una cadena de caracteres cadena binaria texto imagen
Columna o expresioacuten que incluye una columna
No deben usarse expresiones que incluyan funciones de agregado
Start
Es un entero que especifica el punto en que comienza la subcadena
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 40
Length
Es un entero que especifica la longitud de la subcadena
(El nuacutemero de caracteres o bytes que se devuelven)
Select substring (murcielago 3 5) --gtrciel
Select substring (murcielago 3 len (murcielago)) --gtrciel
REVERSE
Devuelve invertida una expresioacuten de caraacutecter
Select reverse (hola)
REPLICATE
Repite una expresioacuten de caracteres un nuacutemero especificado de veces
Select replicate (murcielago 5)
Replicate replicate replicate replicate replicate
STUFF
Elimina el nuacutemero de caracteres especificados e insertados
Otro conjunto de caracteres en un punto de inicio indicado
Select STUFF (Murcieacutelago 2 3 ijklmn) Mijklmnielago
FUNCIONES DE SISTEMA
- APP_NAME () Devuelve el nombre de la aplicacioacuten actual
Select app_name () as [Nombre de la aplicacion]
- DATALENGTH (Expresioacuten) Devuelve un entero que es numero de bites necesarios para
representar esa expresioacuten int
Select datalength (Ninoni) as [Numero de bites]
- ISDATE (Expresioacuten) Dice si la expresioacuten es una fecha o no Devuelve 1 si la expresioacuten es
una fecha y 0 si no es una fecha
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 41
Select isdate (121001) as [Validacioacuten Fecha]
- ISNUMERIC (Expresion) Dice si la expresioacuten es un numero o no Devuelve 1 si la
expresioacuten es un nuacutemero y 0 si la expresioacuten no es nuacutemero
Select isnumeric (ddd) as [Validacion Numero]
- ISNULL (Expresioacuten ExpresionDevuelta) Si la expresioacuten es nula te devuelve la Expresioacuten
Devuelta y si no devuelve la primera Expresioacuten
Select isnull (nullNo nulo) as [Es Nulo]
- PARSENAME (bdquoNombreObjeto‟ ParteNombre)
ParteNombre es un valor de tipo Int que coge unos determinados valores del
NombreObjeto
1 Objeto
2 Propietario
3 Base de Datos
4 Servidor
Select parsename (saposeidondbopedidos1) as [Parte Expresioacuten]
Select parsename (saposeidondbopedidos 2) as [Parte Expresioacuten]
Select parsename (saposeidondbopedidos3) as [Parte Expresioacuten]
Select parsename ( saposeidondbopedidos 4) as [Parte Expresioacuten]
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 42
- SYSTEM_USER Devuelve el usuario del sistema actual
Depende de la autentificacioacuten con la que te hayas conectado
Select system_user as [Usuario conectado]
- USER_NAME() Devuelve el nombre del usuario actual
Select user_name ()
- COALESCE (expresioacuten1 expresioacuten2 )
Devuelve la primera expresioacuten no NULL
Si todos son NULL devuelve NULL
Select coalesce (PrecioUnidad Cantidad) from [detalles de Pedidos] Si el PrecioUnidad es nulo
devolveraacute la Cantidad y si los dos son nulos devolveraacute un campo Null
PROCEDIMIENTOS PARA AGRUPAR Y RESUMIR DATOS
En el examen de certificacioacuten 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 usaraacute la base de datos indicada Ejemplo Ponemos
en el analizador de consultas lo siguiente
Use Northwind
Select from [Order Details]
[Order Details]
Esta tabla perteneciente a la Northwind se encarga de manejar los pedidos
Order Id Nordm de Pedido
Producto Id Nordm de Producto
Ambos campos son Primary Key con lo que no puede haber una combinacioacuten de ambos campos que sea
igual
OrderId ProductId
1 A
1 B
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 43
1 C
2 A
3 C
Es decir en este caso no podriacutea existir una nueva combinacioacuten ldquo1 Ardquo o ldquo2 Ardquo
Quantity Es la cantidad del producto del pedido
ROLLUP
Se usa para presentar resuacutemenes de datos A de usarse junto con la clausula group by lo que hace es
realizar un resumen de los campos incluidos en el rollup
Ejemplo 63
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
Group by ProductID OrderID
with Rollup
Order by ProductID OrderID
Este ejemplo suma todas las cantidades y mediante
rollup muestra una fila con la suma de todas las
cantidades de cada producto y ademaacutes otra fila con la
suma de todas las cantidades de todos los productos El
resultado de este ejemplo seriacutea el que muestra la
imagen
Ejemplo 64
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
where orderid lt 10250
Group by ProductID OrderID
with Rollup
Order by ProductID OrderID
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 44
CUBE
Al igual que Rollup realiza resuacutemenes de campos agrupados Pero en este caso muestra un resumen con
cada combinacioacuten posible de los campos agrupados
Ejemplo 65
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
where orderid lt 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 combinacioacuten posible entre el
productid y el orderid
GROUPING
Indica si el resultado de un campo es el que hay en la propia tabla o se ha introducido mediante una
claacuteusula de resumen es decir para saber por ejemplo si un ldquoNullrdquo 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 lt 10250 Group by ProductID
OrderID with Cube Order by ProductID OrderID
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 45
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
Ponieacutendole un alias al
grouping saldriacutea el nombre
de columna que le
indiquemos
COMPUTE
Realiza un resumen en una columna aparte con el resultado de la funcioacuten de agregado indicada Su
formato seriacutea Compute funcioacuten(campo) No se puede utilizar en aplicaciones cliente servidor es una
clausula meramente informativa Tampoco se le pueden poner alias a los resuacutemenes
Ejemplo 67
Select Productid Orderid Quantity From [Order Details] order by ProductID Orderid compute
Sum(quantity)
Vemos que muestra la
columna con la suma
total de todas las
cantidades
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 46
Ejercicios de ROLLUP GROUPING y CUBE
Ejemplo 68
Realizar una consulta que resuma la cantidad de artiacuteculos pedidos por cada iacutendice de producto y
nuacutemero de pedido Realizando un caacutelculo acumulativo
select productid as [PRODUCTO] orderid as [Nordm PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] group by productid orderid with rollup order by productid orderid
PRODUCTO Nordm 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
hellip
Ejemplo 69
Modificacioacuten al ejercicio anterior Realizar el mismo resumen pero uacutenicamente para el producto
cuyo id es 50
select productid as [PRODUCTO] orderid as [Nordm PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] where productid = 50 group by productid orderid with rollup order by productid ordered
PRODUCTO Nordm 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
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 47
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 modificacioacuten 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 [Nordm PEDIDO] grouping(orderid) as [GRUPO PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] where productid = 50 group by Productidorderid with cube order by productidorderid
PRODUCTO GRUPO PRODUCTO Nordm PEDIDO GRUPO PEDIDO SUMA TOTAL
----------- -------------- ----------- ------------ -----------
NULL 1 NULL 1 235
NULL 1 10350 0 15
NULL 1 10383 0 15
NULL 1 10429 0 40
NULL 1 10465 0 25
NULL 1 10637 0 25
NULL 1 10729 0 40
NULL 1 10751 0 20
NULL 1 10920 0 24
NULL 1 10948 0 9
NULL 1 11072 0 22
50 0 NULL 1 235
50 0 10350 0 15
50 0 10383 0 15
50 0 10429 0 40
50 0 10465 0 25
50 0 10637 0 25
50 0 10729 0 40
50 0 10751 0 20
50 0 10920 0 24
50 0 10948 0 9
50 0 11072 0 22
(22 filas afectadas)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 48
Obtencioacuten de resuacutemenes 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 maacutes columnas y
luego efectuar alguna operacioacuten de resumen sobre cada grupo asiacute generado
La diferencia con GROUP BY es que permite mostrar informacioacuten mas detallada de cada grupo
Ejemplo 71
Lista de pedidos que muestre por coacutedigo de pedido la cantidad de productos vendidos por cada uno
de ellos
select Idpedidoidproductopreciounidadcantidad[Sub Total]=sum(PreciounidadCantidad) from
[detalles de pedidos] group by Idpedidoidproductopreciounidadcantidad order by IdPedido compute
sum(Cantidad) by IdPedido
EJERCICIOS CON COMPUTE
Ejemplo 72
Generar un resumen de subtotales en una consulta que devuelva el nuacutemero de pedido la cantidad
pedida para todos los orderid 11070
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 49
Select Orderid as [Nordm PEDIDO] Quantity AS [CANTIDAD] From [Order Details] where orderid gt= 11070 order by Orderid compute Sum(quantity) by orderid compute sum(quantity)
Nordm PEDIDO CANTIDAD
----------- --------
11070 40
11070 20
11070 30
11070 20
sum
===========
110
sum
===========
110
(6 filas afectadas)
Ejemplo 73
Generar un resumen con calculo de subtotales similar al anterior pero para los orderid 11075 y
11076
Select Orderid as [Nordm PEDIDO] Quantity as [CANTIDAD] From [Order Details] where orderid = 11075 or orderid = 11076 order by Orderid compute Sum(quantity) by ordered Nordm PEDIDO CANTIDAD ----------- -------- 11075 10 11075 30 11075 2 sum =========== 42 Nordm PEDIDO CANTIDAD ----------- -------- 11076 20 11076 20 11076 10
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 50
sum =========== 50 (8 filas afectadas)
Ejemplo 74
Modificacioacuten al ejercicio anterior Agregar la cantidad total y la cantidad promedio al final del
informe
Select Orderid as [Nordm 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)
Nordm PEDIDO CANTIDAD
----------- --------
11075 10
11075 30
11075 2
sum
===========
42
Nordm PEDIDO CANTIDAD
----------- --------
11076 20
11076 20
11076 10
sum
===========
50
sum
===========
92
avg
===========
15
(10 filas afectadas)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 51
Ejemplo 75
Seleccionar de forma agrupada por tipo todos los tipos la suma de los precios y la suma del
anticipo de la tabla tiacutetulos
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 199900 50000000
business 119500 50000000
business 29900 101250000
business 199900 50000000
sum
=====================
549200
avg
=====================
62812500
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
mod_cook 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
avg
=====================
75000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
popular_comp 229500 70000000
popular_comp 200000 80000000
popular_comp NULL NULL
sum
=====================
429500
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 52
avg
=====================
75000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
psychology 215900 70000000
psychology 109500 22750000
psychology 70000 60000000
psychology 199900 20000000
psychology 79900 40000000
sum
=====================
675200
avg
=====================
42550000
(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 ademaacutes 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 199900 50000000
business 119500 50000000
business 29900 101250000
business 199900 50000000
sum
=====================
549200
sum
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 53
=====================
251250000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
mod_cook 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
popular_comp 229500 70000000
popular_comp 200000 80000000
popular_comp NULL NULL
sum
=====================
429500
sum
=====================
150000000
(30 filas afectadas)
Ejemplo 77
Generar un informe que muestre la suma de los precios de los libros de psicologiacutea 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 109500
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 54
psychology 0736 70000
psychology 0736 199900
psychology 0736 79900
sum
=====================
459300
TIPO CODIGO EDITOR PRECIO
------------ ------------- ---------------------
psychology 0877 215900
sum
=====================
215900
(7 filas afectadas)
Ejemplo 78
Generar un informe que obtenga la suma de los precios de todos los libros de psicologiacutea asiacute como la
suma de los precios de los libros de psicologiacutea 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 109500
psychology 0736 70000
psychology 0736 199900
psychology 0736 79900
sum
=====================
459300
TIPO CODIGO EDITOR PRECIO
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 55
------------ ------------- ---------------------
psychology 0877 215900
sum
=====================
215900
sum
=====================
675200
(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 199900 0000
mod_cook 0877 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO CODIGO EDITOR PRECIO ANTICIPO
------------ ------------- --------------------- ---------------------
trad_cook 0877 119500 40000000
trad_cook 0877 209500 70000000
trad_cook 0877 149900 80000000
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 56
sum
=====================
478900
sum
=====================
190000000
(9 filas afectadas)
Ejemplo 80
Generar un informe que muestre todos los tiacutetulos precio y anticipo de aquellos tiacutetulos que tengan
un precio superior a 20 doacutelares Ofreceraacute tambieacuten la suma total del precio y del anticipo
Select title as [TITULO] price as [PRECIO] advance as [ANTICIPO] From titles where price gt 20 order by title compute sum(price) compute sum(advance)
TITULO PRECIO ANTICIPO
-------------------------------------------------------------------------------- --------------------- -------------
--------
But Is It User Friendly 229500 70000000
Computer Phobic AND Non-Phobic Individuals Behavior Variations 215900
70000000
Onions Leeks and Garlic Cooking Secrets of the Mediterranean 209500
70000000
sum
=====================
654900
sum
=====================
210000000
(5 filas afectadas)
Ejemplo 81
Generar un informe que muestre el precio el tipo y el nuacutemero de editor de la tabla titles de todos
aquellas obras que pertenezcan la categoriacutea de ldquobusinessrdquo Ademaacutes apareceraacute la suma total de
precios y el maacuteximo pub_id de esta seleccioacuten
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 57
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 29900 0736
business 199900 1389
business 199900 1389
business 119500 1389
sum
=====================
549200
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 Mostraraacute la suma de los precios y los anticipos por tipo y luego calcularaacute 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 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
trad_cook 209500 70000000
trad_cook 119500 40000000
trad_cook 149900 80000000
sum
=====================
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 58
478900
sum
=====================
190000000
sum
=====================
708700
sum
=====================
340000000
(11 filas afectadas)
Eliminacioacuten 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 iquestA que precio se ah vendido los productos
Select IdProducto Preciounidad from [Detalles de pedidos] order by IdProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 59
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 mayoriacutea de las consultas que se hacen en una base de datos requiere que se lean datos procedentes
de dos oacute maacutes tablas
INNER JOIN- son las filas que satisfacen la condicioacuten de la combinacioacuten
En la siguiente sentencia SQL enlaza 2 tablas la tabla clientes y la tabla pedidos en esta ejemplo me
muestra los campos nombre compantildeiacutea y el campo idpedido
La uacutenica condicioacuten es que las 2 tablas tengan un campo en comuacuten
Ejemplo 84
select clientesNombreCompantildeiacuteapedidosidpedido from clientes inner join pedidos on
clientesidcliente=pedidosidcliente
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 60
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 pedidosIdPedido pedidosIdCliente 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 pedidosIdPedido pedidosIdCliente order
by pedidos IdPedido
CROSS JOIN
Un Cross Join es la consulta correlacionada que combine cada una de las filas de una de las tablas con
todas las filas de la otra tabla
No es necesario que exista una columna en comuacuten para ejecutar el Cross Join
Ejemplo 86
La siguiente consulta combina cada una de las filas de la tabla categoriacuteas con cada una de las filas de la
tabla productos
select productosNombreProductocategoriasNombrecategoria from productos cross join categorias
order by productosNombreProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 61
Ejercicios de consultas Muacuteltiples
Ejemplo 87
Mostrar el pedidos completo con el id=10248
Select pedidosIdPedido pedidosIdCliente
Total=sum ([detalles de pedidos]Preciounidad[detalles de pedidos]Cantidad)
From [detalles de pedidos] inner join pedidos on
[Detalles de pedidos]IdPedido=pedidosIdPedido where pedidosIdPedido=10248
Group by pedidosIdPedido pedidosIdCliente
Ejemplo 88
1 Mostrar la cantidad de productos por categoriacutea
Select CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
[Total de Producto]=sum (UnidadesEnExistencia) from Categoriacuteas inner join
Productos on CategoriacuteasIdCategoriacutea=productosIdCategoriacutea
Group by CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 62
Ejemplo 89
Calcular cuantas ventas tiene cada uno de los vendedores
Select empleadosIdEmpleado empleadosNombre empleadosApellidos
[Total de ventas]=count (pedidosIdPedido) from empleados
Inner join Pedidos on empleadosIdEmpleado=pedidosIdEmpleado
Group by empleadosIdEmpleado empleadosNombre empleadosApellidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 63
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 despueacutes saca la de Plantilla
Recomendaciones a la hora de usar las combinaciones
Combinar tablas en funcioacuten de claves principales y externas
Limite el nuacutemero de tablas de las combinaciones
Select Apellido
Oficio as
OFICIOFUNCION
salario from emp
UNION
Select Apellido
Funcion Salario from
Plantilla
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 64
SUBCONSULTAS
Es una SELECT anidada en una instruccioacuten INSERT DELETE SELECT o UPDATE
Como una tabla derivada
Select eemp_no as Numero
eApellido
from (select emp_no apellido from emp) as e
Como una expresioacuten
Select emp_no as [Numero]
Apellido
Salario
(select avg(Salario) from emp)
as Diferencia
from emp
where oficio = Empleado
Para correlacionar datos
- Expresioacuten dinaacutemica que cambia en cada fila de una consulta externa
- Es una combinacioacuten entre la subconsulta y la fila de la consulta externa
- Dividen consultas complejas con dos o maacutes consultas simples relacionadas
Subconsulta correlacionada
Select apellido oficiodept_no
from emp as e
where 20 lt
(select dept_no from dept as d
where edept_no = ddept_no
and ddnombre = Ventas)
SUBCONSULTAS
1 Mostrar el numero de empleado el apellido y la fecha de alta del empleado mas antiguo de la
empresa
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 65
SELECT emp_noapellido
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_noapellido
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 Jimeacutenez
select apellido oficio from emp where
oficio = (select oficio from emp where apellido = JIMENEZ)
4 Queremos saber el apellido oficio salario y nuacutemero 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 gt (select max (salario) from
emp where dept_no = 30)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 66
5 Mostrar el apellido la funcioacuten sala o departamento de todos los empleados que trabajen en la
empresa
select eApellido eOficio as [Cargo en Empresa] ddnombre as [Oficina]
from emp as e
inner join dept as d
on edept_no = ddept_no
union
select pApellido pfuncion snombre
from plantilla as p
inner join sala as s
on phospital_cod = shospital_cod
and psala_cod = ssala_cod
union
select dApellido despecialidad hnombre
from doctor as d
inner join hospital as h
on dhospital_cod = hhospital_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 = lsquoventasrsquo))
order by 2
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 67
8 Mostrar los empleados que tienen mejor salario que la media de los directores no incluyendo al
presidente
Select from emp where salario gt
(select avg (salario) from emp where oficio = DIRECTOR)
and oficio ltgt PRESIDENTE
9 Mostrar el apellido funcioacuten salario y coacutedigo 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 = lsquoENFERMEROrsquo or
funcion = lsquoENFERMERArsquo) and hospital_cod = (select hospital_cod from hospital where nombre =
lsquoSAN CARLOSrsquo)
Select apellido funcion salario hospital_cod from plantilla where
funcion in (ENFERMEROENFERMERA)
and hospital_cod = (select hospital_cod from hospital
where nombre = SAN CARLOS)
10 Visualizar los datos de los hospitales que tienen personal (Doctores) de cardiologiacutea
Select from hospital where hospital_cod in (select hospital_cod from doctor where
especialidad = lsquoCardiologiacutearsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 68
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 = lsquoPROVINCIALrsquo or
nombre= lsquoGENERALrsquo)
12 Mostrar el apellido de los enfermos que nacieron antes que el Sentildeor Miller
Select apellido from enfermo where Fecha_nac lt (select fecha_nac from enfermo where
apellido = lsquoMILLER Brsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 69
Simulacion de una clausula JOIN
Vamos a mostrar los oficios que estaacuten en maacutes de un departamento
Select distinct e1oficio from emp as e1
where e1oficio in(Select e2oficio from emp as e2
where e1dept_no ltgt e2dept_no)
Se debe utilizar antes una combinacioacuten que una subconsulta la combinacioacuten seriacutea asi dando los
mismos resultados
Select distinct e1Oficio from emp as e1
inner join emp as e2
on e1oficio = e2oficio
where e1dept_no ltgt e2dept_no
Estos son los dos oficios que estaacuten en
maacutes de un departamento
Subconsulta para simular una clausula HAVING
select e1apellidoe1oficio e1salario
from emp as e1
where e1salario gt
(select avg(e2salario) from emp as e2
where e1oficio = e2oficio)
Esta es la consulta utilizando el HAVING que es la que deberiacuteamos utilizar antes que una
subconsulta de simulacioacuten HAVING
SELECT e1apellidoe1oficio e1salario
FROM emp AS e1
INNER JOIN emp AS e2
ON e1oficio = e2oficio
GROUP BY e1oficio e1salarioe1apellido
HAVING e1salario gt AVG (e2salario)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 70
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 27
MIN Devuelve el valor miacutenimo 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 paiacutes Brasil mostrando el nuacutemero de los Factura con el paiacutes de
Destinatario Brasil
Select count () as [Numero de Facturas] PaiacutesDestinatario
Avg (Preciounidad) as [Precio Medio] from
Facturas group by PaiacutesDestinatario having PaiacutesDestinatario =Brasil
Ejemplo 39
Encontrar el precio maacutes alto mas bajo y la diferencia entre ambos de todos los productos con
IdCategoriacutea 2
Select IdCategoriacutea Max (Preciounidad) as [Precio mas alto] min(Preciounidad) as
[Precio mas Bajo] Max(Preciounidad) - min(Preciounidad) as [Diferencia entre Ambos]
from Productos group by IdCategoriacutea having IdCategoriacutea = 2
Ejemplo 40
Visualizar el nuacutemero de productos por Categoriacutea
Select IdCategoriacutea as [Nordm de Categoriacutea] Count (IdCategoriacutea) as [Nordm de Productos]
From Productos group by IdCategoriacutea
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 28
Ejemplo 41
Visualizar los clientes que vivan en las siguientes ciudades Londres Madrid y Barcelona
Select count () as [Nordm de personas] ciudad from clientes group by ciudad Having ciudad in
(londresMadridBarcelona) order by ciudad
Ejemplo 42
Lista de productos cuya venta allaacute sido mayor a 50000
Select IdProducto Monto=Sum (Preciounidad Cantidad) from [Detalles de pedidos] group
by IdProducto having Sum (Preciounidad Cantidad)gt50000 order by IdProducto
Ejemplo 43
Cuantos Clientes no tienen Fax
Select Count () as [Total de Clientes sin Fax] from clientes where fax is null
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 29
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
Funcioacuten Resultado
GETDATE() Retorna la fecha y hora del sistema
DATEADD(partefechanfecha) Retorna una nueva fecha antildeadiendo n
unidades de partefecha a fecha
DATEDIFF(parteFechafecha1fecha2) Retorna la diferencia en parteFecha entre
fecha1 y fecha2
DATENAME(partefechafecha) Retorna la cadena correspondiente a
partefecha en fecha
DATEPART(partefechafecha) Retorna el numero correspondiente a
partefecha y fecha
DAY(fecha) Retorna el numero correspondiente a la
parte del diacutea de fecha
MONTH(fecha) Retorna el numero correspondiente a la
parte del mes de fecha
YEAR(fecha) Retorna el numero correspondiente a la
parte del antildeo de fecha
GETUTCDATE() Retorna la fecha y hora del meridiano de
Greenwich
La siguiente tabla muestra los valores de partefecha que podemos utilizar
partefecha Abreviatura
Year Yy yyyy
Quarter Qq q
Month Mm m
Dayofyear Dy y
Day Dd d
Week Wk ww
weekday Dw
Hour Hh
minute Mi n
second Ss s
milisecond Ms
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 30
Getdate
Select getdate () Funcioacuten que recupera la fecha actual del sistema
Convert Cast
Convierten expliacutecitamente una expresioacuten de un tipo de datos en otro CAST y CONVERT
proporcionan funciones similares
Convert (Tipodedatosdestino Origen Estilo)
o Tipodedatosdestino Siempre ha de ser tipo caraacutecter
o Origen Puede ser tipo fecha numeacuterico o moneda
o Estilo Opcional Es un coacutedigo que indica el formato en el que devuelve la cadena de
caracteres
Sintaxis
Convert (TipoDato Dato)
Cast (Dato as TipoDato)
Ejemplo
declare n intpalabra nvarchar(10)
set n = 1
set palabra =Nuacutemero
print convert(nvarchar(2)n) + + palabra
print cast(n as nvarchar(2)) + + palabra
while (nlt11)
begin
print convert(nvarchar(2)n) + + palabra
print cast(n as nvarchar(2)) + + palabra
set n = n + 1
end
DateName
Devuelve una cadena de caracteres que representa la parte de la fecha especificada de la fecha
especificada
Los caacutelculos 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
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 31
Ejemplo 46
Select IdPedido DateName (week FechaPedido) as Numero de Semana from Pedidos where IdPedido
= 1035251
Ejemplo 47
Select IdPedido datename (weekday FechaPedido) as Diacutea De Semana from Pedidos where IdPedido =
10352 Martes
Horas
Ejemplo 48
Select IdPedido datename (mi FechaPedido) as Minutos from Pedidos where IdPedido = 10352
Ejemplo 49
Select DateName (minute getdate ()) as minutos
Ejemplo 50
Select DateName (Hh FechaPedido) as hora from Pedidos where IdPedido = 10352
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 32
Ejemplo 51
Select DateName (Hour getdate ()) as hora--gt18
Ejemplo 52
Select DateName (Hh getdate ()) as hora--gt18
DatePart
Devuelve la parte de la fecha u hora indicada Sintaxis
Datepart (Valor devolver fecha)
Ejemplo 53
Select IdPedido datepart (mm FechaPedido) as Mes from Pedidos where IdPedido = 10352
Ejemplo 54
Select Datepart (Hh getdate ()) as Hora--gt17
Ejemplo 55
Select Datepart (mi getdate ()) as Minutos--gt54
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 33
Nombres de Fechas
Day (fecha)
Devuelve UN INT equivale a Datepart
Select day (getdate ()) as diacutea--gt6 (diacutea en la que se ejecuta la sentencia)
Select Datepart (dd getdate ()) --gt6 (diacutea en la que se ejecuta la sentencia)
Select Month (getdate ()) --gt1 (Mes en la que se ejecuta la sentencia)
Select Datepart (mm getdate ()) --gt1 (Mes en la que se ejecuta la sentencia)
Select Year (getdate ()) --gt2008 (Antildeo en la que se ejecuta la sentencia)
Ejemplo 56
Select year (FechaPedido) as Antildeo from Pedidos where IdPedido = 10352
Ejemplo 57
Select datediff (yyyy FechaPedido getdate()) as Dia from Pedidos where IdPedido = 10352
DateAdd
DateAdd (Datepart number date)
Antildeade un nuacutemero a la fecha puesta
DatePart es el formato de lo que queremos antildeadir
Number es el nuacutemero que queremos incrementar la fecha expuesta
Select convert (datetime1-1-02)
Select dateadd (dd 71-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 comparacioacuten y el tipo de dato
que nos devolveraacute antildeos diacuteas minutos etc
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 34
Ejemplo 58
Select datediff (yyyy FechaPedido getdate ()) as Dia from Pedidos where IdPedido = 10352
Ejercicios de funciones de Fecha
Ejemplo 59
Lista de pedidos emitidos en febrero de 1996
Select from Pedidos where month (FechaPedido) =2 and year (FechaPedido) =1996
Ejemplo 60
Lista de Pedidos mostrando la diferencia en diacuteas entre la fecha del pedido y la fecha de Envioacute
Select IdPedido FechaPedido FechaEnviacuteo diacuteas =datediff (day FechaPedido FechaEnviacuteo) from
pedidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 35
Ejemplo 61
Genere un listado de pedidos en el que la fecha del pedido se muestre en el formato nombre del
diacutea diacutea de mes antildeo
Select IdPedido FechaPedido Fecha=datename (dw IdPedido)+ + str (datepart (dd
IdPedido) 2)+ de +datename (mm IdPedido)+ de +str (datepart (yy IdPedido) 4) from
pedidos
Ejemplo 62
Mostrar de la tabla pedidos la fecha de pedidos en fecha corta
Select IdPedido convert (varchar (30) FechaPedido 106) as [Fecha Corta] from pedidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 36
FUNCIONES MATEMATICAS
ABS
Es el valor Absoluto
Select ABS (-4) as VALOR ABSOLUTO--gt4
CEILING
Devuelve el entero maacutes pequentildeo mayor o igual que la expresioacuten numeacuterica dada
Select CEILING (54) as CEILING--6
FLOOR
Devuelve el entero maacutes grande menor o igual que la expresioacuten numeacuterica dada
Select FLOOR (5) as FLOOR--gt5
POWER
Devuelve el valor de la expresioacuten indicada elevada a la potencia especificada
Select POWER (3 2) as 3 ELEVADO A 2--gt9
RAND
Devuelve un valor float aleatorio de 0 a 1
Las llamadas repetitivas de RAND() en una uacutenica consulta produciraacuten el mismo valor
Select RAND(6) as ALEATORIO--071368515806921451
Select RAND(6) as ALEATORIO--071368515806921451
Select RAND(4) as ALEATORIO--07136478921266981
Rand sobre los milisegundos actuales
Select RAND(DATEPART(msGETDATE())) as ALEATORIO--gt071443047691954253
Select RAND(999999999)--gt068504257551273573
ROUND
Devuelve una expresioacuten numeacuterica redondeada a la longitud o precisioacuten especificada
Round (Nuacutemero Redondeo del Nuacutemero)
ROUND siempre devuelve un valor Si length es un valor negativo y mayor que el nuacutemero de
diacutegitos anteriores al separador decimal ROUND devuelve 0
Select ROUND (1234567 2) --gt1234600
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 37
Select ROUND (1234567-2) --gt1000000
Select ROUND (1234567 0) --gt1230000
Select ROUND (1234567-3) ---gt0
SIGN
Devuelve el signo positivo (+1) cero (0) o negativo (-1) de la expresioacuten especificada
Dice el valor negativo positivo o neutro (0) del valor especificado
Select SIGN (-3) --gt-1
Select SIGN (3) --gt1
Select SIGN (0) --gt0
SQUARE
Devuelve el cuadrado de la expresioacuten especificada
Select SQUARE (4) as bdquoCuadrado‟--gt160
SQRT
Devuelve la raiacutez cuadrada de la expresioacuten especificada
Select SQRT (4) as [RAIZ CUADRADA] --gt20
FUNCIONES DE CADENA
ASCII
Devuelve el coacutedigo ASCII del caraacutecter maacutes a la izquierda de una expresioacuten de caracteres
Select ASCII(A)--gt65
Select ASCII(a)--gt97
Select ascii(aula)--gt97
CHAR
Una funcioacuten de cadena que convierte un coacutedigo ASCII int en un caraacutecter
select char(65)--gtA
select char(97)--gta
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 38
CHARINDEX
Devuelve la posicioacuten inicial de la expresioacuten especificada en una cadena de caracteres
CHARINDEX (expression1 expression2 [ start_location])
Argumentos
expression1
Es una expresioacuten que contiene la secuencia de caracteres que se desea buscar
Expression1 es una expresioacuten del tipo de cadenas cortas de caracteres
Expression2
Es una expresioacuten normalmente una columna
en la que se busca la cadena especificada
Expression2 es de la categoriacutea del tipo de datos cadena de caracteres
start_location
Es la posicioacuten del caraacutecter de expression2 en el que se empieza la buacutesqueda de expression1
Si no se especifica start_location es un nuacutemero negativo o es cero
la buacutesqueda empieza al principio de la cadena expression2
Si expression1 no se encuentra en expression2 CHARINDEX devuelve 0
Si alguno de los dos es null devuelve null
Select charindex (ciemurcielago) --gt4
Select charindex (ciemurcielago 2) --gt4
Select charindex (ciemurcielago 5) --gt0
Select charindex (ciemurcielago-6) --gt4
LEFT
Devuelve la parte de una cadena de caracteres que comienza en un nuacutemero de caracteres
especificado a partir de la izquierda
Select left (murcielago5) --gtmurci
RIGHT
Devuelve la parte de una cadena de caracteres que
Comienza en el nuacutemero de caracteres especificado
En integer_expression a partir de la derecha
Select right (hola que tal5) --gte tal
LEN
Cuenta el nuacutemero de caracteres que se incluyen en la cadena
Select len (murcieacutelago) --gt10
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 39
LOWER
Convierte a Minuacutesculas la cadena especificada
Select lower (MurcIELaGO) as [minusculas] --gtmurcielago
UPPER
Convierte a Mayuacutesculas la cadena especificada
Select upper (murcielago) as [MAYUSCULAS] --gtMURCIELAGO
RTRIM y LTRIM
Elimina los espacios que existen a la izquierda y a la derecha respectivamente
Select Rtrim ( murcieacutelago ) AS [SIN ESPACIOS] --gtmurcieacutelago
Select Ltrim ( murcieacutelago ) AS [SIN ESPACIOS] --gtmurcieacutelago
Select ltrim(rtrim( hola ))+
REPLACE
Reemplaza por una tercera expresioacuten todas las apariciones
de la segunda expresioacuten de cadena proporcionada en la primera expresioacuten de cadena
Select replace (hola que tal estasaA) --gtholA que tAl estAs
Select replace (buenos dias que tal estasuentildentildentilde) --gtbntildentildentildenos diasqntildentildentilde tal estas
SPACE
Coloca el nuacutemero de espacios que se le indiquen para entre una cadena de caracteres
Select hola+space(5)+que tal--gthola que tal
SUBSTRING
Devuelve parte de una expresioacuten de caracteres binaria de texto o de imagen
Sintaxis
SUBSTRING (Expresioacuten Comienzo Duracioacuten)
Argumentos
Expresioacuten
Es una cadena de caracteres cadena binaria texto imagen
Columna o expresioacuten que incluye una columna
No deben usarse expresiones que incluyan funciones de agregado
Start
Es un entero que especifica el punto en que comienza la subcadena
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 40
Length
Es un entero que especifica la longitud de la subcadena
(El nuacutemero de caracteres o bytes que se devuelven)
Select substring (murcielago 3 5) --gtrciel
Select substring (murcielago 3 len (murcielago)) --gtrciel
REVERSE
Devuelve invertida una expresioacuten de caraacutecter
Select reverse (hola)
REPLICATE
Repite una expresioacuten de caracteres un nuacutemero especificado de veces
Select replicate (murcielago 5)
Replicate replicate replicate replicate replicate
STUFF
Elimina el nuacutemero de caracteres especificados e insertados
Otro conjunto de caracteres en un punto de inicio indicado
Select STUFF (Murcieacutelago 2 3 ijklmn) Mijklmnielago
FUNCIONES DE SISTEMA
- APP_NAME () Devuelve el nombre de la aplicacioacuten actual
Select app_name () as [Nombre de la aplicacion]
- DATALENGTH (Expresioacuten) Devuelve un entero que es numero de bites necesarios para
representar esa expresioacuten int
Select datalength (Ninoni) as [Numero de bites]
- ISDATE (Expresioacuten) Dice si la expresioacuten es una fecha o no Devuelve 1 si la expresioacuten es
una fecha y 0 si no es una fecha
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 41
Select isdate (121001) as [Validacioacuten Fecha]
- ISNUMERIC (Expresion) Dice si la expresioacuten es un numero o no Devuelve 1 si la
expresioacuten es un nuacutemero y 0 si la expresioacuten no es nuacutemero
Select isnumeric (ddd) as [Validacion Numero]
- ISNULL (Expresioacuten ExpresionDevuelta) Si la expresioacuten es nula te devuelve la Expresioacuten
Devuelta y si no devuelve la primera Expresioacuten
Select isnull (nullNo nulo) as [Es Nulo]
- PARSENAME (bdquoNombreObjeto‟ ParteNombre)
ParteNombre es un valor de tipo Int que coge unos determinados valores del
NombreObjeto
1 Objeto
2 Propietario
3 Base de Datos
4 Servidor
Select parsename (saposeidondbopedidos1) as [Parte Expresioacuten]
Select parsename (saposeidondbopedidos 2) as [Parte Expresioacuten]
Select parsename (saposeidondbopedidos3) as [Parte Expresioacuten]
Select parsename ( saposeidondbopedidos 4) as [Parte Expresioacuten]
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 42
- SYSTEM_USER Devuelve el usuario del sistema actual
Depende de la autentificacioacuten con la que te hayas conectado
Select system_user as [Usuario conectado]
- USER_NAME() Devuelve el nombre del usuario actual
Select user_name ()
- COALESCE (expresioacuten1 expresioacuten2 )
Devuelve la primera expresioacuten no NULL
Si todos son NULL devuelve NULL
Select coalesce (PrecioUnidad Cantidad) from [detalles de Pedidos] Si el PrecioUnidad es nulo
devolveraacute la Cantidad y si los dos son nulos devolveraacute un campo Null
PROCEDIMIENTOS PARA AGRUPAR Y RESUMIR DATOS
En el examen de certificacioacuten 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 usaraacute la base de datos indicada Ejemplo Ponemos
en el analizador de consultas lo siguiente
Use Northwind
Select from [Order Details]
[Order Details]
Esta tabla perteneciente a la Northwind se encarga de manejar los pedidos
Order Id Nordm de Pedido
Producto Id Nordm de Producto
Ambos campos son Primary Key con lo que no puede haber una combinacioacuten de ambos campos que sea
igual
OrderId ProductId
1 A
1 B
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 43
1 C
2 A
3 C
Es decir en este caso no podriacutea existir una nueva combinacioacuten ldquo1 Ardquo o ldquo2 Ardquo
Quantity Es la cantidad del producto del pedido
ROLLUP
Se usa para presentar resuacutemenes de datos A de usarse junto con la clausula group by lo que hace es
realizar un resumen de los campos incluidos en el rollup
Ejemplo 63
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
Group by ProductID OrderID
with Rollup
Order by ProductID OrderID
Este ejemplo suma todas las cantidades y mediante
rollup muestra una fila con la suma de todas las
cantidades de cada producto y ademaacutes otra fila con la
suma de todas las cantidades de todos los productos El
resultado de este ejemplo seriacutea el que muestra la
imagen
Ejemplo 64
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
where orderid lt 10250
Group by ProductID OrderID
with Rollup
Order by ProductID OrderID
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 44
CUBE
Al igual que Rollup realiza resuacutemenes de campos agrupados Pero en este caso muestra un resumen con
cada combinacioacuten posible de los campos agrupados
Ejemplo 65
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
where orderid lt 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 combinacioacuten posible entre el
productid y el orderid
GROUPING
Indica si el resultado de un campo es el que hay en la propia tabla o se ha introducido mediante una
claacuteusula de resumen es decir para saber por ejemplo si un ldquoNullrdquo 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 lt 10250 Group by ProductID
OrderID with Cube Order by ProductID OrderID
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 45
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
Ponieacutendole un alias al
grouping saldriacutea el nombre
de columna que le
indiquemos
COMPUTE
Realiza un resumen en una columna aparte con el resultado de la funcioacuten de agregado indicada Su
formato seriacutea Compute funcioacuten(campo) No se puede utilizar en aplicaciones cliente servidor es una
clausula meramente informativa Tampoco se le pueden poner alias a los resuacutemenes
Ejemplo 67
Select Productid Orderid Quantity From [Order Details] order by ProductID Orderid compute
Sum(quantity)
Vemos que muestra la
columna con la suma
total de todas las
cantidades
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 46
Ejercicios de ROLLUP GROUPING y CUBE
Ejemplo 68
Realizar una consulta que resuma la cantidad de artiacuteculos pedidos por cada iacutendice de producto y
nuacutemero de pedido Realizando un caacutelculo acumulativo
select productid as [PRODUCTO] orderid as [Nordm PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] group by productid orderid with rollup order by productid orderid
PRODUCTO Nordm 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
hellip
Ejemplo 69
Modificacioacuten al ejercicio anterior Realizar el mismo resumen pero uacutenicamente para el producto
cuyo id es 50
select productid as [PRODUCTO] orderid as [Nordm PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] where productid = 50 group by productid orderid with rollup order by productid ordered
PRODUCTO Nordm 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
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 47
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 modificacioacuten 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 [Nordm PEDIDO] grouping(orderid) as [GRUPO PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] where productid = 50 group by Productidorderid with cube order by productidorderid
PRODUCTO GRUPO PRODUCTO Nordm PEDIDO GRUPO PEDIDO SUMA TOTAL
----------- -------------- ----------- ------------ -----------
NULL 1 NULL 1 235
NULL 1 10350 0 15
NULL 1 10383 0 15
NULL 1 10429 0 40
NULL 1 10465 0 25
NULL 1 10637 0 25
NULL 1 10729 0 40
NULL 1 10751 0 20
NULL 1 10920 0 24
NULL 1 10948 0 9
NULL 1 11072 0 22
50 0 NULL 1 235
50 0 10350 0 15
50 0 10383 0 15
50 0 10429 0 40
50 0 10465 0 25
50 0 10637 0 25
50 0 10729 0 40
50 0 10751 0 20
50 0 10920 0 24
50 0 10948 0 9
50 0 11072 0 22
(22 filas afectadas)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 48
Obtencioacuten de resuacutemenes 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 maacutes columnas y
luego efectuar alguna operacioacuten de resumen sobre cada grupo asiacute generado
La diferencia con GROUP BY es que permite mostrar informacioacuten mas detallada de cada grupo
Ejemplo 71
Lista de pedidos que muestre por coacutedigo de pedido la cantidad de productos vendidos por cada uno
de ellos
select Idpedidoidproductopreciounidadcantidad[Sub Total]=sum(PreciounidadCantidad) from
[detalles de pedidos] group by Idpedidoidproductopreciounidadcantidad order by IdPedido compute
sum(Cantidad) by IdPedido
EJERCICIOS CON COMPUTE
Ejemplo 72
Generar un resumen de subtotales en una consulta que devuelva el nuacutemero de pedido la cantidad
pedida para todos los orderid 11070
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 49
Select Orderid as [Nordm PEDIDO] Quantity AS [CANTIDAD] From [Order Details] where orderid gt= 11070 order by Orderid compute Sum(quantity) by orderid compute sum(quantity)
Nordm PEDIDO CANTIDAD
----------- --------
11070 40
11070 20
11070 30
11070 20
sum
===========
110
sum
===========
110
(6 filas afectadas)
Ejemplo 73
Generar un resumen con calculo de subtotales similar al anterior pero para los orderid 11075 y
11076
Select Orderid as [Nordm PEDIDO] Quantity as [CANTIDAD] From [Order Details] where orderid = 11075 or orderid = 11076 order by Orderid compute Sum(quantity) by ordered Nordm PEDIDO CANTIDAD ----------- -------- 11075 10 11075 30 11075 2 sum =========== 42 Nordm PEDIDO CANTIDAD ----------- -------- 11076 20 11076 20 11076 10
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 50
sum =========== 50 (8 filas afectadas)
Ejemplo 74
Modificacioacuten al ejercicio anterior Agregar la cantidad total y la cantidad promedio al final del
informe
Select Orderid as [Nordm 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)
Nordm PEDIDO CANTIDAD
----------- --------
11075 10
11075 30
11075 2
sum
===========
42
Nordm PEDIDO CANTIDAD
----------- --------
11076 20
11076 20
11076 10
sum
===========
50
sum
===========
92
avg
===========
15
(10 filas afectadas)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 51
Ejemplo 75
Seleccionar de forma agrupada por tipo todos los tipos la suma de los precios y la suma del
anticipo de la tabla tiacutetulos
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 199900 50000000
business 119500 50000000
business 29900 101250000
business 199900 50000000
sum
=====================
549200
avg
=====================
62812500
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
mod_cook 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
avg
=====================
75000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
popular_comp 229500 70000000
popular_comp 200000 80000000
popular_comp NULL NULL
sum
=====================
429500
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 52
avg
=====================
75000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
psychology 215900 70000000
psychology 109500 22750000
psychology 70000 60000000
psychology 199900 20000000
psychology 79900 40000000
sum
=====================
675200
avg
=====================
42550000
(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 ademaacutes 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 199900 50000000
business 119500 50000000
business 29900 101250000
business 199900 50000000
sum
=====================
549200
sum
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 53
=====================
251250000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
mod_cook 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
popular_comp 229500 70000000
popular_comp 200000 80000000
popular_comp NULL NULL
sum
=====================
429500
sum
=====================
150000000
(30 filas afectadas)
Ejemplo 77
Generar un informe que muestre la suma de los precios de los libros de psicologiacutea 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 109500
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 54
psychology 0736 70000
psychology 0736 199900
psychology 0736 79900
sum
=====================
459300
TIPO CODIGO EDITOR PRECIO
------------ ------------- ---------------------
psychology 0877 215900
sum
=====================
215900
(7 filas afectadas)
Ejemplo 78
Generar un informe que obtenga la suma de los precios de todos los libros de psicologiacutea asiacute como la
suma de los precios de los libros de psicologiacutea 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 109500
psychology 0736 70000
psychology 0736 199900
psychology 0736 79900
sum
=====================
459300
TIPO CODIGO EDITOR PRECIO
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 55
------------ ------------- ---------------------
psychology 0877 215900
sum
=====================
215900
sum
=====================
675200
(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 199900 0000
mod_cook 0877 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO CODIGO EDITOR PRECIO ANTICIPO
------------ ------------- --------------------- ---------------------
trad_cook 0877 119500 40000000
trad_cook 0877 209500 70000000
trad_cook 0877 149900 80000000
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 56
sum
=====================
478900
sum
=====================
190000000
(9 filas afectadas)
Ejemplo 80
Generar un informe que muestre todos los tiacutetulos precio y anticipo de aquellos tiacutetulos que tengan
un precio superior a 20 doacutelares Ofreceraacute tambieacuten la suma total del precio y del anticipo
Select title as [TITULO] price as [PRECIO] advance as [ANTICIPO] From titles where price gt 20 order by title compute sum(price) compute sum(advance)
TITULO PRECIO ANTICIPO
-------------------------------------------------------------------------------- --------------------- -------------
--------
But Is It User Friendly 229500 70000000
Computer Phobic AND Non-Phobic Individuals Behavior Variations 215900
70000000
Onions Leeks and Garlic Cooking Secrets of the Mediterranean 209500
70000000
sum
=====================
654900
sum
=====================
210000000
(5 filas afectadas)
Ejemplo 81
Generar un informe que muestre el precio el tipo y el nuacutemero de editor de la tabla titles de todos
aquellas obras que pertenezcan la categoriacutea de ldquobusinessrdquo Ademaacutes apareceraacute la suma total de
precios y el maacuteximo pub_id de esta seleccioacuten
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 57
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 29900 0736
business 199900 1389
business 199900 1389
business 119500 1389
sum
=====================
549200
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 Mostraraacute la suma de los precios y los anticipos por tipo y luego calcularaacute 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 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
trad_cook 209500 70000000
trad_cook 119500 40000000
trad_cook 149900 80000000
sum
=====================
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 58
478900
sum
=====================
190000000
sum
=====================
708700
sum
=====================
340000000
(11 filas afectadas)
Eliminacioacuten 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 iquestA que precio se ah vendido los productos
Select IdProducto Preciounidad from [Detalles de pedidos] order by IdProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 59
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 mayoriacutea de las consultas que se hacen en una base de datos requiere que se lean datos procedentes
de dos oacute maacutes tablas
INNER JOIN- son las filas que satisfacen la condicioacuten de la combinacioacuten
En la siguiente sentencia SQL enlaza 2 tablas la tabla clientes y la tabla pedidos en esta ejemplo me
muestra los campos nombre compantildeiacutea y el campo idpedido
La uacutenica condicioacuten es que las 2 tablas tengan un campo en comuacuten
Ejemplo 84
select clientesNombreCompantildeiacuteapedidosidpedido from clientes inner join pedidos on
clientesidcliente=pedidosidcliente
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 60
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 pedidosIdPedido pedidosIdCliente 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 pedidosIdPedido pedidosIdCliente order
by pedidos IdPedido
CROSS JOIN
Un Cross Join es la consulta correlacionada que combine cada una de las filas de una de las tablas con
todas las filas de la otra tabla
No es necesario que exista una columna en comuacuten para ejecutar el Cross Join
Ejemplo 86
La siguiente consulta combina cada una de las filas de la tabla categoriacuteas con cada una de las filas de la
tabla productos
select productosNombreProductocategoriasNombrecategoria from productos cross join categorias
order by productosNombreProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 61
Ejercicios de consultas Muacuteltiples
Ejemplo 87
Mostrar el pedidos completo con el id=10248
Select pedidosIdPedido pedidosIdCliente
Total=sum ([detalles de pedidos]Preciounidad[detalles de pedidos]Cantidad)
From [detalles de pedidos] inner join pedidos on
[Detalles de pedidos]IdPedido=pedidosIdPedido where pedidosIdPedido=10248
Group by pedidosIdPedido pedidosIdCliente
Ejemplo 88
1 Mostrar la cantidad de productos por categoriacutea
Select CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
[Total de Producto]=sum (UnidadesEnExistencia) from Categoriacuteas inner join
Productos on CategoriacuteasIdCategoriacutea=productosIdCategoriacutea
Group by CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 62
Ejemplo 89
Calcular cuantas ventas tiene cada uno de los vendedores
Select empleadosIdEmpleado empleadosNombre empleadosApellidos
[Total de ventas]=count (pedidosIdPedido) from empleados
Inner join Pedidos on empleadosIdEmpleado=pedidosIdEmpleado
Group by empleadosIdEmpleado empleadosNombre empleadosApellidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 63
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 despueacutes saca la de Plantilla
Recomendaciones a la hora de usar las combinaciones
Combinar tablas en funcioacuten de claves principales y externas
Limite el nuacutemero de tablas de las combinaciones
Select Apellido
Oficio as
OFICIOFUNCION
salario from emp
UNION
Select Apellido
Funcion Salario from
Plantilla
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 64
SUBCONSULTAS
Es una SELECT anidada en una instruccioacuten INSERT DELETE SELECT o UPDATE
Como una tabla derivada
Select eemp_no as Numero
eApellido
from (select emp_no apellido from emp) as e
Como una expresioacuten
Select emp_no as [Numero]
Apellido
Salario
(select avg(Salario) from emp)
as Diferencia
from emp
where oficio = Empleado
Para correlacionar datos
- Expresioacuten dinaacutemica que cambia en cada fila de una consulta externa
- Es una combinacioacuten entre la subconsulta y la fila de la consulta externa
- Dividen consultas complejas con dos o maacutes consultas simples relacionadas
Subconsulta correlacionada
Select apellido oficiodept_no
from emp as e
where 20 lt
(select dept_no from dept as d
where edept_no = ddept_no
and ddnombre = Ventas)
SUBCONSULTAS
1 Mostrar el numero de empleado el apellido y la fecha de alta del empleado mas antiguo de la
empresa
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 65
SELECT emp_noapellido
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_noapellido
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 Jimeacutenez
select apellido oficio from emp where
oficio = (select oficio from emp where apellido = JIMENEZ)
4 Queremos saber el apellido oficio salario y nuacutemero 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 gt (select max (salario) from
emp where dept_no = 30)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 66
5 Mostrar el apellido la funcioacuten sala o departamento de todos los empleados que trabajen en la
empresa
select eApellido eOficio as [Cargo en Empresa] ddnombre as [Oficina]
from emp as e
inner join dept as d
on edept_no = ddept_no
union
select pApellido pfuncion snombre
from plantilla as p
inner join sala as s
on phospital_cod = shospital_cod
and psala_cod = ssala_cod
union
select dApellido despecialidad hnombre
from doctor as d
inner join hospital as h
on dhospital_cod = hhospital_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 = lsquoventasrsquo))
order by 2
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 67
8 Mostrar los empleados que tienen mejor salario que la media de los directores no incluyendo al
presidente
Select from emp where salario gt
(select avg (salario) from emp where oficio = DIRECTOR)
and oficio ltgt PRESIDENTE
9 Mostrar el apellido funcioacuten salario y coacutedigo 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 = lsquoENFERMEROrsquo or
funcion = lsquoENFERMERArsquo) and hospital_cod = (select hospital_cod from hospital where nombre =
lsquoSAN CARLOSrsquo)
Select apellido funcion salario hospital_cod from plantilla where
funcion in (ENFERMEROENFERMERA)
and hospital_cod = (select hospital_cod from hospital
where nombre = SAN CARLOS)
10 Visualizar los datos de los hospitales que tienen personal (Doctores) de cardiologiacutea
Select from hospital where hospital_cod in (select hospital_cod from doctor where
especialidad = lsquoCardiologiacutearsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 68
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 = lsquoPROVINCIALrsquo or
nombre= lsquoGENERALrsquo)
12 Mostrar el apellido de los enfermos que nacieron antes que el Sentildeor Miller
Select apellido from enfermo where Fecha_nac lt (select fecha_nac from enfermo where
apellido = lsquoMILLER Brsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 69
Simulacion de una clausula JOIN
Vamos a mostrar los oficios que estaacuten en maacutes de un departamento
Select distinct e1oficio from emp as e1
where e1oficio in(Select e2oficio from emp as e2
where e1dept_no ltgt e2dept_no)
Se debe utilizar antes una combinacioacuten que una subconsulta la combinacioacuten seriacutea asi dando los
mismos resultados
Select distinct e1Oficio from emp as e1
inner join emp as e2
on e1oficio = e2oficio
where e1dept_no ltgt e2dept_no
Estos son los dos oficios que estaacuten en
maacutes de un departamento
Subconsulta para simular una clausula HAVING
select e1apellidoe1oficio e1salario
from emp as e1
where e1salario gt
(select avg(e2salario) from emp as e2
where e1oficio = e2oficio)
Esta es la consulta utilizando el HAVING que es la que deberiacuteamos utilizar antes que una
subconsulta de simulacioacuten HAVING
SELECT e1apellidoe1oficio e1salario
FROM emp AS e1
INNER JOIN emp AS e2
ON e1oficio = e2oficio
GROUP BY e1oficio e1salarioe1apellido
HAVING e1salario gt AVG (e2salario)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 70
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 28
Ejemplo 41
Visualizar los clientes que vivan en las siguientes ciudades Londres Madrid y Barcelona
Select count () as [Nordm de personas] ciudad from clientes group by ciudad Having ciudad in
(londresMadridBarcelona) order by ciudad
Ejemplo 42
Lista de productos cuya venta allaacute sido mayor a 50000
Select IdProducto Monto=Sum (Preciounidad Cantidad) from [Detalles de pedidos] group
by IdProducto having Sum (Preciounidad Cantidad)gt50000 order by IdProducto
Ejemplo 43
Cuantos Clientes no tienen Fax
Select Count () as [Total de Clientes sin Fax] from clientes where fax is null
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 29
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
Funcioacuten Resultado
GETDATE() Retorna la fecha y hora del sistema
DATEADD(partefechanfecha) Retorna una nueva fecha antildeadiendo n
unidades de partefecha a fecha
DATEDIFF(parteFechafecha1fecha2) Retorna la diferencia en parteFecha entre
fecha1 y fecha2
DATENAME(partefechafecha) Retorna la cadena correspondiente a
partefecha en fecha
DATEPART(partefechafecha) Retorna el numero correspondiente a
partefecha y fecha
DAY(fecha) Retorna el numero correspondiente a la
parte del diacutea de fecha
MONTH(fecha) Retorna el numero correspondiente a la
parte del mes de fecha
YEAR(fecha) Retorna el numero correspondiente a la
parte del antildeo de fecha
GETUTCDATE() Retorna la fecha y hora del meridiano de
Greenwich
La siguiente tabla muestra los valores de partefecha que podemos utilizar
partefecha Abreviatura
Year Yy yyyy
Quarter Qq q
Month Mm m
Dayofyear Dy y
Day Dd d
Week Wk ww
weekday Dw
Hour Hh
minute Mi n
second Ss s
milisecond Ms
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 30
Getdate
Select getdate () Funcioacuten que recupera la fecha actual del sistema
Convert Cast
Convierten expliacutecitamente una expresioacuten de un tipo de datos en otro CAST y CONVERT
proporcionan funciones similares
Convert (Tipodedatosdestino Origen Estilo)
o Tipodedatosdestino Siempre ha de ser tipo caraacutecter
o Origen Puede ser tipo fecha numeacuterico o moneda
o Estilo Opcional Es un coacutedigo que indica el formato en el que devuelve la cadena de
caracteres
Sintaxis
Convert (TipoDato Dato)
Cast (Dato as TipoDato)
Ejemplo
declare n intpalabra nvarchar(10)
set n = 1
set palabra =Nuacutemero
print convert(nvarchar(2)n) + + palabra
print cast(n as nvarchar(2)) + + palabra
while (nlt11)
begin
print convert(nvarchar(2)n) + + palabra
print cast(n as nvarchar(2)) + + palabra
set n = n + 1
end
DateName
Devuelve una cadena de caracteres que representa la parte de la fecha especificada de la fecha
especificada
Los caacutelculos 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
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 31
Ejemplo 46
Select IdPedido DateName (week FechaPedido) as Numero de Semana from Pedidos where IdPedido
= 1035251
Ejemplo 47
Select IdPedido datename (weekday FechaPedido) as Diacutea De Semana from Pedidos where IdPedido =
10352 Martes
Horas
Ejemplo 48
Select IdPedido datename (mi FechaPedido) as Minutos from Pedidos where IdPedido = 10352
Ejemplo 49
Select DateName (minute getdate ()) as minutos
Ejemplo 50
Select DateName (Hh FechaPedido) as hora from Pedidos where IdPedido = 10352
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 32
Ejemplo 51
Select DateName (Hour getdate ()) as hora--gt18
Ejemplo 52
Select DateName (Hh getdate ()) as hora--gt18
DatePart
Devuelve la parte de la fecha u hora indicada Sintaxis
Datepart (Valor devolver fecha)
Ejemplo 53
Select IdPedido datepart (mm FechaPedido) as Mes from Pedidos where IdPedido = 10352
Ejemplo 54
Select Datepart (Hh getdate ()) as Hora--gt17
Ejemplo 55
Select Datepart (mi getdate ()) as Minutos--gt54
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 33
Nombres de Fechas
Day (fecha)
Devuelve UN INT equivale a Datepart
Select day (getdate ()) as diacutea--gt6 (diacutea en la que se ejecuta la sentencia)
Select Datepart (dd getdate ()) --gt6 (diacutea en la que se ejecuta la sentencia)
Select Month (getdate ()) --gt1 (Mes en la que se ejecuta la sentencia)
Select Datepart (mm getdate ()) --gt1 (Mes en la que se ejecuta la sentencia)
Select Year (getdate ()) --gt2008 (Antildeo en la que se ejecuta la sentencia)
Ejemplo 56
Select year (FechaPedido) as Antildeo from Pedidos where IdPedido = 10352
Ejemplo 57
Select datediff (yyyy FechaPedido getdate()) as Dia from Pedidos where IdPedido = 10352
DateAdd
DateAdd (Datepart number date)
Antildeade un nuacutemero a la fecha puesta
DatePart es el formato de lo que queremos antildeadir
Number es el nuacutemero que queremos incrementar la fecha expuesta
Select convert (datetime1-1-02)
Select dateadd (dd 71-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 comparacioacuten y el tipo de dato
que nos devolveraacute antildeos diacuteas minutos etc
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 34
Ejemplo 58
Select datediff (yyyy FechaPedido getdate ()) as Dia from Pedidos where IdPedido = 10352
Ejercicios de funciones de Fecha
Ejemplo 59
Lista de pedidos emitidos en febrero de 1996
Select from Pedidos where month (FechaPedido) =2 and year (FechaPedido) =1996
Ejemplo 60
Lista de Pedidos mostrando la diferencia en diacuteas entre la fecha del pedido y la fecha de Envioacute
Select IdPedido FechaPedido FechaEnviacuteo diacuteas =datediff (day FechaPedido FechaEnviacuteo) from
pedidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 35
Ejemplo 61
Genere un listado de pedidos en el que la fecha del pedido se muestre en el formato nombre del
diacutea diacutea de mes antildeo
Select IdPedido FechaPedido Fecha=datename (dw IdPedido)+ + str (datepart (dd
IdPedido) 2)+ de +datename (mm IdPedido)+ de +str (datepart (yy IdPedido) 4) from
pedidos
Ejemplo 62
Mostrar de la tabla pedidos la fecha de pedidos en fecha corta
Select IdPedido convert (varchar (30) FechaPedido 106) as [Fecha Corta] from pedidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 36
FUNCIONES MATEMATICAS
ABS
Es el valor Absoluto
Select ABS (-4) as VALOR ABSOLUTO--gt4
CEILING
Devuelve el entero maacutes pequentildeo mayor o igual que la expresioacuten numeacuterica dada
Select CEILING (54) as CEILING--6
FLOOR
Devuelve el entero maacutes grande menor o igual que la expresioacuten numeacuterica dada
Select FLOOR (5) as FLOOR--gt5
POWER
Devuelve el valor de la expresioacuten indicada elevada a la potencia especificada
Select POWER (3 2) as 3 ELEVADO A 2--gt9
RAND
Devuelve un valor float aleatorio de 0 a 1
Las llamadas repetitivas de RAND() en una uacutenica consulta produciraacuten el mismo valor
Select RAND(6) as ALEATORIO--071368515806921451
Select RAND(6) as ALEATORIO--071368515806921451
Select RAND(4) as ALEATORIO--07136478921266981
Rand sobre los milisegundos actuales
Select RAND(DATEPART(msGETDATE())) as ALEATORIO--gt071443047691954253
Select RAND(999999999)--gt068504257551273573
ROUND
Devuelve una expresioacuten numeacuterica redondeada a la longitud o precisioacuten especificada
Round (Nuacutemero Redondeo del Nuacutemero)
ROUND siempre devuelve un valor Si length es un valor negativo y mayor que el nuacutemero de
diacutegitos anteriores al separador decimal ROUND devuelve 0
Select ROUND (1234567 2) --gt1234600
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 37
Select ROUND (1234567-2) --gt1000000
Select ROUND (1234567 0) --gt1230000
Select ROUND (1234567-3) ---gt0
SIGN
Devuelve el signo positivo (+1) cero (0) o negativo (-1) de la expresioacuten especificada
Dice el valor negativo positivo o neutro (0) del valor especificado
Select SIGN (-3) --gt-1
Select SIGN (3) --gt1
Select SIGN (0) --gt0
SQUARE
Devuelve el cuadrado de la expresioacuten especificada
Select SQUARE (4) as bdquoCuadrado‟--gt160
SQRT
Devuelve la raiacutez cuadrada de la expresioacuten especificada
Select SQRT (4) as [RAIZ CUADRADA] --gt20
FUNCIONES DE CADENA
ASCII
Devuelve el coacutedigo ASCII del caraacutecter maacutes a la izquierda de una expresioacuten de caracteres
Select ASCII(A)--gt65
Select ASCII(a)--gt97
Select ascii(aula)--gt97
CHAR
Una funcioacuten de cadena que convierte un coacutedigo ASCII int en un caraacutecter
select char(65)--gtA
select char(97)--gta
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 38
CHARINDEX
Devuelve la posicioacuten inicial de la expresioacuten especificada en una cadena de caracteres
CHARINDEX (expression1 expression2 [ start_location])
Argumentos
expression1
Es una expresioacuten que contiene la secuencia de caracteres que se desea buscar
Expression1 es una expresioacuten del tipo de cadenas cortas de caracteres
Expression2
Es una expresioacuten normalmente una columna
en la que se busca la cadena especificada
Expression2 es de la categoriacutea del tipo de datos cadena de caracteres
start_location
Es la posicioacuten del caraacutecter de expression2 en el que se empieza la buacutesqueda de expression1
Si no se especifica start_location es un nuacutemero negativo o es cero
la buacutesqueda empieza al principio de la cadena expression2
Si expression1 no se encuentra en expression2 CHARINDEX devuelve 0
Si alguno de los dos es null devuelve null
Select charindex (ciemurcielago) --gt4
Select charindex (ciemurcielago 2) --gt4
Select charindex (ciemurcielago 5) --gt0
Select charindex (ciemurcielago-6) --gt4
LEFT
Devuelve la parte de una cadena de caracteres que comienza en un nuacutemero de caracteres
especificado a partir de la izquierda
Select left (murcielago5) --gtmurci
RIGHT
Devuelve la parte de una cadena de caracteres que
Comienza en el nuacutemero de caracteres especificado
En integer_expression a partir de la derecha
Select right (hola que tal5) --gte tal
LEN
Cuenta el nuacutemero de caracteres que se incluyen en la cadena
Select len (murcieacutelago) --gt10
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 39
LOWER
Convierte a Minuacutesculas la cadena especificada
Select lower (MurcIELaGO) as [minusculas] --gtmurcielago
UPPER
Convierte a Mayuacutesculas la cadena especificada
Select upper (murcielago) as [MAYUSCULAS] --gtMURCIELAGO
RTRIM y LTRIM
Elimina los espacios que existen a la izquierda y a la derecha respectivamente
Select Rtrim ( murcieacutelago ) AS [SIN ESPACIOS] --gtmurcieacutelago
Select Ltrim ( murcieacutelago ) AS [SIN ESPACIOS] --gtmurcieacutelago
Select ltrim(rtrim( hola ))+
REPLACE
Reemplaza por una tercera expresioacuten todas las apariciones
de la segunda expresioacuten de cadena proporcionada en la primera expresioacuten de cadena
Select replace (hola que tal estasaA) --gtholA que tAl estAs
Select replace (buenos dias que tal estasuentildentildentilde) --gtbntildentildentildenos diasqntildentildentilde tal estas
SPACE
Coloca el nuacutemero de espacios que se le indiquen para entre una cadena de caracteres
Select hola+space(5)+que tal--gthola que tal
SUBSTRING
Devuelve parte de una expresioacuten de caracteres binaria de texto o de imagen
Sintaxis
SUBSTRING (Expresioacuten Comienzo Duracioacuten)
Argumentos
Expresioacuten
Es una cadena de caracteres cadena binaria texto imagen
Columna o expresioacuten que incluye una columna
No deben usarse expresiones que incluyan funciones de agregado
Start
Es un entero que especifica el punto en que comienza la subcadena
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 40
Length
Es un entero que especifica la longitud de la subcadena
(El nuacutemero de caracteres o bytes que se devuelven)
Select substring (murcielago 3 5) --gtrciel
Select substring (murcielago 3 len (murcielago)) --gtrciel
REVERSE
Devuelve invertida una expresioacuten de caraacutecter
Select reverse (hola)
REPLICATE
Repite una expresioacuten de caracteres un nuacutemero especificado de veces
Select replicate (murcielago 5)
Replicate replicate replicate replicate replicate
STUFF
Elimina el nuacutemero de caracteres especificados e insertados
Otro conjunto de caracteres en un punto de inicio indicado
Select STUFF (Murcieacutelago 2 3 ijklmn) Mijklmnielago
FUNCIONES DE SISTEMA
- APP_NAME () Devuelve el nombre de la aplicacioacuten actual
Select app_name () as [Nombre de la aplicacion]
- DATALENGTH (Expresioacuten) Devuelve un entero que es numero de bites necesarios para
representar esa expresioacuten int
Select datalength (Ninoni) as [Numero de bites]
- ISDATE (Expresioacuten) Dice si la expresioacuten es una fecha o no Devuelve 1 si la expresioacuten es
una fecha y 0 si no es una fecha
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 41
Select isdate (121001) as [Validacioacuten Fecha]
- ISNUMERIC (Expresion) Dice si la expresioacuten es un numero o no Devuelve 1 si la
expresioacuten es un nuacutemero y 0 si la expresioacuten no es nuacutemero
Select isnumeric (ddd) as [Validacion Numero]
- ISNULL (Expresioacuten ExpresionDevuelta) Si la expresioacuten es nula te devuelve la Expresioacuten
Devuelta y si no devuelve la primera Expresioacuten
Select isnull (nullNo nulo) as [Es Nulo]
- PARSENAME (bdquoNombreObjeto‟ ParteNombre)
ParteNombre es un valor de tipo Int que coge unos determinados valores del
NombreObjeto
1 Objeto
2 Propietario
3 Base de Datos
4 Servidor
Select parsename (saposeidondbopedidos1) as [Parte Expresioacuten]
Select parsename (saposeidondbopedidos 2) as [Parte Expresioacuten]
Select parsename (saposeidondbopedidos3) as [Parte Expresioacuten]
Select parsename ( saposeidondbopedidos 4) as [Parte Expresioacuten]
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 42
- SYSTEM_USER Devuelve el usuario del sistema actual
Depende de la autentificacioacuten con la que te hayas conectado
Select system_user as [Usuario conectado]
- USER_NAME() Devuelve el nombre del usuario actual
Select user_name ()
- COALESCE (expresioacuten1 expresioacuten2 )
Devuelve la primera expresioacuten no NULL
Si todos son NULL devuelve NULL
Select coalesce (PrecioUnidad Cantidad) from [detalles de Pedidos] Si el PrecioUnidad es nulo
devolveraacute la Cantidad y si los dos son nulos devolveraacute un campo Null
PROCEDIMIENTOS PARA AGRUPAR Y RESUMIR DATOS
En el examen de certificacioacuten 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 usaraacute la base de datos indicada Ejemplo Ponemos
en el analizador de consultas lo siguiente
Use Northwind
Select from [Order Details]
[Order Details]
Esta tabla perteneciente a la Northwind se encarga de manejar los pedidos
Order Id Nordm de Pedido
Producto Id Nordm de Producto
Ambos campos son Primary Key con lo que no puede haber una combinacioacuten de ambos campos que sea
igual
OrderId ProductId
1 A
1 B
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 43
1 C
2 A
3 C
Es decir en este caso no podriacutea existir una nueva combinacioacuten ldquo1 Ardquo o ldquo2 Ardquo
Quantity Es la cantidad del producto del pedido
ROLLUP
Se usa para presentar resuacutemenes de datos A de usarse junto con la clausula group by lo que hace es
realizar un resumen de los campos incluidos en el rollup
Ejemplo 63
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
Group by ProductID OrderID
with Rollup
Order by ProductID OrderID
Este ejemplo suma todas las cantidades y mediante
rollup muestra una fila con la suma de todas las
cantidades de cada producto y ademaacutes otra fila con la
suma de todas las cantidades de todos los productos El
resultado de este ejemplo seriacutea el que muestra la
imagen
Ejemplo 64
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
where orderid lt 10250
Group by ProductID OrderID
with Rollup
Order by ProductID OrderID
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 44
CUBE
Al igual que Rollup realiza resuacutemenes de campos agrupados Pero en este caso muestra un resumen con
cada combinacioacuten posible de los campos agrupados
Ejemplo 65
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
where orderid lt 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 combinacioacuten posible entre el
productid y el orderid
GROUPING
Indica si el resultado de un campo es el que hay en la propia tabla o se ha introducido mediante una
claacuteusula de resumen es decir para saber por ejemplo si un ldquoNullrdquo 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 lt 10250 Group by ProductID
OrderID with Cube Order by ProductID OrderID
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 45
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
Ponieacutendole un alias al
grouping saldriacutea el nombre
de columna que le
indiquemos
COMPUTE
Realiza un resumen en una columna aparte con el resultado de la funcioacuten de agregado indicada Su
formato seriacutea Compute funcioacuten(campo) No se puede utilizar en aplicaciones cliente servidor es una
clausula meramente informativa Tampoco se le pueden poner alias a los resuacutemenes
Ejemplo 67
Select Productid Orderid Quantity From [Order Details] order by ProductID Orderid compute
Sum(quantity)
Vemos que muestra la
columna con la suma
total de todas las
cantidades
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 46
Ejercicios de ROLLUP GROUPING y CUBE
Ejemplo 68
Realizar una consulta que resuma la cantidad de artiacuteculos pedidos por cada iacutendice de producto y
nuacutemero de pedido Realizando un caacutelculo acumulativo
select productid as [PRODUCTO] orderid as [Nordm PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] group by productid orderid with rollup order by productid orderid
PRODUCTO Nordm 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
hellip
Ejemplo 69
Modificacioacuten al ejercicio anterior Realizar el mismo resumen pero uacutenicamente para el producto
cuyo id es 50
select productid as [PRODUCTO] orderid as [Nordm PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] where productid = 50 group by productid orderid with rollup order by productid ordered
PRODUCTO Nordm 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
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 47
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 modificacioacuten 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 [Nordm PEDIDO] grouping(orderid) as [GRUPO PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] where productid = 50 group by Productidorderid with cube order by productidorderid
PRODUCTO GRUPO PRODUCTO Nordm PEDIDO GRUPO PEDIDO SUMA TOTAL
----------- -------------- ----------- ------------ -----------
NULL 1 NULL 1 235
NULL 1 10350 0 15
NULL 1 10383 0 15
NULL 1 10429 0 40
NULL 1 10465 0 25
NULL 1 10637 0 25
NULL 1 10729 0 40
NULL 1 10751 0 20
NULL 1 10920 0 24
NULL 1 10948 0 9
NULL 1 11072 0 22
50 0 NULL 1 235
50 0 10350 0 15
50 0 10383 0 15
50 0 10429 0 40
50 0 10465 0 25
50 0 10637 0 25
50 0 10729 0 40
50 0 10751 0 20
50 0 10920 0 24
50 0 10948 0 9
50 0 11072 0 22
(22 filas afectadas)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 48
Obtencioacuten de resuacutemenes 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 maacutes columnas y
luego efectuar alguna operacioacuten de resumen sobre cada grupo asiacute generado
La diferencia con GROUP BY es que permite mostrar informacioacuten mas detallada de cada grupo
Ejemplo 71
Lista de pedidos que muestre por coacutedigo de pedido la cantidad de productos vendidos por cada uno
de ellos
select Idpedidoidproductopreciounidadcantidad[Sub Total]=sum(PreciounidadCantidad) from
[detalles de pedidos] group by Idpedidoidproductopreciounidadcantidad order by IdPedido compute
sum(Cantidad) by IdPedido
EJERCICIOS CON COMPUTE
Ejemplo 72
Generar un resumen de subtotales en una consulta que devuelva el nuacutemero de pedido la cantidad
pedida para todos los orderid 11070
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 49
Select Orderid as [Nordm PEDIDO] Quantity AS [CANTIDAD] From [Order Details] where orderid gt= 11070 order by Orderid compute Sum(quantity) by orderid compute sum(quantity)
Nordm PEDIDO CANTIDAD
----------- --------
11070 40
11070 20
11070 30
11070 20
sum
===========
110
sum
===========
110
(6 filas afectadas)
Ejemplo 73
Generar un resumen con calculo de subtotales similar al anterior pero para los orderid 11075 y
11076
Select Orderid as [Nordm PEDIDO] Quantity as [CANTIDAD] From [Order Details] where orderid = 11075 or orderid = 11076 order by Orderid compute Sum(quantity) by ordered Nordm PEDIDO CANTIDAD ----------- -------- 11075 10 11075 30 11075 2 sum =========== 42 Nordm PEDIDO CANTIDAD ----------- -------- 11076 20 11076 20 11076 10
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 50
sum =========== 50 (8 filas afectadas)
Ejemplo 74
Modificacioacuten al ejercicio anterior Agregar la cantidad total y la cantidad promedio al final del
informe
Select Orderid as [Nordm 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)
Nordm PEDIDO CANTIDAD
----------- --------
11075 10
11075 30
11075 2
sum
===========
42
Nordm PEDIDO CANTIDAD
----------- --------
11076 20
11076 20
11076 10
sum
===========
50
sum
===========
92
avg
===========
15
(10 filas afectadas)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 51
Ejemplo 75
Seleccionar de forma agrupada por tipo todos los tipos la suma de los precios y la suma del
anticipo de la tabla tiacutetulos
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 199900 50000000
business 119500 50000000
business 29900 101250000
business 199900 50000000
sum
=====================
549200
avg
=====================
62812500
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
mod_cook 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
avg
=====================
75000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
popular_comp 229500 70000000
popular_comp 200000 80000000
popular_comp NULL NULL
sum
=====================
429500
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 52
avg
=====================
75000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
psychology 215900 70000000
psychology 109500 22750000
psychology 70000 60000000
psychology 199900 20000000
psychology 79900 40000000
sum
=====================
675200
avg
=====================
42550000
(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 ademaacutes 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 199900 50000000
business 119500 50000000
business 29900 101250000
business 199900 50000000
sum
=====================
549200
sum
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 53
=====================
251250000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
mod_cook 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
popular_comp 229500 70000000
popular_comp 200000 80000000
popular_comp NULL NULL
sum
=====================
429500
sum
=====================
150000000
(30 filas afectadas)
Ejemplo 77
Generar un informe que muestre la suma de los precios de los libros de psicologiacutea 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 109500
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 54
psychology 0736 70000
psychology 0736 199900
psychology 0736 79900
sum
=====================
459300
TIPO CODIGO EDITOR PRECIO
------------ ------------- ---------------------
psychology 0877 215900
sum
=====================
215900
(7 filas afectadas)
Ejemplo 78
Generar un informe que obtenga la suma de los precios de todos los libros de psicologiacutea asiacute como la
suma de los precios de los libros de psicologiacutea 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 109500
psychology 0736 70000
psychology 0736 199900
psychology 0736 79900
sum
=====================
459300
TIPO CODIGO EDITOR PRECIO
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 55
------------ ------------- ---------------------
psychology 0877 215900
sum
=====================
215900
sum
=====================
675200
(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 199900 0000
mod_cook 0877 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO CODIGO EDITOR PRECIO ANTICIPO
------------ ------------- --------------------- ---------------------
trad_cook 0877 119500 40000000
trad_cook 0877 209500 70000000
trad_cook 0877 149900 80000000
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 56
sum
=====================
478900
sum
=====================
190000000
(9 filas afectadas)
Ejemplo 80
Generar un informe que muestre todos los tiacutetulos precio y anticipo de aquellos tiacutetulos que tengan
un precio superior a 20 doacutelares Ofreceraacute tambieacuten la suma total del precio y del anticipo
Select title as [TITULO] price as [PRECIO] advance as [ANTICIPO] From titles where price gt 20 order by title compute sum(price) compute sum(advance)
TITULO PRECIO ANTICIPO
-------------------------------------------------------------------------------- --------------------- -------------
--------
But Is It User Friendly 229500 70000000
Computer Phobic AND Non-Phobic Individuals Behavior Variations 215900
70000000
Onions Leeks and Garlic Cooking Secrets of the Mediterranean 209500
70000000
sum
=====================
654900
sum
=====================
210000000
(5 filas afectadas)
Ejemplo 81
Generar un informe que muestre el precio el tipo y el nuacutemero de editor de la tabla titles de todos
aquellas obras que pertenezcan la categoriacutea de ldquobusinessrdquo Ademaacutes apareceraacute la suma total de
precios y el maacuteximo pub_id de esta seleccioacuten
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 57
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 29900 0736
business 199900 1389
business 199900 1389
business 119500 1389
sum
=====================
549200
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 Mostraraacute la suma de los precios y los anticipos por tipo y luego calcularaacute 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 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
trad_cook 209500 70000000
trad_cook 119500 40000000
trad_cook 149900 80000000
sum
=====================
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 58
478900
sum
=====================
190000000
sum
=====================
708700
sum
=====================
340000000
(11 filas afectadas)
Eliminacioacuten 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 iquestA que precio se ah vendido los productos
Select IdProducto Preciounidad from [Detalles de pedidos] order by IdProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 59
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 mayoriacutea de las consultas que se hacen en una base de datos requiere que se lean datos procedentes
de dos oacute maacutes tablas
INNER JOIN- son las filas que satisfacen la condicioacuten de la combinacioacuten
En la siguiente sentencia SQL enlaza 2 tablas la tabla clientes y la tabla pedidos en esta ejemplo me
muestra los campos nombre compantildeiacutea y el campo idpedido
La uacutenica condicioacuten es que las 2 tablas tengan un campo en comuacuten
Ejemplo 84
select clientesNombreCompantildeiacuteapedidosidpedido from clientes inner join pedidos on
clientesidcliente=pedidosidcliente
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 60
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 pedidosIdPedido pedidosIdCliente 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 pedidosIdPedido pedidosIdCliente order
by pedidos IdPedido
CROSS JOIN
Un Cross Join es la consulta correlacionada que combine cada una de las filas de una de las tablas con
todas las filas de la otra tabla
No es necesario que exista una columna en comuacuten para ejecutar el Cross Join
Ejemplo 86
La siguiente consulta combina cada una de las filas de la tabla categoriacuteas con cada una de las filas de la
tabla productos
select productosNombreProductocategoriasNombrecategoria from productos cross join categorias
order by productosNombreProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 61
Ejercicios de consultas Muacuteltiples
Ejemplo 87
Mostrar el pedidos completo con el id=10248
Select pedidosIdPedido pedidosIdCliente
Total=sum ([detalles de pedidos]Preciounidad[detalles de pedidos]Cantidad)
From [detalles de pedidos] inner join pedidos on
[Detalles de pedidos]IdPedido=pedidosIdPedido where pedidosIdPedido=10248
Group by pedidosIdPedido pedidosIdCliente
Ejemplo 88
1 Mostrar la cantidad de productos por categoriacutea
Select CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
[Total de Producto]=sum (UnidadesEnExistencia) from Categoriacuteas inner join
Productos on CategoriacuteasIdCategoriacutea=productosIdCategoriacutea
Group by CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 62
Ejemplo 89
Calcular cuantas ventas tiene cada uno de los vendedores
Select empleadosIdEmpleado empleadosNombre empleadosApellidos
[Total de ventas]=count (pedidosIdPedido) from empleados
Inner join Pedidos on empleadosIdEmpleado=pedidosIdEmpleado
Group by empleadosIdEmpleado empleadosNombre empleadosApellidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 63
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 despueacutes saca la de Plantilla
Recomendaciones a la hora de usar las combinaciones
Combinar tablas en funcioacuten de claves principales y externas
Limite el nuacutemero de tablas de las combinaciones
Select Apellido
Oficio as
OFICIOFUNCION
salario from emp
UNION
Select Apellido
Funcion Salario from
Plantilla
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 64
SUBCONSULTAS
Es una SELECT anidada en una instruccioacuten INSERT DELETE SELECT o UPDATE
Como una tabla derivada
Select eemp_no as Numero
eApellido
from (select emp_no apellido from emp) as e
Como una expresioacuten
Select emp_no as [Numero]
Apellido
Salario
(select avg(Salario) from emp)
as Diferencia
from emp
where oficio = Empleado
Para correlacionar datos
- Expresioacuten dinaacutemica que cambia en cada fila de una consulta externa
- Es una combinacioacuten entre la subconsulta y la fila de la consulta externa
- Dividen consultas complejas con dos o maacutes consultas simples relacionadas
Subconsulta correlacionada
Select apellido oficiodept_no
from emp as e
where 20 lt
(select dept_no from dept as d
where edept_no = ddept_no
and ddnombre = Ventas)
SUBCONSULTAS
1 Mostrar el numero de empleado el apellido y la fecha de alta del empleado mas antiguo de la
empresa
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 65
SELECT emp_noapellido
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_noapellido
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 Jimeacutenez
select apellido oficio from emp where
oficio = (select oficio from emp where apellido = JIMENEZ)
4 Queremos saber el apellido oficio salario y nuacutemero 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 gt (select max (salario) from
emp where dept_no = 30)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 66
5 Mostrar el apellido la funcioacuten sala o departamento de todos los empleados que trabajen en la
empresa
select eApellido eOficio as [Cargo en Empresa] ddnombre as [Oficina]
from emp as e
inner join dept as d
on edept_no = ddept_no
union
select pApellido pfuncion snombre
from plantilla as p
inner join sala as s
on phospital_cod = shospital_cod
and psala_cod = ssala_cod
union
select dApellido despecialidad hnombre
from doctor as d
inner join hospital as h
on dhospital_cod = hhospital_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 = lsquoventasrsquo))
order by 2
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 67
8 Mostrar los empleados que tienen mejor salario que la media de los directores no incluyendo al
presidente
Select from emp where salario gt
(select avg (salario) from emp where oficio = DIRECTOR)
and oficio ltgt PRESIDENTE
9 Mostrar el apellido funcioacuten salario y coacutedigo 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 = lsquoENFERMEROrsquo or
funcion = lsquoENFERMERArsquo) and hospital_cod = (select hospital_cod from hospital where nombre =
lsquoSAN CARLOSrsquo)
Select apellido funcion salario hospital_cod from plantilla where
funcion in (ENFERMEROENFERMERA)
and hospital_cod = (select hospital_cod from hospital
where nombre = SAN CARLOS)
10 Visualizar los datos de los hospitales que tienen personal (Doctores) de cardiologiacutea
Select from hospital where hospital_cod in (select hospital_cod from doctor where
especialidad = lsquoCardiologiacutearsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 68
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 = lsquoPROVINCIALrsquo or
nombre= lsquoGENERALrsquo)
12 Mostrar el apellido de los enfermos que nacieron antes que el Sentildeor Miller
Select apellido from enfermo where Fecha_nac lt (select fecha_nac from enfermo where
apellido = lsquoMILLER Brsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 69
Simulacion de una clausula JOIN
Vamos a mostrar los oficios que estaacuten en maacutes de un departamento
Select distinct e1oficio from emp as e1
where e1oficio in(Select e2oficio from emp as e2
where e1dept_no ltgt e2dept_no)
Se debe utilizar antes una combinacioacuten que una subconsulta la combinacioacuten seriacutea asi dando los
mismos resultados
Select distinct e1Oficio from emp as e1
inner join emp as e2
on e1oficio = e2oficio
where e1dept_no ltgt e2dept_no
Estos son los dos oficios que estaacuten en
maacutes de un departamento
Subconsulta para simular una clausula HAVING
select e1apellidoe1oficio e1salario
from emp as e1
where e1salario gt
(select avg(e2salario) from emp as e2
where e1oficio = e2oficio)
Esta es la consulta utilizando el HAVING que es la que deberiacuteamos utilizar antes que una
subconsulta de simulacioacuten HAVING
SELECT e1apellidoe1oficio e1salario
FROM emp AS e1
INNER JOIN emp AS e2
ON e1oficio = e2oficio
GROUP BY e1oficio e1salarioe1apellido
HAVING e1salario gt AVG (e2salario)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 70
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 29
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
Funcioacuten Resultado
GETDATE() Retorna la fecha y hora del sistema
DATEADD(partefechanfecha) Retorna una nueva fecha antildeadiendo n
unidades de partefecha a fecha
DATEDIFF(parteFechafecha1fecha2) Retorna la diferencia en parteFecha entre
fecha1 y fecha2
DATENAME(partefechafecha) Retorna la cadena correspondiente a
partefecha en fecha
DATEPART(partefechafecha) Retorna el numero correspondiente a
partefecha y fecha
DAY(fecha) Retorna el numero correspondiente a la
parte del diacutea de fecha
MONTH(fecha) Retorna el numero correspondiente a la
parte del mes de fecha
YEAR(fecha) Retorna el numero correspondiente a la
parte del antildeo de fecha
GETUTCDATE() Retorna la fecha y hora del meridiano de
Greenwich
La siguiente tabla muestra los valores de partefecha que podemos utilizar
partefecha Abreviatura
Year Yy yyyy
Quarter Qq q
Month Mm m
Dayofyear Dy y
Day Dd d
Week Wk ww
weekday Dw
Hour Hh
minute Mi n
second Ss s
milisecond Ms
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 30
Getdate
Select getdate () Funcioacuten que recupera la fecha actual del sistema
Convert Cast
Convierten expliacutecitamente una expresioacuten de un tipo de datos en otro CAST y CONVERT
proporcionan funciones similares
Convert (Tipodedatosdestino Origen Estilo)
o Tipodedatosdestino Siempre ha de ser tipo caraacutecter
o Origen Puede ser tipo fecha numeacuterico o moneda
o Estilo Opcional Es un coacutedigo que indica el formato en el que devuelve la cadena de
caracteres
Sintaxis
Convert (TipoDato Dato)
Cast (Dato as TipoDato)
Ejemplo
declare n intpalabra nvarchar(10)
set n = 1
set palabra =Nuacutemero
print convert(nvarchar(2)n) + + palabra
print cast(n as nvarchar(2)) + + palabra
while (nlt11)
begin
print convert(nvarchar(2)n) + + palabra
print cast(n as nvarchar(2)) + + palabra
set n = n + 1
end
DateName
Devuelve una cadena de caracteres que representa la parte de la fecha especificada de la fecha
especificada
Los caacutelculos 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
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 31
Ejemplo 46
Select IdPedido DateName (week FechaPedido) as Numero de Semana from Pedidos where IdPedido
= 1035251
Ejemplo 47
Select IdPedido datename (weekday FechaPedido) as Diacutea De Semana from Pedidos where IdPedido =
10352 Martes
Horas
Ejemplo 48
Select IdPedido datename (mi FechaPedido) as Minutos from Pedidos where IdPedido = 10352
Ejemplo 49
Select DateName (minute getdate ()) as minutos
Ejemplo 50
Select DateName (Hh FechaPedido) as hora from Pedidos where IdPedido = 10352
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 32
Ejemplo 51
Select DateName (Hour getdate ()) as hora--gt18
Ejemplo 52
Select DateName (Hh getdate ()) as hora--gt18
DatePart
Devuelve la parte de la fecha u hora indicada Sintaxis
Datepart (Valor devolver fecha)
Ejemplo 53
Select IdPedido datepart (mm FechaPedido) as Mes from Pedidos where IdPedido = 10352
Ejemplo 54
Select Datepart (Hh getdate ()) as Hora--gt17
Ejemplo 55
Select Datepart (mi getdate ()) as Minutos--gt54
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 33
Nombres de Fechas
Day (fecha)
Devuelve UN INT equivale a Datepart
Select day (getdate ()) as diacutea--gt6 (diacutea en la que se ejecuta la sentencia)
Select Datepart (dd getdate ()) --gt6 (diacutea en la que se ejecuta la sentencia)
Select Month (getdate ()) --gt1 (Mes en la que se ejecuta la sentencia)
Select Datepart (mm getdate ()) --gt1 (Mes en la que se ejecuta la sentencia)
Select Year (getdate ()) --gt2008 (Antildeo en la que se ejecuta la sentencia)
Ejemplo 56
Select year (FechaPedido) as Antildeo from Pedidos where IdPedido = 10352
Ejemplo 57
Select datediff (yyyy FechaPedido getdate()) as Dia from Pedidos where IdPedido = 10352
DateAdd
DateAdd (Datepart number date)
Antildeade un nuacutemero a la fecha puesta
DatePart es el formato de lo que queremos antildeadir
Number es el nuacutemero que queremos incrementar la fecha expuesta
Select convert (datetime1-1-02)
Select dateadd (dd 71-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 comparacioacuten y el tipo de dato
que nos devolveraacute antildeos diacuteas minutos etc
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 34
Ejemplo 58
Select datediff (yyyy FechaPedido getdate ()) as Dia from Pedidos where IdPedido = 10352
Ejercicios de funciones de Fecha
Ejemplo 59
Lista de pedidos emitidos en febrero de 1996
Select from Pedidos where month (FechaPedido) =2 and year (FechaPedido) =1996
Ejemplo 60
Lista de Pedidos mostrando la diferencia en diacuteas entre la fecha del pedido y la fecha de Envioacute
Select IdPedido FechaPedido FechaEnviacuteo diacuteas =datediff (day FechaPedido FechaEnviacuteo) from
pedidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 35
Ejemplo 61
Genere un listado de pedidos en el que la fecha del pedido se muestre en el formato nombre del
diacutea diacutea de mes antildeo
Select IdPedido FechaPedido Fecha=datename (dw IdPedido)+ + str (datepart (dd
IdPedido) 2)+ de +datename (mm IdPedido)+ de +str (datepart (yy IdPedido) 4) from
pedidos
Ejemplo 62
Mostrar de la tabla pedidos la fecha de pedidos en fecha corta
Select IdPedido convert (varchar (30) FechaPedido 106) as [Fecha Corta] from pedidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 36
FUNCIONES MATEMATICAS
ABS
Es el valor Absoluto
Select ABS (-4) as VALOR ABSOLUTO--gt4
CEILING
Devuelve el entero maacutes pequentildeo mayor o igual que la expresioacuten numeacuterica dada
Select CEILING (54) as CEILING--6
FLOOR
Devuelve el entero maacutes grande menor o igual que la expresioacuten numeacuterica dada
Select FLOOR (5) as FLOOR--gt5
POWER
Devuelve el valor de la expresioacuten indicada elevada a la potencia especificada
Select POWER (3 2) as 3 ELEVADO A 2--gt9
RAND
Devuelve un valor float aleatorio de 0 a 1
Las llamadas repetitivas de RAND() en una uacutenica consulta produciraacuten el mismo valor
Select RAND(6) as ALEATORIO--071368515806921451
Select RAND(6) as ALEATORIO--071368515806921451
Select RAND(4) as ALEATORIO--07136478921266981
Rand sobre los milisegundos actuales
Select RAND(DATEPART(msGETDATE())) as ALEATORIO--gt071443047691954253
Select RAND(999999999)--gt068504257551273573
ROUND
Devuelve una expresioacuten numeacuterica redondeada a la longitud o precisioacuten especificada
Round (Nuacutemero Redondeo del Nuacutemero)
ROUND siempre devuelve un valor Si length es un valor negativo y mayor que el nuacutemero de
diacutegitos anteriores al separador decimal ROUND devuelve 0
Select ROUND (1234567 2) --gt1234600
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 37
Select ROUND (1234567-2) --gt1000000
Select ROUND (1234567 0) --gt1230000
Select ROUND (1234567-3) ---gt0
SIGN
Devuelve el signo positivo (+1) cero (0) o negativo (-1) de la expresioacuten especificada
Dice el valor negativo positivo o neutro (0) del valor especificado
Select SIGN (-3) --gt-1
Select SIGN (3) --gt1
Select SIGN (0) --gt0
SQUARE
Devuelve el cuadrado de la expresioacuten especificada
Select SQUARE (4) as bdquoCuadrado‟--gt160
SQRT
Devuelve la raiacutez cuadrada de la expresioacuten especificada
Select SQRT (4) as [RAIZ CUADRADA] --gt20
FUNCIONES DE CADENA
ASCII
Devuelve el coacutedigo ASCII del caraacutecter maacutes a la izquierda de una expresioacuten de caracteres
Select ASCII(A)--gt65
Select ASCII(a)--gt97
Select ascii(aula)--gt97
CHAR
Una funcioacuten de cadena que convierte un coacutedigo ASCII int en un caraacutecter
select char(65)--gtA
select char(97)--gta
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 38
CHARINDEX
Devuelve la posicioacuten inicial de la expresioacuten especificada en una cadena de caracteres
CHARINDEX (expression1 expression2 [ start_location])
Argumentos
expression1
Es una expresioacuten que contiene la secuencia de caracteres que se desea buscar
Expression1 es una expresioacuten del tipo de cadenas cortas de caracteres
Expression2
Es una expresioacuten normalmente una columna
en la que se busca la cadena especificada
Expression2 es de la categoriacutea del tipo de datos cadena de caracteres
start_location
Es la posicioacuten del caraacutecter de expression2 en el que se empieza la buacutesqueda de expression1
Si no se especifica start_location es un nuacutemero negativo o es cero
la buacutesqueda empieza al principio de la cadena expression2
Si expression1 no se encuentra en expression2 CHARINDEX devuelve 0
Si alguno de los dos es null devuelve null
Select charindex (ciemurcielago) --gt4
Select charindex (ciemurcielago 2) --gt4
Select charindex (ciemurcielago 5) --gt0
Select charindex (ciemurcielago-6) --gt4
LEFT
Devuelve la parte de una cadena de caracteres que comienza en un nuacutemero de caracteres
especificado a partir de la izquierda
Select left (murcielago5) --gtmurci
RIGHT
Devuelve la parte de una cadena de caracteres que
Comienza en el nuacutemero de caracteres especificado
En integer_expression a partir de la derecha
Select right (hola que tal5) --gte tal
LEN
Cuenta el nuacutemero de caracteres que se incluyen en la cadena
Select len (murcieacutelago) --gt10
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 39
LOWER
Convierte a Minuacutesculas la cadena especificada
Select lower (MurcIELaGO) as [minusculas] --gtmurcielago
UPPER
Convierte a Mayuacutesculas la cadena especificada
Select upper (murcielago) as [MAYUSCULAS] --gtMURCIELAGO
RTRIM y LTRIM
Elimina los espacios que existen a la izquierda y a la derecha respectivamente
Select Rtrim ( murcieacutelago ) AS [SIN ESPACIOS] --gtmurcieacutelago
Select Ltrim ( murcieacutelago ) AS [SIN ESPACIOS] --gtmurcieacutelago
Select ltrim(rtrim( hola ))+
REPLACE
Reemplaza por una tercera expresioacuten todas las apariciones
de la segunda expresioacuten de cadena proporcionada en la primera expresioacuten de cadena
Select replace (hola que tal estasaA) --gtholA que tAl estAs
Select replace (buenos dias que tal estasuentildentildentilde) --gtbntildentildentildenos diasqntildentildentilde tal estas
SPACE
Coloca el nuacutemero de espacios que se le indiquen para entre una cadena de caracteres
Select hola+space(5)+que tal--gthola que tal
SUBSTRING
Devuelve parte de una expresioacuten de caracteres binaria de texto o de imagen
Sintaxis
SUBSTRING (Expresioacuten Comienzo Duracioacuten)
Argumentos
Expresioacuten
Es una cadena de caracteres cadena binaria texto imagen
Columna o expresioacuten que incluye una columna
No deben usarse expresiones que incluyan funciones de agregado
Start
Es un entero que especifica el punto en que comienza la subcadena
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 40
Length
Es un entero que especifica la longitud de la subcadena
(El nuacutemero de caracteres o bytes que se devuelven)
Select substring (murcielago 3 5) --gtrciel
Select substring (murcielago 3 len (murcielago)) --gtrciel
REVERSE
Devuelve invertida una expresioacuten de caraacutecter
Select reverse (hola)
REPLICATE
Repite una expresioacuten de caracteres un nuacutemero especificado de veces
Select replicate (murcielago 5)
Replicate replicate replicate replicate replicate
STUFF
Elimina el nuacutemero de caracteres especificados e insertados
Otro conjunto de caracteres en un punto de inicio indicado
Select STUFF (Murcieacutelago 2 3 ijklmn) Mijklmnielago
FUNCIONES DE SISTEMA
- APP_NAME () Devuelve el nombre de la aplicacioacuten actual
Select app_name () as [Nombre de la aplicacion]
- DATALENGTH (Expresioacuten) Devuelve un entero que es numero de bites necesarios para
representar esa expresioacuten int
Select datalength (Ninoni) as [Numero de bites]
- ISDATE (Expresioacuten) Dice si la expresioacuten es una fecha o no Devuelve 1 si la expresioacuten es
una fecha y 0 si no es una fecha
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 41
Select isdate (121001) as [Validacioacuten Fecha]
- ISNUMERIC (Expresion) Dice si la expresioacuten es un numero o no Devuelve 1 si la
expresioacuten es un nuacutemero y 0 si la expresioacuten no es nuacutemero
Select isnumeric (ddd) as [Validacion Numero]
- ISNULL (Expresioacuten ExpresionDevuelta) Si la expresioacuten es nula te devuelve la Expresioacuten
Devuelta y si no devuelve la primera Expresioacuten
Select isnull (nullNo nulo) as [Es Nulo]
- PARSENAME (bdquoNombreObjeto‟ ParteNombre)
ParteNombre es un valor de tipo Int que coge unos determinados valores del
NombreObjeto
1 Objeto
2 Propietario
3 Base de Datos
4 Servidor
Select parsename (saposeidondbopedidos1) as [Parte Expresioacuten]
Select parsename (saposeidondbopedidos 2) as [Parte Expresioacuten]
Select parsename (saposeidondbopedidos3) as [Parte Expresioacuten]
Select parsename ( saposeidondbopedidos 4) as [Parte Expresioacuten]
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 42
- SYSTEM_USER Devuelve el usuario del sistema actual
Depende de la autentificacioacuten con la que te hayas conectado
Select system_user as [Usuario conectado]
- USER_NAME() Devuelve el nombre del usuario actual
Select user_name ()
- COALESCE (expresioacuten1 expresioacuten2 )
Devuelve la primera expresioacuten no NULL
Si todos son NULL devuelve NULL
Select coalesce (PrecioUnidad Cantidad) from [detalles de Pedidos] Si el PrecioUnidad es nulo
devolveraacute la Cantidad y si los dos son nulos devolveraacute un campo Null
PROCEDIMIENTOS PARA AGRUPAR Y RESUMIR DATOS
En el examen de certificacioacuten 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 usaraacute la base de datos indicada Ejemplo Ponemos
en el analizador de consultas lo siguiente
Use Northwind
Select from [Order Details]
[Order Details]
Esta tabla perteneciente a la Northwind se encarga de manejar los pedidos
Order Id Nordm de Pedido
Producto Id Nordm de Producto
Ambos campos son Primary Key con lo que no puede haber una combinacioacuten de ambos campos que sea
igual
OrderId ProductId
1 A
1 B
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 43
1 C
2 A
3 C
Es decir en este caso no podriacutea existir una nueva combinacioacuten ldquo1 Ardquo o ldquo2 Ardquo
Quantity Es la cantidad del producto del pedido
ROLLUP
Se usa para presentar resuacutemenes de datos A de usarse junto con la clausula group by lo que hace es
realizar un resumen de los campos incluidos en el rollup
Ejemplo 63
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
Group by ProductID OrderID
with Rollup
Order by ProductID OrderID
Este ejemplo suma todas las cantidades y mediante
rollup muestra una fila con la suma de todas las
cantidades de cada producto y ademaacutes otra fila con la
suma de todas las cantidades de todos los productos El
resultado de este ejemplo seriacutea el que muestra la
imagen
Ejemplo 64
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
where orderid lt 10250
Group by ProductID OrderID
with Rollup
Order by ProductID OrderID
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 44
CUBE
Al igual que Rollup realiza resuacutemenes de campos agrupados Pero en este caso muestra un resumen con
cada combinacioacuten posible de los campos agrupados
Ejemplo 65
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
where orderid lt 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 combinacioacuten posible entre el
productid y el orderid
GROUPING
Indica si el resultado de un campo es el que hay en la propia tabla o se ha introducido mediante una
claacuteusula de resumen es decir para saber por ejemplo si un ldquoNullrdquo 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 lt 10250 Group by ProductID
OrderID with Cube Order by ProductID OrderID
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 45
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
Ponieacutendole un alias al
grouping saldriacutea el nombre
de columna que le
indiquemos
COMPUTE
Realiza un resumen en una columna aparte con el resultado de la funcioacuten de agregado indicada Su
formato seriacutea Compute funcioacuten(campo) No se puede utilizar en aplicaciones cliente servidor es una
clausula meramente informativa Tampoco se le pueden poner alias a los resuacutemenes
Ejemplo 67
Select Productid Orderid Quantity From [Order Details] order by ProductID Orderid compute
Sum(quantity)
Vemos que muestra la
columna con la suma
total de todas las
cantidades
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 46
Ejercicios de ROLLUP GROUPING y CUBE
Ejemplo 68
Realizar una consulta que resuma la cantidad de artiacuteculos pedidos por cada iacutendice de producto y
nuacutemero de pedido Realizando un caacutelculo acumulativo
select productid as [PRODUCTO] orderid as [Nordm PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] group by productid orderid with rollup order by productid orderid
PRODUCTO Nordm 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
hellip
Ejemplo 69
Modificacioacuten al ejercicio anterior Realizar el mismo resumen pero uacutenicamente para el producto
cuyo id es 50
select productid as [PRODUCTO] orderid as [Nordm PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] where productid = 50 group by productid orderid with rollup order by productid ordered
PRODUCTO Nordm 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
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 47
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 modificacioacuten 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 [Nordm PEDIDO] grouping(orderid) as [GRUPO PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] where productid = 50 group by Productidorderid with cube order by productidorderid
PRODUCTO GRUPO PRODUCTO Nordm PEDIDO GRUPO PEDIDO SUMA TOTAL
----------- -------------- ----------- ------------ -----------
NULL 1 NULL 1 235
NULL 1 10350 0 15
NULL 1 10383 0 15
NULL 1 10429 0 40
NULL 1 10465 0 25
NULL 1 10637 0 25
NULL 1 10729 0 40
NULL 1 10751 0 20
NULL 1 10920 0 24
NULL 1 10948 0 9
NULL 1 11072 0 22
50 0 NULL 1 235
50 0 10350 0 15
50 0 10383 0 15
50 0 10429 0 40
50 0 10465 0 25
50 0 10637 0 25
50 0 10729 0 40
50 0 10751 0 20
50 0 10920 0 24
50 0 10948 0 9
50 0 11072 0 22
(22 filas afectadas)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 48
Obtencioacuten de resuacutemenes 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 maacutes columnas y
luego efectuar alguna operacioacuten de resumen sobre cada grupo asiacute generado
La diferencia con GROUP BY es que permite mostrar informacioacuten mas detallada de cada grupo
Ejemplo 71
Lista de pedidos que muestre por coacutedigo de pedido la cantidad de productos vendidos por cada uno
de ellos
select Idpedidoidproductopreciounidadcantidad[Sub Total]=sum(PreciounidadCantidad) from
[detalles de pedidos] group by Idpedidoidproductopreciounidadcantidad order by IdPedido compute
sum(Cantidad) by IdPedido
EJERCICIOS CON COMPUTE
Ejemplo 72
Generar un resumen de subtotales en una consulta que devuelva el nuacutemero de pedido la cantidad
pedida para todos los orderid 11070
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 49
Select Orderid as [Nordm PEDIDO] Quantity AS [CANTIDAD] From [Order Details] where orderid gt= 11070 order by Orderid compute Sum(quantity) by orderid compute sum(quantity)
Nordm PEDIDO CANTIDAD
----------- --------
11070 40
11070 20
11070 30
11070 20
sum
===========
110
sum
===========
110
(6 filas afectadas)
Ejemplo 73
Generar un resumen con calculo de subtotales similar al anterior pero para los orderid 11075 y
11076
Select Orderid as [Nordm PEDIDO] Quantity as [CANTIDAD] From [Order Details] where orderid = 11075 or orderid = 11076 order by Orderid compute Sum(quantity) by ordered Nordm PEDIDO CANTIDAD ----------- -------- 11075 10 11075 30 11075 2 sum =========== 42 Nordm PEDIDO CANTIDAD ----------- -------- 11076 20 11076 20 11076 10
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 50
sum =========== 50 (8 filas afectadas)
Ejemplo 74
Modificacioacuten al ejercicio anterior Agregar la cantidad total y la cantidad promedio al final del
informe
Select Orderid as [Nordm 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)
Nordm PEDIDO CANTIDAD
----------- --------
11075 10
11075 30
11075 2
sum
===========
42
Nordm PEDIDO CANTIDAD
----------- --------
11076 20
11076 20
11076 10
sum
===========
50
sum
===========
92
avg
===========
15
(10 filas afectadas)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 51
Ejemplo 75
Seleccionar de forma agrupada por tipo todos los tipos la suma de los precios y la suma del
anticipo de la tabla tiacutetulos
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 199900 50000000
business 119500 50000000
business 29900 101250000
business 199900 50000000
sum
=====================
549200
avg
=====================
62812500
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
mod_cook 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
avg
=====================
75000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
popular_comp 229500 70000000
popular_comp 200000 80000000
popular_comp NULL NULL
sum
=====================
429500
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 52
avg
=====================
75000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
psychology 215900 70000000
psychology 109500 22750000
psychology 70000 60000000
psychology 199900 20000000
psychology 79900 40000000
sum
=====================
675200
avg
=====================
42550000
(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 ademaacutes 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 199900 50000000
business 119500 50000000
business 29900 101250000
business 199900 50000000
sum
=====================
549200
sum
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 53
=====================
251250000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
mod_cook 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
popular_comp 229500 70000000
popular_comp 200000 80000000
popular_comp NULL NULL
sum
=====================
429500
sum
=====================
150000000
(30 filas afectadas)
Ejemplo 77
Generar un informe que muestre la suma de los precios de los libros de psicologiacutea 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 109500
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 54
psychology 0736 70000
psychology 0736 199900
psychology 0736 79900
sum
=====================
459300
TIPO CODIGO EDITOR PRECIO
------------ ------------- ---------------------
psychology 0877 215900
sum
=====================
215900
(7 filas afectadas)
Ejemplo 78
Generar un informe que obtenga la suma de los precios de todos los libros de psicologiacutea asiacute como la
suma de los precios de los libros de psicologiacutea 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 109500
psychology 0736 70000
psychology 0736 199900
psychology 0736 79900
sum
=====================
459300
TIPO CODIGO EDITOR PRECIO
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 55
------------ ------------- ---------------------
psychology 0877 215900
sum
=====================
215900
sum
=====================
675200
(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 199900 0000
mod_cook 0877 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO CODIGO EDITOR PRECIO ANTICIPO
------------ ------------- --------------------- ---------------------
trad_cook 0877 119500 40000000
trad_cook 0877 209500 70000000
trad_cook 0877 149900 80000000
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 56
sum
=====================
478900
sum
=====================
190000000
(9 filas afectadas)
Ejemplo 80
Generar un informe que muestre todos los tiacutetulos precio y anticipo de aquellos tiacutetulos que tengan
un precio superior a 20 doacutelares Ofreceraacute tambieacuten la suma total del precio y del anticipo
Select title as [TITULO] price as [PRECIO] advance as [ANTICIPO] From titles where price gt 20 order by title compute sum(price) compute sum(advance)
TITULO PRECIO ANTICIPO
-------------------------------------------------------------------------------- --------------------- -------------
--------
But Is It User Friendly 229500 70000000
Computer Phobic AND Non-Phobic Individuals Behavior Variations 215900
70000000
Onions Leeks and Garlic Cooking Secrets of the Mediterranean 209500
70000000
sum
=====================
654900
sum
=====================
210000000
(5 filas afectadas)
Ejemplo 81
Generar un informe que muestre el precio el tipo y el nuacutemero de editor de la tabla titles de todos
aquellas obras que pertenezcan la categoriacutea de ldquobusinessrdquo Ademaacutes apareceraacute la suma total de
precios y el maacuteximo pub_id de esta seleccioacuten
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 57
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 29900 0736
business 199900 1389
business 199900 1389
business 119500 1389
sum
=====================
549200
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 Mostraraacute la suma de los precios y los anticipos por tipo y luego calcularaacute 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 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
trad_cook 209500 70000000
trad_cook 119500 40000000
trad_cook 149900 80000000
sum
=====================
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 58
478900
sum
=====================
190000000
sum
=====================
708700
sum
=====================
340000000
(11 filas afectadas)
Eliminacioacuten 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 iquestA que precio se ah vendido los productos
Select IdProducto Preciounidad from [Detalles de pedidos] order by IdProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 59
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 mayoriacutea de las consultas que se hacen en una base de datos requiere que se lean datos procedentes
de dos oacute maacutes tablas
INNER JOIN- son las filas que satisfacen la condicioacuten de la combinacioacuten
En la siguiente sentencia SQL enlaza 2 tablas la tabla clientes y la tabla pedidos en esta ejemplo me
muestra los campos nombre compantildeiacutea y el campo idpedido
La uacutenica condicioacuten es que las 2 tablas tengan un campo en comuacuten
Ejemplo 84
select clientesNombreCompantildeiacuteapedidosidpedido from clientes inner join pedidos on
clientesidcliente=pedidosidcliente
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 60
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 pedidosIdPedido pedidosIdCliente 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 pedidosIdPedido pedidosIdCliente order
by pedidos IdPedido
CROSS JOIN
Un Cross Join es la consulta correlacionada que combine cada una de las filas de una de las tablas con
todas las filas de la otra tabla
No es necesario que exista una columna en comuacuten para ejecutar el Cross Join
Ejemplo 86
La siguiente consulta combina cada una de las filas de la tabla categoriacuteas con cada una de las filas de la
tabla productos
select productosNombreProductocategoriasNombrecategoria from productos cross join categorias
order by productosNombreProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 61
Ejercicios de consultas Muacuteltiples
Ejemplo 87
Mostrar el pedidos completo con el id=10248
Select pedidosIdPedido pedidosIdCliente
Total=sum ([detalles de pedidos]Preciounidad[detalles de pedidos]Cantidad)
From [detalles de pedidos] inner join pedidos on
[Detalles de pedidos]IdPedido=pedidosIdPedido where pedidosIdPedido=10248
Group by pedidosIdPedido pedidosIdCliente
Ejemplo 88
1 Mostrar la cantidad de productos por categoriacutea
Select CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
[Total de Producto]=sum (UnidadesEnExistencia) from Categoriacuteas inner join
Productos on CategoriacuteasIdCategoriacutea=productosIdCategoriacutea
Group by CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 62
Ejemplo 89
Calcular cuantas ventas tiene cada uno de los vendedores
Select empleadosIdEmpleado empleadosNombre empleadosApellidos
[Total de ventas]=count (pedidosIdPedido) from empleados
Inner join Pedidos on empleadosIdEmpleado=pedidosIdEmpleado
Group by empleadosIdEmpleado empleadosNombre empleadosApellidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 63
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 despueacutes saca la de Plantilla
Recomendaciones a la hora de usar las combinaciones
Combinar tablas en funcioacuten de claves principales y externas
Limite el nuacutemero de tablas de las combinaciones
Select Apellido
Oficio as
OFICIOFUNCION
salario from emp
UNION
Select Apellido
Funcion Salario from
Plantilla
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 64
SUBCONSULTAS
Es una SELECT anidada en una instruccioacuten INSERT DELETE SELECT o UPDATE
Como una tabla derivada
Select eemp_no as Numero
eApellido
from (select emp_no apellido from emp) as e
Como una expresioacuten
Select emp_no as [Numero]
Apellido
Salario
(select avg(Salario) from emp)
as Diferencia
from emp
where oficio = Empleado
Para correlacionar datos
- Expresioacuten dinaacutemica que cambia en cada fila de una consulta externa
- Es una combinacioacuten entre la subconsulta y la fila de la consulta externa
- Dividen consultas complejas con dos o maacutes consultas simples relacionadas
Subconsulta correlacionada
Select apellido oficiodept_no
from emp as e
where 20 lt
(select dept_no from dept as d
where edept_no = ddept_no
and ddnombre = Ventas)
SUBCONSULTAS
1 Mostrar el numero de empleado el apellido y la fecha de alta del empleado mas antiguo de la
empresa
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 65
SELECT emp_noapellido
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_noapellido
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 Jimeacutenez
select apellido oficio from emp where
oficio = (select oficio from emp where apellido = JIMENEZ)
4 Queremos saber el apellido oficio salario y nuacutemero 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 gt (select max (salario) from
emp where dept_no = 30)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 66
5 Mostrar el apellido la funcioacuten sala o departamento de todos los empleados que trabajen en la
empresa
select eApellido eOficio as [Cargo en Empresa] ddnombre as [Oficina]
from emp as e
inner join dept as d
on edept_no = ddept_no
union
select pApellido pfuncion snombre
from plantilla as p
inner join sala as s
on phospital_cod = shospital_cod
and psala_cod = ssala_cod
union
select dApellido despecialidad hnombre
from doctor as d
inner join hospital as h
on dhospital_cod = hhospital_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 = lsquoventasrsquo))
order by 2
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 67
8 Mostrar los empleados que tienen mejor salario que la media de los directores no incluyendo al
presidente
Select from emp where salario gt
(select avg (salario) from emp where oficio = DIRECTOR)
and oficio ltgt PRESIDENTE
9 Mostrar el apellido funcioacuten salario y coacutedigo 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 = lsquoENFERMEROrsquo or
funcion = lsquoENFERMERArsquo) and hospital_cod = (select hospital_cod from hospital where nombre =
lsquoSAN CARLOSrsquo)
Select apellido funcion salario hospital_cod from plantilla where
funcion in (ENFERMEROENFERMERA)
and hospital_cod = (select hospital_cod from hospital
where nombre = SAN CARLOS)
10 Visualizar los datos de los hospitales que tienen personal (Doctores) de cardiologiacutea
Select from hospital where hospital_cod in (select hospital_cod from doctor where
especialidad = lsquoCardiologiacutearsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 68
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 = lsquoPROVINCIALrsquo or
nombre= lsquoGENERALrsquo)
12 Mostrar el apellido de los enfermos que nacieron antes que el Sentildeor Miller
Select apellido from enfermo where Fecha_nac lt (select fecha_nac from enfermo where
apellido = lsquoMILLER Brsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 69
Simulacion de una clausula JOIN
Vamos a mostrar los oficios que estaacuten en maacutes de un departamento
Select distinct e1oficio from emp as e1
where e1oficio in(Select e2oficio from emp as e2
where e1dept_no ltgt e2dept_no)
Se debe utilizar antes una combinacioacuten que una subconsulta la combinacioacuten seriacutea asi dando los
mismos resultados
Select distinct e1Oficio from emp as e1
inner join emp as e2
on e1oficio = e2oficio
where e1dept_no ltgt e2dept_no
Estos son los dos oficios que estaacuten en
maacutes de un departamento
Subconsulta para simular una clausula HAVING
select e1apellidoe1oficio e1salario
from emp as e1
where e1salario gt
(select avg(e2salario) from emp as e2
where e1oficio = e2oficio)
Esta es la consulta utilizando el HAVING que es la que deberiacuteamos utilizar antes que una
subconsulta de simulacioacuten HAVING
SELECT e1apellidoe1oficio e1salario
FROM emp AS e1
INNER JOIN emp AS e2
ON e1oficio = e2oficio
GROUP BY e1oficio e1salarioe1apellido
HAVING e1salario gt AVG (e2salario)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 70
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 30
Getdate
Select getdate () Funcioacuten que recupera la fecha actual del sistema
Convert Cast
Convierten expliacutecitamente una expresioacuten de un tipo de datos en otro CAST y CONVERT
proporcionan funciones similares
Convert (Tipodedatosdestino Origen Estilo)
o Tipodedatosdestino Siempre ha de ser tipo caraacutecter
o Origen Puede ser tipo fecha numeacuterico o moneda
o Estilo Opcional Es un coacutedigo que indica el formato en el que devuelve la cadena de
caracteres
Sintaxis
Convert (TipoDato Dato)
Cast (Dato as TipoDato)
Ejemplo
declare n intpalabra nvarchar(10)
set n = 1
set palabra =Nuacutemero
print convert(nvarchar(2)n) + + palabra
print cast(n as nvarchar(2)) + + palabra
while (nlt11)
begin
print convert(nvarchar(2)n) + + palabra
print cast(n as nvarchar(2)) + + palabra
set n = n + 1
end
DateName
Devuelve una cadena de caracteres que representa la parte de la fecha especificada de la fecha
especificada
Los caacutelculos 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
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 31
Ejemplo 46
Select IdPedido DateName (week FechaPedido) as Numero de Semana from Pedidos where IdPedido
= 1035251
Ejemplo 47
Select IdPedido datename (weekday FechaPedido) as Diacutea De Semana from Pedidos where IdPedido =
10352 Martes
Horas
Ejemplo 48
Select IdPedido datename (mi FechaPedido) as Minutos from Pedidos where IdPedido = 10352
Ejemplo 49
Select DateName (minute getdate ()) as minutos
Ejemplo 50
Select DateName (Hh FechaPedido) as hora from Pedidos where IdPedido = 10352
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 32
Ejemplo 51
Select DateName (Hour getdate ()) as hora--gt18
Ejemplo 52
Select DateName (Hh getdate ()) as hora--gt18
DatePart
Devuelve la parte de la fecha u hora indicada Sintaxis
Datepart (Valor devolver fecha)
Ejemplo 53
Select IdPedido datepart (mm FechaPedido) as Mes from Pedidos where IdPedido = 10352
Ejemplo 54
Select Datepart (Hh getdate ()) as Hora--gt17
Ejemplo 55
Select Datepart (mi getdate ()) as Minutos--gt54
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 33
Nombres de Fechas
Day (fecha)
Devuelve UN INT equivale a Datepart
Select day (getdate ()) as diacutea--gt6 (diacutea en la que se ejecuta la sentencia)
Select Datepart (dd getdate ()) --gt6 (diacutea en la que se ejecuta la sentencia)
Select Month (getdate ()) --gt1 (Mes en la que se ejecuta la sentencia)
Select Datepart (mm getdate ()) --gt1 (Mes en la que se ejecuta la sentencia)
Select Year (getdate ()) --gt2008 (Antildeo en la que se ejecuta la sentencia)
Ejemplo 56
Select year (FechaPedido) as Antildeo from Pedidos where IdPedido = 10352
Ejemplo 57
Select datediff (yyyy FechaPedido getdate()) as Dia from Pedidos where IdPedido = 10352
DateAdd
DateAdd (Datepart number date)
Antildeade un nuacutemero a la fecha puesta
DatePart es el formato de lo que queremos antildeadir
Number es el nuacutemero que queremos incrementar la fecha expuesta
Select convert (datetime1-1-02)
Select dateadd (dd 71-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 comparacioacuten y el tipo de dato
que nos devolveraacute antildeos diacuteas minutos etc
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 34
Ejemplo 58
Select datediff (yyyy FechaPedido getdate ()) as Dia from Pedidos where IdPedido = 10352
Ejercicios de funciones de Fecha
Ejemplo 59
Lista de pedidos emitidos en febrero de 1996
Select from Pedidos where month (FechaPedido) =2 and year (FechaPedido) =1996
Ejemplo 60
Lista de Pedidos mostrando la diferencia en diacuteas entre la fecha del pedido y la fecha de Envioacute
Select IdPedido FechaPedido FechaEnviacuteo diacuteas =datediff (day FechaPedido FechaEnviacuteo) from
pedidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 35
Ejemplo 61
Genere un listado de pedidos en el que la fecha del pedido se muestre en el formato nombre del
diacutea diacutea de mes antildeo
Select IdPedido FechaPedido Fecha=datename (dw IdPedido)+ + str (datepart (dd
IdPedido) 2)+ de +datename (mm IdPedido)+ de +str (datepart (yy IdPedido) 4) from
pedidos
Ejemplo 62
Mostrar de la tabla pedidos la fecha de pedidos en fecha corta
Select IdPedido convert (varchar (30) FechaPedido 106) as [Fecha Corta] from pedidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 36
FUNCIONES MATEMATICAS
ABS
Es el valor Absoluto
Select ABS (-4) as VALOR ABSOLUTO--gt4
CEILING
Devuelve el entero maacutes pequentildeo mayor o igual que la expresioacuten numeacuterica dada
Select CEILING (54) as CEILING--6
FLOOR
Devuelve el entero maacutes grande menor o igual que la expresioacuten numeacuterica dada
Select FLOOR (5) as FLOOR--gt5
POWER
Devuelve el valor de la expresioacuten indicada elevada a la potencia especificada
Select POWER (3 2) as 3 ELEVADO A 2--gt9
RAND
Devuelve un valor float aleatorio de 0 a 1
Las llamadas repetitivas de RAND() en una uacutenica consulta produciraacuten el mismo valor
Select RAND(6) as ALEATORIO--071368515806921451
Select RAND(6) as ALEATORIO--071368515806921451
Select RAND(4) as ALEATORIO--07136478921266981
Rand sobre los milisegundos actuales
Select RAND(DATEPART(msGETDATE())) as ALEATORIO--gt071443047691954253
Select RAND(999999999)--gt068504257551273573
ROUND
Devuelve una expresioacuten numeacuterica redondeada a la longitud o precisioacuten especificada
Round (Nuacutemero Redondeo del Nuacutemero)
ROUND siempre devuelve un valor Si length es un valor negativo y mayor que el nuacutemero de
diacutegitos anteriores al separador decimal ROUND devuelve 0
Select ROUND (1234567 2) --gt1234600
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 37
Select ROUND (1234567-2) --gt1000000
Select ROUND (1234567 0) --gt1230000
Select ROUND (1234567-3) ---gt0
SIGN
Devuelve el signo positivo (+1) cero (0) o negativo (-1) de la expresioacuten especificada
Dice el valor negativo positivo o neutro (0) del valor especificado
Select SIGN (-3) --gt-1
Select SIGN (3) --gt1
Select SIGN (0) --gt0
SQUARE
Devuelve el cuadrado de la expresioacuten especificada
Select SQUARE (4) as bdquoCuadrado‟--gt160
SQRT
Devuelve la raiacutez cuadrada de la expresioacuten especificada
Select SQRT (4) as [RAIZ CUADRADA] --gt20
FUNCIONES DE CADENA
ASCII
Devuelve el coacutedigo ASCII del caraacutecter maacutes a la izquierda de una expresioacuten de caracteres
Select ASCII(A)--gt65
Select ASCII(a)--gt97
Select ascii(aula)--gt97
CHAR
Una funcioacuten de cadena que convierte un coacutedigo ASCII int en un caraacutecter
select char(65)--gtA
select char(97)--gta
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 38
CHARINDEX
Devuelve la posicioacuten inicial de la expresioacuten especificada en una cadena de caracteres
CHARINDEX (expression1 expression2 [ start_location])
Argumentos
expression1
Es una expresioacuten que contiene la secuencia de caracteres que se desea buscar
Expression1 es una expresioacuten del tipo de cadenas cortas de caracteres
Expression2
Es una expresioacuten normalmente una columna
en la que se busca la cadena especificada
Expression2 es de la categoriacutea del tipo de datos cadena de caracteres
start_location
Es la posicioacuten del caraacutecter de expression2 en el que se empieza la buacutesqueda de expression1
Si no se especifica start_location es un nuacutemero negativo o es cero
la buacutesqueda empieza al principio de la cadena expression2
Si expression1 no se encuentra en expression2 CHARINDEX devuelve 0
Si alguno de los dos es null devuelve null
Select charindex (ciemurcielago) --gt4
Select charindex (ciemurcielago 2) --gt4
Select charindex (ciemurcielago 5) --gt0
Select charindex (ciemurcielago-6) --gt4
LEFT
Devuelve la parte de una cadena de caracteres que comienza en un nuacutemero de caracteres
especificado a partir de la izquierda
Select left (murcielago5) --gtmurci
RIGHT
Devuelve la parte de una cadena de caracteres que
Comienza en el nuacutemero de caracteres especificado
En integer_expression a partir de la derecha
Select right (hola que tal5) --gte tal
LEN
Cuenta el nuacutemero de caracteres que se incluyen en la cadena
Select len (murcieacutelago) --gt10
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 39
LOWER
Convierte a Minuacutesculas la cadena especificada
Select lower (MurcIELaGO) as [minusculas] --gtmurcielago
UPPER
Convierte a Mayuacutesculas la cadena especificada
Select upper (murcielago) as [MAYUSCULAS] --gtMURCIELAGO
RTRIM y LTRIM
Elimina los espacios que existen a la izquierda y a la derecha respectivamente
Select Rtrim ( murcieacutelago ) AS [SIN ESPACIOS] --gtmurcieacutelago
Select Ltrim ( murcieacutelago ) AS [SIN ESPACIOS] --gtmurcieacutelago
Select ltrim(rtrim( hola ))+
REPLACE
Reemplaza por una tercera expresioacuten todas las apariciones
de la segunda expresioacuten de cadena proporcionada en la primera expresioacuten de cadena
Select replace (hola que tal estasaA) --gtholA que tAl estAs
Select replace (buenos dias que tal estasuentildentildentilde) --gtbntildentildentildenos diasqntildentildentilde tal estas
SPACE
Coloca el nuacutemero de espacios que se le indiquen para entre una cadena de caracteres
Select hola+space(5)+que tal--gthola que tal
SUBSTRING
Devuelve parte de una expresioacuten de caracteres binaria de texto o de imagen
Sintaxis
SUBSTRING (Expresioacuten Comienzo Duracioacuten)
Argumentos
Expresioacuten
Es una cadena de caracteres cadena binaria texto imagen
Columna o expresioacuten que incluye una columna
No deben usarse expresiones que incluyan funciones de agregado
Start
Es un entero que especifica el punto en que comienza la subcadena
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 40
Length
Es un entero que especifica la longitud de la subcadena
(El nuacutemero de caracteres o bytes que se devuelven)
Select substring (murcielago 3 5) --gtrciel
Select substring (murcielago 3 len (murcielago)) --gtrciel
REVERSE
Devuelve invertida una expresioacuten de caraacutecter
Select reverse (hola)
REPLICATE
Repite una expresioacuten de caracteres un nuacutemero especificado de veces
Select replicate (murcielago 5)
Replicate replicate replicate replicate replicate
STUFF
Elimina el nuacutemero de caracteres especificados e insertados
Otro conjunto de caracteres en un punto de inicio indicado
Select STUFF (Murcieacutelago 2 3 ijklmn) Mijklmnielago
FUNCIONES DE SISTEMA
- APP_NAME () Devuelve el nombre de la aplicacioacuten actual
Select app_name () as [Nombre de la aplicacion]
- DATALENGTH (Expresioacuten) Devuelve un entero que es numero de bites necesarios para
representar esa expresioacuten int
Select datalength (Ninoni) as [Numero de bites]
- ISDATE (Expresioacuten) Dice si la expresioacuten es una fecha o no Devuelve 1 si la expresioacuten es
una fecha y 0 si no es una fecha
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 41
Select isdate (121001) as [Validacioacuten Fecha]
- ISNUMERIC (Expresion) Dice si la expresioacuten es un numero o no Devuelve 1 si la
expresioacuten es un nuacutemero y 0 si la expresioacuten no es nuacutemero
Select isnumeric (ddd) as [Validacion Numero]
- ISNULL (Expresioacuten ExpresionDevuelta) Si la expresioacuten es nula te devuelve la Expresioacuten
Devuelta y si no devuelve la primera Expresioacuten
Select isnull (nullNo nulo) as [Es Nulo]
- PARSENAME (bdquoNombreObjeto‟ ParteNombre)
ParteNombre es un valor de tipo Int que coge unos determinados valores del
NombreObjeto
1 Objeto
2 Propietario
3 Base de Datos
4 Servidor
Select parsename (saposeidondbopedidos1) as [Parte Expresioacuten]
Select parsename (saposeidondbopedidos 2) as [Parte Expresioacuten]
Select parsename (saposeidondbopedidos3) as [Parte Expresioacuten]
Select parsename ( saposeidondbopedidos 4) as [Parte Expresioacuten]
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 42
- SYSTEM_USER Devuelve el usuario del sistema actual
Depende de la autentificacioacuten con la que te hayas conectado
Select system_user as [Usuario conectado]
- USER_NAME() Devuelve el nombre del usuario actual
Select user_name ()
- COALESCE (expresioacuten1 expresioacuten2 )
Devuelve la primera expresioacuten no NULL
Si todos son NULL devuelve NULL
Select coalesce (PrecioUnidad Cantidad) from [detalles de Pedidos] Si el PrecioUnidad es nulo
devolveraacute la Cantidad y si los dos son nulos devolveraacute un campo Null
PROCEDIMIENTOS PARA AGRUPAR Y RESUMIR DATOS
En el examen de certificacioacuten 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 usaraacute la base de datos indicada Ejemplo Ponemos
en el analizador de consultas lo siguiente
Use Northwind
Select from [Order Details]
[Order Details]
Esta tabla perteneciente a la Northwind se encarga de manejar los pedidos
Order Id Nordm de Pedido
Producto Id Nordm de Producto
Ambos campos son Primary Key con lo que no puede haber una combinacioacuten de ambos campos que sea
igual
OrderId ProductId
1 A
1 B
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 43
1 C
2 A
3 C
Es decir en este caso no podriacutea existir una nueva combinacioacuten ldquo1 Ardquo o ldquo2 Ardquo
Quantity Es la cantidad del producto del pedido
ROLLUP
Se usa para presentar resuacutemenes de datos A de usarse junto con la clausula group by lo que hace es
realizar un resumen de los campos incluidos en el rollup
Ejemplo 63
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
Group by ProductID OrderID
with Rollup
Order by ProductID OrderID
Este ejemplo suma todas las cantidades y mediante
rollup muestra una fila con la suma de todas las
cantidades de cada producto y ademaacutes otra fila con la
suma de todas las cantidades de todos los productos El
resultado de este ejemplo seriacutea el que muestra la
imagen
Ejemplo 64
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
where orderid lt 10250
Group by ProductID OrderID
with Rollup
Order by ProductID OrderID
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 44
CUBE
Al igual que Rollup realiza resuacutemenes de campos agrupados Pero en este caso muestra un resumen con
cada combinacioacuten posible de los campos agrupados
Ejemplo 65
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
where orderid lt 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 combinacioacuten posible entre el
productid y el orderid
GROUPING
Indica si el resultado de un campo es el que hay en la propia tabla o se ha introducido mediante una
claacuteusula de resumen es decir para saber por ejemplo si un ldquoNullrdquo 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 lt 10250 Group by ProductID
OrderID with Cube Order by ProductID OrderID
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 45
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
Ponieacutendole un alias al
grouping saldriacutea el nombre
de columna que le
indiquemos
COMPUTE
Realiza un resumen en una columna aparte con el resultado de la funcioacuten de agregado indicada Su
formato seriacutea Compute funcioacuten(campo) No se puede utilizar en aplicaciones cliente servidor es una
clausula meramente informativa Tampoco se le pueden poner alias a los resuacutemenes
Ejemplo 67
Select Productid Orderid Quantity From [Order Details] order by ProductID Orderid compute
Sum(quantity)
Vemos que muestra la
columna con la suma
total de todas las
cantidades
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 46
Ejercicios de ROLLUP GROUPING y CUBE
Ejemplo 68
Realizar una consulta que resuma la cantidad de artiacuteculos pedidos por cada iacutendice de producto y
nuacutemero de pedido Realizando un caacutelculo acumulativo
select productid as [PRODUCTO] orderid as [Nordm PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] group by productid orderid with rollup order by productid orderid
PRODUCTO Nordm 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
hellip
Ejemplo 69
Modificacioacuten al ejercicio anterior Realizar el mismo resumen pero uacutenicamente para el producto
cuyo id es 50
select productid as [PRODUCTO] orderid as [Nordm PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] where productid = 50 group by productid orderid with rollup order by productid ordered
PRODUCTO Nordm 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
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 47
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 modificacioacuten 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 [Nordm PEDIDO] grouping(orderid) as [GRUPO PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] where productid = 50 group by Productidorderid with cube order by productidorderid
PRODUCTO GRUPO PRODUCTO Nordm PEDIDO GRUPO PEDIDO SUMA TOTAL
----------- -------------- ----------- ------------ -----------
NULL 1 NULL 1 235
NULL 1 10350 0 15
NULL 1 10383 0 15
NULL 1 10429 0 40
NULL 1 10465 0 25
NULL 1 10637 0 25
NULL 1 10729 0 40
NULL 1 10751 0 20
NULL 1 10920 0 24
NULL 1 10948 0 9
NULL 1 11072 0 22
50 0 NULL 1 235
50 0 10350 0 15
50 0 10383 0 15
50 0 10429 0 40
50 0 10465 0 25
50 0 10637 0 25
50 0 10729 0 40
50 0 10751 0 20
50 0 10920 0 24
50 0 10948 0 9
50 0 11072 0 22
(22 filas afectadas)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 48
Obtencioacuten de resuacutemenes 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 maacutes columnas y
luego efectuar alguna operacioacuten de resumen sobre cada grupo asiacute generado
La diferencia con GROUP BY es que permite mostrar informacioacuten mas detallada de cada grupo
Ejemplo 71
Lista de pedidos que muestre por coacutedigo de pedido la cantidad de productos vendidos por cada uno
de ellos
select Idpedidoidproductopreciounidadcantidad[Sub Total]=sum(PreciounidadCantidad) from
[detalles de pedidos] group by Idpedidoidproductopreciounidadcantidad order by IdPedido compute
sum(Cantidad) by IdPedido
EJERCICIOS CON COMPUTE
Ejemplo 72
Generar un resumen de subtotales en una consulta que devuelva el nuacutemero de pedido la cantidad
pedida para todos los orderid 11070
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 49
Select Orderid as [Nordm PEDIDO] Quantity AS [CANTIDAD] From [Order Details] where orderid gt= 11070 order by Orderid compute Sum(quantity) by orderid compute sum(quantity)
Nordm PEDIDO CANTIDAD
----------- --------
11070 40
11070 20
11070 30
11070 20
sum
===========
110
sum
===========
110
(6 filas afectadas)
Ejemplo 73
Generar un resumen con calculo de subtotales similar al anterior pero para los orderid 11075 y
11076
Select Orderid as [Nordm PEDIDO] Quantity as [CANTIDAD] From [Order Details] where orderid = 11075 or orderid = 11076 order by Orderid compute Sum(quantity) by ordered Nordm PEDIDO CANTIDAD ----------- -------- 11075 10 11075 30 11075 2 sum =========== 42 Nordm PEDIDO CANTIDAD ----------- -------- 11076 20 11076 20 11076 10
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 50
sum =========== 50 (8 filas afectadas)
Ejemplo 74
Modificacioacuten al ejercicio anterior Agregar la cantidad total y la cantidad promedio al final del
informe
Select Orderid as [Nordm 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)
Nordm PEDIDO CANTIDAD
----------- --------
11075 10
11075 30
11075 2
sum
===========
42
Nordm PEDIDO CANTIDAD
----------- --------
11076 20
11076 20
11076 10
sum
===========
50
sum
===========
92
avg
===========
15
(10 filas afectadas)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 51
Ejemplo 75
Seleccionar de forma agrupada por tipo todos los tipos la suma de los precios y la suma del
anticipo de la tabla tiacutetulos
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 199900 50000000
business 119500 50000000
business 29900 101250000
business 199900 50000000
sum
=====================
549200
avg
=====================
62812500
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
mod_cook 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
avg
=====================
75000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
popular_comp 229500 70000000
popular_comp 200000 80000000
popular_comp NULL NULL
sum
=====================
429500
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 52
avg
=====================
75000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
psychology 215900 70000000
psychology 109500 22750000
psychology 70000 60000000
psychology 199900 20000000
psychology 79900 40000000
sum
=====================
675200
avg
=====================
42550000
(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 ademaacutes 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 199900 50000000
business 119500 50000000
business 29900 101250000
business 199900 50000000
sum
=====================
549200
sum
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 53
=====================
251250000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
mod_cook 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
popular_comp 229500 70000000
popular_comp 200000 80000000
popular_comp NULL NULL
sum
=====================
429500
sum
=====================
150000000
(30 filas afectadas)
Ejemplo 77
Generar un informe que muestre la suma de los precios de los libros de psicologiacutea 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 109500
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 54
psychology 0736 70000
psychology 0736 199900
psychology 0736 79900
sum
=====================
459300
TIPO CODIGO EDITOR PRECIO
------------ ------------- ---------------------
psychology 0877 215900
sum
=====================
215900
(7 filas afectadas)
Ejemplo 78
Generar un informe que obtenga la suma de los precios de todos los libros de psicologiacutea asiacute como la
suma de los precios de los libros de psicologiacutea 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 109500
psychology 0736 70000
psychology 0736 199900
psychology 0736 79900
sum
=====================
459300
TIPO CODIGO EDITOR PRECIO
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 55
------------ ------------- ---------------------
psychology 0877 215900
sum
=====================
215900
sum
=====================
675200
(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 199900 0000
mod_cook 0877 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO CODIGO EDITOR PRECIO ANTICIPO
------------ ------------- --------------------- ---------------------
trad_cook 0877 119500 40000000
trad_cook 0877 209500 70000000
trad_cook 0877 149900 80000000
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 56
sum
=====================
478900
sum
=====================
190000000
(9 filas afectadas)
Ejemplo 80
Generar un informe que muestre todos los tiacutetulos precio y anticipo de aquellos tiacutetulos que tengan
un precio superior a 20 doacutelares Ofreceraacute tambieacuten la suma total del precio y del anticipo
Select title as [TITULO] price as [PRECIO] advance as [ANTICIPO] From titles where price gt 20 order by title compute sum(price) compute sum(advance)
TITULO PRECIO ANTICIPO
-------------------------------------------------------------------------------- --------------------- -------------
--------
But Is It User Friendly 229500 70000000
Computer Phobic AND Non-Phobic Individuals Behavior Variations 215900
70000000
Onions Leeks and Garlic Cooking Secrets of the Mediterranean 209500
70000000
sum
=====================
654900
sum
=====================
210000000
(5 filas afectadas)
Ejemplo 81
Generar un informe que muestre el precio el tipo y el nuacutemero de editor de la tabla titles de todos
aquellas obras que pertenezcan la categoriacutea de ldquobusinessrdquo Ademaacutes apareceraacute la suma total de
precios y el maacuteximo pub_id de esta seleccioacuten
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 57
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 29900 0736
business 199900 1389
business 199900 1389
business 119500 1389
sum
=====================
549200
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 Mostraraacute la suma de los precios y los anticipos por tipo y luego calcularaacute 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 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
trad_cook 209500 70000000
trad_cook 119500 40000000
trad_cook 149900 80000000
sum
=====================
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 58
478900
sum
=====================
190000000
sum
=====================
708700
sum
=====================
340000000
(11 filas afectadas)
Eliminacioacuten 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 iquestA que precio se ah vendido los productos
Select IdProducto Preciounidad from [Detalles de pedidos] order by IdProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 59
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 mayoriacutea de las consultas que se hacen en una base de datos requiere que se lean datos procedentes
de dos oacute maacutes tablas
INNER JOIN- son las filas que satisfacen la condicioacuten de la combinacioacuten
En la siguiente sentencia SQL enlaza 2 tablas la tabla clientes y la tabla pedidos en esta ejemplo me
muestra los campos nombre compantildeiacutea y el campo idpedido
La uacutenica condicioacuten es que las 2 tablas tengan un campo en comuacuten
Ejemplo 84
select clientesNombreCompantildeiacuteapedidosidpedido from clientes inner join pedidos on
clientesidcliente=pedidosidcliente
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 60
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 pedidosIdPedido pedidosIdCliente 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 pedidosIdPedido pedidosIdCliente order
by pedidos IdPedido
CROSS JOIN
Un Cross Join es la consulta correlacionada que combine cada una de las filas de una de las tablas con
todas las filas de la otra tabla
No es necesario que exista una columna en comuacuten para ejecutar el Cross Join
Ejemplo 86
La siguiente consulta combina cada una de las filas de la tabla categoriacuteas con cada una de las filas de la
tabla productos
select productosNombreProductocategoriasNombrecategoria from productos cross join categorias
order by productosNombreProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 61
Ejercicios de consultas Muacuteltiples
Ejemplo 87
Mostrar el pedidos completo con el id=10248
Select pedidosIdPedido pedidosIdCliente
Total=sum ([detalles de pedidos]Preciounidad[detalles de pedidos]Cantidad)
From [detalles de pedidos] inner join pedidos on
[Detalles de pedidos]IdPedido=pedidosIdPedido where pedidosIdPedido=10248
Group by pedidosIdPedido pedidosIdCliente
Ejemplo 88
1 Mostrar la cantidad de productos por categoriacutea
Select CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
[Total de Producto]=sum (UnidadesEnExistencia) from Categoriacuteas inner join
Productos on CategoriacuteasIdCategoriacutea=productosIdCategoriacutea
Group by CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 62
Ejemplo 89
Calcular cuantas ventas tiene cada uno de los vendedores
Select empleadosIdEmpleado empleadosNombre empleadosApellidos
[Total de ventas]=count (pedidosIdPedido) from empleados
Inner join Pedidos on empleadosIdEmpleado=pedidosIdEmpleado
Group by empleadosIdEmpleado empleadosNombre empleadosApellidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 63
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 despueacutes saca la de Plantilla
Recomendaciones a la hora de usar las combinaciones
Combinar tablas en funcioacuten de claves principales y externas
Limite el nuacutemero de tablas de las combinaciones
Select Apellido
Oficio as
OFICIOFUNCION
salario from emp
UNION
Select Apellido
Funcion Salario from
Plantilla
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 64
SUBCONSULTAS
Es una SELECT anidada en una instruccioacuten INSERT DELETE SELECT o UPDATE
Como una tabla derivada
Select eemp_no as Numero
eApellido
from (select emp_no apellido from emp) as e
Como una expresioacuten
Select emp_no as [Numero]
Apellido
Salario
(select avg(Salario) from emp)
as Diferencia
from emp
where oficio = Empleado
Para correlacionar datos
- Expresioacuten dinaacutemica que cambia en cada fila de una consulta externa
- Es una combinacioacuten entre la subconsulta y la fila de la consulta externa
- Dividen consultas complejas con dos o maacutes consultas simples relacionadas
Subconsulta correlacionada
Select apellido oficiodept_no
from emp as e
where 20 lt
(select dept_no from dept as d
where edept_no = ddept_no
and ddnombre = Ventas)
SUBCONSULTAS
1 Mostrar el numero de empleado el apellido y la fecha de alta del empleado mas antiguo de la
empresa
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 65
SELECT emp_noapellido
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_noapellido
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 Jimeacutenez
select apellido oficio from emp where
oficio = (select oficio from emp where apellido = JIMENEZ)
4 Queremos saber el apellido oficio salario y nuacutemero 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 gt (select max (salario) from
emp where dept_no = 30)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 66
5 Mostrar el apellido la funcioacuten sala o departamento de todos los empleados que trabajen en la
empresa
select eApellido eOficio as [Cargo en Empresa] ddnombre as [Oficina]
from emp as e
inner join dept as d
on edept_no = ddept_no
union
select pApellido pfuncion snombre
from plantilla as p
inner join sala as s
on phospital_cod = shospital_cod
and psala_cod = ssala_cod
union
select dApellido despecialidad hnombre
from doctor as d
inner join hospital as h
on dhospital_cod = hhospital_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 = lsquoventasrsquo))
order by 2
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 67
8 Mostrar los empleados que tienen mejor salario que la media de los directores no incluyendo al
presidente
Select from emp where salario gt
(select avg (salario) from emp where oficio = DIRECTOR)
and oficio ltgt PRESIDENTE
9 Mostrar el apellido funcioacuten salario y coacutedigo 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 = lsquoENFERMEROrsquo or
funcion = lsquoENFERMERArsquo) and hospital_cod = (select hospital_cod from hospital where nombre =
lsquoSAN CARLOSrsquo)
Select apellido funcion salario hospital_cod from plantilla where
funcion in (ENFERMEROENFERMERA)
and hospital_cod = (select hospital_cod from hospital
where nombre = SAN CARLOS)
10 Visualizar los datos de los hospitales que tienen personal (Doctores) de cardiologiacutea
Select from hospital where hospital_cod in (select hospital_cod from doctor where
especialidad = lsquoCardiologiacutearsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 68
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 = lsquoPROVINCIALrsquo or
nombre= lsquoGENERALrsquo)
12 Mostrar el apellido de los enfermos que nacieron antes que el Sentildeor Miller
Select apellido from enfermo where Fecha_nac lt (select fecha_nac from enfermo where
apellido = lsquoMILLER Brsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 69
Simulacion de una clausula JOIN
Vamos a mostrar los oficios que estaacuten en maacutes de un departamento
Select distinct e1oficio from emp as e1
where e1oficio in(Select e2oficio from emp as e2
where e1dept_no ltgt e2dept_no)
Se debe utilizar antes una combinacioacuten que una subconsulta la combinacioacuten seriacutea asi dando los
mismos resultados
Select distinct e1Oficio from emp as e1
inner join emp as e2
on e1oficio = e2oficio
where e1dept_no ltgt e2dept_no
Estos son los dos oficios que estaacuten en
maacutes de un departamento
Subconsulta para simular una clausula HAVING
select e1apellidoe1oficio e1salario
from emp as e1
where e1salario gt
(select avg(e2salario) from emp as e2
where e1oficio = e2oficio)
Esta es la consulta utilizando el HAVING que es la que deberiacuteamos utilizar antes que una
subconsulta de simulacioacuten HAVING
SELECT e1apellidoe1oficio e1salario
FROM emp AS e1
INNER JOIN emp AS e2
ON e1oficio = e2oficio
GROUP BY e1oficio e1salarioe1apellido
HAVING e1salario gt AVG (e2salario)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 70
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 31
Ejemplo 46
Select IdPedido DateName (week FechaPedido) as Numero de Semana from Pedidos where IdPedido
= 1035251
Ejemplo 47
Select IdPedido datename (weekday FechaPedido) as Diacutea De Semana from Pedidos where IdPedido =
10352 Martes
Horas
Ejemplo 48
Select IdPedido datename (mi FechaPedido) as Minutos from Pedidos where IdPedido = 10352
Ejemplo 49
Select DateName (minute getdate ()) as minutos
Ejemplo 50
Select DateName (Hh FechaPedido) as hora from Pedidos where IdPedido = 10352
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 32
Ejemplo 51
Select DateName (Hour getdate ()) as hora--gt18
Ejemplo 52
Select DateName (Hh getdate ()) as hora--gt18
DatePart
Devuelve la parte de la fecha u hora indicada Sintaxis
Datepart (Valor devolver fecha)
Ejemplo 53
Select IdPedido datepart (mm FechaPedido) as Mes from Pedidos where IdPedido = 10352
Ejemplo 54
Select Datepart (Hh getdate ()) as Hora--gt17
Ejemplo 55
Select Datepart (mi getdate ()) as Minutos--gt54
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 33
Nombres de Fechas
Day (fecha)
Devuelve UN INT equivale a Datepart
Select day (getdate ()) as diacutea--gt6 (diacutea en la que se ejecuta la sentencia)
Select Datepart (dd getdate ()) --gt6 (diacutea en la que se ejecuta la sentencia)
Select Month (getdate ()) --gt1 (Mes en la que se ejecuta la sentencia)
Select Datepart (mm getdate ()) --gt1 (Mes en la que se ejecuta la sentencia)
Select Year (getdate ()) --gt2008 (Antildeo en la que se ejecuta la sentencia)
Ejemplo 56
Select year (FechaPedido) as Antildeo from Pedidos where IdPedido = 10352
Ejemplo 57
Select datediff (yyyy FechaPedido getdate()) as Dia from Pedidos where IdPedido = 10352
DateAdd
DateAdd (Datepart number date)
Antildeade un nuacutemero a la fecha puesta
DatePart es el formato de lo que queremos antildeadir
Number es el nuacutemero que queremos incrementar la fecha expuesta
Select convert (datetime1-1-02)
Select dateadd (dd 71-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 comparacioacuten y el tipo de dato
que nos devolveraacute antildeos diacuteas minutos etc
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 34
Ejemplo 58
Select datediff (yyyy FechaPedido getdate ()) as Dia from Pedidos where IdPedido = 10352
Ejercicios de funciones de Fecha
Ejemplo 59
Lista de pedidos emitidos en febrero de 1996
Select from Pedidos where month (FechaPedido) =2 and year (FechaPedido) =1996
Ejemplo 60
Lista de Pedidos mostrando la diferencia en diacuteas entre la fecha del pedido y la fecha de Envioacute
Select IdPedido FechaPedido FechaEnviacuteo diacuteas =datediff (day FechaPedido FechaEnviacuteo) from
pedidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 35
Ejemplo 61
Genere un listado de pedidos en el que la fecha del pedido se muestre en el formato nombre del
diacutea diacutea de mes antildeo
Select IdPedido FechaPedido Fecha=datename (dw IdPedido)+ + str (datepart (dd
IdPedido) 2)+ de +datename (mm IdPedido)+ de +str (datepart (yy IdPedido) 4) from
pedidos
Ejemplo 62
Mostrar de la tabla pedidos la fecha de pedidos en fecha corta
Select IdPedido convert (varchar (30) FechaPedido 106) as [Fecha Corta] from pedidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 36
FUNCIONES MATEMATICAS
ABS
Es el valor Absoluto
Select ABS (-4) as VALOR ABSOLUTO--gt4
CEILING
Devuelve el entero maacutes pequentildeo mayor o igual que la expresioacuten numeacuterica dada
Select CEILING (54) as CEILING--6
FLOOR
Devuelve el entero maacutes grande menor o igual que la expresioacuten numeacuterica dada
Select FLOOR (5) as FLOOR--gt5
POWER
Devuelve el valor de la expresioacuten indicada elevada a la potencia especificada
Select POWER (3 2) as 3 ELEVADO A 2--gt9
RAND
Devuelve un valor float aleatorio de 0 a 1
Las llamadas repetitivas de RAND() en una uacutenica consulta produciraacuten el mismo valor
Select RAND(6) as ALEATORIO--071368515806921451
Select RAND(6) as ALEATORIO--071368515806921451
Select RAND(4) as ALEATORIO--07136478921266981
Rand sobre los milisegundos actuales
Select RAND(DATEPART(msGETDATE())) as ALEATORIO--gt071443047691954253
Select RAND(999999999)--gt068504257551273573
ROUND
Devuelve una expresioacuten numeacuterica redondeada a la longitud o precisioacuten especificada
Round (Nuacutemero Redondeo del Nuacutemero)
ROUND siempre devuelve un valor Si length es un valor negativo y mayor que el nuacutemero de
diacutegitos anteriores al separador decimal ROUND devuelve 0
Select ROUND (1234567 2) --gt1234600
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 37
Select ROUND (1234567-2) --gt1000000
Select ROUND (1234567 0) --gt1230000
Select ROUND (1234567-3) ---gt0
SIGN
Devuelve el signo positivo (+1) cero (0) o negativo (-1) de la expresioacuten especificada
Dice el valor negativo positivo o neutro (0) del valor especificado
Select SIGN (-3) --gt-1
Select SIGN (3) --gt1
Select SIGN (0) --gt0
SQUARE
Devuelve el cuadrado de la expresioacuten especificada
Select SQUARE (4) as bdquoCuadrado‟--gt160
SQRT
Devuelve la raiacutez cuadrada de la expresioacuten especificada
Select SQRT (4) as [RAIZ CUADRADA] --gt20
FUNCIONES DE CADENA
ASCII
Devuelve el coacutedigo ASCII del caraacutecter maacutes a la izquierda de una expresioacuten de caracteres
Select ASCII(A)--gt65
Select ASCII(a)--gt97
Select ascii(aula)--gt97
CHAR
Una funcioacuten de cadena que convierte un coacutedigo ASCII int en un caraacutecter
select char(65)--gtA
select char(97)--gta
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 38
CHARINDEX
Devuelve la posicioacuten inicial de la expresioacuten especificada en una cadena de caracteres
CHARINDEX (expression1 expression2 [ start_location])
Argumentos
expression1
Es una expresioacuten que contiene la secuencia de caracteres que se desea buscar
Expression1 es una expresioacuten del tipo de cadenas cortas de caracteres
Expression2
Es una expresioacuten normalmente una columna
en la que se busca la cadena especificada
Expression2 es de la categoriacutea del tipo de datos cadena de caracteres
start_location
Es la posicioacuten del caraacutecter de expression2 en el que se empieza la buacutesqueda de expression1
Si no se especifica start_location es un nuacutemero negativo o es cero
la buacutesqueda empieza al principio de la cadena expression2
Si expression1 no se encuentra en expression2 CHARINDEX devuelve 0
Si alguno de los dos es null devuelve null
Select charindex (ciemurcielago) --gt4
Select charindex (ciemurcielago 2) --gt4
Select charindex (ciemurcielago 5) --gt0
Select charindex (ciemurcielago-6) --gt4
LEFT
Devuelve la parte de una cadena de caracteres que comienza en un nuacutemero de caracteres
especificado a partir de la izquierda
Select left (murcielago5) --gtmurci
RIGHT
Devuelve la parte de una cadena de caracteres que
Comienza en el nuacutemero de caracteres especificado
En integer_expression a partir de la derecha
Select right (hola que tal5) --gte tal
LEN
Cuenta el nuacutemero de caracteres que se incluyen en la cadena
Select len (murcieacutelago) --gt10
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 39
LOWER
Convierte a Minuacutesculas la cadena especificada
Select lower (MurcIELaGO) as [minusculas] --gtmurcielago
UPPER
Convierte a Mayuacutesculas la cadena especificada
Select upper (murcielago) as [MAYUSCULAS] --gtMURCIELAGO
RTRIM y LTRIM
Elimina los espacios que existen a la izquierda y a la derecha respectivamente
Select Rtrim ( murcieacutelago ) AS [SIN ESPACIOS] --gtmurcieacutelago
Select Ltrim ( murcieacutelago ) AS [SIN ESPACIOS] --gtmurcieacutelago
Select ltrim(rtrim( hola ))+
REPLACE
Reemplaza por una tercera expresioacuten todas las apariciones
de la segunda expresioacuten de cadena proporcionada en la primera expresioacuten de cadena
Select replace (hola que tal estasaA) --gtholA que tAl estAs
Select replace (buenos dias que tal estasuentildentildentilde) --gtbntildentildentildenos diasqntildentildentilde tal estas
SPACE
Coloca el nuacutemero de espacios que se le indiquen para entre una cadena de caracteres
Select hola+space(5)+que tal--gthola que tal
SUBSTRING
Devuelve parte de una expresioacuten de caracteres binaria de texto o de imagen
Sintaxis
SUBSTRING (Expresioacuten Comienzo Duracioacuten)
Argumentos
Expresioacuten
Es una cadena de caracteres cadena binaria texto imagen
Columna o expresioacuten que incluye una columna
No deben usarse expresiones que incluyan funciones de agregado
Start
Es un entero que especifica el punto en que comienza la subcadena
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 40
Length
Es un entero que especifica la longitud de la subcadena
(El nuacutemero de caracteres o bytes que se devuelven)
Select substring (murcielago 3 5) --gtrciel
Select substring (murcielago 3 len (murcielago)) --gtrciel
REVERSE
Devuelve invertida una expresioacuten de caraacutecter
Select reverse (hola)
REPLICATE
Repite una expresioacuten de caracteres un nuacutemero especificado de veces
Select replicate (murcielago 5)
Replicate replicate replicate replicate replicate
STUFF
Elimina el nuacutemero de caracteres especificados e insertados
Otro conjunto de caracteres en un punto de inicio indicado
Select STUFF (Murcieacutelago 2 3 ijklmn) Mijklmnielago
FUNCIONES DE SISTEMA
- APP_NAME () Devuelve el nombre de la aplicacioacuten actual
Select app_name () as [Nombre de la aplicacion]
- DATALENGTH (Expresioacuten) Devuelve un entero que es numero de bites necesarios para
representar esa expresioacuten int
Select datalength (Ninoni) as [Numero de bites]
- ISDATE (Expresioacuten) Dice si la expresioacuten es una fecha o no Devuelve 1 si la expresioacuten es
una fecha y 0 si no es una fecha
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 41
Select isdate (121001) as [Validacioacuten Fecha]
- ISNUMERIC (Expresion) Dice si la expresioacuten es un numero o no Devuelve 1 si la
expresioacuten es un nuacutemero y 0 si la expresioacuten no es nuacutemero
Select isnumeric (ddd) as [Validacion Numero]
- ISNULL (Expresioacuten ExpresionDevuelta) Si la expresioacuten es nula te devuelve la Expresioacuten
Devuelta y si no devuelve la primera Expresioacuten
Select isnull (nullNo nulo) as [Es Nulo]
- PARSENAME (bdquoNombreObjeto‟ ParteNombre)
ParteNombre es un valor de tipo Int que coge unos determinados valores del
NombreObjeto
1 Objeto
2 Propietario
3 Base de Datos
4 Servidor
Select parsename (saposeidondbopedidos1) as [Parte Expresioacuten]
Select parsename (saposeidondbopedidos 2) as [Parte Expresioacuten]
Select parsename (saposeidondbopedidos3) as [Parte Expresioacuten]
Select parsename ( saposeidondbopedidos 4) as [Parte Expresioacuten]
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 42
- SYSTEM_USER Devuelve el usuario del sistema actual
Depende de la autentificacioacuten con la que te hayas conectado
Select system_user as [Usuario conectado]
- USER_NAME() Devuelve el nombre del usuario actual
Select user_name ()
- COALESCE (expresioacuten1 expresioacuten2 )
Devuelve la primera expresioacuten no NULL
Si todos son NULL devuelve NULL
Select coalesce (PrecioUnidad Cantidad) from [detalles de Pedidos] Si el PrecioUnidad es nulo
devolveraacute la Cantidad y si los dos son nulos devolveraacute un campo Null
PROCEDIMIENTOS PARA AGRUPAR Y RESUMIR DATOS
En el examen de certificacioacuten 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 usaraacute la base de datos indicada Ejemplo Ponemos
en el analizador de consultas lo siguiente
Use Northwind
Select from [Order Details]
[Order Details]
Esta tabla perteneciente a la Northwind se encarga de manejar los pedidos
Order Id Nordm de Pedido
Producto Id Nordm de Producto
Ambos campos son Primary Key con lo que no puede haber una combinacioacuten de ambos campos que sea
igual
OrderId ProductId
1 A
1 B
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 43
1 C
2 A
3 C
Es decir en este caso no podriacutea existir una nueva combinacioacuten ldquo1 Ardquo o ldquo2 Ardquo
Quantity Es la cantidad del producto del pedido
ROLLUP
Se usa para presentar resuacutemenes de datos A de usarse junto con la clausula group by lo que hace es
realizar un resumen de los campos incluidos en el rollup
Ejemplo 63
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
Group by ProductID OrderID
with Rollup
Order by ProductID OrderID
Este ejemplo suma todas las cantidades y mediante
rollup muestra una fila con la suma de todas las
cantidades de cada producto y ademaacutes otra fila con la
suma de todas las cantidades de todos los productos El
resultado de este ejemplo seriacutea el que muestra la
imagen
Ejemplo 64
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
where orderid lt 10250
Group by ProductID OrderID
with Rollup
Order by ProductID OrderID
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 44
CUBE
Al igual que Rollup realiza resuacutemenes de campos agrupados Pero en este caso muestra un resumen con
cada combinacioacuten posible de los campos agrupados
Ejemplo 65
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
where orderid lt 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 combinacioacuten posible entre el
productid y el orderid
GROUPING
Indica si el resultado de un campo es el que hay en la propia tabla o se ha introducido mediante una
claacuteusula de resumen es decir para saber por ejemplo si un ldquoNullrdquo 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 lt 10250 Group by ProductID
OrderID with Cube Order by ProductID OrderID
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 45
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
Ponieacutendole un alias al
grouping saldriacutea el nombre
de columna que le
indiquemos
COMPUTE
Realiza un resumen en una columna aparte con el resultado de la funcioacuten de agregado indicada Su
formato seriacutea Compute funcioacuten(campo) No se puede utilizar en aplicaciones cliente servidor es una
clausula meramente informativa Tampoco se le pueden poner alias a los resuacutemenes
Ejemplo 67
Select Productid Orderid Quantity From [Order Details] order by ProductID Orderid compute
Sum(quantity)
Vemos que muestra la
columna con la suma
total de todas las
cantidades
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 46
Ejercicios de ROLLUP GROUPING y CUBE
Ejemplo 68
Realizar una consulta que resuma la cantidad de artiacuteculos pedidos por cada iacutendice de producto y
nuacutemero de pedido Realizando un caacutelculo acumulativo
select productid as [PRODUCTO] orderid as [Nordm PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] group by productid orderid with rollup order by productid orderid
PRODUCTO Nordm 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
hellip
Ejemplo 69
Modificacioacuten al ejercicio anterior Realizar el mismo resumen pero uacutenicamente para el producto
cuyo id es 50
select productid as [PRODUCTO] orderid as [Nordm PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] where productid = 50 group by productid orderid with rollup order by productid ordered
PRODUCTO Nordm 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
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 47
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 modificacioacuten 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 [Nordm PEDIDO] grouping(orderid) as [GRUPO PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] where productid = 50 group by Productidorderid with cube order by productidorderid
PRODUCTO GRUPO PRODUCTO Nordm PEDIDO GRUPO PEDIDO SUMA TOTAL
----------- -------------- ----------- ------------ -----------
NULL 1 NULL 1 235
NULL 1 10350 0 15
NULL 1 10383 0 15
NULL 1 10429 0 40
NULL 1 10465 0 25
NULL 1 10637 0 25
NULL 1 10729 0 40
NULL 1 10751 0 20
NULL 1 10920 0 24
NULL 1 10948 0 9
NULL 1 11072 0 22
50 0 NULL 1 235
50 0 10350 0 15
50 0 10383 0 15
50 0 10429 0 40
50 0 10465 0 25
50 0 10637 0 25
50 0 10729 0 40
50 0 10751 0 20
50 0 10920 0 24
50 0 10948 0 9
50 0 11072 0 22
(22 filas afectadas)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 48
Obtencioacuten de resuacutemenes 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 maacutes columnas y
luego efectuar alguna operacioacuten de resumen sobre cada grupo asiacute generado
La diferencia con GROUP BY es que permite mostrar informacioacuten mas detallada de cada grupo
Ejemplo 71
Lista de pedidos que muestre por coacutedigo de pedido la cantidad de productos vendidos por cada uno
de ellos
select Idpedidoidproductopreciounidadcantidad[Sub Total]=sum(PreciounidadCantidad) from
[detalles de pedidos] group by Idpedidoidproductopreciounidadcantidad order by IdPedido compute
sum(Cantidad) by IdPedido
EJERCICIOS CON COMPUTE
Ejemplo 72
Generar un resumen de subtotales en una consulta que devuelva el nuacutemero de pedido la cantidad
pedida para todos los orderid 11070
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 49
Select Orderid as [Nordm PEDIDO] Quantity AS [CANTIDAD] From [Order Details] where orderid gt= 11070 order by Orderid compute Sum(quantity) by orderid compute sum(quantity)
Nordm PEDIDO CANTIDAD
----------- --------
11070 40
11070 20
11070 30
11070 20
sum
===========
110
sum
===========
110
(6 filas afectadas)
Ejemplo 73
Generar un resumen con calculo de subtotales similar al anterior pero para los orderid 11075 y
11076
Select Orderid as [Nordm PEDIDO] Quantity as [CANTIDAD] From [Order Details] where orderid = 11075 or orderid = 11076 order by Orderid compute Sum(quantity) by ordered Nordm PEDIDO CANTIDAD ----------- -------- 11075 10 11075 30 11075 2 sum =========== 42 Nordm PEDIDO CANTIDAD ----------- -------- 11076 20 11076 20 11076 10
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 50
sum =========== 50 (8 filas afectadas)
Ejemplo 74
Modificacioacuten al ejercicio anterior Agregar la cantidad total y la cantidad promedio al final del
informe
Select Orderid as [Nordm 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)
Nordm PEDIDO CANTIDAD
----------- --------
11075 10
11075 30
11075 2
sum
===========
42
Nordm PEDIDO CANTIDAD
----------- --------
11076 20
11076 20
11076 10
sum
===========
50
sum
===========
92
avg
===========
15
(10 filas afectadas)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 51
Ejemplo 75
Seleccionar de forma agrupada por tipo todos los tipos la suma de los precios y la suma del
anticipo de la tabla tiacutetulos
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 199900 50000000
business 119500 50000000
business 29900 101250000
business 199900 50000000
sum
=====================
549200
avg
=====================
62812500
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
mod_cook 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
avg
=====================
75000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
popular_comp 229500 70000000
popular_comp 200000 80000000
popular_comp NULL NULL
sum
=====================
429500
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 52
avg
=====================
75000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
psychology 215900 70000000
psychology 109500 22750000
psychology 70000 60000000
psychology 199900 20000000
psychology 79900 40000000
sum
=====================
675200
avg
=====================
42550000
(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 ademaacutes 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 199900 50000000
business 119500 50000000
business 29900 101250000
business 199900 50000000
sum
=====================
549200
sum
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 53
=====================
251250000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
mod_cook 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
popular_comp 229500 70000000
popular_comp 200000 80000000
popular_comp NULL NULL
sum
=====================
429500
sum
=====================
150000000
(30 filas afectadas)
Ejemplo 77
Generar un informe que muestre la suma de los precios de los libros de psicologiacutea 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 109500
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 54
psychology 0736 70000
psychology 0736 199900
psychology 0736 79900
sum
=====================
459300
TIPO CODIGO EDITOR PRECIO
------------ ------------- ---------------------
psychology 0877 215900
sum
=====================
215900
(7 filas afectadas)
Ejemplo 78
Generar un informe que obtenga la suma de los precios de todos los libros de psicologiacutea asiacute como la
suma de los precios de los libros de psicologiacutea 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 109500
psychology 0736 70000
psychology 0736 199900
psychology 0736 79900
sum
=====================
459300
TIPO CODIGO EDITOR PRECIO
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 55
------------ ------------- ---------------------
psychology 0877 215900
sum
=====================
215900
sum
=====================
675200
(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 199900 0000
mod_cook 0877 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO CODIGO EDITOR PRECIO ANTICIPO
------------ ------------- --------------------- ---------------------
trad_cook 0877 119500 40000000
trad_cook 0877 209500 70000000
trad_cook 0877 149900 80000000
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 56
sum
=====================
478900
sum
=====================
190000000
(9 filas afectadas)
Ejemplo 80
Generar un informe que muestre todos los tiacutetulos precio y anticipo de aquellos tiacutetulos que tengan
un precio superior a 20 doacutelares Ofreceraacute tambieacuten la suma total del precio y del anticipo
Select title as [TITULO] price as [PRECIO] advance as [ANTICIPO] From titles where price gt 20 order by title compute sum(price) compute sum(advance)
TITULO PRECIO ANTICIPO
-------------------------------------------------------------------------------- --------------------- -------------
--------
But Is It User Friendly 229500 70000000
Computer Phobic AND Non-Phobic Individuals Behavior Variations 215900
70000000
Onions Leeks and Garlic Cooking Secrets of the Mediterranean 209500
70000000
sum
=====================
654900
sum
=====================
210000000
(5 filas afectadas)
Ejemplo 81
Generar un informe que muestre el precio el tipo y el nuacutemero de editor de la tabla titles de todos
aquellas obras que pertenezcan la categoriacutea de ldquobusinessrdquo Ademaacutes apareceraacute la suma total de
precios y el maacuteximo pub_id de esta seleccioacuten
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 57
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 29900 0736
business 199900 1389
business 199900 1389
business 119500 1389
sum
=====================
549200
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 Mostraraacute la suma de los precios y los anticipos por tipo y luego calcularaacute 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 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
trad_cook 209500 70000000
trad_cook 119500 40000000
trad_cook 149900 80000000
sum
=====================
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 58
478900
sum
=====================
190000000
sum
=====================
708700
sum
=====================
340000000
(11 filas afectadas)
Eliminacioacuten 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 iquestA que precio se ah vendido los productos
Select IdProducto Preciounidad from [Detalles de pedidos] order by IdProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 59
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 mayoriacutea de las consultas que se hacen en una base de datos requiere que se lean datos procedentes
de dos oacute maacutes tablas
INNER JOIN- son las filas que satisfacen la condicioacuten de la combinacioacuten
En la siguiente sentencia SQL enlaza 2 tablas la tabla clientes y la tabla pedidos en esta ejemplo me
muestra los campos nombre compantildeiacutea y el campo idpedido
La uacutenica condicioacuten es que las 2 tablas tengan un campo en comuacuten
Ejemplo 84
select clientesNombreCompantildeiacuteapedidosidpedido from clientes inner join pedidos on
clientesidcliente=pedidosidcliente
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 60
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 pedidosIdPedido pedidosIdCliente 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 pedidosIdPedido pedidosIdCliente order
by pedidos IdPedido
CROSS JOIN
Un Cross Join es la consulta correlacionada que combine cada una de las filas de una de las tablas con
todas las filas de la otra tabla
No es necesario que exista una columna en comuacuten para ejecutar el Cross Join
Ejemplo 86
La siguiente consulta combina cada una de las filas de la tabla categoriacuteas con cada una de las filas de la
tabla productos
select productosNombreProductocategoriasNombrecategoria from productos cross join categorias
order by productosNombreProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 61
Ejercicios de consultas Muacuteltiples
Ejemplo 87
Mostrar el pedidos completo con el id=10248
Select pedidosIdPedido pedidosIdCliente
Total=sum ([detalles de pedidos]Preciounidad[detalles de pedidos]Cantidad)
From [detalles de pedidos] inner join pedidos on
[Detalles de pedidos]IdPedido=pedidosIdPedido where pedidosIdPedido=10248
Group by pedidosIdPedido pedidosIdCliente
Ejemplo 88
1 Mostrar la cantidad de productos por categoriacutea
Select CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
[Total de Producto]=sum (UnidadesEnExistencia) from Categoriacuteas inner join
Productos on CategoriacuteasIdCategoriacutea=productosIdCategoriacutea
Group by CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 62
Ejemplo 89
Calcular cuantas ventas tiene cada uno de los vendedores
Select empleadosIdEmpleado empleadosNombre empleadosApellidos
[Total de ventas]=count (pedidosIdPedido) from empleados
Inner join Pedidos on empleadosIdEmpleado=pedidosIdEmpleado
Group by empleadosIdEmpleado empleadosNombre empleadosApellidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 63
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 despueacutes saca la de Plantilla
Recomendaciones a la hora de usar las combinaciones
Combinar tablas en funcioacuten de claves principales y externas
Limite el nuacutemero de tablas de las combinaciones
Select Apellido
Oficio as
OFICIOFUNCION
salario from emp
UNION
Select Apellido
Funcion Salario from
Plantilla
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 64
SUBCONSULTAS
Es una SELECT anidada en una instruccioacuten INSERT DELETE SELECT o UPDATE
Como una tabla derivada
Select eemp_no as Numero
eApellido
from (select emp_no apellido from emp) as e
Como una expresioacuten
Select emp_no as [Numero]
Apellido
Salario
(select avg(Salario) from emp)
as Diferencia
from emp
where oficio = Empleado
Para correlacionar datos
- Expresioacuten dinaacutemica que cambia en cada fila de una consulta externa
- Es una combinacioacuten entre la subconsulta y la fila de la consulta externa
- Dividen consultas complejas con dos o maacutes consultas simples relacionadas
Subconsulta correlacionada
Select apellido oficiodept_no
from emp as e
where 20 lt
(select dept_no from dept as d
where edept_no = ddept_no
and ddnombre = Ventas)
SUBCONSULTAS
1 Mostrar el numero de empleado el apellido y la fecha de alta del empleado mas antiguo de la
empresa
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 65
SELECT emp_noapellido
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_noapellido
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 Jimeacutenez
select apellido oficio from emp where
oficio = (select oficio from emp where apellido = JIMENEZ)
4 Queremos saber el apellido oficio salario y nuacutemero 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 gt (select max (salario) from
emp where dept_no = 30)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 66
5 Mostrar el apellido la funcioacuten sala o departamento de todos los empleados que trabajen en la
empresa
select eApellido eOficio as [Cargo en Empresa] ddnombre as [Oficina]
from emp as e
inner join dept as d
on edept_no = ddept_no
union
select pApellido pfuncion snombre
from plantilla as p
inner join sala as s
on phospital_cod = shospital_cod
and psala_cod = ssala_cod
union
select dApellido despecialidad hnombre
from doctor as d
inner join hospital as h
on dhospital_cod = hhospital_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 = lsquoventasrsquo))
order by 2
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 67
8 Mostrar los empleados que tienen mejor salario que la media de los directores no incluyendo al
presidente
Select from emp where salario gt
(select avg (salario) from emp where oficio = DIRECTOR)
and oficio ltgt PRESIDENTE
9 Mostrar el apellido funcioacuten salario y coacutedigo 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 = lsquoENFERMEROrsquo or
funcion = lsquoENFERMERArsquo) and hospital_cod = (select hospital_cod from hospital where nombre =
lsquoSAN CARLOSrsquo)
Select apellido funcion salario hospital_cod from plantilla where
funcion in (ENFERMEROENFERMERA)
and hospital_cod = (select hospital_cod from hospital
where nombre = SAN CARLOS)
10 Visualizar los datos de los hospitales que tienen personal (Doctores) de cardiologiacutea
Select from hospital where hospital_cod in (select hospital_cod from doctor where
especialidad = lsquoCardiologiacutearsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 68
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 = lsquoPROVINCIALrsquo or
nombre= lsquoGENERALrsquo)
12 Mostrar el apellido de los enfermos que nacieron antes que el Sentildeor Miller
Select apellido from enfermo where Fecha_nac lt (select fecha_nac from enfermo where
apellido = lsquoMILLER Brsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 69
Simulacion de una clausula JOIN
Vamos a mostrar los oficios que estaacuten en maacutes de un departamento
Select distinct e1oficio from emp as e1
where e1oficio in(Select e2oficio from emp as e2
where e1dept_no ltgt e2dept_no)
Se debe utilizar antes una combinacioacuten que una subconsulta la combinacioacuten seriacutea asi dando los
mismos resultados
Select distinct e1Oficio from emp as e1
inner join emp as e2
on e1oficio = e2oficio
where e1dept_no ltgt e2dept_no
Estos son los dos oficios que estaacuten en
maacutes de un departamento
Subconsulta para simular una clausula HAVING
select e1apellidoe1oficio e1salario
from emp as e1
where e1salario gt
(select avg(e2salario) from emp as e2
where e1oficio = e2oficio)
Esta es la consulta utilizando el HAVING que es la que deberiacuteamos utilizar antes que una
subconsulta de simulacioacuten HAVING
SELECT e1apellidoe1oficio e1salario
FROM emp AS e1
INNER JOIN emp AS e2
ON e1oficio = e2oficio
GROUP BY e1oficio e1salarioe1apellido
HAVING e1salario gt AVG (e2salario)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 70
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 32
Ejemplo 51
Select DateName (Hour getdate ()) as hora--gt18
Ejemplo 52
Select DateName (Hh getdate ()) as hora--gt18
DatePart
Devuelve la parte de la fecha u hora indicada Sintaxis
Datepart (Valor devolver fecha)
Ejemplo 53
Select IdPedido datepart (mm FechaPedido) as Mes from Pedidos where IdPedido = 10352
Ejemplo 54
Select Datepart (Hh getdate ()) as Hora--gt17
Ejemplo 55
Select Datepart (mi getdate ()) as Minutos--gt54
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 33
Nombres de Fechas
Day (fecha)
Devuelve UN INT equivale a Datepart
Select day (getdate ()) as diacutea--gt6 (diacutea en la que se ejecuta la sentencia)
Select Datepart (dd getdate ()) --gt6 (diacutea en la que se ejecuta la sentencia)
Select Month (getdate ()) --gt1 (Mes en la que se ejecuta la sentencia)
Select Datepart (mm getdate ()) --gt1 (Mes en la que se ejecuta la sentencia)
Select Year (getdate ()) --gt2008 (Antildeo en la que se ejecuta la sentencia)
Ejemplo 56
Select year (FechaPedido) as Antildeo from Pedidos where IdPedido = 10352
Ejemplo 57
Select datediff (yyyy FechaPedido getdate()) as Dia from Pedidos where IdPedido = 10352
DateAdd
DateAdd (Datepart number date)
Antildeade un nuacutemero a la fecha puesta
DatePart es el formato de lo que queremos antildeadir
Number es el nuacutemero que queremos incrementar la fecha expuesta
Select convert (datetime1-1-02)
Select dateadd (dd 71-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 comparacioacuten y el tipo de dato
que nos devolveraacute antildeos diacuteas minutos etc
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 34
Ejemplo 58
Select datediff (yyyy FechaPedido getdate ()) as Dia from Pedidos where IdPedido = 10352
Ejercicios de funciones de Fecha
Ejemplo 59
Lista de pedidos emitidos en febrero de 1996
Select from Pedidos where month (FechaPedido) =2 and year (FechaPedido) =1996
Ejemplo 60
Lista de Pedidos mostrando la diferencia en diacuteas entre la fecha del pedido y la fecha de Envioacute
Select IdPedido FechaPedido FechaEnviacuteo diacuteas =datediff (day FechaPedido FechaEnviacuteo) from
pedidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 35
Ejemplo 61
Genere un listado de pedidos en el que la fecha del pedido se muestre en el formato nombre del
diacutea diacutea de mes antildeo
Select IdPedido FechaPedido Fecha=datename (dw IdPedido)+ + str (datepart (dd
IdPedido) 2)+ de +datename (mm IdPedido)+ de +str (datepart (yy IdPedido) 4) from
pedidos
Ejemplo 62
Mostrar de la tabla pedidos la fecha de pedidos en fecha corta
Select IdPedido convert (varchar (30) FechaPedido 106) as [Fecha Corta] from pedidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 36
FUNCIONES MATEMATICAS
ABS
Es el valor Absoluto
Select ABS (-4) as VALOR ABSOLUTO--gt4
CEILING
Devuelve el entero maacutes pequentildeo mayor o igual que la expresioacuten numeacuterica dada
Select CEILING (54) as CEILING--6
FLOOR
Devuelve el entero maacutes grande menor o igual que la expresioacuten numeacuterica dada
Select FLOOR (5) as FLOOR--gt5
POWER
Devuelve el valor de la expresioacuten indicada elevada a la potencia especificada
Select POWER (3 2) as 3 ELEVADO A 2--gt9
RAND
Devuelve un valor float aleatorio de 0 a 1
Las llamadas repetitivas de RAND() en una uacutenica consulta produciraacuten el mismo valor
Select RAND(6) as ALEATORIO--071368515806921451
Select RAND(6) as ALEATORIO--071368515806921451
Select RAND(4) as ALEATORIO--07136478921266981
Rand sobre los milisegundos actuales
Select RAND(DATEPART(msGETDATE())) as ALEATORIO--gt071443047691954253
Select RAND(999999999)--gt068504257551273573
ROUND
Devuelve una expresioacuten numeacuterica redondeada a la longitud o precisioacuten especificada
Round (Nuacutemero Redondeo del Nuacutemero)
ROUND siempre devuelve un valor Si length es un valor negativo y mayor que el nuacutemero de
diacutegitos anteriores al separador decimal ROUND devuelve 0
Select ROUND (1234567 2) --gt1234600
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 37
Select ROUND (1234567-2) --gt1000000
Select ROUND (1234567 0) --gt1230000
Select ROUND (1234567-3) ---gt0
SIGN
Devuelve el signo positivo (+1) cero (0) o negativo (-1) de la expresioacuten especificada
Dice el valor negativo positivo o neutro (0) del valor especificado
Select SIGN (-3) --gt-1
Select SIGN (3) --gt1
Select SIGN (0) --gt0
SQUARE
Devuelve el cuadrado de la expresioacuten especificada
Select SQUARE (4) as bdquoCuadrado‟--gt160
SQRT
Devuelve la raiacutez cuadrada de la expresioacuten especificada
Select SQRT (4) as [RAIZ CUADRADA] --gt20
FUNCIONES DE CADENA
ASCII
Devuelve el coacutedigo ASCII del caraacutecter maacutes a la izquierda de una expresioacuten de caracteres
Select ASCII(A)--gt65
Select ASCII(a)--gt97
Select ascii(aula)--gt97
CHAR
Una funcioacuten de cadena que convierte un coacutedigo ASCII int en un caraacutecter
select char(65)--gtA
select char(97)--gta
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 38
CHARINDEX
Devuelve la posicioacuten inicial de la expresioacuten especificada en una cadena de caracteres
CHARINDEX (expression1 expression2 [ start_location])
Argumentos
expression1
Es una expresioacuten que contiene la secuencia de caracteres que se desea buscar
Expression1 es una expresioacuten del tipo de cadenas cortas de caracteres
Expression2
Es una expresioacuten normalmente una columna
en la que se busca la cadena especificada
Expression2 es de la categoriacutea del tipo de datos cadena de caracteres
start_location
Es la posicioacuten del caraacutecter de expression2 en el que se empieza la buacutesqueda de expression1
Si no se especifica start_location es un nuacutemero negativo o es cero
la buacutesqueda empieza al principio de la cadena expression2
Si expression1 no se encuentra en expression2 CHARINDEX devuelve 0
Si alguno de los dos es null devuelve null
Select charindex (ciemurcielago) --gt4
Select charindex (ciemurcielago 2) --gt4
Select charindex (ciemurcielago 5) --gt0
Select charindex (ciemurcielago-6) --gt4
LEFT
Devuelve la parte de una cadena de caracteres que comienza en un nuacutemero de caracteres
especificado a partir de la izquierda
Select left (murcielago5) --gtmurci
RIGHT
Devuelve la parte de una cadena de caracteres que
Comienza en el nuacutemero de caracteres especificado
En integer_expression a partir de la derecha
Select right (hola que tal5) --gte tal
LEN
Cuenta el nuacutemero de caracteres que se incluyen en la cadena
Select len (murcieacutelago) --gt10
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 39
LOWER
Convierte a Minuacutesculas la cadena especificada
Select lower (MurcIELaGO) as [minusculas] --gtmurcielago
UPPER
Convierte a Mayuacutesculas la cadena especificada
Select upper (murcielago) as [MAYUSCULAS] --gtMURCIELAGO
RTRIM y LTRIM
Elimina los espacios que existen a la izquierda y a la derecha respectivamente
Select Rtrim ( murcieacutelago ) AS [SIN ESPACIOS] --gtmurcieacutelago
Select Ltrim ( murcieacutelago ) AS [SIN ESPACIOS] --gtmurcieacutelago
Select ltrim(rtrim( hola ))+
REPLACE
Reemplaza por una tercera expresioacuten todas las apariciones
de la segunda expresioacuten de cadena proporcionada en la primera expresioacuten de cadena
Select replace (hola que tal estasaA) --gtholA que tAl estAs
Select replace (buenos dias que tal estasuentildentildentilde) --gtbntildentildentildenos diasqntildentildentilde tal estas
SPACE
Coloca el nuacutemero de espacios que se le indiquen para entre una cadena de caracteres
Select hola+space(5)+que tal--gthola que tal
SUBSTRING
Devuelve parte de una expresioacuten de caracteres binaria de texto o de imagen
Sintaxis
SUBSTRING (Expresioacuten Comienzo Duracioacuten)
Argumentos
Expresioacuten
Es una cadena de caracteres cadena binaria texto imagen
Columna o expresioacuten que incluye una columna
No deben usarse expresiones que incluyan funciones de agregado
Start
Es un entero que especifica el punto en que comienza la subcadena
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 40
Length
Es un entero que especifica la longitud de la subcadena
(El nuacutemero de caracteres o bytes que se devuelven)
Select substring (murcielago 3 5) --gtrciel
Select substring (murcielago 3 len (murcielago)) --gtrciel
REVERSE
Devuelve invertida una expresioacuten de caraacutecter
Select reverse (hola)
REPLICATE
Repite una expresioacuten de caracteres un nuacutemero especificado de veces
Select replicate (murcielago 5)
Replicate replicate replicate replicate replicate
STUFF
Elimina el nuacutemero de caracteres especificados e insertados
Otro conjunto de caracteres en un punto de inicio indicado
Select STUFF (Murcieacutelago 2 3 ijklmn) Mijklmnielago
FUNCIONES DE SISTEMA
- APP_NAME () Devuelve el nombre de la aplicacioacuten actual
Select app_name () as [Nombre de la aplicacion]
- DATALENGTH (Expresioacuten) Devuelve un entero que es numero de bites necesarios para
representar esa expresioacuten int
Select datalength (Ninoni) as [Numero de bites]
- ISDATE (Expresioacuten) Dice si la expresioacuten es una fecha o no Devuelve 1 si la expresioacuten es
una fecha y 0 si no es una fecha
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 41
Select isdate (121001) as [Validacioacuten Fecha]
- ISNUMERIC (Expresion) Dice si la expresioacuten es un numero o no Devuelve 1 si la
expresioacuten es un nuacutemero y 0 si la expresioacuten no es nuacutemero
Select isnumeric (ddd) as [Validacion Numero]
- ISNULL (Expresioacuten ExpresionDevuelta) Si la expresioacuten es nula te devuelve la Expresioacuten
Devuelta y si no devuelve la primera Expresioacuten
Select isnull (nullNo nulo) as [Es Nulo]
- PARSENAME (bdquoNombreObjeto‟ ParteNombre)
ParteNombre es un valor de tipo Int que coge unos determinados valores del
NombreObjeto
1 Objeto
2 Propietario
3 Base de Datos
4 Servidor
Select parsename (saposeidondbopedidos1) as [Parte Expresioacuten]
Select parsename (saposeidondbopedidos 2) as [Parte Expresioacuten]
Select parsename (saposeidondbopedidos3) as [Parte Expresioacuten]
Select parsename ( saposeidondbopedidos 4) as [Parte Expresioacuten]
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 42
- SYSTEM_USER Devuelve el usuario del sistema actual
Depende de la autentificacioacuten con la que te hayas conectado
Select system_user as [Usuario conectado]
- USER_NAME() Devuelve el nombre del usuario actual
Select user_name ()
- COALESCE (expresioacuten1 expresioacuten2 )
Devuelve la primera expresioacuten no NULL
Si todos son NULL devuelve NULL
Select coalesce (PrecioUnidad Cantidad) from [detalles de Pedidos] Si el PrecioUnidad es nulo
devolveraacute la Cantidad y si los dos son nulos devolveraacute un campo Null
PROCEDIMIENTOS PARA AGRUPAR Y RESUMIR DATOS
En el examen de certificacioacuten 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 usaraacute la base de datos indicada Ejemplo Ponemos
en el analizador de consultas lo siguiente
Use Northwind
Select from [Order Details]
[Order Details]
Esta tabla perteneciente a la Northwind se encarga de manejar los pedidos
Order Id Nordm de Pedido
Producto Id Nordm de Producto
Ambos campos son Primary Key con lo que no puede haber una combinacioacuten de ambos campos que sea
igual
OrderId ProductId
1 A
1 B
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 43
1 C
2 A
3 C
Es decir en este caso no podriacutea existir una nueva combinacioacuten ldquo1 Ardquo o ldquo2 Ardquo
Quantity Es la cantidad del producto del pedido
ROLLUP
Se usa para presentar resuacutemenes de datos A de usarse junto con la clausula group by lo que hace es
realizar un resumen de los campos incluidos en el rollup
Ejemplo 63
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
Group by ProductID OrderID
with Rollup
Order by ProductID OrderID
Este ejemplo suma todas las cantidades y mediante
rollup muestra una fila con la suma de todas las
cantidades de cada producto y ademaacutes otra fila con la
suma de todas las cantidades de todos los productos El
resultado de este ejemplo seriacutea el que muestra la
imagen
Ejemplo 64
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
where orderid lt 10250
Group by ProductID OrderID
with Rollup
Order by ProductID OrderID
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 44
CUBE
Al igual que Rollup realiza resuacutemenes de campos agrupados Pero en este caso muestra un resumen con
cada combinacioacuten posible de los campos agrupados
Ejemplo 65
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
where orderid lt 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 combinacioacuten posible entre el
productid y el orderid
GROUPING
Indica si el resultado de un campo es el que hay en la propia tabla o se ha introducido mediante una
claacuteusula de resumen es decir para saber por ejemplo si un ldquoNullrdquo 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 lt 10250 Group by ProductID
OrderID with Cube Order by ProductID OrderID
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 45
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
Ponieacutendole un alias al
grouping saldriacutea el nombre
de columna que le
indiquemos
COMPUTE
Realiza un resumen en una columna aparte con el resultado de la funcioacuten de agregado indicada Su
formato seriacutea Compute funcioacuten(campo) No se puede utilizar en aplicaciones cliente servidor es una
clausula meramente informativa Tampoco se le pueden poner alias a los resuacutemenes
Ejemplo 67
Select Productid Orderid Quantity From [Order Details] order by ProductID Orderid compute
Sum(quantity)
Vemos que muestra la
columna con la suma
total de todas las
cantidades
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 46
Ejercicios de ROLLUP GROUPING y CUBE
Ejemplo 68
Realizar una consulta que resuma la cantidad de artiacuteculos pedidos por cada iacutendice de producto y
nuacutemero de pedido Realizando un caacutelculo acumulativo
select productid as [PRODUCTO] orderid as [Nordm PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] group by productid orderid with rollup order by productid orderid
PRODUCTO Nordm 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
hellip
Ejemplo 69
Modificacioacuten al ejercicio anterior Realizar el mismo resumen pero uacutenicamente para el producto
cuyo id es 50
select productid as [PRODUCTO] orderid as [Nordm PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] where productid = 50 group by productid orderid with rollup order by productid ordered
PRODUCTO Nordm 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
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 47
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 modificacioacuten 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 [Nordm PEDIDO] grouping(orderid) as [GRUPO PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] where productid = 50 group by Productidorderid with cube order by productidorderid
PRODUCTO GRUPO PRODUCTO Nordm PEDIDO GRUPO PEDIDO SUMA TOTAL
----------- -------------- ----------- ------------ -----------
NULL 1 NULL 1 235
NULL 1 10350 0 15
NULL 1 10383 0 15
NULL 1 10429 0 40
NULL 1 10465 0 25
NULL 1 10637 0 25
NULL 1 10729 0 40
NULL 1 10751 0 20
NULL 1 10920 0 24
NULL 1 10948 0 9
NULL 1 11072 0 22
50 0 NULL 1 235
50 0 10350 0 15
50 0 10383 0 15
50 0 10429 0 40
50 0 10465 0 25
50 0 10637 0 25
50 0 10729 0 40
50 0 10751 0 20
50 0 10920 0 24
50 0 10948 0 9
50 0 11072 0 22
(22 filas afectadas)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 48
Obtencioacuten de resuacutemenes 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 maacutes columnas y
luego efectuar alguna operacioacuten de resumen sobre cada grupo asiacute generado
La diferencia con GROUP BY es que permite mostrar informacioacuten mas detallada de cada grupo
Ejemplo 71
Lista de pedidos que muestre por coacutedigo de pedido la cantidad de productos vendidos por cada uno
de ellos
select Idpedidoidproductopreciounidadcantidad[Sub Total]=sum(PreciounidadCantidad) from
[detalles de pedidos] group by Idpedidoidproductopreciounidadcantidad order by IdPedido compute
sum(Cantidad) by IdPedido
EJERCICIOS CON COMPUTE
Ejemplo 72
Generar un resumen de subtotales en una consulta que devuelva el nuacutemero de pedido la cantidad
pedida para todos los orderid 11070
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 49
Select Orderid as [Nordm PEDIDO] Quantity AS [CANTIDAD] From [Order Details] where orderid gt= 11070 order by Orderid compute Sum(quantity) by orderid compute sum(quantity)
Nordm PEDIDO CANTIDAD
----------- --------
11070 40
11070 20
11070 30
11070 20
sum
===========
110
sum
===========
110
(6 filas afectadas)
Ejemplo 73
Generar un resumen con calculo de subtotales similar al anterior pero para los orderid 11075 y
11076
Select Orderid as [Nordm PEDIDO] Quantity as [CANTIDAD] From [Order Details] where orderid = 11075 or orderid = 11076 order by Orderid compute Sum(quantity) by ordered Nordm PEDIDO CANTIDAD ----------- -------- 11075 10 11075 30 11075 2 sum =========== 42 Nordm PEDIDO CANTIDAD ----------- -------- 11076 20 11076 20 11076 10
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 50
sum =========== 50 (8 filas afectadas)
Ejemplo 74
Modificacioacuten al ejercicio anterior Agregar la cantidad total y la cantidad promedio al final del
informe
Select Orderid as [Nordm 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)
Nordm PEDIDO CANTIDAD
----------- --------
11075 10
11075 30
11075 2
sum
===========
42
Nordm PEDIDO CANTIDAD
----------- --------
11076 20
11076 20
11076 10
sum
===========
50
sum
===========
92
avg
===========
15
(10 filas afectadas)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 51
Ejemplo 75
Seleccionar de forma agrupada por tipo todos los tipos la suma de los precios y la suma del
anticipo de la tabla tiacutetulos
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 199900 50000000
business 119500 50000000
business 29900 101250000
business 199900 50000000
sum
=====================
549200
avg
=====================
62812500
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
mod_cook 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
avg
=====================
75000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
popular_comp 229500 70000000
popular_comp 200000 80000000
popular_comp NULL NULL
sum
=====================
429500
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 52
avg
=====================
75000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
psychology 215900 70000000
psychology 109500 22750000
psychology 70000 60000000
psychology 199900 20000000
psychology 79900 40000000
sum
=====================
675200
avg
=====================
42550000
(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 ademaacutes 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 199900 50000000
business 119500 50000000
business 29900 101250000
business 199900 50000000
sum
=====================
549200
sum
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 53
=====================
251250000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
mod_cook 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
popular_comp 229500 70000000
popular_comp 200000 80000000
popular_comp NULL NULL
sum
=====================
429500
sum
=====================
150000000
(30 filas afectadas)
Ejemplo 77
Generar un informe que muestre la suma de los precios de los libros de psicologiacutea 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 109500
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 54
psychology 0736 70000
psychology 0736 199900
psychology 0736 79900
sum
=====================
459300
TIPO CODIGO EDITOR PRECIO
------------ ------------- ---------------------
psychology 0877 215900
sum
=====================
215900
(7 filas afectadas)
Ejemplo 78
Generar un informe que obtenga la suma de los precios de todos los libros de psicologiacutea asiacute como la
suma de los precios de los libros de psicologiacutea 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 109500
psychology 0736 70000
psychology 0736 199900
psychology 0736 79900
sum
=====================
459300
TIPO CODIGO EDITOR PRECIO
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 55
------------ ------------- ---------------------
psychology 0877 215900
sum
=====================
215900
sum
=====================
675200
(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 199900 0000
mod_cook 0877 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO CODIGO EDITOR PRECIO ANTICIPO
------------ ------------- --------------------- ---------------------
trad_cook 0877 119500 40000000
trad_cook 0877 209500 70000000
trad_cook 0877 149900 80000000
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 56
sum
=====================
478900
sum
=====================
190000000
(9 filas afectadas)
Ejemplo 80
Generar un informe que muestre todos los tiacutetulos precio y anticipo de aquellos tiacutetulos que tengan
un precio superior a 20 doacutelares Ofreceraacute tambieacuten la suma total del precio y del anticipo
Select title as [TITULO] price as [PRECIO] advance as [ANTICIPO] From titles where price gt 20 order by title compute sum(price) compute sum(advance)
TITULO PRECIO ANTICIPO
-------------------------------------------------------------------------------- --------------------- -------------
--------
But Is It User Friendly 229500 70000000
Computer Phobic AND Non-Phobic Individuals Behavior Variations 215900
70000000
Onions Leeks and Garlic Cooking Secrets of the Mediterranean 209500
70000000
sum
=====================
654900
sum
=====================
210000000
(5 filas afectadas)
Ejemplo 81
Generar un informe que muestre el precio el tipo y el nuacutemero de editor de la tabla titles de todos
aquellas obras que pertenezcan la categoriacutea de ldquobusinessrdquo Ademaacutes apareceraacute la suma total de
precios y el maacuteximo pub_id de esta seleccioacuten
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 57
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 29900 0736
business 199900 1389
business 199900 1389
business 119500 1389
sum
=====================
549200
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 Mostraraacute la suma de los precios y los anticipos por tipo y luego calcularaacute 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 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
trad_cook 209500 70000000
trad_cook 119500 40000000
trad_cook 149900 80000000
sum
=====================
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 58
478900
sum
=====================
190000000
sum
=====================
708700
sum
=====================
340000000
(11 filas afectadas)
Eliminacioacuten 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 iquestA que precio se ah vendido los productos
Select IdProducto Preciounidad from [Detalles de pedidos] order by IdProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 59
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 mayoriacutea de las consultas que se hacen en una base de datos requiere que se lean datos procedentes
de dos oacute maacutes tablas
INNER JOIN- son las filas que satisfacen la condicioacuten de la combinacioacuten
En la siguiente sentencia SQL enlaza 2 tablas la tabla clientes y la tabla pedidos en esta ejemplo me
muestra los campos nombre compantildeiacutea y el campo idpedido
La uacutenica condicioacuten es que las 2 tablas tengan un campo en comuacuten
Ejemplo 84
select clientesNombreCompantildeiacuteapedidosidpedido from clientes inner join pedidos on
clientesidcliente=pedidosidcliente
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 60
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 pedidosIdPedido pedidosIdCliente 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 pedidosIdPedido pedidosIdCliente order
by pedidos IdPedido
CROSS JOIN
Un Cross Join es la consulta correlacionada que combine cada una de las filas de una de las tablas con
todas las filas de la otra tabla
No es necesario que exista una columna en comuacuten para ejecutar el Cross Join
Ejemplo 86
La siguiente consulta combina cada una de las filas de la tabla categoriacuteas con cada una de las filas de la
tabla productos
select productosNombreProductocategoriasNombrecategoria from productos cross join categorias
order by productosNombreProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 61
Ejercicios de consultas Muacuteltiples
Ejemplo 87
Mostrar el pedidos completo con el id=10248
Select pedidosIdPedido pedidosIdCliente
Total=sum ([detalles de pedidos]Preciounidad[detalles de pedidos]Cantidad)
From [detalles de pedidos] inner join pedidos on
[Detalles de pedidos]IdPedido=pedidosIdPedido where pedidosIdPedido=10248
Group by pedidosIdPedido pedidosIdCliente
Ejemplo 88
1 Mostrar la cantidad de productos por categoriacutea
Select CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
[Total de Producto]=sum (UnidadesEnExistencia) from Categoriacuteas inner join
Productos on CategoriacuteasIdCategoriacutea=productosIdCategoriacutea
Group by CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 62
Ejemplo 89
Calcular cuantas ventas tiene cada uno de los vendedores
Select empleadosIdEmpleado empleadosNombre empleadosApellidos
[Total de ventas]=count (pedidosIdPedido) from empleados
Inner join Pedidos on empleadosIdEmpleado=pedidosIdEmpleado
Group by empleadosIdEmpleado empleadosNombre empleadosApellidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 63
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 despueacutes saca la de Plantilla
Recomendaciones a la hora de usar las combinaciones
Combinar tablas en funcioacuten de claves principales y externas
Limite el nuacutemero de tablas de las combinaciones
Select Apellido
Oficio as
OFICIOFUNCION
salario from emp
UNION
Select Apellido
Funcion Salario from
Plantilla
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 64
SUBCONSULTAS
Es una SELECT anidada en una instruccioacuten INSERT DELETE SELECT o UPDATE
Como una tabla derivada
Select eemp_no as Numero
eApellido
from (select emp_no apellido from emp) as e
Como una expresioacuten
Select emp_no as [Numero]
Apellido
Salario
(select avg(Salario) from emp)
as Diferencia
from emp
where oficio = Empleado
Para correlacionar datos
- Expresioacuten dinaacutemica que cambia en cada fila de una consulta externa
- Es una combinacioacuten entre la subconsulta y la fila de la consulta externa
- Dividen consultas complejas con dos o maacutes consultas simples relacionadas
Subconsulta correlacionada
Select apellido oficiodept_no
from emp as e
where 20 lt
(select dept_no from dept as d
where edept_no = ddept_no
and ddnombre = Ventas)
SUBCONSULTAS
1 Mostrar el numero de empleado el apellido y la fecha de alta del empleado mas antiguo de la
empresa
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 65
SELECT emp_noapellido
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_noapellido
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 Jimeacutenez
select apellido oficio from emp where
oficio = (select oficio from emp where apellido = JIMENEZ)
4 Queremos saber el apellido oficio salario y nuacutemero 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 gt (select max (salario) from
emp where dept_no = 30)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 66
5 Mostrar el apellido la funcioacuten sala o departamento de todos los empleados que trabajen en la
empresa
select eApellido eOficio as [Cargo en Empresa] ddnombre as [Oficina]
from emp as e
inner join dept as d
on edept_no = ddept_no
union
select pApellido pfuncion snombre
from plantilla as p
inner join sala as s
on phospital_cod = shospital_cod
and psala_cod = ssala_cod
union
select dApellido despecialidad hnombre
from doctor as d
inner join hospital as h
on dhospital_cod = hhospital_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 = lsquoventasrsquo))
order by 2
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 67
8 Mostrar los empleados que tienen mejor salario que la media de los directores no incluyendo al
presidente
Select from emp where salario gt
(select avg (salario) from emp where oficio = DIRECTOR)
and oficio ltgt PRESIDENTE
9 Mostrar el apellido funcioacuten salario y coacutedigo 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 = lsquoENFERMEROrsquo or
funcion = lsquoENFERMERArsquo) and hospital_cod = (select hospital_cod from hospital where nombre =
lsquoSAN CARLOSrsquo)
Select apellido funcion salario hospital_cod from plantilla where
funcion in (ENFERMEROENFERMERA)
and hospital_cod = (select hospital_cod from hospital
where nombre = SAN CARLOS)
10 Visualizar los datos de los hospitales que tienen personal (Doctores) de cardiologiacutea
Select from hospital where hospital_cod in (select hospital_cod from doctor where
especialidad = lsquoCardiologiacutearsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 68
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 = lsquoPROVINCIALrsquo or
nombre= lsquoGENERALrsquo)
12 Mostrar el apellido de los enfermos que nacieron antes que el Sentildeor Miller
Select apellido from enfermo where Fecha_nac lt (select fecha_nac from enfermo where
apellido = lsquoMILLER Brsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 69
Simulacion de una clausula JOIN
Vamos a mostrar los oficios que estaacuten en maacutes de un departamento
Select distinct e1oficio from emp as e1
where e1oficio in(Select e2oficio from emp as e2
where e1dept_no ltgt e2dept_no)
Se debe utilizar antes una combinacioacuten que una subconsulta la combinacioacuten seriacutea asi dando los
mismos resultados
Select distinct e1Oficio from emp as e1
inner join emp as e2
on e1oficio = e2oficio
where e1dept_no ltgt e2dept_no
Estos son los dos oficios que estaacuten en
maacutes de un departamento
Subconsulta para simular una clausula HAVING
select e1apellidoe1oficio e1salario
from emp as e1
where e1salario gt
(select avg(e2salario) from emp as e2
where e1oficio = e2oficio)
Esta es la consulta utilizando el HAVING que es la que deberiacuteamos utilizar antes que una
subconsulta de simulacioacuten HAVING
SELECT e1apellidoe1oficio e1salario
FROM emp AS e1
INNER JOIN emp AS e2
ON e1oficio = e2oficio
GROUP BY e1oficio e1salarioe1apellido
HAVING e1salario gt AVG (e2salario)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 70
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 33
Nombres de Fechas
Day (fecha)
Devuelve UN INT equivale a Datepart
Select day (getdate ()) as diacutea--gt6 (diacutea en la que se ejecuta la sentencia)
Select Datepart (dd getdate ()) --gt6 (diacutea en la que se ejecuta la sentencia)
Select Month (getdate ()) --gt1 (Mes en la que se ejecuta la sentencia)
Select Datepart (mm getdate ()) --gt1 (Mes en la que se ejecuta la sentencia)
Select Year (getdate ()) --gt2008 (Antildeo en la que se ejecuta la sentencia)
Ejemplo 56
Select year (FechaPedido) as Antildeo from Pedidos where IdPedido = 10352
Ejemplo 57
Select datediff (yyyy FechaPedido getdate()) as Dia from Pedidos where IdPedido = 10352
DateAdd
DateAdd (Datepart number date)
Antildeade un nuacutemero a la fecha puesta
DatePart es el formato de lo que queremos antildeadir
Number es el nuacutemero que queremos incrementar la fecha expuesta
Select convert (datetime1-1-02)
Select dateadd (dd 71-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 comparacioacuten y el tipo de dato
que nos devolveraacute antildeos diacuteas minutos etc
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 34
Ejemplo 58
Select datediff (yyyy FechaPedido getdate ()) as Dia from Pedidos where IdPedido = 10352
Ejercicios de funciones de Fecha
Ejemplo 59
Lista de pedidos emitidos en febrero de 1996
Select from Pedidos where month (FechaPedido) =2 and year (FechaPedido) =1996
Ejemplo 60
Lista de Pedidos mostrando la diferencia en diacuteas entre la fecha del pedido y la fecha de Envioacute
Select IdPedido FechaPedido FechaEnviacuteo diacuteas =datediff (day FechaPedido FechaEnviacuteo) from
pedidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 35
Ejemplo 61
Genere un listado de pedidos en el que la fecha del pedido se muestre en el formato nombre del
diacutea diacutea de mes antildeo
Select IdPedido FechaPedido Fecha=datename (dw IdPedido)+ + str (datepart (dd
IdPedido) 2)+ de +datename (mm IdPedido)+ de +str (datepart (yy IdPedido) 4) from
pedidos
Ejemplo 62
Mostrar de la tabla pedidos la fecha de pedidos en fecha corta
Select IdPedido convert (varchar (30) FechaPedido 106) as [Fecha Corta] from pedidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 36
FUNCIONES MATEMATICAS
ABS
Es el valor Absoluto
Select ABS (-4) as VALOR ABSOLUTO--gt4
CEILING
Devuelve el entero maacutes pequentildeo mayor o igual que la expresioacuten numeacuterica dada
Select CEILING (54) as CEILING--6
FLOOR
Devuelve el entero maacutes grande menor o igual que la expresioacuten numeacuterica dada
Select FLOOR (5) as FLOOR--gt5
POWER
Devuelve el valor de la expresioacuten indicada elevada a la potencia especificada
Select POWER (3 2) as 3 ELEVADO A 2--gt9
RAND
Devuelve un valor float aleatorio de 0 a 1
Las llamadas repetitivas de RAND() en una uacutenica consulta produciraacuten el mismo valor
Select RAND(6) as ALEATORIO--071368515806921451
Select RAND(6) as ALEATORIO--071368515806921451
Select RAND(4) as ALEATORIO--07136478921266981
Rand sobre los milisegundos actuales
Select RAND(DATEPART(msGETDATE())) as ALEATORIO--gt071443047691954253
Select RAND(999999999)--gt068504257551273573
ROUND
Devuelve una expresioacuten numeacuterica redondeada a la longitud o precisioacuten especificada
Round (Nuacutemero Redondeo del Nuacutemero)
ROUND siempre devuelve un valor Si length es un valor negativo y mayor que el nuacutemero de
diacutegitos anteriores al separador decimal ROUND devuelve 0
Select ROUND (1234567 2) --gt1234600
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 37
Select ROUND (1234567-2) --gt1000000
Select ROUND (1234567 0) --gt1230000
Select ROUND (1234567-3) ---gt0
SIGN
Devuelve el signo positivo (+1) cero (0) o negativo (-1) de la expresioacuten especificada
Dice el valor negativo positivo o neutro (0) del valor especificado
Select SIGN (-3) --gt-1
Select SIGN (3) --gt1
Select SIGN (0) --gt0
SQUARE
Devuelve el cuadrado de la expresioacuten especificada
Select SQUARE (4) as bdquoCuadrado‟--gt160
SQRT
Devuelve la raiacutez cuadrada de la expresioacuten especificada
Select SQRT (4) as [RAIZ CUADRADA] --gt20
FUNCIONES DE CADENA
ASCII
Devuelve el coacutedigo ASCII del caraacutecter maacutes a la izquierda de una expresioacuten de caracteres
Select ASCII(A)--gt65
Select ASCII(a)--gt97
Select ascii(aula)--gt97
CHAR
Una funcioacuten de cadena que convierte un coacutedigo ASCII int en un caraacutecter
select char(65)--gtA
select char(97)--gta
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 38
CHARINDEX
Devuelve la posicioacuten inicial de la expresioacuten especificada en una cadena de caracteres
CHARINDEX (expression1 expression2 [ start_location])
Argumentos
expression1
Es una expresioacuten que contiene la secuencia de caracteres que se desea buscar
Expression1 es una expresioacuten del tipo de cadenas cortas de caracteres
Expression2
Es una expresioacuten normalmente una columna
en la que se busca la cadena especificada
Expression2 es de la categoriacutea del tipo de datos cadena de caracteres
start_location
Es la posicioacuten del caraacutecter de expression2 en el que se empieza la buacutesqueda de expression1
Si no se especifica start_location es un nuacutemero negativo o es cero
la buacutesqueda empieza al principio de la cadena expression2
Si expression1 no se encuentra en expression2 CHARINDEX devuelve 0
Si alguno de los dos es null devuelve null
Select charindex (ciemurcielago) --gt4
Select charindex (ciemurcielago 2) --gt4
Select charindex (ciemurcielago 5) --gt0
Select charindex (ciemurcielago-6) --gt4
LEFT
Devuelve la parte de una cadena de caracteres que comienza en un nuacutemero de caracteres
especificado a partir de la izquierda
Select left (murcielago5) --gtmurci
RIGHT
Devuelve la parte de una cadena de caracteres que
Comienza en el nuacutemero de caracteres especificado
En integer_expression a partir de la derecha
Select right (hola que tal5) --gte tal
LEN
Cuenta el nuacutemero de caracteres que se incluyen en la cadena
Select len (murcieacutelago) --gt10
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 39
LOWER
Convierte a Minuacutesculas la cadena especificada
Select lower (MurcIELaGO) as [minusculas] --gtmurcielago
UPPER
Convierte a Mayuacutesculas la cadena especificada
Select upper (murcielago) as [MAYUSCULAS] --gtMURCIELAGO
RTRIM y LTRIM
Elimina los espacios que existen a la izquierda y a la derecha respectivamente
Select Rtrim ( murcieacutelago ) AS [SIN ESPACIOS] --gtmurcieacutelago
Select Ltrim ( murcieacutelago ) AS [SIN ESPACIOS] --gtmurcieacutelago
Select ltrim(rtrim( hola ))+
REPLACE
Reemplaza por una tercera expresioacuten todas las apariciones
de la segunda expresioacuten de cadena proporcionada en la primera expresioacuten de cadena
Select replace (hola que tal estasaA) --gtholA que tAl estAs
Select replace (buenos dias que tal estasuentildentildentilde) --gtbntildentildentildenos diasqntildentildentilde tal estas
SPACE
Coloca el nuacutemero de espacios que se le indiquen para entre una cadena de caracteres
Select hola+space(5)+que tal--gthola que tal
SUBSTRING
Devuelve parte de una expresioacuten de caracteres binaria de texto o de imagen
Sintaxis
SUBSTRING (Expresioacuten Comienzo Duracioacuten)
Argumentos
Expresioacuten
Es una cadena de caracteres cadena binaria texto imagen
Columna o expresioacuten que incluye una columna
No deben usarse expresiones que incluyan funciones de agregado
Start
Es un entero que especifica el punto en que comienza la subcadena
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 40
Length
Es un entero que especifica la longitud de la subcadena
(El nuacutemero de caracteres o bytes que se devuelven)
Select substring (murcielago 3 5) --gtrciel
Select substring (murcielago 3 len (murcielago)) --gtrciel
REVERSE
Devuelve invertida una expresioacuten de caraacutecter
Select reverse (hola)
REPLICATE
Repite una expresioacuten de caracteres un nuacutemero especificado de veces
Select replicate (murcielago 5)
Replicate replicate replicate replicate replicate
STUFF
Elimina el nuacutemero de caracteres especificados e insertados
Otro conjunto de caracteres en un punto de inicio indicado
Select STUFF (Murcieacutelago 2 3 ijklmn) Mijklmnielago
FUNCIONES DE SISTEMA
- APP_NAME () Devuelve el nombre de la aplicacioacuten actual
Select app_name () as [Nombre de la aplicacion]
- DATALENGTH (Expresioacuten) Devuelve un entero que es numero de bites necesarios para
representar esa expresioacuten int
Select datalength (Ninoni) as [Numero de bites]
- ISDATE (Expresioacuten) Dice si la expresioacuten es una fecha o no Devuelve 1 si la expresioacuten es
una fecha y 0 si no es una fecha
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 41
Select isdate (121001) as [Validacioacuten Fecha]
- ISNUMERIC (Expresion) Dice si la expresioacuten es un numero o no Devuelve 1 si la
expresioacuten es un nuacutemero y 0 si la expresioacuten no es nuacutemero
Select isnumeric (ddd) as [Validacion Numero]
- ISNULL (Expresioacuten ExpresionDevuelta) Si la expresioacuten es nula te devuelve la Expresioacuten
Devuelta y si no devuelve la primera Expresioacuten
Select isnull (nullNo nulo) as [Es Nulo]
- PARSENAME (bdquoNombreObjeto‟ ParteNombre)
ParteNombre es un valor de tipo Int que coge unos determinados valores del
NombreObjeto
1 Objeto
2 Propietario
3 Base de Datos
4 Servidor
Select parsename (saposeidondbopedidos1) as [Parte Expresioacuten]
Select parsename (saposeidondbopedidos 2) as [Parte Expresioacuten]
Select parsename (saposeidondbopedidos3) as [Parte Expresioacuten]
Select parsename ( saposeidondbopedidos 4) as [Parte Expresioacuten]
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 42
- SYSTEM_USER Devuelve el usuario del sistema actual
Depende de la autentificacioacuten con la que te hayas conectado
Select system_user as [Usuario conectado]
- USER_NAME() Devuelve el nombre del usuario actual
Select user_name ()
- COALESCE (expresioacuten1 expresioacuten2 )
Devuelve la primera expresioacuten no NULL
Si todos son NULL devuelve NULL
Select coalesce (PrecioUnidad Cantidad) from [detalles de Pedidos] Si el PrecioUnidad es nulo
devolveraacute la Cantidad y si los dos son nulos devolveraacute un campo Null
PROCEDIMIENTOS PARA AGRUPAR Y RESUMIR DATOS
En el examen de certificacioacuten 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 usaraacute la base de datos indicada Ejemplo Ponemos
en el analizador de consultas lo siguiente
Use Northwind
Select from [Order Details]
[Order Details]
Esta tabla perteneciente a la Northwind se encarga de manejar los pedidos
Order Id Nordm de Pedido
Producto Id Nordm de Producto
Ambos campos son Primary Key con lo que no puede haber una combinacioacuten de ambos campos que sea
igual
OrderId ProductId
1 A
1 B
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 43
1 C
2 A
3 C
Es decir en este caso no podriacutea existir una nueva combinacioacuten ldquo1 Ardquo o ldquo2 Ardquo
Quantity Es la cantidad del producto del pedido
ROLLUP
Se usa para presentar resuacutemenes de datos A de usarse junto con la clausula group by lo que hace es
realizar un resumen de los campos incluidos en el rollup
Ejemplo 63
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
Group by ProductID OrderID
with Rollup
Order by ProductID OrderID
Este ejemplo suma todas las cantidades y mediante
rollup muestra una fila con la suma de todas las
cantidades de cada producto y ademaacutes otra fila con la
suma de todas las cantidades de todos los productos El
resultado de este ejemplo seriacutea el que muestra la
imagen
Ejemplo 64
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
where orderid lt 10250
Group by ProductID OrderID
with Rollup
Order by ProductID OrderID
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 44
CUBE
Al igual que Rollup realiza resuacutemenes de campos agrupados Pero en este caso muestra un resumen con
cada combinacioacuten posible de los campos agrupados
Ejemplo 65
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
where orderid lt 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 combinacioacuten posible entre el
productid y el orderid
GROUPING
Indica si el resultado de un campo es el que hay en la propia tabla o se ha introducido mediante una
claacuteusula de resumen es decir para saber por ejemplo si un ldquoNullrdquo 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 lt 10250 Group by ProductID
OrderID with Cube Order by ProductID OrderID
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 45
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
Ponieacutendole un alias al
grouping saldriacutea el nombre
de columna que le
indiquemos
COMPUTE
Realiza un resumen en una columna aparte con el resultado de la funcioacuten de agregado indicada Su
formato seriacutea Compute funcioacuten(campo) No se puede utilizar en aplicaciones cliente servidor es una
clausula meramente informativa Tampoco se le pueden poner alias a los resuacutemenes
Ejemplo 67
Select Productid Orderid Quantity From [Order Details] order by ProductID Orderid compute
Sum(quantity)
Vemos que muestra la
columna con la suma
total de todas las
cantidades
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 46
Ejercicios de ROLLUP GROUPING y CUBE
Ejemplo 68
Realizar una consulta que resuma la cantidad de artiacuteculos pedidos por cada iacutendice de producto y
nuacutemero de pedido Realizando un caacutelculo acumulativo
select productid as [PRODUCTO] orderid as [Nordm PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] group by productid orderid with rollup order by productid orderid
PRODUCTO Nordm 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
hellip
Ejemplo 69
Modificacioacuten al ejercicio anterior Realizar el mismo resumen pero uacutenicamente para el producto
cuyo id es 50
select productid as [PRODUCTO] orderid as [Nordm PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] where productid = 50 group by productid orderid with rollup order by productid ordered
PRODUCTO Nordm 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
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 47
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 modificacioacuten 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 [Nordm PEDIDO] grouping(orderid) as [GRUPO PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] where productid = 50 group by Productidorderid with cube order by productidorderid
PRODUCTO GRUPO PRODUCTO Nordm PEDIDO GRUPO PEDIDO SUMA TOTAL
----------- -------------- ----------- ------------ -----------
NULL 1 NULL 1 235
NULL 1 10350 0 15
NULL 1 10383 0 15
NULL 1 10429 0 40
NULL 1 10465 0 25
NULL 1 10637 0 25
NULL 1 10729 0 40
NULL 1 10751 0 20
NULL 1 10920 0 24
NULL 1 10948 0 9
NULL 1 11072 0 22
50 0 NULL 1 235
50 0 10350 0 15
50 0 10383 0 15
50 0 10429 0 40
50 0 10465 0 25
50 0 10637 0 25
50 0 10729 0 40
50 0 10751 0 20
50 0 10920 0 24
50 0 10948 0 9
50 0 11072 0 22
(22 filas afectadas)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 48
Obtencioacuten de resuacutemenes 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 maacutes columnas y
luego efectuar alguna operacioacuten de resumen sobre cada grupo asiacute generado
La diferencia con GROUP BY es que permite mostrar informacioacuten mas detallada de cada grupo
Ejemplo 71
Lista de pedidos que muestre por coacutedigo de pedido la cantidad de productos vendidos por cada uno
de ellos
select Idpedidoidproductopreciounidadcantidad[Sub Total]=sum(PreciounidadCantidad) from
[detalles de pedidos] group by Idpedidoidproductopreciounidadcantidad order by IdPedido compute
sum(Cantidad) by IdPedido
EJERCICIOS CON COMPUTE
Ejemplo 72
Generar un resumen de subtotales en una consulta que devuelva el nuacutemero de pedido la cantidad
pedida para todos los orderid 11070
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 49
Select Orderid as [Nordm PEDIDO] Quantity AS [CANTIDAD] From [Order Details] where orderid gt= 11070 order by Orderid compute Sum(quantity) by orderid compute sum(quantity)
Nordm PEDIDO CANTIDAD
----------- --------
11070 40
11070 20
11070 30
11070 20
sum
===========
110
sum
===========
110
(6 filas afectadas)
Ejemplo 73
Generar un resumen con calculo de subtotales similar al anterior pero para los orderid 11075 y
11076
Select Orderid as [Nordm PEDIDO] Quantity as [CANTIDAD] From [Order Details] where orderid = 11075 or orderid = 11076 order by Orderid compute Sum(quantity) by ordered Nordm PEDIDO CANTIDAD ----------- -------- 11075 10 11075 30 11075 2 sum =========== 42 Nordm PEDIDO CANTIDAD ----------- -------- 11076 20 11076 20 11076 10
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 50
sum =========== 50 (8 filas afectadas)
Ejemplo 74
Modificacioacuten al ejercicio anterior Agregar la cantidad total y la cantidad promedio al final del
informe
Select Orderid as [Nordm 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)
Nordm PEDIDO CANTIDAD
----------- --------
11075 10
11075 30
11075 2
sum
===========
42
Nordm PEDIDO CANTIDAD
----------- --------
11076 20
11076 20
11076 10
sum
===========
50
sum
===========
92
avg
===========
15
(10 filas afectadas)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 51
Ejemplo 75
Seleccionar de forma agrupada por tipo todos los tipos la suma de los precios y la suma del
anticipo de la tabla tiacutetulos
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 199900 50000000
business 119500 50000000
business 29900 101250000
business 199900 50000000
sum
=====================
549200
avg
=====================
62812500
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
mod_cook 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
avg
=====================
75000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
popular_comp 229500 70000000
popular_comp 200000 80000000
popular_comp NULL NULL
sum
=====================
429500
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 52
avg
=====================
75000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
psychology 215900 70000000
psychology 109500 22750000
psychology 70000 60000000
psychology 199900 20000000
psychology 79900 40000000
sum
=====================
675200
avg
=====================
42550000
(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 ademaacutes 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 199900 50000000
business 119500 50000000
business 29900 101250000
business 199900 50000000
sum
=====================
549200
sum
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 53
=====================
251250000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
mod_cook 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
popular_comp 229500 70000000
popular_comp 200000 80000000
popular_comp NULL NULL
sum
=====================
429500
sum
=====================
150000000
(30 filas afectadas)
Ejemplo 77
Generar un informe que muestre la suma de los precios de los libros de psicologiacutea 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 109500
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 54
psychology 0736 70000
psychology 0736 199900
psychology 0736 79900
sum
=====================
459300
TIPO CODIGO EDITOR PRECIO
------------ ------------- ---------------------
psychology 0877 215900
sum
=====================
215900
(7 filas afectadas)
Ejemplo 78
Generar un informe que obtenga la suma de los precios de todos los libros de psicologiacutea asiacute como la
suma de los precios de los libros de psicologiacutea 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 109500
psychology 0736 70000
psychology 0736 199900
psychology 0736 79900
sum
=====================
459300
TIPO CODIGO EDITOR PRECIO
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 55
------------ ------------- ---------------------
psychology 0877 215900
sum
=====================
215900
sum
=====================
675200
(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 199900 0000
mod_cook 0877 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO CODIGO EDITOR PRECIO ANTICIPO
------------ ------------- --------------------- ---------------------
trad_cook 0877 119500 40000000
trad_cook 0877 209500 70000000
trad_cook 0877 149900 80000000
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 56
sum
=====================
478900
sum
=====================
190000000
(9 filas afectadas)
Ejemplo 80
Generar un informe que muestre todos los tiacutetulos precio y anticipo de aquellos tiacutetulos que tengan
un precio superior a 20 doacutelares Ofreceraacute tambieacuten la suma total del precio y del anticipo
Select title as [TITULO] price as [PRECIO] advance as [ANTICIPO] From titles where price gt 20 order by title compute sum(price) compute sum(advance)
TITULO PRECIO ANTICIPO
-------------------------------------------------------------------------------- --------------------- -------------
--------
But Is It User Friendly 229500 70000000
Computer Phobic AND Non-Phobic Individuals Behavior Variations 215900
70000000
Onions Leeks and Garlic Cooking Secrets of the Mediterranean 209500
70000000
sum
=====================
654900
sum
=====================
210000000
(5 filas afectadas)
Ejemplo 81
Generar un informe que muestre el precio el tipo y el nuacutemero de editor de la tabla titles de todos
aquellas obras que pertenezcan la categoriacutea de ldquobusinessrdquo Ademaacutes apareceraacute la suma total de
precios y el maacuteximo pub_id de esta seleccioacuten
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 57
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 29900 0736
business 199900 1389
business 199900 1389
business 119500 1389
sum
=====================
549200
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 Mostraraacute la suma de los precios y los anticipos por tipo y luego calcularaacute 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 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
trad_cook 209500 70000000
trad_cook 119500 40000000
trad_cook 149900 80000000
sum
=====================
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 58
478900
sum
=====================
190000000
sum
=====================
708700
sum
=====================
340000000
(11 filas afectadas)
Eliminacioacuten 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 iquestA que precio se ah vendido los productos
Select IdProducto Preciounidad from [Detalles de pedidos] order by IdProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 59
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 mayoriacutea de las consultas que se hacen en una base de datos requiere que se lean datos procedentes
de dos oacute maacutes tablas
INNER JOIN- son las filas que satisfacen la condicioacuten de la combinacioacuten
En la siguiente sentencia SQL enlaza 2 tablas la tabla clientes y la tabla pedidos en esta ejemplo me
muestra los campos nombre compantildeiacutea y el campo idpedido
La uacutenica condicioacuten es que las 2 tablas tengan un campo en comuacuten
Ejemplo 84
select clientesNombreCompantildeiacuteapedidosidpedido from clientes inner join pedidos on
clientesidcliente=pedidosidcliente
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 60
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 pedidosIdPedido pedidosIdCliente 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 pedidosIdPedido pedidosIdCliente order
by pedidos IdPedido
CROSS JOIN
Un Cross Join es la consulta correlacionada que combine cada una de las filas de una de las tablas con
todas las filas de la otra tabla
No es necesario que exista una columna en comuacuten para ejecutar el Cross Join
Ejemplo 86
La siguiente consulta combina cada una de las filas de la tabla categoriacuteas con cada una de las filas de la
tabla productos
select productosNombreProductocategoriasNombrecategoria from productos cross join categorias
order by productosNombreProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 61
Ejercicios de consultas Muacuteltiples
Ejemplo 87
Mostrar el pedidos completo con el id=10248
Select pedidosIdPedido pedidosIdCliente
Total=sum ([detalles de pedidos]Preciounidad[detalles de pedidos]Cantidad)
From [detalles de pedidos] inner join pedidos on
[Detalles de pedidos]IdPedido=pedidosIdPedido where pedidosIdPedido=10248
Group by pedidosIdPedido pedidosIdCliente
Ejemplo 88
1 Mostrar la cantidad de productos por categoriacutea
Select CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
[Total de Producto]=sum (UnidadesEnExistencia) from Categoriacuteas inner join
Productos on CategoriacuteasIdCategoriacutea=productosIdCategoriacutea
Group by CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 62
Ejemplo 89
Calcular cuantas ventas tiene cada uno de los vendedores
Select empleadosIdEmpleado empleadosNombre empleadosApellidos
[Total de ventas]=count (pedidosIdPedido) from empleados
Inner join Pedidos on empleadosIdEmpleado=pedidosIdEmpleado
Group by empleadosIdEmpleado empleadosNombre empleadosApellidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 63
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 despueacutes saca la de Plantilla
Recomendaciones a la hora de usar las combinaciones
Combinar tablas en funcioacuten de claves principales y externas
Limite el nuacutemero de tablas de las combinaciones
Select Apellido
Oficio as
OFICIOFUNCION
salario from emp
UNION
Select Apellido
Funcion Salario from
Plantilla
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 64
SUBCONSULTAS
Es una SELECT anidada en una instruccioacuten INSERT DELETE SELECT o UPDATE
Como una tabla derivada
Select eemp_no as Numero
eApellido
from (select emp_no apellido from emp) as e
Como una expresioacuten
Select emp_no as [Numero]
Apellido
Salario
(select avg(Salario) from emp)
as Diferencia
from emp
where oficio = Empleado
Para correlacionar datos
- Expresioacuten dinaacutemica que cambia en cada fila de una consulta externa
- Es una combinacioacuten entre la subconsulta y la fila de la consulta externa
- Dividen consultas complejas con dos o maacutes consultas simples relacionadas
Subconsulta correlacionada
Select apellido oficiodept_no
from emp as e
where 20 lt
(select dept_no from dept as d
where edept_no = ddept_no
and ddnombre = Ventas)
SUBCONSULTAS
1 Mostrar el numero de empleado el apellido y la fecha de alta del empleado mas antiguo de la
empresa
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 65
SELECT emp_noapellido
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_noapellido
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 Jimeacutenez
select apellido oficio from emp where
oficio = (select oficio from emp where apellido = JIMENEZ)
4 Queremos saber el apellido oficio salario y nuacutemero 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 gt (select max (salario) from
emp where dept_no = 30)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 66
5 Mostrar el apellido la funcioacuten sala o departamento de todos los empleados que trabajen en la
empresa
select eApellido eOficio as [Cargo en Empresa] ddnombre as [Oficina]
from emp as e
inner join dept as d
on edept_no = ddept_no
union
select pApellido pfuncion snombre
from plantilla as p
inner join sala as s
on phospital_cod = shospital_cod
and psala_cod = ssala_cod
union
select dApellido despecialidad hnombre
from doctor as d
inner join hospital as h
on dhospital_cod = hhospital_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 = lsquoventasrsquo))
order by 2
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 67
8 Mostrar los empleados que tienen mejor salario que la media de los directores no incluyendo al
presidente
Select from emp where salario gt
(select avg (salario) from emp where oficio = DIRECTOR)
and oficio ltgt PRESIDENTE
9 Mostrar el apellido funcioacuten salario y coacutedigo 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 = lsquoENFERMEROrsquo or
funcion = lsquoENFERMERArsquo) and hospital_cod = (select hospital_cod from hospital where nombre =
lsquoSAN CARLOSrsquo)
Select apellido funcion salario hospital_cod from plantilla where
funcion in (ENFERMEROENFERMERA)
and hospital_cod = (select hospital_cod from hospital
where nombre = SAN CARLOS)
10 Visualizar los datos de los hospitales que tienen personal (Doctores) de cardiologiacutea
Select from hospital where hospital_cod in (select hospital_cod from doctor where
especialidad = lsquoCardiologiacutearsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 68
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 = lsquoPROVINCIALrsquo or
nombre= lsquoGENERALrsquo)
12 Mostrar el apellido de los enfermos que nacieron antes que el Sentildeor Miller
Select apellido from enfermo where Fecha_nac lt (select fecha_nac from enfermo where
apellido = lsquoMILLER Brsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 69
Simulacion de una clausula JOIN
Vamos a mostrar los oficios que estaacuten en maacutes de un departamento
Select distinct e1oficio from emp as e1
where e1oficio in(Select e2oficio from emp as e2
where e1dept_no ltgt e2dept_no)
Se debe utilizar antes una combinacioacuten que una subconsulta la combinacioacuten seriacutea asi dando los
mismos resultados
Select distinct e1Oficio from emp as e1
inner join emp as e2
on e1oficio = e2oficio
where e1dept_no ltgt e2dept_no
Estos son los dos oficios que estaacuten en
maacutes de un departamento
Subconsulta para simular una clausula HAVING
select e1apellidoe1oficio e1salario
from emp as e1
where e1salario gt
(select avg(e2salario) from emp as e2
where e1oficio = e2oficio)
Esta es la consulta utilizando el HAVING que es la que deberiacuteamos utilizar antes que una
subconsulta de simulacioacuten HAVING
SELECT e1apellidoe1oficio e1salario
FROM emp AS e1
INNER JOIN emp AS e2
ON e1oficio = e2oficio
GROUP BY e1oficio e1salarioe1apellido
HAVING e1salario gt AVG (e2salario)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 70
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 34
Ejemplo 58
Select datediff (yyyy FechaPedido getdate ()) as Dia from Pedidos where IdPedido = 10352
Ejercicios de funciones de Fecha
Ejemplo 59
Lista de pedidos emitidos en febrero de 1996
Select from Pedidos where month (FechaPedido) =2 and year (FechaPedido) =1996
Ejemplo 60
Lista de Pedidos mostrando la diferencia en diacuteas entre la fecha del pedido y la fecha de Envioacute
Select IdPedido FechaPedido FechaEnviacuteo diacuteas =datediff (day FechaPedido FechaEnviacuteo) from
pedidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 35
Ejemplo 61
Genere un listado de pedidos en el que la fecha del pedido se muestre en el formato nombre del
diacutea diacutea de mes antildeo
Select IdPedido FechaPedido Fecha=datename (dw IdPedido)+ + str (datepart (dd
IdPedido) 2)+ de +datename (mm IdPedido)+ de +str (datepart (yy IdPedido) 4) from
pedidos
Ejemplo 62
Mostrar de la tabla pedidos la fecha de pedidos en fecha corta
Select IdPedido convert (varchar (30) FechaPedido 106) as [Fecha Corta] from pedidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 36
FUNCIONES MATEMATICAS
ABS
Es el valor Absoluto
Select ABS (-4) as VALOR ABSOLUTO--gt4
CEILING
Devuelve el entero maacutes pequentildeo mayor o igual que la expresioacuten numeacuterica dada
Select CEILING (54) as CEILING--6
FLOOR
Devuelve el entero maacutes grande menor o igual que la expresioacuten numeacuterica dada
Select FLOOR (5) as FLOOR--gt5
POWER
Devuelve el valor de la expresioacuten indicada elevada a la potencia especificada
Select POWER (3 2) as 3 ELEVADO A 2--gt9
RAND
Devuelve un valor float aleatorio de 0 a 1
Las llamadas repetitivas de RAND() en una uacutenica consulta produciraacuten el mismo valor
Select RAND(6) as ALEATORIO--071368515806921451
Select RAND(6) as ALEATORIO--071368515806921451
Select RAND(4) as ALEATORIO--07136478921266981
Rand sobre los milisegundos actuales
Select RAND(DATEPART(msGETDATE())) as ALEATORIO--gt071443047691954253
Select RAND(999999999)--gt068504257551273573
ROUND
Devuelve una expresioacuten numeacuterica redondeada a la longitud o precisioacuten especificada
Round (Nuacutemero Redondeo del Nuacutemero)
ROUND siempre devuelve un valor Si length es un valor negativo y mayor que el nuacutemero de
diacutegitos anteriores al separador decimal ROUND devuelve 0
Select ROUND (1234567 2) --gt1234600
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 37
Select ROUND (1234567-2) --gt1000000
Select ROUND (1234567 0) --gt1230000
Select ROUND (1234567-3) ---gt0
SIGN
Devuelve el signo positivo (+1) cero (0) o negativo (-1) de la expresioacuten especificada
Dice el valor negativo positivo o neutro (0) del valor especificado
Select SIGN (-3) --gt-1
Select SIGN (3) --gt1
Select SIGN (0) --gt0
SQUARE
Devuelve el cuadrado de la expresioacuten especificada
Select SQUARE (4) as bdquoCuadrado‟--gt160
SQRT
Devuelve la raiacutez cuadrada de la expresioacuten especificada
Select SQRT (4) as [RAIZ CUADRADA] --gt20
FUNCIONES DE CADENA
ASCII
Devuelve el coacutedigo ASCII del caraacutecter maacutes a la izquierda de una expresioacuten de caracteres
Select ASCII(A)--gt65
Select ASCII(a)--gt97
Select ascii(aula)--gt97
CHAR
Una funcioacuten de cadena que convierte un coacutedigo ASCII int en un caraacutecter
select char(65)--gtA
select char(97)--gta
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 38
CHARINDEX
Devuelve la posicioacuten inicial de la expresioacuten especificada en una cadena de caracteres
CHARINDEX (expression1 expression2 [ start_location])
Argumentos
expression1
Es una expresioacuten que contiene la secuencia de caracteres que se desea buscar
Expression1 es una expresioacuten del tipo de cadenas cortas de caracteres
Expression2
Es una expresioacuten normalmente una columna
en la que se busca la cadena especificada
Expression2 es de la categoriacutea del tipo de datos cadena de caracteres
start_location
Es la posicioacuten del caraacutecter de expression2 en el que se empieza la buacutesqueda de expression1
Si no se especifica start_location es un nuacutemero negativo o es cero
la buacutesqueda empieza al principio de la cadena expression2
Si expression1 no se encuentra en expression2 CHARINDEX devuelve 0
Si alguno de los dos es null devuelve null
Select charindex (ciemurcielago) --gt4
Select charindex (ciemurcielago 2) --gt4
Select charindex (ciemurcielago 5) --gt0
Select charindex (ciemurcielago-6) --gt4
LEFT
Devuelve la parte de una cadena de caracteres que comienza en un nuacutemero de caracteres
especificado a partir de la izquierda
Select left (murcielago5) --gtmurci
RIGHT
Devuelve la parte de una cadena de caracteres que
Comienza en el nuacutemero de caracteres especificado
En integer_expression a partir de la derecha
Select right (hola que tal5) --gte tal
LEN
Cuenta el nuacutemero de caracteres que se incluyen en la cadena
Select len (murcieacutelago) --gt10
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 39
LOWER
Convierte a Minuacutesculas la cadena especificada
Select lower (MurcIELaGO) as [minusculas] --gtmurcielago
UPPER
Convierte a Mayuacutesculas la cadena especificada
Select upper (murcielago) as [MAYUSCULAS] --gtMURCIELAGO
RTRIM y LTRIM
Elimina los espacios que existen a la izquierda y a la derecha respectivamente
Select Rtrim ( murcieacutelago ) AS [SIN ESPACIOS] --gtmurcieacutelago
Select Ltrim ( murcieacutelago ) AS [SIN ESPACIOS] --gtmurcieacutelago
Select ltrim(rtrim( hola ))+
REPLACE
Reemplaza por una tercera expresioacuten todas las apariciones
de la segunda expresioacuten de cadena proporcionada en la primera expresioacuten de cadena
Select replace (hola que tal estasaA) --gtholA que tAl estAs
Select replace (buenos dias que tal estasuentildentildentilde) --gtbntildentildentildenos diasqntildentildentilde tal estas
SPACE
Coloca el nuacutemero de espacios que se le indiquen para entre una cadena de caracteres
Select hola+space(5)+que tal--gthola que tal
SUBSTRING
Devuelve parte de una expresioacuten de caracteres binaria de texto o de imagen
Sintaxis
SUBSTRING (Expresioacuten Comienzo Duracioacuten)
Argumentos
Expresioacuten
Es una cadena de caracteres cadena binaria texto imagen
Columna o expresioacuten que incluye una columna
No deben usarse expresiones que incluyan funciones de agregado
Start
Es un entero que especifica el punto en que comienza la subcadena
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 40
Length
Es un entero que especifica la longitud de la subcadena
(El nuacutemero de caracteres o bytes que se devuelven)
Select substring (murcielago 3 5) --gtrciel
Select substring (murcielago 3 len (murcielago)) --gtrciel
REVERSE
Devuelve invertida una expresioacuten de caraacutecter
Select reverse (hola)
REPLICATE
Repite una expresioacuten de caracteres un nuacutemero especificado de veces
Select replicate (murcielago 5)
Replicate replicate replicate replicate replicate
STUFF
Elimina el nuacutemero de caracteres especificados e insertados
Otro conjunto de caracteres en un punto de inicio indicado
Select STUFF (Murcieacutelago 2 3 ijklmn) Mijklmnielago
FUNCIONES DE SISTEMA
- APP_NAME () Devuelve el nombre de la aplicacioacuten actual
Select app_name () as [Nombre de la aplicacion]
- DATALENGTH (Expresioacuten) Devuelve un entero que es numero de bites necesarios para
representar esa expresioacuten int
Select datalength (Ninoni) as [Numero de bites]
- ISDATE (Expresioacuten) Dice si la expresioacuten es una fecha o no Devuelve 1 si la expresioacuten es
una fecha y 0 si no es una fecha
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 41
Select isdate (121001) as [Validacioacuten Fecha]
- ISNUMERIC (Expresion) Dice si la expresioacuten es un numero o no Devuelve 1 si la
expresioacuten es un nuacutemero y 0 si la expresioacuten no es nuacutemero
Select isnumeric (ddd) as [Validacion Numero]
- ISNULL (Expresioacuten ExpresionDevuelta) Si la expresioacuten es nula te devuelve la Expresioacuten
Devuelta y si no devuelve la primera Expresioacuten
Select isnull (nullNo nulo) as [Es Nulo]
- PARSENAME (bdquoNombreObjeto‟ ParteNombre)
ParteNombre es un valor de tipo Int que coge unos determinados valores del
NombreObjeto
1 Objeto
2 Propietario
3 Base de Datos
4 Servidor
Select parsename (saposeidondbopedidos1) as [Parte Expresioacuten]
Select parsename (saposeidondbopedidos 2) as [Parte Expresioacuten]
Select parsename (saposeidondbopedidos3) as [Parte Expresioacuten]
Select parsename ( saposeidondbopedidos 4) as [Parte Expresioacuten]
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 42
- SYSTEM_USER Devuelve el usuario del sistema actual
Depende de la autentificacioacuten con la que te hayas conectado
Select system_user as [Usuario conectado]
- USER_NAME() Devuelve el nombre del usuario actual
Select user_name ()
- COALESCE (expresioacuten1 expresioacuten2 )
Devuelve la primera expresioacuten no NULL
Si todos son NULL devuelve NULL
Select coalesce (PrecioUnidad Cantidad) from [detalles de Pedidos] Si el PrecioUnidad es nulo
devolveraacute la Cantidad y si los dos son nulos devolveraacute un campo Null
PROCEDIMIENTOS PARA AGRUPAR Y RESUMIR DATOS
En el examen de certificacioacuten 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 usaraacute la base de datos indicada Ejemplo Ponemos
en el analizador de consultas lo siguiente
Use Northwind
Select from [Order Details]
[Order Details]
Esta tabla perteneciente a la Northwind se encarga de manejar los pedidos
Order Id Nordm de Pedido
Producto Id Nordm de Producto
Ambos campos son Primary Key con lo que no puede haber una combinacioacuten de ambos campos que sea
igual
OrderId ProductId
1 A
1 B
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 43
1 C
2 A
3 C
Es decir en este caso no podriacutea existir una nueva combinacioacuten ldquo1 Ardquo o ldquo2 Ardquo
Quantity Es la cantidad del producto del pedido
ROLLUP
Se usa para presentar resuacutemenes de datos A de usarse junto con la clausula group by lo que hace es
realizar un resumen de los campos incluidos en el rollup
Ejemplo 63
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
Group by ProductID OrderID
with Rollup
Order by ProductID OrderID
Este ejemplo suma todas las cantidades y mediante
rollup muestra una fila con la suma de todas las
cantidades de cada producto y ademaacutes otra fila con la
suma de todas las cantidades de todos los productos El
resultado de este ejemplo seriacutea el que muestra la
imagen
Ejemplo 64
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
where orderid lt 10250
Group by ProductID OrderID
with Rollup
Order by ProductID OrderID
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 44
CUBE
Al igual que Rollup realiza resuacutemenes de campos agrupados Pero en este caso muestra un resumen con
cada combinacioacuten posible de los campos agrupados
Ejemplo 65
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
where orderid lt 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 combinacioacuten posible entre el
productid y el orderid
GROUPING
Indica si el resultado de un campo es el que hay en la propia tabla o se ha introducido mediante una
claacuteusula de resumen es decir para saber por ejemplo si un ldquoNullrdquo 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 lt 10250 Group by ProductID
OrderID with Cube Order by ProductID OrderID
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 45
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
Ponieacutendole un alias al
grouping saldriacutea el nombre
de columna que le
indiquemos
COMPUTE
Realiza un resumen en una columna aparte con el resultado de la funcioacuten de agregado indicada Su
formato seriacutea Compute funcioacuten(campo) No se puede utilizar en aplicaciones cliente servidor es una
clausula meramente informativa Tampoco se le pueden poner alias a los resuacutemenes
Ejemplo 67
Select Productid Orderid Quantity From [Order Details] order by ProductID Orderid compute
Sum(quantity)
Vemos que muestra la
columna con la suma
total de todas las
cantidades
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 46
Ejercicios de ROLLUP GROUPING y CUBE
Ejemplo 68
Realizar una consulta que resuma la cantidad de artiacuteculos pedidos por cada iacutendice de producto y
nuacutemero de pedido Realizando un caacutelculo acumulativo
select productid as [PRODUCTO] orderid as [Nordm PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] group by productid orderid with rollup order by productid orderid
PRODUCTO Nordm 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
hellip
Ejemplo 69
Modificacioacuten al ejercicio anterior Realizar el mismo resumen pero uacutenicamente para el producto
cuyo id es 50
select productid as [PRODUCTO] orderid as [Nordm PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] where productid = 50 group by productid orderid with rollup order by productid ordered
PRODUCTO Nordm 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
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 47
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 modificacioacuten 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 [Nordm PEDIDO] grouping(orderid) as [GRUPO PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] where productid = 50 group by Productidorderid with cube order by productidorderid
PRODUCTO GRUPO PRODUCTO Nordm PEDIDO GRUPO PEDIDO SUMA TOTAL
----------- -------------- ----------- ------------ -----------
NULL 1 NULL 1 235
NULL 1 10350 0 15
NULL 1 10383 0 15
NULL 1 10429 0 40
NULL 1 10465 0 25
NULL 1 10637 0 25
NULL 1 10729 0 40
NULL 1 10751 0 20
NULL 1 10920 0 24
NULL 1 10948 0 9
NULL 1 11072 0 22
50 0 NULL 1 235
50 0 10350 0 15
50 0 10383 0 15
50 0 10429 0 40
50 0 10465 0 25
50 0 10637 0 25
50 0 10729 0 40
50 0 10751 0 20
50 0 10920 0 24
50 0 10948 0 9
50 0 11072 0 22
(22 filas afectadas)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 48
Obtencioacuten de resuacutemenes 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 maacutes columnas y
luego efectuar alguna operacioacuten de resumen sobre cada grupo asiacute generado
La diferencia con GROUP BY es que permite mostrar informacioacuten mas detallada de cada grupo
Ejemplo 71
Lista de pedidos que muestre por coacutedigo de pedido la cantidad de productos vendidos por cada uno
de ellos
select Idpedidoidproductopreciounidadcantidad[Sub Total]=sum(PreciounidadCantidad) from
[detalles de pedidos] group by Idpedidoidproductopreciounidadcantidad order by IdPedido compute
sum(Cantidad) by IdPedido
EJERCICIOS CON COMPUTE
Ejemplo 72
Generar un resumen de subtotales en una consulta que devuelva el nuacutemero de pedido la cantidad
pedida para todos los orderid 11070
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 49
Select Orderid as [Nordm PEDIDO] Quantity AS [CANTIDAD] From [Order Details] where orderid gt= 11070 order by Orderid compute Sum(quantity) by orderid compute sum(quantity)
Nordm PEDIDO CANTIDAD
----------- --------
11070 40
11070 20
11070 30
11070 20
sum
===========
110
sum
===========
110
(6 filas afectadas)
Ejemplo 73
Generar un resumen con calculo de subtotales similar al anterior pero para los orderid 11075 y
11076
Select Orderid as [Nordm PEDIDO] Quantity as [CANTIDAD] From [Order Details] where orderid = 11075 or orderid = 11076 order by Orderid compute Sum(quantity) by ordered Nordm PEDIDO CANTIDAD ----------- -------- 11075 10 11075 30 11075 2 sum =========== 42 Nordm PEDIDO CANTIDAD ----------- -------- 11076 20 11076 20 11076 10
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 50
sum =========== 50 (8 filas afectadas)
Ejemplo 74
Modificacioacuten al ejercicio anterior Agregar la cantidad total y la cantidad promedio al final del
informe
Select Orderid as [Nordm 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)
Nordm PEDIDO CANTIDAD
----------- --------
11075 10
11075 30
11075 2
sum
===========
42
Nordm PEDIDO CANTIDAD
----------- --------
11076 20
11076 20
11076 10
sum
===========
50
sum
===========
92
avg
===========
15
(10 filas afectadas)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 51
Ejemplo 75
Seleccionar de forma agrupada por tipo todos los tipos la suma de los precios y la suma del
anticipo de la tabla tiacutetulos
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 199900 50000000
business 119500 50000000
business 29900 101250000
business 199900 50000000
sum
=====================
549200
avg
=====================
62812500
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
mod_cook 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
avg
=====================
75000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
popular_comp 229500 70000000
popular_comp 200000 80000000
popular_comp NULL NULL
sum
=====================
429500
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 52
avg
=====================
75000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
psychology 215900 70000000
psychology 109500 22750000
psychology 70000 60000000
psychology 199900 20000000
psychology 79900 40000000
sum
=====================
675200
avg
=====================
42550000
(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 ademaacutes 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 199900 50000000
business 119500 50000000
business 29900 101250000
business 199900 50000000
sum
=====================
549200
sum
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 53
=====================
251250000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
mod_cook 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
popular_comp 229500 70000000
popular_comp 200000 80000000
popular_comp NULL NULL
sum
=====================
429500
sum
=====================
150000000
(30 filas afectadas)
Ejemplo 77
Generar un informe que muestre la suma de los precios de los libros de psicologiacutea 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 109500
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 54
psychology 0736 70000
psychology 0736 199900
psychology 0736 79900
sum
=====================
459300
TIPO CODIGO EDITOR PRECIO
------------ ------------- ---------------------
psychology 0877 215900
sum
=====================
215900
(7 filas afectadas)
Ejemplo 78
Generar un informe que obtenga la suma de los precios de todos los libros de psicologiacutea asiacute como la
suma de los precios de los libros de psicologiacutea 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 109500
psychology 0736 70000
psychology 0736 199900
psychology 0736 79900
sum
=====================
459300
TIPO CODIGO EDITOR PRECIO
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 55
------------ ------------- ---------------------
psychology 0877 215900
sum
=====================
215900
sum
=====================
675200
(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 199900 0000
mod_cook 0877 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO CODIGO EDITOR PRECIO ANTICIPO
------------ ------------- --------------------- ---------------------
trad_cook 0877 119500 40000000
trad_cook 0877 209500 70000000
trad_cook 0877 149900 80000000
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 56
sum
=====================
478900
sum
=====================
190000000
(9 filas afectadas)
Ejemplo 80
Generar un informe que muestre todos los tiacutetulos precio y anticipo de aquellos tiacutetulos que tengan
un precio superior a 20 doacutelares Ofreceraacute tambieacuten la suma total del precio y del anticipo
Select title as [TITULO] price as [PRECIO] advance as [ANTICIPO] From titles where price gt 20 order by title compute sum(price) compute sum(advance)
TITULO PRECIO ANTICIPO
-------------------------------------------------------------------------------- --------------------- -------------
--------
But Is It User Friendly 229500 70000000
Computer Phobic AND Non-Phobic Individuals Behavior Variations 215900
70000000
Onions Leeks and Garlic Cooking Secrets of the Mediterranean 209500
70000000
sum
=====================
654900
sum
=====================
210000000
(5 filas afectadas)
Ejemplo 81
Generar un informe que muestre el precio el tipo y el nuacutemero de editor de la tabla titles de todos
aquellas obras que pertenezcan la categoriacutea de ldquobusinessrdquo Ademaacutes apareceraacute la suma total de
precios y el maacuteximo pub_id de esta seleccioacuten
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 57
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 29900 0736
business 199900 1389
business 199900 1389
business 119500 1389
sum
=====================
549200
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 Mostraraacute la suma de los precios y los anticipos por tipo y luego calcularaacute 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 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
trad_cook 209500 70000000
trad_cook 119500 40000000
trad_cook 149900 80000000
sum
=====================
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 58
478900
sum
=====================
190000000
sum
=====================
708700
sum
=====================
340000000
(11 filas afectadas)
Eliminacioacuten 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 iquestA que precio se ah vendido los productos
Select IdProducto Preciounidad from [Detalles de pedidos] order by IdProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 59
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 mayoriacutea de las consultas que se hacen en una base de datos requiere que se lean datos procedentes
de dos oacute maacutes tablas
INNER JOIN- son las filas que satisfacen la condicioacuten de la combinacioacuten
En la siguiente sentencia SQL enlaza 2 tablas la tabla clientes y la tabla pedidos en esta ejemplo me
muestra los campos nombre compantildeiacutea y el campo idpedido
La uacutenica condicioacuten es que las 2 tablas tengan un campo en comuacuten
Ejemplo 84
select clientesNombreCompantildeiacuteapedidosidpedido from clientes inner join pedidos on
clientesidcliente=pedidosidcliente
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 60
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 pedidosIdPedido pedidosIdCliente 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 pedidosIdPedido pedidosIdCliente order
by pedidos IdPedido
CROSS JOIN
Un Cross Join es la consulta correlacionada que combine cada una de las filas de una de las tablas con
todas las filas de la otra tabla
No es necesario que exista una columna en comuacuten para ejecutar el Cross Join
Ejemplo 86
La siguiente consulta combina cada una de las filas de la tabla categoriacuteas con cada una de las filas de la
tabla productos
select productosNombreProductocategoriasNombrecategoria from productos cross join categorias
order by productosNombreProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 61
Ejercicios de consultas Muacuteltiples
Ejemplo 87
Mostrar el pedidos completo con el id=10248
Select pedidosIdPedido pedidosIdCliente
Total=sum ([detalles de pedidos]Preciounidad[detalles de pedidos]Cantidad)
From [detalles de pedidos] inner join pedidos on
[Detalles de pedidos]IdPedido=pedidosIdPedido where pedidosIdPedido=10248
Group by pedidosIdPedido pedidosIdCliente
Ejemplo 88
1 Mostrar la cantidad de productos por categoriacutea
Select CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
[Total de Producto]=sum (UnidadesEnExistencia) from Categoriacuteas inner join
Productos on CategoriacuteasIdCategoriacutea=productosIdCategoriacutea
Group by CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 62
Ejemplo 89
Calcular cuantas ventas tiene cada uno de los vendedores
Select empleadosIdEmpleado empleadosNombre empleadosApellidos
[Total de ventas]=count (pedidosIdPedido) from empleados
Inner join Pedidos on empleadosIdEmpleado=pedidosIdEmpleado
Group by empleadosIdEmpleado empleadosNombre empleadosApellidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 63
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 despueacutes saca la de Plantilla
Recomendaciones a la hora de usar las combinaciones
Combinar tablas en funcioacuten de claves principales y externas
Limite el nuacutemero de tablas de las combinaciones
Select Apellido
Oficio as
OFICIOFUNCION
salario from emp
UNION
Select Apellido
Funcion Salario from
Plantilla
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 64
SUBCONSULTAS
Es una SELECT anidada en una instruccioacuten INSERT DELETE SELECT o UPDATE
Como una tabla derivada
Select eemp_no as Numero
eApellido
from (select emp_no apellido from emp) as e
Como una expresioacuten
Select emp_no as [Numero]
Apellido
Salario
(select avg(Salario) from emp)
as Diferencia
from emp
where oficio = Empleado
Para correlacionar datos
- Expresioacuten dinaacutemica que cambia en cada fila de una consulta externa
- Es una combinacioacuten entre la subconsulta y la fila de la consulta externa
- Dividen consultas complejas con dos o maacutes consultas simples relacionadas
Subconsulta correlacionada
Select apellido oficiodept_no
from emp as e
where 20 lt
(select dept_no from dept as d
where edept_no = ddept_no
and ddnombre = Ventas)
SUBCONSULTAS
1 Mostrar el numero de empleado el apellido y la fecha de alta del empleado mas antiguo de la
empresa
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 65
SELECT emp_noapellido
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_noapellido
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 Jimeacutenez
select apellido oficio from emp where
oficio = (select oficio from emp where apellido = JIMENEZ)
4 Queremos saber el apellido oficio salario y nuacutemero 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 gt (select max (salario) from
emp where dept_no = 30)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 66
5 Mostrar el apellido la funcioacuten sala o departamento de todos los empleados que trabajen en la
empresa
select eApellido eOficio as [Cargo en Empresa] ddnombre as [Oficina]
from emp as e
inner join dept as d
on edept_no = ddept_no
union
select pApellido pfuncion snombre
from plantilla as p
inner join sala as s
on phospital_cod = shospital_cod
and psala_cod = ssala_cod
union
select dApellido despecialidad hnombre
from doctor as d
inner join hospital as h
on dhospital_cod = hhospital_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 = lsquoventasrsquo))
order by 2
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 67
8 Mostrar los empleados que tienen mejor salario que la media de los directores no incluyendo al
presidente
Select from emp where salario gt
(select avg (salario) from emp where oficio = DIRECTOR)
and oficio ltgt PRESIDENTE
9 Mostrar el apellido funcioacuten salario y coacutedigo 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 = lsquoENFERMEROrsquo or
funcion = lsquoENFERMERArsquo) and hospital_cod = (select hospital_cod from hospital where nombre =
lsquoSAN CARLOSrsquo)
Select apellido funcion salario hospital_cod from plantilla where
funcion in (ENFERMEROENFERMERA)
and hospital_cod = (select hospital_cod from hospital
where nombre = SAN CARLOS)
10 Visualizar los datos de los hospitales que tienen personal (Doctores) de cardiologiacutea
Select from hospital where hospital_cod in (select hospital_cod from doctor where
especialidad = lsquoCardiologiacutearsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 68
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 = lsquoPROVINCIALrsquo or
nombre= lsquoGENERALrsquo)
12 Mostrar el apellido de los enfermos que nacieron antes que el Sentildeor Miller
Select apellido from enfermo where Fecha_nac lt (select fecha_nac from enfermo where
apellido = lsquoMILLER Brsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 69
Simulacion de una clausula JOIN
Vamos a mostrar los oficios que estaacuten en maacutes de un departamento
Select distinct e1oficio from emp as e1
where e1oficio in(Select e2oficio from emp as e2
where e1dept_no ltgt e2dept_no)
Se debe utilizar antes una combinacioacuten que una subconsulta la combinacioacuten seriacutea asi dando los
mismos resultados
Select distinct e1Oficio from emp as e1
inner join emp as e2
on e1oficio = e2oficio
where e1dept_no ltgt e2dept_no
Estos son los dos oficios que estaacuten en
maacutes de un departamento
Subconsulta para simular una clausula HAVING
select e1apellidoe1oficio e1salario
from emp as e1
where e1salario gt
(select avg(e2salario) from emp as e2
where e1oficio = e2oficio)
Esta es la consulta utilizando el HAVING que es la que deberiacuteamos utilizar antes que una
subconsulta de simulacioacuten HAVING
SELECT e1apellidoe1oficio e1salario
FROM emp AS e1
INNER JOIN emp AS e2
ON e1oficio = e2oficio
GROUP BY e1oficio e1salarioe1apellido
HAVING e1salario gt AVG (e2salario)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 70
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 35
Ejemplo 61
Genere un listado de pedidos en el que la fecha del pedido se muestre en el formato nombre del
diacutea diacutea de mes antildeo
Select IdPedido FechaPedido Fecha=datename (dw IdPedido)+ + str (datepart (dd
IdPedido) 2)+ de +datename (mm IdPedido)+ de +str (datepart (yy IdPedido) 4) from
pedidos
Ejemplo 62
Mostrar de la tabla pedidos la fecha de pedidos en fecha corta
Select IdPedido convert (varchar (30) FechaPedido 106) as [Fecha Corta] from pedidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 36
FUNCIONES MATEMATICAS
ABS
Es el valor Absoluto
Select ABS (-4) as VALOR ABSOLUTO--gt4
CEILING
Devuelve el entero maacutes pequentildeo mayor o igual que la expresioacuten numeacuterica dada
Select CEILING (54) as CEILING--6
FLOOR
Devuelve el entero maacutes grande menor o igual que la expresioacuten numeacuterica dada
Select FLOOR (5) as FLOOR--gt5
POWER
Devuelve el valor de la expresioacuten indicada elevada a la potencia especificada
Select POWER (3 2) as 3 ELEVADO A 2--gt9
RAND
Devuelve un valor float aleatorio de 0 a 1
Las llamadas repetitivas de RAND() en una uacutenica consulta produciraacuten el mismo valor
Select RAND(6) as ALEATORIO--071368515806921451
Select RAND(6) as ALEATORIO--071368515806921451
Select RAND(4) as ALEATORIO--07136478921266981
Rand sobre los milisegundos actuales
Select RAND(DATEPART(msGETDATE())) as ALEATORIO--gt071443047691954253
Select RAND(999999999)--gt068504257551273573
ROUND
Devuelve una expresioacuten numeacuterica redondeada a la longitud o precisioacuten especificada
Round (Nuacutemero Redondeo del Nuacutemero)
ROUND siempre devuelve un valor Si length es un valor negativo y mayor que el nuacutemero de
diacutegitos anteriores al separador decimal ROUND devuelve 0
Select ROUND (1234567 2) --gt1234600
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 37
Select ROUND (1234567-2) --gt1000000
Select ROUND (1234567 0) --gt1230000
Select ROUND (1234567-3) ---gt0
SIGN
Devuelve el signo positivo (+1) cero (0) o negativo (-1) de la expresioacuten especificada
Dice el valor negativo positivo o neutro (0) del valor especificado
Select SIGN (-3) --gt-1
Select SIGN (3) --gt1
Select SIGN (0) --gt0
SQUARE
Devuelve el cuadrado de la expresioacuten especificada
Select SQUARE (4) as bdquoCuadrado‟--gt160
SQRT
Devuelve la raiacutez cuadrada de la expresioacuten especificada
Select SQRT (4) as [RAIZ CUADRADA] --gt20
FUNCIONES DE CADENA
ASCII
Devuelve el coacutedigo ASCII del caraacutecter maacutes a la izquierda de una expresioacuten de caracteres
Select ASCII(A)--gt65
Select ASCII(a)--gt97
Select ascii(aula)--gt97
CHAR
Una funcioacuten de cadena que convierte un coacutedigo ASCII int en un caraacutecter
select char(65)--gtA
select char(97)--gta
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 38
CHARINDEX
Devuelve la posicioacuten inicial de la expresioacuten especificada en una cadena de caracteres
CHARINDEX (expression1 expression2 [ start_location])
Argumentos
expression1
Es una expresioacuten que contiene la secuencia de caracteres que se desea buscar
Expression1 es una expresioacuten del tipo de cadenas cortas de caracteres
Expression2
Es una expresioacuten normalmente una columna
en la que se busca la cadena especificada
Expression2 es de la categoriacutea del tipo de datos cadena de caracteres
start_location
Es la posicioacuten del caraacutecter de expression2 en el que se empieza la buacutesqueda de expression1
Si no se especifica start_location es un nuacutemero negativo o es cero
la buacutesqueda empieza al principio de la cadena expression2
Si expression1 no se encuentra en expression2 CHARINDEX devuelve 0
Si alguno de los dos es null devuelve null
Select charindex (ciemurcielago) --gt4
Select charindex (ciemurcielago 2) --gt4
Select charindex (ciemurcielago 5) --gt0
Select charindex (ciemurcielago-6) --gt4
LEFT
Devuelve la parte de una cadena de caracteres que comienza en un nuacutemero de caracteres
especificado a partir de la izquierda
Select left (murcielago5) --gtmurci
RIGHT
Devuelve la parte de una cadena de caracteres que
Comienza en el nuacutemero de caracteres especificado
En integer_expression a partir de la derecha
Select right (hola que tal5) --gte tal
LEN
Cuenta el nuacutemero de caracteres que se incluyen en la cadena
Select len (murcieacutelago) --gt10
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 39
LOWER
Convierte a Minuacutesculas la cadena especificada
Select lower (MurcIELaGO) as [minusculas] --gtmurcielago
UPPER
Convierte a Mayuacutesculas la cadena especificada
Select upper (murcielago) as [MAYUSCULAS] --gtMURCIELAGO
RTRIM y LTRIM
Elimina los espacios que existen a la izquierda y a la derecha respectivamente
Select Rtrim ( murcieacutelago ) AS [SIN ESPACIOS] --gtmurcieacutelago
Select Ltrim ( murcieacutelago ) AS [SIN ESPACIOS] --gtmurcieacutelago
Select ltrim(rtrim( hola ))+
REPLACE
Reemplaza por una tercera expresioacuten todas las apariciones
de la segunda expresioacuten de cadena proporcionada en la primera expresioacuten de cadena
Select replace (hola que tal estasaA) --gtholA que tAl estAs
Select replace (buenos dias que tal estasuentildentildentilde) --gtbntildentildentildenos diasqntildentildentilde tal estas
SPACE
Coloca el nuacutemero de espacios que se le indiquen para entre una cadena de caracteres
Select hola+space(5)+que tal--gthola que tal
SUBSTRING
Devuelve parte de una expresioacuten de caracteres binaria de texto o de imagen
Sintaxis
SUBSTRING (Expresioacuten Comienzo Duracioacuten)
Argumentos
Expresioacuten
Es una cadena de caracteres cadena binaria texto imagen
Columna o expresioacuten que incluye una columna
No deben usarse expresiones que incluyan funciones de agregado
Start
Es un entero que especifica el punto en que comienza la subcadena
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 40
Length
Es un entero que especifica la longitud de la subcadena
(El nuacutemero de caracteres o bytes que se devuelven)
Select substring (murcielago 3 5) --gtrciel
Select substring (murcielago 3 len (murcielago)) --gtrciel
REVERSE
Devuelve invertida una expresioacuten de caraacutecter
Select reverse (hola)
REPLICATE
Repite una expresioacuten de caracteres un nuacutemero especificado de veces
Select replicate (murcielago 5)
Replicate replicate replicate replicate replicate
STUFF
Elimina el nuacutemero de caracteres especificados e insertados
Otro conjunto de caracteres en un punto de inicio indicado
Select STUFF (Murcieacutelago 2 3 ijklmn) Mijklmnielago
FUNCIONES DE SISTEMA
- APP_NAME () Devuelve el nombre de la aplicacioacuten actual
Select app_name () as [Nombre de la aplicacion]
- DATALENGTH (Expresioacuten) Devuelve un entero que es numero de bites necesarios para
representar esa expresioacuten int
Select datalength (Ninoni) as [Numero de bites]
- ISDATE (Expresioacuten) Dice si la expresioacuten es una fecha o no Devuelve 1 si la expresioacuten es
una fecha y 0 si no es una fecha
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 41
Select isdate (121001) as [Validacioacuten Fecha]
- ISNUMERIC (Expresion) Dice si la expresioacuten es un numero o no Devuelve 1 si la
expresioacuten es un nuacutemero y 0 si la expresioacuten no es nuacutemero
Select isnumeric (ddd) as [Validacion Numero]
- ISNULL (Expresioacuten ExpresionDevuelta) Si la expresioacuten es nula te devuelve la Expresioacuten
Devuelta y si no devuelve la primera Expresioacuten
Select isnull (nullNo nulo) as [Es Nulo]
- PARSENAME (bdquoNombreObjeto‟ ParteNombre)
ParteNombre es un valor de tipo Int que coge unos determinados valores del
NombreObjeto
1 Objeto
2 Propietario
3 Base de Datos
4 Servidor
Select parsename (saposeidondbopedidos1) as [Parte Expresioacuten]
Select parsename (saposeidondbopedidos 2) as [Parte Expresioacuten]
Select parsename (saposeidondbopedidos3) as [Parte Expresioacuten]
Select parsename ( saposeidondbopedidos 4) as [Parte Expresioacuten]
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 42
- SYSTEM_USER Devuelve el usuario del sistema actual
Depende de la autentificacioacuten con la que te hayas conectado
Select system_user as [Usuario conectado]
- USER_NAME() Devuelve el nombre del usuario actual
Select user_name ()
- COALESCE (expresioacuten1 expresioacuten2 )
Devuelve la primera expresioacuten no NULL
Si todos son NULL devuelve NULL
Select coalesce (PrecioUnidad Cantidad) from [detalles de Pedidos] Si el PrecioUnidad es nulo
devolveraacute la Cantidad y si los dos son nulos devolveraacute un campo Null
PROCEDIMIENTOS PARA AGRUPAR Y RESUMIR DATOS
En el examen de certificacioacuten 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 usaraacute la base de datos indicada Ejemplo Ponemos
en el analizador de consultas lo siguiente
Use Northwind
Select from [Order Details]
[Order Details]
Esta tabla perteneciente a la Northwind se encarga de manejar los pedidos
Order Id Nordm de Pedido
Producto Id Nordm de Producto
Ambos campos son Primary Key con lo que no puede haber una combinacioacuten de ambos campos que sea
igual
OrderId ProductId
1 A
1 B
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 43
1 C
2 A
3 C
Es decir en este caso no podriacutea existir una nueva combinacioacuten ldquo1 Ardquo o ldquo2 Ardquo
Quantity Es la cantidad del producto del pedido
ROLLUP
Se usa para presentar resuacutemenes de datos A de usarse junto con la clausula group by lo que hace es
realizar un resumen de los campos incluidos en el rollup
Ejemplo 63
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
Group by ProductID OrderID
with Rollup
Order by ProductID OrderID
Este ejemplo suma todas las cantidades y mediante
rollup muestra una fila con la suma de todas las
cantidades de cada producto y ademaacutes otra fila con la
suma de todas las cantidades de todos los productos El
resultado de este ejemplo seriacutea el que muestra la
imagen
Ejemplo 64
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
where orderid lt 10250
Group by ProductID OrderID
with Rollup
Order by ProductID OrderID
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 44
CUBE
Al igual que Rollup realiza resuacutemenes de campos agrupados Pero en este caso muestra un resumen con
cada combinacioacuten posible de los campos agrupados
Ejemplo 65
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
where orderid lt 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 combinacioacuten posible entre el
productid y el orderid
GROUPING
Indica si el resultado de un campo es el que hay en la propia tabla o se ha introducido mediante una
claacuteusula de resumen es decir para saber por ejemplo si un ldquoNullrdquo 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 lt 10250 Group by ProductID
OrderID with Cube Order by ProductID OrderID
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 45
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
Ponieacutendole un alias al
grouping saldriacutea el nombre
de columna que le
indiquemos
COMPUTE
Realiza un resumen en una columna aparte con el resultado de la funcioacuten de agregado indicada Su
formato seriacutea Compute funcioacuten(campo) No se puede utilizar en aplicaciones cliente servidor es una
clausula meramente informativa Tampoco se le pueden poner alias a los resuacutemenes
Ejemplo 67
Select Productid Orderid Quantity From [Order Details] order by ProductID Orderid compute
Sum(quantity)
Vemos que muestra la
columna con la suma
total de todas las
cantidades
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 46
Ejercicios de ROLLUP GROUPING y CUBE
Ejemplo 68
Realizar una consulta que resuma la cantidad de artiacuteculos pedidos por cada iacutendice de producto y
nuacutemero de pedido Realizando un caacutelculo acumulativo
select productid as [PRODUCTO] orderid as [Nordm PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] group by productid orderid with rollup order by productid orderid
PRODUCTO Nordm 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
hellip
Ejemplo 69
Modificacioacuten al ejercicio anterior Realizar el mismo resumen pero uacutenicamente para el producto
cuyo id es 50
select productid as [PRODUCTO] orderid as [Nordm PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] where productid = 50 group by productid orderid with rollup order by productid ordered
PRODUCTO Nordm 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
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 47
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 modificacioacuten 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 [Nordm PEDIDO] grouping(orderid) as [GRUPO PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] where productid = 50 group by Productidorderid with cube order by productidorderid
PRODUCTO GRUPO PRODUCTO Nordm PEDIDO GRUPO PEDIDO SUMA TOTAL
----------- -------------- ----------- ------------ -----------
NULL 1 NULL 1 235
NULL 1 10350 0 15
NULL 1 10383 0 15
NULL 1 10429 0 40
NULL 1 10465 0 25
NULL 1 10637 0 25
NULL 1 10729 0 40
NULL 1 10751 0 20
NULL 1 10920 0 24
NULL 1 10948 0 9
NULL 1 11072 0 22
50 0 NULL 1 235
50 0 10350 0 15
50 0 10383 0 15
50 0 10429 0 40
50 0 10465 0 25
50 0 10637 0 25
50 0 10729 0 40
50 0 10751 0 20
50 0 10920 0 24
50 0 10948 0 9
50 0 11072 0 22
(22 filas afectadas)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 48
Obtencioacuten de resuacutemenes 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 maacutes columnas y
luego efectuar alguna operacioacuten de resumen sobre cada grupo asiacute generado
La diferencia con GROUP BY es que permite mostrar informacioacuten mas detallada de cada grupo
Ejemplo 71
Lista de pedidos que muestre por coacutedigo de pedido la cantidad de productos vendidos por cada uno
de ellos
select Idpedidoidproductopreciounidadcantidad[Sub Total]=sum(PreciounidadCantidad) from
[detalles de pedidos] group by Idpedidoidproductopreciounidadcantidad order by IdPedido compute
sum(Cantidad) by IdPedido
EJERCICIOS CON COMPUTE
Ejemplo 72
Generar un resumen de subtotales en una consulta que devuelva el nuacutemero de pedido la cantidad
pedida para todos los orderid 11070
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 49
Select Orderid as [Nordm PEDIDO] Quantity AS [CANTIDAD] From [Order Details] where orderid gt= 11070 order by Orderid compute Sum(quantity) by orderid compute sum(quantity)
Nordm PEDIDO CANTIDAD
----------- --------
11070 40
11070 20
11070 30
11070 20
sum
===========
110
sum
===========
110
(6 filas afectadas)
Ejemplo 73
Generar un resumen con calculo de subtotales similar al anterior pero para los orderid 11075 y
11076
Select Orderid as [Nordm PEDIDO] Quantity as [CANTIDAD] From [Order Details] where orderid = 11075 or orderid = 11076 order by Orderid compute Sum(quantity) by ordered Nordm PEDIDO CANTIDAD ----------- -------- 11075 10 11075 30 11075 2 sum =========== 42 Nordm PEDIDO CANTIDAD ----------- -------- 11076 20 11076 20 11076 10
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 50
sum =========== 50 (8 filas afectadas)
Ejemplo 74
Modificacioacuten al ejercicio anterior Agregar la cantidad total y la cantidad promedio al final del
informe
Select Orderid as [Nordm 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)
Nordm PEDIDO CANTIDAD
----------- --------
11075 10
11075 30
11075 2
sum
===========
42
Nordm PEDIDO CANTIDAD
----------- --------
11076 20
11076 20
11076 10
sum
===========
50
sum
===========
92
avg
===========
15
(10 filas afectadas)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 51
Ejemplo 75
Seleccionar de forma agrupada por tipo todos los tipos la suma de los precios y la suma del
anticipo de la tabla tiacutetulos
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 199900 50000000
business 119500 50000000
business 29900 101250000
business 199900 50000000
sum
=====================
549200
avg
=====================
62812500
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
mod_cook 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
avg
=====================
75000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
popular_comp 229500 70000000
popular_comp 200000 80000000
popular_comp NULL NULL
sum
=====================
429500
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 52
avg
=====================
75000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
psychology 215900 70000000
psychology 109500 22750000
psychology 70000 60000000
psychology 199900 20000000
psychology 79900 40000000
sum
=====================
675200
avg
=====================
42550000
(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 ademaacutes 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 199900 50000000
business 119500 50000000
business 29900 101250000
business 199900 50000000
sum
=====================
549200
sum
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 53
=====================
251250000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
mod_cook 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
popular_comp 229500 70000000
popular_comp 200000 80000000
popular_comp NULL NULL
sum
=====================
429500
sum
=====================
150000000
(30 filas afectadas)
Ejemplo 77
Generar un informe que muestre la suma de los precios de los libros de psicologiacutea 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 109500
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 54
psychology 0736 70000
psychology 0736 199900
psychology 0736 79900
sum
=====================
459300
TIPO CODIGO EDITOR PRECIO
------------ ------------- ---------------------
psychology 0877 215900
sum
=====================
215900
(7 filas afectadas)
Ejemplo 78
Generar un informe que obtenga la suma de los precios de todos los libros de psicologiacutea asiacute como la
suma de los precios de los libros de psicologiacutea 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 109500
psychology 0736 70000
psychology 0736 199900
psychology 0736 79900
sum
=====================
459300
TIPO CODIGO EDITOR PRECIO
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 55
------------ ------------- ---------------------
psychology 0877 215900
sum
=====================
215900
sum
=====================
675200
(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 199900 0000
mod_cook 0877 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO CODIGO EDITOR PRECIO ANTICIPO
------------ ------------- --------------------- ---------------------
trad_cook 0877 119500 40000000
trad_cook 0877 209500 70000000
trad_cook 0877 149900 80000000
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 56
sum
=====================
478900
sum
=====================
190000000
(9 filas afectadas)
Ejemplo 80
Generar un informe que muestre todos los tiacutetulos precio y anticipo de aquellos tiacutetulos que tengan
un precio superior a 20 doacutelares Ofreceraacute tambieacuten la suma total del precio y del anticipo
Select title as [TITULO] price as [PRECIO] advance as [ANTICIPO] From titles where price gt 20 order by title compute sum(price) compute sum(advance)
TITULO PRECIO ANTICIPO
-------------------------------------------------------------------------------- --------------------- -------------
--------
But Is It User Friendly 229500 70000000
Computer Phobic AND Non-Phobic Individuals Behavior Variations 215900
70000000
Onions Leeks and Garlic Cooking Secrets of the Mediterranean 209500
70000000
sum
=====================
654900
sum
=====================
210000000
(5 filas afectadas)
Ejemplo 81
Generar un informe que muestre el precio el tipo y el nuacutemero de editor de la tabla titles de todos
aquellas obras que pertenezcan la categoriacutea de ldquobusinessrdquo Ademaacutes apareceraacute la suma total de
precios y el maacuteximo pub_id de esta seleccioacuten
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 57
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 29900 0736
business 199900 1389
business 199900 1389
business 119500 1389
sum
=====================
549200
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 Mostraraacute la suma de los precios y los anticipos por tipo y luego calcularaacute 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 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
trad_cook 209500 70000000
trad_cook 119500 40000000
trad_cook 149900 80000000
sum
=====================
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 58
478900
sum
=====================
190000000
sum
=====================
708700
sum
=====================
340000000
(11 filas afectadas)
Eliminacioacuten 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 iquestA que precio se ah vendido los productos
Select IdProducto Preciounidad from [Detalles de pedidos] order by IdProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 59
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 mayoriacutea de las consultas que se hacen en una base de datos requiere que se lean datos procedentes
de dos oacute maacutes tablas
INNER JOIN- son las filas que satisfacen la condicioacuten de la combinacioacuten
En la siguiente sentencia SQL enlaza 2 tablas la tabla clientes y la tabla pedidos en esta ejemplo me
muestra los campos nombre compantildeiacutea y el campo idpedido
La uacutenica condicioacuten es que las 2 tablas tengan un campo en comuacuten
Ejemplo 84
select clientesNombreCompantildeiacuteapedidosidpedido from clientes inner join pedidos on
clientesidcliente=pedidosidcliente
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 60
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 pedidosIdPedido pedidosIdCliente 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 pedidosIdPedido pedidosIdCliente order
by pedidos IdPedido
CROSS JOIN
Un Cross Join es la consulta correlacionada que combine cada una de las filas de una de las tablas con
todas las filas de la otra tabla
No es necesario que exista una columna en comuacuten para ejecutar el Cross Join
Ejemplo 86
La siguiente consulta combina cada una de las filas de la tabla categoriacuteas con cada una de las filas de la
tabla productos
select productosNombreProductocategoriasNombrecategoria from productos cross join categorias
order by productosNombreProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 61
Ejercicios de consultas Muacuteltiples
Ejemplo 87
Mostrar el pedidos completo con el id=10248
Select pedidosIdPedido pedidosIdCliente
Total=sum ([detalles de pedidos]Preciounidad[detalles de pedidos]Cantidad)
From [detalles de pedidos] inner join pedidos on
[Detalles de pedidos]IdPedido=pedidosIdPedido where pedidosIdPedido=10248
Group by pedidosIdPedido pedidosIdCliente
Ejemplo 88
1 Mostrar la cantidad de productos por categoriacutea
Select CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
[Total de Producto]=sum (UnidadesEnExistencia) from Categoriacuteas inner join
Productos on CategoriacuteasIdCategoriacutea=productosIdCategoriacutea
Group by CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 62
Ejemplo 89
Calcular cuantas ventas tiene cada uno de los vendedores
Select empleadosIdEmpleado empleadosNombre empleadosApellidos
[Total de ventas]=count (pedidosIdPedido) from empleados
Inner join Pedidos on empleadosIdEmpleado=pedidosIdEmpleado
Group by empleadosIdEmpleado empleadosNombre empleadosApellidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 63
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 despueacutes saca la de Plantilla
Recomendaciones a la hora de usar las combinaciones
Combinar tablas en funcioacuten de claves principales y externas
Limite el nuacutemero de tablas de las combinaciones
Select Apellido
Oficio as
OFICIOFUNCION
salario from emp
UNION
Select Apellido
Funcion Salario from
Plantilla
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 64
SUBCONSULTAS
Es una SELECT anidada en una instruccioacuten INSERT DELETE SELECT o UPDATE
Como una tabla derivada
Select eemp_no as Numero
eApellido
from (select emp_no apellido from emp) as e
Como una expresioacuten
Select emp_no as [Numero]
Apellido
Salario
(select avg(Salario) from emp)
as Diferencia
from emp
where oficio = Empleado
Para correlacionar datos
- Expresioacuten dinaacutemica que cambia en cada fila de una consulta externa
- Es una combinacioacuten entre la subconsulta y la fila de la consulta externa
- Dividen consultas complejas con dos o maacutes consultas simples relacionadas
Subconsulta correlacionada
Select apellido oficiodept_no
from emp as e
where 20 lt
(select dept_no from dept as d
where edept_no = ddept_no
and ddnombre = Ventas)
SUBCONSULTAS
1 Mostrar el numero de empleado el apellido y la fecha de alta del empleado mas antiguo de la
empresa
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 65
SELECT emp_noapellido
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_noapellido
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 Jimeacutenez
select apellido oficio from emp where
oficio = (select oficio from emp where apellido = JIMENEZ)
4 Queremos saber el apellido oficio salario y nuacutemero 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 gt (select max (salario) from
emp where dept_no = 30)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 66
5 Mostrar el apellido la funcioacuten sala o departamento de todos los empleados que trabajen en la
empresa
select eApellido eOficio as [Cargo en Empresa] ddnombre as [Oficina]
from emp as e
inner join dept as d
on edept_no = ddept_no
union
select pApellido pfuncion snombre
from plantilla as p
inner join sala as s
on phospital_cod = shospital_cod
and psala_cod = ssala_cod
union
select dApellido despecialidad hnombre
from doctor as d
inner join hospital as h
on dhospital_cod = hhospital_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 = lsquoventasrsquo))
order by 2
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 67
8 Mostrar los empleados que tienen mejor salario que la media de los directores no incluyendo al
presidente
Select from emp where salario gt
(select avg (salario) from emp where oficio = DIRECTOR)
and oficio ltgt PRESIDENTE
9 Mostrar el apellido funcioacuten salario y coacutedigo 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 = lsquoENFERMEROrsquo or
funcion = lsquoENFERMERArsquo) and hospital_cod = (select hospital_cod from hospital where nombre =
lsquoSAN CARLOSrsquo)
Select apellido funcion salario hospital_cod from plantilla where
funcion in (ENFERMEROENFERMERA)
and hospital_cod = (select hospital_cod from hospital
where nombre = SAN CARLOS)
10 Visualizar los datos de los hospitales que tienen personal (Doctores) de cardiologiacutea
Select from hospital where hospital_cod in (select hospital_cod from doctor where
especialidad = lsquoCardiologiacutearsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 68
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 = lsquoPROVINCIALrsquo or
nombre= lsquoGENERALrsquo)
12 Mostrar el apellido de los enfermos que nacieron antes que el Sentildeor Miller
Select apellido from enfermo where Fecha_nac lt (select fecha_nac from enfermo where
apellido = lsquoMILLER Brsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 69
Simulacion de una clausula JOIN
Vamos a mostrar los oficios que estaacuten en maacutes de un departamento
Select distinct e1oficio from emp as e1
where e1oficio in(Select e2oficio from emp as e2
where e1dept_no ltgt e2dept_no)
Se debe utilizar antes una combinacioacuten que una subconsulta la combinacioacuten seriacutea asi dando los
mismos resultados
Select distinct e1Oficio from emp as e1
inner join emp as e2
on e1oficio = e2oficio
where e1dept_no ltgt e2dept_no
Estos son los dos oficios que estaacuten en
maacutes de un departamento
Subconsulta para simular una clausula HAVING
select e1apellidoe1oficio e1salario
from emp as e1
where e1salario gt
(select avg(e2salario) from emp as e2
where e1oficio = e2oficio)
Esta es la consulta utilizando el HAVING que es la que deberiacuteamos utilizar antes que una
subconsulta de simulacioacuten HAVING
SELECT e1apellidoe1oficio e1salario
FROM emp AS e1
INNER JOIN emp AS e2
ON e1oficio = e2oficio
GROUP BY e1oficio e1salarioe1apellido
HAVING e1salario gt AVG (e2salario)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 70
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 36
FUNCIONES MATEMATICAS
ABS
Es el valor Absoluto
Select ABS (-4) as VALOR ABSOLUTO--gt4
CEILING
Devuelve el entero maacutes pequentildeo mayor o igual que la expresioacuten numeacuterica dada
Select CEILING (54) as CEILING--6
FLOOR
Devuelve el entero maacutes grande menor o igual que la expresioacuten numeacuterica dada
Select FLOOR (5) as FLOOR--gt5
POWER
Devuelve el valor de la expresioacuten indicada elevada a la potencia especificada
Select POWER (3 2) as 3 ELEVADO A 2--gt9
RAND
Devuelve un valor float aleatorio de 0 a 1
Las llamadas repetitivas de RAND() en una uacutenica consulta produciraacuten el mismo valor
Select RAND(6) as ALEATORIO--071368515806921451
Select RAND(6) as ALEATORIO--071368515806921451
Select RAND(4) as ALEATORIO--07136478921266981
Rand sobre los milisegundos actuales
Select RAND(DATEPART(msGETDATE())) as ALEATORIO--gt071443047691954253
Select RAND(999999999)--gt068504257551273573
ROUND
Devuelve una expresioacuten numeacuterica redondeada a la longitud o precisioacuten especificada
Round (Nuacutemero Redondeo del Nuacutemero)
ROUND siempre devuelve un valor Si length es un valor negativo y mayor que el nuacutemero de
diacutegitos anteriores al separador decimal ROUND devuelve 0
Select ROUND (1234567 2) --gt1234600
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 37
Select ROUND (1234567-2) --gt1000000
Select ROUND (1234567 0) --gt1230000
Select ROUND (1234567-3) ---gt0
SIGN
Devuelve el signo positivo (+1) cero (0) o negativo (-1) de la expresioacuten especificada
Dice el valor negativo positivo o neutro (0) del valor especificado
Select SIGN (-3) --gt-1
Select SIGN (3) --gt1
Select SIGN (0) --gt0
SQUARE
Devuelve el cuadrado de la expresioacuten especificada
Select SQUARE (4) as bdquoCuadrado‟--gt160
SQRT
Devuelve la raiacutez cuadrada de la expresioacuten especificada
Select SQRT (4) as [RAIZ CUADRADA] --gt20
FUNCIONES DE CADENA
ASCII
Devuelve el coacutedigo ASCII del caraacutecter maacutes a la izquierda de una expresioacuten de caracteres
Select ASCII(A)--gt65
Select ASCII(a)--gt97
Select ascii(aula)--gt97
CHAR
Una funcioacuten de cadena que convierte un coacutedigo ASCII int en un caraacutecter
select char(65)--gtA
select char(97)--gta
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 38
CHARINDEX
Devuelve la posicioacuten inicial de la expresioacuten especificada en una cadena de caracteres
CHARINDEX (expression1 expression2 [ start_location])
Argumentos
expression1
Es una expresioacuten que contiene la secuencia de caracteres que se desea buscar
Expression1 es una expresioacuten del tipo de cadenas cortas de caracteres
Expression2
Es una expresioacuten normalmente una columna
en la que se busca la cadena especificada
Expression2 es de la categoriacutea del tipo de datos cadena de caracteres
start_location
Es la posicioacuten del caraacutecter de expression2 en el que se empieza la buacutesqueda de expression1
Si no se especifica start_location es un nuacutemero negativo o es cero
la buacutesqueda empieza al principio de la cadena expression2
Si expression1 no se encuentra en expression2 CHARINDEX devuelve 0
Si alguno de los dos es null devuelve null
Select charindex (ciemurcielago) --gt4
Select charindex (ciemurcielago 2) --gt4
Select charindex (ciemurcielago 5) --gt0
Select charindex (ciemurcielago-6) --gt4
LEFT
Devuelve la parte de una cadena de caracteres que comienza en un nuacutemero de caracteres
especificado a partir de la izquierda
Select left (murcielago5) --gtmurci
RIGHT
Devuelve la parte de una cadena de caracteres que
Comienza en el nuacutemero de caracteres especificado
En integer_expression a partir de la derecha
Select right (hola que tal5) --gte tal
LEN
Cuenta el nuacutemero de caracteres que se incluyen en la cadena
Select len (murcieacutelago) --gt10
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 39
LOWER
Convierte a Minuacutesculas la cadena especificada
Select lower (MurcIELaGO) as [minusculas] --gtmurcielago
UPPER
Convierte a Mayuacutesculas la cadena especificada
Select upper (murcielago) as [MAYUSCULAS] --gtMURCIELAGO
RTRIM y LTRIM
Elimina los espacios que existen a la izquierda y a la derecha respectivamente
Select Rtrim ( murcieacutelago ) AS [SIN ESPACIOS] --gtmurcieacutelago
Select Ltrim ( murcieacutelago ) AS [SIN ESPACIOS] --gtmurcieacutelago
Select ltrim(rtrim( hola ))+
REPLACE
Reemplaza por una tercera expresioacuten todas las apariciones
de la segunda expresioacuten de cadena proporcionada en la primera expresioacuten de cadena
Select replace (hola que tal estasaA) --gtholA que tAl estAs
Select replace (buenos dias que tal estasuentildentildentilde) --gtbntildentildentildenos diasqntildentildentilde tal estas
SPACE
Coloca el nuacutemero de espacios que se le indiquen para entre una cadena de caracteres
Select hola+space(5)+que tal--gthola que tal
SUBSTRING
Devuelve parte de una expresioacuten de caracteres binaria de texto o de imagen
Sintaxis
SUBSTRING (Expresioacuten Comienzo Duracioacuten)
Argumentos
Expresioacuten
Es una cadena de caracteres cadena binaria texto imagen
Columna o expresioacuten que incluye una columna
No deben usarse expresiones que incluyan funciones de agregado
Start
Es un entero que especifica el punto en que comienza la subcadena
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 40
Length
Es un entero que especifica la longitud de la subcadena
(El nuacutemero de caracteres o bytes que se devuelven)
Select substring (murcielago 3 5) --gtrciel
Select substring (murcielago 3 len (murcielago)) --gtrciel
REVERSE
Devuelve invertida una expresioacuten de caraacutecter
Select reverse (hola)
REPLICATE
Repite una expresioacuten de caracteres un nuacutemero especificado de veces
Select replicate (murcielago 5)
Replicate replicate replicate replicate replicate
STUFF
Elimina el nuacutemero de caracteres especificados e insertados
Otro conjunto de caracteres en un punto de inicio indicado
Select STUFF (Murcieacutelago 2 3 ijklmn) Mijklmnielago
FUNCIONES DE SISTEMA
- APP_NAME () Devuelve el nombre de la aplicacioacuten actual
Select app_name () as [Nombre de la aplicacion]
- DATALENGTH (Expresioacuten) Devuelve un entero que es numero de bites necesarios para
representar esa expresioacuten int
Select datalength (Ninoni) as [Numero de bites]
- ISDATE (Expresioacuten) Dice si la expresioacuten es una fecha o no Devuelve 1 si la expresioacuten es
una fecha y 0 si no es una fecha
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 41
Select isdate (121001) as [Validacioacuten Fecha]
- ISNUMERIC (Expresion) Dice si la expresioacuten es un numero o no Devuelve 1 si la
expresioacuten es un nuacutemero y 0 si la expresioacuten no es nuacutemero
Select isnumeric (ddd) as [Validacion Numero]
- ISNULL (Expresioacuten ExpresionDevuelta) Si la expresioacuten es nula te devuelve la Expresioacuten
Devuelta y si no devuelve la primera Expresioacuten
Select isnull (nullNo nulo) as [Es Nulo]
- PARSENAME (bdquoNombreObjeto‟ ParteNombre)
ParteNombre es un valor de tipo Int que coge unos determinados valores del
NombreObjeto
1 Objeto
2 Propietario
3 Base de Datos
4 Servidor
Select parsename (saposeidondbopedidos1) as [Parte Expresioacuten]
Select parsename (saposeidondbopedidos 2) as [Parte Expresioacuten]
Select parsename (saposeidondbopedidos3) as [Parte Expresioacuten]
Select parsename ( saposeidondbopedidos 4) as [Parte Expresioacuten]
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 42
- SYSTEM_USER Devuelve el usuario del sistema actual
Depende de la autentificacioacuten con la que te hayas conectado
Select system_user as [Usuario conectado]
- USER_NAME() Devuelve el nombre del usuario actual
Select user_name ()
- COALESCE (expresioacuten1 expresioacuten2 )
Devuelve la primera expresioacuten no NULL
Si todos son NULL devuelve NULL
Select coalesce (PrecioUnidad Cantidad) from [detalles de Pedidos] Si el PrecioUnidad es nulo
devolveraacute la Cantidad y si los dos son nulos devolveraacute un campo Null
PROCEDIMIENTOS PARA AGRUPAR Y RESUMIR DATOS
En el examen de certificacioacuten 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 usaraacute la base de datos indicada Ejemplo Ponemos
en el analizador de consultas lo siguiente
Use Northwind
Select from [Order Details]
[Order Details]
Esta tabla perteneciente a la Northwind se encarga de manejar los pedidos
Order Id Nordm de Pedido
Producto Id Nordm de Producto
Ambos campos son Primary Key con lo que no puede haber una combinacioacuten de ambos campos que sea
igual
OrderId ProductId
1 A
1 B
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 43
1 C
2 A
3 C
Es decir en este caso no podriacutea existir una nueva combinacioacuten ldquo1 Ardquo o ldquo2 Ardquo
Quantity Es la cantidad del producto del pedido
ROLLUP
Se usa para presentar resuacutemenes de datos A de usarse junto con la clausula group by lo que hace es
realizar un resumen de los campos incluidos en el rollup
Ejemplo 63
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
Group by ProductID OrderID
with Rollup
Order by ProductID OrderID
Este ejemplo suma todas las cantidades y mediante
rollup muestra una fila con la suma de todas las
cantidades de cada producto y ademaacutes otra fila con la
suma de todas las cantidades de todos los productos El
resultado de este ejemplo seriacutea el que muestra la
imagen
Ejemplo 64
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
where orderid lt 10250
Group by ProductID OrderID
with Rollup
Order by ProductID OrderID
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 44
CUBE
Al igual que Rollup realiza resuacutemenes de campos agrupados Pero en este caso muestra un resumen con
cada combinacioacuten posible de los campos agrupados
Ejemplo 65
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
where orderid lt 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 combinacioacuten posible entre el
productid y el orderid
GROUPING
Indica si el resultado de un campo es el que hay en la propia tabla o se ha introducido mediante una
claacuteusula de resumen es decir para saber por ejemplo si un ldquoNullrdquo 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 lt 10250 Group by ProductID
OrderID with Cube Order by ProductID OrderID
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 45
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
Ponieacutendole un alias al
grouping saldriacutea el nombre
de columna que le
indiquemos
COMPUTE
Realiza un resumen en una columna aparte con el resultado de la funcioacuten de agregado indicada Su
formato seriacutea Compute funcioacuten(campo) No se puede utilizar en aplicaciones cliente servidor es una
clausula meramente informativa Tampoco se le pueden poner alias a los resuacutemenes
Ejemplo 67
Select Productid Orderid Quantity From [Order Details] order by ProductID Orderid compute
Sum(quantity)
Vemos que muestra la
columna con la suma
total de todas las
cantidades
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 46
Ejercicios de ROLLUP GROUPING y CUBE
Ejemplo 68
Realizar una consulta que resuma la cantidad de artiacuteculos pedidos por cada iacutendice de producto y
nuacutemero de pedido Realizando un caacutelculo acumulativo
select productid as [PRODUCTO] orderid as [Nordm PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] group by productid orderid with rollup order by productid orderid
PRODUCTO Nordm 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
hellip
Ejemplo 69
Modificacioacuten al ejercicio anterior Realizar el mismo resumen pero uacutenicamente para el producto
cuyo id es 50
select productid as [PRODUCTO] orderid as [Nordm PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] where productid = 50 group by productid orderid with rollup order by productid ordered
PRODUCTO Nordm 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
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 47
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 modificacioacuten 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 [Nordm PEDIDO] grouping(orderid) as [GRUPO PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] where productid = 50 group by Productidorderid with cube order by productidorderid
PRODUCTO GRUPO PRODUCTO Nordm PEDIDO GRUPO PEDIDO SUMA TOTAL
----------- -------------- ----------- ------------ -----------
NULL 1 NULL 1 235
NULL 1 10350 0 15
NULL 1 10383 0 15
NULL 1 10429 0 40
NULL 1 10465 0 25
NULL 1 10637 0 25
NULL 1 10729 0 40
NULL 1 10751 0 20
NULL 1 10920 0 24
NULL 1 10948 0 9
NULL 1 11072 0 22
50 0 NULL 1 235
50 0 10350 0 15
50 0 10383 0 15
50 0 10429 0 40
50 0 10465 0 25
50 0 10637 0 25
50 0 10729 0 40
50 0 10751 0 20
50 0 10920 0 24
50 0 10948 0 9
50 0 11072 0 22
(22 filas afectadas)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 48
Obtencioacuten de resuacutemenes 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 maacutes columnas y
luego efectuar alguna operacioacuten de resumen sobre cada grupo asiacute generado
La diferencia con GROUP BY es que permite mostrar informacioacuten mas detallada de cada grupo
Ejemplo 71
Lista de pedidos que muestre por coacutedigo de pedido la cantidad de productos vendidos por cada uno
de ellos
select Idpedidoidproductopreciounidadcantidad[Sub Total]=sum(PreciounidadCantidad) from
[detalles de pedidos] group by Idpedidoidproductopreciounidadcantidad order by IdPedido compute
sum(Cantidad) by IdPedido
EJERCICIOS CON COMPUTE
Ejemplo 72
Generar un resumen de subtotales en una consulta que devuelva el nuacutemero de pedido la cantidad
pedida para todos los orderid 11070
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 49
Select Orderid as [Nordm PEDIDO] Quantity AS [CANTIDAD] From [Order Details] where orderid gt= 11070 order by Orderid compute Sum(quantity) by orderid compute sum(quantity)
Nordm PEDIDO CANTIDAD
----------- --------
11070 40
11070 20
11070 30
11070 20
sum
===========
110
sum
===========
110
(6 filas afectadas)
Ejemplo 73
Generar un resumen con calculo de subtotales similar al anterior pero para los orderid 11075 y
11076
Select Orderid as [Nordm PEDIDO] Quantity as [CANTIDAD] From [Order Details] where orderid = 11075 or orderid = 11076 order by Orderid compute Sum(quantity) by ordered Nordm PEDIDO CANTIDAD ----------- -------- 11075 10 11075 30 11075 2 sum =========== 42 Nordm PEDIDO CANTIDAD ----------- -------- 11076 20 11076 20 11076 10
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 50
sum =========== 50 (8 filas afectadas)
Ejemplo 74
Modificacioacuten al ejercicio anterior Agregar la cantidad total y la cantidad promedio al final del
informe
Select Orderid as [Nordm 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)
Nordm PEDIDO CANTIDAD
----------- --------
11075 10
11075 30
11075 2
sum
===========
42
Nordm PEDIDO CANTIDAD
----------- --------
11076 20
11076 20
11076 10
sum
===========
50
sum
===========
92
avg
===========
15
(10 filas afectadas)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 51
Ejemplo 75
Seleccionar de forma agrupada por tipo todos los tipos la suma de los precios y la suma del
anticipo de la tabla tiacutetulos
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 199900 50000000
business 119500 50000000
business 29900 101250000
business 199900 50000000
sum
=====================
549200
avg
=====================
62812500
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
mod_cook 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
avg
=====================
75000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
popular_comp 229500 70000000
popular_comp 200000 80000000
popular_comp NULL NULL
sum
=====================
429500
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 52
avg
=====================
75000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
psychology 215900 70000000
psychology 109500 22750000
psychology 70000 60000000
psychology 199900 20000000
psychology 79900 40000000
sum
=====================
675200
avg
=====================
42550000
(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 ademaacutes 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 199900 50000000
business 119500 50000000
business 29900 101250000
business 199900 50000000
sum
=====================
549200
sum
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 53
=====================
251250000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
mod_cook 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
popular_comp 229500 70000000
popular_comp 200000 80000000
popular_comp NULL NULL
sum
=====================
429500
sum
=====================
150000000
(30 filas afectadas)
Ejemplo 77
Generar un informe que muestre la suma de los precios de los libros de psicologiacutea 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 109500
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 54
psychology 0736 70000
psychology 0736 199900
psychology 0736 79900
sum
=====================
459300
TIPO CODIGO EDITOR PRECIO
------------ ------------- ---------------------
psychology 0877 215900
sum
=====================
215900
(7 filas afectadas)
Ejemplo 78
Generar un informe que obtenga la suma de los precios de todos los libros de psicologiacutea asiacute como la
suma de los precios de los libros de psicologiacutea 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 109500
psychology 0736 70000
psychology 0736 199900
psychology 0736 79900
sum
=====================
459300
TIPO CODIGO EDITOR PRECIO
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 55
------------ ------------- ---------------------
psychology 0877 215900
sum
=====================
215900
sum
=====================
675200
(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 199900 0000
mod_cook 0877 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO CODIGO EDITOR PRECIO ANTICIPO
------------ ------------- --------------------- ---------------------
trad_cook 0877 119500 40000000
trad_cook 0877 209500 70000000
trad_cook 0877 149900 80000000
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 56
sum
=====================
478900
sum
=====================
190000000
(9 filas afectadas)
Ejemplo 80
Generar un informe que muestre todos los tiacutetulos precio y anticipo de aquellos tiacutetulos que tengan
un precio superior a 20 doacutelares Ofreceraacute tambieacuten la suma total del precio y del anticipo
Select title as [TITULO] price as [PRECIO] advance as [ANTICIPO] From titles where price gt 20 order by title compute sum(price) compute sum(advance)
TITULO PRECIO ANTICIPO
-------------------------------------------------------------------------------- --------------------- -------------
--------
But Is It User Friendly 229500 70000000
Computer Phobic AND Non-Phobic Individuals Behavior Variations 215900
70000000
Onions Leeks and Garlic Cooking Secrets of the Mediterranean 209500
70000000
sum
=====================
654900
sum
=====================
210000000
(5 filas afectadas)
Ejemplo 81
Generar un informe que muestre el precio el tipo y el nuacutemero de editor de la tabla titles de todos
aquellas obras que pertenezcan la categoriacutea de ldquobusinessrdquo Ademaacutes apareceraacute la suma total de
precios y el maacuteximo pub_id de esta seleccioacuten
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 57
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 29900 0736
business 199900 1389
business 199900 1389
business 119500 1389
sum
=====================
549200
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 Mostraraacute la suma de los precios y los anticipos por tipo y luego calcularaacute 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 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
trad_cook 209500 70000000
trad_cook 119500 40000000
trad_cook 149900 80000000
sum
=====================
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 58
478900
sum
=====================
190000000
sum
=====================
708700
sum
=====================
340000000
(11 filas afectadas)
Eliminacioacuten 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 iquestA que precio se ah vendido los productos
Select IdProducto Preciounidad from [Detalles de pedidos] order by IdProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 59
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 mayoriacutea de las consultas que se hacen en una base de datos requiere que se lean datos procedentes
de dos oacute maacutes tablas
INNER JOIN- son las filas que satisfacen la condicioacuten de la combinacioacuten
En la siguiente sentencia SQL enlaza 2 tablas la tabla clientes y la tabla pedidos en esta ejemplo me
muestra los campos nombre compantildeiacutea y el campo idpedido
La uacutenica condicioacuten es que las 2 tablas tengan un campo en comuacuten
Ejemplo 84
select clientesNombreCompantildeiacuteapedidosidpedido from clientes inner join pedidos on
clientesidcliente=pedidosidcliente
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 60
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 pedidosIdPedido pedidosIdCliente 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 pedidosIdPedido pedidosIdCliente order
by pedidos IdPedido
CROSS JOIN
Un Cross Join es la consulta correlacionada que combine cada una de las filas de una de las tablas con
todas las filas de la otra tabla
No es necesario que exista una columna en comuacuten para ejecutar el Cross Join
Ejemplo 86
La siguiente consulta combina cada una de las filas de la tabla categoriacuteas con cada una de las filas de la
tabla productos
select productosNombreProductocategoriasNombrecategoria from productos cross join categorias
order by productosNombreProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 61
Ejercicios de consultas Muacuteltiples
Ejemplo 87
Mostrar el pedidos completo con el id=10248
Select pedidosIdPedido pedidosIdCliente
Total=sum ([detalles de pedidos]Preciounidad[detalles de pedidos]Cantidad)
From [detalles de pedidos] inner join pedidos on
[Detalles de pedidos]IdPedido=pedidosIdPedido where pedidosIdPedido=10248
Group by pedidosIdPedido pedidosIdCliente
Ejemplo 88
1 Mostrar la cantidad de productos por categoriacutea
Select CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
[Total de Producto]=sum (UnidadesEnExistencia) from Categoriacuteas inner join
Productos on CategoriacuteasIdCategoriacutea=productosIdCategoriacutea
Group by CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 62
Ejemplo 89
Calcular cuantas ventas tiene cada uno de los vendedores
Select empleadosIdEmpleado empleadosNombre empleadosApellidos
[Total de ventas]=count (pedidosIdPedido) from empleados
Inner join Pedidos on empleadosIdEmpleado=pedidosIdEmpleado
Group by empleadosIdEmpleado empleadosNombre empleadosApellidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 63
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 despueacutes saca la de Plantilla
Recomendaciones a la hora de usar las combinaciones
Combinar tablas en funcioacuten de claves principales y externas
Limite el nuacutemero de tablas de las combinaciones
Select Apellido
Oficio as
OFICIOFUNCION
salario from emp
UNION
Select Apellido
Funcion Salario from
Plantilla
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 64
SUBCONSULTAS
Es una SELECT anidada en una instruccioacuten INSERT DELETE SELECT o UPDATE
Como una tabla derivada
Select eemp_no as Numero
eApellido
from (select emp_no apellido from emp) as e
Como una expresioacuten
Select emp_no as [Numero]
Apellido
Salario
(select avg(Salario) from emp)
as Diferencia
from emp
where oficio = Empleado
Para correlacionar datos
- Expresioacuten dinaacutemica que cambia en cada fila de una consulta externa
- Es una combinacioacuten entre la subconsulta y la fila de la consulta externa
- Dividen consultas complejas con dos o maacutes consultas simples relacionadas
Subconsulta correlacionada
Select apellido oficiodept_no
from emp as e
where 20 lt
(select dept_no from dept as d
where edept_no = ddept_no
and ddnombre = Ventas)
SUBCONSULTAS
1 Mostrar el numero de empleado el apellido y la fecha de alta del empleado mas antiguo de la
empresa
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 65
SELECT emp_noapellido
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_noapellido
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 Jimeacutenez
select apellido oficio from emp where
oficio = (select oficio from emp where apellido = JIMENEZ)
4 Queremos saber el apellido oficio salario y nuacutemero 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 gt (select max (salario) from
emp where dept_no = 30)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 66
5 Mostrar el apellido la funcioacuten sala o departamento de todos los empleados que trabajen en la
empresa
select eApellido eOficio as [Cargo en Empresa] ddnombre as [Oficina]
from emp as e
inner join dept as d
on edept_no = ddept_no
union
select pApellido pfuncion snombre
from plantilla as p
inner join sala as s
on phospital_cod = shospital_cod
and psala_cod = ssala_cod
union
select dApellido despecialidad hnombre
from doctor as d
inner join hospital as h
on dhospital_cod = hhospital_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 = lsquoventasrsquo))
order by 2
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 67
8 Mostrar los empleados que tienen mejor salario que la media de los directores no incluyendo al
presidente
Select from emp where salario gt
(select avg (salario) from emp where oficio = DIRECTOR)
and oficio ltgt PRESIDENTE
9 Mostrar el apellido funcioacuten salario y coacutedigo 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 = lsquoENFERMEROrsquo or
funcion = lsquoENFERMERArsquo) and hospital_cod = (select hospital_cod from hospital where nombre =
lsquoSAN CARLOSrsquo)
Select apellido funcion salario hospital_cod from plantilla where
funcion in (ENFERMEROENFERMERA)
and hospital_cod = (select hospital_cod from hospital
where nombre = SAN CARLOS)
10 Visualizar los datos de los hospitales que tienen personal (Doctores) de cardiologiacutea
Select from hospital where hospital_cod in (select hospital_cod from doctor where
especialidad = lsquoCardiologiacutearsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 68
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 = lsquoPROVINCIALrsquo or
nombre= lsquoGENERALrsquo)
12 Mostrar el apellido de los enfermos que nacieron antes que el Sentildeor Miller
Select apellido from enfermo where Fecha_nac lt (select fecha_nac from enfermo where
apellido = lsquoMILLER Brsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 69
Simulacion de una clausula JOIN
Vamos a mostrar los oficios que estaacuten en maacutes de un departamento
Select distinct e1oficio from emp as e1
where e1oficio in(Select e2oficio from emp as e2
where e1dept_no ltgt e2dept_no)
Se debe utilizar antes una combinacioacuten que una subconsulta la combinacioacuten seriacutea asi dando los
mismos resultados
Select distinct e1Oficio from emp as e1
inner join emp as e2
on e1oficio = e2oficio
where e1dept_no ltgt e2dept_no
Estos son los dos oficios que estaacuten en
maacutes de un departamento
Subconsulta para simular una clausula HAVING
select e1apellidoe1oficio e1salario
from emp as e1
where e1salario gt
(select avg(e2salario) from emp as e2
where e1oficio = e2oficio)
Esta es la consulta utilizando el HAVING que es la que deberiacuteamos utilizar antes que una
subconsulta de simulacioacuten HAVING
SELECT e1apellidoe1oficio e1salario
FROM emp AS e1
INNER JOIN emp AS e2
ON e1oficio = e2oficio
GROUP BY e1oficio e1salarioe1apellido
HAVING e1salario gt AVG (e2salario)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 70
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 37
Select ROUND (1234567-2) --gt1000000
Select ROUND (1234567 0) --gt1230000
Select ROUND (1234567-3) ---gt0
SIGN
Devuelve el signo positivo (+1) cero (0) o negativo (-1) de la expresioacuten especificada
Dice el valor negativo positivo o neutro (0) del valor especificado
Select SIGN (-3) --gt-1
Select SIGN (3) --gt1
Select SIGN (0) --gt0
SQUARE
Devuelve el cuadrado de la expresioacuten especificada
Select SQUARE (4) as bdquoCuadrado‟--gt160
SQRT
Devuelve la raiacutez cuadrada de la expresioacuten especificada
Select SQRT (4) as [RAIZ CUADRADA] --gt20
FUNCIONES DE CADENA
ASCII
Devuelve el coacutedigo ASCII del caraacutecter maacutes a la izquierda de una expresioacuten de caracteres
Select ASCII(A)--gt65
Select ASCII(a)--gt97
Select ascii(aula)--gt97
CHAR
Una funcioacuten de cadena que convierte un coacutedigo ASCII int en un caraacutecter
select char(65)--gtA
select char(97)--gta
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 38
CHARINDEX
Devuelve la posicioacuten inicial de la expresioacuten especificada en una cadena de caracteres
CHARINDEX (expression1 expression2 [ start_location])
Argumentos
expression1
Es una expresioacuten que contiene la secuencia de caracteres que se desea buscar
Expression1 es una expresioacuten del tipo de cadenas cortas de caracteres
Expression2
Es una expresioacuten normalmente una columna
en la que se busca la cadena especificada
Expression2 es de la categoriacutea del tipo de datos cadena de caracteres
start_location
Es la posicioacuten del caraacutecter de expression2 en el que se empieza la buacutesqueda de expression1
Si no se especifica start_location es un nuacutemero negativo o es cero
la buacutesqueda empieza al principio de la cadena expression2
Si expression1 no se encuentra en expression2 CHARINDEX devuelve 0
Si alguno de los dos es null devuelve null
Select charindex (ciemurcielago) --gt4
Select charindex (ciemurcielago 2) --gt4
Select charindex (ciemurcielago 5) --gt0
Select charindex (ciemurcielago-6) --gt4
LEFT
Devuelve la parte de una cadena de caracteres que comienza en un nuacutemero de caracteres
especificado a partir de la izquierda
Select left (murcielago5) --gtmurci
RIGHT
Devuelve la parte de una cadena de caracteres que
Comienza en el nuacutemero de caracteres especificado
En integer_expression a partir de la derecha
Select right (hola que tal5) --gte tal
LEN
Cuenta el nuacutemero de caracteres que se incluyen en la cadena
Select len (murcieacutelago) --gt10
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 39
LOWER
Convierte a Minuacutesculas la cadena especificada
Select lower (MurcIELaGO) as [minusculas] --gtmurcielago
UPPER
Convierte a Mayuacutesculas la cadena especificada
Select upper (murcielago) as [MAYUSCULAS] --gtMURCIELAGO
RTRIM y LTRIM
Elimina los espacios que existen a la izquierda y a la derecha respectivamente
Select Rtrim ( murcieacutelago ) AS [SIN ESPACIOS] --gtmurcieacutelago
Select Ltrim ( murcieacutelago ) AS [SIN ESPACIOS] --gtmurcieacutelago
Select ltrim(rtrim( hola ))+
REPLACE
Reemplaza por una tercera expresioacuten todas las apariciones
de la segunda expresioacuten de cadena proporcionada en la primera expresioacuten de cadena
Select replace (hola que tal estasaA) --gtholA que tAl estAs
Select replace (buenos dias que tal estasuentildentildentilde) --gtbntildentildentildenos diasqntildentildentilde tal estas
SPACE
Coloca el nuacutemero de espacios que se le indiquen para entre una cadena de caracteres
Select hola+space(5)+que tal--gthola que tal
SUBSTRING
Devuelve parte de una expresioacuten de caracteres binaria de texto o de imagen
Sintaxis
SUBSTRING (Expresioacuten Comienzo Duracioacuten)
Argumentos
Expresioacuten
Es una cadena de caracteres cadena binaria texto imagen
Columna o expresioacuten que incluye una columna
No deben usarse expresiones que incluyan funciones de agregado
Start
Es un entero que especifica el punto en que comienza la subcadena
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 40
Length
Es un entero que especifica la longitud de la subcadena
(El nuacutemero de caracteres o bytes que se devuelven)
Select substring (murcielago 3 5) --gtrciel
Select substring (murcielago 3 len (murcielago)) --gtrciel
REVERSE
Devuelve invertida una expresioacuten de caraacutecter
Select reverse (hola)
REPLICATE
Repite una expresioacuten de caracteres un nuacutemero especificado de veces
Select replicate (murcielago 5)
Replicate replicate replicate replicate replicate
STUFF
Elimina el nuacutemero de caracteres especificados e insertados
Otro conjunto de caracteres en un punto de inicio indicado
Select STUFF (Murcieacutelago 2 3 ijklmn) Mijklmnielago
FUNCIONES DE SISTEMA
- APP_NAME () Devuelve el nombre de la aplicacioacuten actual
Select app_name () as [Nombre de la aplicacion]
- DATALENGTH (Expresioacuten) Devuelve un entero que es numero de bites necesarios para
representar esa expresioacuten int
Select datalength (Ninoni) as [Numero de bites]
- ISDATE (Expresioacuten) Dice si la expresioacuten es una fecha o no Devuelve 1 si la expresioacuten es
una fecha y 0 si no es una fecha
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 41
Select isdate (121001) as [Validacioacuten Fecha]
- ISNUMERIC (Expresion) Dice si la expresioacuten es un numero o no Devuelve 1 si la
expresioacuten es un nuacutemero y 0 si la expresioacuten no es nuacutemero
Select isnumeric (ddd) as [Validacion Numero]
- ISNULL (Expresioacuten ExpresionDevuelta) Si la expresioacuten es nula te devuelve la Expresioacuten
Devuelta y si no devuelve la primera Expresioacuten
Select isnull (nullNo nulo) as [Es Nulo]
- PARSENAME (bdquoNombreObjeto‟ ParteNombre)
ParteNombre es un valor de tipo Int que coge unos determinados valores del
NombreObjeto
1 Objeto
2 Propietario
3 Base de Datos
4 Servidor
Select parsename (saposeidondbopedidos1) as [Parte Expresioacuten]
Select parsename (saposeidondbopedidos 2) as [Parte Expresioacuten]
Select parsename (saposeidondbopedidos3) as [Parte Expresioacuten]
Select parsename ( saposeidondbopedidos 4) as [Parte Expresioacuten]
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 42
- SYSTEM_USER Devuelve el usuario del sistema actual
Depende de la autentificacioacuten con la que te hayas conectado
Select system_user as [Usuario conectado]
- USER_NAME() Devuelve el nombre del usuario actual
Select user_name ()
- COALESCE (expresioacuten1 expresioacuten2 )
Devuelve la primera expresioacuten no NULL
Si todos son NULL devuelve NULL
Select coalesce (PrecioUnidad Cantidad) from [detalles de Pedidos] Si el PrecioUnidad es nulo
devolveraacute la Cantidad y si los dos son nulos devolveraacute un campo Null
PROCEDIMIENTOS PARA AGRUPAR Y RESUMIR DATOS
En el examen de certificacioacuten 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 usaraacute la base de datos indicada Ejemplo Ponemos
en el analizador de consultas lo siguiente
Use Northwind
Select from [Order Details]
[Order Details]
Esta tabla perteneciente a la Northwind se encarga de manejar los pedidos
Order Id Nordm de Pedido
Producto Id Nordm de Producto
Ambos campos son Primary Key con lo que no puede haber una combinacioacuten de ambos campos que sea
igual
OrderId ProductId
1 A
1 B
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 43
1 C
2 A
3 C
Es decir en este caso no podriacutea existir una nueva combinacioacuten ldquo1 Ardquo o ldquo2 Ardquo
Quantity Es la cantidad del producto del pedido
ROLLUP
Se usa para presentar resuacutemenes de datos A de usarse junto con la clausula group by lo que hace es
realizar un resumen de los campos incluidos en el rollup
Ejemplo 63
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
Group by ProductID OrderID
with Rollup
Order by ProductID OrderID
Este ejemplo suma todas las cantidades y mediante
rollup muestra una fila con la suma de todas las
cantidades de cada producto y ademaacutes otra fila con la
suma de todas las cantidades de todos los productos El
resultado de este ejemplo seriacutea el que muestra la
imagen
Ejemplo 64
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
where orderid lt 10250
Group by ProductID OrderID
with Rollup
Order by ProductID OrderID
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 44
CUBE
Al igual que Rollup realiza resuacutemenes de campos agrupados Pero en este caso muestra un resumen con
cada combinacioacuten posible de los campos agrupados
Ejemplo 65
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
where orderid lt 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 combinacioacuten posible entre el
productid y el orderid
GROUPING
Indica si el resultado de un campo es el que hay en la propia tabla o se ha introducido mediante una
claacuteusula de resumen es decir para saber por ejemplo si un ldquoNullrdquo 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 lt 10250 Group by ProductID
OrderID with Cube Order by ProductID OrderID
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 45
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
Ponieacutendole un alias al
grouping saldriacutea el nombre
de columna que le
indiquemos
COMPUTE
Realiza un resumen en una columna aparte con el resultado de la funcioacuten de agregado indicada Su
formato seriacutea Compute funcioacuten(campo) No se puede utilizar en aplicaciones cliente servidor es una
clausula meramente informativa Tampoco se le pueden poner alias a los resuacutemenes
Ejemplo 67
Select Productid Orderid Quantity From [Order Details] order by ProductID Orderid compute
Sum(quantity)
Vemos que muestra la
columna con la suma
total de todas las
cantidades
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 46
Ejercicios de ROLLUP GROUPING y CUBE
Ejemplo 68
Realizar una consulta que resuma la cantidad de artiacuteculos pedidos por cada iacutendice de producto y
nuacutemero de pedido Realizando un caacutelculo acumulativo
select productid as [PRODUCTO] orderid as [Nordm PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] group by productid orderid with rollup order by productid orderid
PRODUCTO Nordm 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
hellip
Ejemplo 69
Modificacioacuten al ejercicio anterior Realizar el mismo resumen pero uacutenicamente para el producto
cuyo id es 50
select productid as [PRODUCTO] orderid as [Nordm PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] where productid = 50 group by productid orderid with rollup order by productid ordered
PRODUCTO Nordm 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
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 47
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 modificacioacuten 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 [Nordm PEDIDO] grouping(orderid) as [GRUPO PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] where productid = 50 group by Productidorderid with cube order by productidorderid
PRODUCTO GRUPO PRODUCTO Nordm PEDIDO GRUPO PEDIDO SUMA TOTAL
----------- -------------- ----------- ------------ -----------
NULL 1 NULL 1 235
NULL 1 10350 0 15
NULL 1 10383 0 15
NULL 1 10429 0 40
NULL 1 10465 0 25
NULL 1 10637 0 25
NULL 1 10729 0 40
NULL 1 10751 0 20
NULL 1 10920 0 24
NULL 1 10948 0 9
NULL 1 11072 0 22
50 0 NULL 1 235
50 0 10350 0 15
50 0 10383 0 15
50 0 10429 0 40
50 0 10465 0 25
50 0 10637 0 25
50 0 10729 0 40
50 0 10751 0 20
50 0 10920 0 24
50 0 10948 0 9
50 0 11072 0 22
(22 filas afectadas)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 48
Obtencioacuten de resuacutemenes 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 maacutes columnas y
luego efectuar alguna operacioacuten de resumen sobre cada grupo asiacute generado
La diferencia con GROUP BY es que permite mostrar informacioacuten mas detallada de cada grupo
Ejemplo 71
Lista de pedidos que muestre por coacutedigo de pedido la cantidad de productos vendidos por cada uno
de ellos
select Idpedidoidproductopreciounidadcantidad[Sub Total]=sum(PreciounidadCantidad) from
[detalles de pedidos] group by Idpedidoidproductopreciounidadcantidad order by IdPedido compute
sum(Cantidad) by IdPedido
EJERCICIOS CON COMPUTE
Ejemplo 72
Generar un resumen de subtotales en una consulta que devuelva el nuacutemero de pedido la cantidad
pedida para todos los orderid 11070
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 49
Select Orderid as [Nordm PEDIDO] Quantity AS [CANTIDAD] From [Order Details] where orderid gt= 11070 order by Orderid compute Sum(quantity) by orderid compute sum(quantity)
Nordm PEDIDO CANTIDAD
----------- --------
11070 40
11070 20
11070 30
11070 20
sum
===========
110
sum
===========
110
(6 filas afectadas)
Ejemplo 73
Generar un resumen con calculo de subtotales similar al anterior pero para los orderid 11075 y
11076
Select Orderid as [Nordm PEDIDO] Quantity as [CANTIDAD] From [Order Details] where orderid = 11075 or orderid = 11076 order by Orderid compute Sum(quantity) by ordered Nordm PEDIDO CANTIDAD ----------- -------- 11075 10 11075 30 11075 2 sum =========== 42 Nordm PEDIDO CANTIDAD ----------- -------- 11076 20 11076 20 11076 10
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 50
sum =========== 50 (8 filas afectadas)
Ejemplo 74
Modificacioacuten al ejercicio anterior Agregar la cantidad total y la cantidad promedio al final del
informe
Select Orderid as [Nordm 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)
Nordm PEDIDO CANTIDAD
----------- --------
11075 10
11075 30
11075 2
sum
===========
42
Nordm PEDIDO CANTIDAD
----------- --------
11076 20
11076 20
11076 10
sum
===========
50
sum
===========
92
avg
===========
15
(10 filas afectadas)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 51
Ejemplo 75
Seleccionar de forma agrupada por tipo todos los tipos la suma de los precios y la suma del
anticipo de la tabla tiacutetulos
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 199900 50000000
business 119500 50000000
business 29900 101250000
business 199900 50000000
sum
=====================
549200
avg
=====================
62812500
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
mod_cook 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
avg
=====================
75000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
popular_comp 229500 70000000
popular_comp 200000 80000000
popular_comp NULL NULL
sum
=====================
429500
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 52
avg
=====================
75000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
psychology 215900 70000000
psychology 109500 22750000
psychology 70000 60000000
psychology 199900 20000000
psychology 79900 40000000
sum
=====================
675200
avg
=====================
42550000
(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 ademaacutes 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 199900 50000000
business 119500 50000000
business 29900 101250000
business 199900 50000000
sum
=====================
549200
sum
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 53
=====================
251250000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
mod_cook 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
popular_comp 229500 70000000
popular_comp 200000 80000000
popular_comp NULL NULL
sum
=====================
429500
sum
=====================
150000000
(30 filas afectadas)
Ejemplo 77
Generar un informe que muestre la suma de los precios de los libros de psicologiacutea 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 109500
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 54
psychology 0736 70000
psychology 0736 199900
psychology 0736 79900
sum
=====================
459300
TIPO CODIGO EDITOR PRECIO
------------ ------------- ---------------------
psychology 0877 215900
sum
=====================
215900
(7 filas afectadas)
Ejemplo 78
Generar un informe que obtenga la suma de los precios de todos los libros de psicologiacutea asiacute como la
suma de los precios de los libros de psicologiacutea 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 109500
psychology 0736 70000
psychology 0736 199900
psychology 0736 79900
sum
=====================
459300
TIPO CODIGO EDITOR PRECIO
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 55
------------ ------------- ---------------------
psychology 0877 215900
sum
=====================
215900
sum
=====================
675200
(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 199900 0000
mod_cook 0877 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO CODIGO EDITOR PRECIO ANTICIPO
------------ ------------- --------------------- ---------------------
trad_cook 0877 119500 40000000
trad_cook 0877 209500 70000000
trad_cook 0877 149900 80000000
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 56
sum
=====================
478900
sum
=====================
190000000
(9 filas afectadas)
Ejemplo 80
Generar un informe que muestre todos los tiacutetulos precio y anticipo de aquellos tiacutetulos que tengan
un precio superior a 20 doacutelares Ofreceraacute tambieacuten la suma total del precio y del anticipo
Select title as [TITULO] price as [PRECIO] advance as [ANTICIPO] From titles where price gt 20 order by title compute sum(price) compute sum(advance)
TITULO PRECIO ANTICIPO
-------------------------------------------------------------------------------- --------------------- -------------
--------
But Is It User Friendly 229500 70000000
Computer Phobic AND Non-Phobic Individuals Behavior Variations 215900
70000000
Onions Leeks and Garlic Cooking Secrets of the Mediterranean 209500
70000000
sum
=====================
654900
sum
=====================
210000000
(5 filas afectadas)
Ejemplo 81
Generar un informe que muestre el precio el tipo y el nuacutemero de editor de la tabla titles de todos
aquellas obras que pertenezcan la categoriacutea de ldquobusinessrdquo Ademaacutes apareceraacute la suma total de
precios y el maacuteximo pub_id de esta seleccioacuten
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 57
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 29900 0736
business 199900 1389
business 199900 1389
business 119500 1389
sum
=====================
549200
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 Mostraraacute la suma de los precios y los anticipos por tipo y luego calcularaacute 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 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
trad_cook 209500 70000000
trad_cook 119500 40000000
trad_cook 149900 80000000
sum
=====================
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 58
478900
sum
=====================
190000000
sum
=====================
708700
sum
=====================
340000000
(11 filas afectadas)
Eliminacioacuten 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 iquestA que precio se ah vendido los productos
Select IdProducto Preciounidad from [Detalles de pedidos] order by IdProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 59
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 mayoriacutea de las consultas que se hacen en una base de datos requiere que se lean datos procedentes
de dos oacute maacutes tablas
INNER JOIN- son las filas que satisfacen la condicioacuten de la combinacioacuten
En la siguiente sentencia SQL enlaza 2 tablas la tabla clientes y la tabla pedidos en esta ejemplo me
muestra los campos nombre compantildeiacutea y el campo idpedido
La uacutenica condicioacuten es que las 2 tablas tengan un campo en comuacuten
Ejemplo 84
select clientesNombreCompantildeiacuteapedidosidpedido from clientes inner join pedidos on
clientesidcliente=pedidosidcliente
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 60
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 pedidosIdPedido pedidosIdCliente 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 pedidosIdPedido pedidosIdCliente order
by pedidos IdPedido
CROSS JOIN
Un Cross Join es la consulta correlacionada que combine cada una de las filas de una de las tablas con
todas las filas de la otra tabla
No es necesario que exista una columna en comuacuten para ejecutar el Cross Join
Ejemplo 86
La siguiente consulta combina cada una de las filas de la tabla categoriacuteas con cada una de las filas de la
tabla productos
select productosNombreProductocategoriasNombrecategoria from productos cross join categorias
order by productosNombreProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 61
Ejercicios de consultas Muacuteltiples
Ejemplo 87
Mostrar el pedidos completo con el id=10248
Select pedidosIdPedido pedidosIdCliente
Total=sum ([detalles de pedidos]Preciounidad[detalles de pedidos]Cantidad)
From [detalles de pedidos] inner join pedidos on
[Detalles de pedidos]IdPedido=pedidosIdPedido where pedidosIdPedido=10248
Group by pedidosIdPedido pedidosIdCliente
Ejemplo 88
1 Mostrar la cantidad de productos por categoriacutea
Select CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
[Total de Producto]=sum (UnidadesEnExistencia) from Categoriacuteas inner join
Productos on CategoriacuteasIdCategoriacutea=productosIdCategoriacutea
Group by CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 62
Ejemplo 89
Calcular cuantas ventas tiene cada uno de los vendedores
Select empleadosIdEmpleado empleadosNombre empleadosApellidos
[Total de ventas]=count (pedidosIdPedido) from empleados
Inner join Pedidos on empleadosIdEmpleado=pedidosIdEmpleado
Group by empleadosIdEmpleado empleadosNombre empleadosApellidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 63
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 despueacutes saca la de Plantilla
Recomendaciones a la hora de usar las combinaciones
Combinar tablas en funcioacuten de claves principales y externas
Limite el nuacutemero de tablas de las combinaciones
Select Apellido
Oficio as
OFICIOFUNCION
salario from emp
UNION
Select Apellido
Funcion Salario from
Plantilla
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 64
SUBCONSULTAS
Es una SELECT anidada en una instruccioacuten INSERT DELETE SELECT o UPDATE
Como una tabla derivada
Select eemp_no as Numero
eApellido
from (select emp_no apellido from emp) as e
Como una expresioacuten
Select emp_no as [Numero]
Apellido
Salario
(select avg(Salario) from emp)
as Diferencia
from emp
where oficio = Empleado
Para correlacionar datos
- Expresioacuten dinaacutemica que cambia en cada fila de una consulta externa
- Es una combinacioacuten entre la subconsulta y la fila de la consulta externa
- Dividen consultas complejas con dos o maacutes consultas simples relacionadas
Subconsulta correlacionada
Select apellido oficiodept_no
from emp as e
where 20 lt
(select dept_no from dept as d
where edept_no = ddept_no
and ddnombre = Ventas)
SUBCONSULTAS
1 Mostrar el numero de empleado el apellido y la fecha de alta del empleado mas antiguo de la
empresa
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 65
SELECT emp_noapellido
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_noapellido
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 Jimeacutenez
select apellido oficio from emp where
oficio = (select oficio from emp where apellido = JIMENEZ)
4 Queremos saber el apellido oficio salario y nuacutemero 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 gt (select max (salario) from
emp where dept_no = 30)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 66
5 Mostrar el apellido la funcioacuten sala o departamento de todos los empleados que trabajen en la
empresa
select eApellido eOficio as [Cargo en Empresa] ddnombre as [Oficina]
from emp as e
inner join dept as d
on edept_no = ddept_no
union
select pApellido pfuncion snombre
from plantilla as p
inner join sala as s
on phospital_cod = shospital_cod
and psala_cod = ssala_cod
union
select dApellido despecialidad hnombre
from doctor as d
inner join hospital as h
on dhospital_cod = hhospital_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 = lsquoventasrsquo))
order by 2
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 67
8 Mostrar los empleados que tienen mejor salario que la media de los directores no incluyendo al
presidente
Select from emp where salario gt
(select avg (salario) from emp where oficio = DIRECTOR)
and oficio ltgt PRESIDENTE
9 Mostrar el apellido funcioacuten salario y coacutedigo 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 = lsquoENFERMEROrsquo or
funcion = lsquoENFERMERArsquo) and hospital_cod = (select hospital_cod from hospital where nombre =
lsquoSAN CARLOSrsquo)
Select apellido funcion salario hospital_cod from plantilla where
funcion in (ENFERMEROENFERMERA)
and hospital_cod = (select hospital_cod from hospital
where nombre = SAN CARLOS)
10 Visualizar los datos de los hospitales que tienen personal (Doctores) de cardiologiacutea
Select from hospital where hospital_cod in (select hospital_cod from doctor where
especialidad = lsquoCardiologiacutearsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 68
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 = lsquoPROVINCIALrsquo or
nombre= lsquoGENERALrsquo)
12 Mostrar el apellido de los enfermos que nacieron antes que el Sentildeor Miller
Select apellido from enfermo where Fecha_nac lt (select fecha_nac from enfermo where
apellido = lsquoMILLER Brsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 69
Simulacion de una clausula JOIN
Vamos a mostrar los oficios que estaacuten en maacutes de un departamento
Select distinct e1oficio from emp as e1
where e1oficio in(Select e2oficio from emp as e2
where e1dept_no ltgt e2dept_no)
Se debe utilizar antes una combinacioacuten que una subconsulta la combinacioacuten seriacutea asi dando los
mismos resultados
Select distinct e1Oficio from emp as e1
inner join emp as e2
on e1oficio = e2oficio
where e1dept_no ltgt e2dept_no
Estos son los dos oficios que estaacuten en
maacutes de un departamento
Subconsulta para simular una clausula HAVING
select e1apellidoe1oficio e1salario
from emp as e1
where e1salario gt
(select avg(e2salario) from emp as e2
where e1oficio = e2oficio)
Esta es la consulta utilizando el HAVING que es la que deberiacuteamos utilizar antes que una
subconsulta de simulacioacuten HAVING
SELECT e1apellidoe1oficio e1salario
FROM emp AS e1
INNER JOIN emp AS e2
ON e1oficio = e2oficio
GROUP BY e1oficio e1salarioe1apellido
HAVING e1salario gt AVG (e2salario)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 70
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 38
CHARINDEX
Devuelve la posicioacuten inicial de la expresioacuten especificada en una cadena de caracteres
CHARINDEX (expression1 expression2 [ start_location])
Argumentos
expression1
Es una expresioacuten que contiene la secuencia de caracteres que se desea buscar
Expression1 es una expresioacuten del tipo de cadenas cortas de caracteres
Expression2
Es una expresioacuten normalmente una columna
en la que se busca la cadena especificada
Expression2 es de la categoriacutea del tipo de datos cadena de caracteres
start_location
Es la posicioacuten del caraacutecter de expression2 en el que se empieza la buacutesqueda de expression1
Si no se especifica start_location es un nuacutemero negativo o es cero
la buacutesqueda empieza al principio de la cadena expression2
Si expression1 no se encuentra en expression2 CHARINDEX devuelve 0
Si alguno de los dos es null devuelve null
Select charindex (ciemurcielago) --gt4
Select charindex (ciemurcielago 2) --gt4
Select charindex (ciemurcielago 5) --gt0
Select charindex (ciemurcielago-6) --gt4
LEFT
Devuelve la parte de una cadena de caracteres que comienza en un nuacutemero de caracteres
especificado a partir de la izquierda
Select left (murcielago5) --gtmurci
RIGHT
Devuelve la parte de una cadena de caracteres que
Comienza en el nuacutemero de caracteres especificado
En integer_expression a partir de la derecha
Select right (hola que tal5) --gte tal
LEN
Cuenta el nuacutemero de caracteres que se incluyen en la cadena
Select len (murcieacutelago) --gt10
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 39
LOWER
Convierte a Minuacutesculas la cadena especificada
Select lower (MurcIELaGO) as [minusculas] --gtmurcielago
UPPER
Convierte a Mayuacutesculas la cadena especificada
Select upper (murcielago) as [MAYUSCULAS] --gtMURCIELAGO
RTRIM y LTRIM
Elimina los espacios que existen a la izquierda y a la derecha respectivamente
Select Rtrim ( murcieacutelago ) AS [SIN ESPACIOS] --gtmurcieacutelago
Select Ltrim ( murcieacutelago ) AS [SIN ESPACIOS] --gtmurcieacutelago
Select ltrim(rtrim( hola ))+
REPLACE
Reemplaza por una tercera expresioacuten todas las apariciones
de la segunda expresioacuten de cadena proporcionada en la primera expresioacuten de cadena
Select replace (hola que tal estasaA) --gtholA que tAl estAs
Select replace (buenos dias que tal estasuentildentildentilde) --gtbntildentildentildenos diasqntildentildentilde tal estas
SPACE
Coloca el nuacutemero de espacios que se le indiquen para entre una cadena de caracteres
Select hola+space(5)+que tal--gthola que tal
SUBSTRING
Devuelve parte de una expresioacuten de caracteres binaria de texto o de imagen
Sintaxis
SUBSTRING (Expresioacuten Comienzo Duracioacuten)
Argumentos
Expresioacuten
Es una cadena de caracteres cadena binaria texto imagen
Columna o expresioacuten que incluye una columna
No deben usarse expresiones que incluyan funciones de agregado
Start
Es un entero que especifica el punto en que comienza la subcadena
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 40
Length
Es un entero que especifica la longitud de la subcadena
(El nuacutemero de caracteres o bytes que se devuelven)
Select substring (murcielago 3 5) --gtrciel
Select substring (murcielago 3 len (murcielago)) --gtrciel
REVERSE
Devuelve invertida una expresioacuten de caraacutecter
Select reverse (hola)
REPLICATE
Repite una expresioacuten de caracteres un nuacutemero especificado de veces
Select replicate (murcielago 5)
Replicate replicate replicate replicate replicate
STUFF
Elimina el nuacutemero de caracteres especificados e insertados
Otro conjunto de caracteres en un punto de inicio indicado
Select STUFF (Murcieacutelago 2 3 ijklmn) Mijklmnielago
FUNCIONES DE SISTEMA
- APP_NAME () Devuelve el nombre de la aplicacioacuten actual
Select app_name () as [Nombre de la aplicacion]
- DATALENGTH (Expresioacuten) Devuelve un entero que es numero de bites necesarios para
representar esa expresioacuten int
Select datalength (Ninoni) as [Numero de bites]
- ISDATE (Expresioacuten) Dice si la expresioacuten es una fecha o no Devuelve 1 si la expresioacuten es
una fecha y 0 si no es una fecha
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 41
Select isdate (121001) as [Validacioacuten Fecha]
- ISNUMERIC (Expresion) Dice si la expresioacuten es un numero o no Devuelve 1 si la
expresioacuten es un nuacutemero y 0 si la expresioacuten no es nuacutemero
Select isnumeric (ddd) as [Validacion Numero]
- ISNULL (Expresioacuten ExpresionDevuelta) Si la expresioacuten es nula te devuelve la Expresioacuten
Devuelta y si no devuelve la primera Expresioacuten
Select isnull (nullNo nulo) as [Es Nulo]
- PARSENAME (bdquoNombreObjeto‟ ParteNombre)
ParteNombre es un valor de tipo Int que coge unos determinados valores del
NombreObjeto
1 Objeto
2 Propietario
3 Base de Datos
4 Servidor
Select parsename (saposeidondbopedidos1) as [Parte Expresioacuten]
Select parsename (saposeidondbopedidos 2) as [Parte Expresioacuten]
Select parsename (saposeidondbopedidos3) as [Parte Expresioacuten]
Select parsename ( saposeidondbopedidos 4) as [Parte Expresioacuten]
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 42
- SYSTEM_USER Devuelve el usuario del sistema actual
Depende de la autentificacioacuten con la que te hayas conectado
Select system_user as [Usuario conectado]
- USER_NAME() Devuelve el nombre del usuario actual
Select user_name ()
- COALESCE (expresioacuten1 expresioacuten2 )
Devuelve la primera expresioacuten no NULL
Si todos son NULL devuelve NULL
Select coalesce (PrecioUnidad Cantidad) from [detalles de Pedidos] Si el PrecioUnidad es nulo
devolveraacute la Cantidad y si los dos son nulos devolveraacute un campo Null
PROCEDIMIENTOS PARA AGRUPAR Y RESUMIR DATOS
En el examen de certificacioacuten 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 usaraacute la base de datos indicada Ejemplo Ponemos
en el analizador de consultas lo siguiente
Use Northwind
Select from [Order Details]
[Order Details]
Esta tabla perteneciente a la Northwind se encarga de manejar los pedidos
Order Id Nordm de Pedido
Producto Id Nordm de Producto
Ambos campos son Primary Key con lo que no puede haber una combinacioacuten de ambos campos que sea
igual
OrderId ProductId
1 A
1 B
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 43
1 C
2 A
3 C
Es decir en este caso no podriacutea existir una nueva combinacioacuten ldquo1 Ardquo o ldquo2 Ardquo
Quantity Es la cantidad del producto del pedido
ROLLUP
Se usa para presentar resuacutemenes de datos A de usarse junto con la clausula group by lo que hace es
realizar un resumen de los campos incluidos en el rollup
Ejemplo 63
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
Group by ProductID OrderID
with Rollup
Order by ProductID OrderID
Este ejemplo suma todas las cantidades y mediante
rollup muestra una fila con la suma de todas las
cantidades de cada producto y ademaacutes otra fila con la
suma de todas las cantidades de todos los productos El
resultado de este ejemplo seriacutea el que muestra la
imagen
Ejemplo 64
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
where orderid lt 10250
Group by ProductID OrderID
with Rollup
Order by ProductID OrderID
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 44
CUBE
Al igual que Rollup realiza resuacutemenes de campos agrupados Pero en este caso muestra un resumen con
cada combinacioacuten posible de los campos agrupados
Ejemplo 65
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
where orderid lt 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 combinacioacuten posible entre el
productid y el orderid
GROUPING
Indica si el resultado de un campo es el que hay en la propia tabla o se ha introducido mediante una
claacuteusula de resumen es decir para saber por ejemplo si un ldquoNullrdquo 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 lt 10250 Group by ProductID
OrderID with Cube Order by ProductID OrderID
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 45
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
Ponieacutendole un alias al
grouping saldriacutea el nombre
de columna que le
indiquemos
COMPUTE
Realiza un resumen en una columna aparte con el resultado de la funcioacuten de agregado indicada Su
formato seriacutea Compute funcioacuten(campo) No se puede utilizar en aplicaciones cliente servidor es una
clausula meramente informativa Tampoco se le pueden poner alias a los resuacutemenes
Ejemplo 67
Select Productid Orderid Quantity From [Order Details] order by ProductID Orderid compute
Sum(quantity)
Vemos que muestra la
columna con la suma
total de todas las
cantidades
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 46
Ejercicios de ROLLUP GROUPING y CUBE
Ejemplo 68
Realizar una consulta que resuma la cantidad de artiacuteculos pedidos por cada iacutendice de producto y
nuacutemero de pedido Realizando un caacutelculo acumulativo
select productid as [PRODUCTO] orderid as [Nordm PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] group by productid orderid with rollup order by productid orderid
PRODUCTO Nordm 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
hellip
Ejemplo 69
Modificacioacuten al ejercicio anterior Realizar el mismo resumen pero uacutenicamente para el producto
cuyo id es 50
select productid as [PRODUCTO] orderid as [Nordm PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] where productid = 50 group by productid orderid with rollup order by productid ordered
PRODUCTO Nordm 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
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 47
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 modificacioacuten 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 [Nordm PEDIDO] grouping(orderid) as [GRUPO PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] where productid = 50 group by Productidorderid with cube order by productidorderid
PRODUCTO GRUPO PRODUCTO Nordm PEDIDO GRUPO PEDIDO SUMA TOTAL
----------- -------------- ----------- ------------ -----------
NULL 1 NULL 1 235
NULL 1 10350 0 15
NULL 1 10383 0 15
NULL 1 10429 0 40
NULL 1 10465 0 25
NULL 1 10637 0 25
NULL 1 10729 0 40
NULL 1 10751 0 20
NULL 1 10920 0 24
NULL 1 10948 0 9
NULL 1 11072 0 22
50 0 NULL 1 235
50 0 10350 0 15
50 0 10383 0 15
50 0 10429 0 40
50 0 10465 0 25
50 0 10637 0 25
50 0 10729 0 40
50 0 10751 0 20
50 0 10920 0 24
50 0 10948 0 9
50 0 11072 0 22
(22 filas afectadas)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 48
Obtencioacuten de resuacutemenes 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 maacutes columnas y
luego efectuar alguna operacioacuten de resumen sobre cada grupo asiacute generado
La diferencia con GROUP BY es que permite mostrar informacioacuten mas detallada de cada grupo
Ejemplo 71
Lista de pedidos que muestre por coacutedigo de pedido la cantidad de productos vendidos por cada uno
de ellos
select Idpedidoidproductopreciounidadcantidad[Sub Total]=sum(PreciounidadCantidad) from
[detalles de pedidos] group by Idpedidoidproductopreciounidadcantidad order by IdPedido compute
sum(Cantidad) by IdPedido
EJERCICIOS CON COMPUTE
Ejemplo 72
Generar un resumen de subtotales en una consulta que devuelva el nuacutemero de pedido la cantidad
pedida para todos los orderid 11070
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 49
Select Orderid as [Nordm PEDIDO] Quantity AS [CANTIDAD] From [Order Details] where orderid gt= 11070 order by Orderid compute Sum(quantity) by orderid compute sum(quantity)
Nordm PEDIDO CANTIDAD
----------- --------
11070 40
11070 20
11070 30
11070 20
sum
===========
110
sum
===========
110
(6 filas afectadas)
Ejemplo 73
Generar un resumen con calculo de subtotales similar al anterior pero para los orderid 11075 y
11076
Select Orderid as [Nordm PEDIDO] Quantity as [CANTIDAD] From [Order Details] where orderid = 11075 or orderid = 11076 order by Orderid compute Sum(quantity) by ordered Nordm PEDIDO CANTIDAD ----------- -------- 11075 10 11075 30 11075 2 sum =========== 42 Nordm PEDIDO CANTIDAD ----------- -------- 11076 20 11076 20 11076 10
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 50
sum =========== 50 (8 filas afectadas)
Ejemplo 74
Modificacioacuten al ejercicio anterior Agregar la cantidad total y la cantidad promedio al final del
informe
Select Orderid as [Nordm 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)
Nordm PEDIDO CANTIDAD
----------- --------
11075 10
11075 30
11075 2
sum
===========
42
Nordm PEDIDO CANTIDAD
----------- --------
11076 20
11076 20
11076 10
sum
===========
50
sum
===========
92
avg
===========
15
(10 filas afectadas)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 51
Ejemplo 75
Seleccionar de forma agrupada por tipo todos los tipos la suma de los precios y la suma del
anticipo de la tabla tiacutetulos
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 199900 50000000
business 119500 50000000
business 29900 101250000
business 199900 50000000
sum
=====================
549200
avg
=====================
62812500
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
mod_cook 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
avg
=====================
75000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
popular_comp 229500 70000000
popular_comp 200000 80000000
popular_comp NULL NULL
sum
=====================
429500
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 52
avg
=====================
75000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
psychology 215900 70000000
psychology 109500 22750000
psychology 70000 60000000
psychology 199900 20000000
psychology 79900 40000000
sum
=====================
675200
avg
=====================
42550000
(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 ademaacutes 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 199900 50000000
business 119500 50000000
business 29900 101250000
business 199900 50000000
sum
=====================
549200
sum
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 53
=====================
251250000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
mod_cook 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
popular_comp 229500 70000000
popular_comp 200000 80000000
popular_comp NULL NULL
sum
=====================
429500
sum
=====================
150000000
(30 filas afectadas)
Ejemplo 77
Generar un informe que muestre la suma de los precios de los libros de psicologiacutea 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 109500
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 54
psychology 0736 70000
psychology 0736 199900
psychology 0736 79900
sum
=====================
459300
TIPO CODIGO EDITOR PRECIO
------------ ------------- ---------------------
psychology 0877 215900
sum
=====================
215900
(7 filas afectadas)
Ejemplo 78
Generar un informe que obtenga la suma de los precios de todos los libros de psicologiacutea asiacute como la
suma de los precios de los libros de psicologiacutea 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 109500
psychology 0736 70000
psychology 0736 199900
psychology 0736 79900
sum
=====================
459300
TIPO CODIGO EDITOR PRECIO
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 55
------------ ------------- ---------------------
psychology 0877 215900
sum
=====================
215900
sum
=====================
675200
(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 199900 0000
mod_cook 0877 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO CODIGO EDITOR PRECIO ANTICIPO
------------ ------------- --------------------- ---------------------
trad_cook 0877 119500 40000000
trad_cook 0877 209500 70000000
trad_cook 0877 149900 80000000
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 56
sum
=====================
478900
sum
=====================
190000000
(9 filas afectadas)
Ejemplo 80
Generar un informe que muestre todos los tiacutetulos precio y anticipo de aquellos tiacutetulos que tengan
un precio superior a 20 doacutelares Ofreceraacute tambieacuten la suma total del precio y del anticipo
Select title as [TITULO] price as [PRECIO] advance as [ANTICIPO] From titles where price gt 20 order by title compute sum(price) compute sum(advance)
TITULO PRECIO ANTICIPO
-------------------------------------------------------------------------------- --------------------- -------------
--------
But Is It User Friendly 229500 70000000
Computer Phobic AND Non-Phobic Individuals Behavior Variations 215900
70000000
Onions Leeks and Garlic Cooking Secrets of the Mediterranean 209500
70000000
sum
=====================
654900
sum
=====================
210000000
(5 filas afectadas)
Ejemplo 81
Generar un informe que muestre el precio el tipo y el nuacutemero de editor de la tabla titles de todos
aquellas obras que pertenezcan la categoriacutea de ldquobusinessrdquo Ademaacutes apareceraacute la suma total de
precios y el maacuteximo pub_id de esta seleccioacuten
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 57
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 29900 0736
business 199900 1389
business 199900 1389
business 119500 1389
sum
=====================
549200
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 Mostraraacute la suma de los precios y los anticipos por tipo y luego calcularaacute 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 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
trad_cook 209500 70000000
trad_cook 119500 40000000
trad_cook 149900 80000000
sum
=====================
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 58
478900
sum
=====================
190000000
sum
=====================
708700
sum
=====================
340000000
(11 filas afectadas)
Eliminacioacuten 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 iquestA que precio se ah vendido los productos
Select IdProducto Preciounidad from [Detalles de pedidos] order by IdProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 59
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 mayoriacutea de las consultas que se hacen en una base de datos requiere que se lean datos procedentes
de dos oacute maacutes tablas
INNER JOIN- son las filas que satisfacen la condicioacuten de la combinacioacuten
En la siguiente sentencia SQL enlaza 2 tablas la tabla clientes y la tabla pedidos en esta ejemplo me
muestra los campos nombre compantildeiacutea y el campo idpedido
La uacutenica condicioacuten es que las 2 tablas tengan un campo en comuacuten
Ejemplo 84
select clientesNombreCompantildeiacuteapedidosidpedido from clientes inner join pedidos on
clientesidcliente=pedidosidcliente
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 60
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 pedidosIdPedido pedidosIdCliente 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 pedidosIdPedido pedidosIdCliente order
by pedidos IdPedido
CROSS JOIN
Un Cross Join es la consulta correlacionada que combine cada una de las filas de una de las tablas con
todas las filas de la otra tabla
No es necesario que exista una columna en comuacuten para ejecutar el Cross Join
Ejemplo 86
La siguiente consulta combina cada una de las filas de la tabla categoriacuteas con cada una de las filas de la
tabla productos
select productosNombreProductocategoriasNombrecategoria from productos cross join categorias
order by productosNombreProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 61
Ejercicios de consultas Muacuteltiples
Ejemplo 87
Mostrar el pedidos completo con el id=10248
Select pedidosIdPedido pedidosIdCliente
Total=sum ([detalles de pedidos]Preciounidad[detalles de pedidos]Cantidad)
From [detalles de pedidos] inner join pedidos on
[Detalles de pedidos]IdPedido=pedidosIdPedido where pedidosIdPedido=10248
Group by pedidosIdPedido pedidosIdCliente
Ejemplo 88
1 Mostrar la cantidad de productos por categoriacutea
Select CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
[Total de Producto]=sum (UnidadesEnExistencia) from Categoriacuteas inner join
Productos on CategoriacuteasIdCategoriacutea=productosIdCategoriacutea
Group by CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 62
Ejemplo 89
Calcular cuantas ventas tiene cada uno de los vendedores
Select empleadosIdEmpleado empleadosNombre empleadosApellidos
[Total de ventas]=count (pedidosIdPedido) from empleados
Inner join Pedidos on empleadosIdEmpleado=pedidosIdEmpleado
Group by empleadosIdEmpleado empleadosNombre empleadosApellidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 63
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 despueacutes saca la de Plantilla
Recomendaciones a la hora de usar las combinaciones
Combinar tablas en funcioacuten de claves principales y externas
Limite el nuacutemero de tablas de las combinaciones
Select Apellido
Oficio as
OFICIOFUNCION
salario from emp
UNION
Select Apellido
Funcion Salario from
Plantilla
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 64
SUBCONSULTAS
Es una SELECT anidada en una instruccioacuten INSERT DELETE SELECT o UPDATE
Como una tabla derivada
Select eemp_no as Numero
eApellido
from (select emp_no apellido from emp) as e
Como una expresioacuten
Select emp_no as [Numero]
Apellido
Salario
(select avg(Salario) from emp)
as Diferencia
from emp
where oficio = Empleado
Para correlacionar datos
- Expresioacuten dinaacutemica que cambia en cada fila de una consulta externa
- Es una combinacioacuten entre la subconsulta y la fila de la consulta externa
- Dividen consultas complejas con dos o maacutes consultas simples relacionadas
Subconsulta correlacionada
Select apellido oficiodept_no
from emp as e
where 20 lt
(select dept_no from dept as d
where edept_no = ddept_no
and ddnombre = Ventas)
SUBCONSULTAS
1 Mostrar el numero de empleado el apellido y la fecha de alta del empleado mas antiguo de la
empresa
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 65
SELECT emp_noapellido
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_noapellido
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 Jimeacutenez
select apellido oficio from emp where
oficio = (select oficio from emp where apellido = JIMENEZ)
4 Queremos saber el apellido oficio salario y nuacutemero 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 gt (select max (salario) from
emp where dept_no = 30)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 66
5 Mostrar el apellido la funcioacuten sala o departamento de todos los empleados que trabajen en la
empresa
select eApellido eOficio as [Cargo en Empresa] ddnombre as [Oficina]
from emp as e
inner join dept as d
on edept_no = ddept_no
union
select pApellido pfuncion snombre
from plantilla as p
inner join sala as s
on phospital_cod = shospital_cod
and psala_cod = ssala_cod
union
select dApellido despecialidad hnombre
from doctor as d
inner join hospital as h
on dhospital_cod = hhospital_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 = lsquoventasrsquo))
order by 2
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 67
8 Mostrar los empleados que tienen mejor salario que la media de los directores no incluyendo al
presidente
Select from emp where salario gt
(select avg (salario) from emp where oficio = DIRECTOR)
and oficio ltgt PRESIDENTE
9 Mostrar el apellido funcioacuten salario y coacutedigo 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 = lsquoENFERMEROrsquo or
funcion = lsquoENFERMERArsquo) and hospital_cod = (select hospital_cod from hospital where nombre =
lsquoSAN CARLOSrsquo)
Select apellido funcion salario hospital_cod from plantilla where
funcion in (ENFERMEROENFERMERA)
and hospital_cod = (select hospital_cod from hospital
where nombre = SAN CARLOS)
10 Visualizar los datos de los hospitales que tienen personal (Doctores) de cardiologiacutea
Select from hospital where hospital_cod in (select hospital_cod from doctor where
especialidad = lsquoCardiologiacutearsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 68
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 = lsquoPROVINCIALrsquo or
nombre= lsquoGENERALrsquo)
12 Mostrar el apellido de los enfermos que nacieron antes que el Sentildeor Miller
Select apellido from enfermo where Fecha_nac lt (select fecha_nac from enfermo where
apellido = lsquoMILLER Brsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 69
Simulacion de una clausula JOIN
Vamos a mostrar los oficios que estaacuten en maacutes de un departamento
Select distinct e1oficio from emp as e1
where e1oficio in(Select e2oficio from emp as e2
where e1dept_no ltgt e2dept_no)
Se debe utilizar antes una combinacioacuten que una subconsulta la combinacioacuten seriacutea asi dando los
mismos resultados
Select distinct e1Oficio from emp as e1
inner join emp as e2
on e1oficio = e2oficio
where e1dept_no ltgt e2dept_no
Estos son los dos oficios que estaacuten en
maacutes de un departamento
Subconsulta para simular una clausula HAVING
select e1apellidoe1oficio e1salario
from emp as e1
where e1salario gt
(select avg(e2salario) from emp as e2
where e1oficio = e2oficio)
Esta es la consulta utilizando el HAVING que es la que deberiacuteamos utilizar antes que una
subconsulta de simulacioacuten HAVING
SELECT e1apellidoe1oficio e1salario
FROM emp AS e1
INNER JOIN emp AS e2
ON e1oficio = e2oficio
GROUP BY e1oficio e1salarioe1apellido
HAVING e1salario gt AVG (e2salario)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 70
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 39
LOWER
Convierte a Minuacutesculas la cadena especificada
Select lower (MurcIELaGO) as [minusculas] --gtmurcielago
UPPER
Convierte a Mayuacutesculas la cadena especificada
Select upper (murcielago) as [MAYUSCULAS] --gtMURCIELAGO
RTRIM y LTRIM
Elimina los espacios que existen a la izquierda y a la derecha respectivamente
Select Rtrim ( murcieacutelago ) AS [SIN ESPACIOS] --gtmurcieacutelago
Select Ltrim ( murcieacutelago ) AS [SIN ESPACIOS] --gtmurcieacutelago
Select ltrim(rtrim( hola ))+
REPLACE
Reemplaza por una tercera expresioacuten todas las apariciones
de la segunda expresioacuten de cadena proporcionada en la primera expresioacuten de cadena
Select replace (hola que tal estasaA) --gtholA que tAl estAs
Select replace (buenos dias que tal estasuentildentildentilde) --gtbntildentildentildenos diasqntildentildentilde tal estas
SPACE
Coloca el nuacutemero de espacios que se le indiquen para entre una cadena de caracteres
Select hola+space(5)+que tal--gthola que tal
SUBSTRING
Devuelve parte de una expresioacuten de caracteres binaria de texto o de imagen
Sintaxis
SUBSTRING (Expresioacuten Comienzo Duracioacuten)
Argumentos
Expresioacuten
Es una cadena de caracteres cadena binaria texto imagen
Columna o expresioacuten que incluye una columna
No deben usarse expresiones que incluyan funciones de agregado
Start
Es un entero que especifica el punto en que comienza la subcadena
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 40
Length
Es un entero que especifica la longitud de la subcadena
(El nuacutemero de caracteres o bytes que se devuelven)
Select substring (murcielago 3 5) --gtrciel
Select substring (murcielago 3 len (murcielago)) --gtrciel
REVERSE
Devuelve invertida una expresioacuten de caraacutecter
Select reverse (hola)
REPLICATE
Repite una expresioacuten de caracteres un nuacutemero especificado de veces
Select replicate (murcielago 5)
Replicate replicate replicate replicate replicate
STUFF
Elimina el nuacutemero de caracteres especificados e insertados
Otro conjunto de caracteres en un punto de inicio indicado
Select STUFF (Murcieacutelago 2 3 ijklmn) Mijklmnielago
FUNCIONES DE SISTEMA
- APP_NAME () Devuelve el nombre de la aplicacioacuten actual
Select app_name () as [Nombre de la aplicacion]
- DATALENGTH (Expresioacuten) Devuelve un entero que es numero de bites necesarios para
representar esa expresioacuten int
Select datalength (Ninoni) as [Numero de bites]
- ISDATE (Expresioacuten) Dice si la expresioacuten es una fecha o no Devuelve 1 si la expresioacuten es
una fecha y 0 si no es una fecha
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 41
Select isdate (121001) as [Validacioacuten Fecha]
- ISNUMERIC (Expresion) Dice si la expresioacuten es un numero o no Devuelve 1 si la
expresioacuten es un nuacutemero y 0 si la expresioacuten no es nuacutemero
Select isnumeric (ddd) as [Validacion Numero]
- ISNULL (Expresioacuten ExpresionDevuelta) Si la expresioacuten es nula te devuelve la Expresioacuten
Devuelta y si no devuelve la primera Expresioacuten
Select isnull (nullNo nulo) as [Es Nulo]
- PARSENAME (bdquoNombreObjeto‟ ParteNombre)
ParteNombre es un valor de tipo Int que coge unos determinados valores del
NombreObjeto
1 Objeto
2 Propietario
3 Base de Datos
4 Servidor
Select parsename (saposeidondbopedidos1) as [Parte Expresioacuten]
Select parsename (saposeidondbopedidos 2) as [Parte Expresioacuten]
Select parsename (saposeidondbopedidos3) as [Parte Expresioacuten]
Select parsename ( saposeidondbopedidos 4) as [Parte Expresioacuten]
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 42
- SYSTEM_USER Devuelve el usuario del sistema actual
Depende de la autentificacioacuten con la que te hayas conectado
Select system_user as [Usuario conectado]
- USER_NAME() Devuelve el nombre del usuario actual
Select user_name ()
- COALESCE (expresioacuten1 expresioacuten2 )
Devuelve la primera expresioacuten no NULL
Si todos son NULL devuelve NULL
Select coalesce (PrecioUnidad Cantidad) from [detalles de Pedidos] Si el PrecioUnidad es nulo
devolveraacute la Cantidad y si los dos son nulos devolveraacute un campo Null
PROCEDIMIENTOS PARA AGRUPAR Y RESUMIR DATOS
En el examen de certificacioacuten 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 usaraacute la base de datos indicada Ejemplo Ponemos
en el analizador de consultas lo siguiente
Use Northwind
Select from [Order Details]
[Order Details]
Esta tabla perteneciente a la Northwind se encarga de manejar los pedidos
Order Id Nordm de Pedido
Producto Id Nordm de Producto
Ambos campos son Primary Key con lo que no puede haber una combinacioacuten de ambos campos que sea
igual
OrderId ProductId
1 A
1 B
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 43
1 C
2 A
3 C
Es decir en este caso no podriacutea existir una nueva combinacioacuten ldquo1 Ardquo o ldquo2 Ardquo
Quantity Es la cantidad del producto del pedido
ROLLUP
Se usa para presentar resuacutemenes de datos A de usarse junto con la clausula group by lo que hace es
realizar un resumen de los campos incluidos en el rollup
Ejemplo 63
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
Group by ProductID OrderID
with Rollup
Order by ProductID OrderID
Este ejemplo suma todas las cantidades y mediante
rollup muestra una fila con la suma de todas las
cantidades de cada producto y ademaacutes otra fila con la
suma de todas las cantidades de todos los productos El
resultado de este ejemplo seriacutea el que muestra la
imagen
Ejemplo 64
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
where orderid lt 10250
Group by ProductID OrderID
with Rollup
Order by ProductID OrderID
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 44
CUBE
Al igual que Rollup realiza resuacutemenes de campos agrupados Pero en este caso muestra un resumen con
cada combinacioacuten posible de los campos agrupados
Ejemplo 65
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
where orderid lt 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 combinacioacuten posible entre el
productid y el orderid
GROUPING
Indica si el resultado de un campo es el que hay en la propia tabla o se ha introducido mediante una
claacuteusula de resumen es decir para saber por ejemplo si un ldquoNullrdquo 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 lt 10250 Group by ProductID
OrderID with Cube Order by ProductID OrderID
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 45
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
Ponieacutendole un alias al
grouping saldriacutea el nombre
de columna que le
indiquemos
COMPUTE
Realiza un resumen en una columna aparte con el resultado de la funcioacuten de agregado indicada Su
formato seriacutea Compute funcioacuten(campo) No se puede utilizar en aplicaciones cliente servidor es una
clausula meramente informativa Tampoco se le pueden poner alias a los resuacutemenes
Ejemplo 67
Select Productid Orderid Quantity From [Order Details] order by ProductID Orderid compute
Sum(quantity)
Vemos que muestra la
columna con la suma
total de todas las
cantidades
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 46
Ejercicios de ROLLUP GROUPING y CUBE
Ejemplo 68
Realizar una consulta que resuma la cantidad de artiacuteculos pedidos por cada iacutendice de producto y
nuacutemero de pedido Realizando un caacutelculo acumulativo
select productid as [PRODUCTO] orderid as [Nordm PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] group by productid orderid with rollup order by productid orderid
PRODUCTO Nordm 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
hellip
Ejemplo 69
Modificacioacuten al ejercicio anterior Realizar el mismo resumen pero uacutenicamente para el producto
cuyo id es 50
select productid as [PRODUCTO] orderid as [Nordm PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] where productid = 50 group by productid orderid with rollup order by productid ordered
PRODUCTO Nordm 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
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 47
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 modificacioacuten 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 [Nordm PEDIDO] grouping(orderid) as [GRUPO PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] where productid = 50 group by Productidorderid with cube order by productidorderid
PRODUCTO GRUPO PRODUCTO Nordm PEDIDO GRUPO PEDIDO SUMA TOTAL
----------- -------------- ----------- ------------ -----------
NULL 1 NULL 1 235
NULL 1 10350 0 15
NULL 1 10383 0 15
NULL 1 10429 0 40
NULL 1 10465 0 25
NULL 1 10637 0 25
NULL 1 10729 0 40
NULL 1 10751 0 20
NULL 1 10920 0 24
NULL 1 10948 0 9
NULL 1 11072 0 22
50 0 NULL 1 235
50 0 10350 0 15
50 0 10383 0 15
50 0 10429 0 40
50 0 10465 0 25
50 0 10637 0 25
50 0 10729 0 40
50 0 10751 0 20
50 0 10920 0 24
50 0 10948 0 9
50 0 11072 0 22
(22 filas afectadas)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 48
Obtencioacuten de resuacutemenes 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 maacutes columnas y
luego efectuar alguna operacioacuten de resumen sobre cada grupo asiacute generado
La diferencia con GROUP BY es que permite mostrar informacioacuten mas detallada de cada grupo
Ejemplo 71
Lista de pedidos que muestre por coacutedigo de pedido la cantidad de productos vendidos por cada uno
de ellos
select Idpedidoidproductopreciounidadcantidad[Sub Total]=sum(PreciounidadCantidad) from
[detalles de pedidos] group by Idpedidoidproductopreciounidadcantidad order by IdPedido compute
sum(Cantidad) by IdPedido
EJERCICIOS CON COMPUTE
Ejemplo 72
Generar un resumen de subtotales en una consulta que devuelva el nuacutemero de pedido la cantidad
pedida para todos los orderid 11070
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 49
Select Orderid as [Nordm PEDIDO] Quantity AS [CANTIDAD] From [Order Details] where orderid gt= 11070 order by Orderid compute Sum(quantity) by orderid compute sum(quantity)
Nordm PEDIDO CANTIDAD
----------- --------
11070 40
11070 20
11070 30
11070 20
sum
===========
110
sum
===========
110
(6 filas afectadas)
Ejemplo 73
Generar un resumen con calculo de subtotales similar al anterior pero para los orderid 11075 y
11076
Select Orderid as [Nordm PEDIDO] Quantity as [CANTIDAD] From [Order Details] where orderid = 11075 or orderid = 11076 order by Orderid compute Sum(quantity) by ordered Nordm PEDIDO CANTIDAD ----------- -------- 11075 10 11075 30 11075 2 sum =========== 42 Nordm PEDIDO CANTIDAD ----------- -------- 11076 20 11076 20 11076 10
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 50
sum =========== 50 (8 filas afectadas)
Ejemplo 74
Modificacioacuten al ejercicio anterior Agregar la cantidad total y la cantidad promedio al final del
informe
Select Orderid as [Nordm 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)
Nordm PEDIDO CANTIDAD
----------- --------
11075 10
11075 30
11075 2
sum
===========
42
Nordm PEDIDO CANTIDAD
----------- --------
11076 20
11076 20
11076 10
sum
===========
50
sum
===========
92
avg
===========
15
(10 filas afectadas)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 51
Ejemplo 75
Seleccionar de forma agrupada por tipo todos los tipos la suma de los precios y la suma del
anticipo de la tabla tiacutetulos
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 199900 50000000
business 119500 50000000
business 29900 101250000
business 199900 50000000
sum
=====================
549200
avg
=====================
62812500
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
mod_cook 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
avg
=====================
75000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
popular_comp 229500 70000000
popular_comp 200000 80000000
popular_comp NULL NULL
sum
=====================
429500
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 52
avg
=====================
75000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
psychology 215900 70000000
psychology 109500 22750000
psychology 70000 60000000
psychology 199900 20000000
psychology 79900 40000000
sum
=====================
675200
avg
=====================
42550000
(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 ademaacutes 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 199900 50000000
business 119500 50000000
business 29900 101250000
business 199900 50000000
sum
=====================
549200
sum
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 53
=====================
251250000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
mod_cook 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
popular_comp 229500 70000000
popular_comp 200000 80000000
popular_comp NULL NULL
sum
=====================
429500
sum
=====================
150000000
(30 filas afectadas)
Ejemplo 77
Generar un informe que muestre la suma de los precios de los libros de psicologiacutea 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 109500
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 54
psychology 0736 70000
psychology 0736 199900
psychology 0736 79900
sum
=====================
459300
TIPO CODIGO EDITOR PRECIO
------------ ------------- ---------------------
psychology 0877 215900
sum
=====================
215900
(7 filas afectadas)
Ejemplo 78
Generar un informe que obtenga la suma de los precios de todos los libros de psicologiacutea asiacute como la
suma de los precios de los libros de psicologiacutea 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 109500
psychology 0736 70000
psychology 0736 199900
psychology 0736 79900
sum
=====================
459300
TIPO CODIGO EDITOR PRECIO
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 55
------------ ------------- ---------------------
psychology 0877 215900
sum
=====================
215900
sum
=====================
675200
(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 199900 0000
mod_cook 0877 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO CODIGO EDITOR PRECIO ANTICIPO
------------ ------------- --------------------- ---------------------
trad_cook 0877 119500 40000000
trad_cook 0877 209500 70000000
trad_cook 0877 149900 80000000
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 56
sum
=====================
478900
sum
=====================
190000000
(9 filas afectadas)
Ejemplo 80
Generar un informe que muestre todos los tiacutetulos precio y anticipo de aquellos tiacutetulos que tengan
un precio superior a 20 doacutelares Ofreceraacute tambieacuten la suma total del precio y del anticipo
Select title as [TITULO] price as [PRECIO] advance as [ANTICIPO] From titles where price gt 20 order by title compute sum(price) compute sum(advance)
TITULO PRECIO ANTICIPO
-------------------------------------------------------------------------------- --------------------- -------------
--------
But Is It User Friendly 229500 70000000
Computer Phobic AND Non-Phobic Individuals Behavior Variations 215900
70000000
Onions Leeks and Garlic Cooking Secrets of the Mediterranean 209500
70000000
sum
=====================
654900
sum
=====================
210000000
(5 filas afectadas)
Ejemplo 81
Generar un informe que muestre el precio el tipo y el nuacutemero de editor de la tabla titles de todos
aquellas obras que pertenezcan la categoriacutea de ldquobusinessrdquo Ademaacutes apareceraacute la suma total de
precios y el maacuteximo pub_id de esta seleccioacuten
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 57
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 29900 0736
business 199900 1389
business 199900 1389
business 119500 1389
sum
=====================
549200
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 Mostraraacute la suma de los precios y los anticipos por tipo y luego calcularaacute 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 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
trad_cook 209500 70000000
trad_cook 119500 40000000
trad_cook 149900 80000000
sum
=====================
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 58
478900
sum
=====================
190000000
sum
=====================
708700
sum
=====================
340000000
(11 filas afectadas)
Eliminacioacuten 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 iquestA que precio se ah vendido los productos
Select IdProducto Preciounidad from [Detalles de pedidos] order by IdProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 59
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 mayoriacutea de las consultas que se hacen en una base de datos requiere que se lean datos procedentes
de dos oacute maacutes tablas
INNER JOIN- son las filas que satisfacen la condicioacuten de la combinacioacuten
En la siguiente sentencia SQL enlaza 2 tablas la tabla clientes y la tabla pedidos en esta ejemplo me
muestra los campos nombre compantildeiacutea y el campo idpedido
La uacutenica condicioacuten es que las 2 tablas tengan un campo en comuacuten
Ejemplo 84
select clientesNombreCompantildeiacuteapedidosidpedido from clientes inner join pedidos on
clientesidcliente=pedidosidcliente
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 60
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 pedidosIdPedido pedidosIdCliente 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 pedidosIdPedido pedidosIdCliente order
by pedidos IdPedido
CROSS JOIN
Un Cross Join es la consulta correlacionada que combine cada una de las filas de una de las tablas con
todas las filas de la otra tabla
No es necesario que exista una columna en comuacuten para ejecutar el Cross Join
Ejemplo 86
La siguiente consulta combina cada una de las filas de la tabla categoriacuteas con cada una de las filas de la
tabla productos
select productosNombreProductocategoriasNombrecategoria from productos cross join categorias
order by productosNombreProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 61
Ejercicios de consultas Muacuteltiples
Ejemplo 87
Mostrar el pedidos completo con el id=10248
Select pedidosIdPedido pedidosIdCliente
Total=sum ([detalles de pedidos]Preciounidad[detalles de pedidos]Cantidad)
From [detalles de pedidos] inner join pedidos on
[Detalles de pedidos]IdPedido=pedidosIdPedido where pedidosIdPedido=10248
Group by pedidosIdPedido pedidosIdCliente
Ejemplo 88
1 Mostrar la cantidad de productos por categoriacutea
Select CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
[Total de Producto]=sum (UnidadesEnExistencia) from Categoriacuteas inner join
Productos on CategoriacuteasIdCategoriacutea=productosIdCategoriacutea
Group by CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 62
Ejemplo 89
Calcular cuantas ventas tiene cada uno de los vendedores
Select empleadosIdEmpleado empleadosNombre empleadosApellidos
[Total de ventas]=count (pedidosIdPedido) from empleados
Inner join Pedidos on empleadosIdEmpleado=pedidosIdEmpleado
Group by empleadosIdEmpleado empleadosNombre empleadosApellidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 63
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 despueacutes saca la de Plantilla
Recomendaciones a la hora de usar las combinaciones
Combinar tablas en funcioacuten de claves principales y externas
Limite el nuacutemero de tablas de las combinaciones
Select Apellido
Oficio as
OFICIOFUNCION
salario from emp
UNION
Select Apellido
Funcion Salario from
Plantilla
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 64
SUBCONSULTAS
Es una SELECT anidada en una instruccioacuten INSERT DELETE SELECT o UPDATE
Como una tabla derivada
Select eemp_no as Numero
eApellido
from (select emp_no apellido from emp) as e
Como una expresioacuten
Select emp_no as [Numero]
Apellido
Salario
(select avg(Salario) from emp)
as Diferencia
from emp
where oficio = Empleado
Para correlacionar datos
- Expresioacuten dinaacutemica que cambia en cada fila de una consulta externa
- Es una combinacioacuten entre la subconsulta y la fila de la consulta externa
- Dividen consultas complejas con dos o maacutes consultas simples relacionadas
Subconsulta correlacionada
Select apellido oficiodept_no
from emp as e
where 20 lt
(select dept_no from dept as d
where edept_no = ddept_no
and ddnombre = Ventas)
SUBCONSULTAS
1 Mostrar el numero de empleado el apellido y la fecha de alta del empleado mas antiguo de la
empresa
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 65
SELECT emp_noapellido
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_noapellido
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 Jimeacutenez
select apellido oficio from emp where
oficio = (select oficio from emp where apellido = JIMENEZ)
4 Queremos saber el apellido oficio salario y nuacutemero 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 gt (select max (salario) from
emp where dept_no = 30)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 66
5 Mostrar el apellido la funcioacuten sala o departamento de todos los empleados que trabajen en la
empresa
select eApellido eOficio as [Cargo en Empresa] ddnombre as [Oficina]
from emp as e
inner join dept as d
on edept_no = ddept_no
union
select pApellido pfuncion snombre
from plantilla as p
inner join sala as s
on phospital_cod = shospital_cod
and psala_cod = ssala_cod
union
select dApellido despecialidad hnombre
from doctor as d
inner join hospital as h
on dhospital_cod = hhospital_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 = lsquoventasrsquo))
order by 2
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 67
8 Mostrar los empleados que tienen mejor salario que la media de los directores no incluyendo al
presidente
Select from emp where salario gt
(select avg (salario) from emp where oficio = DIRECTOR)
and oficio ltgt PRESIDENTE
9 Mostrar el apellido funcioacuten salario y coacutedigo 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 = lsquoENFERMEROrsquo or
funcion = lsquoENFERMERArsquo) and hospital_cod = (select hospital_cod from hospital where nombre =
lsquoSAN CARLOSrsquo)
Select apellido funcion salario hospital_cod from plantilla where
funcion in (ENFERMEROENFERMERA)
and hospital_cod = (select hospital_cod from hospital
where nombre = SAN CARLOS)
10 Visualizar los datos de los hospitales que tienen personal (Doctores) de cardiologiacutea
Select from hospital where hospital_cod in (select hospital_cod from doctor where
especialidad = lsquoCardiologiacutearsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 68
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 = lsquoPROVINCIALrsquo or
nombre= lsquoGENERALrsquo)
12 Mostrar el apellido de los enfermos que nacieron antes que el Sentildeor Miller
Select apellido from enfermo where Fecha_nac lt (select fecha_nac from enfermo where
apellido = lsquoMILLER Brsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 69
Simulacion de una clausula JOIN
Vamos a mostrar los oficios que estaacuten en maacutes de un departamento
Select distinct e1oficio from emp as e1
where e1oficio in(Select e2oficio from emp as e2
where e1dept_no ltgt e2dept_no)
Se debe utilizar antes una combinacioacuten que una subconsulta la combinacioacuten seriacutea asi dando los
mismos resultados
Select distinct e1Oficio from emp as e1
inner join emp as e2
on e1oficio = e2oficio
where e1dept_no ltgt e2dept_no
Estos son los dos oficios que estaacuten en
maacutes de un departamento
Subconsulta para simular una clausula HAVING
select e1apellidoe1oficio e1salario
from emp as e1
where e1salario gt
(select avg(e2salario) from emp as e2
where e1oficio = e2oficio)
Esta es la consulta utilizando el HAVING que es la que deberiacuteamos utilizar antes que una
subconsulta de simulacioacuten HAVING
SELECT e1apellidoe1oficio e1salario
FROM emp AS e1
INNER JOIN emp AS e2
ON e1oficio = e2oficio
GROUP BY e1oficio e1salarioe1apellido
HAVING e1salario gt AVG (e2salario)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 70
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 40
Length
Es un entero que especifica la longitud de la subcadena
(El nuacutemero de caracteres o bytes que se devuelven)
Select substring (murcielago 3 5) --gtrciel
Select substring (murcielago 3 len (murcielago)) --gtrciel
REVERSE
Devuelve invertida una expresioacuten de caraacutecter
Select reverse (hola)
REPLICATE
Repite una expresioacuten de caracteres un nuacutemero especificado de veces
Select replicate (murcielago 5)
Replicate replicate replicate replicate replicate
STUFF
Elimina el nuacutemero de caracteres especificados e insertados
Otro conjunto de caracteres en un punto de inicio indicado
Select STUFF (Murcieacutelago 2 3 ijklmn) Mijklmnielago
FUNCIONES DE SISTEMA
- APP_NAME () Devuelve el nombre de la aplicacioacuten actual
Select app_name () as [Nombre de la aplicacion]
- DATALENGTH (Expresioacuten) Devuelve un entero que es numero de bites necesarios para
representar esa expresioacuten int
Select datalength (Ninoni) as [Numero de bites]
- ISDATE (Expresioacuten) Dice si la expresioacuten es una fecha o no Devuelve 1 si la expresioacuten es
una fecha y 0 si no es una fecha
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 41
Select isdate (121001) as [Validacioacuten Fecha]
- ISNUMERIC (Expresion) Dice si la expresioacuten es un numero o no Devuelve 1 si la
expresioacuten es un nuacutemero y 0 si la expresioacuten no es nuacutemero
Select isnumeric (ddd) as [Validacion Numero]
- ISNULL (Expresioacuten ExpresionDevuelta) Si la expresioacuten es nula te devuelve la Expresioacuten
Devuelta y si no devuelve la primera Expresioacuten
Select isnull (nullNo nulo) as [Es Nulo]
- PARSENAME (bdquoNombreObjeto‟ ParteNombre)
ParteNombre es un valor de tipo Int que coge unos determinados valores del
NombreObjeto
1 Objeto
2 Propietario
3 Base de Datos
4 Servidor
Select parsename (saposeidondbopedidos1) as [Parte Expresioacuten]
Select parsename (saposeidondbopedidos 2) as [Parte Expresioacuten]
Select parsename (saposeidondbopedidos3) as [Parte Expresioacuten]
Select parsename ( saposeidondbopedidos 4) as [Parte Expresioacuten]
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 42
- SYSTEM_USER Devuelve el usuario del sistema actual
Depende de la autentificacioacuten con la que te hayas conectado
Select system_user as [Usuario conectado]
- USER_NAME() Devuelve el nombre del usuario actual
Select user_name ()
- COALESCE (expresioacuten1 expresioacuten2 )
Devuelve la primera expresioacuten no NULL
Si todos son NULL devuelve NULL
Select coalesce (PrecioUnidad Cantidad) from [detalles de Pedidos] Si el PrecioUnidad es nulo
devolveraacute la Cantidad y si los dos son nulos devolveraacute un campo Null
PROCEDIMIENTOS PARA AGRUPAR Y RESUMIR DATOS
En el examen de certificacioacuten 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 usaraacute la base de datos indicada Ejemplo Ponemos
en el analizador de consultas lo siguiente
Use Northwind
Select from [Order Details]
[Order Details]
Esta tabla perteneciente a la Northwind se encarga de manejar los pedidos
Order Id Nordm de Pedido
Producto Id Nordm de Producto
Ambos campos son Primary Key con lo que no puede haber una combinacioacuten de ambos campos que sea
igual
OrderId ProductId
1 A
1 B
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 43
1 C
2 A
3 C
Es decir en este caso no podriacutea existir una nueva combinacioacuten ldquo1 Ardquo o ldquo2 Ardquo
Quantity Es la cantidad del producto del pedido
ROLLUP
Se usa para presentar resuacutemenes de datos A de usarse junto con la clausula group by lo que hace es
realizar un resumen de los campos incluidos en el rollup
Ejemplo 63
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
Group by ProductID OrderID
with Rollup
Order by ProductID OrderID
Este ejemplo suma todas las cantidades y mediante
rollup muestra una fila con la suma de todas las
cantidades de cada producto y ademaacutes otra fila con la
suma de todas las cantidades de todos los productos El
resultado de este ejemplo seriacutea el que muestra la
imagen
Ejemplo 64
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
where orderid lt 10250
Group by ProductID OrderID
with Rollup
Order by ProductID OrderID
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 44
CUBE
Al igual que Rollup realiza resuacutemenes de campos agrupados Pero en este caso muestra un resumen con
cada combinacioacuten posible de los campos agrupados
Ejemplo 65
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
where orderid lt 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 combinacioacuten posible entre el
productid y el orderid
GROUPING
Indica si el resultado de un campo es el que hay en la propia tabla o se ha introducido mediante una
claacuteusula de resumen es decir para saber por ejemplo si un ldquoNullrdquo 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 lt 10250 Group by ProductID
OrderID with Cube Order by ProductID OrderID
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 45
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
Ponieacutendole un alias al
grouping saldriacutea el nombre
de columna que le
indiquemos
COMPUTE
Realiza un resumen en una columna aparte con el resultado de la funcioacuten de agregado indicada Su
formato seriacutea Compute funcioacuten(campo) No se puede utilizar en aplicaciones cliente servidor es una
clausula meramente informativa Tampoco se le pueden poner alias a los resuacutemenes
Ejemplo 67
Select Productid Orderid Quantity From [Order Details] order by ProductID Orderid compute
Sum(quantity)
Vemos que muestra la
columna con la suma
total de todas las
cantidades
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 46
Ejercicios de ROLLUP GROUPING y CUBE
Ejemplo 68
Realizar una consulta que resuma la cantidad de artiacuteculos pedidos por cada iacutendice de producto y
nuacutemero de pedido Realizando un caacutelculo acumulativo
select productid as [PRODUCTO] orderid as [Nordm PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] group by productid orderid with rollup order by productid orderid
PRODUCTO Nordm 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
hellip
Ejemplo 69
Modificacioacuten al ejercicio anterior Realizar el mismo resumen pero uacutenicamente para el producto
cuyo id es 50
select productid as [PRODUCTO] orderid as [Nordm PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] where productid = 50 group by productid orderid with rollup order by productid ordered
PRODUCTO Nordm 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
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 47
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 modificacioacuten 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 [Nordm PEDIDO] grouping(orderid) as [GRUPO PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] where productid = 50 group by Productidorderid with cube order by productidorderid
PRODUCTO GRUPO PRODUCTO Nordm PEDIDO GRUPO PEDIDO SUMA TOTAL
----------- -------------- ----------- ------------ -----------
NULL 1 NULL 1 235
NULL 1 10350 0 15
NULL 1 10383 0 15
NULL 1 10429 0 40
NULL 1 10465 0 25
NULL 1 10637 0 25
NULL 1 10729 0 40
NULL 1 10751 0 20
NULL 1 10920 0 24
NULL 1 10948 0 9
NULL 1 11072 0 22
50 0 NULL 1 235
50 0 10350 0 15
50 0 10383 0 15
50 0 10429 0 40
50 0 10465 0 25
50 0 10637 0 25
50 0 10729 0 40
50 0 10751 0 20
50 0 10920 0 24
50 0 10948 0 9
50 0 11072 0 22
(22 filas afectadas)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 48
Obtencioacuten de resuacutemenes 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 maacutes columnas y
luego efectuar alguna operacioacuten de resumen sobre cada grupo asiacute generado
La diferencia con GROUP BY es que permite mostrar informacioacuten mas detallada de cada grupo
Ejemplo 71
Lista de pedidos que muestre por coacutedigo de pedido la cantidad de productos vendidos por cada uno
de ellos
select Idpedidoidproductopreciounidadcantidad[Sub Total]=sum(PreciounidadCantidad) from
[detalles de pedidos] group by Idpedidoidproductopreciounidadcantidad order by IdPedido compute
sum(Cantidad) by IdPedido
EJERCICIOS CON COMPUTE
Ejemplo 72
Generar un resumen de subtotales en una consulta que devuelva el nuacutemero de pedido la cantidad
pedida para todos los orderid 11070
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 49
Select Orderid as [Nordm PEDIDO] Quantity AS [CANTIDAD] From [Order Details] where orderid gt= 11070 order by Orderid compute Sum(quantity) by orderid compute sum(quantity)
Nordm PEDIDO CANTIDAD
----------- --------
11070 40
11070 20
11070 30
11070 20
sum
===========
110
sum
===========
110
(6 filas afectadas)
Ejemplo 73
Generar un resumen con calculo de subtotales similar al anterior pero para los orderid 11075 y
11076
Select Orderid as [Nordm PEDIDO] Quantity as [CANTIDAD] From [Order Details] where orderid = 11075 or orderid = 11076 order by Orderid compute Sum(quantity) by ordered Nordm PEDIDO CANTIDAD ----------- -------- 11075 10 11075 30 11075 2 sum =========== 42 Nordm PEDIDO CANTIDAD ----------- -------- 11076 20 11076 20 11076 10
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 50
sum =========== 50 (8 filas afectadas)
Ejemplo 74
Modificacioacuten al ejercicio anterior Agregar la cantidad total y la cantidad promedio al final del
informe
Select Orderid as [Nordm 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)
Nordm PEDIDO CANTIDAD
----------- --------
11075 10
11075 30
11075 2
sum
===========
42
Nordm PEDIDO CANTIDAD
----------- --------
11076 20
11076 20
11076 10
sum
===========
50
sum
===========
92
avg
===========
15
(10 filas afectadas)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 51
Ejemplo 75
Seleccionar de forma agrupada por tipo todos los tipos la suma de los precios y la suma del
anticipo de la tabla tiacutetulos
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 199900 50000000
business 119500 50000000
business 29900 101250000
business 199900 50000000
sum
=====================
549200
avg
=====================
62812500
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
mod_cook 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
avg
=====================
75000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
popular_comp 229500 70000000
popular_comp 200000 80000000
popular_comp NULL NULL
sum
=====================
429500
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 52
avg
=====================
75000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
psychology 215900 70000000
psychology 109500 22750000
psychology 70000 60000000
psychology 199900 20000000
psychology 79900 40000000
sum
=====================
675200
avg
=====================
42550000
(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 ademaacutes 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 199900 50000000
business 119500 50000000
business 29900 101250000
business 199900 50000000
sum
=====================
549200
sum
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 53
=====================
251250000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
mod_cook 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
popular_comp 229500 70000000
popular_comp 200000 80000000
popular_comp NULL NULL
sum
=====================
429500
sum
=====================
150000000
(30 filas afectadas)
Ejemplo 77
Generar un informe que muestre la suma de los precios de los libros de psicologiacutea 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 109500
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 54
psychology 0736 70000
psychology 0736 199900
psychology 0736 79900
sum
=====================
459300
TIPO CODIGO EDITOR PRECIO
------------ ------------- ---------------------
psychology 0877 215900
sum
=====================
215900
(7 filas afectadas)
Ejemplo 78
Generar un informe que obtenga la suma de los precios de todos los libros de psicologiacutea asiacute como la
suma de los precios de los libros de psicologiacutea 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 109500
psychology 0736 70000
psychology 0736 199900
psychology 0736 79900
sum
=====================
459300
TIPO CODIGO EDITOR PRECIO
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 55
------------ ------------- ---------------------
psychology 0877 215900
sum
=====================
215900
sum
=====================
675200
(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 199900 0000
mod_cook 0877 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO CODIGO EDITOR PRECIO ANTICIPO
------------ ------------- --------------------- ---------------------
trad_cook 0877 119500 40000000
trad_cook 0877 209500 70000000
trad_cook 0877 149900 80000000
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 56
sum
=====================
478900
sum
=====================
190000000
(9 filas afectadas)
Ejemplo 80
Generar un informe que muestre todos los tiacutetulos precio y anticipo de aquellos tiacutetulos que tengan
un precio superior a 20 doacutelares Ofreceraacute tambieacuten la suma total del precio y del anticipo
Select title as [TITULO] price as [PRECIO] advance as [ANTICIPO] From titles where price gt 20 order by title compute sum(price) compute sum(advance)
TITULO PRECIO ANTICIPO
-------------------------------------------------------------------------------- --------------------- -------------
--------
But Is It User Friendly 229500 70000000
Computer Phobic AND Non-Phobic Individuals Behavior Variations 215900
70000000
Onions Leeks and Garlic Cooking Secrets of the Mediterranean 209500
70000000
sum
=====================
654900
sum
=====================
210000000
(5 filas afectadas)
Ejemplo 81
Generar un informe que muestre el precio el tipo y el nuacutemero de editor de la tabla titles de todos
aquellas obras que pertenezcan la categoriacutea de ldquobusinessrdquo Ademaacutes apareceraacute la suma total de
precios y el maacuteximo pub_id de esta seleccioacuten
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 57
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 29900 0736
business 199900 1389
business 199900 1389
business 119500 1389
sum
=====================
549200
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 Mostraraacute la suma de los precios y los anticipos por tipo y luego calcularaacute 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 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
trad_cook 209500 70000000
trad_cook 119500 40000000
trad_cook 149900 80000000
sum
=====================
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 58
478900
sum
=====================
190000000
sum
=====================
708700
sum
=====================
340000000
(11 filas afectadas)
Eliminacioacuten 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 iquestA que precio se ah vendido los productos
Select IdProducto Preciounidad from [Detalles de pedidos] order by IdProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 59
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 mayoriacutea de las consultas que se hacen en una base de datos requiere que se lean datos procedentes
de dos oacute maacutes tablas
INNER JOIN- son las filas que satisfacen la condicioacuten de la combinacioacuten
En la siguiente sentencia SQL enlaza 2 tablas la tabla clientes y la tabla pedidos en esta ejemplo me
muestra los campos nombre compantildeiacutea y el campo idpedido
La uacutenica condicioacuten es que las 2 tablas tengan un campo en comuacuten
Ejemplo 84
select clientesNombreCompantildeiacuteapedidosidpedido from clientes inner join pedidos on
clientesidcliente=pedidosidcliente
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 60
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 pedidosIdPedido pedidosIdCliente 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 pedidosIdPedido pedidosIdCliente order
by pedidos IdPedido
CROSS JOIN
Un Cross Join es la consulta correlacionada que combine cada una de las filas de una de las tablas con
todas las filas de la otra tabla
No es necesario que exista una columna en comuacuten para ejecutar el Cross Join
Ejemplo 86
La siguiente consulta combina cada una de las filas de la tabla categoriacuteas con cada una de las filas de la
tabla productos
select productosNombreProductocategoriasNombrecategoria from productos cross join categorias
order by productosNombreProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 61
Ejercicios de consultas Muacuteltiples
Ejemplo 87
Mostrar el pedidos completo con el id=10248
Select pedidosIdPedido pedidosIdCliente
Total=sum ([detalles de pedidos]Preciounidad[detalles de pedidos]Cantidad)
From [detalles de pedidos] inner join pedidos on
[Detalles de pedidos]IdPedido=pedidosIdPedido where pedidosIdPedido=10248
Group by pedidosIdPedido pedidosIdCliente
Ejemplo 88
1 Mostrar la cantidad de productos por categoriacutea
Select CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
[Total de Producto]=sum (UnidadesEnExistencia) from Categoriacuteas inner join
Productos on CategoriacuteasIdCategoriacutea=productosIdCategoriacutea
Group by CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 62
Ejemplo 89
Calcular cuantas ventas tiene cada uno de los vendedores
Select empleadosIdEmpleado empleadosNombre empleadosApellidos
[Total de ventas]=count (pedidosIdPedido) from empleados
Inner join Pedidos on empleadosIdEmpleado=pedidosIdEmpleado
Group by empleadosIdEmpleado empleadosNombre empleadosApellidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 63
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 despueacutes saca la de Plantilla
Recomendaciones a la hora de usar las combinaciones
Combinar tablas en funcioacuten de claves principales y externas
Limite el nuacutemero de tablas de las combinaciones
Select Apellido
Oficio as
OFICIOFUNCION
salario from emp
UNION
Select Apellido
Funcion Salario from
Plantilla
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 64
SUBCONSULTAS
Es una SELECT anidada en una instruccioacuten INSERT DELETE SELECT o UPDATE
Como una tabla derivada
Select eemp_no as Numero
eApellido
from (select emp_no apellido from emp) as e
Como una expresioacuten
Select emp_no as [Numero]
Apellido
Salario
(select avg(Salario) from emp)
as Diferencia
from emp
where oficio = Empleado
Para correlacionar datos
- Expresioacuten dinaacutemica que cambia en cada fila de una consulta externa
- Es una combinacioacuten entre la subconsulta y la fila de la consulta externa
- Dividen consultas complejas con dos o maacutes consultas simples relacionadas
Subconsulta correlacionada
Select apellido oficiodept_no
from emp as e
where 20 lt
(select dept_no from dept as d
where edept_no = ddept_no
and ddnombre = Ventas)
SUBCONSULTAS
1 Mostrar el numero de empleado el apellido y la fecha de alta del empleado mas antiguo de la
empresa
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 65
SELECT emp_noapellido
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_noapellido
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 Jimeacutenez
select apellido oficio from emp where
oficio = (select oficio from emp where apellido = JIMENEZ)
4 Queremos saber el apellido oficio salario y nuacutemero 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 gt (select max (salario) from
emp where dept_no = 30)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 66
5 Mostrar el apellido la funcioacuten sala o departamento de todos los empleados que trabajen en la
empresa
select eApellido eOficio as [Cargo en Empresa] ddnombre as [Oficina]
from emp as e
inner join dept as d
on edept_no = ddept_no
union
select pApellido pfuncion snombre
from plantilla as p
inner join sala as s
on phospital_cod = shospital_cod
and psala_cod = ssala_cod
union
select dApellido despecialidad hnombre
from doctor as d
inner join hospital as h
on dhospital_cod = hhospital_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 = lsquoventasrsquo))
order by 2
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 67
8 Mostrar los empleados que tienen mejor salario que la media de los directores no incluyendo al
presidente
Select from emp where salario gt
(select avg (salario) from emp where oficio = DIRECTOR)
and oficio ltgt PRESIDENTE
9 Mostrar el apellido funcioacuten salario y coacutedigo 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 = lsquoENFERMEROrsquo or
funcion = lsquoENFERMERArsquo) and hospital_cod = (select hospital_cod from hospital where nombre =
lsquoSAN CARLOSrsquo)
Select apellido funcion salario hospital_cod from plantilla where
funcion in (ENFERMEROENFERMERA)
and hospital_cod = (select hospital_cod from hospital
where nombre = SAN CARLOS)
10 Visualizar los datos de los hospitales que tienen personal (Doctores) de cardiologiacutea
Select from hospital where hospital_cod in (select hospital_cod from doctor where
especialidad = lsquoCardiologiacutearsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 68
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 = lsquoPROVINCIALrsquo or
nombre= lsquoGENERALrsquo)
12 Mostrar el apellido de los enfermos que nacieron antes que el Sentildeor Miller
Select apellido from enfermo where Fecha_nac lt (select fecha_nac from enfermo where
apellido = lsquoMILLER Brsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 69
Simulacion de una clausula JOIN
Vamos a mostrar los oficios que estaacuten en maacutes de un departamento
Select distinct e1oficio from emp as e1
where e1oficio in(Select e2oficio from emp as e2
where e1dept_no ltgt e2dept_no)
Se debe utilizar antes una combinacioacuten que una subconsulta la combinacioacuten seriacutea asi dando los
mismos resultados
Select distinct e1Oficio from emp as e1
inner join emp as e2
on e1oficio = e2oficio
where e1dept_no ltgt e2dept_no
Estos son los dos oficios que estaacuten en
maacutes de un departamento
Subconsulta para simular una clausula HAVING
select e1apellidoe1oficio e1salario
from emp as e1
where e1salario gt
(select avg(e2salario) from emp as e2
where e1oficio = e2oficio)
Esta es la consulta utilizando el HAVING que es la que deberiacuteamos utilizar antes que una
subconsulta de simulacioacuten HAVING
SELECT e1apellidoe1oficio e1salario
FROM emp AS e1
INNER JOIN emp AS e2
ON e1oficio = e2oficio
GROUP BY e1oficio e1salarioe1apellido
HAVING e1salario gt AVG (e2salario)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 70
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 41
Select isdate (121001) as [Validacioacuten Fecha]
- ISNUMERIC (Expresion) Dice si la expresioacuten es un numero o no Devuelve 1 si la
expresioacuten es un nuacutemero y 0 si la expresioacuten no es nuacutemero
Select isnumeric (ddd) as [Validacion Numero]
- ISNULL (Expresioacuten ExpresionDevuelta) Si la expresioacuten es nula te devuelve la Expresioacuten
Devuelta y si no devuelve la primera Expresioacuten
Select isnull (nullNo nulo) as [Es Nulo]
- PARSENAME (bdquoNombreObjeto‟ ParteNombre)
ParteNombre es un valor de tipo Int que coge unos determinados valores del
NombreObjeto
1 Objeto
2 Propietario
3 Base de Datos
4 Servidor
Select parsename (saposeidondbopedidos1) as [Parte Expresioacuten]
Select parsename (saposeidondbopedidos 2) as [Parte Expresioacuten]
Select parsename (saposeidondbopedidos3) as [Parte Expresioacuten]
Select parsename ( saposeidondbopedidos 4) as [Parte Expresioacuten]
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 42
- SYSTEM_USER Devuelve el usuario del sistema actual
Depende de la autentificacioacuten con la que te hayas conectado
Select system_user as [Usuario conectado]
- USER_NAME() Devuelve el nombre del usuario actual
Select user_name ()
- COALESCE (expresioacuten1 expresioacuten2 )
Devuelve la primera expresioacuten no NULL
Si todos son NULL devuelve NULL
Select coalesce (PrecioUnidad Cantidad) from [detalles de Pedidos] Si el PrecioUnidad es nulo
devolveraacute la Cantidad y si los dos son nulos devolveraacute un campo Null
PROCEDIMIENTOS PARA AGRUPAR Y RESUMIR DATOS
En el examen de certificacioacuten 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 usaraacute la base de datos indicada Ejemplo Ponemos
en el analizador de consultas lo siguiente
Use Northwind
Select from [Order Details]
[Order Details]
Esta tabla perteneciente a la Northwind se encarga de manejar los pedidos
Order Id Nordm de Pedido
Producto Id Nordm de Producto
Ambos campos son Primary Key con lo que no puede haber una combinacioacuten de ambos campos que sea
igual
OrderId ProductId
1 A
1 B
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 43
1 C
2 A
3 C
Es decir en este caso no podriacutea existir una nueva combinacioacuten ldquo1 Ardquo o ldquo2 Ardquo
Quantity Es la cantidad del producto del pedido
ROLLUP
Se usa para presentar resuacutemenes de datos A de usarse junto con la clausula group by lo que hace es
realizar un resumen de los campos incluidos en el rollup
Ejemplo 63
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
Group by ProductID OrderID
with Rollup
Order by ProductID OrderID
Este ejemplo suma todas las cantidades y mediante
rollup muestra una fila con la suma de todas las
cantidades de cada producto y ademaacutes otra fila con la
suma de todas las cantidades de todos los productos El
resultado de este ejemplo seriacutea el que muestra la
imagen
Ejemplo 64
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
where orderid lt 10250
Group by ProductID OrderID
with Rollup
Order by ProductID OrderID
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 44
CUBE
Al igual que Rollup realiza resuacutemenes de campos agrupados Pero en este caso muestra un resumen con
cada combinacioacuten posible de los campos agrupados
Ejemplo 65
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
where orderid lt 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 combinacioacuten posible entre el
productid y el orderid
GROUPING
Indica si el resultado de un campo es el que hay en la propia tabla o se ha introducido mediante una
claacuteusula de resumen es decir para saber por ejemplo si un ldquoNullrdquo 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 lt 10250 Group by ProductID
OrderID with Cube Order by ProductID OrderID
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 45
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
Ponieacutendole un alias al
grouping saldriacutea el nombre
de columna que le
indiquemos
COMPUTE
Realiza un resumen en una columna aparte con el resultado de la funcioacuten de agregado indicada Su
formato seriacutea Compute funcioacuten(campo) No se puede utilizar en aplicaciones cliente servidor es una
clausula meramente informativa Tampoco se le pueden poner alias a los resuacutemenes
Ejemplo 67
Select Productid Orderid Quantity From [Order Details] order by ProductID Orderid compute
Sum(quantity)
Vemos que muestra la
columna con la suma
total de todas las
cantidades
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 46
Ejercicios de ROLLUP GROUPING y CUBE
Ejemplo 68
Realizar una consulta que resuma la cantidad de artiacuteculos pedidos por cada iacutendice de producto y
nuacutemero de pedido Realizando un caacutelculo acumulativo
select productid as [PRODUCTO] orderid as [Nordm PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] group by productid orderid with rollup order by productid orderid
PRODUCTO Nordm 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
hellip
Ejemplo 69
Modificacioacuten al ejercicio anterior Realizar el mismo resumen pero uacutenicamente para el producto
cuyo id es 50
select productid as [PRODUCTO] orderid as [Nordm PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] where productid = 50 group by productid orderid with rollup order by productid ordered
PRODUCTO Nordm 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
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 47
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 modificacioacuten 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 [Nordm PEDIDO] grouping(orderid) as [GRUPO PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] where productid = 50 group by Productidorderid with cube order by productidorderid
PRODUCTO GRUPO PRODUCTO Nordm PEDIDO GRUPO PEDIDO SUMA TOTAL
----------- -------------- ----------- ------------ -----------
NULL 1 NULL 1 235
NULL 1 10350 0 15
NULL 1 10383 0 15
NULL 1 10429 0 40
NULL 1 10465 0 25
NULL 1 10637 0 25
NULL 1 10729 0 40
NULL 1 10751 0 20
NULL 1 10920 0 24
NULL 1 10948 0 9
NULL 1 11072 0 22
50 0 NULL 1 235
50 0 10350 0 15
50 0 10383 0 15
50 0 10429 0 40
50 0 10465 0 25
50 0 10637 0 25
50 0 10729 0 40
50 0 10751 0 20
50 0 10920 0 24
50 0 10948 0 9
50 0 11072 0 22
(22 filas afectadas)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 48
Obtencioacuten de resuacutemenes 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 maacutes columnas y
luego efectuar alguna operacioacuten de resumen sobre cada grupo asiacute generado
La diferencia con GROUP BY es que permite mostrar informacioacuten mas detallada de cada grupo
Ejemplo 71
Lista de pedidos que muestre por coacutedigo de pedido la cantidad de productos vendidos por cada uno
de ellos
select Idpedidoidproductopreciounidadcantidad[Sub Total]=sum(PreciounidadCantidad) from
[detalles de pedidos] group by Idpedidoidproductopreciounidadcantidad order by IdPedido compute
sum(Cantidad) by IdPedido
EJERCICIOS CON COMPUTE
Ejemplo 72
Generar un resumen de subtotales en una consulta que devuelva el nuacutemero de pedido la cantidad
pedida para todos los orderid 11070
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 49
Select Orderid as [Nordm PEDIDO] Quantity AS [CANTIDAD] From [Order Details] where orderid gt= 11070 order by Orderid compute Sum(quantity) by orderid compute sum(quantity)
Nordm PEDIDO CANTIDAD
----------- --------
11070 40
11070 20
11070 30
11070 20
sum
===========
110
sum
===========
110
(6 filas afectadas)
Ejemplo 73
Generar un resumen con calculo de subtotales similar al anterior pero para los orderid 11075 y
11076
Select Orderid as [Nordm PEDIDO] Quantity as [CANTIDAD] From [Order Details] where orderid = 11075 or orderid = 11076 order by Orderid compute Sum(quantity) by ordered Nordm PEDIDO CANTIDAD ----------- -------- 11075 10 11075 30 11075 2 sum =========== 42 Nordm PEDIDO CANTIDAD ----------- -------- 11076 20 11076 20 11076 10
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 50
sum =========== 50 (8 filas afectadas)
Ejemplo 74
Modificacioacuten al ejercicio anterior Agregar la cantidad total y la cantidad promedio al final del
informe
Select Orderid as [Nordm 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)
Nordm PEDIDO CANTIDAD
----------- --------
11075 10
11075 30
11075 2
sum
===========
42
Nordm PEDIDO CANTIDAD
----------- --------
11076 20
11076 20
11076 10
sum
===========
50
sum
===========
92
avg
===========
15
(10 filas afectadas)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 51
Ejemplo 75
Seleccionar de forma agrupada por tipo todos los tipos la suma de los precios y la suma del
anticipo de la tabla tiacutetulos
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 199900 50000000
business 119500 50000000
business 29900 101250000
business 199900 50000000
sum
=====================
549200
avg
=====================
62812500
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
mod_cook 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
avg
=====================
75000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
popular_comp 229500 70000000
popular_comp 200000 80000000
popular_comp NULL NULL
sum
=====================
429500
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 52
avg
=====================
75000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
psychology 215900 70000000
psychology 109500 22750000
psychology 70000 60000000
psychology 199900 20000000
psychology 79900 40000000
sum
=====================
675200
avg
=====================
42550000
(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 ademaacutes 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 199900 50000000
business 119500 50000000
business 29900 101250000
business 199900 50000000
sum
=====================
549200
sum
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 53
=====================
251250000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
mod_cook 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
popular_comp 229500 70000000
popular_comp 200000 80000000
popular_comp NULL NULL
sum
=====================
429500
sum
=====================
150000000
(30 filas afectadas)
Ejemplo 77
Generar un informe que muestre la suma de los precios de los libros de psicologiacutea 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 109500
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 54
psychology 0736 70000
psychology 0736 199900
psychology 0736 79900
sum
=====================
459300
TIPO CODIGO EDITOR PRECIO
------------ ------------- ---------------------
psychology 0877 215900
sum
=====================
215900
(7 filas afectadas)
Ejemplo 78
Generar un informe que obtenga la suma de los precios de todos los libros de psicologiacutea asiacute como la
suma de los precios de los libros de psicologiacutea 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 109500
psychology 0736 70000
psychology 0736 199900
psychology 0736 79900
sum
=====================
459300
TIPO CODIGO EDITOR PRECIO
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 55
------------ ------------- ---------------------
psychology 0877 215900
sum
=====================
215900
sum
=====================
675200
(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 199900 0000
mod_cook 0877 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO CODIGO EDITOR PRECIO ANTICIPO
------------ ------------- --------------------- ---------------------
trad_cook 0877 119500 40000000
trad_cook 0877 209500 70000000
trad_cook 0877 149900 80000000
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 56
sum
=====================
478900
sum
=====================
190000000
(9 filas afectadas)
Ejemplo 80
Generar un informe que muestre todos los tiacutetulos precio y anticipo de aquellos tiacutetulos que tengan
un precio superior a 20 doacutelares Ofreceraacute tambieacuten la suma total del precio y del anticipo
Select title as [TITULO] price as [PRECIO] advance as [ANTICIPO] From titles where price gt 20 order by title compute sum(price) compute sum(advance)
TITULO PRECIO ANTICIPO
-------------------------------------------------------------------------------- --------------------- -------------
--------
But Is It User Friendly 229500 70000000
Computer Phobic AND Non-Phobic Individuals Behavior Variations 215900
70000000
Onions Leeks and Garlic Cooking Secrets of the Mediterranean 209500
70000000
sum
=====================
654900
sum
=====================
210000000
(5 filas afectadas)
Ejemplo 81
Generar un informe que muestre el precio el tipo y el nuacutemero de editor de la tabla titles de todos
aquellas obras que pertenezcan la categoriacutea de ldquobusinessrdquo Ademaacutes apareceraacute la suma total de
precios y el maacuteximo pub_id de esta seleccioacuten
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 57
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 29900 0736
business 199900 1389
business 199900 1389
business 119500 1389
sum
=====================
549200
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 Mostraraacute la suma de los precios y los anticipos por tipo y luego calcularaacute 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 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
trad_cook 209500 70000000
trad_cook 119500 40000000
trad_cook 149900 80000000
sum
=====================
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 58
478900
sum
=====================
190000000
sum
=====================
708700
sum
=====================
340000000
(11 filas afectadas)
Eliminacioacuten 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 iquestA que precio se ah vendido los productos
Select IdProducto Preciounidad from [Detalles de pedidos] order by IdProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 59
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 mayoriacutea de las consultas que se hacen en una base de datos requiere que se lean datos procedentes
de dos oacute maacutes tablas
INNER JOIN- son las filas que satisfacen la condicioacuten de la combinacioacuten
En la siguiente sentencia SQL enlaza 2 tablas la tabla clientes y la tabla pedidos en esta ejemplo me
muestra los campos nombre compantildeiacutea y el campo idpedido
La uacutenica condicioacuten es que las 2 tablas tengan un campo en comuacuten
Ejemplo 84
select clientesNombreCompantildeiacuteapedidosidpedido from clientes inner join pedidos on
clientesidcliente=pedidosidcliente
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 60
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 pedidosIdPedido pedidosIdCliente 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 pedidosIdPedido pedidosIdCliente order
by pedidos IdPedido
CROSS JOIN
Un Cross Join es la consulta correlacionada que combine cada una de las filas de una de las tablas con
todas las filas de la otra tabla
No es necesario que exista una columna en comuacuten para ejecutar el Cross Join
Ejemplo 86
La siguiente consulta combina cada una de las filas de la tabla categoriacuteas con cada una de las filas de la
tabla productos
select productosNombreProductocategoriasNombrecategoria from productos cross join categorias
order by productosNombreProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 61
Ejercicios de consultas Muacuteltiples
Ejemplo 87
Mostrar el pedidos completo con el id=10248
Select pedidosIdPedido pedidosIdCliente
Total=sum ([detalles de pedidos]Preciounidad[detalles de pedidos]Cantidad)
From [detalles de pedidos] inner join pedidos on
[Detalles de pedidos]IdPedido=pedidosIdPedido where pedidosIdPedido=10248
Group by pedidosIdPedido pedidosIdCliente
Ejemplo 88
1 Mostrar la cantidad de productos por categoriacutea
Select CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
[Total de Producto]=sum (UnidadesEnExistencia) from Categoriacuteas inner join
Productos on CategoriacuteasIdCategoriacutea=productosIdCategoriacutea
Group by CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 62
Ejemplo 89
Calcular cuantas ventas tiene cada uno de los vendedores
Select empleadosIdEmpleado empleadosNombre empleadosApellidos
[Total de ventas]=count (pedidosIdPedido) from empleados
Inner join Pedidos on empleadosIdEmpleado=pedidosIdEmpleado
Group by empleadosIdEmpleado empleadosNombre empleadosApellidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 63
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 despueacutes saca la de Plantilla
Recomendaciones a la hora de usar las combinaciones
Combinar tablas en funcioacuten de claves principales y externas
Limite el nuacutemero de tablas de las combinaciones
Select Apellido
Oficio as
OFICIOFUNCION
salario from emp
UNION
Select Apellido
Funcion Salario from
Plantilla
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 64
SUBCONSULTAS
Es una SELECT anidada en una instruccioacuten INSERT DELETE SELECT o UPDATE
Como una tabla derivada
Select eemp_no as Numero
eApellido
from (select emp_no apellido from emp) as e
Como una expresioacuten
Select emp_no as [Numero]
Apellido
Salario
(select avg(Salario) from emp)
as Diferencia
from emp
where oficio = Empleado
Para correlacionar datos
- Expresioacuten dinaacutemica que cambia en cada fila de una consulta externa
- Es una combinacioacuten entre la subconsulta y la fila de la consulta externa
- Dividen consultas complejas con dos o maacutes consultas simples relacionadas
Subconsulta correlacionada
Select apellido oficiodept_no
from emp as e
where 20 lt
(select dept_no from dept as d
where edept_no = ddept_no
and ddnombre = Ventas)
SUBCONSULTAS
1 Mostrar el numero de empleado el apellido y la fecha de alta del empleado mas antiguo de la
empresa
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 65
SELECT emp_noapellido
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_noapellido
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 Jimeacutenez
select apellido oficio from emp where
oficio = (select oficio from emp where apellido = JIMENEZ)
4 Queremos saber el apellido oficio salario y nuacutemero 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 gt (select max (salario) from
emp where dept_no = 30)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 66
5 Mostrar el apellido la funcioacuten sala o departamento de todos los empleados que trabajen en la
empresa
select eApellido eOficio as [Cargo en Empresa] ddnombre as [Oficina]
from emp as e
inner join dept as d
on edept_no = ddept_no
union
select pApellido pfuncion snombre
from plantilla as p
inner join sala as s
on phospital_cod = shospital_cod
and psala_cod = ssala_cod
union
select dApellido despecialidad hnombre
from doctor as d
inner join hospital as h
on dhospital_cod = hhospital_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 = lsquoventasrsquo))
order by 2
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 67
8 Mostrar los empleados que tienen mejor salario que la media de los directores no incluyendo al
presidente
Select from emp where salario gt
(select avg (salario) from emp where oficio = DIRECTOR)
and oficio ltgt PRESIDENTE
9 Mostrar el apellido funcioacuten salario y coacutedigo 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 = lsquoENFERMEROrsquo or
funcion = lsquoENFERMERArsquo) and hospital_cod = (select hospital_cod from hospital where nombre =
lsquoSAN CARLOSrsquo)
Select apellido funcion salario hospital_cod from plantilla where
funcion in (ENFERMEROENFERMERA)
and hospital_cod = (select hospital_cod from hospital
where nombre = SAN CARLOS)
10 Visualizar los datos de los hospitales que tienen personal (Doctores) de cardiologiacutea
Select from hospital where hospital_cod in (select hospital_cod from doctor where
especialidad = lsquoCardiologiacutearsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 68
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 = lsquoPROVINCIALrsquo or
nombre= lsquoGENERALrsquo)
12 Mostrar el apellido de los enfermos que nacieron antes que el Sentildeor Miller
Select apellido from enfermo where Fecha_nac lt (select fecha_nac from enfermo where
apellido = lsquoMILLER Brsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 69
Simulacion de una clausula JOIN
Vamos a mostrar los oficios que estaacuten en maacutes de un departamento
Select distinct e1oficio from emp as e1
where e1oficio in(Select e2oficio from emp as e2
where e1dept_no ltgt e2dept_no)
Se debe utilizar antes una combinacioacuten que una subconsulta la combinacioacuten seriacutea asi dando los
mismos resultados
Select distinct e1Oficio from emp as e1
inner join emp as e2
on e1oficio = e2oficio
where e1dept_no ltgt e2dept_no
Estos son los dos oficios que estaacuten en
maacutes de un departamento
Subconsulta para simular una clausula HAVING
select e1apellidoe1oficio e1salario
from emp as e1
where e1salario gt
(select avg(e2salario) from emp as e2
where e1oficio = e2oficio)
Esta es la consulta utilizando el HAVING que es la que deberiacuteamos utilizar antes que una
subconsulta de simulacioacuten HAVING
SELECT e1apellidoe1oficio e1salario
FROM emp AS e1
INNER JOIN emp AS e2
ON e1oficio = e2oficio
GROUP BY e1oficio e1salarioe1apellido
HAVING e1salario gt AVG (e2salario)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 70
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 42
- SYSTEM_USER Devuelve el usuario del sistema actual
Depende de la autentificacioacuten con la que te hayas conectado
Select system_user as [Usuario conectado]
- USER_NAME() Devuelve el nombre del usuario actual
Select user_name ()
- COALESCE (expresioacuten1 expresioacuten2 )
Devuelve la primera expresioacuten no NULL
Si todos son NULL devuelve NULL
Select coalesce (PrecioUnidad Cantidad) from [detalles de Pedidos] Si el PrecioUnidad es nulo
devolveraacute la Cantidad y si los dos son nulos devolveraacute un campo Null
PROCEDIMIENTOS PARA AGRUPAR Y RESUMIR DATOS
En el examen de certificacioacuten 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 usaraacute la base de datos indicada Ejemplo Ponemos
en el analizador de consultas lo siguiente
Use Northwind
Select from [Order Details]
[Order Details]
Esta tabla perteneciente a la Northwind se encarga de manejar los pedidos
Order Id Nordm de Pedido
Producto Id Nordm de Producto
Ambos campos son Primary Key con lo que no puede haber una combinacioacuten de ambos campos que sea
igual
OrderId ProductId
1 A
1 B
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 43
1 C
2 A
3 C
Es decir en este caso no podriacutea existir una nueva combinacioacuten ldquo1 Ardquo o ldquo2 Ardquo
Quantity Es la cantidad del producto del pedido
ROLLUP
Se usa para presentar resuacutemenes de datos A de usarse junto con la clausula group by lo que hace es
realizar un resumen de los campos incluidos en el rollup
Ejemplo 63
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
Group by ProductID OrderID
with Rollup
Order by ProductID OrderID
Este ejemplo suma todas las cantidades y mediante
rollup muestra una fila con la suma de todas las
cantidades de cada producto y ademaacutes otra fila con la
suma de todas las cantidades de todos los productos El
resultado de este ejemplo seriacutea el que muestra la
imagen
Ejemplo 64
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
where orderid lt 10250
Group by ProductID OrderID
with Rollup
Order by ProductID OrderID
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 44
CUBE
Al igual que Rollup realiza resuacutemenes de campos agrupados Pero en este caso muestra un resumen con
cada combinacioacuten posible de los campos agrupados
Ejemplo 65
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
where orderid lt 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 combinacioacuten posible entre el
productid y el orderid
GROUPING
Indica si el resultado de un campo es el que hay en la propia tabla o se ha introducido mediante una
claacuteusula de resumen es decir para saber por ejemplo si un ldquoNullrdquo 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 lt 10250 Group by ProductID
OrderID with Cube Order by ProductID OrderID
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 45
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
Ponieacutendole un alias al
grouping saldriacutea el nombre
de columna que le
indiquemos
COMPUTE
Realiza un resumen en una columna aparte con el resultado de la funcioacuten de agregado indicada Su
formato seriacutea Compute funcioacuten(campo) No se puede utilizar en aplicaciones cliente servidor es una
clausula meramente informativa Tampoco se le pueden poner alias a los resuacutemenes
Ejemplo 67
Select Productid Orderid Quantity From [Order Details] order by ProductID Orderid compute
Sum(quantity)
Vemos que muestra la
columna con la suma
total de todas las
cantidades
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 46
Ejercicios de ROLLUP GROUPING y CUBE
Ejemplo 68
Realizar una consulta que resuma la cantidad de artiacuteculos pedidos por cada iacutendice de producto y
nuacutemero de pedido Realizando un caacutelculo acumulativo
select productid as [PRODUCTO] orderid as [Nordm PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] group by productid orderid with rollup order by productid orderid
PRODUCTO Nordm 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
hellip
Ejemplo 69
Modificacioacuten al ejercicio anterior Realizar el mismo resumen pero uacutenicamente para el producto
cuyo id es 50
select productid as [PRODUCTO] orderid as [Nordm PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] where productid = 50 group by productid orderid with rollup order by productid ordered
PRODUCTO Nordm 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
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 47
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 modificacioacuten 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 [Nordm PEDIDO] grouping(orderid) as [GRUPO PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] where productid = 50 group by Productidorderid with cube order by productidorderid
PRODUCTO GRUPO PRODUCTO Nordm PEDIDO GRUPO PEDIDO SUMA TOTAL
----------- -------------- ----------- ------------ -----------
NULL 1 NULL 1 235
NULL 1 10350 0 15
NULL 1 10383 0 15
NULL 1 10429 0 40
NULL 1 10465 0 25
NULL 1 10637 0 25
NULL 1 10729 0 40
NULL 1 10751 0 20
NULL 1 10920 0 24
NULL 1 10948 0 9
NULL 1 11072 0 22
50 0 NULL 1 235
50 0 10350 0 15
50 0 10383 0 15
50 0 10429 0 40
50 0 10465 0 25
50 0 10637 0 25
50 0 10729 0 40
50 0 10751 0 20
50 0 10920 0 24
50 0 10948 0 9
50 0 11072 0 22
(22 filas afectadas)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 48
Obtencioacuten de resuacutemenes 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 maacutes columnas y
luego efectuar alguna operacioacuten de resumen sobre cada grupo asiacute generado
La diferencia con GROUP BY es que permite mostrar informacioacuten mas detallada de cada grupo
Ejemplo 71
Lista de pedidos que muestre por coacutedigo de pedido la cantidad de productos vendidos por cada uno
de ellos
select Idpedidoidproductopreciounidadcantidad[Sub Total]=sum(PreciounidadCantidad) from
[detalles de pedidos] group by Idpedidoidproductopreciounidadcantidad order by IdPedido compute
sum(Cantidad) by IdPedido
EJERCICIOS CON COMPUTE
Ejemplo 72
Generar un resumen de subtotales en una consulta que devuelva el nuacutemero de pedido la cantidad
pedida para todos los orderid 11070
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 49
Select Orderid as [Nordm PEDIDO] Quantity AS [CANTIDAD] From [Order Details] where orderid gt= 11070 order by Orderid compute Sum(quantity) by orderid compute sum(quantity)
Nordm PEDIDO CANTIDAD
----------- --------
11070 40
11070 20
11070 30
11070 20
sum
===========
110
sum
===========
110
(6 filas afectadas)
Ejemplo 73
Generar un resumen con calculo de subtotales similar al anterior pero para los orderid 11075 y
11076
Select Orderid as [Nordm PEDIDO] Quantity as [CANTIDAD] From [Order Details] where orderid = 11075 or orderid = 11076 order by Orderid compute Sum(quantity) by ordered Nordm PEDIDO CANTIDAD ----------- -------- 11075 10 11075 30 11075 2 sum =========== 42 Nordm PEDIDO CANTIDAD ----------- -------- 11076 20 11076 20 11076 10
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 50
sum =========== 50 (8 filas afectadas)
Ejemplo 74
Modificacioacuten al ejercicio anterior Agregar la cantidad total y la cantidad promedio al final del
informe
Select Orderid as [Nordm 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)
Nordm PEDIDO CANTIDAD
----------- --------
11075 10
11075 30
11075 2
sum
===========
42
Nordm PEDIDO CANTIDAD
----------- --------
11076 20
11076 20
11076 10
sum
===========
50
sum
===========
92
avg
===========
15
(10 filas afectadas)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 51
Ejemplo 75
Seleccionar de forma agrupada por tipo todos los tipos la suma de los precios y la suma del
anticipo de la tabla tiacutetulos
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 199900 50000000
business 119500 50000000
business 29900 101250000
business 199900 50000000
sum
=====================
549200
avg
=====================
62812500
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
mod_cook 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
avg
=====================
75000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
popular_comp 229500 70000000
popular_comp 200000 80000000
popular_comp NULL NULL
sum
=====================
429500
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 52
avg
=====================
75000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
psychology 215900 70000000
psychology 109500 22750000
psychology 70000 60000000
psychology 199900 20000000
psychology 79900 40000000
sum
=====================
675200
avg
=====================
42550000
(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 ademaacutes 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 199900 50000000
business 119500 50000000
business 29900 101250000
business 199900 50000000
sum
=====================
549200
sum
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 53
=====================
251250000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
mod_cook 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
popular_comp 229500 70000000
popular_comp 200000 80000000
popular_comp NULL NULL
sum
=====================
429500
sum
=====================
150000000
(30 filas afectadas)
Ejemplo 77
Generar un informe que muestre la suma de los precios de los libros de psicologiacutea 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 109500
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 54
psychology 0736 70000
psychology 0736 199900
psychology 0736 79900
sum
=====================
459300
TIPO CODIGO EDITOR PRECIO
------------ ------------- ---------------------
psychology 0877 215900
sum
=====================
215900
(7 filas afectadas)
Ejemplo 78
Generar un informe que obtenga la suma de los precios de todos los libros de psicologiacutea asiacute como la
suma de los precios de los libros de psicologiacutea 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 109500
psychology 0736 70000
psychology 0736 199900
psychology 0736 79900
sum
=====================
459300
TIPO CODIGO EDITOR PRECIO
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 55
------------ ------------- ---------------------
psychology 0877 215900
sum
=====================
215900
sum
=====================
675200
(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 199900 0000
mod_cook 0877 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO CODIGO EDITOR PRECIO ANTICIPO
------------ ------------- --------------------- ---------------------
trad_cook 0877 119500 40000000
trad_cook 0877 209500 70000000
trad_cook 0877 149900 80000000
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 56
sum
=====================
478900
sum
=====================
190000000
(9 filas afectadas)
Ejemplo 80
Generar un informe que muestre todos los tiacutetulos precio y anticipo de aquellos tiacutetulos que tengan
un precio superior a 20 doacutelares Ofreceraacute tambieacuten la suma total del precio y del anticipo
Select title as [TITULO] price as [PRECIO] advance as [ANTICIPO] From titles where price gt 20 order by title compute sum(price) compute sum(advance)
TITULO PRECIO ANTICIPO
-------------------------------------------------------------------------------- --------------------- -------------
--------
But Is It User Friendly 229500 70000000
Computer Phobic AND Non-Phobic Individuals Behavior Variations 215900
70000000
Onions Leeks and Garlic Cooking Secrets of the Mediterranean 209500
70000000
sum
=====================
654900
sum
=====================
210000000
(5 filas afectadas)
Ejemplo 81
Generar un informe que muestre el precio el tipo y el nuacutemero de editor de la tabla titles de todos
aquellas obras que pertenezcan la categoriacutea de ldquobusinessrdquo Ademaacutes apareceraacute la suma total de
precios y el maacuteximo pub_id de esta seleccioacuten
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 57
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 29900 0736
business 199900 1389
business 199900 1389
business 119500 1389
sum
=====================
549200
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 Mostraraacute la suma de los precios y los anticipos por tipo y luego calcularaacute 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 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
trad_cook 209500 70000000
trad_cook 119500 40000000
trad_cook 149900 80000000
sum
=====================
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 58
478900
sum
=====================
190000000
sum
=====================
708700
sum
=====================
340000000
(11 filas afectadas)
Eliminacioacuten 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 iquestA que precio se ah vendido los productos
Select IdProducto Preciounidad from [Detalles de pedidos] order by IdProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 59
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 mayoriacutea de las consultas que se hacen en una base de datos requiere que se lean datos procedentes
de dos oacute maacutes tablas
INNER JOIN- son las filas que satisfacen la condicioacuten de la combinacioacuten
En la siguiente sentencia SQL enlaza 2 tablas la tabla clientes y la tabla pedidos en esta ejemplo me
muestra los campos nombre compantildeiacutea y el campo idpedido
La uacutenica condicioacuten es que las 2 tablas tengan un campo en comuacuten
Ejemplo 84
select clientesNombreCompantildeiacuteapedidosidpedido from clientes inner join pedidos on
clientesidcliente=pedidosidcliente
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 60
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 pedidosIdPedido pedidosIdCliente 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 pedidosIdPedido pedidosIdCliente order
by pedidos IdPedido
CROSS JOIN
Un Cross Join es la consulta correlacionada que combine cada una de las filas de una de las tablas con
todas las filas de la otra tabla
No es necesario que exista una columna en comuacuten para ejecutar el Cross Join
Ejemplo 86
La siguiente consulta combina cada una de las filas de la tabla categoriacuteas con cada una de las filas de la
tabla productos
select productosNombreProductocategoriasNombrecategoria from productos cross join categorias
order by productosNombreProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 61
Ejercicios de consultas Muacuteltiples
Ejemplo 87
Mostrar el pedidos completo con el id=10248
Select pedidosIdPedido pedidosIdCliente
Total=sum ([detalles de pedidos]Preciounidad[detalles de pedidos]Cantidad)
From [detalles de pedidos] inner join pedidos on
[Detalles de pedidos]IdPedido=pedidosIdPedido where pedidosIdPedido=10248
Group by pedidosIdPedido pedidosIdCliente
Ejemplo 88
1 Mostrar la cantidad de productos por categoriacutea
Select CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
[Total de Producto]=sum (UnidadesEnExistencia) from Categoriacuteas inner join
Productos on CategoriacuteasIdCategoriacutea=productosIdCategoriacutea
Group by CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 62
Ejemplo 89
Calcular cuantas ventas tiene cada uno de los vendedores
Select empleadosIdEmpleado empleadosNombre empleadosApellidos
[Total de ventas]=count (pedidosIdPedido) from empleados
Inner join Pedidos on empleadosIdEmpleado=pedidosIdEmpleado
Group by empleadosIdEmpleado empleadosNombre empleadosApellidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 63
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 despueacutes saca la de Plantilla
Recomendaciones a la hora de usar las combinaciones
Combinar tablas en funcioacuten de claves principales y externas
Limite el nuacutemero de tablas de las combinaciones
Select Apellido
Oficio as
OFICIOFUNCION
salario from emp
UNION
Select Apellido
Funcion Salario from
Plantilla
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 64
SUBCONSULTAS
Es una SELECT anidada en una instruccioacuten INSERT DELETE SELECT o UPDATE
Como una tabla derivada
Select eemp_no as Numero
eApellido
from (select emp_no apellido from emp) as e
Como una expresioacuten
Select emp_no as [Numero]
Apellido
Salario
(select avg(Salario) from emp)
as Diferencia
from emp
where oficio = Empleado
Para correlacionar datos
- Expresioacuten dinaacutemica que cambia en cada fila de una consulta externa
- Es una combinacioacuten entre la subconsulta y la fila de la consulta externa
- Dividen consultas complejas con dos o maacutes consultas simples relacionadas
Subconsulta correlacionada
Select apellido oficiodept_no
from emp as e
where 20 lt
(select dept_no from dept as d
where edept_no = ddept_no
and ddnombre = Ventas)
SUBCONSULTAS
1 Mostrar el numero de empleado el apellido y la fecha de alta del empleado mas antiguo de la
empresa
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 65
SELECT emp_noapellido
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_noapellido
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 Jimeacutenez
select apellido oficio from emp where
oficio = (select oficio from emp where apellido = JIMENEZ)
4 Queremos saber el apellido oficio salario y nuacutemero 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 gt (select max (salario) from
emp where dept_no = 30)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 66
5 Mostrar el apellido la funcioacuten sala o departamento de todos los empleados que trabajen en la
empresa
select eApellido eOficio as [Cargo en Empresa] ddnombre as [Oficina]
from emp as e
inner join dept as d
on edept_no = ddept_no
union
select pApellido pfuncion snombre
from plantilla as p
inner join sala as s
on phospital_cod = shospital_cod
and psala_cod = ssala_cod
union
select dApellido despecialidad hnombre
from doctor as d
inner join hospital as h
on dhospital_cod = hhospital_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 = lsquoventasrsquo))
order by 2
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 67
8 Mostrar los empleados que tienen mejor salario que la media de los directores no incluyendo al
presidente
Select from emp where salario gt
(select avg (salario) from emp where oficio = DIRECTOR)
and oficio ltgt PRESIDENTE
9 Mostrar el apellido funcioacuten salario y coacutedigo 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 = lsquoENFERMEROrsquo or
funcion = lsquoENFERMERArsquo) and hospital_cod = (select hospital_cod from hospital where nombre =
lsquoSAN CARLOSrsquo)
Select apellido funcion salario hospital_cod from plantilla where
funcion in (ENFERMEROENFERMERA)
and hospital_cod = (select hospital_cod from hospital
where nombre = SAN CARLOS)
10 Visualizar los datos de los hospitales que tienen personal (Doctores) de cardiologiacutea
Select from hospital where hospital_cod in (select hospital_cod from doctor where
especialidad = lsquoCardiologiacutearsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 68
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 = lsquoPROVINCIALrsquo or
nombre= lsquoGENERALrsquo)
12 Mostrar el apellido de los enfermos que nacieron antes que el Sentildeor Miller
Select apellido from enfermo where Fecha_nac lt (select fecha_nac from enfermo where
apellido = lsquoMILLER Brsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 69
Simulacion de una clausula JOIN
Vamos a mostrar los oficios que estaacuten en maacutes de un departamento
Select distinct e1oficio from emp as e1
where e1oficio in(Select e2oficio from emp as e2
where e1dept_no ltgt e2dept_no)
Se debe utilizar antes una combinacioacuten que una subconsulta la combinacioacuten seriacutea asi dando los
mismos resultados
Select distinct e1Oficio from emp as e1
inner join emp as e2
on e1oficio = e2oficio
where e1dept_no ltgt e2dept_no
Estos son los dos oficios que estaacuten en
maacutes de un departamento
Subconsulta para simular una clausula HAVING
select e1apellidoe1oficio e1salario
from emp as e1
where e1salario gt
(select avg(e2salario) from emp as e2
where e1oficio = e2oficio)
Esta es la consulta utilizando el HAVING que es la que deberiacuteamos utilizar antes que una
subconsulta de simulacioacuten HAVING
SELECT e1apellidoe1oficio e1salario
FROM emp AS e1
INNER JOIN emp AS e2
ON e1oficio = e2oficio
GROUP BY e1oficio e1salarioe1apellido
HAVING e1salario gt AVG (e2salario)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 70
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 43
1 C
2 A
3 C
Es decir en este caso no podriacutea existir una nueva combinacioacuten ldquo1 Ardquo o ldquo2 Ardquo
Quantity Es la cantidad del producto del pedido
ROLLUP
Se usa para presentar resuacutemenes de datos A de usarse junto con la clausula group by lo que hace es
realizar un resumen de los campos incluidos en el rollup
Ejemplo 63
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
Group by ProductID OrderID
with Rollup
Order by ProductID OrderID
Este ejemplo suma todas las cantidades y mediante
rollup muestra una fila con la suma de todas las
cantidades de cada producto y ademaacutes otra fila con la
suma de todas las cantidades de todos los productos El
resultado de este ejemplo seriacutea el que muestra la
imagen
Ejemplo 64
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
where orderid lt 10250
Group by ProductID OrderID
with Rollup
Order by ProductID OrderID
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 44
CUBE
Al igual que Rollup realiza resuacutemenes de campos agrupados Pero en este caso muestra un resumen con
cada combinacioacuten posible de los campos agrupados
Ejemplo 65
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
where orderid lt 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 combinacioacuten posible entre el
productid y el orderid
GROUPING
Indica si el resultado de un campo es el que hay en la propia tabla o se ha introducido mediante una
claacuteusula de resumen es decir para saber por ejemplo si un ldquoNullrdquo 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 lt 10250 Group by ProductID
OrderID with Cube Order by ProductID OrderID
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 45
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
Ponieacutendole un alias al
grouping saldriacutea el nombre
de columna que le
indiquemos
COMPUTE
Realiza un resumen en una columna aparte con el resultado de la funcioacuten de agregado indicada Su
formato seriacutea Compute funcioacuten(campo) No se puede utilizar en aplicaciones cliente servidor es una
clausula meramente informativa Tampoco se le pueden poner alias a los resuacutemenes
Ejemplo 67
Select Productid Orderid Quantity From [Order Details] order by ProductID Orderid compute
Sum(quantity)
Vemos que muestra la
columna con la suma
total de todas las
cantidades
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 46
Ejercicios de ROLLUP GROUPING y CUBE
Ejemplo 68
Realizar una consulta que resuma la cantidad de artiacuteculos pedidos por cada iacutendice de producto y
nuacutemero de pedido Realizando un caacutelculo acumulativo
select productid as [PRODUCTO] orderid as [Nordm PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] group by productid orderid with rollup order by productid orderid
PRODUCTO Nordm 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
hellip
Ejemplo 69
Modificacioacuten al ejercicio anterior Realizar el mismo resumen pero uacutenicamente para el producto
cuyo id es 50
select productid as [PRODUCTO] orderid as [Nordm PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] where productid = 50 group by productid orderid with rollup order by productid ordered
PRODUCTO Nordm 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
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 47
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 modificacioacuten 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 [Nordm PEDIDO] grouping(orderid) as [GRUPO PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] where productid = 50 group by Productidorderid with cube order by productidorderid
PRODUCTO GRUPO PRODUCTO Nordm PEDIDO GRUPO PEDIDO SUMA TOTAL
----------- -------------- ----------- ------------ -----------
NULL 1 NULL 1 235
NULL 1 10350 0 15
NULL 1 10383 0 15
NULL 1 10429 0 40
NULL 1 10465 0 25
NULL 1 10637 0 25
NULL 1 10729 0 40
NULL 1 10751 0 20
NULL 1 10920 0 24
NULL 1 10948 0 9
NULL 1 11072 0 22
50 0 NULL 1 235
50 0 10350 0 15
50 0 10383 0 15
50 0 10429 0 40
50 0 10465 0 25
50 0 10637 0 25
50 0 10729 0 40
50 0 10751 0 20
50 0 10920 0 24
50 0 10948 0 9
50 0 11072 0 22
(22 filas afectadas)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 48
Obtencioacuten de resuacutemenes 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 maacutes columnas y
luego efectuar alguna operacioacuten de resumen sobre cada grupo asiacute generado
La diferencia con GROUP BY es que permite mostrar informacioacuten mas detallada de cada grupo
Ejemplo 71
Lista de pedidos que muestre por coacutedigo de pedido la cantidad de productos vendidos por cada uno
de ellos
select Idpedidoidproductopreciounidadcantidad[Sub Total]=sum(PreciounidadCantidad) from
[detalles de pedidos] group by Idpedidoidproductopreciounidadcantidad order by IdPedido compute
sum(Cantidad) by IdPedido
EJERCICIOS CON COMPUTE
Ejemplo 72
Generar un resumen de subtotales en una consulta que devuelva el nuacutemero de pedido la cantidad
pedida para todos los orderid 11070
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 49
Select Orderid as [Nordm PEDIDO] Quantity AS [CANTIDAD] From [Order Details] where orderid gt= 11070 order by Orderid compute Sum(quantity) by orderid compute sum(quantity)
Nordm PEDIDO CANTIDAD
----------- --------
11070 40
11070 20
11070 30
11070 20
sum
===========
110
sum
===========
110
(6 filas afectadas)
Ejemplo 73
Generar un resumen con calculo de subtotales similar al anterior pero para los orderid 11075 y
11076
Select Orderid as [Nordm PEDIDO] Quantity as [CANTIDAD] From [Order Details] where orderid = 11075 or orderid = 11076 order by Orderid compute Sum(quantity) by ordered Nordm PEDIDO CANTIDAD ----------- -------- 11075 10 11075 30 11075 2 sum =========== 42 Nordm PEDIDO CANTIDAD ----------- -------- 11076 20 11076 20 11076 10
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 50
sum =========== 50 (8 filas afectadas)
Ejemplo 74
Modificacioacuten al ejercicio anterior Agregar la cantidad total y la cantidad promedio al final del
informe
Select Orderid as [Nordm 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)
Nordm PEDIDO CANTIDAD
----------- --------
11075 10
11075 30
11075 2
sum
===========
42
Nordm PEDIDO CANTIDAD
----------- --------
11076 20
11076 20
11076 10
sum
===========
50
sum
===========
92
avg
===========
15
(10 filas afectadas)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 51
Ejemplo 75
Seleccionar de forma agrupada por tipo todos los tipos la suma de los precios y la suma del
anticipo de la tabla tiacutetulos
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 199900 50000000
business 119500 50000000
business 29900 101250000
business 199900 50000000
sum
=====================
549200
avg
=====================
62812500
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
mod_cook 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
avg
=====================
75000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
popular_comp 229500 70000000
popular_comp 200000 80000000
popular_comp NULL NULL
sum
=====================
429500
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 52
avg
=====================
75000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
psychology 215900 70000000
psychology 109500 22750000
psychology 70000 60000000
psychology 199900 20000000
psychology 79900 40000000
sum
=====================
675200
avg
=====================
42550000
(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 ademaacutes 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 199900 50000000
business 119500 50000000
business 29900 101250000
business 199900 50000000
sum
=====================
549200
sum
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 53
=====================
251250000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
mod_cook 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
popular_comp 229500 70000000
popular_comp 200000 80000000
popular_comp NULL NULL
sum
=====================
429500
sum
=====================
150000000
(30 filas afectadas)
Ejemplo 77
Generar un informe que muestre la suma de los precios de los libros de psicologiacutea 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 109500
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 54
psychology 0736 70000
psychology 0736 199900
psychology 0736 79900
sum
=====================
459300
TIPO CODIGO EDITOR PRECIO
------------ ------------- ---------------------
psychology 0877 215900
sum
=====================
215900
(7 filas afectadas)
Ejemplo 78
Generar un informe que obtenga la suma de los precios de todos los libros de psicologiacutea asiacute como la
suma de los precios de los libros de psicologiacutea 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 109500
psychology 0736 70000
psychology 0736 199900
psychology 0736 79900
sum
=====================
459300
TIPO CODIGO EDITOR PRECIO
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 55
------------ ------------- ---------------------
psychology 0877 215900
sum
=====================
215900
sum
=====================
675200
(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 199900 0000
mod_cook 0877 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO CODIGO EDITOR PRECIO ANTICIPO
------------ ------------- --------------------- ---------------------
trad_cook 0877 119500 40000000
trad_cook 0877 209500 70000000
trad_cook 0877 149900 80000000
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 56
sum
=====================
478900
sum
=====================
190000000
(9 filas afectadas)
Ejemplo 80
Generar un informe que muestre todos los tiacutetulos precio y anticipo de aquellos tiacutetulos que tengan
un precio superior a 20 doacutelares Ofreceraacute tambieacuten la suma total del precio y del anticipo
Select title as [TITULO] price as [PRECIO] advance as [ANTICIPO] From titles where price gt 20 order by title compute sum(price) compute sum(advance)
TITULO PRECIO ANTICIPO
-------------------------------------------------------------------------------- --------------------- -------------
--------
But Is It User Friendly 229500 70000000
Computer Phobic AND Non-Phobic Individuals Behavior Variations 215900
70000000
Onions Leeks and Garlic Cooking Secrets of the Mediterranean 209500
70000000
sum
=====================
654900
sum
=====================
210000000
(5 filas afectadas)
Ejemplo 81
Generar un informe que muestre el precio el tipo y el nuacutemero de editor de la tabla titles de todos
aquellas obras que pertenezcan la categoriacutea de ldquobusinessrdquo Ademaacutes apareceraacute la suma total de
precios y el maacuteximo pub_id de esta seleccioacuten
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 57
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 29900 0736
business 199900 1389
business 199900 1389
business 119500 1389
sum
=====================
549200
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 Mostraraacute la suma de los precios y los anticipos por tipo y luego calcularaacute 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 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
trad_cook 209500 70000000
trad_cook 119500 40000000
trad_cook 149900 80000000
sum
=====================
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 58
478900
sum
=====================
190000000
sum
=====================
708700
sum
=====================
340000000
(11 filas afectadas)
Eliminacioacuten 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 iquestA que precio se ah vendido los productos
Select IdProducto Preciounidad from [Detalles de pedidos] order by IdProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 59
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 mayoriacutea de las consultas que se hacen en una base de datos requiere que se lean datos procedentes
de dos oacute maacutes tablas
INNER JOIN- son las filas que satisfacen la condicioacuten de la combinacioacuten
En la siguiente sentencia SQL enlaza 2 tablas la tabla clientes y la tabla pedidos en esta ejemplo me
muestra los campos nombre compantildeiacutea y el campo idpedido
La uacutenica condicioacuten es que las 2 tablas tengan un campo en comuacuten
Ejemplo 84
select clientesNombreCompantildeiacuteapedidosidpedido from clientes inner join pedidos on
clientesidcliente=pedidosidcliente
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 60
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 pedidosIdPedido pedidosIdCliente 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 pedidosIdPedido pedidosIdCliente order
by pedidos IdPedido
CROSS JOIN
Un Cross Join es la consulta correlacionada que combine cada una de las filas de una de las tablas con
todas las filas de la otra tabla
No es necesario que exista una columna en comuacuten para ejecutar el Cross Join
Ejemplo 86
La siguiente consulta combina cada una de las filas de la tabla categoriacuteas con cada una de las filas de la
tabla productos
select productosNombreProductocategoriasNombrecategoria from productos cross join categorias
order by productosNombreProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 61
Ejercicios de consultas Muacuteltiples
Ejemplo 87
Mostrar el pedidos completo con el id=10248
Select pedidosIdPedido pedidosIdCliente
Total=sum ([detalles de pedidos]Preciounidad[detalles de pedidos]Cantidad)
From [detalles de pedidos] inner join pedidos on
[Detalles de pedidos]IdPedido=pedidosIdPedido where pedidosIdPedido=10248
Group by pedidosIdPedido pedidosIdCliente
Ejemplo 88
1 Mostrar la cantidad de productos por categoriacutea
Select CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
[Total de Producto]=sum (UnidadesEnExistencia) from Categoriacuteas inner join
Productos on CategoriacuteasIdCategoriacutea=productosIdCategoriacutea
Group by CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 62
Ejemplo 89
Calcular cuantas ventas tiene cada uno de los vendedores
Select empleadosIdEmpleado empleadosNombre empleadosApellidos
[Total de ventas]=count (pedidosIdPedido) from empleados
Inner join Pedidos on empleadosIdEmpleado=pedidosIdEmpleado
Group by empleadosIdEmpleado empleadosNombre empleadosApellidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 63
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 despueacutes saca la de Plantilla
Recomendaciones a la hora de usar las combinaciones
Combinar tablas en funcioacuten de claves principales y externas
Limite el nuacutemero de tablas de las combinaciones
Select Apellido
Oficio as
OFICIOFUNCION
salario from emp
UNION
Select Apellido
Funcion Salario from
Plantilla
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 64
SUBCONSULTAS
Es una SELECT anidada en una instruccioacuten INSERT DELETE SELECT o UPDATE
Como una tabla derivada
Select eemp_no as Numero
eApellido
from (select emp_no apellido from emp) as e
Como una expresioacuten
Select emp_no as [Numero]
Apellido
Salario
(select avg(Salario) from emp)
as Diferencia
from emp
where oficio = Empleado
Para correlacionar datos
- Expresioacuten dinaacutemica que cambia en cada fila de una consulta externa
- Es una combinacioacuten entre la subconsulta y la fila de la consulta externa
- Dividen consultas complejas con dos o maacutes consultas simples relacionadas
Subconsulta correlacionada
Select apellido oficiodept_no
from emp as e
where 20 lt
(select dept_no from dept as d
where edept_no = ddept_no
and ddnombre = Ventas)
SUBCONSULTAS
1 Mostrar el numero de empleado el apellido y la fecha de alta del empleado mas antiguo de la
empresa
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 65
SELECT emp_noapellido
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_noapellido
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 Jimeacutenez
select apellido oficio from emp where
oficio = (select oficio from emp where apellido = JIMENEZ)
4 Queremos saber el apellido oficio salario y nuacutemero 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 gt (select max (salario) from
emp where dept_no = 30)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 66
5 Mostrar el apellido la funcioacuten sala o departamento de todos los empleados que trabajen en la
empresa
select eApellido eOficio as [Cargo en Empresa] ddnombre as [Oficina]
from emp as e
inner join dept as d
on edept_no = ddept_no
union
select pApellido pfuncion snombre
from plantilla as p
inner join sala as s
on phospital_cod = shospital_cod
and psala_cod = ssala_cod
union
select dApellido despecialidad hnombre
from doctor as d
inner join hospital as h
on dhospital_cod = hhospital_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 = lsquoventasrsquo))
order by 2
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 67
8 Mostrar los empleados que tienen mejor salario que la media de los directores no incluyendo al
presidente
Select from emp where salario gt
(select avg (salario) from emp where oficio = DIRECTOR)
and oficio ltgt PRESIDENTE
9 Mostrar el apellido funcioacuten salario y coacutedigo 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 = lsquoENFERMEROrsquo or
funcion = lsquoENFERMERArsquo) and hospital_cod = (select hospital_cod from hospital where nombre =
lsquoSAN CARLOSrsquo)
Select apellido funcion salario hospital_cod from plantilla where
funcion in (ENFERMEROENFERMERA)
and hospital_cod = (select hospital_cod from hospital
where nombre = SAN CARLOS)
10 Visualizar los datos de los hospitales que tienen personal (Doctores) de cardiologiacutea
Select from hospital where hospital_cod in (select hospital_cod from doctor where
especialidad = lsquoCardiologiacutearsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 68
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 = lsquoPROVINCIALrsquo or
nombre= lsquoGENERALrsquo)
12 Mostrar el apellido de los enfermos que nacieron antes que el Sentildeor Miller
Select apellido from enfermo where Fecha_nac lt (select fecha_nac from enfermo where
apellido = lsquoMILLER Brsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 69
Simulacion de una clausula JOIN
Vamos a mostrar los oficios que estaacuten en maacutes de un departamento
Select distinct e1oficio from emp as e1
where e1oficio in(Select e2oficio from emp as e2
where e1dept_no ltgt e2dept_no)
Se debe utilizar antes una combinacioacuten que una subconsulta la combinacioacuten seriacutea asi dando los
mismos resultados
Select distinct e1Oficio from emp as e1
inner join emp as e2
on e1oficio = e2oficio
where e1dept_no ltgt e2dept_no
Estos son los dos oficios que estaacuten en
maacutes de un departamento
Subconsulta para simular una clausula HAVING
select e1apellidoe1oficio e1salario
from emp as e1
where e1salario gt
(select avg(e2salario) from emp as e2
where e1oficio = e2oficio)
Esta es la consulta utilizando el HAVING que es la que deberiacuteamos utilizar antes que una
subconsulta de simulacioacuten HAVING
SELECT e1apellidoe1oficio e1salario
FROM emp AS e1
INNER JOIN emp AS e2
ON e1oficio = e2oficio
GROUP BY e1oficio e1salarioe1apellido
HAVING e1salario gt AVG (e2salario)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 70
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 44
CUBE
Al igual que Rollup realiza resuacutemenes de campos agrupados Pero en este caso muestra un resumen con
cada combinacioacuten posible de los campos agrupados
Ejemplo 65
Select ProductID OrderId
Sum(Quantity) As Cantidad_Total
From [Order Details]
where orderid lt 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 combinacioacuten posible entre el
productid y el orderid
GROUPING
Indica si el resultado de un campo es el que hay en la propia tabla o se ha introducido mediante una
claacuteusula de resumen es decir para saber por ejemplo si un ldquoNullrdquo 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 lt 10250 Group by ProductID
OrderID with Cube Order by ProductID OrderID
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 45
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
Ponieacutendole un alias al
grouping saldriacutea el nombre
de columna que le
indiquemos
COMPUTE
Realiza un resumen en una columna aparte con el resultado de la funcioacuten de agregado indicada Su
formato seriacutea Compute funcioacuten(campo) No se puede utilizar en aplicaciones cliente servidor es una
clausula meramente informativa Tampoco se le pueden poner alias a los resuacutemenes
Ejemplo 67
Select Productid Orderid Quantity From [Order Details] order by ProductID Orderid compute
Sum(quantity)
Vemos que muestra la
columna con la suma
total de todas las
cantidades
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 46
Ejercicios de ROLLUP GROUPING y CUBE
Ejemplo 68
Realizar una consulta que resuma la cantidad de artiacuteculos pedidos por cada iacutendice de producto y
nuacutemero de pedido Realizando un caacutelculo acumulativo
select productid as [PRODUCTO] orderid as [Nordm PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] group by productid orderid with rollup order by productid orderid
PRODUCTO Nordm 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
hellip
Ejemplo 69
Modificacioacuten al ejercicio anterior Realizar el mismo resumen pero uacutenicamente para el producto
cuyo id es 50
select productid as [PRODUCTO] orderid as [Nordm PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] where productid = 50 group by productid orderid with rollup order by productid ordered
PRODUCTO Nordm 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
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 47
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 modificacioacuten 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 [Nordm PEDIDO] grouping(orderid) as [GRUPO PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] where productid = 50 group by Productidorderid with cube order by productidorderid
PRODUCTO GRUPO PRODUCTO Nordm PEDIDO GRUPO PEDIDO SUMA TOTAL
----------- -------------- ----------- ------------ -----------
NULL 1 NULL 1 235
NULL 1 10350 0 15
NULL 1 10383 0 15
NULL 1 10429 0 40
NULL 1 10465 0 25
NULL 1 10637 0 25
NULL 1 10729 0 40
NULL 1 10751 0 20
NULL 1 10920 0 24
NULL 1 10948 0 9
NULL 1 11072 0 22
50 0 NULL 1 235
50 0 10350 0 15
50 0 10383 0 15
50 0 10429 0 40
50 0 10465 0 25
50 0 10637 0 25
50 0 10729 0 40
50 0 10751 0 20
50 0 10920 0 24
50 0 10948 0 9
50 0 11072 0 22
(22 filas afectadas)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 48
Obtencioacuten de resuacutemenes 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 maacutes columnas y
luego efectuar alguna operacioacuten de resumen sobre cada grupo asiacute generado
La diferencia con GROUP BY es que permite mostrar informacioacuten mas detallada de cada grupo
Ejemplo 71
Lista de pedidos que muestre por coacutedigo de pedido la cantidad de productos vendidos por cada uno
de ellos
select Idpedidoidproductopreciounidadcantidad[Sub Total]=sum(PreciounidadCantidad) from
[detalles de pedidos] group by Idpedidoidproductopreciounidadcantidad order by IdPedido compute
sum(Cantidad) by IdPedido
EJERCICIOS CON COMPUTE
Ejemplo 72
Generar un resumen de subtotales en una consulta que devuelva el nuacutemero de pedido la cantidad
pedida para todos los orderid 11070
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 49
Select Orderid as [Nordm PEDIDO] Quantity AS [CANTIDAD] From [Order Details] where orderid gt= 11070 order by Orderid compute Sum(quantity) by orderid compute sum(quantity)
Nordm PEDIDO CANTIDAD
----------- --------
11070 40
11070 20
11070 30
11070 20
sum
===========
110
sum
===========
110
(6 filas afectadas)
Ejemplo 73
Generar un resumen con calculo de subtotales similar al anterior pero para los orderid 11075 y
11076
Select Orderid as [Nordm PEDIDO] Quantity as [CANTIDAD] From [Order Details] where orderid = 11075 or orderid = 11076 order by Orderid compute Sum(quantity) by ordered Nordm PEDIDO CANTIDAD ----------- -------- 11075 10 11075 30 11075 2 sum =========== 42 Nordm PEDIDO CANTIDAD ----------- -------- 11076 20 11076 20 11076 10
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 50
sum =========== 50 (8 filas afectadas)
Ejemplo 74
Modificacioacuten al ejercicio anterior Agregar la cantidad total y la cantidad promedio al final del
informe
Select Orderid as [Nordm 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)
Nordm PEDIDO CANTIDAD
----------- --------
11075 10
11075 30
11075 2
sum
===========
42
Nordm PEDIDO CANTIDAD
----------- --------
11076 20
11076 20
11076 10
sum
===========
50
sum
===========
92
avg
===========
15
(10 filas afectadas)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 51
Ejemplo 75
Seleccionar de forma agrupada por tipo todos los tipos la suma de los precios y la suma del
anticipo de la tabla tiacutetulos
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 199900 50000000
business 119500 50000000
business 29900 101250000
business 199900 50000000
sum
=====================
549200
avg
=====================
62812500
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
mod_cook 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
avg
=====================
75000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
popular_comp 229500 70000000
popular_comp 200000 80000000
popular_comp NULL NULL
sum
=====================
429500
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 52
avg
=====================
75000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
psychology 215900 70000000
psychology 109500 22750000
psychology 70000 60000000
psychology 199900 20000000
psychology 79900 40000000
sum
=====================
675200
avg
=====================
42550000
(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 ademaacutes 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 199900 50000000
business 119500 50000000
business 29900 101250000
business 199900 50000000
sum
=====================
549200
sum
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 53
=====================
251250000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
mod_cook 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
popular_comp 229500 70000000
popular_comp 200000 80000000
popular_comp NULL NULL
sum
=====================
429500
sum
=====================
150000000
(30 filas afectadas)
Ejemplo 77
Generar un informe que muestre la suma de los precios de los libros de psicologiacutea 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 109500
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 54
psychology 0736 70000
psychology 0736 199900
psychology 0736 79900
sum
=====================
459300
TIPO CODIGO EDITOR PRECIO
------------ ------------- ---------------------
psychology 0877 215900
sum
=====================
215900
(7 filas afectadas)
Ejemplo 78
Generar un informe que obtenga la suma de los precios de todos los libros de psicologiacutea asiacute como la
suma de los precios de los libros de psicologiacutea 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 109500
psychology 0736 70000
psychology 0736 199900
psychology 0736 79900
sum
=====================
459300
TIPO CODIGO EDITOR PRECIO
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 55
------------ ------------- ---------------------
psychology 0877 215900
sum
=====================
215900
sum
=====================
675200
(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 199900 0000
mod_cook 0877 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO CODIGO EDITOR PRECIO ANTICIPO
------------ ------------- --------------------- ---------------------
trad_cook 0877 119500 40000000
trad_cook 0877 209500 70000000
trad_cook 0877 149900 80000000
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 56
sum
=====================
478900
sum
=====================
190000000
(9 filas afectadas)
Ejemplo 80
Generar un informe que muestre todos los tiacutetulos precio y anticipo de aquellos tiacutetulos que tengan
un precio superior a 20 doacutelares Ofreceraacute tambieacuten la suma total del precio y del anticipo
Select title as [TITULO] price as [PRECIO] advance as [ANTICIPO] From titles where price gt 20 order by title compute sum(price) compute sum(advance)
TITULO PRECIO ANTICIPO
-------------------------------------------------------------------------------- --------------------- -------------
--------
But Is It User Friendly 229500 70000000
Computer Phobic AND Non-Phobic Individuals Behavior Variations 215900
70000000
Onions Leeks and Garlic Cooking Secrets of the Mediterranean 209500
70000000
sum
=====================
654900
sum
=====================
210000000
(5 filas afectadas)
Ejemplo 81
Generar un informe que muestre el precio el tipo y el nuacutemero de editor de la tabla titles de todos
aquellas obras que pertenezcan la categoriacutea de ldquobusinessrdquo Ademaacutes apareceraacute la suma total de
precios y el maacuteximo pub_id de esta seleccioacuten
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 57
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 29900 0736
business 199900 1389
business 199900 1389
business 119500 1389
sum
=====================
549200
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 Mostraraacute la suma de los precios y los anticipos por tipo y luego calcularaacute 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 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
trad_cook 209500 70000000
trad_cook 119500 40000000
trad_cook 149900 80000000
sum
=====================
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 58
478900
sum
=====================
190000000
sum
=====================
708700
sum
=====================
340000000
(11 filas afectadas)
Eliminacioacuten 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 iquestA que precio se ah vendido los productos
Select IdProducto Preciounidad from [Detalles de pedidos] order by IdProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 59
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 mayoriacutea de las consultas que se hacen en una base de datos requiere que se lean datos procedentes
de dos oacute maacutes tablas
INNER JOIN- son las filas que satisfacen la condicioacuten de la combinacioacuten
En la siguiente sentencia SQL enlaza 2 tablas la tabla clientes y la tabla pedidos en esta ejemplo me
muestra los campos nombre compantildeiacutea y el campo idpedido
La uacutenica condicioacuten es que las 2 tablas tengan un campo en comuacuten
Ejemplo 84
select clientesNombreCompantildeiacuteapedidosidpedido from clientes inner join pedidos on
clientesidcliente=pedidosidcliente
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 60
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 pedidosIdPedido pedidosIdCliente 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 pedidosIdPedido pedidosIdCliente order
by pedidos IdPedido
CROSS JOIN
Un Cross Join es la consulta correlacionada que combine cada una de las filas de una de las tablas con
todas las filas de la otra tabla
No es necesario que exista una columna en comuacuten para ejecutar el Cross Join
Ejemplo 86
La siguiente consulta combina cada una de las filas de la tabla categoriacuteas con cada una de las filas de la
tabla productos
select productosNombreProductocategoriasNombrecategoria from productos cross join categorias
order by productosNombreProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 61
Ejercicios de consultas Muacuteltiples
Ejemplo 87
Mostrar el pedidos completo con el id=10248
Select pedidosIdPedido pedidosIdCliente
Total=sum ([detalles de pedidos]Preciounidad[detalles de pedidos]Cantidad)
From [detalles de pedidos] inner join pedidos on
[Detalles de pedidos]IdPedido=pedidosIdPedido where pedidosIdPedido=10248
Group by pedidosIdPedido pedidosIdCliente
Ejemplo 88
1 Mostrar la cantidad de productos por categoriacutea
Select CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
[Total de Producto]=sum (UnidadesEnExistencia) from Categoriacuteas inner join
Productos on CategoriacuteasIdCategoriacutea=productosIdCategoriacutea
Group by CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 62
Ejemplo 89
Calcular cuantas ventas tiene cada uno de los vendedores
Select empleadosIdEmpleado empleadosNombre empleadosApellidos
[Total de ventas]=count (pedidosIdPedido) from empleados
Inner join Pedidos on empleadosIdEmpleado=pedidosIdEmpleado
Group by empleadosIdEmpleado empleadosNombre empleadosApellidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 63
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 despueacutes saca la de Plantilla
Recomendaciones a la hora de usar las combinaciones
Combinar tablas en funcioacuten de claves principales y externas
Limite el nuacutemero de tablas de las combinaciones
Select Apellido
Oficio as
OFICIOFUNCION
salario from emp
UNION
Select Apellido
Funcion Salario from
Plantilla
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 64
SUBCONSULTAS
Es una SELECT anidada en una instruccioacuten INSERT DELETE SELECT o UPDATE
Como una tabla derivada
Select eemp_no as Numero
eApellido
from (select emp_no apellido from emp) as e
Como una expresioacuten
Select emp_no as [Numero]
Apellido
Salario
(select avg(Salario) from emp)
as Diferencia
from emp
where oficio = Empleado
Para correlacionar datos
- Expresioacuten dinaacutemica que cambia en cada fila de una consulta externa
- Es una combinacioacuten entre la subconsulta y la fila de la consulta externa
- Dividen consultas complejas con dos o maacutes consultas simples relacionadas
Subconsulta correlacionada
Select apellido oficiodept_no
from emp as e
where 20 lt
(select dept_no from dept as d
where edept_no = ddept_no
and ddnombre = Ventas)
SUBCONSULTAS
1 Mostrar el numero de empleado el apellido y la fecha de alta del empleado mas antiguo de la
empresa
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 65
SELECT emp_noapellido
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_noapellido
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 Jimeacutenez
select apellido oficio from emp where
oficio = (select oficio from emp where apellido = JIMENEZ)
4 Queremos saber el apellido oficio salario y nuacutemero 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 gt (select max (salario) from
emp where dept_no = 30)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 66
5 Mostrar el apellido la funcioacuten sala o departamento de todos los empleados que trabajen en la
empresa
select eApellido eOficio as [Cargo en Empresa] ddnombre as [Oficina]
from emp as e
inner join dept as d
on edept_no = ddept_no
union
select pApellido pfuncion snombre
from plantilla as p
inner join sala as s
on phospital_cod = shospital_cod
and psala_cod = ssala_cod
union
select dApellido despecialidad hnombre
from doctor as d
inner join hospital as h
on dhospital_cod = hhospital_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 = lsquoventasrsquo))
order by 2
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 67
8 Mostrar los empleados que tienen mejor salario que la media de los directores no incluyendo al
presidente
Select from emp where salario gt
(select avg (salario) from emp where oficio = DIRECTOR)
and oficio ltgt PRESIDENTE
9 Mostrar el apellido funcioacuten salario y coacutedigo 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 = lsquoENFERMEROrsquo or
funcion = lsquoENFERMERArsquo) and hospital_cod = (select hospital_cod from hospital where nombre =
lsquoSAN CARLOSrsquo)
Select apellido funcion salario hospital_cod from plantilla where
funcion in (ENFERMEROENFERMERA)
and hospital_cod = (select hospital_cod from hospital
where nombre = SAN CARLOS)
10 Visualizar los datos de los hospitales que tienen personal (Doctores) de cardiologiacutea
Select from hospital where hospital_cod in (select hospital_cod from doctor where
especialidad = lsquoCardiologiacutearsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 68
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 = lsquoPROVINCIALrsquo or
nombre= lsquoGENERALrsquo)
12 Mostrar el apellido de los enfermos que nacieron antes que el Sentildeor Miller
Select apellido from enfermo where Fecha_nac lt (select fecha_nac from enfermo where
apellido = lsquoMILLER Brsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 69
Simulacion de una clausula JOIN
Vamos a mostrar los oficios que estaacuten en maacutes de un departamento
Select distinct e1oficio from emp as e1
where e1oficio in(Select e2oficio from emp as e2
where e1dept_no ltgt e2dept_no)
Se debe utilizar antes una combinacioacuten que una subconsulta la combinacioacuten seriacutea asi dando los
mismos resultados
Select distinct e1Oficio from emp as e1
inner join emp as e2
on e1oficio = e2oficio
where e1dept_no ltgt e2dept_no
Estos son los dos oficios que estaacuten en
maacutes de un departamento
Subconsulta para simular una clausula HAVING
select e1apellidoe1oficio e1salario
from emp as e1
where e1salario gt
(select avg(e2salario) from emp as e2
where e1oficio = e2oficio)
Esta es la consulta utilizando el HAVING que es la que deberiacuteamos utilizar antes que una
subconsulta de simulacioacuten HAVING
SELECT e1apellidoe1oficio e1salario
FROM emp AS e1
INNER JOIN emp AS e2
ON e1oficio = e2oficio
GROUP BY e1oficio e1salarioe1apellido
HAVING e1salario gt AVG (e2salario)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 70
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 45
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
Ponieacutendole un alias al
grouping saldriacutea el nombre
de columna que le
indiquemos
COMPUTE
Realiza un resumen en una columna aparte con el resultado de la funcioacuten de agregado indicada Su
formato seriacutea Compute funcioacuten(campo) No se puede utilizar en aplicaciones cliente servidor es una
clausula meramente informativa Tampoco se le pueden poner alias a los resuacutemenes
Ejemplo 67
Select Productid Orderid Quantity From [Order Details] order by ProductID Orderid compute
Sum(quantity)
Vemos que muestra la
columna con la suma
total de todas las
cantidades
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 46
Ejercicios de ROLLUP GROUPING y CUBE
Ejemplo 68
Realizar una consulta que resuma la cantidad de artiacuteculos pedidos por cada iacutendice de producto y
nuacutemero de pedido Realizando un caacutelculo acumulativo
select productid as [PRODUCTO] orderid as [Nordm PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] group by productid orderid with rollup order by productid orderid
PRODUCTO Nordm 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
hellip
Ejemplo 69
Modificacioacuten al ejercicio anterior Realizar el mismo resumen pero uacutenicamente para el producto
cuyo id es 50
select productid as [PRODUCTO] orderid as [Nordm PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] where productid = 50 group by productid orderid with rollup order by productid ordered
PRODUCTO Nordm 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
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 47
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 modificacioacuten 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 [Nordm PEDIDO] grouping(orderid) as [GRUPO PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] where productid = 50 group by Productidorderid with cube order by productidorderid
PRODUCTO GRUPO PRODUCTO Nordm PEDIDO GRUPO PEDIDO SUMA TOTAL
----------- -------------- ----------- ------------ -----------
NULL 1 NULL 1 235
NULL 1 10350 0 15
NULL 1 10383 0 15
NULL 1 10429 0 40
NULL 1 10465 0 25
NULL 1 10637 0 25
NULL 1 10729 0 40
NULL 1 10751 0 20
NULL 1 10920 0 24
NULL 1 10948 0 9
NULL 1 11072 0 22
50 0 NULL 1 235
50 0 10350 0 15
50 0 10383 0 15
50 0 10429 0 40
50 0 10465 0 25
50 0 10637 0 25
50 0 10729 0 40
50 0 10751 0 20
50 0 10920 0 24
50 0 10948 0 9
50 0 11072 0 22
(22 filas afectadas)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 48
Obtencioacuten de resuacutemenes 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 maacutes columnas y
luego efectuar alguna operacioacuten de resumen sobre cada grupo asiacute generado
La diferencia con GROUP BY es que permite mostrar informacioacuten mas detallada de cada grupo
Ejemplo 71
Lista de pedidos que muestre por coacutedigo de pedido la cantidad de productos vendidos por cada uno
de ellos
select Idpedidoidproductopreciounidadcantidad[Sub Total]=sum(PreciounidadCantidad) from
[detalles de pedidos] group by Idpedidoidproductopreciounidadcantidad order by IdPedido compute
sum(Cantidad) by IdPedido
EJERCICIOS CON COMPUTE
Ejemplo 72
Generar un resumen de subtotales en una consulta que devuelva el nuacutemero de pedido la cantidad
pedida para todos los orderid 11070
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 49
Select Orderid as [Nordm PEDIDO] Quantity AS [CANTIDAD] From [Order Details] where orderid gt= 11070 order by Orderid compute Sum(quantity) by orderid compute sum(quantity)
Nordm PEDIDO CANTIDAD
----------- --------
11070 40
11070 20
11070 30
11070 20
sum
===========
110
sum
===========
110
(6 filas afectadas)
Ejemplo 73
Generar un resumen con calculo de subtotales similar al anterior pero para los orderid 11075 y
11076
Select Orderid as [Nordm PEDIDO] Quantity as [CANTIDAD] From [Order Details] where orderid = 11075 or orderid = 11076 order by Orderid compute Sum(quantity) by ordered Nordm PEDIDO CANTIDAD ----------- -------- 11075 10 11075 30 11075 2 sum =========== 42 Nordm PEDIDO CANTIDAD ----------- -------- 11076 20 11076 20 11076 10
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 50
sum =========== 50 (8 filas afectadas)
Ejemplo 74
Modificacioacuten al ejercicio anterior Agregar la cantidad total y la cantidad promedio al final del
informe
Select Orderid as [Nordm 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)
Nordm PEDIDO CANTIDAD
----------- --------
11075 10
11075 30
11075 2
sum
===========
42
Nordm PEDIDO CANTIDAD
----------- --------
11076 20
11076 20
11076 10
sum
===========
50
sum
===========
92
avg
===========
15
(10 filas afectadas)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 51
Ejemplo 75
Seleccionar de forma agrupada por tipo todos los tipos la suma de los precios y la suma del
anticipo de la tabla tiacutetulos
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 199900 50000000
business 119500 50000000
business 29900 101250000
business 199900 50000000
sum
=====================
549200
avg
=====================
62812500
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
mod_cook 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
avg
=====================
75000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
popular_comp 229500 70000000
popular_comp 200000 80000000
popular_comp NULL NULL
sum
=====================
429500
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 52
avg
=====================
75000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
psychology 215900 70000000
psychology 109500 22750000
psychology 70000 60000000
psychology 199900 20000000
psychology 79900 40000000
sum
=====================
675200
avg
=====================
42550000
(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 ademaacutes 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 199900 50000000
business 119500 50000000
business 29900 101250000
business 199900 50000000
sum
=====================
549200
sum
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 53
=====================
251250000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
mod_cook 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
popular_comp 229500 70000000
popular_comp 200000 80000000
popular_comp NULL NULL
sum
=====================
429500
sum
=====================
150000000
(30 filas afectadas)
Ejemplo 77
Generar un informe que muestre la suma de los precios de los libros de psicologiacutea 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 109500
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 54
psychology 0736 70000
psychology 0736 199900
psychology 0736 79900
sum
=====================
459300
TIPO CODIGO EDITOR PRECIO
------------ ------------- ---------------------
psychology 0877 215900
sum
=====================
215900
(7 filas afectadas)
Ejemplo 78
Generar un informe que obtenga la suma de los precios de todos los libros de psicologiacutea asiacute como la
suma de los precios de los libros de psicologiacutea 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 109500
psychology 0736 70000
psychology 0736 199900
psychology 0736 79900
sum
=====================
459300
TIPO CODIGO EDITOR PRECIO
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 55
------------ ------------- ---------------------
psychology 0877 215900
sum
=====================
215900
sum
=====================
675200
(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 199900 0000
mod_cook 0877 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO CODIGO EDITOR PRECIO ANTICIPO
------------ ------------- --------------------- ---------------------
trad_cook 0877 119500 40000000
trad_cook 0877 209500 70000000
trad_cook 0877 149900 80000000
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 56
sum
=====================
478900
sum
=====================
190000000
(9 filas afectadas)
Ejemplo 80
Generar un informe que muestre todos los tiacutetulos precio y anticipo de aquellos tiacutetulos que tengan
un precio superior a 20 doacutelares Ofreceraacute tambieacuten la suma total del precio y del anticipo
Select title as [TITULO] price as [PRECIO] advance as [ANTICIPO] From titles where price gt 20 order by title compute sum(price) compute sum(advance)
TITULO PRECIO ANTICIPO
-------------------------------------------------------------------------------- --------------------- -------------
--------
But Is It User Friendly 229500 70000000
Computer Phobic AND Non-Phobic Individuals Behavior Variations 215900
70000000
Onions Leeks and Garlic Cooking Secrets of the Mediterranean 209500
70000000
sum
=====================
654900
sum
=====================
210000000
(5 filas afectadas)
Ejemplo 81
Generar un informe que muestre el precio el tipo y el nuacutemero de editor de la tabla titles de todos
aquellas obras que pertenezcan la categoriacutea de ldquobusinessrdquo Ademaacutes apareceraacute la suma total de
precios y el maacuteximo pub_id de esta seleccioacuten
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 57
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 29900 0736
business 199900 1389
business 199900 1389
business 119500 1389
sum
=====================
549200
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 Mostraraacute la suma de los precios y los anticipos por tipo y luego calcularaacute 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 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
trad_cook 209500 70000000
trad_cook 119500 40000000
trad_cook 149900 80000000
sum
=====================
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 58
478900
sum
=====================
190000000
sum
=====================
708700
sum
=====================
340000000
(11 filas afectadas)
Eliminacioacuten 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 iquestA que precio se ah vendido los productos
Select IdProducto Preciounidad from [Detalles de pedidos] order by IdProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 59
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 mayoriacutea de las consultas que se hacen en una base de datos requiere que se lean datos procedentes
de dos oacute maacutes tablas
INNER JOIN- son las filas que satisfacen la condicioacuten de la combinacioacuten
En la siguiente sentencia SQL enlaza 2 tablas la tabla clientes y la tabla pedidos en esta ejemplo me
muestra los campos nombre compantildeiacutea y el campo idpedido
La uacutenica condicioacuten es que las 2 tablas tengan un campo en comuacuten
Ejemplo 84
select clientesNombreCompantildeiacuteapedidosidpedido from clientes inner join pedidos on
clientesidcliente=pedidosidcliente
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 60
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 pedidosIdPedido pedidosIdCliente 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 pedidosIdPedido pedidosIdCliente order
by pedidos IdPedido
CROSS JOIN
Un Cross Join es la consulta correlacionada que combine cada una de las filas de una de las tablas con
todas las filas de la otra tabla
No es necesario que exista una columna en comuacuten para ejecutar el Cross Join
Ejemplo 86
La siguiente consulta combina cada una de las filas de la tabla categoriacuteas con cada una de las filas de la
tabla productos
select productosNombreProductocategoriasNombrecategoria from productos cross join categorias
order by productosNombreProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 61
Ejercicios de consultas Muacuteltiples
Ejemplo 87
Mostrar el pedidos completo con el id=10248
Select pedidosIdPedido pedidosIdCliente
Total=sum ([detalles de pedidos]Preciounidad[detalles de pedidos]Cantidad)
From [detalles de pedidos] inner join pedidos on
[Detalles de pedidos]IdPedido=pedidosIdPedido where pedidosIdPedido=10248
Group by pedidosIdPedido pedidosIdCliente
Ejemplo 88
1 Mostrar la cantidad de productos por categoriacutea
Select CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
[Total de Producto]=sum (UnidadesEnExistencia) from Categoriacuteas inner join
Productos on CategoriacuteasIdCategoriacutea=productosIdCategoriacutea
Group by CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 62
Ejemplo 89
Calcular cuantas ventas tiene cada uno de los vendedores
Select empleadosIdEmpleado empleadosNombre empleadosApellidos
[Total de ventas]=count (pedidosIdPedido) from empleados
Inner join Pedidos on empleadosIdEmpleado=pedidosIdEmpleado
Group by empleadosIdEmpleado empleadosNombre empleadosApellidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 63
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 despueacutes saca la de Plantilla
Recomendaciones a la hora de usar las combinaciones
Combinar tablas en funcioacuten de claves principales y externas
Limite el nuacutemero de tablas de las combinaciones
Select Apellido
Oficio as
OFICIOFUNCION
salario from emp
UNION
Select Apellido
Funcion Salario from
Plantilla
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 64
SUBCONSULTAS
Es una SELECT anidada en una instruccioacuten INSERT DELETE SELECT o UPDATE
Como una tabla derivada
Select eemp_no as Numero
eApellido
from (select emp_no apellido from emp) as e
Como una expresioacuten
Select emp_no as [Numero]
Apellido
Salario
(select avg(Salario) from emp)
as Diferencia
from emp
where oficio = Empleado
Para correlacionar datos
- Expresioacuten dinaacutemica que cambia en cada fila de una consulta externa
- Es una combinacioacuten entre la subconsulta y la fila de la consulta externa
- Dividen consultas complejas con dos o maacutes consultas simples relacionadas
Subconsulta correlacionada
Select apellido oficiodept_no
from emp as e
where 20 lt
(select dept_no from dept as d
where edept_no = ddept_no
and ddnombre = Ventas)
SUBCONSULTAS
1 Mostrar el numero de empleado el apellido y la fecha de alta del empleado mas antiguo de la
empresa
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 65
SELECT emp_noapellido
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_noapellido
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 Jimeacutenez
select apellido oficio from emp where
oficio = (select oficio from emp where apellido = JIMENEZ)
4 Queremos saber el apellido oficio salario y nuacutemero 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 gt (select max (salario) from
emp where dept_no = 30)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 66
5 Mostrar el apellido la funcioacuten sala o departamento de todos los empleados que trabajen en la
empresa
select eApellido eOficio as [Cargo en Empresa] ddnombre as [Oficina]
from emp as e
inner join dept as d
on edept_no = ddept_no
union
select pApellido pfuncion snombre
from plantilla as p
inner join sala as s
on phospital_cod = shospital_cod
and psala_cod = ssala_cod
union
select dApellido despecialidad hnombre
from doctor as d
inner join hospital as h
on dhospital_cod = hhospital_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 = lsquoventasrsquo))
order by 2
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 67
8 Mostrar los empleados que tienen mejor salario que la media de los directores no incluyendo al
presidente
Select from emp where salario gt
(select avg (salario) from emp where oficio = DIRECTOR)
and oficio ltgt PRESIDENTE
9 Mostrar el apellido funcioacuten salario y coacutedigo 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 = lsquoENFERMEROrsquo or
funcion = lsquoENFERMERArsquo) and hospital_cod = (select hospital_cod from hospital where nombre =
lsquoSAN CARLOSrsquo)
Select apellido funcion salario hospital_cod from plantilla where
funcion in (ENFERMEROENFERMERA)
and hospital_cod = (select hospital_cod from hospital
where nombre = SAN CARLOS)
10 Visualizar los datos de los hospitales que tienen personal (Doctores) de cardiologiacutea
Select from hospital where hospital_cod in (select hospital_cod from doctor where
especialidad = lsquoCardiologiacutearsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 68
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 = lsquoPROVINCIALrsquo or
nombre= lsquoGENERALrsquo)
12 Mostrar el apellido de los enfermos que nacieron antes que el Sentildeor Miller
Select apellido from enfermo where Fecha_nac lt (select fecha_nac from enfermo where
apellido = lsquoMILLER Brsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 69
Simulacion de una clausula JOIN
Vamos a mostrar los oficios que estaacuten en maacutes de un departamento
Select distinct e1oficio from emp as e1
where e1oficio in(Select e2oficio from emp as e2
where e1dept_no ltgt e2dept_no)
Se debe utilizar antes una combinacioacuten que una subconsulta la combinacioacuten seriacutea asi dando los
mismos resultados
Select distinct e1Oficio from emp as e1
inner join emp as e2
on e1oficio = e2oficio
where e1dept_no ltgt e2dept_no
Estos son los dos oficios que estaacuten en
maacutes de un departamento
Subconsulta para simular una clausula HAVING
select e1apellidoe1oficio e1salario
from emp as e1
where e1salario gt
(select avg(e2salario) from emp as e2
where e1oficio = e2oficio)
Esta es la consulta utilizando el HAVING que es la que deberiacuteamos utilizar antes que una
subconsulta de simulacioacuten HAVING
SELECT e1apellidoe1oficio e1salario
FROM emp AS e1
INNER JOIN emp AS e2
ON e1oficio = e2oficio
GROUP BY e1oficio e1salarioe1apellido
HAVING e1salario gt AVG (e2salario)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 70
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 46
Ejercicios de ROLLUP GROUPING y CUBE
Ejemplo 68
Realizar una consulta que resuma la cantidad de artiacuteculos pedidos por cada iacutendice de producto y
nuacutemero de pedido Realizando un caacutelculo acumulativo
select productid as [PRODUCTO] orderid as [Nordm PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] group by productid orderid with rollup order by productid orderid
PRODUCTO Nordm 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
hellip
Ejemplo 69
Modificacioacuten al ejercicio anterior Realizar el mismo resumen pero uacutenicamente para el producto
cuyo id es 50
select productid as [PRODUCTO] orderid as [Nordm PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] where productid = 50 group by productid orderid with rollup order by productid ordered
PRODUCTO Nordm 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
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 47
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 modificacioacuten 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 [Nordm PEDIDO] grouping(orderid) as [GRUPO PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] where productid = 50 group by Productidorderid with cube order by productidorderid
PRODUCTO GRUPO PRODUCTO Nordm PEDIDO GRUPO PEDIDO SUMA TOTAL
----------- -------------- ----------- ------------ -----------
NULL 1 NULL 1 235
NULL 1 10350 0 15
NULL 1 10383 0 15
NULL 1 10429 0 40
NULL 1 10465 0 25
NULL 1 10637 0 25
NULL 1 10729 0 40
NULL 1 10751 0 20
NULL 1 10920 0 24
NULL 1 10948 0 9
NULL 1 11072 0 22
50 0 NULL 1 235
50 0 10350 0 15
50 0 10383 0 15
50 0 10429 0 40
50 0 10465 0 25
50 0 10637 0 25
50 0 10729 0 40
50 0 10751 0 20
50 0 10920 0 24
50 0 10948 0 9
50 0 11072 0 22
(22 filas afectadas)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 48
Obtencioacuten de resuacutemenes 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 maacutes columnas y
luego efectuar alguna operacioacuten de resumen sobre cada grupo asiacute generado
La diferencia con GROUP BY es que permite mostrar informacioacuten mas detallada de cada grupo
Ejemplo 71
Lista de pedidos que muestre por coacutedigo de pedido la cantidad de productos vendidos por cada uno
de ellos
select Idpedidoidproductopreciounidadcantidad[Sub Total]=sum(PreciounidadCantidad) from
[detalles de pedidos] group by Idpedidoidproductopreciounidadcantidad order by IdPedido compute
sum(Cantidad) by IdPedido
EJERCICIOS CON COMPUTE
Ejemplo 72
Generar un resumen de subtotales en una consulta que devuelva el nuacutemero de pedido la cantidad
pedida para todos los orderid 11070
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 49
Select Orderid as [Nordm PEDIDO] Quantity AS [CANTIDAD] From [Order Details] where orderid gt= 11070 order by Orderid compute Sum(quantity) by orderid compute sum(quantity)
Nordm PEDIDO CANTIDAD
----------- --------
11070 40
11070 20
11070 30
11070 20
sum
===========
110
sum
===========
110
(6 filas afectadas)
Ejemplo 73
Generar un resumen con calculo de subtotales similar al anterior pero para los orderid 11075 y
11076
Select Orderid as [Nordm PEDIDO] Quantity as [CANTIDAD] From [Order Details] where orderid = 11075 or orderid = 11076 order by Orderid compute Sum(quantity) by ordered Nordm PEDIDO CANTIDAD ----------- -------- 11075 10 11075 30 11075 2 sum =========== 42 Nordm PEDIDO CANTIDAD ----------- -------- 11076 20 11076 20 11076 10
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 50
sum =========== 50 (8 filas afectadas)
Ejemplo 74
Modificacioacuten al ejercicio anterior Agregar la cantidad total y la cantidad promedio al final del
informe
Select Orderid as [Nordm 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)
Nordm PEDIDO CANTIDAD
----------- --------
11075 10
11075 30
11075 2
sum
===========
42
Nordm PEDIDO CANTIDAD
----------- --------
11076 20
11076 20
11076 10
sum
===========
50
sum
===========
92
avg
===========
15
(10 filas afectadas)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 51
Ejemplo 75
Seleccionar de forma agrupada por tipo todos los tipos la suma de los precios y la suma del
anticipo de la tabla tiacutetulos
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 199900 50000000
business 119500 50000000
business 29900 101250000
business 199900 50000000
sum
=====================
549200
avg
=====================
62812500
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
mod_cook 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
avg
=====================
75000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
popular_comp 229500 70000000
popular_comp 200000 80000000
popular_comp NULL NULL
sum
=====================
429500
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 52
avg
=====================
75000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
psychology 215900 70000000
psychology 109500 22750000
psychology 70000 60000000
psychology 199900 20000000
psychology 79900 40000000
sum
=====================
675200
avg
=====================
42550000
(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 ademaacutes 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 199900 50000000
business 119500 50000000
business 29900 101250000
business 199900 50000000
sum
=====================
549200
sum
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 53
=====================
251250000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
mod_cook 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
popular_comp 229500 70000000
popular_comp 200000 80000000
popular_comp NULL NULL
sum
=====================
429500
sum
=====================
150000000
(30 filas afectadas)
Ejemplo 77
Generar un informe que muestre la suma de los precios de los libros de psicologiacutea 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 109500
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 54
psychology 0736 70000
psychology 0736 199900
psychology 0736 79900
sum
=====================
459300
TIPO CODIGO EDITOR PRECIO
------------ ------------- ---------------------
psychology 0877 215900
sum
=====================
215900
(7 filas afectadas)
Ejemplo 78
Generar un informe que obtenga la suma de los precios de todos los libros de psicologiacutea asiacute como la
suma de los precios de los libros de psicologiacutea 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 109500
psychology 0736 70000
psychology 0736 199900
psychology 0736 79900
sum
=====================
459300
TIPO CODIGO EDITOR PRECIO
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 55
------------ ------------- ---------------------
psychology 0877 215900
sum
=====================
215900
sum
=====================
675200
(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 199900 0000
mod_cook 0877 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO CODIGO EDITOR PRECIO ANTICIPO
------------ ------------- --------------------- ---------------------
trad_cook 0877 119500 40000000
trad_cook 0877 209500 70000000
trad_cook 0877 149900 80000000
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 56
sum
=====================
478900
sum
=====================
190000000
(9 filas afectadas)
Ejemplo 80
Generar un informe que muestre todos los tiacutetulos precio y anticipo de aquellos tiacutetulos que tengan
un precio superior a 20 doacutelares Ofreceraacute tambieacuten la suma total del precio y del anticipo
Select title as [TITULO] price as [PRECIO] advance as [ANTICIPO] From titles where price gt 20 order by title compute sum(price) compute sum(advance)
TITULO PRECIO ANTICIPO
-------------------------------------------------------------------------------- --------------------- -------------
--------
But Is It User Friendly 229500 70000000
Computer Phobic AND Non-Phobic Individuals Behavior Variations 215900
70000000
Onions Leeks and Garlic Cooking Secrets of the Mediterranean 209500
70000000
sum
=====================
654900
sum
=====================
210000000
(5 filas afectadas)
Ejemplo 81
Generar un informe que muestre el precio el tipo y el nuacutemero de editor de la tabla titles de todos
aquellas obras que pertenezcan la categoriacutea de ldquobusinessrdquo Ademaacutes apareceraacute la suma total de
precios y el maacuteximo pub_id de esta seleccioacuten
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 57
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 29900 0736
business 199900 1389
business 199900 1389
business 119500 1389
sum
=====================
549200
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 Mostraraacute la suma de los precios y los anticipos por tipo y luego calcularaacute 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 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
trad_cook 209500 70000000
trad_cook 119500 40000000
trad_cook 149900 80000000
sum
=====================
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 58
478900
sum
=====================
190000000
sum
=====================
708700
sum
=====================
340000000
(11 filas afectadas)
Eliminacioacuten 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 iquestA que precio se ah vendido los productos
Select IdProducto Preciounidad from [Detalles de pedidos] order by IdProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 59
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 mayoriacutea de las consultas que se hacen en una base de datos requiere que se lean datos procedentes
de dos oacute maacutes tablas
INNER JOIN- son las filas que satisfacen la condicioacuten de la combinacioacuten
En la siguiente sentencia SQL enlaza 2 tablas la tabla clientes y la tabla pedidos en esta ejemplo me
muestra los campos nombre compantildeiacutea y el campo idpedido
La uacutenica condicioacuten es que las 2 tablas tengan un campo en comuacuten
Ejemplo 84
select clientesNombreCompantildeiacuteapedidosidpedido from clientes inner join pedidos on
clientesidcliente=pedidosidcliente
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 60
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 pedidosIdPedido pedidosIdCliente 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 pedidosIdPedido pedidosIdCliente order
by pedidos IdPedido
CROSS JOIN
Un Cross Join es la consulta correlacionada que combine cada una de las filas de una de las tablas con
todas las filas de la otra tabla
No es necesario que exista una columna en comuacuten para ejecutar el Cross Join
Ejemplo 86
La siguiente consulta combina cada una de las filas de la tabla categoriacuteas con cada una de las filas de la
tabla productos
select productosNombreProductocategoriasNombrecategoria from productos cross join categorias
order by productosNombreProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 61
Ejercicios de consultas Muacuteltiples
Ejemplo 87
Mostrar el pedidos completo con el id=10248
Select pedidosIdPedido pedidosIdCliente
Total=sum ([detalles de pedidos]Preciounidad[detalles de pedidos]Cantidad)
From [detalles de pedidos] inner join pedidos on
[Detalles de pedidos]IdPedido=pedidosIdPedido where pedidosIdPedido=10248
Group by pedidosIdPedido pedidosIdCliente
Ejemplo 88
1 Mostrar la cantidad de productos por categoriacutea
Select CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
[Total de Producto]=sum (UnidadesEnExistencia) from Categoriacuteas inner join
Productos on CategoriacuteasIdCategoriacutea=productosIdCategoriacutea
Group by CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 62
Ejemplo 89
Calcular cuantas ventas tiene cada uno de los vendedores
Select empleadosIdEmpleado empleadosNombre empleadosApellidos
[Total de ventas]=count (pedidosIdPedido) from empleados
Inner join Pedidos on empleadosIdEmpleado=pedidosIdEmpleado
Group by empleadosIdEmpleado empleadosNombre empleadosApellidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 63
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 despueacutes saca la de Plantilla
Recomendaciones a la hora de usar las combinaciones
Combinar tablas en funcioacuten de claves principales y externas
Limite el nuacutemero de tablas de las combinaciones
Select Apellido
Oficio as
OFICIOFUNCION
salario from emp
UNION
Select Apellido
Funcion Salario from
Plantilla
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 64
SUBCONSULTAS
Es una SELECT anidada en una instruccioacuten INSERT DELETE SELECT o UPDATE
Como una tabla derivada
Select eemp_no as Numero
eApellido
from (select emp_no apellido from emp) as e
Como una expresioacuten
Select emp_no as [Numero]
Apellido
Salario
(select avg(Salario) from emp)
as Diferencia
from emp
where oficio = Empleado
Para correlacionar datos
- Expresioacuten dinaacutemica que cambia en cada fila de una consulta externa
- Es una combinacioacuten entre la subconsulta y la fila de la consulta externa
- Dividen consultas complejas con dos o maacutes consultas simples relacionadas
Subconsulta correlacionada
Select apellido oficiodept_no
from emp as e
where 20 lt
(select dept_no from dept as d
where edept_no = ddept_no
and ddnombre = Ventas)
SUBCONSULTAS
1 Mostrar el numero de empleado el apellido y la fecha de alta del empleado mas antiguo de la
empresa
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 65
SELECT emp_noapellido
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_noapellido
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 Jimeacutenez
select apellido oficio from emp where
oficio = (select oficio from emp where apellido = JIMENEZ)
4 Queremos saber el apellido oficio salario y nuacutemero 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 gt (select max (salario) from
emp where dept_no = 30)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 66
5 Mostrar el apellido la funcioacuten sala o departamento de todos los empleados que trabajen en la
empresa
select eApellido eOficio as [Cargo en Empresa] ddnombre as [Oficina]
from emp as e
inner join dept as d
on edept_no = ddept_no
union
select pApellido pfuncion snombre
from plantilla as p
inner join sala as s
on phospital_cod = shospital_cod
and psala_cod = ssala_cod
union
select dApellido despecialidad hnombre
from doctor as d
inner join hospital as h
on dhospital_cod = hhospital_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 = lsquoventasrsquo))
order by 2
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 67
8 Mostrar los empleados que tienen mejor salario que la media de los directores no incluyendo al
presidente
Select from emp where salario gt
(select avg (salario) from emp where oficio = DIRECTOR)
and oficio ltgt PRESIDENTE
9 Mostrar el apellido funcioacuten salario y coacutedigo 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 = lsquoENFERMEROrsquo or
funcion = lsquoENFERMERArsquo) and hospital_cod = (select hospital_cod from hospital where nombre =
lsquoSAN CARLOSrsquo)
Select apellido funcion salario hospital_cod from plantilla where
funcion in (ENFERMEROENFERMERA)
and hospital_cod = (select hospital_cod from hospital
where nombre = SAN CARLOS)
10 Visualizar los datos de los hospitales que tienen personal (Doctores) de cardiologiacutea
Select from hospital where hospital_cod in (select hospital_cod from doctor where
especialidad = lsquoCardiologiacutearsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 68
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 = lsquoPROVINCIALrsquo or
nombre= lsquoGENERALrsquo)
12 Mostrar el apellido de los enfermos que nacieron antes que el Sentildeor Miller
Select apellido from enfermo where Fecha_nac lt (select fecha_nac from enfermo where
apellido = lsquoMILLER Brsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 69
Simulacion de una clausula JOIN
Vamos a mostrar los oficios que estaacuten en maacutes de un departamento
Select distinct e1oficio from emp as e1
where e1oficio in(Select e2oficio from emp as e2
where e1dept_no ltgt e2dept_no)
Se debe utilizar antes una combinacioacuten que una subconsulta la combinacioacuten seriacutea asi dando los
mismos resultados
Select distinct e1Oficio from emp as e1
inner join emp as e2
on e1oficio = e2oficio
where e1dept_no ltgt e2dept_no
Estos son los dos oficios que estaacuten en
maacutes de un departamento
Subconsulta para simular una clausula HAVING
select e1apellidoe1oficio e1salario
from emp as e1
where e1salario gt
(select avg(e2salario) from emp as e2
where e1oficio = e2oficio)
Esta es la consulta utilizando el HAVING que es la que deberiacuteamos utilizar antes que una
subconsulta de simulacioacuten HAVING
SELECT e1apellidoe1oficio e1salario
FROM emp AS e1
INNER JOIN emp AS e2
ON e1oficio = e2oficio
GROUP BY e1oficio e1salarioe1apellido
HAVING e1salario gt AVG (e2salario)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 70
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 47
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 modificacioacuten 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 [Nordm PEDIDO] grouping(orderid) as [GRUPO PEDIDO] sum(quantity) as [SUMA TOTAL] from [Order Details] where productid = 50 group by Productidorderid with cube order by productidorderid
PRODUCTO GRUPO PRODUCTO Nordm PEDIDO GRUPO PEDIDO SUMA TOTAL
----------- -------------- ----------- ------------ -----------
NULL 1 NULL 1 235
NULL 1 10350 0 15
NULL 1 10383 0 15
NULL 1 10429 0 40
NULL 1 10465 0 25
NULL 1 10637 0 25
NULL 1 10729 0 40
NULL 1 10751 0 20
NULL 1 10920 0 24
NULL 1 10948 0 9
NULL 1 11072 0 22
50 0 NULL 1 235
50 0 10350 0 15
50 0 10383 0 15
50 0 10429 0 40
50 0 10465 0 25
50 0 10637 0 25
50 0 10729 0 40
50 0 10751 0 20
50 0 10920 0 24
50 0 10948 0 9
50 0 11072 0 22
(22 filas afectadas)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 48
Obtencioacuten de resuacutemenes 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 maacutes columnas y
luego efectuar alguna operacioacuten de resumen sobre cada grupo asiacute generado
La diferencia con GROUP BY es que permite mostrar informacioacuten mas detallada de cada grupo
Ejemplo 71
Lista de pedidos que muestre por coacutedigo de pedido la cantidad de productos vendidos por cada uno
de ellos
select Idpedidoidproductopreciounidadcantidad[Sub Total]=sum(PreciounidadCantidad) from
[detalles de pedidos] group by Idpedidoidproductopreciounidadcantidad order by IdPedido compute
sum(Cantidad) by IdPedido
EJERCICIOS CON COMPUTE
Ejemplo 72
Generar un resumen de subtotales en una consulta que devuelva el nuacutemero de pedido la cantidad
pedida para todos los orderid 11070
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 49
Select Orderid as [Nordm PEDIDO] Quantity AS [CANTIDAD] From [Order Details] where orderid gt= 11070 order by Orderid compute Sum(quantity) by orderid compute sum(quantity)
Nordm PEDIDO CANTIDAD
----------- --------
11070 40
11070 20
11070 30
11070 20
sum
===========
110
sum
===========
110
(6 filas afectadas)
Ejemplo 73
Generar un resumen con calculo de subtotales similar al anterior pero para los orderid 11075 y
11076
Select Orderid as [Nordm PEDIDO] Quantity as [CANTIDAD] From [Order Details] where orderid = 11075 or orderid = 11076 order by Orderid compute Sum(quantity) by ordered Nordm PEDIDO CANTIDAD ----------- -------- 11075 10 11075 30 11075 2 sum =========== 42 Nordm PEDIDO CANTIDAD ----------- -------- 11076 20 11076 20 11076 10
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 50
sum =========== 50 (8 filas afectadas)
Ejemplo 74
Modificacioacuten al ejercicio anterior Agregar la cantidad total y la cantidad promedio al final del
informe
Select Orderid as [Nordm 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)
Nordm PEDIDO CANTIDAD
----------- --------
11075 10
11075 30
11075 2
sum
===========
42
Nordm PEDIDO CANTIDAD
----------- --------
11076 20
11076 20
11076 10
sum
===========
50
sum
===========
92
avg
===========
15
(10 filas afectadas)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 51
Ejemplo 75
Seleccionar de forma agrupada por tipo todos los tipos la suma de los precios y la suma del
anticipo de la tabla tiacutetulos
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 199900 50000000
business 119500 50000000
business 29900 101250000
business 199900 50000000
sum
=====================
549200
avg
=====================
62812500
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
mod_cook 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
avg
=====================
75000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
popular_comp 229500 70000000
popular_comp 200000 80000000
popular_comp NULL NULL
sum
=====================
429500
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 52
avg
=====================
75000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
psychology 215900 70000000
psychology 109500 22750000
psychology 70000 60000000
psychology 199900 20000000
psychology 79900 40000000
sum
=====================
675200
avg
=====================
42550000
(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 ademaacutes 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 199900 50000000
business 119500 50000000
business 29900 101250000
business 199900 50000000
sum
=====================
549200
sum
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 53
=====================
251250000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
mod_cook 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
popular_comp 229500 70000000
popular_comp 200000 80000000
popular_comp NULL NULL
sum
=====================
429500
sum
=====================
150000000
(30 filas afectadas)
Ejemplo 77
Generar un informe que muestre la suma de los precios de los libros de psicologiacutea 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 109500
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 54
psychology 0736 70000
psychology 0736 199900
psychology 0736 79900
sum
=====================
459300
TIPO CODIGO EDITOR PRECIO
------------ ------------- ---------------------
psychology 0877 215900
sum
=====================
215900
(7 filas afectadas)
Ejemplo 78
Generar un informe que obtenga la suma de los precios de todos los libros de psicologiacutea asiacute como la
suma de los precios de los libros de psicologiacutea 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 109500
psychology 0736 70000
psychology 0736 199900
psychology 0736 79900
sum
=====================
459300
TIPO CODIGO EDITOR PRECIO
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 55
------------ ------------- ---------------------
psychology 0877 215900
sum
=====================
215900
sum
=====================
675200
(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 199900 0000
mod_cook 0877 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO CODIGO EDITOR PRECIO ANTICIPO
------------ ------------- --------------------- ---------------------
trad_cook 0877 119500 40000000
trad_cook 0877 209500 70000000
trad_cook 0877 149900 80000000
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 56
sum
=====================
478900
sum
=====================
190000000
(9 filas afectadas)
Ejemplo 80
Generar un informe que muestre todos los tiacutetulos precio y anticipo de aquellos tiacutetulos que tengan
un precio superior a 20 doacutelares Ofreceraacute tambieacuten la suma total del precio y del anticipo
Select title as [TITULO] price as [PRECIO] advance as [ANTICIPO] From titles where price gt 20 order by title compute sum(price) compute sum(advance)
TITULO PRECIO ANTICIPO
-------------------------------------------------------------------------------- --------------------- -------------
--------
But Is It User Friendly 229500 70000000
Computer Phobic AND Non-Phobic Individuals Behavior Variations 215900
70000000
Onions Leeks and Garlic Cooking Secrets of the Mediterranean 209500
70000000
sum
=====================
654900
sum
=====================
210000000
(5 filas afectadas)
Ejemplo 81
Generar un informe que muestre el precio el tipo y el nuacutemero de editor de la tabla titles de todos
aquellas obras que pertenezcan la categoriacutea de ldquobusinessrdquo Ademaacutes apareceraacute la suma total de
precios y el maacuteximo pub_id de esta seleccioacuten
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 57
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 29900 0736
business 199900 1389
business 199900 1389
business 119500 1389
sum
=====================
549200
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 Mostraraacute la suma de los precios y los anticipos por tipo y luego calcularaacute 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 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
trad_cook 209500 70000000
trad_cook 119500 40000000
trad_cook 149900 80000000
sum
=====================
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 58
478900
sum
=====================
190000000
sum
=====================
708700
sum
=====================
340000000
(11 filas afectadas)
Eliminacioacuten 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 iquestA que precio se ah vendido los productos
Select IdProducto Preciounidad from [Detalles de pedidos] order by IdProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 59
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 mayoriacutea de las consultas que se hacen en una base de datos requiere que se lean datos procedentes
de dos oacute maacutes tablas
INNER JOIN- son las filas que satisfacen la condicioacuten de la combinacioacuten
En la siguiente sentencia SQL enlaza 2 tablas la tabla clientes y la tabla pedidos en esta ejemplo me
muestra los campos nombre compantildeiacutea y el campo idpedido
La uacutenica condicioacuten es que las 2 tablas tengan un campo en comuacuten
Ejemplo 84
select clientesNombreCompantildeiacuteapedidosidpedido from clientes inner join pedidos on
clientesidcliente=pedidosidcliente
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 60
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 pedidosIdPedido pedidosIdCliente 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 pedidosIdPedido pedidosIdCliente order
by pedidos IdPedido
CROSS JOIN
Un Cross Join es la consulta correlacionada que combine cada una de las filas de una de las tablas con
todas las filas de la otra tabla
No es necesario que exista una columna en comuacuten para ejecutar el Cross Join
Ejemplo 86
La siguiente consulta combina cada una de las filas de la tabla categoriacuteas con cada una de las filas de la
tabla productos
select productosNombreProductocategoriasNombrecategoria from productos cross join categorias
order by productosNombreProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 61
Ejercicios de consultas Muacuteltiples
Ejemplo 87
Mostrar el pedidos completo con el id=10248
Select pedidosIdPedido pedidosIdCliente
Total=sum ([detalles de pedidos]Preciounidad[detalles de pedidos]Cantidad)
From [detalles de pedidos] inner join pedidos on
[Detalles de pedidos]IdPedido=pedidosIdPedido where pedidosIdPedido=10248
Group by pedidosIdPedido pedidosIdCliente
Ejemplo 88
1 Mostrar la cantidad de productos por categoriacutea
Select CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
[Total de Producto]=sum (UnidadesEnExistencia) from Categoriacuteas inner join
Productos on CategoriacuteasIdCategoriacutea=productosIdCategoriacutea
Group by CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 62
Ejemplo 89
Calcular cuantas ventas tiene cada uno de los vendedores
Select empleadosIdEmpleado empleadosNombre empleadosApellidos
[Total de ventas]=count (pedidosIdPedido) from empleados
Inner join Pedidos on empleadosIdEmpleado=pedidosIdEmpleado
Group by empleadosIdEmpleado empleadosNombre empleadosApellidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 63
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 despueacutes saca la de Plantilla
Recomendaciones a la hora de usar las combinaciones
Combinar tablas en funcioacuten de claves principales y externas
Limite el nuacutemero de tablas de las combinaciones
Select Apellido
Oficio as
OFICIOFUNCION
salario from emp
UNION
Select Apellido
Funcion Salario from
Plantilla
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 64
SUBCONSULTAS
Es una SELECT anidada en una instruccioacuten INSERT DELETE SELECT o UPDATE
Como una tabla derivada
Select eemp_no as Numero
eApellido
from (select emp_no apellido from emp) as e
Como una expresioacuten
Select emp_no as [Numero]
Apellido
Salario
(select avg(Salario) from emp)
as Diferencia
from emp
where oficio = Empleado
Para correlacionar datos
- Expresioacuten dinaacutemica que cambia en cada fila de una consulta externa
- Es una combinacioacuten entre la subconsulta y la fila de la consulta externa
- Dividen consultas complejas con dos o maacutes consultas simples relacionadas
Subconsulta correlacionada
Select apellido oficiodept_no
from emp as e
where 20 lt
(select dept_no from dept as d
where edept_no = ddept_no
and ddnombre = Ventas)
SUBCONSULTAS
1 Mostrar el numero de empleado el apellido y la fecha de alta del empleado mas antiguo de la
empresa
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 65
SELECT emp_noapellido
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_noapellido
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 Jimeacutenez
select apellido oficio from emp where
oficio = (select oficio from emp where apellido = JIMENEZ)
4 Queremos saber el apellido oficio salario y nuacutemero 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 gt (select max (salario) from
emp where dept_no = 30)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 66
5 Mostrar el apellido la funcioacuten sala o departamento de todos los empleados que trabajen en la
empresa
select eApellido eOficio as [Cargo en Empresa] ddnombre as [Oficina]
from emp as e
inner join dept as d
on edept_no = ddept_no
union
select pApellido pfuncion snombre
from plantilla as p
inner join sala as s
on phospital_cod = shospital_cod
and psala_cod = ssala_cod
union
select dApellido despecialidad hnombre
from doctor as d
inner join hospital as h
on dhospital_cod = hhospital_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 = lsquoventasrsquo))
order by 2
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 67
8 Mostrar los empleados que tienen mejor salario que la media de los directores no incluyendo al
presidente
Select from emp where salario gt
(select avg (salario) from emp where oficio = DIRECTOR)
and oficio ltgt PRESIDENTE
9 Mostrar el apellido funcioacuten salario y coacutedigo 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 = lsquoENFERMEROrsquo or
funcion = lsquoENFERMERArsquo) and hospital_cod = (select hospital_cod from hospital where nombre =
lsquoSAN CARLOSrsquo)
Select apellido funcion salario hospital_cod from plantilla where
funcion in (ENFERMEROENFERMERA)
and hospital_cod = (select hospital_cod from hospital
where nombre = SAN CARLOS)
10 Visualizar los datos de los hospitales que tienen personal (Doctores) de cardiologiacutea
Select from hospital where hospital_cod in (select hospital_cod from doctor where
especialidad = lsquoCardiologiacutearsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 68
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 = lsquoPROVINCIALrsquo or
nombre= lsquoGENERALrsquo)
12 Mostrar el apellido de los enfermos que nacieron antes que el Sentildeor Miller
Select apellido from enfermo where Fecha_nac lt (select fecha_nac from enfermo where
apellido = lsquoMILLER Brsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 69
Simulacion de una clausula JOIN
Vamos a mostrar los oficios que estaacuten en maacutes de un departamento
Select distinct e1oficio from emp as e1
where e1oficio in(Select e2oficio from emp as e2
where e1dept_no ltgt e2dept_no)
Se debe utilizar antes una combinacioacuten que una subconsulta la combinacioacuten seriacutea asi dando los
mismos resultados
Select distinct e1Oficio from emp as e1
inner join emp as e2
on e1oficio = e2oficio
where e1dept_no ltgt e2dept_no
Estos son los dos oficios que estaacuten en
maacutes de un departamento
Subconsulta para simular una clausula HAVING
select e1apellidoe1oficio e1salario
from emp as e1
where e1salario gt
(select avg(e2salario) from emp as e2
where e1oficio = e2oficio)
Esta es la consulta utilizando el HAVING que es la que deberiacuteamos utilizar antes que una
subconsulta de simulacioacuten HAVING
SELECT e1apellidoe1oficio e1salario
FROM emp AS e1
INNER JOIN emp AS e2
ON e1oficio = e2oficio
GROUP BY e1oficio e1salarioe1apellido
HAVING e1salario gt AVG (e2salario)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 70
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 48
Obtencioacuten de resuacutemenes 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 maacutes columnas y
luego efectuar alguna operacioacuten de resumen sobre cada grupo asiacute generado
La diferencia con GROUP BY es que permite mostrar informacioacuten mas detallada de cada grupo
Ejemplo 71
Lista de pedidos que muestre por coacutedigo de pedido la cantidad de productos vendidos por cada uno
de ellos
select Idpedidoidproductopreciounidadcantidad[Sub Total]=sum(PreciounidadCantidad) from
[detalles de pedidos] group by Idpedidoidproductopreciounidadcantidad order by IdPedido compute
sum(Cantidad) by IdPedido
EJERCICIOS CON COMPUTE
Ejemplo 72
Generar un resumen de subtotales en una consulta que devuelva el nuacutemero de pedido la cantidad
pedida para todos los orderid 11070
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 49
Select Orderid as [Nordm PEDIDO] Quantity AS [CANTIDAD] From [Order Details] where orderid gt= 11070 order by Orderid compute Sum(quantity) by orderid compute sum(quantity)
Nordm PEDIDO CANTIDAD
----------- --------
11070 40
11070 20
11070 30
11070 20
sum
===========
110
sum
===========
110
(6 filas afectadas)
Ejemplo 73
Generar un resumen con calculo de subtotales similar al anterior pero para los orderid 11075 y
11076
Select Orderid as [Nordm PEDIDO] Quantity as [CANTIDAD] From [Order Details] where orderid = 11075 or orderid = 11076 order by Orderid compute Sum(quantity) by ordered Nordm PEDIDO CANTIDAD ----------- -------- 11075 10 11075 30 11075 2 sum =========== 42 Nordm PEDIDO CANTIDAD ----------- -------- 11076 20 11076 20 11076 10
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 50
sum =========== 50 (8 filas afectadas)
Ejemplo 74
Modificacioacuten al ejercicio anterior Agregar la cantidad total y la cantidad promedio al final del
informe
Select Orderid as [Nordm 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)
Nordm PEDIDO CANTIDAD
----------- --------
11075 10
11075 30
11075 2
sum
===========
42
Nordm PEDIDO CANTIDAD
----------- --------
11076 20
11076 20
11076 10
sum
===========
50
sum
===========
92
avg
===========
15
(10 filas afectadas)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 51
Ejemplo 75
Seleccionar de forma agrupada por tipo todos los tipos la suma de los precios y la suma del
anticipo de la tabla tiacutetulos
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 199900 50000000
business 119500 50000000
business 29900 101250000
business 199900 50000000
sum
=====================
549200
avg
=====================
62812500
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
mod_cook 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
avg
=====================
75000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
popular_comp 229500 70000000
popular_comp 200000 80000000
popular_comp NULL NULL
sum
=====================
429500
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 52
avg
=====================
75000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
psychology 215900 70000000
psychology 109500 22750000
psychology 70000 60000000
psychology 199900 20000000
psychology 79900 40000000
sum
=====================
675200
avg
=====================
42550000
(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 ademaacutes 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 199900 50000000
business 119500 50000000
business 29900 101250000
business 199900 50000000
sum
=====================
549200
sum
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 53
=====================
251250000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
mod_cook 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
popular_comp 229500 70000000
popular_comp 200000 80000000
popular_comp NULL NULL
sum
=====================
429500
sum
=====================
150000000
(30 filas afectadas)
Ejemplo 77
Generar un informe que muestre la suma de los precios de los libros de psicologiacutea 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 109500
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 54
psychology 0736 70000
psychology 0736 199900
psychology 0736 79900
sum
=====================
459300
TIPO CODIGO EDITOR PRECIO
------------ ------------- ---------------------
psychology 0877 215900
sum
=====================
215900
(7 filas afectadas)
Ejemplo 78
Generar un informe que obtenga la suma de los precios de todos los libros de psicologiacutea asiacute como la
suma de los precios de los libros de psicologiacutea 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 109500
psychology 0736 70000
psychology 0736 199900
psychology 0736 79900
sum
=====================
459300
TIPO CODIGO EDITOR PRECIO
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 55
------------ ------------- ---------------------
psychology 0877 215900
sum
=====================
215900
sum
=====================
675200
(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 199900 0000
mod_cook 0877 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO CODIGO EDITOR PRECIO ANTICIPO
------------ ------------- --------------------- ---------------------
trad_cook 0877 119500 40000000
trad_cook 0877 209500 70000000
trad_cook 0877 149900 80000000
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 56
sum
=====================
478900
sum
=====================
190000000
(9 filas afectadas)
Ejemplo 80
Generar un informe que muestre todos los tiacutetulos precio y anticipo de aquellos tiacutetulos que tengan
un precio superior a 20 doacutelares Ofreceraacute tambieacuten la suma total del precio y del anticipo
Select title as [TITULO] price as [PRECIO] advance as [ANTICIPO] From titles where price gt 20 order by title compute sum(price) compute sum(advance)
TITULO PRECIO ANTICIPO
-------------------------------------------------------------------------------- --------------------- -------------
--------
But Is It User Friendly 229500 70000000
Computer Phobic AND Non-Phobic Individuals Behavior Variations 215900
70000000
Onions Leeks and Garlic Cooking Secrets of the Mediterranean 209500
70000000
sum
=====================
654900
sum
=====================
210000000
(5 filas afectadas)
Ejemplo 81
Generar un informe que muestre el precio el tipo y el nuacutemero de editor de la tabla titles de todos
aquellas obras que pertenezcan la categoriacutea de ldquobusinessrdquo Ademaacutes apareceraacute la suma total de
precios y el maacuteximo pub_id de esta seleccioacuten
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 57
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 29900 0736
business 199900 1389
business 199900 1389
business 119500 1389
sum
=====================
549200
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 Mostraraacute la suma de los precios y los anticipos por tipo y luego calcularaacute 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 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
trad_cook 209500 70000000
trad_cook 119500 40000000
trad_cook 149900 80000000
sum
=====================
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 58
478900
sum
=====================
190000000
sum
=====================
708700
sum
=====================
340000000
(11 filas afectadas)
Eliminacioacuten 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 iquestA que precio se ah vendido los productos
Select IdProducto Preciounidad from [Detalles de pedidos] order by IdProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 59
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 mayoriacutea de las consultas que se hacen en una base de datos requiere que se lean datos procedentes
de dos oacute maacutes tablas
INNER JOIN- son las filas que satisfacen la condicioacuten de la combinacioacuten
En la siguiente sentencia SQL enlaza 2 tablas la tabla clientes y la tabla pedidos en esta ejemplo me
muestra los campos nombre compantildeiacutea y el campo idpedido
La uacutenica condicioacuten es que las 2 tablas tengan un campo en comuacuten
Ejemplo 84
select clientesNombreCompantildeiacuteapedidosidpedido from clientes inner join pedidos on
clientesidcliente=pedidosidcliente
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 60
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 pedidosIdPedido pedidosIdCliente 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 pedidosIdPedido pedidosIdCliente order
by pedidos IdPedido
CROSS JOIN
Un Cross Join es la consulta correlacionada que combine cada una de las filas de una de las tablas con
todas las filas de la otra tabla
No es necesario que exista una columna en comuacuten para ejecutar el Cross Join
Ejemplo 86
La siguiente consulta combina cada una de las filas de la tabla categoriacuteas con cada una de las filas de la
tabla productos
select productosNombreProductocategoriasNombrecategoria from productos cross join categorias
order by productosNombreProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 61
Ejercicios de consultas Muacuteltiples
Ejemplo 87
Mostrar el pedidos completo con el id=10248
Select pedidosIdPedido pedidosIdCliente
Total=sum ([detalles de pedidos]Preciounidad[detalles de pedidos]Cantidad)
From [detalles de pedidos] inner join pedidos on
[Detalles de pedidos]IdPedido=pedidosIdPedido where pedidosIdPedido=10248
Group by pedidosIdPedido pedidosIdCliente
Ejemplo 88
1 Mostrar la cantidad de productos por categoriacutea
Select CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
[Total de Producto]=sum (UnidadesEnExistencia) from Categoriacuteas inner join
Productos on CategoriacuteasIdCategoriacutea=productosIdCategoriacutea
Group by CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 62
Ejemplo 89
Calcular cuantas ventas tiene cada uno de los vendedores
Select empleadosIdEmpleado empleadosNombre empleadosApellidos
[Total de ventas]=count (pedidosIdPedido) from empleados
Inner join Pedidos on empleadosIdEmpleado=pedidosIdEmpleado
Group by empleadosIdEmpleado empleadosNombre empleadosApellidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 63
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 despueacutes saca la de Plantilla
Recomendaciones a la hora de usar las combinaciones
Combinar tablas en funcioacuten de claves principales y externas
Limite el nuacutemero de tablas de las combinaciones
Select Apellido
Oficio as
OFICIOFUNCION
salario from emp
UNION
Select Apellido
Funcion Salario from
Plantilla
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 64
SUBCONSULTAS
Es una SELECT anidada en una instruccioacuten INSERT DELETE SELECT o UPDATE
Como una tabla derivada
Select eemp_no as Numero
eApellido
from (select emp_no apellido from emp) as e
Como una expresioacuten
Select emp_no as [Numero]
Apellido
Salario
(select avg(Salario) from emp)
as Diferencia
from emp
where oficio = Empleado
Para correlacionar datos
- Expresioacuten dinaacutemica que cambia en cada fila de una consulta externa
- Es una combinacioacuten entre la subconsulta y la fila de la consulta externa
- Dividen consultas complejas con dos o maacutes consultas simples relacionadas
Subconsulta correlacionada
Select apellido oficiodept_no
from emp as e
where 20 lt
(select dept_no from dept as d
where edept_no = ddept_no
and ddnombre = Ventas)
SUBCONSULTAS
1 Mostrar el numero de empleado el apellido y la fecha de alta del empleado mas antiguo de la
empresa
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 65
SELECT emp_noapellido
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_noapellido
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 Jimeacutenez
select apellido oficio from emp where
oficio = (select oficio from emp where apellido = JIMENEZ)
4 Queremos saber el apellido oficio salario y nuacutemero 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 gt (select max (salario) from
emp where dept_no = 30)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 66
5 Mostrar el apellido la funcioacuten sala o departamento de todos los empleados que trabajen en la
empresa
select eApellido eOficio as [Cargo en Empresa] ddnombre as [Oficina]
from emp as e
inner join dept as d
on edept_no = ddept_no
union
select pApellido pfuncion snombre
from plantilla as p
inner join sala as s
on phospital_cod = shospital_cod
and psala_cod = ssala_cod
union
select dApellido despecialidad hnombre
from doctor as d
inner join hospital as h
on dhospital_cod = hhospital_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 = lsquoventasrsquo))
order by 2
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 67
8 Mostrar los empleados que tienen mejor salario que la media de los directores no incluyendo al
presidente
Select from emp where salario gt
(select avg (salario) from emp where oficio = DIRECTOR)
and oficio ltgt PRESIDENTE
9 Mostrar el apellido funcioacuten salario y coacutedigo 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 = lsquoENFERMEROrsquo or
funcion = lsquoENFERMERArsquo) and hospital_cod = (select hospital_cod from hospital where nombre =
lsquoSAN CARLOSrsquo)
Select apellido funcion salario hospital_cod from plantilla where
funcion in (ENFERMEROENFERMERA)
and hospital_cod = (select hospital_cod from hospital
where nombre = SAN CARLOS)
10 Visualizar los datos de los hospitales que tienen personal (Doctores) de cardiologiacutea
Select from hospital where hospital_cod in (select hospital_cod from doctor where
especialidad = lsquoCardiologiacutearsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 68
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 = lsquoPROVINCIALrsquo or
nombre= lsquoGENERALrsquo)
12 Mostrar el apellido de los enfermos que nacieron antes que el Sentildeor Miller
Select apellido from enfermo where Fecha_nac lt (select fecha_nac from enfermo where
apellido = lsquoMILLER Brsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 69
Simulacion de una clausula JOIN
Vamos a mostrar los oficios que estaacuten en maacutes de un departamento
Select distinct e1oficio from emp as e1
where e1oficio in(Select e2oficio from emp as e2
where e1dept_no ltgt e2dept_no)
Se debe utilizar antes una combinacioacuten que una subconsulta la combinacioacuten seriacutea asi dando los
mismos resultados
Select distinct e1Oficio from emp as e1
inner join emp as e2
on e1oficio = e2oficio
where e1dept_no ltgt e2dept_no
Estos son los dos oficios que estaacuten en
maacutes de un departamento
Subconsulta para simular una clausula HAVING
select e1apellidoe1oficio e1salario
from emp as e1
where e1salario gt
(select avg(e2salario) from emp as e2
where e1oficio = e2oficio)
Esta es la consulta utilizando el HAVING que es la que deberiacuteamos utilizar antes que una
subconsulta de simulacioacuten HAVING
SELECT e1apellidoe1oficio e1salario
FROM emp AS e1
INNER JOIN emp AS e2
ON e1oficio = e2oficio
GROUP BY e1oficio e1salarioe1apellido
HAVING e1salario gt AVG (e2salario)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 70
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 49
Select Orderid as [Nordm PEDIDO] Quantity AS [CANTIDAD] From [Order Details] where orderid gt= 11070 order by Orderid compute Sum(quantity) by orderid compute sum(quantity)
Nordm PEDIDO CANTIDAD
----------- --------
11070 40
11070 20
11070 30
11070 20
sum
===========
110
sum
===========
110
(6 filas afectadas)
Ejemplo 73
Generar un resumen con calculo de subtotales similar al anterior pero para los orderid 11075 y
11076
Select Orderid as [Nordm PEDIDO] Quantity as [CANTIDAD] From [Order Details] where orderid = 11075 or orderid = 11076 order by Orderid compute Sum(quantity) by ordered Nordm PEDIDO CANTIDAD ----------- -------- 11075 10 11075 30 11075 2 sum =========== 42 Nordm PEDIDO CANTIDAD ----------- -------- 11076 20 11076 20 11076 10
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 50
sum =========== 50 (8 filas afectadas)
Ejemplo 74
Modificacioacuten al ejercicio anterior Agregar la cantidad total y la cantidad promedio al final del
informe
Select Orderid as [Nordm 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)
Nordm PEDIDO CANTIDAD
----------- --------
11075 10
11075 30
11075 2
sum
===========
42
Nordm PEDIDO CANTIDAD
----------- --------
11076 20
11076 20
11076 10
sum
===========
50
sum
===========
92
avg
===========
15
(10 filas afectadas)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 51
Ejemplo 75
Seleccionar de forma agrupada por tipo todos los tipos la suma de los precios y la suma del
anticipo de la tabla tiacutetulos
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 199900 50000000
business 119500 50000000
business 29900 101250000
business 199900 50000000
sum
=====================
549200
avg
=====================
62812500
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
mod_cook 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
avg
=====================
75000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
popular_comp 229500 70000000
popular_comp 200000 80000000
popular_comp NULL NULL
sum
=====================
429500
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 52
avg
=====================
75000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
psychology 215900 70000000
psychology 109500 22750000
psychology 70000 60000000
psychology 199900 20000000
psychology 79900 40000000
sum
=====================
675200
avg
=====================
42550000
(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 ademaacutes 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 199900 50000000
business 119500 50000000
business 29900 101250000
business 199900 50000000
sum
=====================
549200
sum
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 53
=====================
251250000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
mod_cook 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
popular_comp 229500 70000000
popular_comp 200000 80000000
popular_comp NULL NULL
sum
=====================
429500
sum
=====================
150000000
(30 filas afectadas)
Ejemplo 77
Generar un informe que muestre la suma de los precios de los libros de psicologiacutea 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 109500
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 54
psychology 0736 70000
psychology 0736 199900
psychology 0736 79900
sum
=====================
459300
TIPO CODIGO EDITOR PRECIO
------------ ------------- ---------------------
psychology 0877 215900
sum
=====================
215900
(7 filas afectadas)
Ejemplo 78
Generar un informe que obtenga la suma de los precios de todos los libros de psicologiacutea asiacute como la
suma de los precios de los libros de psicologiacutea 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 109500
psychology 0736 70000
psychology 0736 199900
psychology 0736 79900
sum
=====================
459300
TIPO CODIGO EDITOR PRECIO
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 55
------------ ------------- ---------------------
psychology 0877 215900
sum
=====================
215900
sum
=====================
675200
(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 199900 0000
mod_cook 0877 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO CODIGO EDITOR PRECIO ANTICIPO
------------ ------------- --------------------- ---------------------
trad_cook 0877 119500 40000000
trad_cook 0877 209500 70000000
trad_cook 0877 149900 80000000
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 56
sum
=====================
478900
sum
=====================
190000000
(9 filas afectadas)
Ejemplo 80
Generar un informe que muestre todos los tiacutetulos precio y anticipo de aquellos tiacutetulos que tengan
un precio superior a 20 doacutelares Ofreceraacute tambieacuten la suma total del precio y del anticipo
Select title as [TITULO] price as [PRECIO] advance as [ANTICIPO] From titles where price gt 20 order by title compute sum(price) compute sum(advance)
TITULO PRECIO ANTICIPO
-------------------------------------------------------------------------------- --------------------- -------------
--------
But Is It User Friendly 229500 70000000
Computer Phobic AND Non-Phobic Individuals Behavior Variations 215900
70000000
Onions Leeks and Garlic Cooking Secrets of the Mediterranean 209500
70000000
sum
=====================
654900
sum
=====================
210000000
(5 filas afectadas)
Ejemplo 81
Generar un informe que muestre el precio el tipo y el nuacutemero de editor de la tabla titles de todos
aquellas obras que pertenezcan la categoriacutea de ldquobusinessrdquo Ademaacutes apareceraacute la suma total de
precios y el maacuteximo pub_id de esta seleccioacuten
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 57
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 29900 0736
business 199900 1389
business 199900 1389
business 119500 1389
sum
=====================
549200
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 Mostraraacute la suma de los precios y los anticipos por tipo y luego calcularaacute 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 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
trad_cook 209500 70000000
trad_cook 119500 40000000
trad_cook 149900 80000000
sum
=====================
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 58
478900
sum
=====================
190000000
sum
=====================
708700
sum
=====================
340000000
(11 filas afectadas)
Eliminacioacuten 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 iquestA que precio se ah vendido los productos
Select IdProducto Preciounidad from [Detalles de pedidos] order by IdProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 59
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 mayoriacutea de las consultas que se hacen en una base de datos requiere que se lean datos procedentes
de dos oacute maacutes tablas
INNER JOIN- son las filas que satisfacen la condicioacuten de la combinacioacuten
En la siguiente sentencia SQL enlaza 2 tablas la tabla clientes y la tabla pedidos en esta ejemplo me
muestra los campos nombre compantildeiacutea y el campo idpedido
La uacutenica condicioacuten es que las 2 tablas tengan un campo en comuacuten
Ejemplo 84
select clientesNombreCompantildeiacuteapedidosidpedido from clientes inner join pedidos on
clientesidcliente=pedidosidcliente
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 60
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 pedidosIdPedido pedidosIdCliente 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 pedidosIdPedido pedidosIdCliente order
by pedidos IdPedido
CROSS JOIN
Un Cross Join es la consulta correlacionada que combine cada una de las filas de una de las tablas con
todas las filas de la otra tabla
No es necesario que exista una columna en comuacuten para ejecutar el Cross Join
Ejemplo 86
La siguiente consulta combina cada una de las filas de la tabla categoriacuteas con cada una de las filas de la
tabla productos
select productosNombreProductocategoriasNombrecategoria from productos cross join categorias
order by productosNombreProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 61
Ejercicios de consultas Muacuteltiples
Ejemplo 87
Mostrar el pedidos completo con el id=10248
Select pedidosIdPedido pedidosIdCliente
Total=sum ([detalles de pedidos]Preciounidad[detalles de pedidos]Cantidad)
From [detalles de pedidos] inner join pedidos on
[Detalles de pedidos]IdPedido=pedidosIdPedido where pedidosIdPedido=10248
Group by pedidosIdPedido pedidosIdCliente
Ejemplo 88
1 Mostrar la cantidad de productos por categoriacutea
Select CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
[Total de Producto]=sum (UnidadesEnExistencia) from Categoriacuteas inner join
Productos on CategoriacuteasIdCategoriacutea=productosIdCategoriacutea
Group by CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 62
Ejemplo 89
Calcular cuantas ventas tiene cada uno de los vendedores
Select empleadosIdEmpleado empleadosNombre empleadosApellidos
[Total de ventas]=count (pedidosIdPedido) from empleados
Inner join Pedidos on empleadosIdEmpleado=pedidosIdEmpleado
Group by empleadosIdEmpleado empleadosNombre empleadosApellidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 63
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 despueacutes saca la de Plantilla
Recomendaciones a la hora de usar las combinaciones
Combinar tablas en funcioacuten de claves principales y externas
Limite el nuacutemero de tablas de las combinaciones
Select Apellido
Oficio as
OFICIOFUNCION
salario from emp
UNION
Select Apellido
Funcion Salario from
Plantilla
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 64
SUBCONSULTAS
Es una SELECT anidada en una instruccioacuten INSERT DELETE SELECT o UPDATE
Como una tabla derivada
Select eemp_no as Numero
eApellido
from (select emp_no apellido from emp) as e
Como una expresioacuten
Select emp_no as [Numero]
Apellido
Salario
(select avg(Salario) from emp)
as Diferencia
from emp
where oficio = Empleado
Para correlacionar datos
- Expresioacuten dinaacutemica que cambia en cada fila de una consulta externa
- Es una combinacioacuten entre la subconsulta y la fila de la consulta externa
- Dividen consultas complejas con dos o maacutes consultas simples relacionadas
Subconsulta correlacionada
Select apellido oficiodept_no
from emp as e
where 20 lt
(select dept_no from dept as d
where edept_no = ddept_no
and ddnombre = Ventas)
SUBCONSULTAS
1 Mostrar el numero de empleado el apellido y la fecha de alta del empleado mas antiguo de la
empresa
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 65
SELECT emp_noapellido
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_noapellido
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 Jimeacutenez
select apellido oficio from emp where
oficio = (select oficio from emp where apellido = JIMENEZ)
4 Queremos saber el apellido oficio salario y nuacutemero 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 gt (select max (salario) from
emp where dept_no = 30)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 66
5 Mostrar el apellido la funcioacuten sala o departamento de todos los empleados que trabajen en la
empresa
select eApellido eOficio as [Cargo en Empresa] ddnombre as [Oficina]
from emp as e
inner join dept as d
on edept_no = ddept_no
union
select pApellido pfuncion snombre
from plantilla as p
inner join sala as s
on phospital_cod = shospital_cod
and psala_cod = ssala_cod
union
select dApellido despecialidad hnombre
from doctor as d
inner join hospital as h
on dhospital_cod = hhospital_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 = lsquoventasrsquo))
order by 2
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 67
8 Mostrar los empleados que tienen mejor salario que la media de los directores no incluyendo al
presidente
Select from emp where salario gt
(select avg (salario) from emp where oficio = DIRECTOR)
and oficio ltgt PRESIDENTE
9 Mostrar el apellido funcioacuten salario y coacutedigo 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 = lsquoENFERMEROrsquo or
funcion = lsquoENFERMERArsquo) and hospital_cod = (select hospital_cod from hospital where nombre =
lsquoSAN CARLOSrsquo)
Select apellido funcion salario hospital_cod from plantilla where
funcion in (ENFERMEROENFERMERA)
and hospital_cod = (select hospital_cod from hospital
where nombre = SAN CARLOS)
10 Visualizar los datos de los hospitales que tienen personal (Doctores) de cardiologiacutea
Select from hospital where hospital_cod in (select hospital_cod from doctor where
especialidad = lsquoCardiologiacutearsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 68
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 = lsquoPROVINCIALrsquo or
nombre= lsquoGENERALrsquo)
12 Mostrar el apellido de los enfermos que nacieron antes que el Sentildeor Miller
Select apellido from enfermo where Fecha_nac lt (select fecha_nac from enfermo where
apellido = lsquoMILLER Brsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 69
Simulacion de una clausula JOIN
Vamos a mostrar los oficios que estaacuten en maacutes de un departamento
Select distinct e1oficio from emp as e1
where e1oficio in(Select e2oficio from emp as e2
where e1dept_no ltgt e2dept_no)
Se debe utilizar antes una combinacioacuten que una subconsulta la combinacioacuten seriacutea asi dando los
mismos resultados
Select distinct e1Oficio from emp as e1
inner join emp as e2
on e1oficio = e2oficio
where e1dept_no ltgt e2dept_no
Estos son los dos oficios que estaacuten en
maacutes de un departamento
Subconsulta para simular una clausula HAVING
select e1apellidoe1oficio e1salario
from emp as e1
where e1salario gt
(select avg(e2salario) from emp as e2
where e1oficio = e2oficio)
Esta es la consulta utilizando el HAVING que es la que deberiacuteamos utilizar antes que una
subconsulta de simulacioacuten HAVING
SELECT e1apellidoe1oficio e1salario
FROM emp AS e1
INNER JOIN emp AS e2
ON e1oficio = e2oficio
GROUP BY e1oficio e1salarioe1apellido
HAVING e1salario gt AVG (e2salario)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 70
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 50
sum =========== 50 (8 filas afectadas)
Ejemplo 74
Modificacioacuten al ejercicio anterior Agregar la cantidad total y la cantidad promedio al final del
informe
Select Orderid as [Nordm 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)
Nordm PEDIDO CANTIDAD
----------- --------
11075 10
11075 30
11075 2
sum
===========
42
Nordm PEDIDO CANTIDAD
----------- --------
11076 20
11076 20
11076 10
sum
===========
50
sum
===========
92
avg
===========
15
(10 filas afectadas)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 51
Ejemplo 75
Seleccionar de forma agrupada por tipo todos los tipos la suma de los precios y la suma del
anticipo de la tabla tiacutetulos
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 199900 50000000
business 119500 50000000
business 29900 101250000
business 199900 50000000
sum
=====================
549200
avg
=====================
62812500
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
mod_cook 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
avg
=====================
75000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
popular_comp 229500 70000000
popular_comp 200000 80000000
popular_comp NULL NULL
sum
=====================
429500
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 52
avg
=====================
75000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
psychology 215900 70000000
psychology 109500 22750000
psychology 70000 60000000
psychology 199900 20000000
psychology 79900 40000000
sum
=====================
675200
avg
=====================
42550000
(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 ademaacutes 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 199900 50000000
business 119500 50000000
business 29900 101250000
business 199900 50000000
sum
=====================
549200
sum
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 53
=====================
251250000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
mod_cook 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
popular_comp 229500 70000000
popular_comp 200000 80000000
popular_comp NULL NULL
sum
=====================
429500
sum
=====================
150000000
(30 filas afectadas)
Ejemplo 77
Generar un informe que muestre la suma de los precios de los libros de psicologiacutea 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 109500
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 54
psychology 0736 70000
psychology 0736 199900
psychology 0736 79900
sum
=====================
459300
TIPO CODIGO EDITOR PRECIO
------------ ------------- ---------------------
psychology 0877 215900
sum
=====================
215900
(7 filas afectadas)
Ejemplo 78
Generar un informe que obtenga la suma de los precios de todos los libros de psicologiacutea asiacute como la
suma de los precios de los libros de psicologiacutea 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 109500
psychology 0736 70000
psychology 0736 199900
psychology 0736 79900
sum
=====================
459300
TIPO CODIGO EDITOR PRECIO
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 55
------------ ------------- ---------------------
psychology 0877 215900
sum
=====================
215900
sum
=====================
675200
(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 199900 0000
mod_cook 0877 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO CODIGO EDITOR PRECIO ANTICIPO
------------ ------------- --------------------- ---------------------
trad_cook 0877 119500 40000000
trad_cook 0877 209500 70000000
trad_cook 0877 149900 80000000
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 56
sum
=====================
478900
sum
=====================
190000000
(9 filas afectadas)
Ejemplo 80
Generar un informe que muestre todos los tiacutetulos precio y anticipo de aquellos tiacutetulos que tengan
un precio superior a 20 doacutelares Ofreceraacute tambieacuten la suma total del precio y del anticipo
Select title as [TITULO] price as [PRECIO] advance as [ANTICIPO] From titles where price gt 20 order by title compute sum(price) compute sum(advance)
TITULO PRECIO ANTICIPO
-------------------------------------------------------------------------------- --------------------- -------------
--------
But Is It User Friendly 229500 70000000
Computer Phobic AND Non-Phobic Individuals Behavior Variations 215900
70000000
Onions Leeks and Garlic Cooking Secrets of the Mediterranean 209500
70000000
sum
=====================
654900
sum
=====================
210000000
(5 filas afectadas)
Ejemplo 81
Generar un informe que muestre el precio el tipo y el nuacutemero de editor de la tabla titles de todos
aquellas obras que pertenezcan la categoriacutea de ldquobusinessrdquo Ademaacutes apareceraacute la suma total de
precios y el maacuteximo pub_id de esta seleccioacuten
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 57
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 29900 0736
business 199900 1389
business 199900 1389
business 119500 1389
sum
=====================
549200
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 Mostraraacute la suma de los precios y los anticipos por tipo y luego calcularaacute 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 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
trad_cook 209500 70000000
trad_cook 119500 40000000
trad_cook 149900 80000000
sum
=====================
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 58
478900
sum
=====================
190000000
sum
=====================
708700
sum
=====================
340000000
(11 filas afectadas)
Eliminacioacuten 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 iquestA que precio se ah vendido los productos
Select IdProducto Preciounidad from [Detalles de pedidos] order by IdProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 59
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 mayoriacutea de las consultas que se hacen en una base de datos requiere que se lean datos procedentes
de dos oacute maacutes tablas
INNER JOIN- son las filas que satisfacen la condicioacuten de la combinacioacuten
En la siguiente sentencia SQL enlaza 2 tablas la tabla clientes y la tabla pedidos en esta ejemplo me
muestra los campos nombre compantildeiacutea y el campo idpedido
La uacutenica condicioacuten es que las 2 tablas tengan un campo en comuacuten
Ejemplo 84
select clientesNombreCompantildeiacuteapedidosidpedido from clientes inner join pedidos on
clientesidcliente=pedidosidcliente
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 60
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 pedidosIdPedido pedidosIdCliente 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 pedidosIdPedido pedidosIdCliente order
by pedidos IdPedido
CROSS JOIN
Un Cross Join es la consulta correlacionada que combine cada una de las filas de una de las tablas con
todas las filas de la otra tabla
No es necesario que exista una columna en comuacuten para ejecutar el Cross Join
Ejemplo 86
La siguiente consulta combina cada una de las filas de la tabla categoriacuteas con cada una de las filas de la
tabla productos
select productosNombreProductocategoriasNombrecategoria from productos cross join categorias
order by productosNombreProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 61
Ejercicios de consultas Muacuteltiples
Ejemplo 87
Mostrar el pedidos completo con el id=10248
Select pedidosIdPedido pedidosIdCliente
Total=sum ([detalles de pedidos]Preciounidad[detalles de pedidos]Cantidad)
From [detalles de pedidos] inner join pedidos on
[Detalles de pedidos]IdPedido=pedidosIdPedido where pedidosIdPedido=10248
Group by pedidosIdPedido pedidosIdCliente
Ejemplo 88
1 Mostrar la cantidad de productos por categoriacutea
Select CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
[Total de Producto]=sum (UnidadesEnExistencia) from Categoriacuteas inner join
Productos on CategoriacuteasIdCategoriacutea=productosIdCategoriacutea
Group by CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 62
Ejemplo 89
Calcular cuantas ventas tiene cada uno de los vendedores
Select empleadosIdEmpleado empleadosNombre empleadosApellidos
[Total de ventas]=count (pedidosIdPedido) from empleados
Inner join Pedidos on empleadosIdEmpleado=pedidosIdEmpleado
Group by empleadosIdEmpleado empleadosNombre empleadosApellidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 63
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 despueacutes saca la de Plantilla
Recomendaciones a la hora de usar las combinaciones
Combinar tablas en funcioacuten de claves principales y externas
Limite el nuacutemero de tablas de las combinaciones
Select Apellido
Oficio as
OFICIOFUNCION
salario from emp
UNION
Select Apellido
Funcion Salario from
Plantilla
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 64
SUBCONSULTAS
Es una SELECT anidada en una instruccioacuten INSERT DELETE SELECT o UPDATE
Como una tabla derivada
Select eemp_no as Numero
eApellido
from (select emp_no apellido from emp) as e
Como una expresioacuten
Select emp_no as [Numero]
Apellido
Salario
(select avg(Salario) from emp)
as Diferencia
from emp
where oficio = Empleado
Para correlacionar datos
- Expresioacuten dinaacutemica que cambia en cada fila de una consulta externa
- Es una combinacioacuten entre la subconsulta y la fila de la consulta externa
- Dividen consultas complejas con dos o maacutes consultas simples relacionadas
Subconsulta correlacionada
Select apellido oficiodept_no
from emp as e
where 20 lt
(select dept_no from dept as d
where edept_no = ddept_no
and ddnombre = Ventas)
SUBCONSULTAS
1 Mostrar el numero de empleado el apellido y la fecha de alta del empleado mas antiguo de la
empresa
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 65
SELECT emp_noapellido
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_noapellido
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 Jimeacutenez
select apellido oficio from emp where
oficio = (select oficio from emp where apellido = JIMENEZ)
4 Queremos saber el apellido oficio salario y nuacutemero 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 gt (select max (salario) from
emp where dept_no = 30)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 66
5 Mostrar el apellido la funcioacuten sala o departamento de todos los empleados que trabajen en la
empresa
select eApellido eOficio as [Cargo en Empresa] ddnombre as [Oficina]
from emp as e
inner join dept as d
on edept_no = ddept_no
union
select pApellido pfuncion snombre
from plantilla as p
inner join sala as s
on phospital_cod = shospital_cod
and psala_cod = ssala_cod
union
select dApellido despecialidad hnombre
from doctor as d
inner join hospital as h
on dhospital_cod = hhospital_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 = lsquoventasrsquo))
order by 2
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 67
8 Mostrar los empleados que tienen mejor salario que la media de los directores no incluyendo al
presidente
Select from emp where salario gt
(select avg (salario) from emp where oficio = DIRECTOR)
and oficio ltgt PRESIDENTE
9 Mostrar el apellido funcioacuten salario y coacutedigo 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 = lsquoENFERMEROrsquo or
funcion = lsquoENFERMERArsquo) and hospital_cod = (select hospital_cod from hospital where nombre =
lsquoSAN CARLOSrsquo)
Select apellido funcion salario hospital_cod from plantilla where
funcion in (ENFERMEROENFERMERA)
and hospital_cod = (select hospital_cod from hospital
where nombre = SAN CARLOS)
10 Visualizar los datos de los hospitales que tienen personal (Doctores) de cardiologiacutea
Select from hospital where hospital_cod in (select hospital_cod from doctor where
especialidad = lsquoCardiologiacutearsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 68
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 = lsquoPROVINCIALrsquo or
nombre= lsquoGENERALrsquo)
12 Mostrar el apellido de los enfermos que nacieron antes que el Sentildeor Miller
Select apellido from enfermo where Fecha_nac lt (select fecha_nac from enfermo where
apellido = lsquoMILLER Brsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 69
Simulacion de una clausula JOIN
Vamos a mostrar los oficios que estaacuten en maacutes de un departamento
Select distinct e1oficio from emp as e1
where e1oficio in(Select e2oficio from emp as e2
where e1dept_no ltgt e2dept_no)
Se debe utilizar antes una combinacioacuten que una subconsulta la combinacioacuten seriacutea asi dando los
mismos resultados
Select distinct e1Oficio from emp as e1
inner join emp as e2
on e1oficio = e2oficio
where e1dept_no ltgt e2dept_no
Estos son los dos oficios que estaacuten en
maacutes de un departamento
Subconsulta para simular una clausula HAVING
select e1apellidoe1oficio e1salario
from emp as e1
where e1salario gt
(select avg(e2salario) from emp as e2
where e1oficio = e2oficio)
Esta es la consulta utilizando el HAVING que es la que deberiacuteamos utilizar antes que una
subconsulta de simulacioacuten HAVING
SELECT e1apellidoe1oficio e1salario
FROM emp AS e1
INNER JOIN emp AS e2
ON e1oficio = e2oficio
GROUP BY e1oficio e1salarioe1apellido
HAVING e1salario gt AVG (e2salario)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 70
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 51
Ejemplo 75
Seleccionar de forma agrupada por tipo todos los tipos la suma de los precios y la suma del
anticipo de la tabla tiacutetulos
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 199900 50000000
business 119500 50000000
business 29900 101250000
business 199900 50000000
sum
=====================
549200
avg
=====================
62812500
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
mod_cook 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
avg
=====================
75000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
popular_comp 229500 70000000
popular_comp 200000 80000000
popular_comp NULL NULL
sum
=====================
429500
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 52
avg
=====================
75000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
psychology 215900 70000000
psychology 109500 22750000
psychology 70000 60000000
psychology 199900 20000000
psychology 79900 40000000
sum
=====================
675200
avg
=====================
42550000
(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 ademaacutes 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 199900 50000000
business 119500 50000000
business 29900 101250000
business 199900 50000000
sum
=====================
549200
sum
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 53
=====================
251250000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
mod_cook 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
popular_comp 229500 70000000
popular_comp 200000 80000000
popular_comp NULL NULL
sum
=====================
429500
sum
=====================
150000000
(30 filas afectadas)
Ejemplo 77
Generar un informe que muestre la suma de los precios de los libros de psicologiacutea 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 109500
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 54
psychology 0736 70000
psychology 0736 199900
psychology 0736 79900
sum
=====================
459300
TIPO CODIGO EDITOR PRECIO
------------ ------------- ---------------------
psychology 0877 215900
sum
=====================
215900
(7 filas afectadas)
Ejemplo 78
Generar un informe que obtenga la suma de los precios de todos los libros de psicologiacutea asiacute como la
suma de los precios de los libros de psicologiacutea 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 109500
psychology 0736 70000
psychology 0736 199900
psychology 0736 79900
sum
=====================
459300
TIPO CODIGO EDITOR PRECIO
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 55
------------ ------------- ---------------------
psychology 0877 215900
sum
=====================
215900
sum
=====================
675200
(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 199900 0000
mod_cook 0877 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO CODIGO EDITOR PRECIO ANTICIPO
------------ ------------- --------------------- ---------------------
trad_cook 0877 119500 40000000
trad_cook 0877 209500 70000000
trad_cook 0877 149900 80000000
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 56
sum
=====================
478900
sum
=====================
190000000
(9 filas afectadas)
Ejemplo 80
Generar un informe que muestre todos los tiacutetulos precio y anticipo de aquellos tiacutetulos que tengan
un precio superior a 20 doacutelares Ofreceraacute tambieacuten la suma total del precio y del anticipo
Select title as [TITULO] price as [PRECIO] advance as [ANTICIPO] From titles where price gt 20 order by title compute sum(price) compute sum(advance)
TITULO PRECIO ANTICIPO
-------------------------------------------------------------------------------- --------------------- -------------
--------
But Is It User Friendly 229500 70000000
Computer Phobic AND Non-Phobic Individuals Behavior Variations 215900
70000000
Onions Leeks and Garlic Cooking Secrets of the Mediterranean 209500
70000000
sum
=====================
654900
sum
=====================
210000000
(5 filas afectadas)
Ejemplo 81
Generar un informe que muestre el precio el tipo y el nuacutemero de editor de la tabla titles de todos
aquellas obras que pertenezcan la categoriacutea de ldquobusinessrdquo Ademaacutes apareceraacute la suma total de
precios y el maacuteximo pub_id de esta seleccioacuten
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 57
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 29900 0736
business 199900 1389
business 199900 1389
business 119500 1389
sum
=====================
549200
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 Mostraraacute la suma de los precios y los anticipos por tipo y luego calcularaacute 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 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
trad_cook 209500 70000000
trad_cook 119500 40000000
trad_cook 149900 80000000
sum
=====================
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 58
478900
sum
=====================
190000000
sum
=====================
708700
sum
=====================
340000000
(11 filas afectadas)
Eliminacioacuten 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 iquestA que precio se ah vendido los productos
Select IdProducto Preciounidad from [Detalles de pedidos] order by IdProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 59
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 mayoriacutea de las consultas que se hacen en una base de datos requiere que se lean datos procedentes
de dos oacute maacutes tablas
INNER JOIN- son las filas que satisfacen la condicioacuten de la combinacioacuten
En la siguiente sentencia SQL enlaza 2 tablas la tabla clientes y la tabla pedidos en esta ejemplo me
muestra los campos nombre compantildeiacutea y el campo idpedido
La uacutenica condicioacuten es que las 2 tablas tengan un campo en comuacuten
Ejemplo 84
select clientesNombreCompantildeiacuteapedidosidpedido from clientes inner join pedidos on
clientesidcliente=pedidosidcliente
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 60
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 pedidosIdPedido pedidosIdCliente 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 pedidosIdPedido pedidosIdCliente order
by pedidos IdPedido
CROSS JOIN
Un Cross Join es la consulta correlacionada que combine cada una de las filas de una de las tablas con
todas las filas de la otra tabla
No es necesario que exista una columna en comuacuten para ejecutar el Cross Join
Ejemplo 86
La siguiente consulta combina cada una de las filas de la tabla categoriacuteas con cada una de las filas de la
tabla productos
select productosNombreProductocategoriasNombrecategoria from productos cross join categorias
order by productosNombreProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 61
Ejercicios de consultas Muacuteltiples
Ejemplo 87
Mostrar el pedidos completo con el id=10248
Select pedidosIdPedido pedidosIdCliente
Total=sum ([detalles de pedidos]Preciounidad[detalles de pedidos]Cantidad)
From [detalles de pedidos] inner join pedidos on
[Detalles de pedidos]IdPedido=pedidosIdPedido where pedidosIdPedido=10248
Group by pedidosIdPedido pedidosIdCliente
Ejemplo 88
1 Mostrar la cantidad de productos por categoriacutea
Select CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
[Total de Producto]=sum (UnidadesEnExistencia) from Categoriacuteas inner join
Productos on CategoriacuteasIdCategoriacutea=productosIdCategoriacutea
Group by CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 62
Ejemplo 89
Calcular cuantas ventas tiene cada uno de los vendedores
Select empleadosIdEmpleado empleadosNombre empleadosApellidos
[Total de ventas]=count (pedidosIdPedido) from empleados
Inner join Pedidos on empleadosIdEmpleado=pedidosIdEmpleado
Group by empleadosIdEmpleado empleadosNombre empleadosApellidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 63
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 despueacutes saca la de Plantilla
Recomendaciones a la hora de usar las combinaciones
Combinar tablas en funcioacuten de claves principales y externas
Limite el nuacutemero de tablas de las combinaciones
Select Apellido
Oficio as
OFICIOFUNCION
salario from emp
UNION
Select Apellido
Funcion Salario from
Plantilla
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 64
SUBCONSULTAS
Es una SELECT anidada en una instruccioacuten INSERT DELETE SELECT o UPDATE
Como una tabla derivada
Select eemp_no as Numero
eApellido
from (select emp_no apellido from emp) as e
Como una expresioacuten
Select emp_no as [Numero]
Apellido
Salario
(select avg(Salario) from emp)
as Diferencia
from emp
where oficio = Empleado
Para correlacionar datos
- Expresioacuten dinaacutemica que cambia en cada fila de una consulta externa
- Es una combinacioacuten entre la subconsulta y la fila de la consulta externa
- Dividen consultas complejas con dos o maacutes consultas simples relacionadas
Subconsulta correlacionada
Select apellido oficiodept_no
from emp as e
where 20 lt
(select dept_no from dept as d
where edept_no = ddept_no
and ddnombre = Ventas)
SUBCONSULTAS
1 Mostrar el numero de empleado el apellido y la fecha de alta del empleado mas antiguo de la
empresa
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 65
SELECT emp_noapellido
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_noapellido
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 Jimeacutenez
select apellido oficio from emp where
oficio = (select oficio from emp where apellido = JIMENEZ)
4 Queremos saber el apellido oficio salario y nuacutemero 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 gt (select max (salario) from
emp where dept_no = 30)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 66
5 Mostrar el apellido la funcioacuten sala o departamento de todos los empleados que trabajen en la
empresa
select eApellido eOficio as [Cargo en Empresa] ddnombre as [Oficina]
from emp as e
inner join dept as d
on edept_no = ddept_no
union
select pApellido pfuncion snombre
from plantilla as p
inner join sala as s
on phospital_cod = shospital_cod
and psala_cod = ssala_cod
union
select dApellido despecialidad hnombre
from doctor as d
inner join hospital as h
on dhospital_cod = hhospital_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 = lsquoventasrsquo))
order by 2
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 67
8 Mostrar los empleados que tienen mejor salario que la media de los directores no incluyendo al
presidente
Select from emp where salario gt
(select avg (salario) from emp where oficio = DIRECTOR)
and oficio ltgt PRESIDENTE
9 Mostrar el apellido funcioacuten salario y coacutedigo 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 = lsquoENFERMEROrsquo or
funcion = lsquoENFERMERArsquo) and hospital_cod = (select hospital_cod from hospital where nombre =
lsquoSAN CARLOSrsquo)
Select apellido funcion salario hospital_cod from plantilla where
funcion in (ENFERMEROENFERMERA)
and hospital_cod = (select hospital_cod from hospital
where nombre = SAN CARLOS)
10 Visualizar los datos de los hospitales que tienen personal (Doctores) de cardiologiacutea
Select from hospital where hospital_cod in (select hospital_cod from doctor where
especialidad = lsquoCardiologiacutearsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 68
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 = lsquoPROVINCIALrsquo or
nombre= lsquoGENERALrsquo)
12 Mostrar el apellido de los enfermos que nacieron antes que el Sentildeor Miller
Select apellido from enfermo where Fecha_nac lt (select fecha_nac from enfermo where
apellido = lsquoMILLER Brsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 69
Simulacion de una clausula JOIN
Vamos a mostrar los oficios que estaacuten en maacutes de un departamento
Select distinct e1oficio from emp as e1
where e1oficio in(Select e2oficio from emp as e2
where e1dept_no ltgt e2dept_no)
Se debe utilizar antes una combinacioacuten que una subconsulta la combinacioacuten seriacutea asi dando los
mismos resultados
Select distinct e1Oficio from emp as e1
inner join emp as e2
on e1oficio = e2oficio
where e1dept_no ltgt e2dept_no
Estos son los dos oficios que estaacuten en
maacutes de un departamento
Subconsulta para simular una clausula HAVING
select e1apellidoe1oficio e1salario
from emp as e1
where e1salario gt
(select avg(e2salario) from emp as e2
where e1oficio = e2oficio)
Esta es la consulta utilizando el HAVING que es la que deberiacuteamos utilizar antes que una
subconsulta de simulacioacuten HAVING
SELECT e1apellidoe1oficio e1salario
FROM emp AS e1
INNER JOIN emp AS e2
ON e1oficio = e2oficio
GROUP BY e1oficio e1salarioe1apellido
HAVING e1salario gt AVG (e2salario)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 70
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 52
avg
=====================
75000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
psychology 215900 70000000
psychology 109500 22750000
psychology 70000 60000000
psychology 199900 20000000
psychology 79900 40000000
sum
=====================
675200
avg
=====================
42550000
(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 ademaacutes 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 199900 50000000
business 119500 50000000
business 29900 101250000
business 199900 50000000
sum
=====================
549200
sum
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 53
=====================
251250000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
mod_cook 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
popular_comp 229500 70000000
popular_comp 200000 80000000
popular_comp NULL NULL
sum
=====================
429500
sum
=====================
150000000
(30 filas afectadas)
Ejemplo 77
Generar un informe que muestre la suma de los precios de los libros de psicologiacutea 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 109500
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 54
psychology 0736 70000
psychology 0736 199900
psychology 0736 79900
sum
=====================
459300
TIPO CODIGO EDITOR PRECIO
------------ ------------- ---------------------
psychology 0877 215900
sum
=====================
215900
(7 filas afectadas)
Ejemplo 78
Generar un informe que obtenga la suma de los precios de todos los libros de psicologiacutea asiacute como la
suma de los precios de los libros de psicologiacutea 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 109500
psychology 0736 70000
psychology 0736 199900
psychology 0736 79900
sum
=====================
459300
TIPO CODIGO EDITOR PRECIO
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 55
------------ ------------- ---------------------
psychology 0877 215900
sum
=====================
215900
sum
=====================
675200
(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 199900 0000
mod_cook 0877 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO CODIGO EDITOR PRECIO ANTICIPO
------------ ------------- --------------------- ---------------------
trad_cook 0877 119500 40000000
trad_cook 0877 209500 70000000
trad_cook 0877 149900 80000000
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 56
sum
=====================
478900
sum
=====================
190000000
(9 filas afectadas)
Ejemplo 80
Generar un informe que muestre todos los tiacutetulos precio y anticipo de aquellos tiacutetulos que tengan
un precio superior a 20 doacutelares Ofreceraacute tambieacuten la suma total del precio y del anticipo
Select title as [TITULO] price as [PRECIO] advance as [ANTICIPO] From titles where price gt 20 order by title compute sum(price) compute sum(advance)
TITULO PRECIO ANTICIPO
-------------------------------------------------------------------------------- --------------------- -------------
--------
But Is It User Friendly 229500 70000000
Computer Phobic AND Non-Phobic Individuals Behavior Variations 215900
70000000
Onions Leeks and Garlic Cooking Secrets of the Mediterranean 209500
70000000
sum
=====================
654900
sum
=====================
210000000
(5 filas afectadas)
Ejemplo 81
Generar un informe que muestre el precio el tipo y el nuacutemero de editor de la tabla titles de todos
aquellas obras que pertenezcan la categoriacutea de ldquobusinessrdquo Ademaacutes apareceraacute la suma total de
precios y el maacuteximo pub_id de esta seleccioacuten
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 57
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 29900 0736
business 199900 1389
business 199900 1389
business 119500 1389
sum
=====================
549200
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 Mostraraacute la suma de los precios y los anticipos por tipo y luego calcularaacute 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 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
trad_cook 209500 70000000
trad_cook 119500 40000000
trad_cook 149900 80000000
sum
=====================
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 58
478900
sum
=====================
190000000
sum
=====================
708700
sum
=====================
340000000
(11 filas afectadas)
Eliminacioacuten 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 iquestA que precio se ah vendido los productos
Select IdProducto Preciounidad from [Detalles de pedidos] order by IdProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 59
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 mayoriacutea de las consultas que se hacen en una base de datos requiere que se lean datos procedentes
de dos oacute maacutes tablas
INNER JOIN- son las filas que satisfacen la condicioacuten de la combinacioacuten
En la siguiente sentencia SQL enlaza 2 tablas la tabla clientes y la tabla pedidos en esta ejemplo me
muestra los campos nombre compantildeiacutea y el campo idpedido
La uacutenica condicioacuten es que las 2 tablas tengan un campo en comuacuten
Ejemplo 84
select clientesNombreCompantildeiacuteapedidosidpedido from clientes inner join pedidos on
clientesidcliente=pedidosidcliente
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 60
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 pedidosIdPedido pedidosIdCliente 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 pedidosIdPedido pedidosIdCliente order
by pedidos IdPedido
CROSS JOIN
Un Cross Join es la consulta correlacionada que combine cada una de las filas de una de las tablas con
todas las filas de la otra tabla
No es necesario que exista una columna en comuacuten para ejecutar el Cross Join
Ejemplo 86
La siguiente consulta combina cada una de las filas de la tabla categoriacuteas con cada una de las filas de la
tabla productos
select productosNombreProductocategoriasNombrecategoria from productos cross join categorias
order by productosNombreProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 61
Ejercicios de consultas Muacuteltiples
Ejemplo 87
Mostrar el pedidos completo con el id=10248
Select pedidosIdPedido pedidosIdCliente
Total=sum ([detalles de pedidos]Preciounidad[detalles de pedidos]Cantidad)
From [detalles de pedidos] inner join pedidos on
[Detalles de pedidos]IdPedido=pedidosIdPedido where pedidosIdPedido=10248
Group by pedidosIdPedido pedidosIdCliente
Ejemplo 88
1 Mostrar la cantidad de productos por categoriacutea
Select CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
[Total de Producto]=sum (UnidadesEnExistencia) from Categoriacuteas inner join
Productos on CategoriacuteasIdCategoriacutea=productosIdCategoriacutea
Group by CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 62
Ejemplo 89
Calcular cuantas ventas tiene cada uno de los vendedores
Select empleadosIdEmpleado empleadosNombre empleadosApellidos
[Total de ventas]=count (pedidosIdPedido) from empleados
Inner join Pedidos on empleadosIdEmpleado=pedidosIdEmpleado
Group by empleadosIdEmpleado empleadosNombre empleadosApellidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 63
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 despueacutes saca la de Plantilla
Recomendaciones a la hora de usar las combinaciones
Combinar tablas en funcioacuten de claves principales y externas
Limite el nuacutemero de tablas de las combinaciones
Select Apellido
Oficio as
OFICIOFUNCION
salario from emp
UNION
Select Apellido
Funcion Salario from
Plantilla
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 64
SUBCONSULTAS
Es una SELECT anidada en una instruccioacuten INSERT DELETE SELECT o UPDATE
Como una tabla derivada
Select eemp_no as Numero
eApellido
from (select emp_no apellido from emp) as e
Como una expresioacuten
Select emp_no as [Numero]
Apellido
Salario
(select avg(Salario) from emp)
as Diferencia
from emp
where oficio = Empleado
Para correlacionar datos
- Expresioacuten dinaacutemica que cambia en cada fila de una consulta externa
- Es una combinacioacuten entre la subconsulta y la fila de la consulta externa
- Dividen consultas complejas con dos o maacutes consultas simples relacionadas
Subconsulta correlacionada
Select apellido oficiodept_no
from emp as e
where 20 lt
(select dept_no from dept as d
where edept_no = ddept_no
and ddnombre = Ventas)
SUBCONSULTAS
1 Mostrar el numero de empleado el apellido y la fecha de alta del empleado mas antiguo de la
empresa
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 65
SELECT emp_noapellido
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_noapellido
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 Jimeacutenez
select apellido oficio from emp where
oficio = (select oficio from emp where apellido = JIMENEZ)
4 Queremos saber el apellido oficio salario y nuacutemero 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 gt (select max (salario) from
emp where dept_no = 30)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 66
5 Mostrar el apellido la funcioacuten sala o departamento de todos los empleados que trabajen en la
empresa
select eApellido eOficio as [Cargo en Empresa] ddnombre as [Oficina]
from emp as e
inner join dept as d
on edept_no = ddept_no
union
select pApellido pfuncion snombre
from plantilla as p
inner join sala as s
on phospital_cod = shospital_cod
and psala_cod = ssala_cod
union
select dApellido despecialidad hnombre
from doctor as d
inner join hospital as h
on dhospital_cod = hhospital_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 = lsquoventasrsquo))
order by 2
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 67
8 Mostrar los empleados que tienen mejor salario que la media de los directores no incluyendo al
presidente
Select from emp where salario gt
(select avg (salario) from emp where oficio = DIRECTOR)
and oficio ltgt PRESIDENTE
9 Mostrar el apellido funcioacuten salario y coacutedigo 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 = lsquoENFERMEROrsquo or
funcion = lsquoENFERMERArsquo) and hospital_cod = (select hospital_cod from hospital where nombre =
lsquoSAN CARLOSrsquo)
Select apellido funcion salario hospital_cod from plantilla where
funcion in (ENFERMEROENFERMERA)
and hospital_cod = (select hospital_cod from hospital
where nombre = SAN CARLOS)
10 Visualizar los datos de los hospitales que tienen personal (Doctores) de cardiologiacutea
Select from hospital where hospital_cod in (select hospital_cod from doctor where
especialidad = lsquoCardiologiacutearsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 68
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 = lsquoPROVINCIALrsquo or
nombre= lsquoGENERALrsquo)
12 Mostrar el apellido de los enfermos que nacieron antes que el Sentildeor Miller
Select apellido from enfermo where Fecha_nac lt (select fecha_nac from enfermo where
apellido = lsquoMILLER Brsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 69
Simulacion de una clausula JOIN
Vamos a mostrar los oficios que estaacuten en maacutes de un departamento
Select distinct e1oficio from emp as e1
where e1oficio in(Select e2oficio from emp as e2
where e1dept_no ltgt e2dept_no)
Se debe utilizar antes una combinacioacuten que una subconsulta la combinacioacuten seriacutea asi dando los
mismos resultados
Select distinct e1Oficio from emp as e1
inner join emp as e2
on e1oficio = e2oficio
where e1dept_no ltgt e2dept_no
Estos son los dos oficios que estaacuten en
maacutes de un departamento
Subconsulta para simular una clausula HAVING
select e1apellidoe1oficio e1salario
from emp as e1
where e1salario gt
(select avg(e2salario) from emp as e2
where e1oficio = e2oficio)
Esta es la consulta utilizando el HAVING que es la que deberiacuteamos utilizar antes que una
subconsulta de simulacioacuten HAVING
SELECT e1apellidoe1oficio e1salario
FROM emp AS e1
INNER JOIN emp AS e2
ON e1oficio = e2oficio
GROUP BY e1oficio e1salarioe1apellido
HAVING e1salario gt AVG (e2salario)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 70
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 53
=====================
251250000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
mod_cook 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
popular_comp 229500 70000000
popular_comp 200000 80000000
popular_comp NULL NULL
sum
=====================
429500
sum
=====================
150000000
(30 filas afectadas)
Ejemplo 77
Generar un informe que muestre la suma de los precios de los libros de psicologiacutea 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 109500
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 54
psychology 0736 70000
psychology 0736 199900
psychology 0736 79900
sum
=====================
459300
TIPO CODIGO EDITOR PRECIO
------------ ------------- ---------------------
psychology 0877 215900
sum
=====================
215900
(7 filas afectadas)
Ejemplo 78
Generar un informe que obtenga la suma de los precios de todos los libros de psicologiacutea asiacute como la
suma de los precios de los libros de psicologiacutea 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 109500
psychology 0736 70000
psychology 0736 199900
psychology 0736 79900
sum
=====================
459300
TIPO CODIGO EDITOR PRECIO
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 55
------------ ------------- ---------------------
psychology 0877 215900
sum
=====================
215900
sum
=====================
675200
(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 199900 0000
mod_cook 0877 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO CODIGO EDITOR PRECIO ANTICIPO
------------ ------------- --------------------- ---------------------
trad_cook 0877 119500 40000000
trad_cook 0877 209500 70000000
trad_cook 0877 149900 80000000
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 56
sum
=====================
478900
sum
=====================
190000000
(9 filas afectadas)
Ejemplo 80
Generar un informe que muestre todos los tiacutetulos precio y anticipo de aquellos tiacutetulos que tengan
un precio superior a 20 doacutelares Ofreceraacute tambieacuten la suma total del precio y del anticipo
Select title as [TITULO] price as [PRECIO] advance as [ANTICIPO] From titles where price gt 20 order by title compute sum(price) compute sum(advance)
TITULO PRECIO ANTICIPO
-------------------------------------------------------------------------------- --------------------- -------------
--------
But Is It User Friendly 229500 70000000
Computer Phobic AND Non-Phobic Individuals Behavior Variations 215900
70000000
Onions Leeks and Garlic Cooking Secrets of the Mediterranean 209500
70000000
sum
=====================
654900
sum
=====================
210000000
(5 filas afectadas)
Ejemplo 81
Generar un informe que muestre el precio el tipo y el nuacutemero de editor de la tabla titles de todos
aquellas obras que pertenezcan la categoriacutea de ldquobusinessrdquo Ademaacutes apareceraacute la suma total de
precios y el maacuteximo pub_id de esta seleccioacuten
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 57
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 29900 0736
business 199900 1389
business 199900 1389
business 119500 1389
sum
=====================
549200
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 Mostraraacute la suma de los precios y los anticipos por tipo y luego calcularaacute 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 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
trad_cook 209500 70000000
trad_cook 119500 40000000
trad_cook 149900 80000000
sum
=====================
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 58
478900
sum
=====================
190000000
sum
=====================
708700
sum
=====================
340000000
(11 filas afectadas)
Eliminacioacuten 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 iquestA que precio se ah vendido los productos
Select IdProducto Preciounidad from [Detalles de pedidos] order by IdProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 59
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 mayoriacutea de las consultas que se hacen en una base de datos requiere que se lean datos procedentes
de dos oacute maacutes tablas
INNER JOIN- son las filas que satisfacen la condicioacuten de la combinacioacuten
En la siguiente sentencia SQL enlaza 2 tablas la tabla clientes y la tabla pedidos en esta ejemplo me
muestra los campos nombre compantildeiacutea y el campo idpedido
La uacutenica condicioacuten es que las 2 tablas tengan un campo en comuacuten
Ejemplo 84
select clientesNombreCompantildeiacuteapedidosidpedido from clientes inner join pedidos on
clientesidcliente=pedidosidcliente
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 60
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 pedidosIdPedido pedidosIdCliente 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 pedidosIdPedido pedidosIdCliente order
by pedidos IdPedido
CROSS JOIN
Un Cross Join es la consulta correlacionada que combine cada una de las filas de una de las tablas con
todas las filas de la otra tabla
No es necesario que exista una columna en comuacuten para ejecutar el Cross Join
Ejemplo 86
La siguiente consulta combina cada una de las filas de la tabla categoriacuteas con cada una de las filas de la
tabla productos
select productosNombreProductocategoriasNombrecategoria from productos cross join categorias
order by productosNombreProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 61
Ejercicios de consultas Muacuteltiples
Ejemplo 87
Mostrar el pedidos completo con el id=10248
Select pedidosIdPedido pedidosIdCliente
Total=sum ([detalles de pedidos]Preciounidad[detalles de pedidos]Cantidad)
From [detalles de pedidos] inner join pedidos on
[Detalles de pedidos]IdPedido=pedidosIdPedido where pedidosIdPedido=10248
Group by pedidosIdPedido pedidosIdCliente
Ejemplo 88
1 Mostrar la cantidad de productos por categoriacutea
Select CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
[Total de Producto]=sum (UnidadesEnExistencia) from Categoriacuteas inner join
Productos on CategoriacuteasIdCategoriacutea=productosIdCategoriacutea
Group by CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 62
Ejemplo 89
Calcular cuantas ventas tiene cada uno de los vendedores
Select empleadosIdEmpleado empleadosNombre empleadosApellidos
[Total de ventas]=count (pedidosIdPedido) from empleados
Inner join Pedidos on empleadosIdEmpleado=pedidosIdEmpleado
Group by empleadosIdEmpleado empleadosNombre empleadosApellidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 63
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 despueacutes saca la de Plantilla
Recomendaciones a la hora de usar las combinaciones
Combinar tablas en funcioacuten de claves principales y externas
Limite el nuacutemero de tablas de las combinaciones
Select Apellido
Oficio as
OFICIOFUNCION
salario from emp
UNION
Select Apellido
Funcion Salario from
Plantilla
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 64
SUBCONSULTAS
Es una SELECT anidada en una instruccioacuten INSERT DELETE SELECT o UPDATE
Como una tabla derivada
Select eemp_no as Numero
eApellido
from (select emp_no apellido from emp) as e
Como una expresioacuten
Select emp_no as [Numero]
Apellido
Salario
(select avg(Salario) from emp)
as Diferencia
from emp
where oficio = Empleado
Para correlacionar datos
- Expresioacuten dinaacutemica que cambia en cada fila de una consulta externa
- Es una combinacioacuten entre la subconsulta y la fila de la consulta externa
- Dividen consultas complejas con dos o maacutes consultas simples relacionadas
Subconsulta correlacionada
Select apellido oficiodept_no
from emp as e
where 20 lt
(select dept_no from dept as d
where edept_no = ddept_no
and ddnombre = Ventas)
SUBCONSULTAS
1 Mostrar el numero de empleado el apellido y la fecha de alta del empleado mas antiguo de la
empresa
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 65
SELECT emp_noapellido
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_noapellido
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 Jimeacutenez
select apellido oficio from emp where
oficio = (select oficio from emp where apellido = JIMENEZ)
4 Queremos saber el apellido oficio salario y nuacutemero 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 gt (select max (salario) from
emp where dept_no = 30)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 66
5 Mostrar el apellido la funcioacuten sala o departamento de todos los empleados que trabajen en la
empresa
select eApellido eOficio as [Cargo en Empresa] ddnombre as [Oficina]
from emp as e
inner join dept as d
on edept_no = ddept_no
union
select pApellido pfuncion snombre
from plantilla as p
inner join sala as s
on phospital_cod = shospital_cod
and psala_cod = ssala_cod
union
select dApellido despecialidad hnombre
from doctor as d
inner join hospital as h
on dhospital_cod = hhospital_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 = lsquoventasrsquo))
order by 2
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 67
8 Mostrar los empleados que tienen mejor salario que la media de los directores no incluyendo al
presidente
Select from emp where salario gt
(select avg (salario) from emp where oficio = DIRECTOR)
and oficio ltgt PRESIDENTE
9 Mostrar el apellido funcioacuten salario y coacutedigo 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 = lsquoENFERMEROrsquo or
funcion = lsquoENFERMERArsquo) and hospital_cod = (select hospital_cod from hospital where nombre =
lsquoSAN CARLOSrsquo)
Select apellido funcion salario hospital_cod from plantilla where
funcion in (ENFERMEROENFERMERA)
and hospital_cod = (select hospital_cod from hospital
where nombre = SAN CARLOS)
10 Visualizar los datos de los hospitales que tienen personal (Doctores) de cardiologiacutea
Select from hospital where hospital_cod in (select hospital_cod from doctor where
especialidad = lsquoCardiologiacutearsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 68
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 = lsquoPROVINCIALrsquo or
nombre= lsquoGENERALrsquo)
12 Mostrar el apellido de los enfermos que nacieron antes que el Sentildeor Miller
Select apellido from enfermo where Fecha_nac lt (select fecha_nac from enfermo where
apellido = lsquoMILLER Brsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 69
Simulacion de una clausula JOIN
Vamos a mostrar los oficios que estaacuten en maacutes de un departamento
Select distinct e1oficio from emp as e1
where e1oficio in(Select e2oficio from emp as e2
where e1dept_no ltgt e2dept_no)
Se debe utilizar antes una combinacioacuten que una subconsulta la combinacioacuten seriacutea asi dando los
mismos resultados
Select distinct e1Oficio from emp as e1
inner join emp as e2
on e1oficio = e2oficio
where e1dept_no ltgt e2dept_no
Estos son los dos oficios que estaacuten en
maacutes de un departamento
Subconsulta para simular una clausula HAVING
select e1apellidoe1oficio e1salario
from emp as e1
where e1salario gt
(select avg(e2salario) from emp as e2
where e1oficio = e2oficio)
Esta es la consulta utilizando el HAVING que es la que deberiacuteamos utilizar antes que una
subconsulta de simulacioacuten HAVING
SELECT e1apellidoe1oficio e1salario
FROM emp AS e1
INNER JOIN emp AS e2
ON e1oficio = e2oficio
GROUP BY e1oficio e1salarioe1apellido
HAVING e1salario gt AVG (e2salario)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 70
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 54
psychology 0736 70000
psychology 0736 199900
psychology 0736 79900
sum
=====================
459300
TIPO CODIGO EDITOR PRECIO
------------ ------------- ---------------------
psychology 0877 215900
sum
=====================
215900
(7 filas afectadas)
Ejemplo 78
Generar un informe que obtenga la suma de los precios de todos los libros de psicologiacutea asiacute como la
suma de los precios de los libros de psicologiacutea 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 109500
psychology 0736 70000
psychology 0736 199900
psychology 0736 79900
sum
=====================
459300
TIPO CODIGO EDITOR PRECIO
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 55
------------ ------------- ---------------------
psychology 0877 215900
sum
=====================
215900
sum
=====================
675200
(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 199900 0000
mod_cook 0877 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO CODIGO EDITOR PRECIO ANTICIPO
------------ ------------- --------------------- ---------------------
trad_cook 0877 119500 40000000
trad_cook 0877 209500 70000000
trad_cook 0877 149900 80000000
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 56
sum
=====================
478900
sum
=====================
190000000
(9 filas afectadas)
Ejemplo 80
Generar un informe que muestre todos los tiacutetulos precio y anticipo de aquellos tiacutetulos que tengan
un precio superior a 20 doacutelares Ofreceraacute tambieacuten la suma total del precio y del anticipo
Select title as [TITULO] price as [PRECIO] advance as [ANTICIPO] From titles where price gt 20 order by title compute sum(price) compute sum(advance)
TITULO PRECIO ANTICIPO
-------------------------------------------------------------------------------- --------------------- -------------
--------
But Is It User Friendly 229500 70000000
Computer Phobic AND Non-Phobic Individuals Behavior Variations 215900
70000000
Onions Leeks and Garlic Cooking Secrets of the Mediterranean 209500
70000000
sum
=====================
654900
sum
=====================
210000000
(5 filas afectadas)
Ejemplo 81
Generar un informe que muestre el precio el tipo y el nuacutemero de editor de la tabla titles de todos
aquellas obras que pertenezcan la categoriacutea de ldquobusinessrdquo Ademaacutes apareceraacute la suma total de
precios y el maacuteximo pub_id de esta seleccioacuten
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 57
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 29900 0736
business 199900 1389
business 199900 1389
business 119500 1389
sum
=====================
549200
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 Mostraraacute la suma de los precios y los anticipos por tipo y luego calcularaacute 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 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
trad_cook 209500 70000000
trad_cook 119500 40000000
trad_cook 149900 80000000
sum
=====================
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 58
478900
sum
=====================
190000000
sum
=====================
708700
sum
=====================
340000000
(11 filas afectadas)
Eliminacioacuten 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 iquestA que precio se ah vendido los productos
Select IdProducto Preciounidad from [Detalles de pedidos] order by IdProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 59
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 mayoriacutea de las consultas que se hacen en una base de datos requiere que se lean datos procedentes
de dos oacute maacutes tablas
INNER JOIN- son las filas que satisfacen la condicioacuten de la combinacioacuten
En la siguiente sentencia SQL enlaza 2 tablas la tabla clientes y la tabla pedidos en esta ejemplo me
muestra los campos nombre compantildeiacutea y el campo idpedido
La uacutenica condicioacuten es que las 2 tablas tengan un campo en comuacuten
Ejemplo 84
select clientesNombreCompantildeiacuteapedidosidpedido from clientes inner join pedidos on
clientesidcliente=pedidosidcliente
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 60
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 pedidosIdPedido pedidosIdCliente 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 pedidosIdPedido pedidosIdCliente order
by pedidos IdPedido
CROSS JOIN
Un Cross Join es la consulta correlacionada que combine cada una de las filas de una de las tablas con
todas las filas de la otra tabla
No es necesario que exista una columna en comuacuten para ejecutar el Cross Join
Ejemplo 86
La siguiente consulta combina cada una de las filas de la tabla categoriacuteas con cada una de las filas de la
tabla productos
select productosNombreProductocategoriasNombrecategoria from productos cross join categorias
order by productosNombreProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 61
Ejercicios de consultas Muacuteltiples
Ejemplo 87
Mostrar el pedidos completo con el id=10248
Select pedidosIdPedido pedidosIdCliente
Total=sum ([detalles de pedidos]Preciounidad[detalles de pedidos]Cantidad)
From [detalles de pedidos] inner join pedidos on
[Detalles de pedidos]IdPedido=pedidosIdPedido where pedidosIdPedido=10248
Group by pedidosIdPedido pedidosIdCliente
Ejemplo 88
1 Mostrar la cantidad de productos por categoriacutea
Select CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
[Total de Producto]=sum (UnidadesEnExistencia) from Categoriacuteas inner join
Productos on CategoriacuteasIdCategoriacutea=productosIdCategoriacutea
Group by CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 62
Ejemplo 89
Calcular cuantas ventas tiene cada uno de los vendedores
Select empleadosIdEmpleado empleadosNombre empleadosApellidos
[Total de ventas]=count (pedidosIdPedido) from empleados
Inner join Pedidos on empleadosIdEmpleado=pedidosIdEmpleado
Group by empleadosIdEmpleado empleadosNombre empleadosApellidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 63
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 despueacutes saca la de Plantilla
Recomendaciones a la hora de usar las combinaciones
Combinar tablas en funcioacuten de claves principales y externas
Limite el nuacutemero de tablas de las combinaciones
Select Apellido
Oficio as
OFICIOFUNCION
salario from emp
UNION
Select Apellido
Funcion Salario from
Plantilla
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 64
SUBCONSULTAS
Es una SELECT anidada en una instruccioacuten INSERT DELETE SELECT o UPDATE
Como una tabla derivada
Select eemp_no as Numero
eApellido
from (select emp_no apellido from emp) as e
Como una expresioacuten
Select emp_no as [Numero]
Apellido
Salario
(select avg(Salario) from emp)
as Diferencia
from emp
where oficio = Empleado
Para correlacionar datos
- Expresioacuten dinaacutemica que cambia en cada fila de una consulta externa
- Es una combinacioacuten entre la subconsulta y la fila de la consulta externa
- Dividen consultas complejas con dos o maacutes consultas simples relacionadas
Subconsulta correlacionada
Select apellido oficiodept_no
from emp as e
where 20 lt
(select dept_no from dept as d
where edept_no = ddept_no
and ddnombre = Ventas)
SUBCONSULTAS
1 Mostrar el numero de empleado el apellido y la fecha de alta del empleado mas antiguo de la
empresa
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 65
SELECT emp_noapellido
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_noapellido
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 Jimeacutenez
select apellido oficio from emp where
oficio = (select oficio from emp where apellido = JIMENEZ)
4 Queremos saber el apellido oficio salario y nuacutemero 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 gt (select max (salario) from
emp where dept_no = 30)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 66
5 Mostrar el apellido la funcioacuten sala o departamento de todos los empleados que trabajen en la
empresa
select eApellido eOficio as [Cargo en Empresa] ddnombre as [Oficina]
from emp as e
inner join dept as d
on edept_no = ddept_no
union
select pApellido pfuncion snombre
from plantilla as p
inner join sala as s
on phospital_cod = shospital_cod
and psala_cod = ssala_cod
union
select dApellido despecialidad hnombre
from doctor as d
inner join hospital as h
on dhospital_cod = hhospital_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 = lsquoventasrsquo))
order by 2
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 67
8 Mostrar los empleados que tienen mejor salario que la media de los directores no incluyendo al
presidente
Select from emp where salario gt
(select avg (salario) from emp where oficio = DIRECTOR)
and oficio ltgt PRESIDENTE
9 Mostrar el apellido funcioacuten salario y coacutedigo 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 = lsquoENFERMEROrsquo or
funcion = lsquoENFERMERArsquo) and hospital_cod = (select hospital_cod from hospital where nombre =
lsquoSAN CARLOSrsquo)
Select apellido funcion salario hospital_cod from plantilla where
funcion in (ENFERMEROENFERMERA)
and hospital_cod = (select hospital_cod from hospital
where nombre = SAN CARLOS)
10 Visualizar los datos de los hospitales que tienen personal (Doctores) de cardiologiacutea
Select from hospital where hospital_cod in (select hospital_cod from doctor where
especialidad = lsquoCardiologiacutearsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 68
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 = lsquoPROVINCIALrsquo or
nombre= lsquoGENERALrsquo)
12 Mostrar el apellido de los enfermos que nacieron antes que el Sentildeor Miller
Select apellido from enfermo where Fecha_nac lt (select fecha_nac from enfermo where
apellido = lsquoMILLER Brsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 69
Simulacion de una clausula JOIN
Vamos a mostrar los oficios que estaacuten en maacutes de un departamento
Select distinct e1oficio from emp as e1
where e1oficio in(Select e2oficio from emp as e2
where e1dept_no ltgt e2dept_no)
Se debe utilizar antes una combinacioacuten que una subconsulta la combinacioacuten seriacutea asi dando los
mismos resultados
Select distinct e1Oficio from emp as e1
inner join emp as e2
on e1oficio = e2oficio
where e1dept_no ltgt e2dept_no
Estos son los dos oficios que estaacuten en
maacutes de un departamento
Subconsulta para simular una clausula HAVING
select e1apellidoe1oficio e1salario
from emp as e1
where e1salario gt
(select avg(e2salario) from emp as e2
where e1oficio = e2oficio)
Esta es la consulta utilizando el HAVING que es la que deberiacuteamos utilizar antes que una
subconsulta de simulacioacuten HAVING
SELECT e1apellidoe1oficio e1salario
FROM emp AS e1
INNER JOIN emp AS e2
ON e1oficio = e2oficio
GROUP BY e1oficio e1salarioe1apellido
HAVING e1salario gt AVG (e2salario)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 70
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 55
------------ ------------- ---------------------
psychology 0877 215900
sum
=====================
215900
sum
=====================
675200
(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 199900 0000
mod_cook 0877 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO CODIGO EDITOR PRECIO ANTICIPO
------------ ------------- --------------------- ---------------------
trad_cook 0877 119500 40000000
trad_cook 0877 209500 70000000
trad_cook 0877 149900 80000000
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 56
sum
=====================
478900
sum
=====================
190000000
(9 filas afectadas)
Ejemplo 80
Generar un informe que muestre todos los tiacutetulos precio y anticipo de aquellos tiacutetulos que tengan
un precio superior a 20 doacutelares Ofreceraacute tambieacuten la suma total del precio y del anticipo
Select title as [TITULO] price as [PRECIO] advance as [ANTICIPO] From titles where price gt 20 order by title compute sum(price) compute sum(advance)
TITULO PRECIO ANTICIPO
-------------------------------------------------------------------------------- --------------------- -------------
--------
But Is It User Friendly 229500 70000000
Computer Phobic AND Non-Phobic Individuals Behavior Variations 215900
70000000
Onions Leeks and Garlic Cooking Secrets of the Mediterranean 209500
70000000
sum
=====================
654900
sum
=====================
210000000
(5 filas afectadas)
Ejemplo 81
Generar un informe que muestre el precio el tipo y el nuacutemero de editor de la tabla titles de todos
aquellas obras que pertenezcan la categoriacutea de ldquobusinessrdquo Ademaacutes apareceraacute la suma total de
precios y el maacuteximo pub_id de esta seleccioacuten
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 57
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 29900 0736
business 199900 1389
business 199900 1389
business 119500 1389
sum
=====================
549200
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 Mostraraacute la suma de los precios y los anticipos por tipo y luego calcularaacute 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 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
trad_cook 209500 70000000
trad_cook 119500 40000000
trad_cook 149900 80000000
sum
=====================
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 58
478900
sum
=====================
190000000
sum
=====================
708700
sum
=====================
340000000
(11 filas afectadas)
Eliminacioacuten 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 iquestA que precio se ah vendido los productos
Select IdProducto Preciounidad from [Detalles de pedidos] order by IdProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 59
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 mayoriacutea de las consultas que se hacen en una base de datos requiere que se lean datos procedentes
de dos oacute maacutes tablas
INNER JOIN- son las filas que satisfacen la condicioacuten de la combinacioacuten
En la siguiente sentencia SQL enlaza 2 tablas la tabla clientes y la tabla pedidos en esta ejemplo me
muestra los campos nombre compantildeiacutea y el campo idpedido
La uacutenica condicioacuten es que las 2 tablas tengan un campo en comuacuten
Ejemplo 84
select clientesNombreCompantildeiacuteapedidosidpedido from clientes inner join pedidos on
clientesidcliente=pedidosidcliente
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 60
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 pedidosIdPedido pedidosIdCliente 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 pedidosIdPedido pedidosIdCliente order
by pedidos IdPedido
CROSS JOIN
Un Cross Join es la consulta correlacionada que combine cada una de las filas de una de las tablas con
todas las filas de la otra tabla
No es necesario que exista una columna en comuacuten para ejecutar el Cross Join
Ejemplo 86
La siguiente consulta combina cada una de las filas de la tabla categoriacuteas con cada una de las filas de la
tabla productos
select productosNombreProductocategoriasNombrecategoria from productos cross join categorias
order by productosNombreProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 61
Ejercicios de consultas Muacuteltiples
Ejemplo 87
Mostrar el pedidos completo con el id=10248
Select pedidosIdPedido pedidosIdCliente
Total=sum ([detalles de pedidos]Preciounidad[detalles de pedidos]Cantidad)
From [detalles de pedidos] inner join pedidos on
[Detalles de pedidos]IdPedido=pedidosIdPedido where pedidosIdPedido=10248
Group by pedidosIdPedido pedidosIdCliente
Ejemplo 88
1 Mostrar la cantidad de productos por categoriacutea
Select CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
[Total de Producto]=sum (UnidadesEnExistencia) from Categoriacuteas inner join
Productos on CategoriacuteasIdCategoriacutea=productosIdCategoriacutea
Group by CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 62
Ejemplo 89
Calcular cuantas ventas tiene cada uno de los vendedores
Select empleadosIdEmpleado empleadosNombre empleadosApellidos
[Total de ventas]=count (pedidosIdPedido) from empleados
Inner join Pedidos on empleadosIdEmpleado=pedidosIdEmpleado
Group by empleadosIdEmpleado empleadosNombre empleadosApellidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 63
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 despueacutes saca la de Plantilla
Recomendaciones a la hora de usar las combinaciones
Combinar tablas en funcioacuten de claves principales y externas
Limite el nuacutemero de tablas de las combinaciones
Select Apellido
Oficio as
OFICIOFUNCION
salario from emp
UNION
Select Apellido
Funcion Salario from
Plantilla
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 64
SUBCONSULTAS
Es una SELECT anidada en una instruccioacuten INSERT DELETE SELECT o UPDATE
Como una tabla derivada
Select eemp_no as Numero
eApellido
from (select emp_no apellido from emp) as e
Como una expresioacuten
Select emp_no as [Numero]
Apellido
Salario
(select avg(Salario) from emp)
as Diferencia
from emp
where oficio = Empleado
Para correlacionar datos
- Expresioacuten dinaacutemica que cambia en cada fila de una consulta externa
- Es una combinacioacuten entre la subconsulta y la fila de la consulta externa
- Dividen consultas complejas con dos o maacutes consultas simples relacionadas
Subconsulta correlacionada
Select apellido oficiodept_no
from emp as e
where 20 lt
(select dept_no from dept as d
where edept_no = ddept_no
and ddnombre = Ventas)
SUBCONSULTAS
1 Mostrar el numero de empleado el apellido y la fecha de alta del empleado mas antiguo de la
empresa
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 65
SELECT emp_noapellido
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_noapellido
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 Jimeacutenez
select apellido oficio from emp where
oficio = (select oficio from emp where apellido = JIMENEZ)
4 Queremos saber el apellido oficio salario y nuacutemero 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 gt (select max (salario) from
emp where dept_no = 30)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 66
5 Mostrar el apellido la funcioacuten sala o departamento de todos los empleados que trabajen en la
empresa
select eApellido eOficio as [Cargo en Empresa] ddnombre as [Oficina]
from emp as e
inner join dept as d
on edept_no = ddept_no
union
select pApellido pfuncion snombre
from plantilla as p
inner join sala as s
on phospital_cod = shospital_cod
and psala_cod = ssala_cod
union
select dApellido despecialidad hnombre
from doctor as d
inner join hospital as h
on dhospital_cod = hhospital_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 = lsquoventasrsquo))
order by 2
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 67
8 Mostrar los empleados que tienen mejor salario que la media de los directores no incluyendo al
presidente
Select from emp where salario gt
(select avg (salario) from emp where oficio = DIRECTOR)
and oficio ltgt PRESIDENTE
9 Mostrar el apellido funcioacuten salario y coacutedigo 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 = lsquoENFERMEROrsquo or
funcion = lsquoENFERMERArsquo) and hospital_cod = (select hospital_cod from hospital where nombre =
lsquoSAN CARLOSrsquo)
Select apellido funcion salario hospital_cod from plantilla where
funcion in (ENFERMEROENFERMERA)
and hospital_cod = (select hospital_cod from hospital
where nombre = SAN CARLOS)
10 Visualizar los datos de los hospitales que tienen personal (Doctores) de cardiologiacutea
Select from hospital where hospital_cod in (select hospital_cod from doctor where
especialidad = lsquoCardiologiacutearsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 68
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 = lsquoPROVINCIALrsquo or
nombre= lsquoGENERALrsquo)
12 Mostrar el apellido de los enfermos que nacieron antes que el Sentildeor Miller
Select apellido from enfermo where Fecha_nac lt (select fecha_nac from enfermo where
apellido = lsquoMILLER Brsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 69
Simulacion de una clausula JOIN
Vamos a mostrar los oficios que estaacuten en maacutes de un departamento
Select distinct e1oficio from emp as e1
where e1oficio in(Select e2oficio from emp as e2
where e1dept_no ltgt e2dept_no)
Se debe utilizar antes una combinacioacuten que una subconsulta la combinacioacuten seriacutea asi dando los
mismos resultados
Select distinct e1Oficio from emp as e1
inner join emp as e2
on e1oficio = e2oficio
where e1dept_no ltgt e2dept_no
Estos son los dos oficios que estaacuten en
maacutes de un departamento
Subconsulta para simular una clausula HAVING
select e1apellidoe1oficio e1salario
from emp as e1
where e1salario gt
(select avg(e2salario) from emp as e2
where e1oficio = e2oficio)
Esta es la consulta utilizando el HAVING que es la que deberiacuteamos utilizar antes que una
subconsulta de simulacioacuten HAVING
SELECT e1apellidoe1oficio e1salario
FROM emp AS e1
INNER JOIN emp AS e2
ON e1oficio = e2oficio
GROUP BY e1oficio e1salarioe1apellido
HAVING e1salario gt AVG (e2salario)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 70
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 56
sum
=====================
478900
sum
=====================
190000000
(9 filas afectadas)
Ejemplo 80
Generar un informe que muestre todos los tiacutetulos precio y anticipo de aquellos tiacutetulos que tengan
un precio superior a 20 doacutelares Ofreceraacute tambieacuten la suma total del precio y del anticipo
Select title as [TITULO] price as [PRECIO] advance as [ANTICIPO] From titles where price gt 20 order by title compute sum(price) compute sum(advance)
TITULO PRECIO ANTICIPO
-------------------------------------------------------------------------------- --------------------- -------------
--------
But Is It User Friendly 229500 70000000
Computer Phobic AND Non-Phobic Individuals Behavior Variations 215900
70000000
Onions Leeks and Garlic Cooking Secrets of the Mediterranean 209500
70000000
sum
=====================
654900
sum
=====================
210000000
(5 filas afectadas)
Ejemplo 81
Generar un informe que muestre el precio el tipo y el nuacutemero de editor de la tabla titles de todos
aquellas obras que pertenezcan la categoriacutea de ldquobusinessrdquo Ademaacutes apareceraacute la suma total de
precios y el maacuteximo pub_id de esta seleccioacuten
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 57
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 29900 0736
business 199900 1389
business 199900 1389
business 119500 1389
sum
=====================
549200
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 Mostraraacute la suma de los precios y los anticipos por tipo y luego calcularaacute 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 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
trad_cook 209500 70000000
trad_cook 119500 40000000
trad_cook 149900 80000000
sum
=====================
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 58
478900
sum
=====================
190000000
sum
=====================
708700
sum
=====================
340000000
(11 filas afectadas)
Eliminacioacuten 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 iquestA que precio se ah vendido los productos
Select IdProducto Preciounidad from [Detalles de pedidos] order by IdProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 59
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 mayoriacutea de las consultas que se hacen en una base de datos requiere que se lean datos procedentes
de dos oacute maacutes tablas
INNER JOIN- son las filas que satisfacen la condicioacuten de la combinacioacuten
En la siguiente sentencia SQL enlaza 2 tablas la tabla clientes y la tabla pedidos en esta ejemplo me
muestra los campos nombre compantildeiacutea y el campo idpedido
La uacutenica condicioacuten es que las 2 tablas tengan un campo en comuacuten
Ejemplo 84
select clientesNombreCompantildeiacuteapedidosidpedido from clientes inner join pedidos on
clientesidcliente=pedidosidcliente
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 60
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 pedidosIdPedido pedidosIdCliente 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 pedidosIdPedido pedidosIdCliente order
by pedidos IdPedido
CROSS JOIN
Un Cross Join es la consulta correlacionada que combine cada una de las filas de una de las tablas con
todas las filas de la otra tabla
No es necesario que exista una columna en comuacuten para ejecutar el Cross Join
Ejemplo 86
La siguiente consulta combina cada una de las filas de la tabla categoriacuteas con cada una de las filas de la
tabla productos
select productosNombreProductocategoriasNombrecategoria from productos cross join categorias
order by productosNombreProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 61
Ejercicios de consultas Muacuteltiples
Ejemplo 87
Mostrar el pedidos completo con el id=10248
Select pedidosIdPedido pedidosIdCliente
Total=sum ([detalles de pedidos]Preciounidad[detalles de pedidos]Cantidad)
From [detalles de pedidos] inner join pedidos on
[Detalles de pedidos]IdPedido=pedidosIdPedido where pedidosIdPedido=10248
Group by pedidosIdPedido pedidosIdCliente
Ejemplo 88
1 Mostrar la cantidad de productos por categoriacutea
Select CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
[Total de Producto]=sum (UnidadesEnExistencia) from Categoriacuteas inner join
Productos on CategoriacuteasIdCategoriacutea=productosIdCategoriacutea
Group by CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 62
Ejemplo 89
Calcular cuantas ventas tiene cada uno de los vendedores
Select empleadosIdEmpleado empleadosNombre empleadosApellidos
[Total de ventas]=count (pedidosIdPedido) from empleados
Inner join Pedidos on empleadosIdEmpleado=pedidosIdEmpleado
Group by empleadosIdEmpleado empleadosNombre empleadosApellidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 63
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 despueacutes saca la de Plantilla
Recomendaciones a la hora de usar las combinaciones
Combinar tablas en funcioacuten de claves principales y externas
Limite el nuacutemero de tablas de las combinaciones
Select Apellido
Oficio as
OFICIOFUNCION
salario from emp
UNION
Select Apellido
Funcion Salario from
Plantilla
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 64
SUBCONSULTAS
Es una SELECT anidada en una instruccioacuten INSERT DELETE SELECT o UPDATE
Como una tabla derivada
Select eemp_no as Numero
eApellido
from (select emp_no apellido from emp) as e
Como una expresioacuten
Select emp_no as [Numero]
Apellido
Salario
(select avg(Salario) from emp)
as Diferencia
from emp
where oficio = Empleado
Para correlacionar datos
- Expresioacuten dinaacutemica que cambia en cada fila de una consulta externa
- Es una combinacioacuten entre la subconsulta y la fila de la consulta externa
- Dividen consultas complejas con dos o maacutes consultas simples relacionadas
Subconsulta correlacionada
Select apellido oficiodept_no
from emp as e
where 20 lt
(select dept_no from dept as d
where edept_no = ddept_no
and ddnombre = Ventas)
SUBCONSULTAS
1 Mostrar el numero de empleado el apellido y la fecha de alta del empleado mas antiguo de la
empresa
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 65
SELECT emp_noapellido
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_noapellido
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 Jimeacutenez
select apellido oficio from emp where
oficio = (select oficio from emp where apellido = JIMENEZ)
4 Queremos saber el apellido oficio salario y nuacutemero 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 gt (select max (salario) from
emp where dept_no = 30)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 66
5 Mostrar el apellido la funcioacuten sala o departamento de todos los empleados que trabajen en la
empresa
select eApellido eOficio as [Cargo en Empresa] ddnombre as [Oficina]
from emp as e
inner join dept as d
on edept_no = ddept_no
union
select pApellido pfuncion snombre
from plantilla as p
inner join sala as s
on phospital_cod = shospital_cod
and psala_cod = ssala_cod
union
select dApellido despecialidad hnombre
from doctor as d
inner join hospital as h
on dhospital_cod = hhospital_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 = lsquoventasrsquo))
order by 2
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 67
8 Mostrar los empleados que tienen mejor salario que la media de los directores no incluyendo al
presidente
Select from emp where salario gt
(select avg (salario) from emp where oficio = DIRECTOR)
and oficio ltgt PRESIDENTE
9 Mostrar el apellido funcioacuten salario y coacutedigo 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 = lsquoENFERMEROrsquo or
funcion = lsquoENFERMERArsquo) and hospital_cod = (select hospital_cod from hospital where nombre =
lsquoSAN CARLOSrsquo)
Select apellido funcion salario hospital_cod from plantilla where
funcion in (ENFERMEROENFERMERA)
and hospital_cod = (select hospital_cod from hospital
where nombre = SAN CARLOS)
10 Visualizar los datos de los hospitales que tienen personal (Doctores) de cardiologiacutea
Select from hospital where hospital_cod in (select hospital_cod from doctor where
especialidad = lsquoCardiologiacutearsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 68
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 = lsquoPROVINCIALrsquo or
nombre= lsquoGENERALrsquo)
12 Mostrar el apellido de los enfermos que nacieron antes que el Sentildeor Miller
Select apellido from enfermo where Fecha_nac lt (select fecha_nac from enfermo where
apellido = lsquoMILLER Brsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 69
Simulacion de una clausula JOIN
Vamos a mostrar los oficios que estaacuten en maacutes de un departamento
Select distinct e1oficio from emp as e1
where e1oficio in(Select e2oficio from emp as e2
where e1dept_no ltgt e2dept_no)
Se debe utilizar antes una combinacioacuten que una subconsulta la combinacioacuten seriacutea asi dando los
mismos resultados
Select distinct e1Oficio from emp as e1
inner join emp as e2
on e1oficio = e2oficio
where e1dept_no ltgt e2dept_no
Estos son los dos oficios que estaacuten en
maacutes de un departamento
Subconsulta para simular una clausula HAVING
select e1apellidoe1oficio e1salario
from emp as e1
where e1salario gt
(select avg(e2salario) from emp as e2
where e1oficio = e2oficio)
Esta es la consulta utilizando el HAVING que es la que deberiacuteamos utilizar antes que una
subconsulta de simulacioacuten HAVING
SELECT e1apellidoe1oficio e1salario
FROM emp AS e1
INNER JOIN emp AS e2
ON e1oficio = e2oficio
GROUP BY e1oficio e1salarioe1apellido
HAVING e1salario gt AVG (e2salario)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 70
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 57
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 29900 0736
business 199900 1389
business 199900 1389
business 119500 1389
sum
=====================
549200
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 Mostraraacute la suma de los precios y los anticipos por tipo y luego calcularaacute 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 199900 0000
mod_cook 29900 150000000
sum
=====================
229800
sum
=====================
150000000
TIPO PRECIO ANTICIPO
------------ --------------------- ---------------------
trad_cook 209500 70000000
trad_cook 119500 40000000
trad_cook 149900 80000000
sum
=====================
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 58
478900
sum
=====================
190000000
sum
=====================
708700
sum
=====================
340000000
(11 filas afectadas)
Eliminacioacuten 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 iquestA que precio se ah vendido los productos
Select IdProducto Preciounidad from [Detalles de pedidos] order by IdProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 59
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 mayoriacutea de las consultas que se hacen en una base de datos requiere que se lean datos procedentes
de dos oacute maacutes tablas
INNER JOIN- son las filas que satisfacen la condicioacuten de la combinacioacuten
En la siguiente sentencia SQL enlaza 2 tablas la tabla clientes y la tabla pedidos en esta ejemplo me
muestra los campos nombre compantildeiacutea y el campo idpedido
La uacutenica condicioacuten es que las 2 tablas tengan un campo en comuacuten
Ejemplo 84
select clientesNombreCompantildeiacuteapedidosidpedido from clientes inner join pedidos on
clientesidcliente=pedidosidcliente
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 60
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 pedidosIdPedido pedidosIdCliente 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 pedidosIdPedido pedidosIdCliente order
by pedidos IdPedido
CROSS JOIN
Un Cross Join es la consulta correlacionada que combine cada una de las filas de una de las tablas con
todas las filas de la otra tabla
No es necesario que exista una columna en comuacuten para ejecutar el Cross Join
Ejemplo 86
La siguiente consulta combina cada una de las filas de la tabla categoriacuteas con cada una de las filas de la
tabla productos
select productosNombreProductocategoriasNombrecategoria from productos cross join categorias
order by productosNombreProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 61
Ejercicios de consultas Muacuteltiples
Ejemplo 87
Mostrar el pedidos completo con el id=10248
Select pedidosIdPedido pedidosIdCliente
Total=sum ([detalles de pedidos]Preciounidad[detalles de pedidos]Cantidad)
From [detalles de pedidos] inner join pedidos on
[Detalles de pedidos]IdPedido=pedidosIdPedido where pedidosIdPedido=10248
Group by pedidosIdPedido pedidosIdCliente
Ejemplo 88
1 Mostrar la cantidad de productos por categoriacutea
Select CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
[Total de Producto]=sum (UnidadesEnExistencia) from Categoriacuteas inner join
Productos on CategoriacuteasIdCategoriacutea=productosIdCategoriacutea
Group by CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 62
Ejemplo 89
Calcular cuantas ventas tiene cada uno de los vendedores
Select empleadosIdEmpleado empleadosNombre empleadosApellidos
[Total de ventas]=count (pedidosIdPedido) from empleados
Inner join Pedidos on empleadosIdEmpleado=pedidosIdEmpleado
Group by empleadosIdEmpleado empleadosNombre empleadosApellidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 63
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 despueacutes saca la de Plantilla
Recomendaciones a la hora de usar las combinaciones
Combinar tablas en funcioacuten de claves principales y externas
Limite el nuacutemero de tablas de las combinaciones
Select Apellido
Oficio as
OFICIOFUNCION
salario from emp
UNION
Select Apellido
Funcion Salario from
Plantilla
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 64
SUBCONSULTAS
Es una SELECT anidada en una instruccioacuten INSERT DELETE SELECT o UPDATE
Como una tabla derivada
Select eemp_no as Numero
eApellido
from (select emp_no apellido from emp) as e
Como una expresioacuten
Select emp_no as [Numero]
Apellido
Salario
(select avg(Salario) from emp)
as Diferencia
from emp
where oficio = Empleado
Para correlacionar datos
- Expresioacuten dinaacutemica que cambia en cada fila de una consulta externa
- Es una combinacioacuten entre la subconsulta y la fila de la consulta externa
- Dividen consultas complejas con dos o maacutes consultas simples relacionadas
Subconsulta correlacionada
Select apellido oficiodept_no
from emp as e
where 20 lt
(select dept_no from dept as d
where edept_no = ddept_no
and ddnombre = Ventas)
SUBCONSULTAS
1 Mostrar el numero de empleado el apellido y la fecha de alta del empleado mas antiguo de la
empresa
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 65
SELECT emp_noapellido
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_noapellido
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 Jimeacutenez
select apellido oficio from emp where
oficio = (select oficio from emp where apellido = JIMENEZ)
4 Queremos saber el apellido oficio salario y nuacutemero 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 gt (select max (salario) from
emp where dept_no = 30)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 66
5 Mostrar el apellido la funcioacuten sala o departamento de todos los empleados que trabajen en la
empresa
select eApellido eOficio as [Cargo en Empresa] ddnombre as [Oficina]
from emp as e
inner join dept as d
on edept_no = ddept_no
union
select pApellido pfuncion snombre
from plantilla as p
inner join sala as s
on phospital_cod = shospital_cod
and psala_cod = ssala_cod
union
select dApellido despecialidad hnombre
from doctor as d
inner join hospital as h
on dhospital_cod = hhospital_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 = lsquoventasrsquo))
order by 2
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 67
8 Mostrar los empleados que tienen mejor salario que la media de los directores no incluyendo al
presidente
Select from emp where salario gt
(select avg (salario) from emp where oficio = DIRECTOR)
and oficio ltgt PRESIDENTE
9 Mostrar el apellido funcioacuten salario y coacutedigo 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 = lsquoENFERMEROrsquo or
funcion = lsquoENFERMERArsquo) and hospital_cod = (select hospital_cod from hospital where nombre =
lsquoSAN CARLOSrsquo)
Select apellido funcion salario hospital_cod from plantilla where
funcion in (ENFERMEROENFERMERA)
and hospital_cod = (select hospital_cod from hospital
where nombre = SAN CARLOS)
10 Visualizar los datos de los hospitales que tienen personal (Doctores) de cardiologiacutea
Select from hospital where hospital_cod in (select hospital_cod from doctor where
especialidad = lsquoCardiologiacutearsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 68
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 = lsquoPROVINCIALrsquo or
nombre= lsquoGENERALrsquo)
12 Mostrar el apellido de los enfermos que nacieron antes que el Sentildeor Miller
Select apellido from enfermo where Fecha_nac lt (select fecha_nac from enfermo where
apellido = lsquoMILLER Brsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 69
Simulacion de una clausula JOIN
Vamos a mostrar los oficios que estaacuten en maacutes de un departamento
Select distinct e1oficio from emp as e1
where e1oficio in(Select e2oficio from emp as e2
where e1dept_no ltgt e2dept_no)
Se debe utilizar antes una combinacioacuten que una subconsulta la combinacioacuten seriacutea asi dando los
mismos resultados
Select distinct e1Oficio from emp as e1
inner join emp as e2
on e1oficio = e2oficio
where e1dept_no ltgt e2dept_no
Estos son los dos oficios que estaacuten en
maacutes de un departamento
Subconsulta para simular una clausula HAVING
select e1apellidoe1oficio e1salario
from emp as e1
where e1salario gt
(select avg(e2salario) from emp as e2
where e1oficio = e2oficio)
Esta es la consulta utilizando el HAVING que es la que deberiacuteamos utilizar antes que una
subconsulta de simulacioacuten HAVING
SELECT e1apellidoe1oficio e1salario
FROM emp AS e1
INNER JOIN emp AS e2
ON e1oficio = e2oficio
GROUP BY e1oficio e1salarioe1apellido
HAVING e1salario gt AVG (e2salario)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 70
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 58
478900
sum
=====================
190000000
sum
=====================
708700
sum
=====================
340000000
(11 filas afectadas)
Eliminacioacuten 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 iquestA que precio se ah vendido los productos
Select IdProducto Preciounidad from [Detalles de pedidos] order by IdProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 59
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 mayoriacutea de las consultas que se hacen en una base de datos requiere que se lean datos procedentes
de dos oacute maacutes tablas
INNER JOIN- son las filas que satisfacen la condicioacuten de la combinacioacuten
En la siguiente sentencia SQL enlaza 2 tablas la tabla clientes y la tabla pedidos en esta ejemplo me
muestra los campos nombre compantildeiacutea y el campo idpedido
La uacutenica condicioacuten es que las 2 tablas tengan un campo en comuacuten
Ejemplo 84
select clientesNombreCompantildeiacuteapedidosidpedido from clientes inner join pedidos on
clientesidcliente=pedidosidcliente
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 60
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 pedidosIdPedido pedidosIdCliente 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 pedidosIdPedido pedidosIdCliente order
by pedidos IdPedido
CROSS JOIN
Un Cross Join es la consulta correlacionada que combine cada una de las filas de una de las tablas con
todas las filas de la otra tabla
No es necesario que exista una columna en comuacuten para ejecutar el Cross Join
Ejemplo 86
La siguiente consulta combina cada una de las filas de la tabla categoriacuteas con cada una de las filas de la
tabla productos
select productosNombreProductocategoriasNombrecategoria from productos cross join categorias
order by productosNombreProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 61
Ejercicios de consultas Muacuteltiples
Ejemplo 87
Mostrar el pedidos completo con el id=10248
Select pedidosIdPedido pedidosIdCliente
Total=sum ([detalles de pedidos]Preciounidad[detalles de pedidos]Cantidad)
From [detalles de pedidos] inner join pedidos on
[Detalles de pedidos]IdPedido=pedidosIdPedido where pedidosIdPedido=10248
Group by pedidosIdPedido pedidosIdCliente
Ejemplo 88
1 Mostrar la cantidad de productos por categoriacutea
Select CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
[Total de Producto]=sum (UnidadesEnExistencia) from Categoriacuteas inner join
Productos on CategoriacuteasIdCategoriacutea=productosIdCategoriacutea
Group by CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 62
Ejemplo 89
Calcular cuantas ventas tiene cada uno de los vendedores
Select empleadosIdEmpleado empleadosNombre empleadosApellidos
[Total de ventas]=count (pedidosIdPedido) from empleados
Inner join Pedidos on empleadosIdEmpleado=pedidosIdEmpleado
Group by empleadosIdEmpleado empleadosNombre empleadosApellidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 63
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 despueacutes saca la de Plantilla
Recomendaciones a la hora de usar las combinaciones
Combinar tablas en funcioacuten de claves principales y externas
Limite el nuacutemero de tablas de las combinaciones
Select Apellido
Oficio as
OFICIOFUNCION
salario from emp
UNION
Select Apellido
Funcion Salario from
Plantilla
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 64
SUBCONSULTAS
Es una SELECT anidada en una instruccioacuten INSERT DELETE SELECT o UPDATE
Como una tabla derivada
Select eemp_no as Numero
eApellido
from (select emp_no apellido from emp) as e
Como una expresioacuten
Select emp_no as [Numero]
Apellido
Salario
(select avg(Salario) from emp)
as Diferencia
from emp
where oficio = Empleado
Para correlacionar datos
- Expresioacuten dinaacutemica que cambia en cada fila de una consulta externa
- Es una combinacioacuten entre la subconsulta y la fila de la consulta externa
- Dividen consultas complejas con dos o maacutes consultas simples relacionadas
Subconsulta correlacionada
Select apellido oficiodept_no
from emp as e
where 20 lt
(select dept_no from dept as d
where edept_no = ddept_no
and ddnombre = Ventas)
SUBCONSULTAS
1 Mostrar el numero de empleado el apellido y la fecha de alta del empleado mas antiguo de la
empresa
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 65
SELECT emp_noapellido
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_noapellido
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 Jimeacutenez
select apellido oficio from emp where
oficio = (select oficio from emp where apellido = JIMENEZ)
4 Queremos saber el apellido oficio salario y nuacutemero 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 gt (select max (salario) from
emp where dept_no = 30)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 66
5 Mostrar el apellido la funcioacuten sala o departamento de todos los empleados que trabajen en la
empresa
select eApellido eOficio as [Cargo en Empresa] ddnombre as [Oficina]
from emp as e
inner join dept as d
on edept_no = ddept_no
union
select pApellido pfuncion snombre
from plantilla as p
inner join sala as s
on phospital_cod = shospital_cod
and psala_cod = ssala_cod
union
select dApellido despecialidad hnombre
from doctor as d
inner join hospital as h
on dhospital_cod = hhospital_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 = lsquoventasrsquo))
order by 2
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 67
8 Mostrar los empleados que tienen mejor salario que la media de los directores no incluyendo al
presidente
Select from emp where salario gt
(select avg (salario) from emp where oficio = DIRECTOR)
and oficio ltgt PRESIDENTE
9 Mostrar el apellido funcioacuten salario y coacutedigo 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 = lsquoENFERMEROrsquo or
funcion = lsquoENFERMERArsquo) and hospital_cod = (select hospital_cod from hospital where nombre =
lsquoSAN CARLOSrsquo)
Select apellido funcion salario hospital_cod from plantilla where
funcion in (ENFERMEROENFERMERA)
and hospital_cod = (select hospital_cod from hospital
where nombre = SAN CARLOS)
10 Visualizar los datos de los hospitales que tienen personal (Doctores) de cardiologiacutea
Select from hospital where hospital_cod in (select hospital_cod from doctor where
especialidad = lsquoCardiologiacutearsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 68
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 = lsquoPROVINCIALrsquo or
nombre= lsquoGENERALrsquo)
12 Mostrar el apellido de los enfermos que nacieron antes que el Sentildeor Miller
Select apellido from enfermo where Fecha_nac lt (select fecha_nac from enfermo where
apellido = lsquoMILLER Brsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 69
Simulacion de una clausula JOIN
Vamos a mostrar los oficios que estaacuten en maacutes de un departamento
Select distinct e1oficio from emp as e1
where e1oficio in(Select e2oficio from emp as e2
where e1dept_no ltgt e2dept_no)
Se debe utilizar antes una combinacioacuten que una subconsulta la combinacioacuten seriacutea asi dando los
mismos resultados
Select distinct e1Oficio from emp as e1
inner join emp as e2
on e1oficio = e2oficio
where e1dept_no ltgt e2dept_no
Estos son los dos oficios que estaacuten en
maacutes de un departamento
Subconsulta para simular una clausula HAVING
select e1apellidoe1oficio e1salario
from emp as e1
where e1salario gt
(select avg(e2salario) from emp as e2
where e1oficio = e2oficio)
Esta es la consulta utilizando el HAVING que es la que deberiacuteamos utilizar antes que una
subconsulta de simulacioacuten HAVING
SELECT e1apellidoe1oficio e1salario
FROM emp AS e1
INNER JOIN emp AS e2
ON e1oficio = e2oficio
GROUP BY e1oficio e1salarioe1apellido
HAVING e1salario gt AVG (e2salario)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 70
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 59
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 mayoriacutea de las consultas que se hacen en una base de datos requiere que se lean datos procedentes
de dos oacute maacutes tablas
INNER JOIN- son las filas que satisfacen la condicioacuten de la combinacioacuten
En la siguiente sentencia SQL enlaza 2 tablas la tabla clientes y la tabla pedidos en esta ejemplo me
muestra los campos nombre compantildeiacutea y el campo idpedido
La uacutenica condicioacuten es que las 2 tablas tengan un campo en comuacuten
Ejemplo 84
select clientesNombreCompantildeiacuteapedidosidpedido from clientes inner join pedidos on
clientesidcliente=pedidosidcliente
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 60
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 pedidosIdPedido pedidosIdCliente 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 pedidosIdPedido pedidosIdCliente order
by pedidos IdPedido
CROSS JOIN
Un Cross Join es la consulta correlacionada que combine cada una de las filas de una de las tablas con
todas las filas de la otra tabla
No es necesario que exista una columna en comuacuten para ejecutar el Cross Join
Ejemplo 86
La siguiente consulta combina cada una de las filas de la tabla categoriacuteas con cada una de las filas de la
tabla productos
select productosNombreProductocategoriasNombrecategoria from productos cross join categorias
order by productosNombreProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 61
Ejercicios de consultas Muacuteltiples
Ejemplo 87
Mostrar el pedidos completo con el id=10248
Select pedidosIdPedido pedidosIdCliente
Total=sum ([detalles de pedidos]Preciounidad[detalles de pedidos]Cantidad)
From [detalles de pedidos] inner join pedidos on
[Detalles de pedidos]IdPedido=pedidosIdPedido where pedidosIdPedido=10248
Group by pedidosIdPedido pedidosIdCliente
Ejemplo 88
1 Mostrar la cantidad de productos por categoriacutea
Select CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
[Total de Producto]=sum (UnidadesEnExistencia) from Categoriacuteas inner join
Productos on CategoriacuteasIdCategoriacutea=productosIdCategoriacutea
Group by CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 62
Ejemplo 89
Calcular cuantas ventas tiene cada uno de los vendedores
Select empleadosIdEmpleado empleadosNombre empleadosApellidos
[Total de ventas]=count (pedidosIdPedido) from empleados
Inner join Pedidos on empleadosIdEmpleado=pedidosIdEmpleado
Group by empleadosIdEmpleado empleadosNombre empleadosApellidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 63
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 despueacutes saca la de Plantilla
Recomendaciones a la hora de usar las combinaciones
Combinar tablas en funcioacuten de claves principales y externas
Limite el nuacutemero de tablas de las combinaciones
Select Apellido
Oficio as
OFICIOFUNCION
salario from emp
UNION
Select Apellido
Funcion Salario from
Plantilla
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 64
SUBCONSULTAS
Es una SELECT anidada en una instruccioacuten INSERT DELETE SELECT o UPDATE
Como una tabla derivada
Select eemp_no as Numero
eApellido
from (select emp_no apellido from emp) as e
Como una expresioacuten
Select emp_no as [Numero]
Apellido
Salario
(select avg(Salario) from emp)
as Diferencia
from emp
where oficio = Empleado
Para correlacionar datos
- Expresioacuten dinaacutemica que cambia en cada fila de una consulta externa
- Es una combinacioacuten entre la subconsulta y la fila de la consulta externa
- Dividen consultas complejas con dos o maacutes consultas simples relacionadas
Subconsulta correlacionada
Select apellido oficiodept_no
from emp as e
where 20 lt
(select dept_no from dept as d
where edept_no = ddept_no
and ddnombre = Ventas)
SUBCONSULTAS
1 Mostrar el numero de empleado el apellido y la fecha de alta del empleado mas antiguo de la
empresa
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 65
SELECT emp_noapellido
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_noapellido
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 Jimeacutenez
select apellido oficio from emp where
oficio = (select oficio from emp where apellido = JIMENEZ)
4 Queremos saber el apellido oficio salario y nuacutemero 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 gt (select max (salario) from
emp where dept_no = 30)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 66
5 Mostrar el apellido la funcioacuten sala o departamento de todos los empleados que trabajen en la
empresa
select eApellido eOficio as [Cargo en Empresa] ddnombre as [Oficina]
from emp as e
inner join dept as d
on edept_no = ddept_no
union
select pApellido pfuncion snombre
from plantilla as p
inner join sala as s
on phospital_cod = shospital_cod
and psala_cod = ssala_cod
union
select dApellido despecialidad hnombre
from doctor as d
inner join hospital as h
on dhospital_cod = hhospital_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 = lsquoventasrsquo))
order by 2
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 67
8 Mostrar los empleados que tienen mejor salario que la media de los directores no incluyendo al
presidente
Select from emp where salario gt
(select avg (salario) from emp where oficio = DIRECTOR)
and oficio ltgt PRESIDENTE
9 Mostrar el apellido funcioacuten salario y coacutedigo 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 = lsquoENFERMEROrsquo or
funcion = lsquoENFERMERArsquo) and hospital_cod = (select hospital_cod from hospital where nombre =
lsquoSAN CARLOSrsquo)
Select apellido funcion salario hospital_cod from plantilla where
funcion in (ENFERMEROENFERMERA)
and hospital_cod = (select hospital_cod from hospital
where nombre = SAN CARLOS)
10 Visualizar los datos de los hospitales que tienen personal (Doctores) de cardiologiacutea
Select from hospital where hospital_cod in (select hospital_cod from doctor where
especialidad = lsquoCardiologiacutearsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 68
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 = lsquoPROVINCIALrsquo or
nombre= lsquoGENERALrsquo)
12 Mostrar el apellido de los enfermos que nacieron antes que el Sentildeor Miller
Select apellido from enfermo where Fecha_nac lt (select fecha_nac from enfermo where
apellido = lsquoMILLER Brsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 69
Simulacion de una clausula JOIN
Vamos a mostrar los oficios que estaacuten en maacutes de un departamento
Select distinct e1oficio from emp as e1
where e1oficio in(Select e2oficio from emp as e2
where e1dept_no ltgt e2dept_no)
Se debe utilizar antes una combinacioacuten que una subconsulta la combinacioacuten seriacutea asi dando los
mismos resultados
Select distinct e1Oficio from emp as e1
inner join emp as e2
on e1oficio = e2oficio
where e1dept_no ltgt e2dept_no
Estos son los dos oficios que estaacuten en
maacutes de un departamento
Subconsulta para simular una clausula HAVING
select e1apellidoe1oficio e1salario
from emp as e1
where e1salario gt
(select avg(e2salario) from emp as e2
where e1oficio = e2oficio)
Esta es la consulta utilizando el HAVING que es la que deberiacuteamos utilizar antes que una
subconsulta de simulacioacuten HAVING
SELECT e1apellidoe1oficio e1salario
FROM emp AS e1
INNER JOIN emp AS e2
ON e1oficio = e2oficio
GROUP BY e1oficio e1salarioe1apellido
HAVING e1salario gt AVG (e2salario)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 70
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 60
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 pedidosIdPedido pedidosIdCliente 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 pedidosIdPedido pedidosIdCliente order
by pedidos IdPedido
CROSS JOIN
Un Cross Join es la consulta correlacionada que combine cada una de las filas de una de las tablas con
todas las filas de la otra tabla
No es necesario que exista una columna en comuacuten para ejecutar el Cross Join
Ejemplo 86
La siguiente consulta combina cada una de las filas de la tabla categoriacuteas con cada una de las filas de la
tabla productos
select productosNombreProductocategoriasNombrecategoria from productos cross join categorias
order by productosNombreProducto
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 61
Ejercicios de consultas Muacuteltiples
Ejemplo 87
Mostrar el pedidos completo con el id=10248
Select pedidosIdPedido pedidosIdCliente
Total=sum ([detalles de pedidos]Preciounidad[detalles de pedidos]Cantidad)
From [detalles de pedidos] inner join pedidos on
[Detalles de pedidos]IdPedido=pedidosIdPedido where pedidosIdPedido=10248
Group by pedidosIdPedido pedidosIdCliente
Ejemplo 88
1 Mostrar la cantidad de productos por categoriacutea
Select CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
[Total de Producto]=sum (UnidadesEnExistencia) from Categoriacuteas inner join
Productos on CategoriacuteasIdCategoriacutea=productosIdCategoriacutea
Group by CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 62
Ejemplo 89
Calcular cuantas ventas tiene cada uno de los vendedores
Select empleadosIdEmpleado empleadosNombre empleadosApellidos
[Total de ventas]=count (pedidosIdPedido) from empleados
Inner join Pedidos on empleadosIdEmpleado=pedidosIdEmpleado
Group by empleadosIdEmpleado empleadosNombre empleadosApellidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 63
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 despueacutes saca la de Plantilla
Recomendaciones a la hora de usar las combinaciones
Combinar tablas en funcioacuten de claves principales y externas
Limite el nuacutemero de tablas de las combinaciones
Select Apellido
Oficio as
OFICIOFUNCION
salario from emp
UNION
Select Apellido
Funcion Salario from
Plantilla
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 64
SUBCONSULTAS
Es una SELECT anidada en una instruccioacuten INSERT DELETE SELECT o UPDATE
Como una tabla derivada
Select eemp_no as Numero
eApellido
from (select emp_no apellido from emp) as e
Como una expresioacuten
Select emp_no as [Numero]
Apellido
Salario
(select avg(Salario) from emp)
as Diferencia
from emp
where oficio = Empleado
Para correlacionar datos
- Expresioacuten dinaacutemica que cambia en cada fila de una consulta externa
- Es una combinacioacuten entre la subconsulta y la fila de la consulta externa
- Dividen consultas complejas con dos o maacutes consultas simples relacionadas
Subconsulta correlacionada
Select apellido oficiodept_no
from emp as e
where 20 lt
(select dept_no from dept as d
where edept_no = ddept_no
and ddnombre = Ventas)
SUBCONSULTAS
1 Mostrar el numero de empleado el apellido y la fecha de alta del empleado mas antiguo de la
empresa
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 65
SELECT emp_noapellido
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_noapellido
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 Jimeacutenez
select apellido oficio from emp where
oficio = (select oficio from emp where apellido = JIMENEZ)
4 Queremos saber el apellido oficio salario y nuacutemero 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 gt (select max (salario) from
emp where dept_no = 30)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 66
5 Mostrar el apellido la funcioacuten sala o departamento de todos los empleados que trabajen en la
empresa
select eApellido eOficio as [Cargo en Empresa] ddnombre as [Oficina]
from emp as e
inner join dept as d
on edept_no = ddept_no
union
select pApellido pfuncion snombre
from plantilla as p
inner join sala as s
on phospital_cod = shospital_cod
and psala_cod = ssala_cod
union
select dApellido despecialidad hnombre
from doctor as d
inner join hospital as h
on dhospital_cod = hhospital_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 = lsquoventasrsquo))
order by 2
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 67
8 Mostrar los empleados que tienen mejor salario que la media de los directores no incluyendo al
presidente
Select from emp where salario gt
(select avg (salario) from emp where oficio = DIRECTOR)
and oficio ltgt PRESIDENTE
9 Mostrar el apellido funcioacuten salario y coacutedigo 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 = lsquoENFERMEROrsquo or
funcion = lsquoENFERMERArsquo) and hospital_cod = (select hospital_cod from hospital where nombre =
lsquoSAN CARLOSrsquo)
Select apellido funcion salario hospital_cod from plantilla where
funcion in (ENFERMEROENFERMERA)
and hospital_cod = (select hospital_cod from hospital
where nombre = SAN CARLOS)
10 Visualizar los datos de los hospitales que tienen personal (Doctores) de cardiologiacutea
Select from hospital where hospital_cod in (select hospital_cod from doctor where
especialidad = lsquoCardiologiacutearsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 68
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 = lsquoPROVINCIALrsquo or
nombre= lsquoGENERALrsquo)
12 Mostrar el apellido de los enfermos que nacieron antes que el Sentildeor Miller
Select apellido from enfermo where Fecha_nac lt (select fecha_nac from enfermo where
apellido = lsquoMILLER Brsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 69
Simulacion de una clausula JOIN
Vamos a mostrar los oficios que estaacuten en maacutes de un departamento
Select distinct e1oficio from emp as e1
where e1oficio in(Select e2oficio from emp as e2
where e1dept_no ltgt e2dept_no)
Se debe utilizar antes una combinacioacuten que una subconsulta la combinacioacuten seriacutea asi dando los
mismos resultados
Select distinct e1Oficio from emp as e1
inner join emp as e2
on e1oficio = e2oficio
where e1dept_no ltgt e2dept_no
Estos son los dos oficios que estaacuten en
maacutes de un departamento
Subconsulta para simular una clausula HAVING
select e1apellidoe1oficio e1salario
from emp as e1
where e1salario gt
(select avg(e2salario) from emp as e2
where e1oficio = e2oficio)
Esta es la consulta utilizando el HAVING que es la que deberiacuteamos utilizar antes que una
subconsulta de simulacioacuten HAVING
SELECT e1apellidoe1oficio e1salario
FROM emp AS e1
INNER JOIN emp AS e2
ON e1oficio = e2oficio
GROUP BY e1oficio e1salarioe1apellido
HAVING e1salario gt AVG (e2salario)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 70
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 61
Ejercicios de consultas Muacuteltiples
Ejemplo 87
Mostrar el pedidos completo con el id=10248
Select pedidosIdPedido pedidosIdCliente
Total=sum ([detalles de pedidos]Preciounidad[detalles de pedidos]Cantidad)
From [detalles de pedidos] inner join pedidos on
[Detalles de pedidos]IdPedido=pedidosIdPedido where pedidosIdPedido=10248
Group by pedidosIdPedido pedidosIdCliente
Ejemplo 88
1 Mostrar la cantidad de productos por categoriacutea
Select CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
[Total de Producto]=sum (UnidadesEnExistencia) from Categoriacuteas inner join
Productos on CategoriacuteasIdCategoriacutea=productosIdCategoriacutea
Group by CategoriacuteasIdCategoriacutea CategoriacuteasNombreCategoriacutea
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 62
Ejemplo 89
Calcular cuantas ventas tiene cada uno de los vendedores
Select empleadosIdEmpleado empleadosNombre empleadosApellidos
[Total de ventas]=count (pedidosIdPedido) from empleados
Inner join Pedidos on empleadosIdEmpleado=pedidosIdEmpleado
Group by empleadosIdEmpleado empleadosNombre empleadosApellidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 63
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 despueacutes saca la de Plantilla
Recomendaciones a la hora de usar las combinaciones
Combinar tablas en funcioacuten de claves principales y externas
Limite el nuacutemero de tablas de las combinaciones
Select Apellido
Oficio as
OFICIOFUNCION
salario from emp
UNION
Select Apellido
Funcion Salario from
Plantilla
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 64
SUBCONSULTAS
Es una SELECT anidada en una instruccioacuten INSERT DELETE SELECT o UPDATE
Como una tabla derivada
Select eemp_no as Numero
eApellido
from (select emp_no apellido from emp) as e
Como una expresioacuten
Select emp_no as [Numero]
Apellido
Salario
(select avg(Salario) from emp)
as Diferencia
from emp
where oficio = Empleado
Para correlacionar datos
- Expresioacuten dinaacutemica que cambia en cada fila de una consulta externa
- Es una combinacioacuten entre la subconsulta y la fila de la consulta externa
- Dividen consultas complejas con dos o maacutes consultas simples relacionadas
Subconsulta correlacionada
Select apellido oficiodept_no
from emp as e
where 20 lt
(select dept_no from dept as d
where edept_no = ddept_no
and ddnombre = Ventas)
SUBCONSULTAS
1 Mostrar el numero de empleado el apellido y la fecha de alta del empleado mas antiguo de la
empresa
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 65
SELECT emp_noapellido
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_noapellido
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 Jimeacutenez
select apellido oficio from emp where
oficio = (select oficio from emp where apellido = JIMENEZ)
4 Queremos saber el apellido oficio salario y nuacutemero 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 gt (select max (salario) from
emp where dept_no = 30)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 66
5 Mostrar el apellido la funcioacuten sala o departamento de todos los empleados que trabajen en la
empresa
select eApellido eOficio as [Cargo en Empresa] ddnombre as [Oficina]
from emp as e
inner join dept as d
on edept_no = ddept_no
union
select pApellido pfuncion snombre
from plantilla as p
inner join sala as s
on phospital_cod = shospital_cod
and psala_cod = ssala_cod
union
select dApellido despecialidad hnombre
from doctor as d
inner join hospital as h
on dhospital_cod = hhospital_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 = lsquoventasrsquo))
order by 2
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 67
8 Mostrar los empleados que tienen mejor salario que la media de los directores no incluyendo al
presidente
Select from emp where salario gt
(select avg (salario) from emp where oficio = DIRECTOR)
and oficio ltgt PRESIDENTE
9 Mostrar el apellido funcioacuten salario y coacutedigo 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 = lsquoENFERMEROrsquo or
funcion = lsquoENFERMERArsquo) and hospital_cod = (select hospital_cod from hospital where nombre =
lsquoSAN CARLOSrsquo)
Select apellido funcion salario hospital_cod from plantilla where
funcion in (ENFERMEROENFERMERA)
and hospital_cod = (select hospital_cod from hospital
where nombre = SAN CARLOS)
10 Visualizar los datos de los hospitales que tienen personal (Doctores) de cardiologiacutea
Select from hospital where hospital_cod in (select hospital_cod from doctor where
especialidad = lsquoCardiologiacutearsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 68
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 = lsquoPROVINCIALrsquo or
nombre= lsquoGENERALrsquo)
12 Mostrar el apellido de los enfermos que nacieron antes que el Sentildeor Miller
Select apellido from enfermo where Fecha_nac lt (select fecha_nac from enfermo where
apellido = lsquoMILLER Brsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 69
Simulacion de una clausula JOIN
Vamos a mostrar los oficios que estaacuten en maacutes de un departamento
Select distinct e1oficio from emp as e1
where e1oficio in(Select e2oficio from emp as e2
where e1dept_no ltgt e2dept_no)
Se debe utilizar antes una combinacioacuten que una subconsulta la combinacioacuten seriacutea asi dando los
mismos resultados
Select distinct e1Oficio from emp as e1
inner join emp as e2
on e1oficio = e2oficio
where e1dept_no ltgt e2dept_no
Estos son los dos oficios que estaacuten en
maacutes de un departamento
Subconsulta para simular una clausula HAVING
select e1apellidoe1oficio e1salario
from emp as e1
where e1salario gt
(select avg(e2salario) from emp as e2
where e1oficio = e2oficio)
Esta es la consulta utilizando el HAVING que es la que deberiacuteamos utilizar antes que una
subconsulta de simulacioacuten HAVING
SELECT e1apellidoe1oficio e1salario
FROM emp AS e1
INNER JOIN emp AS e2
ON e1oficio = e2oficio
GROUP BY e1oficio e1salarioe1apellido
HAVING e1salario gt AVG (e2salario)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 70
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 62
Ejemplo 89
Calcular cuantas ventas tiene cada uno de los vendedores
Select empleadosIdEmpleado empleadosNombre empleadosApellidos
[Total de ventas]=count (pedidosIdPedido) from empleados
Inner join Pedidos on empleadosIdEmpleado=pedidosIdEmpleado
Group by empleadosIdEmpleado empleadosNombre empleadosApellidos
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 63
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 despueacutes saca la de Plantilla
Recomendaciones a la hora de usar las combinaciones
Combinar tablas en funcioacuten de claves principales y externas
Limite el nuacutemero de tablas de las combinaciones
Select Apellido
Oficio as
OFICIOFUNCION
salario from emp
UNION
Select Apellido
Funcion Salario from
Plantilla
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 64
SUBCONSULTAS
Es una SELECT anidada en una instruccioacuten INSERT DELETE SELECT o UPDATE
Como una tabla derivada
Select eemp_no as Numero
eApellido
from (select emp_no apellido from emp) as e
Como una expresioacuten
Select emp_no as [Numero]
Apellido
Salario
(select avg(Salario) from emp)
as Diferencia
from emp
where oficio = Empleado
Para correlacionar datos
- Expresioacuten dinaacutemica que cambia en cada fila de una consulta externa
- Es una combinacioacuten entre la subconsulta y la fila de la consulta externa
- Dividen consultas complejas con dos o maacutes consultas simples relacionadas
Subconsulta correlacionada
Select apellido oficiodept_no
from emp as e
where 20 lt
(select dept_no from dept as d
where edept_no = ddept_no
and ddnombre = Ventas)
SUBCONSULTAS
1 Mostrar el numero de empleado el apellido y la fecha de alta del empleado mas antiguo de la
empresa
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 65
SELECT emp_noapellido
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_noapellido
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 Jimeacutenez
select apellido oficio from emp where
oficio = (select oficio from emp where apellido = JIMENEZ)
4 Queremos saber el apellido oficio salario y nuacutemero 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 gt (select max (salario) from
emp where dept_no = 30)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 66
5 Mostrar el apellido la funcioacuten sala o departamento de todos los empleados que trabajen en la
empresa
select eApellido eOficio as [Cargo en Empresa] ddnombre as [Oficina]
from emp as e
inner join dept as d
on edept_no = ddept_no
union
select pApellido pfuncion snombre
from plantilla as p
inner join sala as s
on phospital_cod = shospital_cod
and psala_cod = ssala_cod
union
select dApellido despecialidad hnombre
from doctor as d
inner join hospital as h
on dhospital_cod = hhospital_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 = lsquoventasrsquo))
order by 2
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 67
8 Mostrar los empleados que tienen mejor salario que la media de los directores no incluyendo al
presidente
Select from emp where salario gt
(select avg (salario) from emp where oficio = DIRECTOR)
and oficio ltgt PRESIDENTE
9 Mostrar el apellido funcioacuten salario y coacutedigo 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 = lsquoENFERMEROrsquo or
funcion = lsquoENFERMERArsquo) and hospital_cod = (select hospital_cod from hospital where nombre =
lsquoSAN CARLOSrsquo)
Select apellido funcion salario hospital_cod from plantilla where
funcion in (ENFERMEROENFERMERA)
and hospital_cod = (select hospital_cod from hospital
where nombre = SAN CARLOS)
10 Visualizar los datos de los hospitales que tienen personal (Doctores) de cardiologiacutea
Select from hospital where hospital_cod in (select hospital_cod from doctor where
especialidad = lsquoCardiologiacutearsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 68
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 = lsquoPROVINCIALrsquo or
nombre= lsquoGENERALrsquo)
12 Mostrar el apellido de los enfermos que nacieron antes que el Sentildeor Miller
Select apellido from enfermo where Fecha_nac lt (select fecha_nac from enfermo where
apellido = lsquoMILLER Brsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 69
Simulacion de una clausula JOIN
Vamos a mostrar los oficios que estaacuten en maacutes de un departamento
Select distinct e1oficio from emp as e1
where e1oficio in(Select e2oficio from emp as e2
where e1dept_no ltgt e2dept_no)
Se debe utilizar antes una combinacioacuten que una subconsulta la combinacioacuten seriacutea asi dando los
mismos resultados
Select distinct e1Oficio from emp as e1
inner join emp as e2
on e1oficio = e2oficio
where e1dept_no ltgt e2dept_no
Estos son los dos oficios que estaacuten en
maacutes de un departamento
Subconsulta para simular una clausula HAVING
select e1apellidoe1oficio e1salario
from emp as e1
where e1salario gt
(select avg(e2salario) from emp as e2
where e1oficio = e2oficio)
Esta es la consulta utilizando el HAVING que es la que deberiacuteamos utilizar antes que una
subconsulta de simulacioacuten HAVING
SELECT e1apellidoe1oficio e1salario
FROM emp AS e1
INNER JOIN emp AS e2
ON e1oficio = e2oficio
GROUP BY e1oficio e1salarioe1apellido
HAVING e1salario gt AVG (e2salario)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 70
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 63
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 despueacutes saca la de Plantilla
Recomendaciones a la hora de usar las combinaciones
Combinar tablas en funcioacuten de claves principales y externas
Limite el nuacutemero de tablas de las combinaciones
Select Apellido
Oficio as
OFICIOFUNCION
salario from emp
UNION
Select Apellido
Funcion Salario from
Plantilla
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 64
SUBCONSULTAS
Es una SELECT anidada en una instruccioacuten INSERT DELETE SELECT o UPDATE
Como una tabla derivada
Select eemp_no as Numero
eApellido
from (select emp_no apellido from emp) as e
Como una expresioacuten
Select emp_no as [Numero]
Apellido
Salario
(select avg(Salario) from emp)
as Diferencia
from emp
where oficio = Empleado
Para correlacionar datos
- Expresioacuten dinaacutemica que cambia en cada fila de una consulta externa
- Es una combinacioacuten entre la subconsulta y la fila de la consulta externa
- Dividen consultas complejas con dos o maacutes consultas simples relacionadas
Subconsulta correlacionada
Select apellido oficiodept_no
from emp as e
where 20 lt
(select dept_no from dept as d
where edept_no = ddept_no
and ddnombre = Ventas)
SUBCONSULTAS
1 Mostrar el numero de empleado el apellido y la fecha de alta del empleado mas antiguo de la
empresa
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 65
SELECT emp_noapellido
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_noapellido
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 Jimeacutenez
select apellido oficio from emp where
oficio = (select oficio from emp where apellido = JIMENEZ)
4 Queremos saber el apellido oficio salario y nuacutemero 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 gt (select max (salario) from
emp where dept_no = 30)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 66
5 Mostrar el apellido la funcioacuten sala o departamento de todos los empleados que trabajen en la
empresa
select eApellido eOficio as [Cargo en Empresa] ddnombre as [Oficina]
from emp as e
inner join dept as d
on edept_no = ddept_no
union
select pApellido pfuncion snombre
from plantilla as p
inner join sala as s
on phospital_cod = shospital_cod
and psala_cod = ssala_cod
union
select dApellido despecialidad hnombre
from doctor as d
inner join hospital as h
on dhospital_cod = hhospital_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 = lsquoventasrsquo))
order by 2
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 67
8 Mostrar los empleados que tienen mejor salario que la media de los directores no incluyendo al
presidente
Select from emp where salario gt
(select avg (salario) from emp where oficio = DIRECTOR)
and oficio ltgt PRESIDENTE
9 Mostrar el apellido funcioacuten salario y coacutedigo 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 = lsquoENFERMEROrsquo or
funcion = lsquoENFERMERArsquo) and hospital_cod = (select hospital_cod from hospital where nombre =
lsquoSAN CARLOSrsquo)
Select apellido funcion salario hospital_cod from plantilla where
funcion in (ENFERMEROENFERMERA)
and hospital_cod = (select hospital_cod from hospital
where nombre = SAN CARLOS)
10 Visualizar los datos de los hospitales que tienen personal (Doctores) de cardiologiacutea
Select from hospital where hospital_cod in (select hospital_cod from doctor where
especialidad = lsquoCardiologiacutearsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 68
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 = lsquoPROVINCIALrsquo or
nombre= lsquoGENERALrsquo)
12 Mostrar el apellido de los enfermos que nacieron antes que el Sentildeor Miller
Select apellido from enfermo where Fecha_nac lt (select fecha_nac from enfermo where
apellido = lsquoMILLER Brsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 69
Simulacion de una clausula JOIN
Vamos a mostrar los oficios que estaacuten en maacutes de un departamento
Select distinct e1oficio from emp as e1
where e1oficio in(Select e2oficio from emp as e2
where e1dept_no ltgt e2dept_no)
Se debe utilizar antes una combinacioacuten que una subconsulta la combinacioacuten seriacutea asi dando los
mismos resultados
Select distinct e1Oficio from emp as e1
inner join emp as e2
on e1oficio = e2oficio
where e1dept_no ltgt e2dept_no
Estos son los dos oficios que estaacuten en
maacutes de un departamento
Subconsulta para simular una clausula HAVING
select e1apellidoe1oficio e1salario
from emp as e1
where e1salario gt
(select avg(e2salario) from emp as e2
where e1oficio = e2oficio)
Esta es la consulta utilizando el HAVING que es la que deberiacuteamos utilizar antes que una
subconsulta de simulacioacuten HAVING
SELECT e1apellidoe1oficio e1salario
FROM emp AS e1
INNER JOIN emp AS e2
ON e1oficio = e2oficio
GROUP BY e1oficio e1salarioe1apellido
HAVING e1salario gt AVG (e2salario)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 70
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 64
SUBCONSULTAS
Es una SELECT anidada en una instruccioacuten INSERT DELETE SELECT o UPDATE
Como una tabla derivada
Select eemp_no as Numero
eApellido
from (select emp_no apellido from emp) as e
Como una expresioacuten
Select emp_no as [Numero]
Apellido
Salario
(select avg(Salario) from emp)
as Diferencia
from emp
where oficio = Empleado
Para correlacionar datos
- Expresioacuten dinaacutemica que cambia en cada fila de una consulta externa
- Es una combinacioacuten entre la subconsulta y la fila de la consulta externa
- Dividen consultas complejas con dos o maacutes consultas simples relacionadas
Subconsulta correlacionada
Select apellido oficiodept_no
from emp as e
where 20 lt
(select dept_no from dept as d
where edept_no = ddept_no
and ddnombre = Ventas)
SUBCONSULTAS
1 Mostrar el numero de empleado el apellido y la fecha de alta del empleado mas antiguo de la
empresa
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 65
SELECT emp_noapellido
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_noapellido
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 Jimeacutenez
select apellido oficio from emp where
oficio = (select oficio from emp where apellido = JIMENEZ)
4 Queremos saber el apellido oficio salario y nuacutemero 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 gt (select max (salario) from
emp where dept_no = 30)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 66
5 Mostrar el apellido la funcioacuten sala o departamento de todos los empleados que trabajen en la
empresa
select eApellido eOficio as [Cargo en Empresa] ddnombre as [Oficina]
from emp as e
inner join dept as d
on edept_no = ddept_no
union
select pApellido pfuncion snombre
from plantilla as p
inner join sala as s
on phospital_cod = shospital_cod
and psala_cod = ssala_cod
union
select dApellido despecialidad hnombre
from doctor as d
inner join hospital as h
on dhospital_cod = hhospital_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 = lsquoventasrsquo))
order by 2
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 67
8 Mostrar los empleados que tienen mejor salario que la media de los directores no incluyendo al
presidente
Select from emp where salario gt
(select avg (salario) from emp where oficio = DIRECTOR)
and oficio ltgt PRESIDENTE
9 Mostrar el apellido funcioacuten salario y coacutedigo 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 = lsquoENFERMEROrsquo or
funcion = lsquoENFERMERArsquo) and hospital_cod = (select hospital_cod from hospital where nombre =
lsquoSAN CARLOSrsquo)
Select apellido funcion salario hospital_cod from plantilla where
funcion in (ENFERMEROENFERMERA)
and hospital_cod = (select hospital_cod from hospital
where nombre = SAN CARLOS)
10 Visualizar los datos de los hospitales que tienen personal (Doctores) de cardiologiacutea
Select from hospital where hospital_cod in (select hospital_cod from doctor where
especialidad = lsquoCardiologiacutearsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 68
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 = lsquoPROVINCIALrsquo or
nombre= lsquoGENERALrsquo)
12 Mostrar el apellido de los enfermos que nacieron antes que el Sentildeor Miller
Select apellido from enfermo where Fecha_nac lt (select fecha_nac from enfermo where
apellido = lsquoMILLER Brsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 69
Simulacion de una clausula JOIN
Vamos a mostrar los oficios que estaacuten en maacutes de un departamento
Select distinct e1oficio from emp as e1
where e1oficio in(Select e2oficio from emp as e2
where e1dept_no ltgt e2dept_no)
Se debe utilizar antes una combinacioacuten que una subconsulta la combinacioacuten seriacutea asi dando los
mismos resultados
Select distinct e1Oficio from emp as e1
inner join emp as e2
on e1oficio = e2oficio
where e1dept_no ltgt e2dept_no
Estos son los dos oficios que estaacuten en
maacutes de un departamento
Subconsulta para simular una clausula HAVING
select e1apellidoe1oficio e1salario
from emp as e1
where e1salario gt
(select avg(e2salario) from emp as e2
where e1oficio = e2oficio)
Esta es la consulta utilizando el HAVING que es la que deberiacuteamos utilizar antes que una
subconsulta de simulacioacuten HAVING
SELECT e1apellidoe1oficio e1salario
FROM emp AS e1
INNER JOIN emp AS e2
ON e1oficio = e2oficio
GROUP BY e1oficio e1salarioe1apellido
HAVING e1salario gt AVG (e2salario)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 70
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 65
SELECT emp_noapellido
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_noapellido
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 Jimeacutenez
select apellido oficio from emp where
oficio = (select oficio from emp where apellido = JIMENEZ)
4 Queremos saber el apellido oficio salario y nuacutemero 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 gt (select max (salario) from
emp where dept_no = 30)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 66
5 Mostrar el apellido la funcioacuten sala o departamento de todos los empleados que trabajen en la
empresa
select eApellido eOficio as [Cargo en Empresa] ddnombre as [Oficina]
from emp as e
inner join dept as d
on edept_no = ddept_no
union
select pApellido pfuncion snombre
from plantilla as p
inner join sala as s
on phospital_cod = shospital_cod
and psala_cod = ssala_cod
union
select dApellido despecialidad hnombre
from doctor as d
inner join hospital as h
on dhospital_cod = hhospital_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 = lsquoventasrsquo))
order by 2
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 67
8 Mostrar los empleados que tienen mejor salario que la media de los directores no incluyendo al
presidente
Select from emp where salario gt
(select avg (salario) from emp where oficio = DIRECTOR)
and oficio ltgt PRESIDENTE
9 Mostrar el apellido funcioacuten salario y coacutedigo 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 = lsquoENFERMEROrsquo or
funcion = lsquoENFERMERArsquo) and hospital_cod = (select hospital_cod from hospital where nombre =
lsquoSAN CARLOSrsquo)
Select apellido funcion salario hospital_cod from plantilla where
funcion in (ENFERMEROENFERMERA)
and hospital_cod = (select hospital_cod from hospital
where nombre = SAN CARLOS)
10 Visualizar los datos de los hospitales que tienen personal (Doctores) de cardiologiacutea
Select from hospital where hospital_cod in (select hospital_cod from doctor where
especialidad = lsquoCardiologiacutearsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 68
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 = lsquoPROVINCIALrsquo or
nombre= lsquoGENERALrsquo)
12 Mostrar el apellido de los enfermos que nacieron antes que el Sentildeor Miller
Select apellido from enfermo where Fecha_nac lt (select fecha_nac from enfermo where
apellido = lsquoMILLER Brsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 69
Simulacion de una clausula JOIN
Vamos a mostrar los oficios que estaacuten en maacutes de un departamento
Select distinct e1oficio from emp as e1
where e1oficio in(Select e2oficio from emp as e2
where e1dept_no ltgt e2dept_no)
Se debe utilizar antes una combinacioacuten que una subconsulta la combinacioacuten seriacutea asi dando los
mismos resultados
Select distinct e1Oficio from emp as e1
inner join emp as e2
on e1oficio = e2oficio
where e1dept_no ltgt e2dept_no
Estos son los dos oficios que estaacuten en
maacutes de un departamento
Subconsulta para simular una clausula HAVING
select e1apellidoe1oficio e1salario
from emp as e1
where e1salario gt
(select avg(e2salario) from emp as e2
where e1oficio = e2oficio)
Esta es la consulta utilizando el HAVING que es la que deberiacuteamos utilizar antes que una
subconsulta de simulacioacuten HAVING
SELECT e1apellidoe1oficio e1salario
FROM emp AS e1
INNER JOIN emp AS e2
ON e1oficio = e2oficio
GROUP BY e1oficio e1salarioe1apellido
HAVING e1salario gt AVG (e2salario)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 70
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 66
5 Mostrar el apellido la funcioacuten sala o departamento de todos los empleados que trabajen en la
empresa
select eApellido eOficio as [Cargo en Empresa] ddnombre as [Oficina]
from emp as e
inner join dept as d
on edept_no = ddept_no
union
select pApellido pfuncion snombre
from plantilla as p
inner join sala as s
on phospital_cod = shospital_cod
and psala_cod = ssala_cod
union
select dApellido despecialidad hnombre
from doctor as d
inner join hospital as h
on dhospital_cod = hhospital_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 = lsquoventasrsquo))
order by 2
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 67
8 Mostrar los empleados que tienen mejor salario que la media de los directores no incluyendo al
presidente
Select from emp where salario gt
(select avg (salario) from emp where oficio = DIRECTOR)
and oficio ltgt PRESIDENTE
9 Mostrar el apellido funcioacuten salario y coacutedigo 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 = lsquoENFERMEROrsquo or
funcion = lsquoENFERMERArsquo) and hospital_cod = (select hospital_cod from hospital where nombre =
lsquoSAN CARLOSrsquo)
Select apellido funcion salario hospital_cod from plantilla where
funcion in (ENFERMEROENFERMERA)
and hospital_cod = (select hospital_cod from hospital
where nombre = SAN CARLOS)
10 Visualizar los datos de los hospitales que tienen personal (Doctores) de cardiologiacutea
Select from hospital where hospital_cod in (select hospital_cod from doctor where
especialidad = lsquoCardiologiacutearsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 68
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 = lsquoPROVINCIALrsquo or
nombre= lsquoGENERALrsquo)
12 Mostrar el apellido de los enfermos que nacieron antes que el Sentildeor Miller
Select apellido from enfermo where Fecha_nac lt (select fecha_nac from enfermo where
apellido = lsquoMILLER Brsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 69
Simulacion de una clausula JOIN
Vamos a mostrar los oficios que estaacuten en maacutes de un departamento
Select distinct e1oficio from emp as e1
where e1oficio in(Select e2oficio from emp as e2
where e1dept_no ltgt e2dept_no)
Se debe utilizar antes una combinacioacuten que una subconsulta la combinacioacuten seriacutea asi dando los
mismos resultados
Select distinct e1Oficio from emp as e1
inner join emp as e2
on e1oficio = e2oficio
where e1dept_no ltgt e2dept_no
Estos son los dos oficios que estaacuten en
maacutes de un departamento
Subconsulta para simular una clausula HAVING
select e1apellidoe1oficio e1salario
from emp as e1
where e1salario gt
(select avg(e2salario) from emp as e2
where e1oficio = e2oficio)
Esta es la consulta utilizando el HAVING que es la que deberiacuteamos utilizar antes que una
subconsulta de simulacioacuten HAVING
SELECT e1apellidoe1oficio e1salario
FROM emp AS e1
INNER JOIN emp AS e2
ON e1oficio = e2oficio
GROUP BY e1oficio e1salarioe1apellido
HAVING e1salario gt AVG (e2salario)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 70
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 67
8 Mostrar los empleados que tienen mejor salario que la media de los directores no incluyendo al
presidente
Select from emp where salario gt
(select avg (salario) from emp where oficio = DIRECTOR)
and oficio ltgt PRESIDENTE
9 Mostrar el apellido funcioacuten salario y coacutedigo 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 = lsquoENFERMEROrsquo or
funcion = lsquoENFERMERArsquo) and hospital_cod = (select hospital_cod from hospital where nombre =
lsquoSAN CARLOSrsquo)
Select apellido funcion salario hospital_cod from plantilla where
funcion in (ENFERMEROENFERMERA)
and hospital_cod = (select hospital_cod from hospital
where nombre = SAN CARLOS)
10 Visualizar los datos de los hospitales que tienen personal (Doctores) de cardiologiacutea
Select from hospital where hospital_cod in (select hospital_cod from doctor where
especialidad = lsquoCardiologiacutearsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 68
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 = lsquoPROVINCIALrsquo or
nombre= lsquoGENERALrsquo)
12 Mostrar el apellido de los enfermos que nacieron antes que el Sentildeor Miller
Select apellido from enfermo where Fecha_nac lt (select fecha_nac from enfermo where
apellido = lsquoMILLER Brsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 69
Simulacion de una clausula JOIN
Vamos a mostrar los oficios que estaacuten en maacutes de un departamento
Select distinct e1oficio from emp as e1
where e1oficio in(Select e2oficio from emp as e2
where e1dept_no ltgt e2dept_no)
Se debe utilizar antes una combinacioacuten que una subconsulta la combinacioacuten seriacutea asi dando los
mismos resultados
Select distinct e1Oficio from emp as e1
inner join emp as e2
on e1oficio = e2oficio
where e1dept_no ltgt e2dept_no
Estos son los dos oficios que estaacuten en
maacutes de un departamento
Subconsulta para simular una clausula HAVING
select e1apellidoe1oficio e1salario
from emp as e1
where e1salario gt
(select avg(e2salario) from emp as e2
where e1oficio = e2oficio)
Esta es la consulta utilizando el HAVING que es la que deberiacuteamos utilizar antes que una
subconsulta de simulacioacuten HAVING
SELECT e1apellidoe1oficio e1salario
FROM emp AS e1
INNER JOIN emp AS e2
ON e1oficio = e2oficio
GROUP BY e1oficio e1salarioe1apellido
HAVING e1salario gt AVG (e2salario)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 70
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 68
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 = lsquoPROVINCIALrsquo or
nombre= lsquoGENERALrsquo)
12 Mostrar el apellido de los enfermos que nacieron antes que el Sentildeor Miller
Select apellido from enfermo where Fecha_nac lt (select fecha_nac from enfermo where
apellido = lsquoMILLER Brsquo)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 69
Simulacion de una clausula JOIN
Vamos a mostrar los oficios que estaacuten en maacutes de un departamento
Select distinct e1oficio from emp as e1
where e1oficio in(Select e2oficio from emp as e2
where e1dept_no ltgt e2dept_no)
Se debe utilizar antes una combinacioacuten que una subconsulta la combinacioacuten seriacutea asi dando los
mismos resultados
Select distinct e1Oficio from emp as e1
inner join emp as e2
on e1oficio = e2oficio
where e1dept_no ltgt e2dept_no
Estos son los dos oficios que estaacuten en
maacutes de un departamento
Subconsulta para simular una clausula HAVING
select e1apellidoe1oficio e1salario
from emp as e1
where e1salario gt
(select avg(e2salario) from emp as e2
where e1oficio = e2oficio)
Esta es la consulta utilizando el HAVING que es la que deberiacuteamos utilizar antes que una
subconsulta de simulacioacuten HAVING
SELECT e1apellidoe1oficio e1salario
FROM emp AS e1
INNER JOIN emp AS e2
ON e1oficio = e2oficio
GROUP BY e1oficio e1salarioe1apellido
HAVING e1salario gt AVG (e2salario)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 70
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 69
Simulacion de una clausula JOIN
Vamos a mostrar los oficios que estaacuten en maacutes de un departamento
Select distinct e1oficio from emp as e1
where e1oficio in(Select e2oficio from emp as e2
where e1dept_no ltgt e2dept_no)
Se debe utilizar antes una combinacioacuten que una subconsulta la combinacioacuten seriacutea asi dando los
mismos resultados
Select distinct e1Oficio from emp as e1
inner join emp as e2
on e1oficio = e2oficio
where e1dept_no ltgt e2dept_no
Estos son los dos oficios que estaacuten en
maacutes de un departamento
Subconsulta para simular una clausula HAVING
select e1apellidoe1oficio e1salario
from emp as e1
where e1salario gt
(select avg(e2salario) from emp as e2
where e1oficio = e2oficio)
Esta es la consulta utilizando el HAVING que es la que deberiacuteamos utilizar antes que una
subconsulta de simulacioacuten HAVING
SELECT e1apellidoe1oficio e1salario
FROM emp AS e1
INNER JOIN emp AS e2
ON e1oficio = e2oficio
GROUP BY e1oficio e1salarioe1apellido
HAVING e1salario gt AVG (e2salario)
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 70
Microsoft SQL SERVER Desarrollo de Aplicaciones utilizando Visual Studio Net 2005
Prof Diego Alberto Cueva Valverde diegoalberto_1987hotmailcom 70