16216446 Principais Comandos SQL Firebird

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

Transcript of 16216446 Principais Comandos SQL Firebird

Page 1: 16216446 Principais Comandos SQL Firebird

Principais comandos SQL ==================================================GERENCIANDO TABELAS: DDL - DATA DEFINITION LANGUAGE

** CRIANDO UMA TABELACREATE TABLE EMPREGADOS(ID VARCHAR(4) NOT NULL,NOME VARCHAR(30) NOT NULL,PAGAMENTO DECIMAL(4,2) NOT NULL);

** DELETANDO UMA TABELADROP TABLE EMPREGADOS;

** ALTERANDO UMA TABELA*** ADICIONANDO UMA NOVA COLUNAALTER TABLE EMPREGADOS ADD COLUMN (TELEFONE VARCHAR(10) NOT NULL);

*** MODIFICANDO UMA COLUNAALTER TABLE EMPREGADOS MODIFY COLUMN (TELEFONE VARCHAR(12));

** APAGANDO OS DADOS DE UMA TABELA, TORNANDO A TABELA NO ESTADO DE ORIGEMTRUNCATE TABLE EMPREGADOS;

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

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

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

** Deletando dadosDELETE 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 EMPREGADOSGROUP BY CIDADE

Page 2: 16216446 Principais Comandos SQL Firebird

HAVING AVG(PAGAMENTO) > 100;

SELECT E.NOME, PE.PAGAMENTOFROM EMPREGADOS E, PAGAMENTO_EMPREGADOS PEWHERE E.EID = PE.EID;

SELECT ID, NOME FROM EMPREGADOSWHERE 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 ASSELECT FROM EMPREGADOSWHERE 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 NULLBETWEENINLIKE

Page 3: 16216446 Principais Comandos SQL Firebird

EXISTSUNIQUEALL and ANYCONTAINING

SELECT * FROM EMPREGADOSWHERE PAGAMENTO BETWEEN 100 AND 150;

SELECT NOME, PAGAMENTOFROM EMPREGADOSWHERE EID IN ('1111', '2222', '3333');

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

NOT EQUALNOT BETWEENNOT INNOT LIKENOT EXISTSNOT UNIQUE

SELECT * FROM EMPREGADOSWHERE PAGAMENTO NOT BETWEEN 100 AND 150;

SELECT NOME, PAGAMENTOFROM EMPREGADOSWHERE EID NOT IN ('1111', '2222', '3333');

SELECT NOME FROM EMPREGADOSWHERE 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 POSICAOFROM RDB$RELATION_CONSTRAINTS,RDB$INDICES,RDB$INDEX_SEGMENTSWHERE RDB$RELATION_CONSTRAINTS.RDB$CONSTRAINT_TYPE = 'PRIMARY KEY'AND RDB$RELATION_CONSTRAINTS.RDB$INDEX_NAME = RDB$INDICES.RDB$INDEX_NAMEAND RDB$INDEX_SEGMENTS.RDB$INDEX_NAME = RDB$INDICES.RDB$INDEX_NAMEORDER 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$FIELDSSET RDB$FIELD_TYPE = 8,

Page 4: 16216446 Principais Comandos SQL Firebird

RDB$FIELD_SCALE = -2WHERE RDB$FIELD_NAME IN ( SELECT RDB$RELATION_FIELDS.RDB$FIELD_SOURCEFROM RDB$RELATION_FIELDS, RDB$FIELDSWHERE (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 TABELASFROM RDB$RELATION_FIELDS, RDB$FIELDSWHERE ( 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_sourcefrom rdb$relation_constraints rjoin 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_inactivefrom rdb$triggers tjoin 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')

Page 5: 16216446 Principais Comandos SQL Firebird

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_sourcefrom rdb$fields fjoin 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_namefrom rdb$indices ijoin 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_lengthfrom rdb$procedure_parameters pjoin 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_lengthfrom rdb$procedure_parameters pjoin 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_namefrom rdb$exceptions ejoin 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 POSICAOFROM RDB$RELATION_CONSTRAINTS,RDB$INDICES,RDB$INDEX_SEGMENTSWHERE RDB$RELATION_CONSTRAINTS.RDB$CONSTRAINT_TYPE = 'PRIMARY KEY'

Page 6: 16216446 Principais Comandos SQL Firebird

AND RDB$RELATION_CONSTRAINTS.RDB$INDEX_NAME = RDB$INDICES.RDB$INDEX_NAMEAND RDB$INDEX_SEGMENTS.RDB$INDEX_NAME = RDB$INDICES.RDB$INDEX_NAMEORDER 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-bytecomo 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 identificaas 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 t1WHERE EXISTS (SELECT 1 FROM TABLE1 t2WHERE t1.COL1 = t2.COL1 and t1.COL2 = t2.COL2AND 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'