Post on 11-Oct-2020
GBC043 - Sistemas de Banco de DadosSQL/DML no PostgreSQL
Ilmério Reis da Silvailmerio@facom.ufu.brwww.facom.ufu.br/~ilmerio/sbdUFU/FACOM/BCC
Página 2
Prgrama Teórico/Prático - SQL
• Linguagem SQL– Comandos de criação e eliminação de tabelas– Especificação de restrições em bancos de dados– Evolução de esquemas de banco de dados– Comandos de inserção de tuplas em tabelas– Comandos de alteração e supressão de tuplas– Comandos de consulta (básicos e complexos)– Definição de visões
Álgebra Relacional Cálculo Relacional
UFU/FACOM Página 3
SQL/DML
Def. A SQL/DML(Data Manipulation Language) é um subconjunto da SQL usada para recuperar, inserir, atualizar e suprimir dados de tabelas do BD.
UFU/FACOM Página 4
SQL/DML - Principais Comandos • INSERT – inserção de linhas;• DELETE – supressão de linhas;• UPDATE – atualização de dados;• SELECT – recuperação de tabelas;
OBS: serão mostradas características do padrão SQL implementadas pelo PostgreSQL, omitindo funcionalidades adicionais e destacando eventuais omissões.
UFU/FACOM Página 5
SQL/DML - INSERT
INSERT INTO tabela [ ( coluna [, ...] ) ] { DEFAULT VALUES
|VALUES ( { expressão | DEFAULT } [, ...] ) [, ...]
| comando-select }
UFU/FACOM Página 6
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 7
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 8
SQL/DML – INSERT – Exemplo 3
INSERT INTO tabela comando-select
INSERT INTO works_onSELECT ssn, pnumber, 0 FROM employee, project;
UFU/FACOM Página 9
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 10
SQL/DML– UPDATE
UPDATE tabela [ [ AS ] alias ] SET {coluna = { expresssã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 11
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 12
SQL/DML– UPDATE – Contra Exemplo
UPDATE works_onSET (pno, hours) =
(SELECT pnumber, 10 FROM project WHERE pnumber = 1)
WHERE essn='123456789';OBS: o padrão permite associação de uma lista de
atributos com uma tupla resultante da saída de uma consulta, mas isto não foi implementado pelo PostgreSql 8.3, onde as expressões devem ser independentes. Logo o comando acima não funciona no PostgreSql 8.3 (teste isso nas versões mais recentes)
UFU/FACOM Página 13
SQL/DML– UPDATE – Exemplo 2
UPDATE works_onSET (pno, hours) = (1, 10)WHERE essn='123456789';
UFU/FACOM Página 14
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 15
SQL/DML–Consultas básicas e complexas Considerando os diversos parâmetros do comando SELECT, para efeito didático, vamos dividir nosso estudo em:
consultas básicas: na condição do WHERE não existe outro SELECT
consultas complexas: são consultas aninhadas, onde na condição do SELECT existe outra cláusula SELECT.
UFU/FACOM Página 16
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 17
SQL/DML–SELECT-FROM-WHERE (Esquema Company)
UFU/FACOM Página 18
SQL/DML–SELECT-FROM-WHERE (Uma instância de Company)
UFU/FACOM Página 19
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 20
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 employeeWHERE fname=’John’
AND minit=’B’ AND lname=’Smith’;
UFU/FACOM Página 21
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 22
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 23
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 24
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, bdateFROM project, department, employeeWHERE plocation=’Stafford’
AND dnum=dnumber AND ssn=mgrssn
UFU/FACOM Página 25
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 26
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)
UFU/FACOM Página 27
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 28
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 29
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.lnameFROM employee AS e, employee AS sWHERE e.superssn=s.ssn
UFU/FACOM Página 30
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 31
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, addressFROM employee e, department dWHERE e.dnumber=d.dnumber
AND d.name=’Research’
UFU/FACOM Página 32
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 33
SQL/DML-Ex. Q10b – Produto Cartesiano
Q1Ob) Listar o produto cartesiano de empregados e departamentos
SELECT *FROM employee, department
UFU/FACOM Página 34
SQL/DML - Tabela x relação// multset ou bags x set // Cláusula DISTINCT
Q11a) Listar todos os salários distintos
SELECT DISTINCT salaryFROM employee
UFU/FACOM Página 35
SQL/DML – Cláusula UNION
Q4) Listar todos os números de projetos que envolvam umempregado cujo último nome é ’Smith’ sendo que o
empregado deve sertrabalhador ou gerente do departamento que controla o projeto.
UFU/FACOM Página 36
SQL/DML – Exemplo Q4
Q4) Listar todos os números de projetos que envolvam umempregado cujo último nome é ’Smith’ sendo que o empregado deve ser
trabalhador ou gerente do departamento que controla o projeto.(SELECT DISTINCT pnumberFROM project, department, employeeWHERE dnum=dnumber AND msgrssn=ssn AND lname=’Smith’)UNION(SELECT DISTINCT pnumberFROM works_on, employeeWHERE essn=ssn AND lname=’Smith’)
UFU/FACOM Página 37
SQL/DML – Cláusula LIKE
Q12) Listar o nome de todo empregado cujo endereço está em Houston, Texas
UFU/FACOM Página 38
SQL/DML – Exemplo Q12
Q12) Listar o nome de todo empregado cujo endereço está em Houston, Texas
SELECT fname, minit, lnameFROM employeeWHERE address LIKE ’%Houston%TX%’
UFU/FACOM Página 39
SQL/DML – Like usando underline _
Q12a) Listar o nome de todos os empregados nascidos na década de 50
UFU/FACOM Página 40
SQL/DML - Exemplo Q12a
Q12a) Listar o nome de todos os empregados nascidos na década de 50
SELECT fname, minit, lnameFROM employeeWHERE bdate LIKE ’_ _ 5%’
UFU/FACOM Página 41
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 42
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 NewSalaryFROM employee, project, works_onWHERE ssn=essn AND pno=pnumber
AND pname=’ProductX'
UFU/FACOM Página 43
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 44
SQL/DML – Exemplo Q14
Q14) Listar todos os empregados no departamento 5 cujo salário está entre 30000 e 40000
SELECT *FROM employeeWHERE dno=’5’
AND salary BETWEEN 30000 AND 40000
UFU/FACOM Página 45
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 46
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, pnoFROM employee, works onWHERE essn=ssnORDER BY dno, fname, lname
UFU/FACOM Página 47
SQL/DML - Consultas Complexas
• consultas aninhadas e comparação de conjuntos• tabelas obtidas de junção• funções de agregação• cláusulas “group by” e having
UFU/FACOM Página 48
SQL/DML- Cláusula IN (pertinência) A consulta Q4 abaixo pode ser reformulada, removendo a
cláusula UNION e incluindo a cláusula INQ4) Listar todos os números de projetos que envolvam umempregado cujo último nome é ’Smith’ sendo que o
empregado deve ser trabalhador ou gerente do departamento que controla o projeto.
(SELECT DISTINCT pnumber FROM project, department, employeeWHERE dnum=dnumber AND msgrssn=ssn AND lname=’Smith’)
UNION(SELECT DISTINCT pnumber FROM project, works_on, employeeWHERE pno=pnumber AND essn=ssn AND lname=’Smith’)
UFU/FACOM Página 49
SQL/DML Exemplo Q4a
SELECT DISTINCT pnumber FROM projectWHERE pnumber IN
(SELECT pnumber FROM project, department, employeeWHERE dnum=dnumber AND mgrssn=ssn
AND lname=’Smith’)OR pnumber IN(SELECT pno FROM works on,employeeWHERE essn=ssn AND lname=’Smith’);
UFU/FACOM Página 50
SQL/DML – Comparando conjuntos com ALL, ANY ou SOME
Outras cláusulas para comparação de conjuntos: ALLANY ou SOME (são sinônimos)
Ex: salary > ALL (SELECT salary FROM ...); salary < ANY (SELECT salary FROM ...); salary > SOME (SELECT salary FROM ...);
UFU/FACOM Página 51
SQL/DML – Ambiguidade em consultas aninhadas – (apelidos de tabelas)
Q16) Listar o nome dos empregados com dependente(s) de mesmo ’first name’ e sexo que o empregado
UFU/FACOM Página 52
SQL/DML – Exemplo Q16
Q16) Listar o nome dos empregados com dependente(s) de mesmo ’first name’ e sexo que o empregado
SELECT e.fname,e.lnameFROM employee as eWHERE e.ssn IN
(SELECT essn FROM dependent as dWHERE fname=dependent_name
AND e.sex=d.sex);
UFU/FACOM Página 53
SQL/DML – Substituindo subconsulta por junção
Q16a) Listar o nome dos empregados com dependente(s) de mesmo ’first name’ e sexo que o empregado
SELECT e.fname,e.lnameFROM employee as e, dependent as dWHERE ssn=essn
AND fname=dependent_name AND e.sex=d.sex);
UFU/FACOM Página 54
SQL/DML – Q16b - FUNÇÃO EXISTS - consultas aninhadas correlacionadas
Q16b) Listar o nome dos empregados com dependente(s) de
mesmo ’first name’ e sexo que o empregado
SELECT e.fname,e.lnameFROM employee as eWHERE EXISTS
(SELECT * FROM dependent dWHERE e.ssn=d.essn AND e.fname=d.dependent_name AND e.sex=d.sex);
UFU/FACOM Página 55
SQL/DML– FUNÇÃO NOT EXISTS - consultas aninhadas correlacionadas
Q6) Listar os nomes de empregados sem dependentes
UFU/FACOM Página 56
SQL/DML – Exemplo Q6
Q6) Listar os nomes de empregados sem dependentes
SELECT fname,lnameFROM employeeWHERE NOT EXISTS (SELECT *
FROM dependent WHERE ssn=essn);
UFU/FACOM Página 57
SQL/DML – Aninhamento em dois níveis
Q3b) Listar o nome dos empregados que trabalham em todos os projetos controlados pelo departamento número 4
OBS: Observe a expressão todos no enunciado da consulta. Esta é a divisão da álgebra relacional, que será estudada posteriormente. Em SQL a divisão pode ser especificada de diversas formas.
UFU/FACOM Página 58
SQL/DML – Exemplo Q3b
Q3b) Listar o nome dos empregados que trabalham em todos os projetos controlados pelo departamento número 4
SELECT lname, fname FROM employeeWHERE NOT EXISTS (SELECT * FROM project WHERE dnum=4
AND NOT EXISTS (SELECT * FROM works_on
WHERE essn=ssn AND pnumber=pno));
UFU/FACOM Página 59
SQL/DML – Alternativas para divisão em SQL
Alternativas de especificação de divisão em SQL: Usando cláusulas NOT EXISTS e IN Usando cláusula NOT EXISTS e EXCEPT Usando cláusula FOREACH e EXISTS(não
implementada no PostgreSql 8.3)
UFU/FACOM Página 60
SQL/DML - divisão usando cláusulas NOT EXISTS e IN
SELECT lname, fname FROM employeeWHERE NOT EXISTS (SELECT * FROM works_on w1 WHERE (w1.pno IN (SELECT pnumber FROM
project WHERE dnum=4)) AND NOT EXISTS
(SELECT * FROM works_on w2 WHERE w2.essn=ssn AND w2.pno=w1.pno));
UFU/FACOM Página 61
SQL/DML - divisão usando cláusulas NOT EXISTS e EXCEPT
SELECT lname, fname FROM employee eWHERE NOT EXISTS
(SELECT pnumber FROM project WHERE dnum=4EXCEPT (SELECT pno FROM works_on w
WHERE w.essn=e.ssn))
UFU/FACOM Página 62
SQL/DML - divisão usando cláusulas FOREACH e EXISTS
SELECT lname, fname FROM employeeWHERE FOREACH
(SELECT pnumber FROM project WHERE dnum=4)EXISTS (SELECT * FROM works_on
WHERE essn=ssn AND pno=pnumber));
ATENÇÃO: este comando não funciona no PostgreSql 8.3
UFU/FACOM Página 63
SQL/DML – Tabelas obtidas de junção
Q1a) Listar o nome e endereço dos empregados que trabalham no departamento ’Research’
UFU/FACOM Página 64
SQL/DML – Exemplo Q1a
Q1a) Listar o nome e endereço dos empregados que trabalham no departamento ’Research’
SELECT fname, minit, lname, address FROM (employee JOIN department ON dno=dnumber)
WHERE dname=’Research’
UFU/FACOM Página 65
SQL/DML - Junção Natural
Na junção natural iguala-se atributos de mesmo nome
Qlb)Listar o nome e endereço dos empregados que trabalham no departamento ’Research’
SELECT fname, name, addressFROM (employee NATURAL JOIN
(department AS dept (dname, dno, mssn, msdate)))
WHERE dname= ’Research’
UFU/FACOM Página 66
SQL/DML - OUTER JOIN
A cláusula {LEFT | FULL | RIGHT} OUTER JOIN mantêm no resultado todas as tuplas da tabela da esquerda,
das duas tabelas ou da tabela da direita da junção, respectivamente, inserindo NULL quando não há casamento (matching)
Q8b)Para cada empregado, liste o seu primeiro e o seu último nome acompanhado do último nome de seu supervisor, memo se o empregado não tiver supervisor, liste seu nome
UFU/FACOM Página 67
SQL/DML – Exemplo Q8b
Q8b)Para cada empregado, liste o seu primeiro acompanhado do primeiro nome de seu supervisor, memo se o empregado não tiver supervisor, liste seu nome
SELECT e.fname as employee_name, s.fname as supervisor_name
FROM (employee AS e LEFT OUTER JOINemployee AS s ON e.superssn =s.ssn)
UFU/FACOM Página 68
SQL/DML – Exemplo Q8b'Q8b')Liste o primeiro nome do supervisor e o primeiro nome
de seus supervisionado, ordenado pelo primeiro. Mesmo se o empregado não for supervisor de ninguém, liste seu nome na primeira coluna e mesmo se o empregado não tiver supervisor, liste seu nome na segunda coluna.
SELECT s.fname as supervisor_name, e.fname as employee_name FROM (employee AS e FULL OUTER JOIN
employee AS s ON e.superssn =s.ssn)ORDER BY 1
UFU/FACOM Página 69
SQL/DML - Junções aninhadas
Q2a) Para todo projeto localizado em ’Stafford’, listar o número do projeto, o número do departamento que o controla e o último nome do gerente do departamento
UFU/FACOM Página 70
SQL/DML – Exemplo Q2a
Q2a) Para todo projeto localizado em ’Stafford’, listar o número do projeto, o número do departamento que o controla e o último nome do gerente do departamento
SELECT pnumber, dnum, lname FROM ((project JOIN department ON dnum=dnumber (JOIN employee ON mgrssn=ssn)) WHERE plocation = ’Stafford’
UFU/FACOM Página 71
SQL/DML- Funções de agregação
• COUNT• SUM• MAX• MIN• AVG• etc.
UFU/FACOM Página 72
SQL/DML – Exemplo Q19
Q19) Listar a soma de salários de todos os empregados,o maior salário e a média de salários
SELECT SUM(salary), MAX(salary), MIN(salary) AVG(salary)FROM employee;
UFU/FACOM Página 73
SQL/DML – Exemplo Q20
Q20) Listar a soma de salários, o maior salário e a média de salários, somente para funcionários do departamento 'Research'
SELECT SUM(salary), MAX(salary), MIN(salary), AVG(salary)FROM employee, departmentWHERE dno=dnumber AND dname='Research';
UFU/FACOM Página 74
SQL/DML – Exemplos Q21 e Q23
Q21) Listar o número de empregadosSELECT COUNT(*) FROM employee;
Q23) Listar o número de salários distintos
SELECT COUNT(DISTINCT salary) FROM employee;
UFU/FACOM Página 75
SQL/DML - Funções de agregação em subconsultas
Q5) Listar o nome dos empregados que têm dois ou mais dependentes
SELECT lname, fnameFROM employeeWHERE (SELECT COUNT(*)
FROM dependentWHERE essn=ssn) >= 2;
UFU/FACOM Página 76
SQL/DML - Cláusulas group by
Q24) Listar para cada departamento seu número, a quantidade de empregados e a média salarial de seus empregados.
UFU/FACOM Página 77
SQL/DML – Exemplo Q24
Q24) Listar para cada departamento seu número, a quantidade de empregados e a média salarial de seus empregados.
SELECT dnumber, COUNT(*), AVG(salary)FROM department, employeeWHERE dno=dnumberGROUP BY dnumber;
OBS: o agrupamento deve incluir todas as colunas da projeção que não incluem função de agregação
UFU/FACOM Página 78
SQL/DML – Group by com duas colunas
Q25) Listar para cada projeto seu número, nome e a quantidade de empregados que trabalham no projeto.
UFU/FACOM Página 79
SQL/DML – Exemplo Q25
Q25) Listar para cada projeto seu número, nome e a quantidade de empregados que trabalham no projeto.
SELECT pnumber, pname, COUNT(*) FROM project, works_on WHERE pno=pnumber GROUP BY pnumber, pname;
UFU/FACOM Página 80
SQL/DML - Cláusulas group by e having
Q26) Listar para cada projeto onde trabalham mais de doisempregados seu número e a quantidade de empregados que
trabalham no projeto
SELECT pnumber, pname, COUNT(*) FROM project, works_on WHERE pno=pnumberGROUP BY pnumber, pnameHAVING COUNT (* )> 2;
UFU/FACOM Página 81
SQL/DML - Cláusulas group by e consultas aninhadas com cláusula IN
Q28) Listar para cada departamento que tem mais que 5 empregados, o número do departamento e o número de empregados que ganham mais que 40000
UFU/FACOM Página 82
SQL/DML – Exemplo Q28Q28) Listar para cada departamento que tem mais que 5
empregados, o número do departamento e o número de empregados que ganham mais que 40000
SELECT dno, COUNT(*)FROM employeeWHERE salary > 40000
AND dno IN(SELECT dnumber FROM department
WHERE(SELECT COUNT(*) FROM employee e2
WHERE e2 .dno=dnumber)>2)GROUP BY dno;
UFU/FACOM Página 83
SQL/DML e o PostgreSQLEXERCÍCIOS DE IMPLEMENTAÇÃO
=> Lab2 – Exemplos de consultas simples no esquema company=> Lab3 – Exemplos de consultas complexas no esquema company e exercícios usando o esquema SEE
UFU/FACOM Página 84
Bibliografia• [EN] Capítulos 4,5• [SK] Capítulos 3,4,5 • [RG] Capítulos 5
UFU/FACOM Página 85
FIM – SQL/DML e o PostgreSQL
FIM – SQL/DML e o PostgreSQL