B3-T4_Modelo FÍSICO SQL Flashcards

1
Q

¿Cuál es el mecanismo de protección ante fallos de disco implementado por Oracle?

A

ARCHIVELOG => protegerá la base de datos ante posibles fallos físicos de disco y ante modificaciones o eliminaciones NO deseadas.

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

¿A que recomendación se la conoce como SQL3?

A

SQL:1999

NOTA: era una versión Multi-Parts (5 partes) e introdujo los TRIGGERS.

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

¿SQL es un lenguaje 4GL puro?

A

No, porque tenemos una “extensión” procedural.

*SQL = PSM (Persistent Stored Module)
*Oracle => SQL / PL
*Microsoft => T - SQL

Se llama con la sentencia: CALL procedure

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

¿Es TRUNCATE una sentencia del estándar de SQL?

A

Si, desde SQL:2008.

NOTA: vacía la tabla.

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

¿Que características soporta SQLite?

A
  • Compatible con SQL
  • Transaciones (ACID)

NOTA: librería escrita en “C”, que implementa un SGBD (se usa en gran medida en ANDROID)

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

Nombre seis gestores de bbdd compatibles con SQL:

A
  • SQL Server
  • DB2
  • Oracle
  • MySQL
  • PostgreSQL
  • MaxDB
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

¿Qué sentencia debo de usar si NO quiero que al hacer un ROLLBACK se deshaga todo el trabajo de la transacción?

A

*“SAVEPOINT**

NOTA: se puede revertir con:
Release SAVEPOINT

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

¿Por qué TRUNCATE no soporta la clausula “where”?

A

Porque no puede borrar registros concretos.

NOTA: usa DROP, para borrar la table y luego CREATE, para crearla.

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

¿En qué se diferencian WHERE y HAVING?

A

HAVING se usa para poner condiciones a los datos agrupados, mientras que WHERE pone condiciones a una sóla tupla (fila).

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

¿En qué se diferencian UNION y MERGE?

A

Con UNION unes dos partes directamente (dos paquetes de filas, x ejemplo) y MERGE une dos cosas en base a ciertas condiciones de búsqueda

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

Define los operadores de conjuntos: EXCEPT y INTERSECT:

A

*EXCEPT: compara los resultados de 2 consultas y devuelve las filas de la 1ª que NO se encuentren en la 2ª, es decir, resta el conjunto de resultados de ambas consultas.
Ej: T1: 1, 2 y 3. T2: 2, 3 y 4
DEVUELVE: 1

*INTERSECT: funciona como un “AND”, es decir, sólo devuelve las filas existentes en ambas consultas.
Ej: T1: 1, 2 y 3. T2: 2, 3 y 4
DEVUELVE: 2 y 3

NOTA: “cond.1” AND “cond.2”

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

¿Para qué sirve la instrucción: INSTEAD OF…?

A

INSTEAD OF = EN LUGAR DE => es un ACTIVADOR (igual que AFTER y BEFORE), que permite omitir una instrucción DML (INSERT, DELETE o UPDATE) a una tabla y ejecutar otras instrucciones definidas en el cuerpo del TRIGGER en su lugar.

NOTA: la instruccion DML no se produce en absoluto.

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

¿Cómo crear un INSTEAD OF disparador?

A

CREATE TRIGGER trigger_name
ON {table-name}
INSTEAD OF {INSERT} o {UPDATE} o {DELETE}
AS
{sql_statements}

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

¿Qué se introdujo en las versiones de SQL 2006 y 2016?

A

*2006 => XML
*2016 => JSON

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

Enumera las distintas versiones de SQL:

A

*ANSI - 86 (1ª versión)
*ANSI - 92 (Revisión mayor)

Las siguientes versiones siguen el estándar ISO 9075:
*SQL - 1999 (SQL3) =>Triggers
*SQL - 2003 (Objeto SEQUENCE))
*SQL - 2006 (XML)
*SQL - 2008 (Truncate)
*SQL - 2016 (JSON)

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

Nombre seis gestores de bbdd compatibles con SQL:

A
  • SQL Server
  • DB2
  • Oracle
  • MySQL / MariaDB
  • PostgreSQL
  • MaxDB
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
17
Q

¿Qué sentencia debo de usar sino quiero que al hacer un ROLLBACK se deshaga todo el trabajo de la transacción?

A

SAVEPOINT

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

¿En qué se diferencian SAVEPOINT y COMMIT?

A

En que SAVEPOINT es reversible (release savepoint), pero commit NO.
Es decir, con SAVEPOINT puedo marcar puntos que no quiero que se rebasen al hacer ROLLBACK, pero, si quiero cancelar ese punto, porque me interese manipular la zona que deja atrás, podría hacerlo con “RELEASE SAVEPOINT”. En cambio, lo guardado con COMMIT que grabado e inamovible.

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

¿Qué sentencia debo de usar si no quiero que al hacer un ROLLBACK se deshaga todo el trabajo de la transacción?

A

SAVEPOINT

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

¿Con que sentencia podemos crear un objeto que nos devuelva valores de forma incremental?

A

CREATE SEQUENCE

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

¿Para qué sirve SET TRANSACTION?

A

Para configurar parámetros de una transacción.

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

Expón algunas sentencias de DDL (Definición o creación):

A

*CREATE
*DROP (borra la tabla)
*ALTER (modificar, NO se existen ni MODIFY ni RENAME)
*TRUNCATE => VACÍA la tabla, es decir, borra el contenido, pero mantiene la tabla.

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

Expón algunas sentencias de DCL (Control sobre permisos y transacciones):

A

*GRANT (conceder permisos)
*REVOKE (quitar permisos)
*COMMIT / ROLLBACK (confirmar / deshacer cambios)
*SAVEPOINT / RELEASE POINT ( para no deshacer todo / quitar SavePoint)
*SET TRANSACTION / START TRANSACTION (configuración e inicio de transacción)

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

Expón algunas sentencias de DML (Manipulación de datos):

A

*SELECT (joins, agrupaciones, subconsultas)
*UPDATE (Actualiza toda la tabla si no le indicas una selección)
*INSERT (para añadir datos o estructuras a una tabla: INSERT TO nombre_tabla VALUES(valor1, valor2, …)
*DELETE (borrar datos)
*MERGE (mezcla registros de una tabla sobre otra => lo coincidente lo ACTUALIZAS / lo NO coincidente lo INSERTAS)

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

¿Cuáles son los 3 sistemas de borrados de SQL?

A

*DELETE table empleados ó DELETE empleados => borra el CONTENIDO o REGISTROS de la tabla.
*DROP table empleados => borra TODO: tabla+contendio
*TRUNCATE table empleados => VACÍA la table, es decir, borra el contenido, pero mantiene la tabla.

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

¿A que sublenguaje pertenece TRUNCATE y porque?

A

Al DDL, porque internamente realiza un DROP TABLE y un CREATE TABLE, aunque el efecto efectivamente es una tabla vacía.

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

¿Con que sentencia se modifica una columna de una tabla?

A

ALTER table_name ALTER column …

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

¿Con que sentencia borramos un tabla?

A

DROP table

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

Nombre las cuatro restricciones (CONSTRAINT) que podemos aplicar sobre las columnas:

A
  • PRIMARY KEY (identifica de forma ÚNICA cada registro / NO NULL)
  • UNIQUE (para garantizar que NO se inserten valores DUPLICADOS / admite sólo 1 NULL)
  • FOREIGN KEY (es un campo (o colección de campos) en una tabla, que se refiere a la CLAVE PRIMARIA en otra tabla. La tabla con la clave externa (FORÁNEA) se denomina tabla secundaria, y la tabla con la clave principal se denomina tabla principal o de referencia (REFERENCES).
  • CHECK (para establecer, x ejemplo, que cierta columna de una tabla tenga los valores mayores de 23, otra los menores, otra que tenga, … Ej: columna PRECIO => check (PRECIO>23)
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
30
Q

¿Qué diferencia existe entre UNIQUE y PRIMARY KEY?

A

Que UNIQUE admite una fila a NULL

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

¿Con que sentencia se puede ejecutar un procedimiento almacenado?

A

CALL procedure

(para LLAMAR a los procedimientos almacenados => PSM)

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

Si queremos usar una secuencia, ¿qué permiso nos deben otorgar?

A

GRANT usage

*USAGE: permiso asociado a las SEQUENCE.

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

¿Cuál es la sintaxis de la sentencia REVOKE?

A

REVOKE privilegio ON object-name FROM grantee

NOTA: donde “grantee” es a quien le das o quitar el permiso, que puede ser un usuario o un rol.

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

¿Qué utilidad tiene conceder el privilegio: grant EXECUTE?

A

Para los “procedimientos almacenados”, que queramos ejecutar.

SINTAXIS: GRANT execute ON object-name FROM grantee

NOTA: donde “grantee” es a quien le das o quitar el permiso, que puede ser un usuario o un rol.

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

¿Cuál es sintaxis de GRANT y que privilegios puede conceder?

A

SINTAXIS: GRANT privilegio ON nombre_tabla TO grantee [WITH GRANT OPTION] => está coletilla opcional se pondría para que el usuario, a su vez, podrá otorgar esos privilegios a otros.

PRIVILEGIOS:
*SELECT
*UPDATE
*INSERT
*DELETE
*ALL (todos los privilegios)
*USAGE (para secuencias)
*EXECUTE (para “procedimientos almacenados” = PSM, PL o T-SQL)

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

¿Cuáles son los problemas de lectura de cada “Nivel de Aislamiento”?

A

ISOLATION LVL - SUCIA - NO REPETIBLE - FANTASMA

READ UNCOMMITED - SI - SI - SI
READ COMMITED - NO - SI - SI
REPETEABLE READ - NO - NO - SI
SERIALIZABLE - NO -NO - NO

2 MNEMOTECNIAS:
1. READ UNCOMMITED tiene TODOS los problemas de lectura y SERIALIZABLE no tiene NINGUNO.

  1. Los “Sies” y los “Noes”, estan colocados a la inversa, es decir, con los “Sies, empieza siendo todos Sies = todos lso problemas (READ UNCOMITED) y va descendiendo hasta SERIALIZABLE, que no tiene NINGÚN porblema de lectura.
    Con los “noes” es justo al revés.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
37
Q

¿Cuál es la diferencia de las sintaxis de GRANT y REVOKE?

A

El ON/TO (Grant) y el ON/FROM (Revoke)

*grant privilegio ON object-name TO grantee
*revoke privilegio ON object-name FROM grantee

NOTA: donde “object_name” es la estructura sobre la que estamos dando/quitando el privilegio (tabla, vista, …) y “grantee” es a quien le das o quitar el permiso (usuario o rol).

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

¿Qué nivel de aislamiento es el más seguro pero el que peor rendimiento presenta?

A

SERIALIZABLE

39
Q

¿Qué significa la cláusula WITH GRANT OPTION dentro una sentencia GRANT?

A

Que el usuario, a su vez, podrá otorgar esos privilegios a otros.

40
Q

¿En qué situación se produce el problema de la lectura fantasma?

A

Cuando estamos trabajando con rangos de filas.
Ocurre cuando, durante una transacción, se ejecutan 2 consultas idénticas y los resultados de la 2ª no son iguales a los de la 1ª.

41
Q

¿En qué situación se produce el problema de la lectura sucia?

A

Ocurre cuando se le permite a una transacción la lectura de una fila que ha sido modificada por otra transacción sin haber hecho COMMIT.

EJEMPLO con tabla “usuarios” y 2 transacciones:
ID NOMBRE EDAD
1 Jose 20
2 Pepa 25

*TRANSACCIÓN 1: SELECT EDAD FROM usuarios WHERE ID=1; => lee el valor 20

*TRANSACCIÓN 2: UPDATE usuarios SET EDAD=21 WHERE ID=1; => cambia el 20 x el 21, pero NO hace COMMIT.

*TRANSACCIÓN 1: SELECT EDAD FROM usuarios WHERE ID=1; => aunque no haya hecho COMMIT ahora leera ID=21

*TRANSACCIÓN 2: ROLLBACK => al hacer ROLLBACK vovlería el ID=1 a EDAD=20, ya que cuando se actualizó a 21 NO se hizo COMMIT.

42
Q

¿En qué situación se produce el problema de la lectura NO Repetible?

A

Ocurre cuando en el curso de una transacción una fila lee 2 veces y los valores NO coinciden.

EJEMPLO con tabla “usuarios” y 2 transacciones:
ID NOMBRE EDAD
1 Jose 20
2 Pepa 25

*TRANSACCIÓN 1: SELECT * FROM usuarios WHERE ID=1; => lee el valor 20

*TRANSACCIÓN 2: UPDATE usuarios SET EDAD=21 WHERE ID=1; => cambia el 20 x el 21
COMMIT; => ahora 21 será el valor de ID=1

*TRANSACCIÓN 1: SELECT * FROM usuarios WHERE ID=1;
COMMIT; => el problema radica en que al estar trabajando la Tx.1 con los datos originales y luego la Tx.2 le modifica dichos datos, tendría que reestructurar su trabajo.

43
Q

¿Para qué sirve la función de agregación AVG?

A

Para calcular la MEDIA.

Es decir, devuelve el promedio de los valores en una columna.

Por ejemplo, si tenía seis filas con una columna que contenía un precio, las seis filas se sumarían y se dividirían entre seis para conseguir el promedio.

AVERAGE = PROMEDIO

44
Q

Si en una SQL vemos un HAVING , ¿qué hace falta también en esa SQL?

A

Que también exista GROUP BY

45
Q

Si la tabla cliente (nombre, tipo, dirección) tiene 100 filas, ¿qué valor nos devolverá la sentencia select count (nombre) from cliente?

A

Como mucho 100, pero puede ser menor que 100 si existen filas con nombre a NULL

46
Q

¿Qué diferencia existe entre usar UNION o UNION ALL para “fusionar” dos select’s ?

A

Que UNION ALL deja filas repetidas si las hubiera, no las elimina => es decir, muestra TODO TODO.

47
Q

¿Qué hace una CROSS JOIN entre dos tablas?

A

El producto cartesiano de las filas de las dos tablas, es decir, TODO x TODO => mezcla todas las filas de una tabla con todas de la otra tabla.

EJEMPLO: con las 2 tablas “libro” (2 filas) y “autor” (3 filas):
*libro (ID, titulo, autor): cardinalidad 2
10, xxxx, 1
20, xxxx, 2

*autor (ID, nombre): cardinalidad 3
1, Dani
2, Pepe
3, Luis

CROSS JOIN: daría como resultado= 6 => la fila 10, xxxx, 1 con las 3 de “autor” * la fila 20, xxxx, 2 con las 3 de “autor”

48
Q

¿Qué hace una INNER JOIN entre dos tablas?

A

El resultado son las filas coincidentes (que hagan “match”), según la condición, etre FOREIGN KEY y PRIMARY KEY.

NOTA: El INNER es opcional.

EJEMPLO: con las 2 tablas “libro” (2 filas) y “autor” (3 filas):
*libro (ID, titulo, autor): cardinalidad 2
10, xxxx, 1
20, xxxx, 2

*autor (ID, nombre): cardinalidad 3
1, Dani
2. Pepe
3, Luis

INNER JOIN: daría como resultado= 2 filas
1. 10, xxxx, 1 (FOREIGN KEY) con 1, Dani
2. 20, xxxx, 2 con 2. Pepe

49
Q

¿Cuál es la sintaxis de OUTER JOIN?

A

SINTAXIS: LEFT, RIGHT O FULL [OUTER] JOIN => OUTER es opcional.

Ej: LEFT JOIN:
El resultado son TODAS las filas de la tabla de la izquierda y si no hay filas coincidentes se rellenan con NULL las columnas correspondientes a la tabla de la derecha.

50
Q

¿Si la fila de la izquierda (LEFT) tiene 150 filas, ¿cuántas filas tendrá el resultado final con LEFT [OUTER] JOIN?

A

150 => pues también toma lo que no coincide, que tendrán valor NULL.
Es decir, si hay “match” tendrá los valores de la derecha también rellenos y si no hay “match” se pone NULL en la derecha.

51
Q

Pon un ejemplo con LEFT OUTER JOIN o LEFT JOIN:

A

EJEMPLO: con las 2 tablas “libro” (2 filas) y “autor” (3 filas):
*libro (ID, titulo, autor): cardinalidad 2
10, xxxx, 1
20, xxxx, 2

*autor (ID, nombre): cardinalidad 3
1, Dani
2. Pepe
3, Luis

2 tablas: “autor” (tabla izquierda), “libro” (tabla derecha) => la tabla LEFT o la que manda es ·autor” => coge fila por fila y va buscando coincidencias:
1º Fila: 1, Dani => busca coincidencias y encuentra un libro escrito por Dani: 10, xxxx, 1
2º Fila: 2, Pepe => encuentra coincidencias con la 2ª fila de la tabla “libro”: 20, xxxx, 2
3º Fila 3, Luis => que, aunque NO encuentra coincidencia, también se la lleva, pero sustituye por NULL los campos NO coincidentes: esta es la gran diferencia con INNER JOIN

Daría como resultado: 3 filas:
10, Dani, 10, xxxx
2, Pepe, 20, yyyy
3, Luis, NULL, NULL

*Con RIGHT JOIN es igual, pero manda la tabla de la derecha.
Ej: autor, libro => se cogen todos los registros de la tabla “libro” y se matchean con los de la tabla de la izquierda (autor).

Daría como resultado: 2 filas, ya que libro sólo tiene 2 filas.

NOTA: también existe FULL JOIN.

52
Q

Pon un ejemplo con FULL OUTER JOIN o FULL JOIN:

A

Aquí mandan las 2 tablas, es decir, aparecen todos los que hacen match (los coincidentes).

EJEMPLO: con las 2 tablas “libro” (2 filas) y “autor” (3 filas):
*libro (ID, titulo, autor): cardinalidad 2
10, xxxx, 1
20, xxxx, 2

*autor (ID, nombre): cardinalidad 3
1, Dani
2. Pepe
3, Luis

2 tablas: “autor” (tabla izquierda), “libro” (tabla derecha) => se hace en 3 partes:

1º COINCIDENTES (los que hacen match) => 2 FILAS HACEN MATCH
2º Los que estan en la Izq. (LEFT) que NO estan en la Der. (RIGHT) => 1 FILA NO HACE MATCH X PARTE DE LEFT
3º VICERVERSA =>  0 FILAS NO HACEN MATCH X PARTE DE RIGHT

Daría como resultado: 3 filas:

53
Q

Si queremos relacionar dos tablas para obtener únicamente aquellas filas que están en ambas, ¿qué tipo de JOIN deberemos de usar?

A

INNER JOIN

NOTA: son las filas en las que coinciden la FOREIGN KEY con la PRIMARY KEY.

54
Q

¿Para qué sirve una LEFT OUTER JOIN entre t1 y t2?

A

Para obtener todos los registros de t1 relacionados o no con t2.

NOTA: en los campos que no coinciden se rellenarían con NULL.

Es justo lo contrario a RIGHT JOIN.

55
Q

¿Para qué sirve un MERGE de dos tablas?

A

Para fusionar los registros de una (source: datos de entrada o INPUT) sobre la otra (target: tabla que resulta de nuestras peticiones) realizando UPDATE si los registros existían en ambas o INSERT en caso contrario.

56
Q

Define la estructura de MERGE:

A
  1. MERGE INTO nombre_table => target o tabla destino
  2. USING tabla_referencia => source o INPUT (datos de entrada)
  3. ON search_condición => condición de búsqueda (ej. esta fila de la tabla X esta también en la tabla Y?
  4. WHEN MATCHED => en caso afirmativ (ej. la fila de la tabla X tb esta en la Y)
    4.1. THEN UPDATE SET col1= … => con THEN UPDATE puedes hacer una actualización
  5. WHEN NOT MATCHED => en caso negativo:
    5.1.THEN INSERT (col1, …) VALUES (…, …) => harías un INSERT para insertar dicha fila.

NOTA: “merge” es una especie de mezcla => lo COINCIDENTE lo actualizas / lo NO COINCIDENTE lo insertas.

57
Q

¿Qué es una pseudotabla en un TRIGGER?

A

Una forma de poder referenciar la información antigua de una tabla (OLD) o la nueva (NEW) una vez que se ha ejecutado la sentencia que provoca el trigger o en un momento previo a esta.
Es una tabla adicional => se usa para recuperar valores antes de haber ejecutado el TRIGGER => se usan 2 tablas, esta adicional y con la que trabajamos u original.

SQL - ORACLE - SQL SERVER
Before = OLD = INSERTED
After = NE = DELETED

NOTA: cuando se crea una tabla, se crean 3 cosas: TABLA NEGOCIO, PSEUDOTABLA (tabla auditoria) y trigger.

58
Q

Si se han insertado 500 filas en una tabla que tiene asociado un disparador, ¿cómo debemos de configurar el TRIGGER para que no salte para cada fila?

A

Usando FOR EACH STATEMENT (x cada sentencia), en lugar de FOR EACH ROW.

NOTA: un “Trigger” se pude aplicar de 2 maneras: x sentencias o x filas.

59
Q

Define la sintaxis de un “Trigger”:

A

AFTER, BEFORE o INSTEAD OF + INSERT, UPDATE o DELETE:

SINTAXIS:
CREATE TRIGGER auditar_phone_book
AFTER UPDATE ON phone_book FOR EACH ROW / FOR EACH SENTENCE
BEGIN
(cuerpo) INSERT INTO phone_book_ahditoria (col1, …) VALUES (auditoria_seq.nextVal UPDATE.col1, OLD.col2, SYSDATE); => indicas que quieres recuperar la col1 y col2 usando la PSEUDOTABLA: “auditoria_phone_book
END;

NOTA: OLD.nombre_columna: te da el valor de la columna antes de que se haya ejecutado el evento (en este caso: antes de ser actualizado)

60
Q

¿Dónde es típico realizar un DECLARE nombre-cursor CURSOR FOR SELECT …?

A

Dentro de un PROCEDURE junto con otras sentencias SQL, instrucciones de CONTROL, etc

61
Q

¿A qué nos referimos con que SQL es, en parte, un lenguaje “procedural”?

A

A que aunque es un lenguaje de 4ª Generación (4 GL) y estos son declarativos, tiene una “extensión procedural” llamada: Procedimientos Almacenados o Procedures, que es un lenguaje o mecanismo para ejecutar instrucciones de programación que ejecutan acciones dentro de la misma base de datos (embebido).

SQL= lenguaje 4 GL (declarativo) + extensión procedural =SQL/PSM (Persistent Stored Modules) => incialmente publicado en el 96 como extensión SQL-92.

NOTA: en Oracle se llaman estos procedures PL/SQL y en Microsodft T-SQL.

62
Q

¿Qué es un “procedure”?

A

*Lógica de negocio o especie de “script” que programamos y se ejecuta (CALL) dentro del SGBD (Sistema Gestor de BD), reduciendo el tráfico de datos al no tener que usar lenguajes externos.
*Se llama con: CALL procedure.
*A diferencia de las funciones, sus parámetros (entrada/salida) NO retornan valor.
*SINTAXIS: lo creas (CREATE PROCEDURE nombre_procedure) y en el cuerpo haces una SELECT. Luego, obtienes cursor de esa SELECT y lo usas junto a algún bucle (IF, FOR o CASE) para recorrer los resultados de la SELECT.

63
Q

¿Dónde es típico realizar un DECLARE nombre-cursor CURSOR FOR SELECT …?

A

Dentro del cuerpo del PROCEDURE (entre BEGIN y END) junto con otras sentencias SQL, instrucciones de CONTROL, SELECT, …
Se crea para, por medio de un bucle (IF, FOR o CASE), recorrer la SELECT del “procedure.

SINTAXIS:
1 DECLARAR: DECLARE cursor_name IF/FOR query/SELECT
2 ABRIR CURSOR: OPEN cursor_name;

64
Q

¿Qué ventaja y desventaja principal tienen los PROCEDURE?

A
  • Ventaja: rendimiento, pues se ejecutan en el ámbito del SGBD y no habría que invocar a otro lenguaje, reduciendo, así, el tráfico de datos.
  • Desventaja: lenguaje propietario (PL/SQL: Oracle, TSQL:Microsoft, PL/pgSQL, …)
65
Q

¿En qué se diferencian SGBD (Sist. Gestor de BD) y RDBMS (Sist. Gestor der BD Relacional)?

A

En qué un SGBD almacena los datos en una estructura jerárquica y un RDBMS lo almacena en tablas.

EJEMPLOS:
*SGBD: Oracle, PostgreSQL, MySQL, DB2, ….
*RDBMS: Oracle, PostgreSQL, MySQL, SQL Server y MariaDB.

66
Q

¿Cuáles son los 3 componentes de un sistema de bases de datos SQL?

A

*RDBMS (Sist. Gestor de BD Relacional): Oracle, PostgreSQL, MySQL, SQL Server y MariaDB.

*SQL: es el lenguaje.

*Base de Datos: almacén de datos.

67
Q

¿Qué 2 tipos de TRANSACCIONES se dan en una BD?

A

*LOCALES: solo 1 gestor de BD.
Ej: utilizo sólo 1 Oracle => sólo haríamos transacciones contra dicha BD.

*DISTRIBUIDAS: usas + de 1 gestor de BD => por lo q se necesita un Motor TX.
Ej: usas una aplicación que guarda información en un SQL y un Oracle.

68
Q

¿Para qué se usan los Monitores TX (Transaccional)??

A

Gobierna las transacciones DISTRIBUIDAS (uno de los 2 sistemas de transacciones: Distribuidas y Locales).

*En Java, esta incorporado dentro de los servidores de Aplicación y se comunican con la API de Java JTA (Java Transaction API).

69
Q

¿Qué es una BD TRANSACCIONAL?

A

*SU OBJETIVO PRINCIPAL ES ASEGURAR LAS TRANSACCIONES DENTRO DE UNA BD RELACIONAL, pero, en caso de que no se pueda asegurar, REVERTIRLAS => evitando que las transacciones queden incompletas, es decir, o se realiza la transacción o no pasa nada.

*Tiene como fin el envío y recepción de datos a gran velocidad.

*Están destinadas al entorno de ANÁLISIS, datos de producción e industrial.

70
Q

¿Qué es una BD RELACIONAL?

A

Es una colección de información organizada en TABLAS (o relaciones) relacionadas entre sí. Formadas por FILAS (tuplas o registros) y COLUMNAS (campos o atributos).
Cada REGISTRO o FILA tiene una ID única denominada CLAVE y las COLUMNAS contiene los CAMPOS de datos.

ID NOMBRE EDAD DNI = campos
1
2
3
4
.
.
.

71
Q

¿Qué se entiende por TRANSACCIÓN en SQL?

A

Conjunto de sentencias SQL que se tienen que hacer TODAS o NINGUNA.

*Hay unos mecanismos para indicar al SGBD si hubiera que ir para atrás, todo ha ido bien, … => ROLLBACK, COMMIT, SAVEPOINT, …

72
Q

¿Para qué sirve el objeto SEQUENCE del sublenguaje DDL (estructuras/objetos)?

A

Es un objeto para generar números secuenciales, para que, x ejemplo, cuando pidas un número te de un “1” y cuando, acto seguido, pidas otro te de un “2”.

73
Q

¿Qué consecuencia tendría si el REGISTRO DE TRANSACCIONES o LOG DE TRANSACCIONES estuviera lleno?

A

Que cuando hagas algún borrado NO tendría efecto, es decir, se deshace al estar dicho registro lleno.

74
Q

¿Qué indicamos cuando a la hora de crear una BD ponemos NOT NULL o VARCHAR (20) en un campo?

A

*NOT NULL => que el campo no admite valores nulos.
*varchar => que el campo admite valores alfanuméricos (números y letras), pero con un máximo de 20 caracteres.

75
Q

¿Cómo se implementa una FOREIGN KEY?

A

1º Indicamos la columna que queremos que sea FOREIGN KEY (columna que hace referencia a otra tabla).
2º Con REFERENCES indicamos la tabla a la que hace referencia la columna FOREIGN KEY.

NOTA: que a la tabla, a lo que apunta es a la PRIMARY KEY de dicha tabla a la que hace referencia.

1º FOREIGN KEY columna_nominas
2º REFERENCES empleados

76
Q

¿En qué caso se usa el operador LIKE?

A

Se puede usar en una expresión en la que queramos comparar un valor de campo con una expresión de cadena,

Ej: si escribes LIKE “C*” en una consulta SQL, la consulta devuelve todos los valores del campo que empiecen por la letra “C”.

77
Q

Después de la sintaxis ALTER TABLE nombre_tabla …, ¿que podemos añadir?

A

…ADD COLUMN o ADD CONSTRAINT => para añadir columna o restricciones.

…ALTER COLUMN => para modificar columnas

…DROP COLUMN => para borrar columnas

78
Q

¿Cómo se crearía la tabla: clientes?

A

CREATE TABLE clientes
(
ID int not null, => sin registros vacíos

NOMBRE varchar (20), => 20 es el límite de caracteres alfanuméricos del “Nombre”

TELÉFONO varchar (12) not null => en la última sentencia NO se pone la “,” para que el programa no quede esperando otra sentencia.
)

79
Q

¿Cómo funciona el “isolation level” SERIALIZABLE?

A

No permite que las transacciones se ejecuten por partes cruzándose unas con otras, sino que las pone en fila (secuencialmente => 1 a 1).

Por lo cual, no genera ningún tipo de problema de lectura, es la + segura y es la que peor rendimiento (la mas lenta).

NOTA: usa los 3 tipos de bloqueos: rango, escritura y lectura. De hecho, EL BLOQUEO DE “RANGOS” SÓLO SE CONSIGUE CON EL SERIALIZABLE.

80
Q

¿Para qué se usan los Isolation Level (Nivel de Aislamiento)?

A

Para aislar las transacciones, es decir, estas transacciones o unidades de trabajo hay que aislarlas unas de otras para que funcionen correctamente de manera conjunta.

Ej: parecido al algoritmo “Round Robin” => evitando que las transacciones que actúen sobre una misma tabla se contaminen mutuamente.

Hay 4 niveles de aislamiento:
*READ UNCOMMITED
*READ COMMITED
*REPETEABLE READ
*SERIALIZABLE

81
Q

¿Cómo funciona el “isolation level” READ UN COMMITED?

A

A diferencia del SERIALIZABLE,este SI permite las transacciones cruzadas, con el despropósito de que al leer sobre una transacción que no se haya consolidado (COMMIT) puede provocar “Lectura Sucia”, ya que esos valores no consolidados (UN COMMITED) pueden ser borrados.
También se diferencia de SERIALIZABLE en que este usa los 3 tipos de bloqueos (lectura, escritora y rangos) y UN COMMITED no usa ninguno.

82
Q

¿Para qué se “bloquean” las transacciones?

A

Existen 3 tipos (ESCRITURA, LECTURA Y RANGOS) y se usan para gobernar el aislamiento, es decir, si con la TX 1 bloqueo el registro ID=1, hasta que yo no termine de trabajar con él NO podrá manipular nada la TX 2.

NOTA: SERIALIZABLE usa los 3 bloqueos y READ UN COMMITED no usa ninguno.
Añadir que le bloqueo de RANGOS sólo se consigue con el nivel SERIALIZABLE.

83
Q

¿Cuál es el nivel de aislamiento (isaltion lvl) que se usa por defecto?

A

READ COMMITED, porque sólo lee las transacciones que se han consolidado (COMMITED), evitando leer las que pueden borrarse y perder el tiempo con la “Lectura Sucia”. Aunque tiene problemas de “Lectura Repetible” y “Fantasma”.

84
Q

¿Cómo funciona el “isolation level” REPETEABLE READ?

A

A diferencia de READ COMMITED (sólo lee las Tx COMMITED), este si puede leer la lectura anterior gracias al uso de bloqueos.

Sólo tiene problemas con la lectura fantasma, con la parte que no tenga bloqueada, pues sólo bloquea filas. Es decir, no tiene bloqueos de rangos (sólo SERIALIZABLE) => sólo puedo bloquear una fila, asi que si hago SELECT de varias filas puede producirse lectura fantasma

Usa los bloqueos de escritura y lectura.
.

85
Q

¿Cómo se puede poner un “alias” en SQL?

A

as alias

86
Q

¿Además de COLUMNAS que otras cosas se pueden poner con DISTINCT?

A

DISTINCT se usa para eliminar filas duplicadas en base a las columnas que pongas en la SELECT, pero, también se puede usar sobre FUNCIONES AGREGADAS (hacen un cálculo):

*SUM => devuelve la suma de un conjunto de valores en un campo.

COUNT => cuenta ( o columnas NOT NULL).

*MAX / MIN => calculan el máximo y mínimo.

*AVG => calcula la media.

87
Q

¿Cómo borrar filas completas?

A

DELETE FROM nombre_tabla WHERE condiciones

NOTA: no existe => DELETE * FROM …

88
Q

¿Para que sirven los operadores GROUP BY Y ORDER BY?

A

*GROUP BY => para hacer grupos de una tabla por si quiero hacer mi consulta sobre ciertos grupos.

*ORDER BY => para ordenar por uno o varios campos ascendente o descendentemente.

89
Q

¿Para qué sirve el operador IN?

A

Con IN seleccionamos algo que este IN otra tabla.

90
Q

¿Qué son las subconsultas o subquery?

A

Tienen una función parecida a las JOINS (cross join, left join, …). Es una SELECT de una tabla en la que necesitamos otra consulta para el predicado que ponemos después del WHERE.

Digamos que es una consulta dentro de otra consulta principal y se lleva a cabo con operadores como por ejemplo:

*IN: selecciona algo que haya dentro de otra tabla => … WHERE IN SELECT columna2 FROM …

*EXISTS: dará TRUE o FALSE dependiendo del resultado de la condición de la “subquery” => … WHERE EXISTS subquery

*Otros operadores de subquery: ALL, ANY o SOME.

91
Q

Diferencia entre los operadores AND y OR de SQL:

A

Son para especificar condiciones y se usan tanto con la clausula WHERE con UPDATE.

*AND => mostrará los resultados cuando SE CUMPLAN las 2 condiciones:
SELECT nombre_columna FROM nombre_tabla WHERE condición 1 AND condición 2

OR => mostrará los resultados cuando se cumpla cualquiera de las 2 condiciones:
SELECT nombre_columna FROM nombre_tabla WHERE condición1 OR condición2

92
Q

Esquematiza el disparador o TRIGGER:

A

Ejecuta de manera automática al sentencia del cuerpo del TRIGGER (entre BEGIN y END) cuando se produzca un determinado evento, es decir, NO se ejecuta manualmente.

1- TIPOS DE EVENTOS: especifcas que tipo de evento quieres que dispare tu TRIGGER.
a) De FILA: x cada fila afectada => FOR EACH ROW
b) De SENTENCIA: x toda una sentencia (STATEMENT) => FOR EACH STATEMENT

2- ACTIVADORES: Ej: queremos que actúe cuando se borre una fila.
a) AFTER: que actúe antes del evento.
b) BEFORE: que actúe o se dispare después del evento.
c) INSTEAD OF … (en lugar de …): anula la sentencia disparada y sólo tiene efecto el cuerpo del trigger.
*Se pueden combinar con: INSERT, UPDATE o DELETE => DML

EJEMPLOS:
1 => AFTER DELETE ON nombre_tabla FOR EACH ROW => se ejecuta ese Trigger antes de que borres cada fila, si borras 1000 filas, se ejecuta 1000 veces.

2 => AFTER DELETE ON nombre_tabla FOR EACH STATEMENT => aquí se ejecuta una sola vez, cuando se da dicha sentencia.

93
Q

¿Cuáles son los sub-lenguajes de SQL?

A

El lenguaje de definición de datos (DDL). Contiene todas las instrucciones
para definir el esquema de una base de datos, como son: CREATE, ALTERy DROP o TRUNCATE.

  • El lenguaje de manipulación de datos (DML). Contiene las instrucciones de
    manejo de las tablas como son: SELECT, INSERT, DELETEy UPDATE.
  • El lenguaje de control de datos (DCL). Contiene aquellas instrucciones para
    dar y revocar permisos de acceso a los datos de la base de datos, como son:
    GRANTy REVOKE.

*TCL (Transaction Control Language), se utiliza para controlar las transacciones en una base de datos. Incluye comandos como COMMIT y ROLLBACK, que se utilizan para confirmar o revertir una transacción en una base de datos. Además de SAVEPOINT/RELEASE SAVEPOINT, que identifica un punto en una transacción a la que más tarde se puede volver. Y SET TRANSACTION / START TRANSACTION, para configurar inicio y fin de la transacción.