GES013 - Sistema de Banco de Dados SQL/DML no PostgreSQL Parte 1 Introdução e Consultas Basicas Ilmério Reis da Silva ilmerio arroba ufu.br www.facom.ufu.br/~ilmerio/sbd UFU/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 pelo PostgreSQL
UFU/FACOM Página 4 SQL/DML - INSERT INSERT INTO tabela [ ( coluna [,...] ) ] { DEFAULT VALUES VALUES ( { expressão DEFAULT } [,...] ) [,...] comando-select }
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 5
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_on SELECT 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.5 WHERE ssn = '123456789'
UFU/FACOM Página 11 SQL/DML UPDATE Exemplo 2 UPDATE works_on SET (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 ] [...] ]
SQL/DML Consultas básicas, aninhadas, com funções de agregação e recursivas UFU/FACOM Página 13 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;
SQL/DML SELECT-FROM-WHERE (Esquema Company) UFU/FACOM Página 16
SQL/DML SELECT-FROM-WHERE (Uma instância de Company) UFU/FACOM Página 17
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
SQL/DML - Tabela x relação// multset ou bags x set // Cláusula DISTINCT UFU/FACOM Página 33 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 de projetos que envolvam um empregado cujo último nome é Smith sendo que o empregado deve ser trabalhador ou gerente do departamento que controla o projeto.
SQL/DML Exemplo Q4 Q4) Listar os números de projetos que envolvam um empregado 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, employee WHERE dnum=dnumber AND msgrssn=ssn AND lname= Smith ) UNION (SELECT DISTINCT pnumber FROM works_on, employee WHERE essn=ssn AND lname= Smith ) UFU/FACOM Página 35
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, lname FROM employee WHERE 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
SQL/DML e o PostgreSQL EXERCÍCIOS DE IMPLEMENTAÇÃO => Lab Exemplos de consultas simples no esquema company => Lab - Lista de exercícios Parte 1 UFU/FACOM Página 46
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
FIM SQL/DML e o PostgreSQL Parte 1 UFU/FACOM Página 48