Banco de Dados
Introdução a BD
Prof. Marcelo Iury de Sousa Oliveira
marcelo@ci.ufpb.br
http://sites.google.com/site/marceloiury
Banco de Dados
Aula 6 – SQL: Definição e Manipulação de Dados
(Baseado no Material da Profa. Bernadette Lóscio)
INTRODUÇÃO
Structured Query Language
SQL
Introdução
HISTÓRICO
Histórico
SQL Category
SQL é mais que uma linguagem de consulta!
UAAAUUUHH!!!!
How Can I Learn SQL on My Own?
Free Tutorials Online:
Give Me Your Info Online (But Free):
Como aprender SQL além destes slides?
Attention Please !
1. Palavras-chave do SQL e nomes de tabelas/colunas NÃO diferenciam maiúsculas de minúsculas: ‘select’ e ‘SELECT’ são os mesmos |
2. Os valores armazenados em uma tabela podem diferenciar maiúsculas de minúsculas – dependendo da configuração |
3. Normalmente, aspas simples ('') ou aspas duplas ("") não importam, mas podem ser configuradas de outra forma |
4. O ponto e vírgula ';' é a maneira padrão de separar instruções SQL. Pode ser necessário em alguns SGBDs terminar cada instrução com um ';' mesmo após uma única instrução |
5. Os comentários podem ser usados para tornar o SQL mais legível. Geralmente '--' para comentários de linha única e '/*' e '*/' para comentários de várias linhas. Adicione '--' no início para indicar uma linha de comentário |
6. Padrão NÃO É PADRÃO – nenhum padrão SQL é totalmente implementado por todos os fornecedores. Preste atenção nas diferenças que a implementação de cada fornecedor tem do ‘padrão’ SQL |
Attention Please!
SQL como DDL
SQL como DDL
CREATE DATABASE <nome_do_BD>
CREATE DATABASE EmpresaABC
Criação de Bancos de Dados
CREATE SCHEMA <nome do esquema>;
CREATE SCHEMA <nome do esquema>
AUTHORIZATION <usuário dono do esquema>;
ou
Criação de Esquemas/Bancos de Dados
CRIAÇÃO DE TABELAS
CREATE TABLE <nome_da_tabela>
( <nome_da_col1> <tipo_da_col1> NOT NULL,
<nome_da_col2> <tipo_da_col2> NOT NULL,
...
PRIMARY KEY <lista_de_nomes_de_col>,
FOREIGN KEY <nomes_de_col>
REFERENCES <nome_tab_ref>(<nome_da_col_ref>)
);
Criação de Tabelas
CREATE TABLE Fornecedor
( Fcod INTEGER NOT NULL,
Fnome VARCHAR(20) NOT NULL,
Status INTEGER,
Cidade VARCHAR(20)
);
Fornecedor
Criação de Tabelas
CHAR(tamanho)
CHARACTER(tamanho)
INT
INTEGER
SMALLINT
NUMERIC(precisão,escala)
DECIMAL(precisão,escala) �DEC(precisão,escala)
FLOAT(precisão)
REAL
DOUBLE PRECISION
VARCHAR(tamanho)
CHAR VARYING(tamanho)
CHARACTER VARYING(tamanho)
NCHAR(tamanho)
NATIONAL CHAR(tamanho)
NATIONAL CHARACTER(tamanho)
VARYING(tamanho)
BIT(tamanho)
BIT VARYING(tamanho)
DATETIME
TIME(precisão)
TIMESTAMP(precisão)
INTERVAL
https://www.w3resource.com/sql/data-type.php
Tipos de Dados
13
PL/SQL Data Types
Definição de Restrições
Restrições
CREATE TABLE Empregado
( ...
Sexo CHAR(1) NOT NULL DEFAULT “F”,
...
);
Restrição
Definição do
valor default
Restrição e Valor Default
Definição de Restrições
CONSTRAINT <nome da restrição> CHECK (salario >= 678)
CONSTRAINT <nome da restrição>
CHECK (dep_data_cricao <= data_inicio_gerente)
Integridade de Domínio
PRIMARY KEY(<nomeColuna>)
PRIMARY KEY(<nomeColuna1>, <nomeColuna2> )
FOREIGN KEY(<nomeCol>) REFERENCES <NomeTabRefer>,
Especificação de Chaves
Definição de Restrições
CONSTRAINT <nome_restrição> PRIMARY KEY (<nome(s)_coluna(s)>)
Restrição criada explicitamente
Chave Primária
Definição de Restrições
<descrição da coluna> UNIQUE
CONSTRAINT <nome_da_restrição> UNIQUE (<colunas>)
UNIQUE (<colunas>)
Restrição criada explicitamente
ou
ou
Chave Candidata
Definição de Restrições
CONSTRAINT <nome_da_restrição>
FOREIGN KEY (<colunas FK>)
REFERENCES <tabela onde tá a PK> <colunas PK>)
Restrição criada explicitamente
Chave Estrangeira
CRIAÇÃO DE TABELAS
CREATE TABLE Departamento
( Dcod INTEGER NOT NULL,
Dnome VARCHAR(20) NOT NULL,
Cidade VARCHAR(20),
PRIMARY KEY(Dcod)
);
Departamento
Chave Primária: Exemplo
CRIAÇÃO DE TABELAS
CREATE TABLE Empregado
( Ecod INTEGER NOT NULL,
Enome VARCHAR(40) NOT NULL,
CPF VARCHAR(15) NOT NULL,
Salario DECIMAL(7,2),
Cod_Dept INTEGER NOT NULL,
PRIMARY KEY(Ecod,ENome)
);
Empregado
Chave Primária: Exemplo
CRIAÇÃO DE TABELAS
CREATE TABLE Empregado
( ...,
CONSTRAINT TrabalhaEm
FOREIGN KEY(Cod_Dept) REFERENCES Departamento(Dcod),
...
);
Empregado
Chave Estrangeria: Exemplo
CRIAÇÃO DE TABELAS
CREATE TABLE Empregado
( ...,
UNIQUE KEY(CPF)
);
Empregado
Chave Alternativa
Integridade referencial
SET NULL
SET DEFAULT
CASCADE
ON DELETE
ON UPDATE
Integridade Referencial
Integridade referencial
CREATE TABLE Empregado
( ...
FOREIGN KEY(Cod_Dept) REFERENCES Departamento(Dcod)
ON DELETE SET NULL
ON UPDATE CASCADE,
...
);
Integridade Referencial
CRIAÇÃO DE TABELAS
CREATE TABLE Empregado
( Ecod INTEGER NOT NULL,
Enome VARCHAR(40) NOT NULL,
CPF VARCHAR(15) NOT NULL,
Salario DECIMAL(7,2),
Cod_Dept INTEGER NOT NULL,
PRIMARY KEY(Ecod,ENome);
CONSTRAINT TrabalhaEm
FOREIGN KEY(Cod_Dept)
REFERENCES Departamento(Dcod),
UNIQUE KEY(CPF)
);
Empregado
Exemplo Completo
REMOÇÃO DE TABELAS
DROP TABLE <nome_da_tabela>;
DROP TABLE Empregado;
Remoção de Tabelas
Cuidado!
Não há como recuperar
uma tabela removida
ALTERAÇÃO DE TABELAS
Obs.: em alguns BDs, [COLUMN] não existe!
Obs.: se a tabela já possui tuplas, é possível incluir uma nova coluna somente “null”!
Alteração de Tabelas
ALTER TABLE <nome_da_tabela>
ADD [COLUMN] <nome_coluna> <tipo_dados> [DEFAULT expr] [, <nome_coluna> <tipo_dados>...);
ALTER TABLE <nome_da_tabela>
MODIFY [COLUMN] (<nome_coluna> <tipo_dados> [DEFAULT expr] [, <nome_coluna> <tipo_dados>] ...);
ALTER TABLE <nome_da_tabela>
DROP [COLUMN] <nome_coluna>;
Modelo Físico (DDL)
ALTER TABLE <nome_tabela>
DROP [COLUMN] <nome_coluna>
ALTER TABLE <nome_tabela>
ADD CONSTRAINT <nome_restrição e seus parâmetros>
ALTER TABLE <nome_tabela>
DROP CONSTRAINT <nome_restrição>
Obs.: em alguns Bancos de Dados não utiliza-se a palavra CONSTRAINT ao excluir.
Alteração de Tabelas
Modelo Físico (DDL)
Alteração de Tabelas: Exemplos
Modelo Físico (DDL)
ALTER TABLE Livro ADD Idioma VARCHAR(15)
(Adiciona a coluna Idioma com 15 espaços na tabela Livro)
ALTER TABLE Livro MODIFY Idioma VARCHAR(30)
(Altera a coluna Idioma para 30 espaços)
ALTER TABLE Livro DROP Idioma
(Exclui a coluna Idioma)
Alteração de Tabelas: Exemplos
Modelo Físico (DDL)
ALTER TABLE Livro DROP PRIMARY KEY
(Exclui a chave primária da tabela Livro)
ALTER TABLE Livro ADD CONSTRAINT PRIMARY KEY(Titulo, Cod_Editora)
(Adiciona novamente a chave primária)
Alteração de Tabelas: Exemplos
Exemplo
Exemplo Completo
Exemplo
CREATE TABLE Empresa.Funcionario
(CPF CHAR(11) PRIMARY KEY ,
Pnome VARCHAR(20) NOT NULL,
Minicial VARCHAR(20),
Unome VARCHAR(20) NOT NULL,
Datanasc DATE NOT NULL,
Endereco VARCHAR(50),
Sexo CHAR(1) NOT NULL,
Salario NUMERIC(10,2),
CPF_supervisor CHAR(11),
Dnr INTEGER,
CONSTRAINT ck_sexo CHECK (sexo IN (‘F’, ‘M’))
);
Exemplo Completo
Exemplo
CREATE TABLE Departamento
( Dnumero INTEGER PRIMARY KEY ,
Dnome VARCHAR(20) NOT NULL UNIQUE,
CPF_gerente CHAR(11) NOT NULL DEFAULT ‘00437887878’,
Data_inicio_gerente DATE,
CONSTRAINT departamento_fk1 FOREIGN KEY (CPF_gerente)
REFERENCES Funcionario (CPF)
ON UPDATE CASCADE
ON DELETE SET DEFAULT
);
Exemplo Completo
Exemplo
CREATE TABLE Localizacoes_Dep
( Dnumero INTEGER,
Dlocal VARCHAR(30) NOT NULL,
PRIMARY KEY (Dnumero, Dlocal),
FOREIGN KEY (Dnumero) REFERENCES
Departamento (Dnumero)
ON UPDATE CASCADE
ON DELETE CASCADE
);
Exemplo Completo
Exemplo
CREATE TABLE Projeto
( Projnumero INTEGER,
Projnome VARCHAR(30) NOT NULL,
Projlocal VARCHAR(40),
Dnum INTEGER NOT NULL,
CONSTRAINT Projeto_pk PRIMARY KEY (Projnumero),
CONSTRAINT Projeto_fk1 FOREIGN KEY (Dnum)
REFERENCES Departamento (Dnumero)
);
Exemplo Completo
Exemplo
CREATE TABLE Trabalha_Em
( Fcpf CHAR(11),
Pnr INTEGER NOT NULL,
Horas NUMERIC(2,1),
CONSTRAINT Trabalha_Em_pk PRIMARY KEY (Fcpf,Pnr),
CONSTRAINT Trabalha_Em_fk1 FOREIGN KEY (Fcpf)
REFERENCES Funcionario (CPF),
CONSTRAINT Trabalha_Em_fk2 FOREIGN KEY (Pnr)
REFERENCES Projeto(Projnumero)
);
Exemplo Completo
Exemplo
CREATE TABLE Dependente
( Fcpf CHAR(11),
nome_dependente VARCHAR (50) NOT NULL,
datanasc DATE NOT NULL,
sexo CHAR(1) NOT NULL,
parentesco VARCHAR(20) NOT NULL,
CONSTRAINT ck_sexo CHECK (sexo IN (‘F’, ‘M’)),
CONSTRAINT Dependente_pk PRIMARY KEY
(Fcpf,nome_dependente),
CONSTRAINT Dependente_fk1 FOREIGN KEY (Fcpf)
REFERENCES Funcionario (CPF)
ON DELETE CASCADE
ON UPDATE CASCADE
);
Exemplo Completo
SQL como DDL
SQL como DML
Inserção de Dados
INSERT INTO <nome_tabela> (<lista de colunas>) VALUES (<lista de valores>);
INSERT INTO <nome da tabela>
VALUES (<lista de valores>);
Insert
Inserção de Dados
INSERT INTO Departamento (Dnumero, Dnome, CPF_gerente, Data_inicio_gerente)
VALUES (1, ‘Recursos Humanos’, ‘0986754356’, ‘20-04-2011’);
Insert
Atualização de Dados em tabelas
UPDATE <nome tabela>
SET <nome coluna> = <valor>
WHERE <expressão de condição>;
Update
Atualização de Dados em tabelas
UPDATE Funcionario SET Salario = 2000.00
WHERE CPF = 15;
Update
Se a condição não for
especificada, todas as
tuplas da tabela serão
atualizadas.
Cuidado!
Remoção de Dados
DELETE FROM <tabela>
WHERE <expressão de condição>;
Delete
Remoção de Dados
DELETE FROM Funcionario
WHERE Salario > 4000.00 AND Dnr = 1 ;
Delete
Se a condição não for especificada,
todas as tuplas da tabela serão
removidas. Cuidado!