¡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 |
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:
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:
El predicado se incluye entre la cláusula y el primer nombre del campo a recuperar, los posibles predicados son los siguientes:
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 |
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.
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!