Revisões
Apresentação da
Linguagem SQL
Tipos de instruções
DDL (Data Definion Language) corresponde ao modulo 15 Linguagem de Definição
de Dados ; DML (Data Manipulation Language) corresponde ao módulo 14
Cronologia
Módulo 14 Módulo 15 Módulo 16 Módulos PAP
Linguagem de Linguagem de Projeto de
17,18 e 19
Manipulação de Definição de Software. Ref 74h
Temas opcionais
dados Ref. 36h Dados Ref. 21h 89 tempos letivos
Ref. 30h
43/44 tempos 25/26 tempos 36 tempos letivos
letivos (50m) letivos (50m) (50m)
Estágios – fevereiro e março
1. Apresentação da Linguagem SQL
• SQL (Structured Query Language) é
uma linguagem padrão para interagir
com bases de dados relacionais.
1. Tipos de Instruções
➢ DDL (Data Definition Language): CREATE, ALTER, DROP
➢ DML (Data Manipulation SELECT, INSERT, UPDATE, DELETE
➢ Language):
DCL (Data Control Language): GRANT, REVOKE
➢ TCL (Transaction Control Language): COMMIT, ROLLBACK
1. Tipos de Dados
▪ Tipos comuns em SQL
- Numéricos: INT, DECIMAL, FLOAT
- Texto: CHAR, VARCHAR, TEXT
- Data e hora: DATE, TIME, DATETIME
- Booleanos: BOOLEAN
Exemplo:
CREATE TABLE projetos ( INT,
id
nome VARCHAR(100),
DATE,
data_inicio
);
1. Tipos de Dados
- Booleanos: BOOLEAN
No MySQL, o tipo de dado booleano (BOOLEAN ou BOOL) é
usado para armazenar valores verdadeiro (TRUE) ou falso
(FALSE) — mas há um detalhe importante:
Internamente, o MySQL não tem um tipo booleano real.
Os tipos BOOLEAN e BOOL são sinónimos de TINYINT(1), ou
seja, eles armazenam números inteiros onde:
•0 representa FALSE
•1 representa TRUE
Saída possível:
1. Tipos de Dados
- Booleanos: BOOLEAN
Sintaxe básica
CREATE TABLE utilizadores (
id INT AUTO_INCREMENT PRIMARY KEY,
nome VARCHAR(50),
ativo BOOLEAN
);
INSERT INTO utilizadores (nome, ativo) VALUES ('Ana', TRUE);
INSERT INTO utilizadores (nome, ativo) VALUES ('Bruno', FALSE);
INSERT INTO utilizadores (nome, ativo) VALUES ('Carlos', 1);
INSERT INTO utilizadores (nome, ativo) VALUES ('Daniela', 0);
SELECT nome, ativo FROM utilizadores;
Exercício 2 – Criar tabela clientes
Cria a tabela clientes com os campos:
- id (INT, chave primária)
- nome (VARCHAR(100))
- cidade (VARCHAR(50))
Solução:
CREATE TABLE clientes (
id INT PRIMARY KEY,
nome VARCHAR(100),
cidade VARCHAR(50)
);
3 – Pesquisa Simples - SELECT
Estrutura básica:
SELECT colunas FROM tabela WHERE
condição ORDER BY coluna;
Exemplo:
SELECT nome, cargo FROM funcionarios
WHERE salario > 1200 ORDER BY nome
ASC;
Exercício 3 – SELECT simples
Lista o nome e salário de todos os
funcionários com salário superior a
1000.
Solução:
SELECT nome, salario FROM funcionarios
WHER salario > 1000;
E
4 – Predicados DISTINCT E ALL
➢ DISTINCT remove duplicados,
ALL mostra todos os resultados.
Exemplo:
SELECT DISTINCT cidade FROM clientes;
Exercício 4 – DISTINCT
Mostra as cidades únicas onde existem clientes.
Solução:
SELECT DISTINCT cidade FROM clientes;
4 – Predicados DISTINCT E ALL
5 – Funções de Agregação
Funções: COUNT(), SUM(), AVG(), MIN(), MAX()
Exemplo:
SELECT AVG(salario) AS media_salarios, COUNT(*)
AS total_func FROM funcionarios;
Explicação:
AVG(salario) → calcula a média dos salários.
• Com AS media_salarios, esse valor passa a aparecer na coluna chamada media_salarios
no resultado.
COUNT(*) → conta o número total de registos (funcionários).
• Com AS total_func, o resultado aparece na coluna chamada total_func.
Exercício 5 – Agregação
Calcular o total e a média dos salários.
Solução:
SELECT COUNT(*), AVG(salario) FROM
funcionarios;
6 – Lógica e Funções de Grupo
Agrupa e filtra grupos:
Exemplo:
SELECT cargo, AVG(salario) FROM funcionarios
GROUP BY cargo HAVING AVG(salario) > 1500;
Exercício 6 – Group BY
Mostra o salário médio por cargo apenas quando for
superior a 1500.
Solução:
SELECT cargo, AVG(salario) FROM funcionarios
GROUP BY cargo HAVING AVG(salario) > 1500;
7 – JOINs (INNER, LEFT, RIGHT)
Como Baixar e Instalar MySQL 8.0 e MySQL Workbench no Windows 10
➢ Vídeos 33 e 34
7 – JOINs
A cláusula JOIN é usada para combinar dados provenientes
de duas ou mais tabelas, baseado na relação existente entre
colunas destas tabelas.
Basicamente utiliza-se o JOIN para realizar
consultas e obter informações que estejam
espalhadas em várias tabelas, desde que as
tabelas estejam relacionadas entre si.
7 – JOINs
Existem duas categorias de joins mais comuns:
o INNER JOIN: Retorna linhas quando houver pelo menos uma
correspondência em ambas as tabelas.
o OUTER JOIN: Retorna linhas mesmo quando não
houver pelo menos uma correspondência
em uma das tabelas (ou ambas).
o O OUTER JOIN divide-se em LEFT JOIN, RIGHT JOIN E FULL JOIN.
7 – INNER JOIN
SELECT colunas
FROM tabela 1
INNER JOIN tabela 2
ON [Link] = [Link]
Critério ON: basicamente chave primária de uma tabela e chave estrangeira de outra tabela
Exemplo:
SELECT * FROM tbl_livros
INNER JOIN tbl_autores
ON tbl_livros.ID_Autor = tbl_autores.ID_Autor;
A relação entre as tabelas é a coluna ID_autor – na tabela Autores é uma Chave Primária, na
tabela_Livro é uma Chave Estrangeira.
7 – INNER JOIN
SELECT * FROM tbl_livros
INNER JOIN tbl_autores
ON tbl_livros.ID_Autor = tbl_autores.ID_Autor;
Aparece informação sobre os livros mais autores. Só aparecem os
autores que têm os livros publicados, ou seja, quando existe a
correspondência entre as 2 tabelas. Existem autores nesta BD que não
têm livro registado na tbl_livros por isso os nomes não aparecem.
7 – INNER JOIN
Mais um exemplo, agora com filtros. Vamos retornar os nomes dos livros e nomes
das editoras, mas somente das editoras cujo nome se inicia com a letra M. Notar o
uso de aliases nestas declarações, a fim de simplificar o código:
SELECT L.Nome_Livro AS Livros, E.Nome_editora
AS Editoras
FROM tbl_livros AS L
INNER JOIN tbl_editoras AS E
ON L.ID_editora = E.ID_editora
WHERE E.Nome_Editora LIKE 'M%';
Aliases para as tabelas tbl_editoras AS L … para as colunas L.Nome_Livro AS Livros
7 – JOINs (INNER, LEFT, RIGHT)
▪ INNER JOIN: retorna apenas correspondências.
▪ LEFT JOIN: todos da esquerda + correspondentes.
▪ RIGHT JOIN: todos da direita + correspondentes.
Exemplo:
SELECT cargo, AVG(salario) FROM funcionarios
GROUP BY cargo HAVING AVG(salario) > 1500;
7 – INNER JOIN
SELECT L.Nome_Livro AS Livros, E.Nome_editora
AS Editoras
FROM tbl_livros AS L
INNER JOIN tbl_editoras AS E
ON L.ID_editora = E.ID_editora
WHERE E.Nome_Editora LIKE 'M%';
Mais um exemplo para terminar. Agora vamos fazer
7 – INNER JOIN – Três tabelas um INNER JOIN com as três tabelas da BD
simultaneamente. Queremos os nomes e preços dos
livros, nomes de seus autores e editoras, mas
SELECT L.Nome_Livro AS Livro, somente das editoras cujo nome se inicia com a letra
O, tudo isso ordenado em ordem decrescente de
A.Nome_autor AS Autor, preço dos livros:
E.Nome_Editora AS Editora,
L.Preco_Livro AS 'Preço do Livro'
FROM tbl_Livro AS L
INNER JOIN tbl_autores AS A
ON L.ID_autor = A.ID_autor
INNER JOIN tbl_editoras AS E
ON L.ID_editora = E.ID_editora
WHERE E.Nome_Editora LIKE 'O%'
ORDER BY L.Preco_Livro DESC;
7 – INNER JOIN – Três tabelas
8 – OUTER JOINS
8 – OUTER JOINS – LEFT JOIN
8 – OUTER JOINS – LEFT JOIN
8 – OUTER JOINS – LEFT JOIN
8 – OUTER JOINS – LEFT JOIN
8 – OUTER JOINS – LEFT JOIN
8 – OUTER JOINS – RIGHT JOIN
8 – OUTER JOINS – RIGHT JOIN
8 – OUTER JOINS – FULL JOIN
MySQL - LEFT e RIGHT JOIN - Consultar dados em duas ou mais tabelas
8 – OUTER JOINS – FULL JOIN
8 – OUTER JOINS – CROSS JOIN
Um CROSS JOIN retorna um produto cartesiano entre as tabelas,
mostrando todas as combinações possíveis entre os registros.
Sintaxe:
A figura representa o produto cartesiano de um Cross Join entre as tabelas de livros e autores:
8 – OUTER JOINS – CROSS JOIN
um exemplo de CROSS JOIN – Retornar Nome e Preço dos livros, cruzando os dados
com a tabela de autores: