manual practico sq l

Upload: edgar-ariza-r

Post on 04-Jun-2018

231 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/13/2019 Manual Practico Sq l

    1/33

    Manual Prctico de SQLORIENTADO A SQL 7.0

    Preparado por:Alvaro E. Garca

    [email protected]

  • 8/13/2019 Manual Practico Sq l

    2/33

    Manual Prctico de SQLPreparado por: Alvaro E. Garca

    NDICE

    INTRODUCCIN 3

    PASOS PARA IMPLEMENTAR UNA BD 5

    CREAR UNA BD 6

    SENTENCIA CREATE 8

    LIGADURAS 9

    ELIMINACIN DE TABLAS 14

    SENTENCIA ALTER 14

    CONSULTAS SIMPLES 17

    SENTENCIA SELECT FROM 19

    COLUMNAS CALCULADAS 21

    CONDICIONES DE BSQUEDA 22

    ORDENACIN DE RESULTADOS (ORDER BY) 25

    CONSULTAS A MLTIPLES TABLAS (INNER JOIN) 26

    CONSULTAS RESUMEN 30CONCLUSIN 32

    BIBLIOGRAFA 33

    2

  • 8/13/2019 Manual Practico Sq l

    3/33

    Manual Prctico de SQLPreparado por: Alvaro E. Garca

    INTRODUCCIN.

    SQL (Lenguaje de Consulta Estructurado)

    El SQL (Structure Query Language), es un lenguaje de consultaestructurado establecido claramente como el lenguaje de altonivel estndar para sistemas de base de datos relacionales. Losresponsables de publicar este lenguaje como estndar, fueronprecisamente los encargados de publicar estndar, la ANSI(Instituto Americano de Normalizacin) y la ISO (organismoInternacional de Normalizacin). Es por lo anterior que estelenguaje lo vas a encontrar en cualquiera de los DBMS

    relacionales que existen en la actualidad, por ejemplo,ORACLE, SYBASES, SQL SERVER por mencionar algunos.

    El SQL agrupa tres tipos de sentencias con objetivosparticulares, en los siguientes lenguajes:

    Lenguaje de Definicin de Datos (DDL, Data DefinitonLanguage)

    Lenguaje de Manipulacin de Datos (DML, DataManagement Language)

    Lenguaje de Control de Datos (DCL, Data ControlLanguage)

    A continuacin se describen cada uno de los lenguajes:

    Lenguaje de Definicin de Datos (DDL, Data Definiton Language)

    Grupo de sentencias del SQL que soportan la definicin ydeclaracin de los objetos de la base de datos. Objetos talescomo: la base de datos misma(DATABASE), las tablas(TABLE),las Vistas (VIEW), los ndices (INDEX), los procedimientosalmacenados (PROCEDURE), los disparadores (TRIGGER),

    3

  • 8/13/2019 Manual Practico Sq l

    4/33

    Manual Prctico de SQLPreparado por: Alvaro E. Garca

    Reglas (RULE), Dominios (Domain) y Valores por defecto(DEFAULT).

    CREATE,

    ALTER y

    DROP

    Lenguaje de Manipulacin de Datos (DML, Data ManagementLanguage)

    Grupo de sentencias del SQL para manipular los datos queestn almacenados en las bases de datos, a nivel de filas(tuplas) y/o columnas (atributos). Ya sea que se requiera que

    los datos sean modificados, eliminados, consultados o que seagregaren nuevas filas a las tablas de las base de datos.

    INSERT,

    UPDATE,

    DELETE y

    SELECT

    Lenguaje de Control de Datos (DCL, Data Control Language)

    Grupo de sentencias del SQL para controlar las funciones deadministracin que realiza el DBMS, tales como la atomicidad yseguridad.

    COMMIT TRANSACTION,

    ROLLBACK TRANSACTION,

    GRANT

    REVOKE

    4

  • 8/13/2019 Manual Practico Sq l

    5/33

    Manual Prctico de SQLPreparado por: Alvaro E. Garca

    Pasos para implementar una base de datos:

    PASO Descripcin

    1Definir en el disco duro, el rea fsica que contendr las

    tablas de la base de datos. Sentencia SQL --> CREATEDATABASE.Tema 1 de este manual

    2 Crear las diferentes tablas de la base de dato. Sentencia SQL--> CREATE TABLE Tema 4.2 del contenido de este curso.

    3Insertar las filas de las diferentes tablas, sin violar la

    integridad de datos. Sentencia SQL --> INSERT INTO . Tema

    3.4.1 del contenido de este curso.

    4Actualizar los datos que cambien con el tiempo en las

    diferentes tablas. Sentencia SQL --> UPDATE. Tema 3.4.2del contenido de este curso.

    5Eliminar las filas que ya no se requieran en las diferentes

    tablas. Sentencia SQL --> DELETE Tema 3.4.3 del contenido

    de este curso.

    6Realizar las consultas deseadas a las tablas de la base de

    datos a travs de la poderosa sentencia de consultas del SQL,

    llamada SELECT. Tema 4.3 hasta 4.6 del contenido de este

    curso.

    7Dar nombre a las consultas. elaboradas en el paso No.6 cuandose requiera ocultar el diseo y columnas de las tablas a travs

    de la creacin de vistas lgicas. Sentencia SQL ----> CREATE

    VIEW. Tema 3.5 del contenido de este curso.

    5

  • 8/13/2019 Manual Practico Sq l

    6/33

    Manual Prctico de SQLPreparado por: Alvaro E. Garca

    Crear una base de datos:Sentencia SQL CREATE DATABASE

    SINTAXIS:

    create database nombre_basededatosON PRIMARY(name =nombre_basededatos_data,filename = 'c:\BDTRANSITO.mdf', /*Direccin donde se crea*/size = 3mb, /*Tamao de la base de datos*/maxsize = 7mb, /*Tamao de maximo de la base de datos*/filegrowth = 2 mb /*crecimiento de la base de datos*/)

    log on

    (name = BDTRANSITO_log,filename = 'c:\BDTRANSITO.ldf',size = 3mb,maxsize = 7mb,filegrowth = 2 mb)

    Tipo de archivo Extensin de nombre dearchivo recomendada

    Archivo de datos pr incipal .mdfArchivo de datos secundario .ndf

    Archivo de registro de transacciones .ldf

    Antes de proceder a crear la base de datos debemos averiguar si existeotra base de datos VENTAS para borrarla y crear la nuestra. Recuerde noutilizar estas sentecias en un servidor de produccin de SQL SERVER.Corra el siguiente codigo en el Query Analyser de SQLSERVER.

    IF DB_ID('VENTAS') IS NOT NULLBEGINDROP DATABASE VENTASEND

    A continuacin la sentencia CREATE DATABASE, que usaremos para lacreacin del espacio que contendr la base de datos Ventas es el siguiente

    6

  • 8/13/2019 Manual Practico Sq l

    7/33

    Manual Prctico de SQLPreparado por: Alvaro E. Garca

    CREATE DATABASE VENTAS ON PRIMARY(NAME=VENTAS_data,FILENAME='c:\VENTAS.mdf',SIZE=5MB,

    MAXSIZE=10MB,FILEGROWTH=1MB)LOG ON(NAME=VENTAS_log,FILENAME='c:\VENTAS.ldf',SIZE=5MB,MAXSIZE=10MB,FILEGROWTH=1MB)En el ejemplo que se acaba de presentar se crea un archivo principal deextensin mdf de tamao inicial de 5 MB, cuando este espacio se agote,este se expandir en 1 MB ms para tener espacio libre y meter msregistros o tablas y cuando se agote nuevamente el archivo fsico de1MB, ste se expandir en 1 MB nuevamente y as en lo sucesivo hastaalcanzar el mximo 10 MB ya de ah no crecer ms.

    7

  • 8/13/2019 Manual Practico Sq l

    8/33

    Manual Prctico de SQLPreparado por: Alvaro E. Garca

    Sentencia CREATE

    Dentro del Lenguaje de Definicin (DL) del SQL, la sentencia CREATEpermiten la definicin o creacin de muchos objetos de la base de datostales como: tablas (esquemas), ndices, vistas, dominios, ligaduras de

    integridad y procedimientos.

    En esta oportunidad veremos las sentencias correspondientes a la creacinde los esquemas o lo que es lo mismo las tablas que contendrn los datosde la base de datos, La sentencia CREATE TABLE.

    La sentencia CREATE TABLE, define el nombre de la tabla, las columnascon su tipo de datos, las ligaduras de intengridad que vigilan el valor quese guarde como dato en las columnas o atributos sean llaves o no.

    Sintaxis:

    CREATE TABLE nombre_tabla(campo1 tipo dato [NULL/NOT NULL] | CHECK (expresinLgica) | [DEFAULT expresinConstante],campo2 tipo dato [NULL/NOT NULL] | CHECK (expresinLgica) | [DEFAULT expresinConstante ],campo-N,

    PRIMARY KEY(campo_llave),FOREIGN KEY (campo_llave) REFERENCES tabla2 (campo_llave-tabla2))

    8

  • 8/13/2019 Manual Practico Sq l

    9/33

    Manual Prctico de SQLPreparado por: Alvaro E. Garca

    Ligaduras

    Esto de las ligaduras es muy importante que le presenten atencin. Ayudaa que dejes la vigilancia de la entrada de datos al DBMS y no al que

    programa la aplicacin que a veces puede darse que no haga tal validacinen la entrada de los datos. Esto tiene la ventaja de ahorrar lneas decdigos en los programas y no te que se implementan en la sentencia SQLCREATE TABLE .

    Tipo: Integridad de Dominio o ColumnaEspecifica un conjunto de valores que son vlidos a ingresar sobre una columnaespecfica para una tabla de la base de datos . Esta integridad se verifica a travs deuna la validacin de los valores de datos que se ingresan y el tipo de los datos aintroducir (numrico, alfanumrico, alfabtico, etc.).

    Tipos deRestriccin

    Descripcin Clusula SQL

    Por Defecto

    Esta restriccin asignaun valor especfico auna columna cuandoel valor para ello nohaya sidoexplcitamenteproporcionado para talcolumna en unasentencia "INSERT" ode adicin de un nuevoregistro en la tabla.

    DEFAULT

    Por ejemplo, s las reglas del negocio dicenque no se contratan a menores de edad, en lacolumna EDAD en la tabla EMPLEADO serestringe a que si una edad para un empleadoque ingresa no es sealada explcit amente, elDBMS asigne 18 que es la mayor a de edad.CREATE TABLE EMPLEADO (ID_EMPL int

    Primary KEY, EDAD int not null default 18)

    Por ValidacinEspecfica los valoresde datos que el DBMSacepta le seaningresados para unacolumna.

    CHECKCREATE TABLE EMPLEADO ( ID INTPRIMARY KEY, EDAD INT DEFAULT 18, SEXOVARCHAR(1) CHECK ( SEXO IN ('F','M') ) )Por ejemplo, la columna SEXO, solo permitirel ingreso del caracter F o M.

    Por Referencia

    Especifica los valoresde datos que sonaceptables paraactualizar una columna

    y que estn basados envalores de datoslocalizados en unacolumna de otra tabla.

    REFERENCES

    CREATE TABLE JOBS (job_id int pr imary keynot null, func_id int unique)CREATE TABLE EMPLEADO ( ID INTPRIMARY KEY, EDAD INT DEFAULT 18, SEXOVARCHAR(1) CHECK ( SEXO IN ('F','M') ) ,NO_FUNC int REFERENCES jobs(func_id))El valor de lo que entre en la columnaNO_FUNC en la tabla EMPLEADO deber seruno de los valores contenido en la columnaFUNC_ID en la Tabla JOBS.

    9

  • 8/13/2019 Manual Practico Sq l

    10/33

    Manual Prctico de SQLPreparado por: Alvaro E. Garca

    Tipo: Integridad de Entidad o TablaEspecfica que en una tabla o entidad, todas sus fil as tenga un identificadornico que diferencie a una fila de otra y tambin que se establezcan columnascuyo contenido es un valor nico que las hace llaves candidatas para un futurocomo por ejemplo: nmero de cdula, nmero de seguro social o cuenta de e-

    mail.Tipos de

    RestriccinDescripcin Clusula SQL

    Por LlavePrimaria

    Este tipo derestriccin se aplicaa todas las filaspermitiendo queexista unidentificador, que seconoce como llave

    primaria y que seasegura que losusuarios nointroduzcan valoresduplicados. Ademsasegura que se creeun ndice paramejorar eldesempeo. Losvalores nulos noestn permitidospara este tipo derestriccin.

    PRIMARY KEYCREATE TABLE CLIENTE (NUMCLI INT notnull,NOMCLI char(30) not null, DIRCLI char(30),FAX INT, E_MAIL CHAR(30) UNIQUE notnull, SALD_0_30 DECIMAL (10,2),SALD_31_60 DECIMAL (10,2), SALD_61_90DECIMAL (10,2), primary key (NUMCLI) )En este ejemplo, NUMCLI corresponder aser la ll ave primaria de la tabla CLIENTE.

    Por ValorUnico

    Con esta restriccinse previene laduplicacin devalores en columnasque tienen valor nicoy que no son llaveprimaria pero quepueden ser una llavealternativa ocandidata para elfuturo. Asegura que

    se cree (Por parte delDBMS) un ndice paramejorar eldesempeo. Y al igualque las llavesprimarias, no se leest permitido que seintroduzcan valoresnulos.

    UNIQUECREATE TABLE CLIENTE (NUMCLI INT notnull,NOMCLI char(30) not null, DIRCLI char(30),FAX INT, E_MAIL CHAR(30) UNIQUE notnull, SALD_0_30 DECIMAL (10,2),SALD_31_60 DECIMAL (10,2), SALD_61_90DECIMAL (10,2), pr imary key (NUMCLI) )En este ejemplo, E_MAIL correponder aser una columna de valores nico en latabla CLIENTE

    10

  • 8/13/2019 Manual Practico Sq l

    11/33

    Manual Prctico de SQLPreparado por: Alvaro E. Garca

    Tipo: Integridad ReferencialLa Integridad Referencial asegura que las relaciones que existe entre llaveprimaria (en la tabla referenciada) y la llave fornea (en las tablas referenciantes)sern siempre mantenidas. Una fila o regist ro en la tabla referenciada (tabladonde reside la llave primaria) no puede ser bor rada o su l lave primaria cambiadasi existe una fila o registro con una llave fornea (en la tabla referenciante) que

    se refiere a esa llave primaria.Tipos de

    RestriccinDescripcin Clusula SQL

    Por LlaveFornea

    En esta restriccin sedefine una columna ocombinacin decolumnas en lascuales su valor debecorresponder al valorde la llave primaria

    en la misma u en otratabla.

    FOREIGN KEYCREATE TABLE PEDIDO (NUMPED INT notnull PRIMARY KEY,NUMCLI INT not null, FECHA_PEDDATETIME,TOT_DESC DECIMAL (10,2),

    FOREIGN KEY (NUMCLI) REFERENCESCLIENTE(NUMCLI) )En este ejemplo de la creacin de la tablaPEDIDO, la columna NUMCLI correpondera ser la llave fornea que hace referecia a lallave primaria NUMCLI (no necesariamentedeben llamarse igual las columnas perodeben tener igual tipo de datos) en la tablaCLIENTE

    11

  • 8/13/2019 Manual Practico Sq l

    12/33

    Manual Prctico de SQLPreparado por: Alvaro E. Garca

    A continuacin se muestran las sentencias CREATE TABLE que crean lastablas de la Base de Datos VENTAS, de la cual ya se creo el rea alprincipio de este manual.

    Es muy importante el orden en que se crean las tablas. Se debe a que no

    debe violarse la referencia cruzada entre las ligaduras de integridad deltipo referencial (es decir llave primaria con forneas). Por ejemplo no puedecrear la tabla de PEDIDO primero que la tabla de cliente, pues la tabla dePEDIDO hace referencia a CLIENTE.

    Primero crear las tablas que solo tienen llave primaria y luego las tablasque incluyen llaves forneas. En nuestro caso, primero creamos a lastablas: CLIENTE, ARTICULO y VENDEDOR y despus a PEDIDO y aDETALLE_PED.

    12

  • 8/13/2019 Manual Practico Sq l

    13/33

    Manual Prctico de SQLPreparado por: Alvaro E. Garca

    Creacin de Tabla ClienteCREATE TABLE CLIENTE

    (NUMCLI INT not null,NOMCLI CHAR(30) not null, DIRCLI char(30), FAX INT,

    E_MAIL CHAR(30) DEFAULT ('Desconocido'),

    SALD_0_30 DECIMAL (10,2), SALD_31_60 DECIMAL (10,2),

    SALD_61_90 DECIMAL (10,2), primary key (NUMCLI) )Creacin de Tabla Vendedor

    CREATE TABLE VENDEDOR (CODVEND INT not null,

    NOMVEND char(20) not null,APELLVEND char(20) not null,

    DIRVEND char(30), TELVEND INT, E_MAIL CHAR(30)

    DEFAULT('Desconocido'),CUOTA DECIMAL (10,2), VENTAS DECIMAL (10,2), primary key

    (CODVEND) )Creacin de Tabla Artculo

    CREATE TABLE ARTICULO (NUMART char(4) not null PRIMARY

    KEY, DESCRIPCION CHAR(30), PRECIO DECIMAL (10,2) NOT

    NULL CHECK (PRECIO >= 0.00), EXISTENCIA INT,

    CATEGORIA_ART CHAR (15))

    Creacin de Tabla PedidoCREATE TABLE PEDIDO (NUMPED INT not null PRIMARY KEY,

    NUMCLI INT not null, FECHA_PED DATETIME,

    TOT_DESC DECIMAL (10,2),

    FOREIGN KEY (NUMCLI) REFERENCES CLIENTE(NUMCLI) ,

    FOREIGN KEY (CODVEND) REFERENCES VENDEDOR(CODVEND))

    Creacin de Tabla Detalle_PedCREATE TABLE DETALLE_PED (NUMPED INT not null,

    NUMART char (4) not null, CANTIDAD INT CHECK (CANTIDAD >=

    0), PRIMARY KEY (NUMPED,NUMART),

    FOREIGN KEY (NUMPED) REFERENCES PEDIDO(NUMPED),

    FOREIGN KEY (NUMART) REFERENCES ARTICULO (NUMART) )

    13

  • 8/13/2019 Manual Practico Sq l

    14/33

    Manual Prctico de SQLPreparado por: Alvaro E. Garca

    Eliminacin de Tablas:

    La sentencia para eliminar una tabla y por ende todo los objetos asociados

    con esa tabla como: las vistas, disparadores, etc., DROP TABLE, donde res el nombre de una tabla existente.

    DROP TABLE r

    Por ejemplo si deseamos eliminar a la tabla ARTICULO_PANAMA,revisemos haber si esta ya existe, de la siguiete manera

    SELECT * from ARTICULO_PANAMA

    Posteriormente una vez veriifcada que la tabla existe, se procede a borrarla tabla, escribiendo lo siguiente en l ainterface de consultas del SQL:

    Sentencia ALTER

    Despus que una tabla ha sido utilizada durante algn tiempo, los

    usuarios suelen descubrir que desean almacenar informacin adicionalcon respecto a las tablas. Por ejemplo en la base de datos VENTAS, sepodra desear:

    Aadir el nombre y numero de de una persona de contacto a cadafila de la tabla CLIENTES para contactar a los clientes.

    Aadir una columna de punto de reorden mnimo en la tablaARTICULO, para que la base de datos pueda alertarautomticamente cuando la cantidad o stock de un producto enparticular esta por debajo de lo optimo para la venta.

    Por lo general, esta sentencia ALTER TABLE se utiliza sobre tablas que yaposeen desde cientos a miles de filas por ser tablas de un sistemas deBase de Datos que ya esta en produccin.

    14

    http://sistemas%20de%20informacion%20ii/Modulos/Modulo_4/Modulo%204/bdejemplo.htmhttp://sistemas%20de%20informacion%20ii/Modulos/Modulo_4/Modulo%204/bdejemplo.htm
  • 8/13/2019 Manual Practico Sq l

    15/33

    Manual Prctico de SQLPreparado por: Alvaro E. Garca

    Los cambios que se pueden realizar con la sentencia SQL ALTER TABLEson (ver ejemplo con la figura ) :

    Tabla para ejemplos de sentencia ALTER TABLE.1. Aadir una definicin de la columna de una tabla. Puede crearse convalores nulos o valores

    ALTER TABLE nombre_de_la_tabla ADD nombre_de_columna_nuevaTIPO_DE_DATO NULL

    [ CONSTRAINT nombre_de_nueva_restriccion CHECK / DEFAULT]

    Ejemplo: ALTER TABLE T1 ADD a6 VARCHAR(30) NULL

    2. Eliminar una columna de la tabla. Pero antes de su eliminacin debenser eliminados por ALTER TABLE todas las restricciones que estndefinidas sobre esta columna.

    Ejemplo: ALTER TABLE T1 DROP COLUMN a4

    3. Eliminar la definicin de: llave primaria, fornea o restricciones deligaduras de integridad (check), existentes para una tabla. Esta accin noelimina la a la columna con sus valores, ella permanece tal cual comoesta, solo se elimina su definicin. Este procedimiento varia de DBMS, conSQL SEVER, Primero se debe averiguar el nombre de la restriccin oligadura de integridad (CONSTRAINT) eliminar se ejecuta elprocedimiento almacenado SP_HELP nombre_de_Tabla y en el resultadose busca en la columna constraint_name a la derecha de constraint_typepara saber el nombre que el DBMS le puso a la restriccin de llaveprimaria y luego se ejecuta la sentencia ALTER TABLE con el nombre de la

    definicin de llave primaria a eliminar.

    Ejemplo: ALTER TABLE T1 DROP CONSTRAINTPK__T1__numeroqueasignaelDBMS

    Esto elimina cualquiera ligadura de integridad tratada en el tema 4.2.1.Para verificar al ejecutar nuevamente SP_HELP nombre_de_Tabla, en elresultado ya no sale en constraint_type el nombre de la llave primaria.

    15

    http://sistemas%20de%20informacion%20ii/Modulos/Modulo_4/Modulo%204/tipodedatosfinal.htmhttp://sistemas%20de%20informacion%20ii/Modulos/Modulo_4/Modulo%204/tipodedatosfinal.htm
  • 8/13/2019 Manual Practico Sq l

    16/33

    Manual Prctico de SQLPreparado por: Alvaro E. Garca

    4. Definir una llave primaria para una tabla. La columna(s) a la cual se ledar esta responsabilidad debe contener previamente valores nicos porfila.

    Ejemplo: ALTER TABLE T1 ADD PRIMARY KEY (a1,a2)

    5. Definir una nueva llave fornea para una tabla. La columna a definircomo llave fornea debe contener previamente valores que correspondena la llave primaria de otra tabla. Es similar al descrito en llave primaria,solo que la palabra clave reservada es ADD FOREIGN KEY .

    6. Se puede habilitar o inhabilitar los disparadores (trigger) en una tabla.

    ALTER TABLE nombre_de_la_tabla ENABLE TRIGGERnombre_de_trigger

    ALTER TABLE nombre_de_la_tabla DISABLE TRIGGERnombre_de_trigger

    La persona que puede realizar esta operacin de alterar la tabla puede ser:el DBA o el creador de la tabla, u otra persona que el creador o DBA hayaautorizado. Para la ultima situacin en que a una persona se le otorga elpermiso en la operacin, el usuario, debe calificar el nombre de la tablacon el nombre de su creador por delante y alterar la definicin de la tablade otro usuario, por ejemplo:

    ALTER TABLE nombredueo.nombretabla

    16

  • 8/13/2019 Manual Practico Sq l

    17/33

    Manual Prctico de SQLPreparado por: Alvaro E. Garca

    Consultas Simples

    El corazn o poder del Lenguaje SQL es el poder hacer consultas decualquier tipo a la base de datos en forma no procedural. La sentenciaSELECT es muy poderosa y ampliamente rica en sus clusulas y

    variantes permitiendo la capacidad de atender en poco tiempo a consultascomplejas sobre la base de datos. Est en el especialista desarrollador deaplicaciones conocerlo a profundidad para explotar las bondades yvirtudes.

    Gracias a esta sentencia es que se pueden realizar todas las operacionesdel Algebra Relacional, tratadas en la seccin 3.2 y 3.3 del modulo III. Enesta seccin veremos la sintaxis de como se utiliza.

    La sentencia SELECT, obtiene filas de la base de datos y permiterealizar la seleccin de una o varias filas o columnas de una o

    varias tablas.

    La sintaxis completa de la instruccin SELECT es compleja, perola voy resumir como sigue (los corchetes cuadrados indican que laclusula no es obligatoria):

    SELECT nombres de las columnas

    [INTO nueva Tabla destino para resultados del select_]

    FROM origenTabla

    [WHERE condicin de Bsqueda]

    [GROUP BY nombres de columnas por la cual Agrupar]

    [HAVING condicinBsqueda para Group By ]

    [ORDER BY nombre de columnas [ASC | DESC] ]

    Tambin se puede unir estas sentencias con otras por el operador UNIONentre consultas para combinar sus resultados en un sola tabla deresultados sin nombre.

    17

  • 8/13/2019 Manual Practico Sq l

    18/33

    Manual Prctico de SQLPreparado por: Alvaro E. Garca

    Veamos cales son las funciones de cada una de las clusulas de lasentencia SELECT.

    La clusula SELECT: Se usa para listar las columnas de las tablas que sedesean ver en el resultado de una consulta. Adems de las columnas se

    pueden listas columnas a calcular por el SQL cuando actu la sentencia.Esta clusula no puede omitirse.

    La clusula FROM: Lista las tablas que deben ser analizadas en laevaluacin de la expresin de la clusula WHERE y de donde se listarnlas columnas enunciadas en el SELECT. Esta clusula no puedeomitirse.

    La clusula WHERE: establece criterios de seleccin de ciertas filas en elresultado de la consulta gracias a las condiciones de bsqueda. Si no serequiere condiciones de bsqueda puede omitirse y el resultado de la

    consulta sern todas las filas de las tablas enunciadas en el FROM.

    La clusula GROUP BY: especifica una consulta sumaria. En vez deproducir una fila de resultados por cada fila de datos de la base de datos,una consulta sumaria agrupa todas las filas similares y luego produce unafila sumaria de resultados para cada grupo de los nombres de columnasenunciado en esta clusula. En otras palabras, esta clusula permitiragrupar un conjunto de columnas con valores repetidos y utilizar lasfunciones de agregacin sobre las columnas con valores no repetidas. Estaclusula puede omitirse.

    La clusula HAVING: le dice al SQL que incluya slo ciertos gruposproducidos por la clusula GROUP BY en los resultados de la consulta. Aligual que la clusula WHERE, utiliza una condicin de bsqueda paraespecificar los grupos deseados. La clusula HAVING es la encargada decondicionar la seleccin de los grupos en base a los valores resultantes enlas funciones agregadas utilizadas debidas que la clusula WHEREcondiciona solo para la seleccin de filas individuales. Esta clusulapuede omitirse.

    La clusula ORDER BY: permitir establecer la columna o columnas sobrelas cuales las filas resultantes de la consulta debern ser ordenadas.

    Esta clusula puede

    18

  • 8/13/2019 Manual Practico Sq l

    19/33

    Manual Prctico de SQLPreparado por: Alvaro E. Garca

    Sentencia SELECT-FROM

    El utilizar la sentencia SELECT, con estas dos clusulas SELECT -FROM, muestra como resultado a todas las filas existentes en las tablasespecificadas en el FROM.

    Ejemplo # 1: Seleccionar todas las columnas y filas de la tablaCLIENTE

    SELECT * FROM CLIENTE

    Da como resultado un total de 8 filas con las 7 columnas que posee latabla CLIENTE.

    Ejemplo # 2: Seleccionar columnas: nomcli y e_mail de la tablaCLIENTE

    SELECT NUMCLI, NOMCLI, E-MAIL FROM CLIENTE

    Da como resultado un total de 8 filas con solo 3 columnas.

    Ejemplo # 3:Este ejemplo selecciona las columnas y las muestra con eltitulo especificado en AS, es decir con un alias. A NUMCLI lo muestracomo NUMERO DE CLIENTE y NOMCLI lo muestra con el nombreespecificado en el AS como NOMBRE DEL CLIENTE. Esto permite mostraruna columna con encabezados mas familiares a los usuarios finales.

    SELECT NUMCLI AS 'NUMERO DE CLIENTE', NOMCLI AS'NOMBRE DE CLIENTE' FROM CLIENTE

    Da como resultado un total de 8 filas.

    La clusula AS puede omitirse y el resultado es el mismo.

    SELECT NUMCLI 'NUMERO DE CLIENTE', NOMCLI 'NOMBRE DECLIENTE' FROM CLIENTE

    Da como resultado un total de 8 filas.

    19

  • 8/13/2019 Manual Practico Sq l

    20/33

    Manual Prctico de SQLPreparado por: Alvaro E. Garca

    SENTENCIA DE FILAS DUPLICADAS (DISTINCT)

    Si una consulta incluye la llave primaria (pk) de una tabla en su lista deseleccin, entonces cada fila de resultados ser nica (ya que la llaveprimaria (pk) tiene un valor diferente en cada fila). Si no se incluye la llave

    primaria en los resultados, pueden producirse filas duplicadas. Veamos elsiguiente ejemplo,

    Ejemplo #5: Seleccionar el cdigo de artculos que han sido pedidos. Sinusar la palabra reservada DISTINCT.

    El resultado tendra 18 filas y con cdigos de productos repetidos.

    SELECT NUMARTFROM DETALLE_PEDORDER BY NUMART

    Ejemplo # 6: Seleccionar el cdigo de artculos que han sido pedidos.Utilizando la palabra reservada DISTINCT.

    El resultado contiene menos filas, 9 filas y con cdigos de productosnicos, es decir no se repiten por las veces que fueron comprados como enel ejemplo #5.

    SELECT DISTINCT NUMARTFROM DETALLE_PED

    ORDER BY NUMART

    20

  • 8/13/2019 Manual Practico Sq l

    21/33

    Manual Prctico de SQLPreparado por: Alvaro E. Garca

    Columnas Calculadas

    Adems de las columnas cuyos valores sern introducidos a la base dedatos a travs de la sentencia INSERT, una consulta SQL puede incluir ensu clusula SELECT columnas calculadas cuyo valor se calculan a partir

    de los valores de las otras columnas almacenadas en las tablas. Estascolumnas, son especie de una columna virtual pues no existen fsicamenteen la tabla y sus valores calculados corresponden a los valores por fila.

    Esta es una ventaja del SQL que evita que se tengan que disearcolumnas calculadas fsicas en la base de datos trayendo perdida enalmacenamiento fsico y inconsistencia por falta de mantenimiento de lamisma.

    Ejemplo #7: Determinar a los clientes con saldo.

    Recuerde que el saldo se encuentra almacenado en tres columnasdiferentes: SALD_0_30 + SALD_31_60 + SALD_61_90.

    SELECT NUMCLI, NOMCLI,(SALD_0_30 +SALD_31_60 + SALD_61_90) as "Saldo del Cliente"FROM CLIENTEWHERE (SALD_0_30 +SALD_31_60 + SALD_61_90) 0

    Ejemplo #8: Para determinar el monto de dinero que llevan acumulados

    en ventas por arriba de sus cuotas los vendedores, la consulta SELECTcon columnas calculadas por vendedor es,

    SELECT CODVEND, NOMVEND, APELLVEND, (VENTAS - CUOTA)AS 'Monto por Arriba de Coutas'FROM VENDEDORWHERE (VENTAS - CUOTA) > 0

    21

  • 8/13/2019 Manual Practico Sq l

    22/33

    Manual Prctico de SQLPreparado por: Alvaro E. Garca

    Condiciones de Bsqueda (=, , >, =, , =, = 1309 AND NUMCLI

  • 8/13/2019 Manual Practico Sq l

    23/33

    Manual Prctico de SQLPreparado por: Alvaro E. Garca

    Condiciones de Bsqueda Compuestas con AND, OR y NOT:

    Ejemplo # 12: Se puede combinar las conectivas lgicas AND, OR or yNOT y filtrar mayor la seleccin en la consulta. Por ejemplo al seleccionara los clientes cuyo nmero de cliente est contenido entre el rango 1309 y

    1950 y que han comprado o incrementado su saldo dentro del mes encurso, es decir su saldo en mes corriente no es cero.

    SELECT NUMCLI AS 'NUMERO DE CLIENTE', NOMCLI AS'NOMBRE DE CLIENTE', SALD_0_30

    FROM CLIENTEWHERE NUMCLI BETWEEN 1309 AND 1950 AND NOTSALD_0_30 = 0

    Ejemplo # 13: Utilizando el operador OR podemos buscar un clientecuyo cdigo dudamos si es 824 o 842.

    SELECT NOMCLI, NUMCLI FROM CLIENTE WHERE NUMCLI =842 OR NUMCLI = 824

    Ejemplo # 14: Para seleccionar los vendedores cuyas ventas es mayorque la couta que se espera deben vender y que sus ventas son superiores aB/8000.00.

    SELECT CODVEND, NOMVEND, APELLVEND, VENTAS, CUOTAFROM VENDEDORWHERE VENTAS > CUOTA AND VENTAS > 8000

    Condiciones de Bsqueda con LIKE:

    Ejemplo # 15: Seleccionar a todos los clientes que contengan la letra "H"dentro de su nombre.

    SELECT NUMCLI AS 'NUMERO DE CLIENTE', NOMCLI AS'NOMBRE DE CLIENTE' FROM CLIENTE WHERE NOMCLILIKE '%H%'

    23

  • 8/13/2019 Manual Practico Sq l

    24/33

    Manual Prctico de SQLPreparado por: Alvaro E. Garca

    Condiciones de Bsqueda con la funcin SOUNDEX:

    Se emplea en situaciones donde se tiene idea del sonido de unvalor de columna pero que no se conoce su correcta escritura (esuna funcin nueva incorporada en el SELECT).

    Ejemplo # 16: Seleccionar a todos los clientes cuyo nombre sueneparecido al especificado en la funcin SOUNDEX ( ).

    SELECT NUMCLI, NOMCLI FROM CLIENTE WHERESOUNDEX (NOMCLI) = SOUNDEX ( 'DUIT' )

    Condiciones de Bsqueda con IS NULL:

    Los valores de NULL crean una lgica trivaluada para lascondiciones de bsqueda en SQL. Para una fila determinada, elresultado de una condicin de busqueda puede ser TRUE oFALSE, o puede ser NULL debido a que una de las columnasutilizadas en la evaluacin de la condicin de bsqueda contengaun valor NULL.

    A veces es til comprobar explcitamente los valores NULL en unacondicin de bsqueda y manejarlas directamente.

    Ejemplo # 17: Consultar que filas de la tabla ARTICULO tienen valorNULL en algunas de sus columnas: DESCRIPCION, EXISTENCIA YCATEGORIA_ART.

    SELECT *FROM ARTICULOWHERE DESCRIPCION IS NULL OR EXISTENCIA IS NULL ORCATEGORIA_ART IS NULL

    24

  • 8/13/2019 Manual Practico Sq l

    25/33

    Manual Prctico de SQLPreparado por: Alvaro E. Garca

    Ordenacin de resultados de Consulta (clusula ORDER BY)

    Al igual que las filas de una tabla en la base de datos las filas de losresultados de una consulta no estn dispuestas en ningn ordenparticular. Existen situaciones en la que es necesario ver la informacin en

    un orden en especial, como en orden alfabetico (ASC, ascendente) u ver alas cifras de dinero listadas de mayor monto a menor (DESC,descendente). Se puede pedir a SQL que ordene los resultados de unaconsulta incluyendo la clusula ORDER BY en la sentencia SELECT.

    Ejemplo #18: Para buscar la informacin de los vendedores por orden desu apellido o nombre, la sentencia select con la clusula ORDER BY seriala siguiente:

    SELECT *FROM VENDEDORORDER BY APELLVEND

    Ejemplo # 19: Para determinar en una lista resultante del ejemplo #8,quien el nombre del vendedor con mayor el monto de dinero esconveniente ordenar por esta que llevan acumulados en ventas por arribade sus cuotas los vendedores, la consulta SELECT con columnascalculadas por vendedor es,

    SELECT CODVEND, NOMVEND, APELLVEND, (VENTAS - CUOTA)AS 'Monto por Arriba de Coutas'

    FROM VENDEDORWHERE (VENTAS - CUOTA) > 0

    ORDER BY (VENTAS - CUOTA) DESC

    25

  • 8/13/2019 Manual Practico Sq l

    26/33

    Manual Prctico de SQLPreparado por: Alvaro E. Garca

    Consultas a Mltiples Tablas

    Generalmente el poder de la sentencia SELECT se basa en sucapacidad de poder en una sola sentencia consultar mltiplestablas simultneamente. Esta operacin tambin se le llama

    JOIN y es lo que en particular llamo un "pegue de tablas enforma horizontal" y ocurre gracias a que existen columnas deconexin sea atributos de asociacin comunes en las tablas quese unen en esta forma, vea figura:

    Para que se puedan realizar consultas a mltiples tablas el requisitoprincipal es que las tablas a reunirse en una consulta tengan columnascon valores o dominios comunes, es decir columna de conexin. Sireunimos a las tablas de la figura 4.4.a, de tal forma que la Tabla1 serena con la Tabla2 y la Tabla2 se reuniera con la Tabla3, el requisitoindispensable sera: la Tabla1 debe tener una columna comn en laTabla2 y Tabla2 debe tener una columna de conexin en la Tabla3. Por logeneral estas columnas comunes son: en una tabla la columna es la llaveprimaria y en la otra tabla la columna asociada es la llave fornea quereferencia a la primaria. Para este tipo de consultas a mltiples tablas laclusula FROM es la responsable de indicar cual ser la(s) tabla(s) fuentes.

    Existen dos formas de sintaxis permitidas para la escritura de lasentencia SELECT para la reunin de tablas, basada en la figura 4.4.a,estas formas son las siguientes:

    FORMA 1:

    SELECT a1, a2, a5, b1, b2, b3, c1, c2, c3

    26

  • 8/13/2019 Manual Practico Sq l

    27/33

    Manual Prctico de SQLPreparado por: Alvaro E. Garca

    FROM Tabla1, Tabla2, Tabla3

    WHERE Tabla1.a1 = Tabla2.b2 AND Tabla2. b1 = Tabla3.c1

    FORMA 2:

    SELECT a1, a2, a5, b1, b2, b3, c1, c2, c3

    FROM Tabla1 INNER JOIN Tabla2 ON Tabla1.a1 = Tabla2.b2

    INNER JOIN Tabla3 Tabla2. b1 = Tabla3.c1

    Note que las columnas comunes en ambas tablas han de calificarse con elnombre de la tabla que pertenecen para evitar errores de ambigedad.

    La Forma 2, tiene la ventaja de liberar a la clusula WHERE y dejar estapara filtros especficos sobre las filas resultantes de la reunin de tablas.

    27

  • 8/13/2019 Manual Practico Sq l

    28/33

    Manual Prctico de SQLPreparado por: Alvaro E. Garca

    Ejemplo #21: Si se desea unir la tabla de CLIENTES con PEDIDO (verfigura 4.4.b.), para ambas tablas, la columna de conexin es NUMCLI, laconsulta SELECT que realiza esta reunin es la siguiente:

    FORMA 1:

    SELECT CLIENTE.NUMCLI, NOMCLI, NUMPED, FECHA_PED, TOT_DESCFROM CLIENTE, PEDIDOWHERE CLIENTE.NUMCLI = PEDIDO.NUMCLI

    FORMA 2:

    SELECT CLIENTE.NUMCLI, NOMCLI, NUMPED, FECHA_PED, TOT_DESCFROM CLIENTE INNER JOIN PEDIDOON CLIENTE.NUMCLI = PEDIDO.NUMCLI

    Ejemplo # 24: Seleccionar todos los pedidos con su informacin completa,esto incluye: datos del cliente, datos del pedido, datos del detalle de lacompra, datos del articulo de la compra y datos den vendedor que atendiel pedido. Esta consulta requiere que se realice la unin (join) de lascinco tablas: Cliente, Pedido, Detalle_Ped , Artculo y Vendedor, que sontodas las tablas de la base de datos del VENTAS.

    SELECT PEDIDO.NUMPED, CLIENTE.NUMCLI,NOMCLI,DIRCLI,APELLVEND AS VENDEDOR, FECHA_PED,ARTICULO.NUMART,DESCRIPCION,PRECIO,CANTIDAD,(PRECIO*CANTIDAD) AS TOTALFROM CLIENTE INNER JOIN PEDIDO ON CLIENTE.NUMCLI=PEDIDO.NUMCLIINNER JOIN DETALLE_PED ON PEDIDO.NUMPED = DETALLE_PED.NUMPED

    INNER JOIN ARTICULO ON DETALLE_PED.NUMART=ARTICULO.NUMARTINNER JOIN VENDEDOR ON PEDIDO.CODVEND = VENDEDOR.CODVENDORDER BY PEDIDO.NUMPED

    28

    http://sistemas%20de%20informacion%20ii/Modulos/Modulo_4/Modulo%204/bdejemplo.htmhttp://sistemas%20de%20informacion%20ii/Modulos/Modulo_4/Modulo%204/bdejemplo.htm
  • 8/13/2019 Manual Practico Sq l

    29/33

    Manual Prctico de SQLPreparado por: Alvaro E. Garca

    RESULTADO:

    29

  • 8/13/2019 Manual Practico Sq l

    30/33

    Manual Prctico de SQLPreparado por: Alvaro E. Garca

    Consultas Resumen

    Estas consultas resultan ventajosas para hacer bsquedas a nivelde los valores de las columnas a nivel de todas las filas. Porejemplo si se desea saber en una tabla de 10,000 filas: el mayor

    saldo adeudado, la cuota mnima o mxima asignada a losvendedores, el tamao promedio de pedidos, el total de clientes ovendedores (es decir total de filas).

    Ejemplo # 27: Determinar en una misma consulta lo siguiente:

    Total de Vendedores. COUNT (NOMVEND) Monto Total de COUTAS que deben alcanzarse entre todos los

    vendedores. SUM(CUOTA). El monto promedio de cuotas asignado a un vendedor. AVG(COUTA)

    El valor de la cuota mxima asignado al un vendedor. MAX(COUTA) El valor de la cuota mnima asignado a un vendedor. MIN (COUTA)

    SENTENCIA SQL:

    USE VENTASSELECT COUNT (NOMVEND)AS "TOTAL VENDEDORES",SUM(CUOTA)"MONTO DE CUOTAS",AVG(CUOTA) AS "CUOTAPROMEDIO", MAX(CUOTA) "CUOTA MAX.", MIN(CUOTA)"CUOTA MIN."FROM VENDEDOR

    El resultado de esta consulta es una fila con los siguientes valores:TOTAL VENDEDORES MONTO DE CUOTAS CUOTA PROMEDIO CUOTA MAX.CUOTA MIN.------------------------------ ----------------------------- ---------------------------- --------- ----------- ---------------

    10 25341.00 2534.108705.00 200.00

    Otros ejemplos:

    Sentencia SUM:

    SELECT SUM (cantidad) as 'Suma de las Cantidades' FROM detalle_ped

    Sentencia AVG:

    SELECT AVG (cantidad) as 'Cantidad Promedio Pedida' FROM detalle_ped

    30

  • 8/13/2019 Manual Practico Sq l

    31/33

    Manual Prctico de SQLPreparado por: Alvaro E. Garca

    Sentencia MIN:

    SELECT MIN (cantidad) as 'Cantidad Mnimo Pedida' FROM detalle_ped

    Sentencia MAX:

    SELECT MAX (cantidad) as 'Cantidad Mxima Pedida'FROM detalle_ped

    Sentencia COUNT

    SELECT COUNT (*) as 'Total de Clientes' FROM CLIENTE

    Sentencia DISTINCT

    SELECT COUNT(DISTINCT numped) as 'Total de Pedidos Solicitados'FROM detalle_ped

    En esta ultima consulta hace que los nmeros de pedidos enDETALLE_PED , que son repetidos, la clusula DISTINCT cuente solonmeros de uno de los que se repiten.

    31

  • 8/13/2019 Manual Practico Sq l

    32/33

    Manual Prctico de SQLPreparado por: Alvaro E. Garca

    CONCLUSIN

    Este manual fue hecho con el propsito de ayudar a losestudiantes universitarios que tienen un deseo de aprender,ms fuerte cada da.

    Tambin para ayudarme a m mismo en la codificacin de SQL.

    Cualquier comentario o sugerencia (constructivas claro), me lopueden hacer a mi correo electrnico:

    [email protected]@iespana.es

    FECHA DE CREACIN:Lunes 24 de noviembre de 2003

    32

    mailto:[email protected]:[email protected]:[email protected]:[email protected]
  • 8/13/2019 Manual Practico Sq l

    33/33

    Manual Prctico de SQLPreparado por: Alvaro E. Garca

    BIBLIOGRAFA

    Mdulos 3 y 4 del curso de Sistemas de Informacin IIVirtual de laUniversidad Tecnolgica de Panam,(2003)

    Nota: tales mdulos fueron creados por la ingenieraTamara Batista