SQL - Departamento de Informática
Transcript of SQL - Departamento de Informática
![Page 1: SQL - Departamento de Informática](https://reader036.fdocumentos.tips/reader036/viewer/2022072017/62d7564ee90c6d3c3c279bc8/html5/thumbnails/1.jpg)
SQL
EDUARDO C. DE ALMEIDA DEPARTAMENTO DE INFORMÁTICA
BANCOS DE DADOS CI1218
FLIC
KR
- C
REA
TIVE
CO
MM
ON
S
![Page 2: SQL - Departamento de Informática](https://reader036.fdocumentos.tips/reader036/viewer/2022072017/62d7564ee90c6d3c3c279bc8/html5/thumbnails/2.jpg)
‣ Introdução ‣ Declaração SELECT ‣ Variáveis de tabelas e operadores de conjunto
AGENDA
psql -U ci218 -h bd.c3sl.ufpr.br -d tpch Conexão:
![Page 3: SQL - Departamento de Informática](https://reader036.fdocumentos.tips/reader036/viewer/2022072017/62d7564ee90c6d3c3c279bc8/html5/thumbnails/3.jpg)
HISTÓRICO‣ Criada início dos anos 1970 pela IBM
(“SEQUEL”) - Structured English Query Language
‣ Adoção comercial - Oracle e IBM final dos anos 1970
‣ Padrão ANSI SQL em 1986 - Atual 2016 - Padrão mínimo suportado 1992
![Page 4: SQL - Departamento de Informática](https://reader036.fdocumentos.tips/reader036/viewer/2022072017/62d7564ee90c6d3c3c279bc8/html5/thumbnails/4.jpg)
LINGUAGENS‣ Data Manipulation Language (DML) - SELECT, INSERT, UPDATE, DELETE
‣ Data Definition Language (DDL) - CREATE, DROP
‣ Data Control Language (DCL) - GRANT, REVOKE
‣ Outras - indices, views, triggers, constraints,
transactions …
![Page 5: SQL - Departamento de Informática](https://reader036.fdocumentos.tips/reader036/viewer/2022072017/62d7564ee90c6d3c3c279bc8/html5/thumbnails/5.jpg)
BANCOS DE DADOS CI1218
MODELO REFERENCIA
AutorLivros(autor, isbn)
Autores(autor, email, idade)
autor email idade
JK. Rowling jk@gmail 20
H. Melville M@yahoo 69
F. Sabino S@ig 21
J. Widom jw@gmail NULL
autor isbn
JK. Rowling 1234
H. Melville 1121
F. Sabino 2222
F. Sabino 2223
F. Sabino 2224
F. Sabino 2225
isbn titulo editora
1234 Harry Potter 1 Pottermore
1121 Moby Dick DCL
2222 Grande Mentecapto Nordica
2223 Inglesa Deslumbrada Nordica
2224 De Ponta Cabeça Nordica
2225 Encontra Marcado Nordica
Livros(isbn, titulo, editora)
![Page 6: SQL - Departamento de Informática](https://reader036.fdocumentos.tips/reader036/viewer/2022072017/62d7564ee90c6d3c3c279bc8/html5/thumbnails/6.jpg)
BANCOS DE DADOS CI1218
SELECT
σisbn>2000(autorlivro)
πautor(σisbn>2000(autorlivro))
AutorLivros(autor, isbn)autor isbn
JK. Rowling 1234
H. Melville 1121
F. Sabino 2222
F. Sabino 2223
F. Sabino 2224
F. Sabino 2225
SELECT [DISTINCT] A1, A2, …, AN FROM R1, R2, …, RN WHERE <CONDIÇÃO>;
![Page 7: SQL - Departamento de Informática](https://reader036.fdocumentos.tips/reader036/viewer/2022072017/62d7564ee90c6d3c3c279bc8/html5/thumbnails/7.jpg)
BANCOS DE DADOS CI1218
SELECT
SELECT [DISTINCT] A1, A2, …, AN FROM R1, R2, …, RN WHERE <CONDIÇÃO>;
SELECT não retira duplicatas
σisbn>2000(autorlivro)
πautor(σisbn>2000(autorlivro))
AutorLivros(autor, isbn)autor isbn
JK. Rowling 1234
H. Melville 1121
F. Sabino 2222
F. Sabino 2223
F. Sabino 2224
F. Sabino 2225
![Page 8: SQL - Departamento de Informática](https://reader036.fdocumentos.tips/reader036/viewer/2022072017/62d7564ee90c6d3c3c279bc8/html5/thumbnails/8.jpg)
BANCOS DE DADOS CI1218
SELECT
DISTINCT para retirar duplicatas
σisbn>2000(autorlivro)
πautor(σisbn>2000(autorlivro))
AutorLivros(autor, isbn)autor isbn
JK. Rowling 1234
H. Melville 1121
F. Sabino 2222
F. Sabino 2223
F. Sabino 2224
F. Sabino 2225
SELECT [DISTINCT] A1, A2, …, AN FROM R1, R2, …, RN WHERE <CONDIÇÃO>;
![Page 9: SQL - Departamento de Informática](https://reader036.fdocumentos.tips/reader036/viewer/2022072017/62d7564ee90c6d3c3c279bc8/html5/thumbnails/9.jpg)
BANCOS DE DADOS CI1218
CLÁUSULA SELECT
SELECT * FROM AUTORES;
SELECT AUTORES.* FROM AUTORES;
“*” retorna todos os atributos. SELECT permite expressões e aliases
SELECT IDADE*12 AS “MESES” FROM AUTORES;
‣ EXPRESSOES: +, -, /, * ‣ CONCATENAÇÃO: ||
PROJETA OS ATRIBUTOS DE INTERESSE
![Page 10: SQL - Departamento de Informática](https://reader036.fdocumentos.tips/reader036/viewer/2022072017/62d7564ee90c6d3c3c279bc8/html5/thumbnails/10.jpg)
BANCOS DE DADOS CI1218
CLÁUSULA FROM
SELECT * FROM AUTORES A;
define as tabelas de acesso (permite alias)
SELECT A.AUTOR, B.ISBN FROM AUTORES A, AUTORLIVROS B WHERE A.AUTOR=B.AUTOR;
faz o bind de variáveis e registros
SELECT A.AUTOR, B.ISBN FROM AUTORES A LEFT OUTER JOIN AUTORLIVROS B ON A.AUTOR=B.AUTOR;
define as junções entre tabelas
![Page 11: SQL - Departamento de Informática](https://reader036.fdocumentos.tips/reader036/viewer/2022072017/62d7564ee90c6d3c3c279bc8/html5/thumbnails/11.jpg)
BANCOS DE DADOS CI1218
CLÁUSULA WHERESELECT * FROM AUTORES A WHERE IDADE > 25 OR IDADE IS NULL;
expressões complexas usando AND, OR, NOT e IS
SELECT * FROM AUTORLIVROS WHERE ISBN IN(1234,1121,2222);
operadores especiais LIKE, BETWEEN e IN
SELECT A.AUTOR, B.ISBN FROM AUTORES A, AUTORLIVROS B WHERE A.AUTOR=B.AUTOR;
também define as junções entre tabelas
COMPARAÇÃO: =, <, >, <>, <=,>= OPERADOR LIKE: ‣ % (VARIOS CHARACTERES) ‣ _ (UM CHARACTER)
![Page 12: SQL - Departamento de Informática](https://reader036.fdocumentos.tips/reader036/viewer/2022072017/62d7564ee90c6d3c3c279bc8/html5/thumbnails/12.jpg)
BANCOS DE DADOS CI1218
CLÁUSULA ORDER BY
SELECT [DISTINCT] A1, A2, …, AN FROM R1, R2, …, RN WHERE <CONDIÇÃO> [ORDER BY A1, A2 ASC/DESC];
ORDENA OS REGISTROS RETORNADOS PELO PROGRAMA
![Page 13: SQL - Departamento de Informática](https://reader036.fdocumentos.tips/reader036/viewer/2022072017/62d7564ee90c6d3c3c279bc8/html5/thumbnails/13.jpg)
BANCOS DE DADOS CI1218
FUNÇÕES STRING
https://www.postgresql.org/docs/8.4/functions-string.html
‣ SUBSTRING ‣ STRPOS ‣ LOWER ‣ UPPER ‣ TRIM ‣ LENGTH ‣ MD5 ‣ …
![Page 14: SQL - Departamento de Informática](https://reader036.fdocumentos.tips/reader036/viewer/2022072017/62d7564ee90c6d3c3c279bc8/html5/thumbnails/14.jpg)
FUNÇÕES‣ Data: AGE(), CURRENT_DATE - select AGE(CURRENT_DATE,’2010-01-01’);
‣ Numéricas: ABS(), CEIL(), MOD() - select ceil(3.35);
‣ Conversão: TO_CHAR(), TO_NUMBER(), TO_DATE() - select to_date(‘20200125','YYYYMMDD');
https://www.postgresql.org/docs/8.4/functions.html
![Page 15: SQL - Departamento de Informática](https://reader036.fdocumentos.tips/reader036/viewer/2022072017/62d7564ee90c6d3c3c279bc8/html5/thumbnails/15.jpg)
BANCOS DE DADOS CI1218
OPERADORES DO CONJUNTO
‣ UNION ‣ INTERSECT ‣ EXCEPT
autor email idade
JK. Rowling jk@gmail 20
H. Melville M@yahoo 69
F. Sabino S@ig 21
J. Widom jw@gmail NULL
![Page 16: SQL - Departamento de Informática](https://reader036.fdocumentos.tips/reader036/viewer/2022072017/62d7564ee90c6d3c3c279bc8/html5/thumbnails/16.jpg)
BANCOS DE DADOS CI1218
JUNÇÃORETORNA OS REGISTROS QUE COINCIDEM ENTRE DUAS TABELAS
SELECT [DISTINCT] A1, A2, …, AN
FROM R1, [INNER | NATURAL | {LEFT | RIGHT | FULL}| {OUTER}] JOIN R2
WHERE <CONDIÇÃO>;
![Page 17: SQL - Departamento de Informática](https://reader036.fdocumentos.tips/reader036/viewer/2022072017/62d7564ee90c6d3c3c279bc8/html5/thumbnails/17.jpg)
BANCOS DE DADOS CI1218
JUNÇÃO
EXPLÍCITO NO FROM (SQL99)
SELECT A.AUTOR, B.ISBN FROM AUTORES A, AUTORLIVROS B WHERE A.AUTOR=B.AUTOR;
CONDIÇÃO NO WHERE
(SQL92)
SELECT A.AUTOR, B.ISBN FROM AUTORES A NATURAL JOIN AUTORLIVROS B;
RETORNA OS REGISTROS QUE COINCIDEM ENTRE DUAS TABELAS
SELECT A.AUTOR, B.ISBN FROM AUTORES A INNER JOIN AUTORLIVROS B ON A.AUTOR=B.AUTOR;
![Page 18: SQL - Departamento de Informática](https://reader036.fdocumentos.tips/reader036/viewer/2022072017/62d7564ee90c6d3c3c279bc8/html5/thumbnails/18.jpg)
BANCOS DE DADOS CI1218
JUNÇÃOTipos de join email
INNER JOIN junta quando tabelas R e S tem o mesmo valor
LEFT OUTER JOIN junta quando tabelas R e S tem o mesmo valor E quando somente R tem valor
RIGHT OUTER JOIN junta quando tabelas R e S tem o mesmo valor E quando somente S tem valor
FULL OUTER JOIN junta quando tabelas R e S tem o mesmo valor E quando R ou S tem valores únicos
R S
SR SR
inner
full
left
right
R S
![Page 19: SQL - Departamento de Informática](https://reader036.fdocumentos.tips/reader036/viewer/2022072017/62d7564ee90c6d3c3c279bc8/html5/thumbnails/19.jpg)
autor email idade
JK. Rowling jk@gmail 20
H. Melville M@yahoo 69
F. Sabino S@ig 21
J. Widom jw@gmail NULL
autor isbn
JK. Rowling 1234
H. Melville 1121
F. Sabino 2222
F. Sabino 2223
F. Sabino 2224
F. Sabino 2225
OUTER JOIN
SELECT A.AUTOR, B.ISBN FROM AUTORES A LEFT OUTER JOIN AUTORLIVROS B ON A.AUTOR=B.AUTOR;
![Page 20: SQL - Departamento de Informática](https://reader036.fdocumentos.tips/reader036/viewer/2022072017/62d7564ee90c6d3c3c279bc8/html5/thumbnails/20.jpg)
BANCOS DE DADOS CI1218
AGREGAÇÃOFUNÇÕES DE SUMARIZAÇÃO DE REGISTROS
SELECT A1, A2, …, AN FROM R1, R2, …, RN WHERE <CONDIÇÃO> GROUP BY COLUNAS HAVING <CONDIÇÃO>;
‣ COUNT(ATRIBUTO) ‣ MAX(ATRIBUTO) ‣ MIN(ATRIBUTO) ‣ AVG(ATRIBUTO) ‣ SUM(ATRIBUTO) ‣ STDDEV(ATRIBUTO)
![Page 21: SQL - Departamento de Informática](https://reader036.fdocumentos.tips/reader036/viewer/2022072017/62d7564ee90c6d3c3c279bc8/html5/thumbnails/21.jpg)
BANCOS DE DADOS CI1218
AGREGAÇÃOFUNÇÕES DE SUMARIZAÇÃO DE REGISTROS
SELECT COUNT(*) FROM AUTORES;
SELECT AVG(IDADE) FROM AUTORES;
SELECT STDDEV(IDADE) FROM AUTORES;
![Page 22: SQL - Departamento de Informática](https://reader036.fdocumentos.tips/reader036/viewer/2022072017/62d7564ee90c6d3c3c279bc8/html5/thumbnails/22.jpg)
BANCOS DE DADOS CI1218
GROUP BYFUNÇÕES DE SUMARIZAÇÃO DE REGISTROS EM GRUPOS
SELECT A.AUTOR, COUNT(*) FROM AUTORES A NATURAL JOIN AUTORLIVROS B GROUP BY A.AUTOR;
![Page 23: SQL - Departamento de Informática](https://reader036.fdocumentos.tips/reader036/viewer/2022072017/62d7564ee90c6d3c3c279bc8/html5/thumbnails/23.jpg)
BANCOS DE DADOS CI1218
GROUP BYFUNÇÕES DE SUMARIZAÇÃO DE REGISTROS EM GRUPOS
SELECT A.AUTOR, B.ISBN, COUNT(*) FROM AUTORES A NATURAL JOIN AUTORLIVROS B GROUP BY A.AUTOR, B.ISBN;
SELECT A.AUTOR, B.ISBN, COUNT(*) FROM AUTORES A NATURAL JOIN AUTORLIVROS B GROUP BY A.AUTOR;
![Page 24: SQL - Departamento de Informática](https://reader036.fdocumentos.tips/reader036/viewer/2022072017/62d7564ee90c6d3c3c279bc8/html5/thumbnails/24.jpg)
BANCOS DE DADOS CI1218
HAVINGFILTRA O SUMÁRIO
SELECT A.AUTOR, COUNT(*) FROM AUTORES A NATURAL JOIN AUTORLIVROS B GROUP BY A.AUTOR HAVING COUNT(*) > 1;
![Page 25: SQL - Departamento de Informática](https://reader036.fdocumentos.tips/reader036/viewer/2022072017/62d7564ee90c6d3c3c279bc8/html5/thumbnails/25.jpg)
BANCOS DE DADOS CI1218
INSERT2 FORMAS DE INCLUIR REGISTROS
INSERT INTO TABELA VALORES (A1, A2, …, AN);
INSERT INTO TABELA SELECT <COMANDO SELECT>;
![Page 26: SQL - Departamento de Informática](https://reader036.fdocumentos.tips/reader036/viewer/2022072017/62d7564ee90c6d3c3c279bc8/html5/thumbnails/26.jpg)
BANCOS DE DADOS CI1218
DELETE / TRUNCATEREMOVER REGISTROS
DELETE FROM TABELA WHERE <CONDIÇÃO>;
TRUNCATE TABELA;
REMOVER TODOS REGISTROS DA TABELA. EQUIVALENTE AO DELETE FROM TABELA; (SEM WHERE)
![Page 27: SQL - Departamento de Informática](https://reader036.fdocumentos.tips/reader036/viewer/2022072017/62d7564ee90c6d3c3c279bc8/html5/thumbnails/27.jpg)
BANCOS DE DADOS CI1218
UPDATEATUALIZA REGISTROS
UPDATE TABELA SET A1 = EXPRESSÃO_1, A2 = EXPRESSÃO_2, … WHERE <CONDIÇÃO>;
![Page 28: SQL - Departamento de Informática](https://reader036.fdocumentos.tips/reader036/viewer/2022072017/62d7564ee90c6d3c3c279bc8/html5/thumbnails/28.jpg)
BANCOS DE DADOS CI1218
DATA DEFINITION LANGUAGE(DDL)
‣ CREATE TABLE ‣ ALTER TABLE ‣ DROP TABLE ‣ CREATE VIEW ‣ CREATE INDEX
![Page 29: SQL - Departamento de Informática](https://reader036.fdocumentos.tips/reader036/viewer/2022072017/62d7564ee90c6d3c3c279bc8/html5/thumbnails/29.jpg)
BANCOS DE DADOS CI1218
CREATE TABLECREATE TABLE <NOME>(
< DEFINIÇÃO DE COLUNAS >, < DEFINIÇÃO DE RESTRIÇÕES > )
<OPCIONAIS>;
‣ < DEFINIÇÃO DE COLUNAS > LISTAS DE ATRIBUTOS E TIPOS ‣ < DEFINIÇÃO DE RESTRIÇÕES > CHAVES PRIMÁRIAS, CHAVES ESTRANGEIRAS ‣ <OPCIONAIS> INFORMAÇÕES DE ARMAZENAMENTO
CREATE TABLE AUTORES( AUTOR VARCHAR(30), EMAIL VARCHAR(20), IDADE INTEGER, PRIMARY KEY(AUTOR) );
ALGUNS TIPOS DE DADOS (PADRÃO) ‣ INTEGER, SMALLINT ‣ NUMERIC(P,D), DOUBLE ‣ VARCHAR, CHAR ‣ DATE, TIME ‣ …
![Page 30: SQL - Departamento de Informática](https://reader036.fdocumentos.tips/reader036/viewer/2022072017/62d7564ee90c6d3c3c279bc8/html5/thumbnails/30.jpg)
BANCOS DE DADOS CI1218
PRIMARY KEYRESTRIÇÃO DE INTEGRIDADE
CREATE TABLE AUTORES( AUTOR VARCHAR(30), …, PRIMARY KEY(AUTOR) );
CREATE TABLE AUTORES( AUTOR VARCHAR(30), CPF VARCHAR(11), …, PRIMARY KEY(AUTOR, CPF) );
UM ATRIBUTO
MÚLTIPLOS ATRIBUTOS
![Page 31: SQL - Departamento de Informática](https://reader036.fdocumentos.tips/reader036/viewer/2022072017/62d7564ee90c6d3c3c279bc8/html5/thumbnails/31.jpg)
BANCOS DE DADOS CI1218
FOREIGN KEY REFERENCESRESTRIÇÃO DE INTEGRIDADE
CREATE TABLE AUTORLIVROS( AUTOR VARCHAR(30), …, FOREIGN KEY(AUTOR)
REFERENCES AUTORES(AUTOR) );
CREATE TABLE AUTORLIVROS( AUTOR VARCHAR(30), CPF VARCHAR(11), …, FOREIGN KEY(AUTOR, CPF)
REFERENCES AUTORES(AUTOR, CPF) );
UM ATRIBUTO
MÚLTIPLOS ATRIBUTOS
![Page 32: SQL - Departamento de Informática](https://reader036.fdocumentos.tips/reader036/viewer/2022072017/62d7564ee90c6d3c3c279bc8/html5/thumbnails/32.jpg)
BANCOS DE DADOS CI1218
VALUE CONSTRAINTSRESTRIÇÃO DE INTEGRIDADE
CREATE TABLE AUTOR( AUTOR VARCHAR(30) UNIQUE, CPF VARCHAR(11) NOT NULL, IDADE INTEGER CHECK (IDADE > 0) );
AVALIAÇÃO DE RESTRIÇÕES PODE SER COMPUTACIONALMENTE CARA
![Page 33: SQL - Departamento de Informática](https://reader036.fdocumentos.tips/reader036/viewer/2022072017/62d7564ee90c6d3c3c279bc8/html5/thumbnails/33.jpg)
BANCOS DE DADOS CI1218
PRÓXIMA AULA
MAPEAMENTO ER-RELACIONAL