Ejemplo de gestión de datos con SQL 1. Crear la tabla FINCA: 2302010 0010 24 3931411 543 COMERÇ 3456912 0023 12 39411312 120 VIVENDES 1230101 00011 45 39328234 213 INDUSTRIA CREATE TABLE `finca` ( `refcad` CHAR( 10 ) PRIMARY KEY, `carrer` CHAR( 10 ) NOT NULL, `num` INT NOT NULL, `dni` CHAR( 10 ) NOT NULL, `sup` INT NOT NULL, `` CHAR( 10 ) NOT NULL ); VALUES ( '1211001', '0023', 10, '39313635', 342, 'VIVENDES' ); VALUES ( '2302010', '0010', 24, '3931411', 543, 'COMERÇ' ); VALUES ( '3456912', '0023', 12, '39411312', 120, 'VIVENDES' ); VALUES ( '1230101', '00011', 45, '39328234', 213, 'INDUSTRIA' ); 2. Seleccionar los campos REFCAD, CARRER i NUM de la tabla FINCA: SELECT refcad, carrer, num FROM finca 1211001 0023 10 2302010 0010 24 3456912 0023 12 1230101 00011 45 3. Seleccionar todos los campos de las filas de la tabla FINCA que cumplen: a. DESTI es igual a VIVENDA : SELECT * FROM finca WHERE = VIVENDES 3456912 0023 12 39411312 120 VIVENDES
b. CARRER es igual a 0023 y SUP es más grande de 200: SELECT * FROM finca WHERE carrer = 0023 AND sup > 200 c. DESTI es igual a VIVENDA o a COMERÇ ; CARRER conté les cadenes 01 o 02 ; Los resultados deben ordenarse por CARRERA y NUM: SELECT * FROM finca WHERE (= VIVENDA OR = COMERÇ ) AND (carrer LIKE %01% OR carrer LIKE %02% ) ORDER BY carrer, num o SELECT * FROM finca WHERE ( IN ( VIVENDA, COMERÇ )) AND (carrer LIKE %01% OR carrer LIKE %02% ) ORDER BY carrer, num 2302010 0010 24 3931411 543 COMERÇ d. El valor de SUP está entre 200 y 400; CARRER no contiene la cadena 02 : SELECT * FROM finca WHERE (sup BETWEEN 200 AND 400) AND (carrer NOT LIKE %02% ) 1230101 00011 45 39328234 213 INDUSTRIA 4. Añadir a la tabla un campo llamado FECHA que sea del tipo fecha: ALTER TABLE finca ADD (fecha date) 5. Actualizar el campo FECHA de todas las filas con la fecha de hoy: UPDATE finca SET fecha=sysdate() 6. Incrementar el campo FECHA en un dia de todas las filas con NUM menor que 20: UPDATE finca SET fecha=fecha+1 WHERE num<20 7. Actualizar con el primer día del año el campo FECHA de la fila con REFCAD igual a 2302010 : UPDATE finca SET fecha=to_date('20100101','yyyymmdd') WHERE refcad= 2302010 UPDATE finca SET fecha=str_to_date('20100101','%y%m%d') WHERE refcad= 2302010
Ahora la tabla queda: fecha 3456912 0023 12 39411312 120 VIVENDES 2011-01-26 8. Seleccionar todos los campos de las filas de la tabla FINCA asignando un nombre de calle diferente para cada número distinto de calle. Por ejemplo, Calle Mayor para 0023, Plaza Real para 0010 y Av. Roma para 00011 : SELECT *, DECODE (carrer, '0023', 'Calle Mayor', '0010', 'Plaza Real', '00011', 'Av. Roma', '', 'Sense nom') Nombre FROM finca SELECT *, CASE carrer WHEN '0023' THEN 'Calle Mayor' WHEN '0010' THEN 'Plaza Real' WHEN '00011' THEN 'Av. Roma' ELSE 'Sense nom' END Nombre FROM finca fecha Nombre Calle Mayor Plaza Real 3456912 0023 12 39411312 120 VIVENDES 2011-01-26 Calle Mayor Av. Roma 9. Seleccionar los campos CARRER y DESTI de todas las filas la tabla FINCA sin mostrar resultados repetidos: SELECT DISTINCT carrer, FROM finca carrer 0023 VIVENDES 0010 COMERÇ 00011 INDUSTRIA 10. Seleccionar todos los campos de la tabla FINCA sin mostrar más de 2 resultados: SELECT * FROM finca WHERE ROWNUM < 3 SELECT * FROM finca LIMIT 2 fecha
11. Seleccionar y contar todas las filas de la tabla FINCA agrupadas por el campo DESTI: SELECT, count(*) total FROM finca GROUP BY total COMERÇ 1 INDUSTRIA 1 VIVENDES 2 12. Mostrar todos los datos de la tabla FINCA ordenados por el número de calle: SELECT * FROM finca ORDERR BY num 1211001 0023 10 3456912 0023 12 2302010 0010 24 1230101 00011 45 dni sup fecha 39313635 342 VIVENDES 2011-01-26 39411312 120 VIVENDES 2011-01-26 3931411 543 COMERÇ 2010-01-01 39328234 213 INDUSTRIA 2011-01-25 13. Mostrar todos los datos de la tabla FINCA agrupados por CARRER y ordenados según el campo DESTI: SELECT * FROM finca GROUP BY carrer ORDER BY dni sup fecha 14. Obtener el valor mínimo, máximo, la suma y la media del campo SUP de la tabla FINCA: SELECT min(sup), max(sup) ), sum(sup), avg(sup) FROM finca MIN( sup ) MAX( sup ) SUM( sup ) AVG( sup ) 120 543 1218 304.5000 15. Contar las filas cuya fecha sea posterior al 01/01/2010 y anterior o igual al 25/01/2011: SELECT count(*) total FROM finca WHERE (fecha > TO_DATE('20100101','YYYYMMDD')) AND (fecha <= TO_DATE('20110125','YYYYMMDD')) SELECT count(*) total FROM finca WHERE (fecha > STR_TO_DATE('20100101','%Y%m%d')) AND (fecha <= STR_TO_DATE('20110125','%Y%m%d'))
total 1 Que corresponde al siguiente registro: fecha 16. Agrupar las filas de la tabla FINCA según el campo DESTI. Mostrar el campo DESTI y la suma del campo NUM para aquellos grupos de resultados cuya suma del campo NUM sea menor que 45: SELECT, sum(num) FROM finca GROUP BY HAVING sum(num)<45 sum(num) COMERÇ 24 VIVENDES 22