Sunteți pe pagina 1din 8

Captulo 1 - SQL

1.1 Qu es SQL SQL (Structured Query Language - Lenguaje Estructurado de Consultas) es un lenguaje para acceder a informacin almacenada en Bases de Datos relacionales. SQL fue la evolucin de SEQUEL, que surgi como solucin al concepto formulado por el Sr. Codd de Bases de Datos Relacionales en 1970. Permite expresar operaciones aritmticas, combinatorias y lgicas (entre otras) con los datos almacenados en Bases de Datos relacionales. El ANSI (American National Standards Institute - Instituto Americano de Normas) ha publicado unas especificaciones para este lenguaje, pero esto no quiere decir que los productos disponibles las sigan estrictamente. Hay diferencias entre ellos y se recomienda leer los manuales de referencia de los mismos. Se van a seguir las especificaciones definidas por la casa IBM en sus normas SAA. 1.2 Como se usa SQL Las peticiones sobre los datos se expresan en SQL mediante sentencias. Estas sentencias pueden: Escribirse directamente sobre el SGBD. Pueden escribirse embebidas en programas. Dentro de stas hay dos tcnicas: SQL esttico: las sentencias SQL no pueden cambiar en tiempo de ejecucin. Ms sencillo y eficiente. SQL dinmico: una sentencia puede ser modificada por el propio programa durante su ejecucin. Ms flexible. 1.3 Para qu sirve SQL Consultar y actualizar datos almacenados. Definir y destruir objetos de la Base de Datos (generalmente un DBA). Conceder y denegar autorizaciones para usar esos objetos (generalmente un DBA). 1.4 Elementos componentes de una sentencia SQL 1. Palabras predefinidas (SELECT, FROM, WHERE, INTO,...) 2. Nombres de tablas y columnas. 3. Constantes (numricas y alfanumricas). 4. Signos delimitadores. Por ejemplo: SELECT nomce FROM tcentr WHERE numce = 10 Palabras predefinidas: SELECT, FROM, WHERE. Nombres de tablas y columnas: nomce, tcentr, numce. Constantes: 10. Signos delimitadores: =. 1.5 Tipos de sentencias SQL Explicacin de la sintaxis utilizada para los comandos: Las palabras en mayusculas son comandos de oracle. Las palabras en minusculas son opiones modificables Las partes enmarcadas con [] son opcionales

Las palabras en negrita son las opciones por defecto Las partes enmarcadas con {} son alternativas (una u otra). El simbolo | indica OR Sentencias DML (Data Manipulation Language) 1. SELECT. La seleccin sobre una tabla consiste en elegir un subconjunto de filas que cumplan (o no) algunas condiciones determinadas. La sintaxis de una sentencia de este tipo es la siguiente: SELECT */ columna1, columna2,.... FROM nombre-tabla [WHERE condicin] [GROUP BY columna1, columna2.... ] [HAVING condicin-seleccin-grupos ] [ORDER BY columna1 [DESC], columna2 [DESC]... ] Si ejecutamos: SELECT * FROM T_PEDIDOS; Nos da la salida: COD_PEDIDO NOMBRE ESTADO ------------------------------------------------1 JUAN 0 2 ANTONIO 1 3 PEPE 0
...

* / columna1, columna2,.... Si se escribe *, selecciona todas las columnas. Si se desea seleccionar slo algunas columnas de la tabla, se debe poner los nombres de cada una de ellas, separadas por una coma. nombre-tabla Nombre de la(s) tabla(s) de la(s) cual(es) se van a seleccionar los valores. 2. INSERT. Aade filas a una tabla. a) Para guardar los datos insertados hay que ejecutar COMMIT; Guarda los cambios de la transaccin en curso. Libera los recursos bloqueados por cualquier actualizacin hecha con la transaccin actual (LOCK TABLE). COMMIT [WORK] [COMMENT 'comment_text'] COMMIT [WORK] [FORCE 'force_text' [,int] ] Si ejecutamos: DELETE FROM T_PEDIDOS WHERE COD_PEDIDO=15;

COMMIT;
Borrar un registro y guarda los cambios.

b)

Para cancelar la insercin podemos hacer ROLLBACK; Deshace los cambios de la transaccin en curso. Libera los recursos bloqueados por cualquier actualizacin hecha con la transaccin actual (LOCK TABLE). ROLLBACK [WORK] [TO [SAVEPOINT]'savepoint_text_identifier']; ROLLBACK [WORK] [FORCE 'force_text']; Si ejecutamos: DELETE FROM T_PEDIDOS WHERE COD_PEDIDO=15; COMMIT; Borrar un registro pero cancela los cambios. Queda como si no hubiesemos hecho nada.

Un formato posible es: INSERT INTO nombre-tabla VALUES (serie de valores) El orden en el que se asignen los valores en la clusula VALUES tiene que coincidir con el orden en que se definieron las columnas en la creacin del objeto tabla, dado que los valores se asignan por posicionamiento relativo. Por ejemplo: INSERT INTO T_PEDIDOS VALUES (125,2,'PEPE'); Otra forma de usar la sentencia INSERT es: INSERT INTO nombre-tabla (columna1, columna2.....) VALUES (valor1, valor2....) En este caso los valores se asignarn a cada una de las columnas mencionadas por posicionamiento relativo. Es necesario que por lo menos se asignen valores a todas aquellas columnas que no admiten valores nulos en la tabla (NOT NULL).
Por ejemplo:

INSERT INTO T_PEDIDOS (CODPEDIDO,ESTADO) VALUES (125,2); Sentencia INSERT de Mltiples filas Para insertar un subconjunto de filas de una tabla en otra se escribe una sentencia INSERT con una SUBSELECT interna. Los formatos posibles son:

INSERT INTO nombre-tabla (columna1, columna2.....) SELECT ([sentencia Select]) Asigna a las columnas los valores recuperados en la sentencia Select. Inserta en la tabla todas las filas que se recuperen en la Select. Por ejemplo: INSERT INTO T_PEDIDOS (CODPEDIDO,ESTADO,NOMBRE) SELECT CODPEDIDO+100,ESTADO,NOMBRE FROM T_PEDIDOS WHERE CODPEDIDO IN (1,2,3); Otra forma es: INSERT INTO nombre-tabla SELECT * FROM nombre-tabla-fuente En este caso las estructuras de las tablas tienen que ser iguales. Este ejemplo copia hasta el pedido 100 en otra tabla: INSERT INTO T_PEDIDOS_BAK SELECT * FROM T_PEDIDOS WHERE CODPEDIDO<100; Ambas tablas son iguales. 3. UPDATE. Actualiza valores de una o ms columnas para un subconjunto de filas de una tabla. Para guardar cambios hay que ejecutar COMMIT; Para cancelar la modificacin podemos hacer ROLLBACK; UPDATE nombre-tabla SET columna1 = valor1 [, columna2 = valor2 ...] [WHERE condicin] Actualiza los campos correspondientes junto con los valores que se le asignen, en el subconjunto de filas que cumplan la condicin de seleccin. Si no se pone condicin de seleccin, la actualizacin se da en todas las filas de la tabla. Si se desea actualizar a nulos, se asignar el valor NULL. En este ejemplo cambiamos el nombre y estado de un pedido: UPDATE T_PEDIDOS SET NOMBRE='JUAN',ESTADO=1 WHERE CODPEDIDO=125; En este ejemplo cambiamos el estado de todos los pedidos: UPDATE T_PEDIDOS SET ESTADO=1; En este ejemplo ponemos a nulo el nombre de un pedido:

UPDATE T_PEDIDOS SET NOMBRE=NULL WHERE CODPEDIDO=125; 4. DELETE. Borra una o ms filas de una tabla, dependiendo de la condicin WHERE. Para guardar cambios hay que ejecutar COMMIT; Para cancelar el borrado podemos hacer ROLLBACK; La sintaxis es la siguiente: DELETE FROM nombre-tabla [WHERE condicin] CUIDADO! Si no se pone condicin de seleccin, borra todas las filas de la tabla. Si ejecutamos: DELETE FROM T_PEDIDOS; Borrar toda la tabla. Si ejecutamos: DELETE FROM T_PEDIDOS WHERE COD_PEDIDO=15; Borrar un registro. COMMIT Guarda los cambios de la transaccin en curso. Libera los recursos bloqueados por cualquier actualizacin hecha con la transaccin actual (LOCK TABLE). COMMIT [WORK] [COMMENT 'comment_text'] COMMIT [WORK] [FORCE 'force_text' [,int] ] Si ejecutamos: DELETE FROM T_PEDIDOS WHERE COD_PEDIDO=15; COMMIT; Borrar un registro y guarda los cambios. ROLLBACK Deshace los cambios de la transaccin en curso. Libera los recursos bloqueados por cualquier actualizacin hecha con la transaccin actual (LOCK TABLE). ROLLBACK [WORK] [TO [SAVEPOINT]'savepoint_text_identifier']; ROLLBACK [WORK] [FORCE 'force_text']; Si ejecutamos: DELETE FROM T_PEDIDOS WHERE COD_PEDIDO=15;

COMMIT; Borrar un registro pero cancela los cambios. Queda como si no hubiesemos hecho nada. LOCK TABLE Bloquea una tabla o vista. LOCK TABLE [esquema.] table [opciones] IN lockmode MODE [NOWAIT] LOCK TABLE [esquema.] view [opciones] IN lockmode MODE [NOWAIT] donde opciones: PARTITION, SUBPARTITION, @dblink donde lockmodes: EXCLUSIVE, SHARE, ROW EXCLUSIVE, SHARE ROW EXCLUSIVE ROW SHARE* | SHARE UPDATE* Si no ponemos NOWAIT Oracle esperar hasta que la tabla este disponible. Se pueden bloquear varias tablas en un solo comando si las escribimos separadas por comas. LOCK TABLE tabla1,tabla2,tabla3 IN ROW EXCLUSIVE MODE; Bloqueos por defecto Las sentencias del DML pueden producir bloqueos sobre las filas de la tabla: Una sentencia SELECT normal no bloquea filas. Las sentencias INSERT, UPDATE o DELETE realiza un bloqueo ROW EXCLUSIVE de las filas afectadas por el WHERE. La sentencia SELECT ... FOR UPDATE NOWAIT realiza un bloqueo ROW EXCLUSIVE de las filas afectadas por el WHERE. Las sentencias COMMIT y ROLLBACK desbloquean las filas bloqueadas anteriormente dentro de la transaccin actual. Aunque una fila este bloqueada (por otra transaccin), siempre podemos hacer una SELECT sobre esa fila. Los valores retornados son los anteriores al bloqueo. Las sentencias UPDATE Y DELETE pueden provocar o sufrir esperas si hay conflictos con otra transaccin. Esta relacionado con el error ORA-00054. Bloqueos mltiples en las mismas fila con LOCK TABLE Adems se pueden ejecutar distintos tipos de bloqueo: ROW SHARE = Permite hacer bloqueos de tipo ROW EXCLUSIVE o ROW SHARE o SHARE sobre las filas bloqueadas. ROW EXCLUSIVE = Permite hacer bloqueos de tipo ROW EXCLUSIVE o ROW SHARE sobre las filas bloqueadas. SHARE ROW EXCLUSIVE = Permite hacer bloqueos de tipo ROW SHARE sobre las filas bloqueadas. SHARE = Permite hacer bloqueos de tipo ROW SHARE or SHARE sobre las filas bloqueadas. EXCLUSIVE = Solo permite hacer SELECT sobre las filas bloqueadas. 2. Sentencias DDL (Data Definition Language) 1. CREATE. CREATE TABLE La sentencia CREATE TABLE sirve para crear la estructura de una tabla no para

rellenarla con datos, nos permite definir las columnas que tiene y ciertas restricciones que deben cumplir esas columnas. La sintaxis es la siguiente:

Este comando crea un objeto dentro de la base de datos. Puede ser una tabla, vista, ndice, trigger, funcin, procedimiento o cualquier otro objeto que el motor de la base de datos soporte. Ejemplo 1 (creacin de una tabla): CREATE TABLE TABLA_NOMBRE ( my_field1 INT UNSIGNED, my_field2 VARCHAR (50), my_field3 DATE NOT NULL, PRIMARY KEY (my_field1, my_field2) ) DROP. Este comando elimina un objeto de la base de datos.Puede ser una tabla, vista, ndice, trigger, funcin, procedimiento o cualquier otro objeto que el motor de la base de datos soporte. Se puede combinar con la sentencia ALTER. Ejemplo 1: DROP TABLE TABLA_NOMBRE Ejemplo 2: ALTER TABLE TABLA_NOMBRE ( DROP COLUMN CAMPO_NOMBRE1 ) 2. TRUNCATE. Este comando trunca todo el contenido de una tabla. La ventaja sobre el comando DELETE, es que si se quiere borrar todo el contenido de la tabla, es mucho ms rpido, especialmente si la tabla es muy grande, la desventaja es que TRUNCATE solo sirve cuando se quieren eliminar absolutamente todos los registros, ya que no se permite la clusula WHERE. Si bien, en un principio, esta sentencia parecera ser DML (Lenguaje de Manipulacin de Datos), es en realidad una DDL, ya que internamente, el comando truncate borra la tabla y la vuelve a crear y no ejecuta ninguna transaccin. Ejemplo 1: TRUNCATE TABLE TABLA_NOMBRE ALTER. Este comando permite modificar la estructura de un objeto. Se pueden agregar/quitar campos a una tabla, modificar el tipo de un campo, agregar/quitar ndices a una tabla, modificar un trigger, etc. Ejemplo 1 (agregar columna a una tabla): ALTER TABLE TABLA_NOMBRE ( ADD NUEVO_CAMPO INT UNSIGNED ) Sentencias DCL (Data Control Language) 1. GRANT. Permite dar permisos a uno o varios usuarios o roles para realizar tareas determinadas. La sintaxis para el comando GRANT es: GRANT privilege_name ON object_name TO {user_name |PUBLIC |role_name} [WITH GRANT OPTION];

privilege_name es el derecho de acceso o privilegio concedido al usuario. Algunos de los derechos de acceso son ALL, EXECUTE, y SELECT. object_name es el nombre de un objeto de base de datos como tablas, vistas, procedimiento almacenado y SEQUENCE. user_name es el nombre del usuario al que un derecho de acceso se concede.

user_name es el nombre del usuario al que un derecho de acceso se concede. PBLICO se utiliza para otorgar derechos de acceso a todos los usuarios. ROLES son un conjunto de privilegios agrupados. WITH GRANT OPTION - Permite a un usuario para conceder derechos de acceso a otros usuarios.

Por ejemplo: GRANT SELECT ON empleado a usuario1; Este comando concede el permiso SELECT en una tabla de empleados para user1.You debe utilizar la opcin WITH GRANT cuidado porque por ejemplo si concede el privilegio SELECT sobre la tabla de empleados para el usuario 1 con la opcin WITH GRANT, entonces user1 puede CONCESIN Privilegio SELECT sobre la tabla empleado a otro usuario, como user2 etc Ms tarde, si usted revoca el privilegio SELECT sobre los empleados de user1, user2 todava tendr el privilegio SELECT sobre la tabla empleados. 2. REVOKE. Permite eliminar permisos que previamente se han concedido con GRANT. La sintaxis para el comando REVOKE es: REVOKE privilege_name ON object_name FROM {user_name |PUBLIC |role_name} Por ejemplo: REVOKE SELECT ON empleado de usuario1; Este comando REVOKE un privilegio SELECT sobre la tabla de empleados de user1.When revoca el privilegio SELECT sobre una tabla de un usuario, el usuario no podr seleccionar los datos de esa tabla ms. Sin embargo, si el usuario ha recibido privilegios de SELECT sobre la tabla de ms de un usuario, el / ella puede seleccionar de esa mesa hasta que todos los que concedi el permiso revocan. Usted no puede revocar los privilegios si no se les concedi inicialmente por ti.

S-ar putea să vă placă și