Article image
Andressa Abrantes
Andressa Abrantes28/09/2023 13:52
Share

Desvendando os Segredos do SQL e Dominando o SQL Server: Do Básico ao Avançado

  • #SQL Server
  • #SQL
  • #Banco de dados relacional

Imagine um mundo onde vastas quantidades de informações são armazenadas, organizadas e acessadas com facilidade. Esse mundo é possível graças ao SQL (Structured Query Language), a linguagem de comando que torna possível extrair conhecimento valioso de bancos de dados gigantes. Neste artigo, mergulharemos fundo no universo do SQL e exploraremos como ele desbloqueia os segredos ocultos por trás dos dados.

Juntamente com a imersão na essência do SQL, vamos nos concentrar na aplicação prática dessa linguagem em um dos sistemas de gerenciamento de banco de dados mais poderosos - o SQL Server. Prepare-se para uma jornada que revelará desde os conceitos básicos do SQL até habilidades avançadas de consulta, transformando você em um mestre na arte de manipular e consultar dados em bancos de dados relacionais.

Nossos tópicos abrangem desde o entendimento das funções fundamentais do SQL até a criação de bancos de dados do zero, explorando comandos cruciais, entendendo constraints, até mesmo mergulhando em consultas complexas, joins, subselects. Ao final deste artigo, você estará equipado com as ferramentas necessárias para conquistar qualquer desafio que envolva bancos de dados SQL e o SQL Server.

Este artigo abordará os conceitos fundamentais do SQL e seu uso no SQL Server, um dos sistemas de gerenciamento de banco de dados mais populares da atualidade.

Tópicos Abordados no Artigo:

O que é SQL:

  • Definição e significado do SQL como uma linguagem de consulta estruturada.
  • Breve histórico do SQL.

Funções do SQL:

  • Explicação das principais funções do SQL, incluindo seleção, inserção, atualização e exclusão de dados.

Tipos de Dados em SQL:

  • Discussão sobre os tipos de dados comuns em SQL, como inteiros, strings, datas e outros.

Composição de um Banco de Dados:

  • Componentes de um banco de dados SQL, como tabelas, índices, chaves primárias e estrangeiras.

Como Criar um Banco de Dados:

  • Passos para criar um novo banco de dados no SQL Server.
  • Definição de esquemas e permissões.

Principais Comandos SQL:

  • Apresentação dos comandos SQL essenciais, como SELECT, INSERT, UPDATE e DELETE.
  • Exemplos de uso prático.

Constraints:

  • Explicação das constraints (restrições) em SQL, como UNIQUE, NOT NULL e CHECK.
  • Como aplicá-las em tabelas.

Parte Prática com Exemplos de Queries no SQL Server:

  • Demonstração de consultas SQL práticas usando o SQL Server.
  • Exemplos de filtragem, ordenação e agregação de dados.

Joins:

  • Compreensão dos diferentes tipos de junções (INNER JOIN, LEFT JOIN, RIGHT JOIN) para combinar dados de várias tabelas.

Subselect (Subconsultas):

  • Explicação das subconsultas e como usá-las para consultar dados aninhados.

Portanto, vamos começar essa emocionante jornada pelo mundo do SQL e desvendar seus segredos.

O que é SQL?

Linguagem de Consulta Estruturada ou SQL, é uma linguagem de programação utilizada para gerenciar e manipular bancos de dados relacionais. Desenvolvida na década de 1970, o SQL é amplamente adotado em sistemas de gerenciamento de banco de dados (SGBDs) como o Microsoft SQL Server, MySQL, PostgreSQL e Oracle, entre outros.

Qual sua principal função?

A principal função do SQL é permitir que os desenvolvedores, administradores de banco de dados e analistas de dados comuniquem-se com bancos de dados, realizando operações como inserção, atualização, recuperação e exclusão de dados. Essa linguagem é composta por uma série de comandos, como SELECT, INSERT, UPDATE e DELETE, que são usados para consultar e modificar os dados em um banco de dados.

O SQL é fundamental para a criação e manutenção de sistemas de informação, aplicativos empresariais e análise de dados, tornando-se uma habilidade essencial para profissionais de tecnologia da informação e ciência de dados. Ele permite que os usuários extraiam informações significativas de grandes volumes de dados, gerenciem transações em bancos de dados e garantam a integridade e segurança dos dados armazenados.

Quais os principais comandos do SQL SERVER?

DDL

DML

DCL

DQL

DDL → DATA DEFINITION LANGUAGE

  • CREATE: cria uma nova tabela, visão ou outro objeto no BD.
  • ALTER: modifica um objeto existente no BD, como uma tabela.
  • DROP: exclui uma tabela inteira, uma exibição de uma tabela ou outro objeto no banco de dados.

DML → DATA MANIPULATION LANGUAGE

  • INSERT: cria um registro.
  • UPDATE: modifica registros.
  • DELETE: exclui registros.
  • DCL → DATA CONTROL LANGUAGE
  • GRANT: dá privilégios a um usuário.
  • REVOKE: retira privilégios fornecidos a um usuário.

DQL → DATA QUERY LANGUAGE

  • SELECT: obtém registros especificados de uma ou mais tabelas.

TIPOS DE DADOS

SQL oferece vários tipos de dados que podem ser usados para armazenar diferentes tipos de informações em um banco de dados.

Aqui estão alguns dos tipos de dados mais comuns em SQL:

  1. INT: Armazena números inteiros, como 1, 2, -3, etc.
  2. FLOAT ou DOUBLE: Usado para armazenar números de ponto flutuante, como 3.14 ou 2.718.
  3. CHAR(N) ou VARCHAR(N): CHAR armazena strings de comprimento fixo, enquanto VARCHAR armazena strings de comprimento variável. "N" representa o número máximo de caracteres que podem ser armazenados.
  4. DATE: Armazena datas, como '2023-09-28'.
  5. TIME: Armazena informações de tempo, como '15:30:00'.
  6. DATETIME ou TIMESTAMP: Combina informações de data e tempo, como '2023-09-28 15:30:00'.
  7. BOOLEAN: Armazena valores booleanos, como TRUE ou FALSE.
  8. BLOB (Binary Large Object): Usado para armazenar dados binários, como imagens, documentos ou arquivos.
  9. ENUM: Permite definir um conjunto de valores possíveis para uma coluna.
  10. JSON ou JSONB: Armazena dados em formato JSON (JavaScript Object Notation), útil para armazenar estruturas de dados flexíveis.
  11. CURRENCY ou MONEY: Armazena valores monetários, facilitando o tratamento de dinheiro.
  12. BIT: Armazena valores de bits, como 0 ou 1.
  13. INTERVAL: Usado para representar um intervalo de tempo.

Estes são alguns dos tipos de dados mais comuns em SQL, e a disponibilidade de tipos pode variar entre diferentes sistemas de gerenciamento de banco de dados (SGBDs). É importante escolher o tipo de dados apropriado para cada coluna de acordo com os requisitos do seu aplicativo para garantir a eficiência e a integridade dos dados.

image

COMPOSIÇÃO DE UM BANCO DE DADOS

  • Tabelas
  • Campos (Colunas)
  • Registros (Linhas)

Tabelas

→ Objetos onde são armazenados os dados em um banco de dados relacional

→ Uma tabela é uma coleção de entradas de dados relacionados e consiste em linhas e colunas

Campo

→ São entidades que representam os atributos dos dados, como Nome, Data de Nascimento, Salário, Preço e etc

→ Um campo é uma coluna em uma tabela que mantém informações específicas sobre cada registro

Registro

→ Linha ou Tupla

→ Cada entrada individual em uma tabela

→ Trata-se de um conjunto de campos relacionados que caracterizam os dados de uma entidade única

COMO CRIAR UM BANCO DE DADOS EM SQL SERVER?

CREATE DATABASE db_Biblioteca → nome da tabela que você está criando
ON PRIMARY (
NAME=db_Biblioteca, → vírgula para separar os argumentos
FILENAME=’C:\\SQL\\db_Biblioteca.MDF’, → nome e localização do arquivo
SIZE=6MB, → tamanho do banco de dados
MAXSIZE=15MB, → tamanho máximo do BD
FILEGROWTH=10% → como o arquivo vai crescer (toda vez que o espaço acabar, 6MB, ele aumenta em 10% até atingir o seu MAXSIZE)
)

COMANDOS

USE → instrui o SGBDR a utilizar o banco de dados especificado para rodar os comandos. Aponta para qual BD será executados os comandos que serão inseridos em seguida.
ex: USE nome_Banco_de_dados → o nome do banco de dados
sp_helpdb → informa o tamanho, taxa de crescimento, e local do banco de dados.
ex: sp_helpdb nome_Banco_de_dados

*para comentar uma linha no sql server use - - → duas linhas

O QUE SÃO SQL CONSTRAINTS (RESTRIÇÕES)

💡 São regras aplicadas nas colunas de uma tabela. São usadas para limitar os tipos de dados que são inseridos. Podem ser especificadas no momento de criação da tabela (CREATE) ou após a tabela ter sido criada (ALTER)
  • NOT NULL não nulo. obriga um campo a sempre possuir um valor.
  • UNIQUE → identifica de forma única cada registro em uma tabela. garantem a unicidade em uma coluna. automaticamente possui uma restrição unique definida. pode ter várias constraints unique em uma tabela, mas apenas uma chave primária por tabela.
  • PRIMARY KEY → identifica de forma única cada registro em uma tabela. deve conter valores únicos. uma coluna não pode conter valores NULOS. deve conter apenas uma chave primária.
  • FOREIGN KEY → campo que aponta para uma chave primária em outra tabela.
CONSTRAINT fk_ID_Autor FOREIGN KEY (ID_Autor) REFERENCES tbl_autores(ID_Autor)
// No exemplo acima, a chave primária está na tabela tbl_autores e uma chave estrangeira de nome ID_Autor foi criada na tabela atual, usando o nome fk_ID_Autor.
  • CHECK → é usada para limitar uma faixa de valores que podem ser colocados em uma coluna.
ex: se for definida uma coluna para receber apenas dados numéricos e o usuário tentar digitar letras, a coluna não aceita.

ex²: se for definida uma coluna para receber dados no intervalo de 1 à 50 e o usuário digitar 51, o sistema não deixa a entrada da informação.
  • DEFAULT → é usada para inserir um valor padrão em uma coluna. esse valor padrão será adicionado a todos os novos registros caso nenhum outro valor seja especificado.
ex: 90% dos seus clientes são de São Paulo, você pode definir um valor padrão DEFAULT são paulo para aquele campo. se acontecer de um algum cliente ser de outro local, esse campo pode ser alterado e será armazenado em cima do valor default são paulo.

🥳 PARTE PRÁTICA

Como criar tabelas usando o SQL Server:

USE db_Biblioteca
CREATE TABLE livro (
id SMALLINT PRIMARY KEY IDENTITY(100,1),
nome VARCHAR (50) NOT NULL,
isbn VARCHAR(30) NOT NULL UNIQUE,
data_pub DATETIME NOT NULL,
preco MONEY NOT NULL
)
CREATE TABLE editoras (
id SMALLINT PRIMARY KEY IDENTITY,
nome VARCHAR (60) NOT NULL
)
CREATE TABLE autores (
id SMALLINT PRIMARY KEY IDENTITY NOT NULL,
nome VARCHAR(60),
sobrenome VARCHAR(60)
)
Criando tabelas diretamente do SQL SERVER

AUTO INCREMENT (IDENTITY)

→ Permite que um número único seja gerado quando um novo registro é inserido em uma tabela

→ Em SQL SERVER trata-se da palavra chave IDENTITY (identidade), cujo valor inicial padrão é 1, e se incrementa em 1

→ Para que o valor de IDENTITY inicie em 100 e se incremente de 2 em 2, use IDENTITY(100,2)

CREATE TABLE teste_identidade (
id SMALLINT PRIMARY KEY IDENTITY,
valor SMALLINT NOT NULL
)
INSERT INTO teste_identidade (valor) VALUES (10)
INSERT INTO teste_identidade (valor) VALUES (20)
INSERT INTO teste_identidade (valor) VALUES (30)
INSERT INTO teste_identidade (valor) VALUES (40)
SELECT * FROM teste_identidade
Código para criar tabelas com auto incremento e suas inserções

ALTERANDO TABELAS - EXCLUINDO UMA COLUNA

→ É possível alterar a estrutura de uma tabela após ter sido criada, acrescentando ou excluindo atributos (campos)

ALTER TABLE livro
DROP COLUMN id_autor
Comando ALTER TABLE - altera tabela | Comando DROP COLUMN - Exclui coluna

ALTERANDO TABELAS - EXCLUINDO UMA CONSTRAINT

→ Também é possível excluir uma constraint

ALTER TABLE nome_tabela
DROP CONSTRAINT nome_constraint
Comando para alterar - excluir uma restrição na tabela

ALTERANDO TABELAS -ADICIONANDO COLUNAS (COM CONSTRAINTS)

ALTER TABLE Livro
ADD id_autor SMALLINT NOT NULL
CONSTRAINT fk_id_autor FOREIGN KEY (id_autor)
REFERENCES autor
Comando para adicionar uma nova coluna com a restrição Foreign Key
ALTER TABLE Livro
ADD id_editora SMALLINT NOT NULL
CONSTRAINT fk_id_editora FOREIGN KEY (id_editora)
REFERENCES editoras
Comando para adicionar uma nova coluna com a restrição Foreign Key

ALTERANDO TABELAS - ADICIONANDO CHAVE PRIMÁRIA

ALTER TABLE cliente
ADD PRIMARY KEY (id)
A coluna “id” deve existir antes de ser transformada em chave primária A coluna “id” receberá a constraint “PRIMARY KEY”, e passará a ser chave primária da tabela

⚠️ DROP TABLE - EXCLUINDO UMA TABELA

USE nome_do_banco_de_dados
DROP TABLE nome_tabela DROP TABLE cliente
//Comando para excluir uma tabela. 
//Use sempre o USE nome_do_banco_de_dados para garantir que você está excluindo a tabela correta do banco de dados

⚠️ MUITO CUIDADO AO USAR O COMANDO DROP!

INSERT INTO - INSERINDO DADOS

INSERT INTO tabela (coluna1, coluna2,…) VALUES (valor1, valor2,…)
Comando para inserir dados em uma tabela

Populando a tabela Autor

USE db_Biblioteca

INSERT INTO autores (nome, sobrenome) VALUES ('Daniel', 'Barret') 
INSERT INTO autores (nome, sobrenome) VALUES ('Gerald', 'Carter') 
INSERT INTO autores (nome, sobrenome) VALUES ('Mark', 'Sobell') 
INSERT INTO autores (nome, sobrenome) VALUES ('William', 'Stanek') 
INSERT INTO autores (nome, sobrenome) VALUES ('Richard', 'Blum')

SELECT * FROM autores

a saída deve ser essa:

image

Inserindo os valores na tabela autores Veja que o “id” de autores não foi colocado no INSERT pois ele é Auto incremento (IDENTITY). Assim, o próprio BD gera os números do id

Populando a tabela Editoras

USE db_Biblioteca
INSERT INTO editoras (nome) VALUES ('Prentice Hall') 
INSERT INTO editoras (nome) VALUES ('O´Reilly') 
INSERT INTO editoras (nome) VALUES ('Microsoft Press') 
INSERT INTO editoras (nome) VALUES ('Wiley')

SELECT * FROM editoras

a saída deve ser essa:

image

Inserindo os valores na tabela editoras Veja que o “id” de editoras não foi colocado no INSERT pois ele é Auto incremento (IDENTITY). Assim, o próprio BD gera os números do id

Populando a tabela Livro

USE db_Biblioteca

INSERT INTO Livro (nome, isbn, data_pub, preco_livro, id_autor, id_editora) VALUES ('Linux Command Line and Shell Scripting', 143856969, '20091221', 68.35, 5, 4)

INSERT INTO Livro (nome, isbn, data_pub, preco_livro, id_autor, id_editora) VALUES ('SSH, The Secure Shell', 127658789, '20091221', 58.30, 1, 2)

INSERT INTO Livro (nome, isbn, data_pub, preco_livro, id_autor, id_editora) VALUES ('Using Samba', 12385789, '20001221', 61.45, 2, 2)

INSERT INTO Livro (nome, isbn, data_pub, preco_livro, id_autor, id_editora) VALUES ('Fedora and Red Hat Linux', 123346789, '20101101', 62.24, 3, 1)

INSERT INTO Livro (nome, isbn, data_pub, preco_livro, id_autor, id_editora) VALUES ('Windows Server 2012 Inside Out', 123356789, '2004517', 66.80, 4, 3)

INSERT INTO Livro (nome, isbn, data_pub, preco_livro, id_autor, id_editora) VALUES ('Microsoft Exchange Server 2010', 123366789, '20001221', 45.30, 4, 3)


SELECT * FROM Livro


a saída deve ser essa:

image

Perceba que o ID começa a contar em 100, como determinamos lá no IDENTITY e com incremento de 1 em 1

O QUE É O COMANDO TRUNCATE TABLE?

→ Remove todas as linhas de uma tabela sem registrar as exclusões de linhas individuais

TRUNCATE TABLE é como a instrução DELETE sem usar a cláusula WHERE

→ Entretanto, TRUNCATE TABLE é mais rápida e utiliza menos recursos de sistema e log de transações

→ Esse comando não exclui a tabela, exclui os dados inseridos nela

Checando a quantidade de registros

SELECT COUNT(*) FROM Livro
Comando para mostrar a quantidade de registro na tabela Livro

a saída deve ser:

image

Checando os registros antes de dar o comando TRUNCATE TABLE

SELECT * FROM Livro
Checando os registros da tabela

a saída deve ser:

image

Os 6 registros que o comando COUNT exibiu

Acionando o comando TRUNCATE TABLE

TRUNCATE TABLE Livro
Comando para apagar todos os dados inseridos na tabela

Checando as inserções da tabela Livro

SELECT * FROM Livro

os registros devem estar assim, vazios:

image

Checando a quantidade de registros novamente

SELECT COUNT(*) FROM Livro

a saída deve ser:

image

Confirmação da exclusão de todos os registros da tabela Livro

COMO FAZER CONSULTAS SIMPLES - SELECT FROM

USE db_Biblioteca

SELECT nome from autores
SELECT * FROM autores
SELECT nome FROM livro
SELECT * FROM editoras

a saída deve ser essa:

image

4 comandos de consulta simples em sequência
E as saídas na sequência dos comandos da consulta

COMO ESPECIFICAR COLUNAS - SELECT FROM

USE db_Biblioteca

SELECT id, nome, sobrenome FROM autores 
SELECT id, nome FROM editoras 
SELECT id, nome, isbn, preco FROM livro

a saída deve ser essa:

image

Podemos selecionar várias colunas em uma única consulta, apenas separando por vírgulas e especificando a tabela
USE db_Biblioteca

SELECT id, nome, preco FROM livro 
ORDER BY nome

a saída deve ser essa:

image

Nesse caso podemos selecionar colunas de uma mesma tabela, separando-as apenas por vírgulas. “nome” está ordenado por ordem alfabética (próximo tópico) usando o ORDER BY

SELECT - OPERADOR IN

→ O operador IN é utilizado quando desejamos consultar uma tabela, filtrando o valor de um de seus campos a partir de uma lista e possibilidades. Enquanto o operador de comparação de igualdade (=) avalia se os dois valores são iguais, o IN permite verificar se o valor de um campo se encontra em uma lista.

USE db_Biblioteca

SELECT id, nome, preco 
FROM livro 
WHERE id IN (101, 103, 105) AND preco IN (29.90, 39.90)

a saída deve ser essa:

image

ORDER BY

→ A palavra-chave ORDER BY é usada para ordenar o conjunto-resultado de registros

→ ASC - Ordem ascendente

→ DESC - Ordem decrescente (inversa)

USE db_Biblioteca

SELECT nome, preco 
FROM livro 
ORDER BY preco


SELECT nome, preco 
FROM livro 
ORDER BY preco DESC


a saída deve ser essa:

image

Nessa consulta foi feita a ordenação da coluna “Preco” na forma crescente e, em seguida, na forma decrescente

ORDER BY preco → nesse formato já está sub entendido que está na forma crescente

ORDER BY preco DESC → este formato é a forma decrescente

DISTINCT

USE db_Biblioteca

SELECT id_autores 
FROM livro

SELECT DISTINCT id_autores 
FROM livro


a saída deve ser essa:

image

Algumas colunas podem conter valores duplicados. Para exibir apenas valores diferentes (”distintos”), use a palavra-chave DISTINCT

CLÁUSULA WHERE

→ Permite filtrar registros em uma consulta

USE db_Biblioteca

SELECT id FROM autores WHERE sobrenome = 'Stanek'
SELECT * FROM livro WHERE id_autores = '1'
SELECT nome, preco FROM livro WHERE preco > 50
SELECT nome, data_pub FROM livro WHERE data_pub > '2009-01-01’


a saída deve ser essa:

image

Consultas e suas respectivas saídas com WHERE

OPERADORES AND E OR

→ Usados para filtrar registros baseados em mais de uma condição

→ O operador AND mostra um registro se ambas as condições forem verdadeiras

→ O operador OR mostra um registro se pelo menos uma das condições for verdadeira

USE db_Biblioteca

SELECT * FROM Livro WHERE id > 2 AND id_autor < 3

a saída deve ser essa:

image

Operador lógico AND
USE db_Biblioteca

SELECT * FROM Livro WHERE id > 101 OR id_autor < 3

a saída deve ser essa:

image

Operador lógico OR

CLÁUSULA UPDATE

→ Utilizada para atualizar dados em uma tabela

USE db_Biblioteca

UPDATE nome_tabela
SET nome_coluna = valor
WHERE — “filtro”


a saída deve ser essa:

image

Tabela antes do UPDATE
USE db_Biblioteca

UPDATE Livro
SET preco_livro = 65.45
WHERE id = 102


a saída deve ser essa:

image

Dado modificado com o UPDATE
⚠️ Cuidado ao usar o UPDATE, verifique quais dados você necessita modificar e utilize o WHERE para não modificar dados que não deveriam ser modificados. Se tivéssemos utilizado o UPDATE sem a cláusula WHERE, todos os dados da coluna preco_livro teriam sido modificados para o preço 65,45 e isso não era o que queríamos!!

FAZENDO ALTERAÇÃO EM MAIS DE UMA COLUNA SIMULTANEAMENTE

USE db_Biblioteca

UPDATE Livro SET preco_livro = 80.00, isbn = '0202020' WHERE id = 101


a saída deve ser essa:

image

Onde antes o livro com o id 101 tinha o código isbn como sendo 127658789, agora passa a ser 0202020, assim como o preço, que antes era 58,30, passa a ser 80,00. Atualizando mais de uma coluna simultaneamente.

SELECT TOP

→ Usado para especificar o número de registros a retornar

→ Útil para tabelas com muitos registros

SELECT TOP número (ou) percentual nome_coluna

FROM nome_tabela

USE db_Biblioteca
SELECT TOP 10 PERCENT nome
FROM Livro
a saída deve ser essa:

image

USE db_Biblioteca
SELECT TOP 3 nome
FROM Livro

image

Exibe os primeiros registros da tabela, podendo ser expressado em valor numérico ou em porcentagem — PERCENT

SQL ALIAS

→ Pode-se dar um nome diferente a uma coluna ou tabela em uma consulta

USE db_Biblioteca

SELECT nome AS Livro, id AS Autor 
FROM Livro

a saída deve ser essa:

image

Nomes das colunas nome e id foram trocados por Livro e Autor no momento da exibição

SELECT INTO

→ Seleciona dados de uma ou mais tabelas e os insere em uma tabela diferente.

→ Pode ser usada para criar cópias de backup de tabelas

→ Pode ser usada para criar cópias de backup de tabelas

USE db_Biblioteca

SELECT nome, isbn 
INTO Nome_Isbn 
FROM livro WHERE id > 2

SELECT * FROM Nome_Isbn


a saída deve ser essa:

image

Uma nova tabela é criada Pode servir como um backup

FUNÇÕES AGREGADAS

→ Permite alguns cálculos simples dentro das declarações SELECT

→ MIN - Valor Mínimo

→ MAX - Valor Máximo

→ AVG - Média Aritmética - Average

→ SUM - Total (SOMA)

→ COUNT - Contar quantidade de itens

USE db_Biblioteca

SELECT MAX (preco_livro) AS PreçoMaximo FROM Livro

SELECT MIN (preco_livro) AS PreçoMinino FROM Livro

SELECT AVG (preco_livro) AS Média FROM Livro

SELECT SUM (preco_livro) AS PreçoTotal FROM Livro


a saída deve ser essa:

image

Possibilita pequenas funções matemáticas dentro dos SELECTS

BETWEEN - SELEÇÃO DE INTERVALOS

→ Geralmente utiliza junto com a cláusula WHERE para selecionar intervalos de filtragem

**SINTAXE BETWEEN**

SELECT nome_colunas FROM nome_tabela

WHERE nome_coluna BETWEEN valor1 AND valor2

USE db_Biblioteca

SELECT * FROM Livro WHERE data_pub BETWEEN '20040517' AND '20100517'

SELECT nome AS Livro, preco_livro AS Preço 
FROM Livro 
WHERE preco_livro BETWEEN 40.00 AND 60.00


a saída deve ser essa:

image

Obtém intervalos entre valores

LIKE e NOT LIKE

  • Determina se uma cadeia de caracteres específica corresponde a um padrão especificado
  • Um padrão pode incluir caracteres normais e curingas
  • NOT LIKE inverte a comparação, verificando se a cadeia de caracteres NÃO corresponde ao padrão especificado
  • Usado junto com WHERE

LIKE - PADRÕES ESPECÍFICOS

  • ‘%’ — Qualquer cadeia de 0 ou mais caracteres
  • ‘_’ — Sublinhado: qualquer caracter único
  • ‘[ ]’ — Qualquer caracter único no intervalo ou conjunto especificado ([a-h]; [aeiou])
  • ‘[^]’ — Qualquer caracter único que não esteja no intervalo ou conjunto especificado ([a-h]; [aeiou])
  • ‘%aeiou%’ — A palavra especifica independente do que vier antes ou depois do aeiou
Query the list of CITY names starting with vowels ( a, e, i, o, or u) from STATION. 
Your result cannot contain duplicates.
Input Format

The STATION table is destribe as follows:

image

CODE:

SELECT DISTINCT city FROM station WHERE city LIKE '[aeiou]%'


a saída deve ser essa:

Acme
Addison
Agency
Aguanga
Alanson
Alba
Albany
Albion
Algonac
Aliso Viejo
Allerton
Alpine
Alton
Amazonia
Amo
Andersonville
Andover
Anthony
Archie
Arispe
Arkadelphia
Arlington
Arrowsmith
Athens
Atlantic Mine
Auburn
East China
East Haddam
East Irvine
Eastlake
Edgewater
Effingham
Eleele
Elkton
Elm Grove
Emmett
Equality
Eriline
Ermine
Eros
Eskridge
Esmond
Eufaula
Eureka Springs
Eustis
Everton
Irvington
Oakfield
Oconee
Odin
Ojai
Olmitz
Onaway
Orange City
Orange Park
Osage City
Osborne
Oshtemo
Ottertail
Ozona
Udall
Ukiah
Union Star
Upperco
Urbana

JOIN

→ Join é uma cláusula SQL utilizada para acessar e “nos trazer” dados de duas ou mais tabelas, baseadas na relação lógica entre essas tabelas

→ O Join indica como o SQL SERVER deve utilizar o dado de uma tabela para selecionar as linhas de uma outra tabela

⚠️ Tabela de exemplo:

Fornecedores: cod_fornecedor, nome, cidade_sede, grupo_cod_fornecedor;

Materiais: cod_material, cod_fornecedor, nome, descricao, quant_estoque, quant_estoque_min, cod_unidade;

Pedidos: num_pedido, cod_fornecedor, data_pedido, data_recebimento, quant_itens, valor_total;

Itens_Pedidos: num_pedido, cod_material, quant_pedida, valor_unitario;

Unidades: cod_unidade, nome_unidade.
Fonte: DevMedia

image

SELECT FROM (duas ou mais tabelas)

→ O caso mais simples de JOIN

SINTAXE

SELECT <lista de colunas>
FROM <nome de uma ou mais tabelas>
WHERE <lista de condições>
FROM — em vez de apresentarmos o nome de apenas uma tabela, podemos incluir uma lista de tabelas, separadas por vírgulas.
Temos ainda a mesma lista de colunas após a palavra SELECT e os mesmos tipos de condição encontradas na cláusula WHERE
SELECT fornecedores.nome, materiais.nome
FROM fornecedores, materiais;
Cada coluna está prefixada com o nome da sua respectiva tabela **fornecedores.nome** Isso é necessário pois nome existe nas duas tabelas, então precisamos mostrar ao SGBD de qual coluna estamos nos referenciando.

→ Precisamos incluir uma restrição WHERE onde vamos dizer para o banco de dados que ele deve nos trazer apenas os materiais relacionados aos seus fornecedores correspondentes, ou de outra forma, ele deve apresentar todos os fornecedores e os materiais que cada um tem disponível para comercializar.

Conforme abaixo:

SELECT fornecedores.nome "Nome Fornecedor", materiais.nome "Nome Material"
FROM fornecedores, materiais
WHERE forncedores.cod_fornecedor = materiais.cod_fornecedor;
A restrição WHERE diz que o banco só deve nos retornar os nomes dos fornecedores e materiais para as linhas onde o código do fornecedor seja igual em ambas as tabelas.
⚠️ a saída é essa:

image

Lista dos fornecedores e materiais oferecidos
Fonte: DevMedia

ALIAS

→ É um sinônimo que você atribui a uma tabela

→ É uma outra forma de se referenciar ao nome da mesma

→ Quando escrevemos a instrução, prefixamos as colunas com os nomes das respectivas tabelas

SELECT f.nome, m.nome
FROM fornecedors f, materiais m
WHERE f.cod_fornecedor = m.cod_fornecedor;
O f e o m são os alias que criamos para as tabelas fornecedores e materiais, respectivamente, mas poderia ser qualquer nome ou abreviação, não apenas uma letra

JOIN - 3 OU MAIS TABELAS

→ Sintaxe para fazer um Join com mais de 2 tabelas

USE db_Biblioteca

SELECT A.nome, A.sobrenome, L.nome, L.preco, E.nome 
FROM livro AS L INNER JOIN autores AS A
ON L.id_autores = A.id
INNER JOIN editoras AS E
ON L.id_editoras = E.id



a saída deve ser essa:

image

→ Ex¹: Mostre o nome e sobrenome dos autores, o preço do livro e o nome da editora que estão cadastrados no sistema.

Para fazer o INNER JOIN Escrever toda a sintaxe do JOIN e depois fazer o JOIN seguinte, como mostra o Ex¹

INNER JOIN E OUTER JOIN

→ Até então listamos apenas as informações de fornecedores que estavam associadas aos respectivos materiais, isto é, quando os fornecedores e materiais existiam e eram iguais em ambas as tabelas. Este conceito de join é o conhecido inner join

→ No inner join só serão listadas as linhas de fornecedores e materiais correspondentes que existam em ambas as tabelas

OUTER JOINS - LEFT E RIGHT

LEFT OUTER JOIN

→ Retorna um conjunto de todos os registros da Tabela ‘A’, e além disso, os registros correspondentes (quando disponíveis) na Tabela ‘B’

→ Se não houver registros correspondentes ele simplesmente vai preencher com “null”

image

▶️ // Pessoas registradas que possuem ou nao cartao de credito cadastrado


USE AdventureWorks2017



SELECT pp.FirstName, pc.CreditCardID 
FROM Person.Person as pp 
LEFT JOIN Sales.PersonCreditCard as pc 
  ON pp.BusinessEntityID = pc.BusinessEntityID
    
    
    
a saída deve ser essa:

image

Banco de Dados: AdventureWorks2017
Todos os registros do lado esquerdo foram exibidos mesmo quando não houveram correspondências do lado direito

RIGHT OUTER JOIN

image

▶️ USE AdventureWorks2017


SELECT PP.Title, HR.JobTitle, PP.BusinessEntityID 
FROM HumanResources.Employee AS HR 
RIGHT JOIN Person.Person AS PP 
  ON HR.BusinessEntityID = PP.BusinessEntityID
    

a saída deve ser essa:

image

Os registros do lado direito são exibidos mesmo não tendo correspondência do lado esquerdo

SELF JOIN

// Produtos com a mesma subcategoria

USE AdventureWorks2017



SELECT P.ProductID, P.Name, P.ProductSubcategoryID, PP.ProductID, PP.Name, PP.ProductSubcategoryID 
FROM Production.Product AS P, Production.Product AS PP 
WHERE P.ProductSubcategoryID = PP.ProductSubcategoryID




a saída deve ser essa:

image

UNION

→ O operador UNION combina dois ou mais resultados de um select em um único resultado

▶️ USE AdventureWorks2017


SELECT PP.FirstName 
FROM Person.Person AS PP 
WHERE ModifiedDate BETWEEN '20090107' AND '20150524' 
UNION 
SELECT PE.EmailAddress 
FROM Person.EmailAddress AS PE 
WHERE ModifiedDate BETWEEN '20071128' AND '20101228'



a saída deve ser essa:

image

A saída dos dois select foram incorporados à uma única saída

SUBQUERY (SUBSELECT)

→ Basicamente um Select dentro de outro Select.

→ Efetua consultas que, de outra forma, seriam extremamente complicadas ou impossíveis de serem feitas

→ Ex¹: Monte um relatório de todos os produtos cadastrados que têm preço de venda acima da média.

▶️ USE AdventureWorks2017


SELECT * 
FROM Production.Product 
WHERE ListPrice > (SELECT AVG(ListPrice) from Production.Product) 
ORDER BY ListPrice



a saída deve ser essa:

image

Banco de Dados: AdventureWorks2017
A saída deve ter 136 rows (linhas). Com os produtos ordenados pelo ListPrice, começando com o produto de ProductID 977 de preço 539,99. Finalizando com o ProductID 753 de preço 3578,27.

Conclusão

Neste artigo, embarcamos em uma jornada fascinante pelo mundo do SQL e sua aplicação no SQL Server. Começamos com os fundamentos, desvendando o que é o SQL e explorando suas funções essenciais. Aprendemos sobre os tipos de dados e a composição de um banco de dados, descobrindo como criar nossos próprios bancos de dados do zero.

Em seguida, mergulhamos nas operações fundamentais, dominando os principais comandos SQL e compreendendo como aplicar constraints para manter a integridade dos dados. Demonstramos o poder desses conceitos com exemplos práticos, ajudando você a adquirir confiança na escrita de consultas eficazes.

O SQL é uma ferramenta essencial para qualquer pessoa que lide com bancos de dados relacionais, e o SQL Server é uma escolha popular para implementá-lo. Esperamos que este artigo tenha fornecido uma compreensão sólida do SQL e do SQL Server, capacitando você a explorar mais a fundo esses tópicos adicionais e aprofundar ainda mais suas habilidades.

À medida que você continua sua jornada no mundo dos bancos de dados, lembre-se de que o SQL é uma linguagem poderosa que pode desbloquear insights valiosos e automatizar tarefas complexas. Continue explorando, praticando e refinando suas habilidades, pois o domínio do SQL é uma habilidade valiosa que abrirá portas para uma variedade de oportunidades no mundo da tecnologia e da análise de dados.

Referências:

Curso de Microsoft SQL Server

Share
Comments (2)
Andressa Abrantes
Andressa Abrantes - 28/09/2023 19:32

Obrigada, Eridan!! Espero que ajude bastante!

EP

Eridan Paz - 28/09/2023 15:53

Um verdadeiro tutorial de SQL Server.