Estándar En 1986, ANSI (American National Standard Institute) definión un estándar para (Structured Query Language) que fue posteriormente adoptado en 1987 como estándar internacional por ISO (International Organization for Standardization) Definición del lenguaje hecha por ISO 2 Índice Escritura de Comandos Definición de Datos Actualizaciones de la Base de Datos 3 Objetivos Un lenguaje de bases de datos debe permitir al usuario: Crear la base de datos y las estructuras de relación Realizar tareas básicas de gestión de datos, como la inserción, modificación y borrado de los datos de las relaciones Realizar consultas tanto simples como complejas Componentes Componentes principales del : Lenguaje de Definición de Datos (DDL, Data Definition Language) para definir la estructura de la base de datos y controlar el acceso a los datos Lenguaje de Manipulación de Datos (DML, Data Manipulation Language) para extraer y actualizar los datos Su sintaxis y estructura deben ser relativamente fáciles de aprender Portable No es completo computacionalmente porque no tiene estructuras de control es un lenguaje orientado a transformación de datos 5 6
Características Se trata de un lenguaje no procedimental: lo que se especifica es qué información queremos, en lugar de especificar cómo obtenerla no requiere que se especifique el método de acceso a los datos Al igual que la mayoría de los lenguajes modernos, es de formato prácticamente libre, lo que quiere decir que las diversas partes de una instrucción no tienen por qué ser escritas en ubicaciones concretas de la pantalla La estructura de los comandos está compuesta por palabras inglesas normales, tal como, CREATE TABLE, INSERT, SELECT, El estándar ISO utiliza los términos tablas, columnas y filas 7 Escritura de Comandos Instrucciones Cláusulas Una instrucción está compuesta por palabras reservadas y palabras definidas por el usuario Las palabras reservadas son una parte fija del lenguaje y tienen un significado también fijo; Deben escribirse exactamente como se indica y no pueden dividirse en varias líneas Las palabras definidas por el usuario son compuestas por este (de acuerdo a ciertas reglas sintácticas) y representan los nombres de diversos objetos de la base de datos, como tablas, columnas, vistas, índices, Muchos dialectos requieren un terminador de instrucción (normalmente ; ) Escritura de Comandos 9 Aunque es de formato libre, las instrucciones serán más legibles si se utilizan técnicas de sangrado y alineación Cada cláusula de una instrucción debe comenzar en una nueva línea El principio de cada cláusula debe estar alineado con el comienzo de las cláusulas restantes Si una cláusula tiene varias partes, cada una de ellas debe aparecer en un línea distinta y debe estar sangrada con respecto al comienzo de la cláusula, para que se vea claramente la relación Los componentes de una instrucción no distinguen entre mayúsculas y minúsculas (excepto datos carácter) Escritura de Comandos 10 Notación Se usarán letras en mayúsculas para representar las palabras reservadas, las cuales deben escribirse exactamente como se indica Se usarán letras en minúsculas para representar las palabras definidas por el usuario Una barra vertical ( ) indica elección entre alternativas Las llaves ({a}) indican un elemento obligatorio Los corchetes ([a]) indican un elemento opcional Los puntos suspensivos ( ) se emplean para indicar repetición opcional Tipos de Datos de ISO Escritura de Comandos 11
Identificadores Los identificadores se utilizan para identificar objetos en la base de datos (nombres de tablas, nombres de vistas, nombres de columnas, ) Datos Booleanos Valores TRUE y FALSE Soportan el valor UNKNOWN como valor NULL Los caracteres permitidos son: A Z, a z, 0 9 y _ No puede tener más de 128 caracteres de longitud Debe comenzar por una letra No pueden contener espacios 13 14 Datos de Caracteres Datos de Bit CHARACTER [VARYING] [longitud] CHARACTER CHAR; CHARACTER VARYING VARCHAR BIT [VARYING] [longitud] numsucursal CHAR(4) direccion VARCHAR(30) cadenabit BIT(4) 15 16 Datos Numéricos Exactos NUMERIC [precisión [,escala]] DECIMAL [precisión [,escala]] INTEGER SMALLINT INTEGER INT; DECIMAL DEC Datos Numéricos Aproximados FLOAT [precisión] REAL DOUBLE PRECISION habitac SMALLINT salario DECIMAL (7,2) 17 18
Datos de Fecha y Hora DATE TIME [precisióntemporal] [WITH TIME ZONE] TIMESTAMP [precisióntemporal] [WITH TIME ZONE] visitas DATE Datos de Intervalo INTERVAL {{campoinicio TO campofin} campofechahoraúnico} campoinicio = YEAR MONTH DAY HOUR MINUTE [(precisióncampoinicialintervalo)] campofin = YEAR MONTH DAY HOUR MINUTE [(precisiónfraccionessegundo)] campofechahoraúnico = campoinicio SECOND [(precisióncampoinicialintervalo[, precisiónfraccionessegundo])] INTERVAL YEAR(2) TO MONTH 19 20 +, -, *, /: Operadores aritméticos obvios BIT_LENGTH: Longitud de una cadena en bits OCTET_LENGTH: Longitud de una cadena en octetos CHAR_LENGTH: longitud de una cadena en caracteres CAST: Convierte el valor de una expresión de un tipo de datos en un valor correspondiente a otro tipo de datos : Concatena dos cadenas de caracteres o de bits CURRENT_USER (USER): Devuelve una cadena de caracteres que representa el identificador actual de autorización (nombre de usuario) SESSION_USER: Devuelve una cadena de caracteres que representa el identificador de autorización de la sesión SYSTEM_USER: Devuelve una cadena de caracteres que representa el identificador de autorización que ha invocado el módulo actual LOWER: Convierte las letras mayúsculas en minúsculas UPPER: Convierte las letras minúsculas en mayúsculas TRIM: Elimina los caracteres iniciales (LEADING), finales (TRAILING) o tanto iniciales como finales (BOTH) de una cadena 21 22 POSITION: Devuelve la posición de una cadena dentro de otra cadena SUBSTRING: Devuelve una subcadena seleccionada de una cadena CASE: Devuelve un valor entre una serie de valores especificados, basándose en alguna condición CURRENT_DATE: Devuelve la fecha actual en la zona horaria local al usuario CURRENT_TIME: Devuelve la hora actual en la zona horaria predeterminada de la sesión actual CURRENT_TIMESTAMP: Devuelve le fecha y la hora actual en la zona horaria predeterminada de la sesión actual EXTRACT: Devuelve el valor de un campo especificado de un valor de fecha y hora o de intervalo 23 24
Datos Requeridos Características de Integridad Especificador de columna NOT NULL categoria VARCHAR(10) NOT NULL 26 Restricciones de Dominio CHECK (condiciónbúsqueda) CREATE DOMAIN NombreDominio [AS] tipodatos [DEFAULT opciónpredeterminada] [CHECK (condiciónbúsqueda)] DROP DOMAIN NombreDominio [RESTRICT CASCADE] sexo CHAR NOT NULL CHECK (sexo IN ( M, F )) CREATE DOMAIN TipoSexo AS CHAR DEFAULT M CHECK (VALUE IN ( M, F )) sexo TipoSexo NOT NULL Integridad de Entidades PRIMARY KEY UNIQUE PRIMARY KEY (numpropiedad) PRIMARY KEY (numcliente,numpropiedad) 27 28 Integridad Referencial FOREING KEY ON DELETE; ON UPDATE CASCADE, SET NULL, SET DEFAULT, NO ACTION Restricciones Generales CREATE ASSERTION NombreAserción CHECK (condiciónbúsqueda) FOREING KEY (numsucursal) REFERENCES Sucursal FOREING KEY (numpersonal) REFERENCES Personal ON DELETE SET NULL 29 30
Creación n de una Base de Datos Definición de Datos CREATE SCHEMA [Nombre AUTHORIZATION IdentificadorCreador] DROP SCHEMA Nombre [RESTRIC CASCADE] CREATE SCHEMA Test AUTHORIZATION Perez; 32 Creación n de una Tabla Modificación n de una Tabla CREATE TABLE NombreTabla {(NombreColumna tipodatos [NOT NUL] [UNIQUE] [DEFAULT opciónpredeterminada] [CHECK (condiciónbúsqueda)] [, ]} [PRIMARY KEY (listadecolumnas),] {[UNIQUE (listadecolumnas)][, ]} {[FOREING KEY (listacolumnasclaveexterna) REFERENCES NombreTablaPadre [(listacolumnasclavecandidatas)] [MATCH {PARTIAL FULL} [ON UPDATE accciónreferencial] [ON DELETE accciónreferencial]][, ]} {[CHECK (condiciónbúisqueda)][, ]}) 33 ALTER TABLE NombreTabla [ADD[COLUMN] nombrecolumna tipodato [NOT NULL][UNIQUE] [DEFAULT opciónpredeterminada] [CHECK (condiciónbúsqueda)]] [DROP[COLUMN] nombrecolumna [RESTRIC CASCADE]] [ADD[CONSTRAINT[nombreRestricción]] definiciónrest] [DROP[CONSTRAINT] nombreres [RESTRIC CASCADE]] [ALTER[COLUMN] SET DEFAULT opciónpredeterminada] [ALTER[COLUMN] DROP DEFAULT] 34 Eliminar una Tabla Índices DROP TABLE NombreTabla [RESTRICT CASCADE] CREATE [UNIQUE] INDEX NombreÍndice ON nombretabla (NombreColumna[ASC DESC][, ]) DROP INDEX NombreÍndice 35 36
Vistas CREATE VIEW nombrevista [(nuevonombrecolumna [, ])] AS subselección [WITH [CASCADE LOCAL] CHECK OPTION] DROP VIEW NombreVista [RESTRIC CASCADE] Actualización de la Base de Datos 37 Adición n de Datos Modificación n de Datos INSERT INTO NombreTabla [(ListaColumnas)] VALUES (ListaValoresDatos) SELECT UPDATE NombreTabla SET NombreColumna1 = valordatos1 [, ] [WHERE condiciónbúsqueda] INSERT INTO Personal VALUES ( SG16, Alba, Blanco, Ayudante, F, DATE 1957-05-25,8300, B003 ); UPDATE Personal SET salario = salario * 1.03 Actualización n de la Base de Datos 39 Actualización n de la Base de Datos 40 Borrado de Datos DELETE FROM NombreTabla [WHERE condiciónbúsqueda] DELETE FROM Visitas WHERE numpropiedad= PG4 Actualización n de la Base de Datos 41