Logo Studenta

Clase_4_SQL_-DDL-DML-Consultas_Simples_y_Multitablas

¡Este material tiene más páginas!

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

Continuar navegando

Materiales relacionados

206 pag.
Base de Datos Avanzado I

Universidade de Vassouras

User badge image

GALLEGOS SEVILLA MARIA GUADALUPE

39 pag.
Lenguaje SQL _DDL y DML_

User badge image

Materiales Generales