Banco de Dados Distribuídosilmerio/GES013/estSbd7aSQL_DML_basicas.pdf · UFU/FACOM Página 10...
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