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:
- INT: Armazena números inteiros, como 1, 2, -3, etc.
- FLOAT ou DOUBLE: Usado para armazenar números de ponto flutuante, como 3.14 ou 2.718.
- 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.
- DATE: Armazena datas, como '2023-09-28'.
- TIME: Armazena informações de tempo, como '15:30:00'.
- DATETIME ou TIMESTAMP: Combina informações de data e tempo, como '2023-09-28 15:30:00'.
- BOOLEAN: Armazena valores booleanos, como TRUE ou FALSE.
- BLOB (Binary Large Object): Usado para armazenar dados binários, como imagens, documentos ou arquivos.
- ENUM: Permite definir um conjunto de valores possíveis para uma coluna.
- JSON ou JSONB: Armazena dados em formato JSON (JavaScript Object Notation), útil para armazenar estruturas de dados flexíveis.
- CURRENCY ou MONEY: Armazena valores monetários, facilitando o tratamento de dinheiro.
- BIT: Armazena valores de bits, como 0 ou 1.
- 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.
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:
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:
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:
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:
Checando os registros antes de dar o comando TRUNCATE TABLE
SELECT * FROM Livro
Checando os registros da tabela
a saída deve ser:
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:
Checando a quantidade de registros novamente
SELECT COUNT(*) FROM Livro
a saída deve ser:
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:
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:
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:
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:
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:
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:
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:
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:
Operador lógico AND
USE db_Biblioteca
SELECT * FROM Livro WHERE id > 101 OR id_autor < 3
a saída deve ser essa:
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:
Tabela antes do UPDATE
USE db_Biblioteca
UPDATE Livro
SET preco_livro = 65.45
WHERE id = 102
a saída deve ser essa:
Dado modificado com o UPDATE
⚠️ Cuidado ao usar oUPDATE
, verifique quais dados você necessita modificar e utilize oWHERE
para não modificar dados que não deveriam ser modificados. Se tivéssemos utilizado oUPDATE
sem a cláusulaWHERE
, todos os dados da colunapreco_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:
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:
USE db_Biblioteca
SELECT TOP 3 nome
FROM Livro
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:
Nomes das colunasnome
eid
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:
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:
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:
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:
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
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 palavraSELECT
e os mesmos tipos de condição encontradas na cláusulaWHERE
SELECT fornecedores.nome, materiais.nome
FROM fornecedores, materiais;
Cada coluna está prefixada com o nome da sua respectiva tabela**fornecedores.nome**
Isso é necessário poisnome
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:
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;
Of
e om
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:
→ 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”
▶️ // 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:
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
▶️ 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:
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:
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:
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:
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.