Base de dados usadas nos exemplos desse capitulo.

CREATE TABLE aluno (
    nome VARCHAR(256),
    cpf VARCHAR(11) PRIMARY KEY,
    matricula VARCHAR(256),
    idade INTEGER,
    curso_sigla VARCHAR(6),
    FOREIGN KEY (curso_sigla) REFERENCES curso (sigla)
);

CREATE TABLE curso (
    sigla VARCHAR(6) PRIMARY KEY,
    nome VARCHAR(256)
);

INSERT INTO curso (sigla, nome) VALUES ('SI', 'Sistemas de Informação');
INSERT INTO curso (sigla, nome) VALUES ('ADM', 'Administração');
INSERT INTO curso (sigla, nome) VALUES ('EC', 'Economia');

INSERT INTO aluno (nome, cpf, matricula, idade, curso_sigla) VALUES ('João Silva', '12345678910', '20180001', 20, 'SI');
INSERT INTO aluno (nome, cpf, matricula, idade, curso_sigla) VALUES ('Maria Santos', '10987654321', '20180002', 22, 'ADM');
INSERT INTO aluno (nome, cpf, matricula, idade, curso_sigla) VALUES ('Carlos Rodrigues', '09876543211', '20180003', 21, 'EC');
INSERT INTO aluno (nome, cpf, matricula, idade, curso_sigla) VALUES ('Amanda Souza', '19876543210', '20180004', 19, 'SI');
INSERT INTO aluno (nome, cpf, matricula, idade, curso_sigla) VALUES ('Lucas Oliveira', '12376543210', '20180005', 20, 'ADM');
INSERT INTO aluno (nome, cpf, matricula, idade, curso_sigla) VALUES ('Fernanda Costa', '12976553210', '20180006', 22, 'EC');
INSERT INTO aluno (nome, cpf, matricula, idade, curso_sigla) VALUES ('Pedro Silva', '1276544321', '20180007', 21, 'SI');
INSERT INTO aluno (nome, cpf, matricula, idade, curso_sigla) VALUES ('Ana Paula', '12356787654', '20180008', 20, 'ADM');
INSERT INTO aluno (nome, cpf, matricula, idade, curso_sigla) VALUES ('Bruno Oliveira', '12334567890', '20180009', 22, 'EC');
INSERT INTO aluno (nome, cpf, matricula, idade, curso_sigla) VALUES ('Julia Santos', '12309876543', '20180010', 21, 'SI');

Consulta aninhada

Uma consulta aninhada, também conhecida como subquery, é uma consulta SQL que é executada dentro de outra consulta. Elas são usadas para selecionar dados de uma tabela baseado em condições específicas que são definidas em uma outra consulta. Uma subquery é sempre executada primeiro e o resultado é usado para filtrar os dados da consulta principal.

Por exemplo, se você quiser selecionar todos os alunos que estudam em um curso específico, você poderia escrever uma consulta aninhada como esta:

SELECT * FROM aluno
WHERE curso_sigla IN (SELECT sigla FROM curso WHERE nome = 'Sistemas de Informação');

Nesta consulta, a subquery (SELECT sigla FROM curso WHERE nome = 'Sistemas de Informação') é executada primeiro e retorna a sigla de todos os cursos cujo nome é "Sistemas de Informação". O resultado dessa subquery é então usado para filtrar os dados da tabela "aluno", selecionando apenas os alunos cujo curso_sigla é igual a uma das siglas retornadas pela subquery.

É importante notar que as subqueries podem ser usadas em diferentes tipos de consultas, como SELECT, UPDATE e DELETE e também podem ser usadas em diferentes cláusulas como WHERE, FROM, HAVING.

Como mostrar os alunos mais velhos?

Primeiramente, para obter a maior idade presente na tabela "aluno", você pode utilizar a seguinte consulta:

SELECT MAX(idade) FROM aluno;

Depois, para mostrar o nome de todos os alunos mais velhos, você pode utilizar uma consulta aninhada utilizando a cláusula WHERE para comparar a idade de cada aluno com a maior idade retornada pela consulta anterior:

SELECT nome FROM aluno
WHERE idade = (SELECT MAX(idade) FROM aluno);

Essa consulta irá selecionar o nome de todos os alunos cuja idade é igual a maior idade presente na tabela "aluno", que foi obtida pela subquery.

JOIN

O comando JOIN é usado na linguagem SQL para combinar linhas de duas ou mais tabelas baseadas em um valor comum entre elas. Ele é usado para criar resultados que incluem dados de várias tabelas, como se fossem uma única tabela.

Existem vários tipos de JOINs, mas os mais comuns são INNER JOIN, LEFT JOIN e RIGHT JOIN.