¡Hola mis coders! El objetivo de este pequeño post es aprender a generar consultas sencillas de unión interna mediante la cláusula INNER: INNER JOIN, LEFT JOIN y RIGHT JOIN. Recordemos que en el tema pasado aprendimos a generar consultas sencillas a la base de datos con el comando SELECT y aprendimos también a utilizar algunas funciones para el manejo de fechas: DAY(), MONTH(), YEAR(), DATEDIFF() y DATEPART(), si eres nuevo en el blog y aún no lo has visto, dale clic al siguiente enlace: Consultas y manejo de fechas.
CONSULTAS DE UNIÓN INTERNAS (INNER)
Las vinculaciones entre tablas se realizan mediante la cláusula INNER que combina registros de dos tablas siempre que haya concordancia de valores en un campo común. Su sintaxis es de la siguiente forma:
Se puede utilizar una operación INNER JOIN en cualquier cláusula FROM. Esto crea una combinación por equivalencia, conocida también como unión interna.
Las combinaciones aquí son las más comunes; éstas combinan los registros de dos tablas siempre que haya concordancia de valores en un campo común a ambas tablas.
Por ejemplo, se puede utilizar INNER JOIN con las tablas DEPARTAMENTOS y EMPLEADOS para seleccionar todos los empleados de cada departamento. Por el contrario, para seleccionar todos los DEPARTAMENTOS (incluso si alguno de ellos no tiene ningún empleado asignado) se emplea LEFT JOIN o todos los empleados (incluso si alguno no está asignado a ningún departamento), en este caso RIGHT JOIN.
INNER JOIN
1. Clientes que han efectuado consumos.
1 2 3 | SELECT * FROM CLIENTES A INNER JOIN COMPROBANTES B ON A.COD_CLI = B.COD_CLI GO |
El ejemplo siguiente muestra cómo se podría combinar las tablas CLIENTES y COMPROBANTES basándose en el campo “COD_CLI.”:
LEFT JOIN
2. Clientes que han y que no han efectuado consumos.
Los registros encerrados en rojo son los clientes que no nunca han consumido, están registrados pero nunca han realizado un consumo.1 2 3 | SELECT * FROM CLIENTES A LEFT JOIN COMPROBANTES B ON A.COD_CLI = B.COD_CLI GO |
3. Mostramos únicamente los clientes que no han efectuado consumos.
1 2 3 4 5 | SELECT A.COD_CLI, NOM_CLI + ' ' + APE_PAT_CLI 'CLIENTE' , NRO_COMP 'NRO COMPROBANTE' FROM CLIENTES A LEFT JOIN COMPROBANTES B ON A.COD_CLI = B.COD_CLI WHERE NRO_COMP IS NULL GO |
Cuando vamos a incluir en una consulta de varias tablas el campo con el mismo nombre, tenemos que especificar de que tabla es
SELECT A.COD_CLI, NOM_CLI, …
COD_CLI es el campo en común, lo tenemos tanto en CLIENTES como en COMPROBANTES
SELECT A.COD_CLI, NOM_CLI, …
COD_CLI es el campo en común, lo tenemos tanto en CLIENTES como en COMPROBANTES
RIGHT JOIN
4. Muestre los ingredientes que han y que no han sido utilizados en una comida.
Estos ingredientes nunca han sido utilizados en ninguna comida
También, se pueden enlazar varias cláusulas ON en una instrucción JOIN, utilizando la sintaxis siguiente:
1 2 3 4 | SELECT * FROM DETALLECOMIDAS A RIGHT JOIN INGREDIENTES B ON A.COD_ING = B.COD_ING GO |
Estos ingredientes nunca han sido utilizados en ninguna comida
5. Muestre únicamente los ingredientes que no han sido utilizados en una comida.
1 2 3 4 5 | SELECT * FROM DETALLECOMIDAS A RIGHT JOIN INGREDIENTES B ON A.COD_ING = B.COD_ING WHERE COD_COMI IS NULL GO |
También, se pueden enlazar varias cláusulas ON en una instrucción JOIN, utilizando la sintaxis siguiente:
También, se puede anidar instrucciones JOIN utilizando la siguiente sintaxis:
Resumen
- La instrucción Select se utiliza para expresar una consulta SQL. Toda sentencia Select produce una tabla de resultados que contiene una o más columnas y cero o más filas.
- La cláusula From especifica la(s) tabla(s) que contiene(n) los datos a recuperar de una consulta.
- La cláusula Where selecciona las filas a incluir en los resultados aplicando una condición de búsqueda a las filas de la base de datos.
- La cláusula Order by especifica que los resultados de la consulta deben ser ordenados en sentido ascendente o descendente, basándose en los valores de una o más columnas.
ACTIVIDAD
Usando TRANSACT/SQL, realice las siguientes actividades:
- Muestre los 5 primeros productos más caros.
- Muestre todos los datos del 40% de los clientes del tipo persona jurídica registrada, ordenada por su razón social de manera ascendente.
- Muestre la descripción de todos los empleados registrados y la descripción del distrito donde residen.
- Muestre la descripción de todos los empleados que hayan nacido entre los meses de febrero y marzo.
- Muestre los datos de las boletas con sus detalles emitidos entre los años 2019 y 2020.
- Muestre los datos de todos los clientes que tienen correo electrónico, ordenados por el apellido paterno del cliente que residen en los distritos de Miraflores, San Miguel y Jesús Maria.
SOLUCIÓN
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 | /* ACTIVIDADES A DESARROLLAR Usando TRANSACT/SQL, realice las siguientes actividades: De la base de datos VENTAS 1. Muestre los 5 primeros productos más caros. 2. Muestre todos los datos del 40% de los clientes del tipo persona jurídica registrada, ordenada por su razón social de manera ascendente. 3. Muestre la descripción de todos los empleados registrados y la descripción del distrito donde residen. 4. Muestre la descripción de todos los empleados que hayan nacido entre los meses de febrero y marzo. 5. Muestre los datos de las boletas con sus detalles emitidos entre los años 2019 y 2020. 6. Muestre los datos de todos los clientes que tienen correo electrónico, ordenados por el apellido paterno del cliente que residen en los distritos de Miraflores, San Miguel y Jesús Maria. */ -- Crea la base de datos Create Database VENTAS On ( Name = 'VENTAS_DATA' , Filename = 'c:\data\VENTAS_DATA.mdf' , Size = 15MB, Maxsize = 200MB, Filegrowth = 20% ), ( Name = 'VENTAS_SEC_001' , Filename = 'c:\data\VENTA_SEC_001.ndf' , Size = 10MB, Maxsize = 80MB, Filegrowth = 2MB ) Log on ( Name = 'VENTAS_Log' , Filename = 'c:\data\VENTAS_Log.ldf' , Size = 10 MB, Maxsize = 70 MB, Filegrowth = 5 MB ) Go -- Activa la base de datos Use VENTAS Go -- Crea la tabla distrito Create Table DISTRITO ( COD_DIST CHAR (5) NOT NULL PRIMARY KEY , DESC_DIST VARCHAR (20) ) -- Crea la tabla EMPLEADO Create Table EMPLEADO ( COD_EMP CHAR (5) NOT NULL PRIMARY KEY , NOM_EMP VARCHAR (30), APE_PAT_EMP VARCHAR (30), APE_MAT_EMP VARCHAR (30), FEC_NAC_EMP DATETIME, DIR_EMP VARCHAR (100), TEL_EMP CHAR (15), COD_DIST_EMP CHAR (5) REFERENCES DISTRITO, CORREO_EMP VARCHAR (50), FEC_ING_EMP DATETIME, COD_SUPERVISOR CHAR (5) REFERENCES EMPLEADO ) -- Crea la tabla cliente Create Table CLIENTE ( COD_CLI CHAR (5) NOT NULL PRIMARY KEY , DIR_CLI VARCHAR (50), TEL_CLI CHAR (15), COD_DIST_CLI CHAR (5) REFERENCES DISTRITO, CORREO_CLI VARCHAR (30), WEB VARCHAR (50) ) -- Crea la tabla cliente persona jurídica Create Table CLIENTE_PER_JURIDICA ( COD_CLI CHAR (5) REFERENCES CLIENTE, RAZON_SOCIAL_CLI VARCHAR (100), RUC_CLI CHAR (11), CONTACTO_CLI VARCHAR (20), COD_CARGO_CLI CHAR (5), PRIMARY KEY (COD_CLI) ) -- Crea la tabla cliente persona natural Create Table CLIENTE_PER_NATURAL ( COD_CLI CHAR (5) REFERENCES CLIENTE, NOM_CLI VARCHAR (100), APE_PAT_CLI VARCHAR (30), APE_MAT_CLI VARCHAR (30), PRIMARY KEY (COD_CLI) ) -- Crea la tabla tipo de producto Create Table TIPO_PRODUCTO ( COD_TIPO_PROD CHAR (5) NOT NULL PRIMARY KEY , DESC_TIPO_PROD VARCHAR (50) ) -- Crea la tabla producto Create table PRODUCTO ( COD_PROD CHAR (5) NOT NULL PRIMARY KEY , DESC_PROD VARCHAR (50), PRECIO_PROD DECIMAL (9,2), STOCK_ACT_PROD INT , STOCK_MIN_PROD INT , COD_TIPO_PROD CHAR (5) REFERENCES TIPO_PRODUCTO ) -- Crea la tabla boleta Create Table BOLETA ( COD_BOL CHAR (5) NOT NULL PRIMARY KEY , COD_EMP CHAR (5) REFERENCES EMPLEADO, FECHA_BOL DATETIME, COD_CLI CHAR (5) REFERENCES CLIENTE, ESTADO_BOL CHAR (10) ) -- Crea la taba detalle boleta Create table DETALLEBOLETA ( COD_BOL CHAR (5) REFERENCES BOLETA, COD_PROD CHAR (5) REFERENCES PRODUCTO, CANTIDAD INT , PRECIO_VENTA DECIMAL (9,2) PRIMARY KEY (COD_BOL,COD_PROD) ) -- Ejecute el siguiente query INSERT INTO TIPO_PRODUCTO (COD_TIPO_PROD, DESC_TIPO_PROD) VALUES ( 'T0001' , 'Leche y derivados' ); INSERT INTO TIPO_PRODUCTO (COD_TIPO_PROD, DESC_TIPO_PROD) VALUES ( 'T0002' , 'Carnes, pescados y huevos' ); INSERT INTO TIPO_PRODUCTO (COD_TIPO_PROD, DESC_TIPO_PROD) VALUES ( 'T0003' , 'Patatas, legumbres, frutos secos' ); INSERT INTO TIPO_PRODUCTO (COD_TIPO_PROD, DESC_TIPO_PROD) VALUES ( 'T0004' , 'Verduras y Hortalizas' ); INSERT INTO TIPO_PRODUCTO (COD_TIPO_PROD, DESC_TIPO_PROD) VALUES ( 'T0005' , 'Cereales y derivados, azúcar y dulces' ); INSERT INTO TIPO_PRODUCTO (COD_TIPO_PROD, DESC_TIPO_PROD) VALUES ( 'T0006' , 'Grasas, aceite y mantequilla' ); GO INSERT INTO PRODUCTO (COD_PROD, DESC_PROD, PRECIO_PROD, STOCK_ACT_PROD, STOCK_MIN_PROD, COD_TIPO_PROD) VALUES ( 'P0001' , 'Leches fermentadas' , 10, 100, 50, 'T0001' ); INSERT INTO PRODUCTO (COD_PROD, DESC_PROD, PRECIO_PROD, STOCK_ACT_PROD, STOCK_MIN_PROD, COD_TIPO_PROD) VALUES ( 'P0002' , 'Queso' , 8, 100, 50, 'T0001' ); INSERT INTO PRODUCTO (COD_PROD, DESC_PROD, PRECIO_PROD, STOCK_ACT_PROD, STOCK_MIN_PROD, COD_TIPO_PROD) VALUES ( 'P0003' , 'Mantequilla' , 5, 100, 50, 'T0001' ); INSERT INTO PRODUCTO (COD_PROD, DESC_PROD, PRECIO_PROD, STOCK_ACT_PROD, STOCK_MIN_PROD, COD_TIPO_PROD) VALUES ( 'P0004' , 'Yogur' , 5, 100, 50, 'T0001' ); INSERT INTO PRODUCTO (COD_PROD, DESC_PROD, PRECIO_PROD, STOCK_ACT_PROD, STOCK_MIN_PROD, COD_TIPO_PROD) VALUES ( 'P0005' , 'Carne de vaca' , 50, 100, 50, 'T0002' ); INSERT INTO PRODUCTO (COD_PROD, DESC_PROD, PRECIO_PROD, STOCK_ACT_PROD, STOCK_MIN_PROD, COD_TIPO_PROD) VALUES ( 'P0006' , 'Carne de cerdo' , 40, 100, 50, 'T0002' ); INSERT INTO PRODUCTO (COD_PROD, DESC_PROD, PRECIO_PROD, STOCK_ACT_PROD, STOCK_MIN_PROD, COD_TIPO_PROD) VALUES ( 'P0007' , 'Carne de pollo' , 20, 100, 50, 'T0002' ); INSERT INTO PRODUCTO (COD_PROD, DESC_PROD, PRECIO_PROD, STOCK_ACT_PROD, STOCK_MIN_PROD, COD_TIPO_PROD) VALUES ( 'P0008' , 'Pescado blanco' , 15, 100, 50, 'T0002' ); INSERT INTO PRODUCTO (COD_PROD, DESC_PROD, PRECIO_PROD, STOCK_ACT_PROD, STOCK_MIN_PROD, COD_TIPO_PROD) VALUES ( 'P0009' , 'Pescado blanco' , 14, 100, 50, 'T0002' ); GO INSERT INTO DISTRITO (COD_DIST, DESC_DIST) VALUES ( 'D0001' , 'Miraflores' ); INSERT INTO DISTRITO (COD_DIST, DESC_DIST) VALUES ( 'D0002' , 'San Miguel' ); INSERT INTO DISTRITO (COD_DIST, DESC_DIST) VALUES ( 'D0003' , 'San Luis' ); INSERT INTO DISTRITO (COD_DIST, DESC_DIST) VALUES ( 'D0004' , 'Surco' ); INSERT INTO DISTRITO (COD_DIST, DESC_DIST) VALUES ( 'D0005' , 'La Victoria' ); INSERT INTO DISTRITO (COD_DIST, DESC_DIST) VALUES ( 'D0006' , 'El Agustino' ); INSERT INTO DISTRITO (COD_DIST, DESC_DIST) VALUES ( 'D0007' , 'Comas' ); GO INSERT INTO EMPLEADO (COD_EMP, NOM_EMP, APE_PAT_EMP, APE_MAT_EMP, FEC_NAC_EMP, DIR_EMP, TEL_EMP, COD_DIST_EMP, CORREO_EMP, FEC_ING_EMP, COD_SUPERVISOR) VALUES ( 'E0001' , 'Alexandre' , 'Chavez' , 'Costa' , '20/01/1992' , 'Av. los amuletos 145' , '3781544' , 'D0001' , 'achavez@gmail.com' , '29/01/2020' , 'E0001' ); INSERT INTO EMPLEADO (COD_EMP, NOM_EMP, APE_PAT_EMP, APE_MAT_EMP, FEC_NAC_EMP, DIR_EMP, TEL_EMP, COD_DIST_EMP, CORREO_EMP, FEC_ING_EMP, COD_SUPERVISOR) VALUES ( 'E0002' , 'David' , 'Gomez' , 'Costa' , '20/05/1990' , 'Av. los hidalgos 145' , '3780544' , 'D0002' , 'davidgo@gmail.com' , '01/02/2019' , 'E0001' ); INSERT INTO EMPLEADO (COD_EMP, NOM_EMP, APE_PAT_EMP, APE_MAT_EMP, FEC_NAC_EMP, DIR_EMP, TEL_EMP, COD_DIST_EMP, CORREO_EMP, FEC_ING_EMP, COD_SUPERVISOR) VALUES ( 'E0003' , 'Julio' , 'Sanches' , 'Morales' , '30/01/1991' , 'Av. los risos 146' , '9681544' , 'D0003' , 'juliosa@gmail.com' , '20/01/2020' , 'E0001' ); INSERT INTO EMPLEADO (COD_EMP, NOM_EMP, APE_PAT_EMP, APE_MAT_EMP, FEC_NAC_EMP, DIR_EMP, TEL_EMP, COD_DIST_EMP, CORREO_EMP, FEC_ING_EMP, COD_SUPERVISOR) VALUES ( 'E0004' , 'Mayara' , 'Farfan' , 'Gallese' , '15/03/1995' , 'Av. las flores 148' , '3781534' , 'D0004' , 'mayfar@gmail.com' , '15/03/2019' , 'E0001' ); INSERT INTO EMPLEADO (COD_EMP, NOM_EMP, APE_PAT_EMP, APE_MAT_EMP, FEC_NAC_EMP, DIR_EMP, TEL_EMP, COD_DIST_EMP, CORREO_EMP, FEC_ING_EMP, COD_SUPERVISOR) VALUES ( 'E0005' , 'Raissa' , 'Alves' , 'Dias' , '10/06/1998' , 'Av. las carmelitas 148' , '3770534' , 'D0004' , 'raissa@gmail.com' , '15/03/2018' , 'E0001' ); GO INSERT INTO CLIENTE (COD_CLI, DIR_CLI, TEL_CLI, COD_DIST_CLI, CORREO_CLI, WEB) VALUES ( 'C0001' , 'Av. los risos 3993' , '2568566' , 'D0001' , 'josedelacruz@gmail.com' , null ); INSERT INTO CLIENTE (COD_CLI, DIR_CLI, TEL_CLI, COD_DIST_CLI, CORREO_CLI, WEB) VALUES ( 'C0002' , 'Av. las flores 313' , '2365877' , 'D0001' , null , null ); INSERT INTO CLIENTE (COD_CLI, DIR_CLI, TEL_CLI, COD_DIST_CLI, CORREO_CLI, WEB) VALUES ( 'C0003' , 'Av. los girasoles 390' , '3214555' , 'D0002' , null , null ); INSERT INTO CLIENTE (COD_CLI, DIR_CLI, TEL_CLI, COD_DIST_CLI, CORREO_CLI, WEB) VALUES ( 'C0004' , 'Av. los pardos 159' , '3214599' , 'D0003' , 'gabomiranda@gmail.com' , null ); INSERT INTO CLIENTE (COD_CLI, DIR_CLI, TEL_CLI, COD_DIST_CLI, CORREO_CLI, WEB) VALUES ( 'C0005' , 'Av. los cuadros 123' , '993626112' , 'D0004' , 'brendave@gmail.com' , null ); INSERT INTO CLIENTE (COD_CLI, DIR_CLI, TEL_CLI, COD_DIST_CLI, CORREO_CLI, WEB) VALUES ( 'C0006' , 'Av. las petuñas 3993' , '3245766' , 'D0001' , 'mercia@gmail.com' , 'www.labodegademercia.com' ); INSERT INTO CLIENTE (COD_CLI, DIR_CLI, TEL_CLI, COD_DIST_CLI, CORREO_CLI, WEB) VALUES ( 'C0007' , 'Av. las risas 313' , '993626145' , 'D0001' , 'osvaldoarcgmail.com' , 'www.latienditadekarla.com' ); INSERT INTO CLIENTE (COD_CLI, DIR_CLI, TEL_CLI, COD_DIST_CLI, CORREO_CLI, WEB) VALUES ( 'C0008' , 'Av. los pantanos 390' , '3214566' , 'D0001' , 'fechasa@gmail.com' , null ); INSERT INTO CLIENTE (COD_CLI, DIR_CLI, TEL_CLI, COD_DIST_CLI, CORREO_CLI, WEB) VALUES ( 'C0009' , 'Av. los condes 159' , '993625145' , 'D0002' , 'elbrayan@gmail.com' , 'www.eldiadito.com' ); INSERT INTO CLIENTE (COD_CLI, DIR_CLI, TEL_CLI, COD_DIST_CLI, CORREO_CLI, WEB) VALUES ( 'C0010' , 'Av. los hidalgos 124' , '3217899' , 'D0004' , 'juanjo@gmail.com' , 'www.laesquina.com' ); GO INSERT INTO CLIENTE_PER_NATURAL(COD_CLI, NOM_CLI, APE_PAT_CLI, APE_MAT_CLI) VALUES ( 'C0001' , 'José Luis' , 'De la Cruz' , 'Villar' ); INSERT INTO CLIENTE_PER_NATURAL(COD_CLI, NOM_CLI, APE_PAT_CLI, APE_MAT_CLI) VALUES ( 'C0002' , 'Maryllya' , 'Fonseca' , 'Alcarraz' ); INSERT INTO CLIENTE_PER_NATURAL(COD_CLI, NOM_CLI, APE_PAT_CLI, APE_MAT_CLI) VALUES ( 'C0003' , 'Tatiana' , 'Olivar' , 'Mendoza' ); INSERT INTO CLIENTE_PER_NATURAL(COD_CLI, NOM_CLI, APE_PAT_CLI, APE_MAT_CLI) VALUES ( 'C0004' , 'Gabriel' , 'Miranda' , 'Azul' ); INSERT INTO CLIENTE_PER_NATURAL(COD_CLI, NOM_CLI, APE_PAT_CLI, APE_MAT_CLI) VALUES ( 'C0005' , 'Brenda' , 'Vega' , 'Carpio' ); GO INSERT INTO CLIENTE_PER_JURIDICA(COD_CLI, RAZON_SOCIAL_CLI, RUC_CLI, CONTACTO_CLI, COD_CARGO_CLI) VALUES ( 'C0006' , 'La bodega de Mércia' , '12345678912' , null , null ); INSERT INTO CLIENTE_PER_JURIDICA(COD_CLI, RAZON_SOCIAL_CLI, RUC_CLI, CONTACTO_CLI, COD_CARGO_CLI) VALUES ( 'C0007' , 'La tiendita de Karla' , '12345678913' , null , null ); INSERT INTO CLIENTE_PER_JURIDICA(COD_CLI, RAZON_SOCIAL_CLI, RUC_CLI, CONTACTO_CLI, COD_CARGO_CLI) VALUES ( 'C0008' , 'La moradita' , '12345678914' , null , null ); INSERT INTO CLIENTE_PER_JURIDICA(COD_CLI, RAZON_SOCIAL_CLI, RUC_CLI, CONTACTO_CLI, COD_CARGO_CLI) VALUES ( 'C0009' , 'El fiadito' , '12345678915' , null , null ); INSERT INTO CLIENTE_PER_JURIDICA(COD_CLI, RAZON_SOCIAL_CLI, RUC_CLI, CONTACTO_CLI, COD_CARGO_CLI) VALUES ( 'C0010' , 'La esquina' , '12345678916' , null , null ); GO INSERT INTO BOLETA (COD_BOL, COD_EMP, FECHA_BOL, COD_CLI, ESTADO_BOL) VALUES ( 'B0001' , 'E0002' , '01/01/2020' , 'C0001' , 'Activo' ); INSERT INTO BOLETA (COD_BOL, COD_EMP, FECHA_BOL, COD_CLI, ESTADO_BOL) VALUES ( 'B0002' , 'E0002' , '01/01/2020' , 'C0002' , 'Activo' ); INSERT INTO BOLETA (COD_BOL, COD_EMP, FECHA_BOL, COD_CLI, ESTADO_BOL) VALUES ( 'B0003' , 'E0002' , '02/01/2020' , 'C0003' , 'Activo' ); INSERT INTO BOLETA (COD_BOL, COD_EMP, FECHA_BOL, COD_CLI, ESTADO_BOL) VALUES ( 'B0004' , 'E0004' , '01/01/2020' , 'C0004' , 'Activo' ); INSERT INTO BOLETA (COD_BOL, COD_EMP, FECHA_BOL, COD_CLI, ESTADO_BOL) VALUES ( 'B0005' , 'E0004' , '01/01/2020' , 'C0005' , 'Activo' ); INSERT INTO BOLETA (COD_BOL, COD_EMP, FECHA_BOL, COD_CLI, ESTADO_BOL) VALUES ( 'B0006' , 'E0003' , '01/01/2020' , 'C0006' , 'Activo' ); INSERT INTO BOLETA (COD_BOL, COD_EMP, FECHA_BOL, COD_CLI, ESTADO_BOL) VALUES ( 'B0007' , 'E0003' , '01/01/2020' , 'C0007' , 'Activo' ); INSERT INTO BOLETA (COD_BOL, COD_EMP, FECHA_BOL, COD_CLI, ESTADO_BOL) VALUES ( 'B0008' , 'E0003' , '02/01/2020' , 'C0008' , 'Activo' ); INSERT INTO BOLETA (COD_BOL, COD_EMP, FECHA_BOL, COD_CLI, ESTADO_BOL) VALUES ( 'B0009' , 'E0003' , '02/01/2020' , 'C0009' , 'Activo' ); GO INSERT INTO DETALLEBOLETA (COD_BOL, COD_PROD, CANTIDAD, PRECIO_VENTA) VALUES ( 'B0001' , 'P0001' , 2, 20); INSERT INTO DETALLEBOLETA (COD_BOL, COD_PROD, CANTIDAD, PRECIO_VENTA) VALUES ( 'B0001' , 'P0002' , 2, 16); INSERT INTO DETALLEBOLETA (COD_BOL, COD_PROD, CANTIDAD, PRECIO_VENTA) VALUES ( 'B0001' , 'P0003' , 1, 5); INSERT INTO DETALLEBOLETA (COD_BOL, COD_PROD, CANTIDAD, PRECIO_VENTA) VALUES ( 'B0002' , 'P0002' , 3, 24); INSERT INTO DETALLEBOLETA (COD_BOL, COD_PROD, CANTIDAD, PRECIO_VENTA) VALUES ( 'B0003' , 'P0004' , 4, 20); INSERT INTO DETALLEBOLETA (COD_BOL, COD_PROD, CANTIDAD, PRECIO_VENTA) VALUES ( 'B0004' , 'P0005' , 1, 50); INSERT INTO DETALLEBOLETA (COD_BOL, COD_PROD, CANTIDAD, PRECIO_VENTA) VALUES ( 'B0004' , 'P0001' , 1, 10); INSERT INTO DETALLEBOLETA (COD_BOL, COD_PROD, CANTIDAD, PRECIO_VENTA) VALUES ( 'B0004' , 'P0003' , 2, 10); INSERT INTO DETALLEBOLETA (COD_BOL, COD_PROD, CANTIDAD, PRECIO_VENTA) VALUES ( 'B0005' , 'P0001' , 2, 20); INSERT INTO DETALLEBOLETA (COD_BOL, COD_PROD, CANTIDAD, PRECIO_VENTA) VALUES ( 'B0005' , 'P0002' , 4, 32); INSERT INTO DETALLEBOLETA (COD_BOL, COD_PROD, CANTIDAD, PRECIO_VENTA) VALUES ( 'B0006' , 'P0001' , 2, 20); INSERT INTO DETALLEBOLETA (COD_BOL, COD_PROD, CANTIDAD, PRECIO_VENTA) VALUES ( 'B0007' , 'P0001' , 2, 20); INSERT INTO DETALLEBOLETA (COD_BOL, COD_PROD, CANTIDAD, PRECIO_VENTA) VALUES ( 'B0008' , 'P0001' , 2, 20); INSERT INTO DETALLEBOLETA (COD_BOL, COD_PROD, CANTIDAD, PRECIO_VENTA) VALUES ( 'B0009' , 'P0001' , 2, 20); INSERT INTO DETALLEBOLETA (COD_BOL, COD_PROD, CANTIDAD, PRECIO_VENTA) VALUES ( 'B0009' , 'P0007' , 3, 60); INSERT INTO DETALLEBOLETA (COD_BOL, COD_PROD, CANTIDAD, PRECIO_VENTA) VALUES ( 'B0009' , 'P0009' , 2, 28); GO /* 1. Muestre los 5 primeros productos más caros. */ SELECT TOP 5 * FROM PRODUCTO ORDER BY PRECIO_PROD DESC GO /* 2. Muestre todos los datos del 40% de los clientes del tipo persona jurídica registrada, ordenada por su razón social de manera ascendente. */ SELECT TOP 40 PERCENT * FROM CLIENTE A INNER JOIN CLIENTE_PER_JURIDICA B ON A.COD_CLI = B.COD_CLI ORDER BY B.RAZON_SOCIAL_CLI GO /* 3. Muestre la descripción de todos los empleados registrados y la descripción del distrito donde residen. */ SELECT A.*, B.DESC_DIST FROM EMPLEADO A INNER JOIN DISTRITO B ON A.COD_DIST_EMP = B.COD_DIST GO /* 4. Muestre la descripción de todos los enpleados que hayan nacido entre los meses de febrero y marzo.*/ SELECT * FROM EMPLEADO WHERE DATEPART(MM, FEC_NAC_EMP) IN (2, 3) /* 5. Muestre los datos de las boletas con sus detalles emitidos entre los años 2019 y 2020.*/ SELECT * FROM BOLETA A INNER JOIN DETALLEBOLETA B ON A.COD_BOL = B.COD_BOL WHERE YEAR (A.FECHA_BOL) BETWEEN 2019 AND 2020 GO /* 6. Muestre los datos de todos los clientes que tienen correo electrónico, ordenados por el apellido paterno del cliente que residen en los distritos de Miraflores, San Miguel y Jesús Maria. */ SELECT * FROM CLIENTE A JOIN CLIENTE_PER_NATURAL B ON A.COD_CLI = B.COD_CLI JOIN DISTRITO C ON A.COD_DIST_CLI = C.COD_DIST WHERE A.CORREO_CLI IS NOT NULL AND C.DESC_DIST IN ( 'Miraflores' , 'San Miguel' , 'Jesús Maria' ) ORDER BY B.APE_PAT_CLI GO |
SI NO TIENES EL SQL SERVER INSTALADO, HAZ CLIC EN EL SIGUIENTE ENLACE Y EJECUTA EL QUERY.
RexTexter: https://rextester.com/OTCA73725
RexTexter: https://rextester.com/OTCA73725
¡Acabas de ver el tema Consultas de Unión Internas del curso de Base de Datos en SQL Server! ¡Fácil verdad!
Ir al índice.
Asimismo, si deseas saber más acerca de estos temas, recuerda que puedes comprar la guía completa con todos los temas, ejercicios, evaluaciones resueltas, proyectos, aplicaciones, banco de datos y más; para ello, tienes que ingresar al siguiente enlace. Y si eres seguidor de la comunidad Aprendec puedes acceder a un descuento del -%50.
Asimismo, si deseas saber más acerca de estos temas, recuerda que puedes comprar la guía completa con todos los temas, ejercicios, evaluaciones resueltas, proyectos, aplicaciones, banco de datos y más; para ello, tienes que ingresar al siguiente enlace. Y si eres seguidor de la comunidad Aprendec puedes acceder a un descuento del -%50.
![]() |
¡Quiero esto! |
No hay comentarios, ¡cuéntame algo!
Me gustaría saber tu opinión. ¡Saludos!