Lenguaje SQL SQL Server 2005



Documentos relacionados
Lenguaje SQL. Marta E. Zorrilla, Eduardo Mora. Universidad de Cantabria. Departamento de Matemática Aplicada y Ciencias de la Computación

Lenguaje SQL SQL Server 2005

INTRODUCCIÓN INTRODUCCIÓN INTRODUCCIÓN INTRODUCCIÓN INSTRUCCIONES DE DEFINICIÓN DE TABLAS E ÍNDICES INSTRUCCIONES DE DEFINICIÓN DE TABLAS E ÍNDICES

Bases de Datos Relacionales

A.1. Definiciones de datos en SQL

SINTAXIS DE SQL-92. <definición de esquema >::= CREATE SCHEMA <cláusula de nombre de esquema> [ <elemento de esquema>... ]

Es un lenguaje de consulta estructurado establecido claramente como lenguaje de alto nivel estándar para sistemas de base de datos relacionales.

m047a Curso Programando una Base de Datos SQL Server 2008, 36 h Creación B.D. y Constraints

Lenguaje SQL TSQL Marta Zorrilla

Tema 2 Modelos de Base de Datos. Profesor Luis Gmo. Zúñiga Mendoza UMCA

SQL (Structured Query Language)

2- Creación de tablas y manejos de datos.

ÍNDICE. Introducción... Capítulo 1. Novedades de Access

Procedimientos para agrupar y resumir datos

Consultas con combinaciones

MANUAL BÁSICO DEL LENGUAJE SQL

Bases de Datos. Marta Elena Zorrilla Pantaleón Rafael Duque Medina DPTO. DE MATEMÁTICAS, ESTADÍSTICA Y COMPUTACIÓN. Tema 03. Lenguaje SQL.

El Lenguaje SQL TEMA V. Grupo de Bas ses de Datos Avanzadas Univ. Carlo os III de Madrid. V.1 SQL como Lenguaje de Definición de Datos

Base de datos I Facultad de Ingeniería. Escuela de computación.

Bases de Datos: Structured Query Language (SQL)

Crear BD en. Isis Bonet Cruz, PhD

LAS SUBCONSULTAS SQL SERVER Manual de Referencia para usuarios. Salomón Ccance CCANCE WEBSITE

1. DML. Las subconsultas

Bases de Datos SQL 1 SQL. Jorge Pérez R. Universidad de Talca, II Semestre 2006

6- Combinación de tablas

m046a Curso Consultando SQL Server 2005/2008 con Transact-SQL, 15 h

Structured Query Language (SQL) Fundamentos de Bases de Datos InCo

CONSULTAS CON SQL. 3. Hacer clic sobre el botón Nuevo de la ventana de la base de datos. Aparecerá el siguiente cuadro de diálogo.

SENTENCIAS Y CONSULTAS EN SQL SERVER

8 SQL SERVER 2008 RA-MA

Tema: Creacion de una base de datos utilizando sintaxis Sql.

CONSULTAS BASICAS EN SQL SERVER

LENGUAJE DE CONSULTA ESTRUCTURADO - SQL CONTENIDO

ÍNDICE. Introducción... Capítulo 1. Novedades, mejoras y requisitos para la instalación... 1

Unidad III: Lenguaje de manipulación de datos (DML) 3.1 Inserción, eliminación y modificación de registros

Bases de Datos 2. Teórico

ADMINISTRACIÓN DE BASE DE DATOS

: COMPUTACIÓN E INFORMATICA : Ingeniería de Software Ingeniería de Redes y Comunicaciones : Administración de Bases de Datos I : T-INF127

UNIVERSIDAD DEL ISTMO CAMPUS IXTEPEC LIC. INFORMATICA GRUPO 508 PROCEDIMIENTOS ALMACENADOS EN SQL SERVER 2000

8 MICROSOFT SQL SERVER 2008 R2. CURSO PRÁCTICO RA-MA

UNIDAD 1.- PARTE 1 MANIPULACIÓN AVANZADA DE DATOS CON SQL. BASES DE DATOS PARA APLICACIONES. Xochitl Clemente Parra Armando Méndez Morales

Base de datos I Facultad de Ingeniería. Escuela de computación.

MySQL y Sesiones en PHP. Área de Ingeniería Telemática

CONSULTAS DE RESUMEN SQL SERVER Manual de Referencia para usuarios. Salomón Ccance CCANCE WEBSITE

Oracle 12c DISEÑO Y PROGRAMACIÓN

CURSO DE SQL SERVER 2005

Restricciones de Integridad

Objetos de la Base de Datos

Seguridad en SQL Server 2005

Base de datos relacional

- Bases de Datos - - Diseño Físico - Luis D. García

Repaso de Conceptos Básicos de Bases de Datos

BASE DE DATOS - CURSO 02/03 PRÁCTICA 2: SQL: Lenguaje de definición de datos (DDL)

COMANDOS DE SQL, OPERADORES, CLAUSULAS Y CONSULTAS SIMPLES DE SELECCIÓN

Tema: Creacion de una base de datos utilizando sintaxis Sql.

TEMA 20: CONCEPTOS BÁSICOS DE SQL

Tipos de datos de campo disponibles en Access (MDB)

Administración y programación de Bases de Datos con SQL Server 2005

Formato para prácticas de laboratorio

Microsoft SQL Server 2005

Administradores de Bases de Datos Studio.NET 2005 Y SQL Server Barrios

ÍNDICE PRIMERA PARTE... 17

Resumen. El rol del lenguaje SQL en los SGBDR y en la Relacional. cjimenez@inf.udec.cl, tamrstro@inf.udec.cl

T12 Vistas y tablas temporales

Diseño de bases de datos

1

Dependiendo de las tareas, podemos clasificar las sentencias SQL en dos tipos:

Trabajos de Ampliación. Bases de datos NoSQL.

Práctica 3. Consultas SQL

Aplicaciones de las vistas Concepto de vista Vistas en SQL Vistas en SQL.

Restricciones (constraints) FOREIGN KEY

MANUALITO MS-SQL SERVER

El lenguaje SQL es un lenguaje estándar para el acceso y

A continuación se describen cuáles son los elementos principales de las tablas, cómo crear una y cómo modificarla.

FICHEROS Y BASES DE DATOS (E44) 3º INGENIERÍA EN INFORMÁTICA. Tema 8. Elementos Básicos

Curso SQL Nivel Avanzado 1. Miguel Jurado García

El usuario puede utilizar esta tabla derivada como una tabla más, en sus consultas.

4- Uso de sentencias para el envió y extracción de datos

Tema: CREACIÓN DE TABLAS DE RDBMS (RELATIONAL DATA BASE MANAGEMENT SYSTEM).

Acceso a bases de datos MySQL con PHP

Implementación de la integridad de datos

SERVICIO NACIONAL DE APRENDIZAJE SENA

Guía práctica de SQL

8283: Administración y programación en Microsoft SQL Server 2012

TRANSACT-SQL, DISEÑO Y PROGRAMACIÓN DE BASES DE DATOS EN SQL SERVER 2008

Curso Online de Microsoft

Tema 33. El lenguaje SQL

SQL Server FEMEPA SQL Server 2000

SQL Los fundamentos del lenguaje

Implementación de funciones definidas por el usuario

PL/SQL. Con PL/SQL vamos a poder programar las unidades de programa de la base de datos Oracle:

Lenguaje para descripción de datos

Bases de datos relacionales y el modelo entidad-relación

ACERCA DE LOS AUTO RES... III AGRADECIMIENTOS... xi INTRODUCCION... Xl

BASE DE DATOS QUÉ ES UNA BASE DE DATOS?

SQL (Structured Query Language)- DML

2. ESTUDIO DE INDICES

Lenguaje de Consulta Estructurado S Q. Lenguaje de Consulta Estructurado. Wael Najjar /

LENGUAJE SQL. En Mysql se utiliza un subconjunto de SQL (update, insert into, delete, select, truncate,etc).

Manual Práctico de SQL. ORIENTADO A SQL 7.0 Preparado por: Alvaro E. García alvaroegarcia@ubbi.com

Transcripción:

Lenguaje SQL SQL Server 2005 Marta E. Zorrilla Dpto. de Matemáticas, Estadística y Computación Universidad de Cantabria Marta Zorrilla 2009-2010 1

Contenido Introducción. Introducción. Estándar Estándar SQL. SQL. Instrucciones Instrucciones de de Definición Definición de de Datos. Datos. Ejemplos. Ejemplos. Instrucciones Instrucciones de de Manipulación Manipulación de de Datos. Datos. Ejemplos. Ejemplos. Referencias bibliográficas: - Kalen Delaney. A fondo Microsoft SQL Server 2000. McGraw-Hill, 2001 - Henderson, K. SQL Server 2000 Stored Procedure & XML Programming, 2ª ed. 2002. - Henderson, K. The Guru's Guide to Transact-SQL. Addison-Wesley. 2000. - Sunderic, D. Microsoft SQL Server 2005 stored procedure programming in T-SQL &.NET. 2006 - Sql Server 2005. Ayuda online. Marta Zorrilla 2009-2010 2

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

SQL-92 y SQL-99 SQL-92 incorpora: Nuevos operadores relacionales: OUTER JOIN y JOIN SQL dinámico El parámetro SQLSTATE para gestión de errores Cursores de desplazamiento (scroll cursor). Modo de acceso (lectura o lectura/escritura) y nivel de aislamiento de las transacciones. Definir dominios (CREATE DOMAIN). En la actualidad, se trabaja con el SQL:1999 (revisado en SQL3). Las características más relevantes son: Nuevos tipos de datos: LOB, BOOLEAN, ROW, ARRAY, DISTINCT. Posibilidad de definir nuevos tipos de datos por parte del usuario (limitado). Disparadores (triggers), vistas actualizables (Indexed views) Cursores (punteros) sensitivos. Queries recursivos. Definición de roles de usuario Incorporación de las características de orientación a objetos: tipos de datos abstractos, generalización, herencia y polimorfismo. Marta Zorrilla 2009-2010 4

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

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

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

IDD: CREATE DATABASE Para crear una base de datos. Su sintaxis es: CREATE DATABASE nombrebd [[ ON ON [[ < fichero fichero > [[,...n,...n]]] ] [[,, < grupo_fichero > [[,...n,...n]]] ] ]] [[ LOG LOG ON ON {{ < fichero fichero > [[,...n,...n]]}}] ] [[ COLLATE collation_name ]] [[ FOR FOR LOAD LOAD FOR FOR ATTACH ]] < fichero fichero > ::= ::= [[ PRIMARY ]] (([[ NAME NAME = logical_file_name,,]] FILENAME = 'os_file_name' [[,, SIZE SIZE = size size ]] [[,, MAXSIZE = {{ max_size UNLIMITED }}]] [[,, FILEGROWTH = growth_increment ]]))[ [,...n,...n]] < grupo_fichero > ::= ::= FILEGROUP filegroup_name < fichero fichero > [[,...n,...n]] nombrebd: nombrebd: es es el el nombre nombre de de la la BD BD que que se se va va a a crear. crear. collation_name: collation_name: mapa mapa de de caracteres caracteres logical_file_name logical_file_name :: nombre nombre lógico lógico del del fichero. fichero. os_file_name os_file_name :: nombre nombre físico físico del del fichero. fichero. size: size: es es el el tamaño tamaño del del fichero. fichero. max_size: max_size: es es el el tamaño tamaño máximo máximo del del fichero. fichero. growth_increment growth_increment :: incremento incremento del del fichero. fichero. filegroup_name: filegroup_name: nombre nombre grupo grupo de de archivos archivos Marta Zorrilla 2009-2010 8

IDD : CREATE DATABASE. Ejemplo CREATE DATABASE [compras] ON ON (NAME (NAME = N'compras', FILENAME = N'C:\data\compras.mdf',, SIZE SIZE = 2, 2, MAXSIZE = 3000,FILEGROWTH = 10%) 10%) LOG LOG ON ON (NAME (NAME = N'compras_log', FILENAME = N'C:\data\compras_log.LDF',, SIZE SIZE = 1, 1, FILEGROWTH = 10%) 10%) COLLATE Modern_Spanish_CI_AS Marta Zorrilla 2009-2010 9

IDD : CREATE DATABASE. Recomendaciones La La mayor mayor parte parte de de las las bases bases de de datos datos funcionarán funcionarán correctamente correctamente con con un un solo solo archivo archivo de de datos datos y y un un solo solo archivo archivo de de registro registro de de transacciones. transacciones. Si Si utiliza utiliza varios varios archivos, archivos, cree cree un un segundo segundo grupo grupo de de archivos archivos para para el el archivo archivo adicional adicional y y conviértalo conviértalo en en el el grupo grupo de de archivos archivos predeterminado. predeterminado. De De ese ese modo, modo, el el archivo archivo principal principal sólo sólo contendrá contendráobjetos objetos y y tablas tablas del del sistema. sistema. Para Para maximizar maximizar el el rendimiento, rendimiento, cree cree archivos archivos o grupos grupos de de archivos archivos en en tantos tantos discos discos físicos físicos disponibles disponibles como como sea sea posible posible y y distribuya distribuya en en grupos grupos de de archivos archivos distintos distintos los los objetos objetos que que compitan compitan de de forma forma intensa intensa por por el el espacio. espacio. Utilice Utilice grupos grupos de de archivos archivos para para permitir permitir la la colocación colocación de de los los objetos objetos en en determinados determinados discos discos físicos. físicos. Disponga Disponga en en grupos grupos de de archivos archivos distintos distintos las las diferentes diferentes tablas tablas que que se se utilicen utilicen en en las las mismas mismas consultas consultas de de combinación. combinación. De De ese ese modo, modo, el el rendimiento rendimiento mejorará mejorará debido debido a la la búsqueda búsqueda de de datos datos combinados combinados que que realizan realizan las las operaciones operaciones de de E/S E/S en en paralelo paralelo en en los los discos. discos. Distribuya Distribuya en en grupos grupos de de archivos archivos distintos distintos las las tablas tablas de de acceso accesofrecuente y y los los índices índices no no agrupados agrupados que que pertenezcan pertenezcan a esas esas tablas. tablas. De De ese ese modo, modo, el el rendimiento rendimiento aumentará aumentarádebido a las las operaciones operaciones de de E/S E/S en en paralelo paralelo que que se se realizan realizan si si los los archivos archivos se se encuentran encuentran en en discos discos físicos físicos distintos. distintos. No No coloque coloque el el archivo archivo o archivos archivos de de registro registro de de transacciones transacciones en en el el mismo mismo disco disco físico físico con con los los demás demás archivos archivos y y grupos grupos de de archivos. archivos. Marta Zorrilla 2009-2010 10

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

SQL Server database Data (file).mdf or.ndf Log (file).ldf Tablas e índices Extents = 8 páginas continuas de 8 KB Datos se almacenan en Páginas de 8 KB Tamaño máx. fila 8060 bytes 128 páginas por MB Cabecera Filas de datos Matriz desplazamientos Cada archivo se divide en páginas de 8 Kb numeradas de 0 hasta x, donde x viene definido por el tamaño del fichero. Acceder a una página: ID de BD, ID de fichero y nº de pág Fichero mdf: punto de comienzo de la BD, en sysfiles apunta los ficheros que constituyen la BD y además almacena las tablas del sistema. Marta Zorrilla 2009-2010 12

IDD : CREATE SCHEMA Para incorporar un schema a la base de datos. Su sintaxis es: CREATE SCHEMA schema_name_clause [[ <schema_element> [[,,...n...n]]] ] <schema_name_clause> ::= ::= { schema_name AUTHORIZATION owner_name schema_name AUTHORIZATION owner_name } <schema_element> ::= ::= { table_definition view_definition grant_statement revoke_statement deny_statement } schema_name_clause: schema_name_clause: es es el el nombre nombre del del esquema esquema que que se se va va a a crear. crear. owner_name: owner_name: propietario propietario del del esquema. esquema. Generalmente Generalmente será seráotro otro esquema. esquema. Por Por defecto defecto será serádbo dbo Marta Zorrilla 2009-2010 13

IDD : CREATE SCHEMA. Ejemplo Se crea el esquema ventas que contiene las tablas pedido y lineas. CREATE SCHEMA ventas CREATE TABLE pedido (numped int, int, fecha datetime) CREATE TABLE lineas (numped int, int, numlin int, int, artid artidchar(4), unilin int) int) GRANT SELECT TO TO Pedro DENY SELECT TO TO Luis; Luis; Ventajas: --Independencia de de los los usuarios usuarios --Administrar los los permisos en en esquemas y objetos objetos incluidos en en los losmismos con con un un mayor mayor nivel nivel de de granularidad Marta Zorrilla 2009-2010 14

IDD : DROP / ALTER SCHEMA. Ejemplo También se pueden borrar y alterar schemas. DROP SCHEMA <nombre>; No No es es posible posible si si contiene objetos objetos ALTER SCHEMA <nombre> TRANSFER <objeto>; Ejemplo: tabla artículos pasa a formar parte del schema ventas ALTER SCHEMA ventas TRANSFER dbo.articulos; Marta Zorrilla 2009-2010 15

IDD: CREATE TABLE Para incorporar una tabla nueva a la base de datos. Su sintaxis es: CREATE TABLE [[ nombredb.[ esquema ]].. esquema. ]] tabla tabla (campo1 tipo tipo [(tamaño)] [NOT [NOT NULL] NULL] [restricción_un_campo1 [[......] ]] [, [, campo2 tipo tipo [(tamaño)] [NOT [NOT NULL] NULL] [restricción_un_campo2 [[......] ]] [, [,...]] [, [, restricción_varios_campos [, [,...]...]]]) ) [[ ON ON { grupo_fichero DEFAULT } ]] [[ TEXTIMAGE_ON { grupo_fichero DEFAULT } ]] tabla: tabla: es es el el nombre nombre de de la la tabla tabla que que se se va va a a crear. crear. campo1, campo1, campo2: campo2: son son nombres nombres de de campos. campos. Debe Debe crearse crearse al al menos menos un un campo. campo. tipo: tipo: es es el el tipo tipo de de dato dato asociado asociado al al campo. campo. tamaño: tamaño: es es el el tamaño tamaño del del campo campo en en caracteres caracteres (solamente (solamente para para campos campos de de tipo tipo Texto). Texto). restricción_un_campo1, restricción_un_campo2: son son cláusulas cláusulas CONSTRAINT CONSTRAINTque que afectan afectan a a un un único único campo. campo. restricción_varios_campos: es es una una cláusula cláusula CONSTRAINT CONSTRAINTque que define define un un índice índice de de múltiples múltiples campos. campos. ON: ON: Especifica Especifica el el grupo grupo de de archivos archivos en en el el que que se se almacena almacena la la tabla. tabla. Marta TEXTIMAGE_ON: TEXTIMAGE_ON: Zorrilla indica indicaen en qué quégrupo de de archivos archivos 2009-2010 se se almacenan almacenanlas las columnas columnas text, text, ntext ntexte e image. image. 16

IDD: ALTER TABLE Para modificar el diseño de una tabla que ya existe en la base de datos. Su sintaxis es: ALTER ALTER TABLE tabla tabla {{ ADD ADD campo campo tipo tipo [(tamaño)] [NOT [NOT NULL] NULL] [restricción_un_campo] [[ WITH WITH CHECK WITH WITH NOCHECK ]] ADD ADD {{ restricción_tabla }}[[,...n,...n]] ALTER ALTER COLUMN {{ campo campo tipo tipo [(tamaño)] }} DROP DROP {COLUMN campo campo CONSTRAINT nombre_restricción} {{ ENABLE DISABLE }} TRIGGER {{ ALL ALL nombre_trigger [[,...n,...n]]}} {{ CHECK NOCHECK }} CONSTRAINT {{ ALL ALL nombre_restricción[,...n,...n]]}}} tabla: tabla: es es el el nombre nombre de de la la tabla tabla que que se se va va a a modificar. modificar. campo: campo: es es el el nombre nombre del del campo campo que que se se va va a a añadir añadir o o modificar modificar en en la la tabla tabla.. tipo: tipo: es es el el tipo tipo de de dato dato que que se se asigna asigna a a campo. campo. tamaño: tamaño: es es el el tamaño tamaño del del campo campo en en caracteres caracteres (solamente (solamente para para campos campos de de tipo tipo Texto). Texto). restricción_un_campo: restricción_un_campo: es es una una cláusula cláusula CONSTRAINT CONSTRAINTque que afectan afectan a a un un único único campo. campo. restricción_tabla: restricción_tabla: es es una una cláusula cláusula CONSTRAINT CONSTRAINTque que afecta afecta a a varios varioscampos. nombre_restricción: nombre_restricción: es es el el nombre nombre de de la la restricción restricción que que se se va va a a eliminar eliminaro o ha ha habilitar/deshabilitar. habilitar/deshabilitar. nombre_trigger: nombre_trigger: es es el el nombre nombre del del desencadenador desencadenador que que se se va va a a eliminar eliminaro o ha ha habilitar/deshabilitar. habilitar/deshabilitar. Marta Zorrilla 2009-2010 17

IDD : CLÁUSULA CONSTRAINT SOBRE UN SOLO CAMPO Se utiliza en instrucciones CREATE TABLE y ALTER TABLE para crear o eliminar restricciones. Esta cláusula puede referirse a un campo de la tabla. La restricción Primary Key y Unique generan índice, Foreign key no. CONSTRAINT CONSTRAINT nombre nombre { { [ [ NULL NULL NOT NOT NULL NULL ] ] [ [ { { PRIMARY PRIMARY KEY KEY UNIQUE UNIQUE } } [ [ CLUSTERED CLUSTERED NONCLUSTERED NONCLUSTERED ] ] [ [ WITH WITH FILLFACTOR FILLFACTOR = = factor_relleno factor_relleno ] ] [ [ ON ON {grupo_ficheros {grupo_ficheros DEFAULT} DEFAULT} ] ] ] ] ] [ [ [ FOREIGN FOREIGN KEY KEY ] ] REFERENCES REFERENCES otra_tabla[ otra_tabla[ (campo_externo1) (campo_externo1) ] ] [ [ ON ON DELETE DELETE {NO {NO ACTION ACTION CASCADE CASCADE SET SET NULL NULL SET SET DEFAULT DEFAULT } } ] ] [ [ ON ON UPDATE UPDATE {NO {NO ACTION ACTION CASCADE CASCADE SET SET NULL NULL SET SET DEFAULT DEFAULT } } ] ] [ [ NOT NOT FOR FOR REPLICATION REPLICATION ] ] ] ] CHECK CHECK [ [ NOT NOT FOR FOR REPLICATION REPLICATION ] ] ( ( expresión_lógica expresión_lógica ) ) } } nombre: nombre: es es el el nombre nombre de de la la restricción restricción que que se se va va a a crear. crear. otra_tabla: otra_tabla: es es el el nombre nombre de de la la tabla tabla a a la la que que se se hace hace referencia. referencia. campo_externo1: campo_externo1: son son los los nombres nombres de de los los campos campos de de la la otra_tabla otra_tablaa a los los que que se se hace hace referencia. referencia. factor_relleno: factor_relleno: especifica especifica cuánto cuánto se se debe debe llenar llenar cada cada página página de de índice índice utilizada utilizada para para almacenar almacenar los los datos datos de de índice.entre índice.entre 00 y y 100. 100. Por Por defecto defecto 0. 0. grupo_ficheros: grupo_ficheros: indica indica dónde dónde se se almacena almacena la la tabla tabla expresión_lógica: Marta expresión_lógica: Expresión Zorrilla Expresión que que devuelve devuelve true trueo 2009-2010 o false false 18

IDD : CLÁUSULA CONSTRAINT SOBRE TABLA CONSTRAINT CONSTRAINTnombre {{ [[{{ PRIMARY PRIMARY KEY KEY UNIQUE UNIQUE }} [[ CLUSTERED CLUSTERED NONCLUSTERED NONCLUSTERED ]] {{(principal1 (principal1[ [ ASC ASC DESC DESC ]][ [,, principal2 principal2 [, [,...]...]] ]))} } [[ WITH WITH FILLFACTOR FILLFACTOR = factor_relleno] factor_relleno] [[ ON ON {{ grupo_ficheros grupo_ficheros DEFAULT DEFAULT }}] ] ]] FOREIGN FOREIGN KEY KEY [[(referencia1 (referencia1[,[, referencia2 referencia2 [, [,...]...]] ]))] ] REFERENCES REFERENCES otra_tabla otra_tabla [[(campo_externo1 (campo_externo1[ [,...,... campo_externo2 campo_externo2 ]]))] ] [[ ON ON DELETE DELETE {NO {NO ACTION ACTION CASCADE CASCADE SET SET NULL NULL SET SET DEFAULT DEFAULT }}] ] [[ ON ON UPDATE UPDATE {NO {NO ACTION ACTION CASCADE CASCADE SET SET NULL NULL SET SET DEFAULT DEFAULT }}] ] [[ NOT NOT FOR FOR REPLICATION REPLICATION ]] CHECK CHECK [[ NOT NOT FOR FOR REPLICATION REPLICATION ]] (expresión_lógica (expresión_lógica) ) }} nombre: nombre: es es el el nombre nombre de de la la restricción restricción que que se se va va a a crear. crear. principal1, principal1, principal2: principal2: son son los los nombres nombres de de los los campos campos que que compondrán compondrán la la clave clave principal. principal. referencia1, referencia1, referencia2: referencia2: son son los los nombres nombres de de los los campos campos que que hacen hacen referencia referencia a a otros otros de de otra otra tabla. tabla. otra_tabla: otra_tabla: es es el el nombre nombre de de la la tabla tabla a a la la que que se se hace hace referencia. referencia. campo_externo1, campo_externo1, campo_externo2: campo_externo2: son son los los nombres nombres de de los los campos campos de de la la otra_tabla otra_tablaa a los los que que se se hace hace referencia. referencia. expresión_lógica: expresión_lógica: criterio criterio que que se se ha ha de de cumplir. cumplir. Devuelve Devuelve true trueo o false false Marta Zorrilla 2009-2010 19

Ejemplo La La base base de de datos datos trata trata de de informatizar informatizar el el proceso proceso de de compras compras de de una una empresa. empresa. Esto Esto es, es, recoger recoger los los pedidos pedidos de de los los artículos, artículos, contemplados contemplados en en su su catálogo, catálogo, que que compran compran a proveedores proveedores ya ya conocidos. conocidos. Reglas: Reglas: --No No puede puede seleccionar seleccionar un un artículo artículo descatalogado. descatalogado. --Si Si el el stock stock alcanza alcanza el el mínimo mínimo establecido, establecido, se se ha ha de de notificar notificar como como un un evento. evento. Marta Zorrilla 2009-2010 20

IDD: CREATE TABLE Ejemplos Escribir las instrucciones SQL necesarias para construir la base de datos cuyo esquema de relaciones es: CREATE CREATE TABLE TABLE Lineas Lineas (( CREATE CREATE TABLE TABLE numped numped Proveedores Proveedores INTEGER INTEGER (( NOT NOT NULL, NULL, codigpro codigpro CHAR(4) CHAR(4) numlin numlin NOT SMALLINT NOT SMALLINT NULL NULL NOT NOT CONSTRAINT CONSTRAINT NULL, NULL, id_pro id_pro PRIMARY PRIMARY KEY, KEY, CREATE CREATE TABLE cifpro TABLE Articulos cifpro CHAR(12) codigart Articulos ( CREATE CHAR(12) codigart NOT CHAR(6) ( CREATE TABLE TABLE Pedidos Pedidos ( NOT CHAR(6) ( NULL NULL NOT NOT CONSTRAINT CONSTRAINT NULL, NULL, u_cif u_cifunique, codigart nombrprocodigart CHAR(6) CHAR(30) unilin CHAR(6) NOT CHAR(30) unilin FLOAT NOT FLOAT NOT NULL, NOT NULL NOT NULL CONSTRAINT NOT NULL, CONSTRAINT id_art id_artprimary KEY, numped KEY, numped INTEGER INTEGER NULL, NOT NOT NULL, NULL NULL CONSTRAINT CONSTRAINT id_ped id_pedprimary KEY, KEY, descrart direcpro direcpro CHAR(30) descrart CHAR(40) preunlinchar(40) NOT CHAR(30) NOT MONEY NOT MONEY NULL, NOT NULL, fechaped NOT NULL, fechaped DATETIME DATETIMENULL, NOT NOT NOT NULL, NULL, NULL NULL DEFAULT DEFAULT getdate(), getdate(), preunart cpostpro cpostprochar(5) preunart MONEY desculinmoney NOT NOT NOT FLOAT FLOAT NULL NOT NULL, codigpro NULL NOT CHECK NULL, codigpro CHAR(4) CHAR(4) NOT CHECK NOT NOT NULL NULL NULL, (cpostpro NULL, (cpostpro CHECK CHECK like like (desculin>=0 (desculin>=0 '[0-9][0-9][0-9][0-9][0-9]'), and anddesculin<=100), desculin<=100), stockart localpro stockart INTEGER localpro CHAR(20) CHAR(20) totallin INTEGER NOT totallin NOT AS NOT AS ([preunlin] ([preunlin] NULL, NOT NULL NULL CHECK NULL, **[unilin] CHECK (stockart [unilin]**(1 (1 [desculin] (stockart >0), ivaped >0), ivaped FLOAT FLOAT NOT NOT NULL NULL CHECK CHECK (ivaped>0 (ivaped>0 // 100)), 100)), and andivaped<100), stockmin telefpro telefpro CONSTRAINT stockmin INTEGER CONSTRAINT CHAR(17) INTEGER NOT CHAR(17) NOT NOT id_lin id_lin NULL, NULL, PRIMARY NOT NULL NULL CHECK PRIMARY KEY CHECK (stockmin>0), fentrped KEY (numped, (stockmin>0), fentrped DATETIME DATETIME NOT NOT NULL, NULL, (numped, numlin), numlin), fecbaja faxpro faxpro fecbaja DATETIME) CONSTRAINT CHAR(17), DATETIME) CONSTRAINT CHAR(17), f_pro f_prof_ped FOREIGN f_ped FOREIGN FOREIGN FOREIGN KEY KEY (codigpro) KEY (codigpro) KEY (numped) (numped) REFERENCES REFERENCES Proveedores Proveedores Pedidos Pedidos (codigpro), (codigpro), (numped), (numped), emailpro emailpro CONSTRAINT CONSTRAINT CHAR(25), CHAR(25), c_fecha c_fecha f_art f_art CHECK CHECK FOREIGN FOREIGN (fechaped<=fentrped)) KEY KEY (codigart) (codigart) REFERENCES REFERENCES Articulos Articulos (codigart)) (codigart)) procepro procepro CHAR(10) CHAR(10) NOT NOT NULL NULL CHECK CHECK (procepro (procepro in in ('UE', ('UE','No 'No UE'))) UE'))) Marta Zorrilla 2009-2010 21

IDD : ALTER TABLE. Ejemplos ALTER ALTER TABLE [dbo].[proveedores] ADD ADD CONSTRAINT [id_pro] [id_pro] PRIMARY KEY KEY CLUSTERED (([codigpro] )) ON ON [PRIMARY] GO GO ALTER ALTER TABLE [dbo].[pedidos] WITH WITH NOCHECK ADD ADD CONSTRAINT [DF_Pedidos_fechaped] DEFAULT (getdate()) FOR FOR [fechaped], CONSTRAINT [c_fecha] CHECK ([fechaped] <= <= [fentrped]), CHECK ([ivaped] > 0 and and [ivaped] < 100) 100) GO GO ALTER ALTER TABLE [dbo].[proveedores] ADD ADD CONSTRAINT [u_cif] [u_cif] UNIQUE NONCLUSTERED (([cifpro] [cifpro])) ON ON [PRIMARY],, CHECK ([cpostpro] like like '[0-9][0-9][0-9][0-9][0-9]'), CHECK ([procepro] = 'No 'No UE' UE' or or [procepro] = 'UE') 'UE') GO GO Marta Zorrilla 2009-2010 22

IDD : CREATE INDEX Para crear un índice nuevo en una tabla que ya existe en la base de datos. Su sintaxis es: CREATE [[ UNIQUE ]][[ CLUSTERED NONCLUSTERED ]] INDEX INDEXíndice ON ON {tabla {tabla vista vista }}(campo1 [[{ASC {ASC DESC DESC }] }][,[, campo2 [{ASC DESC}],...])...]) [[ WITH WITH < opción_índice > [[,...n],...n]]] [[ ON ON grupo_ficheros ]] < opción_índice > :: :: = {{ PAD_INDEX FILLFACTOR = factor_relleno IGNORE_DUP_KEY DROP_EXISTING STATISTICS_NORECOMPUTE SORT_IN_TEMPDB }} UNIQUE: UNIQUE: señala señala que que el el índice índice es es de de unicidad, unicidad, en en caso caso contrario contrario permitirá permitirárepetición repetición de de valores. valores. índice: índice: es es el el nombre nombre del del índice índice que que se se va va a a crear. crear. tabla/vista: tabla/vista: es es el el nombre nombre de de una una tabla/vista tabla/vista existente existente a a la la que que estará estaráasociado asociado el el índice. índice. campo1, campo1, campo2: campo2: son son los los nombres nombres de de los los campos campos que que van van a a formar formar el el índice. índice. Puede Puede ser ser un un solo solo campo. campo. Para Para forzar forzar una una ordenación ordenación descendente descendente de de un un campo, campo, hay hay que que utilizar utilizar la la palabra palabra reservada reservada DESC; DESC; sino sino se se especifica especifica o o se se escribe escribe ASC, ASC, se se entiende entiende que que la la ordenación ordenación es es ascendente. ascendente. CREATE INDEX INDEXFK_Lineas ON ONLineas (codigart) Marta Zorrilla 2009-2010 23

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

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

Tipos de datos en SQL Server 2005 II FECHAS datetime Datos de fecha y hora comprendidos entre el 1 de enero de 1753 y el 31 de diciembre de 9999, con una precisión de 3,33 milisegundos. (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 precisión de un minuto. CADENAS DE CARACTERES char Datos de caracteres no Unicode de longitud fija con una longitud máxima de 8.000 caracteres. varchar Datos no Unicode de longitud variable con un máximo de 8.000 caracteres. text Datos no Unicode de longitud variable con una longitud máxima de 2^31-1 (2.147.483.647) caracteres. nchar Datos Unicode de longitud variable con una longitud máxima de 4.000 caracteres. nvarchar Datos Unicode de longitud variable con una longitud máxima de 4.000 caracteres. ntext Datos Unicode de longitud variable con una longitud máxima de 2^30-1 (1.073.741.823) caracteres. Marta Zorrilla 2009-2010 26

Tipos de datos en SQL Server 2005 III BINARIOS binary Datos binarios de longitud fija con una longitud máxima de 8.000 bytes. varbinary Datos binarios de longitud variable con una longitud máxima de 8.000 bytes. image Datos binarios de longitud variable con una longitud máxima de 2^31-1 (2.147.483.647) bytes. OTROS TIPOS DE DATOS cursor Una referencia a un cursor. sql_variant Un tipo de datos que almacena valores de varios tipos de datos aceptados en SQL Server, excepto text, ntext, timestamp y sql_variant. table Un tipo de datos especial que se utiliza para almacenar un conjunto de resultados para un proceso posterior. timestamp Un número único para toda la base de datos que se actualiza cada vez que se actualiza una fila. (utilizar rowversion para versiones futuras) uniqueiden Un identificador exclusivo global (GUID), necesario para replicación tifier xml Almacena una instancia de XML Marta Zorrilla 2009-2010 27

Tipo de dato Autonumérico: : IDENTITY IDENTITY [[(semilla,, incremento) ]] semilla: semilla: valor valor de de inicio. inicio. incremento: incremento: incremento incrementoque que se se aplica aplica CREATE TABLE TABLE dbo.herramientas( ID ID INT INT IDENTITY(1,1) NOT NOT NULL NULL PRIMARY KEY, KEY, Nombre VARCHAR(40) NOT NOT NULL NULL )) -- --insertamos valores valores INSERT INTO INTO dbo.herramientas (Nombre )) VALUES ( Martillo') INSERT INTO INTO dbo.herramientas (Nombre )) VALUES ( Taladro') -- --si si borramos, Martillo, se se pierde pierde el el ID ID 1. 1. Para Para reutilizarlo SET SET IDENTITY_INSERT dbo.tool ON ON INSERT INTO INTO dbo.herramientas (ID, (ID, Nombre) VALUES (1, (1, Serrucho') Marta Zorrilla 2009-2010 28

Tipos definidos por el usuario: CREATE TYPE CREATE TYPE TYPE [[ nombre_schema. ]] nombre {{ FROM FROM tipo_base [[(( precision [[,, escala escala ]])) ]] [[ NULL NULL NOT NOT NULL NULL ]] EXTERNAL NAME NAME assembly_name [[.class_name ]] }}[[; ;]] nombre: nombre: es es el el nombre nombre del del tipo tipo de de dato dato que que se se va va a a crear. crear. tipo_base: tipo_base: tipo tipo de de dato dato base base en en el el que que se se apoya apoya CREATE TYPE TYPEiva iva FROM FROMfloat NOT NOT NULL NULL ;; Marta Zorrilla 2009-2010 29

CREATE RULE y DEFAULT (no estándar) Para crear una regla para ser utilizada en un tipo de dato definido por el usuario en la base de datos. Su sintaxis es: CREATE RULE RULEnombre AS ASexpresion_condicional nombre: nombre: es es el el nombre nombre de de la la función función que que se se va va a a crear. crear. expresion_condicional: expresion_condicional: criterio criterio que que debe debe cumplir cumplir la la regla regla Para crear un valor por defecto utilizable en un tipo de dato definido por usuario en la base de datos. Su sintaxis es: CREATE DEFAULT nombre AS ASexpresion_constante nombre: nombre: es es el el nombre nombre de de la la función función que que se se va va a a crear. crear. expresion_constante: expresion_constante: valor valor Marta Zorrilla 2009-2010 30

CREATE RULE y DEFAULT: ejemplo Objetivo crear un tipo de dato definido por el usuario, denominado iva CREATE RULE RULEr_porcentaje AS AS @valor>=0 and and @valor<=100 CREATE DEFAULT d_iva d_iva AS AS16 16 EXEC EXEC sp_addtype iva, iva, 'float', 'float','not 'notnull' null' go go EXEC EXEC sp_bindrule 'r_porcentaje', 'iva' 'iva' go go EXEC EXEC sp_bindefault 'd_iva', 'd_iva','iva' 'iva' Marta Zorrilla 2009-2010 31

Ejercicio Crear Crear la la base base de de datos datos Alumnos. Esta Esta consta consta de de 2 ficheros ficheros de de 4Gb 4Gby 1 fichero fichero de de log logque se se incremente por por porcentaje Crear Crear la la tabla tabla PERSONA con con los los siguientes atributos y restricciones: id id autonumérico, nombre nombre y 2 apellidos, calle, calle, nro, nro, localidad y CP CP (5 (5 dígitos dígitos numéricos). Crear Crear el el tipo tipo de de dato dato NOTA NOTA para para ser ser utilizado en en la la tabla tabla ALUMNO (numérico decimal decimal entre entre 0 y 10). 10). Crear Crear la la tabla tabla ALUMNO con con los los atributos: idalumno, idpersona, notaacceso, notabachiller. La La relación relación PERSONA_ALUMNO es es 1:1 1:1 Crear Crear índice índice sobre sobre el el atributo atributo idpersona de de la la tabla tabla ALUMNO Incorporar un un campo campo en en ALUMNO que que permita permita almacenar su su foto foto y otro otro para para la la fecha fecha de de nacimiento. Por Por último, último, añadir añadir una una columna calculada que que indique indique la la edad edad del del alumno alumno Marta Zorrilla 2009-2010 32

Manipulación n de datos SQL Server 2005

Instrucciones de Manipulación n de Datos (IMD) I Las Las IMD IMD permiten actuar sobre los los propios datos. Las Las operaciones básicas de de manipulación de de datos son: son: insertar, modificar, borrar y consultar. Las Las tres tres primeras permiten alterar el el contenido de de la la base base de de datos. La La última consiste en en localizar datos para para su su observación. Principales instrucciones: INSERT UPDATE DELETE SELECT Marta Zorrilla 2009-2010 34

IMD II : INSERT Permite añadir una o más filas en una tabla. La sintaxis para insertar una sola fila es: INSERT INTO INTO destino destino [(campo1[, campo2[,...]])]...]])] VALUES (valor1[, valor2[, valor2[,...]])...]]) La sintaxis para insertar varias filas es: INSERT INTO INTO destino destino [(campo1[, campo2[,...]])]...]])] Instrucción_SELECT destino: es el nombre de la tabla o vista donde se van a añadir filas. campo1, campo2: son los nombres de los campos donde se van a añadir los datos. valor1, valor2: son los valores que tomarán los campos en la nueva fila que se van a insertar. Cada valor se asigna al campo que corresponde a la posición del valor en la lista, así, valor1 se asigna al campo1, valor2 al campo2, y así sucesivamente. Por su frecuencia, cabe mencionar que los valores que se asignen a campos de texto deben escribirse entre comillas simples ('texto'). Instrucción_SELECT: es la instrucción SELECT cuya ejecución proporcionará las filas a insertar. Marta Zorrilla 2009-2010 35

IMD III : UPDATE Permite modificar información existente en una o varias filas de una tabla. Su sintaxis es: UPDATE destino destinoset campo1=nuevovalor1 [, [, campo2=nuevovalor2 [, [,...]] [WHERE condición] destino: es el nombre de la tabla o vista en la que se desea modificar datos. campo1, campo2: son los nombres de los campos que van a modificar su valor. nuevovalor1, nuevovalor2: son expresiones que determinan los valores que van a tomar los campos de las filas que se van a actualizar. condición: es una expresión lógica que determina qué filas se actualizarán. Sólo se actualizarán las filas que satisfagan la expresión. Si no se incluye cláusula WHERE (no hay condición) se modificarán todas las filas de la tabla. Marta Zorrilla 2009-2010 36

IMD IV : DELETE Permite eliminar una o varias filas de una tabla. Su sintaxis es: DELETE FROM FROM destino destino [WHERE condición] destino: es el nombre de la tabla o vista cuyas filas se van a eliminar. condición: es una expresión lógica que determina qué filas se borrarán. Sólo se borrarán las filas que satisfagan la expresión. Si no se incluye cláusula WHERE (no hay condición) se borrarán todas las filas de la tabla. Marta Zorrilla 2009-2010 37

IMD V : INSERT, UPDATE, DELETE 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 'Angulo Lastra, Lastra, Antonio', Antonio', 'Hernán 'Hernán Cortés,18', Cortés,18', '39002', '39002', 'Santander', 'Santander', '(34) '(34) 942 942 202 202 022', 022', '(34) '(34) 942 942 202 202 022', 022', 'UE') 'UE') Incorporar el e-mail del proveedor Luis Gil Laso, con valor mailto:gil@unican.es. UPDATE UPDATE Proveedores Proveedores SET SET emailpro='mailto:gil@unican.es' emailpro='mailto:gil@unican.es' WHERE WHERE codigpro='p004' codigpro='p004' Borrar todos los proveedores de Santander. DELETE DELETE FROM FROM Proveedores Proveedores WHERE WHERE localpro='santander' localpro='santander' Marta Zorrilla 2009-2010 38

Datos Marta Zorrilla 2009-2010 39

Importación/Exportación n de datos Instrucción Instrucción INSERT INSERT / / SELECT SELECT Import/Export Import/Export data (sólo SQL Server 2005) data (sólo SQL Server 2005) Conexión Conexión ODBC/OLEDB ODBC/OLEDB Herramienta Herramienta Integration Integration Services Services o o Gráfica, Gráfica, basada basada en en objetos objetos o o Origen/destino Origen/destino de de datos datos (OLEDB, (OLEDB, ODBC) ODBC) o o Transformaciones Transformaciones más más complejas complejas Marta Zorrilla 2009-2010 40

IMD VI : SELECT Está dedicada a obtener información de la base de datos. El resultado de su ejecución, si existe, siempre tiene estructura de una tabla y los campos de sus filas responden a la lista de selección. Tiene enormes posibilidades, lo que hace que su sintaxis presente muchas variantes. SELECT SELECT [[ predicado predicado ]] Lista_de_selección Lista_de_selección [INTO [INTOtabla_temporal] FROM FROMlista_de_tablas [WHERE [WHEREcondición ]] [GROUP [GROUP BY BYlista_campos_group_by] [HAVING [HAVINGcondición_group_by] [ORDER [ORDER BY BYcolum1 {{[ASC] [ASC] DESC DESC }}[,[, colum2 colum2 {{[ASC] [ASC] DESC DESC }, },......] ]] Marta Zorrilla 2009-2010 41

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

IMD VIII : SELECT Búsquedas Sencillas Búsquedas Cualificadas Condiciones de Comparación Condiciones de Combinación Condiciones de Subsentencia Con Operadores Con Pred.. BETWEEN... AND... Con Pred.. IN (lista_de_valores) Con Pred.. LIKE cadena_caracteres Con Pred.. NULL Simple Múltiple Autocombinación Combinación n Externa De Comparación Con Predicado IN Con Predicado EXISTS Marta Zorrilla 2009-2010 43

IMD IX : SELECT Funciones de Grupo Funciones de Fecha Agrupamiento de Datos Condición n de Agrupamiento Ordenación n del Resultado Guardar Resultado en una Tabla Unión, n, Intersección n y Excepción n de Sentencias Uso de funciones almacenadas Marta Zorrilla 2009-2010 44

IMD X : SELECT Búsquedas Sencillas (Ejemplos) Obtener el contenido de la tabla Articulos. SELECT ** FROM FROMArticulos Listar el nombre y el teléfono de todos los Proveedores. SELECT nombrpro as as Nombre, telefpro telefpro as as Telf Telf FROM FROMProveedores Marta Zorrilla 2009-2010 45

IMD XI : SELECT Búsquedas Cualificadas. Cond. de Comparación n 1 (Ejemplos) Las condiciones de comparación son expresiones lógicas que permiten comparar una columna o expresión con otra columna, expresión o lista de columnas. Pueden adoptar una de las formas siguientes: exp expoperador_de_comparación exp exp exp exp [NOT] [NOT] BETWEEN exp expand exp exp exp exp [NOT] [NOT] IN IN (lista (lista de de valores) campo campo [NOT] [NOT] LIKE LIKE 'cadena_de_caracteres' campo campo IS IS [NOT] [NOT] NULL NULL Encontrar los artículos cuyo precio unitario sea superior a 180 y su stock sea inferior o igual a 100. SELECT ** FROM FROMArticulos WHERE preunart > 180 180 AND ANDstockart <= <= 100 100 Marta Zorrilla 2009-2010 46

IMD XII : SELECT Búsquedas Cualificadas. Cond. de Comparación n 2 (Ejemplos) Listar los artículos cuyo precio unitario esté comprendido entre 180 y 300. SELECT ** FROM FROMArticulos WHERE preunart BETWEEN 180 180 AND AND300 Hallar todos los proveedores de las ciudades de Santander, Madrid y Barcelona. SELECT codigpro, nombrpro, direcpro, cpostpro, localpro FROM FROMProveedores WHERE localpro IN IN ('Santander', 'Madrid', 'Barcelona') Marta Zorrilla 2009-2010 47

IMD XIII : SELECT Búsquedas Cualificadas. Cond. de Comparación n 3 (Ejemplos) Encontrar todos los proveedores cuyo primer apellido comience por una letra comprendida entre la A y la J. SELECT codigpro, nombrpro, direcpro, cpostpro, localpro FROM FROMProveedores WHERE nombrpro LIKE LIKE '[A-J]%' Hallar todos los proveedores de los que no se tenga información sobre su correo electrónico. SELECT codigpro, nombrpro, direcpro, cpostpro, localpro, telefpro telefpro FROM FROMProveedores WHERE emailpro IS IS NULL NULL Marta Zorrilla 2009-2010 48

IMD XIV : SELECT Búsquedas Cualificadas. Cond. de Combinación Combinación n Simple (Ejemplo) Las búsquedas cualificadas son las que afectan a datos de más de una tabla. Una Una Combinación Simple Simplees es aquella aquella en en la la que quela la condición de de la la cláusula FROM FROM (o (o WHERE) contiene una una comparación de de igualdad entre entre campos pertenecientes a dos dos tablas tablas distintas. Listar todos los proveedores a los que se ha efectuado algún pedido entre el 20/1/2006 y el 15/9/2006. SELECT DISTINCT Proveedores.codigpro, nombrpro, direcpro, localpro FROM FROM Proveedores INNER INNER JOIN JOINPedidos ON ONProveedores.codigpro = Pedidos.codigpro WHERE fechaped BETWEEN '2006/01/20' AND AND '2006/09/15' Marta Zorrilla 2009-2010 49

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

IMD XV : SELECT Búsquedas Cualificadas. Cond. de Combinación Combinación n Múltiple M (Ejemplo) Una Una Combinación Múltiple es es aquella aquella combinación que que relaciona varios varios campos de de más más de de dos dos tablas. tablas. Encontrar todos los artículos que han sido pedidos entre el 15/5/2006 y el 30/5/2006. SELECT DISTINCT Articulos.codigart, descrart FROM FROMPedidos INNER INNER JOIN JOIN (Lineas (Lineas INNER INNER JOIN JOINArticulos ON ONLineas.codigart = Articulos.codigart) ON ONPedidos.numped = Lineas.numped WHERE fechaped BETWEEN '2006/05/15' AND AND '2006/05/30' Marta Zorrilla 2009-2010 51

IMD XVI : SELECT Búsquedas Cualificadas. Cond. de Combinación Autocombinación (Ejemplo) Una Una Autocombinación es es una una combinación de de una una tabla tabla con con ella ella misma. misma. Localizar todos los pedidos que tienen varias líneas del mismo artículo. SELECT x.numped, x.numlin, x.codigart FROM FROMLineas Lineasx, x, Lineas Lineasy WHERE x.numped = y.numped AND AND x.numlin <> <> y.numlin AND ANDx.codigart = y.codigart Marta Zorrilla 2009-2010 52

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

IMD XVII : SELECT Búsquedas Cualificadas. Cond. de Combinación Combinación n Externa (Ejemplo) Una Una Combinación Externa es es aquella aquellaque da da preferencia a una una tabla tabla con con respecto a otra. otra. Así, Así, las las filas filas de de la la tabla tabla dominante serán serán seleccionadas aunque aunque la la condición de de enlace enlace no no se se haya haya verificado. Listar todos los proveedores indicando, en su caso, los que han recibido algún pedido. SELECT Proveedores.codigpro, nombrpro, Pedidos.numped FROM FROMProveedores LEFT LEFT JOIN JOINPedidos ON ON Proveedores.codigpro = Pedidos.codigpro Preferencia a la tabla de la izquierda SELECT Proveedores.codigpro, nombrpro, Pedidos.numped FROM FROMPedidos RIGHT RIGHT JOIN JOINProveedores ON ON Proveedores.codigpro = Pedidos.codigpro Preferencia a la tabla de la derecha Marta Zorrilla 2009-2010 54

IMD XVII : SELECT Búsquedas Cualificadas. Cond. de Combinación Combinación n Externa (Ejemplo 2) 2) En En el el FROM FROM de de una unaconsulta pueden pueden establecerse predicados. Estos Estos se se aplican aplican antes antes de de ejecutar el el join, join, mientras que que cuando cuando se se establecen en en el el WHERE se se ejecutan al al resultado del del join. join. El El resultado puede puede ser ser distinto distinto si si la la condición de de join joines es LEFT LEFTo RIGHT. Listar todos los proveedores de Santander indicando, en su caso, los que han recibido algún pedido. SELECT SELECTProveedores.codigpro, nombrpro, nombrpro, Pedidos.numped Pedidos.numped FROM FROMPedidos PedidosLEFT JOIN JOIN Proveedores Proveedores ON ON Proveedores.codigpro = Pedidos.codigpro Pedidos.codigpro AND ANDLocalpro='SANTANDER' SELECT SELECTProveedores.codigpro, nombrpro, nombrpro, Pedidos.numped Pedidos.numped FROM FROMPedidos PedidosLEFT JOIN JOINProveedores ON ON Proveedores.codigpro = Pedidos.codigpro Pedidos.codigpro WHERE WHERELocalpro= SANTANDER Marta Zorrilla 2009-2010 55

IMD XVIII : SELECT Búsquedas Cualificadas. Cond. de Subsentencias (Ejemplo de comparación) La La instrucción instrucción SELECT SELECTpermite contrastar contrastar una una expresión expresión o un un campo campo con con el el resultado resultado de de otra otra instrucción instrucción (subsentencia) (subsentencia) SELECT. SELECT. A este este contraste contraste se se le le llama llama condición condición de de subsentencia subsentenciay y las las dos dos instrucciones instrucciones se se llaman llaman instrucciones instruccionesimbricadas. imbricadas. A su su vez, vez, la la subsentencia subsentenciapuede incluir incluir en en su su condición condición a otra otra subsentencia subsentenciay y así asísucesivamente. sucesivamente. Las Las condiciones condiciones de de subsentencia subsentenciapueden adoptar adoptar una una de de las las formas formas siguientes: siguientes: exp exp operador_de_comparación {ALL {ALL [ANY [ANY SOME] SOME] }} (instrucción SELECT) exp exp [NOT] [NOT] IN IN (instrucción SELECT) [NOT] [NOT] EXISTS (instrucción SELECT) Encontrar los artículos cuyo stock es mayor que toda cantidad pedida del mismo artículo. SELECT articulos.codigart, descrart, stockart FROM FROMArticulos WHERE stockart > ALL ALL (SELECT unilin unilin FROM FROMLineas WHERE Articulos.codigart = Lineas.codigart) Marta Zorrilla 2009-2010 56

IMD XIX : SELECT Búsquedas Cualificadas. Cond. de Subsentencias. (Ejemplos con predicados IN y EXIST) Listar los artículos que no han sido pedidos entre el 24 de Septiembre y el 21 de Noviembre de 2006. SELECT DISTINCT Articulos.codigart, descrart FROM FROM Articulos WHERE Articulos.codigart NOT NOT IN IN (SELECT Lineas.codigart FROM FROMLineas, Pedidos WHERE Pedidos.numped = Lineas.numped AND ANDPedidos.fechaped BETWEEN '2006/09/24' AND AND '2006/11/21') Encontrar los proveedores de Madrid a los que se les ha realizado algún pedido entre el 24/09/2006 y el 21/11/2006. SELECT DISTINCT Proveedores.codigpro, nombrpro FROM FROM Proveedores WHERE EXISTS (( SELECT ** FROM FROMPedidos WHERE Proveedores.codigpro = Pedidos.codigpro AND ANDfechaped BETWEEN '2006/09/24' AND AND '2006/11/21') AND ANDlocalpro = 'Madrid Marta Zorrilla 2009-2010 57

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