|
| 1 | +/* |
| 2 | + * EJERCICIO: |
| 3 | + * - Crea ejemplos utilizando todos los tipos de operadores de tu lenguaje: |
| 4 | + * Aritméticos, lógicos, de comparación, asignación, identidad, pertenencia, bits... |
| 5 | + * (Ten en cuenta que cada lenguaje puede poseer unos diferentes) |
| 6 | + * - Utilizando las operaciones con operadores que tú quieras, crea ejemplos |
| 7 | + * que representen todos los tipos de estructuras de control que existan |
| 8 | + * en tu lenguaje: |
| 9 | + * Condicionales, iterativas, excepciones... |
| 10 | + * - Debes hacer print por consola del resultado de todos los ejemplos. |
| 11 | + * |
| 12 | + * DIFICULTAD EXTRA (opcional): |
| 13 | + * Crea un programa que imprima por consola todos los números comprendidos |
| 14 | + * entre 10 y 55 (incluidos), pares, y que no son ni el 16 ni múltiplos de 3. |
| 15 | + * |
| 16 | + * Seguro que al revisar detenidamente las posibilidades has descubierto algo nuevo. |
| 17 | +*/ |
| 18 | + |
| 19 | +-- 🔥 Ejemplo: |
| 20 | +-- TABAL 1 |
| 21 | +CREATE DATABASE Ejercici01; |
| 22 | +USE Ejercici01; |
| 23 | + |
| 24 | +CREATE TABLE Empleados ( |
| 25 | + ID INT, |
| 26 | + NOMBRE varchar(20), |
| 27 | + APELLIDO varchar(30), |
| 28 | + EDAD numeric(2), |
| 29 | + TELEFONO numeric(10), |
| 30 | + DIRECCION varchar(100), |
| 31 | + FECHA_NACIMIENTO date, |
| 32 | + SALARIO decimal (18,2), |
| 33 | + ACTIVO char(2) |
| 34 | +); |
| 35 | + |
| 36 | +insert into empleados values (1, 'Juan', 'Pérez', 25, 1234567890, 'Calle 123', '1978-06-15', 2500.00, 'SI'); |
| 37 | +insert into empleados values (2, 'María', 'López', 30, 9876543210, 'Avenida 456', '1980-03-20', 3000.00, 'SI'); |
| 38 | +insert into empleados values (3, 'Carlos', 'González', 28, 5555555555, 'Calle 789', '1979-11-10', 2800.00, 'SI'); |
| 39 | +insert into empleados values (4, 'Ana', 'Martínez', 35, 9998887770, 'Avenida 012', '1977-09-05', 3500.00, 'SI'); |
| 40 | +insert into empleados values (5, 'Pedro', 'Sánchez', 22, 1112223334, 'Calle 567', '1980-01-25', 2000.00, 'SI'); |
| 41 | +insert into empleados values (6, 'Laura', 'Ramírez', 31, 4444444444, 'Avenida 890', '1978-07-12', 3200.00, 'SI'); |
| 42 | +insert into empleados values (7, 'Luis', 'Torres', 29, 7777777777, 'Calle 345', '1979-04-18', 2700.00, 'SI'); |
| 43 | +insert into empleados values (8, 'Carmen', 'Hernández', 27, 6666666666, 'Avenida 678', '1980-02-03', 2600.00, 'SI'); |
| 44 | +insert into empleados values (9, 'Jorge', 'García', 33, 2223334445, 'Calle 901', '1977-12-27', 3400.00, 'SI'); |
| 45 | +insert into empleados values (10, 'Silvia', 'Lara', 24, 8889990000, 'Avenida 234', '1980-05-09', 2200.00, 'SI'); |
| 46 | +insert into empleados values (11, 'Roberto', 'Rojas', 26, 3334445556, 'Calle 567', '1979-02-14', 2400.00, 'SI'); |
| 47 | +insert into empleados values (12, 'Patricia', 'Cruz', 32, 2223334444, 'Avenida 890', '1978-08-21', 3100.00, 'SI'); |
| 48 | +insert into empleados values (13, 'Daniel', 'Gómez', 29, 5556667778, 'Calle 123', '1979-06-06', 2800.00, 'SI'); |
| 49 | +insert into empleados values (14, 'Sara', 'Vargas', 34, 6667778889, 'Avenida 456', '1977-04-01', 3300.00, 'SI'); |
| 50 | +insert into empleados values (15, 'Hugo', 'Orozco', 23, 9998887776, 'Calle 789', '1980-03-16', 2100.00, 'SI'); |
| 51 | + |
| 52 | +-- TABLA 2 |
| 53 | +CREATE TABLE NUMEROS ( |
| 54 | + id INT, |
| 55 | + n1 INT, |
| 56 | + n2 INT |
| 57 | +); |
| 58 | + |
| 59 | +INSERT INTO NUMEROS VALUES (1, 5, 8); |
| 60 | +INSERT INTO NUMEROS VALUES (2, 7, 9); |
| 61 | +INSERT INTO NUMEROS VALUES (3, 7, 0); |
| 62 | + |
| 63 | + |
| 64 | +-- 🔥 a. Operadores artiméticos |
| 65 | +SELECT |
| 66 | + n1 as 'Numero 1', |
| 67 | + n2 as 'Numero 2', |
| 68 | + n1 + n2 AS Suma, |
| 69 | + n1 - n2 AS Resta, |
| 70 | + n1 * n2 AS Multiplicacion, |
| 71 | + n1 / CAST(n2 AS FLOAT) AS Division, |
| 72 | + n1 % n2 AS Modulo |
| 73 | +FROM NUMEROS |
| 74 | +WHERE n2 <> 0; |
| 75 | + |
| 76 | + |
| 77 | +-- 🔥 b. Operadores de Comparación |
| 78 | +SELECT * FROM Empleados WHERE ID = 15; |
| 79 | +SELECT * FROM Empleados WHERE EDAD <> 15; |
| 80 | +SELECT * FROM Empleados WHERE EDAD != 15; |
| 81 | +SELECT * FROM Empleados WHERE EDAD > 15; |
| 82 | +SELECT * FROM Empleados WHERE EDAD < 15; |
| 83 | +SELECT * FROM Empleados WHERE EDAD <= 15; |
| 84 | +SELECT * FROM Empleados WHERE EDAD >= 15; |
| 85 | + |
| 86 | +SELECT * FROM Empleados WHERE EDAD BETWEEN 30 AND 35; -- Si esta dentro del rango, incluye los extremos |
| 87 | +SELECT * FROM Empleados WHERE NOMBRE IN ('Juan', 'María', 'Carlos'); -- Compara si el valor está |
| 88 | +SELECT * FROM Empleados WHERE APELLIDO LIKE 'L%'; -- Apellidos que empiezan con 'L' |
| 89 | +SELECT * FROM Empleados WHERE TELEFONO IS NULL; -- Valores NULL |
| 90 | +SELECT * FROM Empleados WHERE TELEFONO IS NOT NULL; -- Valores no NULL |
| 91 | + |
| 92 | + |
| 93 | +-- 🔥 c. Operadores Lógicos |
| 94 | + |
| 95 | +PRINT 'Obtener empleados cuya edad sea mayor a 25 y cuyo salario sea mayor a 2500.'; |
| 96 | +SELECT Nombre, Edad, Salario FROM Empleados WHERE (EDAD > 25) AND (salario > 2500); -- AND |
| 97 | + |
| 98 | +PRINT 'Obtener empleados cuyo salario sea mayor a 3000 o cuyo nombre sea "Juan".'; |
| 99 | +SELECT Nombre, Salario FROM Empleados WHERE (salario > 3000) OR (nombre = 'Juan'); -- OR |
| 100 | + |
| 101 | +PRINT 'Obtener empleados que no estén activos (no tengan "SI" en la columna ACTIVO).'; |
| 102 | +SELECT Nombre, Activo FROM Empleados WHERE NOT Activo = 'SI'; -- NOT |
| 103 | + |
| 104 | +PRINT 'Obtener empleados cuya edad sea mayor a 30 o cuyo salario sea mayor a 3500, pero solo si están activos.'; |
| 105 | +SELECT * FROM Empleados WHERE ((edad > 30) OR (salario > 3500)) AND (activo = 'SI'); |
| 106 | + |
| 107 | +PRINT 'Obtener empleados cuya edad esté entre 25 y 35, y cuyo salario sea mayor a 2500, pero que no sean activos.'; |
| 108 | +SELECT * FROM Empleados WHERE (edad BETWEEN 25 AND 35) AND (salario>2500) AND ( NOT activo = 'SI'); |
| 109 | + |
| 110 | +PRINT 'Obtener empleados con un salario superior a 3000 y que tengan la letra 'G' en su apellido, o aquellos que tengan un nombre que comience con "M".'; |
| 111 | +SELECT * FROM Empleados WHERE (salario>3000 AND apellido LIKE 'G%') OR (nombre LIKE 'M%') |
| 112 | + |
| 113 | +PRINT 'Obtener empleados que no sean de la calle "Avenida 456" ni tengan un teléfono específico.'; |
| 114 | +PRINT 'num : 999111999'; |
| 115 | +SELECT * FROM Empleados WHERE (NOT DIRECCION = 'Avenida 456') AND teléfono <> 999111999; |
| 116 | + |
| 117 | + |
| 118 | +-- 🔥 d. Operadores de Asignación |
| 119 | + |
| 120 | +-- Ejemplo de " = ". |
| 121 | +UPDATE Empleados SET ACTIVO = 'NO' WHERE ID = 1; |
| 122 | + |
| 123 | +-- Incremento con " += " |
| 124 | +UPDATE Empleados SET SALARIO += 500 WHERE ID = 2; |
| 125 | + |
| 126 | +-- Decremento con " -= " |
| 127 | +UPDATE Empleados SET SALARIO -= 200 WHERE ID = 3; |
| 128 | + |
| 129 | +-- Multiplicación con " *= " |
| 130 | +UPDATE Empleados SET SALARIO *= 1.10 WHERE ID = 4; |
| 131 | + |
| 132 | +-- División con " /= " |
| 133 | +UPDATE Empleados SET SALARIO /= 2 WHERE ID = 5; |
| 134 | + |
| 135 | +-- Basada en una condicion |
| 136 | +--Cambiar el estado "ACTIVO" a "NO" para empleados mayores de 30 años. |
| 137 | +UPDATE Empleados SET ACTIVO = 'NO' WHERE EDAD > 30; |
| 138 | + |
| 139 | +-- EJEMPLO de una combinacion de cálculos y asignación |
| 140 | +/* |
| 141 | +Ajustar el salario de todos los empleados dependiendo de su edad: |
| 142 | +Si la edad es menor a 25 años, incrementar en un 15%. |
| 143 | +Si la edad es entre 25 y 30 años, incrementar en un 10%. |
| 144 | +Si la edad es mayor a 30 años, incrementar en un 5%. |
| 145 | +*/ |
| 146 | +UPDATE Empleados |
| 147 | +SET SALARIO = |
| 148 | + CASE |
| 149 | + WHEN EDAD < 25 THEN SALARIO * 1.15 |
| 150 | + WHEN EDAD BETWEEN 25 AND 30 THEN SALARIO * 1.10 |
| 151 | + ELSE SALARIO * 1.05 |
| 152 | + END; |
| 153 | + |
| 154 | +-- Asignación a varias columnas simultáneamente |
| 155 | +UPDATE Empleados |
| 156 | +SET NOMBRE = 'Laura María', |
| 157 | + APELLIDO = 'Ramírez López', |
| 158 | + SALARIO = 3500 |
| 159 | +WHERE ID = 6; |
| 160 | + |
| 161 | + |
| 162 | +-- 🔥 e. Operadores de Pertenencia |
| 163 | + |
| 164 | +-- IN - seleccionar |
| 165 | +SELECT * FROM Empleados WHERE NOMBRE IN ('Juan', 'María', 'Carlos'); |
| 166 | + |
| 167 | +-- NOT IN - Excluir |
| 168 | +SELECT * FROM Empleados WHERE ID NOT IN (1, 3, 5); |
| 169 | + |
| 170 | + |
| 171 | +-- 🔥 f. Operadores de Bits |
| 172 | + |
| 173 | +-- agregamos una tabla |
| 174 | +ALTER TABLE Empleados ADD PERMISOS INT; |
| 175 | + |
| 176 | +-- Actualizamos los valores de permisos con números representativos |
| 177 | +UPDATE Empleados |
| 178 | +SET PERMISOS = ID * 2; -- Simplemente asignamos un valor basado en el ID. |
| 179 | + |
| 180 | + |
| 181 | +-- AND a nivel de bit (&) |
| 182 | + |
| 183 | +-- Obtenemos empleados cuyos permisos tienen activado el segundo bit (valor 2 en binario): |
| 184 | +SELECT ID, NOMBRE, PERMISOS |
| 185 | +FROM Empleados |
| 186 | +WHERE PERMISOS & 2 = 2; |
| 187 | + |
| 188 | + |
| 189 | +-- OR a nivel de bit (|) |
| 190 | + |
| 191 | +-- Añadimos un permiso al primer bit (valor 1 en binario): |
| 192 | +SELECT ID, NOMBRE, PERMISOS, (PERMISOS | 1) AS NUEVOS_PERMISOS |
| 193 | +FROM Empleados; |
| 194 | + |
| 195 | + |
| 196 | +-- XOR a nivel de bit (^) |
| 197 | + |
| 198 | +--Verificamos qué permisos cambiarían si aplicamos un XOR con 3: |
| 199 | + |
| 200 | +SELECT ID, NOMBRE, PERMISOS, (PERMISOS ^ 3) AS XOR_RESULTADO |
| 201 | +FROM Empleados; |
| 202 | + |
| 203 | + |
| 204 | +-- Desplazamiento de bits a la izquierda (<<) |
| 205 | + |
| 206 | +-- Multiplicamos los permisos por un factor de 2 desplazando los bits a la izquierda: |
| 207 | +SELECT ID, NOMBRE, PERMISOS, (PERMISOS << 1) AS PERMISOS_DOBLE |
| 208 | +FROM Empleados; |
| 209 | + |
| 210 | + |
| 211 | +-- Desplazamiento de bits a la derecha (>>) |
| 212 | + |
| 213 | +-- Dividimos los permisos entre 2 desplazando los bits a la derecha: |
| 214 | +SELECT ID, NOMBRE, PERMISOS, (PERMISOS >> 1) AS PERMISOS_DIVIDIDO |
| 215 | +FROM Empleados; |
| 216 | + |
| 217 | + |
| 218 | +-- Complemento a nivel de bit (~) |
| 219 | + |
| 220 | +-- Invertimos todos los bits de los permisos: |
| 221 | +SELECT ID, NOMBRE, PERMISOS, (~PERMISOS) AS COMPLEMENTO |
| 222 | +FROM Empleados; |
| 223 | + |
| 224 | + |
| 225 | +-- 🔥 g. Estructuras de Control |
| 226 | + |
| 227 | +-- IF - ELSE |
| 228 | +-- ejm: Verifica si un empleado tiene un salario mayor a 3000 y realiza acciones: |
| 229 | +IF (SELECT SALARIO FROM Empleados WHERE ID = 1) > 3000 |
| 230 | +BEGIN |
| 231 | + PRINT 'Salario alto'; |
| 232 | +END |
| 233 | +ELSE |
| 234 | +BEGIN |
| 235 | + PRINT 'Salario bajo'; |
| 236 | +END |
| 237 | + |
| 238 | +-- CASE |
| 239 | +-- ejm: Consulta empleados categorizando por salario: |
| 240 | +SELECT NOMBRE, |
| 241 | + CASE |
| 242 | + WHEN SALARIO > 3000 THEN 'Alto' |
| 243 | + WHEN SALARIO BETWEEN 2000 AND 3000 THEN 'Medio' |
| 244 | + ELSE 'Bajo' |
| 245 | + END AS Categoria |
| 246 | +FROM Empleados; |
| 247 | + |
| 248 | +-- WHILE |
| 249 | +-- ejm: Itera sobre IDs de empleados para realizar acciones: |
| 250 | +DECLARE @ID INT = 1; |
| 251 | + |
| 252 | +WHILE @ID <= (SELECT MAX(ID) FROM Empleados) |
| 253 | +BEGIN |
| 254 | + PRINT 'Procesando empleado con ID: ' + CAST(@ID AS VARCHAR); |
| 255 | + SET @ID = @ID + 1; |
| 256 | +END; |
| 257 | + |
| 258 | + |
| 259 | +-- Manejo de errores TRY - CATCH |
| 260 | +-- ejm: T-SQL |
| 261 | +BEGIN TRY |
| 262 | + -- Intentar insertar un valor duplicado (error) |
| 263 | + INSERT INTO Empleados (ID, NOMBRE) VALUES (1, 'Prueba'); |
| 264 | +END TRY |
| 265 | +BEGIN CATCH |
| 266 | + PRINT 'Ocurrió un error: ' + ERROR_MESSAGE(); |
| 267 | +END CATCH; |
| 268 | + |
| 269 | + |
| 270 | + |
| 271 | + |
| 272 | +-- DIFICULTAD EXTRA 🔥🔥🔥 |
| 273 | +CREATE TABLE #Numeros ( |
| 274 | + Numero INT |
| 275 | +); |
| 276 | + |
| 277 | +DECLARE @i INT = 10; |
| 278 | + |
| 279 | +WHILE @i <= 55 |
| 280 | +BEGIN |
| 281 | + INSERT INTO #Numeros (Numero) |
| 282 | + VALUES (@i); |
| 283 | + |
| 284 | + SET @i = @i + 1; |
| 285 | +END; |
| 286 | + |
| 287 | +SELECT Numero |
| 288 | +FROM #Numeros |
| 289 | +WHERE Numero % 2 = 0 |
| 290 | + AND Numero <> 16 |
| 291 | + AND Numero % 3 <> 0; |
| 292 | + |
| 293 | +-- Limpiar por si las dudas |
| 294 | +DROP TABLE #Numeros; |
0 commit comments