Programación de Bases de Datos con SQL
2-1: Trabajar con Columnas, Caracteres y Filas
Actividades de Práctica
Objetivos
• Aplicar el operador de concatenación para enlazar columnas a otras columnas, expresiones
aritméticas o valores constantes para crear una expresión de caracteres
• Utilizar los alias de columna para cambiar el nombre de las columnas en el resultado de la
consulta
• Introducir valores literales de tipo de carácter, número o fecha en una sentencia SELECT
• Definir y utilizar DISTINCT para eliminar las filas duplicadas
• Mostrar la estructura de una tabla mediante DESCRIBE o DESC
• Editar, ejecutar y guardar las sentencias SQL en Oracle Application Express
Terminología
Identifique el término para cada una de las siguientes definiciones.
Comando que suprime los duplicados
Enlaza dos columnas para formar una columna de datos de
caracteres
Grupo de datos de caracteres
Comando de SQL Plus que muestra la estructura de una tabla
Inténtelo/Resuélvalo
1. Al jefe de Global Fast Foods le gustaría enviar cupones para la próxima oferta. Desea enviar un
cupón a cada domicilio. Cree una sentencia SELECT que devuelva el apellido del cliente y una
dirección de correo postal.
Copyright © 2020 Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios.
CONSULTA REQUERIDA:
SELECT last_name, zip_code FROM CLIENTES;
2. Cada una de las sentencias siguientes tiene errores. Corrija los errores y ejecute la consulta en
Oracle Application Express.
a.
SELECT first name
FROM f_staffs;
CONSULTA CORREGIDA:
Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y/o sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios
2
SELECT firs_name FROM f_staffs;
b.
SELECT first_name |" " | last_name AS "DJs on Demand Clients" FROM
d_clients;
CONSULTA CORREGIDA:
c.
SELECT DISTINCT f_order_lines
FROM quantity;
Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y/o sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios
3
CONSULTA CORREGIDA:
SELECT DISTINCT QUANTITY FROM f_order_lines;
d.
SELECT order number
FROM f_orders;
CONSULTA CORREGIDA:
SELECT ORDER_NUMBER FROM f_orders;
Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y/o sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios
4
3. Sue, Bob y Monique han sido los empleados del mes. Mediante la tabla f_staffs, cree una
sentencia SELECT para mostrar los resultados como aparecen en la tabla Super Star.
Super Star
*** Sue *** Sue ***
*** Bob *** Bob ***
*** Monique *** Monique ***
CONSULTA REQUERIDA:
SELECT ‘***’ || FIRST_NAME || ‘***’|| LAST_NAME AS “SUPER_STAR” FROM F_STAFFS;
4. ¿Cuál de las siguientes afirmaciones es VERDADERA sobre la siguiente consulta? SELECT
first_name, DISTINCT birthdate FROM f_staffs;
a. Solo se devolverán dos filas.
b. Se devolverán cuatro filas.
c. Solo se devolverán Fred 05-Jan-1988 y Lizzie 10-Nov-1987.
d. No se devolverá ninguna fila.
La respuesta es la alternativa d. No se devolverá ninguna fila.
Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y/o sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios
5
5. Global Fast Foods ha decidido conceder un aumento del 5% a todos los miembros de la plantilla.
Prepare un informe que presente la salida como se muestra en la tabla.
EMPLOYEE LAST NAME CURRENT SALARY SALARY WITH 5% RAISE
Para crear una tabla como la requerida necesitamos el siguiente comando:
SELECT LAST_NAME AS “EMPLOYEE LAST NAME”, SALARY AS “CURRENT_SALARY”,
SALARY*1.05 AS “SALARY WITH 5% RAISE” FROM F_STAFFS;
Cree una consulta que devuelva la estructura de la tabla EMPLOYEES de la base de datos Oracle.
¿Qué columnas se marcan como “valores nulos”? ¿Qué significa esto?
CONSULTA REQUERIDA:
DESC EMLOYEES;
Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y/o sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios
6
Este es el resultado al ejecutar el comando.
En la columna Nullable vemos que existen checks en ciertos atributos de la entidad
EMPLOYEES, esto implica que no es obligatorio proporcionar un valor para esa columna al
insertar un nuevo registro.
6. Los propietarios de DJs on Demand desean obtener un informe de todos los elementos de su
tabla D_CDs con las siguientes cabeceras de columna: Inventory Item, CD Title, Music Producer
y Year Purchased. Prepare este informe.
Para obtener el informe requerido debemos ejecutar lo siguiente
CONSULTA REQUERIDA:
SELECT CD_NUMBER AS “INVENTORY_ITEM”, TITLE AS “CD_TITLE”, PRODUCER AS
“MUSIC PRODUCER”, YEAR AS “YEAR PURCHASED” FROM D_CDS;
7. Verdadero/Falso: La siguiente sentencia SELECT se ejecuta correctamente:
SELECT last_name, job_id, salary AS Sal
FROM employees;
Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y/o sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios
7
Al ejecutar el comando anterior nos muestra el siguiente resultado:
Entonces la respuesta es VERDADERO, el comando se ejecutara correctamente.
8. Verdadero/Falso: La siguiente sentencia SELECT se ejecuta correctamente: SELECT *
FROM job_grade;
Al ejecutar el comando anterior nos muestra el siguiente resultado:
Entonces la respuesta es FALSO, ya que el resultado es un error, esto nos indica que no existe
dicha entidad o tabla, y es verdad, no existe alguna tabla llamada job_grade de la que podamos
extraer información, tal parece que también es un campo por estar escrito con snake_case.
9. Hay cuatro errores de código en esta sentencia. ¿Puede identificarlos? SELECT employee_id,
last_name sal x 12 ANNUAL SALARY FROM employees;
Si descomponemos la sentencia podemos decir:
SELECT employee_id, last_name sal Aquí ubicamos dos errores, el primero que last_name no
esta separado de sal por coma “,” y el segundo que el campo sal no existe en nuestra tabla
employees, sino es salary.
sal x 12 Aquí ubicamos el tercer error, si el campo sal existiera como esta escrito y queremos
multiplicar sus valores por 12 el operador correcto es “*” y no “x”, además de estar escrito separados
y no juntos para realizar la operación.
Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y/o sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios
8
ANNUAL SALARY FROM employees; Aquí ubicamos el ultimo error, el campo ANNUAL SALARY
no existe en nuestra tabla employees y además esta escrito incorrectamente, por convención un
campo debe ir en el formato snake_case.
10. En la expresión aritmética salary*12 - 400, ¿qué operación se evalúa en primer lugar?
En la expresión anterior: …salary*12-400…
El orden de operación será como convencionalmente se haría en una operación aritmética
convencional, primero la multiplicación de el/los valores del campo salary*12 y finalmente la
el resultado de ese producto – 400.
11. ¿Cuál de las siguientes opciones se puede utilizar en la sentencia SELECT para devolver todas
las columnas de datos de la tabla f_staffs de Global Fast Foods?
a. nombres de columna
b. *
c. DISTINCT id
d. a y b
La alternativa correcta es la letra b.
Esto sucede porque al utilizar el asterisco “*” después de la palabra clave SELECT en una consulta
SQL, indicamos que deseamos seleccionar todas las columnas disponibles en la tabla o tablas
especificadas en la cláusula FROM. Es decir que es una abreviatura que significa "seleccionar todas
las columnas".
12. ¿Qué capacidad se utiliza al usar SQL para seleccionar columnas en una tabla?
a. selección
b. proyección
c. partición
d. unión
La alternativa correcta es la letra b.
13. SELECT last_name AS "Employee". La cabecera de columna aparecerá en el resultado de la
consulta como:
a. EMPLOYEE
b. employee
c. Employee
d. "Employee:
La alternativa correcta es la letra c.
Esto sucede porque estamos dando un alias al campo last_name y SQL obviara las comillas del
nuevo alias para ser mostrado en la cabecera de la nueva columna.
Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y/o sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios
9
14. ¿Cuál de las siguientes expresiones producirá el valor más alto?
a. SELECT salary*6 + 100
b. SELECT salary* (6 + 100)
c. SELECT 6(salary+ 100)
d. SELECT salary+6*100
La alternativa correcta es la letra b.
Esto sucede porque la jerarquía de las operaciones prima igual que en la aritmética convencional,
Entonces en la expresión b SELECT salary*(6+100) se sumara primero el valor de los paréntesis y
finalmente se multiplicara por el/los valores de salary, obteniendo un valor de salary multiplicado por
106.
15. ¿Cuál de las sentencias siguientes devolverá una lista de los empleados con el siguiente
formato?
Mr./Ms. Steven King is an employee of our company.
a. SELECT "Mr./Ms."||first_name||' '||last_name 'is an employee of our company.' AS
"Employees"
FROM employees;
b. SELECT 'Mr./Ms. 'first_name,last_name ||' '||'is an employee of our company.'
FROM employees;
c. SELECT 'Mr./Ms. '||first_name||' '||last_name ||' '||'is an employee of our company.' AS
"Employees"
FROM employees ;
d. SELECT Mr./Ms. ||first_name||' '||last_name ||' '||"is an employee of our company." AS
"Employees"
FROM employees
La alternativa correcta es la letra c.
Esta opción utiliza la concatenación de cadenas para combinar las partes necesarias de la
información y proporciona el formato solicitado. La parte crucial es la correcta combinación de
cadenas y columnas en la cláusula SELECT.
16. ¿Qué afirmación es verdadera acerca de las sentencias SQL?
a. Las sentencias SQL son sensibles a mayúsculas/minúsculas.
b. Las cláusulas SQL no se deben escribir en líneas separadas.
c. Las palabras clave no se pueden abreviar o dividir entre líneas.
d. Las palabras clave SQL se introducen normalmente en minúsculas; las palabras restantes en
mayúsculas.
La alternativa correcta es la letra a.
En SQL, las sentencias y los identificadores, como nombres de tablas o columnas, son sensibles
a mayúsculas/minúsculas. Por ejemplo, "SELECT" y "select" son tratados como palabras clave
distintas.
Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y/o sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios
10
17. ¿Qué consultas devolverán tres columnas cada una con cabeceras de columna en
MAYÚSCULAS?
a. SELECT "Department_id", "Last_name", "First_name"
FROM employees;
b. SELECT DEPARTMENT_ID, LAST_NAME, FIRST_NAME
FROM employees;
c. SELECT department_id, last_name, first_name AS UPPER CASE
FROM employees
d. SELECT department_id, last_name, first_name FROM employees;
La alternativa correcta es la letra b.
En esta consulta, los nombres de las columnas (DEPARTMENT_ID, LAST_NAME, FIRST_NAME)
están escritos en mayúsculas y, por lo tanto, se devolverán en mayúsculas en los resultados. Las
otras opciones no garantizan que las cabeceras de columna se devuelvan en mayúsculas.
18. ¿Cuál de las siguientes sentencias puede fallar?
a. SELCT * FROM employees;
b. Select * FROM employees;
c. SELECT * FROM EMPLOYEES;
d. SelecT* FROM employees;
La alternativa correcta es la letra a.
En esta opción, hay un error de sintaxis. La palabra correcta es "SELECT", pero en esta alternativa
se escribió incorrectamente como "SELCT".
19. Haga clic en el enlace History en la parte inferior de la ventana SQL Commands. Desplácese o
utilice las flechas en la parte inferior de la página para buscar la sentencia que ha escrito para
resolver el problema 3 anterior. (Sobre la cabecera de columna SuperStar). Haga clic en la
sentencia para volver a cargarla en la ventana de comandos. Vuelva a ejecutar el comando para
asegurarse de que es el que funciona correctamente. Una vez que se ha asegurado de que
funciona, haga clic en el botón SAVE situado en la esquina superior derecha de la ventana SQL
Commands e introduzca un nombre para la sentencia guardada. Utilice sus propias iniciales y
“_superstar.sql”, de manera que si sus iniciales son CT, el nombre de archivo será
CT_superstar.sql.
Desconéctese de OAE y vuelva a conectarse inmediatamente. Regrese a la ventana
SQL Commands, haga clic en el enlace Saved SQL en la parte inferior de la página y cargue su
sentencia SQL guardada en la ventana Edit. Esto se realiza haciendo clic en el nombre del script.
Edite la sentencia para que muestre + en lugar de *. Ejecute su sentencia corregida y guárdela
como iniciales_superplus.sql.
Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y/o sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios
11
Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y/o sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios
12