Por se tratar de um banco de dados que armazena registros em tabelas, obviamente será possível manipular esses dados, de forma a consulta-los para identificar algo em sua existência. Para isso, comandos chamados de QUERY's são dados no SSMS para tal execução. Portanto, será descrito o processamento lógico de consulta, normalmente feitas através do comando SELECT.
A finalidade de uma instrução SELECT é consultar tabelas, aplicar alguma manipulação lógica e retornar resultados. Sendo as principais cláusulas de uma instrução SELECT as seguintes:
SELECT columns
FROM Tables
WHERE Obeção
GROUP BY Group
ORDER BY Order
OBS: É aconselhável utilizar do comando USE para definir em qual database o comando será executado.
Antes de entrar nos detalhes de cada fase da instrução SELECT, observe a ordem em que as cláusulas são processadas, pois no SQL, estão presentes diferentes regras de ordem das linguagens de programações. Embora a cláusula SELECT apareça primeiro, ela é processada logicamente por última. A ordem de processamento lógico de cada cláusula é a seguinte:
Portanto, de forma literal, o que acontece é o seguinte:
Sendo a primeira consulta que é processada logicamente, será possível especificar o nome das tabelas que serão consultadas e os operadores de tabela que operam na mesma. O comando de FROM é dado por:
FROM table
OBS: É recomendado informar o nome do SCHEMA que a tabela reside.
Para exibir as linhas de uma tabela sem nenhuma manipulção, tudo o que precisa ser feito é a junção do comando SELECT com a cláusula FROM, como o exemplo a seguir:
SELECT Nome, Empresa
FROM Emp.Funcionarios
Nesta fase, é especificado um precdicado ou filtro que irá especificar quais registros serão retornados pela fase FROM, Onde soemnte para os registros que o sistema julgar como TRUE serão retornados. Este comando é dado por:
FROM Tables
WHERE Filtro
Sendo então preciso informar quais filtros serão feitos após a indicação do comando. Um exemplo de uso desta cláusula é o seguinte, onde serão exibidos apenas alunos que possuem idade maior que 18 anos:
SELECT Nome, Idade
FROM Esc.Alunos
WHERE Idade>18
O uso deste comando, é extremamente essêncial para qualquer DBA, de forma que a filtração da consulta reduz consideravelmenteo processamento da Query, retornando as consultas de forma mais rápida e eficaz, além de ser apenas aquilo que o consultor realmente deseja verificar.
Esta fase permite agrupar as linhas retornadas pela fase de processamento lógico de consulta de grupos. Os grupos são determinados pelos elementos que você especifica na fase do GROUP BY. Sendo dado pelo comando:
FROM Tables
WHERE Filtro
GROUP BY Group
A presença desta fase, é exigida quando a consultar contiver algum comando de contagem (COUNT, SUM, AVG, MIN ou MAX). De forma que todas as outras colunas deverão estar presentes no GROUP BY. Como por exemplo:
SELECT
Nome,
COUNT(Provas)
SUM(Notas)
FROM Esc.Alunos
GROUP BY Nome
A fase SELECT é o local onde será especificado as colunas que serão retornados como resultado da consulta. Para isso, o comando SELECT é dado seguido pelo nome das colunas que se deseja consultar. Além disso, as manipulações de dados são inseridas na nesta fase, como a exibição de contagem de dadps, formatação, transformação de dados e etc.
Também é possível a criação de uma coluna temporárias, de forma que ela será exibida somente durante a exibição da query, não sendo inserida na tabela em sí, dado pelo uso de duas aspas. Assim como a renomeação de alguma coluna, sendo dada pelo comando AS. Estes comandos de coluna temporária e renome são chamados de ALIAS. Por exemplo:
SELECT
COUNT(*) AS Quantidade,
'' AS Column2
FROM Table
Lembre-se que a cláusula SELECT é processada após as fases FROM, WHERE e GROUP BY, isso significa que os aliases não existem para cláusulas que são processadas antes do SELECT. Imagine que uma coluna foi renomeada com o nome de Quantidade, dessa forma, especificar o nome Quantidade em uma fase WHERE por exemplo, não será reconhecido.
O SQL fornece os meio para garantir a exclusividade no resultado de uma instrução SELECT, de forma que uma linha não apareça repetida. Para isso, é dado o comando DISTINCT após o comando SELECT, de forma a retirar tuplas duplicadas.
SELECT DISTINCT
COUNT(*) AS Quantidade,
'' AS Column2
FROM Table
Esta permite classificar as linhas de exibição de forma ordenada, sendo esta ordenação de forma crescente/A-Z ou decrescente/Z-A. Sendo preciso informar uma coluna para qual a ordenação será feita. Saiba que é possível inserir mais de uma coluna na instrução ORDER BY, juntando assim os valores das colunas e fazendo a ordenação. Para que a ordenação seja feita de forma decrescente/Z-A é preciso do comando DESC junto ao ORDER BY. Por exemplo:
SELECT Nome
FROM Esc.Alunos
ORDER BY Idade DESC
É um recurso funcional específico da linguagem T-SQL, permitindo lmitar o número de tuplas a serem exibidas em uma consulta, sendo preciso apenas dar o comando TOP() após o a instrução SELECT, como a seguinte:
SELECT TOP(5) Nome, Idade
FROM Esc.Alunos
Exibindo apenas as primeiras 5 tuplas da consulta feita. Além disso, é possível usar a função TOP com a palavra-chave PERCENT, exigindo que o SQL Server calcule o número de linhas a ser retornado com base em uma porcentagem do número de linhas qualificada. Ou seja, é retirada a porcentagem exigida do total de linhas a ser exibido.
A partir de um SELECT é possível dar comandos de exibições de classificações, como ROW_NUMBER, RANK, DENSE_RANK e NTILE, dadas pelo comando:
SELECT colunms,
ROW_NUMBER() OVER(ORDER BYcolumn),
RANK() OVER(ORDER BYcolumn),
DENSE_RANK() OVER(ORDER BYcolumn),
NTILE(10) OVER(ORDER BYcolumn)
FROM Table
Onde a função ROW_NUMBER atribui número inteiros sequênciais de incremento às linhas no conjunto de resultados de uma consulta, ou seja, funcionando como um contador númerico da quantidade das linhas.
Já a função DENSE_RANK irá ordenar as linhas de a cordo a uma posição dependendo de seus valores. Imagine que em uma coluna estão presentes os números 25, 45 e 30, logo com a função RANK, será gerada uma coluna indicando a posição de cada valor, neste caso como 1, 3 e 2, como se indicasse do valor menor para o maior.
A função RANK por outro lado, segue o mesmo sentido da dita anteriormente, com a diferença que se houver um empate de valores, ela continuará a contagem. Por exemplo:
VALORES RANK DENSE_RANK
12 1 1
18 2 2
23 3 3
28 4 4
30 5 5
33 6 6
36 7 7
36 7 7
40 9 8
45 10 9
Estes são operadores presentes em funções de filtração dos dados e entre eles podemos listar os predicados IN, BETWEEN e o LIKE, onde o predicado IN faz com que a filtração esteja dentro dos campos listados pelo usuário, ou seja, o DBA irá listar alguns valores em um conjunto e a exibição da consulta deverá estar dentro deste conjunto criado. Por exemplo:
SELECT Nome, Idade, CPF
FROM Esc.Alunos
WHERE Idade IN(10,25,18)
Dessa forma, apenas os alunos que tiverem idade de 10, 25 ou 18 anos irão ser listados na consulta feita.
Também é possível usar do predicado BETWEEN onde será criado um range (intervalo) de valores, sendo que qualquer valor entre esse range, poderá ser exibido na consulta. Como no exemplo seguinte, onde apenas valores entre 10 e 20 serão exibidos
SELECT Nome, Idade, CPF
FROM Esc.Alunos
WHERE Idade BETWEEN10 AND20
Ou tabmbém é possível utilizar do predicado LIKE, onde serão exibidos apenas os resultados semelhantes a restrição feita. Por exemplo:
SELECT Nome, Idade, CPF
FROM Esc.Alunos
WHERE Nome LIKE 'Marcos'
Dessa forma, todos os alunos que tiverem Marcos em seu nome, serão exibidos.
Além disso, estão presentes também os operadores numéricos e lógicos para esses predicados, sendo eles:
O CASE funciona como uma condicional para os resultados, obtendo um novo valor caso o valor exigido seja respeitado. Como o exemplo seguinte:
SELECT Nome, Idade, CPF
FROM Esc.Alunos
CASE
WHEN Idade > 18 THEN 'De Maior',
ELSE 'De Menor'
A função SUBSTRING é utilizada, como o nome já indica, em valores de strings, de forma a exibir somente parte de um texto, de acordo com o início e fim que o usuário desejar, exibindo então, somente parte da string. Para isso, deve ser passado a Coluna/String, o Início da sequência e o fim. Como o exemplo seguinte:
SUBSTRING(Texto,30,17)
Onde a partir do caracter na posição 30, só será exibido a string até mais 17 posições da coluna Texto.
Ou, caso seja mais específico, é possível também, indicar um parâmetro como início, dado pelo comando
SUBSTRING(Texto,CHARINDEX('hostname',texto)+9,7)
Onde a partir da coluna texto, serão exibidos as strings a partir da palavbra hostname
Possuindo o mesmo conceito de SUBSTRING, é usado para exibir parte de uma string, com a diferença que após ser passado um parâmetro, apenas a parte direita/esquerda da string será exibida. Como o exemplo:
SELECT RIGHT('abcde',3)
Onde será exibido os caracteres cde de toda a string.
A função LEN retorna o número de caracteres da sequência de entrada. Observe que tal função retorna o número de caracteres e não o número de bytes. É aí onde entra a função DATALENGHT, sendo:
SELECT
LEN('abcde'),
DATALENGHT('abcde')
A função REPLACE substitui uma string por outra desejada, reconstruindo assim uma string. Para isso deve ser passado o valor/coluna seguido pelo O que será mudado e a mudança. Como no exemplo seguinte onde onde a barra será trocada por 2 pontos:
SELECT REPLACE('1-A 2-B','-',':')
Gerando o resultado 1:A 2:B
É dado o comando para a replicação de uma sequência de caracteres por uma quantidade de vezes desejada. Dado pelo comando:
SELECT REPLICATE('ABC',3)
Gerando um resultado parecido como ABCABCABC
Este comando permite remover um valor de subsequência e inserir outro. Imagine a palavra Marcos, com o comando STUFF na letra A, a letra pode ser substituído por um outro valor, como 4, gerando o resultado M4rcos.
SELECT STUFF('Marcos',2,1,'4')
Os coringas, são usados no predicado LIKE, filtrando mais ainda os resultados exibidos.
Este coringa permite exibir resultados quaisquer que sejam a partir de um parâmetro. Imagine o comando dado com o parâmetro M%, dessa forma, todos os valores que comecem com a letra M serão exibidos, independendo do que venha a seguir e quantos caracteres possua.
SELECT Nome
FROM Esc.Alunos
WHERE Nome LIKE 'M%'
Tal coringa exibe apenas resultados em que apenas um caracter seja presente a partir do parâmetro. Como o exemplo a cima, com a letra M, se este coringa for passado como M_, somente valores que comecem com a letra M e que tenham apenas um caracter após a letra (independente de qual seja) será exibido.
SELECT Nome
FROM Esc.Alunos
WHERE Nome LIKE 'M_'
Este coringa permite a criação de um conjunto, sendo exibido os valores que estejam dentro deste conjunto. Como por exemplo a exibição dos valores que comecem com as letras A, B ou C.
SELECT Nome
FROM Esc.Alunos
WHERE Nome LIKE '[abc]%'
OBS: Este coringa possui uma segunda função, onde um range pode ser criado, a partir do uso de '-', como por exemplo: [A-E], gerando resultados que comecem com as letras A,B,C,D ou E.
o SQL Server permite trabalhar com esses valores de inúmeras formas, porém, os mais usados são pelos comandos DATE, TIME e DATETIME, de forma a exibirem a data, a hora e os dois juntos. Porém, a linguagem T-SQL está em inglês, portanto os valores de data serão exibidos como aaaa-mm-dd
Para contornar essa linguagem, é usado o comando CONVERT para converter a linguagem para o português, de forma a ser dado como dd-mm-aaaa e horário como hh:mm:ss.
CONVERT(CHAR(10), Column, 103) AS Dia
CONVERT(CHAR(12), Column, 108) AS Horário
É possível reduzir o registro de várias maneiras, como apenas as horas ou apenas o dia, ou até mesmo apenas o dia junto as horas. Para isso, é necessário um comando apropriado, sendo eles:
OBS: É possível também, obter os valores de data e hora atuais do sistema, através do comando GETDATE()
São funções dadas para converter o tipo de um registro, como por exemplo converter um valor INT para VARCHAR. Essas conversões são feits para que os dados possam ser trabalhados juntos em outra coluna ou tabela. Afinal, um dado numérico não pode ser trabalhado junto a uma string. Como nos exemplos acima, onde as datas de tipo DATE foram convertidas para o tipo de exibição visual, para CHAR.
CONVERT(CHAR(10), Column, 103) AS Dia
Esta, exige que o SQL Server informe o nome da data selecionada (Obviamente, será viável utilizar tal função apenas na exibição dos meses), sendo dado o comando:
SELECT DATENAME(month,'200090212')
OBS: Lembre-se que os dados são sempre em inglês por padrão.
Também é possível obter informações sobre o sistema do SQL Server, como metadados sobre as tabelas por exemplo. Essas, sã chamadas de Views e Stored Procedures. Porém, existem inúmeras funções assim, portando, recomenda-se pesquisar sobre elas na própria internet. Como por exemplo a sys.tables
Através de uma procedure, é possível consultar todas as informações presentes em uma tabela (a não ser os dados contidos nela), como o nome de suas colunas, sua data de criação e etc. Sendo dado o comando seguinte:
sp_help 'Table'