T6 – SQL ODBC JDBC Flashcards
Indique la cláusula necesaria para crear el esquema de la base de datos y hacer que todos los objetos creados en el mismo tengan como propietario al usuario museo:
a) CREATE SCHEMA MUSEDCDLC ON ROLE museo;
b) CREATE SCHEMA museoCdIC ON USER museo;
c) CREATE SCHEMA museoCdlC TO USER museo;
d) CREATE SCHEMA museoCdlC AUTHORIZATION museo;
2015 TAI -LI-BIII
Indique la cláusula necesaria para crear el esquema de la base de datos y hacer que todos los objetos creados en el mismo tengan como propietario al usuario museo:
a) CREATE SCHEMA MUSEDCDLC ON ROLE museo;
b) CREATE SCHEMA museoCdIC ON USER museo;
c) CREATE SCHEMA museoCdlC TO USER museo;
d) CREATE SCHEMA museoCdlC AUTHORIZATION museo;
create schema [esquema] [authorization usuario][lista_elem_esquema];
Un elemento de esquema puede ser uno de los siguientes:
- Definición de dominio.
- Definición de tabla.
- Definición de vista.
- Definición de restricción.
- Definición de privilegio.
Eliminación de la definición de un esquema relacional:
drop schema esquema {restrict | cascade};
En un momento determinado del proyecto se crea el usuario de la base de datos “museo_consulta” y se necesita que se le asignen permisos de SELECT en la tabla ENTIDADES_EXTERNAS. La sentencia para ello sería:
a) GRANT SELECT IN TABLE ENTIDADES_EXTERNAS TO museo_consulta;
b) GRANT SELECT ON ENTIDADES_EXTERNAS TO museo_consulta;
c) GRANT USAGE SELECT TO ENTIDADES_EXTERNAS ON museo_consulta;
d) GRANT SELECT TO ENTIDADES_EXTERNAS ON museo_consulta;
2015 TAI -LI-BIII
En un momento determinado del proyecto se crea el usuario de la base de datos “museo_consulta” y se necesita que se le asignen permisos de SELECT en la tabla ENTIDADES_EXTERNAS. La sentencia para ello sería:
a) GRANT SELECT IN TABLE ENTIDADES_EXTERNAS TO museo_consulta;
b) GRANT SELECT ON ENTIDADES_EXTERNAS TO museo_consulta;
c) GRANT USAGE SELECT TO ENTIDADES_EXTERNAS ON museo_consulta;
d) GRANT SELECT TO ENTIDADES_EXTERNAS ON museo_consulta;
GRANT privilegios ON** object **TO usuarios/roles [WITH GRANT OPTION]
Privilegios:
- SELECT + lista_columnas
- UPDATE+ lista_columnas
- INSERT+ lista_columnas
- DELETE
- ALL PRIVILEGES
- REFERENCES - (Salió en PI 2018)
- TRIGGER
- UNDER
- USAGE (ej.Secuencia)
- EXECUTE
* WITH GRANT OPTION delega en otro la capacidad de dar permisos.
< privilegios > = INSERT | SELECT | UPDATE |DELETE |
EXECUTE ( procedimientos almacenados) |
CONNECT (conexión a un esquema o bbdd) |
USAGE (conexión pero sin privilegios)
Con objeto de optimizar las consultas a la base de datos le solicitan crear un índice en la tabla ACTIVIDADES para la columna identidadexterna, además le especifican que el índice debe ser tipo B-TREE y estará en el tablespace t_indices (ya creado previamente). la consulta para el PostgreSQL será:
a) CREATE BTREE INDEX nuevo_indice USING ACTIVIDADES (identidadexterna) ON t_indices;
b) CREATE INDEX nuevo_indice ON ACTIVIDADES USING btree (identidadexterna) TABLESPACE t_indices;
c) CREATE BTREE INDEX nuevo_indice ON ACTIVIDADES (identidadexterna) IN TABLESPACE t_indices;
d) CREATE BTREE INDEX nuevo_indice ON ACTIVIDADES (identidadexterna) WITH TABLESPACE t_indices;
TAI-2015-LI-BIII
Con objeto de optimizar las consultas a la base de datos le solicitan crear un índice en la tabla ACTIVIDADES para la columna identidadexterna, además le especifican que el índice debe ser tipo B-TREE y estará en el tablespace t_indices (ya creado previamente). la consulta para el PostgreSQL será:
a) CREATE BTREE INDEX nuevo_indice USING ACTIVIDADES (identidadexterna) ON t_indices;
b) CREATE INDEX nuevo_indice ON ACTIVIDADES USING btree (identidadexterna) TABLESPACE t_indices;
c) CREATE BTREE INDEX nuevo_indice ON ACTIVIDADES (identidadexterna) IN TABLESPACE t_indices;
d) CREATE BTREE INDEX nuevo_indice ON ACTIVIDADES (identidadexterna) WITH TABLESPACE t_indices;
NOTA: Tanto en mysql, progress, oracle.
El formato es CREATE INDEX nombre ON……
Insertar una constraint en la cláusula SQL de creación de la tabla RESERVAS para el campo de clave ajena ‘idcliente’, de forma que NO ejecute ninguna acción en la tabla referenciada en los casos de UPDATE o DELETE:
a) CONSTRAINT con_fk FOREIGN KEY (idcliente) ON CUENTES (id) MATCH SIMPLE WITH NO ACTION;
b) CONSTRAINT con_fk FOREIGN KEY ON idcliente MATCH SIMPLE WITH CUENTES (id) ON UPDATE NO ACTION ON DELETE NO ACTION;
c) CONSTRAINT con_fk FOREIGN KEY (idcliente) REFERENCES CUENTES (id) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION;
d) CONSTRAINT con_fk FOREIGN KEY (idcliente) ON CUENTES (id) MATCH SIMPLE WITH UPDATE NO ACTION WITH DELETE NO ACTION;
2015-TAI-LI-BIII
Insertar una constraint en la cláusula SQL de creación de la tabla RESERVAS para el campo de clave ajena ‘idcliente’, de forma que NO ejecute ninguna acción en la tabla referenciada en los casos de UPDATE o DELETE:
a) CONSTRAINT con_fk FOREIGN KEY (idcliente) ON CUENTES (id) MATCH SIMPLE WITH NO ACTION;
b) CONSTRAINT con_fk FOREIGN KEY ON idcliente MATCH SIMPLE WITH CUENTES (id) ON UPDATE NO ACTION ON DELETE NO ACTION;
c) CONSTRAINT con_fk FOREIGN KEY (idcliente) REFERENCES CUENTES (id) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION;
d) CONSTRAINT con_fk FOREIGN KEY (idcliente) ON CUENTES (id) MATCH SIMPLE WITH UPDATE NO ACTION WITH DELETE NO ACTION;
Recordemos el ejemplo de clase:
CONSTRAINT pk-dist-id PRIMARY KEY (dist-id),
CONSTRAINT fk-emp-id
FOREIGN KEY (sales-rp)
REFERENCES empleados (empid)
CONSTRAINT uniq-zip UNIQUE (zip)
CONSTRAINT chk-zip CHECK (zip like ‘[0-9] ‘[0-9] ‘[0-9] ‘[0-9] ‘[0-9]’)
);
* Al insertar una fila en la tabla de distribuidores, se va a ir a la tabla empleados a ese valor en la columna empid. Integridad Referencial.
La opción MATCH SIMPLE no tiene mucho sentido en la consulta de la pregunta anterior ya que sirve para que, en caso de que la clave ajena esté formada por varios campos, permitir que alguno de ellos tenga valores nulos aunque los otros no lo tengan. Suponga que en un momento determinado del ciclo de vida del proyecto aparece una nueva tabla con una clave ajena formada por varios campos y quisiéramos restringir para que no se permita que un campo tenga valor nulo hasta que los demás campos de la clave ajena sean nulos, usaríamos la opción:
a) MATCH ALL
b) MATCH FULL
c) MATCH FORBIDEN
d) MATCH COMPLEX
2015-TAI-LI-BIII
La opción MATCH SIMPLE no tiene mucho sentido en la consulta de la pregunta anterior ya que sirve para que, en caso de que la clave ajena esté formada por varios campos, permitir que alguno de ellos tenga valores nulos aunque los otros no lo tengan. Suponga que en un momento determinado del ciclo de vida del proyecto aparece una nueva tabla con una clave ajena formada por varios campos y quisiéramos restringir para que no se permita que un campo tenga valor nulo hasta que los demás campos de la clave ajena sean nulos, usaríamos la opción:
a) MATCH ALL
b) MATCH FULL
c) MATCH FORBIDEN
d) MATCH COMPLEX
¡OJO NO VIENE EN LOS APUNTES!
La política de MATCH cuando usamos claves ajenas con múltiples valores, puede ser: MATCH SIMPLE, MATCH PARTIAL, MATCH FULL.
- MATCH SIMPLE: si al menos una columna de referencia es nula, la fila de la tabla de referencia pasa la verificación de restricción. Si todas las columnas de referencia no son nulas, entonces la fila pasa la verificación de restricción si y solo si hay una fila de la tabla referenciada que coincida con todas las columnas de referencia.
- MATCH PARTIAL: si todas las columnas de referencia son nulas, entonces la fila de la tabla de referencia pasa la verificación de restricción. Si al menos una columna de referencia no es nula, la fila pasa la verificación de restricción si y solo si hay una fila de la tabla referenciada que coincida con todas las columnas de referencia no nula.
- MATCH FULL: si todas las columnas de referencia son nulas, entonces la fila de la tabla de referencia pasa la verificación de restricción. Si todas las columnas de referencia no son nulas, entonces la fila pasa la verificación de restricción si y solo si hay una fila de la tabla referenciada que coincida con todas las columnas de referencia. Si alguna columna de referencia es nula y otra columna de referencia no es nula, entonces la fila de la tabla de referencia viola la verificación de restricción.
7. La sentencia de creación de la tabla CLIENTE para el proyecto es la siguiente:
CREATE TABLE CLIENTE
( id bigint NOT NUll DEFAUlT nextval«(‘seq_clientes’::text)::regclass),
nombre text NOT NUll,
cif text NOT NUll,
grupoedad text NOT NUll,
direccion text NOT NUll,
activo varchar(l) NOT NUll,
CONSTRAINT con_c_cli_activo CHECK (activo::text = ‘s’::text OR activo::text = ‘n’::text)
)
Previamente se ha creado una secuencia de nombre seq_clientes. En este caso por motivos de funcionamiento interno se ha decidido que los valores del campo ‘id’ comiencen a partir del número 150, incrementando su valor en 1. La sentencia para crear dicha secuencia es:
a) CREATE SEQUENCE seq_clientes INCREASE 1 INIT 150;
b) CREATE SEQUENCE seq_clientes INIT 150;
c) CREATE SEQUENCE seq_clientes START 150;
d) CREATE SEQUEN CE seq_clientes INCREASE 1 BEGIN 150;
2015-TAI-LI-BIII
7. La sentencia de creación de la tabla CLIENTE para el proyecto es la siguiente:
CREATE TABLE CLIENTE
( id bigint NOT NUll DEFAUlT nextval«(‘seq_clientes’::text)::regclass),
nombre text NOT NUll,
cif text NOT NUll,
grupoedad text NOT NUll,
direccion text NOT NUll,
activo varchar(l) NOT NUll,
CONSTRAINT con_c_cli_activo CHECK (activo::text = ‘s’::text OR activo::text = ‘n’::text)
)
Previamente se ha creado una secuencia de nombre seq_clientes. En este caso por motivos de funcionamiento interno se ha decidido que los valores del campo ‘id’ comiencen a partir del número 150, incrementando su valor en 1. La sentencia para crear dicha secuencia es:
a) CREATE SEQUEN CE seq_clientes INCREASE 1 INIT 150;
b) CREATE SEQUENCE seq_clientes INIT 150;
c) CREATE SEQUENCE seq_clientes START 150;
d) CREATE SEQUEN CE seq_clientes INCREASE 1 BEGIN 150;
CREATE SEQUENCE sequence_name
START [WITH] initial_value
INCREMENT BY increment_value
MINVALUE minimum value
MAXVALUE maximum value CYCLE|NOCYCLE ;
En una Base de Datos relacional se quiere añadir una nueva columna en una tabla ya existente. ¿Qué sentencia SQL habría que utilizar?
a) add column
b) alter table
c) insert column
d) modify table
2015 TAI -LI
En una Base de Datos relacional se quiere añadir una nueva columna en una tabla ya existente. ¿Qué sentencia SQL habría que utilizar?
a) add column
b) alter table
c) insert column
d) modify table
SINTASIX :
ALTER TABLE nombre-tabla
ADD COLUMN nombre -col
Tambien se puede usar con las siguientes opciones:
ALTER TABLE nombre-tabla
- ALTER COLUMN nombre-col
- DROP COLUMNS nombre-col
- ADD [CONTRAINT]
En cuanto al lenguaje de interrogación de bases de datos SQL:
a) es un estándar de facto cuando hablamos de lenguajes de interrogación de bases de datos y su base es el álgebra relacional.
b) es el lenguaje de interrogación de bases de datos utilizado para hacer consultas sobre bases de datos estructuradas, relacionales, jerárquicas o en red.
c) es un lenguaje de consulta, pero para realizar otras operaciones sobre bases de datos como la definición/creación de las mismas se utiliza otro tipo de lenguajes.
d) no está implementado en gestores de bases de datos menores como Microsoft Access,
2015 TAI -LI
En cuanto al lenguaje de interrogación de bases de datos SQL:
a) es un estándar de facto cuando hablamos de lenguajes de interrogación de bases de datos y su base es el álgebra relacional.
b) es el lenguaje de interrogación de bases de datos utilizado para hacer consultas sobre bases de datos estructuradas, relacionales, jerárquicas o en red.
c) es un lenguaje de consulta, pero para realizar otras operaciones sobre bases de datos como la definición/creación de las mismas se utiliza otro tipo de lenguajes.
d) no está implementado en gestores de bases de datos menores como Microsoft Access,
Indicar qué resultado se puede esperar de esta consulta SQL sobre una tabla ‘COCHES_VENTA’ que mantiene el inventario de automóviles en un pequeño concesionario:
SELECT Modelo, Color, COUNT(Bastidor) AS Num FROM COCHES_VENTA GROUP BY Modelo, Color HAVING COUNT(Bastidor) <= 1
a) Le indica al dueño del concesionario que quizá debe plantearse adquirir más existencias de un cierto modelo y color de automóvil.
b) Le indica al dueño del concesionario todos los modelos distintos del concesionario. Es decir, un inventario organizado por modelos.
c) Le indica al dueño del concesionario todos los modelos distintos del concesionario. Es decir, un inventario organizado por modelos y color.
d) Le indica al dueño todos los modelos cuyo número de Bastidor es menor o igual a 1.
2015 TAI -LI
Indicar qué resultado se puede esperar de esta consulta SQL sobre una tabla ‘COCHES_VENTA’ que mantiene el inventario de automóviles en un pequeño concesionario:
SELECT Modelo, Color, COUNT(Bastidor) AS Num FROM COCHES_VENTA GROUP BY Modelo, Color HAVING COUNT(Bastidor) <= 1
a) Le indica al dueño del concesionario que quizá debe plantearse adquirir más existencias de un cierto modelo y color de automóvil.
b) Le indica al dueño del concesionario todos los modelos distintos del concesionario. Es decir, un inventario organizado por modelos.
c) Le indica al dueño del concesionario todos los modelos distintos del concesionario. Es decir, un inventario organizado por modelos y color.
d) Le indica al dueño todos los modelos cuyo número de Bastidor es menor o igual a 1.
¿Cuál de los siguientes términos se relaciona directamente con el control de integridad en SQL?
a) ROLLBACK
b) GRANT
c) CREATE INDEX
d) REVOKE
2015 TAI -LI
¿Cuál de los siguientes términos se relaciona directamente con el control de integridad en SQL?
a) ROLLBACK
b) GRANT
c) CREATE INDEX
d) REVOKE
DCL: LENGUAJE DE CONTROL DE DATOS.
SENTENCIAS TCL:
- GRANT (dar permisos) / REVOKE (quitar permisos)
- COMMINT / ROLLBACK (Confirmar o deshacer cambios de una transacción)
- SAVEPOINT (para no deshacer todo) / RELEASE SAVEPOINT
- SET TRANSACTION / START TRANSACTION (configuracion e incio de la tx)
¿Cuál es el propósito del lenguaje DDL en una base de datos?
a) Acceso a la base de datos de lectura pero no de escritura.
b) Acceder a la base de datos para leer, escribir o modificar la información.
c) Recuperar y eliminar una base de datos.
d) Definir la estructura lógica de una base de datos.
¿Cuál es el propósito del lenguaje DDL en una base de datos?
a) Acceso a la base de datos de lectura pero no de escritura.
b) Acceder a la base de datos para leer, escribir o modificar la información.
c) Recuperar y eliminar una base de datos.
d) Definir la estructura lógica de una base de datos.
SUBJENGUAJES:
- DDL (Data Definition Language) - Creción/borrado/eliminación de objetos (tablas, …)
CREATE, ALTER, DROP
- DML (Data Manipulation Language) - Consultas/borrado/modificación/inserccion de datos .
INSERT, UPDATE, DELETE
- DQL (Data Query Language) - SELECT
- DCL (Data Control Language) - Contro de permisos, transacciones.
GRANT, REVOKE, (AUDIT, COMMENT)
-
TCL (Transaction Control Language) - COMMIT, ROLLBACK, SAVEPOINT (para no deshacer todo), REALEASE SAVEPOINT
- SET TRANSATION /START TRANSACTION
¿Qué sentencia de las siguientes pertenece a la categoría de DDL?
a) CREATE
b) UPDATE
c) SELECT
d) DELETE
¿Qué sentencia de las siguientes pertenece a la categoría de DDL?
a) CREATE
b) UPDATE
c) SELECT
d) DELETE
SUBJENGUAJES:
- DDL (Data Definition Language) - Creación/borrado/eliminación de objetos (tablas, …)
CREATE, ALTER, DROP
- DML (Data Manipulation Language) - Consultas/borrado/modificación/inserccion de datos .
INSERT, UPDATE, DELETE
- DQL (Data Query Language) - SELECT
- DCL (Data Control Language) - Contro de permisos, transacciones.
GRANT, REVOKE, (AUDIT, COMMENT)
-
TCL (Transaction Control Language) - COMMIT, ROLLBACK, SAVEPOINT (para no deshacer todo), REALEASE SAVEPOINT
- SET TRANSATION /START TRANSACTION
SENTENCIAS DDL → Se compromete una vez ejecutadas (auto commit)
CREATE, ALTER, DROP
• TRUNCATE- Permite eliminar todas las filas de una tabla. Sería el equivalente a DELETE * FROM table ≈ DROP + CREATE No se puede volver atrás, no es transaccional. ¡OJO depende del gestor en SQL tambien te dicen que es transaccional!
TRUNCATE TABLEnombreTabla
¿Qué operador de SQL, utilizado junto la cláusula WHERE, permite buscar según un patrón determinado en una columna?
a) LIKE
b) IN
c) BETWEEN
d) HAVING
¿Qué operador de SQL, utilizado junto la cláusula WHERE, permite buscar según un patrón determinado en una columna?
a) LIKE
b) IN
c) BETWEEN
d) HAVING
SELECT p.FirstName, p.LastName, ph.PhoneNumber
FROM Person.PersonPhone AS ph
INNER JOIN Person.Person AS p
ON ph.BusinessEntityID = p.BusinessEntityID
WHERE ph.PhoneNumber LIKE ‘415%’
ORDER by p.LastName;
En SQL-92, ¿Cuál de las siguientes opciones representa Ia secuencia de parámetros en el orden correcto en que deberían aparecer en una sentencia?
a) SELECT - FROM - WHERE - ORDER BY - GROUP BY - HAVING
b) SELECT - FROM - WHERE - GROUP BY - HAVING - ORDER BY
c) SELECT - FROM - WHERE - GROUP BY - ORDER BY - HAVING
d) SELECT - FROM - WHERE - ORDER BY - HAVING - GROUP BY
2015 TAI -PI
En SQL-92, ¿Cuál de las siguientes opciones representa Ia secuencia de parámetros en el orden correcto en que deberían aparecer en una sentencia?
a) SELECT - FROM - WHERE - ORDER BY - GROUP BY - HAVING
b) SELECT - FROM - WHERE - GROUP BY - HAVING - ORDER BY
c) SELECT - FROM - WHERE - GROUP BY - ORDER BY - HAVING
d) SELECT - FROM - WHERE - ORDER BY - HAVING - GROUP BY
SELECT [ALL | DISTINCT] item1, item2 AS alias
FROM tabla | vista as alias, …
[[tipo-join] JOIN <condicon_join> ]
WHERE <condicon_busqueda>
[AND | OR | NOT + <condicon_busqueda>] …
GROUP BY campo(s)
HAVING <condicon_sobre_los_grupos>
ORDER BY campo1 [ASC | DESC] , …
+ LIKE | BETWEEN
La sintaxis estándar de ANSI SQL que nos permite borrar una vista es:
a) ERASE VIEW
b) DELETE VIEW
c) CLEAR VIEW
d) DROP VIEW
2015 TAI -PI
La sintaxis estándar de ANSI SQL que nos permite borrar una vista es:
a) ERASE VIEW
b) DELETE VIEW
c) CLEAR VIEW
d) DROP VIEW
Con respecto a los lenguajes de interrogación de base de datos podemos decir que:
a) QUEL (Query Language) está basado en el algebra relacional.
b) QUEL está basado en el cálculo relacional de dominios.
c) QBE (Query By Example) está basado en el cálculo relacional de tuplas.
d) QBE está basado en el cálculo relacional de dominios.
TAI-2015-PI
Con respecto a los lenguajes de interrogación de base de datos podemos decir que:
a) QUEL (Query Language) está basado en el algebra relacional.
b) QUEL está basado en el cálculo relacional de dominios.
c) QBE (Query By Example) está basado en el cálculo relacional de tuplas.
d) QBE está basado en el cálculo relacional de dominios.
Cada uno de estos lenguajes cuales representa distintos estilos:
- SQL está basado en el cálculo relacional de dominios.
- QUEL está basado en el cálculo relacional de tuplas.
- QBE está basado en el álgebra relacional y construcciones del cálculo relacional.
Indique que sentencia ANSI SQL utilizaría para deshacer una transacción:
a) ROLLBACK
b) BACKSTEP
c) REVOKE
d) UNDO
TAI-2015-PI
Indique que sentencia ANSI SQL utilizaría para deshacer una transacción:
a) ROLLBACK
b) BACKSTEP
c) REVOKE
d) UNDO
El estándar ANSI-SQL especifica estos tipos de cláusulas JOIN:
a) JOIN, LEFT / RIGHT [INNER], COMPLETE y CROSS.
b) INNER, LEFT / RIGHT / FULL [OUTER], y CROSS.
c) INNER, LEFT / RIGHT / BOTH [OUTER], y ACROSS.
d) INSIDE, OUTSIDE y LEFT / RIGHT /FULL [OUTER].
2015 TAI -LI
El estándar ANSI-SQL especifica estos tipos de cláusulas JOIN:
a) JOIN, LEFT / RIGHT [INNER], COMPLETE y CROSS.
b) INNER, LEFT / RIGHT / FULL [OUTER], y CROSS.
c) INNER, LEFT / RIGHT / BOTH [OUTER], y ACROSS.
d) INSIDE, OUTSIDE y LEFT / RIGHT /FULL [OUTER].
LEER JOINS:
- CROSS JOIN ≈ FROM tabla1, tabla2 → producto cartesiano.
- [INNER] JOIN → El resultado son las filas coincidentes según la condición.
- LEFT [OUTER] JOIN → El resultado son todas las filas de la tabla de la “izquierda” y sino hay filas coincidentes se rellenan a NULL las columnas correspondientes de la tabla “de la derecha”.
- RIGHT [OUTER] JOIN → Idem, pero manda la tabla de la derecha,
- FULL [OUTER] JOIN → Manda las dos tablas
INNER JOIN
SELECT StudentCourse.COURSE_ID, Student.NAME, Student.AGE FROM Student
INNER JOIN StudentCourse
ON Student.ROLL_NO = StudentCourse.ROLL_NO;
LEFT JOIN ≈ LEFT OUTER JOIN
SELECT Student.NAME,StudentCourse.COURSE_ID
FROM Student
LEFT JOIN StudentCourse
ON StudentCourse.ROLL_NO = Student.ROLL_NO;
(FALTA GRAFICO) Para la nueva aplicación se desea añadir una funcionalidad que le permita obtener un listado de cada uno de los trabajadores con el nombre del director de su centro de trabajo. Deberá tener en cuenta que el campo “Director” de la Tabla “Ubicaciones” contiene el código de trabajador del Director. Para obtener el listado se ejecutará la sentencia:
a) SELECT j.nombre as “Director Centro”, t.nombre as “Empleado” FROM Trabajadores as t, Ubicaciones as u, Trabajadores as j where t.ubicacion = u.ubicacion and u.director = j.codTrabajador
b) SELECT t.nombre as “Director Centro”, t.nombre as “Empleado” FROM Trabajadores as t, Ubicaciones as u where t.ubicacion = u.ubicacion
c) SELECT j.nombre as “Director Centro”, t.nombre as “Empleado” FROM Trabajadores as t, Ubicaciones as u, Directores as j where t.ubicacion = u.ubicacion and u.director = j.codTrabajador
d) SELECT j.nombre as “Director Centro”, t.nombre as “Empleado” FROM Trabajadores as t, Ubicaciones as u, Trabajadores as j where t.ubicacion = u.ubicacion and t.codTrabajador = j.codTrabajador
2017 TAI -LI-BIII
(FALTA GRAFICO)Para la nueva aplicación se desea añadir una funcionalidad que le permita obtener un listado de cada uno de los trabajadores con el nombre del director de su centro de trabajo. Deberá tener en cuenta que el campo “Director” de la Tabla “Ubicaciones” contiene el código de trabajador del Director. Para obtener el listado se ejecutará la sentencia:
a) SELECT j.nombre as “Director Centro”, t.nombre as “Empleado” FROM Trabajadores as t, Ubicaciones as u, Trabajadores as j where t.ubicacion = u.ubicacion and u.director = j.codTrabajador
b) SELECT t.nombre as “Director Centro”, t.nombre as “Empleado” FROM Trabajadores as t, Ubicaciones as u where t.ubicacion = u.ubicacion
c) SELECT j.nombre as “Director Centro”, t.nombre as “Empleado” FROM Trabajadores as t, Ubicaciones as u, Directores as j where t.ubicacion = u.ubicacion and u.director = j.codTrabajador
d) SELECT j.nombre as “Director Centro”, t.nombre as “Empleado” FROM Trabajadores as t, Ubicaciones as u, Trabajadores as j where t.ubicacion = u.ubicacion and t.codTrabajador = j.codTrabajador
SELECT [ALL | DISTINCT] item1, item2 AS alias
FROM tabla | vista as alias, …
[[tipo-join] JOIN <condicon_join> ]
WHERE <condicon_busqueda>
[AND | OR | NOT + <condicon_busqueda>] …
GROUP BY campo(s)
HAVING <condicon_sobre_los_grupos>
ORDER BY campo1 [ASC | DESC] , …
+ LIKE | BETWEEN
Distinct → Filas distintas
Ej: select distintc id, nombre form empleados;
El distintc no aplica solo a id, sino tambien al nombre.
SELECT tipo, avg(edad) as edad_media from empleado group by tipo;
Having sirve para hacer filtros por grupos
Select tipo, avg(edad) as edad_media from empleado group by tipo having avg(edad)<50;
En el antiguo modelo de datos de la aplicación existe una vista para poder visualizar el número trabajadores por grupos de edad, la vista fue creada ejecutando una sentencia SQL, seleccione la correcta:
a) CREATE VIEW edades AS SELECT edad, count(*) FROM Trabajadores GROUP BY edad;
b) CREATE VIEW edades AS SELECT edad, sum(*) FROM Trabajadores GROUP BY edad;
c) CREATE VIEW edades AS SELECT edad, avg(*) FROM Trabajadores HAVING count(*) > 18 ORDER BY edad;
d) CREATE VIEW edades AS SELECT edad, count(*) FROM Trabajadores ORDER BY edad;
2017 TAI -LI-BIII
En el antiguo modelo de datos de la aplicación existe una vista para poder visualizar el número trabajadores por grupos de edad, la vista fue creada ejecutando una sentencia SQL, seleccione la correcta:
a) CREATE VIEW edades AS SELECT edad, count(*) FROM Trabajadores GROUP BY edad;
b) CREATE VIEW edades AS SELECT edad, sum(*) FROM Trabajadores GROUP BY edad;
c) CREATE VIEW edades AS SELECT edad, avg(*) FROM Trabajadores HAVING count(*) > 18 ORDER BY edad;
d) CREATE VIEW edades AS SELECT edad, count(*) FROM Trabajadores ORDER BY edad;
¡IMP! Recordar que COUNT no cuenta nulos.
Para impedir que pueda haber dos usuarios con el mismo nombre deberá ejecutar la siguiente consulta:
a) ALTER TABLE usuarios ADD CONSTRAINT pk_nombre PRIMARY KEY (nombre)
b) ALTER TABLE usuarios ADD CONSTRAINT u_nombre UNIQUE (nombre)
c) CREATE UNIQUE CONSTRAINT index u_nombre ON usuarios (nombre)
d) ALTER TABLE usuarios ADD UNIQUE CONSTRAINT u_nombre (nombre)
2017 TAI -LI-BIII
Para impedir que pueda haber dos usuarios con el mismo nombre deberá ejecutar la siguiente consulta:
a) ALTER TABLE usuarios ADD CONSTRAINT pk_nombre PRIMARY KEY (nombre)
b) ALTER TABLE usuarios ADD CONSTRAINT u_nombre UNIQUE (nombre)
c) CREATE UNIQUE CONSTRAINT index u_nombre ON usuarios (nombre)
d) ALTER TABLE usuarios ADD UNIQUE CONSTRAINT u_nombre (nombre)
Sintasix:
ALTER TABLE table_name ADD CONSTRAINT MyUniqueConstraint UNIQUE(column1, column2…);
Otros funcionalidades de alter table:
https://www.tutorialspoint.com/sql/sql-alter-command.htm
Qué sentencia de las siguientes nunca altera el contenido de la base de datos:
a) SELECT PEDIDOS.PRECIO, PEDIDOS.ITEM, STOCK.VALIDO FROM PEDIDOS, STOCK WHERE PEDIDOS.NUM_ITEM = STOCK.NUM_ITEM AND PEDIDOS.PRECIO > 300
b) UPDATE STOCK SET STOCK.NUM_ITEM = O WHERE STOCK.VALIDO = ‘sr
c) COMMIT
d) DROP DATABASE DB_CONTENIDO_TIENDA
2017 TAI -LI
Qué sentencia de las siguientes nunca altera el contenido de la base de datos:
a) SELECT PEDIDOS.PRECIO, PEDIDOS.ITEM, STOCK.VALIDO FROM PEDIDOS, STOCK WHERE PEDIDOS.NUM_ITEM = STOCK.NUM_ITEM AND PEDIDOS.PRECIO > 300
b) UPDATE STOCK SET STOCK.NUM_ITEM = O WHERE STOCK.VALIDO = ‘sr
c) COMMIT
d) DROP DATABASE DB_CONTENIDO_TIENDA
Si las operaciones se han realizado correctamente y queremos que los cambios se apliquen de forma permanente sobre la base de datos usaremos la sentencia COMMIT. Sin embargo, si durante las operaciones ocurre algún error y no queremos aplicar los cambios realizados podemos deshacerlos con la setencia ROLLBACK.
- *Señale la afirmación correcta:**
a) DML permiten definir el esquema de la base de datos.
b) OCL permiten controlar el acceso a los datos.
c) DDL permiten controlar el acceso a los datos.
d) DCL permiten definir el esquema de la base de datos.
- *Señale la afirmación correcta:**
a) DML permiten definir el esquema de la base de datos. - *b) OCL permiten controlar el acceso a los datos.**
c) DDL permiten controlar el acceso a los datos.
d) DCL permiten definir el esquema de la base de datos.
SUBJENGUAJES:
- DDL (Data Definition Language) - Creación/borrado/eliminación de objetos (tablas, …)
CREATE, ALTER, DROP
-
DML (Data Manipulation Language) - Consultas/borrado/modificación/inserccion de datos .INSERT, UPDATE, DELETE
- DQL (Data Query Language) - SELECT
- DCL (Data Control Language) - Contro de permisos, transacciones.
GRANT, REVOKE, (AUDIT, COMMENT)
-
TCL (Transaction Control Language) - COMMIT, ROLLBACK, SAVEPOINT (para no deshacer todo), REALEASE SAVEPOINT
- SET TRANSATION /START TRANSACTION
- *OCL (LENGUAJE DE ESPECIFICACIÓN DE OBJETOS):** Este documento introduce y define el Lenguaje de Especificación de Objetos (Object Constraint Language, OCL), es un lenguaje formal para expresar restricciones libres de efectos
colaterales. Los usuarios del Lenguaje Unificado para Modelado (UML) y de otros lenguajes, pueden usar el OCL para especificar restricciones y otras expresiones incluidas en sus modelos. El OCL tiene características de un lenguaje de expresión, de un lenguaje de modelado y de un lenguaje formal.
En una empresa hay una tabla de empleados: EMPLEADO(EMP _ID, NOMBRE, CATEGORIA, SUELDO). Elija qué sentencia nos dará como resultado la categoría y sueldo medio de aquellas categorías cuyo sueldo medio es inferior al sueldo medio de todos los empleados de la empresa.
a) SELECT CATEGORIA, AVG(SUELDO) FROM EMPLEADO GROUP BY CATEGORIA HAVING AVG(SUELDO) < (SELECT AVG(SUELDO) FROM EMPLEADO)
b) SELECT CATEGORIA, AVG(SUELDO) FROM EMPLEADO HAVING CATEGORIA GROUP BY AVG(SUELDO) < SELECT AVG(SUELDO) FROM EMPLEADO)
e) SELECT CATEGORJA, AVG(SUELDO) FROM EMPLEADO WHERE SUELDO < AVG(SUELDO) GROUP BY CATEGORJA
d) SELECT CATEGORIA, AVG(SUELDO) FROM EMPLEADO WHERE AVG(SUELDO) < (SELECT SUELDO FROM EMPLEADO)
2017 TAI -PI
En una empresa hay una tabla de empleados: EMPLEADO(EMP _ID, NOMBRE, CATEGORIA, SUELDO). Elija qué sentencia nos dará como resultado la categoría y sueldo medio de aquellas categorías cuyo sueldo medio es inferior al sueldo medio de todos los empleados de la empresa.
a) SELECT CATEGORIA, AVG(SUELDO) FROM EMPLEADO GROUP BY CATEGORIA HAVING AVG(SUELDO) < (SELECT AVG(SUELDO) FROM EMPLEADO)
b) SELECT CATEGORIA, AVG(SUELDO) FROM EMPLEADO HAVING CATEGORIA GROUP BY AVG(SUELDO) < SELECT AVG(SUELDO) FROM EMPLEADO)
e) SELECT CATEGORJA, AVG(SUELDO) FROM EMPLEADO WHERE SUELDO < AVG(SUELDO) GROUP BY CATEGORJA
d) SELECT CATEGORIA, AVG(SUELDO) FROM EMPLEADO WHERE AVG(SUELDO) < (SELECT SUELDO FROM EMPLEADO)
SUBCONSULTAS (dentro del where)
SELECT…FROM tabla1 WHERE EXISTS (SUBQUERY)*
WHERE col1 [NOT] IN (SELECT col2 FROM …)
WHERE col1 operador [ANY/SOME/ALL]
(SELECT col2 FORM …)
ANY ó SOME: hacen lo mismo → Alguno
ALL → Todos
Correlacionadas cuando hay referencias dentro de la subquery a la consulta externa o principal.
SELECT “nombre1_columna”
FROM “nombre1_tabla”
WHERE EXISTS
(SELECT * FROM “nombre2_tabla” WHERE Condición”);
En una base de datos en la que se almacena Información de dientes a través de la tabla Clientes, existen, entre otras, las siguientes columnas: “Id”, “Nombre”, “Apellido1”, etc. ¿Cuál de las siguientes sentencias SQL devuelve el número de nombres (sólo Nombre, sin incluir apellidos) diferentes que hay en la tabla?
a) SELECT DlSTINCT(Nombre) FROM Clientes
b) SELECT SUM(UNIQUE(Nombre)) FROM Clientes
c) SELECT COUNT(DlSTINCT(Nombre)) FROM Clientes
d) SELECT SUM(DlSTINCT(Nombre)) FROM Clientes
2017 TAI -LI
En una base de datos en la que se almacena Información de dientes a través de la tabla Clientes, existen, entre otras, las siguientes columnas: “Id”, “Nombre”, “Apellido1”, etc. ¿Cuál de las siguientes sentencias SQL devuelve el número de nombres (sólo Nombre, sin incluir apellidos) diferentes que hay en la tabla?
a) SELECT DlSTINCT(Nombre) FROM Clientes
b) SELECT SUM(UNIQUE(Nombre)) FROM Clientes
c) SELECT COUNT(DlSTINCT(Nombre)) FROM Clientes
d) SELECT SUM(DlSTINCT(Nombre)) FROM Clientes
DISTINCT → Filas distintas
Ej: select distintc id, nombre form empleados; → El distintc no aplica solo a id, sino tambien al nombre.
¿Cuál de las siguientes operaciones NO es una operación de agregación en SQL?
a) AVG
b) COUNT
c) DISTINCT
d) SUM
2017 TAI -LI
¿Cuál de las siguientes operaciones NO es una operación de agregación en SQL?
a) AVG
b) COUNT
c) DISTINCT
d) SUM
FUNCIONES DE AGREGACIÓN Básicas:
- COUNT: devuelve el número total de filas seleccionadas por la consulta.
- MIN: devuelve el valor mínimo del campo que especifiquemos.
- MAX: devuelve el valor máximo del campo que especifiquemos.
- SUM: suma los valores del campo que especifiquemos. Sólo se puede utilizar en columnas numéricas.
- AVG: devuelve el valor promedio del campo que especifiquemos. Sólo se puede utilizar en columnas numéricas.
Al dar de alta la tabla ARTÍCULO se ha olvidado crear la clave primaria y hay articulos duplicados con el mismo identificador, ¿cuál de las siguientes sentencias SQL nos permitiría encontrarlos?
a) SELECT idArticulo, count(*) FROM Articulo GROUP BY IdArticulo HAVING count(*)> 1;
b) SELECT idArticulo FROM Articulo GROUP BY idArticulo HAVING DISTINCT (idArticulo);
c) SELECT DISTlNCT (idArticulo) FROM Articulo WHERE IdArticulo >1;
d) SELECT A1.idArticulo, A1.count(idArticulo) FROM Articulo Al, Articulo Al WHERE A1.idArticulo=A2.idArticulo AND count(ldArticulo)> 1;
2017 TAI -PI-BIII
Al dar de alta la tabla ARTÍCULO se ha olvidado crear la clave primaria y hay articulos duplicados con el mismo identificador, ¿cuál de las siguientes sentencias SQL nos permitiría encontrarlos?
a) SELECT idArticulo, count(*) FROM Articulo GROUP BY IdArticulo HAVING count(*)> 1;
b) SELECT idArticulo FROM Articulo GROUP BY idArticulo HAVING DISTINCT (idArticulo);
c) SELECT DISTlNCT (idArticulo) FROM Articulo WHERE IdArticulo >1;
d) SELECT A1.idArticulo, A1.count(idArticulo) FROM Articulo Al, Articulo Al WHERE A1.idArticulo=A2.idArticulo AND count(ldArticulo)> 1;
Ejemplo:
SELECT COUNT( * ) FROM agents HAVING COUNT(*)>3;
La cláusula HAVING con la función SQL COUNT () se puede utilizar para establecer una condición con la instrucción select. La cláusula HAVING se usa en lugar de la cláusula WHERE con la función SQL COUNT ().
La cláusula GROUP BY con HAVING recupera el resultado de un grupo específico de una columna, que coincide con la condición especificada en la cláusula HAVING.
En una empresa hay una tabla de empleados: EMPLEADO (EMP ID, NOMBRE, CATEGORIA, SUELDO). Elija qué sentencia nos dará como resultado la categoría y sueldo medio de aquellas categorías cuyo sueldo medio es inferior al sueldo medio de todos los empleados de la empresa.
a) SELECT CATEGORIA, AVG(SUELDO) FROM EMPLEADO GROUP BY CATEGORIA HAVING AVG(SUELDO) < (SELECT AVG(SUELDO) FROM EMPLEADO)
b) SELECT CATEGORIA, AVG(SUELDO) FROM EMPLEADO HAVING CATEGORIA GROUP BY AVG(SUELDO) < SELECT AVG(SUELDO) FROM EMPLEADO)
c) SELECT CATEGORIA, AVG(SUELDO) FROM EMPLEADO WHERE SUELDO < AVG(SUELDO) GROUP BY CATEGORIA
d) SELECT CATEGORIA, AVG(SUELDO) FROM EMPLEADO WHERE AVG(SUELDO)«SELECT SUELDO FROM EMPLEADO)
2017 TAI -PI
En una empresa hay una tabla de empleados: EMPLEADO (EMP ID, NOMBRE, CATEGORIA, SUELDO). Elija qué sentencia nos dará como resultado la categoría y sueldo medio de aquellas categorías cuyo sueldo medio es inferior al sueldo medio de todos los empleados de la empresa.
a) SELECT CATEGORIA, AVG(SUELDO) FROM EMPLEADO GROUP BY CATEGORIA HAVING AVG(SUELDO) < (SELECT AVG(SUELDO) FROM EMPLEADO)
b) SELECT CATEGORIA, AVG(SUELDO) FROM EMPLEADO HAVING CATEGORIA GROUP BY AVG(SUELDO) < SELECT AVG(SUELDO) FROM EMPLEADO)
c) SELECT CATEGORIA, AVG(SUELDO) FROM EMPLEADO WHERE SUELDO < AVG(SUELDO) GROUP BY CATEGORIA
d) SELECT CATEGORIA, AVG(SUELDO) FROM EMPLEADO WHERE AVG(SUELDO)«SELECT SUELDO FROM EMPLEADO)
SELECT [ALL | DISTINCT] item1, item2 AS alias
FROM tabla | vista as alias, …
[[tipo-join] JOIN <condicon_join> ]
WHERE <condicon_busqueda>
[AND | OR | NOT + <condicon_busqueda>] …
GROUP BY campo(s)
HAVING <condicon_sobre_los_grupos>
ORDER BY campo1 [ASC | DESC] , …
+ LIKE | BETWEEN
La cláusula GROUP BY con HAVING recupera el resultado de un grupo específico de una columna, que coincide con la condición especificada en la cláusula HAVING.
¿Cuál de las siguientes operaciones NO es una operación de agregación en SQL?
a) AVG
b) COUNT
c) DlSTINCT
d) SUM
2017 TAI -PI
¿Cuál de las siguientes operaciones NO es una operación de agregación en SQL?
a) AVG
b) COUNT
c) DlSTINCT
d) SUM
FUNCIONES DE AGREGACIÓN Básicas:
- COUNT: devuelve el número total de filas seleccionadas por la consulta.
- MIN: devuelve el valor mínimo del campo que especifiquemos.
- MAX: devuelve el valor máximo del campo que especifiquemos.
- SUM: suma los valores del campo que especifiquemos. Sólo se puede utilizar en columnas numéricas.
- AVG: devuelve el valor promedio del campo que especifiquemos. Sólo se puede utilizar en columnas numéricas.
Una vez creada la tabla Aula le piden obtener el número de aulas existentes por edificio. ¿Qué sentencia SQL ejecutaría?
a) SELECT COUNT(*) FROM Aula WHERE id Edificio IS NOT NULL
b) SELECT id Edificio, COUNT(*) FROM Aula INNER JOIN Edificio ON Aula.idEdificio = Edificio.idEdificio
c) SELECT idEdificio, COUNT(*) FROM Aula WHERE COUNT(*) > 0
d) SELECT idEdificio, COUNT(*) FROM Aula GROUP BY id Edificio
2018 TAI -LI-BIII
Una vez creada la tabla Aula le piden obtener el número de aulas existentes por edificio. ¿Qué sentencia SQL ejecutaría?
a) SELECT COUNT(*) FROM Aula WHERE id Edificio IS NOT NULL
b) SELECT id Edificio, COUNT(*) FROM Aula INNER JOIN Edificio ON Aula.idEdificio = Edificio.idEdificio
c) SELECT idEdificio, COUNT(*) FROM Aula WHERE COUNT(*) > 0
d) SELECT idEdificio, COUNT(*) FROM Aula GROUP BY id Edificio
El sistema cuenta con una tabla de inscripciones antiguas, Inscripcion, que contiene datos de ciudadanos que ya han realizado acciones formativas anteriormente. Teniendo en cuenta que el campo NIF es PK de Ciudadano y FK de Inscripción, se desea saber qué ciudadanos no han realizado ninguna inscripción en anteriores convocatorias. ¿Qué sentencia SQL utilizaría para obtener dichos datos?
a) SELECT Ciudadano.NIF FROM Ciudadano LEFT JOIN Inscripcion ON ciudadano.NIF = Inscripcion.NIF WHERE Inscripcion.NIF IS null
b) SELECT Ciudadano.NIF FROM Ciudadano INNER JOIN Inscripcion ON Ciudadano.NIF = Inscripcion.NIF WHERE Inscripcion.NIF IS null
c) SELECT Ciudadano.NIF FROM Ciudadano LEFT JOIN Inscripcion ON Ciudadano.NIF = Inscripcion.NIF
d) SELECT DISTINCT (Ciudadano.NIF) FROM Ciudadano LEFT JOIN Inscripcion ON Ciudadano.NIF = Inscripcion.NIF GROUP BY Ciudadano.NIF
2018 TAI -LI-BIII
El sistema cuenta con una tabla de inscripciones antiguas, Inscripcion, que contiene datos de ciudadanos que ya han realizado acciones formativas anteriormente. Teniendo en cuenta que el campo NIF es PK de Ciudadano y FK de Inscripción, se desea saber qué ciudadanos no han realizado ninguna inscripción en anteriores convocatorias. ¿Qué sentencia SQL utilizaría para obtener dichos datos?
a) SELECT Ciudadano.NIF FROM Ciudadano LEFT JOIN Inscripcion ON ciudadano.NIF = Inscripcion.NIF WHERE Inscripcion.NIF IS null
b) SELECT Ciudadano.NIF FROM Ciudadano INNER JOIN Inscripcion ON Ciudadano.NIF = Inscripcion.NIF WHERE Inscripcion.NIF IS null
c) SELECT Ciudadano.NIF FROM Ciudadano LEFT JOIN Inscripcion ON Ciudadano.NIF = Inscripcion.NIF
d) SELECT DISTINCT (Ciudadano.NIF) FROM Ciudadano LEFT JOIN Inscripcion ON Ciudadano.NIF = Inscripcion.NIF GROUP BY Ciudadano.NIF
LEFT JOIN ≈ LEFT OUTER JOIN – este tipo de unión significa que solo retornan todos los datos de la tabla de la mano izquierda, solo si los datos coinciden con la tabla de la mano derecha.
SELECT Student.NAME,StudentCourse.COURSE_ID
FROM Student
LEFT JOIN StudentCourse
ON StudentCourse.ROLL_NO = Student.ROLL_NO;
INNER JOIN – esta es la opción predeterminada. Si no se especifica el tipo de unión, se establecerá de manera predeterminada como la unión interna. Esto implica que si estamos uniendo dos tablas en una columna común, solo retornaran los datos que coincidan en ambas tablas
https://www.w3schools.com/sql/sql_join.asp
SELECT StudentCourse.COURSE_ID, Student.NAME, Student.AGE
FROM Student
INNER JOIN StudentCourse
ON Student.ROLL_NO = StudentCourse.ROLL_NO;
Antes de poner en marcha el sistema, se ha decidido categorizar las aulas por edificios. Para ello se crea una nueva tabla llamada Edificio (id Edificio (PK), nomEdificio, localizacion) y se debe añadir un nuevo campo, idEdificio, en la tabla Aula. Teniendo en cuenta que un aula pertenece a un único edificio y un edificio podrá contener múltiples aulas, ¿Cuál sería la sentencia SQL adecuada para crear la tabla Aula según las premisas indicadas?
a) CREATE TABLE Aula (idAula INT NOT NULL, nomAula VARCHAR(100) NOT NULL, numPlazas INT NOT NULL, idE dificio INT NOT NULL, FOREIGN KEY (id Edificio) REFERENCES Edificio (id Edificio))
b) CREATE TABLE Aula (idAula INT NOT NULL, nomAula VARCHAR(100) NOT NULL, numPlazas INT NOT NULL, id Edificio INT NOT NULL, PRIMARY KEY (idAula), FOREIGN KEY (idEdificio) REFERENCES Edificio (idEdificio))
c) CREATE TABLE Aula (idAula INT NOT NULL, nomAula VARCHAR(100) NOT NULL, numPlazas INT NOT NULL, idEdificio INT NOT NULL, PRIMARY KEY (idAula))
d) CREATE TABLE Aula (idAula INT NOT NULL, nomAula VARCHAR(100) NOT NULL, numPlazas INT NOT NULL, id Edificio INT NOT NULL)
2018 TAI -LI-BIII
Antes de poner en marcha el sistema, se ha decidido categorizar las aulas por edificios. Para ello se crea una nueva tabla llamada Edificio (id Edificio (PK), nomEdificio, localizacion) y se debe añadir un nuevo campo, idEdificio, en la tabla Aula. Teniendo en cuenta que un aula pertenece a un único edificio y un edificio podrá contener múltiples aulas, ¿Cuál sería la sentencia SQL adecuada para crear la tabla Aula según las premisas indicadas?
a) CREATE TABLE Aula (idAula INT NOT NULL, nomAula VARCHAR(100) NOT NULL, numPlazas INT NOT NULL, idE dificio INT NOT NULL, FOREIGN KEY (id Edificio) REFERENCES Edificio (id Edificio))
b) CREATE TABLE Aula (idAula INT NOT NULL, nomAula VARCHAR(100) NOT NULL, numPlazas INT NOT NULL, id Edificio INT NOT NULL, PRIMARY KEY (idAula), FOREIGN KEY (idEdificio) REFERENCES Edificio (idEdificio))
c) CREATE TABLE Aula (idAula INT NOT NULL, nomAula VARCHAR(100) NOT NULL, numPlazas INT NOT NULL, idEdificio INT NOT NULL, PRIMARY KEY (idAula))
d) CREATE TABLE Aula (idAula INT NOT NULL, nomAula VARCHAR(100) NOT NULL, numPlazas INT NOT NULL, id Edificio INT NOT NULL)
Ejemplo de sentencia CREATE TABLE
CREATE TABLE distribuidores
(dist-id CHAR(4) NOT NULL,
dist-nombre VARCHAR(40), sales-rep INT, zip CHAR(5),
…
CONSTRAINT pk-dist-id PRIMARY KEY (dist-id),
CONSTRAINT fk-emp-id
FOREIGN KEY (sales-rp)
REFERENCES empleados (empid)
CONSTRAINT uniq-zip UNIQUE (zip)
CONSTRAINT chk-zip CHECK (zip like ‘[0-9] ‘[0-9] ‘[0-9] ‘[0-9] ‘[0-9]’)
);
En PostgreSQL 9.2, una vez conectado al terminal interactivo de PostgreSQL mediante el comando psql, ¿qué opción se puede ejecutar para obtener las bases de datos disponibles?
a) Show databases;
b) \list
c) select databases from dual;
d) psql_show_db
2018 TAI -LI
En PostgreSQL 9.2, una vez conectado al terminal interactivo de PostgreSQL mediante el comando psql, ¿Qué opción se puede ejecutar para obtener las bases de datos disponibles?
a) Show databases;
b) \list
c) select databases from dual;
d) psql_show_db
En mysql: SHOW DATABASES
Dada una tabla ‘Personal’ con una columna ‘lugar’, se quiere obtener el número de personas en cada lugar, cuando haya más de 10 personas en el mismo. Señale la sentencia SQL correcta:
a) SELECT lugar, Count(*) AS numPersonas FROM Personal GROUP BY lugar HAVING Count(*)> 10
b) SELECT lugar, Count(*)>10 AS numPersonas FROM Personal GROUP BY lugar
c) SELECT lugar, Count(*)AS numPersonas FROM Personal WHERE Count(*) >10 GROUP BY lugar
d) SELECT lugar, Count(*)AS numPersonas FROM Personal WHERE Count(lugar)>10
2018 TAI -LI
Dada una tabla ‘Personal’ con una columna ‘lugar’, se quiere obtener el número de personas en cada lugar, cuando haya más de 10 personas en el mismo. Señale la sentencia SQL correcta:
a) SELECT lugar, Count(*) AS numPersonas FROM Personal GROUP BY lugar HAVING Count(*)> 10
b) SELECT lugar, Count(*)>10 AS numPersonas FROM Personal GROUP BY lugar
c) SELECT lugar, Count(*)AS numPersonas FROM Personal WHERE Count(*) >10 GROUP BY lugar
d) SELECT lugar, Count(*)AS numPersonas FROM Personal WHERE Count(lugar)>10
SELECT [ALL | DISTINCT] item1, item2 AS alias
FROM tabla | vista as alias, …
[[tipo-join] JOIN <condicon_join> ]
WHERE <condicon_busqueda>
[AND | OR | NOT + <condicon_busqueda>] …
GROUP BY campo(s)
HAVING <condicon_sobre_los_grupos>
ORDER BY campo1 [ASC | DESC] , …
+ LIKE | BETWEEN
item2:
- Columna (+tipico)
- Subconsulta
- Calculo
- Función de agredado / escalar (SUM, COUNT (* ó columna), MAX /MIN, AVG (es la media)
La cláusula GROUP BY con HAVING recupera el resultado de un grupo específico de una columna, que coincide con la condición especificada en la cláusula HAVING.