2. Consultando con SQL

2.1. ¿De qué va este tema?

En este curso aprenderás a:

  1. Conocer la sintaxis básica de SQL

  2. Conocer los conceptos básicos de una consulta (comando SELECT)

  3. 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:

  1. Usar el editor online de W3S . Ya tiene un modelo de datos de referencia.

  2. O puedes probar con sqlite online (o instalado en tu máquina y usando una bd de ejemplo).

  3. 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

  1. S tructured Q uery L anguage -> sql_intro

  2. 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)

  3. Sintaxis SQL -> sql_syntax

    https://desarrolloweb.com/articulos/images/componentes-sentencia-sql.gif
    1. Siempre basado en tablas (relaciones). Incluso un valor resultado es una tabla (una relación)

    2. Declaraciones SQL compuestas de:

      1. comandos (definen las acciones), p.ej SELECT, UPDATE o DELETE

      2. clausulas (condicionan los datos), p.ej WHERE <expression> o GROUP BY <expr>

      3. expresiones,

      4. … 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.

https://i.ytimg.com/vi/Nkj_KRv_aqQ/maxresdefault.jpg https://www.campusmvp.es/recursos/image.axd?picture=Valores-Agregados-SQL-Ej3.png
  1. Cual es el comando SQL

  2. Cual serían las cláusulas

  3. Cuales son los operadores?

  4. ¿Cual crees que sería el nombre (o nombres) del campo resultado?

  5. Cuales sería el origen de los datos

  6. ¿Hay alguna condicion sobre los datos?

  7. ¿Hay algún valor constante en la declaración?

2.2.2. Tipos de Datos y Valores Nulos

  1. La consulta más básica es una operación sencilla sin origen de datos (devuelve el resultado de evaluar esa expresión ):

    1. SELECT 1 ; – Cualquier valor lo devuelve, y hay diferentes tipos de datos

    2. SELECT 10 + 14; – Sirve como calculadora y trabaja con números (diferentes tipos de datos)

    3. SELECT (10 < 20); – Y también operadores de comparación y valores boolean (0 o 1)

    4. SELECT “2022-10-01”; – Y fechas, horas y datos de tipo temporal

  2. Aunque depende de los SGBD (sql_datatypes) lo más común es usar estos tipos de datos:

    1. Números: enteros (INT) o decimales ( DECIMAL(n,p)).

    2. Cadenas de Caracteres: VARCHAR(N). Siempre con comillas SIMPLES.

    3. Fechas: DATE / TIMESTAMP. Como si fuera texto

    4. Y más (sql_datatypes)

    5. Recuerda revisar siempre la documentación oficial de tu SGBD (puede haber algunas diferencias).

  3. Hay un montón de operadores (para generar la expresión):

    1. Aritméticos, p.ej + - * /

    2. de Comparación, p.ej < = <>*

    3. Lógicos, p.ej AND OR IN NOT

    4. Y bueno, muchos más (sql_operators)

  4. El valor nulo (NULL) -> sql_null_values

    1. Es un campo que no tiene un valor, o bueno tiene valor NULL

    2. 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)

    3. Necesitas un operador especial para ver si hay valores nulos (operador IS NULL )

    4. 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

  1. Hacer consultas:

    1. 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)

    2. Especificas qué necesitas (qué campos, de qué orígenes y con qué condiciones), y ejecutas las consultas

    3. 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)

    4. Se usa el comando SELECT -> sql_select

    5. Una versión más rigurosa es el comando SELECT DISTINCT -> sql_distinct. (elimina los valores de registros repetidos).

  2. Especificas el origen de los datos

    1. Lo habitual es especificarlos en la clausula FROM y que sea una tabla

    2. Pero puede ser un origen más complejo: tabla resultado de otras tablas, tablas relacionadas entre sí, otras consultas, expresiones relacionales, etc

    3. 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

  1. Clausula WHERE -> sql_where

    1. Se usa en diferentes comandos SQL

    2. Filtrar los datos ANTES de seleccionarlos (crea como una tabla temporal)

    3. Defines un predicado para establecer tus condiciones

    4. Un predicado es una expresión cuyo resultado es verdadero o falso (expresión lógica)

  2. Para crear el predicado usas (habitualmente):

    1. Valores fijos. P.ej números (10) o texto (“Hola”)

    2. Nombres de campos de tus tablas. P.ej id o «nombre»

    3. Operadores. P.ej aritméticos o de comparación. id < 4 o nombre = “Pepe”

    4. Operadores lógicos para encadenar expresiones. P.ej ( ( id < 5) AND nombre like “A_*”) )

    5. El resultado del predicado ha de ser verdadero o falso (booleano)

  3. Algunos operadores muy habituales:

    1. AND OR NOT -> sql_and. Para encadenar predicados

    2. LIKE -> sql_like. Para buscar patrones usando caracteres especiales

    3. IN -> sql_in. Como si encadenaras varios OR.

    4. BETWEEN -> sql_between. Para definir rango de valores

    5. Y algunos más que veremos más adelante.

  4. Clausula ORDER BY: sql_orderby. Ordena los resultados por campo y valor.

  5. Clausula LIMIT (o TOP o …) -> sql_top

    1. Sirve para limitar el número de resultados

    2. 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

  1. Cada SGBD tiene un conjunto de funciones predeterminadas (librerías)

  2. Trabajan con un conjunto de datos (a veces agrupados)

  3. Algunas funciones son estándar SQL:

    1. Min() y Max() -> sql_min_max

    2. count(), average(), sum() -> sql_count_avg_sum

  4. 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

  1. Se puede trabajar con

    1. datos agrupados (GROUP BY -> sql_groupby) según un campo (o varios) que

    2. pueden tener (HAVING -> sql_having) alguna condición sobre ese grupo

  2. 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).