Logo Passei Direto

Proyecto Ingeniería de Software

Herramientas de estudio

Material
¡Estudia con miles de materiales!

Vista previa del material en texto

<p>UNIVERSIDAD ESTATAL A DISTANCIA</p><p>VICERRECTORÍA ACADÉMICA</p><p>ESCUELA DE CIENCIAS EXACTAS Y NATURALES</p><p>CARRERA INGENIERÍA INFORMÁTICA</p><p>CÁTEDRA INGENIERÍA DE SOFTWARE</p><p>Proyecto #2</p><p>Generación de consultas utilizando comandos SQL.</p><p>Asignatura: Base de Datos</p><p>Código: 00826</p><p>Bryan Steven Morales Alfaro</p><p>Cedula: 118310249</p><p>Centro Universitario: Desamparados</p><p>Fecha de Entrega: 24 de marzo, 2024</p><p>GRUPO: 04</p><p>Primer Cuatrimestre 2024</p><p>2</p><p>Tabla de contenido</p><p>Introducción ........................................................................................................... 3</p><p>Consulta en Base de Datos (SQL) ......................................................................... 4</p><p>Carga de Datos y Eliminación en las Tablas........................................................... 5</p><p>Carga de Datos (Script) ...................................................................................... 5</p><p>Script de Creación de tablas proporcionado en plataforma ................................. 5</p><p>Imagen de la Carga de Datos ........................................................................... 13</p><p>Eliminación ....................................................................................................... 13</p><p>ALTER TABLE ............................................................................................... 14</p><p>CONSTRAINT ............................................................................................... 14</p><p>Script de la Eliminación ................................................................................. 14</p><p>Imagen de Eliminación .................................................................................. 17</p><p>Consulta Detallada de Órdenes de Trabajo en la Base de Datos ......................... 18</p><p>Script SQL para Consulta de Órdenes de Trabajo ............................................ 19</p><p>Imagen de Consulta SQL de Órdenes de Trabajo ............................................. 20</p><p>Consulta que indica la cantidad de Órdenes de Trabajo ...................................... 21</p><p>Script SQL: Conteo y Agrupación de Órdenes de Trabajo por Estado .............. 21</p><p>Imagen de Órdenes de Trabajo Agrupadas por Estado..................................... 22</p><p>Consulta de Costo Total por Orden de Trabajo Completada ................................. 23</p><p>Script de Costo Total por Orden de Trabajo Completada .................................. 24</p><p>Imagen de Costo Total por Orden de Trabajo Completada ............................... 25</p><p>Consulta SQL: Mostrar Fecha de Entrega y Estado de Órdenes de Trabajo ........ 26</p><p>Script de actualización y adición en 3 días ........................................................ 26</p><p>Script de tabla Ordenes con Orden de Estado en (1,2) ..................................... 27</p><p>Imagen de adición de 3 días e imágenes de la presentación en tabla .............. 27</p><p>Conclusión ........................................................................................................... 29</p><p>Referencias .......................................................................................................... 30</p><p>3</p><p>Introducción</p><p>En este proyecto, se aplicarán los conocimientos adquiridos sobre el lenguaje SQL</p><p>para generar consultas que respondan a requerimientos específicos en el contexto</p><p>de una base de datos. La finalidad es utilizar el diseño entidad-relación, el script de</p><p>creación de tablas y la tabla de datos de ejemplo proporcionados en la plataforma</p><p>del curso, empleando el DBMS Microsoft SQL Express.</p><p>Seguidamente, se detallarán las diferentes consultas SQL creadas para cumplir</p><p>con los objetivos planteados. En primer lugar, se eliminarán todos los datos de las</p><p>tablas y se cargarán datos a todas las tablas de la base de datos, según el diagrama</p><p>entidad-relación y la tabla de datos de ejemplo.</p><p>En la tercera instancia, se generará una consulta SQL que indique la cantidad de</p><p>órdenes de trabajo registradas en la base de datos, agrupadas por estado.</p><p>Posteriormente, se presentará una consulta SQL que permitirá calcular el costo</p><p>total a pagar por cada orden de trabajo completada, considerando el costo de la</p><p>mano de obra y el costo de los repuestos utilizados, al cual se le aplicará un 13%</p><p>adicional de impuesto de ventas.</p><p>Finalmente, se creará un comando SQL que actualizará la fecha estimada de</p><p>entrega de las órdenes de trabajo a tres días adicionales a la fecha actual para</p><p>aquellas órdenes cuyo tipo de estado no sea completada o cancelada.</p><p>En resumen, este proyecto demostrará la capacidad para generar consultas SQL</p><p>efectivas y funcionales, adaptadas a las necesidades específicas de la gestión de</p><p>una base de datos, lo cual constituye un paso fundamental en el desarrollo de</p><p>habilidades en el ámbito de la programación y el manejo de sistemas de</p><p>información.</p><p>4</p><p>Consulta en Base de Datos (SQL)</p><p>“Las consultas se utilizan para extraer y manipular la información de una base de</p><p>datos y especifican cómo se verá la tabla resultante. Una consulta es un</p><p>componente de algunas sentencias de SQL”. (Cantarero, 2022)</p><p>Los principales subconjuntos que utilizamos para crear consultas en nuestro</p><p>programa llamado (Microsoft SQL Server Management Studio) son:</p><p>DDL (Lenguaje de Definición de Datos): Estas instrucciones DDL se utilizan para</p><p>describir, definir y crear objetos dentro de una base de datos. Algunos de los</p><p>comandos incluyen:</p><p>• Create: Se usa para crear tablas.</p><p>• Alter: Modifica la estructura de una tabla, añadiendo o eliminando columnas,</p><p>cambiando nombres, entre otros.</p><p>• Drop: Elimina objetos de la base de datos.</p><p>• Truncate: Elimina todos los registros de una tabla.</p><p>• Comment: Agrega comentarios al diccionario de datos.</p><p>• Rename: Cambia el nombre de objetos.</p><p>DML (Lenguaje de Manipulación de Datos): Estas instrucciones DML se utilizan</p><p>para gestionar la información en una base de datos, permitiendo consultar, insertar,</p><p>modificar y eliminar datos almacenados en los objetos de la base de datos. Algunos</p><p>de sus comandos son:</p><p>• Insert: Se usa para agregar datos a una tabla.</p><p>• Update: Modifica los valores de los campos en una tabla.</p><p>• Delete: Elimina registros de una tabla.</p><p>• Select: Consulta registros de la base de datos que cumplan con un criterio</p><p>específico.</p><p>5</p><p>Carga de Datos y Eliminación en las Tablas</p><p>Carga de Datos (Script)</p><p>Nuestro primer paso fue ejecutar el script de creación de tablas, el cual nos</p><p>proporcionaron en la plataforma. Este fue ejecutado de la siguiente manera y</p><p>exitosamente.</p><p>Script de Creación de tablas proporcionado en plataforma</p><p>USE [master]</p><p>GO</p><p>/****** Object: Database [AUTOTECH] Script Date: 3/7/2024 4:22:54 PM ******/</p><p>IF EXISTS (SELECT * FROM SYS.databases WHERE NAME = 'AUTOTECH2')</p><p>DROP DATABASE [AUTOTECH]</p><p>GO</p><p>/****** Object: Database [AUTOTECH] Script Date: 3/7/2024 4:22:54 PM ******/</p><p>CREATE DATABASE [AUTOTECH]</p><p>GO</p><p>USE [AUTOTECH]</p><p>GO</p><p>/****** Object: Table [dbo].[CLIENTES] Script Date: 3/7/2024 4:23:38 PM ******/</p><p>IF EXISTS (SELECT * FROM sys.objects WHERE object_id =</p><p>OBJECT_ID(N'[dbo].[CLIENTES]') AND type in (N'U'))</p><p>DROP TABLE [dbo].[CLIENTES]</p><p>GO</p><p>/****** Object: Table [dbo].[CLIENTES] Script Date: 3/7/2024 4:23:38 PM ******/</p><p>CREATE TABLE [dbo].[CLIENTES](</p><p>6</p><p>[Cedula] [nvarchar](30) NOT NULL,</p><p>[Nombre] [nvarchar](50) NOT NULL,</p><p>[Apellido1] [nvarchar](50) NOT NULL,</p><p>[Apellido2] [nvarchar](50) NOT NULL,</p><p>[Telefono] [nvarchar](50) NOT NULL,</p><p>[Direccion] [nvarchar](max) NOT NULL,</p><p>[Correo] [nvarchar](100) NOT NULL,</p><p>CONSTRAINT [PK_CLIENTES] PRIMARY KEY CLUSTERED ([Cedula] ASC)</p><p>) ON [PRIMARY]</p><p>GO</p><p>/****** Object: Table [dbo].[EMPLEADOS] Script Date: 3/7/2024 4:24:02 PM</p><p>******/</p><p>IF EXISTS (SELECT * FROM sys.objects WHERE object_id =</p><p>OBJECT_ID(N'[dbo].[EMPLEADOS]') AND type in (N'U'))</p><p>DROP TABLE [dbo].[EMPLEADOS]</p><p>GO</p><p>/****** Object: Table</p><p>[dbo].[EMPLEADOS] Script Date: 3/7/2024 4:24:02 PM</p><p>******/</p><p>CREATE TABLE [dbo].[EMPLEADOS](</p><p>[IDEmpleado] [int] NOT NULL,</p><p>[Cedula] [nvarchar](30) NOT NULL,</p><p>[Nombre] [nvarchar](50) NOT NULL,</p><p>[Apellido1] [nvarchar](50) NOT NULL,</p><p>[Apellido2] [nvarchar](50) NOT NULL,</p><p>[Cargo] [nvarchar](50) NOT NULL,</p><p>[Especialidad] [nvarchar](50) NOT NULL,</p><p>[FechaContratacion] [date] NOT NULL,</p><p>7</p><p>CONSTRAINT [PK_EMPLEADOS_1] PRIMARY KEY CLUSTERED</p><p>([IDEmpleado] ASC)</p><p>) ON [PRIMARY]</p><p>GO</p><p>/****** Object: Table [dbo].[VEHICULO] Script Date: 3/7/2024 4:25:33 PM ******/</p><p>IF EXISTS (SELECT * FROM sys.objects WHERE object_id =</p><p>OBJECT_ID(N'[dbo].[VEHICULO]') AND type in (N'U'))</p><p>DROP TABLE [dbo].[VEHICULO]</p><p>GO</p><p>/****** Object: Table [dbo].[VEHICULO] Script Date: 3/7/2024 4:25:33 PM ******/</p><p>CREATE TABLE [dbo].[VEHICULO](</p><p>[Placa] [nvarchar](15) NOT NULL,</p><p>[Marca] [nvarchar](50) NOT NULL,</p><p>[Modelo] [nvarchar](50) NOT NULL,</p><p>[Anio] [int] NOT NULL,</p><p>[Color] [nvarchar](50) NOT NULL,</p><p>CONSTRAINT [PK_VEHICULO] PRIMARY KEY CLUSTERED ([Placa] ASC)</p><p>) ON [PRIMARY]</p><p>GO</p><p>/****** Object: Table [dbo].[ORDENES_ESTADOS] Script Date: 3/7/2024 4:46:54</p><p>PM ******/</p><p>IF EXISTS (SELECT * FROM sys.objects WHERE object_id =</p><p>OBJECT_ID(N'[dbo].[ORDENES_ESTADOS]') AND type in (N'U'))</p><p>DROP TABLE [dbo].[ORDENES_ESTADOS]</p><p>GO</p><p>8</p><p>/****** Object: Table [dbo].[ORDENES_ESTADOS] Script Date: 3/7/2024 4:46:54</p><p>PM ******/</p><p>CREATE TABLE [dbo].[ORDENES_ESTADOS](</p><p>[IDEstado] [int] NOT NULL,</p><p>[Descripcion] [nvarchar](50) NOT NULL,</p><p>CONSTRAINT [PK_ORDENES_ESTADOS] PRIMARY KEY CLUSTERED</p><p>([IDEstado] ASC)</p><p>) ON [PRIMARY]</p><p>GO</p><p>/****** Object: Table [dbo].[ORDENES] Script Date: 3/7/2024 4:51:21 PM ******/</p><p>IF EXISTS (SELECT * FROM sys.objects WHERE object_id =</p><p>OBJECT_ID(N'[dbo].[ORDENES]') AND type in (N'U'))</p><p>BEGIN</p><p>ALTER TABLE [dbo].[ORDENES] DROP CONSTRAINT</p><p>[FK_ORDENES_VEHICULO]</p><p>ALTER TABLE [dbo].[ORDENES] DROP CONSTRAINT</p><p>[FK_ORDENES_ORDENES_ESTADOS]</p><p>ALTER TABLE [dbo].[ORDENES] DROP CONSTRAINT</p><p>[FK_ORDENES_CLIENTES]</p><p>DROP TABLE [dbo].[ORDENES]</p><p>END</p><p>GO</p><p>/****** Object: Table [dbo].[ORDENES] Script Date: 3/7/2024 4:51:21 PM ******/</p><p>CREATE TABLE [dbo].[ORDENES](</p><p>[NumeroOrden] [int] NOT NULL,</p><p>[Descripcion] [nvarchar](max) NOT NULL,</p><p>[FechaIngreso] [date] NOT NULL,</p><p>[FechaEntrega] [date] NOT NULL,</p><p>9</p><p>[CedulaCliente] [nvarchar](30) NOT NULL,</p><p>[PlacaVehiculo] [nvarchar](15) NOT NULL,</p><p>[EstadoOrden] [int] NOT NULL,</p><p>CONSTRAINT [PK_ORDENES] PRIMARY KEY CLUSTERED([NumeroOrden]</p><p>ASC),</p><p>CONSTRAINT [FK_ORDENES_CLIENTES] FOREIGN KEY([CedulaCliente])</p><p>REFERENCES [dbo].[CLIENTES] ([Cedula]),</p><p>CONSTRAINT [FK_ORDENES_ORDENES_ESTADOS] FOREIGN</p><p>KEY([EstadoOrden]) REFERENCES [dbo].[ORDENES_ESTADOS] ([IDEstado]),</p><p>CONSTRAINT [FK_ORDENES_VEHICULO] FOREIGN KEY([PlacaVehiculo])</p><p>REFERENCES [dbo].[VEHICULO] ([Placa])</p><p>) ON [PRIMARY]</p><p>GO</p><p>/****** Object: Table [dbo].[TIPO_REPUESTO] Script Date: 3/7/2024 5:06:29 PM</p><p>******/</p><p>IF EXISTS (SELECT * FROM sys.objects WHERE object_id =</p><p>OBJECT_ID(N'[dbo].[TIPO_REPUESTO]') AND type in (N'U'))</p><p>DROP TABLE [dbo].[TIPO_REPUESTO]</p><p>GO</p><p>/****** Object: Table [dbo].[TIPO_REPUESTO] Script Date: 3/7/2024 5:06:29 PM</p><p>******/</p><p>CREATE TABLE [dbo].[TIPO_REPUESTO](</p><p>[IdTipoRepuesto] [int] NOT NULL,</p><p>[Descripcion] [varchar](100) NOT NULL,</p><p>CONSTRAINT [PK_TIPO_REPUESTO] PRIMARY KEY CLUSTERED</p><p>([IdTipoRepuesto] ASC)</p><p>) ON [PRIMARY]</p><p>GO</p><p>10</p><p>/****** Object: Table [dbo].[REPUESTOS] Script Date: 3/7/2024 4:24:24 PM</p><p>******/</p><p>IF EXISTS (SELECT * FROM sys.objects WHERE object_id =</p><p>OBJECT_ID(N'[dbo].[REPUESTOS]') AND type in (N'U'))</p><p>BEGIN</p><p>ALTER TABLE [dbo].[REPUESTOS] DROP CONSTRAINT</p><p>[FK_REPUESTOS_TIPO_REPUESTO]</p><p>DROP TABLE [dbo].[REPUESTOS]</p><p>END</p><p>GO</p><p>/****** Object: Table [dbo].[REPUESTOS] Script Date: 3/7/2024 4:24:24 PM</p><p>******/</p><p>CREATE TABLE [dbo].[REPUESTOS](</p><p>[NumeroParte] [nvarchar](50) NOT NULL,</p><p>[Nombre] [nvarchar](100) NOT NULL,</p><p>[Descripcion] [nvarchar](200) NOT NULL,</p><p>[CostoRepuesto] [real] NOT NULL,</p><p>[Cantidad] [int] NOT NULL,</p><p>[TipoRepuesto] [int] NOT NULL,</p><p>CONSTRAINT [PK_REPUESTOS] PRIMARY KEY CLUSTERED([NumeroParte]</p><p>ASC),</p><p>CONSTRAINT [FK_REPUESTOS_TIPO_REPUESTO] FOREIGN</p><p>KEY([TipoRepuesto]) REFERENCES [dbo].[TIPO_REPUESTO] ([IdTipoRepuesto])</p><p>) ON [PRIMARY]</p><p>GO</p><p>/****** Object: Table [dbo].[SERVICIOS] Script Date: 3/7/2024 4:25:11 PM ******/</p><p>IF EXISTS (SELECT * FROM sys.objects WHERE object_id =</p><p>OBJECT_ID(N'[dbo].[SERVICIOS]') AND type in (N'U'))</p><p>BEGIN</p><p>11</p><p>ALTER TABLE [dbo].[SERVICIOS] DROP CONSTRAINT</p><p>[FK_SERVICIOS_EMPLEADOS]</p><p>DROP TABLE [dbo].[SERVICIOS]</p><p>END</p><p>GO</p><p>/****** Object: Table [dbo].[SERVICIOS] Script Date: 3/7/2024 4:25:11 PM ******/</p><p>CREATE TABLE [dbo].[SERVICIOS](</p><p>[IDServicio] [int] NOT NULL,</p><p>[Descripcion] [nvarchar](200) NOT NULL,</p><p>[CostoManoObra] [real] NOT NULL,</p><p>[TiempoEjecucion] [int] NOT NULL,</p><p>[IDEmpleado] [int] NOT NULL,</p><p>CONSTRAINT [PK_SERVICIOS] PRIMARY KEY CLUSTERED ([IDServicio]</p><p>ASC),</p><p>CONSTRAINT [FK_SERVICIOS_EMPLEADOS] FOREIGN KEY([IDEmpleado])</p><p>REFERENCES [dbo].[EMPLEADOS] ([IDEmpleado])</p><p>) ON [PRIMARY]</p><p>GO</p><p>/****** Object: Table [dbo].[SERVICIOS_POR_ORDEN] Script Date: 3/7/2024</p><p>4:53:42 PM ******/</p><p>IF EXISTS (SELECT * FROM sys.objects WHERE object_id =</p><p>OBJECT_ID(N'[dbo].[SERVICIOS_POR_ORDEN]') AND type in (N'U'))</p><p>BEGIN</p><p>ALTER TABLE [dbo].[SERVICIOS_POR_ORDEN] DROP CONSTRAINT</p><p>[FK_SERVICIOS_POR_ORDEN_SERVICIOS]</p><p>ALTER TABLE [dbo].[SERVICIOS_POR_ORDEN] DROP CONSTRAINT</p><p>[FK_SERVICIOS_POR_ORDEN_ORDENES]</p><p>DROP TABLE [dbo].[SERVICIOS_POR_ORDEN]</p><p>END</p><p>12</p><p>GO</p><p>/****** Object: Table [dbo].[SERVICIOS_POR_ORDEN] Script Date: 3/7/2024</p><p>4:53:42 PM ******/</p><p>CREATE TABLE [dbo].[SERVICIOS_POR_ORDEN](</p><p>[IdServicio] [int] NOT NULL,</p><p>[NumeroOrden] [int] NOT NULL,</p><p>CONSTRAINT [PK_SERVICIOS_POR_ORDEN] PRIMARY KEY CLUSTERED(</p><p>[IdServicio] ASC,[NumeroOrden] ASC),</p><p>CONSTRAINT [FK_SERVICIOS_POR_ORDEN_ORDENES] FOREIGN</p><p>KEY([NumeroOrden]) REFERENCES [dbo].[ORDENES] ([NumeroOrden]),</p><p>CONSTRAINT [FK_SERVICIOS_POR_ORDEN_SERVICIOS] FOREIGN</p><p>KEY([IdServicio]) REFERENCES [dbo].[SERVICIOS] ([IDServicio])</p><p>) ON [PRIMARY]</p><p>GO</p><p>/****** Object: Table [dbo].[REPUESTOS_POR_SERVICIOS] Script Date:</p><p>3/7/2024 4:57:57 PM ******/</p><p>IF EXISTS (SELECT * FROM sys.objects WHERE object_id =</p><p>OBJECT_ID(N'[dbo].[REPUESTOS_POR_SERVICIOS]') AND type in (N'U'))</p><p>BEGIN</p><p>ALTER TABLE [dbo].[REPUESTOS_POR_SERVICIOS] DROP</p><p>CONSTRAINT [FK_REPUESTOS_POR_SERVICIOS_SERVICIOS]</p><p>ALTER TABLE [dbo].[REPUESTOS_POR_SERVICIOS] DROP</p><p>CONSTRAINT [FK_REPUESTOS_POR_SERVICIOS_REPUESTOS]</p><p>DROP TABLE [dbo].[REPUESTOS_POR_SERVICIOS]</p><p>END</p><p>GO</p><p>/****** Object: Table [dbo].[REPUESTOS_POR_SERVICIOS] Script Date:</p><p>3/7/2024 4:57:57 PM ******/</p><p>13</p><p>CREATE TABLE [dbo].[REPUESTOS_POR_SERVICIOS](</p><p>[NumeroParte] [nvarchar](50) NOT NULL,</p><p>[IdServicio] [int] NOT NULL,</p><p>CONSTRAINT [PK_REPUESTOS_POR_SERVICIOS] PRIMARY KEY</p><p>CLUSTERED ([NumeroParte] ASC,[IdServicio] ASC),</p><p>CONSTRAINT [FK_REPUESTOS_POR_SERVICIOS_REPUESTOS] FOREIGN</p><p>KEY([NumeroParte]) REFERENCES [dbo].[REPUESTOS] ([NumeroParte]),</p><p>CONSTRAINT [FK_REPUESTOS_POR_SERVICIOS_SERVICIOS] FOREIGN</p><p>KEY([IdServicio]) REFERENCES [dbo].[SERVICIOS] ([IDServicio])</p><p>) ON [PRIMARY]</p><p>GO</p><p>Imagen de la Carga de Datos</p><p>Acá se ha ejecutado el script de la base de datos (AUTOTECH) de manera</p><p>completa y sin errores. Ahora procederé a mostrar el proceso de eliminación.</p><p>Eliminación</p><p>Para la eliminación de datos en las tablas utilizamos el “DELETE FROM”, el cual</p><p>es un elemento de eliminación en SQL. Al intentar hacer el borrado por primera</p><p>vez se produjo un error por las restricciones de algunas de las tablas creadas, por</p><p>lo tanto, procedimos a ejecutar primero el comando:</p><p>14</p><p>ALTER TABLE: Se requiere para desactivar y activar</p><p>las restricciones de clave</p><p>foránea en todas las tablas de la base de datos.</p><p>CONSTRAINT: Este se utiliza junto al ALTER TABLE para la activación y</p><p>desactivación.</p><p>Script de la Eliminación</p><p>El script de la eliminación junto con los comandos adicionales y todas las tablas con</p><p>sus nombres quedo de esta manera:</p><p>-- Desactivar restricciones de clave externa</p><p>ALTER TABLE dbo.SERVICIOS_POR_ORDEN NOCHECK CONSTRAINT</p><p>FK_SERVICIOS_POR_ORDEN_SERVICIOS;</p><p>ALTER TABLE dbo.REPUESTOS_POR_SERVICIOS NOCHECK CONSTRAINT</p><p>FK_REPUESTOS_POR_SERVICIOS_SERVICIOS;</p><p>ALTER TABLE dbo.REPUESTOS_POR_SERVICIOS NOCHECK CONSTRAINT</p><p>FK_REPUESTOS_POR_SERVICIOS_REPUESTOS;</p><p>ALTER TABLE dbo.ORDENES NOCHECK CONSTRAINT</p><p>FK_ORDENES_CLIENTES;</p><p>ALTER TABLE dbo.SERVICIOS NOCHECK CONSTRAINT</p><p>FK_SERVICIOS_EMPLEADOS;</p><p>ALTER TABLE dbo.ORDENES NOCHECK CONSTRAINT</p><p>FK_ORDENES_VEHICULO;</p><p>ALTER TABLE dbo.ORDENES NOCHECK CONSTRAINT</p><p>FK_ORDENES_ORDENES_ESTADOS;</p><p>ALTER TABLE dbo.SERVICIOS_POR_ORDEN NOCHECK CONSTRAINT</p><p>FK_SERVICIOS_POR_ORDEN_ORDENES;</p><p>ALTER TABLE dbo.REPUESTOS NOCHECK CONSTRAINT</p><p>FK_REPUESTOS_TIPO_REPUESTO;</p><p>15</p><p>-- Borrar datos de las tablas</p><p>DELETE FROM dbo.SERVICIOS_POR_ORDEN;</p><p>DELETE FROM dbo.REPUESTOS_POR_SERVICIOS;</p><p>DELETE FROM dbo.REPUESTOS;</p><p>DELETE FROM dbo.SERVICIOS;</p><p>DELETE FROM dbo.ORDENES;</p><p>DELETE FROM dbo.CLIENTES;</p><p>DELETE FROM dbo.EMPLEADOS;</p><p>DELETE FROM dbo.VEHICULO;</p><p>DELETE FROM dbo.ORDENES_ESTADOS;</p><p>DELETE FROM dbo.TIPO_REPUESTO;</p><p>-- Activar restricciones de clave externa nuevamente</p><p>ALTER TABLE dbo.SERVICIOS_POR_ORDEN WITH CHECK CHECK</p><p>CONSTRAINT FK_SERVICIOS_POR_ORDEN_SERVICIOS;</p><p>ALTER TABLE dbo.REPUESTOS_POR_SERVICIOS WITH CHECK CHECK</p><p>CONSTRAINT FK_REPUESTOS_POR_SERVICIOS_SERVICIOS;</p><p>ALTER TABLE dbo.REPUESTOS_POR_SERVICIOS WITH CHECK CHECK</p><p>CONSTRAINT FK_REPUESTOS_POR_SERVICIOS_REPUESTOS;</p><p>ALTER TABLE dbo.ORDENES WITH CHECK CHECK CONSTRAINT</p><p>FK_ORDENES_CLIENTES;</p><p>ALTER TABLE dbo.SERVICIOS WITH CHECK CHECK CONSTRAINT</p><p>FK_SERVICIOS_EMPLEADOS;</p><p>ALTER TABLE dbo.ORDENES WITH CHECK CHECK CONSTRAINT</p><p>FK_ORDENES_VEHICULO;</p><p>16</p><p>ALTER TABLE dbo.ORDENES WITH CHECK CHECK CONSTRAINT</p><p>FK_ORDENES_ORDENES_ESTADOS;</p><p>ALTER TABLE dbo.SERVICIOS_POR_ORDEN WITH CHECK CHECK</p><p>CONSTRAINT FK_SERVICIOS_POR_ORDEN_ORDENES;</p><p>ALTER TABLE dbo.REPUESTOS WITH CHECK CHECK CONSTRAINT</p><p>FK_REPUESTOS_TIPO_REPUESTO;</p><p>Lo que acabamos de ver ha sido la desactivación de restricciones con el ALTER</p><p>TABLE, luego pasamos a hacer el borrado de datos por medio del DELETE FROM</p><p>y por último volvemos a activar las restricciones, con esto queda todo listo.</p><p>17</p><p>Imagen de Eliminación</p><p>Acá adjunto la imagen de la ejecución sin errores.</p><p>18</p><p>Consulta Detallada de Órdenes de Trabajo en la Base de Datos</p><p>El propósito de nuestra consulta es presentar la información de las ordenes de</p><p>trabajo existentes en la base de datos. Los datos para mostrar son: número de</p><p>orden, descripción del trabajo, fecha de ingreso, fecha estimada de entrega, estado</p><p>actual de la orden, número de cédula del cliente, nombre completo del cliente,</p><p>teléfono del cliente, placa del vehículo, marca del vehículo y modelo del vehículo.</p><p>En esta consulta utilizamos la cláusula JOIN, para la unión de las tablas: “Ordenes”,</p><p>“Clientes”, “Vehículo” y “ORDENES_ESTADOS”.</p><p>Aquí una breve explicación de como son las uniones entre las tablas mencionadas:</p><p>✓ La unión JOIN CLIENTES C ON O.CedulaCliente = C.Cedula conecta la tabla</p><p>ORDENES con la tabla CLIENTES mediante las columnas CedulaCliente de</p><p>ORDENES y Cedula de CLIENTES, que representan la relación entre las</p><p>órdenes y los clientes.</p><p>✓ La unión JOIN VEHICULO V ON O.PlacaVehiculo = V.Placa relaciona la tabla</p><p>ORDENES con la tabla VEHICULO a través de las columnas PlacaVehiculo</p><p>de ORDENES y Placa de VEHICULO, que establecen la conexión entre las</p><p>órdenes y los vehículos asociados.</p><p>✓ La unión JOIN ORDENES_ESTADOS OE ON O.EstadoOrden =</p><p>OE.IDEstado vincula la tabla ORDENES con la tabla ORDENES_ESTADOS</p><p>utilizando las columnas EstadoOrden de ORDENES y IDEstado de</p><p>ORDENES_ESTADOS, que describe el estado actual de cada orden.</p><p>Por otro lado, se intentó utilizar el comando “CONCAT” para separar todos los</p><p>nombres completos, sin embargo, el programa no lo permitió así que se utilizó el</p><p>operador “+” y el uso de comillas simples ‘ ‘, para la correcta separación del nombre</p><p>completo.</p><p>Línea que separa el nombre completo:</p><p>(C.Nombre + ' ' + C.Apellido1 + ' ' + C.Apellido2) AS NombreCompleto,</p><p>19</p><p>Script SQL para Consulta de Órdenes de Trabajo</p><p>SELECT</p><p>O.NumeroOrden,</p><p>O.Descripcion,</p><p>O.FechaIngreso,</p><p>O.FechaEntrega,</p><p>OE.Descripcion AS EstadoOrden,</p><p>C.Cedula,</p><p>(C.Nombre + ' ' + C.Apellido1 + ' ' + C.Apellido2) AS NombreCompleto,</p><p>C.Telefono,</p><p>V.Placa,</p><p>V.Marca,</p><p>V.Modelo</p><p>FROM</p><p>ORDENES O</p><p>JOIN CLIENTES C ON O.CedulaCliente = C.Cedula</p><p>JOIN VEHICULO V ON O.PlacaVehiculo = V.Placa</p><p>JOIN ORDENES_ESTADOS OE ON O.EstadoOrden = OE.IDEstado;</p><p>20</p><p>Imagen de Consulta SQL de Órdenes de Trabajo</p><p>21</p><p>Consulta que indica la cantidad de Órdenes de Trabajo</p><p>En esta consulta, empleamos la tabla “ORDENES” para adquirir detalles sobre las</p><p>órdenes de trabajo y la tabla “ORDENES_ESTADOS” para obtener la descripción</p><p>correspondiente a cada estado de la orden. Mediante el uso de la función de</p><p>agregación COUNT(*), contabilizamos el número de órdenes agrupadas según el</p><p>estado en que se encuentran.</p><p>Script SQL: Conteo y Agrupación de Órdenes de Trabajo por Estado</p><p>El siguiente script muestra el proceso que hemos realizado con lo mencionado:</p><p>SELECT</p><p>OE.Descripcion AS EstadoOrden,</p><p>COUNT(*) AS Cantidad</p><p>FROM</p><p>ORDENES O</p><p>JOIN ORDENES_ESTADOS OE ON O.EstadoOrden = OE.IDEstado</p><p>GROUP BY</p><p>OE.Descripcion</p><p>ORDER BY</p><p>Cantidad DESC;</p><p>La cláusula “GROUP BY” agrupa los resultados de acuerdo con la descripción del</p><p>estado de la orden, mientras que la cláusula “ORDER BY” ordena los resultados de</p><p>forma descendente, mostrando primero las descripciones de estados con mayor</p><p>cantidad de órdenes.</p><p>22</p><p>Imagen de Órdenes de Trabajo Agrupadas por Estado</p><p>23</p><p>Consulta de Costo Total por Orden de Trabajo Completada</p><p>Esta consulta muestra el proceso para determinar el costo a pagar por cada orden</p><p>de trabajo completada en el sistema.</p><p>Ahora explicaremos cuales palabras reservadas de SQL utilizamos en nuestra</p><p>consulta:</p><p>SELECT: Aquí se seleccionan las columnas para mostrar el resultado final:</p><p>• Cédula Cliente (O.CedulaCliente)</p><p>• Número de orden (O.NumeroOrden)</p><p>• Descripción del servicio (S.Descripcion)</p><p>• Costo de la mano de obra (SUM(S.CostoManoObra))</p><p>• Costo de los repuestos (SUM(ISNULL(R.CostoRepuesto, 0)))</p><p>• Total, con impuesto de ventas incluido (ROUND(SUM(S.CostoManoObra +</p><p>ISNULL(R.CostoRepuesto, 0)) * 1.13, 2))</p><p>FROM: Se toman los datos de las siguientes tablas con las siglas que las identifican:</p><p>• Ordenes (O)</p><p>• Servicios_Por_Orden (SPO)</p><p>• Servicios (S)</p><p>• REPUESTOS_POR_SERVICIOS (RPS)</p><p>• Repuestos (R)</p><p>JOIN: Se unen las tablas de esta manera:</p><p>• Ordenes (O) se une con Servicios_Por_Orden (SPO) utilizando el campo</p><p>NumeroOrden.</p><p>• Servicios_Por_Orden (SPO) se une con Servicios (S) utilizando el campo</p><p>IDServicio.</p><p>24</p><p>• Servicios (S) se une con REPUESTOS_POR_SERVICIOS (RPS) utilizando</p><p>el campo IDServicio.</p><p>• REPUESTOS_POR_SERVICIOS (RPS) se une con Repuestos (R) utilizando</p><p>el campo NumeroParte.</p><p>WHERE: Se filtran las ordenes que están completadas, en este caso el numero 3</p><p>identifica las ordenes completadas según la tabla: “ORDENES_ESTADOS”.</p><p>• (EstadoOrden = 3).</p><p>GROUP BY: Se agrupan los resultados por:</p><p>• Cédula Cliente.</p><p>• Número de orden.</p><p>• Descripción del servicio.</p><p>Script de Costo Total</p><p>por Orden de Trabajo Completada</p><p>--Costo Total por Orden de Trabajo Completada.</p><p>SELECT</p><p>O.CedulaCliente AS 'Cédula Cliente', --Columna Cédula cliente.</p><p>O.NumeroOrden AS 'Número de orden', --Columna Numero de orden.</p><p>S.Descripcion AS 'Descripción', --Columna Descripcion.</p><p>SUM(S.CostoManoObra) AS 'Costo mano de obra',</p><p>SUM(ISNULL(R.CostoRepuesto, 0)) AS 'Costo repuestos',</p><p>ROUND(SUM(S.CostoManoObra + ISNULL(R.CostoRepuesto, 0)) * 1,13 , 2) AS</p><p>'Total (con 13% de IVA incluido)'</p><p>FROM</p><p>Ordenes O</p><p>JOIN Servicios_Por_Orden SPO ON O.NumeroOrden = SPO.NumeroOrden</p><p>25</p><p>JOIN Servicios S ON SPO.IDServicio = S.IDServicio</p><p>LEFT JOIN REPUESTOS_POR_SERVICIOS RPS ON S.IDServicio =</p><p>RPS.IDServicio</p><p>LEFT JOIN Repuestos R ON RPS.NumeroParte = R.NumeroParte</p><p>WHERE</p><p>O.EstadoOrden = 3 --El numero tres represemta las ordenes completadas.</p><p>GROUP BY</p><p>O.CedulaCliente,</p><p>O.NumeroOrden,</p><p>S.Descripcion;</p><p>Imagen de Costo Total por Orden de Trabajo Completada</p><p>26</p><p>Consulta SQL: Mostrar Fecha de Entrega y Estado de Órdenes de</p><p>Trabajo</p><p>En esta consulta, he utilizado cuatro palabras para la estructura :</p><p>UPDATE Ordenes:</p><p>• Esta línea nos da a entender que vamos a utilizar datos de la tabla Ordenes</p><p>para ser actualizados.</p><p>SETFechaEntrega = DATEADD(day, 3, FechaEntrega):</p><p>• Acá especifico que la nueva FechaEntrega será igual a la FechaEntrega</p><p>actual más tres días adicionales. Utilizo la función DATEADD(day, 3,</p><p>FechaEntrega) para realizar este cálculo, agregando tres días a la</p><p>FechaEntrega actual de cada orden de trabajo.</p><p>WHERE EstadoOrden IN (1,2):</p><p>Esta cláusula WHERE se utiliza para aplicar el cambio solo a las filas que cumplan</p><p>con ciertas condiciones. En este caso, solo queremos actualizar la FechaEntrega</p><p>de las órdenes de trabajo que tengan un EstadoOrden de 1 o 2, es decir las ordenes</p><p>que solo estén en proceso y sin iniciar serán actualizadas con 3 días adicionales.</p><p>Script de actualización y adición en 3 días</p><p>UPDATE Ordenes</p><p>SET FechaEntrega = DATEADD(day, 3, FechaEntrega)</p><p>WHERE EstadoOrden IN (1, 2);</p><p>27</p><p>Adicionalmente para mostrar lo que se nos solicitó he hecho el siguiente comando:</p><p>Script de tabla Ordenes con Orden de Estado en (1,2)</p><p>--Se actualiza la fecha del 7/3/2024 al 10/3/24, adicionando correctamente los 3</p><p>días.</p><p>--Por otro lado, solo se muestran las ordenes que estan "Sin inciar" y "En proceso,</p><p>las cuales son representadas con 1 y 2.</p><p>SELECT *</p><p>FROM ORDENES</p><p>WHERE EstadoOrden IN (1, 2);</p><p>Por último, mostrare las capturas de pantalla de las ejecuciones hechas</p><p>correctamente y sin errores.</p><p>Imagen de adición de 3 días e imágenes de la presentación en tabla</p><p>28</p><p>Como se observa, la fecha de entrega ha pasado de estar en 07 a 10 y de acuerdo</p><p>con el formato predeterminado de SQL se muestra con el año, mes y día. Acá se</p><p>muestra el estado en 2, como eran muchas filas en 2 quise tomarle captura a la</p><p>principal.</p><p>Lo mismo acá, se muestra correctamente los 3 días adicionales y he tomado captura</p><p>hasta la fila 22 que comenzaba a salir el numero de orden en 1.</p><p>29</p><p>Conclusión</p><p>En conclusión, a lo largo de este proyecto hemos aplicado nuestros conocimientos</p><p>en el lenguaje SQL para abordar diferentes requerimientos en la gestión de una</p><p>base de datos. Utilizando el diseño entidad-relación, el script de creación de tablas</p><p>y la tabla de datos de ejemplo proporcionados, hemos logrado realizar con éxito las</p><p>siguientes tareas:</p><p>En primer lugar, generamos comandos SQL para eliminar todos los datos de las</p><p>tablas y cargar nuevos datos de acuerdo con el diseño entidad-relación y la tabla de</p><p>datos de ejemplo, garantizando así una base de datos actualizada y coherente.</p><p>Posteriormente, creamos consultas SQL que nos permitieron obtener información</p><p>detallada sobre las órdenes de trabajo existentes en la base de datos. Estas</p><p>consultas incluyeron datos como el número de orden, descripción del trabajo, fechas</p><p>relevantes, estado de la orden, información del cliente y detalles del vehículo</p><p>asociado a cada orden.</p><p>Además, desarrollamos una consulta SQL que nos proporcionó un análisis</p><p>cuantitativo de las órdenes de trabajo registradas, agrupadas por su estado actual.</p><p>También implementamos una consulta SQL para calcular el costo total de cada</p><p>orden de trabajo completada, considerando el costo de la mano de obra, el costo de</p><p>los repuestos utilizados y aplicando un impuesto adicional del 13%. Esta consulta</p><p>proporcionó información valiosa sobre los costos asociados a cada orden y facilitó</p><p>la gestión financiera de las mismas.</p><p>Finalmente, desarrollamos un comando SQL que actualizó de manera efectiva la</p><p>fecha estimada de entrega de las órdenes de trabajo, agregando tres días</p><p>adicionales a aquellas órdenes cuyo estado no era ni completada ni cancelada,</p><p>cumpliendo así con los requerimientos establecidos.</p><p>En resumen, este proyecto nos ha permitido poner en práctica nuestros</p><p>conocimientos en SQL de manera efectiva, demostrando nuestra capacidad para</p><p>manejar y gestionar una base de datos de manera eficiente y precisa.</p><p>30</p><p>Referencias</p><p>Cantarero, A. (2022, December 20). Consultas SQL: qué son, qué tipos existen y</p><p>cómo usarlas. Ebac. https://ebac.mx/blog/consultas-sql</p>