14 febrero, 2020

Consultas y manejo de fechas

¡Buen días, mis coders! El objetivo de este pequeño post es aprender a generar consultas sencillas a la base de datos con el comando SELECT y emplear funciones para el manejo de fechas: DAY(), MONTH(), YEAR(), DATEDIFF() y DATEPART().

Lo primero que vamos a hacer es crear la siguiente base de datos. Nosotros ya aprendimos a crear bases de datos, aprendimos a crear tablas y aprendimos a llenar datos en las tablas usando el DML INSERT que lo vimos en el tema de SENTENCIAS DML.


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
/********************************************************/
/* Crear la base de datos KYO con las siguientes tablas */
/********************************************************/
 
CREATE DATABASE KYO
GO
 
USE KYO
GO
 
CREATE TABLE CLIENTES
(
COD_CLI  CHAR(5) NOT NULL PRIMARY KEY,
NOM_CLI VARCHAR(50),
APE_PAT_CLI VARCHAR(50),
FEC_NAC_CLI DATETIME,
DNI_CLI CHAR(8),
DIR_CLI VARCHAR(50),
SEX_CLI CHAR (1),
GAS_MEN_CLI DECIMAL (9,2)
)
 
CREATE TABLE COMIDAS
(
COD_COMI CHAR(5) NOT NULL PRIMARY KEY,
DES_COMI VARCHAR(20),
PRE_COMI DECIMAL(9,2)
)
 
CREATE TABLE INGREDIENTES
(
COD_ING CHAR(5)NOT NULL PRIMARY KEY,
DES_ING VARCHAR(20),
TIP_ING VARCHAR(30),
FEC_INGRE_ING DATETIME,
RAZ_PRO_ING VARCHAR(20),
RUC_PRO_ING CHAR(11)
)
 
CREATE TABLE COMPROBANTES
(
NRO_COMP INT IDENTITY (100,1) NOT NULL PRIMARY KEY,
FEC_COMP DATETIME,
COD_VEND CHAR (5),
IGV_COMP DECIMAL(9,2),
MON_TOT_COMP DECIMAL(9,2),
COD_CLI  CHAR(5) REFERENCES CLIENTES
)
 
CREATE TABLE DETALLECOMPROBANTES
(
NRO_COMP INT NOT NULL REFERENCES COMPROBANTES,
COD_COMI CHAR(5) NOT NULL REFERENCES COMIDAS,
CAN_VEN INT,
MON_PAR DECIMAL(9,2), PRIMARY KEY(NRO_COMP,COD_COMI)
)
 
CREATE TABLE DETALLECOMIDAS
(
COD_COMI CHAR(5) NOT NULL REFERENCES COMIDAS,
COD_ING CHAR(5)NOT NULL REFERENCES INGREDIENTES,
CANT_ING INT  PRIMARY KEY(COD_COMI,COD_ING)
)
GO
 
/*********************/
/* Insertar registro */
/*********************/
 
-- TABLA CLIENTES
INSERT INTO CLIENTES (COD_CLI,NOM_CLI ,APE_PAT_CLI ,FEC_NAC_CLI ,DNI_CLI ,DIR_CLI,SEX_CLI,GAS_MEN_CLI)
VALUES('CI001','MERCEDES','PEREZ','01/01/1979','45235678','JR.LOS PINOS 124 SAN ISIDRO','F',20.2)
INSERT INTO CLIENTES (COD_CLI,NOM_CLI ,APE_PAT_CLI ,FEC_NAC_CLI ,DNI_CLI ,DIR_CLI,SEX_CLI,GAS_MEN_CLI)
VALUES('CI002','JOSE','BUSTAMANTE','10/12/1970','22536045','AV.LA  MARINA 123 SAN MIGUEL','M',115.3)
INSERT INTO CLIENTES (COD_CLI,NOM_CLI ,APE_PAT_CLI ,FEC_NAC_CLI ,DNI_CLI ,DIR_CLI,SEX_CLI,GAS_MEN_CLI)
VALUES('CI003','ROBERTO','MUÑOZ','01/11/1972','00245876','CALLE PLUTON 155 SANTIAGO DE SURCO','M',125.47)
INSERT INTO CLIENTES (COD_CLI,NOM_CLI ,APE_PAT_CLI ,FEC_NAC_CLI ,DNI_CLI ,DIR_CLI,SEX_CLI,GAS_MEN_CLI)
VALUES('CI004','MANUELA','RODRIGUEZ','11/11/1965','45824586','JR.LOS PINOS 124 SAN ISIDRO','F',85.78)
INSERT INTO CLIENTES (COD_CLI,NOM_CLI ,APE_PAT_CLI ,FEC_NAC_CLI ,DNI_CLI ,DIR_CLI,SEX_CLI,GAS_MEN_CLI)
VALUES('CI005','JUAN','RAMON','12/06/1970','00124578','JR.LOS LOROS 124 LOS OLIVOS','M',58.5)
INSERT INTO CLIENTES (COD_CLI,NOM_CLI ,APE_PAT_CLI ,FEC_NAC_CLI ,DNI_CLI ,DIR_CLI,SEX_CLI,GAS_MEN_CLI)
VALUES('CI006','LUCIO','PEREZ','01/01/1989','43335678','JR. PINAR 124 ATE VITARTE','M',120.2)
INSERT INTO CLIENTES (COD_CLI,NOM_CLI ,APE_PAT_CLI ,FEC_NAC_CLI ,DNI_CLI ,DIR_CLI,SEX_CLI,GAS_MEN_CLI)
VALUES('CI007','CARLOS','BUSTIOS','10/12/1970','34536045','AV.LA  MARINA 134 SAN MIGUEL','M',215.3)
INSERT INTO CLIENTES (COD_CLI,NOM_CLI ,APE_PAT_CLI ,FEC_NAC_CLI ,DNI_CLI ,DIR_CLI,SEX_CLI,GAS_MEN_CLI)
VALUES('CI008','ROSA','CADIZ','11/11/1972','98745876','CALLE SATURNO 1855 SANTIAGO DE SURCO','M',33.25)
INSERT INTO CLIENTES (COD_CLI,NOM_CLI ,APE_PAT_CLI ,FEC_NAC_CLI ,DNI_CLI ,DIR_CLI,SEX_CLI,GAS_MEN_CLI)
VALUES('CI009','ILIANA','LOPEZ-RODRIGUEZ','1/1/1966','45834586','JR.LOS PUYOLES 678 SAN ISIDRO','F',85.78)
INSERT INTO CLIENTES (COD_CLI,NOM_CLI ,APE_PAT_CLI ,FEC_NAC_CLI ,DNI_CLI ,DIR_CLI,SEX_CLI,GAS_MEN_CLI)
VALUES('CI010','ULISES','PONTE','3/6/1976','52314578','JR.LOS MOLLOS 723 LOS OLIVOS','M',358.5)
GO
-- TABLA COMIDAS
INSERT INTO COMIDAS(COD_COMI,DES_COMI,PRE_COMI)VALUES('CO001','ARROZ CON POLLO',8.5)
INSERT INTO COMIDAS(COD_COMI,DES_COMI,PRE_COMI)VALUES('CO002','CEVICHE',12.0)
INSERT INTO COMIDAS(COD_COMI,DES_COMI,PRE_COMI)VALUES('CO003','MONDONGUITO ITALIANO',9.0)
INSERT INTO COMIDAS(COD_COMI,DES_COMI,PRE_COMI)VALUES('CO004','SECO DE CABRITO',10.5)
INSERT INTO COMIDAS(COD_COMI,DES_COMI,PRE_COMI)VALUES('CO005','SUDADO DE PESCADO',12.0)
GO
--TABLA INGREDIENTES
INSERT INTO INGREDIENTES(COD_ING ,DES_ING ,TIP_ING ,FEC_INGRE_ING,RAZ_PRO_ING,RUC_PRO_ING)
VALUES('IN001','ARROZ','CEREALES','11/06/2004','EL MOLINO','45678921456')
INSERT INTO INGREDIENTES(COD_ING ,DES_ING ,TIP_ING ,FEC_INGRE_ING,RAZ_PRO_ING,RUC_PRO_ING)
VALUES('IN002','SAL','SECOS','07/10/2004','METRO','22356458721')
INSERT INTO INGREDIENTES(COD_ING ,DES_ING ,TIP_ING ,FEC_INGRE_ING,RAZ_PRO_ING,RUC_PRO_ING)
VALUES('IN003','CEBOLLA','VERDURAS','07/12/2004','METRO','12345682')
INSERT INTO INGREDIENTES(COD_ING ,DES_ING ,TIP_ING ,FEC_INGRE_ING,RAZ_PRO_ING,RUC_PRO_ING)
VALUES('IN004','AZUCAR','SECOS','01/08/2004','METRO','12345682')
INSERT INTO INGREDIENTES(COD_ING ,DES_ING ,TIP_ING ,FEC_INGRE_ING,RAZ_PRO_ING,RUC_PRO_ING)
VALUES('IN005','POLLO','CARNES','07/12/2004','SAN FERNANDO','03254678952')
GO
--TABLA COMPROBANTES
INSERT INTO COMPROBANTES(FEC_COMP ,COD_VEND ,IGV_COMP ,MON_TOT_COMP ,COD_CLI)
VALUES('11/06/2004','C0235',11.4608,60.3200,'CI001')
INSERT INTO COMPROBANTES(FEC_COMP ,COD_VEND ,IGV_COMP ,MON_TOT_COMP ,COD_CLI)
VALUES('01/07/2004','C0456',28.5950,150.5000,'CI001')
INSERT INTO COMPROBANTES(FEC_COMP ,COD_VEND ,IGV_COMP ,MON_TOT_COMP ,COD_CLI)
VALUES('11/12/2004','C1254',44.7564,235.5600,'CI002')
INSERT INTO COMPROBANTES(FEC_COMP ,COD_VEND ,IGV_COMP ,MON_TOT_COMP ,COD_CLI)
VALUES('06/10/2004','C3580',6.4600,34.0000,'CI002')
INSERT INTO COMPROBANTES(FEC_COMP ,COD_VEND ,IGV_COMP ,MON_TOT_COMP ,COD_CLI)
VALUES('07/12/2004','C0357',18.9050,99.5000,'CI003')
INSERT INTO COMPROBANTES(FEC_COMP ,COD_VEND ,IGV_COMP ,MON_TOT_COMP ,COD_CLI)
VALUES('1/06/2004','C1254',44.7564,235.5600,'CI006')
INSERT INTO COMPROBANTES(FEC_COMP ,COD_VEND ,IGV_COMP ,MON_TOT_COMP ,COD_CLI)
VALUES('1/03/2004','C3580',6.4600,34.0000,'CI006')
INSERT INTO COMPROBANTES(FEC_COMP ,COD_VEND ,IGV_COMP ,MON_TOT_COMP ,COD_CLI)
VALUES('07/11/2004','C0357',18.9050,99.5000,'CI008')
GO
--TABLA DETALLE COMPROBANTES
INSERT INTO DETALLECOMPROBANTES(NRO_COMP,COD_COMI,CAN_VEN,MON_PAR)
VALUES('100','CO001',4,34)
INSERT INTO DETALLECOMPROBANTES(NRO_COMP,COD_COMI,CAN_VEN,MON_PAR)
VALUES('100','CO002',3,36)
INSERT INTO DETALLECOMPROBANTES(NRO_COMP,COD_COMI,CAN_VEN,MON_PAR)
VALUES('101','CO003',1,9)
INSERT INTO DETALLECOMPROBANTES(NRO_COMP,COD_COMI,CAN_VEN,MON_PAR)
VALUES('101','CO004',1,12)
INSERT INTO DETALLECOMPROBANTES(NRO_COMP,COD_COMI,CAN_VEN,MON_PAR)
VALUES('102','CO005',54,60)
GO
--TABLA DETALLE COMIDAS
INSERT INTO DETALLECOMIDAS(COD_COMI ,COD_ING,CANT_ING)VALUES('CO002','IN001',5)
INSERT INTO DETALLECOMIDAS(COD_COMI ,COD_ING,CANT_ING)VALUES('CO002','IN003',5)
INSERT INTO DETALLECOMIDAS(COD_COMI ,COD_ING,CANT_ING)VALUES('CO003','IN001',5)
INSERT INTO DETALLECOMIDAS(COD_COMI ,COD_ING,CANT_ING)VALUES('CO003','IN002',1)
INSERT INTO DETALLECOMIDAS(COD_COMI ,COD_ING,CANT_ING)VALUES('CO003','IN003',5)
GO
SI NO TIENES EL SQL SERVER INSTALADO, PUEDES EJECUTAR EL QUERY  INGRESANDO AL SIGUIENTE ENLACE PARA QUE PUEDAS PRACTICAR SIN LA NECESIDAD DE TENER INSTALADO ALGUNA VERSIÓN DEL SQL SERVER EN TU PC.

RexTester: https://rextester.com/VGIBR13046

CONSULTAS DE SELECCIÓN (SELECT)

Las consultas de selección se utilizan para indicar al motor de datos que devuelva información de las bases de datos. Esta información es devuelta en forma de conjunto de registros que se pueden almacenar en un objeto recordset. Este conjunto de registros es modificable.

La sintaxis básica de una consulta de selección es la siguiente:


1. Esta consulta devuelve un recordset con todos los campos de la tabla “CLIENTES”.


2. Esta consulta devuelve un recordset con los campos COD_CLI y NOM_CLI de la tabla “CLIENTES”.



La sintaxis de un SELECT se puede volver muy compleja y extensa, pero conforme avancemos, veremos mas a detalle está instrucción y como lo podemos mesclar con otros comandos, clausulas, predicados, operadores, funciones, etc.

ORDENAR LOS REGISTROS

Adicionalmente se puede especificar el orden en que se desean recuperar los registros de las tablas mediante la cláusula ORDER BY (Lista de Campos). En donde Lista de campos representa los campos a ordenar.

3. Esta consulta devuelve todos los campos de la tabla “CLIENTES” ordenados por el campo apellido paterno del cliente.



4. Esta consulta devuelve todos los campos de la tabla “CLIENTES” ordenados por el campo apellido paterno del cliente de forma descendente.


5. Se pueden ordenar los registros por más de un campo, como por ejemplo:



CONSULTAS CON PREDICADOS


El predicado se incluye entre la cláusula y el primer nombre del campo a recuperar, los posibles predicados son los siguientes:


ALL

Si no se incluye ninguno de los predicados se asume ALL. El motor de base de datos selecciona todos los registros que cumplen las condiciones de la instrucción SQL. No es conveniente abusar de este predicado ya que obligamos al motor de la base de datos a analizar la estructura de la tabla para averiguar los campos que contiene. Por ello, es mucho más rápido indicar el listado de campos deseados.


TOP

Devuelve un cierto número de registros que entran al principio o al final de un rango especificado por una cláusula ORDER BY. Supongamos que queremos recuperar los nombres de los cinco (05) primeros recordset de la tabla clientes ordenados por apellido paterno en forma descendente:


TOP PERCENT

Se puede utilizar la palabra reservada PERCENT para devolver un cierto porcentaje de registros que están al principio o al final de un rango especificado por la cláusula ORDER BY. Supongamos que en lugar de los cinco (05) primeros clientes, deseamos el veinte por ciento (20%) por ciento de la tabla de clientes:


DISTINCT

Omite los registros que contienen datos duplicados en los campos seleccionados. Para que los valores de cada campo listado en la instrucción SELECT se incluyan en la consulta deben ser únicos.
Por ejemplo, varios clientes listados en la tabla clientes pueden tener el mismo apellido paterno. Si dos registros contienen PEREZ en el campo apellido paterno, la siguiente instrucción SQL devuelve un único registro:


ALIAS

En determinadas circunstancias es necesario asignar un nombre a alguna columna determinada de un conjunto devuelto, otras veces por simple capricho o por otras circunstancias. Para resolver todas ellas tenemos la palabra reservada AS que se encarga de asignar el nombre que deseamos a la columna deseada. 

Tomado como referencia el ejemplo anterior podemos hacer que la columna devuelta por la consulta, en lugar de llamarse APE_PAT_CLI (igual que el campo devuelto) se llame APELLIDO_DEL_CLIENTE. En este caso, procederíamos de la siguiente forma:


FUNCIONES DE FECHA

Las funciones de fecha y hora permiten el manejo de datos o campos de tipo fecha y hora. Es sumamente importante el manejo correcto de las fechas, esto es la base para los sistema de toma de decisiones.


Ejemplos


Por último vamos a hablar un poco sobre las consultas de unión internas.

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.

PRODUCTO CARTESIANO E INNER JOIN

1. Muestre los datos de los clientes que han efectuado compras en el año 2004.


2. Muestre los datos de los clientes que han efectuado una compra en el año 2004 y que la comida consumida comience con la letra C ó M. ordénelo por el apellido paterno del cliente y ante coincidencias por el nombre de ese cliente.


3. Muestre los datos de las comidas en cuya preparación se ha utilizado arroz o frejoles


QUERY COMPLETO

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
/********************************************************/
/* Crear la base de datos KYO con las siguientes tablas */
/********************************************************/
 
CREATE DATABASE KYO
GO
 
USE KYO
GO
 
CREATE TABLE CLIENTES
(
 COD_CLI  CHAR(5) NOT NULL PRIMARY KEY,
 NOM_CLI VARCHAR(50),
 APE_PAT_CLI VARCHAR(50),
 FEC_NAC_CLI DATETIME,
 DNI_CLI CHAR(8),
 DIR_CLI VARCHAR(50),
 SEX_CLI CHAR (1),
 GAS_MEN_CLI DECIMAL (9,2)
)
 
CREATE TABLE COMIDAS
(
 COD_COMI CHAR(5) NOT NULL PRIMARY KEY,
 DES_COMI VARCHAR(20),
 PRE_COMI DECIMAL(9,2)
)
 
CREATE TABLE INGREDIENTES
(
 COD_ING CHAR(5)NOT NULL PRIMARY KEY,
 DES_ING VARCHAR(20),
 TIP_ING VARCHAR(30),
 FEC_INGRE_ING DATETIME,
 RAZ_PRO_ING VARCHAR(20),
 RUC_PRO_ING CHAR(11)
)
 
CREATE TABLE COMPROBANTES
(
 NRO_COMP INT IDENTITY (100,1) NOT NULL PRIMARY KEY,
 FEC_COMP DATETIME,
 COD_VEND CHAR (5),
 IGV_COMP DECIMAL(9,2),
 MON_TOT_COMP DECIMAL(9,2),
 COD_CLI  CHAR(5) REFERENCES CLIENTES
)
 
CREATE TABLE DETALLECOMPROBANTES
(
 NRO_COMP INT NOT NULL REFERENCES COMPROBANTES,
 COD_COMI CHAR(5) NOT NULL REFERENCES COMIDAS,
 CAN_VEN INT,
 MON_PAR DECIMAL(9,2),
 PRIMARY KEY(NRO_COMP,COD_COMI)
)
 
CREATE TABLE DETALLECOMIDAS
(
 COD_COMI CHAR(5) NOT NULL REFERENCES COMIDAS,
 COD_ING CHAR(5)NOT NULL REFERENCES INGREDIENTES,
 CANT_ING INT  PRIMARY KEY(COD_COMI,COD_ING)
)
GO
 
/*********************/
/* Insertar registro */
/*********************/
 
-- TABLA CLIENTES
INSERT INTO CLIENTES (COD_CLI,NOM_CLI ,APE_PAT_CLI ,FEC_NAC_CLI ,DNI_CLI ,DIR_CLI,SEX_CLI,GAS_MEN_CLI)
VALUES('CI001','MERCEDES','PEREZ','01/01/1979','45235678','JR.LOS PINOS 124 SAN ISIDRO','F',20.2)
INSERT INTO CLIENTES (COD_CLI,NOM_CLI ,APE_PAT_CLI ,FEC_NAC_CLI ,DNI_CLI ,DIR_CLI,SEX_CLI,GAS_MEN_CLI)
VALUES('CI002','JOSE','BUSTAMANTE','10/12/1970','22536045','AV.LA  MARINA 123 SAN MIGUEL','M',115.3)
INSERT INTO CLIENTES (COD_CLI,NOM_CLI ,APE_PAT_CLI ,FEC_NAC_CLI ,DNI_CLI ,DIR_CLI,SEX_CLI,GAS_MEN_CLI)
VALUES('CI003','ROBERTO','MUÑOZ','01/11/1972','00245876','CALLE PLUTON 155 SANTIAGO DE SURCO','M',125.47)
INSERT INTO CLIENTES (COD_CLI,NOM_CLI ,APE_PAT_CLI ,FEC_NAC_CLI ,DNI_CLI ,DIR_CLI,SEX_CLI,GAS_MEN_CLI)
VALUES('CI004','MANUELA','RODRIGUEZ','11/11/1965','45824586','JR.LOS PINOS 124 SAN ISIDRO','F',85.78)
INSERT INTO CLIENTES (COD_CLI,NOM_CLI ,APE_PAT_CLI ,FEC_NAC_CLI ,DNI_CLI ,DIR_CLI,SEX_CLI,GAS_MEN_CLI)
VALUES('CI005','JUAN','RAMON','12/06/1970','00124578','JR.LOS LOROS 124 LOS OLIVOS','M',58.5)
INSERT INTO CLIENTES (COD_CLI,NOM_CLI ,APE_PAT_CLI ,FEC_NAC_CLI ,DNI_CLI ,DIR_CLI,SEX_CLI,GAS_MEN_CLI)
VALUES('CI006','LUCIO','PEREZ','01/01/1989','43335678','JR. PINAR 124 ATE VITARTE','M',120.2)
INSERT INTO CLIENTES (COD_CLI,NOM_CLI ,APE_PAT_CLI ,FEC_NAC_CLI ,DNI_CLI ,DIR_CLI,SEX_CLI,GAS_MEN_CLI)
VALUES('CI007','CARLOS','BUSTIOS','10/12/1970','34536045','AV.LA  MARINA 134 SAN MIGUEL','M',215.3)
INSERT INTO CLIENTES (COD_CLI,NOM_CLI ,APE_PAT_CLI ,FEC_NAC_CLI ,DNI_CLI ,DIR_CLI,SEX_CLI,GAS_MEN_CLI)
VALUES('CI008','ROSA','CADIZ','11/11/1972','98745876','CALLE SATURNO 1855 SANTIAGO DE SURCO','M',33.25)
INSERT INTO CLIENTES (COD_CLI,NOM_CLI ,APE_PAT_CLI ,FEC_NAC_CLI ,DNI_CLI ,DIR_CLI,SEX_CLI,GAS_MEN_CLI)
VALUES('CI009','ILIANA','LOPEZ-RODRIGUEZ','1/1/1966','45834586','JR.LOS PUYOLES 678 SAN ISIDRO','F',85.78)
INSERT INTO CLIENTES (COD_CLI,NOM_CLI ,APE_PAT_CLI ,FEC_NAC_CLI ,DNI_CLI ,DIR_CLI,SEX_CLI,GAS_MEN_CLI)
VALUES('CI010','ULISES','PONTE','3/6/1976','52314578','JR.LOS MOLLOS 723 LOS OLIVOS','M',358.5)
GO
-- TABLA COMIDAS
INSERT INTO COMIDAS(COD_COMI,DES_COMI,PRE_COMI) VALUES('CO001','ARROZ CON POLLO',8.5)
INSERT INTO COMIDAS(COD_COMI,DES_COMI,PRE_COMI) VALUES('CO002','CEVICHE',12.0)
INSERT INTO COMIDAS(COD_COMI,DES_COMI,PRE_COMI) VALUES('CO003','MONDONGUITO ITALIANO',9.0)
INSERT INTO COMIDAS(COD_COMI,DES_COMI,PRE_COMI) VALUES('CO004','SECO DE CABRITO',10.5)
INSERT INTO COMIDAS(COD_COMI,DES_COMI,PRE_COMI) VALUES('CO005','SUDADO DE PESCADO',12.0)
INSERT INTO COMIDAS(COD_COMI,DES_COMI,PRE_COMI) VALUES ('CO006', 'LOMO SALTADO', 20.00)
GO
--TABLA INGREDIENTES
INSERT INTO INGREDIENTES(COD_ING ,DES_ING ,TIP_ING ,FEC_INGRE_ING,RAZ_PRO_ING,RUC_PRO_ING)
VALUES('IN001','ARROZ','CEREALES','11/06/2004','EL MOLINO','45678921456')
INSERT INTO INGREDIENTES(COD_ING ,DES_ING ,TIP_ING ,FEC_INGRE_ING,RAZ_PRO_ING,RUC_PRO_ING)
VALUES('IN002','SAL','SECOS','07/10/2004','METRO','22356458721')
INSERT INTO INGREDIENTES(COD_ING ,DES_ING ,TIP_ING ,FEC_INGRE_ING,RAZ_PRO_ING,RUC_PRO_ING)
VALUES('IN003','CEBOLLA','VERDURAS','07/12/2004','METRO','12345682')
INSERT INTO INGREDIENTES(COD_ING ,DES_ING ,TIP_ING ,FEC_INGRE_ING,RAZ_PRO_ING,RUC_PRO_ING)
VALUES('IN004','AZUCAR','SECOS','01/08/2004','METRO','12345682')
INSERT INTO INGREDIENTES(COD_ING ,DES_ING ,TIP_ING ,FEC_INGRE_ING,RAZ_PRO_ING,RUC_PRO_ING)
VALUES('IN005','POLLO','CARNES','07/12/2004','SAN FERNANDO','03254678952')
GO
--TABLA COMPROBANTES
INSERT INTO COMPROBANTES(FEC_COMP ,COD_VEND ,IGV_COMP ,MON_TOT_COMP ,COD_CLI)
VALUES('11/06/2004','C0235',11.4608,60.3200,'CI001')
INSERT INTO COMPROBANTES(FEC_COMP ,COD_VEND ,IGV_COMP ,MON_TOT_COMP ,COD_CLI)
VALUES('01/07/2004','C0456',28.5950,150.5000,'CI001')
INSERT INTO COMPROBANTES(FEC_COMP ,COD_VEND ,IGV_COMP ,MON_TOT_COMP ,COD_CLI)
VALUES('11/12/2004','C1254',44.7564,235.5600,'CI002')
INSERT INTO COMPROBANTES(FEC_COMP ,COD_VEND ,IGV_COMP ,MON_TOT_COMP ,COD_CLI)
VALUES('06/10/2004','C3580',6.4600,34.0000,'CI002')
INSERT INTO COMPROBANTES(FEC_COMP ,COD_VEND ,IGV_COMP ,MON_TOT_COMP ,COD_CLI)
VALUES('07/12/2004','C0357',18.9050,99.5000,'CI003')
INSERT INTO COMPROBANTES(FEC_COMP ,COD_VEND ,IGV_COMP ,MON_TOT_COMP ,COD_CLI)
VALUES('1/06/2004','C1254',44.7564,235.5600,'CI006')
INSERT INTO COMPROBANTES(FEC_COMP ,COD_VEND ,IGV_COMP ,MON_TOT_COMP ,COD_CLI)
VALUES('1/03/2004','C3580',6.4600,34.0000,'CI006')
INSERT INTO COMPROBANTES(FEC_COMP ,COD_VEND ,IGV_COMP ,MON_TOT_COMP ,COD_CLI)
VALUES('07/11/2004','C0357',18.9050,99.5000,'CI008')
GO
--TABLA DETALLE COMPROBANTES
INSERT INTO DETALLECOMPROBANTES(NRO_COMP,COD_COMI,CAN_VEN,MON_PAR)
VALUES('100','CO001',4,34)
INSERT INTO DETALLECOMPROBANTES(NRO_COMP,COD_COMI,CAN_VEN,MON_PAR)
VALUES('100','CO002',3,36)
INSERT INTO DETALLECOMPROBANTES(NRO_COMP,COD_COMI,CAN_VEN,MON_PAR)
VALUES('101','CO003',1,9)
INSERT INTO DETALLECOMPROBANTES(NRO_COMP,COD_COMI,CAN_VEN,MON_PAR)
VALUES('101','CO004',1,12)
INSERT INTO DETALLECOMPROBANTES(NRO_COMP,COD_COMI,CAN_VEN,MON_PAR)
VALUES('102','CO005',54,60)
GO
--TABLA DETALLE COMIDAS
INSERT INTO DETALLECOMIDAS(COD_COMI ,COD_ING,CANT_ING) VALUES('CO002','IN001',5)
INSERT INTO DETALLECOMIDAS(COD_COMI ,COD_ING,CANT_ING) VALUES('CO002','IN003',5)
INSERT INTO DETALLECOMIDAS(COD_COMI ,COD_ING,CANT_ING) VALUES('CO003','IN001',5)
INSERT INTO DETALLECOMIDAS(COD_COMI ,COD_ING,CANT_ING) VALUES('CO003','IN002',1)
INSERT INTO DETALLECOMIDAS(COD_COMI ,COD_ING,CANT_ING) VALUES('CO003','IN003',5)
GO
 
 
/*************/
/* CONSULTAS */
/*************/
 
/* 1. Esta consulta devuelve un recordset con todos los campos de la tabla “CLIENTES”. */
 SELECT * FROM CLIENTES
 GO
 
/* 2. Esta consulta devuelve un recordset con los campos COD_CLI y NOM_CLI de la tabla “CLIENTES”. */
 SELECT COD_CLI, NOM_CLI FROM CLIENTES
 GO
 
/* 3. Esta consulta devuelve todos los campos de la tabla “CLIENTES” ordenados por el
      campo apellido paterno del cliente. */
 SELECT * FROM CLIENTES
 ORDER BY APE_PAT_CLI
 GO
 
 
/* 3. Esta consulta devuelve todos los campos de la tabla “CLIENTES” ordenados por el
      campo apellido paterno del cliente de forma descendente. */
 SELECT * FROM CLIENTES
 ORDER BY APE_PAT_CLI DESC
 GO
 
/* 5. Se pueden ordenar los registros por más de un campo, como por ejemplo: */
 
 SELECT APE_PAT_CLI, NOM_CLI, DIR_CLI
 FROM CLIENTES
 ORDER BY APE_PAT_CLI, NOM_CLI
 GO
 
/***************/
/* PREDICADOS */
/**************/
 
/* 1. ALL */
 SELECT ALL * FROM CLIENTES
 SELECT * FROM CLIENTES
 GO
 
/* 2. TOP */
 
 SELECT TOP 5 APE_PAT_CLI, NOM_CLI, DIR_CLI
 FROM CLIENTES
 ORDER BY APE_PAT_CLI DESC
 GO
 
/* 3. TOP PERCENT */
 SELECT TOP 20 PERCENT APE_PAT_CLI, NOM_CLI, DIR_CLI
 FROM CLIENTES
 ORDER BY APE_PAT_CLI DESC
 GO
 
/* 4. DISTINCT */
 SELECT DISTINCT APE_PAT_CLI, NOM_CLI
 FROM CLIENTES
 GO
 
/* 5. ALIAS*/
 SELECT DISTINCT APE_PAT_CLI AS APELLIDO_DEL_CLIENTE
 FROM CLIENTES
 SELECT DISTINCT APE_PAT_CLI AS 'APELLIDO DEL CLIENTE'
 FROM CLIENTES
 SELECT DISTINCT APE_PAT_CLI 'APELLIDO DEL CLIENTE'
 FROM CLIENTES
 GO
 
 
/************************************************/
/* Uso del Day, Month, Year y Concatenaciones */
/************************************************/
 
-- USO DEL CAMPO FECHA: DIA, MES Y AÑO
SELECT NOM_CLI, APE_PAT_CLI, DAY(FEC_NAC_CLI),
MONTH(FEC_NAC_CLI), YEAR(FEC_NAC_CLI)
FROM CLIENTES
GO
-- USANDO ETIQUETAS
SELECT NOM_CLI, APE_PAT_CLI, DAY(FEC_NAC_CLI) AS DIA,
MONTH(FEC_NAC_CLI) AS 'EL MES', YEAR(FEC_NAC_CLI) AS AÑO,
FEC_NAC_CLI
FROM CLIENTES
GO
-- USANDO CONCATENACIÓN
SELECT NOM_CLI + ' ' + APE_PAT_CLI AS CLIENTE,
DAY(FEC_NAC_CLI) AS DIA,
MONTH(FEC_NAC_CLI) AS 'EL MES',
YEAR(FEC_NAC_CLI) AS AÑO
FROM CLIENTES
GO
-- USANDO DATEDIFF Y GETDATE PARA OBTENER LA EDAD DE UN CLIENTE
SELECT COD_CLI, APE_PAT_CLI, FEC_NAC_CLI,
DATEDIFF(YY,FEC_NAC_CLI, GETDATE()) 'EDAD DEL USUARIO'
FROM CLIENTES
GO
  
 
/************************************/
/* PRODUCTO CARTESIANO E INNER JOIN */
/************************************/
 
-- Se selecciona todos los clientes
SELECT * FROM CLIENTES
GO
-- Se selecciona todos los comprobantes
SELECT * FROM COMPROBANTES
GO
-- Producto cartesiano entre 2 tablas
SELECT *
FROM CLIENTES, COMPROBANTES
WHERE CLIENTES.COD_CLI = COMPROBANTES.COD_CLI
GO
-- Se selecciona los clientes que han efectuado compras
SELECT *
FROM CLIENTES INNER JOIN COMPROBANTES ON
CLIENTES.COD_CLI = COMPROBANTES.COD_CLI
GO
-- Se selecciona los clientes que han efectuado compras mediante el uso de alias
SELECT *
FROM CLIENTES A INNER JOIN COMPROBANTES B ON
A.COD_CLI = B.COD_CLI
GO
 
 
/**************/
/* EJERCICIOS */
/**************/
 
/*1. Muestre los datos de los clientes que han efectuado compras en el año 2004. */
 
 SELECT W.COD_CLI, NOM_CLI + ' ' + APE_PAT_CLI AS CLIENTE, DIR_CLI, FEC_COMP
 FROM CLIENTES W INNER JOIN COMPROBANTES Z ON
 W.COD_CLI = Z.COD_CLI
 WHERE YEAR(FEC_COMP) = 2004
 GO
 
/*2. Muestre los datos de los clientes que han efectuado una compra en el año 2004 y que
     la comida consumida comience con la letra C ó M. ordénelo por el apellido paterno del
  cliente y ante coincidencias por el nombre de ese cliente. */
   
 SELECT W.COD_CLI, NOM_CLI + ' ' + APE_PAT_CLI AS CLIENTE, DIR_CLI, FEC_COMP, DES_COMI
 FROM ((CLIENTES W INNER JOIN COMPROBANTES Z ON
 W.COD_CLI = Z.COD_CLI) INNER JOIN DETALLECOMPROBANTES Y ON
 Z.NRO_COMP = Y.NRO_COMP ) INNER JOIN COMIDAS X ON
 Y.COD_COMI = X.COD_COMI
 WHERE YEAR(FEC_COMP) = 2004 AND (DES_COMI LIKE 'M%' OR DES_COMI LIKE 'C%')
 ORDER BY APE_PAT_CLI, NOM_CLI
 GO
  
  
/*3. Muestre los datos de las comidas en cuya preparación se ha utilizado arroz o frejoles. */
 
 SELECT *
 FROM (COMIDAS A INNER JOIN DETALLECOMIDAS B ON
 A.COD_COMI = B.COD_COMI) INNER JOIN INGREDIENTES C ON
 B.COD_ING = C.COD_ING
 WHERE DES_ING = 'ARROZ' OR DES_ING = 'FREJOLES'
 GO
Ejecutar query en RexTester

RextTester: https://rextester.com/JTTLQ6779

¡Acabas de ver el tema Consulta y manejo de fechas del curso de Base de Datos en SQL Server! ¡Fácil verdad! Ir al índice.

Asimismo, si quieres comprar la guía completa con todos los temas, ejercicios, evaluaciones, proyectos, aplicaciones, banco de datos y más; puedes ingresar al siguiente enlace. Y si eres seguidor accedes a un descuento del -%50.

¡Quiero esto!

No hay comentarios, ¡cuéntame algo!

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