sábado, 18 de mayo de 2024

Apilar imágenes en Photoshop para mejorar el enfoque (Photo Stacking)

Los seres humanos enfocamos rápida e inconscientemente lejos y cerca prácticamente sin darnos cuenta, y en nuestra mente se forma una imagen nítida con objetos cercanos y lejanos nítidos. 

Cuando se fotografía una imagen de cerca, la cámara enfoca en un área muy específica del objeto pero el fondo sale borroso.

 

Apilar imágenes en Photoshop para mejorar el enfoque (Photo Stacking)
Imagen con el enfoque en las flores de brezo y fondo borroso

Si enfocamos el fondo, es el objeto cercano el que sale borroso. 

 

Imagen con el enfoque en las flores de brezo y fondo borroso
Imagen con el fondo enfocado y las flores de brezo borrosas

Para obtener una visión nítida con una mayor profundidad de campo de objetos cercanos y lejanos se pueden realizar dos o más fotos de la imagen deseada, una o varias con el fondo enfocado y otra o varias con el objeto cercano enfocado.

Hecho esto, desde Photoshop importamos nuestras imágenes y elegimos Archivo -> Secuencias de comandos -> Cargar archivos en pila

Apilar imágenes en Photoshop para mejorar el enfoque (Photo Stacking)
 

Aparecerá un cuadro de diálogo, podemos elegir Añadir archivos abiertos para tratar todas nuestras imágenes tomadas.

Apilar imágenes en Photoshop para mejorar el enfoque (Photo Stacking)

Hecho esto, es importante ir a la pestaña capas de la derecha y seleccionar todas las capas que deseemos alinear para que la foto quede lo más exacta posible a la realidad. Después elegimos Edición -> Alinear capas automáticamente

 

Apilar imágenes en Photoshop para mejorar el enfoque (Photo Stacking)

Nos mostrará un cuadro de diálogo de alineamiento de capas, elegimos automática.

Apilar imágenes en Photoshop para mejorar el enfoque (Photo Stacking)


Después de esto seleccionamos desde el menú Edición -> Fusionar capas automáticamente.

Apilar imágenes en Photoshop para mejorar el enfoque (Photo Stacking)


 Lo que nos muestra un cuadro de diálogo con dos opciones, elegimos Apilar imágenes.

Apilar imágenes en Photoshop para mejorar el enfoque (Photo Stacking)


  
Y Photoshop creará una foto con el fondo y el objeto cercano nítidos.

Apilar imágenes en Photoshop para mejorar el enfoque (Photo Stacking)
Apilar imágenes en Photoshop para mejorar el enfoque (Photo Stacking)
Resultado final con las flores de brezo y el fondo nítidos, puedes adquirir esta foto aquí
Resultado final con las flores de brezo y el fondo nítidos



 



sábado, 4 de mayo de 2024

Clausula GROUP BY en SQL, Agrupar las filas y contarlas

La sentencia GROUP BY identifica una columna seleccionada para utilizarla para agrupar resultados. Divide los datos en grupos por los valores de la columna especificada, y devuelve una fila de resultados para cada grupo.

Se puede utilizar GROUP BY con más de un nombre de columna (separando los nombres de columna con comas). Es necesario colocar siempre GROUP BY después de FROM y WHERE en una consulta, y antes de HAVING y ORDER BY.

Todas las columnas seleccionadas sin una agregación asociada deben aparecer en la cláusula GROUP BY.

SELECT   id_cliente,   COUNT(*) FROM tarjeta GROUP BY id_cliente;

GROUP BY agrupa todas las filas que tengan el mismo valor en la columna especificada.

Clausula GROUP BY en SQL, Agrupar las filas y contarlas


En este ejemplo, todas las tarjetas  pertenecientes al mismo cliente se agruparán en una fila. Después, la función COUNT(*) contará todas las filas de los clientes. Como resultado, obtendremos una tabla en la que aparecerá cada id_cliente junto con el número de tarjetas de las que es titular.

Por ejemplo para obtener el número de empleados de cada departamento en el año 2023. Mostramos el nombre del departamento junto con el número de empleados. Y llamamos a la segunda columna numero_de_empleados

SELECT departamento, COUNT(*) AS numero_de_empleados FROM empleados WHERE fecha = 2023 GROUP BY departamento;

Obtener los valores mínimos y máximos de grupos

GROUP BY se puede utilizar junto con muchas otras funciones.

SELECT   id_cliente,   MAX(saldo_total) FROM tarjetas GROUP BY id_cliente;

Se ha sustituido COUNT(*) por MAX(saldo_total).

En lugar de contar todos las trajetas de determinados clientes, obtendremos el saldo de tarjeta con el valor más alto de cada cliente.

Obtener el promedio de grupos

SELECT  id_cliente,  AVG(saldo_total) FROM tarjetas WHERE fecha_de_compra >= '2023-01-01'   AND fecha_de_compra < '2024-01-01' GROUP BY id_cliente;

Utilizamos la función AVG(saldo_total)  para obtener el promedio de los pedidos de cada uno de nuestros clientes, pero solo para los pedidos que realizaron en 2023.

Agrupar por varias columnas

A veces queremos agrupar las filas por más de una columna. Imaginemos que tenemos unos cuantos clientes que hacen montones de compras cada día, y que nos gustaría saber el importe que gastan diariamente en sus compras.

SELECT  id_cliente,  fecha_de_compra,  SUM(importe) FROM tarjetas GROUP BY id_cliente, fecha_de_compra;

Como se puede ver, agrupamos por dos columnas (id_cliente y fecha_de_compra). Seleccionamos estas columnas y la función SUM(importe).

Recordar: en este tipo de consultas, todas las columnas de la parte SELECT deben usarse posteriormente para la agrupación o con una de las funciones.

Filtrar grupos

Veremos cómo se pueden filtrar los grupos. Existe una palabra clave especial (HAVING) que está reservada para ello.

SELECT  id_cliente,  fecha_de_compra,  SUM(importe) FROM tarjetas GROUP BY id_cliente, fecha_de_compra HAVING SUM(importe) > 2000;

Utilizamos la palabra clave HAVING y, después, indicamos la condición para filtrar los resultados. En este caso, solo queremos mostrar a los clientes que, en días concretos, compraron productos por un valor total diario superior a 2.000 dólares.

Ejercicio

Obtener los departamentos en los que el salario promedio en 2022 fue superior a 3.000 €. Mostrar el nombre del departamento junto con el salario promedio.

SELECT departamento, AVG(salario) FROM empleados WHERE fecha = 2022 GROUP BY departamento HAVING AVG(salario) > 3000

Ordenar grupos

Los grupos se pueden ordenar igual que las filas. Echar un vistazo a lo siguiente:

SELECT  id_cliente,  fecha_de_compra,  SUM(importe) FROM tarjetas GROUP BY id_cliente, fecha_de_compra ORDER BY SUM(importe) DESC;

En este caso, ordenamos nuestras filas según el importe total diario de todas las compras de cada cliente. Las filas con el valor más alto aparecerán primero.

Ejercicio

Mostrar las columnas apellido y nombre de la tabla empleados junto con el salario medio de cada persona y el número de años que trabajó en la empresa.

Utilizar los siguientes alias: salario_medio para el salario medio de cada persona y fechas_trabajados para el número de años trabajados en la empresa. Muestre solo los empleados que estuvieron más de 2 años en la empresa. Ordene los resultados según el salario medio, en orden descendente.

SELECT apellido, nombre, AVG(salario) as salario_medio, COUNT(DISTINCT fecha) as fechas_trabajados FROM empleados GROUP BY apellido, nombre HAVING COUNT(DISTINCT fecha) > 2 ORDER BY AVG(salario) DESC;

Alias para tablas

Si queremos seleccionar muchas columnas de dos tablas combinadas, hay que escribir mucho. Todos esos nombres de columnas junto con los nombres de sus tablas. Hay una forma de simplificar la consulta, podemos introducir nuevos nombres temporales (llamados alias) para nuestras tablas:

SELECT  p.campo1,   p.campo2,   p.campo3,   c.campo1,   c.campo2,   c.campo3 FROM tabla1 AS p JOIN tabla2 AS c   ON p.campo1 = c.campo2;

Como se puede ver, en la cláusula FROM, después de los nombres de las tablas utilizamos la palabra clave AS. Esta palabra clave indica que lo que va a continuación se convertirá en el nuevo nombre temporal (alias) de la tabla. Gracias a esto, podemos ahorrarnos un poco de tiempo y escribir nombres más cortos para nuestras tablas.

Usar alias en autocombinaciones

Los alias también son útiles en otras situaciones. Si queremos introducir información sobre los empleados y sus jefes en una base de datos. En un momento dado, también queremos mostrar a los empleados junto con sus jefes, mediante una JOIN. Digamos que almacenamos a los empleados y a los jefes en la misma tabla persona. Todas las filas tienen una columna llamada id_jefe, que contiene el Id del jefe de cada empleado. Podemos combinar la tabla persona con la tabla persona, pero, en SQL no se acepta la siguiente consulta:

persona JOIN persona

Hay que proporcionar dos alias diferentes para la misma tabla de la siguiente manera:

SELECT * FROM persona AS empleado JOIN persona AS jefe   ON empleado.id_jefe = jefe.id;

Gracias a los alias, el motor de la base de datos puede utilizar dos veces la misma tabla (persona), la primera vez para buscar a los empleados y, la segunda, para buscar a sus jefes.

Ejercicio

Queremos saber quién vive en la misma habitación que el alumno Juan García. Utilice la autocombinación para mostrar todas las columnas del alumno Juan García junto con todas las columnas de cada alumno que vive con él en la misma habitación.

Excluir al propio Juan García del resultado.

SELECT * FROM alumno AS alumno1 JOIN alumno AS alumno2     ON alumno1.id_de_habitacion = alumno2.id_de_habitacion WHERE alumno1.nombre = ‘Juan García’ AND alumno1.id <> alumno2.id;

Combinar más tablas

También se puede usar más de una combinación en nuestra consulta de SQL. Digamos que también queremos mostrar toda la información de las habitaciones de los alumnos que viven con Juan García. Lamentablemente, la información del tipo: número de habitación o piso no se almacena en la tabla alumno; necesitamos crear otra combinación con la tabla habitación. Podríamos hacerlo de la siguiente manera:

SELECT * FROM alumno AS s1 JOIN alumno AS s2   ON s1.id_de_habitacion = s2.id_de_habitacion JOIN habitación   ON s2.id_de_habitacion = habitacion.id WHERE s1.nombre = ‘Juan García’ AND s1.nombre != s2.nombre;

Ejercicio

El reto es el siguiente: para cada habitación con 2 camas en la que haya realmente 2 alumnos, queremos mostrar una fila que contenga las siguientes columnas:

El nombre del primer alumno.

El nombre del segundo alumno.

El número de la habitación.

No cambiar ningún nombre de columna. Cada par de alumnos solo debe mostrarse una vez. El alumno cuyo nombre sea el primero en el alfabeto debe mostrarse primero.

Una pequeña pista: en términos de SQL, "primero en el alfabeto" significa "menor que" en los valores de texto.

SELECT   st1.nombre,   st2.nombre,   numero_de_habitacion FROM alumno st1 JOIN alumno st2   ON st1.id_de_habitacion = st2.id_de_habitacion JOIN habitación   ON st1.id_de_habitacion = habitacion.id WHERE st1.nombre < st2.nombre AND camas = 2;

 

sábado, 20 de abril de 2024

Fotos en Blanco y Negro con Photoshop

El color en una fotografía es indispensable cuando los colores y sombras, o los tonos, de la imagen son distintivos y vivos. La fotografía en blanco y negro es la mejor opción si desea centrarse en el sujeto y las texturas de una imagen sin distraerse con los colores, o si el sujeto no tiene una gama muy alta de colores (como una locomotora herrumbrosa) los efectos en blanco y negro pueden ayudar a resaltar el dramatismo de las imágenes.

Aquí propongo el método más fácil que utiliza el canal de luminosidad desde el modo Color Lab y nos proporciona una buena imagen en blanco y negro.

Para convertir fácilmente una imagen en color a blanco y negro podemos seguir estos pasos que se indican a continuación:

Abrimos la foto en color que queremos transformar a blanco y negro, duplicamos la foto desde el menú Imagen -> Duplicar.

Fotos en Blanco y Negro con Photoshop


 
 y pulsamos ok cambiando el nombre al archivo

 

Fotos en Blanco y Negro con Photoshop

Abrimos el menú Imagen -> Modo -> Color Lab

 

Color Lab Photoshop

Esto aparentemente no hace nada, por debajo nuestra imagen se convierte de modo RGB a modo Color Lab, la diferencia está en los canales de color que veremos a continuación.

Vamos al menú canales bajo el menú ventana

Canales de Color Lab

Y se abre la ventana de canales, en la cual en vez del típico RGB vemos los canales Lab, Luminosidad y a y b (bajando el scroll).

Estos canales nos permitirán ajustar nuestra foto a modo en blanco y negro de forma mucho más precisa y el resultado será más espectacular que utilizando los canelas por defecto RGB.

Pulsamos sobre el canal luminosidad para hacerlo activo y la foto se nos pone automáticamente en blanco y negro.

 

Canal luminosidad photoshop

Ahora volvemos al menú imagen-> modo y elegimos escala de grises y pulsamos ok.

 

Escala de grises photoshop

Escala de grises photoshop

Ahora echamos un vistazo a nuestra foto para ver si es demasiado clara o demasiado oscura.

Si es demasiado clara:

Vamos al panel de capas 

 

Panel de capas photoshop

Pulsamos sobre la capa fondo y Ctrl –J lo que nos duplica la capa fondo. Para hacer esta capa más oscura cambiamos el combo de arriba a Multiplicar

 

Panel de capas photoshop

Esto hace nuestra imagen algo más oscura.

Si la foto es demasiado oscura:

Seguimos los mismos pasos que en el paso anterior, pero en vez de dejar el combo en Multiplicar, lo dejamos en Normal.

Para dejar la foto a nuestro gusto podemos mover la barra de desplazamiento Opacidad, como nos convenga.

Panel de capas photoshop
 

Y ya lo tenemos, una vez esté a nuestro gusto guardamos la foto en archivo -> guardar.

Fotos en Blanco y Negro con Photoshop
Si te gusta esta foto la puedes descargar aquí


 

sábado, 6 de abril de 2024

Clausula JOIN en Lenguaje SQL

Los JOINs en SQL sirven para combinar filas de dos o más tablas basándose en un campo común entre ellas, devolviendo por tanto datos de diferentes tablas. Un JOIN se produce cuando dos o más tablas se juntan en una sentencia SQL.

En el gráfico que se muestra a continuación, cada tabla se representa como un conjunto (diagrama de Venn) lo que nos da una idea de las filas de que tabla devuelve cada JOIN diferente.

Clausula JOIN en Lenguaje SQL


Unión de varias tablas.

Este es el JOIN más sencillo posible.

SELECT * FROM tabla1, tabla2;

SQL toma cada fila de la tabla1 y la une con todas las filas de la tabla2. Así que si tenemos 8 filas en la tabla 1 y 5 en la tabla2 tendremos 8 * 5 = 40 filas. Es decir hace un producto cartesiano.

¿Por qué ocurrió esto? SQL no sabe qué hacer con los resultados de las dos tablas, así que, devolvió todas las combinaciones posibles. ¿Cómo podemos cambiar este resultado? 

SELECT * FROM tabla1, tabla2 WHERE tabla1.id_tabla1 = tabla2.id_tabla1;

Establecimos una nueva condición en la cláusula WHERE. Ahora, solo vemos las conexiones en las que el id de la tabla1  es el mismo que el id_tabla1 de la tabla 1 definido en la tabla2.

Si hay varias tablas, hay que referirse a las columnas indicando el nombre de la tabla y de la columna separados por un punto (.). Así, la columna id_tabla1 de la tabla2 se convierte en tabla2.id_tabla1 y, así, sucesivamente.

Se debe relacionar la clave primaria de cada tabla, así por ejemplo, el id de la tabla1  aparece en la tabla2 en el campo id_tabla1.

Combinar dos tablas es una operación tan popular y frecuente que SQL proporciona una palabra especial para ello: JOIN. Existen varios tipos de JOIN

Combinar tablas con JOIN

Observa el siguiente ejemplo:

SELECT * FROM Tabla_persona JOIN Tabla_coche ON Tabla_persona.id = Tabla_coche.id_propietario;

Queremos combinar las tablas Tabla_persona y Tabla_coche, por lo que utilizamos la palabra clave JOIN entre sus nombres.

SQL también necesita saber cómo combinar las tablas, así que, usamos otra palabra clave (ON). Tras ella, establecemos nuestra condición: combinar solamente aquellas filas en las que el id de persona sea el mismo que el id_propietario de coche.

INNER JOIN

JOIN es, en realidad, solo uno de los diferentes métodos que existen para hacer combinaciones en SQL. Es el más común, por lo que siempre se aplica de forma predeterminada cuando se escribe la palabra clave JOIN en las consultas de SQL. Pero, técnicamente hablando, su nombre completo es INNER JOIN.

La consulta del ejercicio anterior también puede escribirse de la siguiente manera:

SELECT * FROM Tabla_persona INNER JOIN Tabla_coche  ON Tabla_persona.id = Tabla_coche.id_propietario;

Las INNER JOIN (o JOIN) solo muestran las filas de las dos tablas en las que las columnas coinciden. Solo se devuelven las personas que son propietarias de un coche, y viceversa. Las personas que no son propietarios de un coche no aparecen en el resultado.

Las personas que tienen el valor NULL en la columna id_propietario no aparecen en el resultado de la INNER JOIN.

LEFT JOIN

Las LEFT JOIN devuelven todas las filas de la tabla izquierda (la primera tabla de la consulta) más todas las filas que coinciden de la tabla derecha (la segunda tabla de la consulta).

SELECT * FROM tabla1 LEFT JOIN tabla2   ON tabla1.id_tabla1 = tabla2.id_tabla1;

RIGHT JOIN

Las RIGHT JOIN devuelven todas las filas de la tabla derecha (la segunda tabla de la consulta) más todas las filas que coinciden de la tabla izquierda (la primera tabla de la consulta).

SELECT * FROM tabla1 RIGHT JOIN tabla2  ON tabla1.id_tabla1 = tabla2.id_tabla1;

La RIGHT JOIN devuelve todas las filas de la tabla anterior. El orden de las tablas en las LEFT y RIGHT JOIN es importante. En otras palabras, tabla1 RIGHT JOIN tabla2 es lo mismo que tabla2 LEFT JOIN tabla1. 

FULL JOIN

Este tipo de JOIN devuelve todas las filas de ambas tablas y combina las filas cuando hay una coincidencia. Una FULL JOIN es una unión de una LEFT JOIN y una RIGHT JOIN.

SELECT * FROM tabla1 FULL JOIN tabla2   ON tabla1.id_tabla1 = tabla2.id_tabla1;

OUTER

Las tres combinaciones que acabamos de mencionar LEFT JOIN, RIGHT JOIN y FULL JOIN son abreviaturas. Todas ellas son, en realidad, tipos de OUTER JOIN (LEFT OUTER JOIN, RIGHT OUTER JOIN y FULL OUTER JOIN). Se las puede añadir la palabra clave OUTER y los resultados de las consultas seguirán siendo los mismos.

Por ejemplo, para la LEFT JOIN se podría escribir lo siguiente:

SELECT * FROM tabla1 LEFT OUTER JOIN tabla2 ON tabla1.id_tabla1 = tabla2.id_tabla1;

NATURAL JOIN

No requiere la cláusula ON con la condición de la combinación:

SELECT * FROM tabla1 NATURAL JOIN tabla2;

Para los NATURAL JOIN no hace falta escribir los nombres de columnas, porque siempre combinan las dos tablas en base a las columnas que tienen el mismo nombre.

En este ejemplo, la tabla1 y la tabla2 se combinan en base a sus respectivas columnas de id, lo que no tiene mucho sentido.

SELECT * FROM tabla1 NATURAL JOIN tabla2; 

devuelve el mismo resultado que la siguiente consulta:

SELECT * FROM tabla1 JOIN tabla2 ON alumno.id_tabla1= habitacion.id_tabla2;

Sin embargo, podemos crear las tablas de forma que las NATURAL JOIN sean útiles. Si tuvieramos las siguientes tablas:

coche(id_coche, marca, modelo) 

propietario(id_del_propietario, nombre, id_coche)

Entonces, tendría mucho sentido utilizar NATURAL JOIN, porque combinaría las dos tablas en base a la columna id_coche. Por lo que, habría que escribir menos para combinar las dos tablas.


viernes, 8 de marzo de 2024

Clausula WHERE en Lenguaje SQL

En una instrucción SQL, la cláusula WHERE especifica criterios que tienen que cumplir los valores de campo para que los registros que contienen los valores se incluyan en los resultados de la consulta.

Aparece obligatoriamente después de SELECT [lista de campos] FROM [lista de tablas] WHERE

Clausula WHERE en Lenguaje SQL


Después de WHERE podemos añadir los operadores necesarios

Operadores condicionales: =, !=, <, >, <= , >=

Símbolo de distinto puede ser  != o <>

Por ejemplo

SELECT * FROM nombre_tabla WHERE campo <> 1999

SELECT * FROM nombre_tabla WHERE campo != 1999

Devolverán el mismo resultado.

Operadores lógicos: OR, AND

Los operadores AND, OR y NOT son operadores lógicos importantes en SQL. Ayudan a combinar las condiciones utilizadas para filtrar los registros.

SELECT campo4 FROM nombre_tabla WHERE campo1 < 2005 OR campo2 < 10000

Operador BETWEEN  en Oracle incluye los extremos

SELECT * FROM nombre_tabla WHERE campo BETWEEN 2 AND 4;

Saca 2,3 y 4

Operador NOT

Se quitará de los resultados todo lo que se indique después de NOT

SELECT campo1, campo2, campo3 FROM nombre_tabla WHERE campo3 NOT BETWEEN 1995 AND 2005;

Combinación de condiciones

Para combinar condiciones se utilizan paréntesis

SELECT campo1 FROM nombre_tabla WHERE (campo2 < 1999 OR campo2 > 2005) AND ( campo3 < 4000 OR campo3 > 10000);

Operador LIKE y %

¿qué pasa si no sabemos exactamente qué letras estamos buscando? Con los valores tipo texto, siempre se puede utilizar el operador LIKE en lugar del signo igual

Con LIKE se puede usar del signo de porcentaje (%). El signo de porcentaje que se aplica en el ejemplo equivale a cualquier número (cero o más) de caracteres desconocidos.

Como resultado, obtendremos todos los valores cuyo nombre empiece por la letra "F". Es posible que no recordemos el nombre exacto de un valor, pero sabemos que empieza por F.

SELECT campo1, campo2, campo3 FROM nombre_tabla WHERE campo1 LIKE 'F%';

El signo de porcentaje (%) se puede poner en cualquier lugar dentro de las comillas simples y tantas veces como sea necesario.

SELECT * FROM nombre_tabla WHERE campo LIKE '%A%';

Seleccionará cualquier valor cuyo nombre contenga al menos una "A".  El signo de porcentaje (%) también puede equivaler a no tener a ningún carácter, por lo que el nombre también puede empezar o terminar con la "A".

Carácter de subrayado (_)

Es posible que, a veces, no recordemos solo una letra de un nombre concreto. Imagina que queremos encontrar a una chica que se llama... ¿Catherine? ¿Katherine?

SELECT * FROM nombre_tabla WHERE nombre LIKE '_atherine';

El carácter de subrayado (_) coincide exactamente con un solo carácter. Ya sea Catherine o Katherine, la expresión devolverá una fila.

NULL

NULL es un valor especial. No se puede utilizar el signo de igual para comprobar si algo es NULL. Básicamente, no funcionará, se utiliza  IS NULL.

SELECT campo1, campo2, campo3 FROM nombre_tabla WHERE campo IS NULL;

Esta consulta devolverá solo las filas cuyo campo es null, es decir es desconocido.

SELECT * FROM nombre_tabla WHERE campo IS NULL;

Si se establece una condición en una columna concreta, por ejemplo,  campo < 70, las filas en las que la edad sea NULL quedarán siempre excluidas de los resultados.

En ningún caso NULL es igual a cero.

SELECT * FROM nombre_tabla WHERE campo > 0;

No devolverá los registros con campo NULL

NOT NULL

Para comprobar si una columna tiene un valor, utilizamos la instrucción especial IS NOT NULL.

SELECT campo1 FROM nombre_tabla WHERE campo2 IS NOT NULL;

Este código selecciona solo las filas que tienen cuyo campo2 tiene un valor no nulo.

Operadores matemáticos básicos

SELECT * FROM nombre_tabla WHERE (campo * 12) > 50000;

En el ejemplo anterior, utilizamos el asterisco (*) para multiplicar valor del campo por 12 y, así, si campo es un salario mensual, obtendremos el salario anual. A continuación, podemos hacer lo que queramos con el nuevo valor; en este caso, lo comparamos con 50.000 €.

De este modo, se pueden usar signos para sumar (+), restar (-), multiplicar (*) y dividir (/) números.

Ejemplo: Seleccionar los artículos para los que se pagan más de 2000 € en impuestos. El importe de los impuestos de todos los artículos es el 20 % de su precio. Se multiplica que el precio por 0.2 para obtener el importe de los impuestos.

SELECT * FROM artículos WHERE precio * 0.2 > 2000;

Ejercicio

Seleccionar todas las columnas de artículos que cumplan lo siguiente:

se fabricaron entre 1999 y 2005;

no son marca ACME;

su modelo que empieza por "P" o "F";

tienen fijado un precio;

SELECT * FROM coche WHERE fecha_de_produccion BETWEEN 1999 AND 2005 AND marca != 'ACME' AND (modelo LIKE 'P%' OR modelo LIKE 'F%') AND precio IS NOT NULL;

sábado, 24 de febrero de 2024

Buscar una cadena de texto en múltiples archivos en Notepad++

Hay veces que queremos buscar una palabra en muchos archivos diferentes y no podemos estar abriendo y cerrando archivos porque pueden incluso ser miles. Para ello hay una función muy útil en Notepad++ que se llama buscar en archivos y permite buscar una cadena de texto en todos los archivos de una carpeta o incluso en sus subcarpetas.

Para ello desde Notepad++ pulsamos Buscar-> Buscar en archivos.

Buscar una cadena de texto en múltiples archivos en Notepad++


Esto nos abre un cuadro de diálogo donde le indicaremos el texto a buscar, los filtros de archivo (si queremos que busque en todos pondremos *.*, si queremos que busque solo en .txt podemos poner *.txt) En carpeta, le indicaremos la carpeta en la que queremos que realice la búsqueda, si queremos incluir subcarpetas, podemos chequear el checkbox "En todas las subcarpetas" que está a la derecha.

Pulsamos el botón buscar todo y buscará la cadena de texto en todos los archivos dentro de la carpeta o/y subcarpetas.

Buscar una cadena de texto en múltiples archivos en Notepad++


AL finalizar la búsqueda abrirá una ventana de resultados, podremos ver en que archivos y líneas se encontró la cadena de texto.

Buscar una cadena de texto en múltiples archivos en Notepad++


Podemos hacer clic en los resultados para ir directamente a esa ubicación en el archivo. Con el botón derecho del ratón desde la ventana de resultados podemos abrir los ficheros que contengan la cadena buscada.