Apostila RESUMIDA SQL
Apostila RESUMIDA SQL
Estruturada
Conteúdo
1
1 Introdução ao SQL
2 Divisões da SQL
CREATE – Criar
ALTER – Alterar
DROP – Excluir
Exemplos:
CREATE DATABASE
Criar um banco de dados.
2
CREATE TABLE Tabela (Campo1 TipoCampo Not Null, Campo2 TipoCampo,
PRIMARY KEY (ChavePrimaria));
ALTER TABLE
Alterar a estrutura de uma tabela (adicionar)
ALTER TABLE Tabela1 ADD Campo1 TipoCampo, ADD FOREIGN KEY (Campo1)
REFERENCES Tabela2 (Campo2);
ALTER TABLE
Alterar a estrutura de uma tabela (modificar)
DROP TABLE
Excluir uma tabela.
INSERT – Inserir
UPDATE – Atualizar
DELETE – Excluir
3
2.2.1 Comando INSERT
Inclui um registro ao final de uma tabela contendo os valores de campo especificados.
Quando o registro a ser adicionado for de uma tabela do banco de dados, com
definição de integridade referencial, chave primária e chaves secundárias poderá haver
problemas da inserção como repetição da chave primária e campos não nulos.
Cláusulas:
INTO tabela - Define o nome da tabela (nome_de_campos) - lista dos campos do registro
que receberão os valores do VALUES
VALUES (valores) - Valores a serem atribuídos nos campos identificados. Devem estar na
mesma sequência e mesmo tipo dos campos.
Exemplo:
Incluir um registro na tabela cidades com valores correspondentes:
INSERT INTO cidades (cidade, nome, uf) VALUES ("00020","BETIM","MG")
Incluir um registro na tabela Funcions:
INSERT INTO funcions (funcionar,nome,nascimento,salario)
VALUES ("000090","MARIA JUVENTINA",ctod("05/05/80"),700)
Altera valores de uma ou mais linhas da tabela especificada. Devem ser tomados os
mesmos cuidados do comando INSERT quanto a chave primária e integridade referencial.
Sintaxe:
UPDATE nome_tabela - identifica o nome da tabela SET atribuição1,atribuição n - define os
campos a serem alterados
WHERE condição - especifica os registros a serem alterados. Se a cláusula Where for
omitida a atualização será feita para todos os registros.
Exemplo:
Altere a UF da cidade 20 da tabela cidades para "RJ"
UPDATE cidades SET uf = "RJ" WHERE cidade = "00020"
4
2.2.3 Comando DELETE
Marca um ou mais registros para exclusão. A exclusão definitiva será feita quando
utilizamos o comando PACK. Para reintegrar os registros marcados para exclusão
utilizamos o comando RECALL ALL.
Sintaxe:
DELETE FROM nome_tabela - Define o nome da tabela dos registros a serem
excluidos
WHERE condição - Especifica os registros a serem excluidos.
Exemplo:
Excluir o registro onde código do funcionário é 000735
DELETE FROM funcions WHERE funcionar = "000735"
5
2.3.1 Comando Select
Responsável por filtrar linhas da tabela, definindo uma ou mais condições. Exemplo:
Exibir todos os campos da tabela ALUNOS onde o sexo é igual a "F":
Select * From Alunos Where sexo = "F"
Na cláusula Where podemos utilizar mais de uma condição, ligando-as com AND e
OR.
Como estas ligações lógicas são do SQL e não do aplicativo, NÃO usamos os pontos
no início e no fim (and. e .or.), utilizadas normalmente na linguagem de programação.
Outras duas opções do Where são o IN e o BETWEEN. O IN é semelhante ao OR,
podendo usar qualquer valor (numérico, data ou caracter) e seus valores de comparação
ficam entre parênteses. Usamos o IN quando os valores de comparação são mínimos ou
quando há intervalos entre eles (01 ou 05, 'A' ou 'M' ou 'T'). Já o BETWEEN é uma opção de
faixa de valores, que não contém intervalos (salários entre R$500 e R$900, nomes de 'A' até
'F'). Exemplos:
select * from alunos where cidade in ("01","04","37")
select * from alunos where sexo = "F" and turno in ("M","V")
6
select * from alunos where month(nascimento) between 1 and 6
select nome, ender, telefone from alunos where curso = ‘Informática’ or curso =
‘Engenharia’
select * from alunos where nome in ("A","C") and day(nascimento) between 10 and
20
7
2.3.4 Cláusula Order By
Ordena a exibição por uma ou mais colunas definidas (e separadas por vírgula).
Exemplo:
SELECT aluno, nome, curso
FROM Alunos
ORDER BY curso, nome
Os campos que forem usados na cláusula ORDER BY não são obrigados a aparecer
na lista definida pelo SELECT. Após o nome da coluna ordenada, podemos usar a opção
DESC para ordenar de forma descendente, senão a opção ASC (ascendente) que já é
padrão. Podemos substituir o nome do campo pelo seu número da posição no select.
Exemplo:
SELECT aluno, nome, curso FROM alunos ORDER BY 3, 2
Exemplos:
Qual é a média de débitos dos alunos da cidade "01"
Select avg(debito) from alunos where cidade = "01"
8
select min(debito), max(debito) from alunos where turno = "M"
Agrupa as linhas de consulta com base nos valores de uma ou mais colunas. O
parâmetro pode ser o nome do campo ou seu número no resultado do comando Select. A
cláusula Group By é muito útil quando a utilizamos para trabalhar junto às funções do
comando Select, como encontrar a soma de um campo numérico, dependendo de outro
campo (sum), ou simplesmente contar o número de registro agrupados (count). Exemplo:
Quantos alunos existem em cada curso?
Select curso, count(*) Quantidade From alunos GROUP BY CURSO
Quantos alunos estudam por turno e curso?
Select turno, curso, count(*) From alunos GROUP BY 1, CURSO
9
Você também pode utilizar NOT para inverter o valor de uma expressão lógica.
A maior importância da cláusula Having é ser utilizada como o WHERE, porém
para oresultado do GROUP BY. No where, não há como utilizar as funções do SELECT
dentro do where (sum, count, min ...); somente o HAVING aceita estas funções na filtragem.
Exemplo:
Quantos alunos existem em cada curso? Exiba apenas os que possuem 44 alunos.
Select curso, count(*) Quantidade From alunos group by curso
HAVING count(*) = 44
Quantos alunos estudam por turno e curso, onde o menor débito é igual a
R$10,00?
Select turno, curso, count(*) From alunos GROUP BY 1, CURSO
HAVING MIN(DEBITO) = 10
10
2.3.9 Opção Distinct
Uma seleção padrão é executada com a opção ALL, que trabalha com todas as
linhas da(s) tabela(s). A opção DISTINCT exclui linhas duplicadas das colunas
selecionadas.
Observação: Você só pode utilizar DISTINCT uma vez em cada SELECT.
Exemplo:
Exibir as linhas existentes da tabela alunos que combinam cidade e turno:
Select Distinct cidade, turno from alunos
11
A Query exibida não é uma tabela (ou visão) física. É lógica. Por isso, não haverá
criação física (no HD) de uma nova tabela.
Cuidado: se há join com duas tabelas, há uma condição de ligação. Se há join com
mais de duas tabelas, haverá mais de uma condição de ligação. Exemplo:
SELECT f.nome, c.nome, e.nome FROM funcions f, cidades c, estab e
WHERE f.cidade = c.cidade AND f.estab = e.estab
2.3.11 Operadores
As colunas recuperadas pelo comando SELECT, até agora, foram atributos das
tabelas em sua forma simples ou utilizando funções do aplicativo (val(), month(), year(), etc).
Mas também podemos gerar colunas que são resultados de cálculos aritméticos, utilizando
operadores como: +, -, *, /, **. Exemplos:
Exiba o nome do funcionário e seu salário com aumento de 5%
SELECT nome, salario * 1.05 Com_Aumento FROM funcions
Exiba a duplicata 10 com o valor menos R$3,00 e o campo pago dividido por 3
SELECT duplicata, valor - 33 Valor, pago / 3 Dividido FROM duplics
Por falta de exemplo, digite o comando abaixo
SELECT nome, 3 ** 3 Potencia FROM funcions where salario > 1400
Outros exemplos de alteração das colunas recuperadas são a concatenação e as
funções substr() e iif(). Normalmente são utilizados para emissão de relatório ou consultas:
Exiba dia e ano do nascimento e código mais nome concatenados dos funcionarios
SELECT substr(dtoc(nascimento),1,5), funcionar+' - '+nome FROM funcions
Exiba o valor das duplicatas e 'alto ' se valor é maior que R$20,00 senão 'baixo'
SELECT valor, iif(valor>20,'alto ','baixo') FROM duplics
2.3.12 Sub-Query
A cláusula WHERE do comando Select serve para filtrar, com condições, o número
de linhas recuperadas numa query. Porém, pode haver situação que a condição não pode
ser concretizada com as informações atuais do Select. Para isso, usamos o resultado de um
Select para auxiliar na condição da cláusula WHERE, tendo um select dentro de outro select
(Sub-Query). Exemplo:
Quais são os funcionários que recebem mais que a média de todo o cadastro?
12
Forma Simples:
Select avg(salario) from funcions (para achar o salario medio: 348,85)
Select * from funcions where salario > 348.85
.SUB-QUERY:
Select * from funcions where salario > (select avg(salario) from funcions)
OBSERVAÇÕES:
. Atenção com a quantidade de linhas do segundo select. Se retornar uma linha, pode-se
utilizar =, >, <, <>. Se retornar mais de uma linha, TEM que utilizar IN.
. Repare nos exemplos acima: o resultado da sub-query deve ser sempre compatível com
o campo da condição do Select principal.
13
Select 1,count(*),banco,space(32) from cooperados group by 3 UNION
Select 2,val(cooperado),banco,nome from cooperados order by 3,1
EXEMPLO:
Quais são as cidades que não possuem nenhum aluno cadastrado de sua procedência:
SELECT a.cidade, c.cidade, c.nome from alunos a RIGHT JOIN cidades c ON a.cidade =
c.cidade where a.cidade = space(2)
14
ARRAY - Cria uma variável matriz do tamanho do número de linhas x colunas da
query, onde a primeira ocorrência é a linha e a Segunda ocorrência é a coluna.
EXEMPLOS:
Crie uma tabela de alunos da cidade 04 chamada cidade04.dbf:
SELECT * from alunos where cidade = "04" INTO TABLE cidade04
Crie um curso com código e nome do aluno e nome da sua cidade:
SELECT a.aluno,a.nome,c.nome from alunos a, cidades c where a.cidade =
c.cidade INTO CURSOR alunocid
Gere em uma variável matriz a quantidade de alunos da cidade 04:
SELECT COUNT(*) from alunos where cidade = "04" INTO ARRAY x
15