Instalación y Configuración de Sql server 2014 - Bases de Datos en Microsoft Sql Server 2014 (1-35)
Instalación y Configuración, C onfiguración, Seguridad Gestión de Base de Datos Estructura de Una Base de datos Archivos y Grupos Físicos de Bases de Datos Esquemas, Tablas, Campos, Tipos de datos Relaciones, Llaves primarias y Foráneas Restricciones Unique, Check, Default Separar y Adjuntar Base de Datos Backup y Restauración de Base de Datos LDD Lenguaje de Manipulación de Datos Create, Alter, Drop DML Lenguaje de Manipulación de Datos Insert Into, Update, Delete Select, Group By, Having, Union Programación Transact SQL Variables, Funciones Cast y Convert Estructuras de Control Condicionales e Iterativas o repetitivas Procedimientos Almacenados Cursores, Triggers, Tablas de Referencia Cruzada
Es un conjunto de Información relacionada sobre un tema en particular, organizada de alguna forma tal que suministra una base o fundamento para procedimientos, como la recuperación o consulta de la Información, la elaboración de conclusiones en base a la data y la toma de decisiones de una organización.
Se dice que cualquier conjunto de Información que sirva a lo nombrado anteriormente se le calificará como base de Datos, aun cuando la información no esté almacenada en algún medio Informático.
Son aplicaciones que permiten la administración de los datos almacenados en una o varias Bases de datos.
Independencia de los datos y los programas
Minimización de la Redundancia
Integración y Sincronización de las Bases de Datos
Facilidad de Manipulación y Recuperación de la Información
Seguridad y Control Centralizado.
Microsoft SQLServer es un Sistema para la Gestión de Base de Datos basado en el Modelo Relacional. Sus lenguajes para consultas son Transact-SQL y Ansi SQL. Presenta Un entorno gráfico de administración de los Objetos del motor de base de datos, que permite el uso de comando DDL y DML gráficamente.
Al instalar SQLServer también se registran Bases de datos que administran diferentes aspectos del servidor de Base de Datos. Es el núcleo y contiene Información vital de la Instancia de Sqlserver, información de la administración de las diferentes bases de datos. Base de datos temporal que brinda espacios para realizar algunas operaciones. Es una plantilla para todas las bases de datos creadas en el servidor, se implementa cuando se ejecuta el comando CREATE DATABASE. Empleada por SQL Server Agent, guarda información de servicios de automatización, historial de copias de seguridad, tareas, alertas, planes de mantenimiento entre otros registros.
Es un conjunto de Información relacionada sobre un tema en particular, organizada de alguna forma tal que suministra una base o fundamento para procedimientos, como la recuperación o consulta de la Información, la elaboración de conclusiones en base a la data y la toma de decisiones de una organización.
Se dice que cualquier conjunto de Información que sirva a lo nombrado anteriormente se le calificará como base de Datos, aun cuando la información no esté almacenada en algún medio Informático.
Son aplicaciones que permiten la administración de los datos almacenados en una o varias Bases de datos.
Independencia de los datos y los programas
Minimización de la Redundancia
Integración y Sincronización de las Bases de Datos
Facilidad de Manipulación y Recuperación de la Información
Seguridad y Control Centralizado.
Microsoft SQLServer es un Sistema para la Gestión de Base de Datos basado en el Modelo Relacional. Sus lenguajes para consultas son Transact-SQL y Ansi SQL. Presenta Un entorno gráfico de administración de los Objetos del motor de base de datos, que permite el uso de comando DDL y DML gráficamente.
Al instalar SQLServer también se registran Bases de datos que administran diferentes aspectos del servidor de Base de Datos. Es el núcleo y contiene Información vital de la Instancia de Sqlserver, información de la administración de las diferentes bases de datos. Base de datos temporal que brinda espacios para realizar algunas operaciones. Es una plantilla para todas las bases de datos creadas en el servidor, se implementa cuando se ejecuta el comando CREATE DATABASE. Empleada por SQL Server Agent, guarda información de servicios de automatización, historial de copias de seguridad, tareas, alertas, planes de mantenimiento entre otros registros.
La tabla es el primer objeto de una base de datos y se organiza en filas y columnas, una fila equivale a un registro y las columnas definen los campos del registro, los campos se definen sobre un tipo de datos.
Representa los Atributos de una entidad o tabla.
Es el campo que representa un valor único e identifica a un registro registro de la tabla.
Campo que une a otra entidad formando una extensión de la tabla fuente.
: Representa el Conjunto de valores por cada campo de una misma fila. Es un valor que no representa nada mientras no se une a otros datos.
Se desea implementar un sistema web para gestionar la reserva de vuelos; que permita al usuario registrar sus reservas de vuelos y hacer consultas, además de poder comprar los boletos de viaje de manera remota, sin la necesidad de recurrir a una agencia de viaje.
El sistema web debe de mostrar una interfaz describiendo los servicios ofrecidos junto con la opción para registrarse si es la primera vez que accede a ella, o si ya se encuentra registrado acceder por medio de su usuario (email) y su clave.
Una vez registrado el usuario este podrá acceder a los siguientes procesos:
Consulta de Vuelos
Por Horarios de Vuelos
Por Tarifas de Vuelos
Información de Vuelos
Reserva de Vuelos
Compra de Boletos de viaje
Los datos deben de tener una longitud fija hasta 8Kb. Ejemplo: Si queremos almacenar categorías por ejemplo A, B, C …Utilizaremos Char(1)
Puede variar en el número de caracteres, es decir el valor asignado no es fijo, aquí SQL administra los espacios en blanco y los optimiza. Ejemplo en un Varchar(15) ocupará menos espacio el dato “Ana” que “Juan Carlos”.
Números enteros desde -2 31 (-2 147 483 648) a 2 31-1 (2 147 483 647).
Tipo de dato que muestra la fecha en el siguiente formato 07-07-2014.
Tipo de datos que se utiliza para almacenar números decimales que pueden tener hasta 38 dígitos.
Cantidad monetaria positiva o negativa.
Hay dos formas de expresar el término NULL, al implementarlo como NULL estamos indicando que el contenido de dicha columna no es obligatorio, si se necesita especificar que el campo es obligatorio se implementará con NOT NULL.
Propiedad sólo aplicada a campos numéricos, ya que define un autoincremento automático de valores.
El modo de relacionar registros entre tablas es por tanto mediante referencias, para lo cual se usan los identificadores definidos como claves primarias y foráneas.
En el diseño de bases de datos relacionales, se llama clave primaria (Primary Key) a un campo o a una combinación de campos que identifica de forma única a cada fila de una tabla. Una clave primaria comprende de esta manera una columna o conjunto de columnas. No puede haber dos filas en una tabla que tengan la misma clave primaria. Una clave primaria debe identificar a todas las posibles filas de una tabla y no únicamente a las filas que se encuentran en un momento determinado. Ejemplos de claves primarias son DNI (asociado a una persona) o ISBN (asociado a un libro). Las guías telefónicas y diccionarios no pueden usar nombres o palabras o números del sistema decimal de Dewey como claves candidatas, porque no identifican unívocamente números de teléfono o palabras.
En el contexto de bases de datos relacionales, una clave foránea o clave ajena (o Foreign Key FK) es una limitación referencial entre dos tablas. La clave foránea identifica una columna o grupo de columnas en una tabla (tabla hija o referendo) que se refiere a una columna o grupo de columnas en otra tabla (tabla maestra o referenciada). Las columnas en la tabla referendo deben ser la clave primaria u otra clave candidata en la tabla referenciada.
Los valores en una fila de las columnas referendo deben existir solo en una fila en la tabla referenciada. Así, una fila en la tabla referendo no puede contener valores que no existen en la tabla referenciada. De esta forma, las referencias pueden ser creadas para vincular o relacionar información. Esto es una parte esencial de la normalización de base de datos. Múltiples filas en la tabla referendo pueden hacer referencia, vincularse o relacionarse a la misma fila en la tabla referenciada. Mayormente esto se ve reflejado en una relación uno (tabla maestra o referenciada) a muchos (tabla hija o referendo).
Dentro de las opciones que nos ofrece nuestra base de datos, encontramos la opción Diagrama de la Base de Datos, que nos permite realizar las relaciones de las tablas en forma Gráfica. Para acceder a esta opción le damos click derecho y crearemos un nuevo Diagrama de Base de Datos.
El lenguaje SQL está compuesto por comandos, cláusulas, operadores y funciones de agregados. Estos elementos se Combinan en las instrucciones para crear, actualizar y Manipular las base de datos. Existen 2 tipos de Comandos SQL: comandos para crear y definir nuevas base de datos, tablas, campos e índices. comandos para insertar, modificar y eliminar registros, así como ordenar, filtrar y extraer información de la base de datos.
(Comando de Creación de Objetos de la Base de Datos): Permite crear base de datos, tablas, desencadenadores, procedimientos, funciones, vistas e Índices de una base de Datos.
(Comando de Modificación de Objetos de la Base de Datos): Permite la modificación de un objeto asociado a una base de Datos, puede modificar archivos, grupo de archivos, cambiar atributos de un Objeto.
(Comando de Eliminación de Objetos de la Base de Datos): Permite la eliminación de un objeto asociado a una Base de Datos.
--Verificamos que la base de datos no este implementada para implementarla IF DB_ID('DBRESERVAM') IS NOT NULL BEGIN USE MASTER DROP DATABASE DBRESERVAM END --creamos la base de datos CREATE DATABASE DBRESERVAM ON PRIMARY ( NAME='DBRESERVA_MDF', FILENAME='C:\Sqlserver-BaseDatos2\DBRESERVA.MDF', SIZE=10MB, MAXSIZE=40MB, FILEGROWTH=5MB ), ( NAME='DBRESERVA2_MDF', FILENAME='C:\Sqlserver-BaseDatos2\DBRESERVA2.MDF', SIZE=5MB, MAXSIZE=30MB,
FILEGROWTH=5% ) LOG ON ( NAME='DBRESERVA_LOG', FILENAME='C:\Sqlserver-BaseDatos2\DBRESERVA2.LDF', SIZE=4MB, MAXSIZE=20MB, FILEGROWTH=10% ) GO --ACTIVAMOS LA BASE DE DATOS PARA EMPEZAR A TRABAJAR CON ELLA USE DBRESERVAM GO
Los datos deben de tener una longitud fija hasta 8Kb. Ejemplo: Si queremos almacenar categorías por ejemplo A, B, C …Utilizaremos Char(1)
Puede variar en el número de carácteres, es decir el valor asignado no es fijo, aquí SQL administra los espacios en blanco y los optimiza. Ejemplo en un Varchar(15) ocupará menos espacio el dato “Ana” que “Juan Carlos”.
Números enteros desde -2 31 (-2 147 483 648) a 2 31-1 (2 147 483 647).
Tipo de dato que muestra la fecha en el siguiente formato 07-07-2014.
Tipo de datos que se utiliza para almacenar números decimales que pueden tener hasta 38 dígitos.
Cantidad monetaria positiva o negativa.
Hay dos formas de expresar el término NULL, al implementarlo como NULL estamos indicando que el contenido de dicha columna no es obligatorio, si se necesita especificar que el campo es obligatorio se implementará con NOT NULL.
Propiedad sólo aplicada a campos numéricos, ya que define un autoincremento automático de valores.
--ACTIVAMOS LA BASE DE DATOS PARA EMPEZAR A TRABAJAR CON ELLA USE DBRESERVAM GO --IMPLEMENTANDO LAS TABLAS DE LA BASE DATOS --TABLA PAÍS CREATE TABLE pais ( idpais char(4) not null primary key, nombre varchar(30) not null unique ) go --TABLA PASAJERO CREATE TABLE pasajero ( idpasajero char(8) not null primary key, nombre varchar(20) not null, apaterno varchar(20) not null, amaterno varchar(20) not null, tipo_documento varchar(30) not null, num_documento varchar (12) not null, fecha_nacimiento date not null, idpais char(4) not null, telefono varchar(15) null, email varchar(50) not null unique, clave varchar(20) not null ) go --TABLA AEROPUERTO CREATE TABLE aeropuerto ( idaeropuerto char(5) not null, nombre varchar(50) not null, idpais char(4) not null ) go --TAMBIEN SE PUEDE AGREGAR LA LLAVE PRIMARIA DESPUES DE CREAR LA TABLA ALTER TABLE aeropuerto ADD CONSTRAINT pk_aeropuerto_idaeropuerto PRIMARY KEY NONCLUSTERED (IDAEROPUERTO) GO --TAMBIEN VOY A CREAR EL CONSTRAINT DE CAMPO ÚNICO ALTER TABLE aeropuerto ADD CONSTRAINT uq_aeropuerto_nombre UNIQUE(idaeropuerto) GO --TABLA AEROLÍNEA CREATE TABLE aerolinea ( idaerolinea int not null primary key, ruc char(11) not null unique, nombre varchar(40) not null unique
) go
--TABLA AVIÓN CREATE TABLE avion ( idavion char(5) not null primary key, idaerolinea int not null, fabricante varchar(40) null, tipo varchar(30) null, capacidad int not null ) go
Permite determinar que los valores registrados en una misma columna no sean idénticos, es decir se mantengan únicos. Por ejemplo el email de una persona es un campo único.
Permite restringir el rango de valores que pueden estar permitidos ingresar en una o más columnas de una tabla.
Permite registrar un dato en un campo por defecto cuando el usuario no ingresa ningún valor, la propiedad del campo de la tabla necesariamente tiene que ser Null. Ejemplo se puede Utilizar para los campos de tipo Date (fecha), cuando el usuario no ingresa ninguna fecha que se asigne la fecha actual.
--Eliminaré la tabla avión y la creare de nuevo pero dejando un campo menos drop table avion
--creando de nuevo la tabla avion CREATE TABLE avion ( idavion char(5) not null primary key, idaerolinea int not null, fabricante varchar(40) null, tipo varchar(3) null ) go
--voy agregar nuevamente la capacidad ALTER TABLE AVION ADD capacidad int not null go
--eliminaré nuevamente capacidad --ALTER TABLE avion --drop column capacidad --go
--voy a modificar la columna tipo ALTER TABLE avion ALTER COLUMN tipo varchar(30) not null go
--TABLA ASIENTO CREATE TABLE asiento ( idasiento int not null primary key, letra char(2) not null, fila int not null ) go
--TABLA TARIFA CREATE TABLE tarifa( idtarifa int not null primary key, clase varchar(20) not null unique, precio money not null, impuesto money not null ) go --TABLA RESERVA CREATE TABLE reserva( idreserva int not null primary key, costo money not null, fecha date NULL, observacion varchar(200) null ) go
--AGREGAREMOS UNA RESTRICCIÓN DEFAULT A LA FECHA PARA QUE LA FECHA POR DEFECTO SEA LA FECHA ACTUAL ALTER TABLE reserva ADD CONSTRAINT DFL_RESERVA_FECHA
DEFAULT GETDATE() FOR fecha go --TABLA VUELO CREATE TABLE vuelo( idasiento int not null, idaeropuerto char(5) not null, idreserva int not null, idavion char(5) not null, idtarifa int not null ) go
--IMPLEMENTANDO LAS LLAVES PRIMARIAS DE LA TABLA VUELO ALTER TABLE VUELO ADD PRIMARY KEY NONCLUSTERED (idasiento,idaeropuerto,idreserva,idavion) go --TABLA PAGO CREATE TABLE pago( idpago int not null primary key identity, idreserva int not null, idpasajero char(8) not null, fecha date DEFAULT GETDATE(), monto money not null, tipo_comprobante varchar(20) not null, num_comprobante varchar(15)not null, impuesto decimal (5,2) not null ) go --AGREGARE UNA RESTRICCIÓN CHECK PARA SOLO INGRESAR FECHAS IGUALES O MENORES A LA FECHA ACTUAL ALTER TABLE pago ADD CONSTRAINT CHK_PAGO_FECHA CHECK (fecha<=getdate()) go
El modo de relacionar registros entre tablas es por tanto mediante referencias, para lo cual se usan los identificadores definidos como claves primarias y foráneas.
En el diseño de bases de datos relacionales, se llama clave primaria (Primary Key) a un campo o a una combinación de campos que identifica de forma única a cada fila de una tabla. Una clave primaria comprende de esta manera una columna o conjunto de columnas. No puede haber dos filas en una tabla que tengan la misma clave primaria.
Una clave primaria debe identificar a todas las posibles filas de una tabla y no únicamente a las filas que se encuentran en un momento determinado. Ejemplos de claves primarias son DNI (asociado a una persona) o ISBN (asociado a un libro). Las guías telefónicas y diccionarios no pueden usar nombres o palabras o números del sistema decimal de Dewey como claves candidatas, porque no identifican unívocamente números de teléfono o palabras.
En el contexto de bases de datos relacionales, una clave foránea o clave ajena (o Foreign Key FK) es una limitación referencial entre dos tablas. La clave foránea identifica una columna o grupo de columnas en una tabla (tabla hija o referendo) que se refiere a una columna o grupo de columnas en otra tabla (tabla maestra o referenciada). Las columnas en la tabla referendo deben ser la clave primaria u otra clave candidata en la tabla referenciada.
Los valores en una fila de las columnas referendo deben existir solo en una fila en la tabla referenciada. Así, una fila en la tabla referendo no puede contener valores que no existen en la tabla referenciada. De esta forma, las referencias pueden ser creadas para vincular o relacionar información. Esto es una parte esencial de la normalización de base de datos. Múltiples filas en la tabla referendo pueden hacer referencia, vincularse o relacionarse a la misma fila en la tabla referenciada. Mayormente esto se ve reflejado en una relación uno (tabla maestra o referenciada) a muchos (tabla hija o referendo).
En el vídeo mostrado a continuación, se describe cómo crear relaciones de clave externa en SQL Server 2014 mediante código Transact-SQL. Cuando se asocian filas de una tabla con filas de otra tabla, se crea una relación entre las dos tablas.
--IMPLEMENTADO LAS LLAVES FORÁNEAS --Relación Entre la tabla pasajero y país ALTER TABLE pasajero ADD CONSTRAINT FK_pasajero_pais FOREIGN KEY (idpais) REFERENCES pais (idpais) go
--Relación entre la tabla aeropuerto país ALTER TABLE aeropuerto ADD CONSTRAINT FK_aeropuerto_pais FOREIGN KEY(idpais) REFERENCES pais (idpais) go
--Relación entre la tabla pago y pasajero ALTER TABLE pago ADD CONSTRAINT FK_pago_pasajero FOREIGN KEY (idpasajero) REFERENCES pasajero (idpasajero) go
--Relación entre la tabla pago y reserva ALTER TABLE pago ADD CONSTRAINT fk_pago_reserva FOREIGN KEY (idreserva) REFERENCES reserva(idreserva) go
--Relación entre la tabla avión y aerolínea ALTER TABLE avion ADD CONSTRAINT FK_avion_aerolinea FOREIGN KEY (idaerolinea) REFERENCES aerolinea(idaerolinea) go
--Relación entre la tabla vuelo y asiento ALTER TABLE vuelo ADD CONSTRAINT FK_vuelo_asiento FOREIGN KEY (idasiento) REFERENCES asiento(idasiento) go
--Relación entre la tabla vuelo y reserva ALTER TABLE vuelo ADD CONSTRAINT FK_vuelo_reserva FOREIGN KEY (idreserva) REFERENCES reserva(idreserva) go
--Relación entre la tabla vuelo y avión ALTER TABLE vuelo ADD CONSTRAINT FK_vuelo_avion FOREIGN KEY (idavion) REFERENCES avion(idavion) go
--Relación entre la tabla vuelo y tarifa ALTER TABLE vuelo ADD CONSTRAINT FK_vuelo_tarifa FOREIGN KEY (idtarifa) REFERENCES tarifa(idtarifa) go
--Relación entre la tabla vuelo y aeropuerto ALTER TABLE vuelo ADD CONSTRAINT FK_vuelo_aeropuerto FOREIGN KEY (idaeropuerto) REFERENCES aeropuerto(idaeropuerto) go
Cuando creamos una base de datos el servidor la protege de gestiones desde el exterior, eso quiere decir que desde el explorador de windows no se podrá eliminar ni cambiar de nombre a la DB.
Para poder cambiar de ubicación física o modificar el nombre de la Base de Datos, el Motor propone algunas políticas de gestión proporcionando funciones, sentencias e intrucciones para dicho control.
Procedimiento Almacenado SP_DETACH_DB (Permite separar una Base de Datos del Servidor Actual): use master SP_DETACH_DB @DBNAME=‘DBRESERVA’ GO
Utilizaremos el Asistente de Microsoft SQL Server Management Studio. Lo veremos en el vídeo mostrado a continuación.
El lenguaje SQL está compuesto por comandos, cláusulas, operadores y funciones de agregados. Estos elementos se Combinan en las instrucciones para crear, actualizar y Manipular las base de datos. Existen 2 tipos de Comandos SQL: comandos para crear y definir nuevas base de datos, tablas, campos e índices. comandos para insertar, modificar y eliminar registros, así como ordenar, filtrar y extraer información de la base de datos.
El lenguaje de Manipulación de Datos (DML) es un término usado para recuperar y trabajar con datos en Sql Server, incluye instrucciones para agregar, modificar, consultar o quitar datos de una base de Datos en Sql Server. Las siguientes sentencias son de categoría DML:
Aerolínea
País
Pasajero
Reserva
Pago
Tarifa
Aeropuerto
Permite agregar una nueva fila a una tabla o vista.
INSERT [INTO] [ESQUEMA] TABLA O VISTA [(Lista de columnas)] [VALUES] ('Lista de valores')
Ejemplos: Insertar Registros en las Tablas Aerolínea País Pasajero Reserva Pago Tarifa Aeropuerto
----Insertar registros en la tabla aeropuerto insert into aeropuerto (idaeropuerto,idpais,nombre) values ('AE01','0003','Bariloche'), ('AE02','0003','Mar del Plata'), ('AE03','0001','Jorge Chávez') go ----Verificando los registros insertados en la tabla aeropuerto select * from AEROPUERTO
--Insertar registros en la tabla reserva insert into RESERVA (idreserva,costo,fecha,observacion) values ('1','140','01-27-2013','') go insert into RESERVA (idreserva,costo,fecha,observacion) values ('2','100','01-01-2013','') go insert into RESERVA (idreserva,costo,fecha,observacion) values ('3','300','03-04-2014','') go insert into RESERVA (idreserva,costo,fecha,observacion) values ('4','800','04-05-2014','') go insert into RESERVA (idreserva,costo,fecha,observacion) values ('5','250',getdate(),'') go insert into RESERVA (idreserva,costo,fecha,observacion) values ('6','1150',getdate(),'') go insert into RESERVA (idreserva,costo,fecha,observacion) values ('7','700',getdate(),'') go
--Insertar registro en la tabla pago insert into pago(idreserva,fecha,idpasajero,monto,tipo_comprobante,num_comprobante,impuesto) values ('1','01-27-2013','P0000001',40,'Ticket','0010007',0.18), ('5','05-05-2014','P0000002',250,'Factura','001-0002',0.18), ('7',getdate(),'P0000007',700,'Factura','001-0003',0.18) go --Verificando registros insertados en la tabla pago select * from pago
--Insertar tarifa insert into tarifa values ('1','Supervip',1200,12), ('2','Vip',1000,12), ('3','Nacional',800,12), ('4','Económica',500,0) go --Verificando registros insertados en la tabla tarifa select * from tarifa
Permite modificar o actualizar un conjunto de registros de una Tabla o vista dependiendo de una condición.
UPDATE TABLA O VISTA [SET] {column name =expresión } [WHERE ]
1. Actualizar los Valores de la columna impuesto por el valor 11 a todos los registros de la tabla TARIFA.
update tarifa set impuesto=11 go
2. Actualizar los valores de la columna impuesto aumentado en 2 a todos los registros de la tabla TARIFA. update tarifa set impuesto=impuesto + 2 go
3. Asignar el impuesto a cero sólo a los registros cuya clase sea Económico de la tabla tarifa. update tarifa set impuesto=0 where clase='Económica'
go
4. Actualizar los costos de la tabla RESERVA disminuyendo en 50 a los registros cuyo ingreso se realizó el año 2013, utilizar variables.
update reserva set costo=costo - 50 where year(fecha)=2013 go
4. Asignar el texto ‘SIN FONO’ en el campo teléfono de los pasajeros que sean de Perú Todo esto deberá ser realizado en la tabla Pasajero.
update pasajero set telefono = 'Sin Fono'
where idpais= (select idpais from pais where nombre='Perú') go
Permite eliminar todos los registros específicados en una determinada tabla. DELETE [TOP { Expresión } ] FROM TABLE [WHERE ]
1. Eliminar todos los registros de la Tabla AEROLÍNEA.
delete from aerolinea go 2. Eliminar el registro de la tabla Pasajero cuyo idpasajero sea P0000004.
delete from pasajero where idpasajero='P0000004' go
3. Eliminar los registros de la tabla PASAJERO cuyo país sea México, utilizar subconsultas. delete from pasajero where idpais = (select idpais from pais where nombre = 'México') go
4. Eliminar los registros de la tabla RESERVA que sean del año 2013 y que no superen los $ 70.
delete from reserva where year(fecha)= 2013 and costo>70 go
5. Eliminar los registros de la tabla PAGO, que se han efectuado en el año 2012 ó 2013.
delete from pago where year(fecha)=2012 or year(fecha)=2013 go
Una copia de seguridad, copia de respaldo en tecnologías de la información es una copia de los datos originales que se realiza con el fin de disponer de un medio para recuperarlos en caso de su pérdida. Los B ackup son útiles ante distintos eventos y usos:
Recuperar los datos de los sistemas informáticos de una catástrofe informática, natural o ataque.
Restaurar una pequeña cantidad de información que pueden haberse eliminado accidentalmente, corrompido.
El proceso de copia de seguridad se complementa con otro conocido como restauración de los datos (en inglés restore), que es la acción de leer y grabar en la ubicación original u otra alternativa los datos requeridos que han sido respaldados con anterioridad.
Uno de los propósitos de la Gestión de Base de Datos es almacenar información Lógica y ordenada dentro de tablas, usaremos la sentencia SELECT y sus variadas formas de recuperar información desde una tabla en la base de datos activa.
SELECT [ALL - DISTINCT] [TOP número – [PERCENT] ] [FROM] tabla [WHERE ]
[] [HAVING ] [ORDER BY columna [ASC-DESC]]
Especifica el conjunto de filas devueltas por la consulta. Sentencia utilizada para mostrar filas únicas no repetidas. Para mostrar solo un número o porcentaje indicado de filas obtenidas. Permite indicar las filas que están involucradas. Cláusula que permite condicionar el resultado de una consulta. Permite agrupar un conjunto de registros en forma de resumen. Permite condicionar el resultado después de haber agrupado los registros. Permite ordenar los registros de acuerdo a una columna espcífica.
Mostrar los registros de la tabla PASAJERO, ordenarlos de manera ascendente por su apellido paterno.
--Seleccionando todas las filas y columnas select all * from PASAJERO order by apaterno asc go --Seleccionando sólo algunas columnas --1ra forma select idpasajero as Codigo, apaterno as ApellidoPaterno, amaterno as ApellidoMaterno from PASAJERO go
--2da Forma select idpasajero as [Código], apaterno as [Apellido Paterno], amaterno as [Apellido Materno] from PASAJERO go --Concatenando los Apellidos select idpasajero as [Código], apaterno as ApellidoPaterno, amaterno as ApellidoMaterno from PASAJERO go
Específica que el conjunto de filas devueltas por la consulta puede ser controlado en un número y en porcentaje. Considere que la muestra de registros devueltas siempre será el primer conjunto de filas especificadas. Para especificar el porcentaje sólo agregar la palabra PERCENT.
Mostrar los 3 primeros registros de la tabla PASAJERO ordenados por su apellido paterno.
select top 3 idpasajero as ID, nombre as Nombre, apaterno as ApellidoP, amaterno as ApellidoM from pasajero order by apaterno asc go
Mostrar los 3 últimos registros de la tabla PASAJERO ordenados por ambos apellidos.
select top 3 idpasajero as ID, nombre as Nombre, apaterno as ApellidoP, amaterno as ApellidoM from pasajero order by apaterno desc, amaterno desc go
Mostrar el 30% de registros de la tabla RESERVA.
select top 30 percent * from reserva go
Cláusula que permite condicionar el resultado de una consulta.
Script que permita mostrar los PASAJEROS cuyo tipo de documento sea “DNI”.
select * from pasajero where tipo_documento='DNI' go
Mostrar los pagos que se han realizado la fecha “27-01-2013”.
select fecha,idpasajero,monto from pago where fecha='2013-1-27' go
Mostrar los pagos realizados en el mes de mayo del año 2014.
select fecha,idpasajero,monto from pago where month(fecha)='5' and year(fecha)='2014' go
Mostrar los Pasajeros que no tienen asignado un teléfono.
select nombre,apaterno,amaterno,telefono from pasajero where telefono is null go
Implementar un Script que permita mostrar los PASAJEROS con su correspondiente país de residencia.
select pas.nombre as Nombre,apaterno as ApellidoP,amaterno asApellidoM,pai.nombre as Pais from pasajero pas, pais pai where pas.idpais=pai.idpais go
Un Operador es un símbolo que específica una acción que es realizada por una o más expresiones. Categorías de Operadores:
Operador de Suma Númerica y concatenación de Columnas. Operador de resta Númerica y también representa a números negativos. : Operador de Multiplicación. Operador de División entera y fraccionaria. Operador que Devuelve el resto de una división.
Sql server solo cuenta con un operador para la asignación de valores. El operador = se tendrá que colocar en cualquier expresión que necesite asignar un valor de cualquier tipo.
Script que permita mostrar el resultado de la expresión 2*(10+15) - (8/3), utilizar la sentencia SELECT para mostrar el resultado.
Select '2*(10+5) - (8/3)' as [Operación], 2*(10+5)-(8/3) as [Resultado] go
Script que permita mostrar el resultado de la expresión Celsius=(Fharenheit-32)*5/9, usar la sentencia Select.
select '100' as Fahrenheit, (100-32)*5/9 as Celsius go
Calcular el área de un Círculo, almacenando el valor del radio y de PI en sus variables respectivas.
declare @pi float declare @radio float declare @area float --Asignar valores set @pi=3.1415
set @radio=7 --Encontrar el área del Círculo set @area=@pi * Power(@radio,2)
select @area as [Área] go
Script que permita capturar en una variable el correo electrónico del pasajero con código ”P0000005”, usar variables Transact-SQL y sentencia Select para mostrar el email.
declare @correo varchar(70) select @correo=email from pasajero where idpasajero='P0000005' --Mostramo el correo obtenido select 'P0000005' as [Código], @correo as [Email] go
Los operadores lógicos tienen por misión comprobar la veracidad de Alguna Condición, estos como los operadores de comparación, devuelven el tipo de datos BOOLEAN (True, False, Unknown).
Representa la Lógica Y, dos expresiones deben ser TRUE para poder devolver TRUE.
Devuelve TRUE si alguna expresión del conjunto de expresiones es TRUE. Devuelve TRUE si el valor se encuentra dentro de un rango numérico o cadena. Devuelve TRUE si una determinada subconsulta devuelve por lo menos una fila de registros. Devuelve TRUE si el operando se encuentra dentro de una lista de valores específicos. Invierte el valor booleano de una expresión Devuelve FALSE cuando ambas expresiones sean FALSE. Devuelve TRUE si de un conjunto de comparaciones alguna es TRUE.
Igualdad de Expresiones Diferencia de Expresiones Mayor / Mayor o Igual Menor / Menor o Igual
select * from reserva where year(fecha)='2014' and costo<500 go
select * from reserva where costo between 400 and 700 go select * from reserva where costo>=400 and costo<=700 go
select apaterno, amaterno, nombre,num_documento from select apaterno, from pasajero pasajero where left(apaterno,1) where left(apaterno,1) between 'A' 'A' and and 'C' order by by apaterno apaterno asc asc,, amaterno asc asc,, nombre asc go
select apaterno, amaterno, nombre,num_documento from select apaterno, from pasajero pasajero where not where not left(apaterno,1) between 'A' 'A' and and 'C' order by by apaterno apaterno asc asc,, amaterno asc asc,, nombre asc go
select * from select * from reserva reserva where fecha where fecha between '2013-01-01' '2013-01-01' and and '2013-12-31' go select * from select * from reserva reserva where fecha>= where fecha>='2013-01-01' '2013-01-01' and and fecha<='2013-12-31' fecha<='2013-12-31' go select * from select * from reserva reserva where year year(fecha)=2013 (fecha)=2013 go
Devuelve TRUE si el operando coincide a lo más con un patrón específico. El patrón es una cadena de caracteres que se buscará en la expresión. Los comodines a utilizar son:
%: Representa a uno o más caracteres. Puede ser cualquier tipo de carácter textual o símbolo. %: Representa _: Representa _: Representa un solo carácter de cualquier tipo. Representa cualquier carácter individual, dentro de un conjunto de caracteres. Representa cualquier carácter individual fuera del intervalo especificado. Representa que el contenido de una columna no este vacía.
declare @pais varchar declare @pais varchar(40) (40) set @pais= set @pais='Perú' 'Perú' --Alt + 39 if exists(select exists(select idpais idpais from from pais pais where where nombre=@pais) nombre=@pais) print 'País ya se encuentra registrado' else print 'País no se encuentra registrado' go
select * from select * from pasajero pasajero where nombre where nombre like 'A%' go
select * from select * from pasajero pasajero where email where email like '%gmail%' go
select * from select * from pasajero pasajero where nombre where nombre like '_[AOU]%' go
select * from select * from pasajero pasajero where nombre where nombre like '_[^AOU]%' go
declare @documento varchar(50) set @documento ='47715777' select * from pago where idpasajero=( select idpasajero from pasajero where num_documento=@documento ) go
En determinada ocasión se tendrá que unir más tablas para combinar los valores y poder mostrarlos juntos en una consulta, para esto utilizamos la cláusula JOIN.
Internas: Devuelven todas las filas que cumplen con la condición de las tablas, en caso de no encontrarse coincidencia de valores no muestra nada. las filas resultantes no son directamente de la tabla origen, podría ser de la izquierda, derecha o completa. Combinación de tablas Join
LEFT JOIN RIGHT JOIN FULL JOIN CROSS JOIN
El INNER JOIN es otro tipo de composición de tablas, permite emparejar filas de distintas tablas de forma más eficiente que con el producto cartesiano cuando una de las columnas de emparejamiento está indexada.
Implementar un Script que permita mostrar los pasajeros con su correspondiente país de residencia (Inner Join).
--Utilizando un producto cartesiano select pas.nombre,pas.apaterno,pas.amaterno,pai.nombre as [País] from pasajero pas, pais pai go --Utilizando la cláusula Inner Join select pas.nombre,pas.apaterno,pas.amaterno,pai.nombre as Pais from pasajero pas inner join pais pai on pas.idpais=pai.idpais go --Utilizando un producto cartesiano y aplicando un filtro Where select pas.nombre,pas.apaterno,pas.amaterno,pai.nombre as Pais from pasajero pas, pais pai where pas.idpais=pai.idpais go
Implementar un Script que permita mostrar los pasajeros con las siguientes columnas idpasajero, apaterno, amaterno, país, fecha de pago, monto de pago (Inner Join).
nombre,
select pas.idpasajero,pas.nombre,pas.apaterno, pas.amaterno,pai.nombre as Pais,pag.fecha, pag.monto from pasajero pas inner join pais pai on pas.idpais=pai.idpais inner join pago pag on pag.idpasajero=pas.idpasajero go
Implementar un Script que permita mostrar las reservas de un determinado PASAJERO especificado por su nombre. Finalmente, debe ordenar la fecha de reserva de forma descendente.
declare @num_documento varchar(12)='47715777' select res.* from pago pag inner join pasajero pas on pag.idpasajero=pas.idpasajero inner join reserva res on pag.idreserva=res.idreserva where pas.num_documento=@num_documento go
Las funciones de agregado realizan un cálculo sobre un conjunto de valores y devuelven un solo valor. Se suelen utilizar con la cláusula GROUP BY de la instrucción SELECT. COUNT MAX MIN AVG SUM
Permite devolver la suma de todos los valores distinguidos en una determinada expresión. Esta función solo puede utilizarse con columnas de tipo numérico.
Implementar un Script que permita mostrar el acumulado de los montos registrados en la tabla pago ( ).
--Utilizando Función SUM select sum(monto) as [Total Acumulado] from pago go
Implementar un Script que permita mostrar el acumulado de los montos registrados en la tabla pago por cada año, considere el año de la columna fecha. Use la Función SUM y la cláusula Group By. --Utilizando SUM y Group By select year(fecha) as [Año], sum(monto) as [Total Pago] from pago group by year(fecha) go
Implementar un Script que permita mostrar el acumulado de los montos registrados en la tabla pago por cada año, y mes, considere el año de la columna fecha. Use la Función SUM y la cláusula Group By. --Utilizando SUM y Group By select year(fecha) as [Año],month(fecha) as Mes, sum(monto) as [Total Pago] from pago group by year(fecha),month(fecha) go
SUM MAX MIN AVG
Función que permite devolver el número de elementos de un grupo. Count siempre devolverá un valor numérico.
Al especificarlo todos los valores son contabilizados.
Permite definir la no repitencia de valores condicionados de la consulta.
Se puede especificar el nombre de una columna de la tabla a contar.
Representa a todas las filas de la tabla.
Implementar un Script que permita determinar el total de pasajeros registrados (Función COUNT).
--Utilizando Función count select count(idpasajero) as Total_Pasajeros from pasajero go select count(*) as Total_Pasajeros from pasajero go
Implementar un Script que permita determinar el total de pasajeros registrados agrupados por su país, tener en cuenta las columnas a mostrar Nombre del país, Total Pasajeros. Use la Función agregada COUNT y la cláusula Group By e Inner Join.
--Usando la Función agregada COUNT y la cláusula Group By e Inner Join. select pai.nombre as [País],count(pas.idpasajero) as [Total Pasajeros] from pasajero pas inner join pais pai on pas.idpais=pai.idpais group by pai.nombre go
Implementar un Script que permita mostrar el total de pasajeros y el monto acumulado de pagos de sus viajes realizados por un determinado país.
select pai.nombre as [País],count(distinct pas.num_documento) as [Total Pasajeros], sum(pag.monto) as [Monto Acumulado] from pasajero pas inner join pais pai on pai.idpais=pas.idpais inner join pago pag on pag.idpasajero=pas.idpasajero group by pai.nombre go
SUM COUNT
AVG
Función que permite determinar el valor máximo de una expresión propuesta por el usuario. Solo puede ser usado en columnas o expresiones que tenga como tipo de dato un entero.
MAX(All ó Columna ó Expresión).
Función que permite determinar el valor mínimo de una expresión propuesta por el usuario. Solo puede ser usado en columnas o expresiones que tenga como tipo de dato un entero.
MIN(All ó Columna ó Expresión).
Especifica que todos los valores son evaluados.
Se puede especificar el nombre de una columna de la tabla a evaluar.
Representa a una función SQL o a un juego de operadores aritméticos.
Implementar un Script que permita mostrar el monto más alto y más bajo registrado en la tabla PAGO (Función MAX y MIN).
--Usando la función MAX y MIN select max(monto) as [Monto Mayor], min(monto) as [Monto Menor] from pago go
Implementar un Script que permita mostrar los montos más altos y más bajos por año de la tabla pago, ordenados de forma descendente. --Usando la función MAX y MIN select year(fecha)as [Año],max(monto) as [Monto Mayor], min(monto) as [Monto Menor] from pago group by year(fecha) order by year(fecha) desc go
Implementar un Script que permita mostrar los datos del pasajero que registra el mayor monto desde la tabla PAGO. --Usando la función MAX declare @maxPago money select @maxPago=max(monto) from pago select pas.* from pasajero pas where pas.idpasajero=(select idpasajero from pago where monto=@maxPago) go
SUM COUNT MAX MIN
Función que devuelve el promedio de los valores de un determinado grupo, consideremos que dicha columna debe de ser numérica.
Se puede especificar el nombre de una columna de la tabla para especificar el promedio.
Representa a una función SQL o a un juego de operadores aritméticos. No se permite las funciones de agregado ni subconsultas.
Implementar un Script que permita mostrar el precio promedio de las tarifas asignadas a los diferentes vuelos. (Función AVG).
--Usando la Función AVG select avg(precio) as [Tarifa Promedio]
from tarifa go
Implementar un Script que permita mostrar el monto promedio de pagos agrupado por países. (Función AVG).
--Usando la Función AVG select pai.nombre,avg(pag.monto) as [Promedio Pago] from pago pag inner join pasajero pas on pag.idpasajero=pas.idpasajero inner join pais pai on pai.idpais=pas.idpais group by pai.nombre go
El operador permite mostrar los resultados de varias consultas SELECT en una sola. La regla del uso para este operador es que ambas tablas deben de tener las mismas columnas o especificarlas de la misma forma, y que los tipos de datos sean exactamente iguales.
Implementar un Script que permita mostrar los apellidos paternos de los pasajeros y los nombres de los países en una misma consulta.
--Agregando resultados UNION select pas.idpasajero,pas.apaterno from pasajero pas UNION select pai.idpais,pai.nombre from pais pai go
Implementar un Script que permita mostrar el total de registros de las tablas Pasajero, País, Pago desde una misma consulta.
--Agregando resultados UNION select 'pasajero' as [Tabla], count (idpasajero) as [Total Registros] from pasajero UNION select 'pais' as [tabla], count (idpais) as [Total Registros] from pais UNION select 'pago' as [tabla], count (idpago) as [Total Registros] from pago go
es el lenguaje de programación que proporciona Microsoft SQl Server para extender el SQL estándar con otro tipo de instrucciones y elementos propios de los lenguajes de programación ya que esta parte está limitada en SQL.
Procedimientos Almacenados Funciones Triggers
Las instrucciones se ejecutan una a continuación de otra.
Las instrucciones se ejecutan según el valor lógico de una variable.
Las instrucciones se ejecutan en forma repetida según una condición lógica llamada ciclo ó bucle.
La estructura IF evalúa una condición lógica y en función del resultado booleano (true o false) se realiza una u otra expression.
Implementar un Script que permita insertar un nuevo registro en la tabla país, en caso se registre duplicidad en el nombre de un país mostrar un mensaje de “país ya registrado”, caso contrario insertar dicho registro y mostrar un mensaje de “País registrado Correctamente”.
--Estructura Condicional IF declare @idpais char(4)='0011', @nombre varchar(30)='Argelia' if exists(select * from pais where nombre=@nombre) begin print 'País ya Registrado' end else begin insert into pais values (@idpais,@nombre) print 'País Registrado Correctamente' end go
Implementar un Script que permita Mostrar el mensaje de No hay Pasajeros en este país, solo cuando el total de pasajeros asignados a un determinado País no tenga registros en la tabla pasajero. Caso contrarios determinar cuántos pasajeros tiene dicho país.
declare @nombre char(40)='Bolivia' if (select count(*) from pasajero pas left join pais pai on pas.idpais=pai.idpais group by pai.nombre having pai.nombre=@nombre) is null begin print 'No hay Pasajeros en este País' end else begin declare @total int select @total=count(*) from pasajero pas left join pais pai on pas.idpais=pai.idpais group by pai.nombre having pai.nombre=@nombre print 'El País ' + @nombre + 'Tiene ' + cast(@total as char(2)) + ' Pasajero' end go
Procedimientos Almacenados
Funciones Triggers
La estructura CASE evalúa una expresión que podrá tomar N valores distintos, según se elija uno de estos valores se tomará N posibles acciones
Implementar un Script que permita mostrar la fecha en texto registrada en la tabla RESERVA.
--Estructura Múltiple Case select *, cast(day(fecha) as char(2)) + case month(fecha) when 1 then ' Enero ' when 2 then ' Febrero ' when 3 then ' Marzo '
when 4 then ' Abril ' when 5 then ' Mayo ' when 6 then ' Junio ' when 7 then ' Julio ' when 8 then ' Agosto ' when 9 then ' Septiembre ' when 10 then ' Octubre ' when 11 then ' Noviembre ' when 12 then ' Diciembre ' end + cast(year(fecha) as char(4)) as [Fecha] from reserva go
Implementar un Script que permita mostrar el número total de pasajeros por país y el mensaje a los países cuyo número de pasajeros sea cero.
--Estructura Múltiple Case select pai.nombre, count(pas.idpasajero)as [Total Pasajeros],
solo
case when count(pas.idpasajero)=0 then 'NO CUENTA' else '' end as [Mensaje] from pais pai left join pasajero pas on pai.idpais=pas.idpais group by pai.nombre go
Scripts Funciones Triggers
Son un conjunto de instrucciones de Transact-SQL que pueden aceptar y devolver parámetros proporcionados por el usuario.
Generalmente están guardados en la base de datos MASTER son identificados por iniciar en SP, permiten realizar una amplia variedad de tareas, a continuación mostramos algunos procedimientos almacenados del sistema:
Sp_columns Sp_column_privileges Sp_databases Sp_fkeys Sp_pkeys Sp_tables Sp_server_info Sp_statistics
--Procedimiento del sistema que muestra --las columnas de la tabla país sp_columns pais --Procedimiento almacenado del sistema para mostrar los --privilegios de las columnas involucradas de la tabla pasajero Sp_column_privileges pasajero --Procedimiento almacenado del sistema que muestra --las base de datos del servidor activo. Sp_databases --Procedimiento almacenado que muestra las características --de nuestro servidor activo sp_server_info --procedimiento almacenado que muestra donde se hace referencia --a la tabla pasajero Sp_fkeys pasajero --Procedimiento almacenado que muestra la llave primaria --de la tabla pasajero Sp_pkeys pasajero
Son procedimientos que se implementan en forma personalizada según las necesidades del usuario. Los Procedimientos Almacenados pueden tener parámetros de entrada y salida.
Nombre_Procedimiento @parámetro1 [tipo dato], @parámetroN [tipo dato]
Implementar un procedimiento almacenado que muestre el listado de los países y su total de pasajeros.
--Evaluamos si ya existe el procedimiento --almacenado que queremos implementar --si ya existe lo eliminamos if object_id('pasajerosxpais') is not null begin drop procedure pasajerosxpais end go --Implementamos nuestro procedimiento almacenado create procedure pasajerosxpais as select pai.nombre,count(*) as [Total] from pasajero pas join pais pai on pas.idpais=pai.idpais
group by pai.nombre go --Ejecutamos el procedimiento almacenado exec pasajerosxpais
Implementar un procedimiento almacenado que permita mostrar los pagos de un determinado pasajero, considerar para este caso como parámetro de búsqueda el número de documento del pasajero.
--Evaluamos si ya existe el procedimiento --almacenado que queremos implementar --si ya existe lo eliminamos if object_id('pagosxpasajero') is not null begin drop procedure pagosxpasajero end go --Implementamos nuestro procedimiento almacenado alter procedure pagosxpasajero @num_documento varchar(12) as select fecha,monto,tipo_comprobante,num_comprobante from pago where idpasajero= (select idpasajero from pasajero where num_documento=@num_documento)
go --Ejecutamos el procedimiento almacenado y le enviamos el parámetro de entrada exec pagosxpasajero '47715777'
Implementar un procedimiento almacenado que permita registrar un Nuevo país, para este caso definir como parámetro de entrada todos los campos referentes a la tabla país.
--Evaluamos si ya existe el procedimiento --almacenado que queremos implementar --si ya existe lo eliminamos if object_id('nuevopais') is not null begin drop procedure nuevopais end go --Implementamos nuestro procedimiento almacenado create procedure nuevopais @idpais char(4), @nombre varchar(30) as insert into pais (idpais,nombre) values(@idpais,@nombre) go --Ejecutamos el procedimiento almacenado y le enviamos los parámetros de entrada exec nuevopais '0014','Dinamarca'
Implementar un procedimiento almacenado que retorne el total de pagos recibidos en una determinada fecha.
--Evaluamos si ya existe el procedimiento --almacenado que queremos implementar --si ya existe lo eliminamos if object_id('pagosxfecha') is not null begin drop procedure pagosxfecha end go --Implementamos nuestro procedimiento almacenado create procedure pagosxfecha @fecha date, @total money output as select @total=sum(monto) from pago where fecha=@fecha go --Ejecutamos el procedimiento almacenado y le enviamos --los parámetros
declare @t money exec pagosxfecha '2014-05-05',@total=@t output print 'Total' + cast(@t as char(10))
Scripts Procedimientos Almacenados Triggers
Rutina almacenada que recibe unos parámetros escalares de entrada, luego los procesa según el cuerpo definido de la función y por último retorna un resultado de un tipo específico que permitirá cumplir un objetivo. SQL Server proporciona numerosas funciones integradas y permite crear funciones definidas por el usuario.
SQL Server cuenta con una gran variedad de funciones dependiendo de los valores o configuraciones que deseamos realizar, a continuación, mostramos algunas funciones del sistema:
SUM, AVG, COUNT,MAX, MIN GETDATE, DAY, MONTH, YEAR, DATEADD, DATEDIF, ISDATE ABS, RAND, LOG10, SQRT, POWER, TAN, PI, RADIANS
Las funciones definidas por el usuario de SQL Server son rutinas que aceptan parámetros, realizan una acción, como un cálculo complejo, y devuelven el resultado de esa acción como un valor (único o conjunto de valores).
Nombre_Función (@parámetro1 as [Tipo Dato] = [ValorxDefecto], @parámetroN as [Tipo Dato] = [ValorxDefecto])
TipoDato_Returnado
Expresión_salida
Implementar una función que devuelva el promedio de dos números ingresados por el usuario.
--Evaluamos primero si ya existe la función --que queremos implementar si ya existe la eliminamos IF object_id('calcularpromedio') is not null BEGIN DROP FUNCTION dbo.calcularpromedio END go --Implementamos la función con dos parámetros de entrada CREATE FUNCTION calcularpromedio (@valor1 as decimal(10,2),@valor2 decimal(10,2)) RETURNS decimal(10,2) AS BEGIN DECLARE @resultado decimal(10,2) SET @resultado=(@valor1+@valor2)/2 RETURN @resultado END GO --Ejecutamos la función con un select y le enviamos --los dos parámetros de entrada (DBO es el nombre del propietario) select dbo.calcularpromedio(12,13) as Promedio --Ejecutamos la función con un print y le enviamos --los dos parámetros de entrada print 'Promedio: ' + cast(dbo.calcularpromedio(12,13) as Char(10))
Implementar una función que devuelva el nombre de un mes en letras según una fecha ingresada por el usuario.
--Evaluamos primero si ya existe la función --que queremos implementar, si ya existe la eliminamos IF object_id('fechaletras') is not null BEGIN DROP FUNCTION dbo.fechaletras END go
--Implementamos la función con un solo parámetro de entrada CREATE FUNCTION fechaletras (@fecha as DATE) RETURNS varchar(20) AS BEGIN DECLARE @resultado varchar(20) SET @resultado=concat(day(@fecha),' de ',datename(month,@fecha), ' del ',year(@fecha)) RETURN @resultado END GO --Ejecutamos la función con un select y le enviamos --el parámetro de entrada select dbo.fechaletras('2015-08-08') as [Fecha Actual] select dbo.fechaletras(pag.fecha) as Fecha, (pas.nombre + ' ' +pas.apaterno) as pasajero, pag.tipo_comprobante,pag.num_comprobante from pago pag inner join pasajero pas on pag.idpasajero=pas.idpasajero go
Implementar una función de tabla en línea que muestre los registros de la tabla pasajero dependiendo del país de proveniencia.
--Evaluamos primero si ya existe la función --que queremos implementar, si ya existe la eliminamos IF object_id('pasajeroxpais') is not null BEGIN DROP FUNCTION dbo.pasajeroxpais END go --Implementamos la función con un solo parámetro de entrada CREATE FUNCTION pasajeroxpais (@pais as varchar(30)) RETURNS TABLE AS RETURN (SELECT pas.idpasajero,(pas.nombre + ' ' + pas.apaterno) as Pasajero,pai.nombre as Pais from pasajero pas inner join pais pai on pai.idpais=pas.idpais where pai.nombre=@pais) GO --Ejecutamos la función con un select, --Mostraremos los pasajeros del país Perú select * from dbo.pasajeroxpais('Perú') go
Los cursores son una herramienta de SQL que nos permite recorrer el resultado de una consulta SQL y realizar operaciones en cada paso de esta. Es así como nos ayuda a realizar operaciones que de otro modo serían más complejas o imposibles.
Nombre_Cursor
[OF column_name[,…n]]]
Implementar un cursos básico donde se imprima el primer registro de la table PASAJERO.
--Declaramos la variable de tipo cursor --donde almacenamos los registros de la consulta --pasajero DECLARE micursorpas CURSOR FOR select * from PASAJERO --aperturamos el cursor
OPEN micursorpas --accedemos al primer registro del cursos con el operador --next FETCH NEXT FROM micursorpas --Cerramos el cursor close micursorpas --liberamos el cursor con el operador deallocate deallocate micursorpas
Implementar un cursor donde se imprima en forma de reporte a los registros de la tabla PASAJERO.
--Declaramos las variables locales que representaran --el valor de las columnas DECLARE @idpasajero char(8),@pasajero char(20), @pais char(10),@documento char(12) --declaramos el cursor con la consulta de la tabla pasajero --y país DECLARE micursor CURSOR FOR select pas.idpasajero, (pas.nombre+ ' ' +pas.apaterno) as pasajero, pai.nombre as pais,pas.num_documento from pasajero pas inner join pais pai on pas.idpais=pai.idpais --aperturamos el cursos OPEN micursor --obtenemos el primer registro y enviamos el valor --a las variables correspondientes FETCH micursor INTO @idpasajero,@pasajero,@pais,@documento --Imprimimos la cabecera del reporte PRINT 'CODIGO PASAJERO PAIS DOCUMENTO' PRINT '----------------------------------------------------------' --Implementamos una estructura iterativa para poder --imprimir todos los registros WHILE @@FETCH_STATUS=0 BEGIN PRINT @idpasajero+space(5)+@pasajero+space(5)+ @pais+space(5)+@documento FETCH micursor INTO @idpasajero,@pasajero,@pais,@documento END --Cerramos el cursor close micursor --liberamos el cursor con el operador deallocate deallocate micursor
PIVOT gira una expresión con valores de tabla convirtiendo los valores únicos de una columna de la expresión en varias columnas en la salida y realiza agregaciones donde son necesarias en cualquier valor de columna restante que se desee en la salida final.
Mostrar los pagos realizados por los pasajeros, pero ordenar los pagos por meses.
--Seleccionamos todos los registros de la tabla --de referencia cruzada select Pasajero, case when Enero Is not null then Enero else 0 end as Enero, case when Febrero Is not null then Febrero else 0 end as Febrero, case when Marzo Is not null then Marzo else 0 end as Marzo, case when Abril Is not null then Abril else 0 end as Abril, case when Mayo Is not null then Mayo else 0 end as Mayo, case when Junio Is not null then Junio else 0 end as Junio, case when Julio Is not null then Julio else 0 end as Julio, case when Agosto Is not null then Agosto else 0 end as Agosto, case when Setiembre Is not null then Setiembre else 0 end asSetiembre, case when Octubre Is not null then Octubre else 0 end as Octubre, case when Noviembre Is not null then Noviembre else 0 end asNoviembre, case when Diciembre Is not null then Diciembre else 0 end asDiciembre from (