Tema 33. El lenguaje SQL

Anuncio
Tema 33. El lenguaje SQL
31/05/2011
Tema 33. El lenguaje SQL
Introducción.......................................................................................................................1
Modos de uso.....................................................................................................................2
Ejecución de las sentencias SQL...................................................................................2
Instrucciones DDL – Data Definition Language-..............................................................3
Instrucciones DML – Data Manipulation Language-........................................................4
Instrucciones DQL – Data Query Language-....................................................................5
Creación de vistas..............................................................................................................6
Control de acceso a los datos.............................................................................................6
Control de transacciones....................................................................................................7
Críticas al lenguaje SQL....................................................................................................8
Introducción
El lenguaje SQL (Structured Query Language) es el lenguaje estándar para interactuar
con las bases de datos relacionales.
Su antecesor fue el SEQUEL – Structured English QUEry Language -, lenguaje
desarrollado por IBM.
En 1986, la ISO – La Organización internacional de estandarización- publicó la primera
versión de SQL. La versión actual de SQL es el SQL:2006, una versión que establece
como usar SQL con XML.
A pesar de su nombre, SQL no es sólo un lenguaje de consulta de datos –DQL-, posee
las siguientes características:
• Posee instrucciones de definición de datos –DDL• Posee instrucciones de manipulación de datos –DDL• Posee instrucciones de creación de vistas.
• Posee instrucciones de definición del control de acceso a los datos.
• Posee instrucciones de control de la integridad de los datos.
• Posee instrucciones de control de transacciones.
El lenguaje SQL es un lenguaje declarativo, es decir, especifica que operaciones se
deben realizar pero no cómo. Se basa en el lenguaje formal de cálculo relacional, pero
tiene una sintaxis y un léxico más amigables. SQL incorpora unas pocas operaciones del
álgebra relacional.
SQL es un lenguaje orientado a realizar operaciones complejas sobre datos simples
almacenados y organizados dentro de bases de datos relacionales.
SQL trabaja a nivel conceptual, es por ello que el estándar no contempla la gestión de
índices desde el SQL2. Aunque el SQL de las bases de datos si posee esta
funcionalidad. El motivo es que los fabricantes implementan el lenguaje SQL con más
funcionalidad. Esto da lugar a incompatibilidades. La gestión de índices con SQL es
diferente por ejemplo entre ORACLE y MySQL.
Página 1 de 8
Tema 33. El lenguaje SQL
31/05/2011
Modos de uso
El SQL permite fundamentalmente dos modos de uso:
•
Un uso interactivo, destinado principalmente a los usuarios finales avanzados,
en el que las sentencias SQL se escriben y ejecutan en línea de comandos, o un
entorno semejante.
•
Un uso integrado, destinado al uso por parte de los programadores dentro de
programas escritos en cualquier lenguaje de programación anfitrión. En este
caso el SQL asume el papel de sublenguaje de datos.
En el caso de hacer un uso embebido del lenguaje podemos utilizar dos técnicas
alternativas de programación:
SQL estático, las sentencias SQL aparecen fijas en los programas, no
cambian durante la ejecución del programa.
1.
SQL dinámico, se produce una modificación total o parcial de las
sentencias en el transcurso de la ejecución del programa.
2.
La utilización de SQL dinámico permite mayor flexibilidad y mayor complejidad en las
sentencias, pero como contra punto obtenemos una eficiencia menor y el uso de técnicas
de programación más complejas en el manejo de memoria y variables.
Ejecución de las sentencias SQL
SQL es un lenguaje declarativo. O sea, que especifica que es lo que se quiere y no como
conseguirlo, por lo que una sentencia no establece explícitamente un orden de ejecución
El orden de ejecución interno de una sentencia puede afectar gravemente a la eficiencia
del SGBD, por lo que se hace necesario que éste lleve a cabo una optimización antes de
la ejecución de la misma.
Muchas veces, el uso de índices acelera una instrucción de consulta, pero ralentiza la
actualización de los datos. Dependiendo del uso de la aplicación, se priorizará el acceso
indexado o una rápida actualización de la información. La optimización difiere
sensiblemente en cada motor de base de datos y depende de muchos factores.
Como he indicado en la introducción, SQL trabaja a nivel conceptual, es por ello que no
tiene en cuenta el uso de índices o la optimización de las instrucciones. La optimización
de las instrucciones SQL dependen de las características de cada SGBD, aunque existen
técnicas de optimización de las sentencias SQL comunes a todos los SGBD.
Página 2 de 8
Tema 33. El lenguaje SQL
31/05/2011
Instrucciones DDL – Data Definition LanguageSQL utiliza los términos tabla, fila y columna para referirse a las relaciones, tuplas y
atributos, respectivamente.
El esquema y el catálogo en SQL
SQL organiza las tablas en esquemas. Las tablas y otros componentes de una misma
base de datos de una aplicación pertenecen a un mismo esquema. La instrucción de
creación de un esquema es:
CREATE SCHEMA NOM_ESQUEMA AUTHORIZATION NOM_USUARIO
Los esquemas de un mismo entorno SQL se almacenan en un mismo catálogo. Los
esquemas de un mismo catálogo pueden compartir elementos, como la definición de un
dominio.
Creación de objetos
La creación de objetos dentro de un esquema se realiza con la instrucción “create”. El
objeto puede se una tabla, una vista, una función...
Por ejemplo: Para crear una tabla se especifica su nombre, las columnas (nombre, tipo
de datos y el valor por defecto) y las ligaduras a nivel de columna (clave obligatoria,
clave única) como de fila (clave primaria, clave externa). Ejemplo:
CREATE TABLE TABLA1 (
CODIGO VARCHAR2(10),
COLUMNA1 VARCHAR2(8) NOT NULL,
COLUMNA2 INT DEFAULT 1,
PRIMARY KEY (CODIGO),
FOREIGN KEY (COLUMNA2) REFERENCES TABLA2(CODIGO));
La modificación de los objetos se consigue con la instrucción “alter”. Por ejemplo:
Se puede modificar la tabla posteriormente con la instrucción ALTER TABLE <nombre
tabla> [ADD|DROP <tipo elemento>] [columnas o ligaduras] (CASCADE |
RESTRICT] . Ejemplo:
ALTER TABLE TABLA ADD COLUMNA 3 BOOLEAN;
El termino CASCADE indica que, en el caso de borrar una columna, elimine todas las
vistas y ligaduras asociadas. RESTRICT se utiliza para indicar que no borre la columna
en el caso de haber vistas o ligaduras asociadas a ella.
La eliminación de los objetos se realiza con la instrucción “drop”.
Para borrar una tabla: DROP TABLE <nombre de la tabla>
Dominios
SQL permite crear dominios de datos escalares y simples. Como por ejemplo:
CREATE DOMAIN t_nombre CHAR(20)
Los tipos de dominio predefinidos por SQL son: char(n), varchar(n), int, smallint,
numeric(p,d), real , float(n) y date.
Página 3 de 8
Tema 33. El lenguaje SQL
31/05/2011
Instrucciones DML – Data Manipulation LanguageSon las instrucciones encargadas de la modificación la información almacenadas dentro
de las tablas. Existen tres instrucciones básicas

Insert: Inserta nuevos registros en una tabla. Antes de insertar un registro
comprueba que se cumplan todas las restricciones –constraints- que le afecten.
INSERT nombre_tabla [(Columna1, Columna2,...)]
VALUES (value1, value2...);
Si no se indica el nombre de las columnas donde insertar los valores, se utiliza el
mismo orden que aparecen en el esquema de la tabla. Si una columna no se le
indica un valor, se pone a nulo.

Delete: Elimina registros de una tabla. Con la cláusula “where” se indica que
registros hay que eliminar.
DELETE FROM nombre_tabla
WHERE predicado;
 Update: Modifica el valor de la columnas de los registros de una tabla
determinada. Los registros a modificar se indican en las cláusulas “where”.
UPDATE nombre_tabla
SET Columna1 = valor1,
Columna2 = valor2...
WHERE predicado;
En la cláusula “set” se indica que columnas se modifican y que valores se
utilizan.
Además de estas tres instrucciones, existen otras dos:


Merge: Definida en el estándar SQL:2003. Sirve para combinar datos de
múltiples tablas.
Truncate: No es una instrucción estándar, pero es común a la mayoría de las
extensiones del SQL de los fabricantes. Sirve para eliminar rápidamente todos
los datos de una table.
Página 4 de 8
Tema 33. El lenguaje SQL
31/05/2011
Instrucciones DQL – Data Query LanguageSQL tiene una sola instrucción para realizar consultas: el Select. Aunque está es la
instrucción más versátil de todo el juego de instrucciones de SQL.
La instrucción SQL no es una instrucción 100% válida según el modelo relacional
formal. Dado que este modelo exige que todas las operaciones con relaciones den como
resultado otra relación.
El Select puede dar como resultado una tablea no válida, pues permite que haya
registros repetidos.
La instrucción sql básica es la siguiente:
SELECT [DISTINCT | ALL] expresión1, expresión2...
FROM tabla1, tabla2...
La cláusula SELECT indica las expresiones que se utilizarán para obtener los datos que
compondrán las tuplas devueltas en las consulta. Las expresiones utilizan generalmente
los datos de las columnas de las tablas señaladas en la clausula FROM. Las tablas
utilizadas pueden renombrarse utilizando el operador “AS”, aunque no es obligatorio.
La palabra clave DISTINCT sirve para indicar que queremos que la consulta no
devuelva tuplas repetidas. La palabra “ALL” significa lo contrario, queremos que
aparezcan todas las tuplas.
La instrucción select puede además contener las siguientes cláusulas:

Where: Contiene un predicado utilizado para determinar que tuplas de las tablas
de entrada se utilizan. Ejemplo:
SELECT nombre
FROM usuario AS usu
WHERE usu.cod_dept = 1;

Selecciona el nombre de todos los
usuarios del departamento 1.
Order by: Indica que las tuplas resultantes deben ser ordenadas por los valores
de una o varias de sus columnas. El orden se establece con las palablas “ASC”
-ascendente- o DESC –descendente-. Por defecto es ascendente.
SELECT nombre, DNI
FROM usuario
ORDER BY DNI;
Muestra los valores de las columnas
nombre y DNI de la tabla usuario,
ordenadas por el valor del DNI.

Group by: Esta cláusula sirve para indicar como hacer las agrupaciones al
utilizar funciones de agrupación. SQL proporciona por defecto cinco funciones
de agrupación: sum(), avg(), count(), max() y min().

Having: Se utiliza siempre junto a la cláusula “group by”. Sirve para establecer
un predicado que debe cumplir la función de agragación.
Ejemplo:
SELECT nombre, count(*)
FROM usuario
GROUP BY nombre
HAVING count(*) > 1
Muestra los nombres y el némero de
usuarios con ese nombre siempre que sea
mayor que 1 de la tabla usuario.
Página 5 de 8
Tema 33. El lenguaje SQL
31/05/2011
Funciones
SQL proporciona un conjunto de funciones utilizables en las consultas. Estas funciones
son:
1. De agregación: Vistas anteriormente.
2. De conversión de tipo: Permiten transformar el tipo de dato del parámetro de
entrada. To_char(), to_date(), to_numbre()...
Ejemplo: SELECT nombre
FROM usuario
WHERE to_char(fecha_nacimiento,’YYYY’);
3. De manejo de Strings: LTRIM, LIKE, SUBSTR()...
4. De manejo de números: exp(), abs(), power()...
Creación de vistas
Las vistas son tablas virtuales, generalmente de solo lectura, cuyos datos se obtienen
dinámicamente de otras tablas. Su finalidad es obtener una visión diferente a la visión
conceptual de los datos. Se utilizan para:
1. Mostrar los datos de una forma más clara al usuario.
2. Ocultar datos confidenciales, haciendo que no aparezcan en las vistas usadas.
3. Permitir modificar la estructura lógica de la BD sin que se vean afectadas las
aplicaciones. Se modifican las vistas para que sigan mostrando los mismos
datos.
Las funciones utilizadas para la creación y eliminación de las vistas son create y drop.
Ejemplo: CREATE VIEW nombre_de_la_vista AS (Sentencia select).
CREATE VIEW usuarios_por_pais AS ( SELECT pais, count(*)
FROM usuario
GROUP BY pais )
Control de acceso a los datos
SQL implementa medidas de seguridad utilizando un control de acceso discreccional,
basado en dar y revocar permisos a los usuarios.
Existen dos tipos de permisos:

A nivel de cuenta. A un usuario se le dan privilegios sobre la base de datos. Se le
permite crear vistas, tablas, esquemas...

A nivel de tabla. Se restringe el acceso y operaciones a tablas y vistas.
En SQL, los usuarios están identificados. Generalmente la autentificación se realiza
mediante mecanismos de usuario-contraseña.
Además los usuarios pueden estar clasificados en roles. Los roles agrupan a los usuarios
con unas funciones comunes en una aplicación. El control de acceso puede realizarse a
nivel de usuario o de rol, aunque es mejor hacerlo a nivel de rol, pues facilita la
administración.
Página 6 de 8
Tema 33. El lenguaje SQL
31/05/2011
El creador de un objeto, por ejemplo una vista, se convierte en el dueño del objeto y está
capacitado en otorgar, en primera instancia, los privilegios sobre sus tablas o vistas.
Las sentencias básicas de control de los privilegios son:

Grant. Otorga un privilegio a un usuario o rol sobre una tabla o vista.
GRANT (privilegio)+ ON tabla TO ( USER | ROLE ) [WITH GRANT OPTION].
Los privilegios pueden ser: select, update, delete, insert y reference. Reference
es el privilegio de poder crear restricciones sobre la tabla. Los privilegios
generalmente se aplican a nivel de tabla, aunque update, insert y reference
pueden darse a nivel de columna.
La opción “With grant option” permite al usuario poder a su vez otorgar el
privilegio a otros.

Revoke: Se utiliza para revocar un privilegio concedido.
Control de transacciones
SQL establece controles sobre el acceso concurrente a tablas y sus columnas para poder
asegurar la consistencia de las operaciones sobre los datos.
Las instrucciones de control de transacción son:

Start transaction: Indica donde comienza la transacción. En muchos entornos,
el inicio de transacción se realiza por defecto, por lo que no es necesario el uso
de esta sentencia.

Commit: Da validez a todos los cambios realizados en la transacción.

Rollback: Ordena deshacer los cambios realizados en la transacción.
Las transacciones en SQL tienen tres características:

Modo de acceso: “Read write” y “Read Only”

Nivel de diagnóstico: Número de condiciones simultáneas del área de
diagnóstico.

Insolation: Nivel de consistencia exigida, de más a menos son: Operaciones
serializables, lectura repetible, lectura confirmada y lectura no confirmada.
Las transacciones se configuran con la instrucción siguiente:
SET TRANSACTION (modo de acceso) DIAGNOSTIC LEVEL N (nivel de
consistencia);
Ejemplo: SET TRANSACTION
READ ONLY
DIAGNOSTIC LEVEL
SERIALIZABLE;
Página 7 de 8
Tema 33. El lenguaje SQL
31/05/2011
Críticas al lenguaje SQL
Los inconvenientes de SQL como lenguaje son:
 Es un lenguaje demasiado extenso. Su sintaxis similar al inglés, destinada a
facilitar su uso por usuarios no técnicos, provoca que el código SQL sea muy
extenso.
 Las implementaciones en los diferentes SGBD son inconsistentes entre ellos
y, muchas veces, incompatibles. Esto es debido que los fabricantes de sistemas
de gestión de BD amplían la funcionalidad del SQL de sus productos. Usar esta
funcionalidad extra limita las ventajas de SQL como lenguaje estándar.
 No dispone de mecanismos que faciliten el manejo de las sentencias de
consultas complejas y extensas, lo que provoca problemas de mantenibilidad del
código.
Página 8 de 8
Descargar