You are on page 1of 103

Presentacin:

SQL SERVER 7.0


Expositor:Lic.Fabin Torres Ros

Bienvenidos

Frases:
Vale mas el Triunfar, que el ser persistente

Como Controlas algo que no Puedes Medir

Objetivo:
Conocer los diferentes enfoques que tiene el manejo de las Bases Datos en SQL Server asi como su funcionalidad tcnica(Adminstracin,Implementacin y Datawarehouse) y las diversas solucines que se pueden ofrecer en un marco de negocios.

Historia
La historia de SQL (que se pronuncia deletreando en ingls las letras que lo componen, es decir "ese-cu-ele" y no "siquel" como se oye a menudo) empieza en 1974 con la definicin, por parte de Donald Chamberlin y de otras personas que trabajaban en los laboratorios de investigacin de IBM, de un lenguaje para la especificacin de las caractersticas de las bases de datos que adoptaban el modelo relacional. Este lenguaje se llamaba SEQUEL (Structured English Query Language) y se implement en un prototipo llamado SEQUEL-XRM entre 1974 y 1975. Las experimentaciones con ese prototipo condujeron, entre 1976 y 1977, a una revisin del lenguaje (SEQUEL/2), que a partir de ese momento cambi de nombre por motivos legales, convirtindose en SQL.

Historia
En 1986, el ANSI adopt SQL (sustancialmente adopt el dialecto SQL de IBM) como estndar para los lenguajes relacionales y en 1987 se transfom en estndar ISO. Esta versin del estndar va con el nombre de SQL/86. En los aos siguientes, ste ha sufrido diversas revisiones que han conducido primero a la versin SQL/89 y, posteriormente, a la actual SQL/92. Actualmente, est en marcha un proceso de revisin del lenguaje por parte de los comits ANSI e ISO, que debera terminar en la definicin de lo que en este momento se conoce como SQL3. Las caractersticas principales de esta nueva encarnacin de SQL deberan ser su transformacin en un lenguaje stand-alone (mientras ahora se usa como lenguaje hospedado en otros lenguajes) y la introduccin de nuevos tipos de datos ms complejos que permitan, por ejemplo, el tratamiento de datos multimediales.

Introduccin
La explosiva popularidad de SQL es una de las tendencias mas importantes de la industria informatica actual.En los ultimos aos SQL,se ha convertido en el lenguaje estandar de Bases de Datos.Juega un papel importante en las arquitecturas de Bases de Datos de los principales proveedores de computadoras Que es exactamente SQL?por qu es importante? qu es lo que puedo hacer y como funciona?Es real mente un Estandar?

Introduccin
Structure Query Language (SQL)
> > > > MSDB del nuevo milenio. Administracion es sencilla y poderosa Componentes muy poderosos como DTS Es un lenguaje orientado a conjuntos(Sus resultados son un conjunto de datos) > Esta basado en ANSI-SQL(Es la evolucin de las diversas formas que se ha ido desarrollando.

Ventajas y Caracteristicas
Caracteristicas y tendencias en el mercado
> > > > > > > Independencia de Proveedores Portabilidad entre sistemas informaticos Estandares de SQL Fundamento Relacional Consultas ad hoc interactivas Definicion dinamica de datos Acuerdos con Microsoft (ODBC)

Conceptos
Base de Datos es un conjunto de objetos que estn organizados para un uso determinado Tablas se utiliza para almacenar datos. Las cuales estn formadas por campos que almacenan diferente tipos de datos; y son el principal elemento de cualquier base de datos ya que todos los dems objetos se crean a partir de stas. Campos son los elementos que forman una tabla en los cuales se almacenan los diferentes tipos de datos.

Conceptos
Registro es el conjunto de campos. Clave Principal es aquel campo campos que identifican de manera nica cada registro de una tabla. Consultas se utiliza para filtrar datos de una tabla y/o relacionar varias tablas a la vez. Relaciones asociacin establecida entre campos comunes de dos tablas.

Conceptos
Relaciones asocion establecida entre campos comunes de dos tablas. Tipos de Relaciones: Uno a Uno: cada registro de una tabla solo puede tener una
correspondencia en la segunda y viceversa.

Uno a Muchos: un registro de una tabla puede tener ms de un


registro que coincida con la otra tabla pero la otra tabla slo puede tener un registro coincidente con la primera.

Muchos a Muchos: un registro de una tabla puede tener ms de un


registro coincidente en la otra tabla. Solo podemos crear este tipo de relacin si tenemos una tercera tabla (llamada la tabla de unin).

Administracin
Esa ingrata tarea? Gestin de seguridad Portatibilidad Configuracin automtica TCO(Total cost of ownership) Arquitectura distribuida Planes de Mantenimiento en B.D.(DMPW) Profiler SQL Server Web Assistant)

Conociendo el Entorno de SQL

Consola

Query Analyzer

Query Analyzer

Query Analyzer

Servicios Vinculados

Estructura de BD
Clientes
Numero_cliente (Int) Nombre Char(50) Representante_Cliente (Int) Limite_Credito (Int)

Empleados
Numero_Empleado (Int) Nombre Char(50) Edad (Int) Numero_Oficina(Int) Titulo Char(30) Fecha_Contrato (Datetime) Numero_jefe(Int) Couta(Int) Ventas(Int)

Oficinas
Numero_Oficina(Int) CiudadChar(30) RegionChar(20) Numero_jefe(Int) Objetivo(Int) Ventas(int)

Pedidos
Codigo(Int,Identity) Numero_Pedido(Int) Fecha_Pedido(DateTime) Numero_cliente(Int) Numero_Empleado(Int) Id_Producto Char(30) Id_Fabricante Char(20) Cantidad(Int) Importe(Int)

Productos
Id_Fabricante Char(30) Id_Producto Char(20) Descripcion Char(30) Precio (Int) Existencias(Int)

Jefes
Numero_jefe(Int) Nombre Char(40) Zona Char(15)

Estructura de BD
Clientes Empleados
Numero_Empleado Nombre Nombre Edad Representante_Cliente Numero_Oficina Limite_Credito Titulo Fecha_Contrato Numero_jefe Couta Ventas Numero_cliente

Oficinas
Numero_Oficina Ciudad Region Numero_jefe Objetivo Ventas

Pedidos
Codigo Numero_Pedido Fecha_Pedido Numero_cliente Numero_Empleado Id_Producto Producto Cantidad Importe

Productos
Id_Fabricante Id_Producto Descripcion Precio Existencias NumOficina

Jefes
Numero_jefe Nombre Zona

Administracin(Workshop)
Crear B.D.a travez de scripts Generar tablas que formaran la B.D. Poblar las tablas ya generadas Generar consultas de prueba sobre las tablas Realizar respaldo de la B.D. Borrar la B.D. Realizar un Restore de la B.D.

Consultas Simples

SQL es una abreviacin de Structured Query Languaje (Lenguaje Estructurado de Consulta) . SQL es un lenguaje informtico que se utiliza para interactuar con una Base de Datos.

______ ___ Peticin SQL

SQL
______ ______ Datos Sistema Informatico

Base de Datos

Tipos de Operadores Aritmetico * Multiplicacion / Division Resta + Suma Comparacion = Igual > Mayor que < menor que

<> Diferente >= Mayor Igual <= Menor Igual

Tipos de Operadores Sting Concatenacion + Solo para String Logicos AND OR NOT

Tipos de Datos Character Char ( ) Varchar ( ) Numeric Numeric ( p, s) Approximate Numeric Long Date and Time Datetime

Tipos de Datos Integer Int Smallint Text Text Monetary Money

Crear Comentarios -/* */ Comilla Simple Dos rayas continuas Diagonal Asterisco

Algunas Funciones
Algunas Funciones que veremos: Distinct Between Count Datetime(Year,Month,Day) asi como Datediff Order by In, not in Like Convert Top

Consultas Simples
Objetivo
Empezaremos por estudiar la sentencia SELECT, que permite recuperar datos de una o varias tablas. La sentencia SELECT es con mucho la ms compleja y potente de las sentencias SQL. Empezaremos por ver las consultas ms simples, basadas en una sola tabla El resultado de la consulta es una tabla lgica, porque no se guarda en el disco sino que est en memoria y cada vez que ejecutamos la consulta se vuelve a calcular.

Consultas Simples

SELECT * FROM tabla SELECT campo1, campo 2 FROM tabla


Ejemplos : SELECT * FROM Oficinas Lista todos los campos de la tabla Oficinas SELECT id_fabricante, id_producto, descripcion, precio FROM productos Lista una tarifa de productos

Consultas Simples

SELECT * FROM [Ventas A] SELECT [Credito total], oficina FROM oficinas

NOTA: Cuando el nombre de la columna o de la tabla contiene espacios en blanco, hay que poner el nombre entre corchetes [ ] y adems el nmero de espacios en blanco debe coincidir. Por ejemplo [codigo de cliente] no es lo mismo que [ codigo de cliente]

Consultas Simples

Alias a una tabla, es como un segundo nombre que asignamos a la tabla, y esta se deber nombrar utilizando ese nombre y no su nombre real, adems ese nombre slo es vlido en la consulta donde se define. La palabra AS que se puede poner delante del nombre de alias es opcional.

SELECT A.* FROM tabla A SELECT A.campo1, A.campo 2 FROM tabla A

Consultas Simples

Ejemplo: SELECT A. Id_fabricante, A. Id_producto, A.descripcion FROM productos A

Consultas Simples

Alias de columna. Cuando se visualiza el resultado de la consulta, normalmente las columnas toman el nombre que tiene la columna en la tabla, si queremos cambiar ese nombre lo podemos hacer definiendo un alias de columna mediante la clusula AS ser el nombre que aparecer como ttulo de la columna.

SELECT A.campo1 as Columna1, A.campo 2 as Columna2 FROM tabla A

Consultas Simples

Ejemplo: SELECT A. Id_fabricante AS fabricantes, A. Id_producto, A.descripcion FROM productos A Como ttulo de la primera columna aparecer fabricantes en vez de id_fabricante

Consultas Simples

Columnas calculadas Adems de las columnas que provienen directamente de la tabla origen, una consulta SQL puede incluir columnas calculadas cuyos valores se calculan a partir de los valores de los datos almacenados Ejemplos: SELECT ciudad, regin, (ventas-objetivo) AS operacion FROM oficinas Lista la ciudad, regin y la operacion de cada oficina. SELECT id_fabricante, id_producto, descripcion, (existencias * precio) AS valoracion FROM productos De cada producto obtiene su fabricante, id_producto, su descripcin y el valor del inventario

Consultas Simples

Columnas calculadas Adems de las columnas que provienen directamente de la tabla origen, una consulta SQL puede incluir columnas calculadas cuyos valores se calculan a partir de los valores de los datos almacenados Ejemplos: SELECT nombre, MONTH(fecha_contrato), YEAR(fecha_contrato) FROM repventas Lista el nombre, mes y ao del contrato de cada vendedor. La funcin MONTH() devuelve el mes de una fecha La funcin YEAR() devuelve el ao de una fecha SELECT region, 'tiene ventas de ' as ventas, ventas FROM oficinas Listar las ventas en cada oficina con el formato: 22 tiene ventas de 186,042.00 ptas

Consultas Simples

Ordenacin de las filas - ORDER BY Con esta clusula se altera el orden de visualizacin de las filas de la tabla pero en ningn caso se modifica el orden de las filas dentro de la tabla. La tabla no se modifica Ejemplo: SELECT nombre, fecha_contrato FROM empleados ORDER By nombre es equivalente a SELECT nombre, oficina, contrato FROM empleados ORDER BY 2

Consultas Simples

Ordenacin de las filas - ORDER BY Por defecto el orden ser ascendente (ASC) (de menor a mayor si el campo es numrico, por orden alfabtico si el campo es de tipo texto, de anterior a posterior si el campo es de tipo fecha/hora, etc... Ejemplos: SELECT nombre, numero_empleado, numero_jefe FROM empleados ORDER BY nombre Obtiene un listado alfabtico de los empleados. SELECT nombre, numemp, fecha_contrato FROM empleados ORDER BY fecha_contrato Obtiene un listado de los empleados por orden de antiguedad en la empresa (los de ms antiguedad aparecen primero).

Consultas Simples

Ejemplos Cont: SELECT nombre, numero_empleado,ventas FROM empleados ORDER BY ventas Obtiene un listado de los empleados ordenados por volmen de ventas sacndo los de menores ventas primero

Consultas Simples

Ordenacin de las filas - ORDER BY Si queremos podemos alterar ese orden utilizando la clusula DESC (DESCendente), en este caso el orden ser el inverso al ASC. (ASCendente) Ejemplos: SELECT nombre, numero_empleado, Fecha_contrato FROM empleados ORDER BY Fecha_contrato DESC Obtiene un listado de los empleados por orden de antiguedad en la empresa empezando por los ms recientemente incorporados. SELECT nombre, numero_empleado,ventas FROM empleados ORDER BY ventas ASC Obtiene un listado de los empleados ordenados por volmen de ventas sacando primero los de mayores ventas

Consultas Simples

La clusula DISTINCT Al incluir la clusula DISTINCT en la SELECT, se eliminan del resultado las repeticiones de filas Ejemplos: SELECT DISTINCT numero_jefe FROM oficinas En este caso el valor 108 aparecer una sola vez ya que le decimos que liste los distintos valores de directores.

Consultas Simples

Las clusulas TOP La clusula TOP permite sacar las n primeras filas de la tabla origen. No elige entre valores iguales Ejemplos: SELECT TOP 2 numero_empleado, nombre FROM empleados ORDER BY fecha_contrato Lista el cdigo y nombre de los empleados ordenndolos por fecha de contrato, sacando unicamente los dos primeros. SELECT TOP 3 numero_empleado, nombre FROM empleados ORDER BY fecha_contrato En este caso tiene que sacar los tres primeros, pero si nos fijamos en las fechas de contrato tenemos 20/10/86, 10/12/86, 01/03/87, 01/03/87, la tercera fecha es igual que la cuarta, en este caso sacar estas cuatro filas en vez de tres, y sacara todas las filas que tuviesen el mismo valor que la tercera fecha de contrato

Consultas Simples

La clusula PORCENTAJE El nmero de filas que queremos visualizar se puede expresar con un nmero entero o como un porcentaje sobre el nmero total de filas que se recuperaran sin la clusula TOP. En este ltimo caso utilizaremos la clusula TOP n PERCENT Ejemplos: SELECT TOP 20 PERCENT nombre FROM empleados ORDER BY fecha_contrato Lista el nombre de los empleados ordenndolos por fecha de contrato, sacando unicamente un 20% del total de empleados. Como tenemos 10 empleados, sacar los dos primeros, si tuviesemos 100 empleados sacara los 20 primeros

Consultas Simples

La clusula WHERE La clusula WHERE selecciona unicamente las filas que cumplan la condicin de seleccin especificada. La condicin de seleccin puede ser cualquier condicin vlida o combinacin de condiciones utilizando los operadores NOT (no) AND (y) y OR (). Ejemplos: SELECT nombre FROM empleados WHERE numero_oficina = 12 Lista el nombre de los empleados de la oficina 12. SELECT nombre FROM empleados WHERE numero_oficina = 12 AND edad > 30 Lista el nombre de los empleados de la oficina 12 que tengan ms de 30 aos. (oficina igual a 12 y edad mayor que 30)

Consultas Simples

Test de Comparacion Ejemplos: SELECT numero_empleado, nombre FROM empleados WHERE ventas > cuota Lista los empleados cuyas ventas superan su cuota SELECT numemp, nombre,fecha_contrato FROM empleados WHERE fecha_contrato = '10/20/1986 Lista los empleados contratados antes del ao 88 (cuya fecha de contrato sea anterior al 1 de enero de 1988). Ojo!!, las fechas entre almohadillas # # deben estar con el formato mes,dia,ao aunque tengamos definido otro formato para nuestras fechas.

Consultas Simples

Test de Comparacion Ejemplos: SELECT numero_empleado, nombre FROM empleados WHERE YEAR(fecha_contrato) < 1988 Este ejemplo obtiene lo mismo que el anterior pero utiliza la funcin year(). Obtiene los empleados cuyo ao de la fecha de contrato sea menor que 1988. SELECT oficina FROM oficinas WHERE ventas < objetivo * 0.8 Lista las oficinas cuyas ventas estn por debajo del 80% de su objetivo. Hay que utilizar siempre el punto decimal aunque tengamos definida la coma como separador de decimales.

Consultas Simples

Test de Comparacion Ejemplos: SELECT Numero_oficina,region FROM oficinas WHERE numero_jefe = 108 Lista las oficinas dirigidas por el empleado 108

Consultas Simples

Test de rango (BETWEEN). Examina si el valor de la expresin est comprendido entre los dos valores definidos por exp1 y exp2 Ejemplos: SELECT numero_empleado, nombre FROM empleados WHERE ventas BETWEEN 100000 AND 500000 Lista los empleados cuyas ventas estn comprendidas entre 100.000 y 500.000 SELECT numero_empleado, nombre FROM empleados WHERE (ventas >= 100000) AND (ventas <= 500000) Obtenemos lo mismo que en el ejemplo anterior. Los parntesis son opcionales

Consultas Simples

Test de pertenencia a conjunto (IN) Examina si el valor de la expresin es uno de los valores incluidos en la lista de valores Ejemplos: SELECT numero_empleado, nombre, numero_oficina FROM empleados WHERE numoficina IN (12,14,16) Lista los empleados de las oficinas 12, 14 y 16 SELECT numero_empleado, nombre FROM empleados WHERE (numero_oficina = 12 OR numero_oficina = 14 OR numero_oficina = 16) Obtenemos lo mismo que en el ejemplo anterior.

Consultas Simples

Test de valor nulo (IS NULL)

Ejemplos: SELECT numero_oficina, ciudad FROM oficinas WHERE numero_jefe IS NULL Lista las oficinas que no tienen director. SELECT numero_empleado, nombre FROM empleados WHERE numero_oficina IS NOT NULL Lista los empleados asignados a alguna oficina (los que tienen un valor en la columna oficina).

Consultas Simples

Test de correspondencia con patrn (LIKE) Se utiliza cuando queremos utilizar caracteres comodines para formar el valor con el comparar Ejemplos: Los comodines ms usados son los siguientes: % representa un carcter cualquiera * representa cero o ms caracteres # representa un dgito cualquiera (0-9) Ejemplos: SELECT numero_empleado, nombre FROM empleados WHERE nombre LIKE 'L% Lista los empleados cuyo nombre empiece por Luis (Luis seguido de cero o ms caracteres).

Consultas Simples

Ejemplos: SELECT numero_empleado, nombre FROM empleados WHERE numero_empleado LIKE '%2 Lista los empleados cuyo nombre contiene Luis, en este caso tambin saldra los empleados Jos Luis (cero o ms caracteres seguidos de LUIS y seguido de cero o ms caracteres).

Consultas Simples(Workshop)
lista de seleccin 1 Obtener una lista de todos los productos indicando para cada uno su idfab, idproducto, descripcin, precio y precio con I.V.A. incluido (es el precio anterior aumentado en un 16%). 2 De cada pedido queremos saber su nmero de pedido, fab, producto, cantidad, precio unitario e importe. 3 Listar de cada empleado su nombre, n de das que lleva trabajando en la empresa y su ao de nacimiento (suponiendo que este ao ya ha cumplido aos).

Ordenacin de filas. 4 Obtener la lista de los clientes agrupados por cdigo de representante asignado, visualizar todas la columnas de la tabla. 5 Obtener las oficinas ordenadas por orden alfabtico de regin y dentro de cada regin por ciudad, si hay ms de una oficina en la misma ciudad, aparecer primero la que tenga el nmero de oficina mayor.

6 Obtener los pedidos ordenados por fecha de pedido

Consultas Simples(Workshop)
Seleccin de filas. 7 Listar las cuatro lneas de pedido ms caras (las de mayor importe). 8 Obtener las mismas columnas que en el ejercicio 2 pero sacando unicamente las 5 lneas de pedido de menor precio unitario. 9 Listar toda la informacin de los pedidos de marzo. 10 Listar los nmeros de los empleados que tienen una oficina asignada. 11 Listar los nmeros de las oficinas que no tienen director. 12 Listar los datos de las oficinas de las regiones del norte y del este (tienen que aparecer primero las del norte y despus las del este). 13 Listar los empleados de nombre Julia. 14 Listar los productos cuyo idproducto acabe en x.

Consultas Multitabla Objetivo En este tema vamos a estudiar las consultas multitabla llamadas as porque estn basadas en ms de una tabla. El SQL soporta dos grupos de consultas multitabla: - la unin de tablas - la composicin de tablas

Consultas Multitabla

El operador UNION Como ya hemos visto en la pgina anterior, el operador UNION sirve para obtener a partir de dos tablas con las mismas columnas, una nueva tabla con las filas de la primera y las filas de la segunda.
Sintaxis: SELECT numero_empleado, nombre FROM libros UNION SELECT numero_empleado, nombre FROM libros_histotia

Consultas Multitabla

NOTA La primer consulta puede ser cualquier sentencia SELECT con la nica restriccin de que no puede contener la clusula ORDER BY. Despus de la primera consulta viene la palabra UNION y a continuacin la segunda consulta. Las dos 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 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 Si queremos ordenar la informacion la clusula ORDER BY se escribe despus de la ltima consulta, se debe de utilizar los nombres de la primer consulta

Consultas Multitabla

Ejemplo: Para ilustrar la operacin vamos a realizar el ejercicio de obtener los cdigos de los productos que tienen existencias iguales a cero o que aparezcan en pedidos del ao 90. SELECT id_fabricante,id_producto FROM productos WHERE existencias = 0 UNION ALL SELECT id_fabricante,producto FROM pedidos WHERE year(fecha_pedido) = 1990 ORDER BY id_producto

Consultas Multitabla

La composicin de tablas La composicin de tablas consiste en concatenar filas de una tabla con filas de otra. En este caso obtenemos una tabla con las columnas de la primera tabla unidas a las columnas de la segunda tabla, y las filas de la tabla resultante son concatenaciones de filas de la primera tabla con filas de la segunda tabla . Los tipos de composicin de tablas son: - El producto cartesiano - El INNER JOIN - El LEFT / RIGHT JOIN

Consultas Multitabla

El producto cartesiano El producto cartesiano es un tipo de composicin de tablas, aplicando el producto cartesiano a dos tablas se obtiene una tabla con las columnas de la primera tabla unidas a las columnas de la segunda tabla, y las filas de la tabla resultante 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 Hay que tener en cuenta que el producto cartesiano obtiene todas las posibles combinaciones Se puede componer una tabla consigo misma, en este caso es obligatorio utilizar un nombre de alias por lo menos para una de las dos.

Consultas Multitabla

Ejemplo: Combinamos todos los pedidos con todos los clientes pero luego seleccionamos los que cumplan que el cdigo de cliente de la tabla de pedidos sea igual al cdigo de cliente de la tabla de clientes, por lo tanto nos quedamos con los pedidos combinados con los datos del cliente correspondiente. SELECT * FROM pedidos, clientes WHERE pedidos.numero_cliente=clientes.numero_cliente NOTA: Las columnas que aparecen en la clusula WHERE de nuestra consulta anterior se denominan columnas de emparejamiento ya que permiten emparejar las filas de las dos tablas. Las columnas de emparejamiento no tienen por qu estar incluidas en la lista de seleccin

Consultas Multitabla

INNER JOIN Es otro tipo de composicin de tablas Ejemplo: SELECT * FROM pedidos INNER JOIN clientes ON pedidos.numero_cliente = clientes.numero_cliente Se pueden definir varias condiciones de emparejamiento unidas por los operadores AND y OR poniendo cada condicin entre parntesis Ejemplo: SELECT * FROM pedidos INNER JOIN productos ON (pedidos.id_producto = productos.id_Producto AND pedidos.id_fabricante = productos.id_fabricante)

Consultas Multitabla

El 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 Ejemplo: SELECT * FROM (pedidos INNER JOIN clientes ON pedidos.numero_cliente = clientes.numero_cliente) INNER JOIN empleados ON pedidos.numero_empleaado = empleados.numero_empleado SELECT * FROM clientes INNER JOIN (pedidos INNER JOIN empleados ON pedidos.numero_empleado = empleados.numero_empleado) ON pedidos.numero_numero_cliente = clientes.numero_cliente

Consultas Multitabla

LEFT JOIN y RIGHT JOIN Son otro tipo de composicin de tablas. Ejemplo: Queremos combinar los empleados con las oficinas para saber la ciudad de la oficina donde trabaja cada empleado Producto Cartesiano: SELECT A.*, B.ciudad FROM empleados A, oficinas B WHERE A.Numero_Oficina = B.numero_Oficina Con esta sentencia los empleados que no tienen una oficina asignada no aparecen en el resultado, en este caso el empleado110 tiene valor null en el campo de oficina motivo por el cual no aparece en el resultado

Consultas Multitabla

Pues en los casos en que queremos que tambin aparezcan las filas que no tienen una fila coincidente en la otra tabla, utilizaremos el LEFT o RIGHT JOIN LEFT JOIN Ejemplo: SELECT * FROM empleados LEFT JOIN oficinas ON empleados.Numero_Oficina =oficinas.Numero_Oficina Obtenemos una lista de los empleados con los datos de su oficina, y el empleado 110 que no tiene oficina aparece con sus datos normales y los datos de su oficina a nulos

Consultas Multitabla

RIGHT JOIN Ejemplo: SELECT * FROM empleados RIGHT JOIN oficinas ON empleados.Numero_Oficina = oficinas.Numero_Oficina Con el ejemplo anterior obtenemos una lista de los empleados con los datos de su oficina, y adems aparece una fila por cada oficina que no est asignada a ningn empleado con los datos del empleado a nulos

Consultas Multitabla

NOTA: Una operacin LEFT JOIN o RIGHT JOIN se puede anidar dentro de una operacin INNER JOIN, pero una operacin INNER JOIN no se puede anidar dentro de LEFT JOIN o RIGHT JOIN. Los anidamientos de JOIN de distinta naturaleza no funcionan siempre, a veces depende del orden en que colocamos las tablas, en estos casos lo mejor es probar y si no permite el anidamiento, cambiar el orden de las tablas ( y por tanto de los JOINs) dentro de la clusula FROM SELECT * FROM clientes INNER JOIN (empleados LEFT JOIN oficinas ON empleados.Numero_Oficina = oficinas.Numero_Oficina) ON clientes.numero_empleado = empleados.numero_empleado Combinamos empleados con oficinas para obtener los datos de la oficina de cada empleado, y luego aadimos los clientes de cada representante, as obtenemos los clientes que tienen un representante asignado y los datos de la oficina del representante asignado.

Ejemplo:

Consultas Multitabla(Workshop)
1 Listar las oficinas del este indicando para cada una de ellas su nmero, ciudad, nmeros y nombres de sus empleados. Hacer una versin en la que aparecen slo las que tienen empleados, y hacer otra en las que aparezcan las oficinas del este que no tienen empleados. 2 Listar los pedidos mostrando su nmero, importe, nombre del cliente, y el lmite de crdito del cliente correspondiente (todos los pedidos tienen cliente y representante). 3 Listar los datos de cada uno de los empleados, la ciudad y regin en donde trabaja. 4 Listar las oficinas con objetivo superior a 600.000 pts indicando para cada una de ellas el nombre de su director. 5 Listar los pedidos superiores a 25.000 pts, incluyendo el nombre del empleado que tom el pedido y el nombre del cliente que lo solicit. 6 Hallar los empleados que realizaron su primer pedido el mismo da en que fueron contratados. 7 Listar los empleados con una cuota superior a la de su jefe; para cada empleado sacar sus datos y el nmero, nombre y cuota de su jefe. 8 Listar los cdigos de los empleados que tienen una lnea de pedido superior a 10.000 ptas o que tengan una cuota inferior a 10.000 pts.

Consultas de Resumen
Las consultas de resumen introducen dos nuevas clusulas a la sentencia SELECT, la clusula GROUP BY y la clusula HAVING, son clusulas que slo se pueden utilizar en una consulta de resumen, se tienen que escribir entre la clusula WHERE y la clusula ORDER BY y tienen la siguiente sintaxis

SELECT campo1, campo2 FROM tabla WHERE campo4 = X GROUP BY campo1 HAVING campo2 > 100 ORDER BY campo1

Consultas de Resumen

Funciones de columna En la lista de seleccin de una consulta de resumen aparecen funciones de columna tambin denominadas funciones de dominio agregadas. Una funcin de columna se aplica a una columna y obtiene un valor que resume el contenido de la columna La funcin SUM() calcula la suma de los valores indicados en el argumento. Los datos que se suman deben ser de tipo numrico (entero, decimal, coma flotante o monetario...). El resultado ser del mismo tipo aunque puede tener una precisin mayor. Ejemplo: SELECT SUM(ventas) FROM oficinas Obtiene una sola fila con el resultado de sumar todos los valores de la columna ventas de la tabla oficinas.

Consultas de Resumen

Funciones de columna La funcin AVG() calcula el promedio (la media arimtica) de los valores indicados en el argumento, tambin se aplica a datos numricos, y en este caso el tipo de dato del resultado puede cambiar segn las necesidades del sistema para representar el valor del resultado Ejemplo: SELECT AVG(ventas) FROM oficinas Obtiene una sola fila con el resultado de promedio todos los valores de la columna ventas de la tabla oficinas. IMPORTANTE: Es interesante destacar que el valor nulo no equivale al valor 0, las funciones de columna no consideran los valores nulos, mientras que consideran el valor 0 como un valor, por lo tanto en las funciones AVG() los resultados no sern los mismos con valores 0 que con valores nulos

Consultas de Resumen

Funciones de columna Las funciones MIN() y MAX() determinan los valores menores y mayores respectivamente. Los valores de la columna pueden ser de tipo numrico, texto o fecha. El resultado de la funcin tendr el mismo tipo de dato que la columna. Si la columna es de tipo numrico MIN() devuelve el valor menor contenido en la columna. Si la columna es de tipo texto MIN() devuelve el primer valor en orden alfabtico. Si la columna es de tipo fecha, MIN() devuelve la fecha ms antigua y MAX() la fecha ms reciente

Consultas de Resumen

Funciones de columna La funcin COUNT(nombre_columna) cuenta el nmero de valores que hay en la columna, los datos de la columna pueden ser de cualquier tipo, y la funcin siempre devuelve un nmero entero. Si la columna contiene valores nulos esos valores no se cuentan COUNT(*) permite contar filas en vez de valores. Si la columna no contiene ningn valor nulo, COUNT(nombre_columna) y COUNT(*) devuelven el mismo resultado, mientras que si hay valores nulos en la columna, COUNT(*) cuenta tambin esos valores mientras que COUNT(nombre_columna) no los cuenta

Consultas de Resumen

Ejemplos : Cuntos empleados tenemos? SELECT COUNT(numero_empleado) FROM empleados o bien SELECT COUNT(*) FROM empleados En este caso las dos sentencias devuelen el mismo resultado ya que la columna numemp no contiene valores nulos (es la clave principal de la tabla empleados). Cuntos empleados tienen una oficina asignada? SELECT COUNT(oficina) FROM empleados Nos devuelve el nmero de valores no nulos que se encuentran en la columna oficina de la tabla empleados, por lo tanto nos dice cuntos empleados tienen una oficina asignada.

Consultas de Resumen

Funciones de columna NOTA:Se pueden combinar varias funciones de columna en una expresin pero no se pueden anidar funciones de columna, es decir: SELECT (AVG(ventas) * 3) + SUM(cuota) FROM ... es correcto SELECT AVG(SUM(ventas)) FROM ... NO es correcto, no se puede incluir una funcin de columna dentro de una funcin de columna

Consultas de Resumen

Funciones de columna Seleccin en el origen de datos. Ejemplo: Queremos saber el acumulado de ventas de los empleados de la oficina 12. SELECT SUM(ventas) FROM empleados WHERE oficina = 12 Origen mltiple. Ejemplo: Queremos obtener el importe total de ventas de todos los empleados y el mayor objetivo de las oficinas asignadas a los empleados: SELECT SUM(empleados.ventas), MAX(objetivo) FROM empleados LEFT JOIN oficinas ON empleados.oficina=oficinas.oficina

Consultas de Resumen

La clusula GROUP BY Una consulta con una clusula GROUP BY se denomina consulta agrupada ya que agrupa los datos de la tabla origen y produce una nica fila resumen por cada grupo formado. Las columnas indicadas en el GROUP BY se llaman columnas de agrupacin Ejemplo: SELECT ciudad, SUM(ventas) FROM Oficinas GROUP BY ciudad Se forma un grupo para cada ciudad, con las filas de la ciudad, y la suma se calcula sobre las filas de cada grupo. El ejemplo anterior obtiene una lista con la suma de las ventas de los empleados de cada ciudad.

Consultas de Resumen

La clusula GROUP BY NOTA: 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 Ejemplo: SELECT importe/cantidad AS precio, SUM(importe) FROM pedidos GROUP BY precio No est permitido, no se puede utilizar un alias campo. SELECT (importe/cantidad), SUM(importe) FROM pedidos GROUP BY (importe/cantidad) Est permitido, equivaldra a agrupar las lneas de pedido por precio unitario y sacar de cada precio unitario el importe total vendido.

Consultas de Resumen

La clusula GROUP BY Se pueden agrupar las filas por varias columnas, en este caso se indican las columnas separadas por una coma y en el orden de mayor a menor agrupacin. Se permite incluir en la lista de agrupacin hasta 10 columnas Ejemplo: SELECT SUM(ventas) FROM oficinas GROUP BY region,ciudad Queremos obtener la suma de las ventas de las oficinas agrupadas por region y ciudad. Se agrupa primero por regin, y dentro de cada regin por ciudad

Consultas de Resumen

La clusula GROUP BY Todas las filas que tienen valor nulo en el campo de agrupacin, pasan a formar un nico grupo. Es decir, considera el valor nulo como un valor cualquiera a efectos de agrupacin. Ejemplo: SELECT Numero_jefe, SUM(ventas) AS ventas_totales FROM Oficinas GROUP BY numero_jefe En el resultado aparece una fila con el campo NumJefe sin valor y a continuacin una cantidad en el campo ventas_totales, esta cantidad corresponde a la suma de las ventas del campo NumJefe que no tienen NumJefe asignado (campo NumJefe igual a nulo).

Consultas de Resumen

La clusula HAVING La clusula HAVING nos permite seleccionar filas de la tabla resultante de una consulta de resumen. Ejemplo: SELECT Numero_oficina, AVG(ventas) FROM empleados GROUP BY Numero_oficina HAVING AVG(ventas) > 500000 Queremos saber las oficinas con un promedio de ventas de sus empleados mayor que 500000

Las Subconsultas
Es una sentencia SELECT que aparece dentro de otra sentencia SELECT que llamaremos consulta principal Una subconsulta tiene la misma sintaxis que una sentencia SELECT normal exceptuando que aparece encerrada entre parntesis, no puede contener la clusula ORDER BY, ni puede ser la UNION de varias sentencias SELECT Cuando se ejecuta una consulta que contiene una subconsulta, la subconsulta se ejecuta por cada fila de la consulta principal

Consultas Resumen(Workshop)
1.Indica las ventas, Numero de Oficina y el nombre del empleado que el promedio de sus ventas sea mayor a 300,000 2.Indica el Total de las ventas de cada,empleado y de su numjefe 3.Queremos obtener el importe total de ventas de todos los empleados y el mayor objetivo de las oficinas asignadas a los empleados 4.Queremos obtener la suma de las ventas de las oficinas agrupadas por region y ciudad. Se agrupa primero por regin, y dentro de cada regin por ciudad

Subconsultas

Referencias externas Una referencia externa es un nombre de columna que estando en la subconsulta, no se refiere a ninguna columna de las tablas designadas en la FROM de la subconsulta sino a una columna de las tablas designadas en la FROM de la consulta principal Ejemplo: SELECT numero_empleado, nombre, (SELECT MIN(fecha_pedido) FROM pedidos WHERE rep = numero_empleado) FROM empleados; En este ejemplo la consulta principal es SELECT... FROM empleados. En esta subconsulta tenemos una referencia externa ( numemp ) es un campo de la tabla empleados (origen de la consulta principal).

Subconsultas

Anidar subconsultas Las subconsultas pueden anidarse de forma que una subconsulta aparezca en la clusula WHERE (por ejemplo) de otra subconsulta que a su vez forma parte de otra consulta principal. En la prctica, una consulta consume mucho ms tiempo y memoria cuando se incrementa el nmero de niveles de anidamiento. La consulta resulta tambin ms difcil de leer , comprender y mantener cuando contiene ms de uno o dos niveles de subconsultas.

Subconsultas

Ejemplo: SELECT numero_empleado, nombre FROM empleados WHERE numero_empleado = (SELECT numero_empleado, FROM pedidos WHERE numero_cliente = (SELECT numero_cliente FROM clientes WHERE nombre = Luis Garcia')) En este ejemplo, por cada linea de pedido se calcula la subconsulta de clientes, y esto se repite por cada empleado, en el caso de tener 10 filas de empleados y 200 filas de pedidos (tablas realmente pequeas), la subconsulta ms interna se ejecutara 2000 veces (10 x 200).

Subconsultas

Subconsulta en la clusula WHERE Se suele utilizar subconsultas en las clusulas WHERE cuando los datos que queremos visualizar estn en una tabla pero para seleccionar las filas de esa tabla necesitamos un dato que est en otra tabla. Ejemplo: SELECT numero_empleado, nombre FROM empleados WHERE fecha_contrato = (SELECT MIN(fecha_pedido) FROM pedidos) En este ejemplo listamos el nmero y nombre de los empleados cuya fecha de contrato sea igual a la primera fecha de todos los pedidos de la empresa

Actualizacin de Datos
En este tema vamos a tratar el de la actualizacin de esos datos, es decir insertar nuevas filas, borrar filas o cambiar el contenido de las filas de una tabla. INSERT INTO INSERT INTOSELECT DELETE UPDATE

Actualizacin de Datos

INSERT INTO...VALUES La insercin de nuevos datos en una tabla se realiza aadiendo filas enteras a la tabla. NOTA: Los registros se agregan siempre al final de la tabla VALUES va entre parntesis, se escriben los valores que queremos aadir. a) Estos valores se tienen que escribir de acuerdo al tipo de dato de la columna donde se van a insertar (encerrados entre comillas simples ' ' para valores de tipo texto, entre # # para valores de fecha...) b) La asignacin de valores se realiza por posicin, el primer valor lo asigna a la primera columna, el segundo valor a la segunda columna, as sucesivamente...

Actualizacin de Datos

INSERT INTO...VALUES NOTA: Cuando la tabla tiene una columna de tipo contador (AutoNumber), lo normal es no asignar valor a esa columna para que el sistema le asigne el valor que le toque segn el contador, si por el contrario queremos que la columna tenga un valor concreto, lo indicamos en la lista de valores Ejemplo: INSERT INTO empleados VALUES (200, 'Juan Lpez', 30, NULL, 'rep ventas', #06/23/01#, NULL, 350000, 0) Como no tenemos valor para los campos oficina y director (a este nuevo empleado todava no se le ha asignado director ni oficina) utilizamos la palabra reservada NULL

Actualizacin de Datos

INSERT INTO...VALUES NOTA: Cuando indicamos nombres de columnas, estos corresponden a nombres de columna de la tabla, pero no tienen por qu estar en el orden en que aparecen en la ventana diseo de la tabla, tambin se pueden omitir algunas columnas, la columnas que no se nombran tendrn por defecto el valor NULL o el valor predeterminado indicado en la ventana de diseo de tabla. Ejemplo: INSERT INTO empleados (numero_empleado,numero_oficina, nombre, titulo,cuota,fecha_contrato, ventas) VALUES (200, 30, 'Juan Lpez', 'rep ventas',350000, #06/23/01#,0) Observar que ahora hemos variado el orden de los valores y los nombres de columna no siguen el mismo orden que en la tabla origen. Lo importante es poner los valores en el mismo orden que las columnas que enunciamos. Como no enunciamos las columnas oficina y director se rellenarn con el valor nulo.

Actualizacin de Datos

INSERT INTOSELECT Aqui cada fila devuelta por la SELECT acta como la lista de valores que vimos con la INSERT...VALUES Ejemplo: Supongamos que tenemos una tabla llamada repres con la misma estructura que la tabla empleados, y queremos insertar en esa tabla los empleados que tengan como titulo rep ventas INSERT INTO repres SELECT * FROM empleados WHERE titulo = 'rep ventas' Con la SELECT obtenemos las filas correspondientes a los empleados con ttulo rep ventas,y las insertamos en la tabla repres. Como las tablas tienen la misma estructura no hace falta poner la lista de columnas y podemos emplear * en la lista de seleccin de la SELECT.

Actualizacin de Datos

INSERT INTOSELECT Ejemplo: Supongamos ahora que la tabla repres tuviese las siguientes columnas numemp, oficinarep, nombrerep. En este caso no podramos utilizar el asterisco, tendramos que poner: INSERT INTO repres SELECT numero_empleado, oficina, nombre FROM empleados WHERE titulo = 'rep ventas' O bien: INSERT INTO repres (numero_empleado, oficinarep, nombrerep) SELECT numero_empleado,numero_oficina, nombre FROM empleados WHERE titulo = 'rep ventas'

Actualizacin de Datos

SELECT INTO 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 NOTA: Las columnas de la nueva tabla tendrn el mismo tipo y tamao que las columnas origen, y se llamarn con el nombre de alias de la columna origen o en su defecto con el nombre de la columna origen, pero no se transfiere ninguna otra propiedad del campo o de la tabla Si en la base de datos hay ya una tabla del mismo nombre, el sistema nos avisa y nos pregunta si la queremos borrar. Si le contestamos que no, la SELECT no se ejecuta.

Actualizacin de Datos

INSERT INTOSELECT Ejemplo: SELECT * INTO t2 FROM t1 Esta sentencia genera una nueva tabla t2 con todas las filas de la tabla t1. Las columnas se llamarn igual que en t1 pero t2 no ser una copia exacta de t1 ya no tendr clave principal ni relaciones con las otras tablas, ni ndices si los tuviese t1 etc. Ejemplo: Queremos enviarle a un representante una tabla con todos los datos personales de sus clientes para que les pueda enviar cartas etc... SELECT numero_cliente AS codigo, nombre, direccion, telefono INTO susclientes FROM clientes WHERE repclie = '103'

Actualizacin de Datos

UPDATE La sentencia UPDATE modifica los valores de una o ms columnas en las filas seleccionadas de una o varias tablas. Ejemplo: UPDATE empleados SET ventas = 0 WHERE oficina = 12 Queremos poner a cero las ventas de los empleados de la oficina 12 Ejemplo: UPDATE clientes SET limite_credito = 0 WHERE repclie IN (SELECT numero_empleado FROM empleados WHERE oficina = 12) Queremos poner a cero el limite de credito de los clientes asignados a empleados de la oficina 12.

Actualizacin de Datos

DELETE La sentencia DELETE elimina filas de una tabla. Ejemplo: DELETE * FROM pedidos WHERE numero_cliente IN (SELECT numero_cliente FROM clientes WHERE nombre = 'Julian Lpez') Borran los pedidos del cliente Julian Lpez Ejemplo: DELETE * FROM pedidos; DELETE FROM pedidos Borra todas las filas de pedidos

Totales

COMPUTE La sentencia COMPUTE genera totales Ejemplo: USE pubs SELECT type, price, advance FROM titles ORDER BY type COMPUTE SUM(price), SUM(advance) Se obtiene el total de los campos sealados COMPUTE BY La sentencia COMPUTE BY genera totales agrupados Ejemplo: USE pubs SELECT type, price, advance FROM titles COMPUTE SUM(price), SUM(advance) BY type Se obtiene el total de los campos sealadoS agrupados por Type

Totales

Ejemplo: USE pubs SELECT type, price, advance FROM titles WHERE type in ('business','mod_cook') ORDER BY type COMPUTE SUM(price), SUM(advance) BY type COMPUTE SUM(price) Se obtienen los totales de los campos sealadoS agrupados por Type y al finalizar realiza un gran total de price

VISTAS Una vista es una tabla virtual en la base de datos cuyos contenidos estan definidos por una consulta. Ejemplo: CREATE VIEW Informacion_Vista AS SELECT title,type, AVG(price) as precio FROM titles WHERE title LIKE 'S% GROUP BY title,type Se genera una vista llamada Informacion_Vista la cual refleja la consulta sealada Lectura de una vista SELECT * FROM [Informacion_Vista] Borrar una vista DROP VIEW [Informacion_Vista]

You might also like