Já que estamos trabalhando com SQL em algumas aplicações desenvolvidas em artigos, resolvi escrever um artigo sobre consultas SQL e a aplicação da teoria na prática.
Ex.:
SELECT [DISTINCT] {*, coluna, coluna, ...}
FROM tabela
[WHERE condição(ões)]
[ORDER BY {coluna, expr, apelido} [ASC|DESC]
Onde:
- DESC: ordena as linhas na ordem decrescente
- ASC: ordena as linhas na ordem crescente(default)
- ORDER BY: especifica a ordem em que as linhas recuperadas são exibidas
- Condição: é composta por nomes de colunas, expressões, constantes e um operador de comparação
- WHERE: restringe a consulta às linhas que atendem uma condição.
- DISTINCT: suprime as duplicatas (linhas duplicadas).
- FROM tabela: especifica a tabela contendo as colunas.
- SELECT: é uma lista de pelo menos uma coluna.
Expressões Aritméticas:
OPERADOR : DESCRIÇÃO:
+ SOMAR
- SUBTRAIR
* MULTIPLICAR
/ DIVIDIR
Precedência(Ordem) do(s) Operador(es):
- A multiplicação e a divisão tem prioridade sobre a adição e a subtração;
- Os operadores com a mesma prioridade são avaliados da esquerda para a direita;
- Os parênteses são usados para forçar a avaliação priorizada e para esclarecer as instruções.
Ex.: SELECT name, salary, 12*(sal+100)
FROM tabela1.
Alguns operadores:
O operador BETWEEN é usado para exibir linhas baseadas em uma faixa de valores.
Ex.: WHERE sal BETWEEN 100 AND 150
No qual 100 -> limite inferior;
150 -> limite superior.
Então a consulta retornará valores entre 100 e 150.
Use o operador IN serve para testar os valores de uma lista.
Ex.: SELECT name
FROM tabela1
WHERE mgr IN (7654, 7123, 7432)
A consulta retornará nomes(name) aonde o MGR seja 7654, 7123, 7432.
Use o operador LIKE serve para executar pesquisas curinga de valores de string de pesquisa válidos.
Ex.: WHERE name LIKE ‘S%’
No caso dessa condição ele pegará todos os nomes que começam com a letra S.
Use o operador IS NULL para retornar valores nulos.
Ex.: WHERE mgr IS NULL
Operadores Lógicos:
AND: Retorna TRUE se as condições de componentes for TRUE.
Ex.: WHERE sal >= 1100
AND job = ’GERENTE’
OR : Retorna TRUE se uma das condiçao(ões) de componente for TRUE.
WHERE sal > = 1100
OR job = ’GERENTE’
NOT: Retorna TRUE se a condição seguinte for FALSE.
Ex.: WHERE sal >= 1100
AND job not in(’GERENTE’,’CLERK’)
Regras de Precedência:
01. Todos os operadores de comparação.
02. NOT
03. AND
04. OR
Obs.: Use parênteses para forçar a prioridade.
Funções NVL:
Converte nulo para um valor real.
Sintax: NVL(expr1,expr2)
Expr1 -> é o valor de origem ou expressão que pode conter nulo.
Expr2 -> é o valor de destino para a conversão de nulo.
Ex.: Select NVL(comm,0) From tabela1
Se existir valores COMM nulos, o banco retornará 0 em vez de NULO.
Agora estamos no último passo, o mais importante, os objetivos agora são:
- Criar instruções SELECT para obter acesso aos dados a partir de mais de uma tabela usando as junções idênticas e não-idênticas;
- Visualizar dados que, em geral, não correspondem a uma condição de junção usando junções externas;
- Unindo uma tabela a ela mesma.
Ou seja, como obter dados a partir de uma ou mais tabelas, usando diferentes métodos disponíveis.
O que é um(a) Junção(JOIN)?
A condição de junção é usada quando é necessário dados de uma ou mais tabelas. As linhas de uma tabela podem ser unidas às linhas de outra tabela de acordo com os valores comuns existentes nas colunas correspondentes, isto é, em geral colunas de chave primária e estrangeira.
Para exibir dados a partir de uma ou mais tabelas relacionadas, crie uma condição de junção simples na cláusula WHERE.
SELECT tabela1.coluna, tabela2.coluna
FROM tabela1, tabela2
WHERE tabela1.coluna1 = tabela2.coluna2
Tipos de Junções:
Existem 2 tipos de condições de junção:
- Junções idênticas,
- Junções não-idênticas.
Métodos de junção adicional incluem o seguinte:
- Junções externas,
- AutoJunções.
Junção Idêntica:
São chamadas de junções simples ou junções internas.
SELECT tabela1.CD_COM, tabela1.DC_COM, tabela2.CD_COM, tabela2.DC_ASP
FROM tabela1, tabela2
WHERE tabela1.CD_COM = tabela2.CD_COM
A cláusula WHERE especifica como as tabelas serão unidas:
WHERE tabela1.CD_COM = tabela2.CD_COM
Porque a coluna CD_COM é comum às duas tabelas, ela deve estar prefixada pelo nome da tabela a fim de evitar ambiguidade.
Usando Apelidos de Tabela:
SELECT e.CD_COM, e.DC_COM, e.CD_COM, d.DC_ASP
FROM tabela1 e, tabela2 d
WHERE e.CD_COM = d.CD_COM
No exemplo, note como os exemplos são identificados na cláusula FROM. O nome da tabela é especificado integralmente, seguido de um espaço e, em seguida, do apelido da coluna.
A tabela1 recebeu o apelido de E, a tabela2 recebeu o apelido D.
Unindo mais de Duas tabelas:
SELECT c.name, d.ordid, i.itemid, i.itemtot, d.total
FROM customer c, ord d, item i
WHERE c.custid = d.custid
AND d.ordid = i.ordid
AND c.name = "SPORT TKB";
Funções Não-idênticas:
Junção não idêntica é quando nenhuma coluna da tabela1 corresponde diretamente a uma coluna da tabela2. O relacionamente entre as duas tabelas é que a coluna SALARY da tabela1 está entre a coluna LOSAL e HISAL da tabela2.
O relacionamento é obtido por um operador que não é o igual (=) e no caso é o operador BETWEEN que foi explicado acima.
SELECT e.NAME, e.SALARY, s.GRADE
FROM tabela1 e, tabela2 s
WHERE e.salary BETWEEN s.local AND s.hisal;
Obs.: Relacionamento sem chave estrangeira.
FONTE :
http://imasters.uol.com.br/artigo/2940/visual_basic/vb_x_sql_-_consultas_sql/