SlideShare ist ein Scribd-Unternehmen logo
1 von 124
Downloaden Sie, um offline zu lesen
Lenguaje SQL
                               SQL Server 2005

                                  Marta E. Zorrilla

                 Departamento de Matemática, Estadística y Computación

                            Universidad de Cantabria




Marta Zorrilla                         2008-2009                         1
Contenido
Contenido




                  Introducción.
                   Introducción.
                  Instrucciones de Definición de Datos.
                   Instrucciones de Definición de Datos.
                      Ejemplos.
                       Ejemplos.
                  Instrucciones de Manipulación de Datos.
                   Instrucciones de Manipulación de Datos.
                      Ejemplos.
                       Ejemplos.

   Referencias bibliográficas:
   - Kalen Delaney. A fondo Microsoft SQL Server 2000. McGraw-Hill, 2001
   - Henderson, K. SQL Server 2000 Stored Procedure & XML Programming, 2ª ed. 2002.
   - Henderson, K. The Guru's Guide to Transact-SQL. Addison-Wesley. 2000.
   - Sunderic, D. Microsoft SQL Server 2005 stored procedure programming in T-SQL &
   .NET. 2006
   - Sql Server 2005. Ayuda online.

Marta Zorrilla                         2008-2009                                      2
Introducción
Introducción


                          SQL (Structured Query Language).
                          SQL (Structured Query Language).
                 Lenguaje declarativo de acceso a los datos.
                 Estándar para las bases de datos relacionales.
                 Incluye la capacidad de manipular tanto la estructura de la
                 base de datos como sus datos. Aspectos de seguridad.
                 Desarrollado en el Laboratorio de investigación de San José
                 de IBM. Fue utilizado por primera vez en 1970.
                 En 1986:
                 ANSI (American National Standards Institute) e
                 ISO (International Standards Organization)
                          publicaron una norma, denominada SQL-86.
                 Ésta ha tenido dos actualizaciones: SQL-89 y SQL-92.

                 En la actualidad, se trabaja con el SQL:1999 y SQL:2003



Marta Zorrilla                               2008-2009                         3
SQL-92 y SQL-99
 SQL-92 y SQL-99


      SQL-92 incorpora:
             • Nuevos operadores relacionales: OUTER JOIN y JOIN
             • SQL dinámico
             • El parámetro SQLSTATE para gestión de errores
             • Cursores de desplazamiento (scroll cursor).
             • Modo de acceso (lectura o lectura/escritura) y nivel de aislamiento de las
             transacciones.
             • Definir dominios (CREATE DOMAIN).

      En la actualidad, se trabaja con el SQL:1999 (revisado en SQL3). Las características
      más relevantes son:
            • Nuevos tipos de datos: LOB, BOOLEAN, ROW, ARRAY, DISTINCT.
            • Posibilidad de definir nuevos tipos de datos por parte del usuario (limitado).
            • Disparadores (triggers), vistas actualizables (Indexed views)
            • Cursores (punteros) sensitivos. Queries recursivos.
            • Definición de roles de usuario
            • Incorporación de las características de orientación a objetos: tipos de datos
            abstractos, generalización, herencia y polimorfismo.

Marta Zorrilla                                 2008-2009                                       4
SQL:2003
  SQL:2003




       • Nuevos tipos de datos:
                       MULTISET, BIGINT y XML
       • Columnas calculadas en tablas (valores escalares)
       • Funciones escalares y que devuelven tablas
       • Creación de tablas: LIKE , AS
       • MERGE: permite la combinación de operaciones de inserción y
       actualización en una sola instrucción
       • Generadores de secuencia.
       • Nuevas funciones escalares, de agregación, de clasificación
       (RANK, ROW_NUMBER...)




Marta Zorrilla                       2008-2009                         5
Lenguaje de definición de
Lenguaje de definición de
          datos
          datos
   SQL Server 2005
   SQL Server 2005
        (Parte 1)
        (Parte 1)
Instrucciones de Definición de Datos (IDD)
 Instrucciones de Definición de Datos (IDD)

                 Las IDD comprenden todas las operaciones necesarias para
                 implantar y mantener un esquema relacional.
                 Con ellas, se describen los datos y su agrupamiento formando tablas,
                 así como las restricciones que deben cumplir.
                 Las IDD permiten crear, modificar y eliminar tablas, así como todos
                 los componentes que las definen: campos, índices, claves, etc. y las
                 restricciones que sean precisas.
                 Principales instrucciones:
                        CREATE DATABASE
                        CREATE TABLE
                                                Cláusula CONSTRAINT
                        ALTER TABLE
                        CREATE INDEX
                        CREATE VIEW
                        CREATE TRIGGER
                        CREATE PROCEDURE / FUNCTION
                        CREATE RULE
                        DROP “objeto”

Marta Zorrilla                                  2008-2009                               7
IDD I :: CREATE DATABASE
 IDD I CREATE DATABASE


            Para crear una base de datos. Su sintaxis es:

 CREATE DATABASE nombreBD
   CREATE DATABASE nombreBD
 [ [ON
     ON
     [ [< fichero > [ [,...n ] ]] ]
          < fichero > ,...n
     [ [, ,< grupo_fichero > [ [,...n ] ]] ]   nombreBD: es el nombre de la BD que se va aacrear.
                                                nombreBD: es el nombre de la BD que se va crear.
            < grupo_fichero > ,...n
 ]]                                            collation_name: mapa de caracteres
                                                collation_name: mapa de caracteres
 [ [LOG ON {{< fichero > [ [,...n ] ]}}] ]
     LOG ON < fichero > ,...n                  logical_file_name : :nombre lógico del fichero.
                                                logical_file_name nombre lógico del fichero.
 [ [COLLATE collation_name ] ]
     COLLATE collation_name
 [ [FOR LOAD | |FOR ATTACH ] ]                 os_file_name : :nombre físico del fichero.
                                                os_file_name nombre físico del fichero.
     FOR LOAD FOR ATTACH
                                               size: es el tamaño del fichero.
                                                size: es el tamaño del fichero.
 < fichero > ::=
   < fichero > ::=                             max_size: es el tamaño máximo del fichero.
                                                max_size: es el tamaño máximo del fichero.
 [ [PRIMARY ] ]
    PRIMARY
 (([ [NAME = logical_file_name , ,] ]     growth_increment : :incremento del fichero.
                                           growth_increment incremento del fichero.
        NAME = logical_file_name
      FILENAME = 'os_file_name'
        FILENAME = 'os_file_name'         filegroup_name: nombre grupo de archivos
                                           filegroup_name: nombre grupo de archivos
      [ [, ,SIZE = size ] ]
             SIZE = size
      [ [, ,MAXSIZE = {{max_size | |UNLIMITED }}] ]
             MAXSIZE = max_size UNLIMITED
      [ [, ,FILEGROWTH = growth_increment ] ]))[ [,...n ] ]
             FILEGROWTH = growth_increment          ,...n

 < grupo_fichero > ::=
  < grupo_fichero > ::=
 FILEGROUP filegroup_name < fichero > [ [,...n ] ]
  FILEGROUP filegroup_name < fichero > ,...n
Marta Zorrilla                                 2008-2009                                            8
IDD I :: CREATE DATABASE. Ejemplo
IDD I CREATE DATABASE. Ejemplo




                 CREATE DATABASE [compras]
                 CREATE DATABASE [compras]
                 ON (NAME = N'compras',
                  ON (NAME = N'compras',
                   FILENAME = N'C:datacompras.mdf' , ,
                    FILENAME = N'C:datacompras.mdf'
                   SIZE = 2, MAXSIZE = 3000,FILEGROWTH = 10%)
                    SIZE = 2, MAXSIZE = 3000,FILEGROWTH = 10%)
                 LOG ON (NAME = N'compras_log',
                  LOG ON (NAME = N'compras_log',
                   FILENAME = N'C:datacompras_log.LDF' , ,
                    FILENAME = N'C:datacompras_log.LDF'
                   SIZE = 1, FILEGROWTH = 10%)
                    SIZE = 1, FILEGROWTH = 10%)
                 COLLATE Modern_Spanish_CI_AS
                  COLLATE Modern_Spanish_CI_AS




Marta Zorrilla                         2008-2009                 9
Páginas y extensiones
  Páginas y extensiones


     PÁGINA: es la unidad fundamental de almacenamiento de datos en Microsoft® SQL Server™.
     Su tamaño es de 8 KB. Esto significa que las bases de datos de SQL Server 2005 tienen 128
     páginas por cada megabyte.
     El inicio de cada página es un encabezado de 96 bytes utilizado para almacenar información del
     sistema, como el tipo de página, la cantidad de espacio libre en la página y el Id. del objeto
     propietario de la página.
     En SQL Server, las filas no pueden continuar en otras páginas. En SQL Server, la máxima
     cantidad de datos contenidos en una fila es de 8060 bytes, sin incluir los tipos de dato text, ntext
     e image. Al final de cada página se encuentra una tabla de desplazamiento de filas. La tabla de
     desplazamiento de filas contiene una entrada por cada fila de la página y cada entrada registra la
     posición del primer byte de la fila con respecto al principio de la página. Las entradas de la tabla
     de desplazamiento de filas están en orden inverso a la secuencia de las filas de la página


       Las EXTENSIONES son la unidad básica en la
       que se asigna espacio a las tablas e índices. Una
       extensión consta de 8 páginas contiguas, es decir
       64 KB. Esto significa que las bases de datos de
       SQL Server tienen 16 extensiones por megabyte.




Marta Zorrilla                                     2008-2009                                                10
SQL Server
SQL Server

                                            database



                              Data (file)
                              Data (file)            Log (file)
                                                     Log (file)
                             .mdf or .ndf
                             .mdf or .ndf                  .ldf
                                                           .ldf



   Tablas e índices                                      Extents = 8 páginas continuas de 8 KB


                 Datos se almacenan en Páginas de 8 KB                    Cabecera
                      Tamaño máx. fila 8060 bytes
                                                                          Filas de datos
                          128 páginas por MB
                                                                          Matriz
                                                                          desplazamientos


•Cada archivo se divide en páginas de 8 Kb numeradas de 0 hasta x , donde x viene
definido por el tamaño del fichero.
•Acceder a una página: ID de BD, ID de fichero y nº de pág
•Fichero mdf: punto de comienzo de la BD, en sysfiles apunta los ficheros que
constituyen la BD y además almacena las tablas del sistema.
Marta Zorrilla                                 2008-2009                                         11
IDD II :: CREATE TABLE
IDD II CREATE TABLE

           Para incorporar una tabla nueva a la base de datos. Su sintaxis es:

       CREATE TABLE [ [nombreDB.[ propietario ] ]. .| |propietario. ] ]tabla
       CREATE TABLE nombreDB.[ propietario              propietario. tabla
             (campo1 tipo [(tamaño)] [NOT NULL] [restricción_un_campo1 [ [... ] ]] ]
              (campo1 tipo [(tamaño)] [NOT NULL] [restricción_un_campo1 ...
           [, campo2 tipo [(tamaño)] [NOT NULL] [restricción_un_campo2 [ [... ] ]] ]
            [, campo2 tipo [(tamaño)] [NOT NULL] [restricción_un_campo2 ...
           [, ...]]
            [, ...]]
           [, restricción_varios_campos [, ...] ]]))
            [, restricción_varios_campos [, ...]

       [[ON {{grupo_fichero | |DEFAULT }}]]
          ON grupo_fichero DEFAULT
       [[TEXTIMAGE_ON {{grupo_fichero | |DEFAULT }}]]
          TEXTIMAGE_ON grupo_fichero DEFAULT

  tabla: es el nombre de la tabla que se va aacrear.
   tabla: es el nombre de la tabla que se va crear.
  campo1, campo2: son nombres de campos. Debe crearse al menos un campo.
   campo1, campo2: son nombres de campos. Debe crearse al menos un campo.
  tipo: es el tipo de dato asociado al campo.
   tipo: es el tipo de dato asociado al campo.
  tamaño: es el tamaño del campo en caracteres (solamente para campos de tipo Texto).
   tamaño: es el tamaño del campo en caracteres (solamente para campos de tipo Texto).
  restricción_un_campo1, restricción_un_campo2: son cláusulas CONSTRAINT que afectan aaun único
   restricción_un_campo1, restricción_un_campo2: son cláusulas CONSTRAINT que afectan un único
campo.
 campo.
  restricción_varios_campos: es una cláusula CONSTRAINT que define un índice de múltiples campos.
   restricción_varios_campos: es una cláusula CONSTRAINT que define un índice de múltiples campos.
  ON: Especifica el grupo de archivos en el que se almacena la tabla.
   ON: Especifica el grupo de archivos en el que se almacena la tabla.
 TEXTIMAGE_ON: indica en qué grupo de archivos se almacenan las columnas text, ntext eeimage.
  TEXTIMAGE_ON: indica en qué grupo de archivos se almacenan las columnas text, ntext image.
Marta Zorrilla                           2008-2009                                               12
IDD I :: CREATE DATABASE – TABLE. Ejemplo
   IDD I CREATE DATABASE – TABLE. Ejemplo

          CREATE DATABASE MyDB
           CREATE DATABASE MyDB
          ON PRIMARY
           ON PRIMARY
           ( (NAME='MyDB_Primary',
               NAME='MyDB_Primary',
              FILENAME=
               FILENAME=
                'c:Program FilesMicrosoft SQL ServerMSSQL.1MSSQLdataMyDB_Prm.mdf',
                 'c:Program FilesMicrosoft SQL ServerMSSQL.1MSSQLdataMyDB_Prm.mdf',
              SIZE=4MB, MAXSIZE=10MB, FILEGROWTH=1MB),
               SIZE=4MB, MAXSIZE=10MB, FILEGROWTH=1MB),
          FILEGROUP MyDB_FG1
           FILEGROUP MyDB_FG1
           ( (NAME =='MyDB_FG1_Dat1',
               NAME 'MyDB_FG1_Dat1',
              FILENAME ==
               FILENAME
                'c:Program FilesMicrosoft SQL ServerMSSQL.1MSSQLdataMyDB_FG1_1.ndf',
                 'c:Program FilesMicrosoft SQL ServerMSSQL.1MSSQLdataMyDB_FG1_1.ndf',
              SIZE ==1MB, MAXSIZE=10MB, FILEGROWTH=1MB),
               SIZE 1MB, MAXSIZE=10MB, FILEGROWTH=1MB),
           ( (NAME =='MyDB_FG1_Dat2',
               NAME 'MyDB_FG1_Dat2',
              FILENAME ==
               FILENAME
                'c:Program FilesMicrosoft SQL ServerMSSQL.1MSSQLdataMyDB_FG1_2.ndf',
                 'c:Program FilesMicrosoft SQL ServerMSSQL.1MSSQLdataMyDB_FG1_2.ndf',
              SIZE ==1MB, MAXSIZE=10MB, FILEGROWTH=1MB)
               SIZE 1MB, MAXSIZE=10MB, FILEGROWTH=1MB)
          LOG ON
           LOG ON
           ( (NAME='MyDB_log',
               NAME='MyDB_log',
              FILENAME ==
               FILENAME
                'c:Program FilesMicrosoft SQL ServerMSSQL.1MSSQLdataMyDB.ldf',
                 'c:Program FilesMicrosoft SQL ServerMSSQL.1MSSQLdataMyDB.ldf',
              SIZE=1MB, MAXSIZE=10MB, FILEGROWTH=1MB);
               SIZE=1MB, MAXSIZE=10MB, FILEGROWTH=1MB);

          CREATE TABLE MyTable
           CREATE TABLE MyTable
           ( (cola int PRIMARY KEY, colb char(8) ) )
               cola int PRIMARY KEY, colb char(8)
          ON MyDB_FG1;
           ON MyDB_FG1;
Marta Zorrilla                                2008-2009                                       13
IDD III :: ALTER TABLE
IDD III ALTER TABLE


    Para modificar el diseño de una tabla que ya existe en la base de datos. Su sintaxis es:

   ALTER TABLE tabla
   ALTER TABLE tabla
   {{ADD [COLUMN] campo tipo[(tamaño)] [NOT NULL] [restricción_un_campo] | |
       ADD [COLUMN] campo tipo[(tamaño)] [NOT NULL] [restricción_un_campo]
    [ [WITH CHECK | |WITH NOCHECK ] ]ADD {{restricción_tabla }}[ [,...n ] ] | |
       WITH CHECK WITH NOCHECK ADD restricción_tabla                 ,...n
    ALTER COLUMN {{campo tipo [(tamaño)] }} | |
      ALTER COLUMN campo tipo [(tamaño)]
    DROP {COLUMN campo | | CONSTRAINT nombre_restricción} | |
      DROP {COLUMN campo       CONSTRAINT nombre_restricción}
    {{ENABLE | |DISABLE }}TRIGGER {{ALL | |nombre_trigger [ [,...n ] ]}} | |
       ENABLE DISABLE TRIGGER ALL nombre_trigger ,...n
    {{CHECK | |NOCHECK }}CONSTRAINT {{ALL | |nombre_restricción[ ,...n ] ]}}
       CHECK NOCHECK CONSTRAINT ALL nombre_restricción[ ,...n }}
      tabla: es el nombre de la tabla que se va aamodificar.
       tabla: es el nombre de la tabla que se va modificar.
      campo: es el nombre del campo que se va aaañadir oomodificar en la tabla . .
       campo: es el nombre del campo que se va añadir modificar en la tabla
      tipo: es el tipo de dato que se asigna aacampo.
       tipo: es el tipo de dato que se asigna campo.
      tamaño: es el tamaño del campo en caracteres (solamente para campos de tipo Texto).
       tamaño: es el tamaño del campo en caracteres (solamente para campos de tipo Texto).
      restricción_un_campo: es una cláusula CONSTRAINT que afectan aaun único campo.
       restricción_un_campo: es una cláusula CONSTRAINT que afectan un único campo.
      restricción_tabla: es una cláusula CONSTRAINT que afecta aavarios campos.
       restricción_tabla: es una cláusula CONSTRAINT que afecta varios campos.
      nombre_restricción: es el nombre de la restricción que se va aaeliminar ooha habilitar/deshabilitar.
       nombre_restricción: es el nombre de la restricción que se va eliminar ha habilitar/deshabilitar.
      nombre_trigger: es el nombre del desencadenador que se va aaeliminar ooha habilitar/deshabilitar.
       nombre_trigger: es el nombre del desencadenador que se va eliminar ha habilitar/deshabilitar.

Marta Zorrilla                                   2008-2009                                                   14
IDD IV :: CLÁUSULA CONSTRAINT SOBRE UN SOLO CAMPO
  IDD IV CLÁUSULA CONSTRAINT SOBRE UN SOLO CAMPO
 Se utiliza en instrucciones CREATE TABLE y ALTER TABLE para crear o eliminar restricciones.
 Esta cláusula puede referirse a un campo de la tabla. La restricción Primary Key y Unique generan
 índice, Foreign key no.

 CONSTRAINT nombre
  CONSTRAINT nombre
  { {[ [NULL | |NOT NULL ] ]| |
           NULL NOT NULL
     [ [{ {PRIMARY KEY | |UNIQUE } }
             PRIMARY KEY UNIQUE
              [ [CLUSTERED | |NONCLUSTERED ] ]
                  CLUSTERED NONCLUSTERED
              [ [WITH FILLFACTOR ==factor_relleno ] ]
                  WITH FILLFACTOR factor_relleno
              [ [ON {grupo_ficheros | |DEFAULT} ] ]] ]
                  ON {grupo_ficheros DEFAULT}
         ] ]| |
     [ [[ [FOREIGN KEY ] ]
             FOREIGN KEY
              REFERENCES otra_tabla[ (campo_externo1) ] ]
                REFERENCES otra_tabla[ (campo_externo1)
              [ [ON DELETE {NO ACTION | |CASCADE | |SET NULL | |SET DEFAULT } }] ]
                  ON DELETE {NO ACTION CASCADE SET NULL SET DEFAULT
              [ [ON UPDATE {NO ACTION | |CASCADE | |SET NULL | |SET DEFAULT } }] ]
                  ON UPDATE {NO ACTION CASCADE SET NULL SET DEFAULT
              [ [NOT FOR REPLICATION ] ]
                  NOT FOR REPLICATION
         ] ]| |
     CHECK [ [NOT FOR REPLICATION ] ] ( (expresión_lógica ) )
       CHECK NOT FOR REPLICATION                    expresión_lógica
   }}

    nombre: es el nombre de la restricción que se va aacrear.
     nombre: es el nombre de la restricción que se va crear.
    otra_tabla: es el nombre de la tabla aala que se hace referencia.
     otra_tabla: es el nombre de la tabla la que se hace referencia.
    campo_externo1: son los nombres de los campos de la otra_tabla aalos que se hace referencia.
     campo_externo1: son los nombres de los campos de la otra_tabla los que se hace referencia.
    factor_relleno: especifica cuánto se debe llenar cada página de índice utilizada para almacenar los
     factor_relleno: especifica cuánto se debe llenar cada página de índice utilizada para almacenar los
  datos de índice.Entre 00yy100. Por defecto 0.
   datos de índice.Entre     100. Por defecto 0.
    grupo_ficheros: indica dónde se almacena la tabla
     grupo_ficheros: indica dónde se almacena la tabla
    expresión_lógica: Expresión que devuelve true oofalse
     expresión_lógica: Expresión que devuelve true false
Marta Zorrilla                                   2008-2009                                            15
IDD V: CLÁUSULA CONSTRAINT SOBRE TABLA
IDD V: CLÁUSULA CONSTRAINT SOBRE TABLA

 CONSTRAINT nombre
  CONSTRAINT nombre
  {{  [ [{ {PRIMARY KEY | |UNIQUE } }
             PRIMARY KEY UNIQUE
            [ [CLUSTERED | |NONCLUSTERED ] ]
                CLUSTERED NONCLUSTERED
            { {(principal1 [ [ASC | |DESC ] ][ [, ,principal2 [,[,...] ] ]) )} }
                (principal1 ASC DESC                principal2 ...]
            [ [WITH FILLFACTOR = factor_relleno]
                WITH FILLFACTOR = factor_relleno]
            [ [ON { {grupo_ficheros | |DEFAULT } }] ]
                ON grupo_ficheros DEFAULT
       ]] ||
       FOREIGN KEY
         FOREIGN KEY
            [ [(referencia1 [,[,referencia2 [,[,...] ] ]) )] ]
                (referencia1 referencia2 ...]
            REFERENCES otra_tabla [ [(campo_externo1 [ [,... campo_externo2 ] ]) )] ]
              REFERENCES otra_tabla (campo_externo1 ,... campo_externo2
            [ [ON DELETE {NO ACTION | |CASCADE | |SET NULL | |SET DEFAULT } }] ]
                ON DELETE {NO ACTION CASCADE SET NULL SET DEFAULT
            [ [ON UPDATE {NO ACTION | |CASCADE | |SET NULL | |SET DEFAULT } }] ]
                ON UPDATE {NO ACTION CASCADE SET NULL SET DEFAULT
            [ [NOT FOR REPLICATION ] ] | |
                NOT FOR REPLICATION
       CHECK [ [NOT FOR REPLICATION ] ] (expresión_lógica ) )
         CHECK NOT FOR REPLICATION (expresión_lógica
  }}

     nombre: es el nombre de la restricción que se va aacrear.
      nombre: es el nombre de la restricción que se va crear.
     principal1, principal2: son los nombres de los campos que compondrán la clave principal.
      principal1, principal2: son los nombres de los campos que compondrán la clave principal.
     referencia1, referencia2: son los nombres de los campos que hacen referencia aaotros de otra tabla.
      referencia1, referencia2: son los nombres de los campos que hacen referencia otros de otra tabla.
     otra_tabla: es el nombre de la tabla aala que se hace referencia.
      otra_tabla: es el nombre de la tabla la que se hace referencia.
     campo_externo1, campo_externo2: son los nombres de los campos de la otra_tabla aalos que se
      campo_externo1, campo_externo2: son los nombres de los campos de la otra_tabla los que se
   hace referencia.
    hace referencia.
     expresión_lógica: criterio que se ha de cumplir. Devuelve true oofalse
      expresión_lógica: criterio que se ha de cumplir. Devuelve true false
Marta Zorrilla                                  2008-2009                                             16
Ejemplo
Ejemplo
  La base de datos trata de informatizar el proceso de compras de una empresa. Esto
   La base de datos trata de informatizar el proceso de compras de una empresa. Esto
  es, recoger los pedidos de los artículos, contemplados en su catálogo, que compran aa
   es, recoger los pedidos de los artículos, contemplados en su catálogo, que compran
  proveedores ya conocidos.
   proveedores ya conocidos.
  Reglas:
   Reglas:
  - -No puede seleccionar un artículo descatalogado.
      No puede seleccionar un artículo descatalogado.
  - -Si el stock alcanza el mínimo establecido, se ha de notificar como un evento.
      Si el stock alcanza el mínimo establecido, se ha de notificar como un evento.




Marta Zorrilla                          2008-2009                                     17
IDD: CREATE TABLE
IDD: CREATE TABLE                Escribir las instrucciones SQL necesarias para construir
Ejemplos
Ejemplos                         la base de datos cuyo esquema de relaciones es:




      CREATE TABLE Lineas ( (
       CREATE TABLE Lineas
  CREATE TABLE Proveedores ( ( NOT NULL,
                  numped INTEGER NOT NULL,
   CREATE TABLE Proveedores
                   numped INTEGER
   codigpro CHAR(4) NOT NULL NOT NULL,
                   numlin NOT NULL CONSTRAINT id_pro PRIMARY KEY,
                  numlin
    codigpro CHAR(4) SMALLINT NOT NULL,
                             SMALLINT CONSTRAINT id_pro PRIMARY KEY,
  CREATE TABLE Articulos (
   CREATE TABLE Articulos
CREATE TABLEcodigart NOT( NULLNOTNULL,
   cifpro
    cifpro       CHAR(12) NOT NULL CONSTRAINT u_cif UNIQUE,
 CREATE TABLEPedidos CHAR(6) NOT NULL,
                  codigart (
                CHAR(12) (CHAR(6)
                     Pedidos             CONSTRAINT u_cif UNIQUE,
              codigart CHAR(6) NOT NULL CONSTRAINT id_art PRIMARY KEY,
   nombrpro codigartINTEGER NULL, NULL NULL CONSTRAINT id_ped PRIMARY KEY,
                  unilin CHAR(6) NOT NULL, CONSTRAINT id_art PRIMARY KEY,
           numped INTEGER NULL, NOT NULL CONSTRAINT id_ped PRIMARY KEY,
    nombrpro CHAR(30) FLOAT NOT NOT
                 CHAR(30) NOT
            numped unilin    NOT
                             FLOAT NOT NULL,
              descrart CHAR(40) NOT NULL,
               descrart
   direcpro CHAR(30)CHAR(40) NOT NULL,NULL DEFAULT getdate(),
           fechaped DATETIME
                  preunlin MONEY
    direcpro CHAR(30) NOT NULL,NOTNULL,
            fechaped DATETIME NOT NOTNULL DEFAULT getdate(),
                   preunlin NOT NULL, NOT
                             MONEY         NULL,
              preunart MONEY NOT NULL,
               preunart
   cpostpro CHAR(5) MONEYNULLCHECK NULL,
                   desculin FLOAT
            codigpro CHAR(4)
                                     NOT NULL,
    cpostpro CHAR(5) NOT NULLNOT NOT(cpostpro like '[0-9][0-9][0-9][0-9][0-9]'),
                  desculin NOT
           codigpro CHAR(4)              NOT (cpostpro (desculin>=0 and desculin<=100),
                             FLOAT NOTNULL CHECK like '[0-9][0-9][0-9][0-9][0-9]'),
                                           NULL CHECK (desculin>=0 and desculin<=100),
                                       CHECK NULL,
              stockart INTEGER NOT NULL CHECK (stockart >0),
   localpro stockartFLOAT ([preunlin]NULLNULL(1–[desculin] >0), and ivaped<100),
            ivaped FLOATAS NULL, NOT
                 CHAR(20) AS NULL,
                             NOT
                                               CHECK (stockart / 100)),
           ivaped totallinINTEGER NOT NOT NULLCHECK (ivaped>0
    localpro CHAR(20) NOT ([preunlin]**[unilin] **(1 CHECK(ivaped>0 and ivaped<100),
                  totallin                 [unilin]   –[desculin] / 100)),
              stockmin INTEGER NOT NULL CHECK (stockmin>0),
   telefprofentrped DATETIMENULL, NULLNULL, (stockmin>0),
               stockmin INTEGER NOT
               CONSTRAINTid_lin PRIMARY NULL,
                CHAR(17) NOT
                 CHAR(17)     id_lin      NOT
                                               CHECK
    telefpro CONSTRAINTNOT NULL, NOT KEY(numped, numlin),
           fentrped DATETIME PRIMARY KEY (numped, numlin),
              fecbaja DATETIME)
               fecbaja DATETIME)
   faxpro CONSTRAINT f_ped FOREIGN(codigpro) REFERENCES Proveedores (codigpro),
       CONSTRAINT f_pro FOREIGN KEY KEY (numped) REFERENCES Pedidos (codigpro),
                CHAR(17),
    faxpro CONSTRAINT f_ped FOREIGN(codigpro) REFERENCES Proveedores (numped),
        CONSTRAINT f_pro FOREIGN KEY KEY (numped) REFERENCES Pedidos (numped),
                 CHAR(17),
   emailpro CONSTRAINT f_art FOREIGN KEY (codigart) REFERENCES Articulos (codigart))
       CONSTRAINT c_fecha CHECK (fechaped<=fentrped))
                CHAR(25),
    emailpro CONSTRAINT f_art FOREIGN KEY (codigart) REFERENCES Articulos (codigart))
        CONSTRAINT c_fecha CHECK (fechaped<=fentrped))
                 CHAR(25),
    procepro CHAR(10) NOT NULL CHECK (procepro in ('UE', 'No UE')))
     procepro CHAR(10) NOT NULL CHECK (procepro in ('UE', 'No UE')))
Marta Zorrilla                          2008-2009                                           18
IDD :: ALTER TABLE. Ejemplos
IDD ALTER TABLE. Ejemplos

   ALTER TABLE [dbo].[Proveedores]
   ALTER TABLE [dbo].[Proveedores]
     ADD CONSTRAINT [id_pro] PRIMARY KEY CLUSTERED (([codigpro] ))
     ADD CONSTRAINT [id_pro] PRIMARY KEY CLUSTERED [codigpro]
     ON [PRIMARY]
     ON [PRIMARY]
   GO
   GO


   ALTER TABLE [dbo].[Pedidos] WITH NOCHECK ADD
   ALTER TABLE [dbo].[Pedidos] WITH NOCHECK ADD
    CONSTRAINT [DF_Pedidos_fechaped] DEFAULT (getdate()) FOR [fechaped],
     CONSTRAINT [DF_Pedidos_fechaped] DEFAULT (getdate()) FOR [fechaped],
    CONSTRAINT [c_fecha] CHECK ([fechaped] <= [fentrped]),
     CONSTRAINT [c_fecha] CHECK ([fechaped] <= [fentrped]),
    CHECK ([ivaped] > 0 and [ivaped] < 100)
     CHECK ([ivaped] > 0 and [ivaped] < 100)
   GO
   GO


   ALTER TABLE [dbo].[Proveedores] ADD
   ALTER TABLE [dbo].[Proveedores] ADD
     CONSTRAINT [u_cif] UNIQUE NONCLUSTERED (([cifpro] )) ON [PRIMARY] , ,
     CONSTRAINT [u_cif] UNIQUE NONCLUSTERED [cifpro] ON [PRIMARY]
     CHECK ([cpostpro] like '[0-9][0-9][0-9][0-9][0-9]'),
     CHECK ([cpostpro] like '[0-9][0-9][0-9][0-9][0-9]'),
     CHECK ([procepro] = 'No UE' or [procepro] = 'UE')
     CHECK ([procepro] = 'No UE' or [procepro] = 'UE')
   GO
   GO



Marta Zorrilla                    2008-2009                                 19
IDD VI :: CREATE INDEX
IDD VI CREATE INDEX

     Para crear un índice nuevo en una tabla que ya existe en la base de datos. Su sintaxis es:

    CREATE [ [UNIQUE ] ][ [CLUSTERED | |NONCLUSTERED ] ]INDEX índice
      CREATE UNIQUE CLUSTERED NONCLUSTERED INDEX índice
        ON {tabla | |vista }}(campo1 [ [{ASC | |DESC }] [, campo2 [{ASC|DESC}], ...])
        ON {tabla vista (campo1 {ASC DESC }] [, campo2 [{ASC|DESC}], ...])
    [ [WITH < opción_índice > [ [,...n] ] ]
       WITH < opción_índice > ,...n]
    [ [ON grupo_ficheros ] ]
       ON grupo_ficheros

    < opción_índice > :: =
     < opción_índice > :: =
      {{PAD_INDEX | |FILLFACTOR = factor_relleno | |IGNORE_DUP_KEY | |
         PAD_INDEX FILLFACTOR = factor_relleno IGNORE_DUP_KEY
        DROP_EXISTING | |STATISTICS_NORECOMPUTE | | SORT_IN_TEMPDB }}
        DROP_EXISTING STATISTICS_NORECOMPUTE SORT_IN_TEMPDB

       UNIQUE: señala que el índice es de unicidad, en caso contrario permitirá repetición de valores.
        UNIQUE: señala que el índice es de unicidad, en caso contrario permitirá repetición de valores.
       índice: es el nombre del índice que se va aacrear.
        índice: es el nombre del índice que se va crear.
      tabla/vista: es el nombre de una tabla/vista existente aala que estará asociado el índice.
       tabla/vista: es el nombre de una tabla/vista existente la que estará asociado el índice.
      campo1, campo2: son los nombres de los campos que van aaformar el índice. Puede ser un solo
       campo1, campo2: son los nombres de los campos que van formar el índice. Puede ser un solo
    campo. Para forzar una ordenación descendente de un campo, hay que utilizar la palabra reservada
     campo. Para forzar una ordenación descendente de un campo, hay que utilizar la palabra reservada
    DESC; sino se especifica oose escribe ASC, se entiende que la ordenación es ascendente.
     DESC; sino se especifica se escribe ASC, se entiende que la ordenación es ascendente.


         CREATE INDEX FK_Lineas ON Lineas (codigart)
         CREATE INDEX FK_Lineas ON Lineas (codigart)

Marta Zorrilla                                   2008-2009                                                20
SQL Server 2005
Tabla del catálogo: sysindexes




                                                    Índice no cluster
                 Índice cluster


Marta Zorrilla                          2008-2009                       21
Tipos de datos
  Tipos de datos



          Consideraciones previas:
           Consideraciones previas:
          • Qué tipo de información se va a almacenar. Por ejemplo, no se
            • Qué tipo de información se va a almacenar. Por ejemplo, no se
          pueden guardar caracteres en un campo cuyo tipo de datos sea
            pueden guardar caracteres en un campo cuyo tipo de datos sea
          numérico.
            numérico.
          • El espacio de almacenamiento necesario (dimensionar el campo).
            • El espacio de almacenamiento necesario (dimensionar el campo).
          • Qué tipo de operaciones se van a realizar con los valores del campo.
            • Qué tipo de operaciones se van a realizar con los valores del campo.
          Pues, por ejemplo, no se puede calcular la suma de dos cadenas de
            Pues, por ejemplo, no se puede calcular la suma de dos cadenas de
          texto.
            texto.
          • Si se desea ordenar o indexar por ese campo. Los criterios de
            • Si se desea ordenar o indexar por ese campo. Los criterios de
          ordenación difieren en función del tipo de dato, así, los números
            ordenación difieren en función del tipo de dato, así, los números
          almacenados en un campo texto se ordenan según el valor de su
            almacenados en un campo texto se ordenan según el valor de su
          código ASCII (1,10,11,2,20,...) que no coincide con la ordenación
            código ASCII (1,10,11,2,20,...) que no coincide con la ordenación
          numérica.
            numérica.

Marta Zorrilla                            2008-2009                                  22
Tipos de datos en SQL Server 2005 I
  Tipos de datos en SQL Server 2005 I


     NUMÉRICOS


bigint     Datos enteros (números enteros) comprendidos entre -2^63 (-9223372036854775808) y 2^63
           -1 (9223372036854775807).
int        Datos enteros (números enteros) comprendidos entre -2^31 (-2.147.483.648) y 2^31 - 1
           (2.147.483.647).
smallint   Datos enteros comprendidos entre 2^15 (-32.768) y 2^15 - 1 (32.767).
tinyint    Datos enteros comprendidos 0 y 255.
bit        Datos enteros con valor 1 ó 0.
decimal    Datos de precisión y escala numérica fijas comprendidos entre -10^38 +1 y 10^38 – 1.
numeric    Funcionalmente equivalente a decimal.
money      Valores de moneda comprendidos entre -2^63 (-922.337.203.685.477,5808) y 2^63 - 1
           (+922.337.203.685.477,5807), con una precisión de una diezmilésima de la unidad
           monetaria.
smallmoney Valores de moneda comprendidos entre -214.748,3648 y +214.748,3647, con una precisión
           de una diezmilésima de la unidad monetaria.
float      Números con precisión de coma flotante comprendidos entre -1,79E + 308 y 1,79E + 308.
real       Números con precisión de coma flotante comprendidos entre -3,40E + 38 y 3,40E + 38.




Marta Zorrilla                              2008-2009                                         23
Tipos de datos en SQL Server 2005 II
 Tipos de datos en SQL Server 2005 II


     FECHAS

 datetime      Datos de fecha y hora comprendidos entre el 1 de enero de 1753 y el 31 de diciembre de
               9999, con una precisión de 3,33 milisegundos.
 smalldatetime Datos de fecha y hora comprendidos entre el 1 de enero de 1900 y el 6 de junio de 2079,
               con una precisión de un minuto.



     CADENAS DE CARACTERES

 char            Datos de caracteres no Unicode de longitud fija con una longitud máxima de 8.000
                 caracteres.
 varchar         Datos no Unicode de longitud variable con un máximo de 8.000 caracteres.
 text            Datos no Unicode de longitud variable con una longitud máxima de 2^31 - 1 (2.147.483.647)
                 caracteres.
 nchar           Datos Unicode de longitud variable con una longitud máxima de 4.000 caracteres.
 nvarchar        Datos Unicode de longitud variable con una longitud máxima de 4.000 caracteres.
 ntext           Datos Unicode de longitud variable con una longitud máxima de 2^30 - 1 (1.073.741.823)
                 caracteres.




Marta Zorrilla                                   2008-2009                                               24
Tipos de datos en SQL Server 2005 III
Tipos de datos en SQL Server 2005 III


     BINARIOS

 binary          Datos binarios de longitud fija con una longitud máxima de 8.000 bytes.
 varbinary       Datos binarios de longitud variable con una longitud máxima de 8.000 bytes.
 image           Datos binarios de longitud variable con una longitud máxima de 2^31 - 1 (2.147.483.647)
                 bytes.




     OTROS TIPOS DE DATOS
 cursor      Una referencia a un cursor.
 sql_variant Un tipo de datos que almacena valores de varios tipos de datos aceptados en SQL Server,
             excepto text, ntext, timestamp y sql_variant.
 table       Un tipo de datos especial que se utiliza para almacenar un conjunto de resultados para un
             proceso posterior.
 timestamp Un número único para toda la base de datos que se actualiza cada vez que se actualiza una
             fila. (sinónimo rowversion)
 uniqueiden Un identificador exclusivo global (GUID), necesario para replicación
 tifier
 xml         Almacena una instancia de XML



Marta Zorrilla                                    2008-2009                                                25
Tipo de dato Autonumérico: IDENTITY
     Tipo de dato Autonumérico: IDENTITY


   IDENTITY [ [(semilla , ,incremento) ] ]
    IDENTITY (semilla incremento)


     semilla: valor de inicio.
      semilla: valor de inicio.
     incremento: incremento que se aplica
      incremento: incremento que se aplica



   CREATE TABLE dbo.herramientas(
    CREATE TABLE dbo.herramientas(
      ID INT IDENTITY(1,1) NOT NULL PRIMARY KEY,
       ID INT IDENTITY(1,1) NOT NULL PRIMARY KEY,
      Nombre VARCHAR(40) NOT NULL
       Nombre VARCHAR(40) NOT NULL
   ))
   -- insertamos valores
    -- insertamos valores
   INSERT INTO dbo.herramientas (Nombre ))VALUES (‘Martillo')
    INSERT INTO dbo.herramientas (Nombre VALUES (‘Martillo')
   INSERT INTO dbo.herramientas (Nombre ))VALUES (‘Taladro')
    INSERT INTO dbo.herramientas (Nombre VALUES (‘Taladro')

   -- si borramos, Martillo, se pierde el ID 1. Para reutilizarlo
    -- si borramos, Martillo, se pierde el ID 1. Para reutilizarlo

   SET IDENTITY_INSERT dbo.Tool ON
    SET IDENTITY_INSERT dbo.Tool ON
   INSERT INTO dbo.herramientas (ID, Nombre) VALUES (1, Serrucho')
    INSERT INTO dbo.herramientas (ID, Nombre) VALUES (1, Serrucho')
Marta Zorrilla                               2008-2009                26
Tipos definidos por el usuario: CREATE TYPE
Tipos definidos por el usuario: CREATE TYPE




   CREATE TYPE [ [nombre_schema. ] ]nombre
    CREATE TYPE nombre_schema. nombre
   {{
        FROM tipo_base
          FROM tipo_base
        [ [((precision [ [, ,escala ] ])) ] ]
               precision escala
        [ [NULL | |NOT NULL ] ]
            NULL NOT NULL
     | |EXTERNAL NAME assembly_name [ [.class_name ] ]
          EXTERNAL NAME assembly_name .class_name
   }}[ [; ;] ]


     nombre: es el nombre del tipo de dato que se va aacrear.
      nombre: es el nombre del tipo de dato que se va crear.
     tipo_base: tipo de dato base en el que se a`poya
      tipo_base: tipo de dato base en el que se a`poya



   CREATE TYPE iva
    CREATE TYPE iva
   FROM float NOT NULL ; ;
    FROM float NOT NULL



Marta Zorrilla                                  2008-2009       27
CREATE RULE y DEFAULT (no estándar)
  CREATE RULE y DEFAULT (no estándar)

     Para crear una regla para ser utilizada en un tipo de dato definido por el usuario en la
     base de datos. Su sintaxis es:

   CREATE RULE nombre
   CREATE RULE nombre
     AS expresion_condicional
     AS expresion_condicional

     nombre: es el nombre de la función que se va aacrear.
      nombre: es el nombre de la función que se va crear.
     expresion_condicional: criterio que debe cumplir la regla
      expresion_condicional: criterio que debe cumplir la regla


     Para crear un valor por defecto utilizable en un tipo de dato definido por usuario en la
     base de datos. Su sintaxis es:

   CREATE DEFAULT nombre
   CREATE DEFAULT nombre
     AS expresion_constante
     AS expresion_constante

     nombre: es el nombre de la función que se va aacrear.
      nombre: es el nombre de la función que se va crear.
     expresion_constante: valor
      expresion_constante: valor




Marta Zorrilla                                  2008-2009                                       28
CREATE RULE y DEFAULT: ejemplo
   CREATE RULE y DEFAULT: ejemplo

  Objetivo crear un tipo de dato definido por el usuario, denominado “iva”


   CREATE RULE r_porcentaje
   CREATE RULE r_porcentaje
     AS @valor>=0 and @valor<=100
     AS @valor>=0 and @valor<=100


   CREATE DEFAULT d_iva AS 16
   CREATE DEFAULT d_iva AS 16



   EXEC sp_addtype iva, 'float', 'not null'
    EXEC sp_addtype iva, 'float', 'not null'
   go
    go
   EXEC sp_bindrule 'r_porcentaje', 'iva'
    EXEC sp_bindrule 'r_porcentaje', 'iva'
   go
    go
   EXEC sp_bindefault 'd_iva', 'iva'
    EXEC sp_bindefault 'd_iva', 'iva'




Marta Zorrilla                           2008-2009                           29
Manipulación de datos
Manipulación de datos
 SQL Server 2005
 SQL Server 2005
Instrucciones de Manipulación de Datos (IMD) I
Instrucciones de Manipulación de Datos (IMD) I




         Las IMD permiten actuar sobre los propios datos.
         Las IMD permiten actuar sobre los propios datos.
         Las operaciones básicas de manipulación de datos son: insertar,
         Las operaciones básicas de manipulación de datos son: insertar,
         modificar, borrar y consultar.
         modificar, borrar y consultar.
         Las tres primeras permiten alterar el contenido de la base de datos.
         Las tres primeras permiten alterar el contenido de la base de datos.
         La última consiste en localizar datos para su observación.
          La última consiste en localizar datos para su observación.
         Principales instrucciones:
          Principales instrucciones:
                INSERT
                 INSERT
                 UPDATE
                 UPDATE
                 DELETE
                 DELETE
                 SELECT
                  SELECT




Marta Zorrilla                           2008-2009                              31
IMD II :: INSERT
IMD II INSERT

    Permite añadir una o más filas en una tabla. La sintaxis para insertar una sola fila es:

      INSERT INTO destino [(campo1[, campo2[, ...]])]
       INSERT INTO destino [(campo1[, campo2[, ...]])]
         VALUES (valor1[, valor2[, ...]])
          VALUES (valor1[, valor2[, ...]])


   La sintaxis para insertar varias filas es:
      INSERT INTO destino [(campo1[, campo2[, ...]])]
       INSERT INTO destino [(campo1[, campo2[, ...]])]
                  Instrucción_SELECT
                   Instrucción_SELECT


      destino: es el nombre de la tabla o vista donde se van a añadir filas.
      campo1, campo2: son los nombres de los campos donde se van a añadir los datos.
      valor1, valor2: son los valores que tomarán los campos en la nueva fila que se van a insertar. Cada valor
   se asigna al campo que corresponde a la posición del valor en la lista, así, valor1 se asigna al campo1,
   valor2 al campo2, y así sucesivamente. Por su frecuencia, cabe mencionar que los valores que se asignen a
   campos de texto deben escribirse entre comillas simples ('texto').
      Instrucción_SELECT: es la instrucción SELECT cuya ejecución proporcionará las filas a insertar.




Marta Zorrilla                                        2008-2009                                                   32
IMD III :: UPDATE
 IMD III UPDATE


          Permite modificar información existente en una o varias filas de una tabla.
          Su sintaxis es:

       UPDATE destino SET campo1=nuevovalor1 [, campo2=nuevovalor2 [, ...]]
        UPDATE destino SET campo1=nuevovalor1 [, campo2=nuevovalor2 [, ...]]
       [WHERE condición]
        [WHERE condición]


       • destino: es el nombre de la tabla o vista en la que se desea modificar datos.
       • campo1, campo2: son los nombres de los campos que van a modificar su valor.
       • nuevovalor1, nuevovalor2: son expresiones que determinan los valores que van a tomar los
       campos de las filas que se van a actualizar.
       • condición: es una expresión lógica que determina qué filas se actualizarán. Sólo se
       actualizarán las filas que satisfagan la expresión. Si no se incluye cláusula WHERE (no hay
       condición) se modificarán todas las filas de la tabla.




Marta Zorrilla                                    2008-2009                                          33
IMD IV :: DELETE
 IMD IV DELETE


          Permite eliminar una o varias filas de una tabla. Su sintaxis es:


                       DELETE FROM destino [WHERE condición]
                       DELETE FROM destino [WHERE condición]



                 • destino: es el nombre de la tabla o vista cuyas filas se van a
                 eliminar.
                 • condición: es una expresión lógica que determina qué filas se
                 borrarán. Sólo se borrarán las filas que satisfagan la expresión. Si no
                 se incluye cláusula WHERE (no hay condición) se borrarán todas las
                 filas de la tabla.




Marta Zorrilla                                     2008-2009                               34
IMD V :: INSERT, UPDATE, DELETE
IMD V INSERT, UPDATE, DELETE
Ejemplos
Ejemplos




  Insertar una nueva fila en la tabla Proveedores.
  INSERT INTO Proveedores (codigpro, cifpro, nombrpro, direcpro, cpostpro, localpro, telefpro, faxpro,
   INSERT INTO Proveedores (codigpro, cifpro, nombrpro, direcpro, cpostpro, localpro, telefpro, faxpro,
  procepro)
   procepro)
  VALUES ('P005', 'A39144325', 'Angulo Lastra, Antonio', 'Hernán Cortés,18', '39002', 'Santander', '(34)
   VALUES ('P005', 'A39144325', 'Angulo Lastra, Antonio', 'Hernán Cortés,18', '39002', 'Santander', '(34)
  942 202 022', '(34) 942 202 022', 'UE')
   942 202 022', '(34) 942 202 022', 'UE')

  Incorporar el e-mail del proveedor Luis Gil Laso, con valor mailto:gil@unican.es.

  UPDATE Proveedores SET emailpro='mailto:gil@unican.es'
   UPDATE Proveedores SET emailpro='mailto:gil@unican.es'
  WHERE codigpro='P004'
   WHERE codigpro='P004'

  Borrar todos los proveedores de Santander.
  DELETE FROM Proveedores
   DELETE FROM Proveedores
  WHERE localpro='Santander'
   WHERE localpro='Santander'



Marta Zorrilla                                   2008-2009                                                  35
Datos
  Datos




Marta Zorrilla   2008-2009   36
Importación/Exportación de datos
 Importación/Exportación de datos




                 Instrucción INSERT / /SELECT
                  Instrucción INSERT SELECT
                 Import/Export data (sólo SQL Server 2005)
                  Import/Export data (sólo SQL Server 2005)
                 Conexión ODBC/OLEDB
                  Conexión ODBC/OLEDB
                 Herramienta Integration Services
                  Herramienta Integration Services
                  ooGráfica, basada en objetos
                     Gráfica, basada en objetos
                  ooOrigen/destino de datos (OLEDB, ODBC)
                     Origen/destino de datos (OLEDB, ODBC)
                  ooTransformaciones más complejas
                     Transformaciones más complejas




Marta Zorrilla                           2008-2009            37
IMD VI :: SELECT
 IMD VI SELECT

    Está dedicada a obtener información de la base de datos. El resultado de su
    ejecución, si existe, siempre tiene estructura de una tabla y los campos de sus filas
    responden a la lista de selección. Tiene enormes posibilidades, lo que hace que su
    sintaxis presente muchas variantes.

          SELECT [ [predicado ] ] Lista_de_selección
           SELECT predicado        Lista_de_selección
          [INTO tabla_temporal]
           [INTO tabla_temporal]
          FROM lista_de_tablas
           FROM lista_de_tablas
          [WHERE condición ] ]
           [WHERE condición
          [GROUP BY lista_campos_group_by]
           [GROUP BY lista_campos_group_by]
          [HAVING condición_group_by]
           [HAVING condición_group_by]
          [ORDER BY colum1 { {[ASC] | |DESC } }[,[,colum2 { {[ASC] | |DESC }, .... ] ]] ]
           [ORDER BY colum1 [ASC] DESC              colum2 [ASC] DESC }, ....




Marta Zorrilla                                   2008-2009                                  38
IMD VII :: SELECT
IMD VII SELECT

       predicado: puede tomar uno de los siguientes valores: ALL, DISTINCT o TOP número_de_filas (devuelve el
  número de registros especificado según una cláusula ORDER BY). Puede utilizar el predicado para limitar el número
  de registros devueltos. Si no especifica ninguno, el valor predeterminado es ALL.
     Lista_de_selección: es el conjunto de los elementos que serán aportados como respuesta. Éstos, pueden ser
  expresiones y funciones separados por comas, aunque generalmente responden a una de las siguientes alternativas:
                 { * | tabla.* | [tabla.]campo1 [AS alias1] [, [tabla.]campo2 [AS alias2] , ...] | funciones}
        o * especifica que se seleccionan todos los campos de la tabla o tablas a las que se accede.
        o tabla: es el nombre de la tabla que contiene los campos de la que se van a seleccionar los registros.
        o campo1, campo2: son los nombres de los campos que contienen los datos que desea recuperar.
        o alias1, alias2: Los nombres que se van a utilizar como encabezados de columnas en vez de los nombres de
        columnas originales en tabla.
        o funciones: funciones definidas por el usuario, anteponer el propietario.
     tabla_temporal: es el nombre de la tabla que se creará para almacenar los registros obtenidos.
     lista_de_tablas: representa el nombre de la tabla o las tablas que contienen los datos a los que se desea acceder.
     condición: es una expresión lógica con los criterios de selección de registros.
     lista_campos_group_by: son los nombres de los campos que se van a utilizar para agrupar los registros.
     condición_group_by: son las condiciones que se imponen sobre el criterio de agrupamiento.
     colum1, colum2: son nombres de elementos de la lista de selección o la posición que ocupan en ella. ASC quiere
  decir ordenación ascendente (es la opción por defecto) y DESC significa ordenación descendente.


Marta Zorrilla                                           2008-2009                                                        39
IMD VIII :: SELECT
IMD VIII SELECT


                                         Con Operadores
                                         Con Pred. BETWEEN... AND...
      Búsquedas
      Búsquedas                          Con Pred. IN (lista_de_valores)
       Sencillas
       Sencillas                         Con Pred. LIKE ‘cadena_caracteres’
                     Condiciones de
                     Condiciones de      Con Pred. NULL
                     Comparación
                      Comparación
                                              Simple
      Búsquedas      Condiciones de
                     Condiciones de           Múltiple
      Búsquedas
     Cualificadas     Combinación
                      Combinación
     Cualificadas                             Autocombinación
                                              Combinación Externa
                     Condiciones de
                     Condiciones de
                      Subsentencia
                      Subsentencia            De Comparación
                                              Con Predicado IN
                                              Con Predicado EXISTS




Marta Zorrilla               2008-2009                                 40
IMD IX :: SELECT
 IMD IX SELECT


           Funciones de Grupo
           Funciones de Grupo

            Funciones de Fecha
            Funciones de Fecha


           Agrupamiento de Datos
           Agrupamiento de Datos                Condición de Agrupamiento
                                                Condición de Agrupamiento


           Ordenación del Resultado
           Ordenación del Resultado


                 Guardar Resultado
                 Guardar Resultado
                   en una Tabla
                   en una Tabla


           Unión, Intersección y Excepción de Sentencias
           Unión, Intersección y Excepción de Sentencias


                 Uso de funciones almacenadas
                 Uso de funciones almacenadas


Marta Zorrilla                            2008-2009                         41
IMD X :: SELECT
IMD X SELECT
Búsquedas Sencillas (Ejemplos)
Búsquedas Sencillas (Ejemplos)


  • Obtener el contenido de la tabla Articulos.

 SELECT ** FROM Articulos
 SELECT     FROM Articulos




  • Listar el nombre y el teléfono de todos los Proveedores.

  SELECT nombrpro as Nombre, telefpro as Telf
   SELECT nombrpro as Nombre, telefpro as Telf
  FROM Proveedores
   FROM Proveedores




Marta Zorrilla                               2008-2009         42
IMD XI :: SELECT
IMD XI SELECT
Búsquedas Cualificadas. Cond. de Comparación 1
 Búsquedas Cualificadas. Cond. de Comparación 1
(Ejemplos)
 (Ejemplos)

   Las condiciones de comparación son expresiones lógicas que permiten comparar una
   columna o expresión con otra columna, expresión o lista de columnas. Pueden adoptar
   una de las formas siguientes:
                   exp operador_de_comparación exp
                    exp operador_de_comparación exp
                   exp [NOT] BETWEEN exp AND exp
                    exp [NOT] BETWEEN exp AND exp
                   exp [NOT] IN (lista de valores)
                    exp [NOT] IN (lista de valores)
                   campo [NOT] LIKE 'cadena_de_caracteres'
                    campo [NOT] LIKE 'cadena_de_caracteres'
                   campo IS [NOT] NULL
                    campo IS [NOT] NULL


   • Encontrar los artículos cuyo precio unitario sea superior a 180 € y su stock sea
   inferior o igual a 100.
        SELECT ** FROM Articulos
         SELECT    FROM Articulos
        WHERE preunart > 180 AND stockart <= 100
         WHERE preunart > 180 AND stockart <= 100




Marta Zorrilla                             2008-2009                                     43
IMD XII :: SELECT
IMD XII SELECT
Búsquedas Cualificadas. Cond. de Comparación 2
 Búsquedas Cualificadas. Cond. de Comparación 2
(Ejemplos)
 (Ejemplos)


   • Listar los artículos cuyo precio unitario esté comprendido entre 180 € y 300 €.

                      SELECT ** FROM Articulos
                       SELECT    FROM Articulos
                      WHERE preunart BETWEEN 180 AND 300
                       WHERE preunart BETWEEN 180 AND 300




   • Hallar todos los proveedores de las ciudades de Santander, Madrid y Barcelona.

     SELECT codigpro, nombrpro, direcpro, cpostpro, localpro FROM Proveedores
     SELECT codigpro, nombrpro, direcpro, cpostpro, localpro FROM Proveedores
     WHERE localpro IN ('Santander', 'Madrid', 'Barcelona')
     WHERE localpro IN ('Santander', 'Madrid', 'Barcelona')




Marta Zorrilla                              2008-2009                                  44
IMD XIII :: SELECT
IMD XIII SELECT
Búsquedas Cualificadas. Cond. de Comparación 3
 Búsquedas Cualificadas. Cond. de Comparación 3
(Ejemplos)
 (Ejemplos)

   • Encontrar todos los proveedores cuyo primer apellido comience por una letra
   comprendida entre la A y la J.
      SELECT codigpro, nombrpro, direcpro, cpostpro, localpro FROM Proveedores
       SELECT codigpro, nombrpro, direcpro, cpostpro, localpro FROM Proveedores
      WHERE nombrpro LIKE '[A-J]%'
       WHERE nombrpro LIKE '[A-J]%'




   • Hallar todos los proveedores de los que no se tenga información sobre su correo
   electrónico.
                 SELECT codigpro, nombrpro, direcpro, cpostpro, localpro, telefpro
                  SELECT codigpro, nombrpro, direcpro, cpostpro, localpro, telefpro
                 FROM Proveedores
                  FROM Proveedores
                 WHERE emailpro IS NULL
                  WHERE emailpro IS NULL




Marta Zorrilla                               2008-2009                                 45
IMD XIV :: SELECT
IMD XIV SELECT
Búsquedas Cualificadas. Cond. de Combinación
Búsquedas Cualificadas. Cond. de Combinación
Combinación Simple (Ejemplo)
Combinación Simple (Ejemplo)

   Las búsquedas cualificadas son las que afectan a datos de más de una tabla.

     Una Combinación Simple es aquella en la que la condición de la cláusula
      Una Combinación Simple es aquella en la que la condición de la cláusula
     FROM (o WHERE) contiene una comparación de igualdad entre campos
      FROM (o WHERE) contiene una comparación de igualdad entre campos
     pertenecientes a dos tablas distintas.
      pertenecientes a dos tablas distintas.



   • Listar todos los proveedores a los que se ha efectuado algún pedido entre el 20/1/2006 y
   el 15/9/2006.

     SELECT DISTINCT Proveedores.codigpro, nombrpro, direcpro, localpro
     SELECT DISTINCT Proveedores.codigpro, nombrpro, direcpro, localpro
        FROM Proveedores INNER JOIN Pedidos
         FROM Proveedores INNER JOIN Pedidos
                ON Proveedores.codigpro = Pedidos.codigpro
                 ON Proveedores.codigpro = Pedidos.codigpro
          WHERE fechaped BETWEEN '2006/01/20' AND '2006/09/15'
          WHERE fechaped BETWEEN '2006/01/20' AND '2006/09/15'



Marta Zorrilla                             2008-2009                                            46
IMD XIV :: SELECT
IMD XIV SELECT
Búsquedas Cualificadas. Cond. de Combinación
Búsquedas Cualificadas. Cond. de Combinación
Combinación Simple (Ejemplo. Continuación)
Combinación Simple (Ejemplo. Continuación)
    SELECT DISTINCT Proveedores.codigpro, nombrpro, direcpro, localpro
    SELECT DISTINCT Proveedores.codigpro, nombrpro, direcpro, localpro
      FROM Proveedores INNER JOIN Pedidos
       FROM Proveedores INNER JOIN Pedidos
            ON Proveedores.codigpro = Pedidos.codigpro
            ON Proveedores.codigpro = Pedidos.codigpro
        WHERE fechaped BETWEEN '2006/01/20' AND '2006/09/15'
        WHERE fechaped BETWEEN '2006/01/20' AND '2006/09/15'

 Información
  de proceso




Marta Zorrilla                            2008-2009                      47
IMD XV :: SELECT
IMD XV SELECT
Búsquedas Cualificadas. Cond. de Combinación
Búsquedas Cualificadas. Cond. de Combinación
Combinación Múltiple (Ejemplo)
Combinación Múltiple (Ejemplo)

  Una Combinación Múltiple es aquella
   Una Combinación Múltiple es aquella
  combinación que relaciona varios
   combinación que relaciona varios
  campos de más de dos tablas.
   campos de más de dos tablas.


   • Encontrar todos los artículos que han sido pedidos entre el 15/5/2006 y el 30/5/2006.

  SELECT DISTINCT Articulos.codigart, descrart
  SELECT DISTINCT Articulos.codigart, descrart
    FROM Pedidos INNER JOIN
     FROM Pedidos INNER JOIN
                 (Lineas INNER JOIN Articulos ON Lineas.codigart = Articulos.codigart)
                  (Lineas INNER JOIN Articulos ON Lineas.codigart = Articulos.codigart)
                          ON Pedidos.numped = Lineas.numped
                          ON Pedidos.numped = Lineas.numped
     WHERE fechaped BETWEEN '2006/05/15' AND '2006/05/30'
     WHERE fechaped BETWEEN '2006/05/15' AND '2006/05/30'




Marta Zorrilla                              2008-2009                                        48
IMD XVI :: SELECT
IMD XVI SELECT
Búsquedas Cualificadas. Cond. de Combinación
Búsquedas Cualificadas. Cond. de Combinación
Autocombinación (Ejemplo)
Autocombinación (Ejemplo)



     Una Autocombinación es una combinación de una tabla con ella misma.
     Una Autocombinación es una combinación de una tabla con ella misma.



     • Localizar todos los pedidos que tienen varias líneas del mismo artículo.

      SELECT x.numped, x.numlin, x.codigart
       SELECT x.numped, x.numlin, x.codigart
      FROM Lineas x, Lineas yy
       FROM Lineas x, Lineas
      WHERE x.numped = y.numped AND x.numlin <> y.numlin
      WHERE x.numped = y.numped AND x.numlin <> y.numlin
            AND x.codigart = y.codigart
             AND x.codigart = y.codigart




Marta Zorrilla                              2008-2009                             49
IMD XVI :: SELECT
IMD XVI SELECT
Búsquedas Cualificadas. Cond. de Combinación
Búsquedas Cualificadas. Cond. de Combinación
Autocombinación (Ejemplo)
Autocombinación (Ejemplo)
     • Localizar todos los pedidos que tienen varias líneas del mismo artículo.
    SELECT x.numped, x.numlin, x.codigart
     SELECT x.numped, x.numlin, x.codigart
    FROM Lineas x, Lineas yy
     FROM Lineas x, Lineas
    WHERE x.numped = y.numped AND x.numlin <> y.numlin
    WHERE x.numped = y.numped AND x.numlin <> y.numlin
         AND x.codigart = y.codigart
          AND x.codigart = y.codigart
                               Acceso X                               Acceso Y
 Información                   Acceso X                                Acceso Y
  de proceso                   Acceso X                               Acceso Y




Marta Zorrilla                              2008-2009                             50
IMD XVII :: SELECT
IMD XVII SELECT
Búsquedas Cualificadas. Cond. de Combinación
Búsquedas Cualificadas. Cond. de Combinación
Combinación Externa (Ejemplo)
Combinación Externa (Ejemplo)

     Una Combinación Externa es aquella que da preferencia a una tabla
      Una Combinación Externa es aquella que da preferencia a una tabla
     con respecto a otra. Así, las filas de la tabla dominante serán
      con respecto a otra. Así, las filas de la tabla dominante serán
     seleccionadas aunque la condición de enlace no se haya verificado.
      seleccionadas aunque la condición de enlace no se haya verificado.

  • Listar todos los proveedores indicando, en su caso, los que han recibido algún pedido.

   SELECT Proveedores.codigpro, nombrpro, Pedidos.numped                     Preferencia a la
    SELECT Proveedores.codigpro, nombrpro, Pedidos.numped                  tabla de la izquierda
     FROM Proveedores LEFT JOIN Pedidos
      FROM Proveedores LEFT JOIN Pedidos
           ON Proveedores.codigpro = Pedidos.codigpro
           ON Proveedores.codigpro = Pedidos.codigpro



   SELECT Proveedores.codigpro, nombrpro, Pedidos.numped
    SELECT Proveedores.codigpro, nombrpro, Pedidos.numped
     FROM Pedidos RIGHT JOIN Proveedores                                      Preferencia a la
      FROM Pedidos RIGHT JOIN Proveedores                                   tabla de la derecha
           ON Proveedores.codigpro = Pedidos.codigpro
           ON Proveedores.codigpro = Pedidos.codigpro


Marta Zorrilla                              2008-2009                                        51
IMD XVII :: SELECT
IMD XVII SELECT
Búsquedas Cualificadas. Cond. de Combinación
Búsquedas Cualificadas. Cond. de Combinación
Combinación Externa (Ejemplo 2)
Combinación Externa (Ejemplo 2)

   En el FROM de una Consulta pueden establecerse predicados. Estos se aplican
    En el FROM de una Consulta pueden establecerse predicados. Estos se aplican
   antes de ejecutar el join, mientras que cuando se establecen en el WHERE se
    antes de ejecutar el join, mientras que cuando se establecen en el WHERE se
   ejecutan al resultado del join.
    ejecutan al resultado del join.
   El resultado puede ser distinto si la condición de join es LEFT o RIGHT.
    El resultado puede ser distinto si la condición de join es LEFT o RIGHT.
• Listar todos los proveedores de Santander indicando, en su caso, los que han recibido
algún pedido.
   SELECT Proveedores.codigpro, nombrpro, Pedidos.numped
    SELECT Proveedores.codigpro, nombrpro, Pedidos.numped
     FROM Pedidos LEFT JOIN Proveedores
      FROM Pedidos LEFT JOIN Proveedores
          ON Proveedores.codigpro = Pedidos.codigpro
          ON Proveedores.codigpro = Pedidos.codigpro
          AND Localpro='SANTANDER'
           AND Localpro='SANTANDER'

   SELECT Proveedores.codigpro, nombrpro, Pedidos.numped
    SELECT Proveedores.codigpro, nombrpro, Pedidos.numped
     FROM Pedidos LEFT JOIN Proveedores
      FROM Pedidos LEFT JOIN Proveedores
        ON Proveedores.codigpro = Pedidos.codigpro
        ON Proveedores.codigpro = Pedidos.codigpro
      WHERE Localpro=‘SANTANDER’
      WHERE Localpro=‘SANTANDER’

 Marta Zorrilla                            2008-2009                                      52
IMD XVIII :: SELECT
IMD XVIII SELECT
Búsquedas Cualificadas. Cond. de Subsentencias
 Búsquedas Cualificadas. Cond. de Subsentencias
(Ejemplo de comparación)
 (Ejemplo de comparación)

     La instrucción SELECT permite contrastar una expresión ooun campo con el resultado
      La instrucción SELECT permite contrastar una expresión un campo con el resultado
     de otra instrucción (subsentencia) SELECT. A este contraste se le llama condición de
      de otra instrucción (subsentencia) SELECT. A este contraste se le llama condición de
     subsentencia yylas dos instrucciones se llaman instrucciones imbricadas. A su vez, la
      subsentencia las dos instrucciones se llaman instrucciones imbricadas. A su vez, la
     subsentencia puede incluir en su condición aaotra subsentencia yyasí sucesivamente.
      subsentencia puede incluir en su condición otra subsentencia así sucesivamente.
     Las condiciones de subsentencia pueden adoptar una de las formas siguientes:
      Las condiciones de subsentencia pueden adoptar una de las formas siguientes:

     exp operador_de_comparación {ALL | |[ANY | |SOME] }} (instrucción SELECT)
      exp operador_de_comparación {ALL [ANY SOME] (instrucción SELECT)
     exp [NOT] IN (instrucción SELECT)
      exp [NOT] IN (instrucción SELECT)
     campo [NOT] EXISTS (instrucción SELECT)
      campo [NOT] EXISTS (instrucción SELECT)

    • Encontrar los artículos cuyo stock es mayor que toda cantidad pedida del mismo artículo.

       SELECT articulos.codigart, descrart, stockart FROM Articulos
       SELECT articulos.codigart, descrart, stockart FROM Articulos
         WHERE stockart > ALL (SELECT unilin FROM Lineas
          WHERE stockart > ALL (SELECT unilin FROM Lineas
                                        WHERE Articulos.codigart = Lineas.codigart)
                                        WHERE Articulos.codigart = Lineas.codigart)




 Marta Zorrilla                              2008-2009                                           53
IMD XIX :: SELECT
IMD XIX SELECT
Búsquedas Cualificadas. Cond. de Subsentencias.     • Listar los artículos que no han sido pedidos
 Búsquedas Cualificadas. Cond. de Subsentencias.
(Ejemplos con predicados IN y EXIST)
 (Ejemplos con predicados IN y EXIST)
                                                    entre el 24 de Septiembre y el 21 de
                                                    Noviembre de 2006.
SELECT DISTINCT Articulos.codigart, descrart FROM Articulos
SELECT DISTINCT Articulos.codigart, descrart FROM Articulos
  WHERE Articulos.codigart NOT IN (SELECT Lineas.codigart FROM Lineas, Pedidos
  WHERE Articulos.codigart NOT IN (SELECT Lineas.codigart FROM Lineas, Pedidos
                                              WHERE Pedidos.numped = Lineas.numped
                                              WHERE Pedidos.numped = Lineas.numped
                                                AND Pedidos.fechaped
                                                 AND Pedidos.fechaped
                                               BETWEEN '2006/09/24' AND '2006/11/21')
                                               BETWEEN '2006/09/24' AND '2006/11/21')

• Encontrar los proveedores de Madrid a los que se les ha realizado algún pedido entre el
24/09/2006 y el 21/11/2006 .
SELECT DISTINCT Proveedores.codigpro, nombrpro FROM Proveedores
SELECT DISTINCT Proveedores.codigpro, nombrpro FROM Proveedores
  WHERE EXISTS ((SELECT ** FROM Pedidos
  WHERE EXISTS SELECT         FROM Pedidos
                            WHERE Proveedores.codigpro = Pedidos.codigpro
                            WHERE Proveedores.codigpro = Pedidos.codigpro
                              AND fechaped BETWEEN '2006/09/24' AND '2006/11/21')
                              AND fechaped BETWEEN '2006/09/24' AND '2006/11/21')
                                AND localpro = 'Madrid‘
                                AND localpro = 'Madrid‘

 Marta Zorrilla                              2008-2009                                          54
IMD XX :: SELECT
IMD XX SELECT
Funciones de grupo (Ejemplo)
Funciones de grupo (Ejemplo)               COUNT(*)
                                            COUNT(*)       Nº de filas que componen
                                                            Nº de filas que componen
                                                           el grupo.
                                                            el grupo.
  Con las filas de la información de
   Con las filas de la información de      COUNT(campo)
                                            COUNT(campo)   Nº de filas con valor
                                                            Nº de filas con valor
  proceso correspondiente a una                            asignado al campo (nulos
                                                            asignado al campo (nulos
   proceso correspondiente a una
  instrucción SELECT se pueden                             no cuentan).
                                                            no cuentan).
   instrucción SELECT se pueden
  establecer grupos.                       SUM(exp)        Suma de valores obtenidos
                                                            Suma de valores obtenidos
   establecer grupos.                       SUM(exp)
                                                           con la expresión en cada
                                                            con la expresión en cada
  En cada uno de estos grupos,
   En cada uno de estos grupos,                            fila.
                                                            fila.
  mediante las funciones de grupo, se
   mediante las funciones de grupo, se     AVG(exp)        Media.
                                            AVG(exp)       Media.
  pueden efectuar ciertos cálculos.
   pueden efectuar ciertos cálculos.       MAX(exp)
                                            MAX(exp)       Máximo.
                                                           Máximo.
   • Encontrar cuántos artículos hay       MIN(exp)
                                            MIN(exp)       Mínimo.
                                                            Mínimo.
   registrados, el máximo y el mínimo      STDEV(exp)
                                            STDEV(exp)     Desviación típica.
                                                            Desviación típica.
   precio unitario, el precio unitario     VAR(exp)
                                            VAR(exp)       Varianza.
                                                            Varianza.
   medio y la valoración del almacén.

     SELECT COUNT(codigart) AS Cantidad, MAX(preunart) AS Max,
     SELECT COUNT(codigart) AS Cantidad, MAX(preunart) AS Max,
            MIN(preunart) AS Min, AVG(preunart) AS Precio_medio,
             MIN(preunart) AS Min, AVG(preunart) AS Precio_medio,
                SUM(preunart*stockart) AS Valoración
                 SUM(preunart*stockart) AS Valoración
           FROM Articulos
            FROM Articulos


Marta Zorrilla                           2008-2009                                 55
IMD XXI :: SELECT
IMD XXI SELECT
Funciones de fecha (Ejemplo)
Funciones de fecha (Ejemplo)                 DAY(fecha)
                                              DAY(fecha)       Devuelve el día de mes de
                                                                Devuelve el día de mes de
                                                               fecha.
                                                                fecha.
   Los datos de tipo fecha son
    Los datos de tipo fecha son              MONTH (fecha)
                                              MONTH (fecha)    Devuelve el mes de fecha.
                                                                Devuelve el mes de fecha.
   almacenados como una unidad de
    almacenados como una unidad de           YEAR (fecha)
                                              YEAR (fecha)     Devuelve el año de fecha.
                                                                Devuelve el año de fecha.
   información. Cuando se necesita
    información. Cuando se necesita
   trabajar con componentes de una           DATEPART(dw,fecha) Devuelve el día de la
                                              DATEPART(dw,fecha) Devuelve el día de la
    trabajar con componentes de una                          semana
   fecha, es preciso utilizar funciones
    fecha, es preciso utilizar funciones                      semana correspondiente
                                                                          correspondiente
                                                             aa fecha (el 11 domingo,
                                                                  fecha (el        domingo,
   de fecha.
    de fecha.                                                el 22 lunes, ...).
                                                              el      lunes, ...).

     • Listar día, mes y año de cada pedido, así como el día de la semana al que
     corresponden sus fechas.

       SELECT numped, fechaped,
        SELECT numped, fechaped,
       DAY(fechaped) as dia_mes, MONTH(fechaped) as mes,
        DAY(fechaped) as dia_mes, MONTH(fechaped) as mes,
       YEAR(fechaped) as año, DATEPART(dw,fechaped) as dia_sem
        YEAR(fechaped) as año, DATEPART(dw,fechaped) as dia_sem
       FROM Pedidos
        FROM Pedidos




Marta Zorrilla                             2008-2009                                        56
IMD XXII :: SELECT
IMD XXII SELECT
Agrupamiento de datos (Ejemplo)
Agrupamiento de datos (Ejemplo)


       La cláusula GROUP permite formar grupos con las filas de datos que
        La cláusula GROUP permite formar grupos con las filas de datos que
       tengan valores iguales para determinados campos.
        tengan valores iguales para determinados campos.
       La respuesta tiene tantas filas como grupos haya establecido la
        La respuesta tiene tantas filas como grupos haya establecido la
       instrucción.
        instrucción.


      • Obtener el importe de cada pedido sin aplicar el IVA.

       SELECT numped, SUM((preunlin*unilin)*(1-desculin/100)) as Importe
       SELECT numped, SUM((preunlin*unilin)*(1-desculin/100)) as Importe
         FROM Lineas
          FROM Lineas
           GROUP BY numped
           GROUP BY numped




 Marta Zorrilla                             2008-2009                        57
IMD XXIII :: SELECT
IMD XXIII SELECT
Agrupamiento de Datos. Cond. de agrupamiento
 Agrupamiento de Datos. Cond. de agrupamiento
(Ejemplo)
 (Ejemplo)




    • Listar el importe, sin aplicar el IVA, de los pedidos que tienen más de una línea.


          SELECT numped, SUM((preunlin*unilin)*(1-desculin/100)) as Importe
           SELECT numped, SUM((preunlin*unilin)*(1-desculin/100)) as Importe
             FROM Lineas
              FROM Lineas
                 GROUP BY numped
                 GROUP BY numped
                 HAVING COUNT(*))> 1
                 HAVING COUNT(* > 1




Marta Zorrilla                               2008-2009                                     58
IMD XXII :: SELECT
IMD XXII SELECT
Agrupamiento de datos WITH CUBE (Ejemplo)
Agrupamiento de datos WITH CUBE (Ejemplo)


       El operador CUBE mantiene los grupos formados por GROUP BY yy
        El operador CUBE mantiene los grupos formados por GROUP BY
       además añade los superagregados para cada columna.
        además añade los superagregados para cada columna.

      • Obtener el nº de unidades pedidas de cada artículo por pedido, el nº total de uds
      pedidas por artículo y el nº de unidades pedidas por pedido .

       SELECT descrart, numped, sum(unilin) as unidadesPedidas
        SELECT descrart, numped, sum(unilin) as unidadesPedidas
       FROM articulos inner join lineas on articulos.codigart=lineas.codigart
        FROM articulos inner join lineas on articulos.codigart=lineas.codigart
       GROUP BY descrart, numped
       GROUP BY descrart, numped
       WITH CUBE ; ;
       WITH CUBE




 Marta Zorrilla                            2008-2009                                        59
IMD XXII :: SELECT
IMD XXII SELECT
Agrupamiento de datos WITH ROLLUP (Ejemplo)
Agrupamiento de datos WITH ROLLUP (Ejemplo)


       El operador ROLLUP mantiene los grupos formados por GROUP BY yy
        El operador ROLLUP mantiene los grupos formados por GROUP BY
       además añade los superagregados de la primera columna del group by.
        además añade los superagregados de la primera columna del group by.

      • Obtener el nº de unidades pedidas de cada artículo por pedido y el nº total de uds
      pedidas por artículo.

       SELECT descrart, numped, sum(unilin) as unidadesPedidas
        SELECT descrart, numped, sum(unilin) as unidadesPedidas
       FROM articulos inner join lineas on articulos.codigart=lineas.codigart
        FROM articulos inner join lineas on articulos.codigart=lineas.codigart
       GROUP BY descrart, numped
       GROUP BY descrart, numped
       WITH ROLLUP ; ;
       WITH ROLLUP




 Marta Zorrilla                             2008-2009                                        60
IMD XXIV :: SELECT
IMD XXIV SELECT
Funciones de clasificación (Ejemplo)
Funciones de clasificación (Ejemplo)               ROW_NUMBER() OVER (<partición><orden>)
                                                    ROW_NUMBER() OVER (<partición><orden>)
                                                   nº secuencial de un fila de una partición de un
                                                    nº secuencial de un fila de una partición de un
  Permiten establecer un valor de
   Permiten establecer un valor de                 cjto de resultados.
                                                    cjto de resultados.
  categoría para cada fila devuelta de
   categoría para cada fila devuelta de            RANK() OVER (<partición><orden>)
                                                    RANK() OVER (<partición><orden>)
  una partición.
   una partición.                                  rango de la fila en la partición de un cjto de
                                                    rango de la fila en la partición de un cjto de
                                                   resultados.
                                                    resultados.
                                                   DENSE_RANK() OVER (<partición><orden>)
                                                    DENSE_RANK() OVER (<partición><orden>)
  • Clasifica los pedidos por el número            rango de la fila en la partición de un cjto de
  de líneas de pedido que tienen.                   rango de la fila en la partición de un cjto de
                                                   resultados sin espacio en la clasificación.
                                                    resultados sin espacio en la clasificación.
                                                   NTILE(nº entero) OVER (<partición><orden>)
                                                    NTILE(nº entero) OVER (<partición><orden>)
                                                   Distribuye las filas en los grupos especificados
                                                    Distribuye las filas en los grupos especificados
                                                   por nº entero.
                                                    por nº entero.

     SELECT numped, numlineas,
      SELECT numped, numlineas,
         row_number() over (order by numlineas) AS num_fila,
          row_number() over (order by numlineas) AS num_fila,
            rank () over (order by numlineas) AS ranking,
             rank () over (order by numlineas) AS ranking,
            dense_rank() over (order by numlineas) AS dense_ranking,
             dense_rank() over (order by numlineas) AS dense_ranking,
            ntile(4) over (order by numlineas) as quartil
             ntile(4) over (order by numlineas) as quartil
     FROM (SELECT numped, count(*) numlineas from lineas group by numped) as resultado
      FROM (SELECT numped, count(*) numlineas from lineas group by numped) as resultado

 Marta Zorrilla                                 2008-2009                                        61
IMD XXV :: SELECT
IMD XXV SELECT
Ordenación del Resultado (Ejemplo)
Ordenación del Resultado (Ejemplo)


        [ORDER BY colum1 {{[ASC] | |DESC }}[, colum2 {{[ASC] | |DESC }, .... ] ]] ]
         [ORDER BY colum1 [ASC] DESC [, colum2 [ASC] DESC }, ....
          colum1, colum2, ...: son nombres de elementos (campos, expresiones
           colum1, colum2, ...: son nombres de elementos (campos, expresiones
        o funciones) de la lista de selección o la posición que ocupan en ella.
         o funciones) de la lista de selección o la posición que ocupan en ella.
          ASC: quiere decir ordenación ascendente (opción por defecto) yyDESC
           ASC: quiere decir ordenación ascendente (opción por defecto) DESC
        descendente.
         descendente.


     • Listar los valores de los campos que componen el índice de unicidad de la tabla
     Lineas (numped, numlin), por orden decreciente de nº de pedido y de nº de línea.

        SELECT numped, numlin
         SELECT numped, numlin
           FROM Lineas
            FROM Lineas
                 ORDER BY 1 DESC, 2 DESC
                 ORDER BY 1 DESC, 2 DESC




Marta Zorrilla                            2008-2009                                      62
IMD XXVI :: SELECT
IMD XXVI SELECT
Guardar Resultado en una Tabla (Ejemplo)
Guardar Resultado en una Tabla (Ejemplo)

           INTO tabla_adicional
            INTO tabla_adicional
             tabla_adicional: es el nombre de la tabla a generar, que ha de ser
              tabla_adicional: es el nombre de la tabla a generar, que ha de ser
           único. Esta tabla hereda el esquema de la lista de selección (nombres
            único. Esta tabla hereda el esquema de la lista de selección (nombres
           campos, tipos de datos, ...).
            campos, tipos de datos, ...).


    • Crear una tabla temporal, llamada t1, para guardar el importe, sin aplicar el IVA, de
    los pedidos que tienen más de una línea.

           SELECT numped, SUM((preunlin*unilin)*(1-desculin/100)) as Importe
            SELECT numped, SUM((preunlin*unilin)*(1-desculin/100)) as Importe
              INTO #t1
               INTO #t1
                 FROM Lineas
                  FROM Lineas
                 GROUP BY numped
                  GROUP BY numped
                 HAVING COUNT(*) > 1
                 HAVING COUNT(*) > 1




Marta Zorrilla                             2008-2009                                          63
IMD XXVII :: SELECT
IMD XXVII SELECT
Unión de Sentencias (Ejemplo)
Unión de Sentencias (Ejemplo)


         Permite combinar los resultados de dos o más consultas. Para ello se
          Permite combinar los resultados de dos o más consultas. Para ello se
         requiere el operador UNION [ALL].
          requiere el operador UNION [ALL].



     • Listar todos los proveedores de las tablas Proveedores y Proveedores_Anulados
     ordenados por su código.

        SELECT codigpro, nombrpro, localpro
         SELECT codigpro, nombrpro, localpro
            FROM Proveedores
             FROM Proveedores
          UNION
          UNION
        SELECT codigp, nombrp, localp
         SELECT codigp, nombrp, localp
             FROM Proveedores_Anulados
              FROM Proveedores_Anulados
           ORDER BY 1
           ORDER BY 1




Marta Zorrilla                           2008-2009                                     64
IMD XXVIII: SELECT
IMD XXVIII: SELECT
EXCEPT e INTERSECT de Sentencias (Ejemplo)
EXCEPT e INTERSECT de Sentencias (Ejemplo)


         EXCEPT Devuelve los valores distintos de la primera consulta que no
          EXCEPT Devuelve los valores distintos de la primera consulta que no
         son devueltos por la segunda consulta.
          son devueltos por la segunda consulta.
         INTERSECT Devuelve los distintos valores que son devueltos por
          INTERSECT Devuelve los distintos valores que son devueltos por
         ambas consultas.
          ambas consultas.

     • Listar los clientes exceptuando aquellos que son también Proveedores.

        SELECT codigcli, nombrcli, localcli
         SELECT codigcli, nombrcli, localcli
            FROM clientes
             FROM clientes
        EXCEPT
         EXCEPT
        SELECT codigpro, nombrpro, localpro
         SELECT codigpro, nombrpro, localpro
                 FROM Proveedores
                  FROM Proveedores




Marta Zorrilla                             2008-2009                            65
IMD XXIX :: SELECT
IMD XXIX SELECT
Uso de funciones (Ejemplo)
Uso de funciones (Ejemplo)

     • Obtener el precio y la descripción de los artículos haciendo uso de la función
     dame_precio_articulos(@codigo_art).

        SELECT codigart as Codigo, descrart as Descripcion,
         SELECT codigart as Codigo, descrart as Descripcion,
           dbo.dame_precio_articulo(codigart) as Precio
            dbo.dame_precio_articulo(codigart) as Precio
        FROM ARTICULOS
         FROM ARTICULOS




     • Obtener los artículos haciendo uso de la función dame_precio_articulos cuyo precio sea
     superior a 190 €

        SELECT codigart as Codigo, descrart as Descripcion, preunart as Precio
         SELECT codigart as Codigo, descrart as Descripcion, preunart as Precio
         FROM ARTICULOS
          FROM ARTICULOS
          WHERE dbo.dame_precio_articulo(codigart) > 190
          WHERE dbo.dame_precio_articulo(codigart) > 190



Marta Zorrilla                             2008-2009                                        66
IMD XXX: INSERT con SELECT
IMD XXX: INSERT con SELECT

     • Incorporar a la tabla proveedores, los procedentes de la tabla temporal prov_tmp. Se
     considera que esta tabla tiene la misma estructura que la tabla proveedores.


        INSERT INTO proveedores
         INSERT INTO proveedores
          SELECT codigpro, cifpro, nombrpro, direcpro, cpostpro, localpro,
           SELECT codigpro, cifpro, nombrpro, direcpro, cpostpro, localpro,
                   telefpro, faxpro, procepro
                    telefpro, faxpro, procepro
           FROM prov_tmp
            FROM prov_tmp




Marta Zorrilla                              2008-2009                                         67
IMD XXXI: UPDATE, DELETE con SELECT
IMD XXXI: UPDATE, DELETE con SELECT

     • Actualizar los precios en un 2% de los artículos del grupo Bebidas.

        UPDATE articulo
         UPDATE articulo
        SET preunart = preunart **1.02
         SET preunart = preunart 1.02
        WHERE tipo_id IN
        WHERE tipo_id IN
         (SELECT tipo_id
          (SELECT tipo_id
           FROM TipoArticulo
            FROM TipoArticulo
           WHERE tipo_nombre = 'Bebidas')
            WHERE tipo_nombre = 'Bebidas')

     • Borrar los pedidos de los proveedores no comunitarios

        DELETE FROM pedidos
         DELETE FROM pedidos
        FROM pedidos INNER JOIN
         FROM pedidos INNER JOIN
         proveedores ON proveedores.codigpro = pedidos.codigpro
          proveedores ON proveedores.codigpro = pedidos.codigpro
        WHERE procepro = 'No UE'
        WHERE procepro = 'No UE'


Marta Zorrilla                              2008-2009                        68
IMD XXXII: SELECT, UPDATE con CASE
IMD XXXII: SELECT, UPDATE con CASE

     • Listar los artículos mostrando su precio categorizado por alto, bajo y no establecido.
        SELECT ‘precio' =
         SELECT ‘precio' =
           CASE
            CASE
                 WHEN preunart IS NULL THEN ‘No establecido'
                 WHEN preunart IS NULL THEN ‘No establecido'
                 WHEN preunart < 200 THEN ‘Bajo‘
                 WHEN preunart < 200 THEN ‘Bajo‘
             ELSE ‘Alto'
              ELSE ‘Alto'
             END,
              END,
          descrart
           descrart
        FROM articulos
         FROM articulos
      • Actualizar los artículos con precio < 10 con 5% y los > =10 con un 7%
        UPDATE articulos SET preunart=
        UPDATE articulos SET preunart=
          CASE
           CASE
               WHEN preunart <10 THEN preunart*1.05
               WHEN preunart <10 THEN preunart*1.05
             ELSE preunart*1.07
              ELSE preunart*1.07
             END
              END
Marta Zorrilla                               2008-2009                                          69
IMD XXXIII :: WITH (Ejemplo 1)
IMD XXXIII WITH (Ejemplo 1)



         WITH vista temporal en la que apoyarse para realizar otro SELECT
         WITH vista temporal en la que apoyarse para realizar otro SELECT


     • Listar los pedidos cuyo monto es superior a la media

        WITH total_pedidos (numped, valor) as
         WITH total_pedidos (numped, valor) as
        ((SELECT numped, sum(unilin*preunlin) from lineas
           SELECT numped, sum(unilin*preunlin) from lineas
         group by numped
          group by numped
        ))
        SELECT numped, valor
         SELECT numped, valor
        from total_pedidos
         from total_pedidos
        where total_pedidos.valor>=
        where total_pedidos.valor>=
               ((select avg(lineas.unilin*lineas.preunlin) from lineas)
                  select avg(lineas.unilin*lineas.preunlin) from lineas)



Marta Zorrilla                              2008-2009                       70
IMD XXXIII :: WITH (Ejemplo 2)
IMD XXXIII WITH (Ejemplo 2)



     • Listar los pedidos que se encuentran en la posición 50 a 60 según el orden de fecha
     de pedido.

        WITH pedidosOrdenados AS
         WITH pedidosOrdenados AS
        (SELECT numped, fechaped,
         (SELECT numped, fechaped,
        ROW_NUMBER() OVER (order by fechaped) as RowNumber
         ROW_NUMBER() OVER (order by fechaped) as RowNumber
        FROM pedidos)
         FROM pedidos)
        SELECT **
         SELECT
        FROM pedidosOrdenados
         FROM pedidosOrdenados
        WHERE RowNumber between 50 and 60;
        WHERE RowNumber between 50 and 60;




Marta Zorrilla                             2008-2009                                         71
IMD XXXIII :: WITH (Ejemplo con recursividad)
IMD XXXIII WITH (Ejemplo con recursividad)
     • Listar los jefes con las personas a su cargo, indicando el nivel jerárquico

        WITH JefeAQuienReportas(supervisor, dni, nivel) AS
         WITH JefeAQuienReportas(supervisor, dni, nivel) AS
        ((
             SELECT supervisor, dni, 0 AS nivel
              SELECT supervisor, dni, 0 AS nivel
             FROM empleados                      empleados(dni,…,supervisor, dep)
              FROM empleados
             WHERE supervisor IS NULL
             WHERE supervisor IS NULL
             UNION ALL
             UNION ALL
             SELECT e.supervisor, e.dni, nivel + 1
              SELECT e.supervisor, e.dni, nivel + 1
             FROM empleados e
              FROM empleados e
                 INNER JOIN JefeAQuienReportas d
                  INNER JOIN JefeAQuienReportas d
                 ON e.supervisor = d.dni
                  ON e.supervisor = d.dni
        ))
        SELECT supervisor, dni, nivel
         SELECT supervisor, dni, nivel
        FROM JefeAQuienReportas ; ;
         FROM JefeAQuienReportas

Marta Zorrilla                                2008-2009                              72
Lenguaje de definición de
Lenguaje de definición de
          datos
          datos
   SQL Server 2005
   SQL Server 2005
        (Parte 2)
       (Parte 2)
CREATE VIEW
 CREATE VIEW

     Para crear una vista en la base de datos. Su sintaxis es:

   CREATE VIEW [ [< nombreBD > . .] ][ [< propietario > . .] ]nombre [ [((campo [ [,...n ] ]))] ]
     CREATE VIEW < nombreBD >               < propietario > nombre campo ,...n
   [ [WITH <view_attribute> [ [,...n ] ]] ]
       WITH <view_attribute> ,...n
   ASAS
   Instrucción_Select
     Instrucción_Select
   [ [WITH CHECK OPTION ] ]
       WITH CHECK OPTION

     nombreBD: es el nombre de la base de datos en la que se crea.
      nombreBD: es el nombre de la base de datos en la que se crea.
     propietario: cuenta de usuario que crea la vista
      propietario: cuenta de usuario que crea la vista
     nombre: es el nombre de la vista que se va aacrear.
      nombre: es el nombre de la vista que se va crear.
     campo: es el nombre que se va aautilizar para una columna en una vista.
      campo: es el nombre que se va utilizar para una columna en una vista.
     instrucción_Select: consulta aatravés de la cuál se define la vista
      instrucción_Select: consulta través de la cuál se define la vista
     view_attribute: toma uno de los siguientes valores
      view_attribute: toma uno de los siguientes valores
     [ [ENCRYPTION ]:]:evita que la vista se publique como parte de la réplica de SQL Server
         ENCRYPTION evita que la vista se publique como parte de la réplica de SQL Server
     [ [SCHEMABINDING ]:]:enlaza la vista al esquema de las tablas subyacentes. Cuando se especifica, las tablas base
         SCHEMABINDING enlaza la vista al esquema de las tablas subyacentes. Cuando se especifica, las tablas base
   no se pueden modificar de una forma que afecte aala definición de la vista.
    no se pueden modificar de una forma que afecte la definición de la vista.
     [ [VIEW_METADATA ]:]:Especifica que la instancia de SQL Server devolverá aalas API de DB-Library, ODBC yy
         VIEW_METADATA Especifica que la instancia de SQL Server devolverá las API de DB-Library, ODBC
   OLE DB la información de metadatos sobre la vista en vez de las tablas base.
    OLE DB la información de metadatos sobre la vista en vez de las tablas base.
      [ [WITH CHECK OPTION ] ]: :Exige que todas las instrucciones de modificación de datos ejecutadas contra la
         WITH CHECK OPTION               Exige que todas las instrucciones de modificación de datos ejecutadas contra la
   vista se adhieran aalos criterios establecidos en la instrucción Select.
    vista se adhieran los criterios establecidos en la instrucción Select.
Marta Zorrilla                                         2008-2009                                                      74
CREATE VIEW .. Ejemplo
  CREATE VIEW Ejemplo




   CREATE VIEW dbo.EncabezadoPedido
    CREATE VIEW dbo.EncabezadoPedido
   AS
    AS
   SELECT dbo.Pedidos.numped, dbo.Pedidos.fechaped, dbo.Pedidos.codigpro,
    SELECT dbo.Pedidos.numped, dbo.Pedidos.fechaped, dbo.Pedidos.codigpro,
   dbo.Pedidos.ivaped, dbo.Pedidos.fentrped, dbo.Proveedores.nombrpro,
    dbo.Pedidos.ivaped, dbo.Pedidos.fentrped, dbo.Proveedores.nombrpro,
   dbo.Proveedores.direcpro, dbo.Proveedores.cpostpro, dbo.Proveedores.localpro,
    dbo.Proveedores.direcpro, dbo.Proveedores.cpostpro, dbo.Proveedores.localpro,
   dbo.Proveedores.telefpro, dbo.Proveedores.faxpro,
    dbo.Proveedores.telefpro, dbo.Proveedores.faxpro,
   dbo.Proveedores.procepro, dbo.Proveedores.emailpro, dbo.Proveedores.cifpro
    dbo.Proveedores.procepro, dbo.Proveedores.emailpro, dbo.Proveedores.cifpro
   FROM
    FROM      dbo.Proveedores INNER JOIN
               dbo.Proveedores INNER JOIN
              dbo.Pedidos ON dbo.Proveedores.codigpro = dbo.Pedidos.codigpro
               dbo.Pedidos ON dbo.Proveedores.codigpro = dbo.Pedidos.codigpro




Marta Zorrilla                        2008-2009                                     75
Tsql
Tsql
Tsql
Tsql
Tsql
Tsql
Tsql
Tsql
Tsql
Tsql
Tsql
Tsql
Tsql
Tsql
Tsql
Tsql
Tsql
Tsql
Tsql
Tsql
Tsql
Tsql
Tsql
Tsql
Tsql
Tsql
Tsql
Tsql
Tsql
Tsql
Tsql
Tsql
Tsql
Tsql
Tsql
Tsql
Tsql
Tsql
Tsql
Tsql
Tsql
Tsql
Tsql
Tsql
Tsql
Tsql
Tsql
Tsql
Tsql

Weitere ähnliche Inhalte

Was ist angesagt? (10)

Informatica
InformaticaInformatica
Informatica
 
Informatica
InformaticaInformatica
Informatica
 
PresentacióN De Access
PresentacióN De AccessPresentacióN De Access
PresentacióN De Access
 
Guía de relaciones de tablas
Guía de relaciones de tablasGuía de relaciones de tablas
Guía de relaciones de tablas
 
Excel dede
Excel dedeExcel dede
Excel dede
 
Excel dede
Excel dedeExcel dede
Excel dede
 
Trabajo De Informatica Sobre Access Magno Patricio Avilez Ae3 4
Trabajo De Informatica Sobre Access Magno Patricio Avilez Ae3 4Trabajo De Informatica Sobre Access Magno Patricio Avilez Ae3 4
Trabajo De Informatica Sobre Access Magno Patricio Avilez Ae3 4
 
Excel dede
Excel dedeExcel dede
Excel dede
 
Que es access
Que es accessQue es access
Que es access
 
Ejercicios de arboles B
Ejercicios de arboles BEjercicios de arboles B
Ejercicios de arboles B
 

Andere mochten auch

Andere mochten auch (7)

Indices 1
Indices 1Indices 1
Indices 1
 
Indexacion Y Asociacion
Indexacion Y AsociacionIndexacion Y Asociacion
Indexacion Y Asociacion
 
Base de Datos
Base de DatosBase de Datos
Base de Datos
 
Indices en oracle
Indices en oracleIndices en oracle
Indices en oracle
 
Tipos de índices
Tipos de índicesTipos de índices
Tipos de índices
 
Diapositivas sobre BD (Base de Datos)
Diapositivas sobre BD (Base de Datos)Diapositivas sobre BD (Base de Datos)
Diapositivas sobre BD (Base de Datos)
 
Arboles B y Arboles B+
Arboles B y Arboles B+Arboles B y Arboles B+
Arboles B y Arboles B+
 

Ähnlich wie Tsql

Ähnlich wie Tsql (20)

Unidad iv ddl
Unidad iv ddlUnidad iv ddl
Unidad iv ddl
 
OVA DISEÑO ORACLE Introducción Bases de Datos .pptx
OVA DISEÑO ORACLE Introducción Bases de Datos .pptxOVA DISEÑO ORACLE Introducción Bases de Datos .pptx
OVA DISEÑO ORACLE Introducción Bases de Datos .pptx
 
Base de Datos
Base de DatosBase de Datos
Base de Datos
 
Administracion de base de datos
Administracion de base de datosAdministracion de base de datos
Administracion de base de datos
 
Temario
Temario Temario
Temario
 
Diapositivas de base de datos
Diapositivas de base de datosDiapositivas de base de datos
Diapositivas de base de datos
 
Unidad I- Introducción.pptx
Unidad I- Introducción.pptxUnidad I- Introducción.pptx
Unidad I- Introducción.pptx
 
1-2 Arquitectura base de datos.pptx
1-2 Arquitectura base de datos.pptx1-2 Arquitectura base de datos.pptx
1-2 Arquitectura base de datos.pptx
 
Cuadro Comparativo Bd
Cuadro Comparativo BdCuadro Comparativo Bd
Cuadro Comparativo Bd
 
Sql
SqlSql
Sql
 
Base de Datos en Microsoft SQL Server
Base de Datos en Microsoft SQL ServerBase de Datos en Microsoft SQL Server
Base de Datos en Microsoft SQL Server
 
Base de datos en microsoft sql server
Base de datos en microsoft sql serverBase de datos en microsoft sql server
Base de datos en microsoft sql server
 
Lenguaje de consulta de datos
Lenguaje de consulta de datosLenguaje de consulta de datos
Lenguaje de consulta de datos
 
Base datos sql
Base datos sqlBase datos sql
Base datos sql
 
Database fundamental itprosdc_chapter2
Database fundamental itprosdc_chapter2Database fundamental itprosdc_chapter2
Database fundamental itprosdc_chapter2
 
guia-2.pdf
guia-2.pdfguia-2.pdf
guia-2.pdf
 
Base de datos, tipos, características
Base de datos, tipos, característicasBase de datos, tipos, características
Base de datos, tipos, características
 
Informixsql
InformixsqlInformixsql
Informixsql
 
Proyecto Gestor SQL en Java - Programacion 3
Proyecto Gestor SQL en Java - Programacion 3Proyecto Gestor SQL en Java - Programacion 3
Proyecto Gestor SQL en Java - Programacion 3
 
Partes de acces
Partes de accesPartes de acces
Partes de acces
 

Kürzlich hochgeladen

guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITMaricarmen Sánchez Ruiz
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx241521559
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricKeyla Dolores Méndez
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...silviayucra2
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudianteAndreaHuertas24
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)GDGSucre
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfJulian Lamprea
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxLolaBunny11
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíassuserf18419
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfsoporteupcology
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIAWilbisVega
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 

Kürzlich hochgeladen (13)

guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdf
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptx
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdf
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 

Tsql

  • 1. Lenguaje SQL SQL Server 2005 Marta E. Zorrilla Departamento de Matemática, Estadística y Computación Universidad de Cantabria Marta Zorrilla 2008-2009 1
  • 2. Contenido Contenido Introducción. Introducción. Instrucciones de Definición de Datos. Instrucciones de Definición de Datos. Ejemplos. Ejemplos. Instrucciones de Manipulación de Datos. Instrucciones de Manipulación de Datos. Ejemplos. Ejemplos. Referencias bibliográficas: - Kalen Delaney. A fondo Microsoft SQL Server 2000. McGraw-Hill, 2001 - Henderson, K. SQL Server 2000 Stored Procedure & XML Programming, 2ª ed. 2002. - Henderson, K. The Guru's Guide to Transact-SQL. Addison-Wesley. 2000. - Sunderic, D. Microsoft SQL Server 2005 stored procedure programming in T-SQL & .NET. 2006 - Sql Server 2005. Ayuda online. Marta Zorrilla 2008-2009 2
  • 3. Introducción Introducción SQL (Structured Query Language). SQL (Structured Query Language). Lenguaje declarativo de acceso a los datos. Estándar para las bases de datos relacionales. Incluye la capacidad de manipular tanto la estructura de la base de datos como sus datos. Aspectos de seguridad. Desarrollado en el Laboratorio de investigación de San José de IBM. Fue utilizado por primera vez en 1970. En 1986: ANSI (American National Standards Institute) e ISO (International Standards Organization) publicaron una norma, denominada SQL-86. Ésta ha tenido dos actualizaciones: SQL-89 y SQL-92. En la actualidad, se trabaja con el SQL:1999 y SQL:2003 Marta Zorrilla 2008-2009 3
  • 4. SQL-92 y SQL-99 SQL-92 y SQL-99 SQL-92 incorpora: • Nuevos operadores relacionales: OUTER JOIN y JOIN • SQL dinámico • El parámetro SQLSTATE para gestión de errores • Cursores de desplazamiento (scroll cursor). • Modo de acceso (lectura o lectura/escritura) y nivel de aislamiento de las transacciones. • Definir dominios (CREATE DOMAIN). En la actualidad, se trabaja con el SQL:1999 (revisado en SQL3). Las características más relevantes son: • Nuevos tipos de datos: LOB, BOOLEAN, ROW, ARRAY, DISTINCT. • Posibilidad de definir nuevos tipos de datos por parte del usuario (limitado). • Disparadores (triggers), vistas actualizables (Indexed views) • Cursores (punteros) sensitivos. Queries recursivos. • Definición de roles de usuario • Incorporación de las características de orientación a objetos: tipos de datos abstractos, generalización, herencia y polimorfismo. Marta Zorrilla 2008-2009 4
  • 5. SQL:2003 SQL:2003 • Nuevos tipos de datos: MULTISET, BIGINT y XML • Columnas calculadas en tablas (valores escalares) • Funciones escalares y que devuelven tablas • Creación de tablas: LIKE , AS • MERGE: permite la combinación de operaciones de inserción y actualización en una sola instrucción • Generadores de secuencia. • Nuevas funciones escalares, de agregación, de clasificación (RANK, ROW_NUMBER...) Marta Zorrilla 2008-2009 5
  • 6. Lenguaje de definición de Lenguaje de definición de datos datos SQL Server 2005 SQL Server 2005 (Parte 1) (Parte 1)
  • 7. Instrucciones de Definición de Datos (IDD) Instrucciones de Definición de Datos (IDD) Las IDD comprenden todas las operaciones necesarias para implantar y mantener un esquema relacional. Con ellas, se describen los datos y su agrupamiento formando tablas, así como las restricciones que deben cumplir. Las IDD permiten crear, modificar y eliminar tablas, así como todos los componentes que las definen: campos, índices, claves, etc. y las restricciones que sean precisas. Principales instrucciones: CREATE DATABASE CREATE TABLE Cláusula CONSTRAINT ALTER TABLE CREATE INDEX CREATE VIEW CREATE TRIGGER CREATE PROCEDURE / FUNCTION CREATE RULE DROP “objeto” Marta Zorrilla 2008-2009 7
  • 8. IDD I :: CREATE DATABASE IDD I CREATE DATABASE Para crear una base de datos. Su sintaxis es: CREATE DATABASE nombreBD CREATE DATABASE nombreBD [ [ON ON [ [< fichero > [ [,...n ] ]] ] < fichero > ,...n [ [, ,< grupo_fichero > [ [,...n ] ]] ] nombreBD: es el nombre de la BD que se va aacrear. nombreBD: es el nombre de la BD que se va crear. < grupo_fichero > ,...n ]] collation_name: mapa de caracteres collation_name: mapa de caracteres [ [LOG ON {{< fichero > [ [,...n ] ]}}] ] LOG ON < fichero > ,...n logical_file_name : :nombre lógico del fichero. logical_file_name nombre lógico del fichero. [ [COLLATE collation_name ] ] COLLATE collation_name [ [FOR LOAD | |FOR ATTACH ] ] os_file_name : :nombre físico del fichero. os_file_name nombre físico del fichero. FOR LOAD FOR ATTACH size: es el tamaño del fichero. size: es el tamaño del fichero. < fichero > ::= < fichero > ::= max_size: es el tamaño máximo del fichero. max_size: es el tamaño máximo del fichero. [ [PRIMARY ] ] PRIMARY (([ [NAME = logical_file_name , ,] ] growth_increment : :incremento del fichero. growth_increment incremento del fichero. NAME = logical_file_name FILENAME = 'os_file_name' FILENAME = 'os_file_name' filegroup_name: nombre grupo de archivos filegroup_name: nombre grupo de archivos [ [, ,SIZE = size ] ] SIZE = size [ [, ,MAXSIZE = {{max_size | |UNLIMITED }}] ] MAXSIZE = max_size UNLIMITED [ [, ,FILEGROWTH = growth_increment ] ]))[ [,...n ] ] FILEGROWTH = growth_increment ,...n < grupo_fichero > ::= < grupo_fichero > ::= FILEGROUP filegroup_name < fichero > [ [,...n ] ] FILEGROUP filegroup_name < fichero > ,...n Marta Zorrilla 2008-2009 8
  • 9. IDD I :: CREATE DATABASE. Ejemplo IDD I CREATE DATABASE. Ejemplo CREATE DATABASE [compras] CREATE DATABASE [compras] ON (NAME = N'compras', ON (NAME = N'compras', FILENAME = N'C:datacompras.mdf' , , FILENAME = N'C:datacompras.mdf' SIZE = 2, MAXSIZE = 3000,FILEGROWTH = 10%) SIZE = 2, MAXSIZE = 3000,FILEGROWTH = 10%) LOG ON (NAME = N'compras_log', LOG ON (NAME = N'compras_log', FILENAME = N'C:datacompras_log.LDF' , , FILENAME = N'C:datacompras_log.LDF' SIZE = 1, FILEGROWTH = 10%) SIZE = 1, FILEGROWTH = 10%) COLLATE Modern_Spanish_CI_AS COLLATE Modern_Spanish_CI_AS Marta Zorrilla 2008-2009 9
  • 10. Páginas y extensiones Páginas y extensiones PÁGINA: es la unidad fundamental de almacenamiento de datos en Microsoft® SQL Server™. Su tamaño es de 8 KB. Esto significa que las bases de datos de SQL Server 2005 tienen 128 páginas por cada megabyte. El inicio de cada página es un encabezado de 96 bytes utilizado para almacenar información del sistema, como el tipo de página, la cantidad de espacio libre en la página y el Id. del objeto propietario de la página. En SQL Server, las filas no pueden continuar en otras páginas. En SQL Server, la máxima cantidad de datos contenidos en una fila es de 8060 bytes, sin incluir los tipos de dato text, ntext e image. Al final de cada página se encuentra una tabla de desplazamiento de filas. La tabla de desplazamiento de filas contiene una entrada por cada fila de la página y cada entrada registra la posición del primer byte de la fila con respecto al principio de la página. Las entradas de la tabla de desplazamiento de filas están en orden inverso a la secuencia de las filas de la página Las EXTENSIONES son la unidad básica en la que se asigna espacio a las tablas e índices. Una extensión consta de 8 páginas contiguas, es decir 64 KB. Esto significa que las bases de datos de SQL Server tienen 16 extensiones por megabyte. Marta Zorrilla 2008-2009 10
  • 11. SQL Server SQL Server database Data (file) Data (file) Log (file) Log (file) .mdf or .ndf .mdf or .ndf .ldf .ldf Tablas e índices Extents = 8 páginas continuas de 8 KB Datos se almacenan en Páginas de 8 KB Cabecera Tamaño máx. fila 8060 bytes Filas de datos 128 páginas por MB Matriz desplazamientos •Cada archivo se divide en páginas de 8 Kb numeradas de 0 hasta x , donde x viene definido por el tamaño del fichero. •Acceder a una página: ID de BD, ID de fichero y nº de pág •Fichero mdf: punto de comienzo de la BD, en sysfiles apunta los ficheros que constituyen la BD y además almacena las tablas del sistema. Marta Zorrilla 2008-2009 11
  • 12. IDD II :: CREATE TABLE IDD II CREATE TABLE Para incorporar una tabla nueva a la base de datos. Su sintaxis es: CREATE TABLE [ [nombreDB.[ propietario ] ]. .| |propietario. ] ]tabla CREATE TABLE nombreDB.[ propietario propietario. tabla (campo1 tipo [(tamaño)] [NOT NULL] [restricción_un_campo1 [ [... ] ]] ] (campo1 tipo [(tamaño)] [NOT NULL] [restricción_un_campo1 ... [, campo2 tipo [(tamaño)] [NOT NULL] [restricción_un_campo2 [ [... ] ]] ] [, campo2 tipo [(tamaño)] [NOT NULL] [restricción_un_campo2 ... [, ...]] [, ...]] [, restricción_varios_campos [, ...] ]])) [, restricción_varios_campos [, ...] [[ON {{grupo_fichero | |DEFAULT }}]] ON grupo_fichero DEFAULT [[TEXTIMAGE_ON {{grupo_fichero | |DEFAULT }}]] TEXTIMAGE_ON grupo_fichero DEFAULT tabla: es el nombre de la tabla que se va aacrear. tabla: es el nombre de la tabla que se va crear. campo1, campo2: son nombres de campos. Debe crearse al menos un campo. campo1, campo2: son nombres de campos. Debe crearse al menos un campo. tipo: es el tipo de dato asociado al campo. tipo: es el tipo de dato asociado al campo. tamaño: es el tamaño del campo en caracteres (solamente para campos de tipo Texto). tamaño: es el tamaño del campo en caracteres (solamente para campos de tipo Texto). restricción_un_campo1, restricción_un_campo2: son cláusulas CONSTRAINT que afectan aaun único restricción_un_campo1, restricción_un_campo2: son cláusulas CONSTRAINT que afectan un único campo. campo. restricción_varios_campos: es una cláusula CONSTRAINT que define un índice de múltiples campos. restricción_varios_campos: es una cláusula CONSTRAINT que define un índice de múltiples campos. ON: Especifica el grupo de archivos en el que se almacena la tabla. ON: Especifica el grupo de archivos en el que se almacena la tabla. TEXTIMAGE_ON: indica en qué grupo de archivos se almacenan las columnas text, ntext eeimage. TEXTIMAGE_ON: indica en qué grupo de archivos se almacenan las columnas text, ntext image. Marta Zorrilla 2008-2009 12
  • 13. IDD I :: CREATE DATABASE – TABLE. Ejemplo IDD I CREATE DATABASE – TABLE. Ejemplo CREATE DATABASE MyDB CREATE DATABASE MyDB ON PRIMARY ON PRIMARY ( (NAME='MyDB_Primary', NAME='MyDB_Primary', FILENAME= FILENAME= 'c:Program FilesMicrosoft SQL ServerMSSQL.1MSSQLdataMyDB_Prm.mdf', 'c:Program FilesMicrosoft SQL ServerMSSQL.1MSSQLdataMyDB_Prm.mdf', SIZE=4MB, MAXSIZE=10MB, FILEGROWTH=1MB), SIZE=4MB, MAXSIZE=10MB, FILEGROWTH=1MB), FILEGROUP MyDB_FG1 FILEGROUP MyDB_FG1 ( (NAME =='MyDB_FG1_Dat1', NAME 'MyDB_FG1_Dat1', FILENAME == FILENAME 'c:Program FilesMicrosoft SQL ServerMSSQL.1MSSQLdataMyDB_FG1_1.ndf', 'c:Program FilesMicrosoft SQL ServerMSSQL.1MSSQLdataMyDB_FG1_1.ndf', SIZE ==1MB, MAXSIZE=10MB, FILEGROWTH=1MB), SIZE 1MB, MAXSIZE=10MB, FILEGROWTH=1MB), ( (NAME =='MyDB_FG1_Dat2', NAME 'MyDB_FG1_Dat2', FILENAME == FILENAME 'c:Program FilesMicrosoft SQL ServerMSSQL.1MSSQLdataMyDB_FG1_2.ndf', 'c:Program FilesMicrosoft SQL ServerMSSQL.1MSSQLdataMyDB_FG1_2.ndf', SIZE ==1MB, MAXSIZE=10MB, FILEGROWTH=1MB) SIZE 1MB, MAXSIZE=10MB, FILEGROWTH=1MB) LOG ON LOG ON ( (NAME='MyDB_log', NAME='MyDB_log', FILENAME == FILENAME 'c:Program FilesMicrosoft SQL ServerMSSQL.1MSSQLdataMyDB.ldf', 'c:Program FilesMicrosoft SQL ServerMSSQL.1MSSQLdataMyDB.ldf', SIZE=1MB, MAXSIZE=10MB, FILEGROWTH=1MB); SIZE=1MB, MAXSIZE=10MB, FILEGROWTH=1MB); CREATE TABLE MyTable CREATE TABLE MyTable ( (cola int PRIMARY KEY, colb char(8) ) ) cola int PRIMARY KEY, colb char(8) ON MyDB_FG1; ON MyDB_FG1; Marta Zorrilla 2008-2009 13
  • 14. IDD III :: ALTER TABLE IDD III ALTER TABLE Para modificar el diseño de una tabla que ya existe en la base de datos. Su sintaxis es: ALTER TABLE tabla ALTER TABLE tabla {{ADD [COLUMN] campo tipo[(tamaño)] [NOT NULL] [restricción_un_campo] | | ADD [COLUMN] campo tipo[(tamaño)] [NOT NULL] [restricción_un_campo] [ [WITH CHECK | |WITH NOCHECK ] ]ADD {{restricción_tabla }}[ [,...n ] ] | | WITH CHECK WITH NOCHECK ADD restricción_tabla ,...n ALTER COLUMN {{campo tipo [(tamaño)] }} | | ALTER COLUMN campo tipo [(tamaño)] DROP {COLUMN campo | | CONSTRAINT nombre_restricción} | | DROP {COLUMN campo CONSTRAINT nombre_restricción} {{ENABLE | |DISABLE }}TRIGGER {{ALL | |nombre_trigger [ [,...n ] ]}} | | ENABLE DISABLE TRIGGER ALL nombre_trigger ,...n {{CHECK | |NOCHECK }}CONSTRAINT {{ALL | |nombre_restricción[ ,...n ] ]}} CHECK NOCHECK CONSTRAINT ALL nombre_restricción[ ,...n }} tabla: es el nombre de la tabla que se va aamodificar. tabla: es el nombre de la tabla que se va modificar. campo: es el nombre del campo que se va aaañadir oomodificar en la tabla . . campo: es el nombre del campo que se va añadir modificar en la tabla tipo: es el tipo de dato que se asigna aacampo. tipo: es el tipo de dato que se asigna campo. tamaño: es el tamaño del campo en caracteres (solamente para campos de tipo Texto). tamaño: es el tamaño del campo en caracteres (solamente para campos de tipo Texto). restricción_un_campo: es una cláusula CONSTRAINT que afectan aaun único campo. restricción_un_campo: es una cláusula CONSTRAINT que afectan un único campo. restricción_tabla: es una cláusula CONSTRAINT que afecta aavarios campos. restricción_tabla: es una cláusula CONSTRAINT que afecta varios campos. nombre_restricción: es el nombre de la restricción que se va aaeliminar ooha habilitar/deshabilitar. nombre_restricción: es el nombre de la restricción que se va eliminar ha habilitar/deshabilitar. nombre_trigger: es el nombre del desencadenador que se va aaeliminar ooha habilitar/deshabilitar. nombre_trigger: es el nombre del desencadenador que se va eliminar ha habilitar/deshabilitar. Marta Zorrilla 2008-2009 14
  • 15. IDD IV :: CLÁUSULA CONSTRAINT SOBRE UN SOLO CAMPO IDD IV CLÁUSULA CONSTRAINT SOBRE UN SOLO CAMPO Se utiliza en instrucciones CREATE TABLE y ALTER TABLE para crear o eliminar restricciones. Esta cláusula puede referirse a un campo de la tabla. La restricción Primary Key y Unique generan índice, Foreign key no. CONSTRAINT nombre CONSTRAINT nombre { {[ [NULL | |NOT NULL ] ]| | NULL NOT NULL [ [{ {PRIMARY KEY | |UNIQUE } } PRIMARY KEY UNIQUE [ [CLUSTERED | |NONCLUSTERED ] ] CLUSTERED NONCLUSTERED [ [WITH FILLFACTOR ==factor_relleno ] ] WITH FILLFACTOR factor_relleno [ [ON {grupo_ficheros | |DEFAULT} ] ]] ] ON {grupo_ficheros DEFAULT} ] ]| | [ [[ [FOREIGN KEY ] ] FOREIGN KEY REFERENCES otra_tabla[ (campo_externo1) ] ] REFERENCES otra_tabla[ (campo_externo1) [ [ON DELETE {NO ACTION | |CASCADE | |SET NULL | |SET DEFAULT } }] ] ON DELETE {NO ACTION CASCADE SET NULL SET DEFAULT [ [ON UPDATE {NO ACTION | |CASCADE | |SET NULL | |SET DEFAULT } }] ] ON UPDATE {NO ACTION CASCADE SET NULL SET DEFAULT [ [NOT FOR REPLICATION ] ] NOT FOR REPLICATION ] ]| | CHECK [ [NOT FOR REPLICATION ] ] ( (expresión_lógica ) ) CHECK NOT FOR REPLICATION expresión_lógica }} nombre: es el nombre de la restricción que se va aacrear. nombre: es el nombre de la restricción que se va crear. otra_tabla: es el nombre de la tabla aala que se hace referencia. otra_tabla: es el nombre de la tabla la que se hace referencia. campo_externo1: son los nombres de los campos de la otra_tabla aalos que se hace referencia. campo_externo1: son los nombres de los campos de la otra_tabla los que se hace referencia. factor_relleno: especifica cuánto se debe llenar cada página de índice utilizada para almacenar los factor_relleno: especifica cuánto se debe llenar cada página de índice utilizada para almacenar los datos de índice.Entre 00yy100. Por defecto 0. datos de índice.Entre 100. Por defecto 0. grupo_ficheros: indica dónde se almacena la tabla grupo_ficheros: indica dónde se almacena la tabla expresión_lógica: Expresión que devuelve true oofalse expresión_lógica: Expresión que devuelve true false Marta Zorrilla 2008-2009 15
  • 16. IDD V: CLÁUSULA CONSTRAINT SOBRE TABLA IDD V: CLÁUSULA CONSTRAINT SOBRE TABLA CONSTRAINT nombre CONSTRAINT nombre {{ [ [{ {PRIMARY KEY | |UNIQUE } } PRIMARY KEY UNIQUE [ [CLUSTERED | |NONCLUSTERED ] ] CLUSTERED NONCLUSTERED { {(principal1 [ [ASC | |DESC ] ][ [, ,principal2 [,[,...] ] ]) )} } (principal1 ASC DESC principal2 ...] [ [WITH FILLFACTOR = factor_relleno] WITH FILLFACTOR = factor_relleno] [ [ON { {grupo_ficheros | |DEFAULT } }] ] ON grupo_ficheros DEFAULT ]] || FOREIGN KEY FOREIGN KEY [ [(referencia1 [,[,referencia2 [,[,...] ] ]) )] ] (referencia1 referencia2 ...] REFERENCES otra_tabla [ [(campo_externo1 [ [,... campo_externo2 ] ]) )] ] REFERENCES otra_tabla (campo_externo1 ,... campo_externo2 [ [ON DELETE {NO ACTION | |CASCADE | |SET NULL | |SET DEFAULT } }] ] ON DELETE {NO ACTION CASCADE SET NULL SET DEFAULT [ [ON UPDATE {NO ACTION | |CASCADE | |SET NULL | |SET DEFAULT } }] ] ON UPDATE {NO ACTION CASCADE SET NULL SET DEFAULT [ [NOT FOR REPLICATION ] ] | | NOT FOR REPLICATION CHECK [ [NOT FOR REPLICATION ] ] (expresión_lógica ) ) CHECK NOT FOR REPLICATION (expresión_lógica }} nombre: es el nombre de la restricción que se va aacrear. nombre: es el nombre de la restricción que se va crear. principal1, principal2: son los nombres de los campos que compondrán la clave principal. principal1, principal2: son los nombres de los campos que compondrán la clave principal. referencia1, referencia2: son los nombres de los campos que hacen referencia aaotros de otra tabla. referencia1, referencia2: son los nombres de los campos que hacen referencia otros de otra tabla. otra_tabla: es el nombre de la tabla aala que se hace referencia. otra_tabla: es el nombre de la tabla la que se hace referencia. campo_externo1, campo_externo2: son los nombres de los campos de la otra_tabla aalos que se campo_externo1, campo_externo2: son los nombres de los campos de la otra_tabla los que se hace referencia. hace referencia. expresión_lógica: criterio que se ha de cumplir. Devuelve true oofalse expresión_lógica: criterio que se ha de cumplir. Devuelve true false Marta Zorrilla 2008-2009 16
  • 17. Ejemplo Ejemplo La base de datos trata de informatizar el proceso de compras de una empresa. Esto La base de datos trata de informatizar el proceso de compras de una empresa. Esto es, recoger los pedidos de los artículos, contemplados en su catálogo, que compran aa es, recoger los pedidos de los artículos, contemplados en su catálogo, que compran proveedores ya conocidos. proveedores ya conocidos. Reglas: Reglas: - -No puede seleccionar un artículo descatalogado. No puede seleccionar un artículo descatalogado. - -Si el stock alcanza el mínimo establecido, se ha de notificar como un evento. Si el stock alcanza el mínimo establecido, se ha de notificar como un evento. Marta Zorrilla 2008-2009 17
  • 18. IDD: CREATE TABLE IDD: CREATE TABLE Escribir las instrucciones SQL necesarias para construir Ejemplos Ejemplos la base de datos cuyo esquema de relaciones es: CREATE TABLE Lineas ( ( CREATE TABLE Lineas CREATE TABLE Proveedores ( ( NOT NULL, numped INTEGER NOT NULL, CREATE TABLE Proveedores numped INTEGER codigpro CHAR(4) NOT NULL NOT NULL, numlin NOT NULL CONSTRAINT id_pro PRIMARY KEY, numlin codigpro CHAR(4) SMALLINT NOT NULL, SMALLINT CONSTRAINT id_pro PRIMARY KEY, CREATE TABLE Articulos ( CREATE TABLE Articulos CREATE TABLEcodigart NOT( NULLNOTNULL, cifpro cifpro CHAR(12) NOT NULL CONSTRAINT u_cif UNIQUE, CREATE TABLEPedidos CHAR(6) NOT NULL, codigart ( CHAR(12) (CHAR(6) Pedidos CONSTRAINT u_cif UNIQUE, codigart CHAR(6) NOT NULL CONSTRAINT id_art PRIMARY KEY, nombrpro codigartINTEGER NULL, NULL NULL CONSTRAINT id_ped PRIMARY KEY, unilin CHAR(6) NOT NULL, CONSTRAINT id_art PRIMARY KEY, numped INTEGER NULL, NOT NULL CONSTRAINT id_ped PRIMARY KEY, nombrpro CHAR(30) FLOAT NOT NOT CHAR(30) NOT numped unilin NOT FLOAT NOT NULL, descrart CHAR(40) NOT NULL, descrart direcpro CHAR(30)CHAR(40) NOT NULL,NULL DEFAULT getdate(), fechaped DATETIME preunlin MONEY direcpro CHAR(30) NOT NULL,NOTNULL, fechaped DATETIME NOT NOTNULL DEFAULT getdate(), preunlin NOT NULL, NOT MONEY NULL, preunart MONEY NOT NULL, preunart cpostpro CHAR(5) MONEYNULLCHECK NULL, desculin FLOAT codigpro CHAR(4) NOT NULL, cpostpro CHAR(5) NOT NULLNOT NOT(cpostpro like '[0-9][0-9][0-9][0-9][0-9]'), desculin NOT codigpro CHAR(4) NOT (cpostpro (desculin>=0 and desculin<=100), FLOAT NOTNULL CHECK like '[0-9][0-9][0-9][0-9][0-9]'), NULL CHECK (desculin>=0 and desculin<=100), CHECK NULL, stockart INTEGER NOT NULL CHECK (stockart >0), localpro stockartFLOAT ([preunlin]NULLNULL(1–[desculin] >0), and ivaped<100), ivaped FLOATAS NULL, NOT CHAR(20) AS NULL, NOT CHECK (stockart / 100)), ivaped totallinINTEGER NOT NOT NULLCHECK (ivaped>0 localpro CHAR(20) NOT ([preunlin]**[unilin] **(1 CHECK(ivaped>0 and ivaped<100), totallin [unilin] –[desculin] / 100)), stockmin INTEGER NOT NULL CHECK (stockmin>0), telefprofentrped DATETIMENULL, NULLNULL, (stockmin>0), stockmin INTEGER NOT CONSTRAINTid_lin PRIMARY NULL, CHAR(17) NOT CHAR(17) id_lin NOT CHECK telefpro CONSTRAINTNOT NULL, NOT KEY(numped, numlin), fentrped DATETIME PRIMARY KEY (numped, numlin), fecbaja DATETIME) fecbaja DATETIME) faxpro CONSTRAINT f_ped FOREIGN(codigpro) REFERENCES Proveedores (codigpro), CONSTRAINT f_pro FOREIGN KEY KEY (numped) REFERENCES Pedidos (codigpro), CHAR(17), faxpro CONSTRAINT f_ped FOREIGN(codigpro) REFERENCES Proveedores (numped), CONSTRAINT f_pro FOREIGN KEY KEY (numped) REFERENCES Pedidos (numped), CHAR(17), emailpro CONSTRAINT f_art FOREIGN KEY (codigart) REFERENCES Articulos (codigart)) CONSTRAINT c_fecha CHECK (fechaped<=fentrped)) CHAR(25), emailpro CONSTRAINT f_art FOREIGN KEY (codigart) REFERENCES Articulos (codigart)) CONSTRAINT c_fecha CHECK (fechaped<=fentrped)) CHAR(25), procepro CHAR(10) NOT NULL CHECK (procepro in ('UE', 'No UE'))) procepro CHAR(10) NOT NULL CHECK (procepro in ('UE', 'No UE'))) Marta Zorrilla 2008-2009 18
  • 19. IDD :: ALTER TABLE. Ejemplos IDD ALTER TABLE. Ejemplos ALTER TABLE [dbo].[Proveedores] ALTER TABLE [dbo].[Proveedores] ADD CONSTRAINT [id_pro] PRIMARY KEY CLUSTERED (([codigpro] )) ADD CONSTRAINT [id_pro] PRIMARY KEY CLUSTERED [codigpro] ON [PRIMARY] ON [PRIMARY] GO GO ALTER TABLE [dbo].[Pedidos] WITH NOCHECK ADD ALTER TABLE [dbo].[Pedidos] WITH NOCHECK ADD CONSTRAINT [DF_Pedidos_fechaped] DEFAULT (getdate()) FOR [fechaped], CONSTRAINT [DF_Pedidos_fechaped] DEFAULT (getdate()) FOR [fechaped], CONSTRAINT [c_fecha] CHECK ([fechaped] <= [fentrped]), CONSTRAINT [c_fecha] CHECK ([fechaped] <= [fentrped]), CHECK ([ivaped] > 0 and [ivaped] < 100) CHECK ([ivaped] > 0 and [ivaped] < 100) GO GO ALTER TABLE [dbo].[Proveedores] ADD ALTER TABLE [dbo].[Proveedores] ADD CONSTRAINT [u_cif] UNIQUE NONCLUSTERED (([cifpro] )) ON [PRIMARY] , , CONSTRAINT [u_cif] UNIQUE NONCLUSTERED [cifpro] ON [PRIMARY] CHECK ([cpostpro] like '[0-9][0-9][0-9][0-9][0-9]'), CHECK ([cpostpro] like '[0-9][0-9][0-9][0-9][0-9]'), CHECK ([procepro] = 'No UE' or [procepro] = 'UE') CHECK ([procepro] = 'No UE' or [procepro] = 'UE') GO GO Marta Zorrilla 2008-2009 19
  • 20. IDD VI :: CREATE INDEX IDD VI CREATE INDEX Para crear un índice nuevo en una tabla que ya existe en la base de datos. Su sintaxis es: CREATE [ [UNIQUE ] ][ [CLUSTERED | |NONCLUSTERED ] ]INDEX índice CREATE UNIQUE CLUSTERED NONCLUSTERED INDEX índice ON {tabla | |vista }}(campo1 [ [{ASC | |DESC }] [, campo2 [{ASC|DESC}], ...]) ON {tabla vista (campo1 {ASC DESC }] [, campo2 [{ASC|DESC}], ...]) [ [WITH < opción_índice > [ [,...n] ] ] WITH < opción_índice > ,...n] [ [ON grupo_ficheros ] ] ON grupo_ficheros < opción_índice > :: = < opción_índice > :: = {{PAD_INDEX | |FILLFACTOR = factor_relleno | |IGNORE_DUP_KEY | | PAD_INDEX FILLFACTOR = factor_relleno IGNORE_DUP_KEY DROP_EXISTING | |STATISTICS_NORECOMPUTE | | SORT_IN_TEMPDB }} DROP_EXISTING STATISTICS_NORECOMPUTE SORT_IN_TEMPDB UNIQUE: señala que el índice es de unicidad, en caso contrario permitirá repetición de valores. UNIQUE: señala que el índice es de unicidad, en caso contrario permitirá repetición de valores. índice: es el nombre del índice que se va aacrear. índice: es el nombre del índice que se va crear. tabla/vista: es el nombre de una tabla/vista existente aala que estará asociado el índice. tabla/vista: es el nombre de una tabla/vista existente la que estará asociado el índice. campo1, campo2: son los nombres de los campos que van aaformar el índice. Puede ser un solo campo1, campo2: son los nombres de los campos que van formar el índice. Puede ser un solo campo. Para forzar una ordenación descendente de un campo, hay que utilizar la palabra reservada campo. Para forzar una ordenación descendente de un campo, hay que utilizar la palabra reservada DESC; sino se especifica oose escribe ASC, se entiende que la ordenación es ascendente. DESC; sino se especifica se escribe ASC, se entiende que la ordenación es ascendente. CREATE INDEX FK_Lineas ON Lineas (codigart) CREATE INDEX FK_Lineas ON Lineas (codigart) Marta Zorrilla 2008-2009 20
  • 21. SQL Server 2005 Tabla del catálogo: sysindexes Índice no cluster Índice cluster Marta Zorrilla 2008-2009 21
  • 22. Tipos de datos Tipos de datos Consideraciones previas: Consideraciones previas: • Qué tipo de información se va a almacenar. Por ejemplo, no se • Qué tipo de información se va a almacenar. Por ejemplo, no se pueden guardar caracteres en un campo cuyo tipo de datos sea pueden guardar caracteres en un campo cuyo tipo de datos sea numérico. numérico. • El espacio de almacenamiento necesario (dimensionar el campo). • El espacio de almacenamiento necesario (dimensionar el campo). • Qué tipo de operaciones se van a realizar con los valores del campo. • Qué tipo de operaciones se van a realizar con los valores del campo. Pues, por ejemplo, no se puede calcular la suma de dos cadenas de Pues, por ejemplo, no se puede calcular la suma de dos cadenas de texto. texto. • Si se desea ordenar o indexar por ese campo. Los criterios de • Si se desea ordenar o indexar por ese campo. Los criterios de ordenación difieren en función del tipo de dato, así, los números ordenación difieren en función del tipo de dato, así, los números almacenados en un campo texto se ordenan según el valor de su almacenados en un campo texto se ordenan según el valor de su código ASCII (1,10,11,2,20,...) que no coincide con la ordenación código ASCII (1,10,11,2,20,...) que no coincide con la ordenación numérica. numérica. Marta Zorrilla 2008-2009 22
  • 23. Tipos de datos en SQL Server 2005 I Tipos de datos en SQL Server 2005 I NUMÉRICOS bigint Datos enteros (números enteros) comprendidos entre -2^63 (-9223372036854775808) y 2^63 -1 (9223372036854775807). int Datos enteros (números enteros) comprendidos entre -2^31 (-2.147.483.648) y 2^31 - 1 (2.147.483.647). smallint Datos enteros comprendidos entre 2^15 (-32.768) y 2^15 - 1 (32.767). tinyint Datos enteros comprendidos 0 y 255. bit Datos enteros con valor 1 ó 0. decimal Datos de precisión y escala numérica fijas comprendidos entre -10^38 +1 y 10^38 – 1. numeric Funcionalmente equivalente a decimal. money Valores de moneda comprendidos entre -2^63 (-922.337.203.685.477,5808) y 2^63 - 1 (+922.337.203.685.477,5807), con una precisión de una diezmilésima de la unidad monetaria. smallmoney Valores de moneda comprendidos entre -214.748,3648 y +214.748,3647, con una precisión de una diezmilésima de la unidad monetaria. float Números con precisión de coma flotante comprendidos entre -1,79E + 308 y 1,79E + 308. real Números con precisión de coma flotante comprendidos entre -3,40E + 38 y 3,40E + 38. Marta Zorrilla 2008-2009 23
  • 24. Tipos de datos en SQL Server 2005 II Tipos de datos en SQL Server 2005 II FECHAS datetime Datos de fecha y hora comprendidos entre el 1 de enero de 1753 y el 31 de diciembre de 9999, con una precisión de 3,33 milisegundos. smalldatetime Datos de fecha y hora comprendidos entre el 1 de enero de 1900 y el 6 de junio de 2079, con una precisión de un minuto. CADENAS DE CARACTERES char Datos de caracteres no Unicode de longitud fija con una longitud máxima de 8.000 caracteres. varchar Datos no Unicode de longitud variable con un máximo de 8.000 caracteres. text Datos no Unicode de longitud variable con una longitud máxima de 2^31 - 1 (2.147.483.647) caracteres. nchar Datos Unicode de longitud variable con una longitud máxima de 4.000 caracteres. nvarchar Datos Unicode de longitud variable con una longitud máxima de 4.000 caracteres. ntext Datos Unicode de longitud variable con una longitud máxima de 2^30 - 1 (1.073.741.823) caracteres. Marta Zorrilla 2008-2009 24
  • 25. Tipos de datos en SQL Server 2005 III Tipos de datos en SQL Server 2005 III BINARIOS binary Datos binarios de longitud fija con una longitud máxima de 8.000 bytes. varbinary Datos binarios de longitud variable con una longitud máxima de 8.000 bytes. image Datos binarios de longitud variable con una longitud máxima de 2^31 - 1 (2.147.483.647) bytes. OTROS TIPOS DE DATOS cursor Una referencia a un cursor. sql_variant Un tipo de datos que almacena valores de varios tipos de datos aceptados en SQL Server, excepto text, ntext, timestamp y sql_variant. table Un tipo de datos especial que se utiliza para almacenar un conjunto de resultados para un proceso posterior. timestamp Un número único para toda la base de datos que se actualiza cada vez que se actualiza una fila. (sinónimo rowversion) uniqueiden Un identificador exclusivo global (GUID), necesario para replicación tifier xml Almacena una instancia de XML Marta Zorrilla 2008-2009 25
  • 26. Tipo de dato Autonumérico: IDENTITY Tipo de dato Autonumérico: IDENTITY IDENTITY [ [(semilla , ,incremento) ] ] IDENTITY (semilla incremento) semilla: valor de inicio. semilla: valor de inicio. incremento: incremento que se aplica incremento: incremento que se aplica CREATE TABLE dbo.herramientas( CREATE TABLE dbo.herramientas( ID INT IDENTITY(1,1) NOT NULL PRIMARY KEY, ID INT IDENTITY(1,1) NOT NULL PRIMARY KEY, Nombre VARCHAR(40) NOT NULL Nombre VARCHAR(40) NOT NULL )) -- insertamos valores -- insertamos valores INSERT INTO dbo.herramientas (Nombre ))VALUES (‘Martillo') INSERT INTO dbo.herramientas (Nombre VALUES (‘Martillo') INSERT INTO dbo.herramientas (Nombre ))VALUES (‘Taladro') INSERT INTO dbo.herramientas (Nombre VALUES (‘Taladro') -- si borramos, Martillo, se pierde el ID 1. Para reutilizarlo -- si borramos, Martillo, se pierde el ID 1. Para reutilizarlo SET IDENTITY_INSERT dbo.Tool ON SET IDENTITY_INSERT dbo.Tool ON INSERT INTO dbo.herramientas (ID, Nombre) VALUES (1, Serrucho') INSERT INTO dbo.herramientas (ID, Nombre) VALUES (1, Serrucho') Marta Zorrilla 2008-2009 26
  • 27. Tipos definidos por el usuario: CREATE TYPE Tipos definidos por el usuario: CREATE TYPE CREATE TYPE [ [nombre_schema. ] ]nombre CREATE TYPE nombre_schema. nombre {{ FROM tipo_base FROM tipo_base [ [((precision [ [, ,escala ] ])) ] ] precision escala [ [NULL | |NOT NULL ] ] NULL NOT NULL | |EXTERNAL NAME assembly_name [ [.class_name ] ] EXTERNAL NAME assembly_name .class_name }}[ [; ;] ] nombre: es el nombre del tipo de dato que se va aacrear. nombre: es el nombre del tipo de dato que se va crear. tipo_base: tipo de dato base en el que se a`poya tipo_base: tipo de dato base en el que se a`poya CREATE TYPE iva CREATE TYPE iva FROM float NOT NULL ; ; FROM float NOT NULL Marta Zorrilla 2008-2009 27
  • 28. CREATE RULE y DEFAULT (no estándar) CREATE RULE y DEFAULT (no estándar) Para crear una regla para ser utilizada en un tipo de dato definido por el usuario en la base de datos. Su sintaxis es: CREATE RULE nombre CREATE RULE nombre AS expresion_condicional AS expresion_condicional nombre: es el nombre de la función que se va aacrear. nombre: es el nombre de la función que se va crear. expresion_condicional: criterio que debe cumplir la regla expresion_condicional: criterio que debe cumplir la regla Para crear un valor por defecto utilizable en un tipo de dato definido por usuario en la base de datos. Su sintaxis es: CREATE DEFAULT nombre CREATE DEFAULT nombre AS expresion_constante AS expresion_constante nombre: es el nombre de la función que se va aacrear. nombre: es el nombre de la función que se va crear. expresion_constante: valor expresion_constante: valor Marta Zorrilla 2008-2009 28
  • 29. CREATE RULE y DEFAULT: ejemplo CREATE RULE y DEFAULT: ejemplo Objetivo crear un tipo de dato definido por el usuario, denominado “iva” CREATE RULE r_porcentaje CREATE RULE r_porcentaje AS @valor>=0 and @valor<=100 AS @valor>=0 and @valor<=100 CREATE DEFAULT d_iva AS 16 CREATE DEFAULT d_iva AS 16 EXEC sp_addtype iva, 'float', 'not null' EXEC sp_addtype iva, 'float', 'not null' go go EXEC sp_bindrule 'r_porcentaje', 'iva' EXEC sp_bindrule 'r_porcentaje', 'iva' go go EXEC sp_bindefault 'd_iva', 'iva' EXEC sp_bindefault 'd_iva', 'iva' Marta Zorrilla 2008-2009 29
  • 30. Manipulación de datos Manipulación de datos SQL Server 2005 SQL Server 2005
  • 31. Instrucciones de Manipulación de Datos (IMD) I Instrucciones de Manipulación de Datos (IMD) I Las IMD permiten actuar sobre los propios datos. Las IMD permiten actuar sobre los propios datos. Las operaciones básicas de manipulación de datos son: insertar, Las operaciones básicas de manipulación de datos son: insertar, modificar, borrar y consultar. modificar, borrar y consultar. Las tres primeras permiten alterar el contenido de la base de datos. Las tres primeras permiten alterar el contenido de la base de datos. La última consiste en localizar datos para su observación. La última consiste en localizar datos para su observación. Principales instrucciones: Principales instrucciones: INSERT INSERT UPDATE UPDATE DELETE DELETE SELECT SELECT Marta Zorrilla 2008-2009 31
  • 32. IMD II :: INSERT IMD II INSERT Permite añadir una o más filas en una tabla. La sintaxis para insertar una sola fila es: INSERT INTO destino [(campo1[, campo2[, ...]])] INSERT INTO destino [(campo1[, campo2[, ...]])] VALUES (valor1[, valor2[, ...]]) VALUES (valor1[, valor2[, ...]]) La sintaxis para insertar varias filas es: INSERT INTO destino [(campo1[, campo2[, ...]])] INSERT INTO destino [(campo1[, campo2[, ...]])] Instrucción_SELECT Instrucción_SELECT destino: es el nombre de la tabla o vista donde se van a añadir filas. campo1, campo2: son los nombres de los campos donde se van a añadir los datos. valor1, valor2: son los valores que tomarán los campos en la nueva fila que se van a insertar. Cada valor se asigna al campo que corresponde a la posición del valor en la lista, así, valor1 se asigna al campo1, valor2 al campo2, y así sucesivamente. Por su frecuencia, cabe mencionar que los valores que se asignen a campos de texto deben escribirse entre comillas simples ('texto'). Instrucción_SELECT: es la instrucción SELECT cuya ejecución proporcionará las filas a insertar. Marta Zorrilla 2008-2009 32
  • 33. IMD III :: UPDATE IMD III UPDATE Permite modificar información existente en una o varias filas de una tabla. Su sintaxis es: UPDATE destino SET campo1=nuevovalor1 [, campo2=nuevovalor2 [, ...]] UPDATE destino SET campo1=nuevovalor1 [, campo2=nuevovalor2 [, ...]] [WHERE condición] [WHERE condición] • destino: es el nombre de la tabla o vista en la que se desea modificar datos. • campo1, campo2: son los nombres de los campos que van a modificar su valor. • nuevovalor1, nuevovalor2: son expresiones que determinan los valores que van a tomar los campos de las filas que se van a actualizar. • condición: es una expresión lógica que determina qué filas se actualizarán. Sólo se actualizarán las filas que satisfagan la expresión. Si no se incluye cláusula WHERE (no hay condición) se modificarán todas las filas de la tabla. Marta Zorrilla 2008-2009 33
  • 34. IMD IV :: DELETE IMD IV DELETE Permite eliminar una o varias filas de una tabla. Su sintaxis es: DELETE FROM destino [WHERE condición] DELETE FROM destino [WHERE condición] • destino: es el nombre de la tabla o vista cuyas filas se van a eliminar. • condición: es una expresión lógica que determina qué filas se borrarán. Sólo se borrarán las filas que satisfagan la expresión. Si no se incluye cláusula WHERE (no hay condición) se borrarán todas las filas de la tabla. Marta Zorrilla 2008-2009 34
  • 35. IMD V :: INSERT, UPDATE, DELETE IMD V INSERT, UPDATE, DELETE Ejemplos Ejemplos Insertar una nueva fila en la tabla Proveedores. INSERT INTO Proveedores (codigpro, cifpro, nombrpro, direcpro, cpostpro, localpro, telefpro, faxpro, INSERT INTO Proveedores (codigpro, cifpro, nombrpro, direcpro, cpostpro, localpro, telefpro, faxpro, procepro) procepro) VALUES ('P005', 'A39144325', 'Angulo Lastra, Antonio', 'Hernán Cortés,18', '39002', 'Santander', '(34) VALUES ('P005', 'A39144325', 'Angulo Lastra, Antonio', 'Hernán Cortés,18', '39002', 'Santander', '(34) 942 202 022', '(34) 942 202 022', 'UE') 942 202 022', '(34) 942 202 022', 'UE') Incorporar el e-mail del proveedor Luis Gil Laso, con valor mailto:gil@unican.es. UPDATE Proveedores SET emailpro='mailto:gil@unican.es' UPDATE Proveedores SET emailpro='mailto:gil@unican.es' WHERE codigpro='P004' WHERE codigpro='P004' Borrar todos los proveedores de Santander. DELETE FROM Proveedores DELETE FROM Proveedores WHERE localpro='Santander' WHERE localpro='Santander' Marta Zorrilla 2008-2009 35
  • 36. Datos Datos Marta Zorrilla 2008-2009 36
  • 37. Importación/Exportación de datos Importación/Exportación de datos Instrucción INSERT / /SELECT Instrucción INSERT SELECT Import/Export data (sólo SQL Server 2005) Import/Export data (sólo SQL Server 2005) Conexión ODBC/OLEDB Conexión ODBC/OLEDB Herramienta Integration Services Herramienta Integration Services ooGráfica, basada en objetos Gráfica, basada en objetos ooOrigen/destino de datos (OLEDB, ODBC) Origen/destino de datos (OLEDB, ODBC) ooTransformaciones más complejas Transformaciones más complejas Marta Zorrilla 2008-2009 37
  • 38. IMD VI :: SELECT IMD VI SELECT Está dedicada a obtener información de la base de datos. El resultado de su ejecución, si existe, siempre tiene estructura de una tabla y los campos de sus filas responden a la lista de selección. Tiene enormes posibilidades, lo que hace que su sintaxis presente muchas variantes. SELECT [ [predicado ] ] Lista_de_selección SELECT predicado Lista_de_selección [INTO tabla_temporal] [INTO tabla_temporal] FROM lista_de_tablas FROM lista_de_tablas [WHERE condición ] ] [WHERE condición [GROUP BY lista_campos_group_by] [GROUP BY lista_campos_group_by] [HAVING condición_group_by] [HAVING condición_group_by] [ORDER BY colum1 { {[ASC] | |DESC } }[,[,colum2 { {[ASC] | |DESC }, .... ] ]] ] [ORDER BY colum1 [ASC] DESC colum2 [ASC] DESC }, .... Marta Zorrilla 2008-2009 38
  • 39. IMD VII :: SELECT IMD VII SELECT predicado: puede tomar uno de los siguientes valores: ALL, DISTINCT o TOP número_de_filas (devuelve el número de registros especificado según una cláusula ORDER BY). Puede utilizar el predicado para limitar el número de registros devueltos. Si no especifica ninguno, el valor predeterminado es ALL. Lista_de_selección: es el conjunto de los elementos que serán aportados como respuesta. Éstos, pueden ser expresiones y funciones separados por comas, aunque generalmente responden a una de las siguientes alternativas: { * | tabla.* | [tabla.]campo1 [AS alias1] [, [tabla.]campo2 [AS alias2] , ...] | funciones} o * especifica que se seleccionan todos los campos de la tabla o tablas a las que se accede. o tabla: es el nombre de la tabla que contiene los campos de la que se van a seleccionar los registros. o campo1, campo2: son los nombres de los campos que contienen los datos que desea recuperar. o alias1, alias2: Los nombres que se van a utilizar como encabezados de columnas en vez de los nombres de columnas originales en tabla. o funciones: funciones definidas por el usuario, anteponer el propietario. tabla_temporal: es el nombre de la tabla que se creará para almacenar los registros obtenidos. lista_de_tablas: representa el nombre de la tabla o las tablas que contienen los datos a los que se desea acceder. condición: es una expresión lógica con los criterios de selección de registros. lista_campos_group_by: son los nombres de los campos que se van a utilizar para agrupar los registros. condición_group_by: son las condiciones que se imponen sobre el criterio de agrupamiento. colum1, colum2: son nombres de elementos de la lista de selección o la posición que ocupan en ella. ASC quiere decir ordenación ascendente (es la opción por defecto) y DESC significa ordenación descendente. Marta Zorrilla 2008-2009 39
  • 40. IMD VIII :: SELECT IMD VIII SELECT Con Operadores Con Pred. BETWEEN... AND... Búsquedas Búsquedas Con Pred. IN (lista_de_valores) Sencillas Sencillas Con Pred. LIKE ‘cadena_caracteres’ Condiciones de Condiciones de Con Pred. NULL Comparación Comparación Simple Búsquedas Condiciones de Condiciones de Múltiple Búsquedas Cualificadas Combinación Combinación Cualificadas Autocombinación Combinación Externa Condiciones de Condiciones de Subsentencia Subsentencia De Comparación Con Predicado IN Con Predicado EXISTS Marta Zorrilla 2008-2009 40
  • 41. IMD IX :: SELECT IMD IX SELECT Funciones de Grupo Funciones de Grupo Funciones de Fecha Funciones de Fecha Agrupamiento de Datos Agrupamiento de Datos Condición de Agrupamiento Condición de Agrupamiento Ordenación del Resultado Ordenación del Resultado Guardar Resultado Guardar Resultado en una Tabla en una Tabla Unión, Intersección y Excepción de Sentencias Unión, Intersección y Excepción de Sentencias Uso de funciones almacenadas Uso de funciones almacenadas Marta Zorrilla 2008-2009 41
  • 42. IMD X :: SELECT IMD X SELECT Búsquedas Sencillas (Ejemplos) Búsquedas Sencillas (Ejemplos) • Obtener el contenido de la tabla Articulos. SELECT ** FROM Articulos SELECT FROM Articulos • Listar el nombre y el teléfono de todos los Proveedores. SELECT nombrpro as Nombre, telefpro as Telf SELECT nombrpro as Nombre, telefpro as Telf FROM Proveedores FROM Proveedores Marta Zorrilla 2008-2009 42
  • 43. IMD XI :: SELECT IMD XI SELECT Búsquedas Cualificadas. Cond. de Comparación 1 Búsquedas Cualificadas. Cond. de Comparación 1 (Ejemplos) (Ejemplos) Las condiciones de comparación son expresiones lógicas que permiten comparar una columna o expresión con otra columna, expresión o lista de columnas. Pueden adoptar una de las formas siguientes: exp operador_de_comparación exp exp operador_de_comparación exp exp [NOT] BETWEEN exp AND exp exp [NOT] BETWEEN exp AND exp exp [NOT] IN (lista de valores) exp [NOT] IN (lista de valores) campo [NOT] LIKE 'cadena_de_caracteres' campo [NOT] LIKE 'cadena_de_caracteres' campo IS [NOT] NULL campo IS [NOT] NULL • Encontrar los artículos cuyo precio unitario sea superior a 180 € y su stock sea inferior o igual a 100. SELECT ** FROM Articulos SELECT FROM Articulos WHERE preunart > 180 AND stockart <= 100 WHERE preunart > 180 AND stockart <= 100 Marta Zorrilla 2008-2009 43
  • 44. IMD XII :: SELECT IMD XII SELECT Búsquedas Cualificadas. Cond. de Comparación 2 Búsquedas Cualificadas. Cond. de Comparación 2 (Ejemplos) (Ejemplos) • Listar los artículos cuyo precio unitario esté comprendido entre 180 € y 300 €. SELECT ** FROM Articulos SELECT FROM Articulos WHERE preunart BETWEEN 180 AND 300 WHERE preunart BETWEEN 180 AND 300 • Hallar todos los proveedores de las ciudades de Santander, Madrid y Barcelona. SELECT codigpro, nombrpro, direcpro, cpostpro, localpro FROM Proveedores SELECT codigpro, nombrpro, direcpro, cpostpro, localpro FROM Proveedores WHERE localpro IN ('Santander', 'Madrid', 'Barcelona') WHERE localpro IN ('Santander', 'Madrid', 'Barcelona') Marta Zorrilla 2008-2009 44
  • 45. IMD XIII :: SELECT IMD XIII SELECT Búsquedas Cualificadas. Cond. de Comparación 3 Búsquedas Cualificadas. Cond. de Comparación 3 (Ejemplos) (Ejemplos) • Encontrar todos los proveedores cuyo primer apellido comience por una letra comprendida entre la A y la J. SELECT codigpro, nombrpro, direcpro, cpostpro, localpro FROM Proveedores SELECT codigpro, nombrpro, direcpro, cpostpro, localpro FROM Proveedores WHERE nombrpro LIKE '[A-J]%' WHERE nombrpro LIKE '[A-J]%' • Hallar todos los proveedores de los que no se tenga información sobre su correo electrónico. SELECT codigpro, nombrpro, direcpro, cpostpro, localpro, telefpro SELECT codigpro, nombrpro, direcpro, cpostpro, localpro, telefpro FROM Proveedores FROM Proveedores WHERE emailpro IS NULL WHERE emailpro IS NULL Marta Zorrilla 2008-2009 45
  • 46. IMD XIV :: SELECT IMD XIV SELECT Búsquedas Cualificadas. Cond. de Combinación Búsquedas Cualificadas. Cond. de Combinación Combinación Simple (Ejemplo) Combinación Simple (Ejemplo) Las búsquedas cualificadas son las que afectan a datos de más de una tabla. Una Combinación Simple es aquella en la que la condición de la cláusula Una Combinación Simple es aquella en la que la condición de la cláusula FROM (o WHERE) contiene una comparación de igualdad entre campos FROM (o WHERE) contiene una comparación de igualdad entre campos pertenecientes a dos tablas distintas. pertenecientes a dos tablas distintas. • Listar todos los proveedores a los que se ha efectuado algún pedido entre el 20/1/2006 y el 15/9/2006. SELECT DISTINCT Proveedores.codigpro, nombrpro, direcpro, localpro SELECT DISTINCT Proveedores.codigpro, nombrpro, direcpro, localpro FROM Proveedores INNER JOIN Pedidos FROM Proveedores INNER JOIN Pedidos ON Proveedores.codigpro = Pedidos.codigpro ON Proveedores.codigpro = Pedidos.codigpro WHERE fechaped BETWEEN '2006/01/20' AND '2006/09/15' WHERE fechaped BETWEEN '2006/01/20' AND '2006/09/15' Marta Zorrilla 2008-2009 46
  • 47. IMD XIV :: SELECT IMD XIV SELECT Búsquedas Cualificadas. Cond. de Combinación Búsquedas Cualificadas. Cond. de Combinación Combinación Simple (Ejemplo. Continuación) Combinación Simple (Ejemplo. Continuación) SELECT DISTINCT Proveedores.codigpro, nombrpro, direcpro, localpro SELECT DISTINCT Proveedores.codigpro, nombrpro, direcpro, localpro FROM Proveedores INNER JOIN Pedidos FROM Proveedores INNER JOIN Pedidos ON Proveedores.codigpro = Pedidos.codigpro ON Proveedores.codigpro = Pedidos.codigpro WHERE fechaped BETWEEN '2006/01/20' AND '2006/09/15' WHERE fechaped BETWEEN '2006/01/20' AND '2006/09/15' Información de proceso Marta Zorrilla 2008-2009 47
  • 48. IMD XV :: SELECT IMD XV SELECT Búsquedas Cualificadas. Cond. de Combinación Búsquedas Cualificadas. Cond. de Combinación Combinación Múltiple (Ejemplo) Combinación Múltiple (Ejemplo) Una Combinación Múltiple es aquella Una Combinación Múltiple es aquella combinación que relaciona varios combinación que relaciona varios campos de más de dos tablas. campos de más de dos tablas. • Encontrar todos los artículos que han sido pedidos entre el 15/5/2006 y el 30/5/2006. SELECT DISTINCT Articulos.codigart, descrart SELECT DISTINCT Articulos.codigart, descrart FROM Pedidos INNER JOIN FROM Pedidos INNER JOIN (Lineas INNER JOIN Articulos ON Lineas.codigart = Articulos.codigart) (Lineas INNER JOIN Articulos ON Lineas.codigart = Articulos.codigart) ON Pedidos.numped = Lineas.numped ON Pedidos.numped = Lineas.numped WHERE fechaped BETWEEN '2006/05/15' AND '2006/05/30' WHERE fechaped BETWEEN '2006/05/15' AND '2006/05/30' Marta Zorrilla 2008-2009 48
  • 49. IMD XVI :: SELECT IMD XVI SELECT Búsquedas Cualificadas. Cond. de Combinación Búsquedas Cualificadas. Cond. de Combinación Autocombinación (Ejemplo) Autocombinación (Ejemplo) Una Autocombinación es una combinación de una tabla con ella misma. Una Autocombinación es una combinación de una tabla con ella misma. • Localizar todos los pedidos que tienen varias líneas del mismo artículo. SELECT x.numped, x.numlin, x.codigart SELECT x.numped, x.numlin, x.codigart FROM Lineas x, Lineas yy FROM Lineas x, Lineas WHERE x.numped = y.numped AND x.numlin <> y.numlin WHERE x.numped = y.numped AND x.numlin <> y.numlin AND x.codigart = y.codigart AND x.codigart = y.codigart Marta Zorrilla 2008-2009 49
  • 50. IMD XVI :: SELECT IMD XVI SELECT Búsquedas Cualificadas. Cond. de Combinación Búsquedas Cualificadas. Cond. de Combinación Autocombinación (Ejemplo) Autocombinación (Ejemplo) • Localizar todos los pedidos que tienen varias líneas del mismo artículo. SELECT x.numped, x.numlin, x.codigart SELECT x.numped, x.numlin, x.codigart FROM Lineas x, Lineas yy FROM Lineas x, Lineas WHERE x.numped = y.numped AND x.numlin <> y.numlin WHERE x.numped = y.numped AND x.numlin <> y.numlin AND x.codigart = y.codigart AND x.codigart = y.codigart Acceso X Acceso Y Información Acceso X Acceso Y de proceso Acceso X Acceso Y Marta Zorrilla 2008-2009 50
  • 51. IMD XVII :: SELECT IMD XVII SELECT Búsquedas Cualificadas. Cond. de Combinación Búsquedas Cualificadas. Cond. de Combinación Combinación Externa (Ejemplo) Combinación Externa (Ejemplo) Una Combinación Externa es aquella que da preferencia a una tabla Una Combinación Externa es aquella que da preferencia a una tabla con respecto a otra. Así, las filas de la tabla dominante serán con respecto a otra. Así, las filas de la tabla dominante serán seleccionadas aunque la condición de enlace no se haya verificado. seleccionadas aunque la condición de enlace no se haya verificado. • Listar todos los proveedores indicando, en su caso, los que han recibido algún pedido. SELECT Proveedores.codigpro, nombrpro, Pedidos.numped Preferencia a la SELECT Proveedores.codigpro, nombrpro, Pedidos.numped tabla de la izquierda FROM Proveedores LEFT JOIN Pedidos FROM Proveedores LEFT JOIN Pedidos ON Proveedores.codigpro = Pedidos.codigpro ON Proveedores.codigpro = Pedidos.codigpro SELECT Proveedores.codigpro, nombrpro, Pedidos.numped SELECT Proveedores.codigpro, nombrpro, Pedidos.numped FROM Pedidos RIGHT JOIN Proveedores Preferencia a la FROM Pedidos RIGHT JOIN Proveedores tabla de la derecha ON Proveedores.codigpro = Pedidos.codigpro ON Proveedores.codigpro = Pedidos.codigpro Marta Zorrilla 2008-2009 51
  • 52. IMD XVII :: SELECT IMD XVII SELECT Búsquedas Cualificadas. Cond. de Combinación Búsquedas Cualificadas. Cond. de Combinación Combinación Externa (Ejemplo 2) Combinación Externa (Ejemplo 2) En el FROM de una Consulta pueden establecerse predicados. Estos se aplican En el FROM de una Consulta pueden establecerse predicados. Estos se aplican antes de ejecutar el join, mientras que cuando se establecen en el WHERE se antes de ejecutar el join, mientras que cuando se establecen en el WHERE se ejecutan al resultado del join. ejecutan al resultado del join. El resultado puede ser distinto si la condición de join es LEFT o RIGHT. El resultado puede ser distinto si la condición de join es LEFT o RIGHT. • Listar todos los proveedores de Santander indicando, en su caso, los que han recibido algún pedido. SELECT Proveedores.codigpro, nombrpro, Pedidos.numped SELECT Proveedores.codigpro, nombrpro, Pedidos.numped FROM Pedidos LEFT JOIN Proveedores FROM Pedidos LEFT JOIN Proveedores ON Proveedores.codigpro = Pedidos.codigpro ON Proveedores.codigpro = Pedidos.codigpro AND Localpro='SANTANDER' AND Localpro='SANTANDER' SELECT Proveedores.codigpro, nombrpro, Pedidos.numped SELECT Proveedores.codigpro, nombrpro, Pedidos.numped FROM Pedidos LEFT JOIN Proveedores FROM Pedidos LEFT JOIN Proveedores ON Proveedores.codigpro = Pedidos.codigpro ON Proveedores.codigpro = Pedidos.codigpro WHERE Localpro=‘SANTANDER’ WHERE Localpro=‘SANTANDER’ Marta Zorrilla 2008-2009 52
  • 53. IMD XVIII :: SELECT IMD XVIII SELECT Búsquedas Cualificadas. Cond. de Subsentencias Búsquedas Cualificadas. Cond. de Subsentencias (Ejemplo de comparación) (Ejemplo de comparación) La instrucción SELECT permite contrastar una expresión ooun campo con el resultado La instrucción SELECT permite contrastar una expresión un campo con el resultado de otra instrucción (subsentencia) SELECT. A este contraste se le llama condición de de otra instrucción (subsentencia) SELECT. A este contraste se le llama condición de subsentencia yylas dos instrucciones se llaman instrucciones imbricadas. A su vez, la subsentencia las dos instrucciones se llaman instrucciones imbricadas. A su vez, la subsentencia puede incluir en su condición aaotra subsentencia yyasí sucesivamente. subsentencia puede incluir en su condición otra subsentencia así sucesivamente. Las condiciones de subsentencia pueden adoptar una de las formas siguientes: Las condiciones de subsentencia pueden adoptar una de las formas siguientes: exp operador_de_comparación {ALL | |[ANY | |SOME] }} (instrucción SELECT) exp operador_de_comparación {ALL [ANY SOME] (instrucción SELECT) exp [NOT] IN (instrucción SELECT) exp [NOT] IN (instrucción SELECT) campo [NOT] EXISTS (instrucción SELECT) campo [NOT] EXISTS (instrucción SELECT) • Encontrar los artículos cuyo stock es mayor que toda cantidad pedida del mismo artículo. SELECT articulos.codigart, descrart, stockart FROM Articulos SELECT articulos.codigart, descrart, stockart FROM Articulos WHERE stockart > ALL (SELECT unilin FROM Lineas WHERE stockart > ALL (SELECT unilin FROM Lineas WHERE Articulos.codigart = Lineas.codigart) WHERE Articulos.codigart = Lineas.codigart) Marta Zorrilla 2008-2009 53
  • 54. IMD XIX :: SELECT IMD XIX SELECT Búsquedas Cualificadas. Cond. de Subsentencias. • Listar los artículos que no han sido pedidos Búsquedas Cualificadas. Cond. de Subsentencias. (Ejemplos con predicados IN y EXIST) (Ejemplos con predicados IN y EXIST) entre el 24 de Septiembre y el 21 de Noviembre de 2006. SELECT DISTINCT Articulos.codigart, descrart FROM Articulos SELECT DISTINCT Articulos.codigart, descrart FROM Articulos WHERE Articulos.codigart NOT IN (SELECT Lineas.codigart FROM Lineas, Pedidos WHERE Articulos.codigart NOT IN (SELECT Lineas.codigart FROM Lineas, Pedidos WHERE Pedidos.numped = Lineas.numped WHERE Pedidos.numped = Lineas.numped AND Pedidos.fechaped AND Pedidos.fechaped BETWEEN '2006/09/24' AND '2006/11/21') BETWEEN '2006/09/24' AND '2006/11/21') • Encontrar los proveedores de Madrid a los que se les ha realizado algún pedido entre el 24/09/2006 y el 21/11/2006 . SELECT DISTINCT Proveedores.codigpro, nombrpro FROM Proveedores SELECT DISTINCT Proveedores.codigpro, nombrpro FROM Proveedores WHERE EXISTS ((SELECT ** FROM Pedidos WHERE EXISTS SELECT FROM Pedidos WHERE Proveedores.codigpro = Pedidos.codigpro WHERE Proveedores.codigpro = Pedidos.codigpro AND fechaped BETWEEN '2006/09/24' AND '2006/11/21') AND fechaped BETWEEN '2006/09/24' AND '2006/11/21') AND localpro = 'Madrid‘ AND localpro = 'Madrid‘ Marta Zorrilla 2008-2009 54
  • 55. IMD XX :: SELECT IMD XX SELECT Funciones de grupo (Ejemplo) Funciones de grupo (Ejemplo) COUNT(*) COUNT(*) Nº de filas que componen Nº de filas que componen el grupo. el grupo. Con las filas de la información de Con las filas de la información de COUNT(campo) COUNT(campo) Nº de filas con valor Nº de filas con valor proceso correspondiente a una asignado al campo (nulos asignado al campo (nulos proceso correspondiente a una instrucción SELECT se pueden no cuentan). no cuentan). instrucción SELECT se pueden establecer grupos. SUM(exp) Suma de valores obtenidos Suma de valores obtenidos establecer grupos. SUM(exp) con la expresión en cada con la expresión en cada En cada uno de estos grupos, En cada uno de estos grupos, fila. fila. mediante las funciones de grupo, se mediante las funciones de grupo, se AVG(exp) Media. AVG(exp) Media. pueden efectuar ciertos cálculos. pueden efectuar ciertos cálculos. MAX(exp) MAX(exp) Máximo. Máximo. • Encontrar cuántos artículos hay MIN(exp) MIN(exp) Mínimo. Mínimo. registrados, el máximo y el mínimo STDEV(exp) STDEV(exp) Desviación típica. Desviación típica. precio unitario, el precio unitario VAR(exp) VAR(exp) Varianza. Varianza. medio y la valoración del almacén. SELECT COUNT(codigart) AS Cantidad, MAX(preunart) AS Max, SELECT COUNT(codigart) AS Cantidad, MAX(preunart) AS Max, MIN(preunart) AS Min, AVG(preunart) AS Precio_medio, MIN(preunart) AS Min, AVG(preunart) AS Precio_medio, SUM(preunart*stockart) AS Valoración SUM(preunart*stockart) AS Valoración FROM Articulos FROM Articulos Marta Zorrilla 2008-2009 55
  • 56. IMD XXI :: SELECT IMD XXI SELECT Funciones de fecha (Ejemplo) Funciones de fecha (Ejemplo) DAY(fecha) DAY(fecha) Devuelve el día de mes de Devuelve el día de mes de fecha. fecha. Los datos de tipo fecha son Los datos de tipo fecha son MONTH (fecha) MONTH (fecha) Devuelve el mes de fecha. Devuelve el mes de fecha. almacenados como una unidad de almacenados como una unidad de YEAR (fecha) YEAR (fecha) Devuelve el año de fecha. Devuelve el año de fecha. información. Cuando se necesita información. Cuando se necesita trabajar con componentes de una DATEPART(dw,fecha) Devuelve el día de la DATEPART(dw,fecha) Devuelve el día de la trabajar con componentes de una semana fecha, es preciso utilizar funciones fecha, es preciso utilizar funciones semana correspondiente correspondiente aa fecha (el 11 domingo, fecha (el domingo, de fecha. de fecha. el 22 lunes, ...). el lunes, ...). • Listar día, mes y año de cada pedido, así como el día de la semana al que corresponden sus fechas. SELECT numped, fechaped, SELECT numped, fechaped, DAY(fechaped) as dia_mes, MONTH(fechaped) as mes, DAY(fechaped) as dia_mes, MONTH(fechaped) as mes, YEAR(fechaped) as año, DATEPART(dw,fechaped) as dia_sem YEAR(fechaped) as año, DATEPART(dw,fechaped) as dia_sem FROM Pedidos FROM Pedidos Marta Zorrilla 2008-2009 56
  • 57. IMD XXII :: SELECT IMD XXII SELECT Agrupamiento de datos (Ejemplo) Agrupamiento de datos (Ejemplo) La cláusula GROUP permite formar grupos con las filas de datos que La cláusula GROUP permite formar grupos con las filas de datos que tengan valores iguales para determinados campos. tengan valores iguales para determinados campos. La respuesta tiene tantas filas como grupos haya establecido la La respuesta tiene tantas filas como grupos haya establecido la instrucción. instrucción. • Obtener el importe de cada pedido sin aplicar el IVA. SELECT numped, SUM((preunlin*unilin)*(1-desculin/100)) as Importe SELECT numped, SUM((preunlin*unilin)*(1-desculin/100)) as Importe FROM Lineas FROM Lineas GROUP BY numped GROUP BY numped Marta Zorrilla 2008-2009 57
  • 58. IMD XXIII :: SELECT IMD XXIII SELECT Agrupamiento de Datos. Cond. de agrupamiento Agrupamiento de Datos. Cond. de agrupamiento (Ejemplo) (Ejemplo) • Listar el importe, sin aplicar el IVA, de los pedidos que tienen más de una línea. SELECT numped, SUM((preunlin*unilin)*(1-desculin/100)) as Importe SELECT numped, SUM((preunlin*unilin)*(1-desculin/100)) as Importe FROM Lineas FROM Lineas GROUP BY numped GROUP BY numped HAVING COUNT(*))> 1 HAVING COUNT(* > 1 Marta Zorrilla 2008-2009 58
  • 59. IMD XXII :: SELECT IMD XXII SELECT Agrupamiento de datos WITH CUBE (Ejemplo) Agrupamiento de datos WITH CUBE (Ejemplo) El operador CUBE mantiene los grupos formados por GROUP BY yy El operador CUBE mantiene los grupos formados por GROUP BY además añade los superagregados para cada columna. además añade los superagregados para cada columna. • Obtener el nº de unidades pedidas de cada artículo por pedido, el nº total de uds pedidas por artículo y el nº de unidades pedidas por pedido . SELECT descrart, numped, sum(unilin) as unidadesPedidas SELECT descrart, numped, sum(unilin) as unidadesPedidas FROM articulos inner join lineas on articulos.codigart=lineas.codigart FROM articulos inner join lineas on articulos.codigart=lineas.codigart GROUP BY descrart, numped GROUP BY descrart, numped WITH CUBE ; ; WITH CUBE Marta Zorrilla 2008-2009 59
  • 60. IMD XXII :: SELECT IMD XXII SELECT Agrupamiento de datos WITH ROLLUP (Ejemplo) Agrupamiento de datos WITH ROLLUP (Ejemplo) El operador ROLLUP mantiene los grupos formados por GROUP BY yy El operador ROLLUP mantiene los grupos formados por GROUP BY además añade los superagregados de la primera columna del group by. además añade los superagregados de la primera columna del group by. • Obtener el nº de unidades pedidas de cada artículo por pedido y el nº total de uds pedidas por artículo. SELECT descrart, numped, sum(unilin) as unidadesPedidas SELECT descrart, numped, sum(unilin) as unidadesPedidas FROM articulos inner join lineas on articulos.codigart=lineas.codigart FROM articulos inner join lineas on articulos.codigart=lineas.codigart GROUP BY descrart, numped GROUP BY descrart, numped WITH ROLLUP ; ; WITH ROLLUP Marta Zorrilla 2008-2009 60
  • 61. IMD XXIV :: SELECT IMD XXIV SELECT Funciones de clasificación (Ejemplo) Funciones de clasificación (Ejemplo) ROW_NUMBER() OVER (<partición><orden>) ROW_NUMBER() OVER (<partición><orden>) nº secuencial de un fila de una partición de un nº secuencial de un fila de una partición de un Permiten establecer un valor de Permiten establecer un valor de cjto de resultados. cjto de resultados. categoría para cada fila devuelta de categoría para cada fila devuelta de RANK() OVER (<partición><orden>) RANK() OVER (<partición><orden>) una partición. una partición. rango de la fila en la partición de un cjto de rango de la fila en la partición de un cjto de resultados. resultados. DENSE_RANK() OVER (<partición><orden>) DENSE_RANK() OVER (<partición><orden>) • Clasifica los pedidos por el número rango de la fila en la partición de un cjto de de líneas de pedido que tienen. rango de la fila en la partición de un cjto de resultados sin espacio en la clasificación. resultados sin espacio en la clasificación. NTILE(nº entero) OVER (<partición><orden>) NTILE(nº entero) OVER (<partición><orden>) Distribuye las filas en los grupos especificados Distribuye las filas en los grupos especificados por nº entero. por nº entero. SELECT numped, numlineas, SELECT numped, numlineas, row_number() over (order by numlineas) AS num_fila, row_number() over (order by numlineas) AS num_fila, rank () over (order by numlineas) AS ranking, rank () over (order by numlineas) AS ranking, dense_rank() over (order by numlineas) AS dense_ranking, dense_rank() over (order by numlineas) AS dense_ranking, ntile(4) over (order by numlineas) as quartil ntile(4) over (order by numlineas) as quartil FROM (SELECT numped, count(*) numlineas from lineas group by numped) as resultado FROM (SELECT numped, count(*) numlineas from lineas group by numped) as resultado Marta Zorrilla 2008-2009 61
  • 62. IMD XXV :: SELECT IMD XXV SELECT Ordenación del Resultado (Ejemplo) Ordenación del Resultado (Ejemplo) [ORDER BY colum1 {{[ASC] | |DESC }}[, colum2 {{[ASC] | |DESC }, .... ] ]] ] [ORDER BY colum1 [ASC] DESC [, colum2 [ASC] DESC }, .... colum1, colum2, ...: son nombres de elementos (campos, expresiones colum1, colum2, ...: son nombres de elementos (campos, expresiones o funciones) de la lista de selección o la posición que ocupan en ella. o funciones) de la lista de selección o la posición que ocupan en ella. ASC: quiere decir ordenación ascendente (opción por defecto) yyDESC ASC: quiere decir ordenación ascendente (opción por defecto) DESC descendente. descendente. • Listar los valores de los campos que componen el índice de unicidad de la tabla Lineas (numped, numlin), por orden decreciente de nº de pedido y de nº de línea. SELECT numped, numlin SELECT numped, numlin FROM Lineas FROM Lineas ORDER BY 1 DESC, 2 DESC ORDER BY 1 DESC, 2 DESC Marta Zorrilla 2008-2009 62
  • 63. IMD XXVI :: SELECT IMD XXVI SELECT Guardar Resultado en una Tabla (Ejemplo) Guardar Resultado en una Tabla (Ejemplo) INTO tabla_adicional INTO tabla_adicional tabla_adicional: es el nombre de la tabla a generar, que ha de ser tabla_adicional: es el nombre de la tabla a generar, que ha de ser único. Esta tabla hereda el esquema de la lista de selección (nombres único. Esta tabla hereda el esquema de la lista de selección (nombres campos, tipos de datos, ...). campos, tipos de datos, ...). • Crear una tabla temporal, llamada t1, para guardar el importe, sin aplicar el IVA, de los pedidos que tienen más de una línea. SELECT numped, SUM((preunlin*unilin)*(1-desculin/100)) as Importe SELECT numped, SUM((preunlin*unilin)*(1-desculin/100)) as Importe INTO #t1 INTO #t1 FROM Lineas FROM Lineas GROUP BY numped GROUP BY numped HAVING COUNT(*) > 1 HAVING COUNT(*) > 1 Marta Zorrilla 2008-2009 63
  • 64. IMD XXVII :: SELECT IMD XXVII SELECT Unión de Sentencias (Ejemplo) Unión de Sentencias (Ejemplo) Permite combinar los resultados de dos o más consultas. Para ello se Permite combinar los resultados de dos o más consultas. Para ello se requiere el operador UNION [ALL]. requiere el operador UNION [ALL]. • Listar todos los proveedores de las tablas Proveedores y Proveedores_Anulados ordenados por su código. SELECT codigpro, nombrpro, localpro SELECT codigpro, nombrpro, localpro FROM Proveedores FROM Proveedores UNION UNION SELECT codigp, nombrp, localp SELECT codigp, nombrp, localp FROM Proveedores_Anulados FROM Proveedores_Anulados ORDER BY 1 ORDER BY 1 Marta Zorrilla 2008-2009 64
  • 65. IMD XXVIII: SELECT IMD XXVIII: SELECT EXCEPT e INTERSECT de Sentencias (Ejemplo) EXCEPT e INTERSECT de Sentencias (Ejemplo) EXCEPT Devuelve los valores distintos de la primera consulta que no EXCEPT Devuelve los valores distintos de la primera consulta que no son devueltos por la segunda consulta. son devueltos por la segunda consulta. INTERSECT Devuelve los distintos valores que son devueltos por INTERSECT Devuelve los distintos valores que son devueltos por ambas consultas. ambas consultas. • Listar los clientes exceptuando aquellos que son también Proveedores. SELECT codigcli, nombrcli, localcli SELECT codigcli, nombrcli, localcli FROM clientes FROM clientes EXCEPT EXCEPT SELECT codigpro, nombrpro, localpro SELECT codigpro, nombrpro, localpro FROM Proveedores FROM Proveedores Marta Zorrilla 2008-2009 65
  • 66. IMD XXIX :: SELECT IMD XXIX SELECT Uso de funciones (Ejemplo) Uso de funciones (Ejemplo) • Obtener el precio y la descripción de los artículos haciendo uso de la función dame_precio_articulos(@codigo_art). SELECT codigart as Codigo, descrart as Descripcion, SELECT codigart as Codigo, descrart as Descripcion, dbo.dame_precio_articulo(codigart) as Precio dbo.dame_precio_articulo(codigart) as Precio FROM ARTICULOS FROM ARTICULOS • Obtener los artículos haciendo uso de la función dame_precio_articulos cuyo precio sea superior a 190 € SELECT codigart as Codigo, descrart as Descripcion, preunart as Precio SELECT codigart as Codigo, descrart as Descripcion, preunart as Precio FROM ARTICULOS FROM ARTICULOS WHERE dbo.dame_precio_articulo(codigart) > 190 WHERE dbo.dame_precio_articulo(codigart) > 190 Marta Zorrilla 2008-2009 66
  • 67. IMD XXX: INSERT con SELECT IMD XXX: INSERT con SELECT • Incorporar a la tabla proveedores, los procedentes de la tabla temporal prov_tmp. Se considera que esta tabla tiene la misma estructura que la tabla proveedores. INSERT INTO proveedores INSERT INTO proveedores SELECT codigpro, cifpro, nombrpro, direcpro, cpostpro, localpro, SELECT codigpro, cifpro, nombrpro, direcpro, cpostpro, localpro, telefpro, faxpro, procepro telefpro, faxpro, procepro FROM prov_tmp FROM prov_tmp Marta Zorrilla 2008-2009 67
  • 68. IMD XXXI: UPDATE, DELETE con SELECT IMD XXXI: UPDATE, DELETE con SELECT • Actualizar los precios en un 2% de los artículos del grupo Bebidas. UPDATE articulo UPDATE articulo SET preunart = preunart **1.02 SET preunart = preunart 1.02 WHERE tipo_id IN WHERE tipo_id IN (SELECT tipo_id (SELECT tipo_id FROM TipoArticulo FROM TipoArticulo WHERE tipo_nombre = 'Bebidas') WHERE tipo_nombre = 'Bebidas') • Borrar los pedidos de los proveedores no comunitarios DELETE FROM pedidos DELETE FROM pedidos FROM pedidos INNER JOIN FROM pedidos INNER JOIN proveedores ON proveedores.codigpro = pedidos.codigpro proveedores ON proveedores.codigpro = pedidos.codigpro WHERE procepro = 'No UE' WHERE procepro = 'No UE' Marta Zorrilla 2008-2009 68
  • 69. IMD XXXII: SELECT, UPDATE con CASE IMD XXXII: SELECT, UPDATE con CASE • Listar los artículos mostrando su precio categorizado por alto, bajo y no establecido. SELECT ‘precio' = SELECT ‘precio' = CASE CASE WHEN preunart IS NULL THEN ‘No establecido' WHEN preunart IS NULL THEN ‘No establecido' WHEN preunart < 200 THEN ‘Bajo‘ WHEN preunart < 200 THEN ‘Bajo‘ ELSE ‘Alto' ELSE ‘Alto' END, END, descrart descrart FROM articulos FROM articulos • Actualizar los artículos con precio < 10 con 5% y los > =10 con un 7% UPDATE articulos SET preunart= UPDATE articulos SET preunart= CASE CASE WHEN preunart <10 THEN preunart*1.05 WHEN preunart <10 THEN preunart*1.05 ELSE preunart*1.07 ELSE preunart*1.07 END END Marta Zorrilla 2008-2009 69
  • 70. IMD XXXIII :: WITH (Ejemplo 1) IMD XXXIII WITH (Ejemplo 1) WITH vista temporal en la que apoyarse para realizar otro SELECT WITH vista temporal en la que apoyarse para realizar otro SELECT • Listar los pedidos cuyo monto es superior a la media WITH total_pedidos (numped, valor) as WITH total_pedidos (numped, valor) as ((SELECT numped, sum(unilin*preunlin) from lineas SELECT numped, sum(unilin*preunlin) from lineas group by numped group by numped )) SELECT numped, valor SELECT numped, valor from total_pedidos from total_pedidos where total_pedidos.valor>= where total_pedidos.valor>= ((select avg(lineas.unilin*lineas.preunlin) from lineas) select avg(lineas.unilin*lineas.preunlin) from lineas) Marta Zorrilla 2008-2009 70
  • 71. IMD XXXIII :: WITH (Ejemplo 2) IMD XXXIII WITH (Ejemplo 2) • Listar los pedidos que se encuentran en la posición 50 a 60 según el orden de fecha de pedido. WITH pedidosOrdenados AS WITH pedidosOrdenados AS (SELECT numped, fechaped, (SELECT numped, fechaped, ROW_NUMBER() OVER (order by fechaped) as RowNumber ROW_NUMBER() OVER (order by fechaped) as RowNumber FROM pedidos) FROM pedidos) SELECT ** SELECT FROM pedidosOrdenados FROM pedidosOrdenados WHERE RowNumber between 50 and 60; WHERE RowNumber between 50 and 60; Marta Zorrilla 2008-2009 71
  • 72. IMD XXXIII :: WITH (Ejemplo con recursividad) IMD XXXIII WITH (Ejemplo con recursividad) • Listar los jefes con las personas a su cargo, indicando el nivel jerárquico WITH JefeAQuienReportas(supervisor, dni, nivel) AS WITH JefeAQuienReportas(supervisor, dni, nivel) AS (( SELECT supervisor, dni, 0 AS nivel SELECT supervisor, dni, 0 AS nivel FROM empleados empleados(dni,…,supervisor, dep) FROM empleados WHERE supervisor IS NULL WHERE supervisor IS NULL UNION ALL UNION ALL SELECT e.supervisor, e.dni, nivel + 1 SELECT e.supervisor, e.dni, nivel + 1 FROM empleados e FROM empleados e INNER JOIN JefeAQuienReportas d INNER JOIN JefeAQuienReportas d ON e.supervisor = d.dni ON e.supervisor = d.dni )) SELECT supervisor, dni, nivel SELECT supervisor, dni, nivel FROM JefeAQuienReportas ; ; FROM JefeAQuienReportas Marta Zorrilla 2008-2009 72
  • 73. Lenguaje de definición de Lenguaje de definición de datos datos SQL Server 2005 SQL Server 2005 (Parte 2) (Parte 2)
  • 74. CREATE VIEW CREATE VIEW Para crear una vista en la base de datos. Su sintaxis es: CREATE VIEW [ [< nombreBD > . .] ][ [< propietario > . .] ]nombre [ [((campo [ [,...n ] ]))] ] CREATE VIEW < nombreBD > < propietario > nombre campo ,...n [ [WITH <view_attribute> [ [,...n ] ]] ] WITH <view_attribute> ,...n ASAS Instrucción_Select Instrucción_Select [ [WITH CHECK OPTION ] ] WITH CHECK OPTION nombreBD: es el nombre de la base de datos en la que se crea. nombreBD: es el nombre de la base de datos en la que se crea. propietario: cuenta de usuario que crea la vista propietario: cuenta de usuario que crea la vista nombre: es el nombre de la vista que se va aacrear. nombre: es el nombre de la vista que se va crear. campo: es el nombre que se va aautilizar para una columna en una vista. campo: es el nombre que se va utilizar para una columna en una vista. instrucción_Select: consulta aatravés de la cuál se define la vista instrucción_Select: consulta través de la cuál se define la vista view_attribute: toma uno de los siguientes valores view_attribute: toma uno de los siguientes valores [ [ENCRYPTION ]:]:evita que la vista se publique como parte de la réplica de SQL Server ENCRYPTION evita que la vista se publique como parte de la réplica de SQL Server [ [SCHEMABINDING ]:]:enlaza la vista al esquema de las tablas subyacentes. Cuando se especifica, las tablas base SCHEMABINDING enlaza la vista al esquema de las tablas subyacentes. Cuando se especifica, las tablas base no se pueden modificar de una forma que afecte aala definición de la vista. no se pueden modificar de una forma que afecte la definición de la vista. [ [VIEW_METADATA ]:]:Especifica que la instancia de SQL Server devolverá aalas API de DB-Library, ODBC yy VIEW_METADATA Especifica que la instancia de SQL Server devolverá las API de DB-Library, ODBC OLE DB la información de metadatos sobre la vista en vez de las tablas base. OLE DB la información de metadatos sobre la vista en vez de las tablas base. [ [WITH CHECK OPTION ] ]: :Exige que todas las instrucciones de modificación de datos ejecutadas contra la WITH CHECK OPTION Exige que todas las instrucciones de modificación de datos ejecutadas contra la vista se adhieran aalos criterios establecidos en la instrucción Select. vista se adhieran los criterios establecidos en la instrucción Select. Marta Zorrilla 2008-2009 74
  • 75. CREATE VIEW .. Ejemplo CREATE VIEW Ejemplo CREATE VIEW dbo.EncabezadoPedido CREATE VIEW dbo.EncabezadoPedido AS AS SELECT dbo.Pedidos.numped, dbo.Pedidos.fechaped, dbo.Pedidos.codigpro, SELECT dbo.Pedidos.numped, dbo.Pedidos.fechaped, dbo.Pedidos.codigpro, dbo.Pedidos.ivaped, dbo.Pedidos.fentrped, dbo.Proveedores.nombrpro, dbo.Pedidos.ivaped, dbo.Pedidos.fentrped, dbo.Proveedores.nombrpro, dbo.Proveedores.direcpro, dbo.Proveedores.cpostpro, dbo.Proveedores.localpro, dbo.Proveedores.direcpro, dbo.Proveedores.cpostpro, dbo.Proveedores.localpro, dbo.Proveedores.telefpro, dbo.Proveedores.faxpro, dbo.Proveedores.telefpro, dbo.Proveedores.faxpro, dbo.Proveedores.procepro, dbo.Proveedores.emailpro, dbo.Proveedores.cifpro dbo.Proveedores.procepro, dbo.Proveedores.emailpro, dbo.Proveedores.cifpro FROM FROM dbo.Proveedores INNER JOIN dbo.Proveedores INNER JOIN dbo.Pedidos ON dbo.Proveedores.codigpro = dbo.Pedidos.codigpro dbo.Pedidos ON dbo.Proveedores.codigpro = dbo.Pedidos.codigpro Marta Zorrilla 2008-2009 75