├── balta.zip ├── select.sql ├── drop_database.sql ├── spListCourse.sql ├── spDeleteStudent.sql ├── vwCareers.sql ├── inserts.sql ├── insert_into_studen_courses.sql ├── vwCourses.sql ├── insere_alunos_cursos.sql ├── create_database_cursos.sql ├── spStudentProgress.sql ├── README.md ├── 001.sql └── balta-database.sql /balta.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/balta-io/2805/HEAD/balta.zip -------------------------------------------------------------------------------- /select.sql: -------------------------------------------------------------------------------- 1 | SELECT TOP 100 2 | [Id], [Nome], [CategoriaId] 3 | FROM 4 | [Curso] 5 | -- WHERE 6 | -- [CategoriaId] = 1 7 | ORDER BY 8 | [Nome] DESC 9 | -------------------------------------------------------------------------------- /drop_database.sql: -------------------------------------------------------------------------------- 1 | USE [master]; 2 | 3 | DECLARE @kill varchar(8000) = ''; 4 | SELECT @kill = @kill + 'kill ' + CONVERT(varchar(5), session_id) + ';' 5 | FROM sys.dm_exec_sessions 6 | WHERE database_id = db_id('Curso') 7 | 8 | EXEC(@kill); 9 | 10 | DROP DATABASE [Curso] -------------------------------------------------------------------------------- /spListCourse.sql: -------------------------------------------------------------------------------- 1 | CREATE OR ALTER PROCEDURE [spListCourse] 2 | @Category NVARCHAR(60), 3 | @Par2 NVARCHAR(60) 4 | AS 5 | DECLARE @CategoryId INT 6 | SET @CategoryId = (SELECT TOP 1 [Id] FROM [Categoria] WHERE [Nome] = @Category) 7 | 8 | SELECT * FROM [Curso] WHERE [CategoriaId] = @CategoryId 9 | -------------------------------------------------------------------------------- /spDeleteStudent.sql: -------------------------------------------------------------------------------- 1 | CREATE OR ALTER PROCEDURE spDeleteStudent ( 2 | @StudentId UNIQUEIDENTIFIER 3 | ) 4 | AS 5 | BEGIN TRANSACTION 6 | DELETE FROM 7 | [StudentCourse] 8 | WHERE 9 | [StudentId] = @StudentId 10 | 11 | DELETE FROM 12 | [Student] 13 | WHERE 14 | [Id] = @StudentId 15 | COMMIT -------------------------------------------------------------------------------- /vwCareers.sql: -------------------------------------------------------------------------------- 1 | CREATE OR ALTER VIEW vwCareers AS 2 | SELECT 3 | [Career].[Id], 4 | [Career].[Title], 5 | [Career].[Url], 6 | COUNT([Id]) AS [Courses] 7 | FROM 8 | [Career] 9 | INNER JOIN [CareerItem] ON [CareerItem].[CareerId] = [Career].[Id] 10 | GROUP BY 11 | [Career].[Id], 12 | [Career].[Title], 13 | [Career].[Url] -------------------------------------------------------------------------------- /inserts.sql: -------------------------------------------------------------------------------- 1 | INSERT INTO [Categoria]([Nome]) VALUES('Backend') 2 | INSERT INTO [Categoria]([Nome]) VALUES('Frontend') 3 | INSERT INTO [Categoria]([Nome]) VALUES('Mobile') 4 | 5 | INSERT INTO [Curso]([Nome], [CategoriaId]) VALUES('Fundamentos de C#', 1) 6 | INSERT INTO [Curso]([Nome], [CategoriaId]) VALUES('Fundamentos OOP', 1) 7 | INSERT INTO [Curso]([Nome], [CategoriaId]) VALUES('Angular', 2) 8 | INSERT INTO [Curso]([Nome], [CategoriaId]) VALUES('Flutter', 3) -------------------------------------------------------------------------------- /insert_into_studen_courses.sql: -------------------------------------------------------------------------------- 1 | INSERT INTO 2 | [Student] 3 | VALUES ( 4 | 'c55390d4-71dd-4f3c-b978-d1582f51a327', 5 | 'André Baltieri', 6 | 'hello@balta.io', 7 | '12345678901', 8 | '11999999999', 9 | NULL, 10 | GETDATE() 11 | ) 12 | 13 | INSERT INTO 14 | [StudentCourse] 15 | VALUES ( 16 | '5d8cf396-e717-9a02-2443-021b00000000', 17 | 'c55390d4-71dd-4f3c-b978-d1582f51a327', 18 | 50, 19 | 0, 20 | '2021-01-15 12:35:54', 21 | GETDATE() 22 | ) -------------------------------------------------------------------------------- /vwCourses.sql: -------------------------------------------------------------------------------- 1 | CREATE OR ALTER VIEW vwCourses AS 2 | SELECT 3 | [Course].[Id], 4 | [Course].[Tag], 5 | [Course].[Title], 6 | [Course].[Url], 7 | [Course].[Summary], 8 | [Course].[CreateDate], 9 | [Category].[Title] AS [Category], 10 | [Author].[Name] AS [Author] 11 | FROM 12 | [Course] 13 | INNER JOIN [Category] ON [Course].[CategoryId] = [Category].[Id] 14 | INNER JOIN [Author] ON [Course].[AuthorId] = [Author].[Id] 15 | WHERE 16 | [Active] = 1 -------------------------------------------------------------------------------- /insere_alunos_cursos.sql: -------------------------------------------------------------------------------- 1 | SELECT * FROM [Course] 2 | SELECT * FROM [Student] 3 | SELECT * FROM [StudentCourse] 4 | 5 | INSERT INTO 6 | [Student] 7 | VALUES ( 8 | '79b82071-80a8-4e78-a79c-92c8cd1fd052', 9 | 'André Baltieri', 10 | 'hello@balta.io', 11 | '12345678901', 12 | '12345678', 13 | NULL, 14 | GETDATE() 15 | ) 16 | 17 | INSERT INTO 18 | [StudentCourse] 19 | VALUES ( 20 | '5f5a33f8-4ff3-7e10-cc6e-3fa000000000', 21 | '79b82071-80a8-4e78-a79c-92c8cd1fd052', 22 | 50, 23 | 0, 24 | '2020-01-13 12:35:54', 25 | GETDATE() 26 | ) -------------------------------------------------------------------------------- /create_database_cursos.sql: -------------------------------------------------------------------------------- 1 | CREATE DATABASE [Cursos] 2 | GO 3 | 4 | USE [Cursos] 5 | 6 | CREATE TABLE [Categoria] ( 7 | [Id] INT NOT NULL IDENTITY(1, 1), 8 | [Nome] NVARCHAR(80) NOT NULL, 9 | 10 | CONSTRAINT [PK_Categoria] PRIMARY KEY([Id]) 11 | ) 12 | GO 13 | 14 | CREATE TABLE [Curso] ( 15 | [Id] INT NOT NULL IDENTITY(1, 1), 16 | [Nome] NVARCHAR(80) NOT NULL, 17 | [CategoriaId] INT NOT NULL, 18 | 19 | CONSTRAINT [PK_Curso] PRIMARY KEY([Id]), 20 | CONSTRAINT [FK_Curso_Categoria] FOREIGN KEY([CategoriaId]) 21 | REFERENCES [Categoria]([Id]) 22 | ) 23 | GO -------------------------------------------------------------------------------- /spStudentProgress.sql: -------------------------------------------------------------------------------- 1 | CREATE OR ALTER PROCEDURE spStudentProgress ( 2 | @StudentId UNIQUEIDENTIFIER 3 | ) 4 | AS 5 | SELECT 6 | [Student].[Name] AS [Student], 7 | [Course].[Title] AS [Course], 8 | [StudentCourse].[Progress], 9 | [StudentCourse].[LastUpdateDate] 10 | FROM 11 | [StudentCourse] 12 | INNER JOIN [Student] ON [StudentCourse].[StudentId] = [Student].[Id] 13 | INNER JOIN [Course] ON [StudentCourse].[CourseId] = [Course].[Id] 14 | WHERE 15 | [StudentCourse].[StudentId] = @StudentId 16 | AND [StudentCourse].[Progress] < 100 17 | AND [StudentCourse].[Progress] > 0 18 | ORDER BY 19 | [StudentCourse].[LastUpdateDate] DESC -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Curso 2805 - Fundamentos do SQL Server 2 | 3 | ## Instalação 4 | Para realizar este curso você precisará do Docker e SQL Server instalados na sua máquina. 5 | 6 | * [Tutorial - Instalação do Docker](https://balta.io/blog/docker-instalacao-configuracao-e-primeiros-passos?utm_source=github&utm_medium=2805-repo&utm_campaign=readme). 7 | * [Tutorial - Instalação do SQL Server no Docker](https://balta.io/blog/sql-server-docker?utm_source=github&utm_medium=2805-repo&utm_campaign=readme) 8 | 9 | Para acessar o SQL Server instalado com mais facilidade, recomendamos o **Azure Data Studio** 10 | * [Download do Azure Data Studio](https://docs.microsoft.com/pt-br/sql/azure-data-studio/download-azure-data-studio?view=sql-server-ver15) 11 | 12 | ## Outros links & material de consulta 13 | * Tipos de dados no SQL Server ([Documentação oficial](https://docs.microsoft.com/pt-br/sql/t-sql/data-types/data-types-transact-sql?view=sql-server-ver15)) 14 | * Utilizando ```JOINS``` ([Documentação oficial](https://docs.microsoft.com/pt-br/sql/relational-databases/performance/joins?view=sql-server-ver15)) 15 | -------------------------------------------------------------------------------- /001.sql: -------------------------------------------------------------------------------- 1 | USE [Curso] 2 | 3 | DROP TABLE [Aluno] 4 | CREATE TABLE [Aluno] ( 5 | [Id] INT NOT NULL, 6 | [Nome] NVARCHAR(80) NOT NULL, 7 | [Email] NVARCHAR(180) NOT NULL, 8 | [Nascimento] DATETIME NULL, 9 | [Active] BIT NOT NULL DEFAULT(0), 10 | 11 | CONSTRAINT [PK_Aluno] PRIMARY KEY([Id]), 12 | CONSTRAINT [UQ_Aluno_Email] UNIQUE([Email]), 13 | ) 14 | GO 15 | 16 | CREATE INDEX [IX_Aluno_Email] ON [Aluno]([Email]) 17 | DROP INDEX [IX_Aluno_Email] ON [Aluno] 18 | 19 | SELECT NEWID() 20 | 21 | DROP TABLE [Curso] 22 | CREATE TABLE [Curso] ( 23 | [Id] INT NOT NULL IDENTITY(1, 1), 24 | [Nome] NVARCHAR(80) NOT NULL, 25 | [CategoriaId] INT NOT NULL, 26 | 27 | CONSTRAINT [PK_Curso] PRIMARY KEY([Id]), 28 | CONSTRAINT [FK_Curso_Categoria] FOREIGN KEY([CategoriaId]) 29 | REFERENCES [Categoria]([Id]) 30 | ) 31 | GO 32 | 33 | CREATE TABLE [Categoria] ( 34 | [Id] INT NOT NULL, 35 | [Nome] NVARCHAR(80) NOT NULL, 36 | 37 | CONSTRAINT [PK_Categoria] PRIMARY KEY([Id]) 38 | ) 39 | GO 40 | 41 | DROP TABLE [ProgressoCurso] 42 | CREATE TABLE [ProgressoCurso] ( 43 | [AlunoId] INT NOT NULL, 44 | [CursoId] INT NOT NULL, 45 | [Progresso] INT NOT NULL, 46 | [UltimaAtualizacao] DATETIME NOT NULL DEFAULT(GETDATE()), 47 | 48 | CONSTRAINT PK_ProgressoCurso PRIMARY KEY([AlunoId], [CursoId]), 49 | ) 50 | GO -------------------------------------------------------------------------------- /balta-database.sql: -------------------------------------------------------------------------------- 1 | CREATE DATABASE [balta] 2 | GO 3 | 4 | USE [balta] 5 | GO 6 | 7 | CREATE TABLE [Student] 8 | ( 9 | [Id] uniqueidentifier NOT NULL, 10 | [Name] NVARCHAR(120) NOT NULL, 11 | [Email] NVARCHAR(180) NOT NULL, 12 | [Document] NVARCHAR(20) NULL, 13 | [Phone] NVARCHAR(20) NULL, 14 | [Birthdate] DATETIME NULL, 15 | [CreateDate] DATETIME NOT NULL DEFAULT(GETDATE()), 16 | CONSTRAINT [PK_Student] PRIMARY KEY ([Id]) 17 | ); 18 | GO 19 | 20 | CREATE TABLE [Author] 21 | ( 22 | [Id] uniqueidentifier NOT NULL, 23 | [Name] NVARCHAR(80) NOT NULL, 24 | [Title] NVARCHAR(80) NOT NULL, 25 | [Image] NVARCHAR(1024) NOT NULL, 26 | [Bio] NVARCHAR(2000) NOT NULL, 27 | [Url] nvarchar(450) NULL, 28 | [Email] NVARCHAR(160) NOT NULL, 29 | [Type] TINYINT NOT NULL, -- 0 a 255 30 | CONSTRAINT [PK_Author] PRIMARY KEY ([Id]) 31 | ); 32 | GO 33 | 34 | CREATE TABLE [Career] 35 | ( 36 | [Id] uniqueidentifier NOT NULL, 37 | [Title] NVARCHAR(160) NOT NULL, 38 | [Summary] NVARCHAR(2000) NOT NULL, 39 | [Url] NVARCHAR(1024) NOT NULL, 40 | [DurationInMinutes] INT NOT NULL, 41 | [Active] BIT NOT NULL, 42 | [Featured] BIT NOT NULL, 43 | [Tags] NVARCHAR(160) NOT NULL, 44 | CONSTRAINT [PK_Career] PRIMARY KEY ([Id]) 45 | ); 46 | GO 47 | 48 | CREATE TABLE [Category] 49 | ( 50 | [Id] uniqueidentifier NOT NULL, 51 | [Title] NVARCHAR(160) NOT NULL, 52 | [Url] NVARCHAR(1024) NOT NULL, 53 | [Summary] NVARCHAR(2000) NOT NULL, 54 | [Order] int NOT NULL, 55 | [Description] TEXT NOT NULL, 56 | [Featured] BIT NOT NULL, 57 | CONSTRAINT [PK_Category] PRIMARY KEY ([Id]) 58 | ); 59 | GO 60 | 61 | CREATE TABLE [Course] 62 | ( 63 | [Id] uniqueidentifier NOT NULL, 64 | [Tag] NVARCHAR(20) NOT NULL, 65 | [Title] NVARCHAR(160) NOT NULL, 66 | [Summary] NVARCHAR(2000) NOT NULL, 67 | [Url] NVARCHAR(1024) NOT NULL, 68 | [Level] TINYINT NOT NULL, 69 | [DurationInMinutes] INT NOT NULL, 70 | [CreateDate] DATETIME NOT NULL, 71 | [LastUpdateDate] DATETIME NOT NULL, 72 | [Active] BIT NOT NULL, 73 | [Free] BIT NOT NULL, 74 | [Featured] BIT NOT NULL, 75 | [AuthorId] uniqueidentifier NOT NULL, 76 | [CategoryId] uniqueidentifier NOT NULL, 77 | [Tags] NVARCHAR(160) NOT NULL, 78 | CONSTRAINT [PK_Course] PRIMARY KEY ([Id]), 79 | CONSTRAINT [FK_Course_Author_AuthorId] FOREIGN KEY ([AuthorId]) REFERENCES [Author] ([Id]), 80 | CONSTRAINT [FK_Course_Category_CategoryId] FOREIGN KEY ([CategoryId]) REFERENCES [Category] ([Id]) 81 | ); 82 | GO 83 | 84 | CREATE TABLE [CareerItem] 85 | ( 86 | [CareerId] uniqueidentifier NOT NULL, 87 | [CourseId] uniqueidentifier NOT NULL, 88 | [Title] NVARCHAR(160) NOT NULL, 89 | [Description] TEXT NOT NULL, 90 | [Order] TINYINT NOT NULL, 91 | 92 | CONSTRAINT [PK_CareerItem] PRIMARY KEY ([CourseId], [CareerId]), 93 | CONSTRAINT [FK_CareerItem_Career_CareerId] FOREIGN KEY ([CareerId]) REFERENCES [Career] ([Id]), 94 | CONSTRAINT [FK_CareerItem_Course_CourseId] FOREIGN KEY ([CourseId]) REFERENCES [Course] ([Id]) 95 | ); 96 | GO 97 | 98 | CREATE TABLE [StudentCourse] 99 | ( 100 | [CourseId] uniqueidentifier NOT NULL, 101 | [StudentId] uniqueidentifier NOT NULL, 102 | [Progress] TINYINT NOT NULL, 103 | [Favorite] BIT NOT NULL, 104 | [StartDate] DATETIME NOT NULL, 105 | [LastUpdateDate] DATETIME NULL DEFAULT(GETDATE()), 106 | CONSTRAINT [PK_StudentCourse] PRIMARY KEY ([CourseId], [StudentId]), 107 | CONSTRAINT [FK_StudentCourse_Course_CourseId] FOREIGN KEY ([CourseId]) REFERENCES [Course] ([Id]), 108 | CONSTRAINT [FK_StudentCourse_Student_StudentId] FOREIGN KEY ([StudentId]) REFERENCES [Student] ([Id]) 109 | ); 110 | GO --------------------------------------------------------------------------------