Banco de Dados Distribuídosilmerio/GES013/estSbd7aSQL_DML_basicas.pdf · UFU/FACOM Página 10...

Post on 12-Aug-2020

2 views 0 download

Transcript of Banco de Dados Distribuídosilmerio/GES013/estSbd7aSQL_DML_basicas.pdf · UFU/FACOM Página 10...

GES013 - Sistema de Banco de DadosSQL/DML no PostgreSQL

Parte 1 – Introdução e Consultas Básicas

Ilmério Reis da Silvailmerio arroba ufu.brwww.facom.ufu.br/~ilmerio/GES013UFU/FACOM/BCC

UFU/FACOM Página 2

SQL/DML

Def. A SQL/DML*(Data Manipulation Language) é um subconjunto da SQL usada para consultar, inserir, atualizar e excluir dados de tabelas do BD.

* Alguns autores separam as consultas em SQL/DQL (Data Query Language)

UFU/FACOM Página 3

SQL/DML - Principais Comandos

• INSERT – inserção de linhas;• DELETE – exclusão de linhas;• UPDATE – atualização de dados;• SELECT – consulta a tabelas;

OBS: serão mostradas características do padrão SQL implementadas no PostgreSQL

UFU/FACOM Página 4

SQL/DML - INSERT

INSERT INTO tabela [ ( coluna [, ...] ) ] { DEFAULT VALUES

|VALUES ( { expressão | DEFAULT } [, ...] ) [, ...]

| comando-select }

UFU/FACOM Página 5

SQL/DML - INSERT – Exemplo 1

INSERT INTO tabela VALUES (expressão [, ...] )

INSERT INTO employee

VALUES ('John', 'B', 'Smith', '123456789',DATE '1965-01-09', '731 Fondren, Houston, TX','M', 30000, '333445555', 5);

Compatibilidade de tipos:

employee (fname VARCHAR (15) NOT NULL,

minit CHAR, lname VARCHAR (15) NOT NULL,

ssn CHAR(9) PRIMARY KEY, bdate DATE,

address VARCHAR(30), sex CHAR CHECK (sex IN (’M’, ’F’)),

salary DECIMAL(10,2), superssn CHAR(9), dno INT NOT NULL)

UFU/FACOM Página 6

SQL/DML- INSERT - Exemplo 2

INSERT INTO tabela ( coluna [, ...] ) VALUES (expressão [, ...] )

INSERT INTO employee(fname, minit, lname, ssn, dno)

VALUES ('John', 'B', 'Smith', '123456789', 5);

UFU/FACOM Página 7

SQL/DML – INSERT – Exemplo 3

INSERT INTO tabela comando-select

INSERT INTO works_onSELECT ssn, pnumber, 0 FROM employee, project;

UFU/FACOM Página 8

SQL/DML– DELETE

DELETE FROM tabela [ [ AS ] alias ]

[ WHERE condição

| WHERE CURRENT OF cursor_name ]

DELETE FROM employee WHERE ssn = '123456789'

OBS: o uso de cursores será visto posteriormente

UFU/FACOM Página 9

SQL/DML– UPDATE

UPDATE tabela [ [ AS ] alias ]

SET {coluna = { expressão | DEFAULT }

| ( coluna [, ...] ) = ( { expressão | DEFAULT } [, ...] ) } [, ...]

[ WHERE condição

| WHERE CURRENT OF cursor_name ]

OBS: o uso de cursores será visto posteriormente

UFU/FACOM Página 10

SQL/DML– UPDATE – Exemplo 1

UPDATE employee SET address = 'Av. Joao Naves de Avila, 2121', salary = salary * 1.5WHERE ssn = '123456789'

UFU/FACOM Página 11

SQL/DML– UPDATE – Exemplo 2

UPDATE works_onSET (pno, hours) = (1, 10)WHERE essn='123456789';

UFU/FACOM Página 12

SQL/DML– SELECT

SELECT [ALL | DISTINCT] * | expressão [ AS nome_saida ] [, ...] FROM item_from [, ...] [ WHERE condição ] [ GROUP BY expressão [, ...] ] [ HAVING condição [, ...] ] [ { UNION | INTERSECT | EXCEPT } [ ALL ] select ] [ ORDER BY expressão [ ASC | DESC | USING operador ] [ NULLS { FIRST | LAST } ] [, ...] ] [ FOR { UPDATE | SHARE } [ OF nome_tabela [, ...] ] [ NOWAIT ] [...] ]

UFU/FACOM Página 13

SQL/DML–Consultas básicas, aninhadas, com funções de agregação e recursivas

Considerando os diversos parâmetros do comando SELECT, para efeito didático, vamos dividir nosso estudo em:

consultas básicas: no WHERE não existe outro SELECT

consultas aninhadas: no WHERE existe outro SELECT

consultas com tabelas de junção e funções de agregação: tipos de junção, funções: máximo, soma, média, etc

consultas recursivas: tabelas temporárias e fecho transitivo.

UFU/FACOM Página 14

SQL/DML

CONSULTAS BÁSICAS

UFU/FACOM Página 15

SQL/DML–SELECT-FROM-WHERE

Formato de comando SELECT para consultas básicas:

SELECT lista-de-atributos FROM lista-de-tabelas WHERE condição

OBS:– condições sem cláusula SELECT;– os exemplos a seguir seguem a numeração de EN e estão

baseados no BD company;

UFU/FACOM Página 16

SQL/DML–SELECT-FROM-WHERE (Esquema Company)

UFU/FACOM Página 17

SQL/DML–SELECT-FROM-WHERE (Uma instância de Company)

UFU/FACOM Página 18

SQL/DML - Seleção/projeção

QO) Listar a data de nascimento e o endereço dos empregados com nome : John B Smith

UFU/FACOM Página 19

SQL/DML- Exemplo Q0

Q0) Listar a data de nascimento e o endereço dos empregados com nome : John B. Smith.

SELECT bdate, address

FROM employee

WHERE fname=’John’ AND minit=’B’ AND lname=’Smith’;

UFU/FACOM Página 20

SQL/DML– Seleção/projeção/junção

Q1) Listar o nome e endereço dos empregados que trabalham no departamento ’Research’

UFU/FACOM Página 21

SQL/DML – Exemplo Q1

Q1) Listar o nome e endereço dos empregados que trabalham no departamento ’Research’

SELECT fname, minit, lname, address

FROM employee, department

WHERE dno=dnumber AND dname= ‘Research’

UFU/FACOM Página 22

SQL/DML- Junção com duas condições

Q2) Para todo projeto localizado em ’Stafford’, listar o número do projeto, o número do departamento que o controla e o último nome, endereço e data de nascimento do gerente do departamento.

UFU/FACOM Página 23

SQL/DML- Exemplo Q2

Q2) Para todo projeto localizado em ’Stafford’, listar o número do projeto, o número do departamento que o controla e o último nome, endereço e data de nascimento do gerente do departamento.

SELECT pnumber, dnum, lname, address, bdate

FROM project, department, employee

WHERE plocation=’Stafford’ AND dnum=dnumber AND ssn=mgrssn

UFU/FACOM Página 24

SQL/DML-Ambiguidade de nomes de atributos

Suponha que DNUMBER e NAME são os nomes dos atributos DNO e LNAME em EMPLOYEE, respectivamente. Além disso, suponha que NAME é o nome do atributo DNAME em DEPARTMENT.

Então:

employee(fname, minit, name, ssn, bdate, address, sex, salary, superssn, dnumber)

department(name, dnumber, mgrssn, mgrstartdate)

UFU/FACOM Página 25

SQL/DML – Qualificando atributos

Q1a) Listar o nome e endereço dos empregados que trabalham no departamento ’Research’ considerando os esquemas abaixo

employee(fname, minit, name, ssn, bdate, address, sex, salary, superssn, dnumber)

department(name, dnumber, mgrssn, mgrstartdate)

OBS:

ALTER TABLE employee RENAME COLUMN lname TO name;

UFU/FACOM Página 26

SQL/DML- Exemplo Q1a

Q1a) Listar o nome e endereço dos empregados que trabalham no departamento ’Research’ considerando os novos esquemas

SELECT fname, minit, employee.name

FROM employee, department

WHERE employee.dnumber=department.dnumber AND department.name=’Research’

UFU/FACOM Página 27

SQL/DML – Apelidos de Tabelas

Q8) Para cada empregado, liste o seu primeiro e o seu último nome acompanhados do último nome de seu supervisor.

UFU/FACOM Página 28

SQL/DML – Exemplo Q8

Q8) Para cada empregado, liste o seu primeiro e o seu último nome acompanhados do último nome de seu supervisor.

SELECT e.fname, e.lname, s.lname

FROM employee AS e, employee AS s

WHERE e.superssn=s.ssn

UFU/FACOM Página 29

SQL/DML – Apelidos de tabelas

Q1b') Listar o nome e o endereço dos empregados que trabalham no departamento ’Research’ considerando as novas tabelas employee e department e usando apelidos

UFU/FACOM Página 30

SQL/DML - Exemplo Q1b

Q1b') Listar o nome e o endereço dos empregados que trabalham no departamento ’Research’ considerando as novas tabelas employee e department e usando apelidos

SELECT fname, minit, e.name, address

FROM employee e, department d

WHERE e.dnumber=d.dnumber AND d.name=’Research’

UFU/FACOM Página 31

SQL/DML-Exemplo Q1c–Omitindo WHERE e uso do * para consulta sem projeção

Qlc') Listar todos os valores de atributos de todos os empregados

SELECT * FROM employee

UFU/FACOM Página 32

SQL/DML-Ex. Q10b – Produto Cartesiano

Q1Ob) Listar o produto cartesiano de empregados e departamentos

SELECT *

FROM employee, department

UFU/FACOM Página 33

SQL/DML - Tabela x relação// multset ou bags x set // Cláusula DISTINCT

Q11a) Listar todos os salários distintos

SELECT DISTINCT salary

FROM employee

UFU/FACOM Página 34

SQL/DML – Cláusula UNION

Q4) Listar os números dos projetos que envolvam um

empregado cujo último nome é ’Wong’ sendo que o empregado deve ser trabalhador ou gerente do departamento que controla o projeto.

UFU/FACOM Página 35

SQL/DML – Exemplo Q4

Q4) Listar os números dos projetos que envolvam um empregado cujo último nome é ’Wong’ sendo que o empregado deve ser trabalhador ou gerente do departamento que controla o projeto.

(SELECT DISTINCT pnumber

FROM project, department, employee

WHERE dnum=dnumber AND msgrssn=ssn AND lname=’Wong’)

UNION

(SELECT DISTINCT pnumber

FROM works_on, employee

WHERE essn=ssn AND lname=’Wong’)

UFU/FACOM Página 36

SQL/DML – Cláusula LIKE

Q12) Listar o nome de todo empregado cujo endereço está em Houston, Texas

UFU/FACOM Página 37

SQL/DML – Exemplo Q12

Q12) Listar o nome de todo empregado cujo endereço está em Houston, Texas

SELECT fname, minit, lname

FROM employee

WHERE address LIKE ’%Houston%TX%’

UFU/FACOM Página 38

SQL/DML – Like usando underline _

Q12a) Listar o nome de todos os empregados nascidos na década de 50

UFU/FACOM Página 39

SQL/DML - Exemplo Q12a

Q12a) Listar o nome de todos os empregados nascidos na década de 50

SELECT fname, minit, lnameFROM employeeWHERE CAST(bdate AS TEXT) LIKE ’_ _ 5%’

UFU/FACOM Página 40

SQL/DML – Expressões

Q13) Listar o nome e os salários resultantes de um aumento de 10% para os funcionários do projeto ’Productx’

UFU/FACOM Página 41

SQL/DML – Exemplo Q13

Q13) Listar o nome e os salários resultantes de um aumento de 10% para os funcionários do projeto ’Productx’

SELECT fname, minit, lname, salary*1.1 AS NewSalary

FROM employee, project, works_on

WHERE ssn=essn AND pno=pnumber AND pname=’ProductX'

UFU/FACOM Página 42

SQL/DML – Cláusula BETWEEN

Q14) Listar todos os empregados no departamento 5 cujo salário está entre 30000 e 40000

UFU/FACOM Página 43

SQL/DML – Exemplo Q14

Q14) Listar todos os empregados no departamento 5 cujo salário está entre 30000 e 40000

SELECT *

FROM employee

WHERE dno=’5’ AND salary BETWEEN 30000 AND 40000

UFU/FACOM Página 44

SQL/DML – Cláusula ORDER BY

Q 15) Listar os empregados e projetos em que eles estão trabalhando, ordenados pelo departamento e, dentro de cada departamento, ordenado pelo último e primeiro nome

UFU/FACOM Página 45

SQL/DML – Exemplo Q15

Q 15) Listar os empregados e projetos em que eles estão trabalhando, ordenados pelo departamento e, dentro de cada departamento, ordenado pelo último e primeiro nome

SELECT dno, fname, lname, pno

FROM employee, works on

WHERE essn=ssn

ORDER BY dno, fname, lname

UFU/FACOM Página 46

SQL/DML e o PostgreSQL

EXERCÍCIOS DE IMPLEMENTAÇÃO

=> Lab – Exemplos de consultas simples no esquema company

=> Lab – Exercícios de Consultas – Parte 1

UFU/FACOM Página 47

Bibliografia

• [EN] Capítulos 4,5• [SK] Capítulos 3,4,5 • [RG] Capítulos 5• [IRS] Material de Apoio na página da disciplina

UFU/FACOM Página 48

FIM – SQL/DML e o PostgreSQL

Parte 1