35
21/06/16 1 STRUCTURED QUERY LANGUAGE (SQL) Sistemas de Informações Geográficas INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA SUL DE MINAS GERAIS Câmpus Inconfidentes O QUE É SQL É uma linguagem normalizada para DEFINIÇÃO, ACESSO, MANIPULAÇÃO e CONTROLE de Base de Dados Relacionais. Na maioria dos SGBD, esta linguagem pode ser utilizada: Interativamente; Embutida em linguagens de programação.

STRUCTURED QUERY LANGUAGE (SQL) · SQL junções múltiplas SELECT e.id, e.nome, d.id, d.nome FROM empregado e RIGHT OUTER JOIN departamento d ON e.id_dept = d.id • Pergunta: •

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: STRUCTURED QUERY LANGUAGE (SQL) · SQL junções múltiplas SELECT e.id, e.nome, d.id, d.nome FROM empregado e RIGHT OUTER JOIN departamento d ON e.id_dept = d.id • Pergunta: •

21/06/16

1

STRUCTURED QUERY LANGUAGE (SQL) Sistemas de Informações Geográficas

INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA SUL DE MINAS GERAIS Câmpus Inconfidentes

O QUE É SQL

•  É uma linguagem normalizada para DEFINIÇÃO, ACESSO, MANIPULAÇÃO e CONTROLE de Base de Dados Relacionais.

•  Na maioria dos SGBD, esta linguagem pode ser utilizada: •  Interativamente; •  Embutida em linguagens de programação.

Page 2: STRUCTURED QUERY LANGUAGE (SQL) · SQL junções múltiplas SELECT e.id, e.nome, d.id, d.nome FROM empregado e RIGHT OUTER JOIN departamento d ON e.id_dept = d.id • Pergunta: •

21/06/16

2

EXEMPLO Interatividade

EXEMPLO Embutida em Linguagens de Programação

Page 3: STRUCTURED QUERY LANGUAGE (SQL) · SQL junções múltiplas SELECT e.id, e.nome, d.id, d.nome FROM empregado e RIGHT OUTER JOIN departamento d ON e.id_dept = d.id • Pergunta: •

21/06/16

3

•  1970: Edgar Frank Codd define o Modelo Relacional

•  1974: IBM desenvolve o projecto SYSTEM/R com a linguagem SEQUEL

•  1979: É lançado o primeiro SGBD comercial (ORACLE)

•  1981: É lançado o SGBD INGRES

•  1983: IBM anuncia o DB2

•  1986, 1987: É ratificada a norma SQL que fica conhecida como SQL-86 (ANSI X3.135-1986 e ISO 9075:1987)

HISTÓRIA

•  1989: É ratificada a norma SQL-89 quer pela ANSI quer pela ISO

•  1992: É ratificada a norma: SQL2

•  1999: É ratificada a norma SQL1999, anteriormente conhecida como SQL3

•  2006: SQL:2006, define a forma como o SQL pode ser usado em conjunção com o XML (ANSI/ISO/IEC 9075-14:2006 )

HISTÓRIA

Page 4: STRUCTURED QUERY LANGUAGE (SQL) · SQL junções múltiplas SELECT e.id, e.nome, d.id, d.nome FROM empregado e RIGHT OUTER JOIN departamento d ON e.id_dept = d.id • Pergunta: •

21/06/16

4

OPERAÇÕES DA ÁLGEBRA RELACIONAL

•  Operações derivadas da teoria de conjuntos •  União •  Interseção •  Diferença •  Produto Cartesiano

•  Operações Relacionais Especiais •  Seleção •  Projeção •  Junção (Natural)

Page 5: STRUCTURED QUERY LANGUAGE (SQL) · SQL junções múltiplas SELECT e.id, e.nome, d.id, d.nome FROM empregado e RIGHT OUTER JOIN departamento d ON e.id_dept = d.id • Pergunta: •

21/06/16

5

Page 6: STRUCTURED QUERY LANGUAGE (SQL) · SQL junções múltiplas SELECT e.id, e.nome, d.id, d.nome FROM empregado e RIGHT OUTER JOIN departamento d ON e.id_dept = d.id • Pergunta: •

21/06/16

6

Page 7: STRUCTURED QUERY LANGUAGE (SQL) · SQL junções múltiplas SELECT e.id, e.nome, d.id, d.nome FROM empregado e RIGHT OUTER JOIN departamento d ON e.id_dept = d.id • Pergunta: •

21/06/16

7

Page 8: STRUCTURED QUERY LANGUAGE (SQL) · SQL junções múltiplas SELECT e.id, e.nome, d.id, d.nome FROM empregado e RIGHT OUTER JOIN departamento d ON e.id_dept = d.id • Pergunta: •

21/06/16

8

ESTRUTURA BÁSICA DO SQL

SQL é baseada em operações de conjuntos e de álgebra relacional com algumas modificações e extensões

•  Uma consulta SQL básica tem a forma:

•  An representam os Atributos das Tabelas Tn e Pn os Predicados de seleção.

SELECT A1, A2, A3, ..., An FROM T1, T2, ..., Tn WHERE P1 AND P2 OR P3;

ESQUEMA RELACIONAL

EMPREGADO ( id, nome, data_admissao, id_cat, id_dept, id_chefe )

DEPARTAMENTO ( id, nome, localizacao)

CATEGORIA ( id, cargo, salario )

Page 9: STRUCTURED QUERY LANGUAGE (SQL) · SQL junções múltiplas SELECT e.id, e.nome, d.id, d.nome FROM empregado e RIGHT OUTER JOIN departamento d ON e.id_dept = d.id • Pergunta: •

21/06/16

9

BASE DE DADOS RELACIONAL

EMPREGADO

CATEGORIA DEPARTAMENTO id nome localidade

1 Contabilidade Lisboa

2 Vendas Porto

3 Recursos Humanos Coimbra

... ... ...

id cargo salario

1 Senior 5000

2 Pleno 3000

3 Junior 2000

... ... ...

id nome data_admissao id_cat id_dept id_chefe

1 José da Silva 13/01/2005 3 3 2

2 Rui Barbosa 01/12/1991 1 3 2

3 Pedro Vaz de Caminha 04/06/1984 1 2 20

... ... ... ... ... ...

20 Maria de Lourdes de Souza 23/11/2000 2 2 2

... ... ... ... ... ...

O COMANDO SQL SELECT te.nome, tc.salario, td.nome

FROM empregado AS te, departamento AS td, categoria AS tc

WHERE te.nome = ‘Rui Barbosa’

AND te.id_cat = tc.id

AND td.id = te. id_dept

•  Qual o salário do empregado Rui Barbosa e o nome do departamento onde ele trabalha

A PERGUNTA

Page 10: STRUCTURED QUERY LANGUAGE (SQL) · SQL junções múltiplas SELECT e.id, e.nome, d.id, d.nome FROM empregado e RIGHT OUTER JOIN departamento d ON e.id_dept = d.id • Pergunta: •

21/06/16

10

CARACTERÍSTICAS

•  Linguagem não procedimental em que se especifica O QUÊ e não COMO

Existe uma clara abstração perante a estrutura física dos dados, isto é, não é necessário especificar caminhos de acesso nem algoritmos de pesquisa física

•  Operações sobre estruturas lógicas

As operações são efetuadas sobre conjuntos de dados (tabelas), não sendo necessário (nem possível) manipular linha-a-linha

COMPONENTES DDL (Data Definition Language) - é uma linguagem de programação de computador utilizada para a definição de estrutura de dados, especialmente esquemas de Bancos de Dados.

DML (Data Manipulation Language) - é uma linguagem de programação de computador utilizada para a recuperação, remoção, inclusão e modificação de Bancos de Dados. O SQL é um exemplo não procedural (ex: SELECT, INSERT, DELETE e UPDATE).

TML/TCL (Transaction Manipulation Language) – é uma linguagem de programação que é um subconjunto da SQL. Ela controla processamento transacionais no Banco de Dados.

DCL (Data Control Language) – é uma linguagem de programação que é um subconjunto da SQL. Ela controla o acesso aos dados de um Banco de Dados.

Page 11: STRUCTURED QUERY LANGUAGE (SQL) · SQL junções múltiplas SELECT e.id, e.nome, d.id, d.nome FROM empregado e RIGHT OUTER JOIN departamento d ON e.id_dept = d.id • Pergunta: •

21/06/16

11

SQL manipulação dos dados (DML)

SELECT è Acesso aos dados INSERT UPDATE è Manipulação dos dados DELETE

SELECT [ DISTINCT ] coluna, ... | * FROM tabela

•  O símbolo * é utilizado quando se pretende selecionar todos os atributos da tabela especificada na clausula FROM.

•  DISTINCT é aplicado a todas as colunas especificadas na clausula SELECT e elimina as repetições existentes.

SQL clausula SELECT e FROM

Page 12: STRUCTURED QUERY LANGUAGE (SQL) · SQL junções múltiplas SELECT e.id, e.nome, d.id, d.nome FROM empregado e RIGHT OUTER JOIN departamento d ON e.id_dept = d.id • Pergunta: •

21/06/16

12

id nome data_admissao id_cat id_dept id_chefe

1 José da Silva 13/01/2005 3 3 1

2 Rui Barbosa 01/12/1991 1 3 1

3 Pedro Vaz de Caminha 04/06/1984 1 3 1

... ... ... ... ... ...

20 Maria de Lourdes de Souza 23/11/2000 2 2 2

... ... ... ... ... ...

SELECT nome FROM empregado

SQL projeção

EMPREGADO

SELECT * FROM categoria WHERE salario > 2000

SQL restrição

CATEGORIA

id cargo salario

1 Senior 5000

2 Pleno 3000

3 Junior 2000

... ... ...

Page 13: STRUCTURED QUERY LANGUAGE (SQL) · SQL junções múltiplas SELECT e.id, e.nome, d.id, d.nome FROM empregado e RIGHT OUTER JOIN departamento d ON e.id_dept = d.id • Pergunta: •

21/06/16

13

id nome data_admissao id_cat id_dept id_chefe

1 José da Silva 13/01/2005 3 3 1

2 Rui Barbosa 01/12/1991 1 3 1

3 Pedro Vaz de Caminha 04/06/1984 1 3 1

... ... ... ... ... ...

20 Maria de Lourdes de Souza 23/11/2000 2 2 2

... ... ... ... ... ...

SELECT * FROM empregado, categoria WHERE empregado.id_cat = categoria.id

SQL juncão (produto cartesiano)

CATEGORIA id cargo salario

1 Senior 5000

2 Pleno 3000

3 Junior 2000

... ... ...

EMPREGADO

id nome data_admissao id_cat id_dept id_chefe

1 José da Silva 13/01/2005 3 3 1

2 Rui Barbosa 01/12/1991 1 3 1

3 Pedro Vaz de Caminha 04/06/1984 1 3 1

... ... ... ... ... ...

20 Maria de Lourdes de Souza 23/11/2000 2 2 2

... ... ... ... ... ...

SELECT * FROM empregado, categoria WHERE empregado.id_cat = categoria.id AND categoria.cargo = “Pleno”

SQL projeção, junção e restrição

CATEGORIA id cargo salario

1 Senior 5000

2 Pleno 3000

3 Junior 2000

... ... ...

EMPREGADO

Page 14: STRUCTURED QUERY LANGUAGE (SQL) · SQL junções múltiplas SELECT e.id, e.nome, d.id, d.nome FROM empregado e RIGHT OUTER JOIN departamento d ON e.id_dept = d.id • Pergunta: •

21/06/16

14

SELECT * FROM empregado, categoria WHERE empregado.id_cat = categoria.id AND categoria.cargo = “Pleno”

SQL aliases de tabelas (apelido)

SELECT * FROM empregado e, categoria c WHERE e.id_cat = c.id AND c.cargo = “Pleno”

•  Particularmente útil quando se pretende usar a mesma tabela com significados diferentes.

ANTES DEPOIS

EMPREGADO

CATEGORIA DEPARTAMENTO id nome localidade

1 Contabilidade Lisboa

2 Vendas Porto

3 Recursos Humanos Coimbra

... ... ...

id cargo salario

1 Senior 5000

2 Pleno 3000

3 Junior 2000

... ... ...

id nome data_admissao id_cat id_dept id_chefe

1 José da Silva 13/01/2005 3 3 1

2 Rui Barbosa 01/12/1991 1 3 1

3 Pedro Vaz de Caminha 04/06/1984 1 3 1

... ... ... ... ... ...

20 Maria de Lourdes de Souza 23/11/2000 2 2 2

... ... ... ... ... ...

SQL junções múltiplas

Page 15: STRUCTURED QUERY LANGUAGE (SQL) · SQL junções múltiplas SELECT e.id, e.nome, d.id, d.nome FROM empregado e RIGHT OUTER JOIN departamento d ON e.id_dept = d.id • Pergunta: •

21/06/16

15

SELECT c.cargo, e.nome, c.salario, d.nome FROM empregado e, departamento d, categoria c WHERE e.id_dept = d.id AND e.id_cat = c.id

•  Pergunta:

•  Para cada categoria listar o nome dos empregados, salário e repectivo departamento

•  Comando:

SQL junções múltiplas

SELECT e.id, e.nome, d.id, d.nome FROM empregado e RIGHT OUTER JOIN departamento d ON e.id_dept = d.id

•  Pergunta:

•  Quais os departamentos e respectivos empregados

•  Comando:

SQL junções “outer” (Outer Join)

Page 16: STRUCTURED QUERY LANGUAGE (SQL) · SQL junções múltiplas SELECT e.id, e.nome, d.id, d.nome FROM empregado e RIGHT OUTER JOIN departamento d ON e.id_dept = d.id • Pergunta: •

21/06/16

16

SQL união

•  Suponha que com as seguintes tabelas:

•  CLIENTE ( nome, municipio)

•  FORNECEDOR ( nome, municipio)

•  Deseja-se listar os nomes e municípios seja dos clientes, seja dos fornecedores

SELECT nome, municipio FROM cliente

UNION SELECT nome, municipio FROM fornecedor

SQL intersecção

•  Suponha que com as seguintes tabelas:

•  CLIENTE ( nome, municipio)

•  FORNECEDOR ( nome, municipio)

•  Deseja-se listar os nomes e municípios dos clientes que também são fornecedores

SELECT nome, municipio FROM cliente

INTERSECT SELECT nome, municipio FROM fornecedor

Page 17: STRUCTURED QUERY LANGUAGE (SQL) · SQL junções múltiplas SELECT e.id, e.nome, d.id, d.nome FROM empregado e RIGHT OUTER JOIN departamento d ON e.id_dept = d.id • Pergunta: •

21/06/16

17

SQL diferença

•  Suponha que com as seguintes tabelas:

•  CLIENTE ( nome, municipio)

•  FORNECEDOR ( nome, municipio)

•  Deseja-se listar os nomes e municípios dos clientes que não são fornecedores

SELECT nome, municipio FROM cliente

EXCEPT SELECT nome, municipio FROM fornecedor

SQL a clausula WHERE

SELECT [ DISTINCT ] coluna, ...| * FROM tabela, [tabela,....] WHERE condição-de-pesquisa

•  Uma condição-de-pesquisa é basicamente uma colecção de predicados, combinados através dos operadores booleanos AND, OR, NOT e parêntesis.

Page 18: STRUCTURED QUERY LANGUAGE (SQL) · SQL junções múltiplas SELECT e.id, e.nome, d.id, d.nome FROM empregado e RIGHT OUTER JOIN departamento d ON e.id_dept = d.id • Pergunta: •

21/06/16

18

SQL predicados

•  Um predicado de comparação (WHERE nome = ´Manuel Silva´)

•  Um predicado de BETWEEN (WHERE id_cat BETWEEN 1 AND 5)

•  Um predicado de LIKE (WHERE nome LIKE ' M%’)

•  Um teste de valor nulo (WHERE cargo IS NULL)

•  Um predicado de IN (WHERE id_cat IN (1,2))

Os predicados podem ser:

SQL predicados

•  Os predicados podem ser utilizados num contexto estático, sendo avaliados com base em valores constantes.

Ex: WHERE id_cat IN (1,2)

•  Podem também ser avaliados com base em valores dinâmicos, a retirar da base de dados

Ex: WHERE id_cat IN (SELECT id_cat FROM CATEGORIA)

SUBQUERY

Page 19: STRUCTURED QUERY LANGUAGE (SQL) · SQL junções múltiplas SELECT e.id, e.nome, d.id, d.nome FROM empregado e RIGHT OUTER JOIN departamento d ON e.id_dept = d.id • Pergunta: •

21/06/16

19

SQL predicados utilizados em SUBQUERIES

Predicados de comparação

Predicado IN

Predicados ALL ou ANY

Predicado EXISTS

SELECT cod_emp, nome_emp FROM empregado WHERE id_dept = ( SELECT id_dept FROM empregado WHERE nome = 'Carlos Castro’)

SQL predicados utilizados em SUBQUERIES (exemplos)

SELECT id, nome FROM empregado WHERE id_dept = ( SELECT id_dept FROM empregado WHERE nome = 'Carlos Castro’)

Qual o código e nome dos empregados que trabalham no mesmo departamento que o empregado 'Carlos Castro'

Page 20: STRUCTURED QUERY LANGUAGE (SQL) · SQL junções múltiplas SELECT e.id, e.nome, d.id, d.nome FROM empregado e RIGHT OUTER JOIN departamento d ON e.id_dept = d.id • Pergunta: •

21/06/16

20

SQL predicados utilizados em SUBQUERIES (exemplos)

Quais os nomes dos empregados que trabalham nos departamentos de Lisboa

SELECT id, nome FROM empregado

WHERE id_dept IN ( SELECT id FROM departamento WHERE localidade = 'Lisboa’ )

Quais os empregados cujo salário é superior a todos os salários dos empregados do

departamento 1

SELECT nome FROM empregado, categoria WHERE empregado.id_cat = categoria.id AND salario > ALL ( SELECT salario FROM empregado, categoria WHERE empregado.id_cat = categoria.id AND id_dept = 1 )

SQL predicados utilizados em SUBQUERIES (exemplos)

Page 21: STRUCTURED QUERY LANGUAGE (SQL) · SQL junções múltiplas SELECT e.id, e.nome, d.id, d.nome FROM empregado e RIGHT OUTER JOIN departamento d ON e.id_dept = d.id • Pergunta: •

21/06/16

21

Quais os empregados cujo salário é superior a algum

dos salários dos empregados do departamento 1

SELECT nome FROM empregado, categoria WHERE empregado.id_cat = categoria.id AND salario > ANY ( SELECT salario FROM empregado, categoria WHERE empregado.id_cat = categoria.id AND id_dept = 1 )

SQL predicados utilizados em SUBQUERIES (exemplos)

A condição é VERDADEIRA se o resultado da subquery não for vazio

Nome dos departamentos que têm empregados (pelo menos um)

SELECT nome FROM departamento WHERE EXISTS (SELECT * FROM empregado WHERE departamento.id = empregado.id_dept )

SQL predicados utilizados em SUBQUERIES (exemplos)

Page 22: STRUCTURED QUERY LANGUAGE (SQL) · SQL junções múltiplas SELECT e.id, e.nome, d.id, d.nome FROM empregado e RIGHT OUTER JOIN departamento d ON e.id_dept = d.id • Pergunta: •

21/06/16

22

A condição é VERDADEIRA se o resultado da subquery for vazio

Nome dos departamentos que não têm empregados

SELECT nome FROM departamento WHERE NOT EXISTS ( SELECT * FROM empregado WHERE departamento.id = empregado.id_dept )

SQL predicados utilizados em SUBQUERIES (exemplos)

SQL a clausula ORDER BY

A clausula ORDER BY é usada para ordenar os dados referentes a uma ou mais colunas.

É a última clausula a ser especificada

SELECT [ DISTINCT ] coluna, ... | * FROM tabela WHERE condição ORDER BY coluna [ASC | DESC ], …

Page 23: STRUCTURED QUERY LANGUAGE (SQL) · SQL junções múltiplas SELECT e.id, e.nome, d.id, d.nome FROM empregado e RIGHT OUTER JOIN departamento d ON e.id_dept = d.id • Pergunta: •

21/06/16

23

SQL a clausula ORDER BY (exemplo)

SELECT * FROM empregado ORDER BY nome

Por padrão, os dados são ordenados ascendentemente.

Caracter (Char) Numérico (Number) Data (Date)

Z

A

9

0

Recentes

Menos Recentes

SQL funções agregadoras

SUM = �

COUNT(*) = 10

AVG = SUM / COUNT

MAX = ---------->

100 200 12,5 450 700 100 120 350 890 400

Salário

MIN = ---------->

1 2 3 4 5 6 7 8 9 10

Page 24: STRUCTURED QUERY LANGUAGE (SQL) · SQL junções múltiplas SELECT e.id, e.nome, d.id, d.nome FROM empregado e RIGHT OUTER JOIN departamento d ON e.id_dept = d.id • Pergunta: •

21/06/16

24

SQL funções agregadoras (exemplos)

SELECT MAX(salario) FROM categoria

SELECT MIN(salario) FROM categoria

SELECT COUNT(*)

FROM categoria

SELECT SUM(salario)

FROM categoria, empregado

WHERE empregado.id_cat = categoria.id

SELECT AVG(salario)

FROM categoria, empregado WHERE empregado.id_cat = categoria.id

1  120 1  250 1  150 1  300 1  250 2  100 2  150 2  230 3  300 3  400 3  200 3  160

SQL funções agregadoras (exemplos)

id_dept e salario

Para cada departamento qual o

salário minímo

160

100

120

SELECT id_dept, MIN(salario) FROM empregado, categoria WHERE empregado.id_cat = categoria.id GROUP BY id_dept

Page 25: STRUCTURED QUERY LANGUAGE (SQL) · SQL junções múltiplas SELECT e.id, e.nome, d.id, d.nome FROM empregado e RIGHT OUTER JOIN departamento d ON e.id_dept = d.id • Pergunta: •

21/06/16

25

1  A 120 1  A 250 1  B 150 1  B 300 1  B 250 2  A 100 2  B 150 2  B 230 3  B 300 3  B 400 3  C 200 3  C 160

SQL funções agregadoras (exemplos)

id_dept id salario

Para cada categoria de cada departamento qual

o salário minímo

160

100

120

SELECT e.id_dept, c.id, MIN(c.salario) FROM empregado e, categoria c WHERE e.id_cat = c.id GROUP BY e.id_dept, c.id

150

150

300

Qual o nome do empregado que tem o maior salário

SELECT empregado.id, nome FROM empregado, categoria WHERE empregado.id_cat = categoria.id AND salario = ( SELECT MAX(salario) FROM categoria, empregado WHERE empregado.id_cat = categoria.id )

SQL funções agregadoras (exemplos)

Page 26: STRUCTURED QUERY LANGUAGE (SQL) · SQL junções múltiplas SELECT e.id, e.nome, d.id, d.nome FROM empregado e RIGHT OUTER JOIN departamento d ON e.id_dept = d.id • Pergunta: •

21/06/16

26

Para cada departamento qual o empregado que tem o maior salário

SELECT e.id_dept, e.id, e.nome FROM empregado e, categoria c WHERE e.id_cat = c.id

AND (id_dept, salario) IN ( SELECT id_dept, MAX(salario) FROM categoria c, empregado e WHERE e.id_cat = c.id GROUP BY e.id_dept)

SQL funções agregadoras (exemplos)

SQL a clausula HAVING

WHERE OU HAVING A cláusula WHERE nunca contém funções agregadoras

A cláusula HAVING deve sempre conter funções agregadoras

SELECT [ DISTINCT ] coluna, ... | * FROM tabela, ... WHERE condição GROUP BY coluna, ... HAVING condição

Page 27: STRUCTURED QUERY LANGUAGE (SQL) · SQL junções múltiplas SELECT e.id, e.nome, d.id, d.nome FROM empregado e RIGHT OUTER JOIN departamento d ON e.id_dept = d.id • Pergunta: •

21/06/16

27

SQL a clausula HAVING (exemplos)

ID_DEPT SALARIO Para cada departamento. Qual o salário mínimo

Seleccionar apenas os departamentos cujo salário médio seja superior a 200

160

100

120

SELECT e.id_dept, MIN(c.salario) FROM empregado e, categoria c WHERE e.id_cat = c.id GROUP BY e.id_dept

HAVING AVG (c.salario) > 200

AVG = 214

AVG = 160

AVG = 265

1  120 1  250 1  150 1  300 1  250 2  100 2  150 2  230 3  300 3  400 3  200 3  160

SQL manipulação dos dados

INSERÇÕES, ATUALIZAÇÕES e REMOÇÕES

INSERT INTO tabela_nome [ (coluna, coluna, ....)] VALUES (valor, valor, ...) | comando SELECT

UPDATE tabela_nome SET lista_de_atribuições [WHERE condição]

DELETE FROM tabela_nome [WHERE condição]

Page 28: STRUCTURED QUERY LANGUAGE (SQL) · SQL junções múltiplas SELECT e.id, e.nome, d.id, d.nome FROM empregado e RIGHT OUTER JOIN departamento d ON e.id_dept = d.id • Pergunta: •

21/06/16

28

SQL manipulação dos dados: Exemplo (INSERT)

INSERT INTO EMP_HIST (id, nome, data_admissao) SELECT id, nome, data_admissao

FROM empregado WHERE data_admissao > ‘01-01-1991'

Cópia de Valores de outras Tabelas

INSERT INTO departamento VALUES (4,’Logística',’Lisboa')

DEPARTAMENTO id nome localidade

1 Contabilidade Lisboa

2 Vendas Porto

3 Recursos Humanos Coimbra

... ... ...

DEPARTAMENTO id nome localidade

1 Contabilidade Lisboa

2 Vendas Porto

3 Recursos Humanos Coimbra

4 Logística Lisboa

... ... ...

SQL manipulação dos dados: Exemplo (UPDATE)

UPDATE empregado SET id_chefe = 2 WHERE nome = 'Bernardo Bento'

Atualizar o código do chefe do empregado Bernardo Bento

Page 29: STRUCTURED QUERY LANGUAGE (SQL) · SQL junções múltiplas SELECT e.id, e.nome, d.id, d.nome FROM empregado e RIGHT OUTER JOIN departamento d ON e.id_dept = d.id • Pergunta: •

21/06/16

29

SQL manipulação dos dados: Exemplo (DELETE)

Apagar todos os empregados que trabalham no departamento 2

DELETE FROM empregado WHERE id_dept = 2

Page 30: STRUCTURED QUERY LANGUAGE (SQL) · SQL junções múltiplas SELECT e.id, e.nome, d.id, d.nome FROM empregado e RIGHT OUTER JOIN departamento d ON e.id_dept = d.id • Pergunta: •

21/06/16

30

POSTGIS

O PostGIS é um projeto opensource para adicionar suporte a objetos geográficos ao banco de dados relacional PostgreSQL. De fato, o PostGIS “espacializa” os dados do servidor PostgreSQL, permitindo que ele seja usado como um banco de dados espacial para os sistemas de informação geográfica (SIG).

POSTGIS alguns operadores topológicos

ST_Distance(geometry, geometry) – retorna a distância cartesiana entre duas geometrias;

ST_DWithin(geometry, geometry, float) – retorna “verdadeiro” se as geometrias estão dentro da distância especifica em relação a outra geometria;

ST_Equals(geometry, geometry) – retorna “verdadeiro” se as geometrias forem espacialmente iguais;

ST_Disjoint(geometry, geometry) – retorna “verdadeiro” se as geometrias forem espacialmente separadas;

Page 31: STRUCTURED QUERY LANGUAGE (SQL) · SQL junções múltiplas SELECT e.id, e.nome, d.id, d.nome FROM empregado e RIGHT OUTER JOIN departamento d ON e.id_dept = d.id • Pergunta: •

21/06/16

31

POSTGIS alguns operadores topológicos

ST_Intersects(geometry, geometry) – retorna “verdadeiro” se as geometrias espacialmente se intersectarem;

ST_Touches(geometry, geometry) – retorna “verdadeiro” se as geometrias espacialmente se tocam;

ST_Crosses(geometry, geometry) – retorna “verdadeiro” se as geometrias forem espacialmente se cruzam;

ST_Within(geometry A, geometry B) – retorna “verdadeiro” se a geometria A está espacialmente dentro da geometria B;

POSTGIS alguns operadores topológicos

ST_Overlaps(geometry, geometry) – retorna “verdadeiro” se as geometrias espacialmente se sobrepõem;

ST_Contains(geometry A, geometry B) – retorna “verdadeiro” se as geometria A espacialmente contem a geometria B;

ST_Covers(geometry A, geometry B) – retorna “verdadeiro” se nenhum ponto da geometria B está fora da geometria A;

ST_CoveredBy(geometry A, geometry B) – retorna “verdadeiro” se nenhum ponto da geometria A está fora da geometria B;

Page 32: STRUCTURED QUERY LANGUAGE (SQL) · SQL junções múltiplas SELECT e.id, e.nome, d.id, d.nome FROM empregado e RIGHT OUTER JOIN departamento d ON e.id_dept = d.id • Pergunta: •

21/06/16

32

POSTGIS algumas funções de processamento

ST_Centroid(geometry) – retorna o centroide da geometria como um ponto;

ST_Area(geometry) – retorna a área de uma geometria do tipo poligono;

ST_Length(geometry) – retorna o comprimento de uma geometria do tipo linha considerando o sistema de referencia associado a geometria;

ST_Difference(geometry A, geometry B) – retorna a parte da geometria A que não interage com a geometria B;

ST_Union(geometry, geometry) – retorna uma geometria que representa o conjunto de pontos de das duas geometrias;

OPERAÇÕES

Page 33: STRUCTURED QUERY LANGUAGE (SQL) · SQL junções múltiplas SELECT e.id, e.nome, d.id, d.nome FROM empregado e RIGHT OUTER JOIN departamento d ON e.id_dept = d.id • Pergunta: •

21/06/16

33

POSTGIS exemplo

POSTGIS exemplo

SELECT d2.nome_munic FROM municipios d1, municipios d2 WHERE ST_Touches(d1.the_geom, d2.the_geom)

AND (d2.nome_munic <> 'Congonhal') AND (d1.nome_munic = 'Congonhal');

Page 34: STRUCTURED QUERY LANGUAGE (SQL) · SQL junções múltiplas SELECT e.id, e.nome, d.id, d.nome FROM empregado e RIGHT OUTER JOIN departamento d ON e.id_dept = d.id • Pergunta: •

21/06/16

34

POSTGIS exemplo SELECT m.nome_munic FROM municipios m, vias v WHERE ST_Intersects( ST_Buffer (v.the_geom, 1000), m.the_geom)

AND v.gid = 884;

POSTGIS exemplo

SELECT m1.nome_munic FROM municipios m1, municipios m2 WHERE (ST_Distance(ST_Centroid(m1.the_geom),

ST_Centroid(m2.the_geom) ) < 26000)

AND m1.nome_munic <> 'Estiva’ AND m2.nome_munic = 'Estiva' ORDER BY m1.nome_munic;

Page 35: STRUCTURED QUERY LANGUAGE (SQL) · SQL junções múltiplas SELECT e.id, e.nome, d.id, d.nome FROM empregado e RIGHT OUTER JOIN departamento d ON e.id_dept = d.id • Pergunta: •

21/06/16

35

DÚVIDAS

e-mail: [email protected]

Fonte: BOLSTAD (2012).