SQL e Infomaker
universidadeciss
Í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 2
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 3
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 4
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 5
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
( , < Tipo_De_Dado >, < Tipo_De_Dado > );
CISS Software e Serviços 6
Definição Nome da tabela a ser criada. Descrição/Nome da coluna que está sendo criada.
Define o tipo dos dados que serão armazenados na coluna (Números Inteiros, Números Decimais, Textos, Datas e etc).
Define se a coluna em questão aceita armazenar valores nulos. 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
NOME
VARCHAR(30),
DTNASCIMENTO
DATE,
VALSALARIO
DECIMAL(15,6),
FLAGINATIVO
CHAR(1)
PRIMARY KEY,
);
ALTER TABLE
O comando ALTER TABLE é utilizado para alterar a estrutura de uma tabela. A sua forma geral é: ALTER TABLE ;
Definição dever ser substituído pelo nome da tabela a ser alterada. 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 7
DROP TABLE
O comando DROP TABLE é utilizado para deletar uma tabela. A sua forma geral é: DROP TABLE ;
Definição 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 (,) VALUES (,);
Definição dever ser substituído pelo nome da tabela a ser alterada. deve ser substituído pelo nome da(s) coluna(s) que terão 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 8
UPDATE
O comando UPDATE é utilizado para atualizar ou modificar os dados de uma tabela. A sua forma geral é: UPDATE SET = WHERE ;
Definição dever ser substituído pelo nome da tabela a ser alterada. deve ser substituído pelo nome da(s) coluna(s) que terão valor
atualizado.
deve ser substituído pelo valor atualizado para a coluna correspondente. 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 WHERE ;
Definição dever ser substituído pelo nome da tabela a ser alterada. 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 9
SELECT
O comando SELECT é utilizado para selecionar os dados de uma tabela. A sua forma geral é: SELECT FROM WHERE ;
Definição dever ser substituído pelo nome da coluna a ser selecionada. deve ser substituído pelo nome da tabela a qual serão selecionados
os dados. 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 10
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 11
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 12
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 13
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 14
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 15
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 16
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 17
SELECT CLIENTE_FORNECEDOR.IDCLIFOR FROM CLIENTE_FORNECEDOR WHERE CLIENTE_FORNECEDOR.FLAGINATIVO = 'F' )
ESPAÇO RESERVADO PARA EXERCÍCIOS.
CISS Software e Serviços 18