Escuela : INGENIERIA INFORMATICA Y DE SISTEMAS Docente : … · 2013-05-18 · Se trata del comando...
Transcript of Escuela : INGENIERIA INFORMATICA Y DE SISTEMAS Docente : … · 2013-05-18 · Se trata del comando...
Escuela : INGENIERIA INFORMATICA Y DE SISTEMAS
Docente : ING. FREDY RIVERA MONTERO
SQL-Lenguaje Estructurado de Consultas
Base de Datos I Ing. Fredy Rivera Montero
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
SQL-Lenguaje Estructurado de Consultas
Base de Datos I Ing. Fredy Rivera Montero
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
SQL-Lenguaje Estructurado de Consultas
Base de Datos I Ing. Fredy Rivera Montero
Podemos limitar el crecimiento de la base de datos, si queremos.
b. Utilizando la orden CREATE DATABASE
SQL-Lenguaje Estructurado de Consultas
Base de Datos I Ing. Fredy Rivera Montero
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%)
SQL-Lenguaje Estructurado de Consultas
Base de Datos I Ing. Fredy Rivera Montero
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 o ENTERPRISE MANAGER
SQL-Lenguaje Estructurado de Consultas
Base de Datos I Ing. Fredy Rivera Montero
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
SQL-Lenguaje Estructurado de Consultas
Base de Datos I Ing. Fredy Rivera Montero
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 Descripción
Char(n) Cadena de caracteres de longitud fija, por ejemplo: los nombres de los alumnos, direcciones, descripciones, etc.
Varchar(n) 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.
Int Numero enteros, por ejemplo: almacena cantidades, edades, etc.
Smallint Números enteros pequeños
Decimal(p,e) Numeric(p,e)
Números decimales, almacenan números que tienen parte fraccionaria y deben ser calculados exactamente.
Float(p) Números en coma flotante de alta precisión, por ejemplo números científicos.
Real Números en coma flotante de baja precisión.
Datetime Fecha hora en formato largo dd/mm/aa hh:mm:ss
SQL-Lenguaje Estructurado de Consultas
Base de Datos I Ing. Fredy Rivera Montero
Smalldatetime Fecha en formato corto dd/mm/aa
Money Monetario de doble precisión, se almacena como numero en coma flotante.
Smallmoney Monetario de simple precisión, se almacena como un numero decimal.
Bit Para el almacenamiento de valores lógicos
Text Texto de longitud variable, se puede almacenar el contenido de una carta o de un libro
Image En este campo se puede almacenar imágenes de mapa de bits.
Timestamp Es un campo especial, almacena fecha y hora en la que se hizo una actualizacion
Binary(n) Valores binarios, permiten almacenar y recuperar secuencias de bytes de longitud variable sin estructurar.
Identity 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,
SQL-Lenguaje Estructurado de Consultas
Base de Datos I Ing. Fredy Rivera Montero
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 KEY (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 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))
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)
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
Create Table Persona
(nombre varchar(70),
Direccion Varchar(100),
SQL-Lenguaje Estructurado de Consultas
Base de Datos I Ing. Fredy Rivera Montero
Telefono varchar(9),
Nacimiento datetime)
go
------------------- DEFAULT ---------
Alter Table Persona
Add Constraint Dtelf Default '999-99-
99' for Telefono
go
Insert Into Persona Values
('Robert','Av. Las Camelias 145','458-
21-35',getdate())
Select * From Persona
------------------- UNIQUE -----------
Alter Table Persona
Add Constraint Unom Unique(nombre)
Insert Into Persona Values
('Emilio','Av. Las Camelias 145','400-
15-90',getdate())
------------------- CHECK ------------
Alter Table Persona
Add Constraint Ctelf Check(Telefono
Like
'[0-9][0-9][0-9][0-9][0-9][0-9][0-
9][0-9][0-9]')
Go
-------------------------------
insert Into Persona values
('Luis','Av. Lince 105','456-54-
56',getdate())
go
--------------------------------------
insert Into Persona values
('Luis','Av. Lince 105','456-54-
56',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
SQL-Lenguaje Estructurado de Consultas
Base de Datos I Ing. Fredy Rivera Montero
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 un max de
10mb respectivamente, determinar el tamaño y max de la bd. Debe
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.
SQL-Lenguaje Estructurado de Consultas
Base de Datos I Ing. Fredy Rivera Montero
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
SQL-Lenguaje Estructurado de Consultas
Base de Datos I Ing. Fredy Rivera Montero
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)
SQL-Lenguaje Estructurado de Consultas
Base de Datos I Ing. Fredy Rivera Montero
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)
SQL-Lenguaje Estructurado de Consultas
Base de Datos I Ing. Fredy Rivera Montero
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:
SQL-Lenguaje Estructurado de Consultas
Base de Datos I Ing. Fredy Rivera Montero
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 para un número entero que puede ser 0 ó 1 TINYINT 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 SMALLINT Para números enteros, con rango desde -32768 a 32767. Si se configura como unsigned, 0
a 65535. MEDIUMINT Para números enteros; el rango de valores va desde -8.388608 a 8388607. Si se configura
como unsigned, 0 a 16777215 INT Para almacenar números enteros, en un rango de -2147463846 a 2147483647. Si
configuramos este dato como unsigned, el rango es 0 a 4294967295 BIGINT Número entero con rango de valores desde -9223372036854775808 a
9223372036854775807. Unsigned, desde 0 a 18446744073709551615. FLOAT (m,d)
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.
DOUBLE 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 DECIMAL Almacena los números como cadenas. CHAR Este tipo se utiliza para almacenar cadenas de longitud fija. Su longitud abarca
desde 1 a 255 caracteres. VARCHAR Al igual que el anterior se utiliza para almacenar cadenas, en el mismo rango de 1-
255 caracteres, pero en este caso, de longitud variable. DATE para almacenar fechas. El formato por defecto es YYYY MM DD desde 0000 00 00 a 9999
12 31. DATETIME Combinación de fecha y hora. TIMESTAMP 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 TIME 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'
YEAR almacena un año. Autoincrement El valor del registro se incrementa automáticamente en la cantidad que se configura
SQL-Lenguaje Estructurado de Consultas
Base de Datos I Ing. Fredy Rivera Montero
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.