A Linguagem SQL (Structured Query Language) e o Microsoft SQL Server são temas recorrentes e de extrema importância nas provas.
Neste guia completo e didático, elaborado com as mais recentes informações e focado nas exigências dos certames, vamos desmistificar o SQL e o SQL Server, abordando desde os conceitos mais básicos até as técnicas avançadas, como otimização de performance e segurança. Nosso objetivo é que você não apenas compreenda a matéria, mas se torne competitivo para conquistar sua vaga, priorizando conteúdos frequentemente cobrados e fornecendo explicações detalhadas para as dúvidas mais comuns. Prepare-se para dominar a Linguagem SQL!
A primeira pergunta que vem à mente é: O que é a Linguagem SQL?. A SQL (Linguagem de Consulta Estruturada) é uma linguagem computacional crucial utilizada para acessar e manipular bancos de dados relacionais. Ela se estabeleceu como uma das principais razões para o sucesso dos bancos de dados relacionais e é reconhecida internacionalmente, tendo sido adotada como padrão pela ANSI (American National Standards Institute) em 1986 e pela Organização Internacional de Padronização (ISO) em 1987.
A principal característica do SQL é ser uma linguagem declarativa. Isso significa que, ao utilizá-la, você descreve o que você quer que o banco de dados faça, e não como ele deve fazer. Os detalhes de implementação e a forma como os comandos são executados são deixados para o próprio Sistema de Gerenciamento de Banco de Dados (SGBD).
O SQL é fundamentalmente baseado no modelo relacional e utiliza a álgebra relacional como sua base teórica para implementar operações dentro dos SGBDs. Para quem busca aprovação em concursos, a disciplina de Tecnologia da Informação tem se mostrado cada vez mais "pesada", e o SQL é um tópico que certamente estará em sua prova.
É crucial entender que SQL é a linguagem de programação, enquanto MySQL e Microsoft SQL Server são sistemas de gerenciamento de banco de dados relacionais (SGBDs). Pense assim:
SQL: É o "idioma" que você usa para conversar com o banco de dados.
MySQL: É um dos "falantes" desse idioma, sendo um SGBD relacional de código aberto.
Microsoft SQL Server: É outro "falante" do idioma SQL, sendo um SGBD relacional proprietário desenvolvido pela Microsoft.
Embora todos usem SQL, eles podem ter pequenas variações de sintaxe e recursos específicos. Neste material, focaremos nos conceitos gerais de SQL e nas particularidades do Microsoft SQL Server sempre que relevantes.
Antes de mergulhar nos comandos, é essencial ter uma base sólida nos conceitos de bancos de dados. Um Sistema de Gerenciamento de Banco de Dados (SGBD) é um conjunto de softwares responsável por gerenciar, armazenar, recuperar e manipular dados em um banco de dados, garantindo segurança, integridade e eficiência no acesso à informação.
Dentro de um banco de dados relacional, os dados são organizados em tabelas. Cada tabela é composta por:
Registros (linhas): Representam uma ocorrência única de uma entidade.
Colunas (atributos/campos): Representam as características ou propriedades de uma entidade.
Chaves Primárias (PRIMARY KEY): É um campo ou conjunto de campos que identifica unicamente cada registro em uma tabela, não podendo conter valores duplicados ou nulos.
Chaves Estrangeiras (FOREIGN KEY): É um campo ou conjunto de campos em uma tabela que referencia a chave primária de outra tabela, estabelecendo um relacionamento entre elas e garantindo a integridade referencial.
O Microsoft SQL Server, em particular, é um Sistema de Gerenciamento de Banco de Dados Relacional (RDBMS) amplamente utilizado para armazenar, gerenciar e processar dados. Ele opera sob uma arquitetura cliente-servidor, onde o servidor (SQL Server) processa requisições de clientes (aplicações, serviços ou ferramentas). Múltiplas instâncias do SQL Server podem rodar em um único servidor, oferecendo flexibilidade de configuração e isolamento entre diferentes aplicações ou cargas de trabalho.
A Linguagem SQL é dividida em subconjuntos de acordo com as operações que se deseja realizar. Entender essa divisão é um ponto muito cobrado em concursos.
O DDL contém comandos para criar, modificar e excluir objetos do banco de dados. Ele é usado para definir estas tabelas e outros elementos estruturais.
CREATE: Usado para especificar novas relações (tabelas), dando-lhes um nome e especificando seus atributos e restrições iniciais. Também é usado para criar índices, visões, entre outros objetos.
ALTER: Utilizado para modificar a estrutura de um objeto existente, como adicionar, modificar ou excluir colunas de uma tabela.
DROP: Remove objetos do banco de dados, como tabelas, visões ou índices, excluindo tanto o objeto quanto os dados armazenados.
TRUNCATE: (Embora não explicitamente detalhado como DDL puro no primeiro artigo, é comumente agrupado com DDL em alguns contextos por lidar com a estrutura lógica de dados, esvaziando tabelas) Remove todas as linhas de uma tabela de forma rápida, mas sem registrar as operações individualmente, tornando-a não-reversível por ROLLBACK.
O DML fornece instruções para trabalhar com os dados armazenados, permitindo consultar, incluir, excluir e alterar registros de tabelas. É o tema central deste artigo.
SELECT: A principal função do DML, utilizada para acessar as informações solicitadas pelo usuário em um banco de dados.
INSERT: Usado para inserir novos registros (linhas) em uma tabela.
UPDATE: Utilizado para atualizar registros existentes em uma tabela, modificando valores de colunas.
DELETE: Usado para deletar linhas de uma tabela.
O DCL contém comandos relacionados com as permissões de controle de acesso, garantindo privilégios aos usuários para acessar os objetos do banco de dados através de mecanismos de autorização e licenças.
GRANT: Concede privilégios de acesso a usuários ou papéis sobre determinados objetos do banco de dados.
REVOKE: Remove privilégios de acesso concedidos anteriormente.
Este grupo é responsável pelo tratamento das transações realizadas em um banco de dados, garantindo as propriedades ACID (Atomicidade, Consistência, Isolamento e Durabilidade).
COMMIT: Termina a transação SQL corrente com sucesso, tornando as modificações permanentes no banco de dados.
ROLLBACK: Termina a transação corrente desfazendo todas as modificações realizadas desde o início da transação ou até o último savepoint.
SAVEPOINT: Estabelece um ponto intermediário na transação para o qual um ROLLBACK pode retornar em caso de falha, sem desfazer toda a transação.
START (BEGIN) TRANSACTION: Inicializa uma transação SQL e define suas características.
O comando SELECT é o mais utilizado e mais complexo do DML, e sua compreensão aprofundada é essencial para qualquer concurso. Todas as demais funções estudadas a seguir são utilizadas juntamente com o SELECT para aprimorar a consulta de dados.
A sintaxe mais básica e as cláusulas exigidas são SELECT e FROM:
SELECT coluna1, coluna2, …
FROM nome_tabela
* (Asterisco): Utilizado para retornar todas as colunas de uma tabela, sem precisar especificá-las.
DISTINCT: Remove valores duplicados do resultado da consulta, retornando apenas um registro de cada.
Exemplo: SELECT DISTINCT matrícula, nome_aluno FROM Aluno.
A cláusula WHERE (ONDE, em inglês) é usada para procurar por informações específicas, aplicando condições para filtrar os registros a serem retornados. Se omitida, todas as linhas são retornadas.
Usados para comparar valores:
= (Igual a)
<> ou != (Diferente de)
> (Maior que)
< (Menor que)
>= (Maior ou igual a)
<= (Menor ou igual a)
Exemplo: SELECT * FROM Aluno WHERE disciplina = 'Português'.
Permitem combinar múltiplas condições na cláusula WHERE.
AND: Retorna valores em que todas as condições dispostas são verdadeiras, simultaneamente.
Exemplo: SELECT * FROM Aluno WHERE nome_aluno='Caio' AND disciplina='Português'.
OR: Retorna valores em que pelo menos uma das condições é verdadeira.
Exemplo: SELECT * FROM Aluno WHERE nome_aluno='Caio' OR disciplina='Português'.
NOT: Utilizado para registros que não satisfazem uma determinada condição. Pode ser usado com outros operadores de comparação ou com IN/EXISTS.
Exemplo: SELECT * FROM Aluno WHERE NOT nota=8.
BETWEEN ... AND: Intervalos de ValoresUsado para procurar dados que estão dentro de um determinado intervalo de valores, incluindo os valores de limite.
Exemplo: SELECT * FROM Aluno WHERE nota BETWEEN 2 AND 6.
LIKE: Padrões de Escrita (Atenção aos Curingas!)Operador usado para encontrar registros específicos dentro de um padrão de escrita. Utiliza caracteres curinga:
% (Porcentagem): Representa qualquer sequência de zero ou mais caracteres.
Exemplo: 'C%' (começa com C), '%io' (termina com io), '%portu%' (contém portu).
_ (Underline): Representa um único caractere.
Exemplo: 'C___' (começa com C e tem exatamente 4 caracteres).
Exemplo: SELECT * FROM Aluno WHERE nome_aluno LIKE 'C%' (nomes que começam com C).
Exemplo: SELECT * FROM Aluno WHERE nome_aluno LIKE 'C___' (nomes que começam com C e têm 4 caracteres).
IN: Procurando Valores Específicos em uma ListaEsta condição é utilizada para procurar valores específicos dentro de uma coluna, que estejam contidos em uma lista de valores fornecida.
Exemplo: SELECT DISTINCT matrícula, nome_aluno FROM Aluno WHERE matrícula IN (111,222,444).
ORDER BYA cláusula ORDER BY é usada para ordenar o resultado da consulta por um ou mais atributos (colunas).
ASC (Ascendente): Ordenação padrão, do menor para o maior. Pode ser omitido.
DESC (Descendente): Ordenação do maior para o menor.
Exemplo: SELECT nome, data_da_compra FROM dvd ORDER BY data_da_compra DESC.
GROUP BY e HAVING (Essencial para Análise de Dados)As funções agregadas operam sobre conjuntos de valores de uma coluna e retornam um único valor para cada conjunto.
COUNT(): Conta o número de valores (não nulos, a menos que seja COUNT(*)).
SUM(): Soma todos os números em uma coluna.
MAX(): Retorna o maior valor em uma coluna.
MIN(): Retorna o menor valor em uma coluna.
AVG(): Retorna a média dos valores em uma coluna.
Quando se utilizam funções agregadas, geralmente é preciso agrupar os dados:
GROUP BY: Agrupa linhas que têm os mesmos valores em colunas especificadas, permitindo que funções agregadas operem sobre cada grupo.
Os atributos na cláusula SELECT que não são funções agregadas devem constar no GROUP BY.
HAVING: Utilizado para filtrar grupos de resultados após a aplicação das funções agregadas. A condição HAVING é aplicada depois do GROUP BY, enquanto WHERE é aplicada antes.
Exemplo: SELECT nome_agencia, AVG(saldo) FROM conta GROUP BY nome_agencia HAVING AVG(saldo) > 1200.
As operações de JOIN tomam duas relações (tabelas) e retornam uma nova relação, combinando os dados com base em uma condição. É uma habilidade indispensável.
INNER JOIN: Retorna apenas as linhas que possuem correspondência em ambas as tabelas, com base na condição de junção.
LEFT (OUTER) JOIN: Retorna todas as linhas da tabela da esquerda e as linhas correspondentes da tabela da direita. Se não houver correspondência na tabela da direita, os valores das colunas da direita serão NULL.
RIGHT (OUTER) JOIN: Retorna todas as linhas da tabela da direita e as linhas correspondentes da tabela da esquerda. Se não houver correspondência na tabela da esquerda, os valores das colunas da esquerda serão NULL.
FULL (OUTER) JOIN: Retorna todas as linhas de ambas as tabelas. Se não houver correspondência, os valores das colunas da outra tabela serão NULL.
CROSS JOIN: Produz o produto cartesiano de duas tabelas, combinando cada linha da primeira tabela com cada linha da segunda.
Condições de Junção:
ON <predicado>: Especifica a condição de junção explicitamente.
USING (coluna1, ...): Utiliza atributos com os mesmos nomes em ambas as tabelas para a junção.
NATURAL JOIN: O SGBD automaticamente une as tabelas com base em todas as colunas que possuem os mesmos nomes e tipos de dados em ambas as tabelas.
Subconsultas são consultas dentro de outras consultas, úteis para resolver problemas mais complexos. Elas podem ser encontradas nas cláusulas SELECT, WHERE e FROM.
IN / NOT IN: Testa se um valor existe ou não em um conjunto de resultados de uma subconsulta.
EXISTS / NOT EXISTS: Retorna TRUE se a subconsulta retornar alguma tupla (não vazia) ou FALSE se for vazia.
ALL, ANY, SOME: Usadas com operadores de comparação para comparar o valor da consulta externa com todos (ALL) ou algum (ANY/SOME) dos valores da subconsulta interna.
Estas operações combinam os resultados de duas ou mais consultas SELECT.
UNION: Combina os resultados de duas ou mais consultas SELECT, eliminando linhas duplicadas por padrão. As colunas das consultas devem ter domínios compatíveis.
UNION ALL: Retorna todas as linhas, incluindo duplicatas.
INTERSECT: Retorna apenas as linhas que aparecem nos resultados de ambas as consultas.
EXCEPT (ou MINUS em alguns SGBDs): Retorna as linhas da primeira consulta que não estão presentes na segunda consulta.
Vamos agora explorar os comandos DDL para construir e modificar a estrutura do seu banco de dados, com foco nas restrições de integridade e tipos de dados.
CREATE TABLE: Definindo a EstruturaO comando CREATE TABLE é usado para criar uma nova tabela, definindo suas colunas, seus tipos de dados e as restrições de integridade.
Sintaxe:
CREATE TABLE NomeTabela (
NomeColuna1 TipoDado [Restrição1] [Restrição2],
NomeColuna2 TipoDado [Restrição1],
…
[CONSTRAINT NomeRestricao PRIMARY KEY (ColunaFK1, ColunaFK2, …)],
[CONSTRAINT NomeRestricao FOREIGN KEY (ColunaFK) REFERENCES TabelaReferenciada(ColunaPK) ON DELETE Acao ON UPDATE Acao]
);
A escolha do tipo de dado correto é fundamental para o armazenamento eficiente e correto da informação. O SQL Standard define diversos tipos, e os SGBDs comerciais como o SQL Server implementam variações.
Cadeias de Caracteres (Strings):
CHAR(n) ou CHARACTER(n): Tamanho fixo. Se o valor for menor que n, é preenchido com espaços.
VARCHAR(n) ou CHARACTER VARYING(n): Tamanho variável. Armazena exatamente o número de caracteres inseridos, até um máximo de n.
CHARACTER LARGE OBJECT (CLOB) / VARCHAR(MAX) no SQL Server: Para armazenar grandes cadeias de caracteres.
NATIONAL CHARACTER, NVARCHAR, NCHAR, NTEXT (SQL Server): Suportam conjuntos de caracteres nacionais (Unicode).
Binários (Binary Strings):
BINARY, BINARY VARYING, BINARY LARGE OBJECT (BLOB): Armazenam dados não tradicionais como imagens, áudios, vídeos, executáveis.
Numéricos:
Números Exatos: Inteiros ou decimais, com precisão (total de dígitos) e escala (casas decimais).
INT / INTEGER (4 bytes no SQL Server), SMALLINT (2 bytes), TINYINT (1 byte), BIGINT (8 bytes).
NUMERIC(p,s) / DECIMAL(p,s): Números com precisão p e escala s.
MONEY, SMALLMONEY (SQL Server): Tipos para valores monetários.
Números Aproximados (Ponto Flutuante): Para números que não podem ser representados com precisão absoluta.
FLOAT, REAL, DOUBLE PRECISION.
Data e Hora (Datetime e Interval):
DATE: Armazena ano, mês e dia.
TIME: Armazena hora, minuto e segundo.
DATETIME: Combina data e hora.
TIMESTAMP: Engloba data e hora, mais fração decimal de segundos e opcionalmente fuso horário.
INTERVAL: Para calcular o intervalo entre dois objetos de tempo.
BOOLEAN: Valores TRUE, FALSE ou UNKNOWN.
XML: Para dados formatados em XML.
Tipos ROW, Collections (ARRAY, MULTISET) e UDT (User Defined Types): Tipos mais avançados que expandem o SQL além do modelo relacional puro, permitindo campos com estruturas mais complexas ou definidos pelo usuário.
As restrições de integridade são regras que garantem a validade e consistência dos dados no banco.
NOT NULL: Especifica que uma coluna não pode receber valores nulos.
UNIQUE: Garante que todos os valores em uma coluna sejam únicos (não duplicados), embora possa aceitar um valor NULL.
PRIMARY KEY: Combinação de NOT NULL e UNIQUE, identificando unicamente cada registro.
FOREIGN KEY: Garante a integridade referencial entre tabelas.
Ações Referenciais (ON DELETE, ON UPDATE): Definem o que acontece com os registros da tabela "filha" quando há uma exclusão ou atualização na tabela "pai".
CASCADE: A exclusão/atualização na tabela pai se propaga para a tabela filha.
SET NULL: Define os valores da chave estrangeira na tabela filha como NULL.
SET DEFAULT: Define os valores da chave estrangeira na tabela filha para o valor padrão.
RESTRICT: Impede a exclusão/atualização na tabela pai se houver registros relacionados na tabela filha.
NO ACTION: Comportamento semelhante ao RESTRICT, mas a verificação é adiada para o final da transação.
DEFAULT: Atribui um valor padrão a uma coluna se nenhum valor for explicitamente fornecido durante a inserção.
CHECK: Permite definir uma condição lógica que os valores de uma coluna devem satisfazer. É a restrição mais flexível.
AUTO_INCREMENT (ou IDENTITY no SQL Server): Gera automaticamente um número sequencial para a coluna.
CREATE VIEW: Tabelas Virtuais para Segurança e SimplificaçãoUma VIEW é uma tabela virtual baseada no resultado de uma consulta SELECT, armazenada no banco de dados com um nome associado.
Funções:
Facilitar a visualização de dados dispersos em diversas tabelas.
Segurança: Restringir o acesso a campos e colunas específicas, mostrando apenas parte dos dados para determinados usuários.
Sumarizar dados de diferentes tabelas.
Uma view existe apenas durante o período em que está sendo utilizada.
Restrições: Não é permitido alterar dados em views que contêm valores agregados, GROUP BY, DISTINCT ou HAVING.
WITH CHECK OPTION: Garante que as modificações na view estejam de acordo com a condição WHERE da sua definição.
DROP VIEW nome_da_visao: Remove uma view.
CREATE INDEX: Acelerando Suas ConsultasÍndices são estruturas opcionais associadas às tabelas que podem melhorar significativamente o desempenho na execução de comandos SELECT. São como o índice de um livro, permitindo acesso mais rápido aos dados.
Vantagem: Reduzem operações de I/O em disco, acelerando consultas que usam as colunas indexadas na condição de busca.
Desvantagem: Podem degradar o desempenho dos comandos UPDATE, INSERT e DELETE, pois o arquivo de índices precisa ser atualizado.
Sintaxe Básica: CREATE INDEX nome_indice ON nome_tabela (coluna);.
Tipos de Índices (SQL Server):
Clusterizados: Determinam a ordem física dos dados nas linhas da tabela, agrupando-os. Uma tabela só pode ter um índice clusterizado.
Não Clusterizados: Ordenam apenas os índices, deixando os dados da tabela em qualquer posição. Uma tabela pode ter múltiplos índices não clusterizados.
DROP INDEX nome_indice;: Remove um índice.
A segurança em bancos de dados é um tema vital e muito relevante para concursos, especialmente em cargos de TI. As declarações DCL protegem o banco de dados contra acessos não autorizados e interações prejudiciais entre usuários.
O SQL fornece acesso controlado a nove funções de gerenciamento de banco de dados:
INSERT, SELECT, UPDATE, DELETE: Relacionados à manipulação de dados.
REFERENCES: Autorização para usar integridade referencial em uma tabela que depende de outra.
USAGE: Diz respeito a domínios, conjuntos de caracteres, collations e translations.
UNDER: Usado com tipos definidos pelo usuário.
TRIGGER: Autoriza a execução do comando quando um evento predeterminado ocorre.
EXECUTE: Roda uma determinada rotina.
GRANTExiste uma hierarquia de privilégios, onde o DBA (Database Administrator) tem o nível mais alto e o PUBLIC (todos os usuários não privilegiados) o menor.
GRANT: Utilizado para conceder privilégios a usuários ou papéis.
Sintaxe: GRANT lista_privilegios ON objeto TO lista_usuarios;.
lista_privilegios: Pode ser uma lista separada por vírgulas ou ALL PRIVILEGES (todos os nove privilégios).
objeto: Tabela, domínio, collation, character set, translation, type, sequence, rotina específica.
lista_usuarios: Pode ser um conjunto separado por vírgulas de nomes de usuários ou PUBLIC.
WITH GRANT OPTION: Uma cláusula muito importante que permite que o usuário que recebe o privilégio possa, por sua vez, concedê-lo a outros usuários. Isso cria uma cadeia de delegação de privilégios.
REVOKEO comando REVOKE é utilizado para remover privilégios de acesso.
Sintaxe: REVOKE [GRANT OPTION FOR] lista_privilegios ON objeto FROM lista_usuarios [RESTRICT|CASCADE];.
RESTRICT: Remove os privilégios apenas do beneficiário, se ele não os tiver delegado a ninguém. Se tiver delegado, a operação falha e retorna um erro.
CASCADE: Remove os privilégios do beneficiário e de todos os usuários para quem ele delegou esses privilégios.
GRANT OPTION FOR: Revoga apenas a capacidade de conceder privilégios, mas o beneficiário mantém os privilégios para si mesmo.
Papéis (Roles) são conjuntos de zero ou mais privilégios que podem ser concedidos a várias pessoas, simplificando a administração de permissões em grandes organizações.
Exemplo: CREATE ROLE balconista;.
GRANT balconista TO Jose; (Atribui o papel 'balconista' ao usuário 'Jose').
O SQL Server oferece robustos atributos de segurança:
Controle de Acesso Baseado em Funções (RBAC).
Segurança em Nível de Linha (RLS) para mascaramento dinâmico de dados e proteção de dados confidenciais.
Não permite acesso ou edição de arquivos durante o runtime, o que é considerado uma vantagem de segurança em comparação com o MySQL, onde desenvolvedores podem manipular bancos de dados em execução.
Transações são um conjunto de instruções SQL que realizam um único trabalho. Elas são cruciais para manter a integridade e consistência dos dados, especialmente em sistemas que manipulam grandes volumes de informações. O SQL Server utiliza o conceito de transações para garantir as propriedades ACID.
As propriedades ACID garantem que as transações sejam processadas de forma confiável em um SGBD:
Atomicidade (Atomicity): Uma transação é uma unidade indivisível de trabalho. Ou todos os seus passos são executados com sucesso, ou nenhum deles é. Se um passo falhar, o banco de dados retorna ao seu estado inicial válido.
Consistência (Consistency): Uma transação leva o banco de dados de um estado válido para outro estado válido, mantendo a integridade dos dados.
Isolamento (Isolation): Transações que são executadas concorrentemente devem ser executadas de tal forma que o resultado final seja o mesmo como se elas tivessem sido executadas sequencialmente (uma após a outra). Uma transação não deve "ver" os dados de outra transação que ainda não foi commitada.
Durabilidade (Durability): Uma vez que uma transação é commitada (terminada com sucesso), suas modificações são permanentes e sobreviverão a qualquer falha do sistema.
BEGIN TRANSACTION / START TRANSACTION: Inicia uma transação.
COMMIT: Finaliza a transação com sucesso, tornando todas as alterações permanentes.
ROLLBACK: Desfaz todas as alterações realizadas desde o início da transação ou até o último SAVEPOINT.
SAVEPOINT: Cria um ponto dentro de uma transação ao qual se pode retornar com um ROLLBACK sem desfazer a transação inteira.
Os níveis de isolamento controlam o grau em que as transações simultâneas são isoladas umas das outras.
READ UNCOMMITTED: Permite ler dados que ainda não foram "commitados" por outra transação (leitura suja ou dirty read). É o nível de isolamento mais baixo e pode levar a inconsistências.
READ COMMITTED: Uma transação só pode ler dados que foram "commitados" por outras transações. Evita dirty reads, mas pode sofrer de leitura não-repetível (non-repeatable read) – onde uma transação lê o mesmo dado duas vezes e obtém valores diferentes porque outra transação o modificou e commitou entre as leituras.
REPEATABLE READ: Garante que, se uma transação lê um dado, nenhuma outra transação pode modificá-lo até que a primeira transação termine. Evita dirty reads e non-repeatable reads, mas pode sofrer de registros fantasmas (phantom reads) – onde uma transação executa uma consulta que retorna um conjunto de linhas, e ao executar a mesma consulta novamente, vê novas linhas inseridas por outra transação.
SERIALIZABLE: O nível de isolamento mais alto. Garante que as transações executadas concorrentemente produzam o mesmo resultado como se tivessem sido executadas em série, evitando dirty reads, non-repeatable reads e phantom reads.
A otimização de performance, também conhecida como Tuning, visa melhorar o desempenho de um banco de dados, seja por hardware ou software. É um tópico avançado e cada vez mais cobrado em concursos de TI.
Além de serem objetos DDL, os índices são uma das técnicas mais utilizadas para otimização de performance. Eles facilitam a busca de dados, atuando como ponteiros.
Índices Clusterizados: Organizam e armazenam as linhas de dados da tabela ou da exibição por sua chave, em ordem física. Uma tabela só pode ter um índice clusterizado.
Índices Não Clusterizados: Têm uma estrutura separada dos dados. Eles contêm os valores da chave do índice e ponteiros para as linhas de dados na tabela.
A forma como uma consulta SQL é construída pode degradar o desempenho do banco de dados. A análise de consultas SQL, ou plano de execução, permite identificar gargalos.
Administradores e Desenvolvedores podem otimizar o desempenho de consultas SQL através de mudanças de posicionamento de tabelas, troca de operadores, e uso de "hints" (artifícios para forçar a execução de consultas de maneiras específicas).
Gerenciar as conexões é vital. A recomendação é manter as conexões abertas apenas enquanto a operação no banco de dados estiver sendo realizada, fechando-as em seguida para evitar sobrecarga.
Configurar parâmetros específicos do SGBD pode otimizar a performance. Isso inclui aumentar parâmetros relacionados à memória compartilhada, tamanho de memória "cache" e número de conexões concorrentes. Essa é uma responsabilidade do Administrador de Banco de Dados.
As extensões procedurais permitem incorporar lógica de programação diretamente no banco de dados, seguindo o padrão SQL/PSM (Persistent Stored Module).
São rotinas SQL que residem no servidor de banco de dados e podem ser invocadas explicitamente. No SQL Server, são blocos de código T-SQL armazenados no banco de dados para execução posterior.
Benefícios:
Redução do tráfego de rede: Uma única chamada executa um bloco de código complexo.
Melhora de desempenho: Podem ser pré-compiladas, reutilizando planos de execução.
Segurança: A lógica é encapsulada no servidor, e as chamadas podem ser controladas via permissões.
Invocação: Geralmente com a instrução CALL.
Semelhantes aos procedimentos armazenados, mas são chamadas como funções e podem substituir argumentos em instruções SQL.
SQL Server: UDFs são úteis para cálculos repetitivos, mas a regra geral é que não podem modificar dados. Elas retornam um valor e são projetadas para serem usadas dentro de uma consulta.
São objetos de esquema que executam ações automaticamente em resposta a modificações de dados (INSERT, DELETE, UPDATE) em uma tabela ou visão. A ação do trigger é implicitamente disparada.
Momentos de Execução:
BEFORE: O gatilho é executado antes da modificação dos dados.
AFTER: O gatilho é executado depois da modificação dos dados.
INSTEAD OF: O gatilho é executado em vez da modificação de dados original, geralmente usado em views.
Granularidade:
FOR EACH ROW: O gatilho é invocado para cada linha afetada pela instrução de modificação.
FOR EACH STATEMENT: O gatilho é invocado apenas uma vez para a instrução de modificação, independentemente de quantas linhas foram afetadas (padrão se não especificado).
Cláusula WHEN: Opcional, define um critério de pesquisa que limita o escopo do gatilho, funcionando como uma condição para sua invocação.
Para dominar SQL e SQL Server e se destacar nos concursos, siga estas dicas práticas:
Entenda o Básico Firmemente: Garanta que você compreende tabelas, registros, colunas, chaves primárias e estrangeiras.
Pratique Consultas Gradualmente: Comece com SELECT simples e avance para WHERE, JOINs, subconsultas e funções agregadas. A prática constante é fundamental.
Domine a Sintaxe e os Comandos DML: SELECT, INSERT, UPDATE, DELETE são os mais usados e cobrados.
Estude Tipos de Dados e Restrições: Conheça os tipos de dados (INT, VARCHAR, DATE, etc.) e as restrições (PRIMARY KEY, FOREIGN KEY, NOT NULL, UNIQUE, CHECK).
Aprenda JOINs e Relacionamentos: Essencial para consultas que envolvem múltiplas tabelas. Entenda INNER, LEFT, RIGHT e FULL JOIN.
Funções Agregadas e GROUP BY/HAVING: Imprescindíveis para resumir e analisar dados.
Conheça a Normalização: Para questões de design de banco de dados e evitar redundância/inconsistência.
Subconsultas: Aprenda a escrevê-las e interpretá-las, pois aparecem nas questões mais complexas.
Pratique Criação e Manipulação de Tabelas: Comandos CREATE TABLE, ALTER TABLE, DROP TABLE.
Use Simuladores e Ferramentas: Pratique em ambientes reais como MySQL, PostgreSQL ou SQL Server, ou use plataformas online como SQL Fiddle.
Resolva Questões de Provas Anteriores: Essa é uma das estratégias mais eficazes para entender o padrão das bancas (FGV, Cebraspe/Cespe, FCC, etc.) e identificar tópicos recorrentes. Utilize sistemas de questões como os do Estratégia Concursos e Gran Cursos Online.
Revise Constantemente: A repetição é uma técnica poderosa para fixar o conhecimento. Crie seus próprios resumos.
Dominar a Linguagem SQL e os conceitos relacionados ao Microsoft SQL Server não é apenas uma exigência, mas um diferencial competitivo nos concursos públicos de TI. Este guia ofereceu uma visão completa e didática dos principais tópicos, desde as definições fundamentais até as complexidades de transações, segurança e otimização de performance.
Lembre-se: a prática e a persistência são seus maiores aliados. Utilize os materiais de estudo completos, videoaulas e, principalmente, o sistema de questões de plataformas renomadas como Estratégia Concursos e Gran Cursos Online para consolidar seu aprendizado e testar seus conhecimentos.
Invista em sua preparação! Com dedicação e o material certo, você estará apto a enfrentar com confiança as questões de SQL e SQL Server e conquistar sua tão sonhada aprovação. Bons estudos e até a próxima!