apostila sql e infomaker.pdf
TRANSCRIPT
SQL e Infomaker
universidadeciss
CISS Software e Serviços 2
Índice SQL e Infomaker ........................................................................................ 1
1. Introdução ........................................................................................................................ 4 2. A Linguagem SQL ............................................................................................................ 4
Linguagem Interativa de Consulta: ...................................................................................... 4 Acesso ao Banco de Dados por Linguagens de Programação: .......................................... 4 Administração de Banco de Dados: .................................................................................... 4
3. Subdivisões da Linguagem SQL ...................................................................................... 5 Linguagem de definição de dados (DDL) ............................................................................ 5 Linguagem de manipulação de dados (DML) ...................................................................... 5 Conhecendo os Tipos de Dados: ........................................................................................ 5 Operadores Lógicos ............................................................................................................ 6 Operadores Aritméticos ....................................................................................................... 6
4. Construindo Comandos DDL ............................................................................................ 6 CREATE TABLE .................................................................................................................. 6 ALTER TABLE ..................................................................................................................... 7 DROP TABLE ...................................................................................................................... 8
5. Construindo Comandos DML ........................................................................................... 8 INSERT ................................................................................................................................ 8 UPDATE .............................................................................................................................. 9 DELETE ............................................................................................................................... 9 SELECT ............................................................................................................................. 10
6. Conhecendo as Funções de Agregadas ........................................................................ 10 COUNT .............................................................................................................................. 11 SUM ................................................................................................................................... 11 AVG ................................................................................................................................... 11 MIN .................................................................................................................................... 11 MAX ................................................................................................................................... 11
7. Conhecendo as Expressões CASE: ............................................................................... 12
CISS Software e Serviços 3
8. Conhecendo o Operador JOIN ....................................................................................... 12 JOIN ou INNER JOIN ........................................................................................................ 13 RIGHT JOIN ou RIGHT OUTER JOIN ............................................................................... 14
9. Operadores UNION e UNION ALL ................................................................................. 15 UNION ............................................................................................................................... 15 UNION ALL ........................................................................................................................ 15
10. Trabalhando com SubConsultas (SubQuery) .............................................................. 15 Subquery na Clausula SELECT ......................................................................................... 16 Subquery na Clausula FROM ............................................................................................ 16 Subquery na Clausula WHERE ......................................................................................... 17
CISS Software e Serviços 4
1. Introdução
A primeira versão da linguagem SQL, chamada SEQUEL (Structured Query English
Language), surgiu em 1974 nos laboratórios da IBM (Califórnia). Entre 1976 e
1977 ela foi revisada e ampliada, tendo então o seu nome alterado para SQL. Devido
ao sucesso da nova forma de consulta e manipulação de dados dentro de um
ambiente de banco de dados, sua utilização tornou-se cada vez maior, atualmente a
maioria dos Sistemas Gerenciadores de Banco de Dados (SGBD) utilizam o SQL
como a linguagem padrão para o acesso de dados. Entre eles podemos citar: DB2
(IBM), ORACLE (Oracle Corporation) e SQL Server (Microsoft).
Em 1982 o American National Standard Institute (ANSI) tornou a SQL a linguagem padrão para a manipulação de dados em ambiente relacional.
2. A Linguagem SQL
A linguagem SQL pode ter vários focos de utilização, como por exemplo:
Linguagem Interativa de Consulta: Através de comandos SQL os usuários podem montar consultas para extração de dados para diversos fins, sem a necessidade da criação de um programa para tal necessidade, podendo utilizar ferramentas front-end para a construção de relatórios e/ou análises de BI (Business Intelligence).
Acesso ao Banco de Dados por Linguagens de Programação: Comandos SQL embutidos em programas de aplicação (escritos em C, C++, Java, Visual Basic e etc) acessam os dados armazenados em uma base de dados relacional.
Administração de Banco de Dados: O responsável pela administração do banco de dados (DBA) pode utilizar comandos SQL para realizar tarefas relacionadas com a manutenção dos schemas do banco de dados.
CISS Software e Serviços 5
3. Subdivisões da Linguagem SQL
Linguagem de definição de dados (DDL) Permite ao usuário a definição da estrutura e organização dos dados armazenados, e das relações existentes entre eles.
Ex: CREATE, ALTER, DROP.
Linguagem de manipulação de dados (DML) Permite a um usuário, ou a um programa de aplicação, a execução de operações de inclusão, remoção, seleção ou atualização de dados previamente armazenados na base de dados.
Ex: INSERT, UPDATE, DELETE, SELECT.
Conhecendo os Tipos de Dados: Para que possamos construir corretamente uma estrutura de banco de dados, precisamos conhecer os tipos de dados utilizados, abaixo estão especificados os principais tipos de dados utilizados pelos SGBDs.
Tipo de Dados SQL Dados Armazenados Pelas Colunas
CHAR Caracteres de texto (até oito caracteres).
VARCHAR Textos, nomes, descrições.
LONGVARCHAR Textos muitos grandes.
NUMERIC Números decimais.
DECIMAL Números decimais.
BOOLEAN Verdadeiro ou Falso (TRUE, FALSE).
INTEGER Números inteiros (até nove casas).
BIGINT Números inteiros muito grandes (acima de 9 casas).
DATE Datas (YYYY/MM/DD).
TIME Tempo (HH:MM:SS).
TIMESTAMP Date e Tempo (DD/MM/YYYY :HH:MM:SS.MMMMMM
CISS Software e Serviços 6
Operadores Lógicos
Muitas vezes, apenas uma condição não é o suficiente para determinarmos o critério de busca. Sempre que isso ocorrer, podemos utilizar operadores lógicos, veja na tabela a seguir os operadores lógicos:
Operador Significado Exemplo
AND E Condição 1 AND condição 2
OR Ou Condição 1 OR condição 2
NOT Não/Negação NOT condição
Operadores Aritméticos
Operador Significado Exemplo
- Subtração (Coluna1 – Coluna2)
+ Adição (Coluna1 + Coluna2)
/ Divisão (Coluna1 / Coluna2)
* Multiplicação (Coluna1 * Coluna2)
> Maior Coluna1 > 0
< Menor Coluna1 < 1
>= Maior ou Igual Coluna1 >= 1
<= Menor ou igual Coluna1 <= 0
<> Diferente Coluna1 <> 0
4. Construindo Comandos DDL CREATE TABLE O comando CREATE TABLE é utilizado para criar uma tabela. A sua forma geral é:
CREATE TABLE <nome_tabela> (
<Descrição_Coluna> <Tipo_De_Dado> <Aceita Nulos> <Chave Primária>,
<Descrição_Coluna> < Tipo_De_Dado >,
<Descrição_Coluna> < Tipo_De_Dado > );
CISS Software e Serviços 7
Definição
<Nome_Tabela> Nome da tabela a ser criada.
<Descrição_Coluna> Descrição/Nome da coluna que está sendo criada.
<Tipo_De_Dado> Define o tipo dos dados que serão armazenados na coluna (Números Inteiros, Números Decimais, Textos, Datas e etc).
<Aceita Nulos> Define se a coluna em questão aceita armazenar valores nulos.
<Chave Primária> Define se a coluna é a chave primária da tabela que além de não poder receber valores nulos, deve ser uma coluna UNIQUE (sem repetições; isto é, chave primária).
Criando a tabela FUNCIONARIO:
CREATE TABLE FUNCIONARIO
(
IDFUNCIONARIO INTEGER NOT NULL PRIMARY KEY,
NOME VARCHAR(30),
DTNASCIMENTO DATE,
VALSALARIO DECIMAL(15,6),
FLAGINATIVO CHAR(1)
);
ALTER TABLE O comando ALTER TABLE é utilizado para alterar a estrutura de uma tabela. A sua forma geral é:
ALTER TABLE <nome_tabela> <alteração>;
Definição
<nome_tabela> dever ser substituído pelo nome da tabela a ser alterada.
<alteração> deve ser substituído pela sintaxe da alteração que será feita na tabela.
Alterando a tabela FUNCIONARIO
ALTER TABLE FUNCIONARIO ADD COLUMN SEXO CHAR(1);
CISS Software e Serviços 8
DROP TABLE O comando DROP TABLE é utilizado para deletar uma tabela. A sua forma geral é:
DROP TABLE <nome_tabela>;
Definição
<nome_tabela> dever ser substituído pelo nome da tabela a ser excluída.
Deletando a tabela FUNCIONARIO:
DROP TABLE FUNCIONARIO;
5. Construindo Comandos DML
INSERT, UPDATE, DELETE, SELECT.
INSERT O comando INSERT é utilizado para inserir dados em uma tabela. A sua forma geral é:
INSERT INTO <nome_tabela> (<nome_coluna>,<nome_coluna>) VALUES
(<valor>,<valor>);
Definição
<nome_tabela> dever ser substituído pelo nome da tabela a ser alterada.
<nome_coluna> deve ser substituído pelo nome da(s) coluna(s) que terão valor.
<valor> deve ser substituído pelo valor inserido para a coluna correspondente.
Inserindo dados na tabela FUNCIONARIO:
INSERT INTO FUNCIONARIO (IDFUNCIONARIO, NOME) VALUES (1,’Joao Carlos’);
CISS Software e Serviços 9
UPDATE O comando UPDATE é utilizado para atualizar ou modificar os dados de uma tabela. A sua forma geral é:
UPDATE <nome_tabela> SET <nome_coluna> = <valor> WHERE <condicao>;
Definição
<nome_tabela> dever ser substituído pelo nome da tabela a ser alterada.
<nome_coluna> deve ser substituído pelo nome da(s) coluna(s) que terão valor atualizado.
<valor> deve ser substituído pelo valor atualizado para a coluna correspondente.
<condicao> deve ser substituído pela condição que o comando vai respeitar.
Atualizando dados na tabela FUNCIONARIO:
UPDATE FUNCIONARIO SET NOME = ‘MARIA’ WHERE IDFUNCIONARIO =1;
DELETE O comando DELETE é utilizado para deletar os dados de uma tabela. A sua forma geral é:
DELETE FROM <nome_tabela> WHERE <condicao>;
Definição
<nome_tabela> dever ser substituído pelo nome da tabela a ser alterada.
<condicao> deve ser substituído pela condição que o comando vai respeitar.
Deletando dados na tabela FUNCIONARIO:
DELETE FROM FUNCIONARIO WHERE IDFUNCIONARIO =1;
CISS Software e Serviços 10
SELECT O comando SELECT é utilizado para selecionar os dados de uma tabela. A sua forma geral é:
SELECT <nome_coluna> FROM <nome_tabela> WHERE <condicao>;
Definição
<nome_coluna> dever ser substituído pelo nome da coluna a ser selecionada.
<nome_tabela> deve ser substituído pelo nome da tabela a qual serão selecionados os dados.
<condicao> deve ser substituído pela condição que o comando vai respeitar.
Selecionando dados na tabela FUNCIONARIO:
SELECT IDFUNCIONARIO, NOME FROM FUNCIONARIO WHERE IDFUNCIONARIO =1;
6. Conhecendo as Funções de Agregadas
Existem diversas funções que são implementadas pelo padrão SQL. Essas funções auxiliam a computar uma variedade de medidas baseadas em valores das colunas do banco de dados. As principais funções de agregação são:
Função Ação
COUNT Retorna o número de linhas afetadas pelo comando.
SUM Retorna o somatório do valor das colunas especificadas.
AVG Retorna a média aritmética dos valores das colunas.
MIN Retorna o menor valor da coluna de um grupo de linhas.
MAX Retorna o maior valor da coluna de um grupo de linhas.
CISS Software e Serviços 11
COUNT
Diferentemente das outras funções, o COUNT retorna o número de linhas que atende a uma determinada condição. Podemos utilizá-lo com um asterisco entre parênteses, para indicar que queremos saber a quantidade total de linhas, independentemente de haver linhas com colunas nulas ou não. Assim se quisermos saber quantos produtos existem na tabela PRODUTO rodamos o seguinte comando.
SELECT COUNT(*) FROM PRODUTO
SUM
Retorna o valor total de uma determinada coluna em um determinado grupo de linhas. Assim, se quisermos saber o total do preço de um determinado produto, utilizamos o comando:
SELECT SUM(PRECO) FROM PRODUTO
AVG
Extrai a média aritmética de um determinado grupo de linhas. Para saber o preço médio dos Produtos, execute o seguinte comando:
SELECT AVG(PRECO) FROM PRODUTO;
MIN
Retorna o menor valor de uma coluna em um grupo de linhas. Podemos utilizá-la para colunas do tipo data ou alfanuméricas. Para saber o preço de venda mais barato da loja, execute o seguinte comando:
SELECT MIN(PRECO) FROM PRODUTO;
MAX
Retorna o maior valor de uma coluna em um grupo de linhas. Igualmente ao MIN, pode-se utilizá-la para colunas do tipo data ou alfanuméricas. Para saber qual é o produto mais caro da loja, execute o seguinte comando:
SELECT MAX(PRECO) FROM PRODUTO;
CISS Software e Serviços 12
7. Conhecendo as Expressões CASE:
O padrão SQL prevê a possibilidade de utilizar a expressão CASE, presente em diversas linguagens de programação. Utilizando essa cláusula é possível criar complexas estruturas de controle tanto nas diversas linguagens de programação como nos comandos SQL. Ao ser utilizada a cláusula CASE em comandos SQL é possível economizar diversas linhas de código, pois não é necessário criar blocos de programação para testar condições.
A expressão CASE será testada em tempo de execução do comando SELECT ou UPDATE. Como o CASE faz parte de outro comando, será possível colocá-lo em qualquer situação em que um valor deva ser testado.
É possível utilizar o comando SELECT, UPDATE, DELETE prevendo diversas condições para extração dos dados. A sintaxe para é a seguinte:
SELECT
IDOPERACAO,
CASE WHEN IDOPERACAO > 1000 THEN
'SAIDA'
ELSE
'ENTRADA'
END AS TIPO
FROM
NOTAS_ENTRADA_SAIDA
8. Conhecendo o Operador JOIN
Quando precisamos selecionar dados e envolver duas ou mais tabelas, se faz necessário um relacionamento entre elas para que os dados apresentados sejam íntegros, esse relacionamento também chamado JOIN garante essa integridade. Abaixo os principais tipo de JOIN’s.
CISS Software e Serviços 13
JOIN ou INNER JOIN
Usando o inner join, conforme mostra a figura, teremos como resultado todos os registros comuns nas duas tabelas.
Figura 1 - Usando Inner Join.
Para isso executaremos os seguintes comandos:
SELECT a.Nome, b.Nome
FROM TabelaA as A
INNER JOIN TabelaB as B
on a.Nome = b.Nome
LEFT JOIN ou LEFT OUTER JOIN:
Usando o Left Join, conforme mostra a figura, teremos como resultado todos os registros que estão na tabela A (mesmo que não estejam na tabela B) e os registros da tabela B que são comuns na tabela A.
CISS Software e Serviços 14
Para entender melhor, executaremos o seguinte código:
SELECT a.Nome, b.Nome
FROM TabelaA as A
LEFT JOIN TabelaB as B
on a.Nome = b.Nome
RIGHT JOIN ou RIGHT OUTER JOIN
Usando o Right Join, conforme mostra a figuta, teremos como resultado todos os registros que estão na tabela B (mesmo que não estejam na tabela A) e os registros da tabela A que são comuns na tabela B.
Figura - Usando Right Join
Para entender melhor, executaremos o seguinte código:
SELECT a.Nome, b.Nome
FROM TabelaA as A
RIGHT JOIN TabelaB as B
on a.Nome = b.Nome
CISS Software e Serviços 15
9. Operadores UNION e UNION ALL O operador UNION combina os resultados de duas ou mais consultas em um único resultado, retornando todas as linhas pertencentes a todas as queries envolvidas na execução. Para utilizar o UNION ou UNION ALL, o número e a ordem das colunas precisam ser idênticos em todas as consultas e os tipos de dados precisam ser compatíveis.
Existem dois tipos de operador UNION, sendo eles UNION e UNION ALL.
UNION O operador UNION, por default, executa o equivalente a um SELECT DISTINCT no resultado final. Em outras palavras, ele combina o resultado de execução das duas consultas e então elimina as linhas duplicadas. Este processo é executado mesmo que não haja registros duplicados.
UNION ALL
O operador UNION ALL tem a mesma funcionalidade do UNION, porém, não executa o SELECT DISTINCT no resultado final e apresenta todas as linhas, inclusive as linhas duplicadas.
10. Trabalhando com SubConsultas (SubQuery)
O que é uma subquery ?
Subquery é um comando SELECT "embutido" em outro comando SELECT, UPDATE, DELETE ou dentro de outra subquery.
A finalidade da subquery é retornar um conjunto de linhas para a query principal
Utilização
Tipicamente utilizamos subqueries na filtragem de pesquisas (Cláusula WHERE) nas cláusulas IN() e EXISTS(), mas subqueries podem aparecer também na cláusula FROM ou como substituto de colunas na Cláusula SELECT.
CISS Software e Serviços 16
Exemplos:
Subquery na Clausula SELECT
SELECT
IDTITULO,
IDCLIFOR,
(
SELECT
CLIENTE_FORNECEDOR.NOME
FROM
CLIENTE_FORNECEDOR
WHERE
CLIENTE_FORNECEDOR.IDCLIFOR = CONTAS_RECEBER.IDCLIFOR
) AS NOME_CLIENTE,
VALTITULO
FROM
CONTAS_RECEBER
Subquery na Clausula FROM
SELECT
CONTAS_RECEBER.IDTITULO,
CLIENTES.IDCLIFOR,
CLIENTES.NOME,
CONTAS_RECEBER.VALTITULO
CISS Software e Serviços 17
FROM
CONTAS_RECEBER,
(
SELECT
CLIENTE_FORNECEDOR.IDCLIFOR,
CLIENTE_FORNECEDOR.NOME
FROM
CLIENTE_FORNECEDOR
WHERE
CLIENTE_FORNECEDOR.FLAGINATIVO = 'F'
) AS CLIENTES
WHERE
CONTAS_RECEBER.IDCLIFOR = CLIENTES.IDCLIFOR
Subquery na Clausula WHERE
SELECT
CONTAS_RECEBER.IDTITULO,
CONTAS_RECEBER.IDCLIFOR,
CONTAS_RECEBER.VALTITULO
FROM
CONTAS_RECEBER
WHERE
CONTAS_RECEBER.IDCLIFOR IN
(
CISS Software e Serviços 18
SELECT
CLIENTE_FORNECEDOR.IDCLIFOR
FROM
CLIENTE_FORNECEDOR
WHERE
CLIENTE_FORNECEDOR.FLAGINATIVO = 'F'
)
ESPAÇO RESERVADO PARA EXERCÍCIOS.