From f0f738627c6fcae2543a58639f45647fba9f0cc3 Mon Sep 17 00:00:00 2001 From: muhamadsuharto <145425126+muhamadsuharto@users.noreply.github.com> Date: Wed, 8 Oct 2025 21:32:07 +0700 Subject: [PATCH 1/2] Update README.md --- README.md | 941 ++++++------------------------------------------------ 1 file changed, 105 insertions(+), 836 deletions(-) diff --git a/README.md b/README.md index a5886c2..f55481a 100644 --- a/README.md +++ b/README.md @@ -1,923 +1,192 @@ -

📘 SQL Cheatsheet

+# SQL Cheatsheet 📊 -

- Todo lo esencial de SQL en una sola hoja.
- Consultas, comandos y operaciones clave explicadas de forma clara, ordenada y con ejemplos prácticos. -

+Welcome to the SQL Cheatsheet repository! This is a practical guide to SQL, covering data definition, queries, manipulation, control, and transactions. Whether you are a beginner or an experienced developer, this cheatsheet aims to simplify your SQL learning journey. -
- SQL Badge - - -
+[![Download Releases](https://img.shields.io/badge/Download%20Releases-blue?style=for-the-badge&logo=github)](https://github.com/muhamadsuharto/sql-cheatsheet/releases) -
+## Table of Contents -## 📚 Índice de contenido +- [Introduction](#introduction) +- [Getting Started](#getting-started) +- [SQL Basics](#sql-basics) + - [Data Definition Language (DDL)](#data-definition-language-ddl) + - [Data Manipulation Language (DML)](#data-manipulation-language-dml) + - [Data Query Language (DQL)](#data-query-language-dql) + - [Data Control Language (DCL)](#data-control-language-dcl) + - [Transaction Control Language (TCL)](#transaction-control-language-tcl) +- [Advanced Topics](#advanced-topics) +- [Examples](#examples) +- [Contributing](#contributing) +- [License](#license) -#### **1. DDL _(Data Definition Language)_** +## Introduction -- [`CREATE`](#create), [`DROP`](#drop), [`ALTER`](#alter), [`TRUNCATE`](#truncate) +SQL (Structured Query Language) is the standard language for managing and manipulating databases. This repository provides a concise overview of essential SQL commands and concepts. You can find the latest updates and releases [here](https://github.com/muhamadsuharto/sql-cheatsheet/releases). -#### **2. DQL _(Data Query Language)_** +## Getting Started -- [`SELECT`](#select) - - [`TOP`/`LIMIT`](#top-limit) | [`AS`](#as) - - **Filtros:** [`WHERE`](#where) | [`AND`/`OR`](#and-or) | [`NULL`](#null) | [`BETWEEN`](#between) | [`LIKE`](#like) | [`IN`](#in) | [`EXISTS`](#exists) - - **Orden y agrupación:** [`ORDER BY`](#order-by) | [`DISTINCT`](#distinct) | [`GROUP BY`](#group-by) | [`HAVING`](#having) - - **Agregaciones:** [`COUNT`|`SUM`|`AVG`|`MIN`|`MAX`](#count-sum-avg-min-max) -- **Joins:** [`INNER`](#join) | [`LEFT`](#left-join) | [`RIGHT`](#right-join) | [`FULL OUTER`](#full-join) | [`CROSS`](#cross-join) | [`SELF`](#self-join) | [`NATURAL`](#natural-join) -- **Operadores de conjunto:** [`UNION`/`UNION ALL`](#union) | [`INTERSECT`](#intersect) | [`EXCEPT`/`MINUS`](#except) -- **Subconsultas avanzadas:** [`ANY`/`ALL`](#any-all) | [`WITH`](#with) +To get started with this cheatsheet, download the latest release from the link above. The release contains all necessary files to help you understand and practice SQL commands effectively. -#### **3. DML _(Data Manipulation Language)_** +## SQL Basics -- [`INSERT`](#insert) | [`UPDATE`](#update) | [`DELETE`](#delete) -- [`CALL`](#call) | [`LOCK`](#lock) +### Data Definition Language (DDL) -#### **4. DCL _(Data Control Language)_** +DDL is used to define and manage all database objects. Here are some common DDL commands: -- [`GRANT`](#grant) | [`REVOKE`](#revoke) - -#### **5. TCL _(Transaction Control Language)_** - -- [`BEGIN TRANSACTION`/`START TRANSACTION`](#begin-start-transaction) | [`COMMIT`](#commit) | [`SAVEPOINT`](#savepoint) | [`ROLLBACK`](#rollback) | [`SET TRANSACTION`](#set) - -
- -## 1. DDL - `CREATE`**,**`DROP`**,**`ALTER`**,**`TRUNCATE` - -Los comandos **DDL _(Data Definition Language)_** permiten **definir, modificar y eliminar estructuras** de bases de datos como esquemas, tablas y vistas. - - - -### **CREATE** (crear tablas, esquemas...) - -#### Crear un **esquema** o **base de datos**: - -```sql -CREATE SCHEMA nombre_esquema; --- o (MySQL): -CREATE DATABASE nombre_base_datos; -``` - -> [!NOTE] > `SCHEMA` ≠ `DATABASE` en algunos motores (como MySQL/PostgreSQL). En **PostgreSQL**, el esquema es un contenedor lógico para objetos de base de datos como tablas, vistas, secuencias, etc. En **MySQL**, el esquema es equivalente a una base de datos. - -#### Crear una **tabla**: - -```sql -CREATE TABLE tabla ( - col1 datatype, - col2 datatype, - col3 datatype, - col4 datatype, -); -``` - -También se puede hacer: - -```sql -CREATE TABLE IF NOT EXISTS tabla ( ... ); -``` +- **CREATE**: Used to create a new table or database. +- **ALTER**: Used to modify an existing database object. +- **DROP**: Used to delete a table or database. +**Example**: ```sql -CREATE TABLE IF NO EXISTS books ( - id SERIAL PRIMARY KEY, - title VARCHAR(100) NOT NULL, - author VARCHAR(100) NOT NULL +CREATE TABLE employees ( + id INT PRIMARY KEY, + name VARCHAR(100), + position VARCHAR(50) ); ``` -#### Crear una **tabla** en un esquema (PostgreSQL): - -```sql -CREATE TABLE nombre_esquema.tabla ( - col1 datatype, - col2 datatype -); -``` - -#### Crear una **vista** (vista virtual) - -```sql -CREATE VIEW nombre_vista AS -SELECT columna1, columna2 FROM tabla; -``` - -```sql -CREATE VIEW vista_ventas AS -SELECT fecha, SUM(total) AS total_diario -FROM ventas -GROUP BY fecha; -``` - - - -### **DROP** - Eliminar objetos - -```sql -DROP TABLE IF EXISTS tabla; -DROP VIEW IF EXISTS nombre_vista; -DROP SCHEMA IF EXISTS nombre_esquema CASCADE; -DROP DATABASE IF EXISTS nombre_base_datos; -``` - - - -### **ALTER** - Modificar estructuras existentes - -#### **`ADD`** - Añadir una nueva columna - -```sql -ALTER TABLE tabla ADD nueva_columna tipo; -``` - -#### **`RENAME`** - Renombrar una columna - -```sql -ALTER TABLE tabla RENAME COLUMN antigua_columna TO nueva_columna; -``` - -#### **`MODIFY`** _(MySQL)_ | `ALTER TYPE` _(PostgreSQL)_ - Cambiar el tipo de dato de la columna - -```sql --- En MySQL -ALTER TABLE tabla MODIFY columna tipo; - --- En PostgreSQL -ALTER TABLE tabla ALTER COLUMN columna TYPE nuevo_tipo; -``` - -#### **`DROP`** - Eliminar una columna existente - -```sql -ALTER TABLE tabla DROP COLUMN columna; -``` - - - -### **TRUNCATE** - Vaciar una tabla (sin eliminar su estructura) - -Borra todas las filas de una tabla existente. - -```sql -TRUNCATE TABLE tabla; -TRUNCATE TABLE tabla RESTART IDENTITY; -- PostgreSQL: reinicia IDs auto -``` - -
+### Data Manipulation Language (DML) -## 2. DQL - `SELECT` +DML is used for manipulating data within tables. Common DML commands include: -DQL (Data Query Language) se utiliza para **consultar datos** de una base de datos. La palabra clave principal es `SELECT`, acompañada de múltiples cláusulas opcionales que permiten **filtrar, agrupar, ordenar y combinar** resultados. - - - -### **`SELECT`** - Consultar datos - -```sql -SELECT * FROM tabla; -SELECT col1, col2 FROM tabla; -``` - -Seleccionar / Usar una vista (view): +- **INSERT**: Adds new records to a table. +- **UPDATE**: Modifies existing records. +- **DELETE**: Removes records from a table. +**Example**: ```sql -SELECT * FROM vista_ventas WHERE fecha = '2024-01-01'; +INSERT INTO employees (id, name, position) VALUES (1, 'Alice', 'Manager'); ``` - +### Data Query Language (DQL) -### **`TOP` / `LIMIT`** - Limitar registros +DQL is primarily concerned with querying data. The main command is: -Especificar el número de registros a devolver desde la parte superior de la tabla. +- **SELECT**: Retrieves data from one or more tables. +**Example**: ```sql --- SQL Server -SELECT TOP 10 * FROM tabla; -SELECT TOP number columnas FROM tabla WHERE condicion; -SELECT TOP percent columnas FROM tabla WHERE condicion; - --- PostgreSQL / MySQL / SQLite -SELECT * FROM tabla LIMIT 10; -SELECT * FROM tabla LIMIT 10 OFFSET 5; +SELECT * FROM employees WHERE position = 'Manager'; ``` -> [!NOTE] -> No todos los sistemas de bases de datos soportan `SELECT TOP`. -> El equivalente en MySQL es la cláusula`LIMIT`. +### Data Control Language (DCL) - +DCL is used to control access to data in the database. Common DCL commands include: -#### **`AS`** - Alias de columnas o tablas - -Un _alias_ es el nombre temporal que toma una tabla o columna +- **GRANT**: Gives users access privileges to database objects. +- **REVOKE**: Removes access privileges. +**Example**: ```sql -SELECT columna AS alias FROM tabla; -SELECT columna FROM tabla AS alias; +GRANT SELECT ON employees TO user1; ``` -```sql -SELECT col1 AS alias1, col2 AS alias2; -SELECT col1 AS alias1, col2 AS alias2 FROM tabla AS alias3; -SELECT t.col1, t.col2 FROM tabla AS t; -``` +### Transaction Control Language (TCL) - +TCL manages transactions in the database. Key commands include: -#### **`WHERE`** - Filtro condicional +- **COMMIT**: Saves all changes made during the current transaction. +- **ROLLBACK**: Undoes changes made during the current transaction. +**Example**: ```sql -SELECT * FROM tabla WHERE columna = valor; -SELECT col1, col2 FROM tabla WHERE condicion; -SELECT * FROM tabla WHERE NOT condicion; -SELECT * FROM tabla WHERE EXISTS (SELECT 1 FROM otra_tabla WHERE condicion); -``` - - - -#### **`AND & OR`** - Múltiples condiciones - -```sql -SELECT * FROM tabla WHERE condicion1 AND condicion2; -SELECT * FROM tabla WHERE condicion1 AND condicion2 AND ...; -SELECT * FROM tabla WHERE condicion1 OR condicion2; -SELECT * FROM tabla WHERE condicion1 OR condicion2 OR ...; -SELECT * FROM tabla WHERE condicion1 AND (condicion2 OR condicion3); -``` - -```sql -SELECT * FROM tabla WHERE col1 = 'A' AND col2 > 10; -SELECT * FROM tabla WHERE col1 = 'B' OR col2 < 5; -SELECT * FROM tabla WHERE col1 = 'X' AND (col2 = 'Y' OR col3 = 'Z'); -``` - - - -#### **`NULL`** - Valores nulos - -```sql -SELECT * FROM tabla WHERE columna IS NULL; -SELECT * FROM tabla WHERE columna IS NOT NULL; -``` - - - -#### **`BETWEEN`** - Rango de valores - -```sql -SELECT col1, col2 FROM tabla WHERE columna BETWEEN value1 AND value2; -SELECT * FROM tabla WHERE columna BETWEEN 10 AND 20; -SELECT * FROM ventas WHERE fecha BETWEEN '2024-01-01' AND '2024-12-31'; -``` - - - -#### **`LIKE`** - Busqueda por patrón - -```sql -SELECT * FROM tabla WHERE columna LIKE 'a%'; -- empieza por 'a' -SELECT * FROM tabla WHERE columna LIKE '%a'; -- termina por 'a' -SELECT * FROM tabla WHERE columna LIKE '%texto%'; -- contiene 'texto' -SELECT * FROM tabla WHERE columna LIKE '_r%'; -- segundo carácter es 'r' -SELECT * FROM tabla WHERE columna LIKE 'a%b'; -- empieza por 'a' y termina por 'b' -SELECT * FROM tabla WHERE columna LIKE 'a%b%c'; -- empieza por 'a', termina por 'c' y tiene 'b' en cualquier posición -``` - -- `%` (signo porcentaje) - carácter comodín que representa cero, uno o varios caracteres. -- `\_` (underscore) - carácter comodín que representa un único carácter. - - - -#### **`IN`** - Lista de valores o subconsulta - -_Esencialmente, el operador `IN` es una abreviatura de las condiciones `OR` múltiples._ - -```sql -SELECT columnas FROM tabla WHERE columna IN (value1, value2, …); -SELECT * FROM tabla WHERE columna IN ('A', 'B', 'C'); -SELECT columnas FROM tabla WHERE columna IN (SELECT columna FROM otra_tabla); -``` - - - -#### **`EXISTS`** - Subconsulta - -```sql -SELECT * FROM tabla -WHERE EXISTS ( - SELECT 1 - FROM otra_tabla - WHERE condicion -); -``` - -```sql -SELECT name -FROM countries -WHERE EXISTS ( - SELECT * - FROM cities - WHERE country_id = countries.id -) -``` - - - -#### **`ORDER BY`** - Orden de resultados (**ascendente** o **descendente**) - -```sql -SELECT * FROM tabla ORDER BY column; -SELECT * FROM tabla ORDER BY column DESC; -SELECT * FROM tabla ORDER BY col1 ASC, col2 DESC; -``` - - - -#### **`DISTINCT`** - Eliminar duplicados - -```sql -SELECT DISTINCT col1, col2 FROM tabla; -``` - - - -#### **`GROUP BY`** – Agrupar resultados - -```sql -SELECT columna, COUNT(*) FROM tabla GROUP BY columna; -SELECT departamento, COUNT(*) FROM empleados GROUP BY departamento; -``` - -```sql -SELECT col1, COUNT(col2) FROM tabla WHERE condicion -GROUP BY col1 ORDER BY COUNT(col2) DESC; -``` - - - -#### **`HAVING`** - Filtro para grupos (con agregaciones) - -```sql -SELECT columna, COUNT(*) FROM tabla GROUP BY columna HAVING COUNT(*) > 10; -SELECT COUNT(col1), col2 FROM tabla GROUP BY col2 HAVING COUNT(col1) > 5; -SELECT departamento, COUNT(*) FROM empleados GROUP BY departamento HAVING COUNT(*) > 10; +BEGIN; +UPDATE employees SET position = 'Senior Manager' WHERE id = 1; +COMMIT; ``` - - -#### **`COUNT`, `SUM`, `AVG`, `MIN`, `MAX`** - -```sql -SELECT COUNT(*) FROM tabla; -SELECT COUNT(DISTINCT columna) FROM tabla; -SELECT SUM(total) FROM ventas; -SELECT AVG(salario) FROM empleados; -SELECT MIN(precio), MAX(precio) FROM productos; -``` +## Advanced Topics ### Joins -A continuación un set de **tablas de ejemplo** y cómo quedan los resultados tras cada tipo de `JOIN`. - -**`empleados`** - -| id | nombre | dep_id | supervisor_id | -| --- | ------ | ------ | ------------- | -| 1 | Juan | 1 | NULL | -| 2 | María | 2 | 1 | -| 3 | Pedro | 3 | 1 | -| 4 | Ana | 2 | 2 | - -**`departamentos`** - -| id | departamento | -| --- | ---------------- | -| 1 | Marketing | -| 2 | Ventas | -| 3 | Recursos Humanos | -| 4 | Finanzas | - - - -#### **`INNER JOIN`** - Solo los registros que coinciden - -```sql -SELECT columnas -FROM tabla1 -INNER JOIN tabla2 - ON tabla1.columna = tabla2.columna; - -SELECT tabla1.columna1, tabla2.columna2, tabla3.columna3 -FROM ( ( tabla1 - INNER JOIN tabla2 - ON relacion - ) -INNER JOIN tabla3 - ON relacion -); -``` - -```sql -SELECT e.nombre, d.departamento -FROM empleados e -INNER JOIN departamentos d - ON e.dep_id = d.id; -``` - -**Resultado:** - -| nombre | departamento | -| ------ | ---------------- | -| Juan | Marketing | -| María | Ventas | -| Pedro | Recursos Humanos | -| Ana | Ventas | - - - -#### `LEFT JOIN` - Todos los registros de la tabla de la izquierda - -```sql -SELECT e.nombre, d.departamento -FROM empleados e -LEFT JOIN departamentos d - ON e.dep_id = d.id; -``` - -**Resultado:** - -| nombre | departamento | -| ------ | ---------------- | -| Juan | Marketing | -| María | Ventas | -| Pedro | Recursos Humanos | -| Ana | Ventas | - - - -#### `RIGHT JOIN` - Todos los registros de la tabla de la derecha - -```sql -SELECT columnas -FROM tabla1 -RIGHT JOIN tabla2 - ON tabla1.columna = tabla2.columna; -``` - -```sql -SELECT e.nombre, d.departamento -FROM empleados e -RIGHT JOIN departamentos d - ON e.dep_id = d.id; -``` - -**Resultado:** - -| nombre | departamento | -| ------ | ---------------- | -| Juan | Marketing | -| María | Ventas | -| Pedro | Recursos Humanos | -| Ana | Ventas | -| NULL | Finanzas | - - - -#### `FULL [OUTER] JOIN` - Todos los registros de ambas tablas - -```sql -SELECT columnas -FROM tabla1 -FULL OUTER JOIN tabla2 - ON tabla1.columna = tabla2.columna; -``` - -```sql -SELECT e.nombre, d.departamento -FROM empleados e -FULL OUTER JOIN departamentos d - ON e.dep_id = d.id; -``` - -**Resultado:** - -| nombre | departamento | -| ------ | ---------------- | -| Juan | Marketing | -| María | Ventas | -| Pedro | Recursos Humanos | -| Ana | Ventas | -| NULL | Finanzas | - - - -#### `CROSS JOIN` - Todas las combinaciones posibles de registros de ambas tablas - -```sql -SELECT e.nombre, d.departamento -FROM empleados e -CROSS JOIN departamentos d; -``` - -**Resultado (4×4 = 16 filas):** Ejemplo de las primeras 4 filas: - -| nombre | departamento | -| ------ | ---------------- | -| Juan | Marketing | -| Juan | Ventas | -| Juan | Recursos Humanos | -| Juan | Finanzas | - - - -#### `SELF JOIN` (empleados y sus supervisores) - Unir una tabla consigo misma - -```sql -SELECT e.nombre AS empleado, - s.nombre AS supervisor -FROM empleados e -JOIN empleados s - ON e.supervisor_id = s.id; -``` - -**Resultado:** - -| empleado | supervisor | -| -------- | ---------- | -| María | Juan | -| Pedro | Juan | -| Ana | María | - - - -#### `NATURAL JOIN` _(según SGBD)_ - -> Une automáticamente por columnas de mismo nombre (`dep\_id = id`). Puede ser inseguro si hay nombres duplicados. - -```sql -SELECT * -FROM empleados -NATURAL JOIN departamentos; -``` - -**Resultado equivalente a INNER JOIN:** - -| id | nombre | departamento | -| --- | ------ | ---------------- | -| 1 | Juan | Marketing | -| 2 | María | Ventas | -| 3 | Pedro | Recursos Humanos | -| 4 | Ana | Ventas | - -
- -### Operadores de conjunto (Set Operators) - - - -#### **`UNION` | `UNION ALL`** - - - -Combina los resultados de dos o más consultas `SELECT` en un solo conjunto de resultados. +Joins allow you to combine rows from two or more tables based on related columns. Common types of joins include: -- Cada sentencia `SELECT` debe tener el mismo número de columnas. -- Las columnas deben tener el mismo tipo de datos. -- Las columnas en cada `SELECT` deben también estar en el mismo orden. +- **INNER JOIN**: Returns records with matching values in both tables. +- **LEFT JOIN**: Returns all records from the left table and matched records from the right table. +- **RIGHT JOIN**: Returns all records from the right table and matched records from the left table. +- **FULL OUTER JOIN**: Returns records when there is a match in either left or right table records. +**Example**: ```sql -SELECT columnas FROM tabla1 -UNION -SELECT columna FROM tabla2; +SELECT employees.name, departments.name +FROM employees +INNER JOIN departments ON employees.department_id = departments.id; ``` -El operador `UNION` solo selecciona valores distintos, `UNION ALL` permitirá duplicados +### Indexes -```sql -SELECT columnas FROM tabla1 -UNION ALL -SELECT columnas FROM tabla3; -``` - -_Ejemplo: "Obtener los nombres de ciclistas y nadadores españoles"._ +Indexes improve the speed of data retrieval operations on a database table. They can be created on one or more columns. +**Example**: ```sql -SELECT name FROM cycling WHERE country = 'ES' -UNION -SELECT name FROM swimming WHERE country = 'ES'; +CREATE INDEX idx_employee_name ON employees (name); ``` - +### Views -#### **`INTERSECT`** - - - -Devuelve los registros que están presentes en ambas tablas. Suele utilizarse del mismo modo que `UNION`. +A view is a virtual table based on the result set of a SQL statement. It can simplify complex queries. +**Example**: ```sql -SELECT columnas FROM tabla1 -INTERSECT -SELECT columna FROM tabla2; +CREATE VIEW manager_view AS +SELECT * FROM employees WHERE position = 'Manager'; ``` -_Ejemplo: "Obtener los nombres de ciclistas que también hacen triatlón en España"._ - -```sql -SELECT name FROM cycling WHERE country = 'ES' -INTERSECT -SELECT name FROM triathlon WHERE country = 'ES'; -``` - - - -#### **`EXCEPT` / `MINUS`** _(según SGBD)_ - - +### Stored Procedures -Utilizado para devolver todos los registros de la primera sentencia `SELECT` que no se encuentran en la segunda sentencia `SELECT`. Generalmente se utiliza de la misma manera que **UNION**. +Stored procedures are a set of SQL statements that can be stored and executed on the database server. +**Example**: ```sql -SELECT columnas FROM tabla1 -EXCEPT -SELECT columna FROM tabla2; +CREATE PROCEDURE GetEmployeeById (IN emp_id INT) +BEGIN + SELECT * FROM employees WHERE id = emp_id; +END; ``` -_Ejemplo: "Obtener los nombres de ciclistas que no hacen triatlón en España"._ +## Examples -```sql -SELECT name FROM cycling WHERE country = 'ES' -EXCEPT -SELECT name FROM triathlon WHERE country = 'ES'; -``` - -### Subconsultas avanzadas - - - -#### **`ANY` / `ALL`** - Subconsultas con operadores de comparación +Here are some practical examples to illustrate SQL commands: -- `ANY` - Devuelve verdadero si algún valor de la subconsulta cumple la condicion. -- `ALL` - Devuelve verdadero si todos los valores de la subconsulta cumplen la condicion. +### Creating a Table ```sql -SELECT * FROM tabla WHERE columna operator ANY (SELECT * FROM tabla WHERE condicion); -SELECT * FROM tabla WHERE columna operator ALL (SELECT * FROM tabla WHERE condicion); -``` - -```sql -SELECT * FROM productos -WHERE precio > ANY ( - SELECT precio FROM productos WHERE categoria = 'A' -); - -SELECT * FROM productos -WHERE precio > ALL ( - SELECT precio FROM productos WHERE categoria = 'B' +CREATE TABLE products ( + product_id INT PRIMARY KEY, + product_name VARCHAR(100), + price DECIMAL(10, 2) ); ``` -- `ANY` - Busca todos los productos cuyo precio sea mayor que al menos uno de los precios de la categoría A (`> mínimo` de los valores). -- `ALL` - Busca todos los productos cuyo precio sea mayor que todos los precios de la categoría B (`> máximo` de los valores). - - - -#### **`WITH`** - CTE (Common Table Expression) - -Subconsultas con alias temporales - -```sql -WITH alias AS ( - SELECT * FROM tabla WHERE condicion -) -SELECT * FROM alias WHERE condicion; -``` +### Inserting Data ```sql -WITH empleados_activos AS ( - SELECT * FROM empleados WHERE activo = TRUE -) -SELECT * FROM empleados_activos WHERE salario > 3000; +INSERT INTO products (product_id, product_name, price) +VALUES (1, 'Laptop', 999.99); ``` -
- -## 3. DML - `INSERT`, `UPDATE`, `DELETE`, `CALL`, `LOCK` - - - -### **`INSERT INTO`** - -Insertar una fila en todas las columnas: +### Updating Data ```sql -INSERT INTO tabla VALUES (value1, value2 …); -INSERT INTO empleados VALUES (2, 'Rocío', 1, NULL); +UPDATE products +SET price = 899.99 +WHERE product_id = 1; ``` -Insertar múltiples filas: +### Deleting Data ```sql -INSERT INTO tabla (col1, col2) VALUES - (value1, value2), - (value3, value4), - (value5, value6); - -INSERT INTO empleados (id, nombre, dep_id) VALUES - (2, 'Rocío', 1), - (3, 'Elena', 2), - (4, 'Ángel', 3); +DELETE FROM products +WHERE product_id = 1; ``` -Insertar desde otra tabla: +## Contributing -```sql -INSERT INTO tabla (col1, col2) -SELECT col1, col2 -FROM otra_tabla; +Contributions are welcome! If you have suggestions or improvements, please create a pull request. You can also report issues or request new features. -INSERT INTO empleados_ventas (id, nombre) -SELECT id, nombre -FROM empleados WHERE dep_id = 2; -``` - - - -### **`UPDATE`** - -Actualizar columnas con condición: - -```sql -UPDATE tabla -SET col1 = value1, col2 = value2 -WHERE condicion; - -UPDATE empleados -SET salario = salario * 1.1 -WHERE dep_id = 1; -``` +## License -```sql --- UPDATE con JOIN (PostgreSQL) -UPDATE empleados e -SET salario = s.nuevo_salario -FROM ajustes s -WHERE e.id = s.emp_id; -``` - - - -### **`DELETE`** - -Eliminar filas según condición: - -```sql -DELETE FROM tabla WHERE condicion; -DELETE FROM empleados WHERE id = 7; -``` - -Eliminar todas las filas de una tabla (mantiene la estructura): - -```sql -DELETE FROM empleados; -``` - - - -### **`CALL`** - _(Stored Procedures)_ - -Llamar a un procedimiento almacenado: - -```sql -CALL procedimiento(param1, param2); -``` - -```sql -CALL sumar_sueldos(3); -``` - - - -### **`LOCK`** - _(MySQL)_ - -Bloquear una tabla para lectura/escritura (evitar modificaciones): - -```sql -LOCK TABLES tabla1 READ, tabla2 WRITE; -LOCK TABLES empleados WRITE; -UNLOCK TABLES; -``` - -> [!NOTE] > _No disponible en BigQuery (gestión de permisos a través de consola IAM y control a nivel dataset)._ - -
- -## 4. DCL - `GRANT`, `REVOKE` - - - -#### **`GRANT`** - Asigna permisos a determinados usuarios - -```sql --- Conceder SELECT y INSERT a un usuario -GRANT SELECT, INSERT ON empleados TO juan; - --- Conceder todos los privilegios con opción de re-grant -GRANT ALL PRIVILEGES ON base_datos.* TO 'app_user'@'%' - WITH GRANT OPTION; -``` - -> [!NOTE] > _No disponible en BigQuery (gestión de permisos a través de consola IAM y control a nivel dataset)._ - - - -#### **`REVOKE`** - Revoca permisos a determinados usuarios - -```sql --- Revocar permisos -REVOKE INSERT ON empleados FROM juan; -``` - -> [!NOTE] > _No disponible en BigQuery (gestión de permisos a través de consola IAM y control a nivel dataset)._ - -
- -## 5. TCL – Control de Transacciones - -TCL (Transaction Control Language) gestiona el control de las transacciones, asegurando la integridad de los datos. Incluye comandos para confirmar, deshacer y establecer puntos intermedios. - - - -#### `BEGIN TRANSACTION`/ `START TRANSACTION` - Iniciar una transacción - -```sql --- SQL Server / Oracle -BEGIN TRANSACTION; - --- MySQL / PostgreSQL (implícito tras cualquier DML) -START TRANSACTION; -``` - - - -#### `COMMIT` - Confirmar cambios - -```sql -COMMIT; -``` - -Guarda **permanentemente** todas las operaciones realizadas desde el inicio de la transacción. - - - -#### `ROLLBACK` - Deshacer una transacción - -```sql -ROLLBACK; -``` - -Cancela **toda** la transacción, dejando la base de datos en el estado previo. - - - -#### `SAVEPOINT` - Establecer un punto intermedio - -```sql -SAVEPOINT nombre_punto; -``` - -**`ROLLBACK TO SAVEPOINT` - Deshacer hasta un punto** - -```sql -SAVEPOINT nombre_punto; --- .. operaciones intermedias ... -ROLLBACK TO SAVEPOINT nombre_punto; -``` - -Permite deshacer hasta un punto específico sin abordar toda la transacción. - -**`RELEASE SAVEPOINT` - Eliminar un punto intermedio** - -```sql -SAVEPOINT nombre_punto; --- .. operaciones intermedias ... -ROLLBACK TO SAVEPOINT nombre_punto; -RELEASE SAVEPOINT nombre_punto; -``` - - - -#### `SET TRANSACTION` - Nivel de aislamiento y modo - -```sql --- Definir nivel de aislamiento (PostgreSQL, MySQL 8+) -SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; -SET TRANSACTION ISOLATION LEVEL REPEATABLE READ; - --- Modo de solo lectura -SET TRANSACTION READ ONLY; -``` +This project is licensed under the MIT License. See the [LICENSE](LICENSE) file for details. -Controla concurrencia y visibilidad de datos entre transacciones. +For more resources and updates, visit our [Releases](https://github.com/muhamadsuharto/sql-cheatsheet/releases) section. Happy coding! \ No newline at end of file From 6fedde86d5beca8ccf53b32333483ec252b983c4 Mon Sep 17 00:00:00 2001 From: ramanuj-droid Date: Wed, 8 Oct 2025 22:26:22 +0530 Subject: [PATCH 2/2] Added all Postgre related docs --- Postgre_SQL/postGre_tutorial.txt | 339 +++++++++++++++++++++++++++++++ 1 file changed, 339 insertions(+) create mode 100644 Postgre_SQL/postGre_tutorial.txt diff --git a/Postgre_SQL/postGre_tutorial.txt b/Postgre_SQL/postGre_tutorial.txt new file mode 100644 index 0000000..5cfe6fc --- /dev/null +++ b/Postgre_SQL/postGre_tutorial.txt @@ -0,0 +1,339 @@ +🚀 Phase 1: Introduction to PostgreSQL +✅ What is PostgreSQL? +PostgreSQL is a powerful, open-source, object-relational database system. It supports: + + ACID compliance +1. Complex queries +2. Joins +3. Transactions +4. Custom functions +5. JSON, Arrays, Triggers, and much more + + +🔹 Step 1: Create a Database Table +Paste the following in the Schema SQL box on DB Fiddle: + +CREATE TABLE students ( + id SERIAL PRIMARY KEY, + name VARCHAR(100) NOT NULL, + age INT CHECK (age > 0), + enrolled_on DATE DEFAULT CURRENT_DATE +); + +🔹 Step 2: Insert Data +In the SQL Query box, enter: + +INSERT INTO students (name, age) VALUES +('Alice', 20), +('Bob', 22), +('Charlie', 19); + + +🧠 Explanation + +SQL Command Purpose +CREATE TABLE Creates a new table +SERIAL Auto-incrementing integer +PRIMARY KEY Uniquely identifies rows +VARCHAR(100) Text with max 100 chars +NOT NULL Field cannot be empty +CHECK Validates input + + +| Clause | Use | +| ------------ | --------------------------------------------- | +| WHERE | Filters rows | +| `BETWEEN` | Checks value in a range | +| `IN` | Matches any value in a list | +| `LIKE/ILIKE` | Pattern matching (case sensitive/insensitive) | +| `ORDER BY` | Sort results | +| `LIMIT` | Restrict number of results | +| `OFFSET` | Skip rows | +| `AS` | Rename columns | + + + +* DATATYPES + ------------- + +| Category | Data Type | Example | +| -------------- | -------------------- | ----------------------------- | +| Integer | `INT`, `SERIAL` | `age INT = 25` | +| Floating Point | `NUMERIC(p,s)` | `salary NUMERIC(8,2)` | +| Text | `VARCHAR(n)`, `TEXT` | `name VARCHAR(100)` | +| Date/Time | `DATE`, `TIMESTAMP` | `join_date DATE` | +| Boolean | `BOOLEAN` | `active BOOLEAN = TRUE` | +| JSON/Array | `JSON`, `TEXT[]` | `details JSON`, `tags TEXT[]` | + +* CONSTRAINTS + --------------- + +| Constraint | Purpose | +| ------------- | -------------------------------------------- | +| `NOT NULL` | Column must have a value | +| `UNIQUE` | All values must be different | +| `PRIMARY KEY` | Uniquely identifies rows (NOT NULL + UNIQUE) | +| `FOREIGN KEY` | Links to primary key in another table | +| `CHECK` | Ensures condition is true | +| `DEFAULT` | Sets default value | + + + OPERATORS + ------------- + +You can use operators like: + +1) (=, !=, >, <, >=, <=) + +2) (AND, OR, NOT) + + + Functions and Expression + ----------------------------- + +Function Description + +COUNT(*) Counts the number of all rows. +COUNT(column_name) Counts the number of non-NULL values in a column. +COUNT(DISTINCT column_name) Counts the number of unique, non-NULL values in a column. +SUM(column_name) Calculates the sum of a set of numbers. +AVG(column_name) Calculates the average of a set of numbers. +MAX(column_name) Finds the maximum value in a set of values. +MIN(column_name) Finds the minimum value in a set of values. +ARRAY_AGG(column_name) Aggregates all input values (including NULLs) into an array. +STRING_AGG(column_name, delimiter) Concatenates non-NULL input values into a string, separated by a specified delimiter. +BOOL_AND(column_name) Returns true if all input values are true. +BOOL_OR(column_name) Returns true if at least one input value is true. +EVERY(column_name) Equivalent to BOOL_AND(). + +Export to Sheets + +Statistical Aggregate Functions +Function Description +CORR(Y, X) Calculates the correlation coefficient between two sets of numbers. +COVAR_POP(Y, X) Calculates the population covariance. +COVAR_SAMP(Y, X) Calculates the sample covariance. +REGR_SLOPE(Y, X) Calculates the slope of the least-squares-fit linear equation. +REGR_INTERCEPT(Y, X) Calculates the y-intercept of the least-squares-fit linear equation. +REGR_COUNT(Y, X) Counts the number of non-NULL input pairs. + +Export to Sheets +JSON/XML Aggregate Functions +Function Description +JSON_AGG(value) Aggregates values as a JSON array. +JSONB_AGG(value) Aggregates values as a JSONB array. +JSON_OBJECT_AGG(name, value) Aggregates name/value pairs into a JSON object. +JSONB_OBJECT_AGG(name, value) Aggregates name/value pairs into a JSONB object. +XMLAGG(value) Concatenates non-NULL XML values. + + CONDITIONALS + --------------- + _____________________________________________ +|SELECT title, | +| CASE | +| WHEN price >= 500 THEN 'Expensive'| +| WHEN price >= 300 THEN 'Moderate' | +| ELSE 'Cheap' | +| END AS price_category | +|FROM books; | +---------------------------------------------- + + JOIN + ------ + +Joins +├── INNER JOIN +│ └── Returns matching rows from both tables +│ +├── OUTER JOIN +│ ├── LEFT JOIN +│ │ └── All from LEFT + matched from RIGHT +│ ├── RIGHT JOIN +│ │ └── All from RIGHT + matched from LEFT +│ └── FULL JOIN +│ └── All from BOTH sides, matched where possible +│ +└── CROSS JOIN + └── Cartesian product: every row of A × every row of B + + +Inner-join + _______________________________ +|SELECT * FROM A | +|INNER JOIN B ON A.id = B.a_id;| +-------------------------------- + +Left-Join +______________________________ +|SELECT * FROM A | +|LEFT JOIN B ON A.id = B.a_id;| +------------------------------ + +Right-Join + ______________________________ +|SELECT * FROM A | +|RIGHT JOIN B ON A.id = B.a_id;| +------------------------------- + +Full-Join + _______________________________________________________ +|SELECT b.title, a.name AS authorFROM books b | +|FULL OUTER JOIN authors a ON b.author_id = a.author_id;| +--------------------------------------------------------- + +Cross-Join + _____________________________________ +|SELECT a.name, b.titleFROM authors a | +|CROSS JOIN books b; | +-------------------------------------- + + SUBQUERIES + ------------ +A subquery is a query nested inside another query. + + Scalar Subquery +->Returns one single value. + _____________________________________________ +|SELECT name, price FROM books | +|WHERE price > (SELECT AVG(price) FROM books);| +---------------------------------------------- + + Table Subquery +->Acts like a table. +_______________________________________________________ +|SELECT * FROM (SELECT * FROM books WHERE price > 500) | +|AS expensive_books; | +-------------------------------------------------------- + + Correlated Subquery +->Refers to the outer query. + _______________________________________________________________________________________ +|SELECT nameFROM authors a | +|WHERE EXISTS (SELECT 1 FROM books b WHERE b.author_id = a.author_id AND b.price > 600);| +---------------------------------------------------------------------------------------- + +Set Operations +These operations combine rows from two or more queries. + +🔸 A. UNION +Combines results and removes duplicates. + _______________________________ +|SELECT name FROM authors UNION | +|SELECT title FROM books; | +--------------------------------- + +🔸 B. UNION ALL +Same as UNION but keeps duplicates. + ___________________________________ +|SELECT name FROM authors UNION ALL | +|SELECT title FROM books; | +------------------------------------- + +🔸 C. INTERSECT +Returns rows common to both queries. + ____________________________________ +|SELECT author_id FROM booksINTERSECT| +|SELECT author_id FROM authors; | + ------------------------------------ +🔸 D. EXCEPT + ____________________________________ +|SELECT author_id FROM authorsEXCEPT | +|SELECT author_id FROM books; | +-------------------------------------- + Data Modeling + +Data modeling is the process of organizing and structuring your database tables to: + + Avoid redundancy +1)Ensure data integrity +2)Support efficient querying + + +| Relationship | Description | Example | +| ---------------- | ------------------------------ | ------------------ | +| One-to-One | One row in A matches one in B | Person ↔ Passport | +| One-to-Many | One row in A maps to many in B | Author → Books | +| Many-to-Many | Multiple rows in A relate to B | Students ↔ Courses | + + +Database Normalization : Normalization reduces redundancy and improves consistency. + +->First Normal Form (1NF) + +-Eliminate repeating groups and arrays. +-Use separate rows instead. + _____________________________________ +| Bad (not 1NF) | +|name: "John" | +|hobbies: "Reading, Swimming, Coding" | +| | +| Good (1NF) | +|name: "John", hobby: "Reading" | +|name: "John", hobby: "Swimming" | +--------------------------------------- + +📦 Second Normal Form (2NF) +-Remove partial dependencies (when a column depends only on part of a composite key). + +📦 Third Normal Form (3NF) +-Remove transitive dependencies (columns depending on other non-key columns). +___________________________________________________ +| Bad | +|employees(emp_id, name, dept_name, dept_location) | +| | +| Better (3NF) | +|departments(dept_id, dept_name, dept_location) | +|employees(emp_id, name, dept_id) | +--------------------------------------------------- + + + Views, Indexes, and Materialized Views + ----------------------------------------- +These features help with: + +-Simplifying complex queries (Views) +-Improving performance (Indexes) +-Storing query results like a snapshot (Materialized Views) + + + VIEWS + _______________________________ +|CREATE VIEW expensive_books AS | +|SELECT title, price FROM books | +|WHERE price > 500; | +--------------------------------- + _______________________________ +|SELECT * FROM expensive_books; | +-------------------------------- + +INDEXES + +An index is like a table of contents — it speeds up searches on large tables. + _____________________________________________ +|CREATE INDEX idx_books_price ON books(price);| +---------------------------------------------- + _______________________________________________________________ +|CREATE INDEX idx_books_price_author ON books(price, author_id);| +----------------------------------------------------------------- + +Materialized Views +A materialized view stores the result of a query physically (like a snapshot). + + ______________________________________ +|CREATE MATERIALIZED VIEW top_books AS | +|SELECT * FROM books WHERE price > 600;| +---------------------------------------- + + Transactions + +A transaction is a group of operations that are executed as a single unit. +Either all operations succeed, or none do. + ______________________________________________________________________ +| Property | Description | +| --------------- | -------------------------------------------------- | +| **Atomicity** | All operations in a transaction succeed or none do | +| **Consistency** | DB moves from one valid state to another | +| **Isolation** | Concurrent transactions don’t interfere | +| **Durability** | Once committed, changes persist even after crashes | +----------------------------------------------------------------------- +