No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Curso Práctico de SQL

Curso Práctico de SQL

Israel Vázquez Morales

Israel Vázquez Morales

Selección (WHERE)

7/29
Recursos

Aportes 46

Preguntas 5

Ordenar por:

Los aportes, preguntas y respuestas son vitales para aprender en comunidad. Regístrate o inicia sesión para participar.

aqui mi resumen

En el operador LIKE Hay 2 comodines que usan comunmente:

  • % - El signo de porcentaje representa 0 o mas caracteres.
  • _ - El guion bajo representa un unico caracter.

Fuente: https://www.w3schools.com/sql/sql_like.asp

<h1>Selección(where)</h1>

WHERE es usado para filtrar registros.
WHERE es cuando para extraer solamente las condiciones que cumplen con esa condición.

SELECT *
FROM tabla_diaria
WHERE id=1;

SELECT *
FROM tabla_diaria
WHERE cantidad>10;

SELECT *
FROM tabla_diaria
WHERE cantidad<100;

Este puede ser combinado con AND ,OR y NOT.

AND y OR son usados para filtrar registros de más de una condición.

  • AND muestra un registro si todas las condiciones separadas por AND son TRUE.
  • OR muestra un registro si alguna de las condiciones separadas por OR son TRUE.
SELECT *
FROM tabla_diaria
WHERE cantidad > 10
	AND cantidad < 100;

SELECT *
FROM tabla_diaria
WHERE cantidad BETWEEN 10
	AND cantidad < 100;

BETWEEN puede ser usado para definir límites.

La separación por paréntesis es muy importante.

SELECT * 
FROM users
WHERE name = "Israel"
	AND (
	lastname = "Vázquez"
	OR
	lastname = "López"
);

SELECT * 
FROM users
WHERE name = "Israel"
	AND 
	lastname = "Vázquez"
	OR
	lastname = "López";

En el primero va a devolver todos los que son Israel Vázquez o Israel López, en el segundo devolverá a todos los que se llaman Israel Vázquez o se apellida López(sólo apellido).

NOT valida que un dato no sea TRUE.

SELECT column1, column2, ...
FROM table_name
WHERE NOT condition;

Para especificar patrones en una columna usamos LIKE. Podemos mostrar diferentes cosas que buscamos.

SELECT *
FROM users
WHERE name LIKE "Is%";

SELECT *
FROM users
WHERE name LIKE "Is_ael";

SELECT *
FROM users
WHERE name NOT LIKE "Is_ael";
  • En el primero, colocamos un % para representar que se va a buscar lo que tenga is% pero que no importa los carácteres después de %.
  • En el segundo le estamos diciendo con _ que puede haber lo que sea en medio de Is y ael.
  • Y en el último le decimos que ponga todas las filas que no sean igual a lo que arriba estabamos buscando.

Igual podemos decir que nos traiga registros que estén vacíos o que no lo estén.


SELECT * 
FROM users
WHERE name IS NULL;

SELECT *
FROM users
WHERE name IS NOT NULL;

Y para seleccionar filas con datos específicos, usamos IN.

SELECT *
FROM users
WHERE name IN ('Israel','Laura','Luis');

un primo del LIKE, es es ILIKE,
con la sintaxis:

SELECT * FROM users WHERE name ILIKE "o%";

este ILIKE hace mach con todos los registros que comiencen con la letra o, ya sea mayúscula o minúscula.

Yo uso diariamente el BETWEEN, LIKE y el IN. Son operadores que entregan mucho poder a tus querys y son faciles de usar! 😄

Igual

SELECT *
  FROM PRUEBAS.ALUMNOS
 WHERE colegiatura = 2000;

Mayor que

SELECT *
  FROM PRUEBAS.ALUMNOS
 WHERE colegiatura > 2000;

Menor que

SELECT *
  FROM PRUEBAS.ALUMNOS
 WHERE colegiatura < 4000;

Entre

Opcion No. 1

SELECT *
  FROM PRUEBAS.ALUMNOS
 WHERE colegiatura > 2000
   AND colegiatura < 4000;

Opcion No. 2

SELECT *
  FROM PRUEBAS.ALUMNOS
 WHERE colegiatura BETWEEN 2000 AND 4000;

And y Or

Opcion No. 1

SELECT *
  FROM PRUEBAS.ALUMNOS
 WHERE nombre = 'Edin'
   AND (apellido = 'Keatch' OR apellido = 'Grishin');

Opcion No. 2

SELECT *
  FROM PRUEBAS.ALUMNOS
 WHERE nombre = 'Edin'
   AND apellido = 'Keatch' 
    OR apellido = 'Grishin';

Comodin que empieza con Al

SELECT *
  FROM PRUEBAS.ALUMNOS
 WHERE nombre LIKE 'Al%';

Comodin que termina con Al

SELECT *
  FROM PRUEBAS.ALUMNOS
 WHERE nombre LIKE '%er';

Comodin que contiene con er

SELECT *
  FROM PRUEBAS.ALUMNOS
 WHERE nombre LIKE '%er%';

Comodin que no contiene con er

SELECT *
  FROM PRUEBAS.ALUMNOS
 WHERE nombre NOT LIKE '%er%';

Comodin que varia la ultima letra

SELECT *
  FROM PRUEBAS.ALUMNOS
 WHERE nombre LIKE 'Ali_'

Null

  SELECT *
  FROM PRUEBAS.ALUMNOS
 WHERE apellido IS NULL;

Not Null

  SELECT *
  FROM PRUEBAS.ALUMNOS
 WHERE apellido IS NOT NULL;

In

 SELECT *
  FROM PRUEBAS.ALUMNOS
 WHERE nombre IN ('Wanda', 'Hilde', 'Veriee');

No es >= y <=???

Wow… nunca había visto lo del comodín Is_ael en el LIKE… Gracias! Es muy útil!

Una clase muy divertida. Con lo que más me quedo es con la explicación de los parentesis que son importantes de contemplar.

where = donde ?

Al menos a mí no me funcionó con:

"I%"

Tuve que usar comillas simples:

'I%'

Proyeccion para tener el total de alumnos por el dominio que tienen sus correos

<SELECT split_part(email, '@', 2) AS domain, count(distinct(id)) as alumnos FROM platzi.alumnos
group by domain
order by alumnos desc> 

Mis notas personales sobre WHERE:

te entiendo porque e llevado ya sql para preincipientes pero creo que tus videos falta la practica, bueno mas en estos de inicio
en youtube esta este Cursos SQL SERVER “https://www.youtube.com/c/deividcopteroPLUS” el canal de deividcoptero Programación esta sencillos y paso a paso , Saludos banda gracias por compratir

SELECT *
FROM alumnos
WHERE nombre NOT IN (
  'Bartolemo',
  'Silvia',
  'Carmelita'
)

La correcta traducción de between es id >= 10 and id <= 100 ya que incluye loas valores de inicio y fin del rango dado.

En la sentencia BETWEEN esta equivocado no es igual que el anterior porque los rangos en BETWEEN incluyen el 10 y 100, en cambio con menor y mayor NO los incluye.
Para que tenga el mismo resultado tendría que ser menor igual y mayor igual

where, donde lo va ubicar a que va buscar y donde.

Con esta simple consulta retorno los alumnos que no tienen apellido.

Segunda parte de la practica.

WHERE es la sentencia que nos ayuda a filtrar tuplas o registros dependiendo de las características que elegimos.

  • La propiedad LIKE nos ayuda a traer registros de los cuales conocemos sólo una parte de la información.

  • La propiedad BETWEEN nos sirve para arrojar registros que estén en el medio de dos. Por ejemplo los registros con id entre 20 y 30

La sentencia WHERE tiene como función la de filtrar los datos de manera lógica, si la condición se cumple entonces se proyectan los datos. Esta sentencia filtra los renglones mientras que el SELECT filtra las columnas.

LIKE O ILIKE

En postgreSQL cuando colocamos la función LIKE nos filtra los datos con los resultados sean en minúscula o mayúscula dependiendo de como lo coloco en la función LIKE, En cambio ILIKE nos filtra la información y no depende si es en mayúscula o minúscula, nos trae todo!

EJEMPLO

SELECT id, nombre, apellido, email, colegiatura 
	FROM platzi.alumnos WHERE nombre = 'Wanda' AND 
	(apellido = 'Stoffer' OR apellido = 'Billington');
SELECT * FROM platzi.alumnos
WHERE colegiatura BETWEEN 3500 AND 4000 

La selección(Simbolo Sigma) = WHERE

Sirve para poner las condiciones para nuestra proyección en su forma más básica.

Selecciona CIERTAS TUPLAS o ROWS, sirve para la optimización de la consulta debido a este filtro.

Ejemplos:

	.....WHERE cantidad >10 AND cantidad <100;
	.....WHERE cantidad BETWEEN 10 AND 100;
... WHERE name = "Diego" AND (lastname = "TORRES" OR lastname = "VASCO")

Uso de LIKE: Es un “parecido”, no queremos una cadena especifica pero si similar con algo que pueda identificar

...WHERE name LIKE "Is%"  #nombre que empieza con Is
....WHERE name LIKE "Is_ael" #nombres que tengan cualquier letra en el _
...WHERE name NOT LIKE "Is_ael" #todas las que no sean como esta
...WHERE name IS/ IS NOT NULL; #Decir que es nulo o no
....WHERE name IN ('pedro','Israel',''  ,)

Hice una consulta para averiguar todos los alumnos que empiezan por v y me fije, no sé si es por la versión, el LIKE en Postgress va con comillas sencillas

<select * from platzi.alumnos where nombre LIKE  'V%' ;> 

![](

Query para categorizar los precios de la colegiatura 😃

SELECT nombre, apellido, colegiatura, carrera,
CASE 
	WHEN colegiatura > 4000 THEN 'CARO'
	WHEN colegiatura BETWEEN 3000 AND 4000 THEN 'BUEN PRECIO'
	ELSE 'Barato'
END AS Precio
FROM platzi.alumnos
INNER JOIN platzi.carreras ON carrera_id = carreras.id
ORDER BY precio DESC
;

Moraleja: Siempre utlicen parentesis 😅

Me encanta!!! Estoy practicando con las tablas que nos brindaron y entiendo mucho mejor todo, he recordado y eliminado varias dudas que pensé que sabía. Muchas gracias, estoy encantada de seguir aprendiendo!!

No tenía claro como funcionaba LIKE

un ejemplo implementando a un stock de productos

SELECT stock FROM productos WHERE stock > 0
SELECT count(nombre_prodcuto) FROM productos

Selección (WHERE)

  • Se representa con la letra sigma
  • Se pueden usar operadores lógicos
  • Función BETWEEN
  • Función LIKE y NOT LIKE con Wildcards
  • Wildcards: % (cualquier cantidad de caracteres), _ (caracter comodín)
  • IS NULL, IS NOT NULL
  • IN ( arreglo_de_nombres, segundo_string, etc.)
5. SELECCIÓN (Where) - Se representa también con el símbolo sgma 
  • SELECT *
    FROM tabla_diaria
    WHERE id = 1;
    Se seleccionan las tuplas cuyo id sea igual a 1. Esta selección aplica para ciertas instancias de un atributo
  • SELECT *
    FROM tabla_diaria
    WHERE id > 1;
    Se seleccionan las tuplas cuyo id sea mayor a 10. Esta selección aplica para ciertas instancias de un atributo
  • SELECT *
    FROM tabla_diaria
    WHERE id < 100;
    Se seleccionan las tuplas cuyo id sea menor a 10. Esta selección aplica para ciertas instancias de un atributo
  • SELECT *
    FROM tabla_diaria
    WHERE cantidad > 10
    AND cantidad < 100;
    Se seleccionan las tuplas cuya cantidad sea mayor a 10 y además sean menores que 100. Esta selección aplica para ciertas instancias de un atributo
  • SELECT *
    FROM tabla_diaria
    WHERE cantidad BETWEEN 10
    AND 100;
    Se seleccionan las tuplas cuya cantidad sea mayor a 10 y además sean menores que 100. Esta selección aplica para ciertas instancias de un atributo. Entre un rango y otro.
  • SELECT *
    FROM users
    WHERE name = "Israel"
    AND (
    lastname = "Vázquez"
    OR
    lastname = “López”
    );
  • SELECT *
    FROM users
    WHERE name = "Israel"
    AND lastname = "Vázquez"
    OR lastname = “López”;
  • SELECT *
    FROM users
    WHERE name LIKE “Is%”; —> Después del % puede venir cualquier cosa.
  • SELECT *
    FROM users
    WHERE name LIKE “Is_ael”; —> Comodín
  • SELECT *
    FROM users
    WHERE name NOT LIKE “Is_ael”; —> Complemento del comodín
  • ELECT *
    FROM users
    WHERE name IS NULL;
  • ELECT *
    FROM users
    WHERE name IS NOT NULL;
    ELECT *
    FROM users
    WHERE name IN (‘Israel’ , ‘Laura’ , ‘Luis’
    ); --> Trae los row cuya columna nombre tenga estos nombres

Alguien me explica cuál es la diferencia entre tener valor valos vacio versus el NULL? gracias

En las últimas consulta queda claro el poder del paréntesis.

SELECT * FROM `deposito` WHERE NombreSucursal IN ('Norte','Centro','Sur')

Consultas de la Practica:

SELECT * FROM platzi.alumnos WHERE apellido IS NOT NULL

SELECT * FROM platzi.alumnos WHERE apellido IS NOT NULL AND (apellido LIKE 'C%' OR apellido LIKE '%st%')

SELECT * FROM platzi.alumnos WHERE apellido IS NOT NULL AND (apellido LIKE 'C%' OR apellido LIKE '%st%') AND nombre NOT IN ('Frederique','Kitty')

IN: incluye los datos de la cadenada (“a”,“b”,etc)
NOT IN: no incluye los datos de la cadena (“a”,“b”,etc)

interesante los temas de like IN NOT NULL
que aplico cuando genera query

para probar lo aprendido en clase compile estos querys y si me funciono, espero que les ayude practicando este tema