Structured Query Language (SQL) Aula Prática
Linguagens de SGBD Durante o desenvolvimento do sistema R, pesquisadores da IBM desenvolveram a linguagem SEQUEL, primeira linguagem de acesso para Sistemas Gerenciadores de Banco de Dados Relacionais. ISO e ANSI lançou em 1986 a primeira versão do padrão da linguagem SQL, o SQL-86. A linguagem passou por aperfeiçoamentos em 1989 e, em 1992, foi lançada a SQL-92 ou SQL2. Um novo padrão, chamado de SQL-99 ou SQL3 foi lançado no ano de 2000. Foi o primeiro padrão a estender a linguagem para permitir a utilização de tipos de dados complexos e a incorporar características da orientação a objetos. Após uma grande revisão do padrão SQL3 foi lançada a SQL:2003. Nesta verão foi adicionada uma nova parte ligada ao tratamento de XML. 2
Linguagens de SGBD Linguagem de Definição de Dados (DDL): usada para especificar o esquema conceitual. Linguagem de Definição de Armazenamento (SDL): usada para especificar o esquema interno, mas na maioria dos SGBDs a DDL é usada para definir este esquema. Linguagem de Definição de Visões (VDL): usada para especificar as visões dos usuários e os seus mapeamentos para o esquema conceitual, mas na maioria dos SGBDs a DDL é usada para definir ambos os esquemas, o conceitual e o externo. Linguagem de Manipulação de Dados (DML): usada para manipular os dados em um banco de dados. As manipulações típicas são a recuperação, inserção, remoção e modificação dos dados. 3
Tipos de Dados (4 GB) (4 GB) 4
Modelo Utilizado 5
Pessoa(CPF, Nome, Sexo) Piloto (CPF, Cart_Trab) CPF Referencia Pessoa Passageiro(CPF, Dieta) CPF Referencia Pessoa Voo(Numero, Data, P_CPF) CPF Referencia Piloto Reserva(V_Numero, P_CPF) V_Numero Referencia Voo P_CPF Referencia Passageiro Modelo Utilizado Telefone(Numero, P_CPF) CPF Referencia Pessoa 6
Criação de Tabelas: CREATE TABLE NOME_TABELA( COL1 TIPO_COLUNA [NOT NULL], COL1 TIPO_COLUNA [NOT NULL], COL1 TIPO_COLUNA [NOT NULL] ) 7
Na criação de tabelas, é possível especificar vários tipos de restrições: Chave Primária: PRIMARY KEY ; Chave Estrangeira: FOREIGN KEY; Chave Alternativa (ou alternada): UNIQUE; Restrição de Domínio: CHECK. Pode-se atribuir nomes às restrições de integridade: CONSTRAINT NOME_RESTRIÇÃO TIPO RESTRIÇÃO. 8
CREATE TABLE Pessoa(CPF VARCHAR(11) NOT NULL, Nome VARCHAR(30) NOT NULL UNIQUE, Sexo VARCHAR(1) NOT NULL, PRIMARY KEY (CPF)); CREATE TABLE Piloto(CPF VARCHAR(11) NOT NULL, Cart_Trab VARCHAR(13) NOT NULL UNIQUE, PRIMARY KEY (CPF), FOREIGN KEY (CPF) REFERENCES Pessoa (CPF)); 9
CREATE TABLE Passageiro(CPF VARCHAR(11) NOT NULL CONSTRAINT PK_PASSAGEIRO PRIMARY KEY CONSTRAINT FK_PESSOA REFERENCES Pessoa (CPF), Dieta VARCHAR(1) CHECK (Dieta IN( S, N ))); CREATE TABLE Voo(Numero Numeric NOT NULL CONSTRAINT PK_VOO PRIMARY KEY, Data Date NOT NULL, TIPO VARCHAR2(15) DEFAULT NACIONAL, P_CPF VARCHAR(11) NOT NULL CONSTRAINT FK_PILOTO REFERENCES Piloto (CPF)); 10
Deleção de item referenciado:... CONSTRAINT FK_PILOTO FOREIGN KEY (P_CPF) REFERENCES Piloto (CPF) ON DELETE RESTRICT); -- impede a exclusão (default)... CONSTRAINT FK_PILOTO FOREIGN KEY (P_CPF) REFERENCES Piloto (CPF) ON DELETE SET NULL); -- transforma o valor em nulo... CONSTRAINT FK_PILOTO FOREIGN KEY (P_CPF) REFERENCES Piloto (CPF) ON DELETE CASCADE); -- exclui a linha da tabela 11
Criação de uma tabela com linhas de outra: CREATE TABLE Pessoa_Nova AS SELECT CPF, Nome, Sexo FROM Pessoa; 12
CREATE VIEW <nome-de-visão> [ (lista-de-colunas) ] AS <comando-de-seleção> [WITH CHECK OPTION] CREATE VIEW Empregados_Sede AS SELECT (Nome, Endereco, Sexo, Data-nasc) FROM EMPREGADO Atualização (INSERT, UPDATE, DELETE) de visão: A query não pode conter join, ou seja, deve ser baseada apenas em uma tabela. A query deve conter todas as colunas nott null da tabela referenciada. A query não pode conter operadores de conjunto: UNION, EXCEPT e INTERSECT. A query não pode conter o operador DISTINCT. A query não pode conter funções de agregação. A query não pode conter GROUP BY. 13
Alteração de Tabelas: Incluir novas colunas em uma tabela; Excluir colunas existentes em uma tabela; Adicionar a definição de uma restrição em uma tabela; Excluir a definição de uma restrição existente em uma tabela; Modificar uma coluna. 14
CREATE TABLE Reserva(V_Numero Numeric NOT NULL, P_CPF VARCHAR(11) NOT NULL); CREATE TABLE Telefone(Numero VARCHAR(15) NOT NULL, P_CPF VARCHAR(11) NOT NULL, PRIMARY KEY (Numero, P_CPF), FOREIGN KEY (P_CPF) REFERENCES Pessoa(CPF)); 15
ALTER TABLE Telefone ADD COLUMN TIPO VARCHAR2(5) DEFAULT FIXO NOT NULL; ALTER TABLE Telefone DROP COLUMN Tipo; ALTER TABLE TELEFONE ADD CONSTRAINT TIPO_TELEFONE CHECK (TIPO IN( Fixo, Movel )); ALTER TABLE TELEFONE DROP CONSTRAINT TIPO_TELEFONE; ALTER TABLE TELEFONE MODIFY (TIPO VARCHAR2(5)); -- para diminuir tamanho a coluna precisa estar vazia. 16
ALTER TABLE Reserva ADD CONSTRAINT PK_RESERVA PRIMARY KEY (V_Numero, P_CPF); ALTER TABLE Reserva ADD CONSTRAINT FK_RESERVA_VOO FOREIGN KEY (V_Numero) REFERENCES Voo (Numero); ALTER TABLE Reserva ADD CONSTRAINT FK_RESERVA_PASSAGEIRO FOREIGN KEY (P_CPF) REFERENCES Passageiro (CPF); ALTER TABLE Reserva ENABLE CONSTRAINT FK_RESERVA_PASSAGEIRO; ALTER TABLE Reserva DISABLE CONSTRAINT FK_RESERVA_PASSAGEIRO; 17
Renomear Tabela: Não é um comando SQL:2003. RENAME Pessoa TO Pessoa_Nova; -- Oracle RENAME TABLE Pessoa TO Pessoa_Nova; Deletar Tabela (estrutura): DROP TABLE Pessoa; 18
FIM