El lenguaje de consulta estructurado es un lenguaje de base de datos estándar que se utiliza para crear, mantener y recuperar la base de datos relacional. A continuación se presentan algunos datos interesantes sobre SQL.

  • SQL no distingue entre mayúsculas y minúsculas. Pero es una práctica recomendada usar palabras clave (como SELECT, UPDATE, CREATE, etc) en mayúsculas y usar cosas definidas por el usuario (como nombre de tabla, nombre de columna, etc) en minúsculas.
  • Podemos escribir comentarios en SQL utilizando «-» (doble guión) al principio de cualquier línea.
  • SQL es el lenguaje de programación para las bases de datos relacionales (explicadas más adelante) como MySQL, Oracle, Sybase, SQL Server, Postgre, etc. Otras bases de datos no relacionales (también llamadas NoSQL) como MongoDB, DynamoDB, etc no utilizan SQL
  • Aunque existe un estándar ISO para SQL, la mayoría de las implementaciones varían ligeramente la sintaxis. Así que podemos encontrarnos con consultas que funcionan en SQL Server pero no funcionan en MySQL.
  • ¿Qué es una base de datos relacional?

    Base de datos relacional significa que los datos se almacenan así como se recuperan en forma de relaciones (tablas). La Tabla 1 muestra la base de datos relacional con una sola relación llamada STUDENT que almacena ROLL_NO, NAME, ADDRESS, PHONE y AGE de los estudiantes.

    Estudiante

    SUJIT

    Nombre Dirección Teléfono Edad
    1 RAM DELHI 9455123451 18
    2 RAMESH GURGAON 9652431543 18 3 ROHTAK 9156253131 20
    4 SURESH DELHI 9156768971 18

    Tabla 1

    Estas son algunas terminologías importantes que se utilizan en términos de relación.

    Atributo: Los atributos son las propiedades que definen una relación. por ejemplo; ROLL_NO, NAME etc.

    Tuple: Cada fila de la relación se conoce como tupla. La relación anterior contiene 4 tuplas, una de las cuales se muestra como:

    RAM DELHI 9455123451 18

    Grado: El número de atributos de la relación se conoce como grado de la misma. La relación ESTUDIANTE definida anteriormente tiene grado 5.

    Cardinalidad: El número de tuplas de una relación se conoce como cardinalidad. La relación ESTUDIANTE definida anteriormente tiene cardinalidad 4.

    Columna: La columna representa el conjunto de valores de un determinado atributo. La columna ROLL_NO se extrae de la relación STUDENT.

    ROLL_NO

    Las consultas para tratar con la base de datos relacional pueden ser categorías como:

    Lenguaje de definición de datos: Se utiliza para definir la estructura de la base de datos. Por ejemplo: CREATE TABLE, ADD COLUMN, DROP COLUMN y así sucesivamente.

    Lenguaje de Manipulación de Datos: Se utiliza para manipular los datos en las relaciones. por ejemplo; INSERT, DELETE, UPDATE y así sucesivamente.

    Lenguaje de consulta de datos: Se utiliza para extraer los datos de las relaciones. por ejemplo; SELECT

    Así que primero consideraremos el Lenguaje de Consulta de Datos. Una consulta genérica para recuperar de una base de datos relacional es:

  1. SELECT Attribute_List FROM R1,R2….RM
  2. ]
  3. ];

Parte de la consulta representada por la sentencia 1 es obligatoria si se quiere recuperar de una base de datos relacional. Las sentencias escritas dentro son opcionales. Vamos a ver la posible combinación de consultas sobre la relación que se muestra en la Tabla 1.

Caso 1: Si queremos recuperar los atributos ROLL_NO y NAME de todos los alumnos, la consulta será:

SELECT ROLL_NO, NAME FROM STUDENT;
ROLL_NO NAME
1 RAM
2 RAMESH
3 SUJIT 4 SURESH

Caso 2: Si queremos recuperar ROLL_NO y NAME de los alumnos cuyo ROLL_NO es mayor que 2, la consulta será:

SELECT ROLL_NO, NAME FROM STUDENT WHERE ROLL_NO>2;
ROLL_NO NAME
3 SUJIT 4 SURESH

CASE 3: Si queremos recuperar todos los atributos de los alumnos, podemos escribir * en lugar de escribir todos los atributos como:

SELECT * FROM STUDENT WHERE ROLL_NO>2;
ROLL_NO NAME Dirección Teléfono Edad
3 SUJIT ROHTAK 9156253131 20
4 SURESH DELHI 9156768971 18

CASE 4: Si queremos representar la relación en orden ascendente por EDAD, podemos utilizar la cláusula ORDER BY como:

SELECT * FROM STUDENT ORDER BY AGE;
ROLL_NO NOMBRE DIRECCIÓN TELÉFONO EDAD
1 RAM DELHI 9455123451 18
2 RAMESH GURGAON 9652431543 18 4 SURESH DELHI 9156768971 18 3 SUJIT ROHTAK 9156253131 20

Nota: ORDER BY AGE es equivalente a ORDER BY AGE ASC. Si queremos recuperar los resultados en orden descendente de la EDAD, podemos utilizar ORDER BY AGE DESC.

CASE 5: Si queremos recuperar valores distintos de un atributo o grupo de atributos, se utiliza DISTINCT como en:

SELECT DISTINCT ADDRESS FROM STUDENT;

Dirección

DELHI

GURGAON

ROHTAK

Si no se utiliza DISTINCT, DELHI se repetirá dos veces en el conjunto de resultados. Antes de entender GROUP BY y HAVING, necesitamos entender las funciones de agregación en SQL.

Funciones de agregación: Las funciones de agregación se utilizan para realizar operaciones matemáticas sobre los valores de los datos de una relación. Algunas de las funciones de agregación más comunes utilizadas en SQL son:

  • COUNT: La función Count se utiliza para contar el número de filas de una relación. por ejemplo;
SELECT COUNT (PHONE) FROM STUDENT;

COUNT(PHONE)

  • SUM: La función SUM se utiliza para sumar los valores de un atributo en una relación. e.g;

SELECCIONAR SUMA (EDAD) DE ESTUDIANTE;

SUMA(EDAD)

De la misma manera, se pueden utilizar MIN, MAX y AVG. Como hemos visto anteriormente, todas las funciones de agregación devuelven sólo 1 fila.

AVERAGE: Da los valores medios de las tuplas. También se define como la suma dividida entre los valores del recuento.
Sintaxis:AVG(nombredelatributo)
O
Sintaxis:SUM(nombredelatributo)/Cuenta(nombredelatributo)
La sintaxis anterior también recupera el valor medio de las tuplas.

MAXIMO:Extrae el valor máximo entre el conjunto de tuplas.
Sintaxis:MAX(nombredelatributo)

MINIMO:Extrae el valor mínimo entre el conjunto de todas las tuplas.
Sintaxis:MIN(nombredelatributo)

GRUPO POR: Group by se utiliza para agrupar las tuplas de una relación en base a un atributo o grupo de atributos. Siempre se combina con la función de agregación que se calcula en el grupo. por ejemplo;

SELECT ADDRESS, SUM(AGE) FROM STUDENTGROUP BY (ADDRESS);

En esta consulta, SUM(AGE) se calculará pero no para toda la tabla, sino para cada dirección. es decir; suma de AGE para la dirección DELHI(18+18=36) y de manera similar para otra dirección también. La salida es:

ADDRESS SUMA(EDAD)
DELHI 36
GURGAON 18
ROHTAK 20

Si intentamos ejecutar la consulta dada a continuación, se producirá un error porque aunque hemos calculado SUM(AGE) para cada dirección, hay más de 1 ROLL_NO para cada dirección que hemos agrupado. Por lo tanto, no se puede mostrar en el conjunto de resultados. Necesitamos utilizar funciones de agregación en las columnas después de la sentencia SELECT para dar sentido al conjunto resultante siempre que utilicemos GROUP BY.

SELECT ROLL_NO, ADDRESS, SUM(AGE) FROM STUDENTGROUP BY (ADDRESS); 

NOTA: Un atributo que no forma parte de la cláusula GROUP BY no puede utilizarse para la selección. Cualquier atributo que forme parte de la cláusula GROUP BY puede utilizarse para la selección, pero no es obligatorio. Pero podemos utilizar atributos que no forman parte de la cláusula GROUP BY en una función de agregación.
Quiz on SQL

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *