Visitantes

Powered By Blogger

Pesquisar neste Blog

domingo, 22 de dezembro de 2019

SQL - Filtros de Seleção




7. SQL - FILTROS DE SELEÇÃO 

Os comandos abordados até então, são utilizados em relação à estrutura das tabelas em sua totalidade. 

Para busca e seleção de áreas específicas das tabelas devemos acrescentar o complemento WERE em alguns dos comandos abordados anteriormente para que a operação somente seja realizada nos registros que atenderem as condições especificadas, neste sentido, faz-se necessário a abordagem do conceito de operadores. 

OPERADORES RELACIONAIS: 

• Igual (=), Diferente (!=) 

• Maior (>), Maior ou igual (>=) 

• Menor (<), Menor ou igual (<=) 

• Nulo (IS NULL), ou não-nulo (IS NOT NULL) 

• Entre intervalo (BETWEEN) 

• Valor parcial (like) 


OPERADORES LÓGICOS: 

• AND 
• OR 
• NOT 


Para exemplo de aplicação, adotemos duas situações distintas: 

1º Buscar no banco de dados todas as informações referentes a uma determinada pessoa através do nº de CPF; 

2º Pesquisar quantas pessoas com idade superior a vinte anos estão cadastradas no sistema 

SINTAXE: 
SELECT Campos FROM Tabela WHERE Condição

SELECT * FROM Pessoas WHERE CPF = '111.111.111-11'
SELECT NOME FROM PESSOAS WHERE IDADE > 20


Para atualização de campos específicos, podemos utilizar o comando UPDATE seguido do complemento WERE, exemplos a seguir: 

Se fosse necessário atualizar o nome do titular do CPF 222.222.222-22 para Fábio, usaríamos a sintaxe abaixo, o mesmo se aplica a mudança de idade para 25 anos do usuário Mário no segundo exemplo 

UPDATE Tabela SET Campo = Valor WHERE Condição
UPDATE PESSOAS SET NOME = 'Fabio' WHERE  CPF = '222.222.222-22'
UPDATE PESSOAS SET IDADE = 25 WHERE NOME = 'Mario'


Para deletar campos específicos sem excluir a tabela inteira, podemos usar o comando DELETE precedido do complemento WERE.

DELETE FROM Tabela WHERE Condição
DELETE FROM PESSOAS WHERE CPF = '222.222.222-22'
DELETE FROM PESSOAS WHERE NOME = 'Mario'


8. RELACIONAMENTOS NO SQL 

Para relacionarmos tabelas, utilizamos o parâmetro JOIN, sua sintaxe é:

SELECT Nome dos Campos FROM Nome-da-Tabela1 
JOIN Nome-da-Tabela2  ON Nome-da-Tabela3 

SELECT Campos FROM T1 JOIN T2 ON T1.FK=T2.PK
Condição: Relacionar chave estrangeira da Tabela1 com chave primária da Tabela2. Isto não é uma regra, aplica-se ao exemplo.

Se os campos em comum entre as tabelas possuírem o mesmo nome, podemos usar esta sintaxe:  

SELECT Nome dos Campos FROM T1 JOIN T2 USING Chave
Observação: onde Chave é o nome da chave da tabela.


INNER JOIN

SELECT * FROM Alunos JOIN Cursos ON Alunos.CPF = Cursos.CPF


SQL - Indice, Chave e Relacionamento da Tabela


SQL - Indice da Tabela


Criar Índice = CREATE INDEX Nome ON

Alterar Índice = ALTER INDEX TabelaEColuna

Exclusão Indice = DROP INDEX Nome Propriedade Nome

OBS: O comando DROP INDEX remove o índice, mas não remove os dados no campo em questão.



4. NORMALIZAÇÃO DE DADOS 
(RELACIONAMENTOS E CHAVES) 

Normalização de dados é um termo que está intimamente ligado a Relacionamentos, que por sua vez é ligado a chaves. 

• Relacionamentos = São ligações entre tabelas onde existes um ou mais campos em comum entre as tabelas relacionadas conhecidos como campos chaves. 

• Campos Chaves = São valores que apresentam “referência” de uma tabela em outra (chave de identificação). As tabelas dos bancos de dados são compostas por linhas e colunas, sendo que algumas das colunas podem apresentar características especificas de acordo com a forma com que a tabela foi construída ou da aplicação que será construída sob o banco de dados, geralmente algumas colunas são criadas especificamente para gerar relacionamentos entre duas ou mais tabelas, tais colunas são denominadas “colunas chaves”. 


4.1 Tipos de Chaves 

1. Chaves Primárias (Primary Key – PK), os valores são únicos (não se repetem nos registros da tabela). Esta característica também é denominada de identificador único. 

2. Chave Composta é formada pela composição de duas ou mais colunas para gerar um identificador único, podendo significar que nenhum campo isoladamente possa se tornar a chave primária, sendo necessário dois ou mais campos para gerar uma combinação única de cada registro. 

 Neste exemplo o nº de CPF é utilizado como chave primária, não pode haver duas pessoas com o mesmo número de CPF. Em uma tabela de cadastro de alunos, o mesmo se aplica ao número de RA (Registro de Aluno) 

Usando a mesma tabela do exemplo anterior, neste caso, se o nº de CPF dependesse de cada estado, a identificação seria composta pela chave estrangeira. 

3. Chave Estrangeira (Foreign Key – FK), modelo adotado onde a coluna armazena a chave primária de outra tabela (referência), não sendo necessário preencher todas as informações que são “buscadas” através do código ou informação atrelada. 

Neste exemplo, a tela de cadastro utiliza uma tabela que armazena os dados utilizando o número de matrícula como uma chave estrangeira, sendo que, este mesmo campo é a chave primária no cadastro de funcionários (RH) 

4.2 Tipos de Relacionamentos 

a) Relacionamento 1 para 1 (1:1), para cada registro na primeira tabela existe no máximo um correspondente na segunda tabela, e vice-versa. 

Neste exemplo, existe um único correspondente na tabela 2 para a tabela 1 em virtude de cada pessoa possuir um número específico de CPF.

b) Relacionamento 1 para muitos (1:*), neste tipo de relacionamento, para cada registro na primeira tabela podem haver dois ou mais correspondentes na segunda tabela, mas para cada registro na segunda tabela deve haver apenas um correspondente na primeira tabela. Neste exemplo, um indivíduo pode ser proprietário de mais de um automóvel, sendo possível também que outra pessoa não possua nenhum automóvel registrado em seu número de CPF.

c) Relacionamento muitos para muitos (*:*), para cada registro da primeira tabela podem existir um ou mais correspondentes na segunda tabela, e vice-versa. Neste exemplo, uma pessoa pode exercer mais de uma profissão, assim como, uma determinada profissão possa ser exercida por mais de uma pessoa.


A Linguagem SQL tem como grandes virtudes sua capacidade de gerenciar índices, sem a necessidade de controle individualizado de índice corrente, algo muito comum nas linguagens de manipulação de dados do tipo registro a registro. 



SQL - Tipos de Dados


4.3 Tipos de Dados SQL 

Abaixo segue uma relação dos tipos de dados básicos do SQL Server, sendo que os tipos que estiverem marcados com * somente funcionam a partir do SQL Server 2000 


• TINYINT: 
Valores numéricos inteiros variando de 0 até 256 


• SMALLINT: 
Valores numéricos inteiros variando de –32.768 até 32.767 


• INT: 
Valores numéricos inteiros variando de -2.147.483.648 até 2.147.483.647 

• BIGINT:
Valores numéricos inteiros variando de -92.23.372.036.854.775.808 até 9.223.372.036.854.775.807 


• BIT: 
Somente pode assumir os valores 0 ou 1. Utilizado para armazenar valores lógicos. 


• DECIMAL(I,D) e NUMERIC(I,D): Armazenam valores numéricos inteiros com casas decimais utilizando precisão. onde:
I - deve ser substituído pela quantidade de dígitos total do número 
D - deve ser substituído pela quantidade de dígitos da parte decimal (após a vírgula). 

DECIMAL e NUMERIC possuem a mesma funcionalidade, porém DECIMAL faz parte do padrão ANSI e NUMERIC é mantido por compatibilidade. 

Por exemplo, DECIMAL(8,2) armazena valores numéricos decimais variando de – 999999,99 até 999999,99 

* Lembrando sempre que o SQL Server internamente armazena o separador decimal como ponto (.) e o separador de milhar como vírgula (,). Essas configurações INDEPENDEM de como o Windows está configurado no painel de controle e para DECIMAL E NUMERIC, somente o separador decimal (.) é armazenado. 


• SMALLMONEY: 
Valores numéricos decimais variando de -214.748,3648 até 214.748,3647 


• MONEY:
Valores numéricos decimais variando de -922.337.203.685.477,5808  até  922.337.203.685.477,5807 


• REAL: 
Valores numéricos aproximados com precisão de ponto flutuante, indo de -3.40E + 38 até 3.40E + 38 


• FLOAT: 
Valores numéricos aproximados com precisão de ponto flutuante, indo de -1.79E + 308  até  1.79E + 308 


• SMALLDATETIME: 
Armazena hora e data variando de 1 de janeiro de 1900 até 6 de junho de 2079. A precisão de hora é armazenada até os segundos. 


• DATETIME: 
Armazena hora e data variando de 1 de janeiro de 1753 até 31 de Dezembro de 9999. A precisão de hora é armazenada até os centésimos de segundos. 


• CHAR(N): 
Armazena N caracteres fixos (até 8.000) no formato não Unicode. Se a quantidade de caracteres armazenada no campo for menor que o tamanho total especificado em N, o resto do campo é preenchido com espaços em branco.


• VARCHAR(N): 
Armazena N caracteres (até 8.000) no formato não Unicode. Se a quantidade de caracteres armazenada no campo for menor que o tamanho total especificado em N, o resto do campo não é preenchido. 


• TEXT: 
Armazena caracteres (até 2.147.483.647) no formato não Unicode. Se a quantidade de caracteres armazenada no campo for menor que 2.147.483.647, o resto do campo não é preenchido. Procure não utilizar este tipo de dado diretamente, pois existem funções específicas para trabalhar com este tipo de dado. 


• NCHAR(N): 
Armazena N caracteres fixos (até 4.000) no formato Unicode. Se a quantidade de caracteres armazenada no campo for menor que o tamanho total especificado em N, o resto do campo é preenchido com espaços em branco. 


• NVARCHAR(N): 
Armazena N caracteres (até 4.000) no formato Unicode. Se a quantidade de caracteres armazenada no campo for menor que o tamanho total especificado em N, o resto do campo não é preenchido. 


• NTEXT: 
Armazena caracteres (até 1.073.741.823) no formato Unicode. Se a quantidade de caracteres armazenada no campo for menor que 1.073.741.823, o resto do campo não é preenchido. Procure não utilizar este tipo de dado diretamente, pois existem funções específicas para trabalhar com este tipo de dado. 



SQL - Agrupamento GROUP BY


GROUP BY - Agrupamentos 

As funções de grupo operam sobre grupos de tuplas(linhas). Retornam resultados baseados em grupos de tuplas em vez de resultados de funções por tupla individual. 

A claúsula "group by" do comando "select" é utilizada para dividir tuplas em grupos menores. 

A cláusula "GROUP BY" pode ser usada para dividir as tuplas de uma tabela em grupos menores. As funções de grupo devolvem uma informação sumarizada para cada grupo. 

16) Apresente a média de salário pagos por departamento. 

Resp: SELECT DUPNUME, AVG(EMPSALA) FROM EMP GROUP BY DEPNUME; 

Observação: Qualquer coluna ou expressão na lista de seleção, que não for uma função agregada, deverá constar da claúsula "group by". Portanto é errado tentar impor uma "restrição" do tipo agregada na cláusula Where. Having 

A cláusula "HAVING" pode ser utilizada para especificar quais grupos deverão ser exibidos, portanto restringindo-os. 

17) Retome o problema anterior, porém apresente resposta apenas para departamentos com mais de 10 empregados. 

Resp: SELECT DEPNUME, AVG(EMPSALA) FROM EMP GROUP BY DEPNUME HAVING COUNT(*) > 3; 

Observação.: A claúsula "group by" deve ser colocada antes da "having", pois os grupos são formados e as funções de grupos são calculadas antes de se resolver a cláusula "having". 

A cláusula "where" não pode ser utilizada para restringir grupos que deverão ser exibidos. 

Exemplificando ERRO típico - Restringindo Média Maior que 1000: 

SELECT DEPNUME, AVG(EMPSALA) FROM EMP WHERE AVG(SALARIO) > 1000 GROUP BY DEPNUME; 
( Esta seleção está ERRADA! ) 

SELECT DEPNUME, AVG(EMPSALA) FROM EMP GROUP BY DEPNUME HAVING AVG(EMPSALA) > 1000; 
( Seleção Adequada ) 

Seqüência no comando "Select": 

SELECT coluna(s) FROM tabela(s) WHERE condições das tuplas GROUP BY condições dos grupos de tuplas HAVING condições dos grupos de tuplas ORDER BY colunas; 

O "sql" fará a seguinte avaliação: 

a) WHERE, para estabelecer tuplas individuais candidatas (não pode conter funções de grupo) 

b) GROUP BY, para fixar grupos. 

c) HAVING, para selecionar grupos para exibição. 

Equi-Junção (junção por igualdade) - O relacionamento existente entre tabelas é chamado de equi-junção, pois os valores de colunas das duas tabelas são iguais. 

A Equi-junção é possível apenas quando tivermos definido de forma adequada a chave estrangeira de uma tabela e sua referência a chave primária da tabela precedente. 

Apesar de admitir-se em alguns casos, a equi-junção de tabelas, sem a correspondência Chave Primária-Chave Estrangeira, recomendamos fortemente não utilizar este tipo de construção, pois certamente em nenhum momento nos exemplos propostos em nossa disciplina SQL ou nas disciplinas de Análise e Projeto de Sistemas, serão necessárias tais junções. 

18) Listar Nomes de Empregados, Cargos e Nome do Departamento onde o empregado trabalha. 

Resp: Observemos que dois dos três dados solicitados estão na Tabela Emp, enquanto o outro dado está na Tabela Dept. 

Deveremos então acessar os dados restringindo convenientemente as relações existentes entre as tabelas.  De fato sabemos que DEPNUME é chave primária da tabela de Departamentos e também é chave estrangeira da Tabela de Empregados. Portanto, este campo será o responsável pela equi-junção. 

SELECT A.EMPNOME, A.EMPSERV, B.DEPNOME FROM EMP A, DEPT B WHERE A.DEPNUME = B.DEPNUME; 

Observação: 

Note que as tabelas quando contém colunas com o mesmo nome, usa-se um apelido "alias" para substituir o nome da tabela associado a coluna. 

Imagine que alguém tivesse definido NOME para ser o Nome do Empregado na Tabela de Empregados e também NOME para ser o Nome do Departamento na Tabela de Departamentos. 

Tudo funcionaria de forma adequada, pois o aliás se encarregaria de evitar que uma ambiqüidade fosse verificada. 

Embora o SQL resolva de forma muito elegante o problema da nomenclatura idêntica para campos de tabelas, recomendamos que o estudante fortemente evite tal forma de nomear os campos. 

O SQL nunca confundirá um A.NOME com um B.NOME, porém podemos afirmar o mesmo de nós mesmos? 

19) Liste os Códigos do Cada Funcionário, seus Nomes, seus Cargos e o nome do Gerente ao qual este se relaciona. 

Resp: Precisamos criar um auto-relacionamento, ou seja, juntar uma tabela a ela própria. É possível juntarmos uma tabela a ela mesma com a utilização de apelidos, permitindo juntar tuplas da tabela a outra tuplas da mesma tabela. 

SELECT A.EMPNUME, A.EMPNOME, A.EMPSERV, B.EMPNOME FROM EMP A, EMP B WHERE A.EMPGERE = B.EMPNUME; 

As Sub-Consultas Uma sub-consulta é um comando "select" que é aninhado dentro de outro "select" e que devolve resultados intermediários. 

20) Relacione todos os nomes de funcionários e seus respectivos cargos, desde que o orçamento do departamento seja igual a 300000. 

Resp: SELECT EMPNOME, EMPSERV FROM EMP A WHERE 300000 IN (SELECT DEPORCA FROM DEPT WHERE DEPT.DEPNUME = A.DEPNUME ); 

Nota: Observe que a cláusula IN torna-se verdadeira quando o atributo indicado está presente no conjunto obtido através da subconsulta. 

21) Relacione todos os departamentos que possuem empregados com remuneração maior que 3500. 

Resp: SELECT DEPNOME FROM DEPT A WHERE EXISTS (SELECT * FROM EMP WHERE EMPSALA > 3500 AND EMP.DEPNUME = A.DEPNUME'); 

Nota: Observe que a cláusula EXISTS indica se o resultado de uma pesquisa contém ou não tuplas. Observe também que poderemos verficar a não existência (NOT EXISTS) caso esta alternativa seja mais conveniente.

SQL - Funções de Caracteres


SQL - Funções de Caracteres 

Lower - força caracteres maiúsculos aparecerem em minúsculos. 

Upper - força caracteres minúsculos aparecerem em maiúsculos. 

Concat(x,y)- concatena a string "x" com a string "y". 

Substring(x,y,str)- extrai um substring da string "str", começando em "x", e termina em "y". 

To_Char(num)- converte um valor numérico para uma string de caracteres. 

To_Date(char,fmt)- converte uma string caracter em uma data. ^Q - converte data para o formato apresentado. 


Apresente o nome de todos os empregados em letras minúsculas. 
Resp: SELECT LOWER( EMPNOME ) FROM EMP; 


Apresente o nome de todos os empregados (somente as 10 primeiras letras). 
Resp: SELECT SUBSTRING (1,10,EMPNOME) FROM EMP; 


Apresente o nome de todos os empregados admitidos em 01/01/80. 

Resp: SELECT * FROM EMP WHERE EMPADMI = ^Q"DD-AAA-YYYY"("01-JAN-1980"); 
ou SELECT * FROM EMP WHERE EMPADMI = ^Q("01-JAN-1980"); 


Funções Agregadas (ou de Agrupamento) função retorno avg(n) média do valor n, ignorando nulos count(expr) vezes que o número da expr avalia para algo nao nulo max(expr) maior valor da expr min(expr) menor valor da expr sum(n) soma dos valores de n, ignorando nulos 


Apresente a Média, o Maior, o Menor e também a Somatória dos Salários pagos aos empregados. 

Resp: 
SELECT AVG(EMPSALA) FROM EMP; 
SELECT MIN(EMPSALA) FROM EMP; 
SELECT MAX(EMPSALA) FROM EMP; 
SELECT SUM(EMPSALA) FROM EMP; 



SQL - União de Consultas


Uniões 

Podemos eventualmente unir duas linhas de consultas simplesmente utilizando a palavra reservada UNION. 

Liste todos os empregados que tenham códigos < 10 ou Funcionários que trabalhem em departamentos com código maior que 10. 

Resp: Poderíamos resolver esta pesquisa com um único Select, porém devido ao fato de estarmos trabalhando em nosso exemplo com apenas duas tabelas não conseguimos criar um exemplo muito adequado para utilização deste recurso. 

Select * From Emp Where EmpNume < 10

Union (Select * From Emp Where DepNume < 10);


SQL - Relatórios

PARTE III - Relatórios 

Comando: 

REPORT DISTINCT / UNIQUE [atributo(s)] REPORTTOP PAGETOP TOP DETAIL NONE BOTTOM PAGEBOTTOM REPORTBOTTOM FROM [tabelas] [WHERE clausula-where] [GROUP BY clausula-grupo] [ORDER BY clausula-order by]; 

Como exemplo converteremos um simples Select em um Report, temos: 

SELECT EMPNOME FROM EMP WHERE DEPNUME = 1000; REPORT DETAIL EMPNOME WHERE DEPNUME = 1000; 

Podemos direcionar a saída de um relatório tanto para um arquivo como para uma impressora. 

Para um arquivo: REPORT ON “RELAT.DAT” ... 

Para uma impressora: REPORT ON LP:” ... 

Agora incrementando um report temos: 

REPORT REPORTTOP COL 10, “*** RELATORIO DE FUNCIONARIOS *** “, TODAY %Q”DD/MM/YY”, SKIP, 
COL 10, “=================================“, SKIP 2 DETAIL COL 10, NOME %C22, SALARIO %FS, ADMISSAO %Q”DD/MM/YY” EPORTBOTTOM COL 10, “=================================“, SKIP, COL 20, “TOTAL:”, TOTAL(SALARIO) FROM EMP ORDER BY NOME; 

Onde: 

REPORTTOP 
- O que sera impresso no topo do relatório. 

PAGETOP 
- Impresso em cada topo de pagina. 

TOP
- Impresso em cada Topo do Sort-Grupo do relatório. 

DETAIL 
- O que sera impresso em cada linha. 

NONE 
- Se não tiver resultado o select, não sera impresso o relatório. 

BOTTOM 
- Impresso em cada Bottom do Sort-Grupo do relatório 

PAGEBOTTOM 
- O que sera impresso no rodapé de cada pagina. 

REPORTBOTTOM 
- O que sera impresso no rodape do relatório. 


Formatos: 

%C - caracter %
D - data 
y - ano, 
n - mes numérico, 
a - mes alfanumérico, 
d - dia, 
j - dia e ano juliano 

Exemplo: 
%D”dd/mm/yy” %
I - inteiro 

%FSZ onde: 
%F - ponto flutuante 
S - separador de 3 digitos e decimal point 
Z - zeros serão suprimidos 

%Q - data %
J - Hora 
h - hora, 
m - minutos, 
s - segundos 
%T - hora 

E temos as funções: TOTAL, AVERAGE, MAXIMUM, MINIMUM

SQL - Inserções, Alterações e Exclusões


SQL - Inserções, Alterações e Exclusões 

Uma linguagem direcionada a extração de informações de um conjunto de dados, em tese não deveria incorporar comandos de manipulação dos dados. 

Devemos observar contudo que a mera existência de uma linguagem padronizada para acesso aos dados "convidava" os desenvolvedores a aderirem a uma linguagem "padrão" de manipulação de tabelas. 

Naturalmente cada desenvolvedor coloca "um algo mais" em seu SQL (SQL PLUS, SQL *, ISQL, e toda sorte de nomenclaturas), por um lado desvirtuando os objetivos da linguagem (padronização absoluta), mas em contrapartida otimiza os acessos ao seu banco de dados e por maior que sejam estas mudanças, jamais são tão importantes que impeçam que um programador versado em SQL tenha grandes dificuldades em se adaptar ao padrão de determinada implementação. 

De fato as diferenças entre o SQL da Sybase, Oracle, Microsoft, são muito menores dos que as existentes entre o C, o BASIC e o Pascal, que são chamadas de linguagens "irmãs", pois todas originam-se conceitualmente no FORTRAN. 

Podemos observar que todas as três linguagens mencionadas possuem estruturas de controle tipo "para" (for), "enquanto" (while) e repita (do..while, repeat..until). 

Todas trabalham com blocos de instrução, todas tem regras semelhantes para declaração de variáveis e todas usam comandos de tomada decisão baseadas em instruções do tipo "se" ou "caso", porém apesar de tantas semelhanças (sic), é praticamente impossível que um programador excelente em uma linguagem consiga rapidamente ser excelente em outra linguagem do grupo. 

Poderíamos arriscar a dizer que um excelente programador C que utilize a implementação da Symantech terá que passar por um breve período de adaptação para adaptar-se ao C da Microsoft. 

O que ocorreria então se este programador tiver que adaptar-se ao Delphi (Pascal) da Borland? 

De forma alguma o mesmo ocorrerá com o especialista em SQL ao ter que migrar do Banco de Dados X para o Banco de Dados Y. 

Naturalmente existirá a necessidade de aprendizado, mas este programador poderá ir adaptando-se aos poucos sem precisar ser retreinado, o que é um aspecto extremamente vantajoso para as empresas. 

===============================================

SQL - Inserir registros (Insert): 
INSERT INTO [] [VALUES

Exemplo: INSERT INTO DEPT; 
Possibilita a inserção de registros de forma interativa. 

INSERT INTO DEPT (DEPNUME,DEPNOME,DEPLOCA) VALUES (70,"PRODUCAO","RIO DE JANEIRO"); 
Possibilita a inserção de registros em tabelas sem digitação dos dados. 

Exemplo: Inserindo Dados em uma tabela: 
inser into curso_sql (id,nome,endereço,email) 
value (1,’Rogerio’,’Rua Bela Cintra’,rogerio@nrsystem.com);

===============================================

SQL - Atualizar registros (Update): 
Sintaxe: UPDATE SET = [WHERE ]; 
Sintaxe: UPDATE Tabela SET Campo = Valor;

Exemplo: UPDATE EMP SET EMPSALA = EMPSALA* 1.2 WHERE EMPSALA< 1000; 

===============================================

ALTER DATABASE
Para alterar o banco de dados é utilizado o comando ALTER seguido do seu nome e propriedade a ser alterada. 
Sua sintaxe é: ALTER DATABASE Nome Propriedade

================================================

DROP DATABASE
A exclusão definitiva (irreversível) é possibilitada pelo comando DROP.  Sua sintaxe é: DROP DATABASE Propriedade Nome, e a exclusão de tabelas que são referenciadas em outras tabelas pode gerar problemas de inconsistência nas mesmas. 

===============================================

ALTER TABLE
Para deletar colunas de uma tabela usamos a sintaxe:  
ALTER TABLE Tabela DROP Campo

================================================

SQL - Excluir registros (Delete) 
Sintaxe: DELETE FROM [WHERE ]; 
Sintaxe: DELETE FROM Tabela;

Ex: DELETE FROM emp WHERE EMPSALA > 5000; 

Transações Muitas vezes gostaríamos que determinado processo, caso fosse abortado por qualquer motivo, pudesse ser inteiramente cancelado. 

Imaginemos por exemplo um usuário digitando um pedido. 

Imaginemos ainda que o sistema possa reservar cada item solicitado de maneira "on line", ou seja ao mesmo tempo em que estou digitando a quantidade o sistema já "empenhe" uma quantidade equivalente no estoque. 

Imaginemos ainda que o sistema deve cancelar todas as operações se apenas um dos itens não puder ser atendido. 

Grande problema, caso não pudéssemos anular todos os processos a partir de determinada condição. 

Vamos simular tal ocorrência com nosso banco de dados EMP. Imaginemos que ao invés de digitarmos: 
DELETE FROM emp WHERE salario > 5000; 

nós tivéssemos digitado: 
DELETE FROM emp WHERE salario > 500; 

Ao invés de eliminarmos 2 registros, praticamente teríamos eliminado o banco de dados todo. 

Para evitarmos que um erro de digitação, ou um processo iniciado porém sem condição de ser completado integralmente comprometa todos nossos dados podemos criar uma transação que nos assegurará que nossos testes sejam bem sucedidos ou cancelados sem comprometer nossos dados. 

begin transaction; 
delete from emp where salario > 500; 
IF SQL_RECORDCOUNT > 20 THEN; 
ROLLBACK TRASACTION; 
else COMMIT; 
endif; 
end transaction; 


Visões:  Uma visão consiste basicamente de uma tabela derivada de outras tabelas. 

Considerando o exemplo TRABALHO, poderíamos criar uma visão baseada na Tabela de Empregados (EMP) e na Tabela de Departamentos (DEPT) onde tivéssemos somente os Nomes dos Funcionários e os Departamentos nos quais estes trabalhassem.  Teríamos algo assemelhado ao abaixo representado: 

CREATE VIEW EMP_DEP AS SELECT E.EMPNOME, D.DEPNOME FROM EMP E, DEPT D WHERE E.DEPNUME = D.DEPNUME; 

Devemos observar que: 

1- Uma visão definida sobre uma única tabela somente será atualizável se os atributos da tal visão contiverem a chave primária de tal tabela. 

2- Visões sobre várias tabelas não são passíveis de atualizações. 

3- Visões que se utilizam de funções de agrupamentos, também não poderão ser atualizadas.