Académique Documents
Professionnel Documents
Culture Documents
Disear conceptualmente la base de datos, de acuerdo a los requerimientos del cliente, respetando los principios del diseo de bases de datos, aplicando criterios de calidad aplicando normalizacin y optimizacin por medio de llaves.
Modelamiento de datos
Operan con tcnicas de modelamiento de datos para la construccin de diferentes tipos de Bases de datos.
APRENDIZAJES
Qu es el SQL ?
Sublenguajes de S.Q.L. Sentencia SQL Crear BD de Prueba
SQL
Qu es el SQL ?
El SQL (Structured query language), lenguaje de consulta estructurado, es un lenguaje surgido de un proyecto de investigacin de IBM para el acceso a bases de datos relacionales. Actualmente se ha convertido en un estndar de lenguaje de bases de datos, y la mayora de los sistemas de bases de datos lo soportan, desde sistemas para ordenadores personales, hasta grandes ordenadores. A partir del estndar cada sistema ha desarrollado su propio SQL.
SQL
Sublenguajes de S.Q.L.
DDL.: El lenguaje de definicin de datos (Data Definition Language), es el que se encarga de la modificacin de la estructura de los objetos de la base de datos. Existen cuatro operaciones bsicas: CREATE, ALTER, DROP y TRUNCATE.
DML.: Un lenguaje de manipulacin de datos (Data Manipulation Language), es un lenguaje proporcionado por el sistema de gestin de base de datos que permite a los usuarios llevar a cabo las tareas de consulta o manipulacin de los datos, organizados por el modelo de datos adecuado. SELECT, UPDATE, INSERT, DELETE.
SQL
Sublenguajes de S.Q.L.
DCL. El Lenguaje de control de datos (Data Control Language), posibilita tareas que tienen que ver ms con los datos que con la realidad que ellos representan. Estn relacionados con asignacin de privilegios (GRANT y REVOKE) y con el funcionamiento de las transacciones (COMMIT y ROLLBACK)
SQL
Sentencia SQL
Es como una frase (escrita en ingls ) con la que decimos lo que queremos obtener y de donde obtenerlo.
Empiezan con un verbo (palabra reservada que indica la accin a realizar) Seguido del resto de clusulas que varia segn el verbo utilizado Hay clusulas Obligatorias y opcionales
SQL
FROM
tabla
WHERE
Condicin de bsqueda
SQL - SELECT
SQL - SELECT
Consultas Simples
SELECT ALL DISTINCT tabla. tabla. Campo/Columna , AS alias *
FROM
tabla
AS alias
WHERE ORDER BY
SQL - SELECT
Ejemplo SELECT
SELECT ALL col1,col2,col3 FROM mitabla
SQL - SELECT
Consultas Simples
Ventajas de la Utilizacin del *
SQL - SELECT
SQL - SELECT
ORDER BY
Ordenar las filas del resultado de la consulta.
SQL - SELECT
SELECT nombre, oficina, contrato FROM empleados ORDER BY oficina SELECT nombre, numemp, contrato FROM empleados ORDER BY contrato DESC SELECT region, ciudad, (ventas - objetivo) AS superavit FROM oficinas ORDER BY region, 3 DESC
SQL - SELECT
DISTINCT / ALL
DISTINCT eliminan del resultado las repeticiones de filas.
SQL - SELECT
WHERE
Selecciona nicamente las filas que cumplan la condicin de seleccin especificada. Los valores nulos (NULL) no se incluyen. Operadores validos NOT (no) AND (y) y OR (). SELECT nombre FROM empleados WHERE oficina = 12 SELECT nombre FROM empleados WHERE oficina = 12 AND edad > 30
SQL - SELECT
Test de comparacin.
Test de rango. Test de pertenencia a un conjunto. Test de valor nulo. Test de correspondencia con patrn.
SQL - SELECT
SQL - SELECT
SELECT numemp, nombre FROM empleados WHERE ventas BETWEEN 100000 AND 500000
SELECT numemp, nombre FROM empleados WHERE (ventas >= 100000) AND (ventas <= 500000)
SQL - SELECT
SQL - SELECT
Una condicin de seleccin puede dar como resultado el valor verdadero TRUE, falso FALSE o nulo NULL.
SELECT oficina, ciudad FROM oficinas WHERE dir IS NULL SELECT numemp, nombre FROM empleados WHERE oficina IS NOT NULL
SQL - SELECT
Se utiliza cuando queremos utilizar caracteres comodines para formar el valor con el comparar.
SELECT numemp, nombre FROM empleados WHERE nombre LIKE 'Luis%' SELECT numemp, nombre FROM empleados WHERE nombre LIKE '%Luis%' SELECT numemp, nombre FROM empleados WHERE nombre LIKE _a%'
SQL - SELECT
WHERE - LIKE
Comodines en Access
Tipo de coincidencia Varios caracteres Carcter especial Varios caracteres Un solo carcter Un solo dgito Rango caracteres Distinto dgito de Modelo Planteado 'a*a' 'a[*]a' 'ab*' 'a?a' 'a#a' de '[a-z]' '[!a-z]' 'a*a' 'abcdefg', 'abc' 'aaa', 'a3a', 'aBa' 'a0a', 'a1a', 'a2a' 'f', 'p', 'j' '9', '&', '%' 'A', 'a', '&', '~' 'An9', 'az0', 'a99' Coincide 'aa', 'aBa', 'aBBBa' No coincide 'aBC' 'aaa' 'cab', 'aab' 'aBBBa' 'aaa', 'a10a' '2', '&' 'b', 'a' '0', '1', '9' 'abc', 'aj0'
Fuera de un rango
un '[!0-9]' 'a[!b-m]#'
Combinada
SQL - SELECT
WHERE - LIKE
Comodines en SQL Server
Ejemplo LIKE 'A%' Descripcin Todo lo que comience por A
LIKE '_NG'
LIKE '[AF]%' LIKE '[A-F]%' LIKE '[A^B]%'
En determinado motores de bases de datos, esta clusula, no reconoce el asterisco como carcter comodn y hay que sustituirlo por el carcter tanto por ciento (%).
Union
Dos tablas con las mismas columnas y queremos obtener una nueva tabla con las filas de la primera y las filas de la segunda. Deja los valores duplicados fuera del resultado Ejemplo juntar registros histricos con los registros actuales.
SELECT idfab, idproducto FROM productos UNION SELECT fab, producto FROM productos_historico
Union - Consideraciones
Las dos tablas/consultas deben tener el mismo nmero de columnas pero las columnas pueden llamarse de diferente forma y ser de tipos de datos distintos. Las columnas del resultado se llaman como las de la primera tablas/consulta.
Por defecto la unin no incluye filas repetidas, si alguna fila est en las dos tablas, slo aparece una vez en el resultado.
Si queremos que aparezcan todas las filas incluso las repeticiones de filas, incluimos la palabra ALL (todo en ingls).
Union - Consideraciones
El empleo de ALL tienen una ventaja, la consulta se ejecutar ms rpidamente.
Se puede unir ms de dos tablas, para ello despus de la segunda consulta repetimos la palabra UNION ... y as sucesivamente. Tambin podemos indicar que queremos el resultado ordenado por algn criterio, en este caso se incluye la clusula ORDER BY. La clusula ORDER BY se escribe despus de la ltima consulta, al final de la sentencia; se deben de utilizar los nombres de columna de la primera consulta ya que son los que se van a utilizar para nombrar las columnas del resultado.
Composicin de tablas
Consiste en concatenar filas de una tabla con filas de otra.
Obtenemos una tabla con la unin de las Columnas de la primera y segunda tabla. Obtenemos una tabla con la concatenacin de las Filas de la primera y segunda tabla.
Composicin de tablas
Permite obtener una fila con datos de las dos tablas
Composicin de tablas
Producto Cartesiano. Son todas las posibles concatenaciones de filas de la primera tabla con filas de la segunda tabla.
El producto cartesiano se indica poniendo en la FROM las tablas que queremos componer separadas por comas, podemos obtener as el producto cartesiano de dos, tres, o ms tablas.
Composicin de tablas
Producto Cartesiano.
Hay que tener en cuenta que el producto cartesiano obtiene todas las posibles combinaciones de filas por lo tanto si tenemos dos tablas de 100 registros cada una, el resultado tendr 100x100 filas.
Se puede componer una tabla consigo misma, es obligatorio utilizar un alias por lo menos para una de las dos. Se puede acotar la consulta utilizando columnas de emparejamiento.
Composicin de tablas
INNER JOIN.
Composicin de tablas
INNER JOIN.
FROM Tabla1 INNER JOIN Tabla2 ON Tabla1.col1 Comp. Tabla2.col2
Tabla1 y Tabla2 son especificaciones de tabla (nombre de tabla con alias o no), de las tablas cuyos registros se van a combinar. Pueden ser las dos la misma tabla, en este caso es obligatorio definir al menos un alias de tabla. col1, col2 son las columnas de emparejamiento. Observar que dentro de la clusula ON los nombres de columna deben ser nombres cualificados (llevan delante el nombre de la tabla y un punto).
Composicin de tablas
INNER JOIN.
FROM Tabla1 INNER JOIN Tabla2 ON Tabla1.col1 Comp. Tabla2.col2
Las columnas de emparejamiento deben contener la misma clase de datos, las dos de tipo texto, de tipo fecha etc... los campos numricos deben ser de tipos similares. Por ejemplo, se puede combinar campos AutoNumrico y Long puesto que son tipos similares, sin embargo, no se puede combinar campos de tipo Simple y Doble. Adems las columnas no pueden ser de tipo Memo ni OLE. comp representa cualquier operador de comparacin ( =, <, >, <=, >=, o <> ) y se utiliza para establecer la condicin de emparejamiento.
Composicin de tablas
INNER JOIN.
FROM Tabla1 INNER JOIN Tabla2 ON Tabla1.col1 Comp. Tabla2.col2
Se pueden definir varias condiciones de emparejamiento unidas por los operadores AND y OR poniendo cada condicin entre parntesis.
SELECT * FROM pedidos INNER JOIN productos ON (pedidos.fab = productos.idfab) AND (pedidos.producto = productos.idproducto)
Composicin de tablas
INNER JOIN.
Se pueden combinar ms de dos tablas. En este caso hay que sustituir en la sintaxis una tabla por un INNER JOIN completo.
SELECT * FROM (pedidos INNER JOIN clientes ON pedidos.clie = clientes.numclie) INNER JOIN empleados ON pedidos.rep = empleados.numemp
Composicin de tablas
INNER JOIN.
SELECT * FROM clientes INNER JOIN (pedidos INNER JOIN empleados ON pedidos.rep = empleados.numemp) ON pedidos.clie = clientes.numclie
Composicin de tablas
LEFT JOIN y RIGHT JOIN.
Una composicin interna slo obtienen las filas que tienen al menos una fila de la otra tabla que cumpla la condicin
FROM Tabla1
LEFT JOIN Tabla2 ON Tabla1.col1 Comp. Tabla2.col2
Composicin de tablas
LEFT JOIN y RIGHT JOIN. Observe que pasa con las siguientes consultas
SELECT empleados.*,ciudad FROM empleados, oficinas WHERE empleados.oficina = oficinas.oficina SELECT empleados.*, ciudad FROM empleados INNER JOIN oficinas ON empleados.oficina = oficinas.oficina SELECT * FROM empleados LEFT JOIN oficinas ON empleados.oficina = oficinas.oficina SELECT * FROM empleados RIGHT JOIN oficinas ON empleados.oficina = oficinas.oficina
Composicin de tablas
LEFT JOIN o RIGHT JOIN se puede anidar dentro de una operacin INNER JOIN. INNER JOIN no se puede anidar dentro de LEFT JOIN o RIGHT JOIN.
Composicin de tablas
SELECT * FROM clientes INNER JOIN (empleados LEFT JOIN oficinas ON empleados.oficina = oficinas.oficina) ON clientes.repclie = empleados.numclie
Obtener los datos de la oficina de luego aadimos los clientes de cada obtenemos los clientes que tienen asignado y los datos de la oficina asignado.
Si hubiramos puesto INNER en vez de LEFT no saldran los clientes que tienen el empleado 110
Composicin de tablas
SINTAXIS
SELECT lista de seleccin
FROM
Origen de datos
WHERE
Condicin de seleccin
GROUP BY
Columnas de agrupacin
HAVING ORDER BY
Condicin de seleccin
Columna de ordenacin ;
FUNCIONES DE COLUMNAS
SUM() AVG() MIN() MAX() COUNT(nb columna) COUNT(*)
SELECT SUM(ventas) FROM oficinas
GROUP BY
Para obtener subtotales
GROUP BY
Una columna de agrupacin no puede ser de tipo memo u OLE.
La columna de agrupacin se puede indicar mediante un nombre de columna o cualquier expresin vlida basada en una columna pero no se pueden utilizar los alias de campo.
SELECT importe/cant , SUM(importe) FROM pedidos GROUP BY importe/cant Est permitido SELECT importe/cant AS precio, SUM(importe) FROM pedidos GROUP BY precio No est permitido
GROUP BY
Queremos obtener la suma de las ventas de las oficinas agrupadas por regin y ciudad. Qu Query nos sirve?
HAVING
Nos permite seleccionar filas de la tabla resultante de una consulta de resumen. Queremos saber las oficinas con un promedio de ventas de sus empleados mayor que 500.000.
SELECT oficina FROM empleados GROUP BY oficina HAVING AVG(ventas) > 500000
RESUMEN
Cmo se ejecuta internamente una consulta de resumen?
1. Primero se forma la tabla origen de datos segn la clusula FROM, 2. Se seleccionan del origen de datos las filas segn la clusula WHERE, 3. Se forman los grupos de filas segn la clusula GROUP BY, 4. Por cada grupo se obtiene una fila en la tabla resultante con los valores que aparecen en las clusulas GROUP BY, HAVING y en la lista de seleccin, 5. Se seleccionan de la tabla resultante las filas segn la clusula HAVING, 6. Se eliminan de la tabla resultante las columnas que no aparecen en la lista de seleccin, 7. Se ordenan las filas de la tabla resultante segn la clusula ORDER BY
RESUMEN
Una consulta se convierte en consulta de resumen en cuanto aparece GROUP BY, HAVING o una funcin de columna En una consulta de resumen, la lista de seleccin y la clusula HAVING slo pueden contener valores constantes funciones de columna columnas de agrupacin (columnas que aparecen en la clusula GROUP BY) o cualquier expresin basada en las anteriores.
SQL SUBCONSULTA
SQL SUBCONSULTA
EJEMPLOS
SELECT numemp, nombre, (SELECT MIN(fechapedido) FROM pedidos WHERE rep = numemp) FROM empleados; SELECT numemp, nombre FROM empleados WHERE numemp = (SELECT rep FROM pedidos WHERE clie = (SELECT numclie FROM clientes WHERE nombre = 'Julia Antequera')) SELECT numemp, nombre FROM empleados WHERE contrato = (SELECT MIN(fechapedido) FROM pedidos)
SQL SUBCONSULTA
EJEMPLOS
SELECT oficina, ciudad FROM oficinas WHERE objetivo > (SELECT SUM(ventas) FROM empleados WHERE empleados.oficina = oficinas.oficina) SELECT oficina, ciudad FROM oficinas WHERE objetivo > ANY (SELECT SUM(cuota) FROM empleados GROUP BY oficina)
SELECT oficina, ciudad FROM oficinas WHERE objetivo > ALL (SELECT SUM(cuota) FROM empleados GROUP BY oficina)
SQL SUBCONSULTA
EJEMPLOS
SELECT numemp, nombre, oficina FROM empleados WHERE oficina IN (SELECT oficina FROM oficinas WHERE region = 'este') SELECT numemp, nombre, oficina FROM empleados WHERE EXISTS (SELECT * FROM oficinas WHERE region = 'este' AND empleados.oficina = oficinas.oficina)
Las condiciones asociadas a las subconsultas son las siguientes: el test de comparacin con subconsulta el test ANY Tarea Investigar el test ALL Condiciones el test IN el test EXISTS
INSERT INTO...VALUES
INSERT INTO Destino VALUES
NbColumn ,
);
Inserta una sola fila Los registros se agregan siempre al final de la tabla. Destino es el nombre de la tabla La palabra reservada VALUES se puede sustituir por la palabra SELECT A continuacin de la palabra VALUES, entre parntesis se escriben los valores que queremos aadir Cuando la tabla tiene una columna de tipo contador (AutoNumber), lo normal es no asignar valor a esa columna
( NbColumn ) ,
SELECT
INSERT INTO empleados (numemp, oficina, nombre, titulo, cuota, contrato, ventas) VALUES (200, 30, 'Juan Lpez', 'rep ventas',350000, '06/23/01',0)
INSERT INTO...VALUES
Ventajas de utilizar una lista de columnas La sentencia queda ms fcil de interpretar
Nos aseguramos que el valor lo asignamos a la columna que queremos. No pasara nada si cambia el orden de las columnas en la tabla si se aade una nueva columna a la tabla no dara error y en la nueva columna se insertara el valor predeterminado.
INSERT INTO...VALUES
Errores que se pueden producir Si la tabla de destino tiene clave principal y en ese campo intentamos no asignar valor, asignar el valor nulo o un valor que ya existe en la tabla, el motor de base de datos no aade la fila y da un mensaje de error de 'infracciones de clave'.
Si tenemos definido un ndice nico (sin duplicados) e intentamos asignar un valor que ya existe en la tabla tambin devuelve el mismo error. Si la tabla est relacionada con otra, se seguirn las reglas de integridad referencial.
( NbColumn ) ,
La tabla destino de la sentencia INSERT no puede aparecer en la clusula FROM de la consulta o de ninguna subconsulta que sta tenga. Esto prohibe insertar parte de una tabla en s misma.
La consulta no puede ser la UNION de varias sentencias SELECT diferentes, El resultado de la consulta debe contener el mismo nmero de columnas que las indicadas para insertar y los tipos de datos deben ser compatibles columna a columna.
Tablas con la misma estructura. INSERT INTO repres SELECT * FROM empleados WHERE titulo = 'rep ventas' Tablas con distinta estructura.
INSERT INTO repres SELECT numemp, oficina, nombre FROM empleados WHERE titulo = 'rep ventas'
INSERT INTO repres (numemp, oficinarep, nombrerep) SELECT numemp, oficina, nombre FROM empleados WHERE titulo = 'rep ventas'
FROM
Origen de datos
Esta sentencia inserta filas creando en ese momento la tabla donde se insertan las filas. Se suele utilizar para guardar en una tabla el resultado de una SELECT o hacer un respaldo de datos no de estructura. Las columnas de la nueva tabla tendrn el mismo tipo y tamao que las columnas origen no se transfiere ninguna otra propiedad del campo o de la tabla como por ejemplo las claves e ndices.
SELECT * INTO t2 FROM empleados
WHERE
UPDATE empleados SET ventas = 0 WHERE oficina = 12; UPDATE oficinas INNER JOIN empleados ON oficinas.oficina = empleados.oficina SET cuota=objetivo*0.01;
DELETE * FROM pedidos WHERE clie IN (SELECT numclie FROM clientes WHERE nombre = 'Julian Lpez'); DELETE pedidos.* FROM pedidos INNER JOIN clientes ON pedidos.clie = clientes.numclie WHERE nombre = 'Julian Lpez';
DELETE * FROM pedidos; o DELETE FROM pedidos; Borra todas las filas de pedidos.
CREATE TABLE
La sentencia CREATE TABLE sirve para crear la estructura de una tabla no para rellenarla con datos.
CREATE TABLE pedidos ( codigo numeric(11) identity, idfab varchar(10) NULL, idproducto varchar(10) NULL, numemp numeric(11) NOT NULL, numclie numeric(11) NULL, numpedido int NOT NULL default 0, fechapedido datetime NULL default NULL, cant int NULL default 0, importe int NULL default NULL, CONSTRAINT PK_pedidos PRIMARY KEY nonclustered (codigo), CONSTRAINT FK_productos_idfab FOREIGN KEY (idfab) REFERENCES productos(idfab) )
ALTER TABLE
La sentencia ALTER TABLE sirve para modificar la estructura de una tabla que ya existe.
ADD (aade)
ALTER (modifica)
DROP (elimina)
COLUMN (columna)
CONSTRAINT (restriccin).
ALTER TABLE
ALTER TABLE tab1 ADD COLUMN col3 integer NOT NULL CONSTRAINT c1 UNIQUE
ALTER TABLE tab1 ADD col3 integer ALTER TABLE tab1 ADD CONSTRAINT c1 UNIQUE (col3) ALTER TABLE tab1 DROP COLUMN col3 ALTER TABLE tab1 DROP col3
DROP TABLE
La sentencia DROP TABLE sirve para eliminar una tabla.
DROP TABLE tab1
CREATE INDEX
DROP INDEX
DROP INDEX ind1 ON clientes
FIN SQL