SQL Fast track
Standard Query Language (SQL)
● Lenguaje estándar para manipular datos estructurados en bases relacionales, con estándar ANSI
1986 e ISO en 1987, aunque cada RDBMS (Relational Data Base Management System) tiene sus
"bemoles", todos entienden el estándar.
● Por RDBMS entendemos a Oracle, PostgreSQL, MySQL(Maria DB), SQL Server, etc…
● Las bases de datos están construidas por objetos llamados Tablas, que a su vez se construyen por
registros ( o filas ) y campos ( o columnas )
Paréntesis, crear una instancia en
GCP
Instalando una base de datos
Usando GCP desde una instancia virtual, y clonar ESTE repositorio y usar los siguientes scripts.
/maria_db_shells/…
● 1_instalar_mariadb_easy.sh
● 2_crear_usuario.sh
● 3_modificar_confi[Link]
● 4_crear_regla_vpc.sh
NO OLVIDAR, el usuario será big_data_user y el password Example123
Si hay dudas, revisar el archivo [Link]
Instalación de MariaDB
Ya tienes una base de datos andando.
Instalar una BD de ejemplo
● git clone [Link]
● cd test_db/
● mysql -u [usuario] -p [password] < [Link]
Regresando a SQL
Comandos
Los comandos SQL se dividen en varios tipos diferentes:
● Definición de datos (Data Definition Language - DDL) se utilizan para definir tablas de datos. (CREATE, ALTER,
DROP)
● Manipulación de datos (Data Manipulation Language - DML) se utilizan para manipular datos en tablas existentes
agregando, cambiando o eliminando datos, Los comandos DML operan en las tablas definidas con los comandos
DDL. (SELECT, INSERT, UPDATE, DELETE)
● El lenguaje de consulta de datos consta de un solo comando, SELECT, que se utiliza para obtener datos
específicos de las tablas.
● Lenguaje de control de datos (DCL) se utilizan para otorgar o revocar privilegios de acceso a los usuarios
(GRANT, REVOKE)
● Control de transacciones se utilizan para cambiar el estado de algunos datos, por ejemplo, para COMMIT
cambios de transacciones o para ROLLBACK cambios de transacciones.
Tipos de datos
Sentencias y Sintaxis
Usando las tablas de la "toy database", seleccionando así en MariaDB
Sentencias y Sintaxis
SELECT [campos] FROM [tabla];
Ejemplos:
SELECT * FROM departments;
Sentencias y Sintaxis Cláusula WHERE
Sirve para condicionar la búsqueda a partir de una sentencia
lógica, para "filtrar" los datos. Encontraremos a los empleados
del departamento 'd001'
SELECT * FROM dept_emp WHERE dept_no = 'd001' LIMIT 10;
(la palabra LIMIT solo obtiene los primeros 'n' resultados de la
tabla, en este caso los primeros 10 registros)
Sentencias y Sintaxis Sentencia GROUP BY
Sirve para agrupar renglones con funciones agrupadas, por
ejemplo COUNT
Por ejemplo, encontremos cuantos empleados hay por
departamento
SELECT dept_no, COUNT(*) FROM dept_emp GROUP BY
dept_no;
Sentencias y Sintaxis Cláusula HAVING
Se usa junto a la cláusula WHERE para filtrar en agrupaciones
SELECT * FROM [table] WHERE [condition] GROUP BY [columna] HAVING
[condicion]
Ejemplo, filtraremos sólo los departamentos con menos de 20k
SELECT dept_no, COUNT(*) FROM dept_emp GROUP BY dept_no
HAVING COUNT(*) < 20000;
Sentencias y Sintaxis Función COUNT(*)
Nos dirá cuántos registros tiene el 'query' que lanzamos.
SELECT COUNT(*) FROM dept_emp WHERE dept_no = 'd001';
Nota que aquí ya no usamos LIMIT
Sentencias y Sintaxis
SENTENCIA ORDER BY
Ordenará a partir de una columna
SELECT * FROM dept_emp WHERE dept_no = 'd001' ORDER BY from_date LIMIT
10;
Por defecto es ascendente, pero podemos invertirlo con DESC
SELECT * FROM dept_emp WHERE dept_no = 'd001' ORDER BY from_date DESC
LIMIT 10;
Sentencias y Sintaxis
Operador AND
Funciona para concatenar relaciones lógicas dentro de la cláusula WHERE, se pueden usar
tantos operadores como filtros hagan falta.
SELECT * FROM dept_emp WHERE dept_no = 'd001' and from_date < '1985-02-03'
Sentencias y Sintaxis
Operador OR
Funciona para concatenar relaciones lógicas dentro de la
cláusula WHERE, se pueden usar tantos operadores
como filtros hagan falta.
SELECT * FROM dept_emp WHERE dept_no = 'd001' or
dept_no = 'd002' or from_date < '1985-02-03' limit 10;
Sentencias y Sintaxis
Sentencia INSERT INTO
Se utiliza para insertar un registro dentro de una tabla. Insertemos un departamento nuevo en la tabla dept.
INSERT INTO [Tabla] (columna1, columna2, …) VALUES (valor1, valor 2, …)
INSERT INTO departments VALUES('d010', 'Data Science');
Sentencias y Sintaxis
Sentencia UPDATE
Se utiliza para actualizar el valor en uno o varios registros dentro de
una tabla. Actualicemos un departamento en la tabla dept.
INSERT INTO [Tabla] (columna1, columna2, …) VALUES (valor1,
valor2, …)
UPDATE departments SET dept_name = 'Data Science & AI' WHERE
dept_no = 'd010'
Sentencias y Sintaxis La sentencia UPDATE sin un WHERE puede
resultar en un cambio en TODA LA TABLA, esto
puede afectar registros que no se necesitan
Sentencia UPDATE modificar. Cuando veas el símbolo, no te
tropieces!
Se utiliza para actualizar el valor en uno o varios registros dentro de una tabla. Actualicemos un departamento en la tabla dept.
INSERT INTO [Tabla] (columna1, columna2, …) VALUES (valor1, valor2, …)
UPDATE departments SET dept_name = 'Data Science & AI' WHERE dept_no = 'd010'
Sentencias y Sintaxis
Sentencia DELETE
Se utiliza para borrar registros dentro de la tabla
DELETE FROM [tabla] WHERE [condición]
DELETE FROM departments WHERE dept_no = 'd010';
Sentencias y Sintaxis
Funciones agregadas
Se utilizan para describir datos dentro de las tablas, ya utilizamos una (COUNT()), aquí más ejemplos aplicados a la tabla
salaries
Sentencias y Sintaxis
Operador LIKE
Dentro de la cláusula WHERE, se puede utilizar para encontrar un patrón específico, usando:
● % representa 0, 1 o múltiples caracteres.
● _ representa 1 solo caracter.
SELECT emp_no, birth_date, first_name, last_name FROM employees WHERE first_name LIKE 'e%' LIMIT 10;
JOIN
La cláusula JOIN se utiliza para combinar registros
entre dos o más tablas, basadas en relaciones entre
ellas, observa el diagrama "Entidad-Relación" que
tenemos para la base de Employees:
JOIN
La cláusula JOIN se utiliza para combinar registros
entre dos o más tablas, basadas en relaciones entre
ellas, observa el diagrama "Entidad-Relación" que
tenemos para la base de Employees:
Nota que podemos relacionar la tabla [employees]
con la tabla [salaries] por medio del campo 'emp_no'.
¿Cómo?
SELECT * FROM employees as e
INNER JOIN salaries as s
ON e.emp_no = s.emp_no
LIMIT 10;
Distintos tipos de JOIN
[Link]
Subqueries
Se puede utilizar un query dentro de un query, por ejemplo, una manera de obtener aquellos empleados
que tengan un salario mayor a 90K y que sean del departamento de marketing puede ser:
SELECT e.*, [Link] FROM
employees AS e
RIGHT JOIN (
SELECT * FROM salaries WHERE salary > 90000
) as m ON m.emp_no = e.emp_no
LIMIT 10;
Combinando Todo
Unos queries de ejemplo:
Encontrar el salario promedio de los managers del departamento de marketing.
Combinando Todo
Unos queries de ejemplo:
Encontrar el salario y nombre de los managers actuales del departamento de marketing.
SELECT d.dept_no, e.first_name, e.last_name, [Link] FROM
employees AS e
LEFT JOIN dept_manager AS dm ON dm.emp_no = e.emp_no
RIGHT JOIN salaries AS s ON s.emp_no = e.emp_no
LEFT JOIN departments AS d on dm.dept_no = d.dept_no
WHERE dm.to_date = '9999-01-01'
¿Por qué se
repiten?
Te toca
solucionarlo.
Combinando Todo
Unos queries de ejemplo:
Encontrar el nombre y nombre de departamento de los 10 empleados con menor salario ACTUAL que tengan el título de 'Senior Engineer', (Usando Subqueries)
SELECT e.emp_no, e.first_name, e.last_name, dpt.dept_name, [Link], [Link] FROM employees AS e
JOIN (SELECT emp_no, title FROM titles WHERE title = 'Senior Engineer') as t on t.emp_no = e.emp_no
JOIN (SELECT emp_no, d.dept_name from dept_emp AS de JOIN departments AS d on d.dept_no = de.dept_no AND de.to_date = '9999-01-01') as dpt on dpt.emp_no =
e.emp_no
JOIN salaries AS s ON s.emp_no = e.emp_no
WHERE s.to_date = '9999-01-01'
order by [Link] asc
limit 10;