Você está na página 1de 38

Instituto de Ensino Santo Antonio

Apostila de S.Q.L.
Structured Query Language

Curso: Tcnico de Informtica Ano: 2 Srie Disciplina: A.S.M.D.

Verso 2007
Elaborado por: Prof. Fernando Salles Claro

Apostila de A.S.M.D. Mdulo de S.Q.L.

Sumrio
CAPTULO 1 - LINGUAGEM SQL .........................................................................................................................1 INTRODUO .............................................................................................................................................................1 TIPOS DE DADOS DO FIREBIRD ..................................................................................................................................1 BLOB ...................................................................................................................................................................1 CHAR(n) ..............................................................................................................................................................2 VARCHAR(n) .......................................................................................................................................................2 DATE ...................................................................................................................................................................3 TIME ....................................................................................................................................................................3 TIMESTAMP........................................................................................................................................................4 DECIMAL ou NUMERIC ....................................................................................................................................4 SMALLINT ...........................................................................................................................................................4 INTEGER .............................................................................................................................................................5 FLOAT .................................................................................................................................................................5 DOUBLE PRECISION.........................................................................................................................................5 METADADOS .............................................................................................................................................................6 CONSTRAINTS ............................................................................................................................................................6 Column Constraints .............................................................................................................................................6 Row Constraints...................................................................................................................................................6 Key Constraints....................................................................................................................................................7 Constraints de DRI ..............................................................................................................................................8 CAPTULO 2 - COMANDOS DDL (DATA DEFINITION LANGUAGE).........................................................11 INTRODUO ...........................................................................................................................................................11 DOMNIO (DOMAIN).................................................................................................................................................11 AUTO-INCREMENTO (GENERATOR)..........................................................................................................................11 NDICE (INDEX)........................................................................................................................................................13 CREATE DATABASE .................................................................................................................................................13 CREATE TABLE ........................................................................................................................................................14 ALTER DOMAIN .......................................................................................................................................................15 ALTER INDEX ..........................................................................................................................................................15 ALTER TABLE ..........................................................................................................................................................16 DROP DATABASE .....................................................................................................................................................17 DROP DOMAIN.........................................................................................................................................................17 DROP INDEX ............................................................................................................................................................17 DROP TABLE........................................................................................................................................................17 CAPTULO 3 - COMANDOS DML (DATA MANIPULATION LANGUAGE) .............................................19 COMMIT ..................................................................................................................................................................19 ROLLBACK ..............................................................................................................................................................19 INSERT.....................................................................................................................................................................19 UPDATE ...................................................................................................................................................................20 DELETE ...................................................................................................................................................................20 SELECT ....................................................................................................................................................................21 FUNES DE AGREGAO .......................................................................................................................................23 COUNT(*) .........................................................................................................................................................23 SUM (<nome-campo>)......................................................................................................................................23 AVG (<nome-campo>) ......................................................................................................................................23 MAX (<nome-campo>)......................................................................................................................................23 MIN (<nome-campo>) ......................................................................................................................................23 CAST(<nome-campo> AS <tipo-campo>)........................................................................................................23 UPPER( ) ...........................................................................................................................................................24 CAPTULO 4 - JOINS JUNO DE TABELAS ...............................................................................................25 INNER-JOIN ..........................................................................................................................................................25 LEFT-JOIN.............................................................................................................................................................26 RIGHT-JOIN ..........................................................................................................................................................26

Apostila de A.S.M.D. Mdulo de S.Q.L.

II

EXERCCIOS - SQL ................................................................................................................................................28 REFERNCIAS BIBLIOGRFICAS.....................................................................................................................35

Apostila de A.S.M.D. Mdulo de S.Q.L.

Captulo 1 - LINGUAGEM SQL

Introduo

A linguagem SQL (Structured Query Language) representa um conjunto de comandos responsveis pela definio das tabelas, comandos e atualizao dos dados em um S.G.B.D. Os comandos existentes nesta linguagem so subdivididos em dois grupos: Comandos DDL (Data Definition Language) - Conjunto de comandos responsveis pela criao, alterao e deleo da estrutura das tabelas e ndices de um sistema. Comandos DML (Data Manipulation Language) - Conjunto de comandos responsveis pela consulta e atualizao dos dados armazenados em um banco de dados.

Tipos de Dados do Firebird

O Firebird, suporta a maioria dos tipos de dados do SQL. O Firebird, apenas no tem como tipo de dado, o tipo Boolean. Mas, isto no uma falha do Firebird, outro SGDBs tambm no tem este tipo de dado. Apesar de no ter este tipo de dado, podemos criar o nosso tipo boolean atravs de DOMAINS.
BLOB

O tipo de Dado BLOB, tem o tamanho varivel, isto , no sabemos na hora da criao do campo BLOB qual ser o seu tamanho realmente, mas, o limite do campo Blob que est na documentao do Firebird, de 64k por segmento. Este tipo de campo o tipo indicado para armazenar Textos Grandes Memos, Fotos, Grficos, cones, isto , aparentemente no tem um tipo de dado que no possa ser armazenado no Campo Blob. Campos Blobs no podem ser indexados. Saber qual o sub-tipo correto utilizar essencial para criar aplicativos que se utilizem dos campos BLOBs. Os BLOBs se apresentam em 3 verses : Sub-tipo 0 - Armazena dados em formato binrio Fotos, etc. Sub-tipo 1 - Armazena dados em formato texto Memos.

Sintaxe : Estas declaraes so na criao da tabela: MEMO BLOB SUB_TYPE 1; FOTO BLOB SUB_TYPE 0;

Apostila de A.S.M.D. Mdulo de S.Q.L. Exemplo: CREATE TABLE FUNCIONARIOS ( ID INTEGER NOT NULL PRIMARY KEY, NOME VARCHAR(50) NOT NULL, ...., FOTO BLOB SUB_TYPE 0, EXPERIENCIA BLOB SUB_TYPE 1 SEGMENT SIZE 80, ) Dica:

Na criao da tabela acima, voc verificou uma nova informao SEGMENT. Abaixo a explicao: O tamanho de segmento (Segment Size), um pequeno pedao de informao, tipo um conselho, que mantido com a definio de um Blob. Quando se abre um Blob, pode-se perguntar por segmentos de qualquer tamanho, mas para alguns Blobs um determinado tamanho mais conveniente que um outro. Blobs que armazenam texto, por exemplo, freqentemente utilizam segmentos de tamanho 80. O pr-processador e outros programas utilitrios usam o tamanho do segmento para determinar o tamanho de buffers que so necessrios para transferncia de dados para e do Blob.
CHAR(n)

O tipo de Dado CHAR tem o seu tamanho definido na hora da criao da tabela. Seu tamanho mximo de 32767 ou seja 32k. Este tipo tem o seu tamanho fixo. Exemplo: CREATE TABLE FUNCIONARIOS ( ID INTEGER NOT NULL PRIMARY KEY, NOME VARCHAR(50) NOT NULL, ... SEXO CHAR(1) ) Este tipo de dado usado quando voc realmente souber o tamanho da coluna/campo a ser criada. Outro exemplo, criar o coluna de CNPJ, DOMAIN BOLLEAN.
VARCHAR(n)

O tipo de Dado VARCHAR tem o seu tamanho definido na hora da criao da tabela. Seu tamanho mximo de 32767 ou seja 32k. Este tipo tem o seu tamanho variado na tabela. Isto , se voc criar uma coluna de 45 caracteres, mas, a coluna tenha apenas 20 caracteres gravados, o

Apostila de A.S.M.D. Mdulo de S.Q.L. restante, os 25 caracteres so descartados. Exemplo: CREATE TABLE FUNCIONARIOS ( ID INTEGER NOT NULL PRIMARY KEY, NOME VARCHAR(50) NOT NULL )

Este tipo de dado usado quando voc realmente no souber o tamanho da coluna/campo a ser criada. Outros exemplos so criar campos Descries, Inscries Estaduais.
DATE

O tipo de dado DATE armazena uma determinada data e seu tamanho de 32 bits inteiros longos. Exemplo: CREATE TABLE FUNCIONARIOS ( ID INTEGER NOT NULL PRIMARY KEY, NOME VARCHAR(50) NOT NULL, ..., DATA_ADMISSAO DATE )
TIME

O tipo de dado TIME armazena a hora, e seu tamanho de 32 bits inteiros longos. Exemplo: CREATE TABLE FUNCIONARIOS ( ID INTEGER NOT NULL PRIMARY KEY, NOME VARCHAR(50) NOT NULL, ..., HORA_ENTRADA TIME, HORA_SAIDA TIME )

Apostila de A.S.M.D. Mdulo de S.Q.L.


TIMESTAMP

O tipo de dado TIMESTAMP armazena a data e a hora ao mesmo tempo, e seu tamanho de 32 bits inteiros longos. Exemplo: CREATE TABLE PRODUTOS ( ID INTEGER NOT NULL PRIMARY KEY, DESCRICAO VARCHAR(50) NOT NULL, ..., DATA_HORA_MOVIMENTACAO TIMESTAMP )
DECIMAL ou NUMERIC

O tipo de dado DECIMAL armazena dgitos a serem gravados na preciso especificada na criao da tabela. Exemplo: CREATE TABLE FUNCIOARIOS ( ID INTEGER NOT NULL PRIMARY KEY, DESCRICAO VARCHAR(50) NOT NULL, ..., SALARIO DECIMAL(15,2), DESCONTOS NUMERIC(7,2) )
SMALLINT

O tipo de dado SMALLINT armazena dgitos a serem gravados, mas, com o limite de: 32768 a 32767. Serve para armazenar dados numricos pequenos. Exemplo: CREATE TABLE FUNCIOARIOS ( ID INTEGER NOT NULL PRIMARY KEY, DESCRICAO VARCHAR(50) NOT NULL, ..., ALTURA SMALLINT )

Apostila de A.S.M.D. Mdulo de S.Q.L.


INTEGER

O tipo de dado INTEGER armazena dgitos a serem gravados, mas, diferente do SMALLINT, no existe um limite aparentemente, este tipo de 32 bits e tem a escala de valores em: -2.147.483.648 at 2.147.483.648. Exemplo: CREATE TABLE FUNCIOARIOS ( ID INTEGER NOT NULL PRIMARY KEY, DESCRICAO VARCHAR(50) NOT NULL, ... )
FLOAT

O tipo de dado FLOAT armazena dgitos a serem gravados, mas, com preciso simples de 7 dgitos. Exemplo: CREATE TABLE PRODUTOS ( ID INTEGER NOT NULL PRIMARY KEY, DESCRICAO VARCHAR(50) NOT NULL, VLR_ULT_CMP_ITEM FLOAT ... )
DOUBLE PRECISION

Este o tipo de campo no qual eu recomendo para uso monetrio/valores. Sua preciso de 64 bits, na documentao oficial fala em usar apenas para valores cientficos, mas, eu o uso em todos os sistemas, e obtenho sempre o arredondamento e preciso desejada. Exemplo: CREATE TABLE MOV_FINANCEIRA ( IDCODMOEDA CHAR(03) NOT NULL PRIMARY KEY, DATA_MOVIMENTACAO DATE NOT NULL PRIMARY KEY, VALOR_TOTAL_MOVIMENTACAO_DIA DOUBLE PRECISION );

Apostila de A.S.M.D. Mdulo de S.Q.L.


Metadados

O termo metadados refere-se a um conjunto bsico de dados estruturados que descrevem e especificam os objetos contidos em um banco de dados. Dentre outros, o Interbase / Firebird suportam os seguintes metadados:
Constraints

L-se constreins. So caractersticas que podemos declarar na definio de dados e normalmente impem um tipo de checagem que um dado ter de sofrer para ser aceito como vlido.
Column Constraints

Definem critrios de validaes a nvel de coluna. So eles: NOT NULL Impe a obrigatoriedade de ocorrncia de valor para a coluna. Define que os valores para a coluna so obrigatrias, exigidos, requeridos. Na tentativa de anular um valor da coluna ou de inserir uma linha com a indicao de NULL para essa coluna, haver uma violao a esta restrio. DEFAULT Aplica uma constante quando da no ocorrncia de valor para uma coluna. Implica em fazer com que o banco de dados fornea um valor declarado para uma coluna toda vez que inserir uma linha de dados que omita dado para essa coluna, ou seja, se uma coluna ESTADO_NASC contiver a declarao DEFAULT SP, quando no se informar nada para ela, o banco de dados a preenche com SP. CHECK Valida o valor a ser admitido por uma coluna, contra uma regra (expresso / equao). Oferece uma poderosa maneira de verificar se o dado fornecido coluna condiz com a expresso. Exemplo: CHECK(salario > 1000.00). UNIQUE Impe coluna que no sero admitidos valores repetidos nela.

Row Constraints

Define restries que sero aplicados a valores operados em colunas distintas na mesma linha (registro) de dados. CHECK Valida uma operao/expresso que incida sobre valores de duas ou mais colunas na mesma linha de dados. Column Constraints

Exemplo: CREATE TABLE ALUNOS ( RM ... DTNASC DATE DEFAULT today, CHAR(5) NOT NULL, NOMEVARCHAR(30),

Apostila de A.S.M.D. Mdulo de S.Q.L. ... DT_NASC_PAI NOME_PAI DT_NASC_MAE NOME_MAE ... CHECK( (DT_NASC_PAI < DTNASC) AND (DT_NASC_MAE < DTNASC) ) );
Key Constraints

DATE VARCHAR(30), DATE, VARCHAR(30),

Row Constraints

Definem a criao de chaves e relacionamentos existentes entre tabelas. So eles: PRIMARY KEY Define que os valores das colunas em questo estaro presentes em um ndice, ocorrendo uma nica vez este ndice e precisam ser preliminarmente definidos como no podendo ser NULOS. FOREIGN KEY Define que os valores das colunas em questo obrigatoriamente estaro presentes no ndice da PRIMARY KEY da tabela a que se refere.

Exemplo: CREATE TABLE ESTADOS ( SIGLA_UF CHAR(2) NOT NULL, NOME VARCHAR(30) NOT NULL, CONSTRAINT PK_ESTADOS PRIMARY KEY (SIGLA_UF) ); CREATE TABLE CLIENTES ( ID INTEGER NOT NULL, NOME VARCHAR(35), DT_NASC DATE, ESTADO_NASC CHAR(2) NOT NULL, SEXO CHAR(1), CONSTRAINT PK_CLIENTES PRIMARY KEY (ID), CONSTRAINT FK_CLIENTES FOREIGN KEY (ESTADO_NASC) REFERENCES ESTADOS(SIGLA_UF), CONSTRAINT CHK_SEXO CHECK(SEXO IN(M,F)) ... );

Apostila de A.S.M.D. Mdulo de S.Q.L.


Constraints de DRI

Este tipo de constraint impe aes que sero automaticamente desencadeadas em funo da manuteno da Integridade Referencial de Dados e compem de: ON DELETE CASCADE - Aplica a excluso, em cascata, de todas as Foreign Keys que apontem para uma Primary Key que estiver sendo excluda. ON DELETE CASCADE Aplica uma alterao de contedo e/ou valor, em cascata, a todas as FKs que apontem para uma determinada PK que estiver sendo alterada.

Quando voc solicita a imposio de uma DRI como ao a ser efetivada a partir de uma operao DELETE ou UPDATE, na verdade existem outras formas de reao que no o CASCADE. Podemos ainda ter: NO ACTION SET NULL SET DEFAULT

Apostila de A.S.M.D. Mdulo de S.Q.L. Exemplo: Observe as tabelas abaixo: PK Tabela ESTADOS SIGLA MA CE RJ SP ... PK Tabela PESSOAS ID 05 17 23 49 ... NOME Jos Joo Carlos Luciana ... DATA_NASC ESTADO_NASC 7/11/60 1/5/70 20/12/75 8/5/74 ... MA CE MA SP ... SEXO M M M F ... ... ... ... ... ... ... Referncia FK Maranho Cear Rio de Janeiro So Paulo ... ESTADO

A criao destas tabelas ficaria ento da seguinte forma: CREATE TABLE ESTADOS ( SIGLA_UF CHAR(2) NOT NULL, NOME VARCHAR(30) NOT NULL, CONSTRAINT PK_ESTADOS PRIMARY KEY (SIGLA_UF) ); CREATE TABLE CLIENTES ( ID INTEGER NOT NULL, NOME VARCHAR(35), DT_NASC DATE, ESTADO_NASC CHAR(2), SEXO CHAR(1), CONSTRAINT PK_CLIENTES PRIMARY KEY (ID), CONSTRAINT FK_CLIENTES FOREIGN KEY (ESTADO_NASC) REFERENCES ESTADOS(SIGLA_UF) ON DELETE CASCADE, CONSTRAINT CHK_CLIENTES CHECK(SEXO IN(M,F)) );

Apostila de A.S.M.D. Mdulo de S.Q.L.

10

Vamos supor ento que o negcio para o qual o banco de dados em que so membros estas duas tabelas, tem como regra operacional o seguinte fato: Quando no mais se operar dados de um estado da federao, pode-se excluir o estado da federao do cadastro de estados e no haver mais a necessidade de manter registros das pessoas que nasceram neste estado excludo.. Desta forma excluindo-se, por exempo o registro do estado do Maranho da tabela de Estados, os registros cuja ID sejam iguais a 05 e 23 da tabela de pessoas tambm sero excludas do banco de dados automaticamente.

Apostila de A.S.M.D. Mdulo de S.Q.L.

11

Captulo 2 - Comandos DDL (Data Definition Language)

Introduo

As instrues contidas no conjunto DDL so utilizadas principalmente na fase de criao, eliminao e alterao dos objetos relacionados aos bancos de dados, tabelas, ndices, domnios, generators, etc. A DDL formada basicamente pelas instrues CREATE, DROP e ALTER. Vamos estudar agora como utilizar as instrues DDL relacionadas aos principais objetos que compem o banco de dados.
Domnio (domain)

So especificaes catalogadas no dicionrio de dados do banco de dados e servem para substituir especificaes explcitas realizadas diretamente na declarao de tabelas e views. Para exemplificar o uso de domains, veja abaixo: Exemplo: Inicialmente criamos um conjunto de domains como segue: CREATE DOMAIN data_hoje DATE DEFAULT today; CREATE DOMAIN valores DOUBLE PRECISION DEFAULT 0.00; CREATE DOMAIN tipo_pk INTEGER NOT NULL; Agora utilizamos os domnios criados para criarmos a tabela abaixo, da seguinte forma: CREATE TABLE teste ( COD_MOVIMENTO DATA_ABERTURA VALOR VALOR_MULTA COD_CLIENTE ... );
Auto-incremento (generator)

tipo_pk, data_hoje, valores, valores, INTEGER,

Os generators so variveis globais que ficam armazenadas dentro do banco de dados e que podem servir a diversos propsitos. O principal uso de um generator est em us-los em campos do tipo auto-incremento.

Apostila de A.S.M.D. Mdulo de S.Q.L.

12

importante citar que este campo do tipo inteiro longo, podendo armazenar nmeros da ordem de 231 at 231-1 As atividades elementares para este tipo de objeto so: Cri-los: CREATE GENERATOR <nome_generator>; Definir-lhe um valor: SET GENERATOR <nome_generator> TO <valor>; Recuperar/Alterar-lhe um valor: GEN_ID(<nome_generator>,<intervalo>); Exemplo: Vamos supor que quisssemos fazer com que uma coluna chamada codigo" de uma tabela de produtos viesse a ser numerada ascendentemente e constantemente de 5 em 5 para toda incluso de dados nela. Poderamos utilizar um GENERATOR para ajudar-nos nessa tarefa da seguinte forma: 1 - Criamos a tabela: CREATE TABLE produtos ( CODIGO INTEGER NOT NULL PRIMARY KEY, NOME VARCHAR(45), MARCA VARCHAR(40), UN_MEDIDA CHAR(5), ... PRECO DOUBLE PRECISION, QTD_ESTOQUE INTEGER

); 2 - Criamos um GENERATOR: CREATE GENERATOR INC_COD_PROD; 3 - Atribumos um valor inicial ao GENERATOR: SET GENERATOR INC_COD_PROD TO O; 4 - Inserimos um novo registro: INSERT INTO produto (codigo,nome,marca,..., preco,qtd_estoque) VALUES (select gen_id(INC_COD_PROD,5) from rdb$database, Lpis de cor com 24 peas,Arco Iris, ...., 10.50, 20); Observe que foi atribuido para a coluna CODIGO um valor obtido (recuperado) do incremento em 5 do generator INC_COD_PROD pela funo GEN_ID(), a partir do SELECT interno ao INSERT.

Apostila de A.S.M.D. Mdulo de S.Q.L.


ndice (index)

13

Um ndice um mecanismo utilizado para acelerar a recuperao de dados em resposta a certas condies de pesquisa, e para reforar as restries de unicidade em colunas. Existem umas sries de situaes que justificam a criao de ndices. Abaixo so citadas algumas delas. Quando alguns dados freqentemente so solicitados classificados; Quando h junes sobre colunas que podem ser indexadas; Quando condies de pesquisa freqentemente referenciam colunas que podem ser indexadas. A instruo para a criao de ndices : CREATE [UNIQUE] [ASC | DESC] INDEX <nome_ndice> ON <nome_tabela> (col1[, col2] [, ....]); Veja o exemplo abaixo: CREATE UNIQUE INDEX ind_salrio ON funcionarios (cod_depto,cod_salario);
Create Database

Cria um novo banco de dados .GDB ou .FDB. Nele pode especificar as suas caractersticas, como: Nome do Arquivo. Nome do usurios e sua senha.

Sintaxe :
CREATE DATABASE NOME_DO_BANCO [ USER username ] [ PASSWORD senha ]

Exemplos: CREATE DATABASE C:\DB\TESTE.GDB USER SYSDBA PASSWORD masterkey;

Apostila de A.S.M.D. Mdulo de S.Q.L. CREATE DATABASE 192.168.10.1:F:\BANCO.FDB USER SYSDBA PASSWORD masterkey;

14

Create Table

Cria a estrutura de uma tabela(arquivo) definido as colunas(campos) e as chaves primrias e estrangeiras existentes. Sintaxe:
CREATE TABLE <nome-tabela> ( <nome-coluna> ... [ CONSTRAINT <nome_constraint> PRIMARY KEY (coluna-chave-primria) ] [ CONSTRAINT <nome_constraint> FOREIGN KEY (coluna-chave-estrangeira) REFERENCES nome-tabela-pai(coluna-chave-primria) [ ON DELETE <tipo_restrio> ] [ ON UPDATE <tipo_restrio> ] ] [ CONSTRAINT <nome_constraint> CHECK(restrio-do-campo) ] ); <tipo-do-dado> [ NOT NULL ] / [ DEFAULT constante],

onde: (1) nome-tabela - Representa o nome da tabela que ser criada. (2) nome-coluna - Representa o nome da coluna que ser criada. A definio das colunas de uma tabela feita relacionando-as uma aps a outra. (3) tipo-do-dado - Clusula que define o tipo e tamanho dos campos definidos para a tabela. Os tipos de dados mais comuns sero definidos mais frente. (4) NOT NULL - Exige o preenchimento do campo, ou seja, no momento da incluso obrigatrio que possua um contedo. (5) DEFAULT - Preenche o campo com valores pr-definidos, de acordo com o tipo do campo, caso no seja especificado o seu contedo no momento da incluso do registro. Os valores pr-definidos so: (a) Campos numricos - Valor zero. (b) Campos alfanumricos - Caracter branco. (c) Campo formato Date - Data corrente. (d) Campo formato Time - Horrio no momento da operao. (6) PRIMARY KEY (nome-coluna-chave) - Definir para o banco de dados a coluna ou colunas que formaro a chave primria da tabela. Caso ela tenha mais de um coluna como chave, elas devero ser relacionadas entre os parnteses e separadas por vrgula. (7) FOREIGN KEY (nome-coluna-chave-estrangeira) REFERENCES (nome-tabelapai) - Definir para o banco de dados as colunas que so chaves estrangeiras, ou

Apostila de A.S.M.D. Mdulo de S.Q.L.

15

seja, os campos que so chaves primrias de outras tabelas. Na opo REFERENCES deve ser especificado a tabela na qual a coluna a chave primria. (8) ON DELETE - Esta opo especifica os procedimentos que devem ser feitos pelo SGBD quando houver uma excluso de um registro na tabela pai quando existe um registro correspondente nas tabelas filhas. As opes disponveis so: (a) RESTRICT - Opo default. Esta opo no permite a excluso na tabela pai de um registro cuja chave primria exista em alguma tabela filha. (b) CASCADE - Esta opo realiza a excluso em todas as tabelas filhas que possua o valor da chave que ser excluda na tabela pai. (c) SET NULL - Esta opo atribui o valor NULO nas colunas das tabelas filhas que contenha o valor da chave que ser excluda na tabela pai.
Alter Domain

Altera a definio de um domnio que j tenha sido criado. Pode-se alterar qualquer elemento de domnio, exceto os domnio de NOT NULL e a troca do tipo de Dado. Para redefinir o tipo de domnio e ou alterar o NOT NULL, deve apagar o domnio e cri-lo novamente. Atento para que se alguma tabela estiver usando o Domnio no qual voc quer alterar os itens citados acima, voc precisar deletar a coluna da tabela para ter sucesso no processo de troca. Alis, o InterBase no deixar voc trocar o tipo e ou a constraint NOT NULL, enquanto encontrar referncias para este domnio. A criao de domnio, requer uma certa analise, para no encontrar este tipo de referncia. Sintaxe : ALTER DOMAIN name { [SET DEFAULT { literal | NULL | USER}]| [DROP DEFAULT]| [ADD [CONSTRAINT] CHECK ( <dom_search_condition>)] | [DROP CONSTRAINT] | new_col_name| TYPE data_type}; Exemplos:
CREATE DOMAIN D_MES AS SMALLINT CHECK(VALUE BETWEEN 1 AND 12 );

ALTER DOMAIN D_MES SET DEFAULT 1;


Alter Index

Torna um ndice ativo e ou inativo. Este comando est relacionado diretamente na performance do ndice no seu Banco de Dados. Em certos momentos, o ndice no Firebird pode ficar desbalanceado, desta forma, este comando recria o ndice do Firebird. Sintaxe : ALTER INDEX name {ACTIVE | INACTIVE}; Exemplos: CREATE INDEX INDEX_NOME_TABELAX ON CLIENTES(NOME); ALTER INDEX INDEX_NOME_TABELAX INACTIVE;

Apostila de A.S.M.D. Mdulo de S.Q.L. ALTER INDEX INDEX_NOME_TABELEX ACTIVE;


Alter Table

16

Permite Alterar a estrutura de uma tabela(arquivo) acrescentando, alterando, retirando e alterando nomes, formatos das colunas e a integridade referencial definidas em uma determinada tabela. Para adicionar uma coluna em uma tabela utilize a seguinte sintaxe: ALTER TABLE <nome-tabela> ADD <nome-coluna> <tipo-do-dado> [ NOT NULL ] [ DEFAULT constante ] Para apagar uma coluna de uma tabela utilize a seguinte sintaxe: ALTER TABLE <nome-tabela> DROP <nome-coluna> Para alterar o nome de uma coluna, a sintaxe : ALTER TABLE <nome-tabela> RENAME <nome-coluna> <novo-nome-tabela> Para alterar o nome de uma tabela, a sintaxe : ALTER TABLE <nome-tabela> RENAME TABLE <novo-nome-tabela> Para adicionar uma chave primria, a sintaxe : ALTER TABLE <nome-tabela> ADD [ CONSTRAINT <nome-restrio> ] PRIMARY KEY (<nome-coluna>) Para adicionar uma chave estrangeira, a sintaxe : ALTER TABLE <nome-tabela> ADD [ CONSTRAINT <nome-restrio> ] FOREIGN KEY (<nome-coluna>) REFERENCES <nome-tabela-pai> (<coluna-tabela-pai>) [ ON DELETE <restrio> ] [ ON UPDATE <restrio> ] Para apagar uma chave primria, a sintaxe : ALTER TABLE <nome-tabela> DROP PRIMARY KEY <nome-coluna> Para apagar uma chave estrangeira, a sintaxe : ALTER TABLE <nome-tabela> DROP FOREIGN KEY <nome-coluna-chave-estrangeira>

Apostila de A.S.M.D. Mdulo de S.Q.L.

17

Drop Database

Apaga o Banco de Dados .GDB ou .FDB. O Banco de Dados, s pode ser deletado pelo seu criador Owner e ou pelo SYSDBA do Banco de Dados. Sintaxe : DROP DATABASE; Exemplo: DROP DATABASE;
Drop Domain

Deleta um domnio previamente criado no Firebird. Se o domnio estiver em uso por alguma tabela, para solucionar este problema, o campo tem que ser excludo e aps isto apagar o domnio. Sintaxe : DROP DOMAIN nome Exemplo : DROP DOMAIN D_RG;
Drop Index

Este comando permite deletar uma estrutura de ndice de acesso para uma determinada coluna em uma tabela. Sintaxe: DROP INDEX <nome-ndice> Exemplo: DROP INDEX IND_Nome;
DROP TABLE

Apaga uma tabela do Banco de Dados, e tambm os ndices referenciados e triggers que a tabela faz referencia. Sintaxe : DROP TABLE name; Exemplo : DROP TABLE FORNECEDORES;

Apostila de A.S.M.D. Mdulo de S.Q.L.

18

Apostila de A.S.M.D. Mdulo de S.Q.L.

19

Captulo 3 - Comandos DML (Data Manipulation Language)

Commit

Grava as alteraes de uma transao permanente no Banco de Dados. Muito utilizado aps uma operao de INSERT, UPDATE ou DELETE. Sintaxe : COMMIT Exemplo: COMMIT

Rollback

Desfaz as mudanas ocorridas at o exato momento no Banco de Dados Firebird, sem que o comando COMMIT tenha sido executado. Este comando e o Commit fecham a transao aberta pela aplicao e ou ferramenta de gerenciamento as tabelas. Sintaxe : ROLLBACK Exemplo : ROLLBACK;
Insert

Comando responsvel para se incluir um novo registro em uma tabela do Banco de Dados. Os campos que forem omitidos recebem valores NULOS NULL Sintaxe: INSERT INTO <nome-tabela> [(<nome-coluna>, [<nome-coluna>])] VALUES (<relao dos valores a serem includos>) Onde: a) nome-tabela - Representa o nome da tabela onde ser includa o registro. b) nome-coluna - Representa o nome da(s) coluna(s) tero contedo no momento da operao de incluso. Obs.: Este comando pode ser executado de duas maneiras:

Apostila de A.S.M.D. Mdulo de S.Q.L.

20

1) Quando todos os campos da tabela tero contedo - Neste caso no necessrio especificar as colunas, entretanto a relao dos valores a serem includos dever obedecer a mesma seqncia da definio da tabela. 2) Quando apenas parte dos campos da tabela tero contedo - Neste caso devem ser especificadas todas as colunas que tero contedo e os valores relacionados devero obedecer esta seqncia. Para os campos que no tem contedo especificado ser preenchido o valor NULL. Exemplos: INSERT INTO CLIENTES (ID,NOME) VALUES (1,Nome do Cliente); INSERT INTO ESTADOS VALUES (SP,SO PAULO);
Update

Atualiza os dados de um ou um grupo de registros em uma tabela do Banco de Dados. Sintaxe: UPDATE <nome-tabela> SET <nome-coluna> = <novo contedo para o campo> [, <nome-coluna> = <novo contedo para o campo>] WHERE <condio> Onde: a) nome-tabela - Representa o nome da tabela cujo contedo ser alterado. a) nome-coluna - Representa o nome da(s) coluna(s) tero seus contedos alterados com o novo valor especificado. b) condio - Representa a condio para a seleo dos registros que sero atualizados. Este seleo poder resultar em um ou vrios registros. Neste caso a alterao ir ocorrer em todos os registros selecionados. Exemplos: UPDATE FUNCIONARIOS SET SALARIO = SALARIO * 1.10; UPDATE ALUNOS SET CEP=12031-120 WHERE BAIRRO = INDEPENDNCIA Delete Tem por objetivo deletar um ou um grupo de registros em uma tabela do Banco de Dados. Sintaxe: DELETE FROM <nome-tabela> WHERE <condio> Onde:

Apostila de A.S.M.D. Mdulo de S.Q.L. a) nome-tabela - Representa o nome da tabela cujos registros sero deletados.

21

b) condio - Representa a condio para a deleo dos registros. Este seleo poder resultar em um ou vrios registros. Neste caso a operao ir ocorrer em todos os registros selecionados. Exemplos: DELETE FROM VENDAS WHERE COD_VENDEDOR = 10; DELETE FROM CLIENTES;
Select

Selecionar um conjunto de registros em uma ou mais tabelas que atenda a uma determinada condio definida pelo comando. Sintaxe: SELECT [ ALL | DISTINCT ] <campos> FROM <nome-tabela> [, <nome-tabela>] [ WHERE <condio> ] [ GROUP BY <nome-coluna> ] [ HAVING <condio> ] [ ORDER BY <nome-campo> ASC | DESC ] Onde: a) nome-tabela - Representa o nome da(s) tabela(s) que contem as colunas que sero selecionadas ou que sero utilizadas para a execuo da consulta. b) condio - Representa a condio para a seleo dos registros. Este seleo poder resultar em um ou vrios registros. c) nome-coluna - Representa a(s) coluna(s) cujos resultados so grupados para atender consulta. d) ALL - Opo default. Mostra todos os valores obtidos na seleo. e) DISTINCT - Opo que mostra os valores obtidos na seleo eliminando as duplicidades. f) WHERE - Especifica o critrio de seleo dos registros nas tabelas especificadas. g) GROUP BY - Especifica o(s) campo(s) que sero grupados para atender a consulta. h) HAVING - Especifica uma condio para seleo de um grupo de dados. Esta opo s utilizada combinada com a opo GROUP BY. i) ORDER BY - Esta opo quando utilizada apresenta o resultado da consulta ordenado de forma crescente ou decrescente pelos campos definidos. Operador e funes ligados ao SELECT, isto , antes da clusula WHERE Literal e String - No Firebird, voc pode preencher colunas com valores Literais e ou Strings para colunas virtuais e ou colunas fixas da tabela de dados. Mostraremos para

Apostila de A.S.M.D. Mdulo de S.Q.L.

22

este exemplo, o que seria o preenchimento de uma literal em uma coluna virtual ou coluna fixa por literal e ou String. Exemplo Literal : SELECT 1 FROM TabFuncionarios Exemplo String : SELECT InterBase Brasil FROM TabFuncionarios Expresso || A expresso conhecida para concatenao no Firebird ||. Desta forma, voc pode us-la para concatenar colunas virtuais e ou colunas fixas. O operador "+" para o Firebird, usado para clculos matemticos, desta forma, se precisar concatenar colunas, use o ||. DISTINCT Prev a excluso de linhas semelhantes do Result Set. INTO :var [,:var.]] Clusula que transfere o valor de uma coluna para a varivel indicada ao SELECT. Se o Result Set retornar mais de uma linha de dados, ocorrer um erro, indicando que est clausula apenas poder retornar uma linha de dados.

Operadores que fazem parte da clusula WHERE BETWEEN Este operador testa se o valor da coluna encontra-se no intervalo declarado. IN Verifica se valor est contido no Sub-Conjunto de dados na coluna declarada. ALL Verifica se uma valor igual a todos os valores retornados em um SubQuery(*). ANY e SOME Verifica se um valor est contido em qualquer valor retornado num SubQuery(*). EXISTS Verifica se um valor existe e ou est presente em pelo menos uma linha no retorno do SubQuery(*). Est clausula pode conter tambm NOT EXISTS. SINGULAR Opera com semelhana ao EXISTS, com a diferena de que o valor tem que existir exatamente em uma ocorrncia do SubQuery(*). CONTAINING Testa se o valor passado a coluna, contm em uma parte da string. Est clausula CASE-SENSITIVE. STARTING WITH - Testa se a coluna inicia exatamente como indicado pelo valor passado. LIKE Testa se a coluna comea ou contm ou termina com um determinado valor.

Exemplos: Select nome,fone from funcionarios; Select codigo, nome, renda_salarial from clientes where cidade = Taubat or cidade = Ubatuba order by nome asc; Select distinct unidade_medida from cad_produtos; Select * from tab_vendedores where estado in (SP, RJ, MG);

Apostila de A.S.M.D. Mdulo de S.Q.L. Select nome, departamento from funcionarios where salario between 1200.00 and 2000.00; Select * from alunos where email is not null; Select cidade,regiao_brasil from cidades where cidade like %Jos%;
Funes de Agregao
COUNT(*)

23

Retorna a quantidade de registros existentes no campo especificado. Quando a opo * utilizada o resultado a quantidade de registros existentes. Quando referenciado o nome de um campo retorna a quantidade de valores existentes na coluna. Exemplo: Select count(*) from alunos where situacao=Promovido;
SUM (<nome-campo>)

Retorna a soma dos valores existentes no campo especificado. Exemplo: Select sum(salario) from funcionarios where funcao=Diretor;
AVG (<nome-campo>)

Retorna a mdia dos valores existentes no campo especificado Exemplo: Select avg(media_1trim) from notas where classe=2o Infor A;
MAX (<nome-campo>)

Retorna o maior valor existente no campo especificado. Exemplo: Select max(salario) from funcionarios where funcao=Programador;
MIN (<nome-campo>)

Retorna o menor valor existente no campo especificado. Exemplo: Select min(salario) from funcionarios where funcao=Programador;
CAST(<nome-campo> AS <tipo-campo>)

Usado em colunas, onde h a necessidade de se converter tipos de dados para outro formato. Exemplo:

Apostila de A.S.M.D. Mdulo de S.Q.L. Select cast(codigo as char(10)) || || nome from vendedores.

24

As converses aceitas pelo Firebird so: Caracter em Numrica ou Data Numrico em Caracter ou Data Data em Caracter ou Numrico


UPPER( )

Funo que retorna uma string com todos os caracteres em maisculo. Sintaxe : UPPER(<col>); Exemplo : CREATE DOMAIM SEXO AS CHAR(01) ( CHECK VALUE = UPPER(VALUE)); SELECT UPPER(NOME) FROM CLIENTES;

Apostila de A.S.M.D. Mdulo de S.Q.L.

25

Captulo 4 - JOINS Juno de tabelas


Quando voc trabalha com um banco normalizado, muitas das pesquisas sobre dados que voc precisa enviar ao servidor so compartilhadas entre tabelas. Uma das metas da normalizao acabar com colunas que tenham um nico propsito e estejam na mesma tabela, com isso seu banco fica com colunas que so compartilhadas entre estas tabelas. Por exemplo imagine as seguintes tabelas: SELECT * FROM TAB_EMPREGADOS NOME Lennon McGregor Banks Cocker Albarn SALARIO 3000.00 5000.00 2700.00 4800.00 1800.00 DEPARTAMENTO 1 5 3 <nulll> 4

SELECT * FROM TAB_DEPARTAMENTOS ID 1 2 3 4 5 DESCRICAO Banco de Dados Desenvolvimento Suporte Treinamento Consultoria

A coluna DEPARTAMENTO da tabela EMPREGADOS serve para identificar o ID do departamento a qual o funcionrio pertence, esta coluna aparece novamente na tabela DEPARTAMENTOS atravs do campo ID. Portanto, podemos unir as duas tabelas. Como faramos?
INNER-JOIN

SELECT E.NOME, E.SALARIO, D.DESCRICAO FROM TAB_EMPREGADOS E INNER JOIN TAB_DEPARTAMENTOS D ON E.DEPARTAMENTO = D.ID ORDER BY E.NOME O resultado seria exatamente o desejado, ou seja uma lista de meus funcionrios e salrios com a respectiva descrio do departamento.}

Apostila de A.S.M.D. Mdulo de S.Q.L. NOME Albarn Banks Lennon McGregor SALARIO 1800.00 2700.00 3000.00 5000.00 DESCRICAO Treinamento Suporte Banco de Dados Consultoria

26

Este resultado baseado no que conhecido como INNER-JOIN, este tipo de juno monta o result-set baseando-se naquelas linhas que satisfaam as condies de juno impostas no join (ON E.DEPARTAMENTO = D.ID).
LEFT-JOIN

SELECT E.NOME, E.SALARIO, D.DESCRICAO FROM TAB_EMPREGADOS E LEFT OUTER JOIN TAB_DEPARTAMENTOS D ON E.DEPARTAMENTO = D.ID ORDER BY E.NOME NOME Albarn Banks Cocker Lennon McGregor SALARIO 1800.00 2700.00 4800.00 3000.00 5000.00 DESCRICAO Treinamento Suporte <null> Banco de Dados Consultoria

Um LEFT-JOIN define que todos os registros da tabela esquerda do operador faro parte do result-set, portanto a condio apresentada no modificador ON no ser feita na tabela TAB_EMPREGADOS, isso faz com que o funcionrio Cocker seja incluso no resultado mesmo no tendo pertencendo a algum departamento.
RIGHT-JOIN

SELECT E.NOME, E.SALARIO, D.DESCRICAO FROM TAB_EMPREGADOS E RIGHT OUTER JOIN TAB_DEPARTAMENTOS D ON E.DEPARTAMENTO = D.ID ORDER BY E.NOME

Apostila de A.S.M.D. Mdulo de S.Q.L. NOME Albarn Banks Lennon McGregor <null> SALARIO 1800.00 2700.00 3000.00 5000.00 <null> DESCRICAO Treinamento Suporte Banco de Dados Consultoria Desenvolvimento

27

Um RIGHT-JOIN define que todos os registros da tabela direita do operador faro parte do result-set, agora a condio apresentada no modificador ON no ser feita na tabela TAB_DEPARTAMENTOS, isso faz com que o departamento Desenvolvimento seja listado, mesmo no possuindo nenhum funcionrio.

Apostila de A.S.M.D. Mdulo de S.Q.L.

28

Exerccios - SQL
Analise os diagramas abaixo:

CLIENTE 1

FAZ

N N 1

PEDIDO N

ATENDE

VENDEDOR

ITEM/PED

PRODUTO

Apostila de A.S.M.D. Mdulo de S.Q.L.

29

CLIENTE # Cod_Cliente integer Nome_Cliente varchar(20) Endereco varchar(30) Cep char(9) Uf char(2) CNPJ varchar(18) IInscr_Estadual - varchar(20)

PEDIDO # Num_Pedido integer Prazo_Entrega smallint Cod_Cliente integer Cod_Vendedor - integer

VENDEDOR # Cd_Vendedor integer Nome_Vendedor varchar(20) Salario_Fixo numeric(10,2) Faixa_Comissao - char(1)

ITEM-PEDIDO # Num_Pedido integer # Cod_Produto integer Quantidade - integer

PRODUTO # Cod_Produto integer Unidade - char(3) Descricao varchar(30) Valor_Unitario numeric(10,2)

Apostila de A.S.M.D. Mdulo de S.Q.L. Responda o que se pede:

30

1. Escrever os comandos para criar as respectivas TABELAS. 2. Adicionar o vendedor ANTNIO com salrio de 1300, faixa de comisso A e cdigo 200. 3. Atualizar o salrio do funcionrio 200 para 1500 e a faixa de comisso para D. 4. Excluir todos os funcionrios cuja faixa de comisso seja D. 5. Atualizar o salrio de todos os funcionrios em 10% para aqueles da faixa B. 6. Listar todos os produtos com respectivas descries, unidades e valores unitrios. 7. Listar o nome dos clientes , com seus endereos e CGC. 8. Listar todo o contedo de VENDEDOR. 9. Listar o nmero do pedido, o cdigo do produto e a quantidade dos itens do pedido com a quantidade igual a 35. 10. Quais os clientes que moram em NITERI ? 11. Listar as descries dos produtos que tenham unidade igual a M e valor unitrio inferior a R$1,05. 12. Liste os clientes e seus respectivos endereos, que moram em SO PAULO ou estejam na faixa de CEP entre 30077000 e 30079000. 13. Mostrar todos os pedidos que no tenham prazo de entrega igual a 15 dias. 14. Listar o cdigo e a descrio dos produtos que tenham o valor unitrio na faixa de R$0,32 at R$2,00. 15. Listar todos os produtos que tenham a sua unidade comeando por K. 16. Listar os vendedores que no comeam por JO. 17. Listar os vendedores que so da faixa de comisso A e B. 18. Mostrar os clientes que no tenham inscrio estadual. 19. Mostrar, em ordem alfabtica, a lista de vendedores e seus respectivos salrios fixos. 20. Listar os nomes, cidades e estados de todos os clientes, ordenados por estado e cidade de forma descendente. 21. Mostrar a descrio e o valor unitrio de todos os produtos que tenham a unidade M, em ordem de valor unitrio ascendente. 22. Mostrar o novo salrio fixo dos vendedores, de faixa de comisso C, calculado com base no reajuste de 75% acrescido de R$120,00 de bonificao. Ordenar pelo nome de vendedor. 23. Mostrar o menor e o maior salrio de vendedor. 24. Mostrar a quantidade total pedida para o produto VINHO de cdigo 78. 25. Qual a mdia dos salrios fixos dos vendedores ? 26. Quantos vendedores ganham acima de R$2.500,00 de salrio fixo ? 27. Quais as unidades de produtos, diferentes, na tabela de produto ? 28. Listar o nmero de produtos que cada pedido contm. 29. Listar os pedidos que tm mais do que 3 produtos. 30. Listar o nome do cliente, o cdigo do cliente e o nmero do pedido dos clientes que fizeram pedido. 31. Quais clientes que tm prazo de entrega superior a 15 dias e que pertencem aos estados de So Paulo (SP) ou Rio de Janeiro (RJ) ? 32. Mostrar os clientes e seus respectivos prazos de entrega, ordenados do maior para o menor.

Apostila de A.S.M.D. Mdulo de S.Q.L.

31

33. Apresentar os vendedores (ordenados) que emitiram pedidos com prazos de entrega superiores a 15 dias e que tenham salrios fixos igual ou superior a R$1.000,00. 34. Mostre os clientes (ordenados) que tm prazo de entrega maior que 15 dias para o produto QUEIJO e que sejam do RIO DE JANEIRO. 35. Mostre todos os vendedores que venderam CHOCOLATE em quantidade superior a 10Kg. 36. Quantos clientes fizeram pedido com o vendedor JOO ? 37. Quantos clientes das cidades do RIO DE JANEIRO e NITERI tiveram seus pedidos tirados com o vendedor JOO ? 38. Que produtos participam em qualquer pedido cuja quantidade seja 10 ? 39. Quais vendedores ganham um salrio fixo abaixo da mdia ? 40. Quais os produtos que no esto presentes em nenhum pedido ? 41. Quais clientes esto presentes em mais de trs pedidos ?

Apostila de A.S.M.D. Mdulo de S.Q.L.

32

RESPOSTAS
1. CREATE TABLE cliente ( cod_cliente integer not null, nome_cliente varchar(20), endereco varchar(30), cidade varchar(15), cep char(9), uf char(2), cgc varchar(20), insc_estadual varchar(20), constraint pk_cliente primary key (cod_cliente) ); CREATE TABLE vendedor ( cod_vendedor integer not null, nome_vendedor varchar(20), salario_fixo numeric(10,2), faixa_comissao char(1), constraint pk_vendedor primary key (cod_vendedor) ); CREATE TABLE produto ( cod_produto integer not null, unidade char(3), descricao varchar(30), valor_unitario numeric(10,2), constraint pk_produto primary key (cod_produto) ); CREATE TABLE pedido ( num_pedido integer not null, prazo_entrega integer not null, cod_cliente integer not null, cod_vendedor not null, constraint pk_pedido primary key (num_pedido), constraint fk_pedido1 foreign key (cod_cliente) references cliente (cod_cliente), constraint fk_pedido2 foreign key (cod_vendedor) references vendedor (cod_vendedor) );

Apostila de A.S.M.D. Mdulo de S.Q.L. CREATE TABLE item_pedido ( num_pedido integer not null, cod_produto integer not null, quantidade double precision, constraint pk_item_pedido primary key (num_pedido, cod_produto), constraint fk_item1 foreign key (num_pedido) references pedido (num_pedido), constraint fk_item2 foreign key (cod_produto) references produto (cod_produto) );

33

2. INSERT INTO Vendedor (nome_vendedor, salario_fixo, faixa_comissao, cod_vendedor) VALUES (ANTNIO, 1300, A, 200) 3. UPDATE Vendedor SET salario_fixo = 1500, faixa_comissao = D WHERE cod_vendedor = 200 4. DELETE FROM Vendedor WHERE faixa_comissao = D 5. UPDATE Vendedor SET salario_fixo = salario_fixo * 1.10 WHERE faixa_comissao = B 6. SELECT descricao, unidade, valor_unitario FROM produto; 7. SELECT nome_cliente, endereco, CGC FROM cliente; 8. SELECT * FROM vendedor; 9. SELECT num_pedido, cod_produto, quantidade FROM item_pedido WHERE quantidade = 35; 10. SELECT nome_cliente FROM cliente WHERE cidade = NITERI; 11. SELECT descricao_produto FROM produto WHERE unidade = M AND valor_unitario < 1.05; 12. SELECT nome_cliente, endereo FROM cliente WHERE cidade = SO PAULO OR (cep >= 30077000 AND cep <= 30079000); 13. SELECT num_pedido FROM pedido WHERE NOT (prazo_entrega = 15); 14. SELECT cod_produto, descricao_produto FROM produto WHERE valor_unitario BETWEEN 0.32 AND 2.00; 15. SELECT descricao_produto, cod_produto FROM produto WHERE unidade LIKE K%; 16. SELECT cod_vendedor, nome_vendedor FROM vendedor WHERE nome_vendedor NOT LIKE JO%; 17. SELECT nome_vendedor FROM vendedor WHERE faixa_comissao IN (A, B); 18. SELECT * FROM cliente WHERE inscr_estadual IS NULL; 19. SELECT nome_vendedor, salario_fixo FROM vendedor ORDER BY nome_vendedor; 20. SELECT nome_cliente, cidade, uf FROM cliente ORDER BY uf DESC, cidade DESC; 21. SELECT descricao, valor_unitario FROM produto WHERE unidade = M ORDER BY valor_unitario; 22. SELECT nome_vendedor, (salario_fixo * 1.75) + 120 AS novo_salario FROM vendedor WHERE faixa_comissao = C ORDER BY nome_vendedor; 23. SELECT MIN(salario_fixo), MAX(salario_fixo) FROM vendedor; 24. SELECT SUM(quantidade) FROM item_pedido WHERE cod_produto = 78; 25. SELECT AVG(salario_fixo) FROM vendedor;

Apostila de A.S.M.D. Mdulo de S.Q.L.

34

26. SELECT COUNT(*) FROM vendedor WHERE salario_fixo > 2500; 27. SELECT DISTINCT unidade FROM produto; 28. SELECT num_pedido, COUNT(*) AS total_produtos FROM item_pedido GROUP BY num_pedido; 29. SELECT num_pedido, COUNT(*) AS total_produtos FROM item_pedido GROUP BY num_pedido HAVING COUNT(*) > 3; 30. SELECT nome_cliente, pedido.cod_cliente, num_pedido FROM cliente, pedido WHERE cliente.cod_cliente = pedido.cod_cliente; 31. SELECT nome_cliente, UF, prazo_entrega FROM cliente, pedido WHERE uf IN (SP, RJ) AND prazo_entrega > 15 AND cliente.cod_cliente = pedido.cod_cliente; 32. SELECT nome_cliente, prazo_entrega FROM cliente, pedido WHERE cliente.cod_cliente = pedido.cod_cliente ORDER BY prazo_entrega DESC; 33. SELECT DISTINCT nome_vendedor, prazo_entrega FROM vendedor V, pedido P WHERE salario_fixo => 1000.00 AND prazo_entrega > 15 AND V.cod_vendedor = P.cod_vendedor ORDER BY nome_vendedor; 34. SELECT nome_cliente FROM cliente C, pedido P, item_pedido I, produto PR WHERE C.cod_cliente = P.cod_cliente AND P.num_pedido = I.num_pedido AND I.cod_produto = PR.cod_produto AND prazo_entrega > 15 AND descrio = QUEIJO AND uf = RJ ORDER BY C.nome_cliente; 35. SELECT DISTINCT nome_vendedor FROM vendedor V, pedido P, item_pedido I, produto PR WHERE V.cod_vendedor = P.cod_vendedor AND P.num_pedido = I.num_pedido AND I.cod_produto = PR.cod_produto AND quantidade > 10 AND descricao = CHOCOLATE; 36. SELECT COUNT (cod_cliente) FROM cliente C, pedido P, vendedor V WHERE C.cod_cliente = P.cod_cliente AND P.cod_vendedor = V.cod_vendedor AND nome_vendedor = JOO; 37. SELECT cidade, COUNT (cod_cliente) AS numero FROM cliente C, pedido P, vendedor V WHERE cidade IN ( `RIO DE JANEIRO, NITERI ) AND nome_vendedor = JOO AND C.cod_cliente = P.cod_cliente AND V.cod_vendedor = P.cod_vendedor GROUP BY cidade; 38. SELECT descricao FROM produto WHERE cod_produto IN ( SELECT cod_produto FROM item_pedido WHERE quantidade = 10); 39. SELECT nome_vendedor FROM vendedor WHERE salario _fixo < ( SELECT AVG (salario_fixo) FROM vendedor); 40. SELECT cod_produto, descricao FROM produto P WHERE NOT EXISTS ( SELECT * FROM item_pedido WHERE cod_produto = P.cod_produto); 41. SELECT nome_cliente FROM cliente C WHERE EXISTS (SELECT COUNT(*) FROM pedido WHERE cod_cliente = C.cod_cliente GROUP BY cod_cliente HAVING COUNT (*) > 3);

Apostila de A.S.M.D. Mdulo de S.Q.L.

35

Referncias Bibliogrficas

Livros e Revistas:
1. Modelagem de Dados A Abordagem Entidade-Relacionamento para Projeto Lgico Peter Pin Chan Chen Editora McGraw Hill 2. Banco de Dados Relacionais Teoria e Prtica de Projetos Vincius Medina Kern Editora rica 3. Interbase O Poderoso Sistema Gerenciador de Banco de Dados Relacional Marcos Aurlio Nobre Editora rica 4. SQL Magazine publicao mensal Editora DevMedia Group http://www.sqlmagazine.com.br

Endereos WEB:
5. Planeta Delphi - http://www.delphi.eti.br/ 6. Firebird - http://www.firebirdsql.com/ 7. Firebase - http://www.firebase.com.br/fb/ 8. Imasters - http://www.imasters.com.br/secao.php?cs=30 9. Active Delphi - http://www.activedelphi.com.br/ 10. Borland Inc. - http://www.borland.com/interbase/ 11. Firebird.com.br - http://www.firebird.com.br/index.php 12. IBOConsole - http://www.mengoni.it/downloads.html