Introduo |
II
SEGUNDA EDIO
SQL
Guia de Bolso
Jonathan Gennick
III
IV
Sumrio
Introduo.....................................................................................XIII
Agradecimentos...............................................................................XV
Funes analticas....................................................1
Expresses CASE simples.........................................................................1
Expresses CASE de pesquisa................................................................1
Expresses CASE........................................................1
Tipos de dados ..........................................................2
Tipos de cadeia de caracteres................................................................2
Tipos Decimais.........................................................................................3
Tipos Inteiros Binrios..........................................................................3
Tipos data/hora.......................................................................................4
Oracle.......................................................................................................4
DB2..........................................................................................................4
SQL Server................................................................................................5
MySQL.................................................................................................5
PostgreSQL.............................................................................................5
Excluindo dados........................................................34
Excluindo em ordem (MySQL)..........................................................35
Excluindo todas as rows.........................................................................36
Excluindo visualizaes e subqueries...................................................36
Recuperando dados excludos (Oracle, DB2).........................................37
Double-FROM (SQL Server)..............................................................38
VI
Funes...................................................................38
Funes de data/hora (Oracle).............................................................39
Funes de data/ hora (DB2)..............................................................42
Funes de data/hora (SQL Server).....................................................43
Funes de data/ hora (MySQL)........................................................43
Funes de data/hora (PostgreSQL)....................................................45
Funes numricas e matemticas (todas as plataformas)..................47
Funes trigonomtricas (todas as plataformas)...............................49
Funes de string................................................................................50
GROUP BY...................................................................57
Tcnicas teis de GROUP BY................................................................59
HAVING.........................................................................60
Extenses GROUP BY (Oracle, DB2)...................61
ROLLUP (Oracle, DB2)....................................................................61
CUBE (Oracle, DB2)........................................................................62
GROUPING SETS (Oracle)................................................................62
Extenses GROUP BY (SQL Server)................................................63
ROLLUP (SQL Server)......................................................................64
CUBE (SQL Server)..............................................................................64
Introduo |
VII
Queries hierrquicas..............................................65
Criando ndices .......................................................73
Removendo ndices .................................................74
Inserindo dados......................................................74
Inseres de row simples.........................................................................74
Inseres multi-rows (DB2, MySQL)...................................................75
Alvos de insero...................................................................................75
Inseres de subqueries.......................................................................76
Retornando valores inseridos (Oracle, DB2).......................................77
Inseres Multi-Tabela (Oracle)............................................................78
ALL versus FIRST (Oracle)..................................................................79
Juntando Tabelas...................................................................................79
O conceito de juno.............................................................................79
Junes cruzadas....................................................................................80
Junes internas....................................................................................81
A clusula USING (Oracle, MySQL, PostgreSQL)............................82
Junes naturais (Oracle, MySQL, PostgreSQL).................................83
No equi-junes.....................................................................................84
Junes Externas.....................................................................................85
VIII | SQL Guia de Bolso
Literais.........................................................................88
Literais de texto........................................................................................89
Literais numricos................................................................................91
Literais de data/ hora (Oracle, MySQL, PostgreSQL)..........................91
Literais de intervalo de data/ hora....................................................92
Funes OLAP............................................................99
Predicados.................................................................99
Predicados EXISTS..............................................................................100
Predicados IN.....................................................................................101
Predicados BETWEEN........................................................................101
Predicados LIKE....................................................................................102
Queries recursivas..................................................103
Introduo |
IX
Expresses regulares.............................................103
Expresses regulares (Oracle).............................................................103
Expresses regulares (SQL Server).......................................................107
Expresses regulares (MySQL).......................................................107
Expresses regulares (PostgreSQL).................................................109
Selecionando dados.....................................112
A clusula SELECT.........................................................................116
ALL e DISTINCT..............................................................................121
A clusula FROM...............................................................................121
Gerando tabelas atravs da clusula VALUES (DB2).....................124
A clusula WHERE.........................................................................124
A clusula GROUP BY......................................................................125
A clusula HAVING.........................................................................125
A clusula ORDER BY....................................................................125
Subqueries..............................................................................................126
A clusula WITH (Oracle, SQL Server, DB2)..................................127
Tabelas, criando.....................................................130
Criando uma tabela (Oracle)...........................................................131
Criando uma tabela (DB2).................................................................132
Criando uma tabela (SQL Server)...................................................133
Criando uma tabela (MySQL)..........................................................134
Criando uma tabela (PostgreSQL)...................................................135
X
Tabelas, Modificando..............................................135
Modificando uma tabela (Oracle)....................................................136
Modificando uma tabela (DB2)...........................................................136
Modificando uma tabela (SQL Server)................................................137
Modificando uma tabela (MySQL)...................................................139
Modificando uma tabela (PostgreSQL)..............................................140
Tabelas, removendo................................................140
Gerenciamento de transaes............................141
Modo de auto-efetivao (SQL Server, MySQL, PostgreSQL).....141
Comeando uma transao...............................................................142
Finalizando uma transao...............................................................146
Abortando uma transao.................................................................147
Abortando at um ponto de salvamento de uma transao...........148
Queries unio........................................................149
UNION e UNION ALL..................................................................149
ORDER BY em queries unio...........................................................150
Nomes e tipos de dados em uma unio..............................................151
Ordem de avaliao..........................................................................152
EXCEPT (ou MINUS)......................................................................152
INTERCEPT.......................................................................................154
INTERCEPT ALL (DB2, PostgreSQL)..........................................154
Atualizando dados.................................................155
Introduo |
XI
Atualizaes simples..........................................................................155
Novos valores a partir de uma subquery.............................................156
Atualizando visualizaes e subqueries.............................................157
Clusula UPDATE FROM (SQL Server, PostgreSQL).................158
Retornando dados atualizados (Oracle, DB2)................................158
Funes de Janela................................................159
Definindo uma Janela Resumo (Oracle, DB2, SQL Server)..........159
Ordenando e Classificando Dentro de Uma Janela (Oracle,DB2, SQL
Server).................................................................................................160
Comparando valores ao longo de rows (Oracle)..............................162
Resumindo sobre uma janela mvel (Oracle, DB2)..........................164
Sintaxe da Funo de Janela (Oracle)..............................................165
Sintaxe da Funo de Janela (DB2)...................................................166
Avaliao e Posicionamento das Funes de Janela...........................166
XII
Introduo
Este livro uma tentativa de compactar as informaes mais teis
sobre SQL em um guia de bolso. Cobre sentenas de manipulao de
dados e controle de transaes, tipos de dados e criao e modificao
de tabelas para as seguintes plataformas:
Oracle Database 10g Release 2
(incluindo a Oracle Express Edition)
IBM DB2 Universal Database Release 8.2
Microsoft SQL Server 2005
MySQL 5.0
PostgreSQL8.l
Nem toda sintaxe funcionar em todas as plataformas e alguns atributos
podem no estar disponveis em verses anteriores destes produtos.
Sempre que possvel, tentei registrar todas as dependncias de produto
ou verso.
NOTA
Este livro possivelmente pode no cobrir toda
a sintaxe SQL para todos os produtos. Seu
objetivo cobrir a sintaxe mais comumente
usada pelos desenvolvedores. Se voc precisar
da sintaxe detalhada e oficial, consulte o
manual de referncia do SQL para a
plataforma de quatro bases de dados.
Introduo |
XIII
Preciso de retorno!
Agradecemos a todos os leitores da primeira edio que gastaram parte
de seu tempo para me dar retorno e fazer sugestes. Atendendo a um
nmero esmagador de pedidos, adicionei a esta edio a abordagem das
sentenas e tipos de dados para a CRIAO DE TABELAS
(CREATE TABLE). Inclu tambm uma discusso sobre a cada vez
mais significativa plataforma PostgreSQL, assim como a cobertura
das potentes funes de janela (s vezes chamadas de funes analticas).
Espero que, um dia, haja uma terceira edio deste livro e realmente
apreciaria seu retorno sobre esta segunda edio para que a terceira
possa ser ainda melhor. difcil pegar um tpico to extenso como o
SQL e compact-lo em um pequeno guia de bolso. Minha esperana
incluir todas aquelas vrias coisinhas (por exemplo, parmetros de
funo) que a gente tende a esquecer e por isso, temos que consultar, ao
escrever SQL. Informem-me, por favor, se consegui ou no alcanar
esse objetivo. Se voc no encontrar alguma informao que considere
que devia constar neste livro ou se achar que desperdicei espao com
informaes no to teis, informem-me por favor, por meio do
contato com a editora: altabooks@altabooks.com.br.
Convenes
As seguintes convenes tipogrficas so usadas neste livro:
LETRAS MAISCULAS
Indicam uma palavra-chave do SQL
XIV | SQL Guia de Bolso
letras minsculas
Indicam um item definido pelo usurio, tal como um nome de
tabela ou nome de coluna, em uma sentena do SQL
Itlico
Indica nfase ou a introduo de um termo tcnico novo
Fonte Courrier
[]
Usados em descries de sintaxe para denotar elementos
opcionais
{}
Usadas em descries de sintaxe para denotar uma escolha
necessria
|
Usado em descries de sintaxe para separar escolhas
Agradecimentos
Meus mais sinceros agradecimentos s seguintes pessoas por seu apoio,
incentivo e auxlio: Grant Allen, Don Bales, Vladimir Begun, Tugrul
Bingol, John Blake, Michel Cadot, Dias Costa, Chris Date, Bruno
Denuit, Doug Doole, Chris Eaton, Stphane Faroult, Bobby Fielding,
Donna, Jenny, e Jeff Gennick, K. Gopalakrishnan, Jonah Harris,
John Haydu, Kelvin Ho, Brand Hunt, Ken Jacobs, Chris Kempster,
Introduo |
XV
Introduo | XVII
PKFK ID
NAME
POPULATION
COUNTY
DUMMY
PIVOT
PK ID
NAME
DATUM
ZONE
NORTHING
EASTING
LAT?LON
FKCOUNT Y?ID
OPEN?TO?PUBLIC
FK OWNER?ID
DESCRIPTION
CONFIRMED?DATE
PK ID
FK PARENT?ID
NAME
TYPE
UPFALL
GOV?UNIT
PKFK NAME
PKFK STOP
FK PARENT?STOP
TRIP
PK ID
NAME
PHONE
TYPE
OWNER
Funes analticas
Funo analtica o termo que o Oracle usa para designar aquilo que o
padro SQL denomina de funo de janela. Veja a seo Funes de
janela posteriormente neste livro para saber mais sobre esta classe
extremamente til de funes.
Expresses CASE
As expresses CASE lhe permitem executar a funcionalidade if-thenelse em suas sentenas de SQL.
FROM upfall u;
Tipos de dados
Os sistemas database suportam muito mais tipos de dados do que este
pequeno livro pode abranger adequadamente. Esta seo descreve alguns
tipos comumente utilizados que atendero muitas de suas necessidades.
Consulte a documentao de seu fornecedor se necessitar armazenar
dados que no possam ser acomodados pelos tipos a seguir. Veja Criando
Tabelas mais a frente neste livro para exemplos do uso de tipo de dados
(datatype).
(max_bytes)
Tipos Decimais
Todas as plataformas suportam o uso de DECIMAL para armazenar
dados numricos na base 10 (tais como valores monetrios):
DECIMAL
DECIMAL(precision)
DECIMAL(precision, scale)
XX