Sei sulla pagina 1di 4

create database teste_join

use teste_join

create table cargo


(cod_cargo int,
nome_cargo varchar(50),
constraint pk_cargo
primary key (cod_cargo),
constraint uq_cargo_nome_cargo
unique(nome_cargo)
)

insert cargo values (1, 'Presidente'),


(2, 'Gerente'),
(3, 'Supervisor'),
(4, 'Revisor'),
(5, 'Redator'),
(6, 'Secret�ria')

select *from cargo order by 1

create table funcionario


(
cod_func int,
cod_cargo int,
nome_func varchar(50),
sal_func decimal(10,2) default 0,
constraint pk_funcionario --tabela na qual quero que seja chave
prim�ria (primary key)
primary key (cod_func),
constraint fk_funcionario_cargo --chave secund�ria fazendo relacionamento da
tabela funcionario com a tabela cargo
foreign key (cod_cargo)
references cargo,
constraint ch_funcionario_sal_func --informar que n�o pode haver valor negativo
(constraint do tipo cheque)
check (sal_func >= 0)
)

insert funcionario values (1, 5, 'Luis Pereira', 3000),


(2, 5, 'Ant�nio Almeida', 3000),
(3, 3, 'Donizete Ribeiro', 2800),
(4, 3, 'Gabriela Moura', 4700),
(5, 2, 'Em�lio Duarte', 5000),
(6, 1, 'Carolina Ferreira', 9000),
(7, null, 'Jos� da Silva', 3100)

select *from funcionario order by 1


create table dependente
(
cod_dep int,
cod_func int,
nome_dep varchar(50),
constraint pk_dependente
primary key (cod_dep),
constraint fk_dependente_funcionario
foreign key (cod_func)
references funcionario
)

insert dependente values (1, 1, 'Mariana Pereira'),


(2, 1, 'Camila Pereira'),
(3, 1, 'Eduardo Pereira'),
(4, 2, 'Cl�vis Almeida'),
(5, 2, 'Durval Almeida'),
(6, 5, 'Fabiana Duarte'),
(7, 5, 'Joana Duarte')

select * from dependente order by 1

select * from cargo, funcionario, dependente --comando join na forma antiga


(juntar tabelas)

select nome_cargo, nome_func, nome_dep from cargo, funcionario, dependente

select cargo.cod_cargo, funcionario.cod_func,


cod_dep from cargo, funcionario, dependente --listando o campo por exemplo
(cargo.cod_cargo) dizendo a tabela antes e o campo que quer listar

select c.cod_cargo, f.cod_func, d.cod_dep


from cargo c, funcionario f, dependente d

-- cross join --

select c.cod_cargo, f.cod_func, d.cod_dep


from cargo c cross join funcionario f cross join
dependente d

-- inner join --

select c.*, f.* from cargo c inner join funcionario f


on c.cod_cargo = f.cod_cargo

select f.*, d.* from funcionario f inner join dependente d


on f.cod_func = d.cod_func

select f.*, d.* from funcionario f inner join dependente d


on f.cod_func = d.cod_func where f.cod_func = 2 --forma nova com join

--ou

select f.*, d.* from funcionario f inner join dependente d


on f.cod_func = d.cod_func and f.cod_func = 2

select f.*, d.* from funcionario f, dependente d


where f.cod_func = d.cod_func and f.cod_func =2 --forma antiga do select acima

select f.*, d.* from funcionario f inner join dependente d


on f.cod_func = d.cod_func where d.nome_dep like '%du%'

-- left join --

select f.*, d.* from funcionario f left join dependente d


on f.cod_func = d.cod_func

select c.*, f.* from cargo c left join funcionario f


on c.cod_cargo = f.cod_cargo

select c.* from cargo c left join funcionario f


on c.cod_cargo = f.cod_cargo where f.cod_func is null

select c.* from cargo c left join funcionario f


on c.cod_cargo = f.cod_cargo where f.cod_func is not null

-- neste caso abaixo n�o precisa de JOIN --

select f.* from funcionario f where f.cod_cargo is null

-- right join --

select * from cargo c right join funcionario f


on c.cod_cargo = f.cod_cargo

select c.*, f.* from funcionario f right join cargo c


on f.cod_cargo = c.cod_cargo

-- full join --

select c.*, f.* from funcionario f full join cargo c


on c.cod_cargo = f.cod_cargo
--n�o � full join (extra)--
select c.* from cargo c left join funcionario f
on c.cod_cargo = f.cod_cargo
left join dependente d
on f.cod_func = d.cod_func where d.cod_dep is null

--para quando duas linhas se repetem, enxergar uma linha somente


select distinct c.* from cargo c left join funcionario f
on c.cod_cargo = f.cod_cargo
left join dependente d
on f.cod_func = d.cod_func where d.cod_dep is null

select distinct c.* from cargo c inner join funcionario f


on c.cod_cargo = f.cod_cargo
left join dependente d
on f.cod_func = d.cod_func where d.cod_dep is null

select distinct c.* from cargo c inner join funcionario f


on c.cod_cargo = f.cod_cargo
inner join dependente d
on f.cod_func = d.cod_func

Potrebbero piacerti anche