Tipos y Creación de SQL en Bases de Datos
Tipos y Creación de SQL en Bases de Datos
Tipos de SQL
Introducción
En el módulo 3, conoceremos el lenguaje estructurado de consulta (SQL) y cómo este contiene diferentes
lenguajes para la definición (DDL) y manipulación (DML) de los datos. Veremos, además, los diferentes
tipos de datos para luego aprender a crear esquemas, tablas y realizar restricciones. Algunas restricciones
comunes son: las claves, las primarias y foráneas; y la creación de índices. Asimismo, realizaremos
consultas con SQL. Ampliaremos en operaciones como proyección, selección, operadores SQL y
operaciones de conjunto. Por último, veremos consultas con uniones (joins) de tablas, tipos de uniones
existentes y consultas agrupadas, funciones de grupo y ordenamiento.
Video de inmersión
<<Para comprender mejor un concepto, además de su definición, siempre es útil, para ampliar nuestro
conocimiento, conocer su contexto e historia. Para poder entender mejor qué es SQL, veamos 2 artículos.
El primero de ellos define SQL y muestra algo de historia del estándar ANSI; en el segundo artículo se ve
más en detalle la historia del lenguaje.>>
Fuente: Alarcón, J. (2014). Tutorial SQL 1 - Qué es SQL, por qué aprenderlo y preparación del entorno de
aprendizaje. Campus MVP. [Link]
Fuente: Piattini Velthuis, M. (1994). Situación actual de los estándares SQL3 y SQL/MM. Computerworld.
[Link]
Tipos de datos en SQL
Las bases de datos almacenan datos mediante registros, pueden ser distintos en sus características,
soporte, etc. Así, como un aspecto previo, es necesario conocer la naturaleza de los distintos tipos de datos.
Los DBMS proveen distintos tipos de datos con los cuales podemos trabajar, sin embargo, es necesario
especificar cuál nos conviene más y, para eso, debemos saber sus características en búsqueda, capacidad,
uso de los recursos, etc.
Cada DMBS introduce tipos de valores de campos que no se encuentran presentes, precisamente, en otras.
A pesar de esto, existe un conjunto de tipos que están presentes en la totalidad de las implementaciones de
bases de datos. En la tabla 1, podemos ver estos tipos comunes:
Autoincrementales Son campos numéricos enteros que incrementan en una unidad (o más)
su valor para cada registro incorporado. Su principal utilidad es la de
identificador, ya que resultan exclusivos de un registro.
Fuente: elaboración propia.
En este curso en particular, recomendamos el uso del motor Postgre SQL. Como en todos los manejadores
de bases de datos, implementa los tipos de datos definidos para el estándar SQL3 y aumenta algunos otros.
Detallando algunos de los tipos mencionados antes, veamos los tipos definidos por el estándar SQL3 que
se muestran en la tabla 2.
Tabla 2: Tipos de datos en Postgre SQL
Los datos son almacenados en las tablas por medio de filas y columnas. La definición de las tablas se
realiza con un nombre que la identifica unívocamente y un conjunto de columnas. Una vez creada se le
pueden insertar datos en las filas. Sobre las filas de las tablas se pueden hacer operaciones de consulta,
eliminación o actualización de datos.
Columna: una columna o atributo representa un tipo de datos en una tabla, por ejemplo, el nombre de un
artículo en la tabla Artículos. Cada columna cuenta con un nombre, un tipo de dato (char, date o number) y
un tamaño (cantidad de caracteres, si es un tipo texto, un ancho, si es un tipo fecha) o una escala y
precisión (para tipos numéricos). Los valores de una columna siempre van a tener el mismo tipo de datos.
Las columnas se van creando de izquierda a derecha, esto no es relevante a la hora de recuperar los datos
de una tabla.
Fila: una fila es una composición de los valores de las columnas de una tabla, por ejemplo, la información
acerca de un artículo (nombre, precio) en la tabla Artículos. Las filas también son conocidas como tuplas o
registros. Cada tabla puede contener cero o más registros o filas y su contenido es un único valor en cada
columna. Por defecto, las filas están desordenadas, se van disponiendo en la medida que se insertan.
Campo: la intersección de una fila con una columna es el campo. Es la unidad más atómica de una tabla,
no puede ser descompuesto en valores más pequeños. El campo puede o no contener datos, la ausencia
de datos se conoce como campo nulo.
Según vimos antes, es necesario un lenguaje que nos permita crear tanto la estructura, es decir, las tablas,
como el acceso, consulta y actualización de los datos, además de la inserción, selección y eliminación de
tuplas o registros. SQL provee ambos lenguajes (DDL y DML). Comencemos viendo unos ejemplos de cómo
crear tablas a través de SQL.
Esquema y/o base de datos
Para crear nuestras tablas, primero tendremos que hacer un esquema de base de datos y, teniendo en
cuenta el motor utilizado, cada esquema puede tener varias bases de datos. Previo a las tablas, veamos las
sentencias necesarias para crear el esquema.
Como ya hemos visto, la estructura de almacenamiento de los datos del modelo relacional son las tablas.
Para crear una tabla hay que utilizar la sentencia CREATE TABLE. Veamos el formato:
El proceso que hay que seguir para crear una tabla es el siguiente:
Las columnas que no pueden tener valores nulos se indican con las palabras reservadas NOT NULL.
Restricciones de columna
En cada una de las columnas de la tabla, una vez que les hemos dado un nombre y hemos
definido el dominio, podemos imponer ciertas restricciones que siempre se tendrán que cumplir.
Las restricciones que se pueden dar son las que aparecen en la tabla que encontrás a
continuación. (Dataprix, 15 de junio de 2009, [Link]
Restricciones de columna
Restricción Descripción
Clave foránea: la clave foránea está compuesta por una o más columnas que hacen referencia a una clave
primaria de otra tabla o de la misma; por eso, la relación entre las tablas que las contienen se conoce como
padre/hijo. Las claves foráneas tienen el fin de ayudar al cumplimiento de las reglas de diseño de la base de
datos relacional. Se puede contar con más de una clave foránea por tabla. Estas claves surgen de la
necesidad de relacionar diferentes tablas. Como vimos en el ejemplo de curso-alumno (en la lectura 2), la
forma de relacionar una tabla con otra es a través de este tipo de claves.
Restricciones de tabla
Una vez hemos que, dado un nombre, definido un dominio e impuestas ciertas restricciones para cada una
de las columnas, podemos aplicar restricciones sobre toda la tabla, que siempre se tendrán que cumplir. Las
restricciones que se pueden dar son las siguientes:
Restricciones de tabla
Restricción Descripción
Lo primero que tenemos que hacer para crear una vista es decidir qué nombre le queremos poner
(nombre_vista). Si buscamos cambiar el nombre de las columnas o bien, poner nombre a alguna
que en principio no tenía, lo podemos hacer en lista de columnas. A partir de ahí solo nos quedará
definir la consulta que formará nuestra vista.
Las vistas no existen realmente como un conjunto de valores almacenados en la BD, son tablas
ficticias denominadas derivadas (no materializadas). Se construyen a partir de tablas reales
(materializadas) almacenadas en la BD y conocidas con el nombre de tablas básicas (o tablas de
base). La no-existencia real de las vistas hace que puedan ser actualizables o no.
Creamos una vista que dé, por ejemplo, para cada cliente el número de proyectos que tiene
encargados el cliente. (Dataprix, 15 de junio de 2009, [Link]
Más adelante detallaremos, pero vemos en esta vista varios componentes nuevos. La consulta propiamente
dicha (SELECT) retorna lo indicado en el enunciado y nos permite consultar los datos directamente,
utilizando la vista Proyectos por cliente, si tuviésemos las siguientes extensiones:
Tabla 5: Clientes
Clientes
Tabla 6: Proyectos
Proyectos
Y si mirásemos la extensión de la vista Proyectos por clientes, veríamos lo que encontramos en la siguiente
tabla.
proyectos_por_clientes
codigo_cli numero_proyectos
10 2
20 1
30 1
Fuente: elaboración propia.
Índices
Los índices, si bien siempre están asociados a una tabla, son objetos independientes, ya sea desde el punto
de vista lógico como desde el punto de vista físico. Ellos se pueden crear o eliminar sin que afecten a la
información almacenada en una tabla.
El DBMS utiliza el índice como se puede utilizar el índice de un libro. El índice contiene una entrada por
cada valor que aparece en las columnas indexadas de la tabla y punteros (o rowid) a las filas que contienen
esos valores. “Cada puntero conduce directamente a la fila apropiada; en consecuencia, se evita el barrido
total de la tabla” (Oracle, s. f. B, p. 22).
En el índice, los valores de los datos están dispuestos en orden ascendente o descendente, de modo que el
DBMS es capaz de buscar rápidamente el índice para encontrar un valor particular. A continuación,
podemos seguir el puntero para localizar la fila que contiene el valor.
En general, es una buena idea crear un índice para las columnas que se utilizan con frecuencia en las
condiciones de búsqueda. La indexación también es más apropiada cuando las consultas en una tabla son
más frecuentes que las inserciones y las actualizaciones.
Clave primaria: la mayoría de los productos de DBMS siempre establecen un índice para la clave primaria
de una tabla porque anticipan que el acceso a la tabla será más frecuente a través de la clave primaria. El
índice de clave primaria también ayuda al DBMS a comprobar rápidamente los valores duplicados a medida
que se insertan nuevas filas en la tabla.
Clave foránea: un índice de columnas de clave foránea, a menudo, puede mejorar el rendimiento de las
combinaciones.
Restricción de unicidad: la mayoría de los productos DBMS también establece automáticamente un índice
para cualquier columna (o combinación de columnas) definido con una restricción de unicidad. Al igual que
con la clave primaria, el DBMS debe comprobar el valor de dicha columna en cualquier nueva fila que se
desee insertar o en cualquier actualización de una fila existente para asegurarse de que el valor no duplique
un valor ya contenido en la tabla. Sin un índice en la (s) columna (s), el DBMS tendría que buscar
secuencialmente en cada fila de la tabla para verificar la restricción. Con un índice, el DBMS puede,
simplemente, usar el índice para encontrar una fila (si existe) con el valor en cuestión, una operación mucho
más rápida que una búsqueda secuencial.
Deben actualizarse cada vez que se agrega una fila a la tabla. Imponen una sobrecarga adicional en
inserts y updates.
Tipos de índices
Algunos productos DBMS soportan dos o más tipos diferentes de índices, que están optimizados para
diferentes tipos de acceso a la base de datos.
Árbol B (B*Tree): es el tipo predeterminado en casi todos los productos de DBMS. Utiliza una estructura de
árbol de entradas de índice y bloques de índice (grupos de entradas de índice) para organizar los valores de
datos que contiene, en orden ascendente o descendente. Proporciona una búsqueda eficiente de un valor
único o de un intervalo de valores, como lo es la búsqueda requerida para un operador de comparación de
desigualdad o una operación de prueba de intervalo (between).
La sentencia asigna un nombre al índice y especifica la tabla para la que se crea el índice. La sentencia
también especifica las columnas que se van a indexar y si deben ser indexadas en orden ascendente o
descendente. Veamos unos ejemplos de creación de índices:
Si creamos un índice para una tabla y, posteriormente, decidimos que no es necesario, la instrucción DROP
INDEX elimina el índice de la base de datos. La instrucción elimina el índice creado en el ejemplo anterior:
DROP INDEX ORD_PROD_IDX.
Unidad 2. Consultas y manipulación de datos (DML)
Para manipular los datos de cualquier base de datos contamos con dos operaciones básicas: las de
recuperación y las de inserción o actualización de datos. Para realizar estas operaciones utilizamos el
lenguaje SQL, específicamente, el sublenguaje que permite manipular los datos (Data Manipulation
Language).
La sentencia del lenguaje utilizada para la recuperación de datos es SELECT. SQL posee diversos
operadores que pueden ser utilizados al escribir una consulta SQL o SELECT. La sentencia
SELECT, además, posee cláusulas que permiten restringir y ordenar el conjunto resultado, lo que
permite presentar el resultado de una consulta según el formato requerido por el usuario final de la
base de datos. SQL también provee la facilidad de invocar funciones, programas que reciben
argumentos y calculan o retornan un valor en la sentencia SELECT. La invocación de funciones
brinda mayor flexibilidad y potencia al lenguaje, a la vez que provee un mecanismo de extensión.
Los datos en una base de datos relacional se almacenan en diferentes tablas que se encuentran
relacionadas por valores en común. Utilizando la sentencia SELECT es posible escribir consultas
que unan dos o más tablas relacionadas y presenten la información de manera unificada.
Aparte del acceso a datos almacenados en diferentes tablas, es posible agregar o agrupar datos
según valores comunes, de esta manera, se pueden calcular valores sumarizados a nivel de grupo
de filas. La sentencia SELECT posee una cláusula para especificar el agrupamiento de datos y
existen diferentes funciones de grupo para llevar a cabo cálculos a nivel de grupo. Este tipo de
consultas son las que se denominan agrupadas. (Oracle, s. f. A, p. 1)
Estructura de una consulta:
Todas las palabras marcadas en negrita son reservadas del lenguaje SQL y el orden que se ve es el
que debemos seguir al momento de crear nuestras consultas.
Tema 1. Selección y proyección
Para hacer consultas sobre una tabla con el SQL es preciso utilizar la sentencia SELECT FROM, que tiene
el siguiente formato:
SELECTnombre_columna_a_seleccionar [,nombre_columna_a_seleccionar...]
FROM tabla_a_consultar
WHERE restricciones;
La selección es el proceso por el cual elegimos qué registros tomamos de una tabla en particular. Esto se
hace a través del WHERE, es opcional ya que, si no se escribe, indica que queremos todos las tuplas de
una tabla. La proyección es la que nos permite elegir qué campos o atributos mostrar de una determinada
tabla, se hace a través del SELECT. Por último, pero no menos importante, aparece el FROM. A través de
esta palabra indicamos sobre qué tabla estamos realizando la consulta. Veamos unos ejemplos.
Si tenemos una tabla Clientes (código, nombre, dirección, ciudad) y queremos listar todos los clientes
mostrando todas las columnas, simplemente basta con escribir.
Select*
From clientes;
Vemos que con “*” indicamos todas las columnas. Ahora, si quisiéramos ver solo el código del cliente y el
nombre, sería así:
Por último, si quisiéramos solo ver aquellos códigos de clientes de la ciudad de Buenos Aires, se vería:
Select código
From clientes Where ciudad = “Buenos Aires”.
Condiciones y operadores
Para definir las condiciones en la cláusula where, podemos utilizar los operadores que dispone SQL.
Operadores lógicos
Operadores de comparación
= Igual
< Menor
> Mayor
<> Distinto
SELECT <nombre_columnas>
FROM <tabla>
[WHERE <condiciones>]
UNION [ALL]
SELECT <nombre_columnas>
FROM <tabla>
[WHERE <condiciones>];
Si se utiliza la opción ALL aparecen todas las filas obtenidas al hacer la unión. No se escribirá esta opción si
se quieren eliminar las filas repetidas. Lo más importante de la unión es que somos nosotros los que
tenemos que vigilar que se haga entre columnas definidas sobre dominios compatibles; es decir, que tengan
la misma interpretación semántica. Como ya se ha dicho, SQL no ofrece herramientas para asegurar la
compatibilidad semántica entre columnas.
La intersección
Para hacer la intersección entre dos o más sentencias SELECT FROM, se puede utilizar la cláusula
INTERSECT, cuyo formato es el siguiente:
SELECT <nombre_columnas>
FROM <tabla>
[WHERE <condiciones>]
INTERSECT [ALL]
SELECT <nombre_columnas>
FROM <tabla>
[WHERE <condiciones>];
Si se utiliza la opción ALL aparecen todas las filas obtenidas al hacer la intersección. No se escribirá esta
opción si se quieren eliminar las filas repetidas. En la intersección, es de suma importancia tener en cuenta
que somos nosotros los que tenemos que vigilar que se aplique entre columnas definidas sobre dominios
compatibles, es decir, que tengan la misma interpretación semántica.
La diferencia
Para encontrar la diferencia entre dos o más sentencias SELECT FROM podemos utilizar la cláusula
EXCEPT, que tiene este formato:
SELECT <nombre_columnas>
FROM <tabla>
[WHERE <condiciones>]
EXCEPT [ALL]
SELECT <nombre_columnas>
FROM <tabla>
[WHERE <condiciones>];
Si se utiliza la opción ALL, aparecen todas las filas obtenidas al hacer la diferencia. No se escribirá esta
opción si se quieren eliminar las filas repetidas. Lo más importante de la diferencia es que somos nosotros
los que tenemos que vigilar que se haga entre columnas definidas sobre dominios compatibles.
Actividades de repaso
En las operaciones de conjunto, las columnas de los conjuntos con las que se va
a operar deben ser las mismas.
Verdadero
Falso
Justificación
Combinación
La combinación consigue crear una sola tabla a partir de las tablas especificadas en la cláusula
FROM. Hace coincidir los valores de las columnas relacionadas de estas tablas. (Dataprix, 21 de
septiembre de 2009, [Link]
Ejemplo de una combinación (join):
Se quiere saber el NIF, el código y el precio del proyecto que se desarrolla para el cliente número 20:
3 1000000.0 38.123.898-E
Fuente: elaboración propia.
Si trabajamos con más de una tabla, puede pasar que la tabla resultante tenga dos columnas con el mismo
nombre. Por eso, es obligatorio especificar a qué tabla corresponden las columnas a las que nos referimos,
se nombra la tabla a la que pertenecen antes de ponerlas (por ejemplo, clientes.codigo_cli). Para
simplificarlo, se utilizan los alias que, en este caso, se definen en la cláusula FROM.
Nota: un alias se define automáticamente después de nombrar la tabla dentro del FROM (ejemplo FROM
persona p, p es un alias para persona).
La opción ON, además de expresar condiciones con la igualdad en caso de que las columnas que
queremos relacionar tengan nombres diferentes, nos ofrece la posibilidad de expresar condiciones
con los otros operadores de comparación que no sean el de igualdad. También podemos utilizar
una misma tabla dos veces con alias diferentes, para poder distinguirlas.
Combinación natural
La combinación natural (natural join) de dos tablas consiste, básicamente, en hacer una
equicombinación entre columnas del mismo nombre y eliminar las columnas repetidas. La
combinación natural, utilizando SQL: 1992, se haría de la siguiente manera. (Escofet, 2013, pp. 39-
40)
Ejemplo de una combinación natural: se quiere saber el código y el nombre de los empleados que están
asignados al departamento que tiene por teléfono 977.333.852.
SELECT codigo_empl,nombre_empl
FROM empleados NATURAL JOIN departamentos WHERE telefono ="977.333.852";
SELECT <nombre_columnas_seleccionar>
FROM <tabla1> [NATURAL] [INNER] JOIN <tabla2>
{ON <condiciones>|
USING (<nombre_columna> [,<nombre_columna>...])} [WHERE <condiciones>];
Si no se quiere perder ninguna fila en una tabla determinada, se puede hacer una combinación
externa (outer join). Permite obtener todos los valores de la tabla que hemos puesto a la
derecha, los valores de la que hemos puesto a la izquierda o todos los valores de ambas tablas.
Su formato es el siguiente. (Escofet, 2013, p. 41)
SELECT <nombre_columnas_seleccionar>
FROM <tabla1> [NATURAL] {LEFT|RIGHT|FULL} [OUTER] JOIN <tabla2>
{ON <condiciones>|
USING (<nombre_columna> [,<nombre_columna>...])} [WHERE <condiciones>];
Veamos ejemplos de los dos casos. Supongamos que se quiere combinar tablas Empleados, Proyectos y
Clientes. (Escofet, 2013, p. 43)
SELECT *
FROM empleados, proyectos, clientes
WHERE num_proy = codigo_proy AND codigo_cliente = codigo_cli;
o bien:
SELECT *
FROM (empleados JOIN proyectos ON num_proy = codigo_proy) JOIN clientes ON codigo_cliente =
codigo_cli;
Funciones de agregación
Función Descripción
Las cláusulas que añadimos a la sentencia SELECT FROM permiten organizar las filas por grupos:
La cláusula GROUP BY nos sirve para agrupar filas según las columnas que indique esta cláusula.
La cláusula HAVING especifica condiciones de búsqueda para grupos de filas; lleva a cabo la misma
función que antes hacía la cláusula WHERE para las filas de toda la tabla, pero ahora las condiciones
se aplican a los grupos obtenidos.
SELECT <nombre_columnas_seleccionar>
FROM <tabla_consultar> [WHERE <condiciones>]
Prestemos especial atención a que, en las sentencias SQL, se van añadiendo cláusulas a medida que la
dificultad o la exigencia de la consulta lo requiere.
Consulta con agrupación de filas: se quiere saber el sueldo medio que ganan los empleados de cada
departamento.
La cláusula GROUP BY podríamos decir que empaqueta a los empleados de la tabla Empleados según el
departamento en que están asignados. En la siguiente figura, podemos ver los grupos que se formarían
después de agrupar.
Nuevamente, antes de mostrar el resultado de esta consulta, veamos gráficamente qué grupos se formarían
en este caso:
Consultas ordenadas
Si se quiere que, al hacer una consulta, los datos aparezcan en un orden determinado, hay que utilizar la
cláusula ORDER BY en la sentencia SELECT, que tiene el siguiente formato.
Ejemplo: se quiere consultar los nombres de los empleados ordenados según el sueldo que ganan; y si
ganan el mismo sueldo, ordenados alfabéticamente por el nombre.
SELECT <nombre_columnas_seleccionar>
FROM <tabla_consultar> [WHERE <condiciones>]
ORDER BY <nombre_columna_según_la_que_ordenar> [DESC]
[, <nombre_columna_según_la_que_ordenar> [DESC]...];
Si no se especifica nada más, el orden que se seguirá será ascendente, pero si se quiere seguir un orden
descendente, hay que añadir DESC detrás de cada factor de ordenación expresado en la cláusula ORDER
BY:
También se puede explicitar un orden ascendente poniendo la palabra clave ASC (opción por defecto).
Video de habilidades
Fuente: Gabriela Flores. (2013). Algebra Relacional (proyección). [Video de YouTube]. Recuperado de [Link]
Debemos lograr llevar las operaciones de conjunto o del álgebra relacional al plano de la información que se
almacena en la base de datos con el fin de poder cruzar y organizar la información. Las bases de datos
basan todas sus operaciones en álgebra relacional.
Verdadero
Falso
Justificación
Verdadero
Falso
Justificación
Unión
Producto cartesiano
Selección
Diferencia
Proyección
Justificación
No es posible combinar dos operaciones del álgebra relacional.
Verdadero
Falso
Justificación
La operación que combina todas las tuplas de la relación T con cada una de las
tuplas de la relación R es:
Producto cartesiano
Unión (a)
Justificación
Fuente: Merche Marqués Andrés. (2014). Consultas en SQL: SELECT, FROM, WHERE. [Video de YouTube]. Recuperado de
[Link]
Es muy importante adquirir práctica en el armado de las consultas y sentencia SQL. La sentencia que posee
más complejidad es el Select por eso haremos más hincapié en ella. Tenemos que ser capaces de poder
combinar más de una tabla y saber hacer las agrupaciones o restricciones necesarias.
Distinct
Union
Sum
Avg
Count
Justificación
Si deseamos ordenar los datos por una columna en particular ¿debemos escribir
Order by (campo por el cual ordenar)?
Verdadero
Falso
Justificación
Select * from clases where materia = ‘elaboración de texto avanzado’ or materia = ‘manejo de
db’
Microactividades
Para realizar los ejercicios, recordemos leer el Manual de uso de PostgreSQL:
Al final de este apartado, encontraremos un archivo descargable con las respuestas de cada ejercicio. Estas
respuestas te van a servir como guía para que revises si realizaste correctamente los ejercicios.
Introducción
Si utilizamos pgAdmin, todas las tablas, datos, funciones, procedimientos almacenados y triggers, serán
guardados en la computadora. De esta forma, podremos acceder a ellos, indiferentemente si cerramos el
programa o reiniciamos el sistema.
En el caso de utilizar la herramienta online, deberemos guardar las consultas que vayamos realizando. Esto
sucede porque al cerrar el navegador se perderán todos los datos y se deberán copiar, pegar y ejecutar las
consultas que ya habías ejecutado. De tal manera, podremos avanzar en los próximos ejercicios sin
necesidad de volver a escribirlas una a una nuevamente.
Situación
En el recorrido de todos los ejercicios vamos a tener que crear y trabajar sobre un sistema para una
universidad.
Desde la universidad Puls-ar nos solicitan llevar el registro de los alumnos y las materias que ellos cursan.
Cuando los alumnos se inscriben se les pide su DNI, nombre, apellido e e-mail.
Dados de alta en la universidad, ellos ya están en condiciones de anotarse a las materias disponibles,
teniendo en cuenta que las materias tienen un nombre y un año de cursado.
Requerimientos
Utilización de la plataforma PostgreSQL.
Enunciados
Ejercicio 3.1
Ejercicio 3.2
Obtengamos un listado con la cantidad de alumnos inscriptos a cada materia. Ordenemos por nombre de
materia ascendente y año de cursado ascendente.
Ejercicio 3.3
Modifiquemos la tabla alumnos de forma tal que ahora el campo e-mail admita hasta 80 caracteres.
Ejercicio 3.4
Ejercicio 3.5
Ejemplo de resolución
Glosario
Referencias
Dataprix. (15 de junio de 2009). El lenguaje SQL. [Link]
Dataprix. (22 de septiembre de 2009 B). Creación y borrador de una base de datos relacional.
[Link]
relacional
Programación. (1 de julio de 2015). SQL creación y borrado de vistas. Creación de una vista en BDUOC.
[Link]