Está en la página 1de 22

Comandos consultas SQL server

-- crear base de datos:


Créate database <namedatabase>;
-- crear tabla:
Créate table <nametable>(
Nombre varchar(30),
Clave varchar(10)
);
-- insertar nuevos registros en tabla
use miDB
insert into [dbo].cliente ([nombre],[edad]) values ('Albanela', 28)

-- Procedimiento almacenado que muestra o devuelve información de columna para los objetos especificados que se pueden consultar en el
entorno actual:
exec sp_columns <nametable>

-- Eliminar tabla:
Drop table <nametable>

-- Recuperar todos los campos de una tabla


select * from persona

-- borrar una registro (fila) de la tabla. Ejemplo fila 4


delete persona where id=4

-- Actualizar un campo (ejemplo edad) de un registro (fila) de la tabla. Ejemplo fila 2


delete persona where id=4

update persona set edad= 29 where id=2


-- insert usando script en tabla venta
USE [miDB]
GO

INSERT INTO [dbo].[venta]


([fecha]
,[id_Client]
,[total])
VALUES
(getdate()
,1
,10)
GO

-- ejemplo de tablas con sus relaciones

-- seleccionar todos los datos de la tabla venta (alias v) y los campos description de tabla concepto (alias c), donde el campo
id_Venta de c es igual al campo id de v.

select v.*, c.description from venta as v


inner join concepto as c on id_Venta = v.id
-- seleccionar todos los datos de la tabla cliente (alias cli), de tabla concepto (alias c) y de la tabla ventas (alias v), con las
condiciones condiciones:
el campo id_Venta de c = campo id de v,
el campo id de cli = al campo id_Client de v

select cli.*, c.*, v.* from venta as v


inner join concepto as c on id_Venta= v.id
inner join cliente as cli on cli.id = v.id_Client
-- ordenar alfabéticamente por campo description
order by c.description
-- guardar o crear una vista que tiene que ver con consultas select

create view vista_conceptos


as

select cli.nombre, c.description, v.* from venta as v


inner join concepto as c on c.id_Venta= v.id
inner join cliente as cli on cli.id = v.id_Client

-- modificar una vista una vista que tiene que ver con consultas select, se agrega a la vista la instrucción alter

alter view vista_conceptos


as

select cli.edad, c.description, v.* from venta as v


inner join concepto as c on c.id_Venta= v.id
inner join cliente as cli on cli.id = v.id_Client
-- declarar variables, funcioon if else
USE miDB
GO

DECLARE @HERRAMIENTAS INT


SET @HERRAMIENTAS = 99
BEGIN
IF @HERRAMIENTAS >= 100
PRINT('HOLA')
ELSE
PRINT('ADIOS')
END

-- CREAR FUNCION ESCALAR ejemplo


SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER FUNCTION fnMes


(
@a int, @b int, @c varchar(max)
)
RETURNS int
AS
BEGIN
return month(getdate())

END
GO
-- otro ejemplo
USE [miDB]
GO
/****** Object: UserDefinedFunction [dbo].[fnMes] Script Date: 27/08/2021 10:15:25 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER FUNCTION [dbo].[fnMes]


(
@a int, @b int, @c varchar(max)
)
RETURNS int
AS
BEGIN
return month(getdate())
END
-- llamar una función. Ejemplo llamar a la función fnMes del ejemplo anterior

select dbo.fnMes(1,2,'parametro 3')

-- agregar función escalar dentro (como parámetro) de una consulta


-- procedimientos almacenados (stored procedure): Un procedimiento almacenado es un conjunto de instrucciones de T-
SQL que SQL Server compila, en un único plan de ejecución.
Varias consultas al mismo tiempo, visto como una sola consulta. Se almacenan en la misma base de datos

Diferencia entre procedimiento almacenado y Función en SQL SERVER


Los procedimientos almacenados y las funciones son componentes de código que podemos utilizar el SQL SERVER para crear rutinas.

¿Cual es la diferencia entre ellos?

La primera y más obvia diferencia, es que las funciones siempre retornan un valor, mientras que un procedimiento almacenado puede que retorne un
valor o puede que no lo haga. Es decir que puede comportarse como un método o como una función, haciendo una analogía con el desarrollo de
software.

Otra diferencia muy importante para los desarrolladores es que los procedimientos almacenados pueden ser invocados desde el entorno de
desarrollo, es decir desde .NET, pero las funciones no.  Así que al momento de desarrollar, siempre nos comunicaremos con procedimientos
almacenados.

Las funciones de hecho no pueden ser invocadas por sí solas, mientras que los procedimientos almacenados sí. Para invocar una función, esta debe
estar dentro de una instrucción. Por ejemplo:

DECLARE 
@modelo as int
Select @modelo= dbo.FN_GetModeloNow()

Sin embargo aunque pareciera que las funciones tienen ciertas desventajas sobre los procedimientos almacenados, en realidad no es así,
simplemente sirven para diferentes cosas.

Uno de las grandes ventajas es que las funciones retornan valores procesables. Es cierto los stored procedures también retornan valores....pero
cuando eso sucede solamente podemos procesar los valores de tipo escalar.  Por ejemplo:

EXEC dbo.Calculador 1,@monto=@suma OUTPUT

Aquí estoy asignado a la variable @suma el valor de salida @monto de mi stored procedure. Pero si mi stored procedure retorna una tabla o conjunto
de tablas, no es posible recuperar esos valores y usarlos para procesarlos dentro de otro código. En cambio todo valor que retorna de una función
puede ser procesado.  Por ejemplo una función puede retornar un tabla completa y puedo operar con ella. En este ejemplo solo la desplegare con un
Select:

select * from  dbo.FN_Vista( )

Esta función está definida de la siguiente forma:

CREATE FUNCTION dbo.FN_Vista
(  

)  
RETURNS @TempVista TABLE   
(  
 idUsuario INT NULL,
idModulo INT NULL,
idVista INT NULL,
idDepartamento INT NULL
)  
AS

En el cuerpo de la función definir que datos deseo poner en mi tabla @TempVista. Una vez que se recupera esta tabla de la función puedo usarla
para insertar en otra tabla, usar sus valores para hacer comparaciones, hacer JOIN con otras tablas, etc. Por ejemplo:

SELECT * FROM Usuarios U 
INNER JOIN Departamento dep ON U.idDepartamento = dep.idDepartamento
INNER JOIN FN_Vista( ) UR on UR.idUsuario = U.idUsuario

Por definición,las funciones son ideales para retornar valores con los que deseo operar, mientras que los procedimientos almacenados suelen ser la
parte de salida final del código. Es decir que el procedimiento almacenado es el que se comunica directamente con el usuario y le presenta el
resultado final.

Por eso, una función no puede invocar un procedimiento almacenado ,  solamente puede invocar otra función. En cambio el procedimiento
almacenado, como es código final, puede invocar funciones y procedimientos almacenados.
utilizar procedimientos almacenados
Así que a correcta integración de un sistema que use ambos, sería

para comunicarse y enviar datos a la aplicación; mientras que las


funciones se usan para procesar datos internamente dentro del stored
procedure.
-- ejemplo de uso de procedimiento almacenado
Tabla vendedor y tabla cliente. En el ejemplo en la tabla cliente se ve la relación con la tabla vendedor; en el caso de clientes
pedro y Miguel tienen en el mismom vendedor Sandra.

-- Ahora se requiere crear un procedimiento almacenado para reemplazar a Sandra ya que será eliminada del sistema porque ya no trabaja
con nosotros. Para eso primero se debe primero asignar los clientes de Sandra a otro vendedor, y luego eliminar a Sandra del sistema.
-- creamos el procedimiento almacenado:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================

Alter PROCEDURE spEliminarVendedor


-- Add the parameters for the stored procedure here
@idVendedor_a_eliminar int
AS
BEGIN
declare @idVendedorDestino int
declare @CantidadVendedoresPosibles int = (select count(*) from vendedor where id!= @idVendedor_a_eliminar)
declare @resul int = (select count(*) from vendedor where id=@idVendedor_a_eliminar)

-- (1)validar si existe el vendedor buscado para eliminar


if(select count(*) from vendedor where id=@idVendedor_a_eliminar)=0
begin
select 'Error el vendedor no existe'
end
else
begin
select 'El vendedor a eliminar si existe'
-- validad si existe otro posible vendedor
if(@CantidadVendedoresPosibles)>0
begin
select 'si existe otro posible vendedor a asignar'
-- (2)obtener el vendedor destino
set @idVendedorDestino = (select top(1) id from vendedor where id!=@idVendedor_a_eliminar)
select 'el vendedor de destino es:'
select @idVendedorDestino
-- (3)transferimos los clientes al vendedor destino
-- actualizar tabla cliente, especificamente en sus parametros id_Vendedor que tienen valor
actual idVendedor_a_eliminar,
-- se le asignaran el valor de idVendedorDestino
update cliente set id_Vendedor= @idVendedorDestino where id_Vendedor=@idVendedor_a_eliminar

-- (4)Eliminamos vendedor
Delete vendedor where id=@idVendedor_a_eliminar

end
else
begin
select 'No existe otro vendedor para transferir'
end

end
--select @CantidadVendedoresPosibles
END
GO

-- FINALMENTE EJECUTAMOS EL PROCEDIMIENTO ALMACENADO Y un parámetro que corresponde al vendedor a eliminar y reemplazar por otro de la
lista
actualizada tabla
Sql Server para novatos | Union, Union All, Crear funciones SQL
--

que regresen tablas | #5


-- instrucción UNION: combina los resultados de dos o más consultas dando lugar a la creación de un único conjunto de resultados que incluye
todas las filas que pertenecen a todas las consultas en la Unión. En esta operación, combina dos consultas más y elimina los duplicados.
Requisito: que las columna (tipo de campo) en ambas tablas sean iguales. En este Ejemplo: columnas nombre y correo existen ambas tablas.
Nota: la instrucción UNION ALL no elimina los duplicados.
-- crear funciones que regresan tablas
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE FUNCTION fnCorreos


(
@opcion int
)
RETURNS @Tabla table(nombre varchar(50), correo varchar(50))
AS
begin

if @opcion = 1
begin
insert into @Tabla (nombre, correo) select nombre, correo from vendedor
end
else if @opcion = 2
begin
insert into @Tabla (nombre, correo) select nombre, correo from cliente
end
else if @opcion = 3
begin
insert into @Tabla (nombre, correo)
select nombre, correo from vendedor
union
select nombre, correo from cliente
end

RETURN
end
GO
-- PARA llamar a esa función:
select * from fnCorreos(3)

Sql Server para novatos | Funciones de agregación, Group by,


njj

Having | #6
-- Una función de agregación es una función que resume las filas de un grupo en un solo valor. COUNT , MIN y MAX son ejemplos de  funciones de agregación.
Cuando se usa junto con una cláusula GROUP BY , los grupos resumidos suelen tener al menos una fila.

-- funciones agregadas mas básicas


Max: retorna maximo
Min: retorna minimo
Avg: retorna promedio
Var: retorna varianza estadistica
Sum: retorna suma
-- uso de función agregada
select max(total) from venta
where id_Client=3

select count(id) from venta


select * from venta

La cláusula GROUP BY te permite organizar las filas de una consulta en grupos. Los grupos están determinados por las columnas que
se especifican en la cláusula GROUP BY . En esta consulta, la cláusula GROUP BY regresa un grupo para cada combinación de los
valores en las columnas enumeradas en la cláusula GROUP BY
-- hace filtrado con instruccion HAVING: Especifica una condición de búsqueda para un grupo o una función de agregacion. HAVING solo se
puede usar con la instrucción SELECT. HAVING se utiliza normalmente con una cláusula GROUP BY. Cuando no se usa GROUP BY, hay un grupo
agregado único implícito. WHERE es para registros individuales y HAVING para filtrados sobre un grupo de registros cuando se utiliza función
agregada.
Subconsultas, consultas anidadas | #7
select *, (
--sub consulta, donde devuelve una columna totalcoindice con los valores
-- donde coinciden el id de cliente con el campo id_Client de venta
select count(id) from venta as v
where cli.id = v.id_Client
and (
select count(*) from concepto as c
where c.id_Venta = v.id
) > 0
) as totalcoincide
from cliente as cli

/*select '' as venta, id_Client,'' as cliente, cli.id, cli.nombre from venta as v, cliente as cli
where cli.id = v.id_Client

select'' as venta, v.id,'' as concepto, c.id_Venta, c.description from venta as v, concepto as c


where c.id_Venta = v.id
*/

También podría gustarte