SQL (Structured Query Language): Lenguaje de Consulta Estructurado NO es un lenguaje de programación (con SQL no se desarrollan aplicaciones) es el lenguaje base de casi todos los SGBD (Sistemas Gestores de Bases de Datos). Con SQL se puede implementar una BD, crear, modificar o borrar sus estructuras, insertar, modificar o borrar sus datos,… gestionar, en definitiva, una BD. DDL………………………… Crea modifica o borra las estructuras de la base (Data Description Language), Lenguaje de Definición de Datos de datos. Define sus columnas (atributos) y el tipo de los mismos. SQL DML………………………… Inserta, modifica o borra datos de la BD. Permite (Data Manipulation Language), Lenguaje de Manipulación de Datos la consulta de datos sujetos a determinadas condiciones. CREATE……….. Crea tablas, campos e índices DDL tiene COMANDOS ALTER……….…. Modifica las tablas, añadiendo atributos (columnas) o cambiando la definición de éstos DROP…….……. Elimina tablas e índices 1 COMANDOS …. : SELECT, INSERT, UPDATE, DELETE CLAÚSULAS…… : FROM, WHERE, GROUP BY, HAVING, ORDER BY - LÓGICOS …….: AND, OR, NOT OPERADORES DML -DE COMPARACIÓN..: <, <=, >, >=, =, <>, BETWEEN, LIKE, IN tiene -AVG……….………..…… : Promedio de valores -COUNT…….……….. … : Nº total de registros FUNCIONES DE AGREGADO -SUM……………….…. … : Suma de registros -MAX……………….…. … : Mayor de los registros -MIN…………………...… : Mínimo de los registros Tipo de datos TEXTO: Caracteres o dígitos con los que no se opera: - varchar(x) cadena de longitud variable (1-255) - char(x) cadena de longitud fija (1-255) - text, blob, longtext, longblob aprox. > 60.000 caracteres NUMERO: Dígitos numéricos operables matemáticamente: - integer(x) ó int(x) valores enteros - tinyint(x), un subtipo del anterior de -128 a 127 (0-255, sin signo) - decimal(t,d) ó numeric(t,d) valores decimales. Carácter separador: . (el punto) t = número total de dígitos d = número total de dígitos decimales, si no se pone nada, por defecto, es cero - integer (x) unsigned ó decimal(t,d) unsigned entero o decimal sin signo FECHA/HORA: Para almacenar fechas u horas. Algunos formatos: - date (fecha) formato “YYYY-MM-DD” (de 1000-01-01 a 9999-12-31) 2 - time (fecha) formato “HH:MM:SS” (de -838:59:59 a 838:59:59) - datatime (fecha y hora) formato “YYYY-MM-DD HH:MM:SS” (de 1000-01-01 00:00:00 a 9999-12-31 23:59:59) - year (año): year(2) formato “YY” (de 1970 a 2069) year(4) formato “YYYY” (de 1901 a 2155) Separadores: “ / “, “ – “, “ . “ - Si ingresamos '2006-2-1' (mes y día de 1 dígito), lo toma como '2006-02-01'. - Si ingresamos '20060201' (cadena sin separador), lo toma como '2006-02-01'. - Si ingresamos 20060201 (numérico), lo toma como '2006-02-01'. - Si ingresamos '20060201153021' (cadena sin separadores), lo toma como '2006-02-01 15:30:21'. - Si ingresamos '200602011530' (cadena sin separadores con un dato faltante) no lo reconoce como datatime y almacena ceros. - Si ingresamos '2006023' (cadena sin separadores con un dato faltante) no lo reconoce como fecha y almacena ceros. - Si ingresamos '2006-02-01 11:30:21' (valor datetime) en un campo 'date', toma sólo la parte de la fecha, la hora se corta, se guarda '2006-02-01'. DDL CREAR UNA TABLA: CREATE TABLE nombre_tabla ( nombre_columna1 tipo_columna1, nombre_columna2 tipo_columna2, …… , nombre_ columna_n tipo columna_n [ opcional] ); BORRAR UNA TABLA: DROP TABLE nombre_tabla; - No se puede borrar una tabla si está abierta - No se puede borrar la tabla si hay otras que referencien a la que se pretende borrar (se infringen reglas de integridad referencial) 3 MODIFICAR UNA TABLA: Añadir una columna: ALTER TABLE nombre_tabla ADD COLUMN nombre_nueva_columna tipo_nueva_columna; Borrar una columna: ALTER TABLE nombre_tabla DROP COLUMN nombre_columna_a_borrar; ( e ( RESTRICCIONES e s RESTRICCIÓN: característica adicional que tiene una columna o una combinación dec columnas. Pueden ser: r i de la definición de la Restricción de tipo 1 (restricción a nivel de columna): Aparece dentro b columna después del tipo de dato. Afecta a esa columna. i Restricción de tipo 2 (restricción a nivel de tabla): Se define después de definir todas las r columnas de la tabla. A afecta a una columna o a una combinación de columnas. c TIPOS: o l Restricción PRIMARY KEY: restricción de clave primaria u m Restricción UNIQUE: restricción de unicidad n Restricción NOT NULL: restricción de obligatoriedad e s Restricción de clave foránea (FOREIGN KEY): restricción de integridad referencial o p c i o n a l ) DEFINIR UNA RESTRICCIÓN: se definen al definir la tabla: 1.- Restricción de clave primaria (primary key) Sintaxis a nivel de columna (tipo 1): nombre_columna tipo_columna PRIMARY KEY c r i b CONSTRAINT nombre_restriccion PRIMARY KEY (columna/s_que_son_clave_primaria) i r Es opcional Sintaxis a nivel de tabla (tipo 2): c o l u 4 2.- Restricción de unicidad (unique) Sintaxis a nivel de columna (tipo 1): nombre_columna tipo_columna UNIQUE Sintaxis a nivel de tabla (tipo 2): CONSTRAINT nombre_restriccion UNIQUE (columna/s_que_no_permiten_valores_duplicados) 3.- Restricción de obligatoriedad (not null) Solo se define a nivel de columna (tipo 1). Sintaxis: nombre_columna tipo_columna NOT NULL 4.- Restricción de integridad referencial (foreign key) Sintaxis a nivel de tabla (tipo 2): CONSTRAINT nombre_restriccion FOREIGN KEY (nombre_columna/s) REFERENCES nombre_tabla2 (columna_a_la_que_referencia) PARA AÑADIR UNA RESTRICCIÓN A UNA COLUMNA DE UNA TABLA (nombre_tabla) YA CREADA: ALTER TABLE nombre_tabla ADD CONSTRAINT [PRIMARY KEY/UNIQUE] (nombre_columna); Ejemplo: ALTER TABLE tab1 ADD CONSTRAINT c1 UNIQUE (col 3); Aquí, se añade a la tabla tab1, previamente creada, en su columna llamada col 3, una restricción de tipo UNIQUE (no permite duplicados) llamada c1. ALTER TABLE tab1 ADD CONSTRAINT c2 FOREIGN KEY (col 4) REFERENCES tab2 (columna_a_la_que_referencia); Aquí, se añade a la tabla tab1, previamente creada, en su columna llamada col 4, una restricción de tipo FOREIGN KEY (clave foránea) llamada c2. 5 PARA BORRAR UNA RESTRICCIÓN DE UNA COLUMNA DE UNA TABLA (nombre_tabla) YA CREADA: ALTER TABLE nombre_tabla DROP [PRIMARY KEY/INDEX (si es unique)/FOREIGN KEY] nombre_restricción Ejemplo: ALTER TABLE tab1 DROP FOREIGN KEY c1; Aquí, se borra la restricción creada anteriormente. INDICES INDICE: estructura de datos que permite recuperar las filas de una tabla de forma más rápida, además de proporcionar una ordenación distinta a la que la tabla tenga. Se definen sobre una columna o grupo de columnas: --- Sobre una columna: p.e. definir un índice sobre una columna población de una tabla clientes, permite recuperar los cliente (los registros) ordenados alfabéticamente por el nombre de la población. --- Sobre varias columnas: se ordenan alfabéticamente por la primera columna, y dentro de un mismo valor de la primera columna se ordenan alfabéticamente por la segunda columna y así sucesivamente. PARA CREAR UN INDICE: Ejemplo: CREATE INDEX i_editorial ON libros (editorial ASC); Se crea el índice de nombre i_editorial en la columna editorial de la tabla libros. Ordena los libros según la editorial, por orden alfabético ascendente (ASC). Si se indica DESC el orden es descendente. Si no se indica nada por defecto asume ASC La tabla quedará indexada por el campo editorial PARA BORRAR UN INDICE: Ejemplo: DROP INDEX i_editorial ON clientes; Se elimina el índice anteriormente creado. 6