b3t4 - SQL Flashcards

1
Q

Que tipo de lenguaje es el Sql? Generacion y delcararivo/imperativo

A

Es un lenguaje de 4gl (4º generación) declarativo + una extensión procedural

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Cuál es el standar ISO de SQL?

A

ISO 9075
Antes era ANSI-86 y luego ANSI-92

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Cuál fué la versión del standar SQL que ya incluyó SQL3 con triggers?

A

SQL3
ISO9075 - SQL:1999

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Cuál es la última versión del stadar de SQL?

A

ISO9075 - SQL:2016 (compatibilidad con json)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Qué es SQL/PSM?

A

Persistent Stored modules: Es la extensión del standar ISO9075 de SQL que es el lenguaje procedural en lugar de declarativo, que se usa en los procedimientos almacenados
Por ejemplo el Oracle PL/SQL o Sybase Transact-SQL está derivado de este standar

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Qué es SQLite?

A

Es un formato de ficheros y una librería que usa ese fichero y que entiende el estandar SQL y transacciones sobre ese fichero. Es para uso local, no es cliente-servidor. Se usa en Android

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Qué son cada uno de estos sublenguajes de SQL?
DDL
DML
DCL

A

DDL -> Data Definition Languaje -> Creación, borrado, eliminarción de objetos
DML -> Data Manipulation Languaje -> consulta/borrado/modificación/inserción de datos
DCL -> Data Control Languaje -> Control sobre permisos, transacciones, etc … -> Dentro está el TCL (Transaction Control Languaje)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Sentencias de DML
SELECT
UPDATE
INSERT
DELETE
MERGE
TRUNCATE *

A

SELECT (joins, agrupaciones, consultas)
UPDATE
INSERT
DELETE
MERGE -> mezcla de registros de una tabla sobre otra
TRUNCATE -> (es DML o DDL) -> borra los datos de una tabla. Sin tener en cuenta las transacciones

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Sentencias de DDL
CREATE
DROP
ALTER
TRUNCATE*

A

CREATE -> crear
DROP -> borrar
ALTER -> modificar
TRUNCATE -> (es DML o DDL) -> borra los datos de una tabla. Sin tener en cuenta las transacciones
+
TABLE
INDEX
VIEW
PROCEDURE
SEQUENCE
FUNCTION
TYPE -> tipos compuestos de datos
TRIGGER
DOMAIN -> dominio de valores
SCHEMA -> una forma de agrupar tablas para subsistemas funcionales
ROLE -> para asignar permisos y funcionalidades a ese rol. El rol se asigna a usuarios

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Sentencias de DCL
CALL procedure
GRANT
REVOKE
COMMIT/ROLLBACK
SAVEPOINT
SET TRANSACTION / START TRANSACTION

A

CALL procedure -> para llamar a procedimientos almacenados
GRANT -> dar permisos
REVOKE -> quitar permisos

TCL —————
COMMIT/ROLLBACK -> confirmar o deshacer los cambios en una transacción
SAVEPOINT -> poner un savepoint, para que si se hace rollback sólo se deshace a partir del savepoint /RELEASE SAVEPOINT (para quitar el savepoint)
SET TRANSACTION / START TRANSACTION -> Configurar e iniciar una transacción

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Mirar cómo se hacen en los distintos gestores de bbdd (oracle, mysql, postgres, sqlserver)
create index
create view
call
funciones de fechas y cadenas

A
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Constraints
CHECK
PRIMARY KEY
UNIQUE
FOREIGN KEY

A

CHECK -> establecer condiciones que ha de cumplir el valor del campo
PRIMARY KEY
UNIQUE -> admite 1 solo null en toda la columna
FOREIGN KEY

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Sintaxis de CREATE y las distintas CONSTRAINT

A

CREATE TABLE nombre-tabla (campo1 CHAR(4) not null, campo 2 INT, …),
CONSTRAINT nombre-constraint PRIMARY KEY (campo key),
CONSTRAINT nombre-constraint FOREIGN KEKY (campo fk) REFERENCES tabla_referenciada (campo_referenciado),
CONSTRAINT nombre-constraint UNIQUE (campo),
CONSTRAINT nombre-constraint CHECK (condición o exp regular)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Sintaxis ALTER TABLE, y sus distintas opciones para
añadir columna
modificar columna
eliminar columna
añadir restriccion

A

ALTER TABLE nombre_tabla ADD COLUMN nombre_col tipo_dato atributos

ALTER TABLE nombre_tabla ALTER COLUMN nombre_col SET DEFAULT/SET NOT NULL/SET DATA TYPE tipo dato

ALTER TABLE nombre_tabla DROP COLUMN nombre_col

ALTER TABLE nombre_tabla ADD CONSTRAINT…

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Sintáxis de GRANT

A

GRANT tipo-privilegio ON objeto TO destinatario-privilegio [WITH GRANT OPTIONS]
- tipo privilegio: (SELECT, UPDATE, INSERT, DELETE, REFERENCES (para poder hacer fks)) + columnas, ALL, USAGE (ej. secuencia), EXECUTE
- objeto: tabla, vista, …
- destinatario-privilegio: usuario, rol
- WITH GRANT OPTIONS: para que el destinatario del permiso también pueda darlo a otros. Delegación de permisos

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Sintáxis REVOKE

A

REVOKE privilegio ON objeto FROM destinatario-privilegio

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
17
Q

En qué consisten los siguentes niveles de aislamiento que se pueden configurar en un monitor de transacciones de una base de datos?
READ UNCOMMITED
READ COMMITED
REPEATABLE READ
SERIALIZABLE

A

READ UNCOMMITED -> (lectura no confirmada) se permite leer los datos de las transacciones no comiteadas
READ COMMITED -> (lectura confirmada) solo se pueden leer los datos de transacciones comiteadas
REPEATABLE READ (lectura repetible)-> no permite durante una transacción que otra transacción haga commits, mediante bloqueos de registro
SERIALIZABLE (serializable)-> todas las transacciones una detrás de otra, no da problemas de concurrencia, es que peor rendimiento tiene

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
18
Q

Ver el vídeo para entender los niveles de las transacciones

A

https://www.youtube.com/watch?v=ky7zUJwfWQc

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
19
Q

Qué son los problemas de concurrencia siguientes y a qué niveles de aislamiento de transacciones afecta?

Lectura sucia
Lectura no repetible
Lectura fantasma

A

Lectura sucia -> Cuando se permite leer los datos no comiteados de otra transacción
Lectura no repetible -> Ocurre cuando a lo largo de una transacción, la misma lectura que se haga varias veces y de datos distintos, porque entre una lectura y otra haya comiteado otra transacción
Lectura fantasma -> Cuando en la lectura se leen un rango de registros, y no se puede solucionar por bloqueos porque no se pueden bloquean rangos, si otra transacción inserta, modifica, etc … ya hay lectura fantasma

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
20
Q

Sintaxis INSERT

A

INSERT INTO tabla (col1, col2,…) VALUES (valor1, valor2…)

Se puede hacer un INSERT a partir de los datos de una sélect

INSERT INTO tabla (col1, col2,…) SELECT …

21
Q

Sintáxis UPDATE

A

UPDATE tabla SET col1 = valor, col2=valor WHERE

22
Q

Sintáxis DELETE

A

DELETE FROM tabla WHERE condiciones

23
Q

Sintáxis SELECT

A
24
Q

Qué tres usos tienen las subconsultas?

A

where [NOT] EXISTS (subconsulta) -> da true/false si la subconsulta devuelve resultados o no
where col1 [NOT] IN (subconsulta) -> da true si el campo está (o no si se pone NOT) en la subconsulta
where col1 [operador =, >=, < …] ANY/SOME/ALL (subconsulta) -> compara el campo con otros de la subconsulta

25
Q

Qué hacen a alto nivel los distintos tipos de join?
CROSS JOIN
INNER JOIN
LEFT [OUTER] JOIN
RIGHT [OUTER] JOIN
FULL [OUTER] JOIN

A

https://zbrain-academy.es/pluginfile.php/76122/mod_resource/content/1/SQL_Joins.pdf

CROSS JOIN -> producto cartersiano, todos por todos
INNER JOIN -> solo coincidentes
LEFT [OUTER] JOIN -> tabla izquierda, completando con los que coincida de la derecha, los que no coincidan los rellena a null en la derecha
RIGHT [OUTER] JOIN -> tabla derecha, completando con los que coincida de la izquierda, los que no coincidan los rellena a null en la izquierda
FULL [OUTER] JOIN -> left join + right join

26
Q

Qué es el EXPLAIN PLAN de Oracle?

A

Sentencia que muestra el plan de ejecución de Oracle de operaciones para ejecutar internamente una sentencia SELECT, UPDATE, INSERT o DELETE

27
Q

Qué hace la sentencia UNION? Y UNION ALL?

A

Operador de conjuntos como EXCEPT, INTERSEC
Lo que hace es unir distintas selects compatibles (que sacan las mismas columnas), eliminando las repetidas

UNION ALL deja las duplicadas

28
Q

Qué hace y cuál es la sintaxis de la sentencia MERGE?

A

Sirve para, en una sola sentencia, comparar dos tablas, una source y una target por un campo, y especficicar acciones INSERT, UPDATE o DELETE en la tabla source en función de esa comparación.

MERGE INTO < tablaobjetivo> AS obj
USING < tablafuente> AS fuente
ON < clausula coincidencia>
WHEN MATCHED [ AND < clausula >]
THEN < codigo >
WHEN NOT MATCHED [BY TARGET] [AND < clausula >]
THEN INSERT…
WHEN NOT MATCHED BY SOURCE [AND < clausula >]
THEN < codigo>
[OUTPUT …]
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

MERGE INTO <tablaObjetivo> : Define la tabla a la cual le realizaremos las operaciones INSERT, UPDATE, o DELETE.
**USING** <tablaFuente>: Define la tabla de la cual provienen los datos, aunque también se puede utilizar un CTE o tabla derivada entre algunas otras opciones. Lo más común es utilizar una tabla.
**ON** <clausula>: Define la cláusula utilizada para encontrar las coincidencias entre ambas tablas, fuente y destino, muy parecido al ON de un JOIN.
**WHEN MATCHED** [ AND <clausula>] THEN <codigo>: Se utiliza cuando existen coincidencias a través de la cláusula ON, por lo tanto la acción INSERT no está permitida; es posible utilizar 2 cláusulas WHEN MATCHED, una para utilizar la acción **UPDATE** y otra para la acción **DELETE**, la única condicionante es que deben tener filtros si se utilizan ambas, esto se los explicaré con ejemplos posteriormente.
**WHEN NOT MATCHED** [BY TARGET] [AND <clausula>] THEN INSERT... Se utiliza cuando una fila existe en la fuente pero no en el destino, por lo tanto la única operación permitida es un INSERT.
**WHEN NOT MATCHED BY SOURCE** [AND < clausula >] THEN <codigo> Es el caso contrario a la cláusula anterior, cuando la fila existe en la tabla destino pero no en la fuente, no se puede aplicar una operación INSERT pero si UPDATE y DELETE, también se puede declarar dos cláusulas de este tipo al igual que la claúsula WHEN MATCHED, con la misma condicionante que deben tener filtros.
**OUTPUT** Se pueden obtener los datos insertados, eliminados y actualizados por medio de las palabras reservadas inserted y deleted, esto lo expliqué en otro en la publicación CLAUSULA OUTPUT( inserted, deleted ) SIN TRIGGERS.</codigo></clausula></codigo></clausula></clausula></tablaFuente></tablaObjetivo>

29
Q

Qué hace y cuál es la sentencia sql TRUNCATE?

A

TRUNCATE borra los datos de una tabla y deja la estructura

Es un borrado rápido, saltándose los mecanismos de integridad, hace commit automático al terminar, no se puede hacer rollback

Normalmente consiste en borrar páginas enteras de bbdd. Pero en MySQL hace un drop y un create seguidos en lugar de eso

30
Q

Cuál es la sintáxis de los TRIGGER?

A

Se ejecuta cuando ocurre el evento indicado sobre determinados objetos
Usa dos pseudotablas para usar datos de antes y después en las sentencias del cuerpo del trigger (INSERT… old.campo1…)
- Oracle: OLD/NEW
- SQLServer: INSERTED/DELETED

CREATE TRIGGER nombre-trigger
[BEFORE/AFTER/INSTEAD OF] [DELETE/INSERT/UPDATE]
ON tabla FOR EACH [ROW/STATEMENT]
WHEN condiciones
BEGIN
sentencias insert, update, delete…
END;

INSTEAD_OF*: Sirve para anular la sentencia disparadora y solo tiene efecto el trigger

31
Q

Qué son y qué sintaxis tienen los PROCEDURE de sql?

A

Lógica de negocio que se ejecuta (CALL) en el ámbito del SGBBDD
Acepta parámetros (entrada, salida, entrada/salida) pero a diferencia de las funciones, no retornan valor

CREATE PROCEDURE nombre-procedure
[param1 IN/OUT/IN OUT tipo-parametro, …]
LANGUAGE
IS
–declaración de variables locales
BEGIN
.. se hacen select, updates, etc…
hay CURSORES que recorren los resultados de una select
se usan elementos de programación FOR, IF, CASE, …
COMMIT;
END;
$$

32
Q

Hacer ejercicios de SQL

A

https://www.w3resource.com/sql-exercises/

33
Q

el count() de sql, cuenta los null?

A

No

34
Q

Para qué sirve en sql la cláusula HAVING? Un ejemplo de uso

A

SELECT postalCode, count(CustomerId) FROM Customers group by postal Code HAVING count(CustomerId)>1;

35
Q

Qué dos comandos permiten usar un condicional para para mapear un valor a devolver por una select, a otro

A

Existen DECODE, que sólo se puede usar para condicionales de igualdad, y CASE que permite condicionales más complejos

Ejemplo de DECODE:

SELECT Nombre,
DECODE(Precio,
0, ‘Sin Precio’,
10, ‘Bajo’,
50, ‘Medio’,
‘Alto’) AS Categoria
FROM Productos;

Ejemplo de CASE
SELECT IdProceso, CASE idFormaAcceso WHEN ‘L’ THEN ‘Ingreso Libre’ WHEN ‘P’ THEN ‘Promoción Interna END as FormaAcceso FROM Proceso

36
Q

qué significa en ORACLE “from dual”?

A

En la sentencia FROM dual, “dual” es una tabla especial de Oracle que consta de una sola fila y una sola columna. Es utilizada en consultas cuando no se necesita acceder a una tabla real, pero se requiere una cláusula FROM para que la consulta sea sintácticamente válida.

37
Q

¿Cual es la utilidad de un TABLESPACE en Oracle?

A

Agrupar objetos como tables, indices, etc y asociarse con una serie de ficheros de datos (datafiles)

38
Q

La operación de diferencia de conjuntos del álgebra relacional se realiza en ANSI/SQL mediante el operador:

A

EXCEPT.

39
Q

En una transacción en un Sistema de Gestión de Bases de Datos (SGBD), ¿qué se entiende por el punto de integridad?

A

El estado de la base de datos en el momento en que se inicia la transacción.

40
Q

Qué hacen los operadores de intersección
UNION
UNION ALL
INSERSEC
EXCEPT

A

UNION incluye la suma de los registros de las dos tablas, quitando duplicados
UNION ALL incluye la suma de los registros de las dos tablas, sin quitar duplicados
INSERSEC incluye sólo los registros que están en ambas tablas
EXCEPT incluye sólo los registros que están en la primera tabla, pero no están en la segunda. Es decir, los de la primera excepto los de la segunda.

41
Q

Para qué sirve DISTINCT, y cómo es su sintáxis?

A

Sirve para filtrar filas duplicadas en el resultado de la select
La sitáxis es sin paréntesis, separando por comas los campos a los que afecta. Aunque pueda parecer que sólo afecta al primer campo, afecta a todos los que vayan después.
Trata los null como si fuesen duplicados unos de otros también

SELECT
DISTINCT column_1,
column_2,
column_3
FROM
table_name;

Los campos que pongas antes del DISTINCT no se ven afectados, sólo los de después

42
Q

La solución de alta disponibilidad y recuperación ante desastres de un SGDB basado en Microsoft SQL server se denomina

A

AlwaysOn

43
Q

diferencias entre data lake, data warehouse, data mart y data fog

A

A continuación, te explico las diferencias entre data lake, data warehouse, data mart y data fog:

  1. Data Lake:
    Un data lake es un repositorio de almacenamiento centralizado donde se almacenan grandes cantidades de datos en bruto, tanto estructurados como no estructurados. Los datos se capturan de diversas fuentes y se mantienen en su formato original, sin una estructura o transformación predefinida. Esto permite un almacenamiento flexible y escalable de datos, que luego pueden ser procesados y analizados según sea necesario. Los data lakes suelen estar asociados con tecnologías como Hadoop y permiten el análisis de big data.
  2. Data Warehouse:
    Un data warehouse es una base de datos centralizada que recopila datos de varias fuentes, los transforma y los organiza en una estructura predefinida y coherente. El propósito principal de un data warehouse es proporcionar un almacenamiento optimizado y una estructura adecuada para el análisis de datos empresariales. Los datos en un data warehouse suelen estar limpios, integrados y listos para su uso en informes, análisis y toma de decisiones empresariales.
  3. Data Mart:
    Un data mart es una versión más específica y enfocada de un data warehouse. Se centra en un área particular del negocio o en un conjunto de usuarios específicos. Un data mart se deriva del data warehouse y está diseñado para satisfacer las necesidades de información de un grupo de usuarios más limitado. Contiene una selección de datos relevantes y preprocesados del data warehouse que son específicos para un departamento o área funcional en particular.
  4. Data Fog:
    El término “data fog” no es tan común como los anteriores. Sin embargo, en el contexto de la computación en el borde (edge computing), el concepto de data fog se refiere a la distribución y procesamiento de datos en dispositivos o servidores cercanos al punto de generación de los datos. Mientras que el edge computing se refiere al procesamiento en el borde de la red, el data fog se centra específicamente en los datos y cómo se gestionan y procesan en entornos distribuidos y descentralizados. Es similar al concepto de edge computing, pero con un enfoque más específico en la gestión y procesamiento de datos en la periferia de la red.

En resumen, un data lake es un repositorio de almacenamiento centralizado de datos en bruto, un data warehouse es una base de datos centralizada y estructurada para análisis empresariales, un data mart es una versión más específica de un data warehouse orientada a un grupo de usuarios particular, y el data fog se refiere al procesamiento de datos distribuido en entornos descentralizados, como parte del enfoque de edge computing.

44
Q

Cómo usar una subselect en las cláusulas SELECT, FROM Y WHERE de una consulta SQL

A

Puedes utilizar una subconsulta en distintas cláusulas de una sentencia SELECT en SQL para realizar cálculos o filtrar datos basados en los resultados de la subconsulta. Aquí tienes algunos ejemplos de cómo puedes hacerlo:

  1. Subconsulta en la cláusula SELECT:
    Puedes usar una subconsulta en la cláusula SELECT para obtener un valor específico basado en los datos de otras tablas o subconjuntos de datos. Por ejemplo:

```sql
SELECT nombre, (SELECT COUNT(*) FROM pedidos WHERE id_cliente = clientes.id_cliente) AS cantidad_pedidos
FROM clientes;
~~~

En este caso, la subconsulta (SELECT COUNT(*) FROM pedidos WHERE id_cliente = clientes.id_cliente) cuenta la cantidad de pedidos para cada cliente en la tabla “pedidos”, y esa cantidad se muestra en una columna adicional llamada “cantidad_pedidos” en el resultado de la consulta principal.

  1. Subconsulta en la cláusula FROM (Tabla derivada o tabla virtual):
    Puedes utilizar una subconsulta en la cláusula FROM para crear una tabla derivada o tabla virtual, que luego puedes usar como si fuera una tabla real en el resto de la consulta. Por ejemplo:

```sql
SELECT c.nombre, p.total_monto
FROM clientes c
INNER JOIN (SELECT id_cliente, SUM(monto) AS total_monto FROM pedidos GROUP BY id_cliente) p
ON c.id_cliente = p.id_cliente;
~~~

En este caso, la subconsulta (SELECT id_cliente, SUM(monto) AS total_monto FROM pedidos GROUP BY id_cliente) calcula la suma total de montos de pedidos por cliente y crea una tabla virtual “p” que se utiliza en la cláusula JOIN para obtener la suma de montos de pedidos para cada cliente.

  1. Subconsulta en la cláusula WHERE:
    Puedes utilizar una subconsulta en la cláusula WHERE para filtrar datos basados en los resultados de la subconsulta. Por ejemplo:

```sql
SELECT nombre, edad
FROM personas
WHERE edad > (SELECT AVG(edad) FROM personas);
~~~

En este caso, la subconsulta (SELECT AVG(edad) FROM personas) calcula la edad promedio de todas las personas y la consulta principal muestra el nombre y la edad de las personas cuya edad es mayor que la edad promedio.

Estos son solo algunos ejemplos de cómo puedes utilizar una subconsulta en diferentes cláusulas de una sentencia SELECT en SQL. Las subconsultas son una herramienta poderosa que te permite realizar cálculos complejos o combinar datos de diferentes tablas para obtener resultados más precisos o detallados.

45
Q

Ámbito de accesibilidad a tablas de la consulta principal desde las subconsultas. Leer

A

El acceso de una subconsulta a las tablas de la consulta principal depende de si la subconsulta es correlacionada o no correlacionada y de cómo están estructuradas las cláusulas en la consulta. El concepto clave que define la accesibilidad es el ámbito (scope) de las tablas.

  1. Subconsultas no correlacionadas:
    En una subconsulta no correlacionada, la subconsulta se ejecuta de forma independiente de la consulta principal y, por lo tanto, no tiene acceso directo a las tablas de la consulta principal. La subconsulta es evaluada solo una vez, y el resultado se utiliza en la consulta principal como un valor escalar o un conjunto de resultados. Estas subconsultas no necesitan hacer referencia a las tablas de la consulta principal y se evalúan por separado.

Ejemplo de subconsulta no correlacionada:
```sql
SELECT nombre, (SELECT SUM(monto) FROM pedidos) AS total_monto
FROM clientes;
~~~

En este ejemplo, la subconsulta (SELECT SUM(monto) FROM pedidos) es no correlacionada y se evalúa de manera independiente. No hace referencia a ninguna tabla de la consulta principal.

  1. Subconsultas correlacionadas:
    En una subconsulta correlacionada, la subconsulta se ejecuta para cada fila de la consulta principal. En este caso, la subconsulta tiene acceso a las tablas de la consulta principal y puede referenciarlas utilizando alias o nombres de tabla completos para evitar ambigüedades. La subconsulta utiliza valores de la fila actual de la consulta principal en su lógica de filtrado o cálculos.

Ejemplo de subconsulta correlacionada:
```sql
SELECT nombre, (SELECT SUM(monto) FROM pedidos WHERE id_cliente = clientes.id_cliente) AS total_monto
FROM clientes;
~~~

En este ejemplo, la subconsulta (SELECT SUM(monto) FROM pedidos WHERE id_cliente = clientes.id_cliente) es correlacionada, y se ejecuta para cada cliente en la tabla “clientes”. La subconsulta hace referencia a la tabla “clientes” utilizando el alias “clientes” y utiliza el valor actual de “id_cliente” de la fila de la consulta principal en su cláusula WHERE.

El ámbito de una subconsulta correlacionada se extiende a la consulta principal, lo que significa que la subconsulta puede acceder a las tablas de la consulta principal y utilizar valores de las filas actuales de la consulta principal para filtrar o calcular resultados.

Es importante tener en cuenta que el uso de subconsultas correlacionadas puede tener un impacto significativo en el rendimiento, ya que la subconsulta se ejecutará múltiples veces (una vez por cada fila de la consulta principal). Por lo tanto, es recomendable usar subconsultas no correlacionadas cuando sea posible, para evitar repeticiones innecesarias de la misma consulta.

46
Q

Formas de referenciar en un ORDER BY a los campos

A

En la cláusula ORDER BY, hay varias formas distintas de referenciar a los campos o expresiones por los que se desea ordenar los resultados de una consulta. Aquí tienes algunas de las formas más comunes de hacerlo:

  1. Ordenar por nombre de columna:
    Puedes simplemente utilizar el nombre de una columna existente en la tabla para ordenar los resultados en función de ese campo.

Ejemplo:
```sql
SELECT nombre, edad, salario
FROM empleados
ORDER BY nombre;
~~~

  1. Ordenar por posición de columna:
    En lugar de usar el nombre de la columna, puedes usar la posición numérica de la columna en la lista SELECT para ordenar los resultados.

Ejemplo:
```sql
SELECT nombre, edad, salario
FROM empleados
ORDER BY 1; – Ordena por la primera columna en la lista SELECT (nombre)
~~~

  1. Ordenar por alias de columna:
    Si utilizas un alias para renombrar una columna en la lista SELECT, puedes usar ese alias en la cláusula ORDER BY.

Ejemplo:
```sql
SELECT nombre AS nombre_completo, edad, salario
FROM empleados
ORDER BY nombre_completo;
~~~

  1. Ordenar por expresión:
    Puedes utilizar una expresión en la cláusula ORDER BY, que puede ser una combinación de columnas, funciones o constantes.

Ejemplo:
```sql
SELECT nombre, edad, salario
FROM empleados
ORDER BY edad * 2 + salario DESC;
~~~

En este ejemplo, la consulta ordenará los resultados basándose en la expresión edad * 2 + salario en orden descendente.

  1. Ordenar por múltiples campos:
    Puedes ordenar los resultados por múltiples campos en un orden específico, proporcionando una lista de campos separados por coma en la cláusula ORDER BY.

Ejemplo:
```sql
SELECT nombre, edad, salario
FROM empleados
ORDER BY edad DESC, salario ASC;
~~~

En este ejemplo, la consulta ordenará primero por edad en orden descendente y luego por salario en orden ascendente.

Recuerda que el orden predeterminado es ascendente (ASC), por lo que si no especificas el tipo de orden (ASC o DESC), la consulta ordenará en orden ascendente. Para ordenar en orden descendente, debes agregar la palabra clave DESC después del campo o expresión por el que deseas ordenar.

47
Q

Uso de las funciones de agregación en las distintas cláusulas de una consulta

A

Las funciones de agregación, como SUM, se pueden utilizar en diferentes cláusulas de una consulta SQL para realizar cálculos sobre conjuntos de datos y obtener resultados resumidos. Aquí tienes ejemplos de cómo se pueden usar las funciones de agregación en distintas cláusulas:

  1. Cláusula SELECT:
    Las funciones de agregación se utilizan comúnmente en la cláusula SELECT para realizar cálculos sobre una columna o conjunto de columnas y devolver un valor resumido.

Ejemplo - Obtener la suma total de una columna:
```sql
SELECT SUM(monto) AS total_monto
FROM ventas;
~~~

  1. Cláusula GROUP BY:
    Las funciones de agregación se utilizan junto con la cláusula GROUP BY para agrupar datos y realizar cálculos para cada grupo.

Ejemplo - Obtener la suma de ventas por categoría:
```sql
SELECT categoria, SUM(monto) AS total_ventas
FROM ventas
GROUP BY categoria;
~~~

  1. Cláusula HAVING:
    La cláusula HAVING se utiliza para filtrar los resultados de una consulta después de aplicar la cláusula GROUP BY. Aquí, puedes usar funciones de agregación en combinación con HAVING para aplicar condiciones a los grupos resultantes.

Ejemplo - Obtener las categorías con ventas totales mayores que 1000:
```sql
SELECT categoria, SUM(monto) AS total_ventas
FROM ventas
GROUP BY categoria
HAVING SUM(monto) > 1000;
~~~

Es importante tener en cuenta que, en la mayoría de los casos, cuando se utilizan funciones de agregación, se debe usar GROUP BY para agrupar los datos según un criterio específico, a menos que se utilicen funciones de agregación en una consulta sin cláusula GROUP BY, lo que devolverá un único resultado agregado para toda la tabla o conjunto de datos.

48
Q

Ejemplo de BETWEEN

A
49
Q

Uso de FETCH

A

El comando FETCH se utiliza en SQL para recuperar un número específico de filas después de ejecutar una consulta, especialmente cuando la consulta devuelve un conjunto de resultados más grande y se necesita un control más preciso sobre cuántas filas recuperar. La cláusula FETCH se usa comúnmente en combinación con la cláusula ORDER BY para obtener un subconjunto de filas ordenadas.

Es importante mencionar que la sintaxis y la compatibilidad de FETCH pueden variar entre diferentes sistemas de bases de datos. A continuación, te mostraré un ejemplo de cómo usar FETCH en SQL, utilizando la sintaxis estándar de SQL:

Supongamos que tienes una tabla llamada “empleados” con las columnas “nombre” y “salario”, y deseas recuperar los 5 empleados con los salarios más altos:

```sql
SELECT nombre, salario
FROM empleados
ORDER BY salario DESC
FETCH FIRST 5 ROWS ONLY;
~~~

En este ejemplo:

  1. La consulta selecciona los campos “nombre” y “salario” de la tabla “empleados”.
  2. Utilizamos ORDER BY salario DESC para ordenar los resultados por el salario en orden descendente, lo que colocará los salarios más altos primero.
  3. Luego, usamos FETCH FIRST 5 ROWS ONLY para limitar el resultado a las primeras 5 filas, es decir, los 5 empleados con los salarios más altos.

Es importante tener en cuenta que la cláusula FETCH no es soportada en todos los sistemas de bases de datos. Algunos sistemas utilizan diferentes sintaxis, como LIMIT o TOP, para lograr resultados similares. Por lo tanto, es recomendable consultar la documentación específica de tu sistema de bases de datos para obtener la sintaxis correcta.