Base de Datos:    Lenguaje SQL Profesor: MSC. Luis Serna Jherry.
Objetivos de Hoy Introducción al SQL Basico Sentencias DDL: CREATE TABLE ALTER TABLE DROP TABLE Sentencia DML: SELECT Cláusulas SELECT, FROM, INTO, WHERE Cláusulas GROUP BY, HAVING Cláusula ORDER BY Tipos de JOIN Subqueries Sentencias INSERT, UPDATE y DELETE
SENTENCIAS DDL
CREATE TABLE Las tablas se definen en tres pasos: Dar el nombre a la tabla Definir cada columna, posiblemente incluyendo restricciones de columna Definir las restricciones de la tabla SENTENCIAS DDL
CREATE TABLE CREATE TABLE  nombre-tabla { campo1  (tipo tamaño / dominio)  [NOT NULL], [ campo2  (tipo tamaño / dominio)  [NOT NULL]], [ PRIMARY KEY   (c1, c2, ..., cn) ], [ FOREIGN KEY   (c1)  REFERENCES   tabla-x ],   [ CHECK  (P) ]} SENTENCIAS DDL
Nombre-tabla: Es el nombre de la tabla que se va a crear. Campo i: son los nombres de los campos de la tabla. Tipo: Es el tipo de datos del campo. Tamaño:Es el tamaño del campo en caracteres Dominio: es el nombre del dominio asignado al campo. CREATE TABLE SENTENCIAS DDL
Primary Key: especifica las columnas que conforman la clave primaria de la tabla. Foreign key: indica las columnas que constituyen clave externa en la tabla References: indica la tabla que provee la clave foránea. Check (P): especifica un predicado que debe satisfacer cada fila de la tabla CREATE TABLE SENTENCIAS DDL
Ejemplos: CREATE TABLE CREATE TABLE Clientes (id-cliente char(5) not null, nombre-cliente char(20), calle-cliente char(30), primary key id-cliente) SENTENCIAS DDL
Ejemplos: CREATE TABLE CREATE TABLE Cuenta (id-cuenta char(10) not null, id-cliente char(5), saldo integer check ( saldo >= 0), primary key id-cuenta foreign key id-cliente  references  clientes) SENTENCIAS DDL
Uso de Constraints Una restricción es similar a un índice, aunque también se puede utilizar para establecer una relación con otra tabla. Puede utilizar la cláusula CONSTRAINT en las instrucciones ALTER TABLE y CREATE TABLE para crear o eliminar restricciones.  Hay dos tipos de cláusulas CONSTRAINT: una para crear una restricciones en un único campo y otra para crear una restricción en más de un campo. SENTENCIAS DDL
Uso de Constraints CONSTRAINT nombre {PRIMARY KEY (principal1 [,principal2 [, ...]]) | UNIQUE (único1 [,único2 [, ...]]) | NOT NULL (negadonulo1 [,negadonulo2 [, ...]]) | FOREIGN KEY (referencia1 [,referencia2 [, ...]]) REFERENCES tabla_externa [(campo_externo1 [,campo_externo2 [, ...]])]} SENTENCIAS DDL
Uso de Constraints Nombre: Es el nombre de la restricción que se va a crear. principal1, principal2: Son los nombres de los campos que se van a designar como clave principal. único1, único2: Son los nombres de los campos que se van a designar como clave única. SENTENCIAS DDL
Uso de Constraints negadonulo1, negadonulo2: Son los nombres de campos que se van a limitar a valores no Null. referencia1, referencia2: Son los nombres de los campos de la clave externa a los que se hace referencia en otra tabla. SENTENCIAS DDL
Uso de Constraints Tabla_externa: Es el nombre de la tabla externa que contiene el campo o los campos especificados por campo_externo. Campo_externo1, campo_externo2: Son los nombres de los campos en tabla_externa especificados por referencia1, referencia2. Puede omitir esta cláusula si el campo al que se hace referencia es la clave principal de tabla_externa. SENTENCIAS DDL
ALTER TABLE ALTER TABLE  nombre-tabla {ADD | MODIFY  [COLUMN  campo tipo  [( tamaño )] [NOT NULL] [CONSTRAINT  nombre-constraint tipo-constraint ]]  | [CONSTRAINT nombre-constraint  tipo-constraint  (campo,…)]} SENTENCIAS DDL
ALTER TABLE Tabla: Es el nombre de la tabla que se va a modificar. Campo: Es el nombre del campo que se va a agregar o eliminar de tabla. Tipo: Es el tipo de datos del campo. Tamaño:Es el tamaño del campo en caracteres SENTENCIAS DDL
Ejemplos: ALTER TABLE Adicionar un campo:  ALTER TABLE Empleados ADD COLUMN Salario number(15,2) Quitar el campo Salario de la tabla Empleados: ALTER TABLE Empleados DROP COLUMN Salario; SENTENCIAS DDL
Ejemplos: ALTER TABLE Adicionar una clave foránea: ALTER TABLE Pedidos ADD CONSTRAINT PedidosEmpleados FOREIGN KEY (IdEmpleado) REFERENCES Empleados (IdEmpleado) Quitar la clave externa existente de la tabla Pedidos: ALTER TABLE Pedidos DROP CONSTRAINT PedidosEmpleados; SENTENCIAS DDL
DROP DROP {TABLE tabla | INDEX índice ON tabla} tabla: Es el nombre de la tabla que se va a eliminar o la tabla de la cual se va a eliminar un índice. Índice: Es el nombre del índice que se va a eliminar de tabla. SENTENCIAS DDL
Ejemplos: DROP Ejemplo de como se elimina el índice Mi_Indice de la tabla Empleados: DROP INDEX Mi_Indice ON Empleados; Ejemplo de cómo se elimina una tabla: DROP TABLE Practicas; SENTENCIAS DDL
SENTENCIAS DML
Introducción al SQL - SQL DML Sentencias de Manipulación de Datos SELECT INSERT UPDATE DELETE
SELECT ..... FROM .... WHERE SELECT  corresponde a la operación  Proyección  (  ). Lista los atributos deseados en el resultado de la consulta. FROM  corresponde a la operación  Producto Cartesiano  (X). Lista las relaciones que se deben analizar. WHERE  corresponde al predicado  Selección  (  ), y se refiere a los atributos de las relaciones listadas en FROM. Sentencia SELECT – Estructura Básica
Sentencia SELECT [SELECT ...]  [INTO ...]   [FROM ...] [WHERE ...] [GROUP BY …] [HAVING ...] [ORDER BY ...] [UNION ...]
Cláusula SELECT En la cláusula SELECT se especifican las columnas que van a ser mostradas en pantalla SELECT [ all  | distinct]  { *  |  tabla.*  |  [tabla.]campo1 [encab1] , [tabla.]campo2 [encab2] , ...}
Cláusula FROM Específica la(s) fuente(s) de donde van a ser tomadas las columnas mostradas y/o operadas en la sentencia Select. [SELECT…] FROM expresión tabla [as]  t_alias [, ...]
Cláusula INTO La cláusula  INTO , permite guardar los resultados intermedios de una consulta [SELECT ...] INTO tabla_into [FROM ...]
Cláusula WHERE Donde se especifican las condiciones de búsqueda y join  para las filas que conforman el conjunto resultado. [SELECT ...] [FROM ...] WHERE  condiciones_de_búsqueda Tipos de condiciones Condiciones de comparación, de Join, o de Subquery.
Ejemplos de la Sentencia SELECT SELECT  distinct emp_id, fecha_nac, direccion FROM  EMPLEADO WHERE nombre = “Juan” AND apellido = “Perez”    fecha_nac, direccion  (  nombre = “Juan” AND apellido = “Perez”  (EMPLEADO))
Ejemplos de la Sentencia SELECT ‘ Mostrar la relación de clientes que han obtenido un préstamo en alguna sucursal de Miraflores’ SELECT  DISTINCT  nombre-cliente FROM  PRESTATARIO PRS, PRESTAMO PTR WHERE PRS.idpréstamo = PRT.numpréstamo  AND  nombre-sucursal = “Miraflores”
Condiciones de Búsqueda Las condiciones de búsqueda pueden incluir: Operadores de Comparación (=, <>, < y >). Porciones de cadenas de caracteres (SUBSTR) Rangos (BETWEEN y NOT BETWEEN). Listas (IN, NOT IN). Patrones de caracteres (LIKE y NOT LIKE). Valores desconocidos (IS NULL y IS NOT NULL). Combinaciones con conjunciones (AND, OR).
Condiciones de Búsqueda Operadores de comparación: WHERE  SueldoBásico > 1000 WHERE SUBSTR(CodigoPostal, 1, 3)= “SAN” Rangos (BETWEEN / NOT BETWEEN): WHERE SueldoBásico BETWEEN 1000 AND 5000 Listas (IN / NOT IN): WHERE Departamento NOT IN ('ADM', 'SIS') Coincidencia de patrones o cadenas de caracteres (LIKE / NOT LIKE)) WHERE NombreCompleto LIKE “LET%”
Comodines (Wildcards) en la cláusula WHERE Wildcard Significado * % Cualquier cadena de cero o mas caracteres. ?, #, _ Cualquier carácter/ número único. [-] Cualquier carácter único dentro de un rango. [!] Cualquier carácter único que no está dentro de un rango.
Operadores y Wildcards en la cláusula WHERE … .WHERE  Nombre LIKE “Ma%”  busca todos los nombres que comiencen con “Ma” (Ej.: María, Mariana, Manuel, Martín) LIKE “%ía” busca todos los nombres que terminen con “ía”. (Ej.: Sofía, María, Estefanía). LIKE “%ar%” busca todos los nombres que tengan las letras “ar”. (Ej.:Carlos, Arturo, Eleazar).
Operadores y Wildcards en la cláusula WHERE LIKE “_va” busca todos los nombres de tres letras que  terminan en “va”.  (Ej.: Eva, Iva, Ava). LIKE “[CM]arlo[ns]” busca todos los nombres:  Carlon, Marlon, Carlos y Marlos. LIKE  “[B-D]elia” busca todos los nombres que terminan en  “elia” y que comiencen con las letras de la  B a la D. (Ej.: Delia, Celia).  LIKE “_ _ _” busca todas las cadenas de exactamente 3  caracteres. LIKE “_ _ _ %” busca las cadenas de al menos 3 caracteres.
Operadores y Wildcards en la cláusula WHERE CARACTERES DE ESCAPE: Para que los patrones puedan contener los caracteres especiales comodín, se especifica un caracter de escape. LIKE “%ab\_cd”  escape  “\”  busca todas las cadenas que    terminen con “ab_cd”. LIKE “ab\_cd%”  escape  “\”   busca las cadenas que empiecen    con “ab_cd”.
Tablas Combinadas Permite especificar la tabla resultante de una operación de reunión natural en la cláusula FROM, en lugar de colocar las condiciones de JOIN en el WHERE [SELECT]  FROM  TABLA1  [INNER] JOIN   TABLA2 ON  TABLA1.COLUMNA1 = TABLA2.COLUMNA1  [WHERE]
Tablas Combinadas SELECT  DISTINCT  nombre-cliente FROM  PRESTATARIO PRS [INNER] JOIN  PRESTAMO PTR On PRS.idpréstamo = PRT.numpréstamo  WHERE nombre-sucursal = “Miraflores”
Cláusula GROUP BY Especifica las columnas  por las que las filas van a estar agrupadas o particionadas. Los resultados del query contienen un valor o conjunto de valores para cada conjunto de valores indicado por las  funciones_de_agregación  nombradas en la lista del Select
SELECT {{ columnas_de_agrupación ,…}, {función_de_agregación,…}} FROM … [WHERE …] GROUP BY { columnas_de_agrupación ,…} Cláusula GROUP BY
Funciones de Agregación más usadas SUM([ ALL |DISTINCT] expresión) Calcula el total de una expresión numérica para todas las filas o sólo las distintas. AVG([ ALL |DISTINCT] expresión) Calcula el promedio de una expresión numérica para las filas involucradas. MIN([ ALL |DISTINCT] expresión) Calcula el mínimo valor de una expresión numérica para las filas involucradas MAX([ ALL |DISTINCT] expresión) Calcula el máximo valor de una expresión numérica para las filas involucradas. COUNT([ ALL |DISTINCT] expresión) Número de veces que se repite el valor de la expresión. COUNT(*) Número de filas seleccionadas
‘ Mostrar la suma de sueldo básico de los empleados activos, por Departamento’ SELECT Nombre_Depto, SUM(SueldoBasico) FROM  EMPLEADO EM, DEPARTAMENTO DE WHERE EM.IDDepartamento =  DE.IDDepartamento  AND EstadoEmpleado= 'ACT’ GROUP BY Nombre_Depto Cláusula GROUP BY
“ Obtener el número de titulares de cuenta de cada sucursal” SELECT nombre_sucursal, COUNT ( DISTINCT  nombre-cliente) FROM  TITULAR-CUENTA TC, CUENTA CUE WHERE TC.numero-cuenta = CUE. numero-cuenta GROUP BY  nombre-sucursal Cláusula GROUP BY
Especifica una restricción  que aplica a las funciones de agregación  de los grupos. Esto afecta a las filas que son devueltas como resultado y  no  al cálculo de las funciones de agregación.  La cláusula WHERE  si  condiciona el número de filas que intervienen en el cálculo de las funciones de agregación. Cláusula HAVING
SELECT {{ columnas_de_agrupación,… }, {función_de_agregación,…}} FROM … [WHERE …] GROUP BY { columnas_de_agrupación,… } HAVING condiciones_de_búsqueda Cláusula HAVING
GROUP BY y HAVING “ Mostrar el sueldo promedio de los Departamentos con promedio superior a 1000” SELECT Nombre_Depto, AVG(SueldoBasico) FROM  EMPLEADO EM, DEPARTAMENTO DE WHERE EM.IDDepartamento =  DE.IDDepartamento AND EstadoEmpleado= 'ACT' GROUP BY  Nombre_Depto HAVING  AVG(SueldoBasico) > 1000
“ Saldo promedio de cada cliente de Surco que tiene como mínimo 3 cuentas” SELECT TC. Nombre-cliente, AVG (saldo) FROM  TITULAR-CUENTA TC, CUENTA CUE, CLIENTE CLI WHERE TC.numero-cuenta = CUE.numero-cuenta  AND  TC.nombre-cliente = CLI.nombre-cliente AND  ciudad-cliente = “Surco” GROUP BY   TC.nombre-cliente HAVING  COUNT (DISTINCT TC.numero-cuenta) >= 3 GROUP BY y HAVING
GROUP BY - HAVING - WHERE Procedimiento: Si en una misma consulta aparece una cláusula WHERE y una cláusula HAVING, se aplica primero el predicado de la cláusula WHERE. Las tuplas que satisfagan la condición, se colocan en grupos según la cláusula GROUP BY. La cláusula HAVING se aplica luego a cada grupo. Los grupos que no la satisfagan se eliminan. La cláusula SELECT utiliza los grupos restantes para generar las tuplas resultado de la consulta.
Cláusula ORDER BY Ordena el resultado de los querys por los valores de las columnas mencionadas. Solamente se puede ordenar por las columnas especificadas en el SELECT. ASC : Es el valor por defecto e indica que los resultados se van a presentar ascendentemente. DESC: Debe especificarse al lado de la columna cuyo orden se desea ver en forma descendente. Consideración :  ordenar un gran número de tuplas puede ser costoso. Es conveniente ordenar sólo cuando sea estrictamente necesario .
SELECT {columna 1, columna 2,…} FROM … [WHERE …] [GROUP BY...] [HAVING ...] ORDER BY columna 1 [ASC|DESC],.... Cláusula ORDER BY
SELECT Nombre 'Departamento',  AVG(SueldoBasico) 'Promedio Sueldos' FROM  EMPLEADO EM, DEPARTAMENTO DE WHERE EM.Departamento = DE.Departamento  GROUP BY Nombre ORDER BY AVG(SueldoBasico) DESC Cláusula ORDER BY
Permite manipular los resultados de dos o mas querys, combinándolos en un único conjunto de datos. Muestra las filas recuperadas por cualquiera de los query A diferencia del SELECT, que por omisión conserva los duplicados, la operación de unión normalmente los suprime. A fin de evitar esto, es necesario colocar a continuación del operador UNION la palabra clave  ALL Operador UNION
Query1 [UNION [ALL]] QueryN  [ORDER BY…..] donde: Operador UNION Query1: SELECT select-list [INTO] [FROM] [WHERE] [GROUP BY] [HAVING] y  QueryN SELECT select-list  [FROM] [WHERE] [GROUP BY] [HAVING]
Todas las select-list mencionadas con la sentencia UNION, deben tener el mismo número de expresiones (columnas, expresiones aritméticas, funciones de agregación, etc.). Las columnas que se corresponden, deben tener el mismo tipo de dato, sino es así, debe existir una conversión de datos implícita o explícita con una función de conversión de por medio. Operador UNION
“ Todos los clientes que poseen una cuenta, un préstamo o ambos” (SELECT nombre-cliente FROM  TITULAR-CUENTA)  UNION (SELECT nombre-cliente FROM PRESTATARIO) Operador UNION
OUTER JOINS Los outer joins extienden los resultados de un join simple. Retornan las filas coincidentes y también las filas de una de las tablas que no tiene elementos en común con la otra. [Select] From tabla1, tabla2 WHERE tabla1.columna1 = tabla2.columna1  (+) [Select] From tabla1  LEFT [OUTER] JOIN  TABLA2  ON tabla1.columna1 = tabla2.columna1  … ..devuelven todas las filas de la tabla1 aunque no tengan coincidencias con la tabla2 en la columna1.
OUTER JOINS SELECT  IDPersona, NombreCompleto,  IDDepartamento, SueldoBasico FROM  PERSONA, EMPLEADO WHERE  IDPersona = IDEmpleado (+) SELECT  IDPersona, NombreCompleto,  IDDepartamento, SueldoBasico FROM  PERSONA  LEFT JOIN  EMPLEADO ON  IDPersona = IDEmpleado (Seleccionan todas las personas, aún las que no figuran en la tabla EMPLEADO)
OUTER JOINS SELECT DE.Nombre_Dpto, IDEmpleado, SueldoBasico FROM  EMPLEADO  RIGHT JOIN  DEPARTAMENTO ON  EMPLEADO.IDDepartamento =  DEPARTAMENTO.IDDepartamento (Selecciona todos los departamentos, aún los que no tienen empleados) Un join simple descarta las filas no coincidentes. Un outer join preserva filas que de otra forma serían descartadas.
Uso de Subqueries Un Subquery es una sentencia SELECT anidada dentro de otras sentencias SQL como SELECT, INSERT, UPDATE o DELETE, o dentro de otro Subquery. A una sentencia SELECT, que contiene uno o mas Subqueries, se la denomina Nested Query o SELECT anidado.
Uso de Subqueries Subqueries con IN / NOT IN: El resultado, es  una lista  de cero o mas valores. Una vez que el Subquery devuelve resultados, el Outer query los usa, por inclusión o negación. Con la palabra IN se puede resolver el operador relacional de Intersección Empleando NOT IN se resuelve el operador Diferencia
Uso de Subqueries SELECT  NombreCompleto, SueldoBasico FROM  PERSONA, EMPLEADO WHERE  IDPersona=IDEmpleado and   IDEmpleado NOT IN  (SELECT IDEmpleado FROM  SANCIONES_EMPLEADO)
Uso de Subqueries Subqueries con Operadores de comparación.  Son los subquerys que se introducen con algún operador de comparación como =, <>, <, <=, >, >=, etc.  Estos subqueries retornan  un solo valor .
Uso de Subqueries Operadores de comparación modificados por ANY o ALL. Estos subqueries  retornan cero o muchos valores . > ALL, significa que todos los valores retornados por el subquery son menores al valor de comparación del outer. > ANY, significa que por lo menos un valor retornado por el subquery es menor al valor de comparación del outer.
Uso de Subqueries. Mostrar ID, nombre y sueldo de todos los empleados cuyo sueldo es mayor a todos los sueldos de la tabla CARGO SELECT  IDEmpleado, NombreCompleto,  SueldoBasico FROM  EMPLEADO, PERSONA WHERE  IDEmpleado = IDPersona AND  SueldoBasico > ALL (SELECT Sueldo FROM CARGO)
Uso de Subqueries. Mostrar ID, nombre y sueldo de todos los empleados cuyo sueldo es mayor a alguno de los sueldos de la tabla CARGO SELECT  IDEmpleado, NombreCompleto, SueldoBasico FROM  EMPLEADO, PERSONA WHERE  IDEmpleado = IDPersona AND  SueldoBasico > ANY (SELECT Sueldo FROM CARGO)
Uso de Subqueries. Subqueries con el uso de la palabra EXISTS: Funciona como un test de existencia. La cláusula WHERE, examina la existencia de filas devueltas por el Subquery. El Subquery  devuelve los valores de TRUE o FALSE .
Uso de Subqueries. “ Muestra los códigos de los empleados que tienen alguna sanción” SELECT  IDEmpleado  FROM  EMPLEADO EM WHERE  EXISTS  (SELECT * FROM SANCIONES_EMPLEADO  SE WHERE  EM.IDEmpleado = SE.IDEmpleado)
Subqueries correlativos Aquellos queries anidados donde el Subquery depende del outer query para devolver sus valores.  Esto significa que el Subquery se ejecuta repetidamente, una vez por cada fila seleccionada por el Outer query.
Subqueries Correlativos SELECT  a.IDEmpleado, a.SueldoBasico FROM   EMPLEADO a  WHERE  a.SueldoBasico  >= (SELECT b.SueldoBasico FROM EMPLEADO b WHERE a.IDJefe = b.IDEmpleado ) Muestra código y sueldo de los empleados cuyos sueldos son mayores o iguales a los sueldos de sus respectivos jefes
Sentencia INSERT INSERT es otra sentencia DML base, usada para incorporar nuevas filas a una tabla de base de datos. INSERT [INTO]  {table-name | view-name} [(column-list)] {VALUES | (values-list)  |  select-statement }
Ejemplos de la Sentencia INSERT Fabricantes   ( Nfabricante , país) INSERT INTO FABRICANTES (Nfabricante, País) VALUES (“Reynolds Tobacco CO.”, “EEUU”) Marcas ( marca , Nfabricante, cartón, embalaje) INSERT INTO MARCAS VALUES (“Camel”, “Reynolds Tobacco CO.”, 10, 20)
Sentencia UPDATE Modifica los datos existentes en filas de una tabla de Base de Datos UPDATE  {table-name | view-name} SET{column-list | variable-list | variable_and_column-list},….. [ WHERE { condition }]
Sentencia UPDATE Cambiar aquellos cigarrillos de clase “Normal”, con filtro, fabricados por “Tabacalera Nacional”, de modo que ahora no tengan filtro UPDATE CIGARRILLOS SET filtro = “N” WHERE marca in (SELECT marca  FROM MARCAS   WHERE Nfabricante = “Tabacalera Nacional” And filtro = “S” and clase = “Normal”)
Sentencia DELETE Elimina filas de una tabla de Base de Datos DELETE FROM  {table-name | view-name} [WHERE {condition} ]
Sentencia DELETE Eliminar todos los fabricantes que no manufacturen cigarrillos de clase “Ultra Light” DELETE FROM FABRICANTES WHERE Nfabricante NOT IN (SELECT DISTINCT Nfabricante FROM MARCAS WHERE marca IN (SELECT marca FROM CIGARRILLOS WHERE clase = “Ultra Light”))

Sql basico parte_i_

  • 1.
    Base de Datos: Lenguaje SQL Profesor: MSC. Luis Serna Jherry.
  • 2.
    Objetivos de HoyIntroducción al SQL Basico Sentencias DDL: CREATE TABLE ALTER TABLE DROP TABLE Sentencia DML: SELECT Cláusulas SELECT, FROM, INTO, WHERE Cláusulas GROUP BY, HAVING Cláusula ORDER BY Tipos de JOIN Subqueries Sentencias INSERT, UPDATE y DELETE
  • 3.
  • 4.
    CREATE TABLE Lastablas se definen en tres pasos: Dar el nombre a la tabla Definir cada columna, posiblemente incluyendo restricciones de columna Definir las restricciones de la tabla SENTENCIAS DDL
  • 5.
    CREATE TABLE CREATETABLE nombre-tabla { campo1 (tipo tamaño / dominio) [NOT NULL], [ campo2 (tipo tamaño / dominio) [NOT NULL]], [ PRIMARY KEY (c1, c2, ..., cn) ], [ FOREIGN KEY (c1) REFERENCES tabla-x ], [ CHECK (P) ]} SENTENCIAS DDL
  • 6.
    Nombre-tabla: Es elnombre de la tabla que se va a crear. Campo i: son los nombres de los campos de la tabla. Tipo: Es el tipo de datos del campo. Tamaño:Es el tamaño del campo en caracteres Dominio: es el nombre del dominio asignado al campo. CREATE TABLE SENTENCIAS DDL
  • 7.
    Primary Key: especificalas columnas que conforman la clave primaria de la tabla. Foreign key: indica las columnas que constituyen clave externa en la tabla References: indica la tabla que provee la clave foránea. Check (P): especifica un predicado que debe satisfacer cada fila de la tabla CREATE TABLE SENTENCIAS DDL
  • 8.
    Ejemplos: CREATE TABLECREATE TABLE Clientes (id-cliente char(5) not null, nombre-cliente char(20), calle-cliente char(30), primary key id-cliente) SENTENCIAS DDL
  • 9.
    Ejemplos: CREATE TABLECREATE TABLE Cuenta (id-cuenta char(10) not null, id-cliente char(5), saldo integer check ( saldo >= 0), primary key id-cuenta foreign key id-cliente references clientes) SENTENCIAS DDL
  • 10.
    Uso de ConstraintsUna restricción es similar a un índice, aunque también se puede utilizar para establecer una relación con otra tabla. Puede utilizar la cláusula CONSTRAINT en las instrucciones ALTER TABLE y CREATE TABLE para crear o eliminar restricciones. Hay dos tipos de cláusulas CONSTRAINT: una para crear una restricciones en un único campo y otra para crear una restricción en más de un campo. SENTENCIAS DDL
  • 11.
    Uso de ConstraintsCONSTRAINT nombre {PRIMARY KEY (principal1 [,principal2 [, ...]]) | UNIQUE (único1 [,único2 [, ...]]) | NOT NULL (negadonulo1 [,negadonulo2 [, ...]]) | FOREIGN KEY (referencia1 [,referencia2 [, ...]]) REFERENCES tabla_externa [(campo_externo1 [,campo_externo2 [, ...]])]} SENTENCIAS DDL
  • 12.
    Uso de ConstraintsNombre: Es el nombre de la restricción que se va a crear. principal1, principal2: Son los nombres de los campos que se van a designar como clave principal. único1, único2: Son los nombres de los campos que se van a designar como clave única. SENTENCIAS DDL
  • 13.
    Uso de Constraintsnegadonulo1, negadonulo2: Son los nombres de campos que se van a limitar a valores no Null. referencia1, referencia2: Son los nombres de los campos de la clave externa a los que se hace referencia en otra tabla. SENTENCIAS DDL
  • 14.
    Uso de ConstraintsTabla_externa: Es el nombre de la tabla externa que contiene el campo o los campos especificados por campo_externo. Campo_externo1, campo_externo2: Son los nombres de los campos en tabla_externa especificados por referencia1, referencia2. Puede omitir esta cláusula si el campo al que se hace referencia es la clave principal de tabla_externa. SENTENCIAS DDL
  • 15.
    ALTER TABLE ALTERTABLE nombre-tabla {ADD | MODIFY [COLUMN campo tipo [( tamaño )] [NOT NULL] [CONSTRAINT nombre-constraint tipo-constraint ]] | [CONSTRAINT nombre-constraint tipo-constraint (campo,…)]} SENTENCIAS DDL
  • 16.
    ALTER TABLE Tabla:Es el nombre de la tabla que se va a modificar. Campo: Es el nombre del campo que se va a agregar o eliminar de tabla. Tipo: Es el tipo de datos del campo. Tamaño:Es el tamaño del campo en caracteres SENTENCIAS DDL
  • 17.
    Ejemplos: ALTER TABLEAdicionar un campo: ALTER TABLE Empleados ADD COLUMN Salario number(15,2) Quitar el campo Salario de la tabla Empleados: ALTER TABLE Empleados DROP COLUMN Salario; SENTENCIAS DDL
  • 18.
    Ejemplos: ALTER TABLEAdicionar una clave foránea: ALTER TABLE Pedidos ADD CONSTRAINT PedidosEmpleados FOREIGN KEY (IdEmpleado) REFERENCES Empleados (IdEmpleado) Quitar la clave externa existente de la tabla Pedidos: ALTER TABLE Pedidos DROP CONSTRAINT PedidosEmpleados; SENTENCIAS DDL
  • 19.
    DROP DROP {TABLEtabla | INDEX índice ON tabla} tabla: Es el nombre de la tabla que se va a eliminar o la tabla de la cual se va a eliminar un índice. Índice: Es el nombre del índice que se va a eliminar de tabla. SENTENCIAS DDL
  • 20.
    Ejemplos: DROP Ejemplode como se elimina el índice Mi_Indice de la tabla Empleados: DROP INDEX Mi_Indice ON Empleados; Ejemplo de cómo se elimina una tabla: DROP TABLE Practicas; SENTENCIAS DDL
  • 21.
  • 22.
    Introducción al SQL- SQL DML Sentencias de Manipulación de Datos SELECT INSERT UPDATE DELETE
  • 23.
    SELECT ..... FROM.... WHERE SELECT corresponde a la operación Proyección (  ). Lista los atributos deseados en el resultado de la consulta. FROM corresponde a la operación Producto Cartesiano (X). Lista las relaciones que se deben analizar. WHERE corresponde al predicado Selección (  ), y se refiere a los atributos de las relaciones listadas en FROM. Sentencia SELECT – Estructura Básica
  • 24.
    Sentencia SELECT [SELECT...] [INTO ...] [FROM ...] [WHERE ...] [GROUP BY …] [HAVING ...] [ORDER BY ...] [UNION ...]
  • 25.
    Cláusula SELECT Enla cláusula SELECT se especifican las columnas que van a ser mostradas en pantalla SELECT [ all | distinct] { * | tabla.* | [tabla.]campo1 [encab1] , [tabla.]campo2 [encab2] , ...}
  • 26.
    Cláusula FROM Específicala(s) fuente(s) de donde van a ser tomadas las columnas mostradas y/o operadas en la sentencia Select. [SELECT…] FROM expresión tabla [as] t_alias [, ...]
  • 27.
    Cláusula INTO Lacláusula INTO , permite guardar los resultados intermedios de una consulta [SELECT ...] INTO tabla_into [FROM ...]
  • 28.
    Cláusula WHERE Dondese especifican las condiciones de búsqueda y join para las filas que conforman el conjunto resultado. [SELECT ...] [FROM ...] WHERE condiciones_de_búsqueda Tipos de condiciones Condiciones de comparación, de Join, o de Subquery.
  • 29.
    Ejemplos de laSentencia SELECT SELECT distinct emp_id, fecha_nac, direccion FROM EMPLEADO WHERE nombre = “Juan” AND apellido = “Perez”  fecha_nac, direccion (  nombre = “Juan” AND apellido = “Perez” (EMPLEADO))
  • 30.
    Ejemplos de laSentencia SELECT ‘ Mostrar la relación de clientes que han obtenido un préstamo en alguna sucursal de Miraflores’ SELECT DISTINCT nombre-cliente FROM PRESTATARIO PRS, PRESTAMO PTR WHERE PRS.idpréstamo = PRT.numpréstamo AND nombre-sucursal = “Miraflores”
  • 31.
    Condiciones de BúsquedaLas condiciones de búsqueda pueden incluir: Operadores de Comparación (=, <>, < y >). Porciones de cadenas de caracteres (SUBSTR) Rangos (BETWEEN y NOT BETWEEN). Listas (IN, NOT IN). Patrones de caracteres (LIKE y NOT LIKE). Valores desconocidos (IS NULL y IS NOT NULL). Combinaciones con conjunciones (AND, OR).
  • 32.
    Condiciones de BúsquedaOperadores de comparación: WHERE SueldoBásico > 1000 WHERE SUBSTR(CodigoPostal, 1, 3)= “SAN” Rangos (BETWEEN / NOT BETWEEN): WHERE SueldoBásico BETWEEN 1000 AND 5000 Listas (IN / NOT IN): WHERE Departamento NOT IN ('ADM', 'SIS') Coincidencia de patrones o cadenas de caracteres (LIKE / NOT LIKE)) WHERE NombreCompleto LIKE “LET%”
  • 33.
    Comodines (Wildcards) enla cláusula WHERE Wildcard Significado * % Cualquier cadena de cero o mas caracteres. ?, #, _ Cualquier carácter/ número único. [-] Cualquier carácter único dentro de un rango. [!] Cualquier carácter único que no está dentro de un rango.
  • 34.
    Operadores y Wildcardsen la cláusula WHERE … .WHERE Nombre LIKE “Ma%” busca todos los nombres que comiencen con “Ma” (Ej.: María, Mariana, Manuel, Martín) LIKE “%ía” busca todos los nombres que terminen con “ía”. (Ej.: Sofía, María, Estefanía). LIKE “%ar%” busca todos los nombres que tengan las letras “ar”. (Ej.:Carlos, Arturo, Eleazar).
  • 35.
    Operadores y Wildcardsen la cláusula WHERE LIKE “_va” busca todos los nombres de tres letras que terminan en “va”. (Ej.: Eva, Iva, Ava). LIKE “[CM]arlo[ns]” busca todos los nombres: Carlon, Marlon, Carlos y Marlos. LIKE “[B-D]elia” busca todos los nombres que terminan en “elia” y que comiencen con las letras de la B a la D. (Ej.: Delia, Celia). LIKE “_ _ _” busca todas las cadenas de exactamente 3 caracteres. LIKE “_ _ _ %” busca las cadenas de al menos 3 caracteres.
  • 36.
    Operadores y Wildcardsen la cláusula WHERE CARACTERES DE ESCAPE: Para que los patrones puedan contener los caracteres especiales comodín, se especifica un caracter de escape. LIKE “%ab\_cd” escape “\” busca todas las cadenas que terminen con “ab_cd”. LIKE “ab\_cd%” escape “\” busca las cadenas que empiecen con “ab_cd”.
  • 37.
    Tablas Combinadas Permiteespecificar la tabla resultante de una operación de reunión natural en la cláusula FROM, en lugar de colocar las condiciones de JOIN en el WHERE [SELECT] FROM TABLA1 [INNER] JOIN TABLA2 ON TABLA1.COLUMNA1 = TABLA2.COLUMNA1 [WHERE]
  • 38.
    Tablas Combinadas SELECT DISTINCT nombre-cliente FROM PRESTATARIO PRS [INNER] JOIN PRESTAMO PTR On PRS.idpréstamo = PRT.numpréstamo WHERE nombre-sucursal = “Miraflores”
  • 39.
    Cláusula GROUP BYEspecifica las columnas por las que las filas van a estar agrupadas o particionadas. Los resultados del query contienen un valor o conjunto de valores para cada conjunto de valores indicado por las funciones_de_agregación nombradas en la lista del Select
  • 40.
    SELECT {{ columnas_de_agrupación,…}, {función_de_agregación,…}} FROM … [WHERE …] GROUP BY { columnas_de_agrupación ,…} Cláusula GROUP BY
  • 41.
    Funciones de Agregaciónmás usadas SUM([ ALL |DISTINCT] expresión) Calcula el total de una expresión numérica para todas las filas o sólo las distintas. AVG([ ALL |DISTINCT] expresión) Calcula el promedio de una expresión numérica para las filas involucradas. MIN([ ALL |DISTINCT] expresión) Calcula el mínimo valor de una expresión numérica para las filas involucradas MAX([ ALL |DISTINCT] expresión) Calcula el máximo valor de una expresión numérica para las filas involucradas. COUNT([ ALL |DISTINCT] expresión) Número de veces que se repite el valor de la expresión. COUNT(*) Número de filas seleccionadas
  • 42.
    ‘ Mostrar lasuma de sueldo básico de los empleados activos, por Departamento’ SELECT Nombre_Depto, SUM(SueldoBasico) FROM EMPLEADO EM, DEPARTAMENTO DE WHERE EM.IDDepartamento = DE.IDDepartamento AND EstadoEmpleado= 'ACT’ GROUP BY Nombre_Depto Cláusula GROUP BY
  • 43.
    “ Obtener elnúmero de titulares de cuenta de cada sucursal” SELECT nombre_sucursal, COUNT ( DISTINCT nombre-cliente) FROM TITULAR-CUENTA TC, CUENTA CUE WHERE TC.numero-cuenta = CUE. numero-cuenta GROUP BY nombre-sucursal Cláusula GROUP BY
  • 44.
    Especifica una restricción que aplica a las funciones de agregación de los grupos. Esto afecta a las filas que son devueltas como resultado y no al cálculo de las funciones de agregación. La cláusula WHERE si condiciona el número de filas que intervienen en el cálculo de las funciones de agregación. Cláusula HAVING
  • 45.
    SELECT {{ columnas_de_agrupación,…}, {función_de_agregación,…}} FROM … [WHERE …] GROUP BY { columnas_de_agrupación,… } HAVING condiciones_de_búsqueda Cláusula HAVING
  • 46.
    GROUP BY yHAVING “ Mostrar el sueldo promedio de los Departamentos con promedio superior a 1000” SELECT Nombre_Depto, AVG(SueldoBasico) FROM EMPLEADO EM, DEPARTAMENTO DE WHERE EM.IDDepartamento = DE.IDDepartamento AND EstadoEmpleado= 'ACT' GROUP BY Nombre_Depto HAVING AVG(SueldoBasico) > 1000
  • 47.
    “ Saldo promediode cada cliente de Surco que tiene como mínimo 3 cuentas” SELECT TC. Nombre-cliente, AVG (saldo) FROM TITULAR-CUENTA TC, CUENTA CUE, CLIENTE CLI WHERE TC.numero-cuenta = CUE.numero-cuenta AND TC.nombre-cliente = CLI.nombre-cliente AND ciudad-cliente = “Surco” GROUP BY TC.nombre-cliente HAVING COUNT (DISTINCT TC.numero-cuenta) >= 3 GROUP BY y HAVING
  • 48.
    GROUP BY -HAVING - WHERE Procedimiento: Si en una misma consulta aparece una cláusula WHERE y una cláusula HAVING, se aplica primero el predicado de la cláusula WHERE. Las tuplas que satisfagan la condición, se colocan en grupos según la cláusula GROUP BY. La cláusula HAVING se aplica luego a cada grupo. Los grupos que no la satisfagan se eliminan. La cláusula SELECT utiliza los grupos restantes para generar las tuplas resultado de la consulta.
  • 49.
    Cláusula ORDER BYOrdena el resultado de los querys por los valores de las columnas mencionadas. Solamente se puede ordenar por las columnas especificadas en el SELECT. ASC : Es el valor por defecto e indica que los resultados se van a presentar ascendentemente. DESC: Debe especificarse al lado de la columna cuyo orden se desea ver en forma descendente. Consideración : ordenar un gran número de tuplas puede ser costoso. Es conveniente ordenar sólo cuando sea estrictamente necesario .
  • 50.
    SELECT {columna 1,columna 2,…} FROM … [WHERE …] [GROUP BY...] [HAVING ...] ORDER BY columna 1 [ASC|DESC],.... Cláusula ORDER BY
  • 51.
    SELECT Nombre 'Departamento', AVG(SueldoBasico) 'Promedio Sueldos' FROM EMPLEADO EM, DEPARTAMENTO DE WHERE EM.Departamento = DE.Departamento GROUP BY Nombre ORDER BY AVG(SueldoBasico) DESC Cláusula ORDER BY
  • 52.
    Permite manipular losresultados de dos o mas querys, combinándolos en un único conjunto de datos. Muestra las filas recuperadas por cualquiera de los query A diferencia del SELECT, que por omisión conserva los duplicados, la operación de unión normalmente los suprime. A fin de evitar esto, es necesario colocar a continuación del operador UNION la palabra clave ALL Operador UNION
  • 53.
    Query1 [UNION [ALL]]QueryN [ORDER BY…..] donde: Operador UNION Query1: SELECT select-list [INTO] [FROM] [WHERE] [GROUP BY] [HAVING] y QueryN SELECT select-list [FROM] [WHERE] [GROUP BY] [HAVING]
  • 54.
    Todas las select-listmencionadas con la sentencia UNION, deben tener el mismo número de expresiones (columnas, expresiones aritméticas, funciones de agregación, etc.). Las columnas que se corresponden, deben tener el mismo tipo de dato, sino es así, debe existir una conversión de datos implícita o explícita con una función de conversión de por medio. Operador UNION
  • 55.
    “ Todos losclientes que poseen una cuenta, un préstamo o ambos” (SELECT nombre-cliente FROM TITULAR-CUENTA) UNION (SELECT nombre-cliente FROM PRESTATARIO) Operador UNION
  • 56.
    OUTER JOINS Losouter joins extienden los resultados de un join simple. Retornan las filas coincidentes y también las filas de una de las tablas que no tiene elementos en común con la otra. [Select] From tabla1, tabla2 WHERE tabla1.columna1 = tabla2.columna1 (+) [Select] From tabla1 LEFT [OUTER] JOIN TABLA2 ON tabla1.columna1 = tabla2.columna1 … ..devuelven todas las filas de la tabla1 aunque no tengan coincidencias con la tabla2 en la columna1.
  • 57.
    OUTER JOINS SELECT IDPersona, NombreCompleto, IDDepartamento, SueldoBasico FROM PERSONA, EMPLEADO WHERE IDPersona = IDEmpleado (+) SELECT IDPersona, NombreCompleto, IDDepartamento, SueldoBasico FROM PERSONA LEFT JOIN EMPLEADO ON IDPersona = IDEmpleado (Seleccionan todas las personas, aún las que no figuran en la tabla EMPLEADO)
  • 58.
    OUTER JOINS SELECTDE.Nombre_Dpto, IDEmpleado, SueldoBasico FROM EMPLEADO RIGHT JOIN DEPARTAMENTO ON EMPLEADO.IDDepartamento = DEPARTAMENTO.IDDepartamento (Selecciona todos los departamentos, aún los que no tienen empleados) Un join simple descarta las filas no coincidentes. Un outer join preserva filas que de otra forma serían descartadas.
  • 59.
    Uso de SubqueriesUn Subquery es una sentencia SELECT anidada dentro de otras sentencias SQL como SELECT, INSERT, UPDATE o DELETE, o dentro de otro Subquery. A una sentencia SELECT, que contiene uno o mas Subqueries, se la denomina Nested Query o SELECT anidado.
  • 60.
    Uso de SubqueriesSubqueries con IN / NOT IN: El resultado, es una lista de cero o mas valores. Una vez que el Subquery devuelve resultados, el Outer query los usa, por inclusión o negación. Con la palabra IN se puede resolver el operador relacional de Intersección Empleando NOT IN se resuelve el operador Diferencia
  • 61.
    Uso de SubqueriesSELECT NombreCompleto, SueldoBasico FROM PERSONA, EMPLEADO WHERE IDPersona=IDEmpleado and IDEmpleado NOT IN (SELECT IDEmpleado FROM SANCIONES_EMPLEADO)
  • 62.
    Uso de SubqueriesSubqueries con Operadores de comparación. Son los subquerys que se introducen con algún operador de comparación como =, <>, <, <=, >, >=, etc. Estos subqueries retornan un solo valor .
  • 63.
    Uso de SubqueriesOperadores de comparación modificados por ANY o ALL. Estos subqueries retornan cero o muchos valores . > ALL, significa que todos los valores retornados por el subquery son menores al valor de comparación del outer. > ANY, significa que por lo menos un valor retornado por el subquery es menor al valor de comparación del outer.
  • 64.
    Uso de Subqueries.Mostrar ID, nombre y sueldo de todos los empleados cuyo sueldo es mayor a todos los sueldos de la tabla CARGO SELECT IDEmpleado, NombreCompleto, SueldoBasico FROM EMPLEADO, PERSONA WHERE IDEmpleado = IDPersona AND SueldoBasico > ALL (SELECT Sueldo FROM CARGO)
  • 65.
    Uso de Subqueries.Mostrar ID, nombre y sueldo de todos los empleados cuyo sueldo es mayor a alguno de los sueldos de la tabla CARGO SELECT IDEmpleado, NombreCompleto, SueldoBasico FROM EMPLEADO, PERSONA WHERE IDEmpleado = IDPersona AND SueldoBasico > ANY (SELECT Sueldo FROM CARGO)
  • 66.
    Uso de Subqueries.Subqueries con el uso de la palabra EXISTS: Funciona como un test de existencia. La cláusula WHERE, examina la existencia de filas devueltas por el Subquery. El Subquery devuelve los valores de TRUE o FALSE .
  • 67.
    Uso de Subqueries.“ Muestra los códigos de los empleados que tienen alguna sanción” SELECT IDEmpleado FROM EMPLEADO EM WHERE EXISTS (SELECT * FROM SANCIONES_EMPLEADO SE WHERE EM.IDEmpleado = SE.IDEmpleado)
  • 68.
    Subqueries correlativos Aquellosqueries anidados donde el Subquery depende del outer query para devolver sus valores. Esto significa que el Subquery se ejecuta repetidamente, una vez por cada fila seleccionada por el Outer query.
  • 69.
    Subqueries Correlativos SELECT a.IDEmpleado, a.SueldoBasico FROM EMPLEADO a WHERE a.SueldoBasico >= (SELECT b.SueldoBasico FROM EMPLEADO b WHERE a.IDJefe = b.IDEmpleado ) Muestra código y sueldo de los empleados cuyos sueldos son mayores o iguales a los sueldos de sus respectivos jefes
  • 70.
    Sentencia INSERT INSERTes otra sentencia DML base, usada para incorporar nuevas filas a una tabla de base de datos. INSERT [INTO] {table-name | view-name} [(column-list)] {VALUES | (values-list) | select-statement }
  • 71.
    Ejemplos de laSentencia INSERT Fabricantes ( Nfabricante , país) INSERT INTO FABRICANTES (Nfabricante, País) VALUES (“Reynolds Tobacco CO.”, “EEUU”) Marcas ( marca , Nfabricante, cartón, embalaje) INSERT INTO MARCAS VALUES (“Camel”, “Reynolds Tobacco CO.”, 10, 20)
  • 72.
    Sentencia UPDATE Modificalos datos existentes en filas de una tabla de Base de Datos UPDATE {table-name | view-name} SET{column-list | variable-list | variable_and_column-list},….. [ WHERE { condition }]
  • 73.
    Sentencia UPDATE Cambiaraquellos cigarrillos de clase “Normal”, con filtro, fabricados por “Tabacalera Nacional”, de modo que ahora no tengan filtro UPDATE CIGARRILLOS SET filtro = “N” WHERE marca in (SELECT marca FROM MARCAS WHERE Nfabricante = “Tabacalera Nacional” And filtro = “S” and clase = “Normal”)
  • 74.
    Sentencia DELETE Eliminafilas de una tabla de Base de Datos DELETE FROM {table-name | view-name} [WHERE {condition} ]
  • 75.
    Sentencia DELETE Eliminartodos los fabricantes que no manufacturen cigarrillos de clase “Ultra Light” DELETE FROM FABRICANTES WHERE Nfabricante NOT IN (SELECT DISTINCT Nfabricante FROM MARCAS WHERE marca IN (SELECT marca FROM CIGARRILLOS WHERE clase = “Ultra Light”))

Notas del editor

  • #2 Lenguaje SQL - I 26 de abril de 2011 UPC-Ing. Sistemas
  • #4 Lenguaje SQL - I 26 de abril de 2011 UPC-Ing. Sistemas
  • #22 Lenguaje SQL - I 26 de abril de 2011 UPC-Ing. Sistemas
  • #26 Lenguaje SQL - I 26 de abril de 2011 UPC-Ing. Sistemas
  • #27 Lenguaje SQL - I 26 de abril de 2011 UPC-Ing. Sistemas
  • #32 Lenguaje SQL - I 26 de abril de 2011 UPC-Ing. Sistemas
  • #33 Lenguaje SQL - I 26 de abril de 2011 UPC-Ing. Sistemas
  • #35 Lenguaje SQL - I 26 de abril de 2011 UPC-Ing. Sistemas
  • #71 Lenguaje SQL - I 26 de abril de 2011 UPC-Ing. Sistemas
  • #73 Lenguaje SQL - I 26 de abril de 2011 UPC-Ing. Sistemas
  • #75 Lenguaje SQL - I 26 de abril de 2011 UPC-Ing. Sistemas
  • #76 Lenguaje SQL - I 26 de abril de 2011 UPC-Ing. Sistemas