Skip to content

Commit bcf0cf0

Browse files
authored
Merge pull request mouredev#7700 from adrs1166ma/main
#1 - sql
2 parents 9eeb0b3 + 5aa5e88 commit bcf0cf0

File tree

1 file changed

+294
-0
lines changed

1 file changed

+294
-0
lines changed
Lines changed: 294 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,294 @@
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

Comments
 (0)