Anda di halaman 1dari 6

Principais comandos SQL

==================================================
GERENCIANDO TABELAS: DDL - DATA DEFINITION LANGUAGE

** CRIANDO UMA TABELA


CREATE TABLE EMPREGADOS
(ID VARCHAR(4) NOT NULL,
NOME VARCHAR(30) NOT NULL,
PAGAMENTO DECIMAL(4,2) NOT NULL);

** DELETANDO UMA TABELA


DROP TABLE EMPREGADOS;

** ALTERANDO UMA TABELA


*** ADICIONANDO UMA NOVA COLUNA
ALTER TABLE EMPREGADOS ADD COLUMN (TELEFONE VARCHAR(10) NOT NULL);

*** MODIFICANDO UMA COLUNA


ALTER TABLE EMPREGADOS MODIFY COLUMN (TELEFONE VARCHAR(12));

** APAGANDO OS DADOS DE UMA TABELA,


TORNANDO A TABELA NO ESTADO DE ORIGEM
TRUNCATE TABLE EMPREGADOS;

==================================================
MANIPULANDO DADOS: DML - DATA MAIPULATION LANGUAGE

** Inserindo dados
INSERT INTO EMPREGADOS VALUES ('1111', 'Jo�o da Silva', 100.50);

** Alterando dados
UPDATE EMPREGADOS SET PAGAMENTO = 120 WHERE ID = '1111';

** Deletando dados
DELETE FROM EMPREGADOS WHERE ID = '1111';

COMMIT;
ROLLBACK;
SAVEPOINT S1;
ROLLBACK TO S1;

==================================================
SELECIONANDO DADOS: DQL - DATA QUERY LANGUAGE

SELECT column1, column2, ...


FROM table1, table2, ...
[ WHERE column1 = 'value1'
AND column2 = 'value2'
OR (column1 = 'value3'
AND column2 = 'value4')]
[GROUP BY column1, column2, ...]
[HAVING function = 'value']
[ORDER BY column1, column2, ...];

SELECT COUNT(*) FROM EMPREGADOS;

SELECT CIDADE, AVG(PAGAMENTO) FROM EMPREGADOS


GROUP BY CIDADE
HAVING AVG(PAGAMENTO) > 100;

SELECT E.NOME, PE.PAGAMENTO


FROM EMPREGADOS E, PAGAMENTO_EMPREGADOS PE
WHERE E.EID = PE.EID;

SELECT ID, NOME FROM EMPREGADOS


WHERE PAGAMENTO > (SELECT AVG(PAGAMENTO) FROM EMPREGADOS);

==================================================
CONTROLANDO ACESSO AOS DADOS: DCL - DATA CONTROL LANGUAGE

GRANT SELECT, INSERT, UPDATE, DELETE ON EMPREGADOS TD USER12;


REVOKE DELETE ON EMPREGADOS FROM USER12;

==================================================
GERENCIANDO �NDICES: DDL - DATA DEFINITION LANGUAGE

CREATE INDEX EMPREGADOS_IDX ON EMPREGADOS(NOME);

CREATE UNIQUE INDEX EMPREGADOS_IDX ON EMPREGADOS(NOME);

CREATE INDEX EMPREGADOS_IDX ON EMPREGADOS(NOME, PAGAMENTO);

DROP INDEX EMPREGADOS IDX;

==================================================
GERENCIANDO VIS�ES (VIEWS): DDL - DATA DEFINITION LANGUAGE

CREATE VIEW MAIOR_PAGAMENTO_EMPREGADOS AS


SELECT FROM EMPREGADOS
WHERE PAGAMENTO > 150;

CREATE VIEW NOMES AS


SELECT NOME FROM EMPREGADOS;

DROP VIEW NOMES;

==================================================
FUN��ES DE AGRAGA��O

COUNT - Retorna o n�mero de linhas


SUM - Retorna a soma de uma coluna espec�fica
AVG - Retorna o valor m�dio de uma coluna espec�fica
MAX - Retorna o valor m�ximo de uma coluna espec�fica
MIN - Retorna o valor m�nimo de uma coluna espec�fica

SELECT AVG(PAGAMENTO) FROM EMPREGADOS;

SELECT COUNT(*) FROM EMPREGADOS;

==================================================
OPERADORES L�GICOS

IS NULL
BETWEEN
IN
LIKE
EXISTS
UNIQUE
ALL and ANY
CONTAINING

SELECT * FROM EMPREGADOS


WHERE PAGAMENTO BETWEEN 100 AND 150;

SELECT NOME, PAGAMENTO


FROM EMPREGADOS
WHERE EID IN ('1111', '2222', '3333');

==================================================
NEGANDO CONDI��ES COM O OPERADOR NOT

NOT EQUAL
NOT BETWEEN
NOT IN
NOT LIKE
NOT EXISTS
NOT UNIQUE

SELECT * FROM EMPREGADOS


WHERE PAGAMENTO NOT BETWEEN 100 AND 150;

SELECT NOME, PAGAMENTO


FROM EMPREGADOS
WHERE EID NOT IN ('1111', '2222', '3333');

SELECT NOME FROM EMPREGADOS


WHERE NOME NOT LIKE 'S%';

*******************************************************************
Exemplos da Net
/*Como retorna informa��es sobre as colunas de tabelas?
Comando:*/
SELECT RDB$RELATION_CONSTRAINTS.RDB$RELATION_NAME AS TABELA,
RDB$RELATION_CONSTRAINTS.RDB$CONSTRAINT_NAME AS CHAVE,
RDB$RELATION_CONSTRAINTS.RDB$INDEX_NAME AS INDICE_DA_CHAVE,
RDB$INDEX_SEGMENTS.RDB$FIELD_NAME AS CAMPO,
RDB$INDEX_SEGMENTS.RDB$FIELD_POSITION AS POSICAO
FROM RDB$RELATION_CONSTRAINTS,
RDB$INDICES,
RDB$INDEX_SEGMENTS
WHERE RDB$RELATION_CONSTRAINTS.RDB$CONSTRAINT_TYPE = 'PRIMARY KEY'
AND RDB$RELATION_CONSTRAINTS.RDB$INDEX_NAME = RDB$INDICES.RDB$INDEX_NAME
AND RDB$INDEX_SEGMENTS.RDB$INDEX_NAME = RDB$INDICES.RDB$INDEX_NAME
ORDER BY RDB$RELATION_CONSTRAINTS.RDB$CONSTRAINT_NAME,
RDB$INDEX_SEGMENTS.RDB$FIELD_POSITION

/*Como resolver problema de arredondamento em colunas tipo Float?


Se voce ainda n�o teve problemas com campos floats ...
ex: voce cadastra 5,0 e vai ver na base ta 4,99999 ...
ajuste seus campos para numeric(9.2)
Esse script transforma todos os campos floats do seu GDB para numeric(9,2)
*/
UPDATE RDB$FIELDS
SET RDB$FIELD_TYPE = 8,
RDB$FIELD_SCALE = -2
WHERE RDB$FIELD_NAME IN ( SELECT RDB$RELATION_FIELDS.RDB$FIELD_SOURCE
FROM RDB$RELATION_FIELDS, RDB$FIELDS
WHERE (RDB$RELATION_FIELDS.RDB$FIELD_SOURCE = RDB$FIELDS.RDB$FIELD_NAME)
AND (RDB$FIELDS.RDB$FIELD_TYPE = 10 )
AND (RDB$FIELDS.RDB$SYSTEM_FLAG <> 1 ) )

/*Como alterar a posi��o de uma coluna sem recriar a tabela?


Comando:*/
ALTER TABLE (TABELA) ALTER COLUMN (CAMPO) POSITION (POSICAO)

/*Como obter a Hora do Servidor FB?


Use nas aplica��es uma unica fonte de hora/data ... a do servidor � a melhor ideia
...
Comando para buscar a hora/data do servidor...*/
SELECT CURRENT_TIMESTAMP AS DATETIME FROM RDB$DATABASE;

/*Se voc� um dia prescisar buscar todas as tabelas do seu GDB e criar um script de
"delete from" ...*/
SELECT DISTINCT 'DELETE FROM '||RDB$RELATION_FIELDS.RDB$RELATION_NAME||';' AS
TABELAS
FROM RDB$RELATION_FIELDS, RDB$FIELDS
WHERE ( RDB$RELATION_FIELDS.RDB$FIELD_SOURCE = RDB$FIELDS.RDB$FIELD_NAME )
AND ( RDB$FIELDS.RDB$SYSTEM_FLAG <> 1 )

/*Adicionar uma constraint ckeck no campo da tabela que verifica outra tabela
antes de gravar o registro ...*/
ALTER TABLE <TABELA_A>
ADD CONSTRAINT <NOME_DA_CONSTRAINT>
CHECK ( <CAMPO_A> IN ( SELECT <CAMPO_A> FROM <TABELA_B> WHERE <CAMPO_B> =
<VALOR_B> ) )

/*Como fa�o para mudar o valor de um generator?*/


SET GENERATOR <NOME_DO_GENERATOR> TO <VALOR>

/*Como excluo um generator do meu Banco?


No Interbase 6 � :*/
DELETE FROM RDB$GENERATORS WHERE RDB$GENERATOR_NAME = <NOME_DO_GENERATOR>;
/*No FireBird 1.5 � :*/
DROP GENERATOR <NOME_DO_GENERATOR>;

/*Qual o comando que devolve as restri��es definidas por CHECKs em uma determinada
tabela ?*/
select r.rdb$constraint_name,r.rdb$constraint_type,t.rdb$trigger_source
from rdb$relation_constraints r
join rdb$check_constraints c on (r.rdb$constraint_name = c.rdb$constraint_name)
join rdb$triggers t on (c.rdb$trigger_name = t.rdb$trigger_name)
where (r.rdb$relation_name='NOME_DA_TABELA')

/*Qual o comando que retorna o nome, a seq��ncia, o tipo e o status das triggers
definidas para uma tabela?*/
select
t.rdb$trigger_name,t.rdb$trigger_sequence,y.rdb$type_name,t.rdb$trigger_inactive
from rdb$triggers t
join rdb$types y on (t.rdb$trigger_type = y.rdb$type)
where (t.rdb$relation_name = 'NOME_DA_TABELA') and (t.rdb$trigger_name not like
'CHECK%') and (y.rdb$field_name='RDB$TRIGGER_TYPE')
por romuloigor

/*Qual o comando que retorna o nome, o tipo e o tamanho, "nulabilidade" e as


checks de um determinado dom�nio?*/
select f.rdb$field_name,t.rdb$type_name,f.rdb$field_length,f.rdb$null_flag,
f.rdb$default_source,f.rdb$validation_source
from rdb$fields f
join rdb$types t on (f.rdb$field_type = t.rdb$type)
where (f.rdb$field_name='NOME_DO_DOMINIO') and (t.rdb$field_name='RDB$FIELD_TYPE')

/*Qual o comando que retorna os �ndices definidos em um Banco de Dados?*/


select i.rdb$index_name,i.rdb$unique_flag,i.rdb$relation_name,s.rdb$field_name
from rdb$indices i
join rdb$index_segments s on (i.rdb$index_name = s.rdb$index_name)
where i.rdb$index_name not like 'RDB$%';

/*Qual o comando que recupera as informa��es sobre os par�metros de uma stored


procedure (nome, tipo, tamanho, entrada/sa�da) ?*/
select
p.rdb$parameter_name,p.rdb$parameter_type,t.rdb$type_name,f.rdb$field_length
from rdb$procedure_parameters p
join rdb$fields f on (p.rdb$field_source = f.rdb$field_name)
join rdb$types t on (f.rdb$field_type = t.rdb$type)
where (p.rdb$procedure_name = 'NOME_DA_PROC') and (t.rdb$field_name =
'RDB$FIELD_TYPE')

/*Qual o comando que recupera as informa��es sobre os par�metros de uma stored


procedure (nome, tipo, tamanho, entrada/sa�da) ?*/
select
p.rdb$parameter_name,p.rdb$parameter_type,t.rdb$type_name,f.rdb$field_length
from rdb$procedure_parameters p
join rdb$fields f on (p.rdb$field_source = f.rdb$field_name)
join rdb$types t on (f.rdb$field_type = t.rdb$type)
where (p.rdb$procedure_name = 'NOME_DA_PROC') and (t.rdb$field_name =
'RDB$FIELD_TYPE')

/*Qual o comando que retorna o nome da exce��o, a mensagem e o tipo de objeto que
utiliza a exce��o ?*/
select e.rdb$exception_name,e.rdb$message,d.rdb$dependent_name,t.rdb$type_name
from rdb$exceptions e
join rdb$dependencies d on (e.rdb$exception_name = d.rdb$depended_on_name)
join rdb$types t on (d.rdb$dependent_type = t.rdb$type)
where (rdb$field_name='RDB$OBJECT_TYPE');

/*Como retornar o nome da tabela, a chave primaria, indice e campos do indice de


determinada tabela no FB?
Comando:*/
SELECT RDB$RELATION_CONSTRAINTS.RDB$RELATION_NAME AS TABELA,
RDB$RELATION_CONSTRAINTS.RDB$CONSTRAINT_NAME AS CHAVE,
RDB$RELATION_CONSTRAINTS.RDB$INDEX_NAME AS INDICE_DA_CHAVE,
RDB$INDEX_SEGMENTS.RDB$FIELD_NAME AS CAMPO,
RDB$INDEX_SEGMENTS.RDB$FIELD_POSITION AS POSICAO
FROM RDB$RELATION_CONSTRAINTS,
RDB$INDICES,
RDB$INDEX_SEGMENTS
WHERE RDB$RELATION_CONSTRAINTS.RDB$CONSTRAINT_TYPE = 'PRIMARY KEY'
AND RDB$RELATION_CONSTRAINTS.RDB$INDEX_NAME = RDB$INDICES.RDB$INDEX_NAME
AND RDB$INDEX_SEGMENTS.RDB$INDEX_NAME = RDB$INDICES.RDB$INDEX_NAME
ORDER BY RDB$RELATION_CONSTRAINTS.RDB$CONSTRAINT_NAME,
RDB$INDEX_SEGMENTS.RDB$FIELD_POSITION

/* Como alterar a coluna de caracteres tamanho?


Voc� deve usar o ALTER TABLE. Vamos supor que voc� tem uma coluna c1 na tabela t1,
que � do tipo CHAR (80) e que deseja que o aumento para 90 caracteres:*/
ALTER TABLE t1 ALTER c1 TYPE char(90);

/*Renomear a coluna tempor�ria:*/


ALTER TABLE t1 ALTER c_temp TO c1;

/*Voc� pode faz�-lo simplesmente por usar CAST. Primeiro crie uma string que
cont�m uma data v�lida (ver FAQ # 137)
e, em seguida, CAST que at� � data. Exemplo:*/
SELECT CAST(31 ||'.'|| 12 ||'.'|| 2007 AS DATE)
FROM RDB$DATABASE

/*Como converter a string BLOB?


Convers�o direta n�o � poss�vel sem o uso de alguns UDF, mas voc� pode extrair
texto utilizando SUBSTRING fun��o:*/
/*Observe que o comprimento m�ximo para VARCHAR � 32767 bytes (que poder� ser
menor em caracteres multi-byte
como conjuntos de caracteres UTF8).*/
DECLARE VARIABLE c1 VARCHAR(32000);
SELECT SUBSTRING(blob1 FROM 1 FOR 32000) FROM t1 INTO c1;

/* Como apagar registros duplicados (tabela quando n�o tem uma chave prim�ria
coluna)?
Voc� pode usar o "segredo" RDB$DB_KEY recurso do Firebird. RDB$DB_KEY � um
'escondidas' registro que identifica
as linhas de cada comando SQL. Por exemplo, se voc� tiver uma tabela TABLE1 sem
chave prim�ria e t�m colunas COL1 e
COL2 que s�o os mesmos, voc� pode excluir os registros extra com a seguinte
declara��o:*/
DELETE FROM TABLE1 t1
WHERE EXISTS (
SELECT 1 FROM TABLE1 t2
WHERE t1.COL1 = t2.COL1 and t1.COL2 = t2.COL2
AND t1.RDB$DB_KEY < t2.RDB$DB_KEY );
/*Voc� pode controlar se o registro � considerado duplicado por incluindo as
colunas da tabela WHERE
(na maioria dos casos, voc� deseja incluir todas as colunas).*/

/*espelho*/
CREATE SHADOW 1 'c:\bd\shadow.sdw'

Anda mungkin juga menyukai