Escuela : INGENIERIA INFORMATICA Y DE SISTEMAS Docente : ING. FREDY RIVERA MONTERO SQL-Lenguaje Estructurado de Consultas Características y conceptos básicos Historia del lenguaje SQL El nacimiento del lenguaje SQL data de 1970 cuando E. F. Codd publica su libro: "Un modelo de datos relacional para grandes bancos de datos compartidos". Ese libro dictaría las direcrices de las bases de datos relacionales. Apenas dos años después IBM (para quien trabajaba Codd) utiliza las directrices de Codd para crear el Standard English Query Language (Lenguaje Estándar Inglés para Consultas) al que se le llamó SEQUEL. Más adelante se le asignaron las siglas SQL (Standard Query Language, lenguaje estándar de consulta) aunque en inglés se siguen pronunciando SEQUEL. En español se le llama esecuele. Poco después se convertía en un estándar en el mundo de las bases de datos avalado por los organismos ISO y ANSI (el primer estándar es del año 1982). Aún hoy sigue siendo uno de los estándares más importantes de la industria informática. Los estándares más seguidos son los de los años 1992 y 1999 (el último estándar). Sobre estos dos estándares giran estos apuntes. Código SQL El código SQL consta de los siguientes elementos: �Comandos. Las distintas instrucciones que se pueden realizar desde SQL �SELECT. Se trata del comando que permite realizar consultas sobre los datos de la base de datos. Obtiene datos de la base de datos. � DML, Data Manipulation Language (Lenguaje de manipulación de datos). Modifica filas (registros) de la base de datos. Lo forman las instrucciones INSERT, UPDATE, MERGE y DELETE. �DDL, Data Definition Language (Lenguaje de definición de datos). Permiten modificar la estructura de las tablas de la base de datos. Lo forman las instrucciones CREATE, ALTER, DROP, TRUNCATE. �Instrucciones de transferencia. Administran las modificaciones creadas por las instrucciones DML. Lo forman las instrucciones ROLLBACK, COMMIT. �DCL, Data Control Language (Lenguaje de control de datos). Administran los derechos y restricciones de los usuarios. Lo forman las instrucciones GRANT y REVOKE. �Cláusulas. Son palabras especiales que permiten modificar el funcionamiento de un comando (WHERE, ORDER BY,...) �Operadores. Permiten crear expresiones complejas. Pueden ser aritméticos (+,-,*,/,...) lógicos (>, <, !=,<>, AND, OR,...) �Funciones. Para conseguir valores complejos (SUM(), DATE(),...) �Constantes. Valores literales para las consultas, números, textos, caracteres,... �Datos. Obtenidos de la propia base de datos Base de Datos I Ing. Fredy Rivera Montero SQL-Lenguaje Estructurado de Consultas DDL-LENGUAJE DE DEFINICION DE DATOS 1. Crear una Base de Datos en SQL SERVER 2008 Empezaremos creando una Base de Datos por medio de: a. SQL Server Management Studio Express Ubica la carpeta Base de Datos Dar click derecho en Nueva Base de datos Se muestra la pantalla para crear una nueva base de datos Base de Datos I Ing. Fredy Rivera Montero SQL-Lenguaje Estructurado de Consultas Podemos limitar el crecimiento de la base de datos, si queremos. b. Utilizando la orden CREATE DATABASE Base de Datos I Ing. Fredy Rivera Montero SQL-Lenguaje Estructurado de Consultas Sintaxis CREATE DATABASE nombre_base_datos ON PRIMARY (NAME=nombre_logico_data, FILENAME=’ubicacion_y_nombre_archivo, SIZE=tamaño_en_MB, MAXSIZE= tamaño_máximo_en_MB, FILEGROWTH=incremento_crecimiento) LOG ON (NAME=nombre_logico_log, FILENAME=’ubicacion_y_nombre_archivo, SIZE=tamaño_en_MB, MAXSIZE= tamaño_máximo_en_MB, FILEGROWTH=incremento_crecimiento) Donde: nombre_base_datos: nombre de la nueva base de datos, deben ser únicos en el servidor. nombre_logico_data, nombre_logico_log,: es el nombre a utilizar en una sentencia T-SQL ubicacion_y_nombre_archivo: ruta y nombre del archivo. tamaño_en_MB: tamaño del archivo tamaño_máximo_en_MB: tamaño máximo que puede alcanzar el archivo incremento_crecimiento: es la cantidad de espacio que se añade al archivo cada vez que se necesita espacio adicional. Ejemplo: IF EXISTS (SELECT * FROM sysdatabases WHERE name = 'Universidad') --verificamos si existe la base de datos de nombre Universidad DROP DATABASE Universidad --si existe eliminarla CREATE DATABASE Universidad ON PRIMARY ( NAME = N'Universidad', FILENAME = N'c:\Archivos de programa\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\Universidad.mdf' , SIZE = 3072KB , FILEGROWTH = 1024KB ) LOG ON ( NAME = N'Universidad_log', FILENAME = N'c:\Archivos de programa\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\Universidad_log.ldf' , SIZE = 1024KB , FILEGROWTH = 10%) Base de Datos I Ing. Fredy Rivera Montero SQL-Lenguaje Estructurado de Consultas create database logistica on primary (name=logistica01, filename='e:\backup\logstica01.mdf', size=10, maxsize=15, filegrowth=1mb) log on (name=logistica02, filename='e:\backup\logistica02.ldf', Size=8mb, maxsize=10mb, filegrowth=10%) go sp_helpdb logistica Tamaño de la B.D = 18 MB Maximo Tamaño B.D = 25 MB create database Almacen on primary (name=Almacen01, filename='e:\backup\Almacen01.mdf', size=20mb, maxsize=25mb), (name=Almacen02, filename='e:\backup\ALmacen02.ndf', size=10mb, maxsize=15mb) log on (name=Almacen03, filename='e:\backup\Almacen03.ldf', size=8mb, filegrowth=10%) go sp_helpdb almacen Tamaño de la B.D = 38MB Maximo Tamaño B.D = NO TIENE LIMITE ***************************************************************************** Modificando una base de datos Se puede modificar incrementando el archivo de datos o el log. Empleamos ALTER DATABASE Base de Datos I Ing. Fredy Rivera Montero o ENTERPRISE MANAGER SQL-Lenguaje Estructurado de Consultas Expandiendo el archivo de datos ALTER DATABASE ALMACEN MODIFY FILE(NAME='Almacen03', SIZE=15) GO SP_HELPDB ALMACEN Agregando un archivo secundario ALTER DATABASE ALMACEN ADD FILE (NAME=’Almacen04’, FILENAME=’D:\asistencia\Almacen04.ndf’ SIZE=10, Maxsize=15, Filegrowth=10%) GO SP_HELPDB ALMACEN 2. Respaldar y Restaurar base de datos Respaldar full BACKUP DATABASE nombrebd TO DISK=’C:\....’ BACKUP DATABASE logistica TO DISK=’D:\ASISTENCIA\logistica.bk’ Respaldar Diferencial BACKUP DATABASE nombrebd TO DISK=’C:\....’ WITH DIFFERENTIAL Restaurar RESTORE DATABASE nombrebd FROM DISK=’C:\...’ RESTORE DATABASE logistica FROM DISK=’D:\ASISTENCIA\logistica.bk’ TAREA 1 Crear un BD de nombre Almacén que tiene un archivo principal de tamaño 20 mb y máximo de 25 mb , además tiene un archivo secundario 10 mb y un máximo de 15 mb finalmente tiene un archivo de transacción de tamaña 8 mb y un incremento del 10 % . Determinar el tamaño máximo tamaño de la BD 3. Eliminar una base de datos Base de Datos I Ing. Fredy Rivera Montero SQL-Lenguaje Estructurado de Consultas Con el comando DROP DATABASE 4. CREACION DE TABLAS Sintaxis: CREATE TABLE nombre_tabla (nombre_campo tipo [NULL/NOT NULL], nombre_campo tipo [NULL/NOT NULL], nombre_campo tipo [NULL/NOT NULL], nombre_campo tipo *NULL/NOT NULL+,…..) Tipos de Datos en SQL Server Tipo Char(n) Varchar(n) Int Smallint Decimal(p,e) Numeric(p,e) Float(p) Real Datetime Descripción Cadena de caracteres de longitud fija, por ejemplo: los nombres de los alumnos, direcciones, descripciones, etc. Cadena de caracteres de longitud fija, permiten que una columna almacene cadenas de caracteres que varían de longitud de una fila a otra, a pesar que no haya un dato, se rellena el vacio mediante espacios en blanco. Numero enteros, por ejemplo: almacena cantidades, edades, etc. Números enteros pequeños Números decimales, almacenan números que tienen parte fraccionaria y deben ser calculados exactamente. Números en coma flotante de alta precisión, por ejemplo números científicos. Números en coma flotante de baja precisión. Fecha hora en formato largo dd/mm/aa hh:mm:ss Base de Datos I Ing. Fredy Rivera Montero SQL-Lenguaje Estructurado de Consultas Smalldatetime Money Smallmoney Bit Text Image Timestamp Binary(n) Identity Fecha en formato corto dd/mm/aa Monetario de doble precisión, se almacena como numero en coma flotante. Monetario de simple precisión, se almacena como un numero decimal. Para el almacenamiento de valores lógicos Texto de longitud variable, se puede almacenar el contenido de una carta o de un libro En este campo se puede almacenar imágenes de mapa de bits. Es un campo especial, almacena fecha y hora en la que se hizo una actualizacion Valores binarios, permiten almacenar y recuperar secuencias de bytes de longitud variable sin estructurar. Permite emplear un campo con datos que se incrementan. Identity(1,1) por ejemplo el valor del campo autoincrementa desde 1 (de uno en uno), cuando se inserta un nuevo registro. Ejemplo: if exists (select * from sysobjects where id = object_id('dbo.PEDIDO') and sysstat & 0xf = 3) --Verificamos si existe la tabla pedido en la base de datos DROP TABLE PEDIDO --si existe la elimino para volverla a crear en la siguiente instrucción CREATE TABLE PEDIDO ( Idpedido int NOT NULL, Cliente varchar(35) NOT NULL, Idempleado char(5) NOT NULL, Fecha datetime NOT NULL, Monto Money NOT NULL, Base de Datos I Ing. Fredy Rivera Montero SQL-Lenguaje Estructurado de Consultas Igv Money NOT NULL, TOTAL Money, NOT NULL) Creación de claves primarias: Creación de claves foráneas Sintaxis: ALTER TABLE nombre_tabla Add constraint pk_nombre primary key (lista_columnas) Sintaxis: ALTER TABLE nombre_tabla ADD CONSTRAINT FK_NOMBRE FOREIGN (lista_columnas) REFERENCES nombre_tabla_referenciada Ejem. ALTER TABLE pedido Add constraint pk_pedido primary key(idpedido) Ejem. ALTER TABLE articulo Add constraint fk_articulo foreign key(idcategoria) References categoria CREATE ARTICULO( Idarticulo char(4) not null, Idcategoria char(4) not null, Descripcion char(40) not null, Precio money not null, CONSTRAINT pk_articulo primary key(idarticulo) CONSTRAINT fk_articulo foreign key (idcategoria) REFERENCES categoria) CREATE TABLE PEDIDO( Idpedido int NOT NULL, Cliente varchar(35) NOT NULL, Idempleado char(5) NOT NULL, Fecha datetime NOT NULL, Monto Money NOT NULL, Igv Money NOT NULL, TOTAL Money, NOT NULL, CONSTRAINT pk_pedido PRIMARY KEY(idpedido)) Eliminar una tabla: DROP TABLE PEDIDO Eliminar datos de una tabla: TRUNCATE TABLE PEDIDO RESTRICCIONES UNIQUE, CHECK, DEFAULT CREATE TABLE PROVEEDOR( Codproveedor UNIQUE primary key, Ruc varchar(15) not null check(RUC>=10000005000) UNIQUE, RAZON VARCHAR(40) NOT NULL, DIRECCION VARCHAR(50) NULL DEFAULT ‘Dirección local’) Create Database USP Use USP go Base de Datos I Ing. Fredy Rivera Montero Create Table Persona (nombre varchar(70), Direccion Varchar(100), KEY SQL-Lenguaje Estructurado de Consultas Telefono varchar(9), Nacimiento datetime) go ------------------- DEFAULT --------Alter Table Persona Add Constraint Dtelf Default '999-9999' for Telefono go Insert Into Persona Values ('Robert','Av. Las Camelias 145','45821-35',getdate()) Select * From Persona ------------------- UNIQUE ----------Alter Table Persona Add Constraint Unom Unique(nombre) Insert Into Persona Values ('Emilio','Av. Las Camelias 145','40015-90',getdate()) ------------------- CHECK -----------Alter Table Persona Add Constraint Ctelf Check(Telefono Like '[0-9][0-9][0-9][0-9][0-9][0-9][09][0-9][0-9]') Go ------------------------------insert Into Persona values ('Luis','Av. Lince 105','456-5456',getdate()) go -------------------------------------insert Into Persona values ('Luis','Av. Lince 105','456-5456',getdate()) go -----------------------------------------------Select * From SysObjects Where Type='c' Or --CHEK Type='k' or --PRIMARIAS Type='U' or --TABLAS Type='D' or --DEFAULT Type='F' --FORANEA go Base de Datos I Ing. Fredy Rivera Montero SQL-Lenguaje Estructurado de Consultas EJEMPLO 1. Crear una base de datos llamada LOGISTICA, que tiene un archivo principal de 20mb y un maximo tamaño de 35mb ademas tiene 2 archivos de transaccion de 7mb y 10mb respectivamente, determinar el tamaño y max de la bd. Debe un max de 2. Crear las siguientes tablas: PROVEEDOR(Codproveedor, ruc, razon, direccion) SUMINISTRO(codsuministro, descripcion, medida, stockactual, cuenta) CUENTA_CONTABLE(cuenta, subcta, clase, descripcion) INGRESO(numero, fecha, codprovedor, moneda, tipocambio) DETA_INGRESO(numero, codsuministro,cantidad, precio) Relación proveedor Codproveedor: El código de un proveedor nos servirá para identificarlo, puede ser un NUMERIC. RUC: El RUC de una persona natural o jurídica está comprendida por 11 dígitos, para ello utilizaremos VARCHAR(15) Razón: Representa la razón social del proveedor, la que puede tomar el valor de VARCHAR(40). Dirección: Representa la dirección de un proveedor, la que también puede tomar el valor VARCHAR(50). Relación suministro Codsuministro: El código de suministro puede ser un NUMERIC Descripcion: La descripción de un suministro puede ser una tipo de dato VARCHAR(40). Medida: La medida de un suministro puede ser expresada como un CHAR(3), Stockactual: Muestra la cantidad actual de suministros que hay en el almacén, puede ser un NUMERIC. Cuenta: Es la clave foránea y toma el mismo valor de la cuenta contable NUMERIC Relación Cuenta_Contable Cuenta: Representa la cuenta contable de un suministro, toma el valor de NUMERIC. Subcta: Representa la subcuenta contable, toma el valor NUMERIC. Clase: Indica a que clase pertenece un suministro, toma el valor de VARCHAR(30). Descripcion: Indica la descripción de la cuenta contable, toma el valor de VARCHAR(50). Relación Ingreso Numero: Representa el número del documento de ingreso de suministros al almacén, toma el valor de NUMERIC. Fecha: Representa la fecha de ingreso, toma el valor DATETIME. Base de Datos I Ing. Fredy Rivera Montero SQL-Lenguaje Estructurado de Consultas Moneda: Indica si es soles o dólares, toma el valor CHAR(1). Tipocambio: Indica el valor de dólar diario, toma el valor NUMERIC. codproveedor: Es el codigo del proveedor, toma el valor NUMERIC. Relación Deta_Ingreso Numero: Representa el número del documento de ingreso de suministros al almacén, toma el valor de NUMERIC. Codsuministro: Es el código de suministro, y toma el valor anterior NUMERIC. Cantidad: Es la cantidad de suministros ingresados al almacén NUMERIC. Precio: Es el precio con que ingresa al almacén DECIMAL. 3. Realice un respaldo de la base de datos logística y grabela en la unidad D 4. Crear Diagramas Base de Datos I Ing. Fredy Rivera Montero SQL-Lenguaje Estructurado de Consultas TAREA 2 Use Almacen go Create Table Factura (Factura_id int not null, cliente varchar(100), fecha datetime, Monto Decimal(18,2)) go Create Table Detalle (Factura_Id int not null, Item int not null, Producto_Id int, Precio Money, Cantidad int, Total Decimal(18,2)) go Alter Table Factura add constraint pk_factura_id primary key(Factura_id) go Alter Table Detalle add constraint pk_factura_id_det primary key(item) go Alter Table Detalle Add constraint Fk_Factura_Id_Det foreign key(Factura_Id) References Factura(Factura_Id) Base de Datos I Ing. Fredy Rivera Montero SQL-Lenguaje Estructurado de Consultas TAREA 3 Create Database Estudiante go Use Estudiante go Create Table Persona (Persona_Id int not null, nombre varchar(70)) go Create Table Curso (Curso_Id int not null, Descripcion varchar(100)) go Create Table Persona_Curso (Persona_Id int not null, Curso_Id int not null) go Alter Table Persona add constraint pk_Persona_Id primary key(Persona_Id) go Alter Table Curso add constraint pk_Curso_Id primary key(curso_Id) go Alter Table Persona_Curso add constraint fk_Persona_Id foreign key(Persona_Id) references persona(Persona_Id) go Alter Table Persona_Curso add constraint fk_Curso_Id foreign key(Persona_Id) references curso(Curso_Id) Base de Datos I Ing. Fredy Rivera Montero SQL-Lenguaje Estructurado de Consultas 5. Crear una Base de Datos en MYSQL Para crear una base de datos, empleando AppServ, hacer clic en MySQL Command Line Client. Ingresar clave Ver las bases de datos en MySQL: Base de Datos I Ing. Fredy Rivera Montero SQL-Lenguaje Estructurado de Consultas Acceder a una base de datos en particular; Crear una base de datos mediante comando CREATE DATABASE: Eliminar una base de datos: Crear Tablas Sintaxis: CREATE TABLE nombre_tabla ( nombre_columna1 TIPO_COLUMNA(nn), nombre columna2 TIPO_COLUMNA(nn), nombre_columna3 TIPO_COLUMNA(nn), ... ); Tipo de datos en MySQL: Tipo Descripción BIT o BOOL TINYINT para un número entero que puede ser 0 ó 1 Es un número entero con rango de valores válidos desde -128 a 127. Si se configura como unsigned (sin signo), el rango de valores es de 0 a 255 Para números enteros, con rango desde -32768 a 32767. Si se configura como unsigned, 0 a 65535. Para números enteros; el rango de valores va desde -8.388608 a 8388607. Si se configura como unsigned, 0 a 16777215 Para almacenar números enteros, en un rango de -2147463846 a 2147483647. Si configuramos este dato como unsigned, el rango es 0 a 4294967295 Número entero con rango de valores desde -9223372036854775808 a 9223372036854775807. Unsigned, desde 0 a 18446744073709551615. Representa números decimales. Podemos especificar cuantos dígitos (m) pueden utilizarse (término también conocido como ancho de pantalla), y cuantos en la parte decimal (d). Mysql redondeará el decimal para ajustarse a la capacidad. SMALLINT MEDIUMINT INT BIGINT FLOAT (m,d) DOUBLE DECIMAL CHAR VARCHAR Número de coma flotante de precisión doble. Es un tipo de datos igual al anterior cuya única diferencia es el rango numérico que abarca Almacena los números como cadenas. Este tipo se utiliza para almacenar cadenas de longitud fija. Su longitud abarca desde 1 a 255 caracteres. Al igual que el anterior se utiliza para almacenar cadenas, en el mismo rango de 1255 caracteres, pero en este caso, de longitud variable. DATE DATETIME TIMESTAMP TIME YEAR Autoincrement para almacenar fechas. El formato por defecto es YYYY MM DD desde 0000 00 00 a 9999 12 31. Combinación de fecha y hora. Combinación de fecha y hora. El rango va desde el 1 de enero de 1970 al año 2037. El formato de almacenamiento depende del tamaño del campo Amacena una hora. El rango de horas va desde -838 horas, 59 minutos y 59 segundos a 838, 59 minutos y 59 segundos. El formato de almacenamiento es de 'HH:MM:SS' almacena un año. El valor del registro se incrementa automáticamente en la cantidad que se configura Base de Datos I Ing. Fredy Rivera Montero SQL-Lenguaje Estructurado de Consultas cuando se inserta un nuevo registro CREATE TABLE PEDIDO ( Idpedido int NOT NULL, Cliente varchar(35) NOT NULL, Idempleado char(5) NOT NULL, Fecha date NOT NULL, Monto Double NOT NULL, Igv Double NOT NULL, TOTAL Double NOT NULL); Realizar el ejemplo anterior empleando MySQL. Base de Datos I Ing. Fredy Rivera Montero