Descarga la aplicación para disfrutar aún más
Vista previa del material en texto
Clase 4: SQL – DDL – DML – Consultas Simples y Multitablas BASE DE DATOS FAC.DE INGENIERIA - UNJu SQL (Structured query language) Es un lenguaje de consulta estructurado, surgido de un proyecto de investigación de IBM para el acceso a BD relacionales. Actualmente se ha convertido en un estándar de lenguaje de BD, y la mayoría de los sistemas de BD lo soportan, desde sistemas para computadoras personales, hasta grandes computadoras. Clasificación Data Description Language: incluye órdenes para definir, modificar o borrar las tablas en las que se almacenan los datos y de las relaciones entre estas. CREATE, DROP. DDL DCL Data Control Language: contiene elementos útiles para trabajar en un entorno multiusuario, en el que es importante la protección de los datos, la seguridad de las tablas y el establecimiento de restricciones en el acceso (usuarios concurrentes). GRANT, REVOKE DML Data Manipulation Language: permite recuperar los datos almacenados en la BD e incluye órdenes para permitir al usuario actualizar la BD añadiendo nuevos datos, suprimiendo datos antiguos o modificando datos previamente almacenados. SELECT, INSERT, UPDATE, DELETE TCL O Leng.de Control de Transacciones, que es considerado como un leng.de programación y un subconjunto de SQL que se utiliza para controlar el procesamiento de transacciones en una BD. Una transacción es una unidad lógica de trabajo que comprende una o más sentencias SQL, por lo general un grupo de DML. COMMIT, SAVEPOINT, ROLLBACK, SET TRANSACTION CREATE DATABASE Ej.en PostgreSQL CREATE DATABASE name [ [ WITH ] [ OWNER [=] user_name ] [ TEMPLATE [=] template ] [ ENCODING [=] encoding ] [ LC_COLLATE [=] lc_collate ] [ LC_CTYPE [=] lc_ctype ] [ TABLESPACE [=] tablespace ] [ CONNECTION LIMIT [=] connlimit ] ] DDL CREATE TABLE Crea la estructura de una tabla, definiendo las columnas y las restricciones que deben cumplir esas columnas La restricción es una característica adicional que tiene una columna o una combinación de columnas Por ejemplo: CREATE TABLE tab1 ( col1 INTEGER CONSTRAINT pk PRIMARY KEY, col2 CHAR(25) NOT NULL, col3 CHAR(10) CONSTRAINT uni1 UNIQUE, col4 INTEGER, col5 INT CONSTRAINT fk5 REFERENCES tab2 ); DROP TABLE DROP INDEX CREATE INDEX Permite crear un índice sobre una o varias columnas de una tabla. ALTER TABLE Modificar la estructura de una tabla que ya existe. Se puede añadir columnas nuevas, eliminar columnas. Hay que tener en cuenta que cuando eliminamos una columna se pierden todos los datos almacenados en ella. También permite crear nuevas restricciones o borrar algunas existentes. DML INSERT INTO Permite la inserción de nuevos datos en una tabla se realiza añadiendo filas enteras a la tabla Sintaxis: INSERT INTO nombre_tabla [(nombreatributo1, nombreatributo2, …)] VALUES (valoratributo1, valoratributo2, …) Por ejemplo: a ) INSERT INTO empleados VALUES (200, ‘Juan López’, 30, NULL, ‘rep ventas’, CTOD(‘06/23/01’), NULL, 350000, 0) b) INSERT INTO empleados (numemp, oficina, nombre, titulo, cuota, contrato, ventas) VALUES (200, ‘Juan López’, 30, NULL, ‘rep ventas’, CTOD(‘06/23/01’), NULL, 350000, 0) DML UPDATE Modifica los valores de una o más columnas en las filas seleccionadas de una o varias tablas. Sintaxis: El origen puede ser un nombre de tabla, un nombre de consulta o una composición de tablas, también puede incluir la cláusula IN si la tabla a modificar se encuentra en una BD externa. SET especifica qué columnas van a modificarse y qué valores asignar a esas columnas. - nbcolumna indica el nombre de la columna a la cual queremos asignar un nuevo valor Where establece la condición que se debe cumplir para realizar la actualización Por ejemplo: a ) UPDATE oficinas SET cuota=ventas*0.90; b) UPDATE empleados SET ventas = 0 WHERE oficina = 12 DML DELETE Elimina los valores de una tabla o de un conjunto de filas seleccionadas de una tabla (según lo definido por la clausula WHERE). Sintaxis DELETE FROM nombre_tabla [WHERE condición] Por ejemplo: a ) DELETE * FROM pedidos; b) DELETE * FROM pedidos WHERE clie=101; DML SELECT Muestra o recupera información sobre los datos almacenados en la BD. Dicha información puede pertenecer a una o varias tablas por lo que las consultas pueden ser SIMPLES o MULTITABLAS. El resultado de una consulta SELECT nos devuelve una tabla lógica. Es decir, los resultados son una relación de datos, que tiene filas/registros, con una serie de campos/columnas. Igual que cualquier tabla de la BD. Sin embargo esta tabla está en memoria mientras la utilicemos, y luego se descarta. Cada vez que ejecutamos la consulta se vuelve a calcular el resultado. Sintaxis SELECT [ ALL / DISTINCT ] [ * ] / [ListaAtributos_Expresiones] AS [Expresion] FROM OrigenDatos [WHERE Condiciones] [GROUP BY ColumnasAgrupamiento] [HAVING Condiciones] [ORDER BY ListaColumnas [ ASC / DESC ]] DML SELECT (Continuación) ALL es el valor predeterminado, especifica que el conj. de resultados puede incluir filas duplicadas. Nunca se utiliza. DISTINCT especifica que el conjunto de resultados sólo puede incluir filas únicas. Es decir, si al realizar una consulta hay registros exactamente iguales que aparecen más de una vez, éstos se eliminan. ListaAtributos especifica una lista de nombres de campos de la tabla que nos interesan y que por tanto queremos devolver. Se separan mediante comas. Se puede anteponer el nombre de la tabla al nombre de las columnas, utilizando el formato Tabla.Columna. Además de nombres de columnas, en esta lista se pueden poner constantes, expresiones aritméticas, y funciones, para obtener campos calculados de manera dinámica. Si queremos que nos devuelva todos los campos de la tabla utilizamos el comodín “*” (asterisco). Los nombres indicados deben coincidir exactamente con los nombre de los campos de la tabla, pero si queremos que en nuestra tabla lógica de resultados tengan un nombre diferente podemos utilizar un alias, por ejemplo AS que permite renombrar columnas si lo utilizamos en la cláusula SELECT, o renombrar tablas si lo utilizamos en la cláusula FROM. El alias es opcional. FROM permite indicar las tablas o vistas de las cuales vamos a obtener la información. WHERE especifica la condición de filtro de las filas devueltas. Se utiliza cuando no se desea que se devuelvan todas las filas de una tabla, sino sólo las que cumplen ciertas condiciones. DML SELECT (Continuación) Las CONDICIONES son expresiones lógicas a comprobar para la condición de filtro, que tras su resolución devuelven para cada fila TRUE o FALSE, en función de que se cumplan o no. Se puede utilizar cualquier expresión lógica y en ella utilizar diversos operadores como: > (Mayor), >= (Mayor o igual), < (Menor), <= (Menor o igual), = (Igual), <> o != (Distinto) o IS [NOT] NULL. Se dice que una columna de una fila es NULL si está completamente vacía. Hay que tener en cuenta que si se ha introducido cualquier dato, incluso en un campo alfanumérico si se introduce una cadena en blanco o un cero en un campo numérico, deja de ser NULL. LIKE: para la comparación de un modelo. Para ello utiliza los caracteres comodín especiales: “%” y “_”. Con el primero se indica que en su lugar puede ir cualquier cadena de caracteres, y con el segundo que puede ir cualquier carácter individual (un solo carácter). Con la combinación de estos caracteres podremos obtener múltiples patrones de búsqueda. Por ejemplo: el nombre empieza por A: Nombre LIKE ‘A%’, el nombre acaba por A: Nombre LIKE ‘%A’, el nombre contiene la letra A: Nombre LIKE ‘%A%’, el nombre empieza por A y después contiene un solo carácter cualquiera: Nombre LIKE ‘A_’, el nombre empieza una A, después cualquier carácter, luego una E y al final cualquier cadena de caracteres: Nombre LIKE ‘A_E%’ BETWEEN: para un intervalo de valores. Porejemplo Clientes entre el 30 y el 100; CodCliente BETWEEN 30 AND 100; Clientes nacidos entre 1970 y 1979: FechaNac BETWEEN ‘19700101’ AND ‘19791231’ IN( ) para especificar una relación de valores concretos. Por ejemplo: Ventas de los Clientes 10, 15, 30 y 75: CodCliente IN(10, 15, 30, 75) Es posible combinar varias condiciones simples de los operadores anteriores utilizando los operadores lógicos OR, AND y NOT, así como el uso de paréntesis para controlar la prioridad de los operadores Por ejemplo: … (Cliente = 100 AND Provincia = 30) OR Ventas > 1000 … que sería para los clientes de las provincias 100 y 30 o cualquier cliente cuyas ventas superen 1000.). DML SELECT (Continuación) ORDER BY define el orden de las filas del conjunto de resultados. Se especifica el campo o campos (separados por comas) por los cuales queremos ordenar los resultados. ASC / DESC: ASC es el valor predeterminado, especifica que la columna indicada en la cláusula ORDER BY se ordenará de forma ascendente, o sea, de menor a mayor. Si por el contrario se especifica DESC se ordenará de forma descendente (de mayor a menor). DML SELECT: Consultas Simples Analice los siguientes ejemplos SELECT * FROM Alumnos SELECT CodFab, Codprod, descrip, (cantidad * precio) AS valoracion FROM productos WHERE codfab=154 SELECT nombre, oficina, contrato FROM empleados ORDER BY oficina ASC SELECT * FROM Customers WHERE Region IS NULL SELECT DISTINCT Region FROM Customers WHERE Region IS NOT NULL SELECT E.LastName AS Apellido, City AS Ciudad, Region FROM Employees AS E WHERE Country = ‘USA’ SELECT numemp, nombre, oficina FROM empleados WHERE oficina IN (12,14,16) SELECT numemp, nombre FROM empleados WHERE nombre LIKE '*Pérez Juan*' SELECT * FROM Customers WHERE Region IN(‘CA’, ‘MT’, ‘WA’) ORDER BY Region, CompanyName DESC SELECT * FROM Customers WHERE CompanyName LIKE ‘W%’ SELECT * FROM Employees WHERE EmployeeID BETWEEN 2 AND 9 DML-SELECT: Consultas Multitablas Se llaman así porque son consultas que están basadas en mas de una tabla de la BD al mismo tiempo. Existen varias formas de hacerlo: Producto Cartesiano Crea combinaciones que permiten mostrar columnas de diferentes tablas como si fuese una sola tabla, no se hace coincidir los valores de las columnas relacionadas (claves primarias y foráneas) por lo que se obtiene duplicidad de filas al relacionar todas las filas de las diferentes tablas seleccionadas. Por ejemplo supongamos que tenemos dos tablas, Alumnos con 3 registros y Sanción con 4 registros, si se ejecuta la siguiente sentencia: SELECT * FROM Alumnos, Sancion Se obtendrá como resultado una tabla con 12 registros DML-SELECT: Consultas Multitablas (Continuación) Composición de Tablas La segunda forma es uniendo las filas de las tablas a través de las columnas “de conexión” que se han definido entre las mismas y que deben contener los mismos tipos de datos, es decir, mediante la unión de la clave foránea y primaria respectiva. Por ejemplo para el caso anterior de las tablas Alumnos y Sanción el atributo que relaciona dichas tablas es “lu”, por lo tanto la sentencia que se debería realizar es: SELECT * FROM Alumnos, Sancion WHERE Alumnos.lu = Sancion.lu Pregunta: si en lugar de tener 2 tablas tuviera 2 tablas relacionadas con 1 TEA cual sería la sentencia? Alum nos San ción DML-SELECT: Consultas Multitablas (Continuación) JOIN: La tercer forma es a través del operador JOIN o combinación que permite mostrar columnas de varias tablas como si se tratase de una sola tabla, combinando entre sí los registros relacionados usando para también para ello las claves foráneas. Las tablas relacionadas se especifican en la cláusula FROM, y además hay que hacer coincidir los valores que relacionan las columnas de las tablas. Su sintaxis es la siguiente: SELECT [ ALL / DISTINCT ] [ * ] / [ListaAtributos_Expresiones] AS [Expresion] FROM NombreTabla1 JOIN NombreTabla2 ON Condiciones_Vinculos_Tablas Por ejemplo si se quisiera relacionar Empleado y Sueldo por legajo SELECT E.legajo FROM Empleados E JOIN Sueldos S ON E.Legajo = S.Legajo Otro ejemplo podría ser: SELECT OrdenID, C.ClienteID, NombreEmpresa, FechaOrden FROM Clientes C JOIN Ordenes O ON C.ClienteID = O.ClienteID JOIN Empleados E ON O.EmpleadosID = E.EmpleadosID WHERE C.Pais = ‘España' OR E.EmpleadoID = 5 IMPORTANTE: existen variantes de JOIN con LEFT, OUTER, INNER Y CROSS que resultan mucho mas eficientes con grandes cantidades de registros pero también tienen una complejidad mayor
Compartir