You are on page 1of 15

SQL

Operadores lógicos
= igual
< menor que
> Mayor que
<= menor igual que
>= mayor igual que
<> diferente que

Eliminación de registros
delete  elimina registros
drop  elimina la estructura (tabla, bd)
truncate  elimina los registros (reset), si creamos el id incremental al poner truncate
este nos elimina todos los campos y resetea el incremento a 0

Crear una base de datos


create database usuarios

Eliminar una base de datos


drop database usuarios

Eliminar todos los registros de una tabla


delete from usuarios

delete from usuarios


where id_usuarios=1

truncate table temporal

Crear una tabla con campos


create table usuarios2(
id_usuario int not null,
nombre varchar(50)
)

Crear una tabla con campos con llave primaria


create table usuarios(
id_usuarios int primary key,
nombre varchar(50) not null,
edad int not null
)

Eliminar una tabla


drop table usuarios2

Para comentar en sql server 2012


/*drop table usuarios2*/

Para insertar registro


insert into usuarios values(
1,'javier',30
);

insert into usuarios values


(7,'lidia',80),
(8,'maria',24)

Consultas
Para seleccionar todos los registros
select * from usuarios
select usuarios.id_usuarios from usuarios

select id_usuarios, nombre from usuarios

Para hacer consultas con WHERE


select * from usuarios
where nombre='javier'

select * from usuarios


where id_usuarios=1

select id_usuarios,nombre from usuarios


where id_usuarios=1

select id_usuarios, nombre from usuarios


where id_usuarios>3

select id_usuarios, nombre from usuarios


where nombre <> 'javier'

Actualizar data
update usuarios set nombre ='carlos'
where id_usuarios=6

Identity
 Por defecto el identity empieza de 1 y su incremento es de 1, no permite valores nulos
 No es permitido la introducción del campo
 No permite la modificación
 Permite que se repite los números
 Se le puede especificar de cuanto en cuanto quieres que aumente el campo
 Por tabla solo un campo puede tener Identity
 Se puede activar y desactivar la opción de inserción
create table usuario2(
id_usuarios int identity,
nombre varchar(50) not null
)

create table usuario2(


id_usuarios int identity(1,2),//el primer valor es desde donde inicia y el segundo valor es
el incremento
nombre varchar(50) not null
)

select ident_seed('usuario2')
Para saber desde que numero inicia

select ident_incr('usuario2')
para saber de cuanto es el incremento

set identity_insert usuario2 on;//se activa para poder insertar nosotros mismos
insert into usuario2(id_usuarios,nombre) values(2,'mery')
set identity_insert usuario2 off; //para desactivar la inserción

Operadores aritméticos(librería)
/*sacar las ganacias de cada libro*/
select nombre,precio_venta-precio_compra as Ganacia from libros

select nombre,precio_venta-precio_compra as Ganacia from libros


where id_libro=1

/*quiero comprar 10 libro de un solo nombre cuanto me va a COSTAR*/


select nombre,precio_compra,5 as cantidad, precio_compra*10 as 'Costo Total' from libros
where nombre='la caperucita roja'

/*actualizar el precio de venta en un 10% de un solo libro*/


update libros set precio_venta=precio_venta + (precio_venta*0.1)
where nombre='la caperucita roja'

Funciones de Agregado
NUMEROS
sum  suma
/*cuanto me cuesta comprar todos los libros*/
select sum(precio_venta) from libros

select sum(edad) from usuarios


where sexo='M' and edad>18

avg
select avg(edad) from usuarios
where sexo='F'

CADENA Y NUMEROS
count  cuenta (los nulos no cuenta)
select count(id_libro) from libros

/*cuantos libros hay, cuando su precio es mayor a 190


select count(id_libro) from libros
where precio_venta>190

select count(*) from usuarios


where sexo='M' and edad<18

max  máximo
/*cual es el libro que cuesta mas*/
select max(precio_venta) from libros

select min(nombre) from usuarios/*cuando se pone en un campo de texto te devuelve el ultimo


valor del abecedario iniciando por el z hasta la a*/

min  mínimo
/*cual es el libro que cuesta menos*/
select min(precio_venta) from libros

select min(nombre) from usuarios/*cuando se pone en un campo de texto te devuelve el primer


valor del abecedario iniciando por el a hasta el z*/

Concatenación & Alias


/*concatenacion = la union de 2 o mas cadenas*/
select 'libro: '+ titulo from libros

select 'libro: '+ titulo +' / '+titulo from libros

select 'libro: '+ titulo +' / '+titulo from libros


where id_libro=1

/*alias=para renombrar la etiqueta de la columna*/


select precio_compra as 'precio compra', precio_venta as 'precio venta' from libros

substring
/*para extraer parte de la cadena 8=desde donde inicia, 5=número de caracteres*/
select substring('hola a todos',8,5);

str
/*devuelve un valor numerico*/
select str(123);
stuff
/*para remplazar parte de la cadena 12=desde donde inicia, 6=número de caracteres a
remplazar*/
select stuff('tutoriales hackro',12,6,'peru')

len
/*para saber el tamaño de la cadena*/
select len('tutoriales hackro')

char
/*devuelve el valor en digito del codigo ascii*/
select char(69)

lower
/*convertir a minusculas*/
select lower('TUTORIALES HACKRO')

upper
/*convertir a mayusculas*/
select upper('tutoriales hackro')

ltrim
/*eliminar espacios de la izquierda*/
select ltrim(' tutoriales hackro ')

rtrim
/*eliminar espacios de la derecha*/
select rtrim(' tutoriales hackro ')

replace
/*cambia apartir de una cadena de texto*/
select replace('hola a todos', 'a todos','javier')

reverse
/*pone el texto al reves*/
select reverse('anita lava la tina')

patindex
/*busca una palabra en una cadena de texto y nos devuelve desde donde inicia la palabra
buscada*/
select patindex('%mexico%', 'hola a todos desde mexico')

replicate
/*repite la palabra n veces*/
select replicate('hola ', 100)

space
/*numero de espacios entre palabras*/
select 'tutoriales'+space(10)+'hackro'

Ordenar
Order by
/*Ordena los datos de menor a mayor*/
select * from libros
order by titulo

/*Ordena ascendente*/
select * from libros
order by titulo asc
/*Ordena descendente */
select * from libros
order by titulo desc

select * from libros


order by titulo desc,precio_venta asc

Operdores lógicos
not  != : negación
select * from libros
where not id_libro=1

and  && : y
select * from libros
where precio_venta=128 and precio_compra=111

select * from libros


where precio_venta>250 and precio_venta<300

or  !! : o
select * from libros
where id_libro=1 or id_libro=2

select * from libros


where precio_venta>150 or precio_compra>200

is null
/*para busca los datos que tienen valores nulos*/
select * from libros
where nombre is null

/*para busca los datos que no tienen valores nulos*/


select * from libros
where nombre is not null

select * from libros


where not nombre is null

between
/*nos devolverá registros que su precio de venta este entre 200 y 300*/
select * from libros
where precio_venta between 200 and 300

like
/*buscar los libros que tengan esa palabra*/
select * from libros
where nombre like '%de%'

/*buscar los libros que inicien con la palabra*/


select * from libros
where nombre like 'el%'

/*buscar los libros que terminen con la palabra*/


select * from libros
where nombre like '%da'

/*el guion abajo sirve cuando no sabemos como se escribe y nos haga la busqueda*/
select * from libros
where nombre like '%la fi_ica es divertida%'

not like
/*buscar los libros que no tengan esa palabra*/
select * from libros
where nombre not like '%de%'
having
 filtro por grupo de registros
 para utilizar el having tenemos que utilizar operadores de agrupamiento (count, max, min, avg,
sum)
 Como la cláusula WHERE no se puede utilizar con funciones SQL del tipo SUM, MAX, entonces
utilizamos en su lugar, HAVING.
select nombre, sum(edad) from usuarios
group by nombre
having sum(edad)>40

distinct
distinct --> distinto --> eliminara repeticiones
select distinct(nombre), edad from usuarios
order by nombre

select distinct(edad) from usuarios


order by edad

select sum(distinct edad) from usuarios

top
Muestra el numero de usuarios que quieres ver
select top 4 * from usuarios;

select top 9 * from usuarios


order by id_usuario desc;

in - = any
sirve para buscar varios registros
select * from libros
where id_libro in (2,4,6)

not in - <> all


select * from libros
where id_libro not in (2,4,6)

join on
sirve para unir dos tablas
/* a dos tablas*/
select * from Alumnos join datos on datos.id_alumno=Alumnos.id_alumno
select * from alumnos join carrera on carrera.id_carrera=Alumnos.id_carrera

/* a mas de dos tablas*/


select * from Alumnos join datos on datos.id_alumno=Alumnos.id_alumno
join carrera on carrera.id_carrera=Alumnos.id_carrera

select alumnos.id_alumno, alumnos.nombre, alumnos.apellidos, carrera.carrera, datos.mail,


datos.edad from Alumnos
join datos on datos.id_alumno=Alumnos.id_alumno
join carrera on carrera.id_carrera=Alumnos.id_carrera
where alumnos.id_alumno=2
inner join on
inner join son para muchas tablas
select * from datos inner join alumnos on datos.id_alumno=Alumnos.id_alumno

select Alumnos.nombre, Carrera.carrera,datos.edad, datos.mail from alumnos


inner join Carrera on carrera.id_carrera = Alumnos.id_carrera
join datos on datos.id_alumno=Alumnos.id_alumno

left join on
muestra los datos de la primera tabla izquierda y solo se puede usar en dos tablas
select * from alumnos left join datos on datos.id_alumno=Alumnos.id_alumno

Right join on
muestra los datos de la primera tabla derecha y solo se puede usar en dos tablas
select * from alumnos right join datos on datos.id_alumno=Alumnos.id_alumno

select * from datos right join alumnos on datos.id_alumno=Alumnos.id_alumno

select Alumnos.nombre, Carrera.carrera,Datos.edad from Alumnos


inner join Datos on Alumnos.id_alumno=Datos.id_datos
join Carrera on Alumnos.id_carrera=Carrera.id_carrera
group by Carrera.carrera,alumnos.nombre, Datos.edad

update
update Datos set Datos.edad=23 from Datos
join Alumnos on Alumnos.id_alumno=datos.id_alumno
join Carrera on carrera.id_carrera=Alumnos.id_carrera
where Datos.edad<24

update Carrera set cupo_minimo=10


where id_carrera=1

alter table
add
Para añadir una nueva columna
alter table carrera
add cupo_limitado int
alter table carrera
add cupo_minimo int,cupo_limitado int

alter table carrera


add aumento as (cupo_minimo + 100)

drop columna
Para eliminar una columna
alter table Carrera
drop column cupo_limitado

alter table carrera


drop column cupo_minimo, cupo_ilimitado

SUB CONSULTAS
select * from Carrera
where carrera.id_carrera=(select id_carrera from Carrera where id_carrera=1)

select * from libros


where id_libro=(select id_libro from libros where titulo='100 años de soledad')

in
select * from libros
where id_libro in (select id_libro from libros where num_pag>500)

= any
select * from usuarios
where sexo='f' and edad = any (select edad from usuarios where sexo='m')
order by edad

<> all
select * from usuarios
where sexo='f' and edad <> all (select edad from usuarios where sexo='m')
order by edad

select edad,sexo from usuarios


where not(edad <> all(select edad from usuarios where sexo='m')
or edad <> all (select edad from usuarios where sexo='f'))
group by edad, sexo
order by edad

update usuarios set tipo_usuario= 'usuario'


where id_usuario= any (select id_usuario from usuarios where edad=26)

delete usuarios
where tipo_usuario= any(select tipo_usuario from usuarios where edad=26)

/*insertamos datos de la tabla usuarios a la tabla nombres*/


insert into nombres(nombre)
select (nombre) from usuarios
where sexo='f'

go
sirve para decir que antes de go es una consulta y luego de go es otra consulta
delimita únicamente conjuntos o grupos de sentencias para seguido de eso ejecutar mas sentencias
create database empleados
go
use empleados;
VISTAS
 Las vistas son consideradas tablas virtuales a través de una consulta
Crear una vista
create view Usuarios_V as /* para crear la vista con el nombre Usuarios_V */
select nombre from usuarios /*se copia los datos de la columna nombre de la tabla usuaios*/

Ver una vista


select * from usuarios_v /*para visualizar la vista*/

Saber cómo se creó la vista


sp_helptext usuarios_v

Crear una vista Encriptada


Sirve para que no puedan ver como las vistas fueron creadas
create view Vista_1
with encryption as
select * from usuarios
al usar
sp_helptext vista_1
ahora nos muestra el siguiente mensaje  El texto para el objeto 'vista_1' está cifrado.
Eliminar una vista
drop view Usuarios_V

drop view Usuarios_V, vista_2, Vista_1

Actualizar datos vista


Al actualizar los datos en la vista también se actualiza en la tabla original
update mujeres set tipo_usuario='root'
where edad=26

eliminar datos de la vista


Al eliminar datos de la vista también se elimina de la tabla original
delete from mujeres

with check option


permite condicionar las vistas y la modificación de datos
create view copy as
select * from usuarios
where sexo='m'
with check option

Modificar vista
--creamos la vista
create view copy
with encryption
as select * from usuarios
--comprobamos la vista creada
select * from copy
--comprobamos que este cifrada
sp_helptext copy
--alteramos la vista(quitamos el cifrado)
alter view copy
as select * from usuarios

alter view copy


with encryption
as select * from usuarios
where edad>21

case
/*case
when then
end */-- mostrat contenido

select id_usuario, edad, nombre = --campos a mostrar


case edad -- campos a evaluar
when 17 then 'menor' -- casos
when 18 then 'mayor'
when 19 then 'mayor'
when 20 then 'mayor'
when 21 then 'mayor'
when 22 then 'mayor'
when 23 then 'mayor'
when 24 then 'mayor'
when 25 then 'mayor'
when 26 then 'mayor'
end --por defecto retorna un null
from usuarios –tabla de donde vienen los datos

-- vista con case


create view copy3 as
select id_usuario, edad, nombre = --campos a mostrar
case -- campos a evaluar
when edad <= 17 then 'menor' -- casos
when edad >= 18 then 'mayor'
end
from usuarios

if
/*if(condicion)
sentencia a ejecutar
else
sentencia a ejecutar*/

if exists(select*from usuarios where edad<8) --condicional


select * from usuarios where edad <8 --ejecucion
else
select 'no hya menores de 8 años' -- sentencia resultado

if exists(select*from usuarios where edad<=18) --condicional


select * from usuarios where edad <=18 --ejecucion
else
select 'no hya menores de 18 años' -- sentencia resultado

Declarar variables
 las variables no son globales, solo en el entorno donde se esta usando
--declare @nombreVariable TipoDato
--set @nombreVariable=valor

declare @variablesexo varchar(20) -- declaracion de variable


declare @variableedad int -- declaracion de variable
set @variablesexo='m' --asignacion de valor
set @variableedad=18 --asignacion de valor
select * from usuarios
where sexo=@variablesexo and edad=@variableedad --uso de variable
declare @sumatoriahombre int
declare @sumatoriamujer int
set @sumatoriahombre = (select sum(edad) from usuarios where sexo='m')
set @sumatoriamujer = (select sum(edad) from usuarios where sexo='f')

if (@sumatoriahombre>@sumatoriamujer)
begin -- para especificar el inicio de las sentencias
select 'La sumatoria de la edad de los hombres es: '
select @sumatoriahombre
end -- final de las sentencias
else
begin
select 'La sumatoria de la edad de las mujeres es: '
select @sumatoriamujer
end

Procedimientos Almacenados
 sirve para almacenar consultas que constantemente vamos a utilizar
 No pueden contener create procedure, default, rule, trigger, view
Tipos de Procedimientos
1. Del sistema: están almacenados en la base de datos "master" y llevan el prefijo "sp_";
2. Locales: los crea el usuario
3. temporales: pueden ser locales, cuyos nombres comienzan con un signo numeral (#)
4. extendidos: se implementan como bibliotecas de vínculos dinámicos (DLL, Dynamic-Link
Libraries), se ejecutan fuera del entorno de SQL Server.
Proceso:
 Al crear un procedimiento almacenado, las instrucciones que contiene se analizan para verificar si
son correctas sintácticamente.
 Si no se detectan errores, SQL Server guarda el nombre del procedimiento almacenado en la tabla
del sistema "sysobjects" y su contenido en la tabla del sistema "syscomments" en la base de datos
activa. Si se encuentra algún error, no se crea.
Ventajas
 comparten la lógica de la aplicación con las otras aplicaciones, con lo cual el acceso y las
modificaciones de los datos se hacen en un solo sitio.
 permiten realizar todas las operaciones que los usuarios necesitan evitando que tengan acceso
directo a las tablas.
 reducen el tráfico de red; en vez de enviar muchas instrucciones, los usuarios realizan
operaciones enviando una única instrucción, lo cual disminuye el número de solicitudes entre el
cliente y el servidor
crear
create procedure SoloMujeres as --creacion de procedure
select nombre, edad, sexo from usuarios where sexo='f' -- sentencias del procedimiento
exec SoloMujeres --ejecucion de procedure

create procedure sp_usuarios as


select * from usuarios
exec sp_usuarios

insertar
create procedure InsertarChica as
insert into usuarios values('Paulina', 'Pau','MDZ','registrado',20,'F')
exec InsertarChica

eliminar
drop procedure SoloMujeres
if object_id('Mujeres') is not null --en el caso de que si exista
drop procedure Mujeres -- se eliminará
else -- caso contrario
select 'No existe' -- saldrá este mensaje

Modificar
alter procedure procedimientoEncriptado -- nombre del procedimiento
@edad int --parametro
with encryption --encriptacion
as
select * from usuarios where edad>=@edad --sentebcia

exec procedimientoEncriptado 18 --ejecucion de procedimiento

sp_helptext procedimientoEncriptado --verificar seguridad

Proc. Almacenados con parámetros de entrada


create procedure seleccion --nombre del procedimiento
@edad int, @sexo varchar(20) -- parametros del procedimiento
as
select * from usuarios
where edad>=@edad and sexo=@sexo --contenido del procedimiento

exec seleccion 18, 'M' --ejecucion pasando los valores

create procedure seleccion2 --nombre del procedimiento


@edad int=19, @sexo varchar(20)='F' -- parametros del procedimiento
as
select * from usuarios
where edad>=@edad and sexo=@sexo --contenido del procedimiento

exec seleccion2 --ejecucion con parametros predeterminados

exec seleccion2 21,'f' --ejecucion con nuestros valores

Proc. Almacenados con parámetros de entrada y salida


create procedure seleccion --nombre del procedimiento
@edad int, -- parametros de entrada
@sexo varchar, -- parametros de entrada
@count int output -- parametros de salida
as
set @count = (select count(id_usuario) from usuarios
where edad>=@edad and sexo =@sexo) -- contenido

declare @total int --declaramos la variable


exec seleccion 18, 'M', @total output --ejecutamos el procedimiento
select @total --mostramos el resultado

Proc. Almacenados - Return


create procedure seleccion --nombre del procedimiento
@edad int, -- parametros de entrada
@sexo varchar -- parametros de entrada
as
if(@edad is null) or (@sexo is null) --si algnos d elos dos es null
return 0 -- retorna 0
else -- silos 2 parametros tienen un valor
return 1 --retorna 1

declare @retorno int --declaramos la variable


exec @retorno=seleccion 22,'m' --ejecutamos el procedimiento
select @retorno --mostramos el resultado

Proc. Almacenados Info


sp_help --muestra objetos de la base de datos

sp_helptext seleccion--texto que define el objeto


sp_stored_procedures --muestra todos los procedimientos almacenados

Encriptación – P. Almacenado
create procedure procedimientoEncriptado -- nombre del procedimiento
@edad int --parametro
with encryption --encriptacion
as
select * from usuarios where edad>=@edad --sentebcia

exec procedimientoEncriptado 18 --ejecucion de procedimiento

sp_helptext procedimientoEncriptado --verificar seguridad

Anidación – P. Almacenado
create procedure procedimiento1
@resultado int output
as
set @resultado=(select sum(edad) from usuarios)

create procedure procedimiento2


@numero2 int output
as
begin
declare @numero int
exec procedimiento1 @numero output
set @numero2=@numero
end
--mostramos los datos
declare @num int --declaro una variable
exec procedimiento2 @num output --paso la variable de salida
select @num -- imprime el valor

Triggers
 Es un tipo de procedimiento almacenado que se ejecuta cuando se intenta modificar una tabla
Diferencia entre procedure store con trigger y restricciones
 No pueden ser invocados directamente; al intentar modificar los datos de una tabla para la que se
ha definido un disparador, el disparador se ejecuta automáticamente.
 No reciben y retornan parámetros.
 A diferencia de las restricciones "check", pueden hacer referencia a campos de otras tablas
Proceso
se ejecutan DESPUES de la ejecución de una instrucción "insert", "update" o "delete" en la tabla.
Estructura
-- create triggre Nombretrigger
-- on Tabla
-- for EVENTO [insert, update o delete]
--as
-- sentencias
INSERT
--creacion del trigger
create trigger inserteventa -- asignamos un nombre al trigger
on ventas -- indicamos la tala donde se activara la accion
for insert -- después de insertar en la tablaventas
as
begin -- comienza las sentencias
declare @total int -- declaramos una variable int
set @total = (select sum(cantidad) from ventas) --obtenemos la suma de las cantidades
update totales --hacemos un update a la tabla totales
set totales.cantidad = @total
end -- finalzan las sentencias
-- fin del trigger

insert into ventas values(5,2,10)

UPDATE
create trigger actualizarventa2 --Asignamos un nombre al trigger
on ventas --indicamos la tabla donde se activará la acción
for update --después de insertar en la tabla ventas
as
begin -- comienza las sentencias
declare @total int -- declaramos una variable int
set @total = (select sum(cantidad) from ventas) --obtenemos la suma de las
cantidades
insert into totales values(@total)
end --finalizan las sentencias
-- fin del trigger

update ventas
set cantidad=10
where id_venta=3

DELETE
--Creacion trigger--
create trigger EliminarVenta --Asignamos un nombre al trigger
on Ventas --Indicamos la tabla donde se activara la accion
for delete --Despues de insertar en la TablaVentas
as
begin --Comienza las sentencias
declare @total int --Declaramos una variable int
set @total = (select sum(cantidad) from ventas) --obtenemos la suma de las cantidades y lo
asignamos a la variable
update totales --hacemos un update a lña tabla totales
set totales.cantidad = @total
end --finalizan las sentecias
--fin Trigger--

delete ventas --eliminamos un registro


where ventas.id_venta = 6

Habilitar o Deshabilitar
alter table ventas --tabla la cual se ejecuta el trigger
enable trigger EliminarVenta --para actviar el trigger
disable trigGer EliminarVenta --para desactivar el trigger

You might also like