BDD

////////////////////////////////////////SQL /////////////////////// ////////////////////////////////////////SQL ////////

Views 96 Downloads 8 File size 23KB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

////////////////////////////////////////SQL /////////////////////// ////////////////////////////////////////SQL /////////////////////// ////////////////////////////////////////SQL /////////////////////// ////////////////////////////////////////SQL /////////////////////// ////////////////////////////////////////SQL /////////////////////// //operaciones de agregacion //CREAR //MODIFICAR

ESTANDAR//////////////////////////// ESTANDAR//////////////////////////// ESTANDAR//////////////////////////// ESTANDAR//////////////////////////// ESTANDAR////////////////////////////

create database bduoc; use bduoc; create table clientes(codigo_cli integer, nombre_cli char(30) not null, nif char (12), direccion char (30), ciudad char(20), telefono char (12), primary key (co digo_cli), unique(nif)); create table departamentos (nombre_dep char(20), ciudad_dep char (20), telefono integer default null, primary key ( nombre_dep, ciudad_dep)); create table empleados (codigo_empl integer, nombre_empl char(20), apellido_empl char(20), sueldo real, check (sueldo >7000), nombre_dep char (20), ciudad_dep c har (20), num_proyec integer, primary key (codigo_empl), foreign key (num_proyec ) references proyectos(codigo_proyec)); create table proyectos(codigo_proyec integer, nombre_proyec char(20), precio rea l, fecha_inicio date, fecha_prev_fin date, fecha_fin date default null, codigo_c liente integer, primary key (codigo_proyec), check (fecha_inicio1; select c.nombre_cli , c.codigo_cli from proyectos p join clientes c on c.codigo_ cli = p.codigo_cliente group by c.codigo_cli, c.nombre_cli having count(*)>1; select p.nombre_proyec, p.codigo_proyec from proyectos p, empleados e where e.nu m_proyec = p.codigo_proyec group by p.nombre_proyec, p.codigo_proyec having min( e.sueldo) > '30000'; ////////////////////////////////////////MYSQL ///////////////////////// ////////////////////////////////////////MYSQL ///////////////////////// ////////////////////////////////////////MYSQL ///////////////////////// ////////////////////////////////////////MYSQL ///////////////////////// ////////////////////////////////////////MYSQL /////////////////////////

ESTANDAR////////////////////////// ESTANDAR////////////////////////// ESTANDAR////////////////////////// ESTANDAR////////////////////////// ESTANDAR//////////////////////////

drop database demo; create database demo; use demo; -----Estructura de la tabla productos --create table productos ( parte varchar(20), tipo varchar(20), especificacion varchar(20), psugerido float(6,2), clave int (3) zerofill not null auto_increment, primary key (clave) ); insert into productos (parte,tipo,especificacion,psugerido) values ('Procesador', '2 GHz', '32 bits', null), ('Procesador', '2.4 GHz', '32 bits', 35), ('Procesador', '1.7 GHz', '64 bits', 205), ('Procesador', '3 GHz', '64 bits', 560),

('RAM', '128MB', '333 MHz', 10), ('RAM', '256MB', '400 MHz', 35), ('Disco Duro','80 GB','7200 rpm',60), ('Disco Duro','120 GB','7200 rpm',80), ('Disco Duro','200 GB','7200 rpm',110), ('Disco Duro','40 GB','4200 rpm',null), ('Monitor', '1024x876', '75 Hz', 80), ('Monitor', '1024x876', '60 Hz', 67); -----Estructura de la tabla proveedor --create table proveedores ( empresa varchar(20) not null, pago set('crédito', 'efectivo'), primary key (empresa) ); insert into proveedores (empresa, pago) values ('Tecno-k','crédito'), ('Patito','efectivo'), ('Nacional','crédito,efectivo'); ---estructura de la tabla ganancias ----estructura de la tabla precios -create table precios ( empresa varchar (20) not null, clave int (3) zerofill not null, precio float (6,2), foreign key (empresa) references proveedores, foreign key (clave) references productos ); insert into precios values ('Nacional', 001, 30.82), ('Nacional', 002, 32.73), ('Nacional', 003, 202.25), ('Nacional', 004, 9.76), ('Nacional', 005, 31.52), ('Nacional', 006, 58.41), ('Nacional', 007, 64.38), ('Patito', 001, 30.40 ), ('Patito', 002, 33.63 ), ('Patito', 003, 195.56 ), ('Patito', 005, 9.78 ), ('Patito', 006, 32.44 ), ('Patito', 007, 59.99 ), ('Patito', 010, 62.02 ), ('Tecno-k',003, 198.34 ), ('Tecno-k',005, 9.27 ), ('Tecno-k',006, 34.85), ('Tecno-k',007, 59.95 ), ('Tecno-k',010, 61.22 ), ('Tecno-k',012, 62.29 ); -- cuando se establece la coneccion con el servidor las lettras h u p se utiliza n

-- h define el servidor,u el usuario y p pide la contraseña -- quit; o \q es para salir -- usualmente las sentencias comienzan con select -- user()muestra el usuario actual de la base de datos --connection_id() el identificador de la coneccion --version() la version del mysql --database() la base de datos en uso -- now() muestra datos sobre lafecha y hora actuales --select "y texto en comillas"; manda mensajes en consola --\c cancela instrucciones -- las variables de usuario se asignan con set @nombrevariable -- y se consultan con select @nombre variable -- se pueden usar como parametros de variables, como sqrt , sin cos, -- las vriables no tienen ningun valor, por defecto se declaran como null -- hay que tener cuidado al usarlas, ya que son evaluadas por el servidor -- y se reaizan conversiones de tipo implicitas en ellas. -- para realizar el procesamiento por lotes de un archivo se hace de la siguient e forma --mysql -u usuario -h servidor -p >nombredelarchivo.sql -- o con el comando source : source nombredelarchivo.sql -- para mantener un log de uso d ela base de datos y sus operaciones en cada ses ion --se usa lo siguiente TEE archivo_registro.txt -- para cancelar esto se hace con NOTEE --select database; muestra las bases de datos en uso --show databases; muestra las bases de datos existentes en el sistema -- use basededatos; nos permite usar una base de datos -- show tables; muetra las tablas de la base de datos -- describe tabla; os ofrece informacion sobre la estructura de cada tabla -- para crear una base de datos seusa create database nombre; -- para borrar una base de dtos se usa drop database nombre; -- mysql es sensible al uso de mayusculas y minusculas -- una vez conectados y seleccionada una base de datos las tablas se crean del s iguiente modo -- create table nombre( -- columna1 tipo, -- columna2 tipo, -- columna_etc tipo, --); -- para borrar una tabla se usa el comando drop -- drop table nombredelatabla; -- puede usarse el comando exist, por ejemplo --drop table if exist nombredelatabla; --los atributos de una columna pueden ser null, not null, default valor, auto_in cremente primary key -- null permite valores nulos , es el default si no se especifica lo contrario -- not null no aceptara valores nulos --default valor, es el valor que por defecto se asignara a la columna --auto_increment es un valor numerico que se incrementara al ultimo valor regist rado en uno, solo aplica en llaves primarias --primary key es la clave primaria de la tabla, tambien debe ser declarada como not null --son restricciones de tabla las palabras primary key , unique, foreign key (co lumna) references tabla ( columna2) --primary key define las columnas que seran claves primarias -- unique dedine columnas en las que no pueden dublicarse valores, suelen ser cl aves candidatas del modelo --foreign key ( columna ) rederences tabla ( columna 2) define los valores de co lumna, se permitiran solo si --existen en tabl(columna2) es decir, columna hace referencia a los registros de

tabla --esto asegura que no se realizen referencias a registros que no existen. --los tipos de datos que se suelen manejar en mysql son --numericos --cadenas de caracteres --fechas/horas --nulos --los nulos son un tipo especial de dato, ya que significan ausencia de valor --y se aplican a todos los tipos de datos. --tipos de datos numericos. -- los tipos enteros almacenan hasta 8 bytes, y pueden tener algunos valores adi cionales --unsigned no acepta numeros negativos --zerofill, rellena de ceros los espacios vacios a la izquierda y tampoco permi te negativos --los tipos de entero son tinyint, smallint, mediumint, int ,bigint --tinyint almacena 1 byte --smallint almacena 2 bytes --mediumint almacena 3 bytes --int almacena 4 bytes --bigint almacena 8 bytes --los numeros de punto flotante son float y double aunque tambien se incluye el tipo --decimal el que se almacena como una cadena de caracteres y no en binario --float almacena 4 bytes es de simple presicion --double almacena 8 bytes es de doble presicion --decimal el ancho de la columna mas 2 bytes --cadenas de caracteres -- tipos : char varchar tinytext text mediumtext longtext ennum set -- char(t) t = tamaño definido al declarar = t bytes --varchar(t) = tamaño definido al declarar = t bytes -- tinytext 2 a la 8-1bytes -- text 2 a la 16-1bytes -- mediumtext 2 a la 24-1bytes -- longtext 2 a la 32-1bytes -- enum 65535 valores 1 o 2 bytes -- set 64 valores --fechas y horas --tipos date, time, datetime, timestamp, year --date del 1000-01-01 al 9999-12-31 --time de 838:59:59 a 838_59:59 --datetime de 1000-01-01 00:00:00 al 9999-12-31 23:59:59 --timestamp 19700101000000 al 2037 --year de 1901 a 2155 --AGREGAR MODIFICAR ELIMINAR TABLAS O COLUMNAS --para agregar columnas a una tabla se usa: --alter table tablaAModificar add ( columna tipo propiedades, columna2 tipo prop iedades); -- otro modo de insertar es: --alter table tablaAModificar add columnaNueva propiedades after/before columna --este modo nos permite seleccionar antes o despues de que columna se pondra la nueva -- modificar columnas, se puede hacer con la opcion modify, es como volver a def inirlas --alter table nombredetabla modify nombrecolumna tipo propiedades ; --para cambiar el nombre de columna se utiliza change --alter table nombretabla change nombrebrecolumna nombrenuevo tipo; --alter table tambien permite realizar ordenaciones fisicas de las tablas --alter table nombre order by criterio; --tambien permite cambiar el nombre de una tabla

--alter table nombre rename nombrenuevo; --PARA cOIAr tablas e puede usar rename --rename table basededatos.tabla to basededatos.tabla2; -- aunque elimino la primera tabla, solo renombro. --otro modo de crear una nueva tabla es usando el contenido de una ya existente basandose en un resultado --create tabla nuevatabla select * from tablaacopiar; --o un equivalente es create table nuevaTabla like tablaacopiar; --TABLAS Temporales -- sirven para realizar consultas como auxiliares, solo son visibles durante el tiempo que dure la sesion --create temporary table nueva_tabla; --FUNCIONES AUXILIARES --Operadores logicos -- aparte de los estandares =, !=, , is null, is not null, betwueen existen coalesce, interval, least, greatest --Control de flujo e de programacion case , when then, else, end --SELECT CASE WHEN 1>0 THEN 'true' ELSE 'false' END; --condicional IF si la expresion 1 es cierta devuelve la 2 de lo contrario la 3; --select if (strcmp('test', 'test1'), 'no','yes'); --Algunas funciones para trabajar con cadenas. --CONCAT, INSTR(encuentra una cadena), SUBSTRING, LCASE/RCASE, LENGTH, REPLACE, TRIM --son similares a las que se encuentran en otros lenguajes de programacion --QUOTE delimita una cadena de tecto correctamente --ENCODE/DECODE, CRYPT, COMPRESS/UNCOMPRESS, MD5 ayudan al almacenamiento de dto s sensibles --Funciones numericas son los operadores numericos clasicos mas algunas funcione s matematicas de tipos trigonometricas o logaritmicas --Funciones para trabajar con fechas y manipulacion o calculos con fechas --DATE_Format, DATE, NOW, CURRDATE --ADDDATE, ADDTIME, CONVERT_TZ, DATE_DIFF --EXPLAIN nos permite evaluar el trabajo realizado en una sentencia SQL --ejemplo: select productos.clave, concat(parte, '',tipo,'',especificacion)as pr oducto, proveedores.empresa, precio, pago from productos natural join precios na tural join proveedores; --alter table precios add index empresa_idx(empresa); --alter table precios add index clave_idx(clave) ; --Manipulacion de filas, para hacerlo se usan las sentencias INSERT UPDATE DELET E -- insert delayer, manda la insercion a segundo plano -- insert low priority high priority maneja prioridad de inserciones --insert ignore, convierte los errores de inserciion en avisos --update low_priority ignore es el mismo comportamiento que en insert --delete quick elimina sin actualizar los indices --truncate elimina registros de una tabla --delete from tabla realiza lo mismo y regresa el numero de registtros borrados --last_index_id() regresa el ultimo valor de una columna autoincrement despues d e una sentencia insert --localizacion de errores: --se usa la consulta check, y los comandos quick fast changed medium extended pa ra realizar la comprobacion --check table nombredetabla comando; --para reparar se usa el comando repair, no garantiza la reparacion total de la tabla, pero le devuelve su utilidad --repair table nombre; --indexacion, optimiza el rendimiento general de cualquier base de datos --desventajas de no usarla:

-- un constante acceso a la escritura de una tabla la mantiene desordenada -- la ordenacion es una operacion costosa---muchas tablas mantienen distintos criterios de odenacion ordenarlas de un modo las desordena de otro -- si la tabla no esta ordenada el primer problema es que se tienen que hacer bu squedas completas ( registro por tegistro) --- ventajas de usarla -- ordenar por varios criterios --es menos costoso ordenar indices pues son solo referencias -- menor coste de eliminacion e insercion -- se utilizan recorridos mas eficientes de busqueda --desventaja del uso de indices --ocupan espacio en disco --aun en orden disminuye su velocidad de escritura --para declarar un indice se escribe: --alter table ( tabla ) add index nombredelindice(columna a usar); --un indice ideal deberia tener las siguientes caracteristicas -- registros lo mas pequeños posible -- solo usar valores unicos -- uso de cache : elservidor la utiliza para acelerar tiempos de respuesta. -- la configuracion se realiza modificando variables globals --query_cache_limit no almacena valores que sobrepasen el tamaño asignado --query_cache_size es el tamaño de la cache en bytes --query_cache_type , puede tener tres variables, on off o demand el modo demand utiliza la cache solo bajo soicitud explicita -- select sql_cache, select sql_no_cache --Replicacion -- es una copia sincronizada enre dos servidores de bases de datos //////////////////////////POSTGRES//////////////////////////POSTGREs //////////////////////////POSTGRES//////////////////////////POSTGRES //////////////////////////POSTGRES//////////////////////////POSTGRES //////////////////////////POSTGRES//////////////////////////POSTGRES //////////////////////////POSTGRES//////////////////////////POSTGRES