Ejemplos Completos de SQL Server

Colección completa de ejemplos prácticos para descargar y ejecutar

← Volver al inicio

📥 Descargar Ejemplos

Puedes descargar todos los ejemplos en un archivo SQL para ejecutarlos en tu entorno local:

📥 Descargar ejemplos-completos.sql
💡 Nota: Los ejemplos crean una base de datos llamada EjemplosSQL con tablas y datos de prueba.

Contenido de los Ejemplos

Consultas SELECT

SQL - SELECT Básico
-- Seleccionar todas las columnas
SELECT * FROM dbo.Categorias;

-- Seleccionar columnas específicas
SELECT Nombre, Precio, Stock FROM dbo.Productos;

-- Seleccionar con alias
SELECT 
    Nombre AS Producto,
    Precio AS 'Precio Unitario',
    Stock AS 'Existencias'
FROM dbo.Productos;

-- Seleccionar valores únicos
SELECT DISTINCT CategoriaID FROM dbo.Productos;

-- Seleccionar con TOP
SELECT TOP 5 * FROM dbo.Productos;

Cláusula WHERE

SQL - WHERE
-- Filtrar por condición simple
SELECT * FROM dbo.Productos WHERE Precio > 100;

-- Filtrar por múltiples condiciones (AND)
SELECT * FROM dbo.Productos 
WHERE Precio > 50 AND Stock > 20;

-- Filtrar con IN
SELECT * FROM dbo.Productos 
WHERE CategoriaID IN (1, 3);

-- Filtrar con LIKE (búsqueda de texto)
SELECT * FROM dbo.Clientes 
WHERE Nombre LIKE 'J%';

-- Filtrar con BETWEEN (rango)
SELECT * FROM dbo.Productos 
WHERE Precio BETWEEN 50 AND 500;

-- Filtrar con IS NULL
SELECT * FROM dbo.Clientes 
WHERE Telefono IS NULL;

JOIN - Combinar Tablas

SQL - INNER JOIN
-- INNER JOIN: Solo registros coincidentes
SELECT 
    p.Nombre AS Producto,
    c.Nombre AS Categoria,
    p.Precio
FROM dbo.Productos p
INNER JOIN dbo.Categorias c 
    ON p.CategoriaID = c.CategoriaID;
SQL - LEFT JOIN
-- LEFT JOIN: Todos los de la izquierda + coincidentes
SELECT 
    c.Nombre AS Cliente,
    p.PedidoID,
    p.Total
FROM dbo.Clientes c
LEFT JOIN dbo.Pedidos p 
    ON c.ClienteID = p.ClienteID;
-- Muestra todos los clientes, incluso sin pedidos

Subconsultas

SQL - Subconsulta en WHERE
-- Productos con precio mayor al promedio
SELECT Nombre, Precio 
FROM dbo.Productos 
WHERE Precio > (
    SELECT AVG(Precio) FROM dbo.Productos
);
SQL - Subconsulta en SELECT
-- Clientes con total de pedidos
SELECT 
    c.Nombre,
    (SELECT COUNT(*) 
     FROM dbo.Pedidos p 
     WHERE p.ClienteID = c.ClienteID) AS TotalPedidos
FROM dbo.Clientes c;

Stored Procedures

SQL - Crear Procedure
-- Procedure con parámetro opcional
CREATE PROCEDURE dbo.sp_ObtenerProductos
    @CategoriaID INT = NULL
AS
BEGIN
    SET NOCOUNT ON;
    
    SELECT 
        p.ProductoID,
        p.Nombre,
        p.Precio,
        p.Stock,
        c.Nombre AS Categoria
    FROM dbo.Productos p
    LEFT JOIN dbo.Categorias c 
        ON p.CategoriaID = c.CategoriaID
    WHERE @CategoriaID IS NULL 
          OR p.CategoriaID = @CategoriaID
    ORDER BY p.Nombre;
END
GO

-- Ejecutar procedure
EXEC dbo.sp_ObtenerProductos;
EXEC dbo.sp_ObtenerProductos @CategoriaID = 1;

Triggers

SQL - Trigger AFTER INSERT
-- Trigger que se ejecuta después de INSERT
CREATE TRIGGER dbo.trg_Pedidos_Insert
ON dbo.Pedidos
AFTER INSERT
AS
BEGIN
    SET NOCOUNT ON;
    
    -- Actualizar el total del pedido
    UPDATE p
    SET Total = (
        SELECT SUM(dp.Subtotal)
        FROM dbo.DetallePedidos dp
        WHERE dp.PedidoID = inserted.PedidoID
    )
    FROM dbo.Pedidos p
    INNER JOIN inserted 
        ON p.PedidoID = inserted.PedidoID;
END
GO

Transacciones

SQL - Transacción con TRY/CATCH
BEGIN TRANSACTION;

BEGIN TRY
    -- Insertar pedido
    INSERT INTO dbo.Pedidos (ClienteID, Total, Estado)
    VALUES (1, 0, 'Pendiente');
    
    DECLARE @NuevoPedidoID INT = SCOPE_IDENTITY();
    
    -- Insertar detalle
    INSERT INTO dbo.DetallePedidos 
        (PedidoID, ProductoID, Cantidad, PrecioUnitario)
    VALUES (@NuevoPedidoID, 1, 2, 899.99);
    
    -- Actualizar stock
    UPDATE dbo.Productos
    SET Stock = Stock - 2
    WHERE ProductoID = 1;
    
    COMMIT TRANSACTION;
    PRINT 'Transacción completada exitosamente.';
END TRY
BEGIN CATCH
    ROLLBACK TRANSACTION;
    PRINT 'Error: ' + ERROR_MESSAGE();
END CATCH