Tutorial de SQL general.

Publicado el 22/05/2023 12:05:00 en Programación General.
Author: [x][x] MuldeR | Total de votos: 5   Vote



Introducción a SQL:


¿Qué es SQL?

SQL (Structured Query Language) es un lenguaje de programación utilizado para administrar y manipular bases de datos relacionales. Fue desarrollado originalmente en la década de 1970 y se ha convertido en un estándar de facto para interactuar con bases de datos.



SQL se utiliza para realizar diversas operaciones, como la creación y modificación de tablas, la inserción y actualización de datos, y la consulta y extracción de información de una base de datos.

Sistemas de gestión de bases de datos relacionales (SGBDR)

Los Sistemas de Gestión de Bases de Datos Relacionales (SGBDR) son programas de software que permiten gestionar bases de datos relacionales utilizando SQL. Algunos ejemplos populares de SGBDR son MySQL, PostgreSQL, Oracle Database y Microsoft SQL Server.

Estos sistemas proporcionan un entorno para crear, administrar y manipular bases de datos, así como herramientas para respaldar y asegurar los datos.

Diferencia entre bases de datos y tablas

Bases de datos: Una base de datos es un conjunto organizado de datos que se almacenan de manera persistente en un sistema de gestión de bases de datos. Puede contener una o más tablas, así como otros objetos como vistas, procedimientos almacenados y desencadenadores.

Tablas: Una tabla es una estructura dentro de una base de datos que organiza los datos en filas y columnas. Cada fila representa un registro individual, y cada columna representa un atributo o campo específico del registro.


Consultas SELECT:


La cláusula SELECT y la selección de columnas

La cláusula SELECT se utiliza para recuperar datos de una o más tablas. Puedes seleccionar columnas específicas que deseas recuperar utilizando el nombre de la columna separado por comas después de la palabra clave SELECT. Por ejemplo:

SELECT columna1, columna2 FROM tabla;


Esto recuperará los valores de las columnas "columna1" y "columna2" de la tabla especificada.

Uso de la cláusula DISTINCT para eliminar duplicados

Si deseas eliminar los valores duplicados de una columna en los resultados de la consulta, puedes utilizar la cláusula DISTINCT. Por ejemplo:

SELECT DISTINCT columna FROM tabla;


Esto te devolverá solo los valores únicos de la columna especificada.

Filtrado de resultados con la cláusula WHERE

La cláusula WHERE se utiliza para filtrar los resultados de la consulta según una condición especificada. Puedes utilizar operadores de comparación, operadores lógicos y funciones para construir condiciones. Por ejemplo:

SELECT columna1, columna2 FROM tabla WHERE condicion;


Aquí, "condicion" es una expresión lógica que debe evaluarse como verdadera para que una fila sea incluida en los resultados.

Operadores de comparación y lógicos

Los operadores de comparación se utilizan para comparar valores en las condiciones WHERE. Algunos ejemplos comunes son:

Igual (=): compara si dos valores son iguales.
Diferente (!= o <>): compara si dos valores son diferentes.
Mayor que (>), mayor o igual que (>=), menor que (<), menor o igual que (<=): comparan los valores numéricos.
LIKE: compara una cadena con un patrón utilizando caracteres comodín (% o _).


SELECT columna FROM tabla WHERE id >=  5;


Los operadores lógicos (AND, OR, NOT) se utilizan para combinar múltiples condiciones en las cláusulas WHERE y construir expresiones más complejas.

Ordenamiento de resultados con la cláusula ORDER BY

La cláusula ORDER BY se utiliza para ordenar los resultados de la consulta en un orden específico. Puedes ordenar por una o más columnas, en orden ascendente (ASC) o descendente (DESC). Por ejemplo:

SELECT columna1, columna2 FROM tabla ORDER BY columna1 ASC, columna2 DESC;


Esto ordenará los resultados por la columna1 en orden ascendente y luego por la columna2 en orden descendente.

Limitación de resultados con la cláusula LIMIT

La cláusula LIMIT se utiliza para limitar el número de filas devueltas por la consulta. Esto es útil cuando solo deseas obtener los primeros N registros. Por ejemplo:

SELECT columna FROM tabla LIMIT 10;


Esto devolverá solo los primeros 10 registros de la columna especificada.

Funciones de agregación.


Funciones COUNT, SUM, AVG, MIN y MAX

Las funciones de agregación son utilizadas para realizar cálculos en conjuntos de datos y devolver un único valor resumen. Algunas de las funciones de agregación más comunes son:

COUNT: Devuelve el número de filas que cumplen una condición especificada.
SUM: Calcula la suma de los valores de una columna numérica.
AVG: Calcula el promedio de los valores de una columna numérica.
MIN: Devuelve el valor mínimo de una columna.
MAX: Devuelve el valor máximo de una columna.


Estas funciones se utilizan comúnmente junto con la cláusula GROUP BY, que divide los datos en grupos basados en una o más columnas. Por ejemplo:

SELECT columna, COUNT(*), SUM(columna_numerica), AVG(columna_numerica), MIN(columna_numerica), MAX(columna_numerica)
FROM tabla
GROUP BY columna;


Aquí, la función COUNT cuenta el número de filas, mientras que las otras funciones realizan cálculos en la columna_numerica dentro de cada grupo definido por la columna especificada.

Utilización de la cláusula GROUP BY

La cláusula GROUP BY se utiliza para agrupar los resultados de la consulta en conjuntos basados en una o más columnas. Esto permite realizar operaciones de agregación en cada grupo. Por ejemplo:

SELECT columna1, columna2, COUNT(*)
FROM tabla
GROUP BY columna1, columna2;


Esto agrupa los resultados según las columnas columna1 y columna2 y aplica la función COUNT para obtener el número de filas en cada grupo.

Filtro de resultados de agregación con la cláusula HAVING

La cláusula HAVING se utiliza para filtrar los resultados de la consulta después de aplicar las funciones de agregación. Funciona de manera similar a la cláusula WHERE, pero se aplica a los resultados agregados en lugar de las filas individuales. Por ejemplo:

SELECT columna, COUNT(*)
FROM tabla
GROUP BY columna
HAVING COUNT(*) > 10;


Esto filtra los resultados después de aplicar la función COUNT y devuelve solo los grupos que tienen más de 10 filas.

Modificación de datos:


Inserción de datos con la sentencia INSERT INTO

La sentencia INSERT INTO se utiliza para insertar nuevos registros en una tabla. Debes especificar el nombre de la tabla y proporcionar los valores para cada columna en el orden correspondiente. Por ejemplo:

INSERT INTO tabla (columna1, columna2, columna3) VALUES (valor1, valor2, valor3);


Esto insertará un nuevo registro en la tabla especificada con los valores proporcionados.

Actualización de registros con la sentencia UPDATE

La sentencia UPDATE se utiliza para modificar los datos existentes en una o más filas de una tabla. Debes especificar el nombre de la tabla, las columnas que deseas actualizar y los nuevos valores. También puedes agregar una cláusula WHERE para especificar las filas que deseas actualizar. Por ejemplo:

UPDATE tabla SET columna1 = nuevo_valor WHERE condicion;


Esto actualizará los valores de la columna1 en las filas que cumplan la condición especificada.

Eliminación de registros con la sentencia DELETE

La sentencia DELETE se utiliza para eliminar una o más filas de una tabla. Puedes utilizar una cláusula WHERE para especificar las filas que deseas eliminar. Por ejemplo:

DELETE FROM tabla WHERE condicion;


Esto eliminará las filas de la tabla que cumplan la condición especificada.


Operaciones avanzdas:


Joins (INNER JOIN, LEFT JOIN, RIGHT JOIN y FULL JOIN)

Los Joins se utilizan para combinar filas de dos o más tablas basándose en una condición relacionada entre ellas. Algunos tipos comunes de Joins son:

INNER JOIN: Devuelve solo las filas que tienen coincidencias en ambas tablas.
LEFT JOIN: Devuelve todas las filas de la tabla izquierda y las filas coincidentes de la tabla derecha.
RIGHT JOIN: Devuelve todas las filas de la tabla derecha y las filas coincidentes de la tabla izquierda.
FULL JOIN: Devuelve todas las filas de ambas tablas, combinando las filas coincidentes y no coincidentes.


La sintaxis básica de un Join es la siguiente:

SELECT columnas
FROM tabla1
JOIN tabla2 ON condicion;


La condición especificada después de ON define cómo se relacionan las tablas.

Subconsultas y consultas anidadas

Las subconsultas son consultas SQL dentro de una consulta principal. Se utilizan para obtener datos de una tabla basados en los resultados de otra consulta. Por ejemplo:

SELECT columna1
FROM tabla1
WHERE columna2 IN (SELECT columna2 FROM tabla2 WHERE condicion);


Aquí, la subconsulta (SELECT columna2 FROM tabla2 WHERE condicion) se ejecuta primero y sus resultados se utilizan para filtrar los resultados de la consulta principal.

Operadores LIKE y wildcard

El operador LIKE se utiliza para realizar comparaciones de patrones en valores de texto. Se combina con caracteres comodín para representar una serie de caracteres. Algunos comodines comunes son:

%: Representa cualquier secuencia de caracteres (incluyendo cero caracteres).
_: Representa un solo carácter.


Por ejemplo:

SELECT columna FROM tabla WHERE columna LIKE 'valor%';


Esto seleccionará todas las filas donde la columna comienza con "valor".

Uso de funciones de cadena (STRING FUNCTIONS) y de fecha (DATE FUNCTIONS)

SQL proporciona diversas funciones para manipular cadenas y fechas. Algunas funciones comunes incluyen:

Funciones de cadena: CONCAT, UPPER, LOWER, SUBSTRING, LENGTH, REPLACE, etc.
Funciones de fecha: DATE, CURDATE, NOW, EXTRACT, DATE_FORMAT, etc.


Estas funciones te permiten realizar operaciones y transformaciones en valores de cadena y fecha dentro de tus consultas.

Operadores matemáticos y aritméticos

SQL también admite operadores matemáticos y aritméticos para realizar cálculos numéricos. Algunos operadores comunes incluyen:

    +: Suma.
    -: Resta.
    *: Multiplicación.
    /: División.


Por ejemplo:

SELECT columna1 + columna2 AS resultado FROM tabla;


Esto calculará la suma de los valores en columna1 y columna2 y los mostrará como "resultado".

Modificación de la estructura de la base de datos.


Creación de tablas con la sentencia CREATE TABLE

La sentencia CREATE TABLE se utiliza para crear una nueva tabla en la base de datos. Debes especificar el nombre de la tabla y las columnas que deseas incluir, junto con sus tipos de datos y otras restricciones si es necesario. Por ejemplo:

CREATE TABLE tabla (
  columna1 tipo_de_dato1,
  columna2 tipo_de_dato2,
  columna3 tipo_de_dato3,
  ...
);


Esto creará una nueva tabla llamada "tabla" con las columnas y tipos de datos especificados.

Modificación de tablas con las sentencias ALTER TABLE y MODIFY COLUMN

La sentencia ALTER TABLE se utiliza para modificar la estructura de una tabla existente. Puedes agregar nuevas columnas, modificar columnas existentes o eliminar columnas. Por ejemplo:

Agregar una nueva columna:

ALTER TABLE tabla ADD columna tipo_de_dato;


Modificar una columna existente:

ALTER TABLE tabla MODIFY COLUMN columna nuevo_tipo_de_dato;


Eliminar una columna:

ALTER TABLE tabla DROP COLUMN columna;


Creación y eliminación de índices con las sentencias CREATE INDEX y DROP INDEX

Los índices se utilizan para mejorar la eficiencia de las consultas al permitir búsquedas rápidas en columnas específicas. Puedes crear índices en una o más columnas de una tabla utilizando la sentencia CREATE INDEX. Por ejemplo:

CREATE INDEX indice_name ON tabla (columna);


Esto creará un índice llamado "indice_name" en la columna especificada de la tabla.

Si ya no necesitas un índice, puedes eliminarlo utilizando la sentencia DROP INDEX. Por ejemplo:

DROP INDEX indice_name ON tabla;


Esto eliminará el índice especificado de la tabla.

Cambio de nombre de tablas con la sentencia RENAME TABLE

La sentencia RENAME TABLE se utiliza para cambiar el nombre de una tabla existente. Puedes especificar el nombre actual de la tabla y el nuevo nombre que deseas asignarle. Por ejemplo:

RENAME TABLE tabla_actual TO nuevo_nombre;


Esto cambiará el nombre de la tabla de "tabla_actual" a "nuevo_nombre".

Restricciones de integridad y claves externas

Las restricciones de integridad se utilizan para garantizar la consistencia y la integridad de los datos en una base de datos. Algunos tipos comunes de restricciones incluyen:

PRIMARY KEY: Define una columna o conjunto de columnas como clave primaria, asegurando su unicidad y no nulidad.
FOREIGN KEY: Establece una relación entre dos tablas basada en una columna común.
NOT NULL: Evita que una columna acepte valores nulos.
UNIQUE: Garantiza que los valores en una columna sean únicos.


Estas restricciones se especifican al crear una tabla o se pueden agregar posteriormente utilizando la sentencia ALTER TABLE.

Transacciones y control de concurrencia.


Transacciones en SQL

Una transacción en SQL es una secuencia de operaciones que se ejecutan como una unidad lógica e indivisible. Una transacción asegura que todas las operaciones se realicen de manera exitosa o que se reviertan por completo si ocurre algún error. Para trabajar con transacciones, se utilizan las siguientes sentencias:

BEGIN TRANSACTION: Inicia una nueva transacción.
COMMIT: Confirma una transacción y aplica los cambios realizados.
ROLLBACK: Deshace una transacción y revierte todos los cambios realizados.


Por ejemplo:

BEGIN TRANSACTION;
-- Operaciones de inserción, actualización o eliminación
COMMIT; -- Confirma los cambios

-- Si ocurre algún error:
ROLLBACK; -- Deshace los cambios


Las transacciones son útiles cuando se requiere realizar múltiples operaciones que deben ser consistentes en caso de que ocurra algún error.

Control de concurrencia

El control de concurrencia en SQL se refiere a la gestión de múltiples transacciones que se ejecutan simultáneamente y garantiza la consistencia de los datos. Algunos aspectos clave del control de concurrencia son:

Bloqueo: Se utilizan bloqueos para evitar que varias transacciones modifiquen los mismos datos al mismo tiempo. Existen diferentes tipos de bloqueos, como bloqueos compartidos (shared locks) y bloqueos exclusivos (exclusive locks), que permiten el acceso concurrente controlado a los datos.
Aislamiento: Determina cómo las transacciones se ven afectadas por las modificaciones realizadas por otras transacciones. Los niveles de aislamiento más comunes son: READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ y SERIALIZABLE.
Deadlocks: Un deadlock ocurre cuando dos o más transacciones están esperando recursos que la otra transacción posee. Los sistemas de bases de datos implementan mecanismos para detectar y resolver deadlocks automáticamente.

El control de concurrencia es esencial para garantizar la integridad y la consistencia de los datos en entornos de bases de datos concurrentes.

Uso de transacciones y control de concurrencia en SQL

Para utilizar transacciones y control de concurrencia en SQL, debes tener en cuenta los siguientes aspectos:

Identificar las operaciones que formarán parte de una transacción y agruparlas utilizando las sentencias BEGIN TRANSACTION, COMMIT y ROLLBACK.
Establecer el nivel de aislamiento adecuado para tus transacciones, considerando los requisitos de consistencia y el rendimiento del sistema.
Diseñar cuidadosamente las consultas y operaciones para evitar problemas de concurrencia, como deadlocks.
Realizar pruebas exhaustivas para garantizar que las transacciones se comporten como se espera y que el control de concurrencia funcione correctamente.


El uso adecuado de transacciones y el control de concurrencia ayudan a mantener la consistencia y la integridad de los datos en entornos de bases de datos concurrentes.

Optimización de consultas en SQL.


La optimización de consultas en SQL es un proceso importante para mejorar el rendimiento de las consultas y reducir el tiempo de ejecución. A continuación, se presentan algunos aspectos clave a considerar para optimizar tus consultas:

Uso de índices

Los índices son estructuras de datos que mejoran la velocidad de búsqueda de registros en una tabla. Al crear índices en columnas comúnmente utilizadas en condiciones de búsqueda o combinación de tablas, puedes acelerar significativamente la ejecución de las consultas. Asegúrate de elegir los índices adecuados y de mantenerlos actualizados a medida que los datos cambien.

Adecuada estructura de tablas

El diseño y la estructura de tus tablas pueden afectar el rendimiento de las consultas. Algunos aspectos a considerar incluyen:

Normalización: Dividir las tablas en entidades lógicas para evitar la duplicación de datos y mejorar la eficiencia de las operaciones.
Uso de claves primarias y claves externas: Utilizar adecuadamente las claves primarias y las claves externas (relaciones) para asegurar la integridad de los datos y optimizar las consultas que involucran múltiples tablas.

Evitar el uso excesivo de subconsultas

Si bien las subconsultas pueden ser útiles en ciertos casos, el uso excesivo de ellas puede afectar negativamente el rendimiento de las consultas. En su lugar, considera el uso de joins para combinar tablas y reducir la cantidad de consultas ejecutadas.

Uso adecuado de cláusulas WHERE

La cláusula WHERE es utilizada para filtrar los resultados de una consulta. Asegúrate de utilizarla de manera efectiva y específica, evitando condiciones innecesarias o ambiguas. Además, utiliza los operadores adecuados (como "=", ">", "<", etc.) y considera el uso de índices en las columnas involucradas en las condiciones de búsqueda.

Limitar el número de columnas y registros recuperados

Si solo necesitas un subconjunto de columnas en tu consulta, selecciona únicamente esas columnas en lugar de seleccionar todas. Además, si solo necesitas un número limitado de registros, utiliza la cláusula LIMIT (en MySQL) o TOP (en SQL Server) para limitar el número de resultados devueltos.

Optimización de consultas complejas

En consultas más complejas que involucran joins múltiples o subconsultas, es útil utilizar herramientas de análisis de consultas, como el EXPLAIN PLAN en Oracle o el Query Execution Plan en SQL Server. Estas herramientas proporcionan información valiosa sobre cómo se ejecuta la consulta y pueden ayudarte a identificar áreas problemáticas y realizar ajustes para mejorar el rendimiento.



Comments:


[x]
[x][x] quantum (9 d) : Te mamás te con este post +10


[x]
[x][x] MuldeR (9 d) : <3


[x]
[x][x] hielasangre (9 d) : tremendo el POST, más que general deberia ser de 0 a SQL en 10 minutos ejejej


[x]
[x][x] Zep7i (8 d) : 5to año de secundaria resumido en este post jajaja +1