Você está na página 1de 10

GUIA SQL BSICO

2001

O Que SQL ?
A abreviatura SQL significa Structured Query Language (Linguagem Estruturada de Consulta). a linguagem padro usada para construir e acessar sistemas de bancos de dados relacionais de diferentes tipos e em diferentes plataformas de hardware. Apesar de ser uma linguagem padro, h diferenas entre os dialetos SQL implementados em bancos de dados.

A Instruo SELECT
Selecionando Colunas Sintaxe: SELECT [DISTINCT] <lista_de_campos> FROM <lista_de_tabelas> A clusula SELECT seleciona uma <lista_de_campos> especificada. Utilizando o smbolo de asterisco (*) em vez da <lista_de_campos>, sero selecionados todos os campos da tabela. A clusula FROM indica as tabelas de origem dos campos a serem selecionados. Em consultas SQL linhas iguais sero apresentadas. A clusula DISTINCT indica que as linhas repetidas no sero processadas, eliminando as duplicidades.

Ex.: Tabela EMPREGADO MATR 325 831 545 x NOME LUIZ PAULO SNIA SALRIO 5500 7000 9000 DEPT PD11 PD2 PD2

SELECT NOME,DEPT FROM EMPREGADO

Resultado: NOME LUIZ PAULO SNIA DEPT PD11 PD2 PD2

Deve-se mencionar somente os campos necessrios.

GUIA SQL BSICO

SELECT * FROM EMPREGADO

MATR NOME SALRIO DEPT 325 LUIZ 5500 PD11 831 PAULO 7000 PD2 545 SNIA 9000 PD2 O uso do * deve ser avaliado, pois poderemos estar trabalhando com dados desnecessrios ou tabelas muito grandes.

A Clusula WHERE
Sintaxe: SELECT <lista_de_campos> FROM <lista_de_tabelas> WHERE <condio> As condies da clusula WHERE representam comparaes entre itens. Esses itens podem ser o nome de um campo, uma constante (numrica ou literal) ou uma expresso. Atua sobre cada linha individualmente. Se condio verdadeira a linha vai para a tabela de sada, se falsa a linha descartada.

Tabela de Operaes: Operao Igual a Diferente de Menor que Menor ou igual a Maior que Maior ou igual a Pelo menos uma das condies Ambas as condies Entre dois valores (intervalo) Igual a um dos valores do conjunto Apresenta um conjunto de caracteres Exemplos: x SELECT NOME FROM EMPREGADO WHERE SALARIO >= 7500 Operador = <> < <= > >= OR AND BETWEEN x AND y IN (x, y, z) LIKE

GUIA SQL BSICO

Resultado: NOME SNIA y SELECT NOME FROM EMPREGADO WHERE SALARIO BETWEEN 6000 AND 10000 WHERE SALARIO >= 6000 AND SALARIO <= 10000 Resultado: NOME PAULO SNIA z SELECT NOME FROM EMPREGADO WHERE DEPT IN (PD,PD11,PD2) WHERE DEPT=PDOR DEPT=PD11OR DEPT=PD2 Resultado: NOME LUIZ PAULO SNIA

** Retorna Verdadeiro de DEPT for igual ao que est entre parnteses.

Expresso LIKE mscara % Equivalente a * do DOS. Vale 0, 1 ou mais caracteres (direita ou esquerda). _ Equivalente a ? do DOS. Vale 1 caracter.

GUIA SQL BSICO

Ex.: x SELECT NOME FROM EMPREGADO WHERE DEPT LIKE %P%

Resultado: NOME LUIZ PAULO SNIA y

SELECT NOME FROM EMPREGADO WHERE DEPT LIKE PD_

Resultado: NOME PAULO SNIA

Ordenando Linhas
Sintaxe: SELECT <lista_de_campos> FROM <lista_de_tabelas> [WHERE <condio>] ORDER BY <lista_de_campos> [ASC/DESC] ORDER BY ordena a tabela de sada. O default a ordem ascendente. No aceita expresso. Nos campos para ordenao pode-se usar a ordem (posio) do campo do SELECT.

Exemplos: x SELECT NOME, DEPT FROM EMPREGADO ORDER BY DEPT,NOME

ou

(ORDER BY 2,1)

GUIA SQL BSICO

Resultado: NOME PAULO SNIA LUIZ y DEPT PD2 PD2 PD11

SELECT NOME, SALARIO, DEPT FROM EMPREGADO ORDER BY SALARIO DESC, DEPT ASC ou (ORDER BY 2 DESC, 3 ASC)

Resultado: NOME SNIA PAULO LUIZ SALRIO 9000 7000 5500 DEPT PD2 PD2 PD11

Valores Calculados A SQL tambm permite que voc obtenha dados a partir de expresses envolvendo dados da tabela. Basta que para isso voc coloque a expresso como uma das colunas a ser exibida na clusula SELECT. Os valores calculados tambm podem ser utilizados como parte de uma condio ou para ordenar uma tabela a partir de uma expresso. Funes Construdas Para facilitar o processo de recuperao de informaes, a SQL possui uma srie de funes construdas. As funes atuam, geralmente, em um conjunto de linhas. Se nenhum conjunto de linhas for selecionado, o sistema assume que toda tabela um grupo. Os valores so calculados apenas para as linhas selecionadas. As funes SUM(somatrio) e AVG(mdia) s podem ser utilizadas em campos numricos. Cada funo retornar um nico valor. Descrio Somatrio dos valores da coluna. Valor mnimo da coluna. Mdia dos valores da coluna. Valor mximo da coluna. Nmero de linhas selecionadas. Nmero de valores nicos.

Funes SUM (coluna) MIN (coluna) AVG (coluna) MAX (coluna) COUNT(*) COUNT(DISTINCT coluna)

GUIA SQL BSICO

Agrupando Linhas
Sintaxe: SELECT <lista_de_campos> FROM <lista_de_tabelas> [WHERE <condio>] GROUP BY <lista_de_campos> [ORDER BY <lista_de_campos> [<ASC/DESC]] Conjunto de linhas segundo caractersticas comuns, para este conjunto faz-se determinadas operaes. Se voc quiser um nome de campo diferente ou um nome que no esteja implcito na expresso usada para gerar o campo, use a palavra reservada AS.

Ex.: Tabela ITENS NFISCAL NITEM VALOR A27 1 1000 A27 2 1500 A27 3 1200 A28 1 8000 A28 2 6000 CPRODUTO FA25 FA31 AB45 XY37 CD85

SELECT NFISCAL,SUM(VALOR) AS TOTAL FROM ITENS GROUP BY NFISCAL (colunas em comum) ORDER BY NFISCAL Resultado: NFISCAL TOTAL A27 3700 A28 14000

Condies de Agrupamento Sintaxe: SELECT <lista_de_campos> FROM <lista_de_tabelas> [WHERE <condio>] GROUP BY <lista_de_campos> HAVING <condio>
6 GUIA SQL BSICO

Atravs da clusula HAVING podemos estabelecer condies sobre o resultado obtido nos agrupamentos.

Ex.: x Selecione as Notas Fiscais com valor maior que 10000. SELECT NFISCAL, SUM(VALOR) AS TOTAL FROM ITENS GROUP BY NFISCAL HAVING SUM(VALOR) >10000 ORDER BY TOTAL DESC Resultado: NFISCAL TOTAL A28 14000 y Informe o nmero de itens para cada Nota Fiscal. SELECT NFISCAL, COUNT(*) AS NITENS FROM ITENS GROUP BY NFISCAL ORDER BY NFISCAL Resultado: NFISCAL NITENS A27 3 A28 2 ** COUNT(*) verifica a quantidade de ocorrncias para cada agrupamento. z Informe o nmero de itens, independente de Nota Fiscal. SELECT COUNT(*) AS NITENS FROM ITENS Resultado: NITENS 5 ** Formou-se um nico grupo da tabela inteira. ** COUNT(DISTINCT coluna) Ao fazer a contagem de uma coluna elimina as redundncias. Se aparecerem, por exemplo, dois produtos com o mesmo Cdigo ele assume como um nico produto.

GUIA SQL BSICO

Trabalhando com duas ou mais tabelas Sintaxe: SELECT <var1>.<campo1>, <var1>.<campo2>,..., <var2>.<campo1>, <var2>.<campo2>,..., FROM <tabela1> <var1>, <tabela2> <var2>,... [WHERE <condio>] Sempre que desejarmos trabalhar com duas ou mais tabelas, devemos informar isso atravs da clusula FROM, colocando a lista de tabelas desejadas separadas por vrgula. As colunas selecionadas aparecem na ordem indicada. A ordem indicada independe das tabelas a que as colunas pertencem. A clusula WHERE, geralmente, especifica alguma condio de relacionamento entre as tabelas. Se no existirem condies de relacionamento, todas as combinaes possveis entre as linhas das tabelas, indicadas na clusula FROM, sero retornadas (produto cartesiano). Se SELECT * for utilizado, todas os campos das tabelas selecionadas sero mostrados. No caso de existirem campos com os mesmos nomes nas duas tabelas, eles devero ser identificados com os nomes das tabelas.

Ex.: Dadas as tabelas: Tabela EMPREGADO MATR 259 290 355 396 401 423 503 NOME MARIANA RODRIGO GUILHERME DIOGO ALESSANDRA STPHANIE MURILO SALRIO DEPT 2000 P04 2500 P02 4000 P04 4200 C01 2500 P02 4000 P02 3000 P04

Tabela DEPART DEPT C01 P02 P04 DESCR CARDIOLOGIA PEDIATRIA PSICOLOGIA MATRCHF 396 423 355

x Relacione, por Departamento, seus empregados. SELECT DEPART.DEPT, DESCR, MATR, NOME FROM EMPREGADO, DEPART WHERE EMPREGADO.DEPT = DEPART.DEPT ORDER BY DEPT, MATR

GUIA SQL BSICO

Resultado: DEPT C01 P02 P02 P02 P04 P04 P04 DESCR CARDIOLOGIA PEDIATRIA PEDIATRIA PEDIATRIA PSICOLOGIA PSICOLOGIA PSICOLOGIA MATR 396 290 401 423 259 355 503 NOME DIOGO RODRIGO ALESSANDRA STPHANIE MARIANA GUILHERME MURILO

y Fornea por Departamento: ** Valor mnimo, mdio, mximo e somatrio dos salrios dos departamentos comeados pelas letras C ou P e que tenham mais de dois empregados. SELECT DEPT, MIN(SALRIO) AS MNIMO, AVG(SALRIO) AS MDIA, MAX(SALRIO) AS MXIMO, SUM(SALRIO) AS SOMATRIO FROM EMPREGADO WHERE DEPT LIKE C% OR DEPT LIKE P% GROUP BY DEPT HAVING COUNT(*) >2 ORDER BY DEPT Resultado: DEPT P02 P04 MNIMO MDIA MXIMO SOMATRIO 2500 3000 4000 9000 2000 3000 4000 9000

GUIA SQL BSICO