12 marzo, 2020

Consultas de Unión Internas (INNER)

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

1
2
3
SELECT *
FROM CLIENTES A LEFT JOIN COMPROBANTES B ON A.COD_CLI = B.COD_CLI
GO


Los registros encerrados en rojo son los clientes que no nunca han consumido, están registrados pero nunca han realizado un consumo.



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

RIGHT JOIN


4. Muestre los ingredientes que han y que no han sido utilizados en una comida.

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:

De la base de datos VENTAS que creamos en el temas de Creación de Tablas

  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. 

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

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

¡Quiero esto!

No hay comentarios, ¡cuéntame algo!

Me gustaría saber tu opinión. ¡Saludos!