comandos alias, joins, funções e Índice professor esp. diego andré sant’ana e-mail:...
TRANSCRIPT
Comandos Alias, Joins, Funções e Índice
Professor Esp. Diego André Sant’AnaE-mail: [email protected]: Banco de Dados IIprofessordiegosantana.wordpress.com
Alias(Apelido) Alias Você pode dar uma tabela ou uma coluna outro
nome usando um alias.Isto pode ser uma boa coisa a se fazer se o nome da tabela ou coluna que forem muito complexo
Alias de Colunas
SELECT id_estado AS idest,* FROM estado
Alias de Tabelas
SELECT e.id_estado FROM estado AS e WHERE e.id_estado=1
JOIN(JUNÇÃO) A palavra-chave JOIN é usada em uma instrução
SQL para consultar os dados de duas ou mais tabelas, com base em uma relação entre deter
Tabelas em um banco de dados são, muitas vezes, relacionadas umas às outras com as teclas.
Uma chave primária é uma coluna (ou uma combinação de colunas), com um valor único para cada linha. Cada chave primária valor deve ser exclusivo dentro da tabela.
O objetivo é vincular os dados em conjunto, em tabelas, sem repetição de todos os dados em cada tabela.
INNER JOIN(JUNÇÃO)
select * from clube.pessoa pes inner join
clube.pessoa_clube pescluon
pes.id_pessoa=pesclu.id_pessoainner join clube.clube clu on pesclu.id_clube=clu.id_clube
JOIN(JUNÇÃO)INNER JOIN: Regresso filas
quando há, pelo menos, um jogo em ambas as tabelas
SELECT * FROM estado est INNER JOIN cidade cid ON est.id_estado =
cid.id_estado
LEFT JOINLEFT JOIN: Retornar todas as
linhas da tabela à esquerda, mesmo quando não há jogos no quadro do direito
SELECT * FROM estado est LEFT JOIN cidade cid ON est.id_estado =
cid.id_estado
LEFT JOIN
select * from clube.pessoa pes left join
clube.pessoa_clube pescluon
pes.id_pessoa=pesclu.id_pessoa
left join clube.clube clu on
pesclu.id_clube=clu.id_clube
RIGHT JOINRIGHT JOIN: Retornar todas as
linhas da tabela à direita, mesmo se não houver jogos no quadro da esquerda
SELECT * FROM estado est RIGHT JOIN cidade cid ON est.id_estado =
cid.id_estado
RIGHT JOIN
select * from clube.pessoa pes right join
clube.pessoa_clube pescluon
pes.id_pessoa=pesclu.id_pessoa
right join clube.clube clu on
pesclu.id_clube=clu.id_clube
FULL JOINFULL JOIN: Regresso filas
quando há um jogo em um dos quadros
SELECT * FROM estado est FULL JOIN cidade cid ON est.id_estado =
cid.id_estado
UNION O operador UNION é usado para combinar o resultado-conjunto
de dois ou mais SELECT.Observe que cada SELECT declaração no âmbito da União devem ter o mesmo número de colunas.
As colunas devem ter também os tipos de dados semelhantes. Além disso, as colunas em cada SELECT declaração deve ser na mesma ordem.
SELECT SIGLA FROM estado est
UNION ALL
SELECT SIGLA FROM estado est
select nome_cliente from cliente union all select nome_pessoa from clube.pessoa
CROSS JOIN CROSS JOIN – Todos os dados da tabela à
esquerda de JOIN são cruzados com os dados da tabela à direita de JOIN por meio do CROSS JOIN, também conhecido como produto cartesiano. É possível cruzarmos informações de duas ou mais tabelas.
select NOME_CARRO,substring(nome_carro,0,4)|| lpad(generate_series::integer||'',4,'0') from auto.carro cross join
generate_series(1,1000,2)
CROSS JOIN CROSS JOIN – Todos os dados da tabela à
esquerda de JOIN são cruzados com os dados da tabela à direita de JOIN por meio do CROSS JOIN, também conhecido como produto cartesiano. É possível cruzarmos informações de duas ou mais tabelas.
select NOME_CARRO,substring(nome_carro,0,4)|| lpad(generate_series::integer||'',4,'0') from auto.carro cross join
generate_series(1,1000,2)
Função LPADCompleta a esquerda com o
caracter que desejar ate a quantidade informada lpad(valor, qtd caracter, caracter a ser colocado)
lpad(valor||’’,4,'0')
Função RPADCompleta a direita com o caráter
que desejar ate a quantidade informada rpad(valor, qtd caracter, caracter a ser colocado)
rpad(valor||’’,4,'0')
CRIAR A TABELA CARRO
CREATE TABLE auto.carro( id_carro bigserial NOT NULL, nome_carro character varying(100), placa character varying(7) NOT NULL, CONSTRAINT carro_pkey PRIMARY
KEY (id_carro))]
INSERT DA TABELA CARRO INSERT INTO auto.carro(nome_carro, placa) VALUES ('FUSCA', 'HTT'||
lpad(random()||'',4,'0')); INSERT INTO auto.carro(nome_carro, placa) VALUES ('UNO', 'HTT'||lpad(random()||'',4,'0')); INSERT INTO auto.carro(nome_carro, placa) VALUES ('SENTRA', 'HTT'||
lpad(random()||'',4,'0')); INSERT INTO auto.carro(nome_carro, placa) VALUES ('CIVIC', 'HTT'||lpad(random()||'',4,'0')); INSERT INTO auto.carro(nome_carro, placa) VALUES ('PALIO', 'HTT'||
lpad(random()||'',4,'0')); INSERT INTO auto.carro(nome_carro, placa) VALUES ('FUSCA', 'HTT'||
lpad(random()||'',4,'0')); INSERT INTO auto.carro(nome_carro, placa) VALUES ('CITY', 'HTT'||lpad(random()||'',4,'0')); INSERT INTO auto.carro(nome_carro, placa) VALUES ('S10', 'HTT'||lpad(random()||'',4,'0')); INSERT INTO auto.carro(nome_carro, placa) VALUES ('RANGER', 'HTT'||
lpad(random()||'',4,'0')); INSERT INTO auto.carro(nome_carro, placa) VALUES ('SILVERADO', 'HTT'||
lpad(random()||'',4,'0')); INSERT INTO auto.carro(nome_carro, placa) VALUES ('SANDERO', 'HTT'||
lpad(random()||'',4,'0')); INSERT INTO auto.carro(nome_carro, placa) VALUES ('CLIO', 'HTT'||lpad(random()||'',4,'0')); INSERT INTO auto.carro(nome_carro, placa) VALUES ('MERIVA', 'HTT'||
lpad(random()||'',4,'0'));
INSERT DA TABELA CARRO --COMO FAZER UPDATE UTILIZANDO O RAMDOM E LPAD
update auto.carro set placa='HTT'||lpad(random()::integer||'',4,'0')
--SELECT BASICO
SELECT * FROM AUTO.CARRO
--SELECT COM CROSS JOIN select NOME_CARRO,substring(nome_carro,0,4)||
lpad(generate_series::integer||'',4,'0') from auto.carro cross join generate_series(1,1000,2)
INSERT CRUZADO UTILIZANDO A TABELA CARRO
INSERT INTO CARRO (NOME_CARRO,PLACA)
( select NOME_CARRO, substring(nome_carro,0,4)|| lpad(generate_series::integer||'',4,'0') from auto.carro cross join
generate_series(1,1000,2) )
INDEXAR UM CAMPOCREATE [ UNIQUE ] INDEX
[ CONCURRENTLY ] [ name ] ON table [ USING method ] ( { column | ( expression ) } [ opclass ] [ ASC | DESC ] [ NULLS { FIRST | LAST } ] [, ...] ) [ WITH ( storage_parameter = value [, ... ] ) ] [ TABLESPACE tablespace ] [ WHERE predicate ]
INDEXAR UM CAMPOCREATE INDEX ON AUTO.CARRO
((lower(NOME_CARRO)));
CREATE UNIQUE INDEX PLACA_IDX ON AUTO.CARRO (PLACA);
DROP INDEX PLACA_IDX
INDEXAR UM CAMPOCREATE INDEX idx_carro ON
AUTO.CARRO (NOME_CARRO , PLACA);
CREATE INDEX ON AUTO.CARRO ((lower(NOME_CARRO)));
CREATE UNIQUE INDEX PLACA_IDX ON AUTO.CARRO (PLACA);
DROP INDEX PLACA_IDX
Tipos de Índices O PostgreSQL suporta atualmente quatro tipos de índices:
B-tree (árvore B), R-tree (árvore R), Hash e GiST.
B-tree -> é o tipo padrão (assume quando não indicamos). São índices que podem tratar consultas de igualdade e de faixa, em dados que podem ser classificados.
Indicado para consultas com os operadores: <, <=, =, >=, >. Também pode ser utilizado com LIKE, ILIKE, ~ e ~*.
R-tree -> tipo mais adequado a dados espaciais. Adequado para consultas com os operadores: <<, &<, &>, >>, @, ~=, &&.
Hash ->indicados para consultas com comparações de igualdade simples. É desencorajado seu uso. Em seu lugar recomenda-se o B-tree. GiST ->
CRIAR UMA TABELA CREATE TABLE ifms.aluno(ID_ALUNO SERIAL,NOME_ALUNO CHARACTER VARYING(250),MAE CHARACTER VARYING(250),PAI CHARACTER VARYING(250),DATA_NASCIMENTO DATE,DESCRICAO TEXT,FOTO BYTEA )
CARREGAR UMA TABELA CARREGUE A TABELA COM 15
DADOS, DEPOIS CRIE UM SCRIPT PARA GERAR DADOS ATE MAIS OU MENOS 150000 MIL REGISTROS.
INSERTS INSERT INTO ifms.aluno(nome_aluno, mae, pai, data_nascimento, descricao, foto) VALUES ('DIEGO','ELIANA' ,'JOSE', '1987-11-30'::DATE,'TRABALHA NO IFMS',NULL) ,('JOAO','ANA' ,'JOAQUIM', '1967-11-30'::DATE,'TRABALHA NO IFMS',NULL) ,('PEDRO','JESSICA' ,'MOISES', '1958-11-10'::DATE,'TRABALHA NO IFMS',NULL) ,('MARIA','JOAQUINA' ,'JOAO', '1951-11-10'::DATE,'TRABALHA NO IFMS',NULL) ,('MARILIA','JOSEFINA' ,'PEDRO', '1957-11-10'::DATE,'TRABALHA NO IFMS',NULL) ,('GABRIEL','RENATA' ,'PAULO', '1910-11-10'::DATE,'TRABALHA NO IFMS',NULL) ,('CLAUDEMIR','ANA' ,'LUIZ', '1910-11-10'::DATE,'TRABALHA NO IFMS',NULL) ,('RODRIGO','JOSEFINA' ,'CLAUDEMIR', '1950-11-10'::DATE,'TRABALHA NO
IFMS',NULL) ,('ANGELICA','MARCIA' ,'MARIA', '1957-01-10'::DATE,'TRABALHA NO IFMS',NULL) ,('LUCAS','JOSEFINA' ,'JESUS', '1957-11-10'::DATE,'TRABALHA NO IFMS',NULL) ,('NATHALIA','JOSEFINA' ,'DELMIR', '1995-08-10'::DATE,'TRABALHA NO IFMS',NULL) ,('IVANALDO','CASSIMA' ,'RONIVAN', '1991-11-10'::DATE,'TRABALHA NO
IFMS',NULL) ,('CRISTIANA','BEATRIZ' ,'VITOR', '1981-01-10'::DATE,'TRABALHA NO IFMS',NULL);
GENERATE SERIESselect * from
generate_series(1,4,1) SELECT nome_aluno, mae, pai, data_nascimento+generate_series
, descricao from ifms.aluno cross joingenerate_series(1,2000,1)
INSERTINSERT INTO ifms.aluno (nome_aluno, mae,
pai, data_nascimento, descricao ) ( SELECT nome_aluno, mae, pai, data_nascimento+generate_series,
descricao from ifms.aluno cross joingenerate_series(1,2000,1) )
FAÇA TESTES COM AS PESQUISASCARREGUE A TABELA COM 15
DADOS, DEPOIS CRIE UM SCRIPT PARA GERAR DADOS ATE MAIS OU MENOS 150000 MIL REGISTROS.