Luis Andrés Martínez Peraza
Mateo Posada
Julián Cárdenas
¿Qué debes saber sobre las sentencias SQL?
Cuando se trata de interactuar con bases de datos relacionales, las sentencias SQL son una herramienta fundamental que debes dominar. Este conocimiento es esencial no solo para las consultas básicas, sino también para operaciones más complejas. En este artículo, daremos un repaso a estas sentencias fundamentales que ayudarán en la gestión efectiva de bases de datos.
¿Cómo utilizar el entorno de trabajo y herramientas recomendadas?
Antes de sumergirnos en las sentencias, es importante familiarizarte con las herramientas que utilizaremos. Durante este curso, se usarán las mismas técnicas y herramientas del curso de PostgreSQL. Para la parte visual, se recomienda utilizar la herramienta "pgAdmin" que facilita la interacción con la base de datos.
Consejos:
¿Qué es la sentencia SELECT?
La sentencia SELECT es una de las más básicas y esenciales en SQL. Su propósito es extraer datos de una base de datos según las columnas que necesites.
Por ejemplo, si deseas obtener los datos más recientes de una tabla, podrías ejecutar una consulta así:
SELECT MAX(fecha_actualizacion) AS fecha_ultima_actualizacion FROM peliculas;
En este caso, estamos seleccionando la fecha más reciente de actualización de la tabla peliculas y asignándole un alias más legible.
¿Cómo filtrar con la cláusula WHERE?
La cláusula WHERE es crucial para filtrar datos conforme a ciertas condiciones. Por ejemplo, para extraer datos de películas cuyo periodo de renta supera los tres días, podríamos aplicar esta condición:
SELECT * FROM peliculas WHERE duracion_renta > 3;
Esta cláusula te ayudará a centrarte solo en los datos relevantes y a reducir la cantidad de información que necesitarás procesar.
¿Cómo agrupar y ordenar datos?
Dos sentencias importantes que complementan el manejo de datos en SQL son GROUP BY y ORDER BY.
GROUP BY: Sirve para agrupar filas que tienen el mismo valor en columnas especificadas, ideal para agregar datos y realizar funciones como COUNT, SUM, etc.
SELECT clasificacion, COUNT(*) AS cantidad_peliculas FROM peliculas GROUP BY clasificacion;
ORDER BY: Permite ordenar la información según el criterio seleccionado, lo que facilita la lectura y el análisis de datos.
SELECT * FROM peliculas ORDER BY fecha_actualizacion DESC;
Ambas clausulas son esenciales para presentar datos de manera efectiva y comprensible.
Practica y ten las sentencias claras
Este fue un breve repaso por las sentencias básicas de SQL. Un punto clave es mantener siempre presente cómo y cuándo usar cada una. Practicar con ejemplos cotidianos ayuda a fortalecer este conocimiento. Aunque este artículo presenta un caso hipotético de una base de datos de alquiler de películas, en futuras lecciones se profundizará más sobre cómo aplicar estas herramientas en proyectos reales.
Mantén estas sentencias en mente mientras desarrollas tus habilidades en el mundo de las bases de datos. ¡El aprendizaje continuo es la clave del éxito!
Luis Andrés Martínez Peraza
Mateo Posada
Julián Cárdenas
JUAN SILVA
Jordan Sobrino Santos
Juan Pablo Reina Gutierrez
Marcos CB
Fabianini PRZ®
José Rodrigo Arana Hi
Israel Yance
Karla Verónica Álvarez Vázquez
rusbel bermúdez rivera
Mauricio Gomez
Antonio Demarco Bonino
Daniel Jacales
Daniel Alejandro Caicedo Benavides
Andrés Naranjo Z.
Julian Carmona García
JUAN DAVID PALACIOS MACHADO
José Rodrigo Arana Hi
Bryan
Fernando Pullutasig
Fernando Pullutasig
Federico Di Pasquale
Andres Sanchez
Jhins Ledys Cárdenas Pardo
Roger Christian Cansaya Olazabal
Yair Enrique Mendoza Mendoza
DAVID FERNANDO BRAVO SANABRIA
José Arturo Melgar Martínez
Delfina Merola Moreschi
Erik Elyager
Alejandro Sánchez
Diego Forero
Team Platzi¡Pilas con la función count() !
Count(*) : Cuenta la cantidad de registros (Cantidad de filas) de la consulta (todas, sin discriminar si son duplicados).
Count(Distinct <Campo objetivo >) : Cuenta la cantidad distinta de registros de la consulta (discriminando duplicados, considerando solo los campos únicos).
Ejemplo:
select Count(*) from public.pagos; --resultado: 14596 select Count(cliente_id) from public.pagos; --resultado: 14596 select Count(distinct cliente_id) from public.pagos; --resultado: 599
PD: tengamos presente que según la bd que utilicemos puede ser considerado, o no, los campos nulos. Siempre esta bueno verificar lo que puede parecer obvio, cuando pasas de un motor de bd a otro.
que buen aporte lo mismo me estaba preguntando
Super buen aporte!!
Recuerden que para abrir esta base de datos deben seguir los siguientes pasos:
finalmente queda importada la base de datos platzivideos
Recuerden que siempre pueden usar la siguiente clase para restaurar la base de datos, es muy importante que carguen por completo toda la carpeta zipeada.
https://platzi.com/clases/1480-postgresql/24195-backups-y-restauracion/
Gracias. Gran aporte.
Buen ejemplo pero creo que el MAX sobre ultima_actualizacion no sería necesario dado que se usa más adelante en el GROUP BY.
Sí, el MAX no estaba haciendo nada en esta consulta, porque a la final se estaban mostrando todas las fechas.
ya decia yo, que lo que arrojaba el query estaba muy raro
Este es la clase de instalación de PostgreSQL: https://platzi.com/clases/1480-postgresql/24177-instalacion-y-configuracion-de-la-base-de-datos/
Pero recomiendo que ya tengan conocimientos o hayan llevado el curso.
Programación en SQL con PostgreSQL
Muy buen aporte
ufff que buena clase!! Fundamentos de SQL en 6 minutos
Salió bien el código:
SELECT MAX(ultima_actualizacion) AS fecha_ultima_actualizacion, clasificacion, COUNT (*) AS cantidad_peliculas FROM peliculas WHERE duracion_renta > 3 GROUP BY clasificacion, ultima_actualizacion ORDER BY fecha_ultima_actualizacion;
Me pongo contento que el código se haya ejecutado de 10:
Hola les comparto este otro programa alternativo a pgadmin https://www.beekeeperstudio.io/ A mi me ha gustado mucho ya que es ligero y maneja distintos motores (mongo,oracle,postgres y otros más) . Ademas la interfaz es muy buena.
Para quienes usan Docker y Docker Compose.
en tu editor de código crea un archivo llamado docker-compose.yaml y copia y pega lo siguiente:
services: db: image: postgres:latest restart: always ports: - "5432:5432" # Puerto por defecto de PostgreSQL environment: POSTGRES_USER: ${POSTGRES_USER} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} volumes: - ./database:/var/lib/postgresql/data - ./data:/usr/src/data networks: - mynetwork pgadmin: image: dpage/pgadmin4:latest restart: always ports: - "8080:80" # pgAdmin en el puerto 8080 environment: PGADMIN_DEFAULT_EMAIL: ${PGADMIN_DEFAULT_EMAIL} PGADMIN_DEFAULT_PASSWORD: ${PGADMIN_DEFAULT_PASSWORD} volumes: - ./pgadmin:/var/lib/pgadmin - ./data:/usr/src/data depends_on: - db # Asegura que pgAdmin se inicie después de la base de datos networks: - mynetwork networks: mynetwork: # Definir una red común para que ambos servicios se puedan comunicar driver: bridge ```Recuerda también crear el archivo `.env ` ```js # Variables para la base de datos PostgreSQL POSTGRES_USER=postgres POSTGRES_PASSWORD=secret_password # Variables para pgAdmin PGADMIN_DEFAULT_EMAIL=admin@gmail.com PGADMIN_DEFAULT_PASSWORD=secret_pgadmin ```Listo ve a tu navegador y escribe  `localhost:8080 ` ingresa las credenciales y listo 
Muy buen repaso, faltó únicamente el LIMIT y el HAVING
La funcion max no deberia traer un solo valor que sería la fecha maxima de esa columna, por que trae varias fechas ?
Hola, es resultado del GROUP BY, las funciones de agregación como MAX, y COUNT cuando son utilizadas de esta forma requieren que posteriormente tú identifiques cómo se han de visualizar.
si sale, pero es que en el group by le pusieron ultima_actualizacion, y en lo particular no entiendo (aun) lo que arroja el query.
Alguien me ayuda?
Estoy trabajando con MySQL y no tengo la posibilidad de hacer restore. La solucion que encontre es modificar los archivos a .csv e importarlos directamente. Hay que crear las tablas previamente ya que los documentos no traen headers
6. Principales sentencias SQL
SELECT MAX(ultima_actualizacion) AS fecha_ultima_actualizacion, clasificacion, COUNT(*) AS cantidad_peliculas FROM peliculas WHERE duracion_renta > 3 GROUP BY clasificacion, ultima_actualizacion ORDER BY fecha_ultima_actualizacion ;
Para tener en cuenta. En ORDER BY el orden por defecto es ascendente pero si se desea lo contrario entonces se debe especificar DESC despues del nombre del campo en ORDER BY
Me parece que el ejemplo debia ser de la siguiente manera :
SELECT MAX(ultima_actualizacion) AS fecha_ultima_actualizacion, clasificacion, COUNT(*) AS cantidad_peliculas FROM peliculas WHERE duracion_renta > 3 GROUP BY clasificacion ORDER BY fecha_ultima_actualizacion, clasificacion
: sin la agrupacion por ultima_actualizacion ya que anula el uso del Max.
Al momento de realizar la restauración de la base de datos "platzimovies", me salia este error . Tenía pgAdminIII
Error file "couldn't be moved (error 2: No such file or directory)
Encontré la solución en:
Ahí explican que es debido a que en pgAdminIII hacen la restauración con este comando
$ pg_restore -d <DBNAME> --username=postgres g=<FILENAME>
Lo que genera el error :
pg_restore: [archiver] could not open input file "g=<FILENAME>": No such file or directory
y en pgAdmin4 cambiaron a :
$ pg_restore -d <DBNAME> --username=postgres <FILENAME>
Por lo que puedes ejecutarlo desde la terminal aún con pgAdmin3 o simplemente cambiar a pgAdmin4
https://www.pgadmin.org/download/[](https://www.pgadmin.org/download/)
Muy buen aporte!
/*Sentencias SQL: Select, Where, Group By y Order By */ SELECT MAX(ultima_actualizacion) AS fecha_ultima_actualizacion, clasificacion, COUNT(*) as cantidad_peliculas FROM peliculas WHERE duracion > 3 group by clasificacion ,ultima_actualizacion order by fecha_ultima_actualizacion;
No puedo importar la tabla de platzimovies. Actualicé postgress, reinicié la PC y me da este error: pg_restore: [archiver] versi�n no soportada (1.14) en el encabezado del archivo
Es un problema de versiones, mira acá el comentario de un compañero en el que le funciona con la versión 12.
Yo si tengo una pregunta y es la siguiente: como desarrollador que me recomiendan. Nombrar las columnas de mis tablas en inglés o en español?
Es mejor en ingles, una de las razones es porque en ingles no se usan acentos ni caracteres extraños como la ñ.