De dos tipos
Devolvé los NOMBRES de los Pokémon que sean de tipo `t1` o `t2`. Pista: WHERE tipo IN (?, ?).
Entrá y llevá tu progreso —ejercicios, medallas y Pokémon— a cualquier dispositivo. 🔄
Si tu cuenta ya tiene progreso guardado, se carga ese al entrar.
Entraste como . Tu progreso se sincroniza solo. 🔄
Devolvé los NOMBRES de los Pokémon que sean de tipo `t1` o `t2`. Pista: WHERE tipo IN (?, ?).
🎯 Meta: hacerle preguntas a la base: filtrar con WHERE, ordenar con ORDER BY, buscar texto con LIKE y cortar con LIMIT.
Tener los datos está bueno, pero la gracia es consultarlos: ¿quiénes superan el nivel 50? ¿los de tipo Fuego? ¿los 3 más fuertes?
import sqlite3
con = sqlite3.connect(":memory:")
con.execute("CREATE TABLE pokemon (nombre TEXT, nivel INTEGER, tipo TEXT)")
con.executemany("INSERT INTO pokemon VALUES (?, ?, ?)", [
("Pikachu", 25, "Electrico"), ("Charizard", 90, "Fuego"),
("Bulbasaur", 12, "Planta"), ("Snorlax", 70, "Normal"),
])
for fila in con.execute("SELECT nombre FROM pokemon WHERE nivel >= ?", (50,)):
print(fila[0])
💡 WHERE filtra filas por una condición. Y de nuevo: el valor va con ? y una tupla (50,).
P: ¿Qué cláusula SQL filtra filas por una condición?
- ORDER BY
+ WHERE
- GROUP BY
> `WHERE` filtra qué filas entran al resultado. `ORDER BY` ordena el resultado y `GROUP BY` agrupa para calcular resúmenes.
import sqlite3
con = sqlite3.connect(":memory:")
con.execute("CREATE TABLE pokemon (nombre TEXT, nivel INTEGER)")
con.executemany("INSERT INTO pokemon VALUES (?, ?)", [("Pikachu", 25), ("Charizard", 90), ("Bulbasaur", 12)])
# DESC = de mayor a menor (ASC sería al revés)
for nombre, nivel in con.execute("SELECT nombre, nivel FROM pokemon ORDER BY nivel DESC"):
print(nombre, nivel)
LIKE busca patrones. % significa “cualquier cosa”.
import sqlite3
con = sqlite3.connect(":memory:")
con.execute("CREATE TABLE pokemon (nombre TEXT)")
con.executemany("INSERT INTO pokemon VALUES (?)", [("Charizard",), ("Charmander",), ("Pikachu",)])
# nombres que empiezan con "Char"
for fila in con.execute("SELECT nombre FROM pokemon WHERE nombre LIKE ?", ("Char%",)):
print(fila[0])
import sqlite3
con = sqlite3.connect(":memory:")
con.execute("CREATE TABLE pokemon (nombre TEXT, nivel INTEGER)")
con.executemany("INSERT INTO pokemon VALUES (?, ?)", [("A", 10), ("B", 90), ("C", 50), ("D", 70)])
# los 2 de mayor nivel
for fila in con.execute("SELECT nombre FROM pokemon ORDER BY nivel DESC LIMIT 2"):
print(fila[0])
P: ¿Qué hace `ORDER BY nivel DESC`?
- Ordena los Pokémon de nivel más bajo a más alto
- Ordena por nombre en vez de por nivel
+ Ordena de nivel más alto a más bajo
> `DESC` = descendente (mayor a menor). `ASC` sería ascendente (menor a mayor), que es el orden por defecto.
| Cosa | Para qué |
|---|---|
WHERE cond | filtrar filas |
ORDER BY col DESC/ASC | ordenar |
LIKE 'Char%' | buscar por patrón de texto |
LIMIT n | quedarte con n filas |
Practicá con los ejercicios de este tema. 💪
⚡ “Una base sin consultas es una caja cerrada. WHERE es la llave.”