2. Consultando con SQL¶
2.1. ¿De qué va este tema?¶
En este curso aprenderás a:
Conocer la sintaxis básica de SQL
Conocer los conceptos básicos de una consulta (comando SELECT)
Conocer los conceptos básicos de varias cláusulas SQL (FROM, WHERE, GROUP BY, HAVING)
Se trata de saber consultar un almacén de datos sencillo (una sola tabla) usando el lenguaje SQL. Para practicar he usado referencias al excelente tutorial de W3Schools . Evitamos las consultas multitabla hasta aprender bien SQL.
Entorno de desarrollo SQL
Para aprender SQL lo mejor es probar directamente. Estas pueden ser tres opciones:
Usar el editor online de W3S . Ya tiene un modelo de datos de referencia.
O puedes probar con sqlite online (o instalado en tu máquina y usando una bd de ejemplo).
O, puedes probar con diferentes SGBD con una BD de referencia, usando este servicio online de consultas sql .
Y, aunque se verá más tarde en el tema de SGBD, puedes usar sqlite porque muy probablemente ya lo tengas instalado en tu sistema.
Curso Videos MOCC
El curso MOCC SQL fácil, fácil te puede ayudar mucho (21 videos fáciles de ver y entender).
2.2. Clases¶
Está organizado en 8 talleres de unas 3 sesiones de clase. En total unas 24 sesiones de clase más tu trabajo en casa.
La dedicación depende del conocimiento previo, motivación y capacidad de aprendizaje del estudiante para esa sesión en concreto.
2.2.1. El Lenguaje SQL¶
S tructured Q uery L anguage -> sql_intro
Qué es y qué se puede hacer #. Aunque hay estándares, cada SGBD tiene su estilo #. Cada SGBD te ofrece una consola para ejecutar sentencias SQL #. Usa un modelo de datos específico: el modelo relacional (todo son tablas)
Sintaxis SQL -> sql_syntax
Siempre basado en tablas (relaciones). Incluso un valor resultado es una tabla (una relación)
Declaraciones SQL compuestas de:
comandos (definen las acciones), p.ej SELECT, UPDATE o DELETE
clausulas (condicionan los datos), p.ej WHERE <expression> o GROUP BY <expr>
expresiones,
… y más.
Revisar la sintaxis básica de una declaración SQL
Usa estos tres ejemplos de código (diferentes SGBD) para entender la sintaxis SQL. No se trata de ejecutarlos.
Cual es el comando SQL
Cual serían las cláusulas
Cuales son los operadores?
¿Cual crees que sería el nombre (o nombres) del campo resultado?
Cuales sería el origen de los datos
¿Hay alguna condicion sobre los datos?
¿Hay algún valor constante en la declaración?
2.2.2. Tipos de Datos y Valores Nulos¶
La consulta más básica es una operación sencilla sin origen de datos (devuelve el resultado de evaluar esa expresión ):
SELECT 1 ; – Cualquier valor lo devuelve, y hay diferentes tipos de datos
SELECT 10 + 14; – Sirve como calculadora y trabaja con números (diferentes tipos de datos)
SELECT (10 < 20); – Y también operadores de comparación y valores boolean (0 o 1)
SELECT “2022-10-01”; – Y fechas, horas y datos de tipo temporal
Aunque depende de los SGBD (sql_datatypes) lo más común es usar estos tipos de datos:
Números: enteros (INT) o decimales ( DECIMAL(n,p)).
Cadenas de Caracteres: VARCHAR(N). Siempre con comillas SIMPLES.
Fechas: DATE / TIMESTAMP. Como si fuera texto
Y más (sql_datatypes)
Recuerda revisar siempre la documentación oficial de tu SGBD (puede haber algunas diferencias).
Hay un montón de operadores (para generar la expresión):
Aritméticos, p.ej + - * /
de Comparación, p.ej < = <>*
Lógicos, p.ej AND OR IN NOT
Y bueno, muchos más (sql_operators)
El valor nulo (NULL) -> sql_null_values
Es un campo que no tiene un valor, o bueno tiene valor NULL
No tiene que ver con que sea 0 o cadena vacía (“”), el SGBD ve que no hay un valor ahí (y puede complicar las consultas)
Necesitas un operador especial para ver si hay valores nulos (operador IS NULL )
Si hay valores nulos tienes que tenerlos en cuenta (y detectarlos con el operador IS )
Practicas con el Tutorial
A medida que avanzas en el curso, repasa el tutorial haciendo los ejercicios que propone. El tutorial tiene también todos los ejemplos agrupados (sql_examples) y un test (demasiado sencillo) de autoevalución (sql_quiz)
2.2.3. El comando SELECT¶
Hacer consultas:
Devuelve 0, 1 o más columnas (campos) con los registros de una tabla (o más de una). Siendo rigurosos devuelve tablas, no valores (aunque a veces no lo parezca)
Especificas qué necesitas (qué campos, de qué orígenes y con qué condiciones), y ejecutas las consultas
Se pueden usar alias (AS -> sql_alias) de campos y tablas (cambio de nombre temporal). P.ej SELECT 10 AS Diez; También vale SELECT 10 «Diez» (o sea que el AS es opcional)
Se usa el comando SELECT -> sql_select
Una versión más rigurosa es el comando SELECT DISTINCT -> sql_distinct. (elimina los valores de registros repetidos).
Especificas el origen de los datos
Lo habitual es especificarlos en la clausula FROM y que sea una tabla
Pero puede ser un origen más complejo: tabla resultado de otras tablas, tablas relacionadas entre sí, otras consultas, expresiones relacionales, etc
En este tema usaremos un solo origen de datos (o ninguno), que estamos empezando
Practicas con el Tutorial
A medida que avanzas en el curso, repasa el tutorial haciendo los ejercicios que propone. El tutorial tiene también todos los ejemplos agrupados (sql_examples) y un test (demasiado sencillo) de autoevalución (sql_quiz)
2.2.4. Filtrar y Ordenar los resultados¶
Clausula WHERE -> sql_where
Se usa en diferentes comandos SQL
Filtrar los datos ANTES de seleccionarlos (crea como una tabla temporal)
Defines un predicado para establecer tus condiciones
Un predicado es una expresión cuyo resultado es verdadero o falso (expresión lógica)
Para crear el predicado usas (habitualmente):
Valores fijos. P.ej números (10) o texto (“Hola”)
Nombres de campos de tus tablas. P.ej id o «nombre»
Operadores. P.ej aritméticos o de comparación. id < 4 o nombre = “Pepe”
Operadores lógicos para encadenar expresiones. P.ej ( ( id < 5) AND nombre like “A_*”) )
El resultado del predicado ha de ser verdadero o falso (booleano)
Algunos operadores muy habituales:
AND OR NOT -> sql_and. Para encadenar predicados
LIKE -> sql_like. Para buscar patrones usando caracteres especiales
IN -> sql_in. Como si encadenaras varios OR.
BETWEEN -> sql_between. Para definir rango de valores
Y algunos más que veremos más adelante.
Clausula ORDER BY: sql_orderby. Ordena los resultados por campo y valor.
Clausula LIMIT (o TOP o …) -> sql_top
Sirve para limitar el número de resultados
Depende del SGBD
Practicas con el Tutorial
A medida que avanzas en el curso, repasa el tutorial haciendo los ejercicios que propone. El tutorial tiene también todos los ejemplos agrupados (sql_examples) y un test (demasiado sencillo) de autoevalución (sql_quiz)
2.2.5. Funciones en SQL¶
Cada SGBD tiene un conjunto de funciones predeterminadas (librerías)
Trabajan con un conjunto de datos (a veces agrupados)
Algunas funciones son estándar SQL:
Min() y Max() -> sql_min_max
count(), average(), sum() -> sql_count_avg_sum
Veremos más adelante que uedes crear tus propias funciones (Programando el SGBD)
Practicas con el Tutorial
A medida que avanzas en el curso, repasa el tutorial haciendo los ejercicios que propone. El tutorial tiene también todos los ejemplos agrupados (sql_examples) y un test (demasiado sencillo) de autoevalución (sql_quiz)
2.2.6. Agrupando Datos¶
Se puede trabajar con
datos agrupados (GROUP BY -> sql_groupby) según un campo (o varios) que
pueden tener (HAVING -> sql_having) alguna condición sobre ese grupo
El predicado define la condición para agrupar los registros (en clausula HAVING)
Practicas con el Tutorial
A medida que avanzas en el curso, repasa el tutorial haciendo los ejercicios que propone. El tutorial tiene también todos los ejemplos agrupados (sql_examples) y un test (demasiado sencillo) de autoevalución (sql_quiz)
2.2.7. Practica Ejercicios SQL (I)¶
Ejercicios SQL
Usa el listado de Ejercicios para usar SQL para practicar sobre una base de datos SQLite real (con 1 millón de registros). No usamos las consultas multitabla (los 10 últimos ejercicios).
2.2.8. Practica Ejercicios SQL (y II)¶
Ejercicios SQL
Usa el listado de Ejercicios para usar SQL para practicar sobre una base de datos SQLite real (con 1 millón de registros). No usamos las consultas multitabla (los 10 últimos ejercicios).