manuals ql

195
INTRODUCCION A SYBASE T-SQL Módulo 1 Conceptos Básicos y Términos.

Upload: corina-nohemi-meza-garcia

Post on 10-Aug-2015

143 views

Category:

Documents


14 download

TRANSCRIPT

Page 1: Manuals Ql

INTRODUCCION A SYBASE T-SQL

Módulo 1

Conceptos Básicos y Términos.

Page 2: Manuals Ql

El lenguaje SQL.

• Structured Query Languaje - Es un lenguaje de alto nivel para las bases de datos relacionales.- Fue desarrollado a finales de los 70’s.- A pesar de que la “Q” es de “Query” (consulta), el SQL permite

no solo realizar consultas, sino recuperar datos de una base de datos, adicionar datos nuevos modificarlos existentes y realizar otras funciones.

- Puede ser utilizado desde una terminal en línea.- Es una manera de recuperar y manipular datos de una base de

datos.- Puede ser utilizado en forma “Embedded SQL”, dentro de otra

aplicación.- Utilizado para Administración.

Page 3: Manuals Ql

Base de Datos.

• Una recopilación de datos que guarda relaciones entre sus elementos.

• Ejemplo:• Vendedor de libros:- Información del libro.- Información del editor.- Información del autor.

PUBS2PUBS2salessales

titlestitles

publisherspublishers

Stor_idStor_name

Stor_addresscity

Stor_idStor_name

Stor_addresscity

authorsauthors

storesstores

Page 4: Manuals Ql

Sistema Administrador de Base de Datos (DBMS)

• Software que facilita la definición de las estructuras de la base de datos permitiendo el acceso, almacenamiento y recuperación de los datos.

Distribuidor

salessalestitlestitles

publisherspublishers

Stor_idStor_name

Stor_addresscity

Stor_idStor_name

Stor_addresscity

authorsauthors

storesstoresPUBS2 “user”

StoreManager

Page 5: Manuals Ql

Terminología.

• Tabla (Relación). - Un conjunto de renglones, o un conjunto de listas de valores,

forman una relación.• Columna (Atributo). - Es equivalente a un campo de un registro. - Cada columna es un renglón dado, tiene un solo valor de datos. - Cada columna es de un solo tipo de datos.• Renglón (). - Es equivalente a un registro de un archivo. - Todos los renglones de una tabla tienen el mismo conjunto de

columnas.

Page 6: Manuals Ql

Terminología.

• Llave primaria. - Una o más columnas con valores que son únicos dentro de la

tabla y que son usados para identificar los valores de dicha tabla.

• Dominio. - Conjunto de valores válidos para una columna en particular.

Page 7: Manuals Ql

Tablas.

• Modelo relacional. - Es una base de datos relacional todos los datos están en las tablas. - Una tabla soporta datos relacionados para una clase de objetos en

particular.• Las tablas se forman de renglones y columnas. - Existe exactamente un dato para cada columna en cada renglón.Ejemplo: La tabla de editores soporta la información relacionada con

editores.

Pub_id Pub_name statecity1389 Algodata infosystems CABerkeley0736 New Age Books MABoston0877 Binnet & Hardley DCWashington

Renglones

Columnas

Nombre de columnas

Page 8: Manuals Ql

Renglones y Columnas.

• Columnas.- Cada columna tiene un nombre.- Cada columna contiene datos sobre un aspecto relacionado con la tabla.- Cada columna contiene datos de un solo tipo. Ej. Integer, carácter,

string. Etc.

• Renglones.- Cada renglón contiene datos relacionados a un caso de la tabla.- Los renglones no tienen un orden en particular.

Pub_id Pub_name statecity1389 Algodata infosystems CABerkeley0736 New Age Books MABoston0877 Binnet & Hardley DCWashington

Columna

Pub_id Pub_name statecity1389 Algodata infosystems CABerkeley0736 New Age Books MABoston0877 Binnet & Hardley DCWashington

Renglón

Page 9: Manuals Ql

Acceso de Datos - Llaves primarias.

• El Nombre de Tabla, de Columna y Renglón determinan únicamente un dato dentro de la tabla.

• Cada renglón puede ser accesado por una llave primaria única. - En cada renglón, algunas columnas o grupo de columnas

únicamente identifica los renglones.

stor_id stor_name statecity7066 Bernum’s CATustin7067 News & Brews CALos Gatos7131 Doc-U-Mat WARemulade

Storesstor_address367 Pasadena Ave.77 First st24-A Avogadro Way

zip927899674598014

Pub_id Pub_name statecity1389 Algodata infosystems CABerkeley0736 New Age Books MABoston0877 Binnet & Hardley DCWashington

Publishers

Page 10: Manuals Ql

Roles para la Base de Datos.

• Usuario de la Base de Datos. - Recuperación de datos. - Actualización de datos. - Insertar datos. - Borrar datos.

• Diseñador de la Base de Datos. - Diseño de la base de datos. - Creación de Tablas. - Políticas del negocio y seguridad (integridad referencial).

Page 11: Manuals Ql

Roles para la Base de Datos...

• Programador de Aplicaciones de la Base de Datos. - Uso de “Embedding SQL” dentro del código. - Diseño y escritura de formas para la interfase del usuario.

• Administrador del Sistema de la Base de Datos. - Instalación del sistema. - Respaldo y Recuperación. - Desempeño - seguridad.

Page 12: Manuals Ql

Vista Rápida: Montando una Tabla.

El administrador o el diseñador del Sistema de la Base de Datos creará las tablas con el siguiente comando.

• Crear la Tabla. Create table stores (stor_id- char(4) not null, stor_name varchar(40) not null, stor_address varchar(40) null, city varchar(20) null, state char(2) null, zip char(5) null)Una vez que se creo la tabla los datos pueden ser insertados en la

tabla.• Insertar los datos: insert into stores(stor_id, stor_name,

stor_address, city, state, zip) values (‘7067’,’News & Brews’,’577 First st.’,’Los gatos’,’CA’,’96745’).

Page 13: Manuals Ql

Vista Rápida: Recuperando Datos de una Tabla. • Recuperando Datos: select * from stores 7067 New’s & Brews 577 First st. Los Gatos CA 96745 7066 Barnum’s 567 Pasadena Ave. Tustin CA 92789 8042 Bookbeat 679 Carson st. Portlan OR 89076

• Convenciones para hacer referencia:

database.owner.table_name.column_name

Ejemplo: Pubs.dbo.stores.stor_id Pubs.fred.stores.stor_name

Page 14: Manuals Ql

La Base de Datos Pubs2.

La Base de Datos Pubs 2 contiene once tablas todas relacionadas para la operación de un negocio ficticio de distribución de libros.

AUTHORSAUTHORS STORESSTORES

BLURBSBLURBS SALESSALES TITLESTITLES

AU_PIXAU_PIX DISCOUNTSDISCOUNTS ROYSCHEDROYSCHED

TITLEAUTHORTITLEAUTHOR SALESDETAILSALESDETAIL

PUBLISHERSPUBLISHERS

Page 15: Manuals Ql

La Base de Datos Pubs2...

publishers pub id char(4)pub_name varchar(40)city varchar(20)state char(2)

titles title_id nvarchar(6)title varchar(80)type char(12)pub_id char(4)price moneyadvance money total_sales intnotes varchar(200)pubdate datatimecontract bit

Physical Data ModelProyect:Model: pubalAuthor: Soluciones informáticas Verdom 19/01/98

discounts Discounttype varchar(40)stor_id char(4)lowqty smallinthighqty smallintdiscount float

stores stor_id char(4)stor_name varchar(40)stor_address varchar(40)city varchar(20)country varchar(12)postalcode char(10)psyterms varchar(12)

au_pix au_id char(11)pic imageformat_type varchar(11)bytesize intPixwidth_hor char(14)Pixqidth_vert char(14)

sales stor_id char(4)ord num varchar(20)date datatime

royched title id nvarchar(6)lorange inthlrange introyalti int

salesdetail stor_id char(4)ord_num varchar(20)title_id nvarchar(4)qty smallintdiscount float

authors au_id nvarchar(11)au_lname varchar(40)au_fname varchar(20)phone char(12)address varchar(40)city varchar(20)state char(2)country varchar(12)postalcode char(10)

titleauthor au_id nvarchar(11)title_id nvarchar(6)au_ord tinyintroyaltyper int

blurbs au_id nvarchar(11)copy text

stor_id=stor_id

au_id=au_id

stor_id=stor_id

au_id=au_id

au_id=au_id

pub_id=pub_id

title_id=title_id

title_id=title_idstor_id=stor_id

ord_num=ord_num

title_id=title_id

Stor id llave foranes

Page 16: Manuals Ql

La Base de Datos Pubs2...

Tablas de Pubs2

Authors: contiene la información de los autores.Titles: contienen la información básica de cada libro.Titleauthor: tabla usada para conectar los autores con los libros que

ellos escribieron. Royshed: lista que muestra el porcentaje de regalías a pagar en cada

titulo. Sales: registro de las ventas de las tiendas.Salesdetail: registra las ventas de títulos de la tabla títulos. Stores: contiene la información de las tiendas que venden los libros.Discunts: contiene la variedad de descuentos a aplicar.Au_pix: contiene fotografías de los autores en manera binaria con el

tipo de datos image. Blurbs: contiene una larga descripción de los escritores en el tipo de

datos text.

Page 17: Manuals Ql

La Base de Datos Pubs2...

Authors: Au_id: Número único de seguro social del autor.Au_lname: Apellido del autor.Au_fname: Nombre del autor.Phone: Número telefónico.Address: Dirección.City: Ciudad.State: Estado.Country: País.Postalcode: Código Postal.

Page 18: Manuals Ql

La Base de Datos Pubs2...

Titles: Title_id: Código único que identifica a un título.Title: Nombre del libro.Type: Tipo de libro (business, psychology).Pub_id: Código del editor de este libro.Price: Precio por libro.Advance: Cantidad que se ha dado al autor como anticipo.Total-sales: Número de libros vendidos a las tiendas.Notes: Comentarios adicionales.Pubdate: Fecha de publicación.Contract: 0=no existe contrato entre el autor y el distribuidor. 1=existe contrato entre el autor y el distribuidor.

Page 19: Manuals Ql

La Base de Datos Pubs2...

Titleauthor: Au_id: Código del autor que escribió este libro.Title_id: Código del libro escrito por este autor.Au_ord: Orden del autor por regalías.Royaltyper:Porcentaje de regalías que escribe el autor (nota: un

libro puede estar escrito por más de un autor).

Royshed: Title_id: Código del libro para los cuales se aplican estos rangos

de regalías.Lorange: Valor mínimo por número de libros vendidos.Hirange: Valor máximo por número de libros vendidos.Royalty: Regalías para este rengo de libros vendidos.

Page 20: Manuals Ql

La Base de Datos Pubs2...

Sales: Stor_id: Código de la tienda que ordeno los libros.Ord_num: Código que identifica la orden.Date: Fecha en la que se ordeno.

Salesdetail: Stor_id: Código de la tienda que ordeno los libros.Ord_num: Código que identifica la orden.Title_id: Código del libro que fue ordenado.Qty: Número de libros ordenados para este titulo.Discount: Porcentaje de descuento.

Page 21: Manuals Ql

La Base de Datos Pubs2...

Stores: Stor_id: Código único que identifica a una tienda.Stor_name: Nombre de la tienda.Stor_address: Dirección.City: Ciudad.State: Estado.Country: País.Postalcode: Código Postal.Payterms: Tiempo en el que se espera el pago (Ej. Net 60).

Discounts:Discountype: Tipo de descuento (se manejan 4 tipos).Stor_id: Código de la tienda a la que se le aplica el descuento.Lowqty: Mínimo número de libros para conseguir el descuento.Highqty: Máximo número de libros para conseguir el descuento.Discount: Porcentaje de descuento.

Page 22: Manuals Ql

La Base de Datos Pubs2...

Au_pix: Au_id: Código del autor al que pertenece la imagen.Pic: Información binaria de la imagen del autor.Format_type: Tipo del formato de la imagen del autor.Bytesize: Tamaño de la imagen.Pixwidth_hor: Resolución horizontal de la imagen.Pixwidth_ver: Resolución vertical de la imagen.

Blurbs: Au_id: Código del autor.Copy: Descripción de las características del autor.

Page 23: Manuals Ql

Sybase

Módulo 2

Recuperación Básica De Datos I.

Page 24: Manuals Ql

Recuperación simple – Select / From.

• Usada para recuperara datos de una Base de Datos.

SELECT Cláusula que especifica las columnas a recuperar.FROM Cláusula que especifica la tabla o tablas de las que se

desean recuperar los datos. Select*from stores - Despliega todos los datos de la tabla de stores.

Page 25: Manuals Ql

Select / From...

• Ejemplo de una columna.

SELECT store_name -Despliega solo los datos de la columna stor_name.

FROM stores

Page 26: Manuals Ql

Select / From...

• Ejemplo para más de una columna.

SELECT store_name, city, state -Despliega las columnas: FROM stores stor_name, city, state de la

tabla de stores.

Page 27: Manuals Ql

Reordenando Columnas.

• El orden de los nombres de las columnas en el estatuto select, determina el orden de las columnas en el resultado.

SELECT city, stor_name, y state -Despliega las columnas: FROM stores city, stor_name, y state de la

tabla de stores.

Page 28: Manuals Ql

Eliminando Duplicados.

• La palabra reservada DISTINCT elimina renglones duplicados del resultado.- Sintaxis: select [distinct] lista_de_selects from lista_de_tablasEjemplo de estatuto sin usar DISTINCTSELECT state FROM stores -Despliega los estados de la tabla de

stores.

Page 29: Manuals Ql

Eliminando Duplicados...

Ejemplo de estatuto usando DISTINCTSELECT DISTINCT state -Despliega solo una ocurrencia de cada

FROM stores estado de la tabla de stores.

Page 30: Manuals Ql

Recuperación Calificada – Select/From/Where.

• La cláusula WHERE determina exactamente cuales renglones serán recuperados.

- Sintaxis Simplificada: SELECT lista_columnas. FROM lista_tablas. WHERE condiciones_de_búsqueda.

- Calificadores de la cláusula WHERE. - Operadores de comparación (=,>,<). - Rangos (BETWEEN and NOT BETWEEN). - Empate de caracteres (LIKE and NOT LIKE). - Valores no conocidos (IS NULL and IS NOT NULL). - Listas (IN and NOT IN). - Combinaciones acerca de (AND, OR).

- El operador NOT puede negar cualquier expresión booleana y palabra reservada tales como el LIKE, NULL, IN y BETWEEN.

Page 31: Manuals Ql

Operadores de Comparación – Select/From/Where.

- Operadores de comparación. OPERADOR SIGNIFICADO = Igual que > Mayor que < Menor que >= Mayor o igual que <= Menor o igual que != No igual que !> No mayor que !< No menor que

- !< es equivalente a >=

- !> es equivalente a <=

Page 32: Manuals Ql

Operadores de Comparación – Select/From/Where...

- Al comparar fechas, < significa antes de y > significa después de

- Use comillas dobles o sencillas alrededor de todos los datos que sean CHAR, VARCHAR y DATETIME.

Ej. Where state = ’CA’

- Las letras minúsculas son mayores que la mayúsculas, las letras mayúsculas son mayores que los números.

Page 33: Manuals Ql

Operadores de Comparación – Select/From/Where...

- Ejemplo de cláusula con el operador = (igual que).

SELECT stor_name, city, state - Recupera datos.FROM stores - de storesWHERE state = “CA” - que están en California.

Page 34: Manuals Ql

Operadores de Comparación – Select/From/Where...

- Ejemplo de cláusula con el operador != (no igual que).

SELECT stor_name, city, state - Recupera datos.FROM stores - de storesWHERE state != “CA” - que no están localizados en

California.

Page 35: Manuals Ql

Operadores de Comparación – Select/From/Where...

- Ejemplo de cláusula con el operador > (mayor que).

SELECT stor_id, stor_name - Recupera los datos de stor_id, stor_name.

FROM stores - Para stores.WHERE store_id > “7066” - Que tiene un store_id mayor que

7066.

Page 36: Manuals Ql

Operadores de Comparación – Select/From/Where...

- Ejemplo de cláusula con el operador < (menor que).

SELECT city, stor_name - Recupera el stor_name y city.FROM stores - Para stores que están alfabéticamente.WHERE city <“Remulade” – Ordenadas antes de Remulade.

Page 37: Manuals Ql

Rangos – Select/From/Where.

La palabra reservada BETWEEN es usada para especificar un rango.Valores tanto de mayúsculas como las minúsculas son incluidas en la búsqueda.Ejemplo de estatuto usando BETWEEN

SELECT stor_id, stor_name, city, state – Despliega los datos de la tabla. FROM stores - de los cuales su stor_id está entre WHERE stor_id BETWEEN“7067” and ”8000”. - 7067 y 8000 inclusive.

Page 38: Manuals Ql

Rangos – Select/From/Where...

La palabra reservada NOT BETWEEN excluye tanto los valores de mayúsculas como de minúsculas que están especificadas en la búsqueda.

Ejemplo de estatuto usando NOT BETWEEN

SELECT stor_id, stor_name, city, state – Encuentra aquellas tiendas en lasFROM stores WHERE, stor_id - que su stor_id es menor que 7067NOT BETWEEN “7067” and ”8000”. - y mayor que 8000.

Page 39: Manuals Ql

Caracteres de Empate – Select/From/Where.

• La palabra reservada LIKE.

- Usada para seleccionar los renglones de una tabla en los cuales empaten porciones especificas de un string de caracteres.

- Solamente se usan con datos tipo char, varchar, datetime.

- Se pueden usar comodines.

- Significado de los comodines: % cualquier string de cero o más caracteres. - cualquier caracter sencillo. [] cualquier caracter sencillo dentro de un rango especificado. [^] cualquier caracter sencillo fuera de un rango especificado.

- Encierre los comodines y el string de caracteres en comillas sencillas.

Page 40: Manuals Ql

Caracteres de empate – Select/From/Where...

- Ejemplo de estatuto usando la palabra reservada LIKE.

SELECT stor_name - Recupera los datosFROM stores - de las tiendas en las cuales su

stor_nameWHERE stor_name LIKE ‘B%’ – inicie con una letra B.

Page 41: Manuals Ql

Caracteres de empate – Select/From/Where...

- Ejemplo de estatuto usando la palabra reservada NOT LIKE.

SELECT stor_name - Recupera los datos de las tiendasFROM stores - en las cuales su stor_nameWHERE stor_name NOT LIKE ‘B%’ - no inicie con una letra B.

Page 42: Manuals Ql

Caracteres de empate – Select/From/Where...

- Ejemplo de estatuto usando valores numéricos específicos dentro de un carácter.

SELECT stor_id, stor_name - Recupera las tiendas que tienen unFROM stores - stor_id de cuatro posiciones, de las

cualesWHERE stor_id LIKE ’70_’ - las 2 primeras tienen un valor de 70.

Page 43: Manuals Ql

Caracteres de Empate – Select/From/Where...

- Ejemplo de estatuto usando un rango de caracteres.

SELECT stor_name - Recupera las tiendas de las cuales suFROM stores - stor_name empiece con letras

mayúsculasWHERE stor_name LIKE ’[D-F]%’ – entre la D y F incluyéndolas.

Page 44: Manuals Ql

Caracteres de Empate – Select/From/Where...

- Ejemplo de estatuto con valores fuera de un rango especificado de caracteres.

SELECT stor_name - Recupera las tiendas de las cuales suFROM stores - stor_name no empiece con letrasWHERE stor_name LIKE ’[^D-F]%’ -mayúsculas entre la D y F

incluyéndolas.

Page 45: Manuals Ql

Caracteres de Empate – Select/From/Where...

- Ejemplo usando dos rangos. Otra manera de obtener todos los nombres de las tiendas en los que su letra inicial mayúscula no este entre D y F es la siguiente:

SELECT stor_name - Recupera las tiendas de las cuales suFROM stores - stor_name no empiece con letrasWHERE stor_name LIKE ’[A-C,G-Z]%’ -mayúsculas entre la D y

F incluyéndolas.

Page 46: Manuals Ql

Listas – Select/From/Where...

La palabra reservada IN- Permite obtener los renglones de una tabla cuyos valores

empaten con los seleccionados en la lista de valores.

SELECT stor_name, city, state - Recupera los renglones en los que laFROM stores - tienda esta en California yWHERE state IN (´CA´,´WA´) -Washington.

Page 47: Manuals Ql

Listas – Select/From/Where...

- Ejemplo usando NOT IN

SELECT stor_name, city, state - Recupera aquellos renglones en losFROM stores - los que la tienda no esta en WHERE state NOT IN (´CA´,´WA´) - California y Washington.

Page 48: Manuals Ql

Condiciones de Unión – Select/From/Where...

- AND Une dos o más condiciones. Devuelve resultados solo cuando todas las condiciones son

verdaderas. Es inclusive.SELECT stor_name, city, state - Recupera aquellos renglones en losFROM stores - los que las tiendas se localicen en WHERE state=´CA´AND city=´Fremont – Fremont, California.

Page 49: Manuals Ql

Condiciones de Unión – Select/From/Where...

- OR Une dos o más condiciones. Devuelve resultados cuando cualquiera de las condiciones sean

verdaderas.SELECT stor_name, city, state - Recupera aquellos renglones en losFROM stores - que las tiendas están en el estado WHERE state=´CA´OR city=´Portland - California o en la ciudad de

Portland.

Page 50: Manuals Ql

Condiciones de Unión – Select/From/Where...

- Cuando se usa más de un operador lógico el orden en el cual se realiza la evaluación es el siguiente:

NOT AND OR

- Para forzar el orden de la evaluación se pueden utilizar paréntesis, esto cambia el significado de la búsqueda.

Page 51: Manuals Ql

Condiciones de Unión – Select/From/Where...

- Ejemplo de estatuto sin usar paréntesis.

SELECT title_id,type,advance - Recupera aquellos renglones en los títulosFROM titles - de libro de tipo business así como los de WHERE type=´business - tipo psychology los cuales tengan unOR type=´Psychology´ - anticipo superior a los $5500AND advance >5500

Page 52: Manuals Ql

Condiciones de Unión – Select/From/Where...

- Ejemplo de estatuto AND y OR usando paréntesis.

SELECT title_id,type,advance - Recupera aquellos renglones en los que losFROM titles - títulos de libro son de tipo business y de WHERE (type=´business´ OR type=´Psychology´) AND advance >5500 - psychology y que han tenido un anticipo - superior a los $5500

=

Page 53: Manuals Ql

Sybase

Modulo 3

Recuperacion Básica de Datos II

Page 54: Manuals Ql

Renombrando columnas.

- Permite al usuario proporcionar otro nombre para que sea usado en la salida del select en lugar de la columna.

- Sintaxis: select titulo _columna=nombre _columna[,...]

Ejemplo: SELECT

numero_seguro_social=au_id,apellido_paterno=au_lname FROM authors

Page 55: Manuals Ql

Strings de caracteres en los resultados de la busqueda.

- Permite agregar string de caracteres en cada uno de los renglones que se obtienen en la búsqueda.

Ejemplo: SELECT ‘El nombre de la tienda es:’, stor_name FROM stores WHERE stor_id=‘7067’

Page 56: Manuals Ql

Strings de caracteres en los resultados de la busqueda...

- Ejemplo:

SELECT ‘Ventas totales’, total_sales, ’para el libro’, title_id FROM titles WHERE type=‘psychology’

Page 57: Manuals Ql

Strings de caracteres en los resultados de la busqueda...

- Ejemplo:

SELECT ‘El nombre del editor #’, pub_id, ’es:’,pub_name FROM publishers

Page 58: Manuals Ql

Expresiones numéricas.

- Operdores aritméticos. SÍMBOLO OPERACIÓN + SUMA

- RESTA * MULTIPLICACIÓN / DIVISIÓN % MODULO

- Puede ser usados con cualquier columna numérica. - Se utiliza en cualquier estatuto que permita expresiones. - El módulo no puede ser usado en columnas con moneda.

Page 59: Manuals Ql

Expresiones numéricas...

- Ejemplos de suma: select advance, price,advance+price,title_id from titles where type=‘business’

Page 60: Manuals Ql

Expresiones numéricas...

- Ejemplos de resta: select advance, price,advance-price,title_id from titles where type=‘business’

Page 61: Manuals Ql

Expresiones numéricas...

- Ejemplos de multiplicación: select title, revenue=price*total_sales from titles where type=‘business’

Page 62: Manuals Ql

Expresiones numéricas...

- Ejemplos de multiplicación usada en el Where: select title, revenue=price*total_sales from titles where price*total_sales>80000

Page 63: Manuals Ql

Expresiones numéricas...

- Ejemplos de multiplicación usando condiciones múltiples: select title, revenue=price*total_sales from titles where price*total_sales>80000 and type=‘business’

Page 64: Manuals Ql

Expresiones numéricas...

- Ejemplos de división: select title, month_sales=total_sales/12 from titles where type=‘business’

Page 65: Manuals Ql

Expresiones numéricas...

- Ejemplos de modulo (Encuentra los números impares): select total_sales, total_sales % 2, title_id from titles where total_sales % 2=1

Page 66: Manuals Ql

Conversión de tipos de datos a Expresiones numéricas.

- La función CONVERT: * Convierte expresiones de un tipo de datos a otro * Se usa en la lista del Select y en la cláusula Where * No puede convertir a entero una expresión de caracteres que

incluya letras. - Sintaxis: convert (tipos_de datos, expresión) - Ejemplo (error, por tipos de datos incompatibles): select stor_id * 10 from stores

Implicit Convertion from datatype CHAR to INT is not - sllowed. Use the CONVERT function to sum the query.

Page 67: Manuals Ql

Conversión de tipos de datos a Expresiones numéricas...

- Ejemplo: select convert (int,stor_id)* 10 from stores

Page 68: Manuals Ql

Conversión de tipos de datos a Expresiones numéricas...

- Con los tipos de datos Money y otros tipos tales cmo float, int, se puede anteponer el signo $ a dichos tipos de datos y así forzar el resultado de la columna.

- Ejemplo(sin usar $): select price * 1.10,title from titles where type=‘business’

Page 69: Manuals Ql

Conversión de tipos de datos a Expresiones numéricas...

- Ejemplo (usando $): select price * $ 1.10, title from titles where type=‘business’

Page 70: Manuals Ql

Valores nulos.

- Los valores nulos impiden que se den valores desconocidos.

* Los valores nulos no implican que su valor sea de cero o blancos, no hay un valor explicito asignado.

* IS NULL(and = NULL) puede ser usado para seleccionar columnas que contengan valores nulos.

- Un valor nulo nunca es igual a otro valor nulo.

- Algunas columnas son definidas para permitir valores nulos.

Page 71: Manuals Ql

Valores nulos...

- Ejemplo: select title, price from titles where type=‘popular_comp’ and price is null otra manera sería: select title, price from titles where type=‘popular_comp’ and price = null

Page 72: Manuals Ql

Valores nulos...

- Ejemplo: select title_id, advance from titles where advance is not null

Page 73: Manuals Ql

Valores nulos...

- Ejemplo: select title_id, advance from titles where advance <5000

Page 74: Manuals Ql

Valores nulos...

- Ejemplo: select title_id, advance from titles where advance <5000 or advance is null

Page 75: Manuals Ql

Valores nulos...

- Operaciones entre columnas que tienen valores nulos - Ejemplo: select title_id, advance, price, advance/price from titles where type not in(‘business’,’psychology’,’trad_cook’)

Page 76: Manuals Ql

Select /Order by.

- El estatuto Order by ordena el resultado de la busqueda (por default en forma ascendente).

* Las columnas que se utilizan en la cláusula order by no necesariamente van incluidas en la lista del select.

* Cuando se usa order by, los nulos se listan primero.

- Sintaxis:

select [distinct] lista_columnas from nombre_tabla [,...] [where condiciones_busqueda] [order by {nombre_columna/expresión}[asc|desc][,...]]

Page 77: Manuals Ql

Select /Order by...

- Ejemplo:

select stor_name, state from stores order by stor_name

Page 78: Manuals Ql

Select /Order by...

- Ejemplo (con más de una columna):

select stor_name, state from stores order by state, stor_name

Page 79: Manuals Ql

Select /Order by...

- Ejemplo (una columna ascendente y otra descendente):

select stor_name, state from stores order by state, stor_name desc

Page 80: Manuals Ql

Select /Order by.

- Ejemplo (ordenada en base a una columna resultante):

select ((total_sales/12)*1.10), title_id – pronostica cuantos libros se

from titles where type=‘Psychology’ – necesitan vender en promedioorder by ((total_sales/12)*1.10) - cada mes el próximo año,

trabajando con un incremento del 10% en las ventas.

Page 81: Manuals Ql

Select /Order by.

- Ejemplo (sin incluir un pubdate en la lista del select):

Select title, price from titlesWhere pub_id=‘0736’Order by pubdate

Page 82: Manuals Ql

Select /Order by.

- Ejemplo (mostrando los nulos primero):

Select title_id, type, pricefrom titles where type=‘popular_comp’Order by price

Page 83: Manuals Ql

Sybase

Modulo 4

Organizando Resultados y Resumiendo Datos

Page 84: Manuals Ql

Funciones para Agrupar.

- FUNCIONES PARA AGRUPAR:

Funcion Valor que regresa SUM TOTAL AVG VALOR PROMEDIO MIN VALOR MINIMO MAX VALOR MAXIMO COUNT(*) NUMERO DE RENGLONES COUNT([DISTINCT] NUMERO DE VALORES UNICOS Nombre_columna)

Page 85: Manuals Ql

Funciones para Agrupar...

- Estas funciones ignoran valores nulos (excepto el count(*)).- SUM y AVG solo trabajan con valores numéricos.- Regresan solo un renglón (si no es usada una cláusula Group by).- No puede usarse en la cláusula Where.- Se pueden aplicar en todos los renglones de una tabla o

subconjunto de tabla.

- Sintaxis: select nombre_función ([distinct] expresión) from nombre_de_la_tabla[where...condiciones]

Page 86: Manuals Ql

Funciones para Agrupar - Count.

- La función count sumariza el número de renglones que cumplen con la condiciónque se especifica.

Ejemplo: (número de renglones recuperados):

select count(*) from titles

Page 87: Manuals Ql

Funciones para Agrupar – Count...

- Ejemplo (número de renglones en una columna que no tengan valor nulo):

select count(advance) from titles

Page 88: Manuals Ql

Funciones para Agrupar – Max/Min.

- La función Max encuentra el valor más grande dentro de una selección.

Ejemplo:

select max(price) from titles

Page 89: Manuals Ql

Funciones para Agrupar – Max/Min...

- La función Min encuentra el valor más pequeño dentro de una selección.

Ejemplo:

select min(price) from titles

Page 90: Manuals Ql

Funciones para Agrupar – Sum/Avg.

- La función Sum encuentra la cantidad total de los valores especificados en una columna.

Ejemplo: select sum(total_sales) from titles where type=‘psychology’

Page 91: Manuals Ql

Funciones para Agrupar – Sum/Avg...

- La función Avg encuentra el valor promedio de los datos especificados en una columna.

Ejemplo: select avg(advance) from titles

Page 92: Manuals Ql

Funciones para Agrupar...

- Se puede utilizar más de una función para agrupar dentro de una cláusula select.

Ejemplo: select min(advance), max(advance) from titles

Page 93: Manuals Ql

Funciones para Agrupar – Palabra Reservada Distinct.

- La palabra reservada DISTINCT: - Uso opcional con las funciones sum,avg y count. - No se puede utilizar con las funciones min, max y count(*). - Permitida con la función count(nombre_columna). - Se usa solamente con nombres de columnas, no con expresiones

aritméticas. Compare: select avg(distinct price) select avg(price) from titles from titles where type=‘business’ where type=‘business’

Page 94: Manuals Ql

Funciones para Agrupar – Palabra Reservada Distinct.

- ¿Cuántos tipos diferentes de libros podemos manejar? select count(distinct type) from titles

Page 95: Manuals Ql

Tratando con Valores nulos - Isnull.

- Obteniendo valores nulos para ser contados en las funciones para agrupar.

- Sintaxis: Isnull(expresión,valor).

- Ejemplo: select avg(price) from titles

Page 96: Manuals Ql

Tratando con Valores nulos – Isnull...

- Ejemplo: select avg(Isnull(price,$9.98)) - Se da el precio de $9.98 a los libros from titles - que aún no se les había asignado.

Page 97: Manuals Ql

Tratando con Valores nulos – Isnull...

- Ejemplo: select price *2 select isnull(price, 0)*2 from titles from titles

Page 98: Manuals Ql

Select/Group by .

- El estatuto Group by divide los datos en grupos.* Es usada normalmente con una función para agrupar en la lista

de selects.* Todos los valores nulos en los Group by de columna son tratados

como un solo grupo.- Sintaxis: select [distinct] lista selects [from tabla[,...]] [where condiciones_búsqueda] [group by [all] expresiones_libres _de agrupación[,...]] [order by columna /número_en_la_lista_de_selects /expresión [asc|desc] [, ...]]

Page 99: Manuals Ql

Select/Group by...

- Ejemplo (uso incorrecto, parecerá que todos los tipos tienen el mismo precio).

select type, avg(price) from titles

Page 100: Manuals Ql

Select/Group by...

- Ejemplo (uso correcto).

select type, avg(price) from titles group by type

Page 101: Manuals Ql

Select/Group by...

- Ejemplo (usando order by).

select type, avg(price) from titles group by type order by avg(price)

Page 102: Manuals Ql

Select/Group by...

- Ejemplo:

select title_id,sum(qty) - cuántos libros han sido vendidos from salesdetail - para cada titulo. group by title_id

Page 103: Manuals Ql

Select/Group by...

- La agrupación puede hacerse por un nombre de columna o por cualquier expresión que no contenga funciones para agrupación por el títulode columna o un alias.

- Ejemplo:

select ‘ID#’+title_id,sum(total_sales) from titles group by ‘ID#:’+title_id

Page 104: Manuals Ql

Select/Group by...

- No es necesario que la lista de select contenga solamente valores fijos o una función de agrupación para cada grupo.

- Ejemplo:

select title_id,sum(total_sales) from titles group by title_id

Page 105: Manuals Ql

Select/Group by...

- Ejemplo (usando funciones de agrupación anidadas):

select avg(sum(qty)) - Despliega el promedio total de from salesdetail - la cantidad vendida de todos group by title_id - los libros.

Page 106: Manuals Ql

Sybase

Modulo 5

Joins

Page 107: Manuals Ql

Joins.- Permite recuperar datos de dos o más tablas.

* La operación Join es el sello del modelo relacional. * Este combina tablas buscando valores que empaten en los renglones de

cada tabla.- Ejemplo: Despliegue stor_id, stor_name,title_id y qty ordenados para

cada libro que se vende.Stores

stor_id stor_name ....

7066 Bernum’s

7067 News & Brews

7131 Doc-U-Mat

8042 Bookbest

...

stor_id

7066

7067

7131

8042

7066

Salesdetail

....

....

....

....

....

....

qty ....

....

....

....

....

....

Title_id

75

10

20

50

PS2091

PS2091

PS2091

PC8888

qty

75

50

10

Title_id

PS2091

PS2091

PC8888

stor_name

Bernum’s

Bernum’s

News & Brews

stor_id

7066

7066

7067

Results

Page 108: Manuals Ql

Cuales Tablas Usar.

- Identifica cuales columnas necesita ver en el resultado.- Localice en el diagrama entidad-relación las tablas a usar.- Siga las líneas de relación para encontrar las uniones necesarias para

conectar las tablas.- Ejemplo: Despliegue las columnas stor_name, title_id y qty ordenadas

para cada venta.

STORESstor_id

stor_name

stor_addresscitystatecountrypostalcodepayterms

stor_idord_numtitle_id

qtydiscount

SALESDETAIL

1stor_id

Nstor_id

Page 109: Manuals Ql

Cuales Tablas Usar...- La operación Join.

STORESstor_idstor_namestor_addresscitystatezip

stor_idord_numdateqty

SALESDETAIL

1stor_id

stor_id N

title_id

TITLEStitle_idtitletypepub_idpriceadvance

pub_idpub_namecitystate

PUBLISHERS

Npub_id

pub_id 1

royaltyyid_salesnotes

payterms

Page 110: Manuals Ql

Cuales Tablas Usar...

- Join.titles

title_id

PS7777PB3333BU1111

MC2222TC7777

title type pub_id price advance royalty yid_sales notes pubdate

TC4023

BU7832

PS1372PC9999

...

...

...

...

...

...

...

...

...

073607361389087708770877138908771389

Pub_id Pub_name statecity1389 Algodata infosystems CABerkeley0736 New Age Books MABoston0877 Binnet & Hardley DCWashington

Publishers

...

...

...

...

...

...

......

...

Page 111: Manuals Ql

La Operación Join.

- El Join es una operación multitabla.- SELECT: El nombre de la columna debe ser precedido por el nombre de

la tabla en caso de existir ambigüedad en el nombre, esto es cuando se tiene más de una columna especificada en el estatuto from con el mismo nombre.

- FROM: Dos o más tablas enumeradas en el estatuto from, indica al SQL Server que se trata de una operación Join.

* Se puede hacer referencia a tablas que estén dentro de una misma base de datos o una base de datos diferente.

- WHERE: Las columnas que son comparadas deben pertenecer al mismo dominio ya sea numérico o alfanumérico, y deben ser iguales en esencia.

* Las columnas no necesariamente deben ser del mismo tipo, pero si deben ser de tipos que el SQL Server puede convertir automáticamente.

* (int, smallint, tinyint, decimal or float). * (char, varchar and datatime).

Page 112: Manuals Ql

La Operación Join...

- Las columnas con valores nulos no pueden hacer un Join.

- Las columnas en la condición Join no es necesario que estén en la cláusula Select.

- Sintaxis:

select [table].column_name, [...] from {table}, {table}, [...] [where condiciones_búsqueda]

Page 113: Manuals Ql

Uniendo Tablas.

Select pub_name, publishers.pub_id,Titles.title_id

From publishers, titlesWhere publishers.pub_id=titles-pub_id

pub_id pub_name--------- -------------0736 New Age Books0877 Binnet & Hardley1389 Algodata infosystems

title_id title pub_id--------- -----------------------------------------------------------------PB2106 New Age Books 0736PB2091 Is Anger the Enemy? 0736BU2075 You Can Combat Stress! 0736PB7777 Emotional Security: A New Algorithm 0736PB3333 Prolonged Dats... 0736TC7777 Sushi Anyone? 0877MC3026 The Psychology of ... 0877MC3021 The Gounnet Microwave 0877MC2222 Slitcon Valley 0877TC3218 Onions Leeks... 0877PB1372 Computer Phobic ... 0877BU1032 The Busy Executive’s Database Guide 1389BU1111 Cooking with Computers... 1389BU7832 Straight Talk About Computers 1389

titles

publishers

Page 114: Manuals Ql

Uniendo Tablas...

Esta columna se obtiene Esta columna se obtiene de la tabla Publishers de la tabla Titles

pub_name pub_id title_id------------------------------- --------- ----------New Age Books 0736 BU2075New Age Books 0736 PS2091New Age Books 0736 PB2106New Age Books 0736 PB3333New Age Books 0736 PB7777Binnet & Hardley 0877 MC2222Binnet & Hardley 0877 MC3021Binnet & Hardley 0877 MC3026Binnet & Hardley 0877 PS1372Binnet & Hardley 0877 TC3216Binnet & Hardley 0877 TC4203Binnet & Hardley 0877 TC7777Algodata infosystems 1389 BU1032Algodata infosystems 1389 BU1111Algodata infosystems 1389 BU7832Algodata infosystems 1389 PC1036Algodata infosystems 1389 PC8888Algodata infosystems 1389 PC9999

Resultado del Join

Page 115: Manuals Ql

Joins...

- ¿Cómo se procesan los Joins?

Conceptualmente hablando el primer paso para formar un Join es el de formar el producto cartesiano de las tablas – todas las posibles combinaciones de los renglones de cada tabla.

• El número de renglones es un producto Cartesiano de dos tablas es igual al número de renglones de la primera tabla multiplicado por el número de renglones de la segunda.

• Ejemplo:El producto cartesiano de la tabla de authors y la de publishers es de 69. 23 autores multiplicados por tres editores.

• Ejecute una query que contenga: en la lista del select todas las columnas, en el from las tablas authors y publishers y no contengan ninguna condición where.

Page 116: Manuals Ql

Joins...

El resultado que se obtiene carece de sentido.

Page 117: Manuals Ql

Joins Basados en Igualdades.

- Basados en una igualdad entre los valores en las columnas especificadas.

- Ejemplo:select stores.stor_id,qty,title_id,stor_name -Despliegue la cantidad que se tienefrom salesdetail,stores -ordena de cada libro, el títulowhere salesdetail.stor_id=stores.stor_id -nombre e identificación de la tienda.

Page 118: Manuals Ql

Joins Basados en Igualdades...

- Ejemplo: (cláusulas adicionales: usando funciones para agrupar y group by).

select stor_name, sales detail.stor_id,tot_ordenados=sum(qty)from salesdetail, stores -cuantos libros tienenwhere salesdetail.stor_id=stores.stor_id -ordenados cada tienda.group by salesdetail.stor_id,stor_name

Page 119: Manuals Ql

Joins Basados en Igualdades...

- Ejemplo: (cláusulas adicionales: ordenando por una columna calculada).

select titles.title_id,qty,price,venta_total=price*qty - Cuál es la venta totalfrom titles, salesdetail - para cada tipo de librowhere titles.title_id=salesdetail.title_idorder by price*qty

Page 120: Manuals Ql

Aliases.

- Funciones que proporcionan una forma abreviada de hacer referencia a las tablas dentro de un solo estatuto de SQL.

- Sintaxis:

select lista_de_selects from nombre_tabla alias_1, nombre_tabla alias2where alias1. Nombre_columna=alias2.nombre_columna

- Ejemplo:select t.title_id from titles t, titleauthor tawhere t.title_id=ta.title_id and au_id=’409-56-7008’

Page 121: Manuals Ql

Otras Condiciones en los Joins.

- Ejemplo:(condición adicional).

select stores.stor_id,qty,title_id,stor_name from salesdetail,storeswhere salesdetail.stor_id=stores.stor_idand qty<40

Page 122: Manuals Ql

Joins que No se Basan en Igualdades.

- Operadores de comparación usados. > Mayor que < Menor que >= Mayor o igual que <= Menor o igual que != No igual que !> Menor o igual que !< Mayor o igual que- Ejemplo: select pub_name,publishers.state,au_lname,au_fname,authors.statefrom publishers, authors - cuáles autores viven es estados que

where authors.state>publishers.state - alfabéticamente esten después

and pub_name=‘New Age Books’ - que el estado en el cual se localiza el editor ‘New Age Books’

Page 123: Manuals Ql

Joins que No se Basan en Igualdades...

- Resultado.

Page 124: Manuals Ql

Self - Joins.

- Une una tabla con ella misma. * Une renglones de una tabla con otros renglones de la misma

tabla o bien con ellos mismos.

- Pueden usarse más de dos columnas para especificar las condiciones del Join.

- Ejemplo:

select au1.au_lname, au1.au_fname,au1.cityfrom authors au1, authors au2where au2.au_lname=‘Karsen’ and au2.au_fname=‘Livia’ and au1.city=au2.city

Page 125: Manuals Ql

Self - Joins...

- Resultado.

Page 126: Manuals Ql

Self - Joins...

au_lname au_fname city---------------------------------------------- White Johnson Menlo ParkGreen Marjorie OaklandCarson Chery! BerkeleyO’Leary Michael San JoseStraight Dick OaklandSmith Meender LawrenceBennet Abraham BerkeleyDull Ann Palo AltoDeFrance Michel GaryStringer Dirk OaklandKaraen Livia Oakland....... .... Ringer Albert Salt Lake City

au_lname au_fname city---------------------------------------------- White Johnson Menlo ParkGreen Marjorie OaklandCarson Chery! BerkeleyO’Leary Michael San JoseStraight Dick OaklandSmith Meender LawrenceBennet Abraham BerkeleyDull Ann Palo AltoDeFrance Michel GaryStringer Dirk OaklandKaraen Livia Oakland....... .... Ringer Albert Salt Lake City

au_lname au_fname city--------------------------------------------- White Johnson Menlo ParkGreen Marjorie OaklandCarson Chery! BerkeleyO’Leary Michael San JoseStraight Dick OaklandSmith Meender LawrenceBennet Abraham BerkeleyDull Ann Palo AltoDeFrance Michel GaryStringer Dirk OaklandKaraen Livia Oakland....... .... Ringer Albert Salt Lake City

au1 au2

authors

Page 127: Manuals Ql

Self – Joins y Not-Equal Joins.

¿Hay algunos autores que tengan el mismo apellido?

- Ejemplo (Self-Join): select a1.au_lname,a1.au_fname from authors a1, authors a2 where a1.au_lname=a2.au_lname

Page 128: Manuals Ql

Self – Joins y Not-Equal Joins...

- Ejemplo (Not-Equal Join): select a1.au_lname,a1.au_fname from authors a1, authors a2 where a1.au_id!=a2.au_id

Page 129: Manuals Ql

Self – Joins y Not-Equal Joins...

- El Not-Equal Join es usualmente usado con un Self-Join. * Son usadas dos columnas en la condición Join.

- Ejemplo (forma correcta): select a1.au_lname,a1.au_fname from authors a1, authors a2 where a1.au_lname=a2.au_lname and a1.au_id!=a2.au_id

Page 130: Manuals Ql

Self – Joins y Not-Equal Joins...

HunterLocksleRingerSmithBennetRinger

au_lnameKarsenGreenDull

HunterLocksleRingerSmithBennetRinger

au_lnameKarsenGreenDull

HunterLocksleRingerSmithBennetRinger

au_lnameKarsenGreenDull

HunterLocksleRingerSmithBennetRinger

au_lnameKarsenGreenDull

HunterLocksleRingerSmithBennetRinger

au_lnameKarsenGreenDull

HunterLocksleRingerSmithBennetRinger

au_lnameKarsenGreenDull

au2au1

Page 131: Manuals Ql

Self – Joins y Not-Equal Joins...

- Ejemplo (Self Join and Not-Equal Join) select distinct t1.title_id, t1.price -Despliega los libros que tienen from titles t1, titles t2 -el mismo precio. where t1.price=t2.price and t1.title_id!=t2.title_id order by t1.price

Page 132: Manuals Ql

Self – Joins y Not-Equal Joins...

- Ejemplo (Self Join and Not-Equal Join) select distinct s1.title_id from salesdetail s1, salesdetail s2 - Cuáles libros fueron vendidos where s1.title_id=s2.title_id and s1.stor_id!=s2.stor_id -en más de

una tienda.

Page 133: Manuals Ql

Join con más de dos Tablas.

- La cláusula from deberá incluir todas las tablas involucradas.

- La cláusula where deberá incluir las condiciones de unión suficientes para mantener las tablas encadenadas.

- No es necesario que se despliegue una columna de cada una de las tablas que intervienen en el Join.

- Ejemplo: select au_lname,au_fname,titles.title_id,title -despliega para cada

librofrom authors, titleauthor, titles - su title_id, title y elwhere authors.au_id=titleauthor.au_id - nombre del autor.and titleauthor.title-id=titles.title_id

Page 134: Manuals Ql

Join con más de dos Tablas...

238-95-7706

Authorsau_id

409-56-7008213-46-8915

Carson

au_lnameBennetGreen

Chery!

au_fnameAbrahamMarjorie

...

...

...

...

238-95-7706

titleauthorau_id

409-56-7008213-46-8915

PC1035

title_idBU1032BU1032

title_idBU1032PC1035

...

...

titleThe Busy Executive’sBut it User Friendly

Titles

Page 135: Manuals Ql

Join con más de dos Tablas...

- Resultados:

Page 136: Manuals Ql

Join con más de dos Tablas...

- Cuando se tiene un Join de n tablas es necesario tener por lo menos n-1 condiciones para que permitan eliminar el producto cartesiano.

- Ejemplo (tres tablas – dos condiciones):

select stor_name,title - Despliega para cada libro, lasfrom stores, salesdetail, titles - tiendas en las que se encuentrawhere stores.stor_id=salesdetail.stor_id - disponible.and salesdetail.title_id=titles.title_id

Page 137: Manuals Ql

Join con más de dos Tablas...

- Ejemplo (tres tablas - dos condiciones):

STORESstor_id

stor_name

stor_addresscitystatezip

TITLEStitle_id

title

typepub_idpriceadvanceroyaltyyid_salesnotes

stor_idord_numdate

qtypayterms

SALES

pubdate

title_id

Page 138: Manuals Ql

Join con más de dos Tablas...

- Resultado:

Page 139: Manuals Ql

Sybase

Modulo 6

Subqueries

Page 140: Manuals Ql

Ejemplo introductorio (Subqueries).

- ¿Cuáles libros son publicados por New Age Books? * Usando dos estatutos select.

1. Encuentra el pub_id para New Age Books select pub_id from publishers where pub_name=‘New Age Books’

Page 141: Manuals Ql

Ejemplo introductorio...

- ¿Cuáles libros son publicados por New Age Books? * Usando dos estatutos select.

2. Encuentra los libros asociados con el pub_id select title from titles where pub_id=‘0736’

Page 142: Manuals Ql

Ejemplo introductorio...

* Usando el estatuto select anidado.

select title from titles where pub_id= (select pub_id from publishers where pub_name=‘New Age Books’)

Page 143: Manuals Ql

Ejemplo introductorio...

* Usando el estatuto Join.

select title from titles, publishers where titles.pub_id=publishers.pub_id and publishers.pub_name=‘New Age Books’

Page 144: Manuals Ql

Subqueries.

- El estatuto select de una subquery debe ir entre paréntesis.- Una subquery es un estatuto select, usado como una expresión,

como parte de otro estatuto select, update, insert o delete.- La subquery (select anidado) se resuelve y el resultado es

sustituido dentro de la query externa. - La lista de selects de una subquery incluida dentro de una

comparación, puede incluir una sola expresión o nombre de columna y la subquery debe regresar un solo valor.

- Si la cláusula where de la query externa incluye un nombre de columna, esta debe ser compatible con la columna a la que se hace referencia en la lista de selects de la subquery para que se pueda efectuar el join.

- En las subquerys no se pueden incluir ni el order by ni el compute.

Page 145: Manuals Ql

Subqueries...

- Sintaxis: select select_list [from (tabla) [,...]] [where condiciones_busqueda]= (Select lista.selects_subquery [from (tabla) [,...] [where condiciones_busqueda] [group by expresiones-para_agrupar [,...]] [having condiciones_busqueda]) [group by expresiones_para_agrupar[,...]] [having condiciones_búsqueda] [order by {{tabla}.]columna |número_en_la_lista_de_selects |expresiones}[asc|desc][,...] [compute agrupar(columna)[,...] [by columna [,...]] [,...]]

Page 146: Manuals Ql

Subqueries...

- Razones para usar subquery: * Muchos joins pueden resolverse con una subquery. - Algunas veces resultan más fácil de entender que un join

que realiza la misma búsqueda. * Realiza algunas tareas que de otra manera serian imposibles.- Subqueries – Restricciones. * La lista de selects de la subquery puede incluir solo una

columna (excepto para la subquery exists), el valor de más de una columna pudiera ser que no fuera devuelto.

* La palabra reservada distinct no puede ser usada con subqueries que incluya la cláusula group by.

* La cláusula where o having de un estatuto select, insert, update o delate puede contener una subquery.

* Solo se puede desplegar las columnas de la lista de selects del estatuto más externo.

Page 147: Manuals Ql

Anidaciones Múltiples.

- Una subquery puede contener una o más subqueries. - No hay un nivel máximo para anidar.- Ejemplo (dos niveles): select title - Cuál libro escribió Blotchet-Halls from titles where title_id=(select title_id from titleauthor where au_id=(select au_id from authors where au_lname=‘Blotchet-Halls’))

Page 148: Manuals Ql

Anidaciones Múltiples...

- Resultado:

Page 149: Manuals Ql

Anidaciones Múltiples...

- Ejemplo (dos niveles): select pub_name, pub_id - Cuál editor imprime el from publishers - libro más caro. where pub_id=(select pub_id from titles where price=(select max(price) from titles))

Page 150: Manuals Ql

Subqueries que devuelven varios renglones.

- La subqueries que se usan con in y not in, pueden devolver 0 o más valores.

- Sintaxis: select lista_de_selects [from [[base_datos.]propietario]{tabla}[,...]] [where condiciones_búsqueda] [not] in (subquery)

- Ejemplo: select pub_id, pub_name, from publishers - Cuáles editores han where pub_id in (select pub_id - publicado libros de from titles - psicologia. where type=‘psychology’)

Page 151: Manuals Ql

Subqueries que devuelven varios renglones.

- Resultado:

Page 152: Manuals Ql

Subqueries que devuelven varios renglones.

- Ejemplo:

select stor_name from stores - Cuáles tiendas venden el libro where stor_id in - ‘The Busy Executives Database

(select stor_id - guide’ from salesdetail where title_id in (select title_id from titles where title like “The Busy Executive’s Database Guide”))

Page 153: Manuals Ql

Subqueries que devuelven varios renglones.

- Resultado:

Page 154: Manuals Ql

Subqueries que devuelven varios renglones.

- Ejemplo: select distinct pub_name - Cuáles editores no han from publishers - publicado por lo menos where pub_id not in(select pub_id - un libro de ‘business’ from titles where type=‘business’)

¿Puedes usar en lugar del not in el operador !=?¿Puedes usar en lugar del not in el operador !=?

Page 155: Manuals Ql

Subqueries con operadores de comparación.- Los subqueries deben devolver un solo valor, de otra manera se

provoca un error.

- Sintaxis: select lista_de_selects [from {tabla}[,...]] [where expresión{=|!=|>|>=|<|<=}[any|all]] (subquery)

- Ejemplo (mayor que): select title_id,price - Cuáles libros tienen un precio from titles - superior al promedio de el where price>(select avg(price) - precio de todos los libros. from titles)

Page 156: Manuals Ql

Subqueries que operadores de comparación...

- Resultados:

Page 157: Manuals Ql

Subqueries que operadores de comparación...- Ejemplo (dos condiciones):

select distinct title, price from titles – Despliega los libros de tipowhere type=‘business’ and price> - business y que tienen un precio (select avg(price) from titles) - superior al precio promedio de

todos los libros.

Page 158: Manuals Ql

Subqueries que operadores de comparación...- Otros ejemplos:

select title, advance from titles where advance > (select min(advance) from titles, publishers where titles.pub_id =publishers.pub_id and pub_name=‘Algodata Infosystems’)

- Despliega los títulos que tengan un- anticipo mayor al mínimo anticipo- pagado por Algodata Infosystems.

Page 159: Manuals Ql

Subqueries que operadores de comparación...

- Resultados:

Page 160: Manuals Ql

Subqueries que operadores de comparación...

- Otros Ejemplos: select title, advance from titles where advance>(select max(advance) from publishers, titles where titles.pub_id=publishers.pub_id and pub_name=‘Algodata Infosystems’)

- Despliega los libros que tienen- un anticipo mayor que el- anticipo más grande pagado- por Algodata Infosystems

Page 161: Manuals Ql

Subqueries que operadores de comparación...

- Resultados:

Page 162: Manuals Ql

Exists.

- El EXISTS y NOT EXISTS son usados en una serie de teoría de conjuntos. - Intersección: todos los elementos que pertenecen a los dos conjuntos. - Diferencia: los elementos que pertenecen solo al primero de los dos

conjuntos. - La palabra reservada EXISTS no es precedida por un nombre de columna. - Usualmente la lista_de_selects de la subquery será “*” ya que la función

exists devuelve valores de falso o verdadero, no datos.- exists (subquery) Verdadero Si se devuelven renglones Falso Si no se devuelven renglones- not exists (subquery) Verdadero Si no se devuelven renglones Falso Si se devuelven renglones- Sintaxis: select lista_de_selects [from {tabla}[,...]] [where {exists|not exists}] (subquery)

Page 163: Manuals Ql

Exists...

- Una subquery que no pueda ser ejecutada por ella misma, es una definición de una query de correlación.

Ejemplo (intersección de authors y publishers) - En que ciudades se localizanselect distinct city from authors - tanto un autor como un

editor.where exists (select * from publishers where authors.city=publishers.city)

Page 164: Manuals Ql

Exists...

- Ejemplo (diferencia entre authors y publishers)

select distinct city from authors - Cuáles ciudades tienenwhere not exists (select * from publishers - autores viviendo ahí where authors.city=publishers.city) - pero no tienen editores.

Page 165: Manuals Ql

SYBASE

Módulo 7

Definición y Manipulación de Datos.

Page 166: Manuals Ql

Crear una tabla de otra existente.

- La palabra reservada INTO es usada para crear una tabla de otra tabla ya existente.

- Sintaxis: select lista_de_selects [into tabla]

[from {tabla}[,…]] [where condiciones_de_búsqueda]

- Ejemplo (crear una tabla y cargar todos sus datos) select * into new_titles from titles- Ejemplo (crear una tabla sin cargar datos) select * into new_pubs from publishers where 1=2

Page 167: Manuals Ql

Crear una tabla de otra existente.

- Ejemplo (crear una tabla y cargar datos específicos)

select* into pub_1389_titles

from titles where pub_id=‘1389’

- Ejemplo (crear una tabla seleccionando algunas columnas)

select pub _name, pub_id into short_pubs from publishers

Page 168: Manuals Ql

Modificando datos-insertando datos.• La cláusula INSERT agrega nuevos valores dentro de una tabla

ya exixtente.- SQL Server checa que el dato sea del tipo correcto, en el momento de ser insertado.

* Si el valor es demasiado largo el SQL Server lo trunca a su longitud especificada y no devuelve ningún mensaje de error.- Algunas columnas se definen para que permitan valores nulos.

* Para una columna que permite valores nulos, se puede especificar que es NULL o bien no especificar valor

cuando se va a insertar un valor nulo.- Inserta los datos tipo datetime y todos los valores tipo carácter encerrados entre comillas dobles o sencillas.

* Para insertar un strig de caracteres de mayor tamaño que una línea utilice un backslash () antes de cambiar a la siguiente línea.

Page 169: Manuals Ql

Modificando datos-insertando datos...

- Inserta los...

* Para insertar comillas como una literal, deberá usar el tipo opuesto de comillas, por ejemplo si la literal a insertar es una comilla sencilla deberá encerrar el valor entero dentro de comillas dobles.

- Sintaxis:insert [into] nombre_tabla[(lista_de_columnas)]{valores(expresiones_constantes) | estatuto_select}

Page 170: Manuals Ql

Modificando datos-insertando datos...

Agregando un solo renglón:

- Ejemplo: (insertando un renglón completo) insert into new_pubs - Agregando un nuevo editor values (‘4444’, ‘Mysteries Galore’, ‘Kansas City’,’KS’)

- Ejemplo: (insertando valores con comilla como literal) insert into new_pubs - Agregando un nuevo editor values (‘4445’,”O‘Bryan Publishing House”, ‘Washington’,’DC’)

Cualquier columna no incluida debe permitir nulos- Ejemplo: (parte de un renglón) insert new_pubs(pub_id, pub_name) -Agregando un nuevo editor

values(‘3333’,”Jardin’s Inc.”)

Page 171: Manuals Ql

Modificando datos-insertando datos...

- Si se omiten en el insert los nombres de las columnas, los valores deben ponerse en el mismo orden que tienen las columnas en el CREATE de la tabla.

Ejemplo (crear tabla)Create table new_titles (title_id char(6).title varchar (50).

Ejemplo (insertando)Insert new_titles values(“BU2222”,“More or Least”,

type char (12).pub_id char(4).price money null,advance money null,

“business”,“5555”,

total_sales money null,notes varchar (200) null,pubdate datatimeContract bit not null)

Null,“05/17/88”,0)

Null,Null,Null,

Page 172: Manuals Ql

Modificando datos-insertando datos...

- Ejemplo (insertando datos de otra tabla) insert into new_pubs(pub_id, pub_name, city, state) select * from publishers

- Ejemplo (insertando usando una subquery) insert into new_pubs select * from publishers where pub_id in

(select pub_id from publishers where city=‘Boston’)

-Inserta nuevos editores del área de Boston

Page 173: Manuals Ql

Modificando datos-Actualizando datos...

- La cláusula UPDATE cambia el valor de una o más columnas en una tabla (cambia los valores de los datos en los renglones existentes columna por columna).- La cláusula SET determina las columnas que serán cambiadas.- La cláusula FROM determina de cuales tablas vienen los datos si es usada más de una tabla para determinar el valor de la nueva columna.- La cláusula WHERE determina los renglones que van ha cambiar.- El CANNOT puede actualizar múltiples tablas en el mismo estatuto UPDATE.

- Sintaxis simplificada:update nombre_de_tablaset nombre_columna={expresión null}[,nombre_columna={expresión | null}][from nombre_tabla,nombre_tabla,...][where condiciones_búsqueda]

Page 174: Manuals Ql

Modificando datos-Actualizando datos...

- Ejemplo (cambio de datos basados en un valor constante)

update new_pubs - Cambia el nombre del set pub_name=“New Publisher’s Name” - editor where pub_name=‘New Age Books’

Page 175: Manuals Ql

Modificando datos-Actualizando datos...

- Ejemplo (cambio de datos en los renglones que cumplan con la condición).

update new_titles - Cambia el precio a 25 set price=25 - para todos los renglones where pub_id=‘1389’ - que tenga un pub_id=‘1389’

Page 176: Manuals Ql

Modificando datos-Actualizando datos...

- Ejemplo (cambio de datos en todos los renglones sin condición).

update new_titles set advance=0

Page 177: Manuals Ql

Modificando datos-Actualizando datos...

- Ejemplo (cambio de datos en una tabla, basados en datos de otra tabla). update new_titles

set price=15 from new_titles, publishers where new_titles.pub_id=publishers.pub_id and pub_name=‘New Age Books’

Page 178: Manuals Ql

Modificando datos-Actualizando datos...

- Ejemplo (actualizar usando una subquery). update new_titles

set total_sales=(select min(qty) from salesdetail where title_id=‘BU1032’)

where title_id=‘BU1032’

Page 179: Manuals Ql

Modificando datos-Borrando datos...

- La cláusula DELETE remueve los datos seleccionados dentro de una tabla.

-La palabra reservada FROM (después del DELETE)es opcional.-La palabra reservada FROM (extención de la sintaxis) permite que los datos sean borrados de una tabla basada en datos almacenados en otra tabla.-La cláusula WHERE califica cuales renglones se borrarán, si se omite todos los renglones se borrarán.

- Sintaxis:delete [from]{nombre_tabla}[from{nombre_tabla}][,...][where condiciones_búsqueda]

Page 180: Manuals Ql

Modificando datos-Borrando datos...

- Ejemplo (Borrando datos de una tabla basada en una constante)delete from new_pubswhere pub_name=“New Publisher’s Name”

Page 181: Manuals Ql

Modificando datos-Borrando datos...

- Ejemplo (Borrando datos de una tabla basada en una constante)delete from new_titles - Borra los datos de todos los

libroswhere price>15 - cuyo costo es mayor a $15

Page 182: Manuals Ql

Modificando datos-Borrando datos...

- Ejemplo (Borra renglones basados en datos en otras tablas). delete new_titles from new_titles,new_pubs - Borra de new_titles where new_titles.pub_id=new_pubs.pub_id - renglones que su

and pub_name=“Binnet & Hardley” - pub_id corresponde - a“Binnet & Hardley”

&

Page 183: Manuals Ql

Modificando datos-Borrando datos...

- Ejemplo (Borra renglones usando una subquery). delete from new_titles where titles_id in (select title_id from titleauthor where au_id in (select au_id from authors where state=‘UT’))

title_id /* Después del delete title_id /* Antes del delete BU1032 BU1032 BU1111 BU1111 BU2075 BU2075 BU7032 BU7032 MC2222 MC2222 PC1035 MC3021 PC8888 PC1035 PC9999 PC8888 PS1372 PC9999 PS3333 PS1372 PS7777 PS2091 TC3218 PS2186 TC4209 PS3333 TC7777 PS7777 TC3218 TC4209 TC7777

Page 184: Manuals Ql

EVALUACION.

Page 185: Manuals Ql

Preguntas de repaso Modulo No. 1. •¿Qué significa SQL?•¿Cuál es la definición de un dominio?•Especifique dos características de SQL.•¿Qué otro término es usado para describir una tabla?•¿Cuál tabla contiene la dirección de la tienda?•¿Cuál tabla contiene el número de identificación del editor?

Page 186: Manuals Ql

Preguntas de repaso. Módulo no. 2

1. Nombre de todas las tiendas.2. Select pub_name from store3. ¿Qué tiendas están en Washington?4. Desplegar toda la información de la tabla titles.5. Desplegar los tipos de libros disponibles.6. Desplegar todos los libros existentes y en que fecha fueron

publicados.7. Desplegar libros de los cuales su costo fue superior a 10.8. Desplegar todos los libros cuyo tipo es business.9. Encuentre los libros relacionados con cocina.10. Encuentre los libros que tengan Computer en el título.11. Encuentre libros de psicología cuyo costo sea mayor a 20.12. Desplegar libros que tengan precios entre 10 y 20.13. Encuentre los tipos de los libros en los que su pub_id = 0877.

Page 187: Manuals Ql

Preguntas de repaso.

13. Qué libros tienen cualesquiera de las siguientes clasificaciones mod_cook,trad_cook y business.

14. Encuentre los libros con los títulos cuya letra inicial se encuentra entre la A y la F.

15. Cuál es el resultado de:a) select title_id, type from titles where title like ‘C%’ b) select title_id, type from titles where pubdate>’12/31/86’16. Encuentre el libro de psicología que haya costado más de 20 y

tenga la palabra Computer en el título.17. Encuentre libros que tengan precio mayor que $10 y sus ventas

totales sean menores a 5000 .18. Cuáles libro vendieron más de 10,000 copias y costaron menos de

10 en la categoría de los business a la categoría modern_cooking.

Page 188: Manuals Ql

Preguntas de repaso. Modulo No. 3

1. Cambiar el nombre de la columna stor_id por código y el de la columna stor_name a nombre_tienda al desplegar los resultados.

2. Aproximadamente cuantos libros tendrían que ser vendidos para pagar el anticipo de cada libro.

3. Cuantas ganancias han sido generadas por cada titulo que se maneja. Poner el título GANANCIAS al resultado y cambiar el título de la columna title_id por CODIGO.

4. Un incremento en el precio de un 15% por libro es proyectado por el siguiente año, desplegar los precios anteriores y los precios nuevos usados precio_anterior y precio_nuevo como encabezado.

5. A que títulos no se les ha asignado un precio.6. Cuales editores no han fijado el anticipo y cuales han decidido no

dar dicho anticipo.7. Ordené la tabla de títulos por tipo y dentro de tipo por precio.

Page 189: Manuals Ql

Preguntas de repaso.

8. Encuentre aquellos autores que viven en el estado de “CA”, desplegar apellido, nombre y número de teléfono.

9. Encuentre los libros que tienen ganancias menores a 10,000 (Nota total_sales es un número de libros no valor moneda).

Page 190: Manuals Ql

Preguntas de repaso Modulo No. 4

1. Desplegar la ultima fecha en la que se pidió un libro.2. Desplegar el costo del libro menos caro que se encuentra

disponible por medio de esta distribución.3. ¿Cuál es el precio promedio de los libros del editor 0736?4. Desplegar la cantidad total de libros que se han sido vendidos.5. Desplegar el número total de libros que se manejan.6. ¿Cuántos editores tiene libros editados?7. ¿Cuántos libros están disponibles en la base de datos?8. Si el precio de los libros aumenta un 15%, ¿cuál será el costo

promedio que tendrá un libro en comparación con el actual?9. ¿cuántos libros de tipo business han sido vendidos?10. El anticipo que no se ha definido es por 5000, encuentre el

anticipo promedio.11. Encuentre el anticipo máximo que se ha dado a cada tipo del

libro.

Page 191: Manuals Ql

Preguntas de repaso Modulo No. 4

12. ¿Cuál es el precio promedio de los libros de cada tipo?13. ¿Cuál es el precio promedio de un libro?

a) Por su tipo.b) Por su editor.

14. ¿Cuál es el costo menos caro y cual es el costo más caro para cada tipo de libro?

15. ¿Cuántos libros ha vendido cada editor?16. Para los editores que tienen libros cuyo precio es menor a $10,

calcule el precio promedio de todos esos libros.17. ¿Cuántos libros existen de cada tipo?

Page 192: Manuals Ql

Preguntas de repaso Modulo No. 5

1. Que libros han sido ordenados y por cuales tiendas.2. Cuál es el nombre del autor que publico el libro MC2222.3. Cuales son los términos de pago para la tienda Eric The Read

Books.4. Cuales autores viven en la misma ciudad que los editores.5. Cuales autores viven en la misma ciudad (cuales ciudades tienen

más de un autor viviendo en ellos).6. Cuales libros fueron publicados el mismo día.7. Cuantos libros ha vendido cada autor.8. Desplegar los libros que tienen más de un autor.9. Un cliente llamo para ordenar un libro, solo sabia que era de

psicología y que lo habia escrito una mujer de nombre Ann o Anne, cual es el nombre completo y el titulo del libro.

10. Desplegar todos los autores y si hay editor en la ciudad que ellos viven desplegar el pub_name.

Page 193: Manuals Ql

Preguntas de repaso Modulo No. 6

1. ¿Cuál es el nombre del editor que vendió el libro más caro?2. ¿Cuál libro tiene un anticipo mayor que el anticipo más grande

que pago el editor Algodata Infosystems.?3. ¿Cuáles autores tienen el mismo apellido?4. ¿Cuáles tiendas no han ordenado ningún libro?5. Cuales autores viven en la misma ciudad que Algodata

Infosystems?6. ¿Cuántos libros ha ordenado la tienda Bookbeat.?7. ¿Cuáles editores han publicado libros de business?8. ¿Cuáles libros no han sido ordenados?9. A cuales autores les ha impreso libros la editora New Age Books.10. ¿Cuáles libros tienen un precio por arriba del precio mínimo

actual?11. ¿Cuáles libros han impreso los editores del estado de

Massachusett?

Page 194: Manuals Ql

Preguntas de repaso

12. ¿cuáles libros han sido publicados pero no vendidos?13. ¿cuáles autores han sido escribieron libros sobre cocina?

Page 195: Manuals Ql

Preguntas de repaso Modulo No. 7

1. Usando select into, crear una tabla llamda dirección N (la cual tendrá las mismas columnas que la tabla autores. La tabla debe estar vacía.

2. Inserte 2 datos ficticios en la tabla anterior.3. Inserte datos recuperando los autores que viven en Palo Alto y

San José.4. Cambiar un valor existente en la tabla dirección N: el codigo

postal de aquellas personas que viven en Palo Alto el valor 94333.5. Elimine los renglones que tienen como ciudad San José.