0% acharam este documento útil (0 voto)
9 visualizações41 páginas

t11 - SQL DDL e DML

O documento aborda conceitos fundamentais de SQL, incluindo a definição e manipulação de bases de dados através de DDL e DML. Ele detalha a modelagem de dados, tipos de dados, restrições de integridade e comandos para criação, edição e remoção de tabelas. Além disso, apresenta exemplos práticos de inserção, atualização e exclusão de dados em SQL.

Enviado por

Fragy
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
9 visualizações41 páginas

t11 - SQL DDL e DML

O documento aborda conceitos fundamentais de SQL, incluindo a definição e manipulação de bases de dados através de DDL e DML. Ele detalha a modelagem de dados, tipos de dados, restrições de integridade e comandos para criação, edição e remoção de tabelas. Além disso, apresenta exemplos práticos de inserção, atualização e exclusão de dados em SQL.

Enviado por

Fragy
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
Você está na página 1/ 41

Bases de Dados

T11 - SQL DDL e DML

Prof. Daniel Faria


Prof. Alessandro Gianola
Sumário
● Recapitulação
● O que é o SQL?
● Como se define uma BD em SQL?
● Como se popula uma BD em SQL?

2
Resultados de Aprendizagem
1. Construir bases de dados SQL segundo esquemas relacionais
2. Popular bases de dados SQL com dados

3
Recapitulação
Desenho de Bases de Dados
Especificação Modelação Modelação Desenho
de Requisitos Conceptual Lógica Físico
● requisito funcional 1

● requisito funcional 2

● …

● restrição de integridade 1

● restrição de integridade 2

● …
Normalização

5
Modelo Entidade-Associação

6
Conversão E-A–Relacional
Modelo E-A Modelo Relacional
Entidade Relação (mesmos atributos e mesma chave)
Associação 0-N–* Relação (chaves das entidades associadas mais atributos da associação)
Associação 1-N–* Relação + restrição de integridade para participação obrigatória
Associação 1–* Chave da segunda entidade e atributos da associação incorporados na
primeira entidade
Associação 0-1–* Como 0-N mas chave é a primeira entidade ou como 1 (mas com NULLs)
Entidade Fraca Relação com chave composta por chave parcial + chave da entidade forte
Generalização / Relação para superclasse e subclasses (sempre possível) ou só subclasses
Especialização (apenas se total) ou só superclasse (sempre possível mas com NULLs)
Agregação Interior = associação; exterior = associação c/ agregação como entidade

7
O que é o SQL?
Structured Query Language (SQL)
● Linguagem de programação declarativa desenhada para gerir
dados em bases de dados
● Materializa (aproximadamente) o modelo relacional
● Interrogações aos dados originalmente baseadas em álgebra
relacional e cálculo relacional
● Introduzida em 1970 pela IBM; ISO Standard em 1987
○ Nem todas as implementações seguem completamente o
standard (PostgreSQL é das que segue mais)

9
Structured Query Language (SQL)
● Inclui:
○ Data Control Language (DCL): controlo de acesso
○ Data Definition Language (DDL): criação e edição de esquemas de BD
○ Data Manipulation Language (DML): inserção, deleção e atualização
de dados em tabelas
○ Data Query Language (DQL): interrogação de BD
○ Transaction Control Language (TCL)

10
Como se define uma BD em SQL?
Data Definition Language (DDL)

Comando Descrição
CREATE DATABASE / TABLE / TYPE / SEQUENCE Cria uma nova base de dados, tabela, tipo de dados ou sequência.
DROP DATABASE / TABLE / TYPE / SEQUENCE Remove uma base de dados, tabela, tipo de dados, ou sequência.
ALTER DATABASE / TABLE / TYPE / SEQUENCE Edita uma base de dados, tabela, tipo de dados, ou sequência.
TRUNCATE Esvazia uma ou mais tabelas.

12
Criar e Apagar Bases de Dados
CREATE DATABASE database_name;

https://www.postgresql.org/docs/current/sql-createdatabase.html

DROP DATABASE database_name;

https://www.postgresql.org/docs/current/sql-dropdatabase.html

13
Criar Tabelas
CREATE TABLE table_name (
column_name data_type [column_constraint],

[table_constraint],

);

14
Tipos de Dados: Numéricos
https://www.postgresql.org/docs/14/datatype-numeric.html

Números inteiros com 3 capacidades diferentes

Números “reais” com aritmética exata mas


lenta; bons para valores monetários
Números “reais” com aritmética inexata mas
rápida; usar com cautela

Séries de números inteiros com 3 capacidades


diferentes (uso frequente como chave primária)

15
Exemplo de Problemas com Float
CREATE TABLE test(
x FLOAT,
y FLOAT);

INSERT INTO test VALUES (1.2,1.2);

SELECT x+y FROM test;

x+y
------------------
2.4000000953674316

16
Tipos de Dados: Textuais
https://www.postgresql.org/docs/14/datatype-character.html

● Considerações:
○ char ocupa mais espaço de disco
○ Limites de tamanho levam a inserção de valores mais lenta, a evitar
quando não necessários para restrições de integridade
○ varchar sem limite é igual a text e um dos dois deve ser escolhido na
maioria dos casos

17
Tipos de Dados: Temporais
https://www.postgresql.org/docs/14/datatype-datetime.html

18
Tipos de Dados
● O PostgreSQL suporta várias funções para tipos textuais e temporais
● É ainda possível criar tipos de dados usando CREATE TYPE
○ Tipos enumerados (e.g. ‘male’, ‘female’)
○ Combinando atributos de tipos existentes

CREATE TYPE name AS ENUM (['label' [,…]]);

CREATE TYPE name AS ([attribute_name data_type


[COLLATE collation] [,…]]);

19
Restrições de Coluna e Tabela
● Coluna:
○ NOT NULL
○ PRIMARY KEY
○ UNIQUE
○ REFERENCES reftable [ ( refcolumn ) ]
○ CHECK expression
● Tabela:
○ PRIMARY KEY ( column_name [, ... ] )
○ UNIQUE ( column_name [, ... ] )
○ FOREIGN KEY ( column_name [, ... ] ) REFERENCES reftable [ ( refcolumn ) ]
○ CHECK expression

20
Restrições de Chave / Unicidade
CREATE TABLE department(
did INTEGER PRIMARY KEY,
name VARCHAR(80) UNIQUE NOT NULL,
budget NUMERIC(12,4)
);

● Chave primária: PRIMARY KEY (implica UNIQUE + NOT NULL)


● Chave candidata: UNIQUE
● Ambas podem ser restrições de coluna (apenas se a chave for unária) ou
de tabela (em qualquer caso)

21
Restrições de Chave Estrangeira
CREATE TABLE employee(
eid INTEGER PRIMARY KEY,
name VARCHAR(80) UNIQUE NOT NULL
);

CREATE TABLE works_in(


eid INTEGER REFERENCES employee,
did INTEGER REFERENCES department,
role VARCHAR(80) NOT NULL,
PRIMARY KEY (eid, did)
);

● Podem também ser de coluna (apenas se a chave é unária) ou de tabela

22
Outras Restrições de Integridade
● NOT NULL: Necessário para obrigar a inserção de um valor
○ Por omissão todas as colunas que não fazem parte da chave primária
podem ter NULL (mesmo colunas UNIQUE, dado que NULL != NULL)
● DEFAULT: Usar quando há um valor assumido no caso de não-inserção
● CHECK: Permite verificações de domínio de dados mais avançadas, e.g.:
CHECK (LENGTH(name) > 3)
CHECK (birthdate > '1920-01-01')
CHECK (EXTRACT(YEAR FROM AGE(birthdate)) > 18)
CHECK (gender in ('Female','Male','Other'))

23
Mapeamento Modelo Relacional → SQL
● Nome da relação → nome da tabela
● Para cada atributo
○ Nome de atributo → nome de atributo
??? → tipo de dados do atributo
● Chave primária → declaração de PRIMARY KEY (coluna ou tabela)
● UNIQUE → declaração de UNIQUE (coluna ou tabela)
● NOT NULL → declaração de NOT NULL (coluna)
● FK → declaração de REFERENCES / FOREIGN KEY (coluna / tabela)
● ICs (alguns) → declarações de CHECK (apenas valores de um tuplo a inserir)

24
Exercício: Converter para SQL
Animal(name,DOB)
Pig(name,DOB,job)
name,DOB: FK(Animal.name, Animal.DOB)
Non-Pig(name,DOB,species)
name,DOB: FK(Animal.name, Animal.DOB)
species NOT NULL
Produce(name,DOB,prod_date,amount,type)
name,DOB: FK(Non-Pig.name,Non-Pig.DOB)
type NOT NULL
Merchant(SSN)
Buys(SSN,name,DOB,prod_date,date,value)
SSN: FK(Merchant)
name,DOB,prod_date: FK(Produce.name,Produce.DOB,Produce.prod_date)
Manages(name1,DOB1,SSN,name2,DOB2,prod_date)
name1,DOB1: FK(Pig)
SSN,name2,DOB2,prod_date: FK(Buys.SSN,Buys.name)

25
Exercício: Converter para SQL
RI-1: todos os pares name,DOB em Animal têm de estar em Pig ou Non-Pig mas não
em ambos
RI-2: species tem de ser ‘cow’, ‘goat’, ‘sheep’ ou ‘chicken’
RI-3: type tem de ser ‘eggs’ ou ‘milk’
RI-4: instâncias com type ‘eggs’ em Produce têm de estar associadas a pares
name,DOB que existem em Non-Pig com species ‘chicken’, e instâncias com type
‘milk’ têm de estar associadas a pares name,DOB que existem em Non-Pig com
species não ‘chicken’
RI-5: todos os quartetos SSN,name,DOB,prod_date em Buys têm de estar presentes
em Manages

26
Solução
CREATE TABLE merchant(
SSN NUMERIC(12) PRIMARY KEY);

CREATE TABLE animal(


name VARCHAR(80),
DOB DATE,
PRIMARY KEY(name,DOB));

CREATE TABLE pig(


name VARCHAR(80),
DOB DATE,
job VARCHAR(80) NOT NULL,
PRIMARY KEY(name,DOB),
FOREIGN KEY(name,DOB) REFERENCES animal);

27
Solução
CREATE TABLE nonpig(
name VARCHAR(80),
DOB DATE,
species VARCHAR(7) NOT NULL CHECK
(species IN (‘cow’,‘goat’,‘sheep’,‘chicken’)),
PRIMARY KEY(name,DOB),
FOREIGN KEY(name,DOB) REFERENCES animal);

CREATE TABLE produce(


name VARCHAR(80),
DOB DATE,
production_date DATE,
amount FLOAT NOT NULL,
type CHAR(4) NOT NULL CHECK type IN (‘eggs’,‘milk’),
PRIMARY KEY(name,DOB,production_date),
FOREIGN KEY(name,DOB) REFERENCES non-pig);

28
Solução
CREATE TABLE buys(
SSN NUMERIC(8) REFERENCES merchant,
name VARCHAR(80),
DOB DATE,
prod_date DATE,
sell_date DATE,
value NUMERIC,
PRIMARY KEY(SSN,name,DOB,prod_date),
FOREIGN KEY(name,DOB,prod_date) REFERENCES produce);

CREATE TABLE manages(


name1 VARCHAR(80),
DOB1 DATE,
SSN NUMERIC(8) REFERENCES merchant,
name2 VARCHAR(80),
DOB2 DATE,
production_date DATE,
PRIMARY KEY(name1,DOB1,SSN,name2,DOB2,production_date),
FOREIGN KEY(name1,DOB1) REFERENCES pig,
FOREIGN KEY(SSN,name2,DOB2,production_date) REFERENCES buys);

29
Solução
IC-4: If type is ‘eggs’ in Produce then the species of Non-Pig must
be ‘chicken’, and if the type is ‘milk’ the species must not be
‘chicken’
● Não conseguimos verificar com um CHECK porque são atributos de tabelas
diferentes
○ Podíamos importar “species” em “Produce” (acrescentando-o à chave
estrangeira que já tem para “Non-Pig”) para permitir usar CHECK, mas é uma
duplicação de dados desnecessária sem ganho claro de desempenho

30
Chaves Substitutas
● Chave substituta: chave artificial (sem sentido no domínio) unária,
tipicamente de tipo integer e auto-incrementada (SERIAL)
○ Facilita joins quando a chave natural é composta e/ou de tipo mais
complexo de comparar do que integer (e.g. textual)
○ Pode poupar armazenamento se a chave natural é composta e/ou
de tipo que requer mais armazenamento do que integer SE a chave
for usada em pelo menos uma chave estrangeira
○ Custa armazenamento se a chave não é usada em chaves
estrangeiras

31
Edição de Tabelas
ALTER TABLE table_name
RENAME column_name TO new_column_name,
ADD column_name data_type,
DROP column_name,
ALTER column_name TYPE data_type;

● ALTER TABLE permite:


○ Renomear a tabela, uma coluna, ou uma restrição
○ Adicionar/remover colunas ou restrições
○ Editar colunas (mudar data_type, adicionar/remover restrições)

32
Remoção de Tabelas
DROP TABLE [IF EXISTS] table_name;

● IF EXISTS: produz uma notificação em vez de um erro caso a tabela não


exista (importante para não abortar código que consiste de múltiplos
comandos)

33
Como se popula uma BD em SQL?
Data Manipulation Language

Comando Descrição
INSERT Popula uma tabela com valores passados como argumentos
COPY Copia dados de um ficheiro para uma tabela ou vice-versa
Atualiza valores de uma ou mais colunas numa tabela (de linhas que cumprem critérios
UPDATE
especificados)
DELETE Apaga valores de uma tabela segundo critérios especificados.

35
Inserção Atómica de Dados
INSERT INTO table_name [(column_name, …)]
VALUES
(value_list_1),
(value_list_2),

(value_list_n);

Exemplo:
INSERT INTO department VALUES(1, 'Finance', 1000.0),(2, 'Marketing',
2000.0);

36
Inserção de Dados de Outras Tabelas
INSERT INTO table_name [(column_name, …)]
SELECT [*|expression1, …]
FROM table1_name, …
WHERE
condition1, …;

Popula uma tabela com o resultado de uma query!

37
Importação/Exportação de Dados
Importação: COPY … FROM
COPY table_name [(column_name [, ...])]
FROM {'filename' | PROGRAM 'command' | STDIN}
[[WITH] (option [, ...])]
[WHERE condition]

Exportação: COPY … TO
COPY {table_name [(column_name [, ...])] | (query) }
TO { 'filename' | PROGRAM 'command' | STDOUT}
[[WITH] (option [, ...])]

38
Atualização de Dados
UPDATE table_name SET
column_name = expression,

;

Exemplos:
UPDATE department SET budget = 3000 WHERE name = 'Marketing';
ALTER TABLE department ADD share FLOAT;
UPDATE department SET share = budget /
(SELECT SUM(budget)) FROM department;

39
Remoção de Dados
DELETE FROM table_name WHERE condition;

Exemplos:
DELETE FROM department WHERE name = 'Marketing';
DELETE FROM department WHERE share < 0.1;

40

Você também pode gostar