Lo que vas a hacer
Una base de datos es muy buena respondiendo preguntas sobre muchas filas a la vez: cuántas hay, cuántas de cada tipo, cuáles no tienen nada. En esta lección le haces cuatro preguntas a la base de datos de la tienda con COUNT, GROUP BY, JOIN y LEFT JOIN. No cambias nada.
Antes de empezar
Nota
Pulsa Iniciar el laboratorio en la barra de arriba de esta lección y espera a que diga que está en marcha. La primera vez tarda un poco más, porque en ese momento se crea la base de datos de la tienda. Cada botón Ejecutar de abajo escribe su comando en el terminal de tu laboratorio, uno detrás de otro y en la misma sesión. Para verlos, o para escribir los tuyos, pulsa Abrir el terminal (pestaña nueva) en la barra.
1. Dile al terminal cómo entrar
Son los mismos dos comandos de Fundamentos de SQL. El primero deja que el cliente acepte el certificado propio de MySQL. El segundo crea el nombre corto sql, que sirve para entrar en la base de datos shop y ejecutar una sentencia. Si el terminal se ha reiniciado, vuelve a ejecutarlos: no pasa nada.
printf '[client]\nssl-verify-server-cert=0\n' > ~/.my.cnfSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
alias sql='mariadb -h db -u student -pstudent shop -t -e'Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
2. Cuenta filas
COUNT(*) cuenta filas. AS customers le pone nombre a la columna de la respuesta. La tienda tiene 40 clientes.
sql "SELECT COUNT(*) AS customers FROM customers"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
3. Cuenta cada tipo
GROUP BY country crea una fila de respuesta por cada país, y COUNT(*) cuenta los clientes de cada uno. ORDER BY customers DESC pone primero el número más grande. El Reino Unido (United Kingdom) tiene 14.
sql "SELECT country, COUNT(*) AS customers FROM customers GROUP BY country ORDER BY customers DESC LIMIT 3"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
4. Cuenta en dos tablas
Cada producto guarda su categoría solo como un número. JOIN pone al lado el nombre de la categoría, y así puedes contar los productos de cada una. Books, Kitchen y Outdoors tienen cinco cada una. Dos productos no tienen categoría, así que un JOIN los deja fuera.
sql "SELECT categories.name, COUNT(*) AS products FROM products JOIN categories ON products.category_id = categories.id GROUP BY categories.name ORDER BY products DESC LIMIT 4"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
5. Encuentra lo que falta
Un JOIN normal solo conserva las filas que coinciden. LEFT JOIN conserva a todos los clientes y pone NULL donde no hay ningún pedido que coincida. WHERE orders.id IS NULL se queda solo con esos: los cuatro clientes que nunca han hecho un pedido.
sql "SELECT customers.first_name, customers.country FROM customers LEFT JOIN orders ON orders.customer_id = customers.id WHERE orders.id IS NULL"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Para el profesorado
Consejo
Esta lección es un pequeño ejemplo de una lección practicada en un laboratorio: los pasos y los botones Ejecutar son la lección, y el laboratorio es la copia propia de cada alumno. Usa el mismo laboratorio de MySQL que Fundamentos de SQL, así que el atajo sql y el historial del alumno se conservan. La base de datos de la tienda se hizo a propósito con cosas que encontrar: clientes que nunca compraron, productos que nunca se vendieron y valores que faltan. Puede copiar la lección en su propio módulo y cambiarla, o crear otra desde cero con el menú Laboratorio del creador de lecciones.