You are on page 1of 26

Edwin Augusto Mendoza Suarez

USO Y MANEJO DE STRUCTURE QUERY LANGUAJE


SQL (Lenguaje de Consulta Estructurado)
El SQL (Structure Query Language), es un lenguaje de consulta estructurado establecido claramente como el
lenguaje de alto nivel estndar para sistemas de base de datos relacionales. Los responsables de publicar este
lenguaje como estndar, fueron la IAS (Instituto Americano de Normalizacin) y la ISO (organismo Internacional
de Normalizacin). Es por lo anterior que este lenguaje lo vas a encontrar en cualquiera de los DBMS relacionales
que existen en la actualidad, por ejemplo, ORACLE, SYBASES, SQL SERVER por mencionar algunos.
El SQL agrupa tres tipos de sentencias con objetivos particulares, en los siguientes lenguajes:
Lenguaje de Definicin de Datos (DDL, Data Definiton Language)
Lenguaje de Manipulacin de Datos (DML, Data Management Language)
Lenguaje de Control de Datos (DCL, Data Control Language)

SQL SERVER
Modo de conexin:

Seleccionamos la opcin de WIN8, o bien el nombre que tiene la computadora y luego clic en aceptar.
Nuevo proyecto:

Realizamos clic en New Query , y podemos transcribir los respectivos cdigos:


Edwin Augusto Mendoza Suarez

Procedemos a llenar donde muestra la flecha


LENGUAJE DE DEFINICION DE DATOS:
Es un grupo de sentencias del SQL que soportan la definicin y declaracin de los objetos de la base de datos.
Las operaciones que forman parte de DDL son:
CREATE DATA BASE
CREATE TABLE
ALTER TABLE
DROP TABLE
Adems tienen como objetos las vistas (VIEW), los ndices (INDEX), los procedimientos almacenados
(PROCEDURE), los disparadores (TRIGGER), reglas (RULE), dominios (DOMAIN) y valores por defecto (DEFAULT).
Ahora veremos como disear el lenguaje de definicin de datos en ejemplos:
SQL tiene por defecto 4 bases de datos (MASTER, MSDB, MODEL Y TEMPBD)
MASTER, administra las tablas del sistema o System Tables.
MODEL contiene una base de datos de ejemplo.
MSDB, permite realizar tareas en tiempo de ejecucin
TEMPBD, contienen los archivos temporales y tablas temporales.
TABLA.- Almacena datos ordenados por filas y columnas.
VISTA.- Permiten organizar datos de una o ms tablas y ponerlos en una vista (tabla virtual).
Adicionalmente el SQL Server, permite instalar bases de datos adicionales o de ejemplo.
Adventure Work (BD simple).
Adventure WorksDW (BD Data Ware House).
Data Ware House, sistema de BD con soporte de decisiones.

PROCESO PARA HACER CORRER UN CODIGO EN SQL:


Sombreamos el cdigo a ser ejecutado.
Hacer clic en Execute, para que SQL proceda con la operacin.
Encerramos entre /* lugar del comentario*/, para realizar cualquier comentario, que no afecte al proceso
de ejecucin.
Las palabras reservadas de SQL aparecen sombreadas en color azul.
Las palabras reservadas de SQL no distinguen entre maysculas y minsculas (incluso puede haber una
combinacin de las mismas).
Edwin Augusto Mendoza Suarez

/*crea la base de datos colegio */


create database colegio
Por defecto, SQL asigna a nuestra nueva base de datos con los siguientes parametros:
create database universidad on primary
(
/*a*/
/*Archivo fisico*/
name = colegio.mdf,
/*Ubicacion*/
filename = 'C:\Users\WINDOWS8.1\Documents\COMPUTACION\BASE DE DATOS\universidad.mdf',
/*Tamao de la base de datos*/
size = 10 mb,
/*Maximo tamao de la base de datos*/
maxsize = 50 mb,
/*Intervalo de crecimiento*/
filegrowth = 5 mb
)
/*b*/
log on
(
name = colegio.log,
filename = 'C:\Users\WINDOWS8.1\Documents\COMPUTACION\BASE DE DATOS\universidad.log',
size = 10 mb,
maxsize = 50 mb,
filegrowth = 5 mb
)
Diferencia entre a y b:

Base.mdf Base.log
Tablas Archivo fisico de la base de datos en
Vistas formato texto (txt)
Indices DDL DML
Lenguaje de Lenguaje de
Disparadores (triggers) Definicion de Datos Definicion de Datos
Procedimientos (stone procedures) CREATE Con los comandos:
Almacenamientos (stone procedures) DROP Select
Roles ALTER Insert
ususarios Update
Truncate
Delete
Nota: Todo lo realizado en una base de datos se guarda en una base.log (txt)

Realizamos las consultas indicando la base de datos de dos formas:


1) Seleccionando en las pestaa la base de datos deseada.
Edwin Augusto Mendoza Suarez

2) Escribir en cada consulta la palabra reservada USE junto a la tabla de uso.


use universidad

Entre las operaciones de las DDL tenemos:

/*crea la base de datos colegio con parametros definidos por el sistema*/


use master
create database colegio

/*cambia el nombre de la base de datos colegio*/


use master
alter database universidad
modify name = col

/*elimina la base de datos colegio*/


use master
drop database col

/*crea la base da datos universidad con parametros propios*/


create database universidad on primary
(
name = universidad_mdf,
filename = 'C:\Users\WINDOWS8.1\Documents\COMPUTACION\BASE DE DATOS\universidad.mdf',
size = 3 mb,
maxsize = 10 mb,
filegrowth = 2 mb
)
log on
(
name = universidad_log,
filename = 'C:\Users\WINDOWS8.1\Documents\COMPUTACION\BASE DE DATOS\universidad.log',
size = 3 mb,
maxsize = 10 mb,
filegrowth = 2 mb
)

/*crea las tablas de la base de datos universidad con sus respectivos campos y
parametros de columnas propios(int, float, datatime, char, varchar, etc)*/
/*utilizamos la palabra use para referirnos a una base de datos especifica si existen
varias*,si solo hay una, no es necesaria*/
use universidad
/*se crea las tablas que conformaran nuestra base de datos universidad*/
create table alumnos(codigo int, nombre varchar(20), ap_pat varchar(20), ap_mat
varchar(20), ci int,direccion varchar(50), telefono int, correo varchar(70),
fecha_nacimiento date, sexo char(2))
create table docente(codigo int, nombre varchar(20), ap_pat varchar(20), ap_mat
varchar(20), ci int,direccion varchar(50), telefono int, correo varchar(70),
fecha_nacimiento date, sexo char(2))
create table materias(Codigo int, Nombre varchar(50), Carrera varchar(50), Semestre
varchar(50), Turno varchar(50), Horario int)
create table aulas(Codigo int, Piso int, Capacidad_Asientos int, Tipo varchar(50),
Unidad varchar(50))
create table notas(Codigo_Alumnos int, Codigo_Materia int, Codigo_Docente int, Unidad
varchar(50), Num_Parcial int, Nota_Final int, Practicas int, Asistencia int)
create table gestion(Fecha int, Semestre varchar(50), Unidad Varchar(50))
create table unidad(Codigo int, Nombre_Unidad varchar(50), Direccion
varchar(50),Telefono int, Detalle varchar(50))
Edwin Augusto Mendoza Suarez

/*permite modificar el tamao de una base de datos*/


use universidad
alter database universidad
modify file(
name = universidad_log,
size = 4 mb)

/*aade la columna correo a la tabla unidad de la base de datos universidad*/


use universidad
alter table unidad add Correo varchar(50)

/*elimina la columna correo a la tabla unidad de la base de datos universidad*/


use universidad
alter table unidad drop column Correo

/*permite verificar si existe la tabla unidad*/


use universidad
select *
from unidad

/*elimina la tabla unidad de la base de datos universidad*/


use universidad
drop table unidad

/*crea nuevamente la tabla unidad de la base de datos universidad*/


use universidad
create table unidad(Codigo int, Nombre_Unidad varchar(50), Direccion
varchar(50),Telefono int, Detalle varchar(50))

/*crea la columna estacion en la tabla unidad que actua como clave primaria*/
use universidad
alter table unidad add estacion int primary key

/*elimina la columna codigo a la tabla alumnos*/


use universidad
alter table alumnos drop column codigo

/*crea la columna codigo con not null (llenar si o si el campo) a la tabla alumnos*/
use universidad
alter table alumnos add codigo int not null

/*elimina la columna Codigo_Alumnos a la tabla notas*/


use universidad
alter table notas drop column codigo_alumnos

/*crea la columna codigo a la tabla notas con not null*/


use universidad
alter table notas add codigo int not null

/*modifica a la columna codigo como llave foranea de referencia codigo de la tabla


alumnos*/
use universidad
alter table notas add foreign key (codigo) references alumnos (codigo)

/*elimina la columna Piso a la tabla aulas*/


use universidad
alter table aulas drop column Piso

/*crea la columna Piso a la tabla aulas con not null*/


use universidad
alter table aulas add piso int not null

/*crea la llave primaria piso bautizando con el nombre PK_PisoUnidad*/


use universidad
alter table aulas add constraint PK_PisoUnidad
primary key (piso)
Edwin Augusto Mendoza Suarez

/*muestra la tabla unidad solo con la columna codigo*/


use universidad
select Codigo
from unidad

Otra forma de poder realizar la insercin de consultas es de forma grfica:

Es cierto que para ejecutar una consulta extensa que tiene varios procedimientos se debera hacer el sombreado
de cada consulta en forma aparte en el orden que se quiera, pero con el comando GO, podemos hacerlo en un
solo click (siempre anteponiendo a cada consulta la palabra GO)

IDENTITY

El comando identity realiza el autoincremento desde un punto de partida y la razn de incremento (inicio,
incremento), aunque por defecto identity inicia en 1 y hace el incremento de uno en uno sino se dan los
parmetro del parentesis. El mismo no establece la repeticin de datos, aun mas cuando le esta seguido la
palabra reservada primary key, sin embargo el mismo es modificable (set identity_insert [nombre_de_la_tabla]
on).

/*introducimos la nueva tabla becas con el comando GO y la palabra reservada de auto


incremento identity*/
go
use universidad
go
create table becas(
codigo int identity (1,1) primary key not null,
ap_pat varchar(20),
ap_mat varchar(20),
nombre varchar(20),
ci int
)

LENGUAJE DE MANIPULACIN DE DATOS:


Es un grupo de sentencias del SQL que soportan la manipulacin de los objetos de la base de datos.
Las operaciones que forman parte de DML son:
INSERT INTO
DELETE
TRUNCATE
UPDATE

INSERT INTO
Edwin Augusto Mendoza Suarez
Permite introducir una serie de datos en una tabla.
INSERT INTO [nombre_tabla]
VALUES ([valor_columna1], [valor_columna2],)

Nota
Los tipos de datos char, varchar, date van entre apostofes ( ).
Los valores a introducirse respetando las columnas definidas.
Se respeta el orden de las columnas.

/*introduce un dato en la tabla alumnos (recuerde letras entre '')*/


use universidad
insert into alumnos
values ('Homero', 'Simpson', 'Bouvie', 123, 'Av siempre viva', 666, 'mocha
cabeza','12/12/1990', 'm',123)

/*muestra el registro de la tabla alumnos*/


use universidad
select *
from alumnos

DELETE Y TRUNCATE

DELETE FROM [nombre_tabla]


WHERE ([condicion])

Si no existe condicin, elimina a todos los registros.

Es cierto que ambos eliminan registros, sin embargo para el caso del autoincremento que proporciona el identity
sucede lo siguiente:
delete no corta el autoincremento, el siguiente dato a insertar partir autoincrementado desde el ultimo
dato insertado.
truncate resetea los campos autonumericos incrementables, partiendo el incremento desde el ultimo
dato eliminado.

/*elimina todos los registros de la tabla alumnos*/


use universidad
delete from alumnos

/*elimina el registro de la tabla alumnos con una condicion*/


use universidad
delete from alumnos
where nombre = 'Homero'

UPDATE
Permite actualizar los datos de una columna.

UPDATE [nombre_tabla]
SET ([nombre_columna1] = [valor_columna1],)
WHERE ([condicion])

/*modifica un registro de la tabla alumnos*/


Edwin Augusto Mendoza Suarez
use universidad
update alumnos
set nombre = 'Bart'

Relaciones entre tablas:

Constraint.-
Para asegurar la integridad de los datos almacenados en nuestras tablas, podemos crear restricciones, algunos los
hemos utilizado sin querer o simplemente desconocemos que lo que hicimos fue una restriccin, por ejemplo una
llave primaria.Estas restricciones las podemos implementar al momento de crear nuevas tablas o de modificarlas.
Tambien es necesario sealar que dichas restricciones son objetos propios de las bases de datos y por lo tanto
requieren de un nombre nico compuesto del nombre del esquema al que pertenece y el nombre que lo
identifica ([NombreEsquema.NombreRestriccion]).

Tipos de constraint.- Se usan con una o ms columnas, cuyo enfoque es asignar criterios de bsqueda a las
columnas.

Referencia Integrity Constraint (Restricciones de Integridad Referencial).- Son creadas cuando un valor de una
columna debe corresponder al valor en otra columna de otra tabla.

Tipos de restricciones.- Entre los existentes tenemos:


PRIMARY KEY
UNIQUE
FOREING KEY
CHECK
DEFAULT

PRIMARY KEY
Es la ms comn de todas debido a que cada una de nuestras tablas debe ser completamente relacional y para
lograr esto siempre debe existir una llave primaria dentro de cada tabla que identifique cada fila como nica.
Existen ciertos requerimientos para la creacin de una llave primaria:
La o las columnas utilizadas en una restriccin PRIMARY KEY, no pueden aceptar NULL.
No se pueden repetir valores en la o las columnas, deben ser nicos.
Solamente puede existir una restriccin de tipo PRIMARY KEY por cada tabla.
Para generar una llave primaria, se realiza lo siguiente:
1. Creando una tabla
CREATE TABLE nombreEsquema.nombreTabla
(
nombreColumna1 INT NOT NULL,
nombreColumna2 VARCHAR(100) NOT NULL,
nombreColumna3 NVARCHAR(200) NOT NULL,
CONSTRAINT PK_nombreRestriccion PRIMARY KEY( nombreColumna1 )
);

/*creamos la tabla excelencia aadiendo la clave primaria*/


go
use universidad
go
create table excelencia(
codigo int constraint PK_excelencia primary key not null,
ap_pat varchar(20),
ap_mat varchar(20),
nombre varchar(20),
ci int
)
2. Modificando una tabla:
ALTER TABLE nombreEsquema.nombreTabla
ADD CONSTRAINT PK_nombreRestriccion PRIMARY KEY( nombreColumna1 );
Edwin Augusto Mendoza Suarez

/*crea la llave primaria piso bautizando con el nombre PK_PisoUnidad*/


use universidad
alter table aulas
add constraint PK_PisoUnidad primary key (piso)

Es posible agregar ms columnas como parte de una llave primaria, se recomienda como buena prctica utilizar
una nomenclatura en el nombre de la restriccin que ayude a identificar de que tipo es, adems de tener especial
cuidado en nombrar las columnas que forman parte de la llave primaria ya que ests mismas sern utilizadas
como referencia en una llave fornea en otra tabla. Cada vez que generamos una llave primaria, esta crea un
ndice tipo de clustered automticamente.

Para verificar las llaves primarias contenidas en nuestra base de datos podemos utilizar el siguiente cdigo:

SELECT *
FROM sys.key_constraints
WHERE type = 'PK';

UNIQUE
Este tipo de restriccin es muy parecida a PRIMARY KEY, las diferencias son las siguientes:
Tambin genera un ndice automticamente pero es de tipo de NON CLUSTERED.
La tabla puede tener ms de una restriccin de tipo UNIQUE.
Si puede aceptar NULL, pero solo una fila puede contenerlo ya que como su nombre lo indica, es de tipo
UNIQUE o nico.

CREATE TABLE nombreEsquema.nombreTabla


(
nombreColumna1 INT CONSTRAINT UQ_nombreRestriccion UNIQUE NOT NULL,
nombreColumna2 VARCHAR(100),
nombreColumna3 NVARCHAR(200),
CONSTRAINT UQ_nombreRestriccion2 UNIQUE( nombreColumna2 ),
CONSTRAINT UQ_nombreRestriccion3 UNIQUE( nombreColumna1,nombreColumna2 )
);
/*creamos la tabla excelencia aadiendo la clave unique*/
go
use universidad
go
create table expulsados(
codigo int constraint UQ_excelencia unique not null,
ap_pat varchar(20),
ap_mat varchar(20),
nombre varchar(20),
ci int
)

Para consultar las restricciones UNIQUE se puede utilizar:


SELECT *
FROM sys.key_constraints
WHERE type = 'UQ';
/*verificamos la restriccion unique en nuestra base de datos*/
SELECT *
FROM sys.key_constraints
WHERE type = 'UQ';

FOREIGN KEY
Se forma de una columna o la combinacin de varias columnas de una tabla que sirve como enlace hacia otra
tabla donde en esta ltima, dicho enlace son la o las columnas que forman la PRIMARY KEY. En la primera tabla
donde creamos la llave fornea es posible que existan valores duplicados de la/las columnas que conforman la
llave primaria de la segunda tabla, adems las columnas involucradas en la llave fornea deben tener el mismo
Edwin Augusto Mendoza Suarez
tipo de datos que la llave primaria de la segunda tabla. Una llave fornea no crea un ndice automticamente, por
lo que se recomienda generar uno para incrementar el rendimiento de la consulta.

Algunos requerimientos para la restriccin FOREIGN KEY:


Los valores ingresados en la o las columnas de la llave fornea, deben existir en la tabla a la que se hace
referencia en la o las columnas de la llave primaria.
Solo se pueden hacer referencia a llaves primaria de tablas que se encuentren dentro de la misma base
de datos.
Puede hacer referencia a otras columnas de la misma tabla.
Solo puede hacer referencia a columnas de restricciones PRIMARY KEY o UNIQUE.
No se puede utilizar en tablas temporales.
Para generar una llave primaria, se realiza lo siguiente:
1. Creando una tabla

CREATE TABLE nombreEsquema.nombreTabla


(
nombreColumna1 INT NULL,
nombreColumna2 VARCHAR(100) NOT NULL,
nombreColumna3 NVARCHAR(200) NOT NULL,
CONSTRAINT FK_nombreRestriccion FOREIGN KEY (nombreColumna1) REFERENCES nombreEsqu
ema.otraTabla (nombreColumna1)
);

/*crea la tabla administacion con la clave principal director y la llave foranea


unidad*/
/*recuerde que la llave principal de una tabla y la foranea de otra debe coincidir en
el tipo de variable*/
use universidad
create table administracion(
director varchar(70) not null primary key,
unidad int not null
foreign key references unidad (estacion),
secretaria varchar (70) not null
)

2. Modificando la tabla:
ALTER TABLE nombreEsquema.nombreTabla
ADD CONSTRAINT FK_nombreRestriccion FOREIGN KEY(nombreColumna1)
REFERENCES nombreEsquema.otraTabla (nombreColumna1)
/*crea la llave foranea piso bautizando con el nombre PK_PisoUnidad*/
use universidad
alter table excelencia
add constraint FK_excelencia foreign key (codigo) references alumnos(codigo)

Para consultar las restricciones FOREIGN KEY, se puede utilizar:

SELECT *
FROM sys.foreign_keys
WHERE name = 'nombreEsquema.nombreTabla;
O bien:
SELECT *
FROM sys.key_constraint
WHERE type = 'FK;

/*verificamos las llaves foraneas en nuestra base de datos*/


SELECT *
FROM sys.key_constraints
WHERE type = 'FK';

CHECK
Edwin Augusto Mendoza Suarez
Con este tipo de restriccin, se especifica que los valores ingresados en la columna deben cumplir la regla o
formula especificada. Por ejemplo:

1. Creando una tabla


CREATE TABLE nombreEsquema.nombreTabla(
nombreColumna1 INT NULL,
nombreColumna2 VARCHAR(100) NOT NULL,
nombreColumna3 NVARCHAR(200) NOT NULL,
--VALORES POSITIVOS
CONSTRAINT CH_nombreRestriccion CHECK (nombreColumna1>=0),
-- SOLO VALORES IGUALES A 10 20 30 40
CONSTRAINT CH_nombreRestriccion2 CHECK (nombreColumna1 IN (10,20,30,40)),
--VALORES CONTENIDOS EN UN RANGO
CONSTRAINT CH_nombreRestriccion3 CHECK (nombreColumna1>=1 AND nombreColumna1 <=30)
);

2. Modificando una tabla:


ALTER TABLE nombreEsquema.nombreTabla
ADD CONSTRAINT CH_nombreRestriccion CHECK (nombreColumna1>=0);
GO
ALTER TABLE nombreEsquema.nombreTabla
ADD CONSTRAINT CH_nombreRestriccion2 CHECK (nombreColumna1 IN (10,20,30,40));
GO
ALTER TABLE nombreEsquema.nombreTabla
ADD CONSTRAINT CH_nombreRestriccion3 CHECK (nombreColumna1>=1 AND nombreColumna1 <=
30);
GO

Algunos requerimientos son:


Una columna puede tener cualquier nmero de restricciones CHECK.
La condicin de bsqueda debe evaluarse como una expresin booleana y no puede hacer referencia a otra tabla.
No se pueden definir restricciones CHECK en columnas de tipo text, ntext o image.
Ventajas:
Las expresiones utilizadas son similares a las que se usan en la clusula WHERE.
Pueden llegar a ser una mejor alternativa que los TRIGGERS o disparadores.
Tener siempre en mente:
Al momento de crear nuestra expresin, tomar en cuenta si la columna acepta valores NULL, por ejemplo si
definimos nuestra restriccin que acepte solo valores positivos ( nombreColumna1>=0), NULL es un valor
desconocido por lo tanto se insertar en la columna.
No es posible obtener el valor previo despus de realizar un UPDATE, si esto es necesario se recomienda usar un
TRIGGER.

Para consultar las restricciones CHECK se puede utilizar:


SELECT *
FROM sys.check_constraints
WHERE parent_object_id = OBJECT_ID('nombreEsquema.nombreTabla');

DEFAULT
Se puede decir que no es una restriccin, ya que solo se ingresa un valor en caso de que ninguno otro sea
especificado. Si una columna permite NULL y el valor a insertar no se especifica, se puede sustituir con un valor
predeterminado.

CREATE TABLE nombreTabla


(
nombreColumna1 INT NULL CONSTRAINT DF_nombreRestriccion DEFAULT(0),
nombreColumna2 VARCHAR(100) NOT NULL,
Edwin Augusto Mendoza Suarez
nombreColumna3 NVARCHAR(200) NOT NULL,
);

Para obtener una lista de las restricciones DEFAULT:


SELECT *
FROM sys.default_constraints
WHERE parent_object_id = OBJECT_ID ('nombreEsquema.nombreTabla');

Para observar el detalle de la relacin entre tablas, lo hacemos de la siguiente manera:

Seleccionamos todas las tablas.

Podemos hacer la relacin de tablas en forma grfica.


Arrastramos los campos que se van a relacionar.
Edwin Augusto Mendoza Suarez

Jalamos con el puntero desde el campo de la tabla dependiente, hasta el campo de la tabla independiente
(considerar que el tipo de variable de ambos debe concordar en ambos).
En el segundo cuadro muestra quien funciona como primary key y quien como foreign key (se puede
configurar la relacion por defecto).
En elespacio de insert and update, seleccionamos las dos pestaas en cascada.

INDICES
Pueden ser agrupados (clustered) y no agrupados (non clustered). Imaginemos que tenemos una serie de datos
personales o cualquier que el mismo este desordenado, podemos ordenarlo en forma descendente o ascendente
con procedimientos almacenados que tiene SQLServer.
Al declarar primary keys en una tabla, los index se generan automaticamente.
Cada tabla solo puede tener un indice agrupado.
Puede existir en una tabla un indice ordenado y no ordenado.

/*introducimos cinco dato en la tabla alumnos (recuerde letras entre '')*/


use universidad
insert into alumnos
values ('Homer', 'Simpson', 'Bouvie', 123, 'Av siempre viva', 666, 'mocha
cabeza','12/12/1990', 'm',123)
insert into alumnos
values ('March', 'Simpson', 'Bouvie', 456, 'Av siempre viva', 666, 'mocha
molochete','12/12/1994', 'm',456)
insert into alumnos
values ('Bart', 'Simpson', 'Bouvie', 789, 'Av siempre viva', 666, 'mocha
busa','12/12/2003', 'm',789)
insert into alumnos
values ('Lisa', 'Simpson', 'Bouvie', 012, 'Av siempre viva', 666, 'mocha
muchete','12/12/2005', 'm',012)
insert into alumnos
values ('Maggie', 'Simpson', 'Bouvie', 345, 'Av siempre viva', 666, 'mocha
puncas','12/12/2012', 'm',345)

Creamos el indice de la siguiente forma:

/*creamos el indice ordenado para la tabla materias*/


use universidad
create clustered index IDX_materias
on materias (Nombre)

/*ejecutamos el subproceso de index creados anteriormente*/


execute sp_helpindex 'materias'

/*creamos el indice no ordenado para la tabla materias*/


use universidad
create nonclustered index IDX_nomaterias
on materias (Carrera)

/*ejecutamos el subproceso de index creados anteriormente*/


execute sp_helpindex 'materias'
Edwin Augusto Mendoza Suarez
Entonces, el orden de seleccin de la tabla depender primero de la columna clustered cuando esta sea select *, y
si la seleccin es de algunas cuantas columnas, SQLServer ordenara por la columna nonclustered.

WHERE
Establece la condicin que se obtiene en la consulta que se realiza, ya sea por comparacin de caracteres, o
relaciones matemticas.

OPERADORES
Operadores Operadores Operadores
matematicos. logicos. relacionales.
SUMA + AND MAYOR QUE > DISTINTO <>; =
RESTA - OR MENOR QUE < NO MAS QUE >
MULTIPLICACION * NOT IGUAL QUE = NO MENOS QUE <
DIVISION / MAYOR O IGUAL QUE >=
MENOR O IGUAL QUE <=

BEETWEN
Operardor entre dos valores:
LIKE Como
IN Entre dos valores
ALL, ANY, SOME, EXITS.
LIKE M% Empiezan con M
LIKE %M Terminan con M
LIKE %M% Contiene M

ORDER BY
Permite ordenar una serie de datos segn sea conveniente.
ORDER BY [dato] ASC
ORDER BY [dato] DESC
Nota.- al no agregar ASC o DESC el sistema detecta como ASC

FUNCIONES AGREGADAS

AVG
Permite calcular el promedio de un lote de datos con o sin restriccin.
Select AVG ([campo]) as [nombre_del_promedio]
From [nombre_tabla]
Where [condicion]

MIN/MAX
Permite devolver el valor mnimo o mximo de un lote de datos con o sin restriccin.
Select MIN ([campo]) as [nombre_del_valor_minimo]
From [nombre_tabla]
Where [condicion]

Select MAX ([campo]) as [nombre_del_valor_maximo]


From [nombre_tabla]
Where [condicion]

COUNT
Cuenta la cantidad de registros de una tabla con o sin restriccin.
Select COUNT ([campo]) as [nombre_de_la_cantidad_contada]
From [nombre_tabla]
Where [condicion]
Edwin Augusto Mendoza Suarez
DISTINCT
Selecciona una serie de datos distintos uno de otro.
Select DISTINCT ([campo]) as [nombre_de_la_cantidad_contada]
From [nombre_tabla]
Where [condicion]

SUB CONSULTAS
Una subconsulta es una consulta (query) dentro de otra consulta.
Algunas subconsultas son fciles de pensar pero difcil de construir, por eso se debe tener en claro lo que se debe
obtener.

Select [columnas]
From [nombre_tabla]
Where [condicion] = (
Select [columnas]
From [nombre_tabla]
Where [condicion])

/*mostramos todos los datos de la tabla alumnos*/


select *
from alumnos

/*seleccionamos a los personajes cuyo ci es menor que el promedio de los ci de las


mujeres*/
select *
from alumnos
where ci <(select AVG (ci) from alumnos where sexo = 'f')

TIPOS DE SUB CONSULTAS:

CON ALIAS
IN: Todo lo que est dentro de ().
Select [columnas]
From [nombre_tabla]
Where [condicion] IN (
Select [columnas]
From [nombre_tabla]
Where [condicion])

/*seleccionamos a los personajes cuyo codigo es igual a la subconsulta de los


personajes
que nacieron antes de 2000-12-12*/
select *
from alumnos
where codigo in (select codigo from alumnos where fecha_nacimiento > '2000-12-12')
Edwin Augusto Mendoza Suarez

/*actualizamos el numero telefonico de los personajes que son de sexo femenino*/


update alumnos
set telefono = telefono * 2
where codigo in (select codigo from alumnos where sexo = 'f')

JOIN (UNIR-ENLAZAR)

INNERJOIN
Es el ms comn entre los enlaces.
Une dos tablas que comparte valores de una columna especfica.
select [identificador_a].[lista]
from [tabla_a] [identificador_a]
innerjoin [tabla_b] [identificador_b]
on [identificador_a].[columna_a] condition [identificador_b].[columna_b]

/*se crea las tablas que conformaran nuestra base de datos universidad*/
create table becados (codigo int, nombre varchar(20), ap_pat varchar(20), ap_mat
varchar(20), ci int,direccion varchar(50), telefono int, correo varchar(70),
fecha_nacimiento date, sexo char(2))

/*introducimos cinco dato en la tabla becados (recuerde letras entre '')*/


use universidad
insert into becados
values (1, 'Abraham', 'Simpson', 'Abu', 123, 'Av chacaltaya', 436, 'abel
cabeza','12/12/1920', 'm')
insert into becados
values (2, 'moes', 'Sislac', 'Trago', 456, 'Av baptista', 62, 'moes
molochete','12/12/1944', 'm')
insert into becados
values (3, 'Barny', 'Gomez', 'Gomozo', 789, 'Av 16 de julio', 454, 'barny
busa','12/12/1983', 'm')
insert into becados
values (4, 'Montgomery', 'Burns', 'Tacao', 012, 'Av saavedra', 867, 'burns
muchete','12/12/1905', 'm')
insert into becados
values (5, 'Apu', 'Namahasa', 'Mapetilan', 345, 'Av buenos aires', 560, 'apu
puncas','12/12/1972', 'm')

/*mostramos las tablas de alumnos y becados que tienen en comun el apellido terno
Simpson y
el numero ci de alumnos es menor que el de becados*/
select *
from alumnos a
Edwin Augusto Mendoza Suarez
inner join becados b
on a.ap_pat = b.ap_pat and a.ci < b.ci

Existen otros tipos de uniones:


TIPO SINTAXIS FORMA
LEFT JOIN Select [lista]
From [table_a] a
Left join [table_b] b
On a.key = b.key
RIGHT JOIN Select [lista]
From [table_a] a
right join [table_b] b
On a.key = b.key
INNER JOIN Select [lista]
From [table_a] a
inner join [table_b] b
On a.key = b.key
LEFT OUTER JOIN Select [lista]
From [table_a] a
Left outer join [table_b] b
On a.key = b.key
RIGHT OUTER JOIN Select [lista]
From [table_a] a
Right outer join [table_b] b
On a.key = b.key
FULL JOIN Select [lista]
From [table_a] a
full join [table_b] b
On a.key = b.key
FULL OUTER JOIN Select [lista]
From [table_a] a
Full outer join [table_b] b
On a.key = b.key
Where a.key is null or b.key is null

Otras formas de enlaces:


/*unimos dos tablas con una columna que tienen en comun*/
select ap_pat from alumnos
union
select ap_pat from becados

TIPO SINTAXIS FORMA


UNION Select [columna_a] From [table_a]
union
Select [columna_b] From [table_b]
Edwin Augusto Mendoza Suarez
UNION ALL Select [columna_a] From [table_a]
union
Select [columna_b] From [table_b]
UNE REPETIDOS Y NO REPETIDOS
INTERSECT Select [columna_a] From [table_a]
intersect
Select [columna_b] From [table_b]

MINUS Select [columna_a] From [table_a]


minus
Select [columna_b] From [table_b]

VISTAS

Una vista es un objeto de la base de datos que permite obtener los datos de una consulta comoo si fuera una
tabla. Trabaja como una tabla pero no se puede ingresar datos o registros a esa vista.
Realice la complejidad para los usuarios.
Previene que columnas o datos sensibles sean tocados.
Aumenta en rendimiento de una base de datos.
Create view [V_nombre_vista]
As select [tabla_a, tabla_b, ]
From [nombre_tabla]
Where [condicion]

/*creamos una vista de alumnos varones*/


create view V_varones
as select ap_pat, ap_mat, nombre
from alumnos
where sexo = 'm'

/*observamos los datos de la vista V_varones*/


select *
from V_varones

/*mostramos la configuracion del la vista V_varones*/


sp_helptext V_varones

/*alteramos la configuracion de la vista V_varones donde no observemos su


configuracion y la selecion es sin restricciones*/
alter view V_varones with encryption
as select * from alumnos

/*mostramos la nueva configuracion del la vista V_varones*/


sp_helptext V_varones
Edwin Augusto Mendoza Suarez
/*eliminamos la vista V_varones*/
drop view V_varones

TRIGGERS

Es la creacion de tablas temporales paralela a la tabla original la cual al terminar la ejecucion de cualquier
comando la misma se elimina automaticamente.
Estas tablas se crean apratir de las mismas estructuras de la s tablas originales.
Un trigger en procedmiento almacenado el cual se dispara cundo se quiere modicar una tabla o vista. Estos no se
ejecutan en forma directa mas obedeciendo a una accion que se realizan n una tabla particular.

/*creamos una tabla copia de la tabla materias*/


create table historialmaterias (Fecha date, Nombre varchar(50), Carrera varchar(50),
Estado varchar(50), Usuario varchar(50))

/*caso 1: creamos un trigger al insertar datos en materias*/


create trigger TR_materia_insertada
on materias for insert
as
declare
@Nombre varchar(50),
@Carrera varchar(50),
@Estado varchar(50),
@usuario varchar(50)
select @Nombre = Nombre from inserted
select @Carrera = Carrera from inserted
insert into historialmaterias
values (GETDATE(),@Nombre, @Carrera, 'Materia Insertada', SYSTEM_USER)

De otra forma (no mostrar dos filas agregadas, o bien no denotar que hay un trigger detrs de la insercin de
datos)

/*caso 2: creamos un trigger al insertar datos en materias*/


create trigger TR_materia_insertada
on materias for insert
as
set nocount on
declare
@Nombre varchar(50),
@Carrera varchar(50),
@Estado varchar(50),
@usuario varchar(50)
select @Nombre = Nombre from inserted
select @Carrera = Carrera from inserted
insert into historialmaterias
values (GETDATE(),@Nombre, @Carrera, 'Materia Insertada', SYSTEM_USER)

caso 1 caso 2

/*insertamos datos en la tabla materias*/


insert into materias
values (2,'fisica', 'fisica industrial', 'tercer', 'maana', 5)

/*mostramos datos en la tabla materias y en el trigger historialmaterias*/


select * from materias
select * from historialmaterias
Edwin Augusto Mendoza Suarez

/*creamos un trigger al eliminar datos en materias*/


create trigger TR_materia_eliminada
on materias for delete
as
set nocount on
declare
@Nombre varchar(50),
@Carrera varchar(50),
@Estado varchar(50),
@usuario varchar(50)
select @Nombre = Nombre from deleted
select @Carrera = Carrera from deleted
insert into historialmaterias
values (GETDATE(),@Nombre, @Carrera, 'Materia Eliminada', SYSTEM_USER)

/*elimanos una materia de la tabla materias*/


delete materias where Nombre = 'fisica'

/*creamos un trigger al actualizar datos en materias*/


create trigger TR_materia_actualizada
on materias for update
as
set nocount on
declare
@Nombre varchar(50),
@Carrera varchar(50),
@Estado varchar(50),
@usuario varchar(50)
select @Nombre = Nombre from inserted
select @Carrera = Carrera from inserted
insert into historialmaterias
values (GETDATE(),@Nombre, @Carrera, 'Materia Actualizada', SYSTEM_USER)

/*insertamos datos en la tabla materias*/


insert into materias
values (2,'biologia', 'biologia industrial', 'quinto', 'maana', 6)
Edwin Augusto Mendoza Suarez

/*actualizamos una materia de la tabla materias*/


update materias set Nombre = 'historia del hombre', Carrera = 'historia' where Nombre
= 'biologia'

PROCEDIMIENTOS ALMACENADOS (STORE PROCEDURES)

Un procedimiento almacenado es un script con una serie de instrucciones a ser ejecutadas por este
procedimiento, que permite realizar operaciones como consultas, insertar datos, eliminar, actualizar, realizar
clculos, etc .

Create proc [SP_nombre_vista]


As select [tabla_a, tabla_b, ]
From [nombre_tabla]
Where [condicion]

/*creamos el procedimiento de mostrar mensaje*/


create procedure SP_mensaje
as print 'hola tarola'

/*ejecutamos el procedimiento SP_mensaje*/


Edwin Augusto Mendoza Suarez
execute SP_mensaje

/*creamos el procedimiento de mostrar mensaje*/


create procedure SP_seleccion_alumnos
as select * from alumnos

/*ejecutamos el procedimiento SP_seleccion_alumnos*/


execute SP_seleccion_alumnos

Para la introduccin de datos, se crean nuevas variables anteponiendo el smbolo de @ con el mismo tipo de
variable a actualizar, introducir o eliminar.

/*creamos el procedimiento de actualizar el telefono de alumnos*/


create procedure SP_actualizar_telf_alumnos
@ci_alumno int,
@telf_alumno int
as update alumnos set telefono = @telf_alumno
where ci = @ci_alumno

/*ejecutamos el procedimiento SP_actualizar_ci_alumnos*/


execute SP_actualizar_telf_alumnos 12,555

/*creamos el procedimiento insertar alumno*/


create procedure SP_insertar_alumno
@nombre varchar(20),
@ap_pat varchar(20),
@ap_mat varchar(20),
@ci int,
@direccion varchar(50),
@telefono int,
@correo varchar(70),
@fecha_nacimiento date,
@sexo char(2),
@codigo int
as insert into alumnos
values (@nombre, @ap_pat, @ap_mat,@ci, @direccion, @telefono, @correo,
@fecha_nacimiento, @sexo, @codigo)

/*ejecutamos el procedimiento SP_insertar_alumno*/


execute SP_insertar_alumno 'Abraham', 'Simpson', 'Moche', 1, 'Av arce', 444, 'ab
viejo', '1910-11-04', 'm', 2
Edwin Augusto Mendoza Suarez

ALIAS
Especifica la descripcion de un campo que ha sido abreviada al nombrarla en una tabla (no debe pasar de los 128
caracteres).

/*mostramos los campos de docente*/


select * from docente

/*mostramos los campos de docente (con alias)*/


select codigo, nombre, ap_pat as 'Apellido Paterno', ap_mat 'Apellido Materno',
ci Carnet, direccion, telefono, correo, fecha_nacimiento, sexo from docente

RESPALDO Y RESTAURACIN DE BASE DE DATOS


Permite restaurar una base de datos cuando el mismo se haya eliminado.

/*creamos una copia de restauracion de una base de datos*/


backup database universidad to disk = 'd:\universidad.bak'
Edwin Augusto Mendoza Suarez

CONFIGURACIN DE SQL SERVER 2012


Administrador de usuarios:
Edwin Augusto Mendoza Suarez

Es necesario que los usuarios que van a utilizar una base de datos determinada tenga algunas restricciones para el
uso y configuracin de las tablas de la base de datos. Por ello es importante asignar que usuarios realizaran el
proceso de ingresar datos, otro que elimine datos, etc.

Insertamos el nombre del nuevo usuario que administrara ciertas caractersticas de la base de datos.

Al activar Enforce password policy, exigira al usuario


renovar la contrasea en tiempos dados, para una
mejor proteccion de la base de datos.
Edwin Augusto Mendoza Suarez

db_datareader permite al usuario leer los registros de Escogemos el servidor.


las tablas.
db_writer permite al usuario escribir sobre la base de
datos.

Establecemos los permisos y restricciones del servidor.

You might also like