|
A continuaci�n
vamos a explicar un poco lo que es el
Lenguaje SQL (Structured Query Language) y el Modelo Relacional.
SQL (Structured
Query Language).
SQL
se ha convertido en el lenguaje de consulta relacional m�s popular.
El nombre "SQL" es una abreviatura de Structured Query Language
(Lenguaje de consulta estructurado).
SQL es tambi�n
un est�ndar oficial. En 1982, la American National Standards
Institute (ANSI) encarg� a su Comit� de Bases de Datos X3H2 el
desarrollo de una propuesta de lenguaje relacional est�ndar. Esta
propuesta fue ratificada en 1986 y consist�a b�sicamente en el
dialecto de IBM de SQL. En 1987, este est�ndar ANSI fue tambi�n
aceptado por la Organizaci�n Internacional de Estandarizaci�n (ISO).
Esta versi�n est�ndar original de SQL recibi� informalmente el
nombre de "SQL/86". En 1989, el est�ndar original fue extendido, y
recibi� el nuevo nombre, tambi�n informal, de "SQL/89". Tambi�n en
1989 se desarroll� un est�ndar relacionado llamado Database Language
Embedded SQL (ESQL).
Los comit�s ISO
y ANSI han estado trabajando durante muchos a�os en la definici�n de
una versi�n muy ampliada del est�ndar original, llamado
informalmente SQL2 o SQL/92. Esta versi�n se convirti� en un
est�ndar ratificado durante 1992: International Standard ISO/IEC
9075:1992, Database Language SQL. SQL/92 es la versi�n a la que
normalmente la gente se refiere cuando habla de �SQL est�ndar�. Se
da una descripci�n detallada de SQL/92 en Date and Darwen, 1997.
El Modelo de
Datos Relacional.
Como
mencionamos antes, SQL es un lenguaje relacional. Esto quiere decir
que se basa en el modelo de datos relacional publicado inicialmente
por E.F.Codd en 1970. Daremos una mirada desde un punto de vista m�s
intuitivo.
Una base de
datos relacional es una base de datos que se percibe por los
usuarios como una colecci�n de tablas (y nada m�s que tablas). Una
tabla consiste en filas y columnas, en las que cada fila representa
un registro, y cada columna representa un atributo del registro
contenido en la tabla. La Base de Biblioteca muestra un ejemplo de
base de datos consistente en tres tablas:
AUTOR:
es una tabla que almacena un numero identificador (id_autor), el
nombre completo del autor (nombre), la ciudad del autor (ciudad) y
la nacionalidad del autor (pais).
LIBRO:
es una tabla que almacena un n�mero identificador del libro (id_libro),
el n�mero identificador del autor (id_autor), el id_autor se toma de
la tabla AUTOR, el nombre del libro (nombre) y el a�o en que se
public� (a�o).
Como podemos
darnos cuenta, la tabla LIBRO, tambi�n almacena el id_autor, pero
este se toma como referencia de la tabla AUTOR, as� que no podemos
ingresar un libro con un autor desconocido o que no se encuadra en
la tabla AUTOR.
Ejemplo de la
Base de Datos Biblioteca:
AUTOR:
id_autor | nombre | ciudad |
nacionalidad
----------------+-------------------------------+---------------------+------------------
1 | LUIS VEGA | CHANCO
| CHILE
2 | PAULO NU�EZ | GRANEROS
| CHILE
3 | JULIO LOBO | SN.
FELIPE | CHILE
LIBRO:
id_libro | id_autor
| nombre | a�o
---------------+------------------------------+---------------------+------------------
1 | 1 | untitled
| 1995
2 | 2 | sin nombre
1 | 2003
3 | 2 | sin nombre
2 | 2000
Las tablas AUTOR y LIBRO se pueden ver como entidades
as� como tambi�n la tabla LIBRO se puede ver como una
relaci�n entre un libro y un autor en particular.
Como veremos m�s
tarde, SQL opera en las tablas tal como han sido definidas.
El Lenguaje SQL
en PostgreSQL.
En los
siguientes ejemplos podremos ver el Lenguaje SQL Standard y que es
valido para la mayor�a de los Gestores de Base de Datos Relacionales,
nosotros por supuesto no centraremos en la sintaxis de PostgreSQL.
Para iniciar una
base de datos, debemos estar como usuario normal (no como root),
entonces desde la l�nea de comandos escribimos: initdb nombre_bd
y presionamos enter. Una vez hecho esto escribimos lo siguiente en
la l�nea de comandos: /usr/bin/pg_ctl -D nombre_bd -l logfile
Start y presionamos enter.
Lo anterior nos
sirve para levantar el postmaster, esto se hace una sola vez, no es
necesario escribir initdb para levantar nuevamente la base de
datos, solo debemos escribr /usr/bin/pg_ctl -D nombre_bd -l logfile
start, stop o restart para levantar el postmaster.
Luego creamos al
base de datos con CREATEDB nombre_bd y presionamos enter,
luego escribimos en la l�nea de comandos psql nombre_db y ya
estamos dentro de la Terminal de PostgreSQL, de esta manera ya
podremos crear tablas, hacer consultas, etc. Lo anterior se ver�a
como lo siguiente:
[postgres@localhost root]$ psql nombre_bd
Bienvenido a psql 7.4.1, el
terminal interactivo de PostgreSQL.
Digite: \copyright para ver los t�rminos de distribuci�n
\h para obtener ayuda sobre comandos SQL
\? para obtener ayuda sobre comandos internos
\g o termine con punto y coma (;) para ejecutar consulta
\q para salir
nombre_bd=#
Comandos para
inserci�n, borrado o modificaci�n de datos.
Select:
El comando m�s
usado en SQL es la instrucci�n SELECT, que se utiliza para recuperar
datos.
La
sintaxis es:
SELECT [ALL|DISTINCT]
{ * | expr_1 [AS c_alias_1] [, ...
[, expr_k [AS c_alias_k]]]}
FROM table_name_1 [t_alias_1]
[, ... [, table_name_n [t_alias_n]]]
[WHERE condition]
[GROUP BY name_of_attr_i
[,... [, name_of_attr_j]] [HAVING condition]]
[{UNION [ALL] | INTERSECT | EXCEPT} SELECT ...]
[ORDER BY name_of_attr_i [ASC|DESC]
[, ... [, name_of_attr_j [ASC|DESC]]]];
Las tablas utilizadas para los ejemplos se definen en: La Base de
Datos Biblioteca.
Ejemplo de un
Select:
Para recuperar
todas las tuplas de la tabla LIBRO donde el atributo a�o es mayor
que 1999, formularemos la siguiente consulta:
SELECT * FROM LIBRO WHERE a�o > 1999;
y obtenemos la
siguiente tabla:
id_libro | id_autor | nombre | a�o
-----------+-------------------+---------------------+------------------
2 | 2 | sin nombre 1 | 2003
3 | 2 | sin nombre 2 | 2000
Utilizando "*" en la instrucci�n SELECT solicitaremos todos los
atributos de la tabla. Si queremos recuperar s�lo los atributos
nombre y a�o de la tabla LIBRO utilizaremos la instrucci�n:
SELECT nombre,
a�o FROM LIBRO WHERE a�o > 1999;
En este caso el
resultado es:
nombre | a�o
--------------------+-----------
sin nombre 1 | 2003
sin nombre 2 | 2000
Operadores
Agregados
SQL proporciona
operadores agregados (como son AVG, COUNT, SUM, MIN, MAX) que toman
el nombre de un atributo como argumento. El valor del operador
agregado se calcula sobre todos los valores de la columna
especificada en la tabla completa. Si se especifican grupos en la
consulta, el c�lculo se hace s�lo sobre los valores de cada grupo.
Si queremos
conocer cuantos libros se recogen en la tabla LIBRO, utilizaremos la
instrucci�n:
SELECT COUNT (id_libro) FROM LIBRO;
y
obtendremos:
COUNT
-----------
3
Subconsultas
En las clausulas
WHERE y HAVING se permite el uso de subconsultas (subselects) en
cualquier lugar donde se espere un valor. En este caso, el valor
debe derivar de la evaluaci�n previa de la subconsulta. El uso de
subconsultas ampl�a el poder expresivo de SQL.
Si queremos
conocer los libros que tienen una fecha de publicaci�n mayor que el
libro llamado �untitled�, utilizaremos la consulta:
SELECT * FROM LIBRO WHERE a�o > (SELECT
a�o FROM LIBRO
WHERE nombre='untitled');
El resultado ser�:
Id_libro | nombre | a�o
-----------+---------------------+--------
2 | sin nombre 1 | 2003
3 | sin nombre 2 | 2000
Definici�n de
datos.
El lenguaje SQL
incluye un conjunto de comandos para definici�n de datos.
Create Table
El comando
fundamental para definir datos es el que crea una nueva relaci�n
(una nueva tabla).
La
sintaxis del comando CREATE TABLE es:
CREATE TABLE table_name
(name_of_attr_1 type_of_attr_1
[, name_of_attr_2 type_of_attr_2
[, ...]]);
Creaci�n de una
tabla
Para crear las
tablas definidas en La Base Biblioteca se utilizaron las siguientes
instrucciones de SQL:
CREATE TABLE AUTOR (
id_autor integer not null,
nombre varchar(40),
ciudad varchar (20),
nacionalidad varchar (20),
constraint pk_id_autor primary key (id_autor));
CREATE TABLE LIBRO (
id_libro integer not null,
id_autor integer not null,
nombre varchar(40),
a�o varchar (20),
constraint pk_id_libro primary key (id_libro),
constraint fk_id_autor foreign key (id_autor) references AUTOR (id_autor));
Algunos tipos de
datos en PostgreSQL.
INTEGER:
entero binario con signo de palabra completa (31 bits de precisi�n).
DECIMAL (p[,q]):
n�mero decimal con signo de p d�gitos de precisi�n, asumiendo q a la
derecha para el punto decimal. (15 = p = qq = 0). Si q se omite, se
asume que vale 0.
FLOAT: num�rico
con signo de doble palabra y coma flotante.
VARCHAR(n):
cadena de caracteres de longitud variable, de longitud m�xima n.
Create View.
Se puede ver una
vista como una tabla virtual, es decir, una tabla que no existe
f�sicamente en la base de datos, pero aparece al usuario como si
existiese. Por contra, cuando hablamos de una tabla base, hay
realmente un equivalente almacenado para cada fila en la tabla en
alg�n sitio del almacenamiento f�sico.
Las vistas no
tienen datos almacenados propios, distinguibles y f�sicamente
almacenados.
En PostgreSQL se
utiliza el comando CREATE VIEW para definir una vista. La sintaxis
es:
CREATE VIEW
view_name
AS select_stmt
Donde
select_stmt es una instrucci�n select v�lida, como se defini� en
Select. Fijarse en que select_stmt no se ejecuta cuando se crea la
vista. Simplemente se almacena en los cat�logos del sistema y se
ejecuta cada vez que se realiza una consulta contra la vista.
Drop Table y Drop View.
Se utiliza el
comando DROP TABLE para eliminar una tabla (incluyendo todas las
tuplas almacenadas en ella):
DROP TABLE
table_name;
Para eliminar la
tabla AUTOR, utilizaremos la instrucci�n:
DROP TABLE
AUTOR;
Finalmente,
eliminaremos una vista dada utilizando el comando DROP VIEW:
DROP VIEW
view_name;
Manipulaci�n de
Datos.
Insert Into
Una vez que se
crea una tabla, puede ser llenada con tuplas mediante el comando
INSERT INTO.
La
sintaxis es:
INSERT INTO table_name (name_of_attr_1 [, name_of_attr_2 [,...]])
VALUES (val_attr_1 [, val_attr_2 [, ...]]);
Para insertar la
primera tupla en la tabla LIBRO (de La Base de Datos Biblioteca)
utilizamos la siguiente instrucci�n:
INSERT INTO LIBRO VALUES (1, 1, �untitled�, �1995�);
El primer atributo es el id_libro, el cual asocia un
numero a ese libro, el segundo atributo es el id_autor, este
atributo es muy importante ya que si no existe el AUTOR con id_autor
igual a 1, no se podr� insertar el registro en la tabla libro, lo
que no indica que cada libro debe tener obligatoriamente un autor
(por eso relacionamos las tablas), por ultimo el tercer atributo es
el nombre del libro y luego el a�o en que se public�.
Update
Para cambiar uno
o m�s valores de atributos de tuplas en una relaci�n, se utiliza el
comando UPDATE.
La
sintaxis es:
UPDATE table_name SET name_of_attr_1 = value_1 [, ... [,
name_of_attr_k = value_k]]
WHERE condition;
Delete
Para borrar una
tupla de una tabla particular, utilizamos el comando DELETE FROM. La
sintaxis es:
DELETE FROM table_name WHERE condition;
Para borrar el
autor llamado 'LUIS VEGA' de la tabla AUTOR, utilizamos la siguiente
instrucci�n:
DELETE FROM AUTOR WHERE id_autor = 1;
|
Atr�s | Inicio |
Siguiente | |