CREATE DATABASE BANCO2;
USE BANCO2;
CREATE TABLE funcionario(
codFuncionario int primary key auto_increment,
nome varchar(40) not null,
cpf char(14) not null,
genero enum('m','f') not null,
salario float default'0' not null
);
CREATE TABLE endereco (
codEndereco int primary key auto_increment,
rua varchar(60) not null,
bairro varchar(60) not null,
cidade varchar(60) not null,
codFuncionario int,
constraint fk_codFunc foreign key(codFuncionario) references funcionario (codFuncionario)
);
CREATE TABLE dependente (
codigoEndereco int primary key auto_increment not null,
nome varchar(60) not null,
grau varchar (10) not null,
telefone varchar(10) not null,
codFuncionario int,
constraint fk_codFuncd foreign key(codFuncionario) references funcionario (codFuncionario)
);
insert into funcionario values (null,'Rodrigo Ferreira','128.918.837-80','M',1500),
(null,'Rodrigo Vasconcelos','128.918.837-81','M',1500),
(null,'Rodrigo Guimarães','128.918.837-82','M',1500),
(null,'Carollyne Ferreira','128.918.837-83','F',2000),
(null,'Carollyne da Silva','128.918.837-84','F',2500);
insert into endereco values (null,'Sousa Caldas','Oswaldo Cruz','Rio de Janeiro',1),
(null,'Estrada da Portela','Madureira','Rio de Janeiro',2),
(null,'Carolina Machado','Oswaldo Cruz','Rio de Janeiro',3);
insert into dependente values (null,'Dependente1','Filho','2112345678',1),
(null,'Dependente2','Filha','2112345678',1),
(null,'Dependente3','Irmão','2112345678',1),
(null,'Dependente1','Filho','2112345678',2),
(null,'Dependente2','Filha','2112345678',2),
(null,'Dependente1','Filho','2112345678',3);
select funcionario.nome, dependente.nome, grau, telefone
from funcionario, dependente
where funcionario.codFuncionario = dependente.codFuncionario
and funcionario.codFuncionario = 1
order by dependente.nome desc;
-- inner join apresenta o mesmo resultado
select funcionario.nome, dependente.nome, grau, telefone
from funcionario inner join dependente
where dependente.codFuncionario = funcionario.codFuncionario
and funcionario.codFuncionario = 1
order by dependente.nome desc;
-- equi join apresenta o mesmo resultado
select funcionario.nome, dependente.nome, grau, telefone
from funcionario inner join dependente
using(codFuncionario)
where funcionario.codfuncionario = 1
order by dependente.nome desc;
-- equi join com between
select funcionario.nome, dependente.nome, grau, telefone
from funcionario inner join dependente
using(codFuncionario)
where cpf between '128.918.837-80' and '128.918.837-83'
order by funcionario.nome desc;
-- left join
select * from funcionario left join endereco on funcionario.codFuncionario = endereco.codFuncionario;
-- Inner join com 3 tabelas
select funcionario.codFuncionario, funcionario.nome, dependente.nome, grau, rua, bairro, cidade
from funcionario
inner join dependente on dependente.codFuncionario = funcionario.codFuncionario
inner join endereco on endereco.codFuncionario = funcionario.codFuncionario
order by funcionario.nome desc;
Como vou saber quando a sintaxe está realmente errada? A consulta está funcionando e o Workbench apresenta erro nas linhas. =(