Sei sulla pagina 1di 140

Lenguaje SQL SQL Server 2005

Marta E. Zorrilla
Dpto. de Matemticas, Estadstica y Computacin

Universidad de Cantabria

Marta Zorrilla

2009-2010

Contenido Contenido

Introduccin. Introduccin.Estndar EstndarSQL. SQL. Instrucciones Instruccionesde deDefinicin Definicinde deDatos. Datos. Ejemplos. Ejemplos. Instrucciones Instruccionesde deManipulacin Manipulacinde deDatos. Datos. Ejemplos. Ejemplos.
Referencias bibliogrficas:
- 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 2009-2010 2

Introducci n Introduccin

SQL SQL(Structured (StructuredQuery QueryLanguage). Language).


Lenguaje declarativo de acceso a los datos. Estndar 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 investigacin 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

2009-2010

SQL -92 y -99 SQL-92 y SQL SQL-99

SQL-92 incorpora: Nuevos operadores relacionales: OUTER JOIN y JOIN SQL dinmico El parmetro SQLSTATE para gestin 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 caractersticas ms 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. Definicin de roles de usuario Incorporacin de las caractersticas de orientacin a objetos: tipos de datos abstractos, generalizacin, herencia y polimorfismo.
Marta Zorrilla 2009-2010 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 Creacin de tablas: LIKE , AS MERGE: permite la combinacin de operaciones de insercin y actualizacin en una sola instruccin Generadores de secuencia. Nuevas funciones escalares, de agregacin, de clasificacin (RANK, ROW_NUMBER...)

Marta Zorrilla

2009-2010

Lenguaje de de definici definicin de Lenguaje n de datos datos SQL Server Server 2005 2005 SQL (Parte 1) 1) (Parte

Instrucciones n de Instrucciones de de Definici Definicin de Datos Datos (IDD) (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 ALTER TABLE CREATE INDEX CREATE VIEW CREATE TRIGGER CREATE PROCEDURE / FUNCTION CREATE RULE DROP objeto
Marta Zorrilla 2009-2010 7

Clusula CONSTRAINT

IDD: IDD: CREATE CREATE DATABASE DATABASE Para crear una base de datos. Su sintaxis es: CREATE CREATEDATABASE DATABASEnombreBD nombreBD [ [ON ON [ [< <fichero fichero> >[ [,...n ,...n] ]] ] [ [, ,< <grupo_fichero grupo_fichero> >[ [,...n ,...n] ]] ] ]] [ [LOG LOGON ON{{< <fichero fichero> >[ [,...n ,...n] ]}}] ] [ [COLLATE COLLATEcollation_name collation_name] ] [ [FOR FORLOAD LOAD| |FOR FORATTACH ATTACH] ]

nombreBD : :es nombreBD esel elnombre nombrede dela laBD BDque quese seva vaaacrear. crear. collation_name : :mapa collation_name mapade decaracteres caracteres logical_file_name logical_file_name: :nombre nombrelgico lgicodel delfichero. fichero. os_file_name os_file_name: :nombre nombrefsico fsicodel delfichero. fichero. size : :es size esel eltamao tamaodel delfichero. fichero. max_size : :es max_size esel eltamao tamaomximo mximodel delfichero. fichero.

< <fichero fichero> >::= ::= [ [PRIMARY PRIMARY] ] growth_increment (([ [NAME growth_increment: :incremento incrementodel delfichero. fichero. NAME= =logical_file_name logical_file_name, ,] ] FILENAME '' filegroup_name : :nombre FILENAME= ='os_file_name 'os_file_name filegroup_name nombregrupo grupode dearchivos archivos [ [, ,SIZE = size ] SIZE = size ] [ [, ,MAXSIZE MAXSIZE= ={{max_size max_size| |UNLIMITED UNLIMITED}}] ] [ [, ,FILEGROWTH FILEGROWTH= =growth_increment growth_increment] ]))[ [,...n ,...n] ] < <grupo_fichero grupo_fichero> >::= ::= FILEGROUP FILEGROUPfilegroup_name filegroup_name< <fichero fichero> >[ [,...n ,...n] ]
Marta Zorrilla 2009-2010 8

IDD IDD :: CREATE CREATE DATABASE. DATABASE. Ejemplo Ejemplo

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

Marta Zorrilla

2009-2010

IDD IDD :: CREATE CREATE DATABASE. DATABASE. Recomendaciones Recomendaciones

La Lamayor mayorparte partede delas lasbases basesde dedatos datosfuncionarn funcionarncorrectamente correctamentecon conun unsolo solo archivo de datos y un solo archivo de registro de transacciones. archivo de datos y un solo archivo de registro de transacciones. Si Siutiliza utilizavarios variosarchivos, archivos,cree creeun unsegundo segundogrupo grupode dearchivos archivospara parael elarchivo archivo adicional adicionalyyconvirtalo convirtaloen enel elgrupo grupode dearchivos archivospredeterminado. predeterminado.De Deese esemodo, modo,el el archivo principal slo contendr objetos y tablas del sistema. archivo principal slo contendr objetos y tablas del sistema. Para Paramaximizar maximizarel elrendimiento, rendimiento,cree creearchivos archivosoogrupos gruposde dearchivos archivosen entantos tantos discos discosfsicos fsicosdisponibles disponiblescomo comosea seaposible posibleyydistribuya distribuyaen engrupos gruposde dearchivos archivos distintos distintoslos losobjetos objetosque quecompitan compitande deforma formaintensa intensapor porel elespacio. espacio. Utilice grupos de archivos para permitir la colocacin de los Utilice grupos de archivos para permitir la colocacin de losobjetos objetosen en determinados determinadosdiscos discosfsicos. fsicos. Disponga Dispongaen engrupos gruposde dearchivos archivosdistintos distintoslas lasdiferentes diferentestablas tablasque quese seutilicen utilicenen en las mismas consultas de combinacin. De ese modo, el rendimiento mejorar las mismas consultas de combinacin. De ese modo, el rendimiento mejorar debido debidoaala labsqueda bsquedade dedatos datoscombinados combinadosque querealizan realizanlas lasoperaciones operacionesde deE/S E/S en enparalelo paraleloen enlos losdiscos. discos. Distribuya Distribuyaen engrupos gruposde dearchivos archivosdistintos distintoslas lastablas tablasde deacceso accesofrecuente frecuenteyylos los ndices no agrupados que pertenezcan a esas tablas. De ese modo, el ndices no agrupados que pertenezcan a esas tablas. De ese modo, el rendimiento rendimientoaumentar aumentardebido debidoaalas lasoperaciones operacionesde deE/S E/Sen enparalelo paraleloque quese se realizan realizansi silos losarchivos archivosse seencuentran encuentranen endiscos discosfsicos fsicosdistintos. distintos. No Nocoloque coloqueel elarchivo archivoooarchivos archivosde deregistro registrode detransacciones transaccionesen enel elmismo mismodisco disco fsico fsicocon conlos losdems demsarchivos archivosyygrupos gruposde dearchivos. archivos.
Marta Zorrilla 2009-2010 10

P ginas y Pginas y extensiones extensiones

PGINA: es la unidad fundamental de almacenamiento de datos en Microsoft SQL Server. Su tamao es de 8 KB. Esto significa que las bases de datos de SQL Server 2005 tienen 128 pginas por cada megabyte. El inicio de cada pgina es un encabezado de 96 bytes utilizado para almacenar informacin del sistema, como el tipo de pgina, la cantidad de espacio libre en la pgina y el Id. del objeto propietario de la pgina. En SQL Server, las filas no pueden continuar en otras pginas. En SQL Server, la mxima 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 pgina se encuentra una tabla de desplazamiento de filas. La tabla de desplazamiento de filas contiene una entrada por cada fila de la pgina y cada entrada registra la posicin del primer byte de la fila con respecto al principio de la pgina. Las entradas de la tabla de desplazamiento de filas estn en orden inverso a la secuencia de las filas de la pgina Las EXTENSIONES son la unidad bsica en la que se asigna espacio a las tablas e ndices. Una extensin consta de 8 pginas contiguas, es decir 64 KB. Esto significa que las bases de datos de SQL Server tienen 16 extensiones por megabyte.

Marta Zorrilla

2009-2010

11

SQL SQL Server Server database

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

Log Log (file) (file) .ldf .ldf

Tablas e ndices

Extents = 8 pginas continuas de 8 KB

Datos se almacenan en Pginas de 8 KB Tamao mx. fila 8060 bytes 128 pginas por MB

Cabecera Filas de datos


Matriz desplazamientos

Cada archivo se divide en pginas de 8 Kb numeradas de 0 hasta x , donde x viene definido por el tamao del fichero. Acceder a una pgina: ID de BD, ID de fichero y n de pg Fichero mdf: punto de comienzo de la BD, en sysfiles apunta los ficheros que constituyen la BD y adems almacena las tablas del sistema.
Marta Zorrilla 2009-2010 12

IDD IDD :: CREATE CREATE SCHEMA SCHEMA Para incorporar un schema a la base de datos. Su sintaxis es: CREATE nn]]]] CREATESCHEMA SCHEMAschema_name_clause schema_name_clause[[<schema_element> <schema_element>[[, ,... ... <schema_name_clause> <schema_name_clause>::= ::= {{ schema_name schema_name | |AUTHORIZATION AUTHORIZATIONowner_name owner_name | |schema_name schema_nameAUTHORIZATION AUTHORIZATIONowner_name owner_name}} <schema_element> <schema_element>::= ::= {{table_definition table_definition| |view_definition view_definition| |grant_statement grant_statement | |revoke_statement revoke_statement| |deny_statement deny_statement}}

schema_name_clause : :es schema_name_clause esel elnombre nombredel delesquema esquemaque quese seva vaaacrear. crear. owner_name : :propietario owner_name propietariodel delesquema. esquema.Generalmente Generalmenteser serotro otroesquema. esquema.Por Pordefecto defectoser serdbo dbo

Marta Zorrilla

2009-2010

13

IDD IDD :: CREATE CREATE SCHEMA. SCHEMA. Ejemplo Ejemplo Se crea el esquema ventas que contiene las tablas pedido y lineas.

CREATE CREATESCHEMA SCHEMAventas ventas CREATE CREATETABLE TABLEpedido pedido(numped (numpedint, int,fecha fechadatetime) datetime) CREATE CREATETABLE TABLElineas lineas(numped (numpedint, int,numlin numlinint, int,artId artIdchar(4), char(4),unilin unilinint) int) GRANT GRANTSELECT SELECTTO TOPedro Pedro DENY DENYSELECT SELECTTO TOLuis; Luis;

Ventajas: Ventajas: --Independencia Independenciade delos losusuarios usuarios --Administrar Administrarlos lospermisos permisosen enesquemas esquemasyyobjetos objetosincluidos incluidosen enlos losmismos mismoscon conun un mayor nivel de granularidad mayor nivel de granularidad

Marta Zorrilla

2009-2010

14

IDD IDD :: DROP DROP // ALTER ALTER SCHEMA. SCHEMA. Ejemplo Ejemplo Tambin se pueden borrar y alterar schemas.

DROP DROPSCHEMA SCHEMA<nombre>; <nombre>;


No Noes esposible posiblesi sicontiene contieneobjetos objetos

ALTER ALTERSCHEMA SCHEMA<nombre> <nombre> TRANSFER TRANSFER<objeto>; <objeto>;


Ejemplo: tabla artculos pasa a formar parte del schema ventas

ALTER ALTERSCHEMA SCHEMAventas ventas TRANSFER TRANSFERdbo.articulos; dbo.articulos;

Marta Zorrilla

2009-2010

15

IDD: IDD: CREATE CREATE TABLE TABLE Para incorporar una tabla nueva a la base de datos. Su sintaxis es: CREATE CREATETABLE TABLE[ [nombreDB.[ nombreDB.[esquema esquema] ]. .| |esquema. esquema.] ]tabla tabla (campo1 tamao )] (campo1tipo tipo[( [( tamao )][NOT [NOTNULL] NULL][restriccin_un_campo1 [restriccin_un_campo1[ [... ...] ]] ] [, tamao )] [,campo2 campo2tipo tipo[( [( tamao )][NOT [NOTNULL] NULL][restriccin_un_campo2 [restriccin_un_campo2[ [... ...] ]] ] [, [,...]] ...]] [, [,restriccin_varios_campos restriccin_varios_campos[, [,...] ...]]])) [[ON ON{{grupo_fichero grupo_fichero| |DEFAULT DEFAULT}}]] [[TEXTIMAGE_ON TEXTIMAGE_ON{{grupo_fichero grupo_fichero| |DEFAULT DEFAULT}}]]
tabla : :es tabla esel elnombre nombrede dela latabla tablaque quese seva vaaacrear. crear. campo1, : :son campo1,campo2 campo2 sonnombres nombresde decampos. campos.Debe Debecrearse crearseal almenos menosun uncampo. campo. tipo : :es tipo esel eltipo tipode dedato datoasociado asociadoal alcampo. campo. tamao : :es tamao esel eltamao tamaodel delcampo campoen encaracteres caracteres(solamente (solamentepara paracampos camposde detipo tipoTexto). Texto). restriccin_un_campo1, : :son restriccin_un_campo1,restriccin_un_campo2 restriccin_un_campo2 sonclusulas clusulasCONSTRAINT CONSTRAINTque queafectan afectanaaun unnico nico campo. campo. restriccin_varios_campos : :es restriccin_varios_campos esuna unaclusula clusulaCONSTRAINT CONSTRAINTque quedefine defineun unndice ndicede demltiples mltiplescampos. campos. ON : :Especifica ON Especificael elgrupo grupode dearchivos archivosen enel elque quese sealmacena almacenala latabla. tabla. TEXTIMAGE_ON : :indica se Marta Zorrilla 2009-2010 TEXTIMAGE_ON indicaen enqu qugrupo grupode dearchivos archivos sealmacenan almacenanlas lascolumnas columnastext, text,ntext ntexteeimage. image.
16

IDD: IDD: ALTER ALTER TABLE TABLE Para modificar el diseo de una tabla que ya existe en la base de datos. Su sintaxis es: ALTER ALTERTABLE TABLEtabla tabla {{ADD ]] || ADD campo campo tipo tipo[(tamao)] [(tamao)][NOT [NOTNULL] NULL][restriccin_un_campo [restriccin_un_campo [ [WITH WITHCHECK CHECK| |WITH WITHNOCHECK NOCHECK] ]ADD ADD{{restriccin_tabla restriccin_tabla }}[ [,...n ,...n] ] | | ALTER tamao )] ALTERCOLUMN COLUMN {{campo campo tipo tipo[( [( tamao )]}} | | DROP }} | | DROP{COLUMN {COLUMNcampo campo | | CONSTRAINT CONSTRAINTnombre_restriccin nombre_restriccin {{ENABLE ENABLE| |DISABLE DISABLE}}TRIGGER TRIGGER {{ALL ALL| |nombre_trigger nombre_trigger[ [,...n ,...n] ]}} | | {{CHECK [ [,...n CHECK| |NOCHECK NOCHECK}}CONSTRAINT CONSTRAINT{{ALL ALL| |nombre_restriccin nombre_restriccin ,...n] ]}} }}
tabla : :es tabla esel elnombre nombrede dela latabla tablaque quese seva vaaamodificar. modificar. campo : :es campo esel elnombre nombredel delcampo campoque quese seva vaaaaadir aadiroomodificar modificaren enla latabla tabla. . tipo : :es tipo esel eltipo tipode dedato datoque quese seasigna asignaaacampo. campo. tamao : :es tamao esel eltamao tamaodel delcampo campoen encaracteres caracteres(solamente (solamentepara paracampos camposde detipo tipoTexto). Texto). restriccin_un_campo : :es restriccin_un_campo esuna unaclusula clusulaCONSTRAINT CONSTRAINTque queafectan afectanaaun unnico nicocampo. campo. restriccin_tabla : :es restriccin_tabla esuna unaclusula clusulaCONSTRAINT CONSTRAINTque queafecta afectaaavarios varioscampos. campos. nombre_restriccin : :es nombre_restriccin esel elnombre nombrede dela larestriccin restriccinque quese seva vaaaeliminar eliminarooha hahabilitar/deshabilitar. habilitar/deshabilitar. nombre_trigger : :es nombre_trigger esel elnombre nombredel deldesencadenador desencadenadorque quese seva vaaaeliminar eliminarooha hahabilitar/deshabilitar. habilitar/deshabilitar.
Marta Zorrilla 2009-2010 17

IDD USULA CONSTRAINT IDD :: CL CLUSULA CONSTRAINT SOBRE SOBRE UN UN SOLO SOLO CAMPO CAMPO
Se utiliza en instrucciones CREATE TABLE y ALTER TABLE para crear o eliminar restricciones. Esta clusula puede referirse a un campo de la tabla. La restriccin Primary Key y Unique generan ndice, Foreign key no.
CONSTRAINT CONSTRAINTnombre nombre { {[ [NULL | NOT NULL | NOTNULL NULL] ]| | [ [{ {PRIMARY PRIMARYKEY KEY| |UNIQUE UNIQUE} } [ [CLUSTERED CLUSTERED| |NONCLUSTERED NONCLUSTERED] ] [ [WITH WITHFILLFACTOR FILLFACTOR==factor_relleno factor_relleno] ] [ [ON ON{grupo_ficheros {grupo_ficheros| |DEFAULT} DEFAULT}] ]] ] ] ]| | [ [[ [FOREIGN FOREIGNKEY KEY] ] REFERENCES [ [(campo_externo1 ) )] ] REFERENCESotra_tabla otra_tabla (campo_externo1 [ [ON ONDELETE DELETE{NO {NOACTION ACTION| |CASCADE CASCADE| |SET SETNULL NULL| |SET SETDEFAULT DEFAULT} }] ] [ [ON ONUPDATE UPDATE{NO {NOACTION ACTION| |CASCADE CASCADE| |SET SETNULL NULL| |SET SETDEFAULT DEFAULT} }] ] [ [NOT NOTFOR FORREPLICATION REPLICATION] ] ] ]| | CHECK CHECK[ [NOT NOTFOR FORREPLICATION REPLICATION] ] ( (expresin_lgica expresin_lgica) ) }}

Marta Zorrilla

nombre : :es nombre esel elnombre nombrede dela larestriccin restriccinque quese seva vaaacrear. crear. otra_tabla : :es otra_tabla esel elnombre nombrede dela latabla tablaaala laque quese sehace hacereferencia. referencia. campo_externo1 : :son campo_externo1 sonlos losnombres nombresde delos loscampos camposde dela laotra_tabla otra_tablaaalos losque quese sehace hacereferencia. referencia. factor_relleno : especifica cunto se debe llenar cada pgina de ndice utilizada para factor_relleno: especifica cunto se debe llenar cada pgina de ndice utilizada paraalmacenar almacenarlos los datos de ndice.Entre 0 y 100. Por defecto 0. datos de ndice.Entre 0 y 100. Por defecto 0. grupo_ficheros : :indica grupo_ficheros indicadnde dndese sealmacena almacenala latabla tabla expresin_lgica : Expresin que devuelve true expresin_lgica: Expresin que devuelve trueoofalse false
2009-2010

18

IDD USULA CONSTRAINT IDD :: CL CLUSULA CONSTRAINT SOBRE SOBRE TABLA TABLA
CONSTRAINT CONSTRAINTnombre nombre {{ [ [{ {PRIMARY PRIMARYKEY KEY| |UNIQUE UNIQUE} } [ [CLUSTERED CLUSTERED| |NONCLUSTERED NONCLUSTERED] ] { {(principal1 (principal1[ [ASC ASC| |DESC DESC] ][ [, ,principal2 principal2[,[,...] ...]] ]) )} } [ [WITH ]] WITHFILLFACTOR FILLFACTOR= =factor_relleno factor_relleno [ [ON ON{ {grupo_ficheros grupo_ficheros| |DEFAULT DEFAULT} }] ] ]] || FOREIGN FOREIGNKEY KEY [ [(referencia1 (referencia1[,[,referencia2 referencia2[,[,...] ...]] ]) )] ] REFERENCES REFERENCESotra_tabla otra_tabla[ [(campo_externo1 (campo_externo1[ [,... ,...campo_externo2 campo_externo2] ]) )] ] [ [ON ONDELETE DELETE{NO {NOACTION ACTION| |CASCADE CASCADE| |SET SETNULL NULL| |SET SETDEFAULT DEFAULT} }] ] [ [ON ONUPDATE UPDATE{NO {NOACTION ACTION| |CASCADE CASCADE| |SET SETNULL NULL| |SET SETDEFAULT DEFAULT} }] ] [ [NOT NOTFOR FORREPLICATION REPLICATION] ] | | CHECK CHECK[ [NOT NOTFOR FORREPLICATION REPLICATION] ] (expresin_lgica (expresin_lgica) ) }} nombre : :es nombre esel elnombre nombrede dela larestriccin restriccinque quese seva vaaacrear. crear. principal1, : :son principal1,principal2 principal2 sonlos losnombres nombresde delos loscampos camposque quecompondrn compondrnla laclave claveprincipal. principal. referencia1, : :son referencia1,referencia2 referencia2 sonlos losnombres nombresde delos loscampos camposque quehacen hacenreferencia referenciaaaotros otrosde deotra otratabla. tabla. otra_tabla : es el nombre de la tabla a la que se hace referencia. otra_tabla: es el nombre de la tabla a la que se hace referencia. campo_externo1, : :son campo_externo1,campo_externo2 campo_externo2 sonlos losnombres nombresde delos loscampos camposde dela laotra_tabla otra_tablaaalos losque quese se hace referencia. hace referencia. expresin_lgica : :criterio expresin_lgica criterioque quese seha hade decumplir. cumplir.Devuelve Devuelvetrue trueoofalse false
Marta Zorrilla 2009-2010 19

Ejemplo Ejemplo
La Labase basede dedatos datostrata tratade deinformatizar informatizarel elproceso procesode decompras comprasde deuna unaempresa. empresa.Esto Esto es, recoger los pedidos de los artculos, contemplados en su catlogo, que compran es, recoger los pedidos de los artculos, contemplados en su catlogo, que compranaa proveedores proveedoresya yaconocidos. conocidos. Reglas: Reglas: - -No Nopuede puedeseleccionar seleccionarun unartculo artculodescatalogado. descatalogado. - -Si el stock alcanza el mnimo establecido, Si el stock alcanza el mnimo establecido,se seha hade denotificar notificarcomo comoun unevento. evento.

Marta Zorrilla

2009-2010

20

IDD: IDD: CREATE CREATE TABLE TABLE Ejemplos Ejemplos

Escribir las instrucciones SQL necesarias para construir la base de datos cuyo esquema de relaciones es:

CREATE CREATETABLE TABLELineas Lineas( ( CREATE Proveedores ( ( NOT numped INTEGER CREATETABLE TABLE Proveedores numped INTEGER NOTNULL, NULL, codigpro 44 ) ) NOT NULL CONSTRAINT id_pro numlin SMALLINT NULL, codigpro CHAR( CHAR( NOT NULL NOT CONSTRAINT id_proPRIMARY PRIMARYKEY, KEY, numlin SMALLINT NOT NULL, CREATE TABLE Articulos (( CREATE TABLE Articulos cifpro CHAR( 12 ) NOT CONSTRAINT u_cif CREATE TABLE codigart Pedidos CHAR( ( 66 ) )NOT NULL, cifpro CHAR( 12 ) NOT NULL CONSTRAINT u_cifUNIQUE, UNIQUE, CREATE TABLE codigart Pedidos CHAR( ( NULL NOT NULL, codigart CHAR( 66 ) ) NOT NULL CONSTRAINT id_art PRIMARY KEY, codigart CHAR( NOT NULL CONSTRAINT id_art PRIMARY KEY, nombrpro CHAR( 30 ) NOT NULL, numped unilin INTEGER FLOAT NOT NOT NULL, NULL CONSTRAINT id_ped PRIMARY nombrpro CHAR( 30) FLOAT NOT NULL, numped unilin INTEGER NOT NOT NULL, NULL CONSTRAINT id_ped PRIMARYKEY, KEY, descrart CHAR( 40 ) NOT NULL, descrart 40 ) NOT NULL, direcpro CHAR( 30 )CHAR( NULL, fechaped preunlin DATETIME MONEY NOT NOT NULL, NULL ,, direcpro CHAR( 30 ) NOT NOT NULL, fechaped preunlin DATETIME MONEY NOT NOT NULL, NULL DEFAULT DEFAULTgetdate() getdate() preunart MONEY NOT NULL, preunart MONEY NOT NULL, cpostpro CHAR( 5 ) NOT NULL CHECK (cpostpro like '[0-9][0-9][0-9][0-9][0-9]' ), desculin FLOAT NOT NULL CHECK (desculin>=0 and ), codigpro CHAR( 4 ) NOT NULL, cpostpro CHAR( 5) NOT CHECK (cpostpro like '[0-9][0-9][0-9][0-9][0-9]' ), desculin FLOAT NULL CHECK (desculin>=0 anddesculin<=100 desculin<=100 ), codigpro CHAR( 4) NULLNOT NOT NULL, stockart INTEGER NOT NULL CHECK (stockart >0) , stockart INTEGER NOT NULL CHECK (stockart >0) , ), localpro CHAR( 20 ) ) NOT ivaped totallin FLOAT AS * NULL **(1 CHECK [desculin] (ivaped>0 / /100) and ), localpro CHAR( 20 NOT NULL, NOT ivaped totallin FLOAT AS([preunlin] (NULL, [preunlin] NOT *[unilin] [unilin] NULL (1 CHECK [desculin] (ivaped>0 100) ), andivaped<100 ivaped<100 ), stockmin INTEGER NOT NULL CHECK (stockmin>0), stockmin INTEGER NOT NULL CHECK (stockmin>0), telefpro CHAR( 17 ) ) NOT NULL, fentrped CONSTRAINT DATETIME id_lin PRIMARY NOT KEY NULL, (numped, ), telefpro CHAR( 17 NOT NULL, fentrped CONSTRAINT DATETIME id_lin PRIMARY NOT KEY NULL, (numped,numlin numlin ), fecbaja DATETIME) fecbaja DATETIME) faxpro CHAR( 17 ), CONSTRAINT FOREIGN KEY ) )REFERENCES Pedidos (codigpro numped ), CONSTRAINT f_pro FOREIGN KEY ) )REFERENCES Proveedores (codigpro ), faxpro CHAR( 17 ), f_ped CONSTRAINT f_ped FOREIGN KEY(numped (numped REFERENCES Pedidos (numped ), CONSTRAINT f_pro FOREIGN KEY(codigpro (codigpro REFERENCES Proveedores ( ), emailpro CHAR( 25 ), CONSTRAINT CONSTRAINT c_fecha CHECK FOREIGN (fechaped<=fentrped KEY ) )REFERENCES )) Articulos )) emailpro CHAR( 25 ), f_art CONSTRAINT CONSTRAINT c_fecha f_art CHECK FOREIGN (fechaped<=fentrped KEY(codigart (codigart REFERENCES )) Articulos(codigart (codigart )) procepro 10 ) ) NOT )) procepro CHAR( CHAR( 10 NOTNULL NULLCHECK CHECK(procepro (proceproin in('UE', ('UE','No 'NoUE') UE') ))
Marta Zorrilla 2009-2010 21

IDD IDD :: ALTER ALTER TABLE. TABLE. Ejemplos Ejemplos ALTER ALTERTABLE TABLE[dbo].[Proveedores] [dbo].[Proveedores] ADD CONSTRAINT ADD CONSTRAINT[id_pro] [id_pro]PRIMARY PRIMARYKEY KEY CLUSTERED CLUSTERED (([codigpro] [codigpro])) ON ON[PRIMARY] [PRIMARY] GO GO ALTER ALTERTABLE TABLE[dbo].[Pedidos] [dbo].[Pedidos]WITH WITHNOCHECK NOCHECKADD ADD CONSTRAINT CONSTRAINT[DF_Pedidos_fechaped] [DF_Pedidos_fechaped]DEFAULT DEFAULT(getdate()) (getdate())FOR FOR[fechaped], [fechaped], CONSTRAINT CONSTRAINT[c_fecha] [c_fecha]CHECK CHECK([fechaped] ([fechaped]<= <=[fentrped]), [fentrped]), CHECK CHECK([ivaped] ([ivaped]> >0 0and and[ivaped] [ivaped]< <100) 100) GO GO ALTER ALTERTABLE TABLE[dbo].[Proveedores] [dbo].[Proveedores]ADD ADD CONSTRAINT CONSTRAINT[u_cif] [u_cif]UNIQUE UNIQUE NONCLUSTERED NONCLUSTERED(([cifpro] [cifpro])) ON ON[PRIMARY] [PRIMARY], , CHECK CHECK([cpostpro] ([cpostpro]like like'[0-9][0-9][0-9][0-9][0-9]'), '[0-9][0-9][0-9][0-9][0-9]'), CHECK CHECK([procepro] ([procepro]= ='No 'NoUE' UE'or or[procepro] [procepro]= ='UE') 'UE') GO GO

Marta Zorrilla

2009-2010

22

IDD IDD :: CREATE CREATE INDEX INDEX Para crear un ndice nuevo en una tabla que ya existe en la base de datos. Su sintaxis es: CREATE CREATE[ [UNIQUE UNIQUE] ][ [CLUSTERED CLUSTERED| |NONCLUSTERED NONCLUSTERED] ]INDEX INDEXndice ndice ON campo1 ON{tabla {tabla| |vista vista}}(( campo1[ [{ASC {ASC| |DESC DESC}] }][, [,campo2 campo2[{ASC|DESC}], [{ASC|DESC}],...]) ...]) [ [WITH WITH< <opcin_ndice opcin_ndice> >[ [,...n] ,...n]] ] [ [ON ONgrupo_ficheros grupo_ficheros] ] < <opcin_ndice opcin_ndice> >:: ::= = {{PAD_INDEX PAD_INDEX| |FILLFACTOR FILLFACTOR= =factor_relleno factor_relleno| |IGNORE_DUP_KEY IGNORE_DUP_KEY| | DROP_EXISTING DROP_EXISTING| |STATISTICS_NORECOMPUTE STATISTICS_NORECOMPUTE| | SORT_IN_TEMPDB SORT_IN_TEMPDB }}
UNIQUE : :seala UNIQUE sealaque queel elndice ndicees esde deunicidad, unicidad,en encaso casocontrario contrariopermitir permitirrepeticin repeticinde devalores. valores. ndice : :es ndice esel elnombre nombredel delndice ndiceque quese seva vaaacrear. crear. tabla/vista : :es tabla/vista esel elnombre nombrede deuna unatabla/vista tabla/vistaexistente existenteaala laque queestar estarasociado asociadoel elndice. ndice. campo1, : :son campo1,campo2 campo2 sonlos losnombres nombresde delos loscampos camposque quevan vanaaformar formarel elndice. ndice.Puede Puedeser serun unsolo solo campo. Para forzar una ordenacin descendente de un campo, hay que utilizar la palabra reservada campo. Para forzar una ordenacin descendente de un campo, hay que utilizar la palabra reservada DESC ; ;sino DESC sinose seespecifica especificaoose seescribe escribeASC, ASC,se seentiende entiendeque quela laordenacin ordenacines esascendente. ascendente.

CREATE CREATEINDEX INDEXFK_Lineas FK_Lineas ON ONLineas Lineas(codigart) (codigart)


Marta Zorrilla 2009-2010 23

Tipos Tipos de de datos datos

Consideraciones previas: Consideraciones previas:


Qu tipo de informacin se va a almacenar. Por ejemplo, no se Qu tipo de informacin 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 numrico. numrico. 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 ordenacin difieren en funcin del tipo de dato, as, los nmeros ordenacin difieren en funcin del tipo de dato, as, los nmeros almacenados en un campo texto se ordenan segn el valor de su almacenados en un campo texto se ordenan segn el valor de su cdigo ASCII (1,10,11,2,20,...) que no coincide con la ordenacin cdigo ASCII (1,10,11,2,20,...) que no coincide con la ordenacin numrica. numrica.
Marta Zorrilla 2009-2010 24

Tipos Tipos de de datos datos en en SQL SQL Server Server 2005 2005 I I NUMRICOS
Datos enteros (nmeros enteros) comprendidos entre -2^63 (-9223372036854775808) y 2^63 -1 (9223372036854775807). Datos enteros (nmeros enteros) comprendidos entre -2^31 (-2.147.483.648) y 2^31 - 1 int (2.147.483.647). Datos enteros comprendidos entre 2^15 (-32.768) y 2^15 - 1 (32.767). smallint Datos enteros comprendidos 0 y 255. tinyint Datos enteros con valor 1 0. bit Datos de precisin y escala numrica fijas comprendidos entre -10^38 +1 y 10^38 1. decimal Funcionalmente equivalente a decimal. numeric Valores de moneda comprendidos entre -2^63 (-922.337.203.685.477,5808) y 2^63 - 1 money (+922.337.203.685.477,5807), con una precisin de una diezmilsima de la unidad monetaria. smallmoney Valores de moneda comprendidos entre -214.748,3648 y +214.748,3647, con una precisin de una diezmilsima de la unidad monetaria. Nmeros con precisin de coma flotante comprendidos entre -1,79E + 308 y 1,79E + 308. float Nmeros con precisin de coma flotante comprendidos entre -3,40E + 38 y 3,40E + 38. real bigint

Marta Zorrilla

2009-2010

25

Tipos Tipos de de datos datos en en SQL SQL Server Server 2005 2005 II 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 precisin de 3,33 milisegundos. (timestamp en el standard sql:2003) smalldatetime Datos de fecha y hora comprendidos entre el 1 de enero de 1900 y el 6 de junio de 2079, con una precisin de un minuto.

CADENAS DE CARACTERES
char varchar text nchar nvarchar ntext Datos de caracteres no Unicode de longitud fija con una longitud mxima de 8.000 caracteres. Datos no Unicode de longitud variable con un mximo de 8.000 caracteres. Datos no Unicode de longitud variable con una longitud mxima de 2^31 - 1 (2.147.483.647) caracteres. Datos Unicode de longitud variable con una longitud mxima de 4.000 caracteres. Datos Unicode de longitud variable con una longitud mxima de 4.000 caracteres. Datos Unicode de longitud variable con una longitud mxima de 2^30 - 1 (1.073.741.823) caracteres.

Marta Zorrilla

2009-2010

26

Tipos Tipos de de datos datos en en SQL SQL Server Server 2005 2005 III III BINARIOS
binary varbinary image Datos binarios de longitud fija con una longitud mxima de 8.000 bytes. Datos binarios de longitud variable con una longitud mxima de 8.000 bytes. Datos binarios de longitud variable con una longitud mxima de 2^31 - 1 (2.147.483.647) bytes.

OTROS TIPOS DE DATOS


Una referencia a un cursor. 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. Un tipo de datos especial que se utiliza para almacenar un conjunto de resultados para un table proceso posterior. timestamp Un nmero nico para toda la base de datos que se actualiza cada vez que se actualiza una fila. (utilizar rowversion para versiones futuras) uniqueiden Un identificador exclusivo global (GUID), necesario para replicacin tifier Almacena una instancia de XML xml

Marta Zorrilla

2009-2010

27

Tipo rico: IDENTITY Tipo de de dato dato Autonum Autonumrico: IDENTITY

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


semilla : :valor semilla valorde deinicio. inicio. incremento: incremento:incremento incrementoque quese seaplica aplica

CREATE CREATETABLE TABLEdbo.herramientas( dbo.herramientas( ID IDINT INTIDENTITY(1,1) IDENTITY(1,1)NOT NOTNULL NULLPRIMARY PRIMARYKEY, KEY, Nombre NombreVARCHAR(40) VARCHAR(40)NOT NOTNULL NULL )) ---insertamos insertamosvalores valores INSERT INSERTINTO INTOdbo.herramientas dbo.herramientas(Nombre (Nombre))VALUES VALUES(Martillo') (Martillo') INSERT INSERTINTO INTOdbo.herramientas dbo.herramientas(Nombre (Nombre))VALUES VALUES(Taladro') (Taladro') ---si siborramos, borramos,Martillo, Martillo,se sepierde pierdeel elID ID1. 1.Para Parareutilizarlo reutilizarlo SET SETIDENTITY_INSERT IDENTITY_INSERTdbo.Tool dbo.ToolON ON INSERT INSERTINTO INTOdbo.herramientas dbo.herramientas(ID, (ID,Nombre) Nombre)VALUES VALUES(1, (1,Serrucho') Serrucho')
Marta Zorrilla 2009-2010 28

Tipos Tipos definidos definidos por por el el usuario: usuario: CREATE CREATE TYPE TYPE

CREATE CREATETYPE TYPE[ [nombre_schema. nombre_schema.] ]nombre nombre {{ FROM FROMtipo_base tipo_base [ [((precision precision[ [, ,escala escala] ])) ] ] [ [NULL NULL| |NOT NOTNULL NULL] ] | |EXTERNAL EXTERNALNAME NAMEassembly_name assembly_name[ [.class_name .class_name] ] }}[ [; ;] ]

nombre : :es nombre esel elnombre nombredel deltipo tipode dedato datoque quese seva vaaacrear. crear. tipo_base: tipo_base:tipo tipode dedato datobase baseen enel elque quese seapoya apoya

CREATE CREATETYPE TYPEiva iva FROM FROMfloat floatNOT NOTNULL NULL; ;

Marta Zorrilla

2009-2010

29

CREATE ndar) CREATE RULE RULE y y DEFAULT DEFAULT (no (no est estndar) 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 CREATERULE RULEnombre nombre AS ASexpresion_condicional expresion_condicional
nombre : :es nombre esel elnombre nombrede dela lafuncin funcinque quese seva vaaacrear. crear. expresion_condicional: expresion_condicional:criterio criterioque quedebe debecumplir cumplirla laregla 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 CREATEDEFAULT DEFAULTnombre nombre AS ASexpresion_constante expresion_constante
nombre : :es nombre esel elnombre nombrede dela lafuncin funcinque quese seva vaaacrear. crear. expresion_constante: expresion_constante:valor valor

Marta Zorrilla

2009-2010

30

CREATE CREATE RULE RULE y y DEFAULT: DEFAULT: ejemplo ejemplo Objetivo crear un tipo de dato definido por el usuario, denominado iva CREATE porcentaje CREATERULE RULEr_ r_ porcentaje AS AS@valor>=0 @valor>=0and and@valor<=100 @valor<=100

CREATE CREATEDEFAULT DEFAULTd_iva d_iva AS AS16 16

EXEC , ,'float', EXECsp_addtype sp_addtypeiva iva 'float','not 'notnull' null' go go EXEC ',','iva '' EXECsp_bindrule sp_bindrule'r_porcentaje 'r_porcentaje 'iva go go EXEC ',','iva '' EXECsp_bindefault sp_bindefault'd_iva 'd_iva 'iva

Marta Zorrilla

2009-2010

31

Ejercicio
Crear Crearla labase basede dedatos datosAlumnos. Alumnos.Esta Estaconsta constade de22ficheros ficherosde de4Gb 4Gbyy11fichero fichero de delog logque quese seincremente incrementepor porporcentaje porcentaje Crear Crearla latabla tablaPERSONA PERSONAcon conlos lossiguientes siguientesatributos atributosyyrestricciones: restricciones:id id autonumrico, autonumrico,nombre nombreyy22apellidos, apellidos,calle, calle,nro, nro,localidad localidadyyCP CP(5 (5dgitos dgitos numricos). numricos). Crear Crearel eltipo tipode dedato datoNOTA NOTApara paraser serutilizado utilizadoen enla latabla tablaALUMNO ALUMNO(numrico (numrico decimal decimalentre entre00yy10). 10). Crear Crearla latabla tablaALUMNO ALUMNOcon conlos losatributos: atributos:idAlumno, idAlumno,idpersona, idpersona,notaAcceso, notaAcceso, notaBachiller. notaBachiller. La Larelacin relacinPERSONA_ALUMNO PERSONA_ALUMNOes es1:1 1:1 Crear Crearndice ndicesobre sobreel elatributo atributoidPersona idPersonade dela latabla tablaALUMNO ALUMNO Incorporar Incorporarun uncampo campoen enALUMNO ALUMNOque quepermita permitaalmacenar almacenarsu sufoto fotoyyotro otropara para la lafecha fechade denacimiento. nacimiento. Por Porltimo, ltimo,aadir aadiruna unacolumna columnacalculada calculadaque queindique indiquela laedad edaddel delalumno alumno
Marta Zorrilla 2009-2010 32

Manipulacin de datos datos Manipulaci n de SQL Server Server 2005 2005 SQL

Instrucciones n de Instrucciones de de Manipulaci Manipulacin de Datos Datos (IMD) (IMD) I I

Las LasIMD IMDpermiten permitenactuar actuarsobre sobrelos lospropios propiosdatos. datos. Las Las operaciones operaciones bsicas bsicas de de manipulacin manipulacin de de datos datos son: son: insertar, insertar, modificar, modificar,borrar borrary yconsultar. consultar. Las Lastres tresprimeras primeraspermiten permitenalterar alterarel elcontenido contenidode dela labase basede dedatos. datos. La Laltima ltimaconsiste consisteen enlocalizar localizardatos datospara parasu suobservacin. observacin. Principales Principalesinstrucciones: instrucciones: INSERT INSERT UPDATE UPDATE DELETE DELETE SELECT SELECT

Marta Zorrilla

2009-2010

34

IMD IMD II II :: INSERT INSERT Permite aadir una o ms filas en una tabla. La sintaxis para insertar una sola fila es: INSERT campo1 [, [, INSERTINTO INTOdestino destino [( [( campo1 [,campo2 campo2 [,...]])] ...]])] VALUES valor1 [, [, VALUES(( valor1 [,valor2 valor2 [,...]]) ...]]) La sintaxis para insertar varias filas es: INSERT campo1 [, [, INSERTINTO INTOdestino destino[( [( campo1 [,campo2 campo2 [,...]])] ...]])] Instruccin_SELECT Instruccin_SELECT
destino: es el nombre de la tabla o vista donde se van a aadir filas. campo1, campo2: son los nombres de los campos donde se van a aadir los datos. valor1, valor2: son los valores que tomarn los campos en la nueva fila que se van a insertar. Cada valor se asigna al campo que corresponde a la posicin 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'). Instruccin_SELECT: es la instruccin SELECT cuya ejecucin proporcionar las filas a insertar.

Marta Zorrilla

2009-2010

35

IMD IMD III III :: UPDATE UPDATE Permite modificar informacin existente en una o varias filas de una tabla. Su sintaxis es: UPDATE = nuevovalor1 = nuevovalor2 UPDATEdestino destinoSET SETcampo1 campo1 = nuevovalor1[, [,campo2 campo2 = nuevovalor2[, [,...]] ...]] [WHERE ]] [WHEREcondicin condicin
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. condicin: es una expresin lgica que determina qu filas se actualizarn. Slo se actualizarn las filas que satisfagan la expresin. Si no se incluye clusula WHERE (no hay condicin) se modificarn todas las filas de la tabla.

Marta Zorrilla

2009-2010

36

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

DELETE ]] DELETEFROM FROMdestino destino [WHERE [WHEREcondicin condicin

destino: es el nombre de la tabla o vista cuyas filas se van a

eliminar. condicin: es una expresin lgica que determina qu filas se borrarn. Slo se borrarn las filas que satisfagan la expresin. Si no se incluye clusula WHERE (no hay condicin) se borrarn todas las filas de la tabla.

Marta Zorrilla

2009-2010

37

IMD IMD V V :: INSERT, INSERT, UPDATE, UPDATE, DELETE DELETE Ejemplos Ejemplos

Insertar una nueva fila en la tabla Proveedores.


INSERT INSERT INTO INTO Proveedores Proveedores (codigpro, (codigpro, cifpro, cifpro, nombrpro, nombrpro, direcpro, direcpro, cpostpro, cpostpro, localpro, localpro, telefpro, telefpro, faxpro, faxpro, procepro) procepro) VALUES VALUES('P005', ('P005','A39144325', 'A39144325','Angulo 'AnguloLastra, Lastra,Antonio', Antonio','Hernn 'HernnCorts,18', Corts,18','39002', '39002','Santander', 'Santander','(34) '(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 UPDATEProveedores Proveedores SET SETemailpro='mailto:gil@unican.es' emailpro='mailto:gil@unican.es' WHERE codigpro='P004' WHERE codigpro='P004'

Borrar todos los proveedores de Santander.


DELETE DELETEFROM FROMProveedores Proveedores WHERE localpro='Santander' WHERE localpro='Santander'

Marta Zorrilla

2009-2010

38

Datos Datos

Marta Zorrilla

2009-2010

39

Importaci n/Exportacin de Importacin/Exportacin de datos datos

Instruccin InstruccinINSERT INSERT/ /SELECT SELECT Import/Export SQL Server 2005) Import/Exportdata data(slo (slo SQL Server 2005) Conexin ConexinODBC/OLEDB ODBC/OLEDB Herramienta HerramientaIntegration IntegrationServices Services ooGrfica, Grfica,basada basadaen enobjetos objetos ooOrigen/destino Origen/destinode dedatos datos(OLEDB, (OLEDB,ODBC) ODBC) ooTransformaciones Transformacionesms mscomplejas complejas

Marta Zorrilla

2009-2010

40

IMD IMD VI VI :: SELECT SELECT Est dedicada a obtener informacin de la base de datos. El resultado de su ejecucin, si existe, siempre tiene estructura de una tabla y los campos de sus filas responden a la lista de seleccin. Tiene enormes posibilidades, lo que hace que su sintaxis presente muchas variantes.
SELECT SELECT[ [predicado predicado] ] Lista_de_seleccin Lista_de_seleccin [INTO ]] [INTOtabla_temporal tabla_temporal FROM FROMlista_de_tablas lista_de_tablas [WHERE [WHEREcondicin condicin] ] [GROUP ]] [GROUPBY BYlista_campos_group_by lista_campos_group_by [HAVING ]] [HAVINGcondicin_group_by condicin_group_by [ORDER [ORDERBY BYcolum1 colum1{ {[ASC] [ASC]| |DESC DESC} }[,[,colum2 colum2{ {[ASC] [ASC]| |DESC DESC}, },.... ....] ]] ]

Marta Zorrilla

2009-2010

41

IMD IMD VII VII :: SELECT SELECT


predicado: puede tomar uno de los siguientes valores: ALL, DISTINCT o TOP nmero_de_filas (devuelve el nmero de registros especificado segn una clusula ORDER BY). Puede utilizar el predicado para limitar el nmero de registros devueltos. Si no especifica ninguno, el valor predeterminado es ALL. Lista_de_seleccin: es el conjunto de los elementos que sern 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. condicin: es una expresin lgica con los criterios de seleccin de registros. lista_campos_group_by: son los nombres de los campos que se van a utilizar para agrupar los registros. condicin_group_by: son las condiciones que se imponen sobre el criterio de agrupamiento. colum1, colum2: son nombres de elementos de la lista de seleccin o la posicin que ocupan en ella. ASC quiere decir ordenacin ascendente (es la opcin por defecto) y DESC significa ordenacin descendente.

Marta Zorrilla

2009-2010

42

IMD IMD VIII VIII :: SELECT SELECT

Con Operadores Con Pred. BETWEEN... AND...

B squedas Bsquedas Sencillas Sencillas Condiciones Condiciones de de Comparaci n Comparacin B squedas Bsquedas Cualificadas Cualificadas Condiciones Condiciones de de Combinaci n Combinacin Condiciones Condiciones de de Subsentencia Subsentencia

Con Pred. IN (lista_de_valores) Con Pred. LIKE cadena_caracteres Con Pred. NULL

Simple Mltiple Autocombinacin Combinacin Externa De Comparacin Con Predicado IN Con Predicado EXISTS

Marta Zorrilla

2009-2010

43

IMD IMD IX IX :: SELECT SELECT

Funciones Funciones de de Grupo Grupo Funciones Funciones de de Fecha Fecha Agrupamiento Agrupamiento de de Datos Datos Ordenaci n del Ordenacin del Resultado Resultado Guardar Guardar Resultado Resultado en en una una Tabla Tabla Uni n, Intersecci n y n de Unin, Interseccin y Excepci Excepcin de Sentencias Sentencias Uso Uso de de funciones funciones almacenadas almacenadas
Marta Zorrilla 2009-2010 44

Condici n de Condicin de Agrupamiento Agrupamiento

IMD IMD X X :: SELECT SELECT B squedas Sencillas Bsquedas Sencillas (Ejemplos) (Ejemplos)

Obtener el contenido de la tabla Articulos. SELECT SELECT ** FROM FROMArticulos Articulos

Listar el nombre y el telfono de todos los Proveedores. SELECT SELECT nombrpro nombrpro as as Nombre, Nombre, telefpro telefpro as as Telf Telf FROM FROMProveedores Proveedores

Marta Zorrilla

2009-2010

45

IMD IMD XI XI :: SELECT SELECT


B squedas Cualificadas. n 1 Bsquedas Cualificadas. Cond. Cond. de de Comparaci Comparacin 1 (Ejemplos) (Ejemplos)

Las condiciones de comparacin son expresiones lgicas que permiten comparar una columna o expresin con otra columna, expresin o lista de columnas. Pueden adoptar una de las formas siguientes: exp expoperador_de_comparacin operador_de_comparacinexp exp exp exp[NOT] [NOT]BETWEEN BETWEENexp expAND ANDexp exp exp exp[NOT] [NOT]IN IN(lista (listade devalores) valores) campo campo[NOT] [NOT]LIKE LIKE 'cadena_de_caracteres' 'cadena_de_caracteres' campo campoIS IS[NOT] [NOT]NULL NULL Encontrar los artculos cuyo precio unitario sea superior a 180 y su stock sea inferior o igual a 100. SELECT SELECT** FROM FROMArticulos Articulos WHERE WHEREpreunart preunart> >180 180AND ANDstockart stockart<= <=100 100

Marta Zorrilla

2009-2010

46

IMD IMD XII XII :: SELECT SELECT


B squedas Cualificadas. n 2 Bsquedas Cualificadas. Cond. Cond. de de Comparaci Comparacin 2 (Ejemplos) (Ejemplos)

Listar los artculos cuyo precio unitario est comprendido entre 180 y 300 . SELECT SELECT** FROM FROMArticulos Articulos WHERE WHEREpreunart preunartBETWEEN BETWEEN180 180AND AND300 300

Hallar todos los proveedores de las ciudades de Santander, Madrid y Barcelona. SELECT SELECTcodigpro, codigpro,nombrpro, nombrpro,direcpro, direcpro,cpostpro, cpostpro,localpro localproFROM FROMProveedores Proveedores WHERE , ,'Madrid' , ,'Barcelona' )) WHERElocalpro localproIN IN('Santander' ('Santander' 'Madrid' 'Barcelona'

Marta Zorrilla

2009-2010

47

IMD IMD XIII XIII :: SELECT SELECT


B squedas Cualificadas. n 3 Bsquedas Cualificadas. Cond. Cond. de de Comparaci Comparacin 3 (Ejemplos) (Ejemplos)

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

Hallar todos los proveedores de los que no se tenga informacin sobre su correo electrnico. SELECT SELECTcodigpro, codigpro,nombrpro, nombrpro,direcpro, direcpro,cpostpro, cpostpro,localpro, localpro,telefpro telefpro FROM FROMProveedores Proveedores WHERE WHEREemailpro emailproIS ISNULL NULL

Marta Zorrilla

2009-2010

48

IMD IMD XIV XIV :: SELECT SELECT


B squedas Cualificadas. n Bsquedas Cualificadas. Cond. Cond. de de Combinaci Combinacin Combinaci n Simple Combinacin Simple (Ejemplo) (Ejemplo)

Las bsquedas cualificadas son las que afectan a datos de ms de una tabla. Una Una Combinacin Combinacin Simple Simple es es aquella aquella en en la la que que la la condicin condicin de de la la clusula clusula FROM FROM (o (o WHERE) WHERE) contiene contiene una una comparacin comparacin de de igualdad igualdad entre entre campos campos pertenecientes pertenecientesa ados dostablas tablasdistintas. distintas.

Listar todos los proveedores a los que se ha efectuado algn pedido entre el 20/1/2006 y el 15/9/2006. SELECT SELECTDISTINCT DISTINCTProveedores.codigpro, Proveedores.codigpro,nombrpro, nombrpro,direcpro, direcpro,localpro localpro FROM FROMProveedores ProveedoresINNER INNERJOIN JOINPedidos Pedidos ON ONProveedores.codigpro Proveedores.codigpro= =Pedidos.codigpro Pedidos.codigpro WHERE WHEREfechaped fechapedBETWEEN BETWEEN'2006/01/20' '2006/01/20'AND AND'2006/09/15' '2006/09/15'

Marta Zorrilla

2009-2010

49

IMD IMD XIV XIV :: SELECT SELECT


B squedas Cualificadas. n Bsquedas Cualificadas. Cond. Cond. de de Combinaci Combinacin Combinaci n Simple n) Combinacin Simple (Ejemplo. (Ejemplo. Continuaci Continuacin)

SELECT SELECT DISTINCT DISTINCTProveedores.codigpro, Proveedores.codigpro,nombrpro, nombrpro,direcpro, direcpro,localpro localpro FROM FROMProveedores Proveedores INNER INNERJOIN JOIN Pedidos Pedidos ON ONProveedores.codigpro Proveedores.codigpro= =Pedidos.codigpro Pedidos.codigpro WHERE WHEREfechaped fechapedBETWEEN BETWEEN'2006/01/20' '2006/01/20'AND AND'2006/09/15' '2006/09/15' Informacin de proceso

Marta Zorrilla

2009-2010

50

IMD IMD XV XV :: SELECT SELECT


B squedas Cualificadas. n Bsquedas Cualificadas. Cond. Cond. de de Combinaci Combinacin Combinaci n M ltiple (Ejemplo) Combinacin Mltiple (Ejemplo)

Una UnaCombinacin CombinacinMltiple Mltiplees esaquella aquella combinacin combinacin que que relaciona relaciona varios varios campos camposde dems msde dedos dostablas. tablas.

Encontrar todos los artculos que han sido pedidos entre el 15/5/2006 y el 30/5/2006. SELECT SELECTDISTINCT DISTINCTArticulos.codigart, Articulos.codigart,descrart descrart FROM FROMPedidos PedidosINNER INNERJOIN JOIN (Lineas )) (Lineas INNER INNERJOIN JOINArticulos ArticulosON ONLineas.codigart Lineas.codigart= =Articulos.codigart Articulos.codigart ON ONPedidos.numped Pedidos.numped= =Lineas.numped Lineas.numped WHERE WHEREfechaped fechapedBETWEEN BETWEEN'2006/05/15' '2006/05/15'AND AND'2006/05/30' '2006/05/30'

Marta Zorrilla

2009-2010

51

IMD IMD XVI XVI :: SELECT SELECT


B squedas Cualificadas. n Bsquedas Cualificadas. Cond. Cond. de de Combinaci Combinacin Autocombinaci n (Ejemplo) Autocombinacin (Ejemplo)

Una UnaAutocombinacin Autocombinacines esuna unacombinacin combinacinde deuna unatabla tablacon conella ellamisma. misma.

Localizar todos los pedidos que tienen varias lneas del mismo artculo. SELECT SELECTx.numped, x.numped,x.numlin, x.numlin,x.codigart x.codigart FROM FROMLineas Lineasx, x,Lineas Lineasyy WHERE WHEREx.numped x.numped = =y.numped y.numped AND AND x.numlin x.numlin<> <>y.numlin y.numlin AND ANDx.codigart x.codigart= =y.codigart y.codigart

Marta Zorrilla

2009-2010

52

IMD IMD XVI XVI :: SELECT SELECT


B squedas Cualificadas. n Bsquedas Cualificadas. Cond. Cond. de de Combinaci Combinacin Autocombinaci n (Ejemplo) Autocombinacin (Ejemplo)

Localizar todos los pedidos que tienen varias lneas del mismo artculo. SELECT SELECT x.numped, x.numped,x.numlin, x.numlin,x.codigart x.codigart FROM FROMLineas Lineasx, x,Lineas Lineasyy WHERE WHERE x.numped x.numped = =y.numped y.numped AND AND x.numlin x.numlin<> <>y.numlin y.numlin AND AND x.codigart x.codigart= =y.codigart y.codigart Informacin de proceso
Acceso X
Acceso X Acceso X

Acceso Y
Acceso Y Acceso Y

Marta Zorrilla

2009-2010

53

IMD IMD XVII XVII :: SELECT SELECT


B squedas Cualificadas. n Bsquedas Cualificadas. Cond. Cond. de de Combinaci Combinacin Combinaci n Externa Combinacin Externa (Ejemplo) (Ejemplo)

Una Una Combinacin Combinacin Externa Externa es es aquella aquella que que da da preferencia preferencia a a una una tabla tabla con con respecto respecto a a otra. otra. As, As, las las filas filas de de la la tabla tabla dominante dominante sern sern seleccionadas seleccionadasaunque aunquela lacondicin condicinde deenlace enlaceno nose sehaya hayaverificado. verificado. Listar todos los proveedores indicando, en su caso, los que han recibido algn pedido. SELECT SELECTProveedores.codigpro, Proveedores.codigpro,nombrpro, nombrpro,Pedidos.numped Pedidos.numped FROM FROMProveedores ProveedoresLEFT LEFTJOIN JOINPedidos Pedidos ON ON Proveedores.codigpro Proveedores.codigpro= =Pedidos.codigpro Pedidos.codigpro Preferencia a la tabla de la izquierda

SELECT SELECTProveedores.codigpro, Proveedores.codigpro,nombrpro, nombrpro,Pedidos.numped Pedidos.numped FROM FROMPedidos PedidosRIGHT RIGHTJOIN JOINProveedores Proveedores ON ON Proveedores.codigpro Proveedores.codigpro= =Pedidos.codigpro Pedidos.codigpro

Preferencia a la tabla de la derecha

Marta Zorrilla

2009-2010

54

IMD IMD XVII XVII :: SELECT SELECT


B squedas Cualificadas. n Bsquedas Cualificadas. Cond. Cond. de de Combinaci Combinacin Combinaci n Externa Combinacin Externa (Ejemplo (Ejemplo 2) 2)

En Enel elFROM FROMde deuna una Consulta Consultapueden pueden establecerse establecersepredicados. predicados.Estos Estosse seaplican aplican antes antes de de ejecutar ejecutar el el join, join, mientras mientras que que cuando cuando se se establecen establecen en en el el WHERE WHERE se se ejecutan ejecutanal alresultado resultadodel deljoin. join. El .. Elresultado resultadopuede puedeser serdistinto distintosi sila lacondicin condicinde dejoin joines esLEFT LEFTo oRIGHT RIGHT Listar todos los proveedores de Santander indicando, en su caso, los que han recibido algn pedido.
SELECT SELECTProveedores.codigpro, Proveedores.codigpro,nombrpro, nombrpro,Pedidos.numped Pedidos.numped FROM FROMPedidos PedidosLEFT LEFTJOIN JOINProveedores Proveedores ON ON Proveedores.codigpro Proveedores.codigpro= =Pedidos.codigpro Pedidos.codigpro AND ANDLocalpro='SANTANDER' Localpro='SANTANDER' SELECT SELECTProveedores.codigpro, Proveedores.codigpro,nombrpro, nombrpro,Pedidos.numped Pedidos.numped FROM FROMPedidos PedidosLEFT LEFTJOIN JOINProveedores Proveedores ON ON Proveedores.codigpro Proveedores.codigpro= =Pedidos.codigpro Pedidos.codigpro WHERE WHERELocalpro=SANTANDER Localpro=SANTANDER
Marta Zorrilla 2009-2010 55

IMD IMD XVIII XVIII :: SELECT SELECT


B squedas Cualificadas. Bsquedas Cualificadas. Cond. Cond. de de Subsentencias Subsentencias (Ejemplo de comparaci n) (Ejemplo de comparacin) La Lainstruccin instruccinSELECT SELECTpermite permitecontrastar contrastaruna unaexpresin expresinooun uncampo campocon conel elresultado resultado de otra instruccin (subsentencia) SELECT . A este contraste se le llama condicin de otra instruccin (subsentencia) SELECT. A este contraste se le llama condicinde de subsentencia y las dos instrucciones se llaman instrucciones imbricadas. A su vez, la subsentencia y las dos instrucciones se llaman instrucciones imbricadas. A su vez, la subsentencia subsentenciapuede puedeincluir incluiren ensu sucondicin condicinaaotra otrasubsentencia subsentenciayyas assucesivamente. sucesivamente. Las condiciones de subsentencia pueden adoptar una de las formas siguientes: Las condiciones de subsentencia pueden adoptar una de las formas siguientes:

exp exp operador_de_comparacin operador_de_comparacin{ALL {ALL| |[ANY [ANY| |SOME] SOME]}} (instruccin (instruccinSELECT) SELECT) exp exp [NOT] [NOT]IN IN (instruccin (instruccinSELECT) SELECT) [NOT] [NOT]EXISTS EXISTS (instruccin (instruccinSELECT) SELECT) Encontrar los artculos cuyo stock es mayor que toda cantidad pedida del mismo artculo. SELECT SELECTarticulos.codigart, articulos.codigart,descrart, descrart,stockart stockartFROM FROMArticulos Articulos WHERE WHEREstockart stockart> >ALL ALL(SELECT (SELECTunilin unilin FROM FROMLineas Lineas WHERE )) WHEREArticulos.codigart Articulos.codigart= =Lineas.codigart Lineas.codigart

Marta Zorrilla

2009-2010

56

IMD IMD XIX XIX :: SELECT SELECT


B squedas Cualificadas. . Bsquedas Cualificadas. Cond. Cond. de de Subsentencias Subsentencias. (Ejemplos (Ejemplos con con predicados predicados IN IN y y EXIST) EXIST)

Listar los artculos que no han sido pedidos entre el 24 de Septiembre y el 21 de Noviembre de 2006.

SELECT SELECTDISTINCT DISTINCTArticulos.codigart, Articulos.codigart,descrart descrart FROM FROMArticulos Articulos WHERE WHEREArticulos.codigart Articulos.codigartNOT NOTIN IN(SELECT (SELECTLineas.codigart Lineas.codigartFROM FROMLineas, Lineas,Pedidos Pedidos WHERE WHEREPedidos.numped Pedidos.numped= =Lineas.numped Lineas.numped AND ANDPedidos.fechaped Pedidos.fechaped BETWEEN )) BETWEEN'2006/09/24' '2006/09/24'AND AND'2006/11/21' '2006/11/21' Encontrar los proveedores de Madrid a los que se les ha realizado algn pedido entre el 24/09/2006 y el 21/11/2006 . SELECT SELECTDISTINCT DISTINCTProveedores.codigpro, Proveedores.codigpro,nombrpro nombrproFROM FROMProveedores Proveedores WHERE WHERE EXISTS EXISTS ((SELECT SELECT** FROM FROMPedidos Pedidos WHERE WHEREProveedores.codigpro Proveedores.codigpro= =Pedidos.codigpro Pedidos.codigpro AND )) ANDfechaped fechapedBETWEEN BETWEEN'2006/09/24' '2006/09/24'AND AND'2006/11/21' '2006/11/21' AND ANDlocalpro localpro= ='Madrid 'Madrid
Marta Zorrilla 2009-2010 57

IMD IMD XX XX :: SELECT SELECT


Funciones Funciones de de grupo grupo (Ejemplo) (Ejemplo)

COUNT(*) COUNT(*) COUNT( campo )) COUNT( campo

N N de de filas filas que que componen componen el grupo. el grupo. N N de de filas filas con con valor valor asignado al campo (nulos asignado al campo (nulos no nocuentan). cuentan). Suma Suma de de valores valores obtenidos obtenidos con la expresin en con la expresin en cada cada fila. fila. Media. Media. Mximo. Mximo. Mnimo. Mnimo. Desviacin Desviacintpica. tpica. Varianza. Varianza.

Con Con las las filas filas de de la la informacin informacin de de proceso proceso correspondiente correspondiente a a una una instruccin instruccin SELECT SELECT se se pueden pueden establecer establecergrupos. grupos. En En cada cada uno uno de de estos estos grupos, grupos, mediante mediantelas lasfunciones funcionesde degrupo, grupo,se se pueden puedenefectuar efectuarciertos ciertosclculos. clculos. Encontrar cuntos artculos hay registrados, el mximo y el mnimo precio unitario, el precio unitario medio y la valoracin del almacn.

SUM( exp )) SUM( exp

AVG( exp )) AVG( exp MAX( exp )) MAX( exp MIN( exp )) MIN( exp STDEV( exp )) STDEV( exp VAR( exp )) VAR( exp

SELECT codigart ))AS preunart ))AS SELECT COUNT( COUNT( codigart ASCantidad, Cantidad, MAX( MAX( preunart ASMax, Max, MIN( preunart ))AS preunart ))AS MIN( preunart ASMin, Min, AVG( AVG( preunart ASPrecio_medio, Precio_medio, SUM( preunart ** stockart ))AS SUM( preunart stockart ASValoracin Valoracin FROM FROMArticulos Articulos

Marta Zorrilla

2009-2010

58

IMD IMD XXI XXI :: SELECT SELECT


Funciones Funciones de de fecha fecha (Ejemplo) (Ejemplo)

DAY( fecha )) DAY( fecha MONTH )) MONTH(fecha (fecha YEAR )) YEAR(fecha (fecha

Devuelve Devuelve el el da da de de mes mes de de fecha. fecha. Devuelve Devuelveel elmes mesde defecha. fecha. Devuelve Devuelveel elao aode defecha. fecha.

Los Los datos datos de de tipo tipo fecha fecha son son almacenados almacenadoscomo comouna unaunidad unidadde de informacin. informacin. Cuando Cuando se se necesita necesita trabajar trabajar con con componentes componentes de de una una fecha, fecha,es espreciso precisoutilizar utilizarfunciones funciones de defecha. fecha.

DATEPART(dw, fecha ) ) Devuelve DATEPART(dw, fecha Devuelve el el da da de de la la semana correspondiente semana correspondiente aa fecha (el fecha (el 11 domingo, domingo, el 2 lunes, ...). el 2 lunes, ...).

Listar da, mes y ao de cada pedido, as como el da de la semana al que corresponden sus fechas. SELECT SELECTnumped, numped,fechaped, fechaped, DAY( fechaped ))as fechaped ))as DAY( fechaped asdia_mes, dia_mes,MONTH( MONTH( fechaped asmes, mes, YEAR( fechaped ))as fechaped ))as YEAR( fechaped asao, ao,DATEPART(dw, DATEPART(dw, fechaped asdia_sem dia_sem FROM FROMPedidos Pedidos

Marta Zorrilla

2009-2010

59

IMD IMD XXII XXII :: SELECT SELECT


Agrupamiento Agrupamiento de de datos datos (Ejemplo) (Ejemplo)

La La clusula clusula GROUP GROUP permite permite formar formar grupos grupos con con las las filas filas de de datos datos que que tengan tenganvalores valoresiguales igualespara paradeterminados determinadoscampos. campos. La La respuesta respuesta tiene tiene tantas tantas filas filas como como grupos grupos haya haya establecido establecido la la instruccin. instruccin.

Obtener el importe de cada pedido sin aplicar el IVA. SELECT (preunlin unilin) (1-desculin/100) ))as ** ** SELECTnumped, numped,SUM( SUM( (preunlin unilin) (1-desculin/100) asImporte Importe FROM FROMLineas Lineas GROUP GROUPBY BYnumped numped

Marta Zorrilla

2009-2010

60

IMD IMD XXIII XXIII :: SELECT SELECT


Agrupamiento Agrupamiento de de Datos. Datos. Cond. Cond. de de agrupamiento agrupamiento (Ejemplo) (Ejemplo)

Listar el importe, sin aplicar el IVA, de los pedidos que tienen ms de una lnea.

SELECT (preunlin unilin) (1-desculin/100) ))as ** ** SELECTnumped, numped,SUM( SUM( (preunlin unilin) (1-desculin/100) asImporte Importe FROM FROMLineas Lineas GROUP GROUPBY BYnumped numped HAVING ))> ** HAVINGCOUNT( COUNT( >1 1

Marta Zorrilla

2009-2010

61

IMD IMD XXII XXII :: SELECT SELECT


Agrupamiento Agrupamiento de de datos datos WITH WITH CUBE CUBE (Ejemplo) (Ejemplo)

El El operador operador CUBE CUBE mantiene mantiene los los grupos grupos formados formados por por GROUP GROUP BY BY yy adems ademsaade aadelos lossuperagregados superagregadospara paracada cadacolumna. columna. Obtener el n de unidades pedidas de cada artculo por pedido, el n total de uds pedidas por artculo y el n de unidades pedidas por pedido . SELECT SELECTdescrart, descrart,numped, numped,sum(unilin) sum(unilin)as asunidadesPedidas unidadesPedidas FROM FROMarticulos articulosinner innerjoin joinlineas lineason onarticulos.codigart=lineas.codigart articulos.codigart=lineas.codigart GROUP GROUPBY BYdescrart, descrart,numped numped WITH WITHCUBE CUBE; ;

Marta Zorrilla

2009-2010

62

IMD IMD XXII XXII :: SELECT SELECT


Agrupamiento Agrupamiento de de datos datos WITH WITH ROLLUP ROLLUP (Ejemplo) (Ejemplo)

El El operador operador ROLLUP ROLLUP mantiene mantiene los los grupos grupos formados formados por por GROUP GROUP BY BY yy adems ademsaade aadelos lossuperagregados superagregadosde dela laprimera primeracolumna columnadel delgroup groupby. by. Obtener el n de unidades pedidas de cada artculo por pedido y el n total de uds pedidas por artculo. SELECT SELECTdescrart, descrart,numped, numped,sum(unilin) sum(unilin)as asunidadesPedidas unidadesPedidas FROM FROMarticulos articulosinner innerjoin joinlineas lineason onarticulos.codigart=lineas.codigart articulos.codigart=lineas.codigart GROUP GROUPBY BYdescrart, descrart,numped numped WITH WITHROLLUP ROLLUP; ;

Marta Zorrilla

2009-2010

63

IMD IMD XXIV XXIV :: SELECT SELECT


Funciones n (Ejemplo) Funciones de de clasificaci clasificacin (Ejemplo)

Permiten Permiten establecer establecer un un valor valor de de categora categora para para cada cada fila fila devuelta devuelta de de una unaparticin. particin. Clasifica los pedidos por el nmero de lneas de pedido que tienen.

ROW_NUMBER() )) ROW_NUMBER()OVER OVER(<particin><orden> (<particin><orden> n n secuencial secuencial de de un un fila fila de de una una particin particin de de un un cjto de resultados. cjto de resultados. RANK() )) RANK()OVER OVER(<particin><orden> (<particin><orden> rango rango de de la la fila fila en en la la particin particin de de un un cjto cjto de de resultados. resultados. DENSE_RANK() )) DENSE_RANK()OVER OVER(<particin><orden> (<particin><orden> rango rango de de la la fila fila en en la la particin particin de de un un cjto cjto de de resultados sin espacio en la clasificacin. resultados sin espacio en la clasificacin. NTILE (n )) NTILE (nentero) entero)OVER OVER(<particin><orden> (<particin><orden> Distribuye Distribuye las las filas filas en en los los grupos grupos especificados especificados por n entero. por n entero.

SELECT SELECT numped, numped,numlineas, numlineas, row_number() row_number()over over(order (orderby bynumlineas) numlineas)AS ASnum_fila, num_fila, rank rank() ()over over(order (orderby bynumlineas) numlineas)AS ASranking, ranking, dense_rank() dense_rank()over over(order (orderby bynumlineas) numlineas)AS ASdense_ranking, dense_ranking, ntile(4) ntile(4)over over(order (orderby bynumlineas) numlineas)as asquartil quartil FROM FROM(SELECT (SELECT numped, numped,count(*) count(*)numlineas numlineasfrom fromlineas lineasgroup groupby bynumped) numped)as asresultado resultado
Marta Zorrilla 2009-2010 64

IMD IMD XXV XXV :: SELECT SELECT


Ordenaci n del Ordenacin del Resultado Resultado (Ejemplo) (Ejemplo)

[ORDER [ORDERBY BYcolum1 colum1{{[ASC] [ASC]| |DESC DESC}}[, [,colum2 colum2{{[ASC] [ASC]| |DESC DESC}, },.... ....] ]] ] colum1, colum1,colum2, colum2,...: ...:son sonnombres nombres de de elementos elementos (campos, (campos, expresiones expresiones o ofunciones) funciones)de dela lalista listade deseleccin seleccino ola laposicin posicinque queocupan ocupanen enella. ella. ASC: ASC:quiere quieredecir decirordenacin ordenacinascendente ascendente(opcin (opcinpor pordefecto) defecto)yyDESC 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 lnea. SELECT SELECTnumped, numped,numlin numlin FROM FROMLineas Lineas ORDER ORDERBY BY1 1DESC, DESC,2 2DESC DESC

Marta Zorrilla

2009-2010

65

IMD IMD XXVI XXVI :: SELECT SELECT


Guardar Guardar Resultado Resultado en en una una Tabla Tabla (Ejemplo) (Ejemplo)

INTO INTOtabla_adicional tabla_adicional tabla_adicional : :es tabla_adicional esel elnombre nombrede dela latabla tablaa agenerar, generar,que queha hade deser ser nico. nico.Esta Estatabla tablahereda heredael elesquema esquemade dela lalista listade deseleccin seleccin(nombres (nombres campos, campos,tipos tiposde dedatos, datos,...). ...).

Crear una tabla temporal, llamada t1, para guardar el importe, sin aplicar el IVA, de los pedidos que tienen ms de una lnea. SELECT (preunlin unilin) (1-desculin/100) ))as ** ** SELECTnumped, numped,SUM( SUM( (preunlin unilin) (1-desculin/100) asImporte Importe INTO INTO#t1 #t1 FROM FROMLineas Lineas GROUP GROUPBY BYnumped numped HAVING ** ))> HAVINGCOUNT( COUNT( >1 1

Marta Zorrilla

2009-2010

66

IMD IMD XXVII XXVII :: SELECT SELECT


Uni n de Unin de Sentencias Sentencias (Ejemplo) (Ejemplo)

Permite Permitecombinar combinarlos losresultados resultadosde dedos doso oms msconsultas. consultas.Para Paraello ellose se requiere .. requiereel eloperador operadorUNION UNION[ALL] [ALL]

Listar todos los proveedores de las tablas Proveedores y Proveedores_Anulados ordenados por su cdigo. SELECT SELECTcodigpro, codigpro,nombrpro, nombrpro,localpro localpro FROM FROMProveedores Proveedores UNION UNION SELECT SELECTcodigp, codigp,nombrp, nombrp,localp localp FROM FROMProveedores_Anulados Proveedores_Anulados ORDER ORDERBY BY1 1

Marta Zorrilla

2009-2010

67

IMD IMD XXVIII: XXVIII: SELECT SELECT


EXCEPT EXCEPT e e INTERSECT INTERSECT de de Sentencias Sentencias (Ejemplo) (Ejemplo)

EXCEPT EXCEPTDevuelve Devuelvelos losvalores valoresdistintos distintosde dela laprimera primeraconsulta consultaque queno no son sondevueltos devueltospor porla lasegunda segundaconsulta. consulta. INTERSECT INTERSECTDevuelve Devuelvelos losdistintos distintosvalores valoresque queson sondevueltos devueltospor por ambas ambasconsultas. consultas. Listar los clientes exceptuando aquellos que son tambin Proveedores. SELECT SELECTcodigcli, codigcli,nombrcli, nombrcli,localcli localcli FROM FROMclientes clientes EXCEPT EXCEPT SELECT SELECTcodigpro, codigpro,nombrpro, nombrpro,localpro localpro FROM FROMProveedores Proveedores

Marta Zorrilla

2009-2010

68

IMD IMD XXIX XXIX :: SELECT SELECT


Uso Uso de de funciones funciones (Ejemplo) (Ejemplo)

Obtener el precio y la descripcin de los artculos haciendo uso de la funcin dame_precio_articulos(@codigo_art). SELECT SELECTcodigart codigartas asCodigo, Codigo,descrart descrartas asDescripcion, Descripcion, dbo.dame_precio_articulo(codigart) dbo.dame_precio_articulo(codigart)as asPrecio Precio FROM FROMARTICULOS ARTICULOS

Obtener los artculos haciendo uso de la funcin dame_precio_articulos cuyo precio sea superior a 190 SELECT SELECTcodigart codigartas asCodigo, Codigo,descrart descrartas asDescripcion, Descripcion,preunart preunartas asPrecio Precio FROM FROMARTICULOS ARTICULOS WHERE WHEREdbo.dame_precio_articulo(codigart) dbo.dame_precio_articulo(codigart)> >190 190

Marta Zorrilla

2009-2010

69

IMD IMD XXX: XXX: INSERT INSERT con con SELECT 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 INSERTINTO INTOproveedores proveedores SELECT SELECTcodigpro, codigpro,cifpro, cifpro,nombrpro, nombrpro,direcpro, direcpro,cpostpro, cpostpro,localpro, localpro, telefpro, telefpro,faxpro, faxpro,procepro procepro FROM FROMprov_tmp prov_tmp

Marta Zorrilla

2009-2010

70

IMD IMD XXXI: XXXI: UPDATE, UPDATE, DELETE DELETE con con SELECT SELECT Actualizar los precios en un 2% de los artculos del grupo Bebidas. UPDATE UPDATEarticulo articulo SET SETpreunart preunart= =preunart preunart**1.02 1.02 WHERE WHEREtipo_id tipo_idIN IN (( SELECT SELECTtipo_id tipo_id FROM FROMTipoArticulo TipoArticulo WHERE WHEREtipo_nombre tipo_nombre= ='Bebidas') 'Bebidas') Borrar los pedidos de los proveedores no comunitarios DELETE DELETEFROM FROMpedidos pedidos FROM FROMpedidos pedidosINNER INNERJOIN JOIN proveedores proveedoresON ONproveedores.codigpro proveedores.codigpro= =pedidos.codigpro pedidos.codigpro WHERE WHERE procepro procepro= ='No 'NoUE' UE'
Marta Zorrilla 2009-2010 71

IMD IMD XXXII: XXXII: SELECT, SELECT, UPDATE UPDATE con con CASE CASE Listar los artculos mostrando su precio categorizado por alto, bajo y no establecido. SELECT SELECT precio' precio'= = CASE CASE WHEN WHENpreunart preunartIS ISNULL NULLTHEN THENNo Noestablecido' establecido' WHEN WHENpreunart preunart< <200 200THEN THENBajo Bajo ELSE ELSEAlto' Alto' END ,, END descrart descrart FROM FROMarticulos articulos Actualizar los artculos con precio < 10 con 5% y los > =10 con un 7% UPDATE UPDATE articulos articulosSET SETpreunart= preunart= CASE CASE WHEN WHENpreunart preunart<10 <10THEN THENpreunart*1.05 preunart*1.05 ELSE ELSEpreunart*1.07 preunart*1.07 END END
Marta Zorrilla 2009-2010 72

IMD IMD XXXIII XXXIII :: WITH WITH (Ejemplo (Ejemplo 1) 1)

WITH WITH vista vistatemporal temporalen enla laque queapoyarse apoyarsepara pararealizar realizarotro otroSELECT SELECT

Listar los pedidos cuyo monto es superior a la media WITH WITHtotal_pedidos total_pedidos(numped, (numped,valor) valor)as as ((SELECT SELECT numped, numped,sum(unilin*preunlin) sum(unilin*preunlin) from fromlineas lineas group groupby bynumped numped )) SELECT SELECT numped, numped,valor valor from fromtotal_pedidos total_pedidos where wheretotal_pedidos.valor>= total_pedidos.valor>= ((select selectavg(valor) avg(valor)from fromtotal_pedidos) total_pedidos)

Marta Zorrilla

2009-2010

73

IMD IMD XXXIII XXXIII :: WITH WITH (Ejemplo (Ejemplo 2) 2)

Listar los pedidos que se encuentran en la posicin 50 a 60 segn el orden de fecha de pedido. WITH WITHpedidosOrdenados pedidosOrdenadosAS AS (SELECT (SELECTnumped, numped,fechaped, fechaped, ROW_NUMBER() ROW_NUMBER()OVER OVER(order (orderby byfechaped) fechaped)as asRowNumber RowNumber FROM FROMpedidos) pedidos) SELECT SELECT** FROM FROMpedidosOrdenados pedidosOrdenados WHERE WHERERowNumber RowNumberbetween between50 50and and60; 60;

Marta Zorrilla

2009-2010

74

IMD IMD XXXIII XXXIII :: WITH WITH (Ejemplo (Ejemplo con con recursividad) recursividad) Listar los jefes con las personas a su cargo, indicando el nivel jerrquico WITH WITHJefeAQuienReportas(supervisor, JefeAQuienReportas(supervisor,dni, dni,nivel) nivel)AS AS (( SELECT SELECTsupervisor, supervisor,dni, dni,0 0AS ASnivel nivel empleados(dni,,supervisor, dep) FROM FROMempleados empleados WHERE WHEREsupervisor supervisorIS ISNULL NULL UNION UNIONALL ALL SELECT SELECTe.supervisor, e.supervisor,e.dni, e.dni,nivel nivel+ +1 1 FROM FROMempleados empleadose e INNER INNERJOIN JOINJefeAQuienReportas JefeAQuienReportasd d ON ONe.supervisor e.supervisor= =d.dni d.dni )) SELECT SELECTsupervisor, supervisor,dni, dni,nivel nivel FROM FROMJefeAQuienReportas JefeAQuienReportas; ;
Marta Zorrilla 2009-2010 75

Lenguaje de de definici definicin de Lenguaje n de datos datos SQL Server Server 2005 2005 SQL (Parte 2) 2) (Parte

CREATE CREATE VIEW VIEW Para crear una vista en la base de datos. Su sintaxis es: CREATE CREATEVIEW VIEW[ [< <nombreBD nombreBD> >. .] ][ [< <propietario propietario> >. .] ]nombre nombre[ [((campo campo[ [,...n ,...n] ]))] ] [ [WITH WITH<view_attribute> <view_attribute>[ [,...n ,...n] ]] ] AS AS Instruccin_Select Instruccin_Select [ [WITH WITHCHECK CHECKOPTION OPTION] ]
nombreBD : :es nombreBD esel elnombre nombrede dela labase basede dedatos datosen enla laque quese secrea. crea. propietario : :cuenta propietario cuentade deusuario usuarioque quecrea creala lavista vista nombre : :es nombre esel elnombre nombrede dela lavista vistaque quese seva vaaacrear. crear. campo : :ee ssel campo elnombre nombreque quese seva vaaautilizar utilizarpara parauna unacolumna columnaen enuna unavista. vista. instruccin_Select: instruccin_Select:consulta consultaaatravs travsde dela lacul culse sedefine definela lavista vista view_attribute: view_attribute:toma tomauno unode delos lossiguientes siguientesvalores valores
[ [ENCRYPTION ENCRYPTION]:]:evita evitaque quela lavista vistase sepublique publiquecomo comoparte partede dela larplica rplicade deSQL SQLServer Server [ [SCHEMABINDING SCHEMABINDING]:]:enlaza enlazala lavista vistaal alesquema esquemade delas lastablas tablassubyacentes. subyacentes.Cuando Cuandose seespecifica, especifica,las lastablas tablasbase base no se pueden modificar de una forma que afecte a la definicin de la vista. no se pueden modificar de una forma que afecte a la definicin de la vista. [ [VIEW_METADATA VIEW_METADATA]:]:Especifica Especificaque quela lainstancia instanciade deSQL SQLServer Serverdevolver devolveraalas lasAPI APIde deDB-Library, DB-Library,ODBC ODBCyy OLE OLEDB DBla lainformacin informacinde demetadatos metadatossobre sobrela lavista vistaen envez vezde delas lastablas tablasbase. base. [ [WITH WITHCHECK CHECKOPTION OPTION] ]: :Exige Exigeque quetodas todaslas lasinstrucciones instruccionesde demodificacin modificacinde dedatos datosejecutadas ejecutadascontra contrala la vista se adhieran a los criterios establecidos en la instruccin Select. vista se adhieran a los criterios establecidos en la instruccin Select. Marta Zorrilla 2009-2010 77

CREATE CREATE VIEW VIEW .. Ejemplo Ejemplo

CREATE CREATEVIEW VIEWdbo.EncabezadoPedido dbo.EncabezadoPedido AS AS SELECT SELECT dbo.Pedidos.numped, dbo.Pedidos.numped,dbo.Pedidos.fechaped, dbo.Pedidos.fechaped,dbo.Pedidos.codigpro, dbo.Pedidos.codigpro, dbo.Pedidos.ivaped, dbo.Pedidos.ivaped,dbo.Pedidos.fentrped, dbo.Pedidos.fentrped,dbo.Proveedores.nombrpro, dbo.Proveedores.nombrpro, dbo.Proveedores.direcpro, dbo.Proveedores.direcpro,dbo.Proveedores.cpostpro, dbo.Proveedores.cpostpro,dbo.Proveedores.localpro, dbo.Proveedores.localpro, dbo.Proveedores.telefpro, dbo.Proveedores.telefpro,dbo.Proveedores.faxpro, dbo.Proveedores.faxpro, dbo.Proveedores.procepro, dbo.Proveedores.procepro,dbo.Proveedores.emailpro, dbo.Proveedores.emailpro,dbo.Proveedores.cifpro dbo.Proveedores.cifpro FROM dbo.Proveedores FROM dbo.ProveedoresINNER INNERJOIN JOIN dbo.Pedidos dbo.PedidosON ONdbo.Proveedores.codigpro dbo.Proveedores.codigpro= =dbo.Pedidos.codigpro dbo.Pedidos.codigpro

Marta Zorrilla

2009-2010

78

Vistas Vistas actualizables, actualizables, vistas vistas materializadas materializadas Vista Vistaactualizable actualizablesi: si: El ElFROM FROMsolo soloafecta afectaa auna unarelacin relacin El ElSELECT SELECTsolo solotiene tienenombres nombresde deatributos atributosde dela larelacin relacinyyno notiene tieneninguna ninguna expresin expresinde devalor valoragregado agregadoni niespecificacin especificacinde deDISTINCT DISTINCT Cualquier Cualquieratributo atributoque queno noaparezca aparezcaen enla laclusula clusulaSELECT SELECTpuede puededefinirse definirse como comonulo nulo La Laconsulta consultano notiene tieneclusulas clusulasGROUP GROUPBY BYni niHAVING HAVING

Vista Vistamaterializada materializada(Indexed (Indexedviews views SCHEMABINDING SCHEMABINDING)) La Lavista vistaes escomputada computadayyalmacenada. almacenada. Se Secrea creaal aldefinir definirun unndice ndicecluster clustersobre sobreella. ella. Son Sonadecuadas adecuadaspara paraconsultas consultasfrecuentes frecuentessobre sobredatos datosagregados agregadossobre sobre muchas muchasfilas. filas. No Nose seaconsejan aconsejanpara paradatos datosque quecambien cambienfrecuentemente. frecuentemente.

Marta Zorrilla

2009-2010

79

Vista Vista materializable materializable (ejemplo) (ejemplo)

CREATE CREATEVIEW VIEWUdsPedidas UdsPedidasWITH WITHSCHEMABINDING SCHEMABINDINGas as SELECT SELECT A.descrart, A.descrart,sum(unilin) sum(unilin)as asunidadesPedidas, unidadesPedidas,count_big(*) count_big(*)as asnro_orden nro_orden FROM FROMdbo.articulos dbo.articulosas asA Ainner innerjoin joindbo.lineas dbo.lineasas asL Lon onA.codigart=L.codigart A.codigart=L.codigart GROUP GROUPBY BY A.descrart; A.descrart; CREATE CREATEUNIQUE UNIQUECLUSTERED CLUSTEREDINDEX INDEXcix_MiVistaMaterializada cix_MiVistaMaterializada ON ONdbo.UdsPedidas(descrart); dbo.UdsPedidas(descrart);

Marta Zorrilla

2009-2010

80

CREATE CREATE PROCEDURE PROCEDURE Para crear un procedimiento en la base de datos. Su sintaxis es: CREATE CREATEPROC PROC[ [EDURE EDURE] ]nombre nombre [ [{{@ parametros tipo_dato @parametros tipo_dato}} [ [= =valor_por_defecto valor_por_defecto] ][ [OUTPUT OUTPUT] ] ] ][ [,...n ,...n] ] [ [WITH WITH {{RECOMPILE RECOMPILE| |ENCRYPTION ENCRYPTION| |RECOMPILE RECOMPILE, ,ENCRYPTION ENCRYPTION}}] ] [ [FOR FORREPLICATION REPLICATION] ] AS ASinstrucciones_sql instrucciones_sql[ [...n ...n] ]
nombre : :es nombre esel elnombre nombredel delprocedimiento procedimientoque quese seva vaaacrear. crear. parmetros : :parmetros parmetros parmetrosde deentrada entradayysalida salidadel delprocedimiento procedimiento tipo_dato : :tipo tipo_dato tipode dedato datoasociado asociadoal alparmetro. parmetro. valor_por_defecto : :valor valor_por_defecto valorasignado asignadopor pordefecto defectoal alparmetro parmetro instrucciones_sql: instrucciones_sql:instrucciones instruccionesSQL SQL

Marta Zorrilla

2009-2010

81

CREATE metros CREATE PROC. PROC. Ejemplo Ejemplo procedimiento procedimiento sin sin par parmetros

CREATE CREATEPROCEDURE PROCEDUREdameProveedores dameProveedores AS AS SELECT SELECTcodigpro, codigpro,nombrpro, nombrpro,direcpro, direcpro,cpostpro, cpostpro,localpro, localpro,telefpro telefpro FROM Proveedores; FROM Proveedores; Go Go exec execdameProveedores; dameProveedores;

Marta Zorrilla

2009-2010

82

CREATE metros CREATE PROC. PROC. Ejemplo Ejemplo 2. 2. procedimiento procedimiento con con par parmetros
CREATE ipc CREATEPROCEDURE PROCEDUREupd_precio_articulo upd_precio_articulo @ @ ipcnumeric(3,2) numeric(3,2) AS AS BEGIN BEGINTRANSACTION TRANSACTION update updatearticulos articulosset setpreunart preunart= =preunart preunart+ +(preunart*@ipc/100) (preunart*@ipc/100)where wherepreunart preunartis isnot notnull null if if@@ERROR @@ERROR<> <>00 begin begin ROLLBACK ROLLBACKTRANSACTION TRANSACTION RAISERROR RAISERROR( ('No 'Nose sehan hanmodificado modificadolos losprecios,16,1) precios,16,1) RETURN RETURN end end COMMIT COMMITTRANSACTION TRANSACTION Go Go exec execupd_precio_articulo upd_precio_articulo3.2 3.2

Marta Zorrilla

2009-2010

83

CREATE metros. CONTROL CREATE PROC. PROC. Ejemplo Ejemplo 2. 2. procedimiento procedimiento con con par parmetros. CONTROL DE DE ERRORES ERRORES
CREATE ipc CREATEPROCEDURE PROCEDUREupd_precio_articulo upd_precio_articulo @ @ ipcnumeric(3,2) numeric(3,2) AS AS BEGIN BEGINTRY TRY BEGIN BEGINTRANSACTION TRANSACTION update updatearticulos articulosset setpreunart preunart= =preunart preunart+ +(preunart*@ipc/100) (preunart*@ipc/100) where wherepreunart preunartis isnot notnull null COMMIT COMMITTRANSACTION TRANSACTION END TRY END TRY BEGIN BEGINCATCH CATCH ROLLBACK ROLLBACKTRANSACTION TRANSACTION RAISERROR ( RAISERROR ('No 'Nose sehan hanmodificado modificadolos losprecios,16,1) precios,16,1) END CATCH END CATCH RETURN RETURN exec execupd_precio_articulo upd_precio_articulo3.2 3.2

Marta Zorrilla

2009-2010

84

CREATE CREATE FUNCTION FUNCTION Para crear una funcin escalar en la base de datos. Se pueden usar en el SELECT. Su sintaxis es: CREATE . .] ]nombre CREATEFUNCTION FUNCTION[ [propietario propietario nombre (([ [{{@parametro [AS] tipo_dato [ = @parametro [AS] tipo_dato [ =valor_por_defecto valor_por_defecto] ]}}[ [,...n ,...n] ]] ])) RETURNS RETURNStipo_dato_valor_retorno tipo_dato_valor_retorno AS AS BEGIN BEGIN --cuerpo --cuerpode dela lafuncin, funcin,TSQL TSQL RETURN RETURNvalor_retorno valor_retorno END END
propietario : :cuenta propietario cuentade deusuario usuarioque quecrea creala lafuncin funcin nombre : :es nombre esel elnombre nombrede dela lafuncin funcinque quese seva vaaacrear. crear. parmetro : :parmetros parmetro parmetrosde deentrada entradade dela lafuncin funcin tipo_dato : :tipo tipo_dato tipode dedato datoasociado asociadoaacada cadaparmetro parmetro valor_por_defecto : :valor valor_por_defecto valorasignado asignadopor pordefecto defectoal alparmetro parmetro tipo_dato_valor_retorno : :tipo tipo_dato_valor_retorno tipode dedato datoasociado asociadoal alvalor valorde deretorno. retorno. valor_retorno : :valor valor_retorno valorde deretorno retornode dela lafuncin funcin
Marta Zorrilla 2009-2010 85

CREATE CREATE FUNCTION FUNCTION (2) (2) Para crear una funcin que devuelve una tabla en la base de datos. Se pueden usar en el SELECT Su sintaxis es: CREATE . .] ]nombre CREATEFUNCTION FUNCTION[ [propietario propietario nombre (([ [{{@parametro @parametro[AS] [AS]tipo_dato tipo_dato[ [= =valor_por_defecto valor_por_defecto] ]}}[ [,...n ,...n] ]] ])) RETURNS RETURNS@variable_retorno @variable_retornoTABLE TABLE< <definicion_tabla definicion_tabla> > AS AS BEGIN BEGIN --cuerpo --cuerpode dela lafuncin, funcin,TSQL TSQL RETURN RETURN END END
propietario : :cuenta propietario cuentade deusuario usuarioque quecrea creala lafuncin funcin nombre : :es nombre esel elnombre nombrede dela lafuncin funcinque quese seva vaaacrear. crear. parmetro : :parmetros parmetro parmetrosde deentrada entradade dela lafuncin funcin tipo_dato : :tipo tipo_dato tipode dedato datoasociado asociadoaacada cadaparmetro parmetro valor_por_defecto : :valor valor_por_defecto valorasignado asignadopor pordefecto defectoal alparmetro parmetro tipo_dato_valor_retorno : :tipo tipo_dato_valor_retorno tipode dedato datoasociado asociadoal alvalor valorde deretorno. retorno. variable_retorno : :variable variable_retorno variablede deretorno retornode dela lafuncin funcin definicion_tabla: definicion_tabla:definicin definicinde dela latabla tablaque quedevuelve devuelvela lafuncin funcin
2009-2010

Marta Zorrilla

86

CREATE n escalar CREATE FUNCTION. FUNCTION. Ejemplo Ejemplo funci funcin escalar CREATE CREATEFUNCTION FUNCTIONCalcular_Pedido Calcular_Pedido (@codigo (@codigoint) int) RETURNS decimal (10,2) RETURNS decimal (10,2) AS AS BEGIN BEGIN DECLARE DECLARE@precio @preciomoney money DECLARE @iva float DECLARE @iva float SELECT SELECT@precio= @precio=sum(totallin) sum(totallin)from fromlineas lineasWHERE WHEREnumped=@codigo numped=@codigo SELECT SELECT@iva=ivaped @iva=ivapedfrom frompedidos pedidosWHERE WHEREnumped=@codigo numped=@codigo SET SET@precio= @precio=(@precio* (@precio*(@iva/100))+@precio (@iva/100))+@precio RETURN RETURN@precio @precio END END GO GO ---Ejecucin Ejecucin SELECT SELECTdbo. dbo.Calcular_Pedido Calcular_Pedido(1) (1)
Marta Zorrilla 2009-2010 87

CREATE CREATE FUNCTION. FUNCTION. Ejemplo Ejemplo tabla tabla

CREATE CREATEFUNCTION FUNCTIONPedidosPorProveedor PedidosPorProveedor (@codigo (@codigochar(4)) char(4)) RETURNS RETURNSTABLE TABLE AS AS RETURN numped ))numero , ,nombrpro RETURN(SELECT (SELECTcount( count( numped numero nombrpro FROM FROMpedidos pedidosp, p,proveedores proveedorespr pr WHERE WHEREpr.codigpro=@codigo pr.codigpro=@codigoand and p.codigpro p.codigpro= =pr.codigpro pr.codigpro GROUP )) GROUPBY BYnombrpro nombrpro GO GO ---Ejecucin Ejecucin SELECT SELECT**from fromdbo.PedidosPorProveedor(0010) dbo.PedidosPorProveedor(0010)

Marta Zorrilla

2009-2010

88

CREATE CREATE FUNCTION. FUNCTION. Ejemplo Ejemplo tabla tabla

CREATE CREATEFUNCTION FUNCTIONPendientePago PendientePago (@fecha (@fechadatetime) datetime) RETURNS RETURNS@Pagos @PagosTABLE TABLE(numped (numpedint intprimary primarykey, key, cantidad cantidadfloat floatNOT NOTNULL, NULL, fechaped fechapeddatetime) datetime) AS AS BEGIN BEGIN INSERT INSERT@Pagos @Pagos SELECT SELECTnumped, numped, dbo.calcular_pedido(numped), dbo.calcular_pedido(numped),fechaped fechaped FROM FROMpedidos pedidos WHERE WHEREfecpago fecpagois isnull nullor orfecpago>=@fecha fecpago>=@fecha RETURN RETURN END END GO GO ---Ejecucin Ejecucin SELECT SELECT**from fromdbo.PendientePago(getdate()) dbo.PendientePago(getdate())

Marta Zorrilla

2009-2010

89

BD Activas
Los triggers DML son procesos predefinidos que entran en accin en respuesta a eventos especficos de manipulacin de datos (insert, update, delete). Generalmente se utilizan para: recoger restricciones complejas automatizar procesos anotar acciones (log) En SQL Server 2005: - se pueden definir varios triggers para el mismo evento (definir orden de ejecucin sp_settriggerorder) - slo puede haber un trigger INSTEAD OF por tipo de operacin - crean tablas inserted y deleted - !Ojo en su programacin pueden afectar a una o varias filas se ejecutan transaccionalmente, si hay error se debe gestionar el ROLLBACK
Marta Zorrilla 2009-2010 90

BD Activas (y 2)

Tambin hay triggers DDL, que entran en accin en respuesta a eventos de definicin (ALTER, CREATE, DROP) Se utilizan para tareas administrativas como auditar y regular operaciones de BD ( evitar / registrar cambios en el schema, exigir reglas en la definicin del schema,..) En SQL Server 2005: -No crean tablas inserted y deleted -No hay desencadenador INSTEAD OF -Trabajar con funcin EVENTDATA (Devuelve informacin acerca de los eventos de base de datos o servidor)

Marta Zorrilla

2009-2010

91

CREATE CREATE TRIGGER TRIGGER DML DML Para crear un desencadenador en una tabla de la base de datos. Su sintaxis es: CREATE CREATETRIGGER TRIGGERnombre nombre ON { tabla | vista } ON { tabla | vista } {{ {{{{FOR FOR | |AFTER AFTER| |INSTEAD INSTEADOF OF}}{{[ [INSERT INSERT] ][ [, ,] ][ [UPDATE UPDATE] ][ [, ,] ][ [DELETE DELETE] ]}} [ [NOT NOTFOR FORREPLICATION REPLICATION] ] AS AS [ [{{IF IFUPDATE UPDATE((campo campo)) [ [{{AND campo AND| |OR OR}}UPDATE UPDATE(( campo))] ] [ [...n ...n] ] }}] ] instrucciones_sql instrucciones_sql[ [...n ...n] ] }} }}
nombre : :es nombre esel elnombre nombredel deldesencadenador desencadenadorque quese seva vaaacrear. crear. tabla/vista : :es tabla/vista esel elnombre nombrede deuna unatabla/vista tabla/vistasobre sobrela laque quese secrea. crea. campo : :campo campo campode dela latabla tablaoovista vistaafectada afectadapor porel eldesencadenador desencadenador. . instrucciones_sql: instrucciones_sql:reglas reglasde denegocio negocioque quese serequieren requierenespecificar especificarpor pormedio mediode deSQL SQL
Marta Zorrilla 2009-2010 92

CREATE CREATE TRIGGER TRIGGER (Ej. (Ej. 1). 1).

No pedir un artculo descatalogado

CREATE CREATE TRIGGER TRIGGERtr_lineas tr_lineasON ONdbo.Lineas dbo.LineasAFTER AFTER INSERT, INSERT,UPDATE UPDATE AS BEGIN AS BEGIN DECLARE DECLARE@valor @valorint int DECLARE @errmsg DECLARE @errmsg char(255) char(255) SELECT SELECT@valor=count(*) @valor=count(*)FROM FROMinserted inserted WHERE dbo.ArticuloDescatalogado(codigart)!=0 WHERE dbo.ArticuloDescatalogado(codigart)!=0 IF IF(@valor) (@valor)> >00begin begin set set@errmsg @errmsg= ='No 'Nopuede puedeseleccionar seleccionarun unartculo artculodescatalogado' descatalogado' RAISERROR RAISERROR( ( @errmsg,16,1) @errmsg,16,1) ROLLBACK TRANSACTION ROLLBACK TRANSACTION RETURN RETURN END END END END

Marta Zorrilla

2009-2010

93

CREATE CREATE TRIGGER. TRIGGER. Ej. Ej. 2 2


CREATE CREATETRIGGER TRIGGERtr_articulos tr_articulosON ONarticulos articulos FOR UPDATE FOR UPDATE AS ASBEGIN BEGIN ififupdate(stockart) update(stockart)BEGIN BEGIN DECLARE @v_codigart DECLARE @v_codigartchar(6) char(6) DECLARE @v_texto varchar(200) DECLARE @v_texto varchar(200)

Notificar si el stock alcanza el mnimo establecido

DECLARE DECLARE@cursor_insert @cursor_insertCURSOR CURSOR SET @cursor_insert = CURSOR SET @cursor_insert = CURSORFOR FOR SELECT codigart FROM inserted SELECT codigart FROM inserted WHERE WHEREstockart<=stockmin stockart<=stockmin OPEN @cursor_insert OPEN @cursor_insert FETCH FETCHNEXT NEXTFROM FROM@cursor_insert @cursor_insertINTO INTO@v_codigart @v_codigart WHILE WHILE@@FETCH_STATUS=0 @@FETCH_STATUS=0 BEGIN BEGIN set set@v_texto='Stock @v_texto='Stockminimo minimoalcanzado alcanzadoen enarticulo articulo' '++@v_codigart @v_codigart insert into eventos (fecha, motivo) values (getdate(), @v_texto) insert into eventos (fecha, motivo) values (getdate(), @v_texto) FETCH FETCHNEXT NEXTFROM FROM@cursor_insert @cursor_insertINTO INTO@v_codigart @v_codigart END END END END CLOSE CLOSE@cursor_insert @cursor_insert DEALLOCATE DEALLOCATE@cursor_insert @cursor_insert END END

Marta Zorrilla

2009-2010

94

CREATE CREATE TRIGGER. TRIGGER. Ej. Ej. 3 3


CREATE CREATETRIGGER TRIGGERtr_articulos tr_articulosON ONarticulos articulos FOR UPDATE FOR UPDATE AS ASBEGIN BEGIN ififUPDATE( stockart ) )BEGIN UPDATE( stockart BEGIN

Notificar si el stock alcanza el mnimo establecido

INSERT INSERTINTO INTOeventos eventos(fecha, (fecha,motivo) motivo) SELECT getdate(), 'Stock minimo SELECT getdate(), 'Stock minimoalcanzado alcanzado' '++codigart codigartFROM FROMinserted inserted WHERE stockart<=stockmin WHERE stockart<=stockmin END END END END

Mejor evitar el uso de cursores !!! Cdigo ms eficiente trabaja el motor de almacenamiento y el optimizador para el conjunto de filas y no para cada una

Marta Zorrilla

2009-2010

95

CREATE CREATE TRIGGER. TRIGGER. Ej. Ej. 4 4

Realizar borrados lgicos

CREATE CREATETRIGGER TRIGGERtrd_MiTabla trd_MiTablaon onMiTabla MiTabla INSTEAD INSTEADOF OFDELETE DELETE AS AS IF IF@@ROWCOUNT @@ROWCOUNT= =0 0 RETURN RETURN UPDATE UPDATEMiTabla MiTablaSET SETcol_borrada col_borrada= =S' S' FROM FROMMiTabla MiTablaJOIN JOINdeleted deletedd dON ONd.PK_ID d.PK_ID= =MiTabla.PK_ID MiTabla.PK_ID

Marta Zorrilla

2009-2010

96

CREATE CREATE TRIGGER. TRIGGER. Ej. Ej. 5 5

Insertar datos a travs de una vista que incluye informacin de dos tablas

CREATE CREATETRIGGER TRIGGERtri_rellena tri_rellenaON ONVistaCompleta VistaCompleta INSTEAD INSTEADOF OFINSERT INSERTAS AS IF IF@@ROWCOUNT @@ROWCOUNT= =0 0 RETURN RETURN INSERT INSERTEmpleadoDatos EmpleadoDatos SELECT SELECT EmpleadoID, EmpleadoID,Tfno Tfno FROM FROM inserted inserted INSERT INSERTEmpleadoDireccion EmpleadoDireccion SELECT SELECT EmpleadoID, EmpleadoID,Direccion, Direccion,Ciudad Ciudad FROM FROMinserted inserted go go

Marta Zorrilla

2009-2010

97

CREATE CREATE TRIGGER TRIGGER DDL DDL Para crear un desencadenador DDL en la base de datos o servidor. Su sintaxis es: CREATE CREATETRIGGER TRIGGERnombre nombre ON { ALL SERVER | DATABASE ON { ALL SERVER | DATABASE}} [ [WITH WITH<ddl_trigger_option> <ddl_trigger_option>[ [,...n ,...n] ]] ] {{FOR FOR| |AFTER AFTER}}{{tipo_evento tipo_evento}}[ [,...n ,...n] ] AS AS{{instrucciones_sql instrucciones_sql [ [; ;] ][ [,...n ,...n] ]| |EXTERNAL EXTERNALNAME NAME< <mtodo mtodo> > [ [; ;] ]}}

nombre : :es nombre esel elnombre nombredel deldesencadenador desencadenadorque quese seva vaaacrear. crear. instrucciones_sql: instrucciones_sql:reglas reglasde denegocio negocioque quese serequieren requierenespecificar especificarpor pormedio mediode deSQL SQL tipo_evento : :create, tipo_evento create,alter, alter, mtodo : :ensamblado.clase.mtodo mtodo ensamblado.clase.mtodo <ddl_trigger_option> <ddl_trigger_option>::= ::= [ [ENCRYPTION ENCRYPTION] ] | | [ [EXECUTE EXECUTEAS ASClause Clause] ]

Marta Zorrilla

2009-2010

98

CREATE CREATE TRIGGER TRIGGER DDL DDL Tipo de eventos. Jerrquico

Marta Zorrilla

2009-2010

99

CREATE CREATE TRIGGER. TRIGGER. Ej. Ej. 6 6


CREATE CREATETRIGGER TRIGGERMiBD MiBD ON DATABASE ON DATABASE FOR FORDDL_DATABASE_LEVEL_EVENTS DDL_DATABASE_LEVEL_EVENTS AS AS DECLARE DECLARE@data @dataXML XML DECLARE DECLARE@MESSAGE @MESSAGEvarchar(255) varchar(255) DECLARE @DBNAME NVARCHAR(128) DECLARE @DBNAME NVARCHAR(128) DECLARE DECLARE@Usuario @UsuarioNVARCHAR(100) NVARCHAR(100) DECLARE @comando DECLARE @comandoNVARCHAR(128) NVARCHAR(128)

Auditar acciones en la BD

SET SET@DBNAME @DBNAME==DB_NAME() DB_NAME() SET @data = EVENTDATA() SET @data = EVENTDATA() SET SET@Usuario @Usuario==SYSTEM_USER SYSTEM_USER SET @comando = SET @comando =@data.value('(/EVENT_INSTANCE/TSQLCommand)[1]', @data.value('(/EVENT_INSTANCE/TSQLCommand)[1]','nvarchar(2000)') 'nvarchar(2000)') INSERT INSERTDDL_log DDL_log (Fecha, (Fecha,Login, Login,Usuario, Usuario,Evento, Evento,Sentencia) Sentencia) VALUES (GETDATE(), VALUES (GETDATE(), CONVERT(nvarchar(100), CONVERT(nvarchar(100),SYSTEM_USER), SYSTEM_USER), CONVERT(nvarchar(100), CURRENT_USER CONVERT(nvarchar(100), CURRENT_USER),), @data.value('(/EVENT_INSTANCE/EventType)[1]', @data.value('(/EVENT_INSTANCE/EventType)[1]','nvarchar(100)'), 'nvarchar(100)'), @data.value('(/EVENT_INSTANCE/TSQLCommand)[1]', @data.value('(/EVENT_INSTANCE/TSQLCommand)[1]','nvarchar(2000)') 'nvarchar(2000)')) ) SELECT SELECT@MESSAGE @MESSAGE=='DDL 'DDLen enbase basede dedatos: datos:' '++@DBNAME @DBNAME++';' ';'++@Usuario @Usuario++';' ';'++@comando @comando EXEC master.dbo.xp_logevent 50001, @MESSAGE, informational EXEC master.dbo.xp_logevent 50001, @MESSAGE, informational GO GO Marta Zorrilla 2009-2010

100

CREATE CREATE TRIGGER. TRIGGER. Ej. Ej. 6 6

Impedir crear tablas en la BD

CREATE CREATETRIGGER TRIGGERMiBD MiBD ON ONDATABASE DATABASE FOR FORCREATE_TABLE CREATE_TABLE AS AS SELECT SELECTEVENTDATA().value EVENTDATA().value ('(/EVENT_INSTANCE/TSQLCommand/CommandText)[1]','nvarchar(max)') ('(/EVENT_INSTANCE/TSQLCommand/CommandText)[1]','nvarchar(max)') RAISERROR RAISERROR('No ('Nose sepueden puedencrear creartablas tablasen enesta estaBD.', BD.',16, 16,1) 1) ROLLBACK ROLLBACKTRANSACTION TRANSACTION

Marta Zorrilla

2009-2010

101

Triggers , procedimientos Triggers, procedimientosy y funciones funciones


APLICACIONES: APLICACIONES: Implementacin Implementacin de de reglas reglas de de integridad integridad complejas complejas Gestin Gestin de de Log Log (auditora, (auditora, control control de de cambios) cambios) Flujos Flujos de de trabajo trabajo o o proceso proceso (actualizaciones, (actualizaciones, datos datos derivados, derivados, tablas tablas resumen, resumen, etc.) etc.) VENTAJAS Semntica del problema en un solo sitio integridad Facilita la construccin de aplicaciones Procedimientos y funciones almacenados - lgica de negocio compartida por aplicaciones - reutilizacin de cdigo - seguridad de acceso a los usuarios - reduccin del trfico de red - mantenimiento ms sencillo INCONVENIENTES Deben escribirse con cuidado ejecucin infinita de disparos Control complejo de condiciones Mayor carga computacional del servidor
Marta Zorrilla 2009-2010 102

DROP DROP Para eliminar objetos que existan en la base de datos. Su sintaxis es:

DROP DROP{{TABLE TABLEnombre nombre| | INDEX INDEXnombre nombre| | VIEW VIEWnombre nombre | | TRIGGER TRIGGERnombre nombre | | RULE RULEnombre nombre | | DATABASE DATABASEnombre nombre | | PROCEDURE PROCEDUREnombre nombre | | FUNCTION FUNCTIONnombre nombre | | .... ....Otros Otrosobjetos objetos.. .. }}

nombre : :es nombre esel elnombre nombredel delobjeto objetoque quese seva vaaaeliminar. eliminar.

Marta Zorrilla

2009-2010

103

Diseo fsico Dise o f sico

Objetivos
Satisfacer Satisfacer los los requisitos requisitos del delsistema sistemaoptimizando optimizandola la relacin relacincoste/beneficio. coste/beneficio. Se Seha hade detener tener en encuenta cuentalas las caractersticas caractersticas del del gestor, gestor, del delSO SO y ydel delhardware. hardware. Esto Estose seconcreta concretaen enlos los siguientes siguientes objetivos: objetivos:
Disminuir Disminuirlos lostiempos tiemposde derespuesta, respuesta, Minimizar Minimizarel elespacio espaciode dealmacenamiento, almacenamiento, Evitar Evitarlas lasreorganizaciones reorganizacionesperidicas, peridicas, Proporcionar Proporcionarla lamxima mximaseguridad, seguridad,y y Optimizar Optimizarel elconsumo consumode derecursos. recursos.

Marta Zorrilla

2009-2010

105

Entradas y salidas de la fase de diseo fsico


Lasentradas entradasde deesta estaetapa etapason: son: Las
Listade deobjetivos objetivosde dediseo diseofsico fsicocon consus suscorrespondientes correspondientesprioridades prioridadesyy Lista cuantificacin(a (aser serposible); posible); cuantificacin Esquemalgico lgicoespecfico; especfico; Esquema Recursosde demquina mquinadisponibles; disponibles; Recursos Recursosde desoftware softwaredisponibles disponibles(sistema (sistemaoperativo, operativo,middleware, middleware,...); ...); Recursos Informacinsobre sobrelas lasaplicaciones aplicacionesque queutilizarn utilizarnla laBD BDcon conobjeto objetode de Informacin optimizarel eltiempo tiempode derespuesta. respuesta. optimizar Polticasde deseguridad seguridadde dedatos. datos. Polticas Estructurainterna interna(esquema (esquemainterno, interno,generalmente generalmentesolo soloaccesible accesiblea atravs travs Estructura deparmetros parmetrosde desintonizacin); sintonizacin); de Especificacionespara parael elsintonizado sintonizado(tunning) (tunning)de dela laBD; BD;yy Especificaciones Normasde deseguridad. seguridad. Normas

Apartir partirde deestas estasentradas, entradas,se seproducirn producirnlas lassiguientes siguientessalidas: salidas: A

Marta Zorrilla

2009-2010

106

Consideraciones
Algunasde delas lascuestiones cuestionesa aconsiderar consideraren enel eldiseo diseofsico fsicoson: son: Algunas
Asignacinde detablas tablasa aparticiones particionesy/o y/oa adispositivos dispositivosfsicos fsicos(create (create Asignacin database,create createtable). table). database, Determinacinde dendices ndices(cluster, (cluster,nicos, nicos,no nocluster, cluster,etc.); etc.); Determinacin Desnormalizacinyyredundancia redundanciade dedatos. datos. Desnormalizacin Optimizacinde deconsultas, consultas,funciones, funciones,disparadores, disparadores, Optimizacin
Actualizacinde deestadsticas estadsticas(update (update updatestatistics). statistics). statistics Actualizacin update statistics Reorganizacinyyreconstruccin reconstruccinde dendices. ndices. Reorganizacin Reorganizacinde dedatos datosen enficheros. ficheros. Reorganizacin

Definicinde detamaos tamaosde dememorias memoriasintermedias intermedias((Buffers) Buffers) Definicin Especificacinde debloqueos bloqueos(transacciones) (transacciones) Especificacin

existeun unmodelo modeloformal formalgeneral generalpara parael eldiseo diseofsico, fsico,sino sinoque que NOexiste NO dependemucho muchode decada cadaproducto productocomercial comercialconcreto. concreto. depende

Marta Zorrilla

2009-2010

107

Seguridad en en SQL SQL Server Server Seguridad 2005 2005

Tabla de contenidos
Modelo Modelo de de Seguridad Seguridad en en SQL SQL Server Server Inicios Inicios de de Sesin Sesin -- Usuarios Usuarios Esquemas Esquemas de de Base Base de de Datos Datos Usuarios Usuarios de de Base Base de de Datos Datos Contexto Contexto de de Ejecucin Ejecucin Permisos Permisos a a objetos objetos y y

Marta Zorrilla

2009-2010

109

Modelo de Seguridad en SQL Server


Solicitud de conexin de Red Conexin con el Servidor de SQL Server Solicitud de Inicio de Sesin en SQL Server Establecer Credenciales de Inicio de Sesin Cambio a una BBDD y autorizacin de acceso Establecer un Contexto de Base de Datos Intento de realizar alguna accin Verificar Permisos para las acciones

Marta Zorrilla

2009-2010

110

Jerarqua de Seguridad

Marta Zorrilla

2009-2010

111

Inicios de sesin - Usuarios


Modo de autentificacin (acceso al servidor) (Inicio de sesin: Login) Windows (S.O.) Servidor SQL Server Acceso y gestin de una BD (autorizacin: User) Permisos a objetos de BD ejecucin de sentencias Permisos a travs de roles: del servidor o de BD definidos por el usuario

Marta Zorrilla

2009-2010

112

Inicios de sesin preestablecidos

Marta Zorrilla

2009-2010

113

Tipos de Inicios de sesin


Windows
Usuario Grupo

SQL Server Certificado o Clave Asimtrica Asociados a Credenciales


Para acceso a recursos externos CREATE CREDENTIAL

Marta Zorrilla

2009-2010

114

Tipos de Inicios de sesin (y 2)


Opciones de Administracin
Podemos forzar el cambio de contrasea en el primer inicio de sesin: MUST_CHANGE Exigir directivas de contrasea Desbloquear Cuentas: UNLOCK Deshabilitar un inicio de sesin: ENABLE BD de conexin predeterminada

Marta Zorrilla

2009-2010

115

Crear Inicios de sesin (y 3)


Grficamente SSMS CREATE LOGIN
CREATE LOGIN Pepe WITH PASSWORD = Passwd' MUST_CHANGE CREATE LOGIN [UNICAN\pepe] FROM WINDOWS

sys.server_principals sys.sql_logins DROP LOGIN / ALTER LOGIN

Marta Zorrilla

2009-2010

116

Roles fijos de Servidor

Marta Zorrilla

2009-2010

117

ROLES FIJOS DE SERVIDOR

sp_addsrvrolemember /sp_dropsrvrolemember sys.server_role_members sp_srvrolepermission sys.server_permissions


Marta Zorrilla 2009-2010 118

Esquemas
ANSI SQL-92:
Coleccin de objetos de la BBDD cuyo propietario es un nico principal y forma un nico espacio de nombres Espacio de nombres: es un conjunto de objetos que no pueden tener nombres duplicados

servidor.basededatos.esquema.objeto Los objetos ahora pertenecen al esquema de forma independiente al usuario Beneficios El borrado de un usuario no requiere que tengamos que renombrar los objetos Resolucin de nombres uniforme Gestin de permisos a nivel de esquema
Marta Zorrilla 2009-2010 119

Seguridad de base de datos

Marta Zorrilla

2009-2010

120

Conceder acceso a una BD

Marta Zorrilla

2009-2010

121

ROLES FIJOS DE BASE DE DATOS

Marta Zorrilla

2009-2010

122

Roles definidos por el usuario

Marta Zorrilla

2009-2010

123

Definir Definir usuario usuario del del Gestor Gestor

Marta Zorrilla

2009-2010

124

Usuarios de Base de Datos


Crear un Usuario
CREATE USER <usuario> FOR LOGIN <login> WITH DEFAULT_SCHEMA = <schema> Podemos crear un usuario sin asociar: WITHOUT LOGIN

Modificar
ALTER USER

Eliminar
DROP USER No si es propietario de objetos

Invitado
GRANT CONNECT TO GUEST

sys.database_principals
Marta Zorrilla 2009-2010 125

Roles de Base de Datos


CREATE ROLE <nombre> sp_addrolemember <role>,<usuario> sys.database_role_members Rol Public

126 Marta Zorrilla 2009-2010 126

Definir Definir role role de de BD BD

Rol de aplicacin. Un usuario que se conecta a travs de una aplicacin que habilita el rol de aplicacin, pierde todos sus privilegios, disponiendo exclusivamente los que le ofrece este rol. Permite establecer un nivel alto de seguridad, impidiendo el acceso va ODBC, OLEDB.

Marta Zorrilla

2009-2010

127

El Contexto de Ejecucin
Representado por dos testigos de seguridad:
Inicio de Sesin y Usuario Existen tantos testigos de usuario como bases de datos acceda el usuario sys.login_token / sys.user_token

Cambio del Contexto


til para la definicin de conjuntos de permisos personalizados EXECUTE AS SETUSER (descatalogado)
128 Marta Zorrilla 2009-2010 128

El Contexto de Ejecucin (ej.)


USE Sales GO CREATE PROCEDURE dbo.usp_Demo WITH EXECUTE AS 'CompanyDomain\SqlUser1' AS SELECT user_name() GO

129 Marta Zorrilla 2009-2010 129

Permisos Permisos a a sentencias sentencias Para otorgar permisos a acciones. Su sintaxis es:

GRANT GRANT {{ALL ALL| |instruccin instruccin[ [,...n ,...n] ]}} TO TO{usuario {usuario[ [,...n ,...n] ] | | role role[ [,...n ,...n] ]}}

instruccin :: instruccin(entre (entreotras) otras) CREATE CREATE{{DATABASE DATABASE| |DEFAULT DEFAULT| |FUNCTION FUNCTION | |PROCEDURE PROCEDURE| |RULE RULE| |TABLE TABLE| |VIEW VIEW}} ALTER ALTER{{DATABASE DATABASE| |DEFAULT DEFAULT| |FUNCTION FUNCTION | |PROCEDURE PROCEDURE| |RULE RULE| |TABLE TABLE | |VIEW VIEW}} BACKUP BACKUPDATABASE DATABASE BACKUP BACKUPLOG LOG

Marta Zorrilla

2009-2010

130

Permisos Permisos a a objetos objetos Para otorgar permisos a objetos de la BD. Concede y quita permisos, inicialmente, el propietario de la BD. Su sintaxis es: GRANT GRANT {{ALL ALL[ [PRIVILEGES PRIVILEGES] ]| |permiso permiso[ [,...n ,...n] ]}} {{ [ [((columna columna[ [,...n ,...n] ]))] ]ON ON{{tabla tabla| |vista vista}} | |ON ON{{tabla tabla| |vista vista}}[ [((columna columna[ [,...n ,...n] ]))] ] | |ON ON{{procedimiento procedimiento| |procedimiento_extendido procedimiento_extendido}} | |ON ON{{funcin} funcin} }} TO TO{usuario {usuario[ [,...n ,...n] ] | | role role[ [,...n ,...n] ]}} [ [WITH WITHGRANT GRANTOPTION OPTION] ] [ [AS AS{{usuario usuario| |role role}}] ]
permiso : :SELECT, permiso(entre (entreotros) otros) SELECT,INSERT, INSERT,DELETE, DELETE,UPDATE, UPDATE,EXECUTE. EXECUTE. WITH : :el WITHGRANT GRANTOPTION OPTION elusuario usuarioal alque quese sele leotorga otorgapermiso, permiso,puede puedeaa su suvez, vez,otorgrselo otorgrseloaaotro. otro. AS AS: :usuario usuariooorole roleque queestablece estableceel elpermiso permiso

Marta Zorrilla

2009-2010

131

Ejemplos Ejemplos GRANT GRANT

Permitir a los usuarios Maria, Juan y Marta crear bases de datos y tablas GRANT GRANTCREATE CREATEDATABASE, DATABASE,CREATE CREATETABLE TABLE TO TOMaria, Maria,Juan, Juan,[Servidor\Marta] [Servidor\Marta]

Permitir a Mara y a Juan, insertar, modificar y borrar en la tabla autores. GRANT GRANTINSERT, INSERT,UPDATE, UPDATE,DELETE DELETEON ONautores autores TO TOMaria, Maria,Juan Juan

Permitir a Mara actualizar el importe del prstamo. GRANT GRANTUPDATE( UPDATE(importe importe))ON ONprestamo prestamo TO TOMaria Maria
Marta Zorrilla 2009-2010 132

REVOKE REVOKE (1) (1) Para denegar permisos a acciones. Su sintaxis es:

REVOKE REVOKE {{ALL ALL| |instruccin instruccin[ [,...n ,...n] ]}} FROM FROM{usuario {usuario[ [,...n ,...n] ] | | role role[ [,...n ,...n] ]}}

INSTRUCCIN :: INSTRUCCIN(entre (entreotras) otras) CREATE CREATE{{DATABASE DATABASE| |DEFAULT DEFAULT| |FUNCTION FUNCTION | |PROCEDURE PROCEDURE| |RULE RULE| |TABLE TABLE VIEW VIEW}} ALTER ALTER{{DATABASE DATABASE| |DEFAULT DEFAULT| |FUNCTION FUNCTION | |PROCEDURE PROCEDURE| |RULE RULE| |TABLE TABLE| |VIEW VIEW}} BACKUP BACKUPDATABASE DATABASE BACKUP BACKUPLOG LOG

Marta Zorrilla

2009-2010

133

REVOKE REVOKE (2) (2) Para quitar permisos. Su sintaxis es:

REVOKE REVOKE[ [GRANT GRANTOPTION OPTIONFOR FOR] ] {{ALL ALL[ [PRIVILEGES PRIVILEGES] ]| |permiso permiso[ [,...n ,...n] ]}} {{ [ [((columna columna[ [,...n ,...n] ]))] ]ON ON{{tabla tabla| |vista vista}} | |ON ON{{tabla tabla| |vista vista}}[ [((columna columna[ [,...n ,...n] ]))] ] | |ON ON{{procedimiento procedimiento| |procedimiento_extendido procedimiento_extendido}} | |ON ON{{funcin} funcin} }} {{TO TO| |FROM FROM}} {usuario {usuario[ [,...n ,...n] ] | | role role[ [,...n ,...n] ]}} [ [CASCADE CASCADE] ] [ [AS AS{{usuario usuario| |role role}}] ]
GRANT GRANTOPTION OPTIONFOR FOR: :se sequita quitaal alusuario usuariola la capacidad de dar o quitar permisos que le fueron capacidad de dar o quitar permisos que le fueron concedidos concedidospor porla laclusula clusulaWITH WITHGRANT GRANTOPTION OPTION permiso : :SELECT, permiso SELECT,INSERT, INSERT,DELETE, DELETE,UPDATE, UPDATE, REFERENCES, EXECUTE, CREATE, etc. REFERENCES, EXECUTE, CREATE, etc. CASCADE CASCADE: :se sequita quitael elpermiso permisoal alusuario/role usuario/roleyyaalos los usuarios/roles a los que dio permiso, si se le concedi usuarios/roles a los que dio permiso, si se le concedi GRANT GRANTOPTION. OPTION. AS AS: :usuario usuariooorole roleque quequita quitael elpermiso permiso
Marta Zorrilla 2009-2010 134

Ejemplos Ejemplos REVOKE REVOKE

Impedir a los usuarios Maria y Marta crear vistas en la BD activa.

REVOKE REVOKECREATE CREATEVIEW VIEW TO TOMaria, Maria,[Servidor\Marta] [Servidor\Marta] Impedir que Mara ejecute la funcin dameprecio.

REVOKE REVOKESELECT SELECTON ONdbo.dameprecio dbo.dameprecio TO TOMaria Maria

Marta Zorrilla

2009-2010

135

Permisos efectivos

Marta Zorrilla

2009-2010

136

A tener en cuenta
SQL Server establece el rol PUBLIC a todos los usuarios de la

BD. Para aquellos usuarios que no tienen cuenta en la BD, pero s acceso al gestor, pueden conectarse a la BD como GUEST, si este usuario est habilitado en ella (GRANT CONNECT TO GUEST). Se ha de tener cuidado respecto a la manera en que se establecen las autorizaciones, si se quiere garantizar que luego se puedan quitar.
U1 U5 Admon U2 U3
Marta Zorrilla 2009-2010 137

U4

Limitaciones de seguridad
No se puede establecer privilegios a nivel de fila (p. ej. cada alumno slo vea sus notas) Hay extensiones para proporcionar control de acceso en el nivel de las filas y para trabajar con gran nmero de usuarios pero an no estn normalizadas. Utilizar vistas para restringir la informacin. Establecer la seguridad en aplicaciones de BD: - Usuarios Usuarios de domino / de gestor con sus privilegios Usuarios de dominio / de gestor con rol de aplicacin Usuario nico con privilegios - Crear BD de seguridad donde se establece con detalle las acciones que cada usuario de aplicacin puede hacer Cdigo de aplicacin se entremezcla con el de autorizacin Ms difcil de garantizar la existencia de agujeros de seguridad
Marta Zorrilla 2009-2010 138

Estrategias de seguridad

Marta Zorrilla

2009-2010

139

Estrategias de seguridad (y 2)

Marta Zorrilla

2009-2010

140

Potrebbero piacerti anche