sql apostila

163
1 Nesta seção, o estudante será introduzido aos conceitos básicos de banco de dados. Termos utilizados para fazer referências a entidades serão definidos. Uma breve explicação sobre o que é um sistema gerenciador de banco de dados relacional e como os dados são inseridos e recuperados de um banco de dados também consta desta seção. As tabelas do banco de dados de demonstração serão examinadas. Objetivos: Ao final desta seção, o estudante deverá ter a capacidade de: Estabelecer o propósito da linguagem SQL; Definir um sistema de gerenciamento de banco de dados relacional; Listar e definir termos de banco de dados; Relacionar as tabelas que estão no banco de dados de demonstração; Reconhecer e descrever como os dados são inseridos e recuperados de um banco de dados. SQL Server Introdução a SQL Conceitos Básicos e Termos

Upload: cassio-figueredo

Post on 05-Jul-2015

171 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: SQL Apostila

1

Nesta seção, o estudante será introduzido aos conceitos básicos de banco de dados. Termos utilizados para fazer referências a entidades serão definidos. Uma breve explicação sobre o que é um sistema gerenciador de banco de dados relacional e como os dados são inseridos e recuperados de um banco de dados também consta desta seção. As tabelas do banco de dados de demonstração serão examinadas.

Objetivos:

Ao final desta seção, o estudante deverá ter a capacidade de:

– Estabelecer o propósito da linguagem SQL;

– Definir um sistema de gerenciamento de banco de dados relacional;

– Listar e definir termos de banco de dados;

– Relacionar as tabelas que estão no banco de dados de demonstração;

– Reconhecer e descrever como os dados são inseridos e recuperados de um banco de dados.

SQL Server Introdução a SQL

Conceitos Básicos e Termos

Page 2: SQL Apostila

2

SQL Server Introdução a SQL

A Linguagem SQL

Structured Query Language (Linguagem Estruturada de Consulta)

– Possui uma estrutura semelhante à linguagem natural (na língua inglesa);

– Não inclui nenhuma referência para explicitar caminhos de acesso;

– É uma maneira de recuperação e manipulação de dados em um banco de dados;

– Pode ser utilizada em um terminal on-line;

– Pode ser utilizada na forma de SQL embutida por um programa de aplicação;

– Possui uma ampla gama de operações de atualização;

– Utilizada para administração.

Page 3: SQL Apostila

3

SQL Server Introdução a SQL

Bancos de Dados

Definição:

Uma coleção de dados na qual existem relacionamentos entre os elementos dos dados.

Exemplo:– Distribuidora de livros:

» Informações sobre os livros

» Informações sobre os editores

» Informações sobre os autores

sales

titles

publishers authors

pubs

storesstor_idstor_namestor_addresscitystatezip

Page 4: SQL Apostila

4

SQL Server Introdução a SQL

Sistema de Gerenciamento de Bancos de Dados

Definição

Software que facilita a definição de estruturas de bancos de dados e o armazenamento e recuperação de dados dessas estruturas.

Gerenc. de Ar- mazenamento

“user”

Distribuidor

sales

titles

publishers authors

pubs

storesstor_idstor_namestor_addresscitystatezip

Page 5: SQL Apostila

5

SQL Server Introdução a SQL

Termos

Tabela (relação)– Um grupo de linhas, ou um grupo de listas de

valores: “uma relação”.

Coluna (atributo)– Análoga a um campo de um registro;

– Cada coluna de determinada linha possui um valor de dado único;

– Cada coluna é de um tipo único de dado.

Linha (tupla)– Análoga a um registro de um arquivo;

– Todas as linhas de uma tabela possuem o mesmo grupo de colunas.

Chave primária– Uma ou mais colunas com valores que são

únicos na tabela e que dessa forma podem ser utilizados para identificar as suas linhas.

Domínio– Grupo de valores válidos para uma determinada

coluna.

Page 6: SQL Apostila

6

SQL Server Introdução a SQL

Tabelas

Modelo Relacional

Em um banco de dados relacional, todos os dados estão em tabelas. Uma tabela possui dados relacionados a uma classe particular de objetos.

Tabelas são compostas de linhas e colunas.

Existe exatamente um valor de dado em cada coluna de cada linha.

Exemplo: A tabela de editores (publishers) possui informações sobre os editores.

Linhas

Nomes das colunas

Colunas

pub_name city statepub_id

1389

0736

0877

Algodata Infosystems

New Moon Books

Binnet & Hardley

Berkeley

Boston

Washington

CA

MA

DC

Page 7: SQL Apostila

7

Linhas e Colunas

Colunas

– Cada coluna possui um nome;

– Cada coluna contém dados sobre um aspecto do conteúdo da tabela;

– Cada coluna contém dados de um tipo único, como inteiros, caracteres, etc.

Linhas– Cada linha contém dados relacionados a uma

ocorrência do assunto da tabela;

– Linhas não estão em nenhuma ordem particular.

SQL Server Introdução a SQL

pub_id pub_name city state

Berkeley

Boston

Washington

CA

MA

Algodata Infosystems

New Moon Books

Binnet & Hardley

1389

0736

0877 DC

Linha

Coluna

pub_id pub_name city state

1389

0736

0877

Algodata Infosystems

New Moon Books

Binnet & Hardley

Berkeley

Boston

Washington

CA

MA

DC

Page 8: SQL Apostila

8

Acesso a Dados / Chaves Primárias

O nome da tabela, nome da coluna e a linha determinam um item de dados unicamente.

stores table

SQL Server Introdução a SQL

stor_id stor_name stor_address city state zip

7131 Doc-U-MatQualityLaundry andBooks

24-A AvrogadoWay

Rem-ulade

WA 98014

980566380 Eric theRead Books

788 Catamau-gus Ave.

Seat-tle

WA

7896 FricativeBookshop

89 Madison St.

Frem-ont

CA 90019

7067 News &Brews

577 First St. LosGatos

CA 96745

7066 Barnum’s 567 PasadenaAve.

Tustin 92789

8042 Bookbeat 679 Carson St.

Port-land

OR 89076

CA

Page 9: SQL Apostila

9

SQL Server Introdução a SQL

Acesso a Dados / Chaves Primárias (continuação)

Pode-se fazer acesso a toda linha por uma única chave primária.

Em toda linha, alguma coluna ou grupo de colunas identifica exclusivamente a linha.

pub_name city statepub_id

1389

0736

0877

Algodata Infosystems

New Moon Books

Binnet & Hardley

Berkeley

Boston

Washington

CA

MA

DC

Page 10: SQL Apostila

10

SQL Server Introdução a SQL

Pessoal de Banco de dados / Funções

Usuário de Banco de Dados – Recuperação de dados

– Atualização de dados

– Inserção de dados

– Remoção de dados

Projetista do Banco de Dados – Projeto do banco de dados

– Criação de tabelas

– Regras de negócios / integridade referencial

Programador de Aplicação de Banco de Dados– Embutir SQL no código

– Projetar e escrever formulários para interface do usuário

Administrador do Sistema de Banco de Dados– Instalação do sistema

– Cópias de segurança e restauração

– Performance e segurança

Page 11: SQL Apostila

11

SQL Server Introdução a SQL

Criando uma Tabela

O administrador ou projetista do sistema de banco de dados criará tabelas com o comando seguinte:

Create table stores

(stor_id char(4) not null,

stor_name varchar(40) not null,

stor_address varchar(40) null,

city varchar(20) null,

state char(20) null,

zip char(5) null)

go

Uma vez que a tabela esteja criada, os dados podem ser nela inseridos.

Insere os dados

insert into stores (stor_id, stor_name, stor_address, city, state, zip) values (‘7066’, ’Barnum’s’, ’567 Pasadena Ave.’, ’Tustin’, ’CA’, ’92789’)

go

Page 12: SQL Apostila

12

SQL Server Introdução a SQL

Criando uma Tabela (continuação)

insert into stores (stor_id, stor_name, stor_address, city, state, zip) values ('7067', 'News & Brews', '577 First St.', 'Los Gatos', 'CA','96745')

go

insert into stores (stor_id, stor_name, stor_address, city, state, zip) values ('8042', 'Bookbeat', '679 Carson St.', 'Portland', 'OR','89076')

go

Page 13: SQL Apostila

13

SQL Server Introdução a SQL

Recuperação de dados da tabela

Recuperando os dados

select * from stores

go

Resultado:

7066 Barnum's 567 Pasadena Ave. Tustin CA 92789

7067 News & Brews 577 First St. Los Gatos CA 96745

8042 Bookbeat 679 Carson St. Portland OR 89076

Convenção de Nomenclatura

banco_de_dados.proprietário.nm_da_tabela.nm_da_coluna

Exemplos:

pubs2.dbo.stores.stor_id

pubs2.fred.stores.stor_name

Page 14: SQL Apostila

14

O Banco de Dados pubs

pubs contém 8 tabelas de dados relacionados à operação de um negócio fictício de distribuição de livros.

titles Informações básicas de cada livro.

authors Informações sobre os autores.

titleauthorUma tabela utilizada para conectar os autores com os seus livros.

publishers Informações sobre os editores.

stores Informações sobre as lojas que vendem os livros.

sales Registros de resumo de vendas para as lojas.

roysched Uma lista apresentando o percentual de royalty referente a cada título.

discounts Uma tabela dos vários descontos disponíveis.

discounts

authors titles

sales

roysched

stores

publishers

titleauthor

SQL Server Introdução a SQL

Page 15: SQL Apostila

15

TITLEAUTHOR

au_idtitle_idau_ordroyaltyper

TITLES

title_id

titletypepub_idpriceadvanceroyaltyytd_salesnotespubdate

ROYSCHED

title_idlorangehirangeroyalty

SALES

stor_idord_numdateqtypaytermstitle_id

title_id

N 1

title_id

1 N

PUBLISHERS

pub_idpub_namecitystate

pub_id

stor_idN

1

1

N au_id

au_id

AUTHORS

au_idau_lnameau_fnamephoneaddresscitystatezipcontract

STORES

stor_idstor_namestor_addresscitystatezip

N

1

stor_id

title_id

1 N

stor_id

DISCOUNTS

discounttypestor_idlowqtyhighqtydiscount

pub_id N

1

SQL Server Introdução a SQL

Detalhes das tabelas de pubs

Page 16: SQL Apostila

16

SQL Server Introdução a SQL

Definição das Colunas

publishers - Editores que publicaram os livrosque este distribuidor possui.

pub_id Código de identificação único para um editor.

pub_name Nome do editor

city Cidade do editor

state Estado do editor

authors - Autores que escreveram um ou mais livros.

au_id Número da identidade do autor

au_lname Último sobrenome

au_fname Prenome

phone Telefone

address Endereço

city Cidade

state Estado

zip C.E.P.

contract 0=Não existe contrato para este livro

1=Existe contrato para este livro

Page 17: SQL Apostila

17

SQL Server Introdução a SQL

Definição das Colunas (continuação)

titles - Livros que estão para ser publicados ou que já foram publicados e são oferecidos por este distribuidor.

title_id Código identificador único para um título

title Nome do livro

type Tipo do livro (negócios, psicologia, etc.)

pub_id Código para o editor deste livro

price Preço da unidade

advance Adiantamento pago ao autor

royalty Royalty correspondente ao livro

ytd_sales Número de livros vendidos para as lojas

notes Comentários adicionais

pubdate Data da publicação

Page 18: SQL Apostila

18

SQL Server Introdução a SQL

Definição das Colunas (continuação)

titleauthor - Autores para cada livro e livros para cada autor.

au_id Código do autor que escreveu este livro

title_id Código do livro escrito por este autor

au_ord Ordem dos direitos deste autor (autor n.1, autor n.2)

royaltyper Percentual dos direitos autorais que este autor recebe. (Lembre-se que mais de um autor pode escrever um livro.)

roysched - Faixa de vendas para cada livro e os respectivos direitos autorais dos autores.

title_id Código do livro para o qual as faixas de direitos autorais se aplicam

lorange Limite inferior de número de livros vendidos

hirange Limite superior de número de livros vendidos

royalty Royalty para esta faixa de livros vendidos

Page 19: SQL Apostila

19

SQL Server Introdução a SQL

Definição das Colunas (continuação)

stores - Lojas que vendem livros deste distribuidor.

stor_id Código identificador único para uma loja

stor_name Nome da loja

stor_address Endereço

city Cidade

state Estado

zip C.E.P.

sales - Datas de vendas para pedidos de livros de várias lojas.

stor_id Código da loja que pediu este livro

ord_num Código identificador do pedido

date Data do pedido

qty Número de exemplares pedidos deste título

payterms Termos de pagamento

title_id Código do livro pedido

Page 20: SQL Apostila

20

discounts - Tipos de descontos disponíveis.

discounttype Três tipos de descontosstor_id Código da loja para a qual

este desconto se aplicalowqty Número mínimo de livros

para este descontohighqty Número máximo de livros

para este descontodiscount Percentual de desconto

SQL Server Introdução a SQL

Page 21: SQL Apostila

21

SQL Server Introdução a SQL

Sumário

Structured Query Language (SQL) - Linguagem bem semelhante à língua natural (na língua inglesa), que se constitui numa maneira de recuperar e manipular dados.

Banco de Dados - Uma coleção de dados na qual existem relacionamentos entre os elementos dos dados.

Sistema de Gerenciamento de Banco de Dados - Software que facilita a definição de estruturas de banco de dados e o armazenamento e recuperação de dados dessas estruturas.

Termos - Tabela, Coluna, Linha, Chave Principal, Domínio.

Funções de Banco de Dados - Usuário de banco de dados, Projetista de banco de dados, Programador de aplicação de banco de dados, Administrador do sistema de banco de dados.

Convenção de nomenclatura - banco_de_dados. proprietário.nome_da_tabela.nome_da_coluna

Page 22: SQL Apostila

22

SQL Server Introdução a SQL

Questões de Revisão:

1. O que significa SQL?

2. Qual a definição de domínio?

3. Indique duas características da linguagem SQL.

4. Qual o outro termo usado para nomear

uma tabela?

5. Que tabela contém o endereço da loja?

6. Que tabela contém o número identificador dos editores?

7. Que cabeçalho de coluna é usado para registrar a data de publicação de um livro?

8. Que tabela e coluna possuem os dados sobre contratos existentes?

9. Que tabela é usada para armazenar informações sobre o custo de um livro?

10. Existem três colunas ‘city’ no banco de dados pubs. Liste o nome completo que faz referência a estas três colunas.

Page 23: SQL Apostila

23

SQL Server Introdução a SQL

Recuperação Básica de Dados I

Nesta seção o estudante aprenderá como utilizar as declarações básicas do SQL para recuperar dados de um banco de dados. Para que isto seja feito, é necessário que a interface da linguagem SQL seja utilizada.

Objetivos:

Ao final desta seção, o estudante deverá ter capacidade de:

– Entrar no banco de dados usando isql;

– Conectar-se com o banco de dados apropriado;

– Consultar o banco de dados recuperando dados em uma coluna;

– Consultar o banco de dados recuperando dados em uma linha;

– Consultar o banco de dados usando condições para restringir os dados recuperados;

– Utilizar expressões booleanas na condição da consulta;

– Utilizar um editor para modificar o buffer do SQL.

Page 24: SQL Apostila

24

SQL Server Introdução a SQL

SQL Server: Uma Visão Geral

BCP - Bulk Copy tool

db-library

db-library

SQL ServerTM

ReportWorkbench

DataWorkbenchISQL

APT-Library

APT-SQL APTWorkbench

Utilitário SQL Interativo,Linha de comando

Cliente baseadoem interfacesgráficas parafazer acesso àsfacilidades doSQL Server

Gerador derelatórios

Entradas ou saídas deinformações em grandevolume, com base emlinha de comando e interface gráfica

Ferramentas de desenvolvimentode aplicações baseadas em formulários e dirigidasa eventos

Page 25: SQL Apostila

25

SQL Server Introdução a SQL

Entrando no SQL Interativo (ISQL)

Conectando com o banco de dados:

– Digite isql e pressione <Enter>;

– Quando a senha (password) for pedida, pressione <Enter>;

– Isto significa que você está conectado com o mesmo nome da sua máquina hospedeira, e que você não possui uma senha.

Sintaxe:

UNIX ou DOS:

isql -Unome_do_usuário -Psenha

VMS:

isql/user=nome_do_usuário/password=senha

Exemplo:

isql -Ufred -Psecret

1>

Page 26: SQL Apostila

26

SQL Server Introdução a SQL

Usando ISQL

A interface SQL– Linhas numeradas aparecem como um prompt;

– Você agora pode utilizar declarações SQL;

– Os prompts subseqüentes, gerados após pressionar <Enter>, são incrementados;

– Para começar o prompt em 1, digite reset (isto limpará o buffer do SQL);

– Para executar um comando SQL digite go sozinho numa linha.

Mais de uma declaração select pode ser executada com o comando go.

Saindo do ISQL:

Sintaxe:

{quit | exit}

Exemplo:

1> quit

ready 15:54:05

Page 27: SQL Apostila

27

SQL Server Introdução a SQL

Escolhendo um banco de dados

Para se conectar a um banco de dados:

Sintaxe:

use nome_do_banco_de_dados

Exemplo:

use pubs

go

master

pubs

model

“user”

Page 28: SQL Apostila

28

SQL Server Introdução a SQL

Recuperação Simples- Select/From

Utilizados para recuperar dados em um banco de dados.

– A sentença SELECT especifica as colunas que você deseja recuperar.

– A sentença FROM especifica a tabela ou tabelas de onde você deseja recuperar os dados.

Sintaxe Simplificada:

select lista_de_seleção

from lista_de_tabelas

Exemplo (todas as colunas):

select * /* Lista todos os dados que estão na */

from stores /* tabela stores */

Page 29: SQL Apostila

29

SQL Server Introdução a SQL

Recuperação Simples- Select/From (continuação)

Resultado:

stor_id stor_name stor_address

city state zip

--------- -------------------------------------------------------- --------------------------------

-------------- ------- ------------

7131 Doc-U-Mat: Quality Laundry and Books 24-A Avrogado Way

Remulade WA 98014

6380 Eric the Read Books 788 Catamaugus Ave.

Seattle WA 98056

7896 Fricative Bookshop 89 Madison St.

Fremont CA 90019

7067 New & Brews 577 First St.

Los Gatos CA 96745

7066 Barnum’s 567 Pasadena Ave.

Tustin CA 92789

8042 Bookbeat 678 Carson St.

Portland OR 89076

(6 rows affected)

Exemplo (uma coluna):

select stor_name /* Lista os nomes das lojas apenas da */

from stores /* tabela stores */

Page 30: SQL Apostila

30

SQL Server Introdução a SQL

Select/From (continuação)

Resultado:stor_name

-------------------------------------------------------

Doc-U-Mat: Quality Laundry and Books

Eric the Read Books

Fricative Bookshop

News & Brews

Barnum’s

Bookbeat

(6 rows affected)

Exemplo (mais de uma coluna):

select stor_name, city, state /* Lista os nomes das lojas, */

from stores /* a cidade e o estado da tabela stores */

Resultado:stor_name city

state

-------------------------------------------------------- --------------------------

Doc-U-Mat: Quality Laundry and Books RemuladeWA

Eric the Read Books SeattleWA

Fricative Bookshop FremontCA

News & Brews Los GatosCA

Barnum’s TustinCA

Bookbeat PortlandOR

(6 rows affected)

Page 31: SQL Apostila

31

SQL Server Introdução a SQL

Reordenando Colunas

A ordem dos nomes das colunas nas declara-ções select, determina a ordem das colunas no resultado.

Exemplo (saída com ordem de colunas diferente):

select city, stor_name, state /* Lista a cidade, o nome */

from stores /* da loja e o estado da tabela stores */

Resultado:

city stor_namestate

---------------- ------------------------------------------------------ -------

Remulade Doc-U-Mat:Quality Laundry and BooksWA

Seattle Eric the Read BooksWA

Fremont Fricative BookshopCA

Los Gatos News & BrewsCA

Tustin Barnum’sCA

Portland BookbeatOR

(6 rows affected)

Page 32: SQL Apostila

32

SQL Server Introdução a SQL

Eliminando Duplicatas

A chave DISTINCT elimina linhas duplicatas na saída.

Sintaxe simplificada:select [distinct] lista_de_seleção

from lista_de_tabelas

Exemplo (sem distinct):select state from stores /* Lista os estados que estão */

/* na tabela stores */

Resultado:state

-------

WAWACACACAOR(6 rows affected)

Exemplo (com distinct):select distinct state /* Lista uma ocorrência do nome do

*/from stores /* estado na tabela stores

*/

Resultado:state

-------

CAORWA(3 rows affected)

Page 33: SQL Apostila

33

SQL Server Introdução a SQL

Recuperação Qualificada- Select/From/Where

O comando WHERE determina exatamente que linhas serão recuperadas.

Sintaxe simplificada:select lista_de_seleção

from lista_de_tabelas

where condições_de_busca

Qualificações no comando Where:– Operadores de comparação (=, >, <)

– Faixas (BETWEEN e NOT BETWEEN)

– Correspondência de caracteres (LIKE e NOT LIKE)

– Valores desconhecidos (IS NULL e IS NOT NULL)

– Listas (IN e NOT IN)

– Combinações dos acima (AND, OR)

NOT pode negar qualquer expressão booleana e chaves como LIKE, NULL, BETWEEN e IN.

Page 34: SQL Apostila

34

SQL Server Introdução a SQL

Select/From/Where-Operadores de comparação

A seguir estão os operadores de comparação:

Operador Significado

= igual a > maior que < menor que >= maior que ou igual

a <= menor que ou igual

a

!= diferente

<> diferente

!> não maior que

!< não menor que

– <> é equivalente a !=

– !< é equivalente a >=

– !>é equivalente a <=

– Ao comparar datas, usa-se < para significar antes e > para depois.

– Use aspas duplas ou simples em torno dos dados do tipo char, varchar e datetime.

Ex. Where state=‘CA’

– Letras minúsculas são maiores que letras maiúsculas, letras maiúsculas são maiores que números.

Page 35: SQL Apostila

35

SQL Server Introdução a SQL

Operadores de Comparação (continuação)

Exemplo (igual):select stor_name, city, state /* Encontra as lojas */

from stores /* que estão localizadas */

where state = 'CA' /* na Califórnia */

Resultado:stor_name city state

------------------------------------------- ------------------- -------

Fricative Bookshop Fremont CA

News & Brews Los Gatos CA

Barnum's Tustin CA

Exemplo (diferente):select stor_name, city, state /* Encontra as lojas que */

from stores /* não estão localizadas */

where state != 'CA' /* na Califórnia */

Exemplo (maior que):select stor_id, stor_name /* Encontra o código de */

from stores /* identificação e o nome de */

where stor_id > '7066' /* qualquer loja cujo código */

/* é maior que 7066 */

Exemplo (menor que):select city, stor_name /* Encontra o nome das lojas que */

from stores /* estão localizadas em cidades */

where city < 'Remulade' /* que, alfabeticamente, vêm */

/* antes de Remulade */

Page 36: SQL Apostila

36

SQL Server Introdução a SQL

Select/From/Where - Faixas

BETWEEN - Chave usada para especificar uma faixa inclusiva: os valores extremos da faixa também são incluídos na busca.

Exemplo (between):select stor_id, stor_name, city, state

from stores

where stor_id between '7076' and '8000'

NOT BETWEEN - Chave que exclui os valores extremos especificados na faixa.

Exemplo (not between):select stor_id,stor_name,city,state

from stores

where stor_id not between '7067' and '8000'

Page 37: SQL Apostila

37

SQL Server Introdução a SQL

Select/From/Where-Caracteres Correspondentes

A Chave LIKE

– Usada para selecionar linhas que contenham campos que correspondem a porções especificadas de uma série de caracteres (string de caracteres).

– Utilizada apenas com dados do tipo char, varchar e datetime.

– Pode usar curingas.

– Curinga Significado

% qualquer string com nenhum ou mais caracteres

_ um único caracter

[ ] um único caracter na faixa especificada

[^] um único caracter fora da faixa especificada

– Inclua o(s) curinga(s) e a string de caracteres entre aspas simples ou duplas.

Exemplo (like):select stor_name /* Encontra as lojas cujos nomes */from stores /* começam com a letra B

maiúscula*/where stor_name like 'B%'

Exemplo (not like):select stor_name /* Encontra as lojas cujos nomes */from stores /* não começam com B

maiúsculo */where stor_name not like 'B%'

Page 38: SQL Apostila

38

SQL Server Introdução a SQL

Caracteres Correspondentes (continuação)

Exemplo(especifica número de caracteres):select stor_id, stor_name /*Encontra lojas que possuem*/

from stores /*código com quatro dígitos, dos quais */

where stor_id like '70__' /*os primeiros dois são “70” */

Exemplo(faixa de caracteres):select stor_name /*Encontra as lojas cujos nomes */

from stores /*começam com qualquer letra maiúscula*/

where stor_name like '[D-F]%' /*entre D e F, inclusive */

Exemplo (fora da faixa de caracteres especificados):select stor_name /*Encontra as lojas cujo nome

*/

from stores /*não começa com nenhuma letra */

where stor_name like '[^D-F]%' /*maiúscula entre D e F */

Existe alguma outra maneira de conseguir os mesmos resultados?

Exemplo (duas faixas):select stor_name /* Encontra as lojas cujos

nomes */

from stores /* começam com A,B,C ou de G a Z */

where stor_name like '[A-C,G-Z]%'

Page 39: SQL Apostila

39

SQL Server Introdução a SQL

Select/From/Where - Listas

A Chave IN

– Permite ao usuário selecionar valores que correspondam a qualquer um de uma lista de valores.

Exemplo (in):select stor_name, city, state /*Encontra as

lojas de*/

from stores /*Washington e da */

where state in ('CA', 'WA') /*Califórnia*/

Exemplo (not in):select stor_name, city, state /*Encontra as lojas

que não*/

from stores /*estão nem na Califórnia,*/

where state not in ('CA', 'WA')/*nem em Washington*/

Page 40: SQL Apostila

40

SQL Server Introdução a SQL

Select/From/Where - Condições de Conexão

Condições de conexão com operadores lógicos (AND/OR).

AND– Agrupa duas ou mais condições.

– Retorna resultados apenas quando todas as condições são verdadeiras.

Exemplo (and):select stor_name, city, state /*Encontra as

lojas que*/

from stores /*estão em Fremont, */

where state = 'CA’ and city ='Fremont' /*na Califórnia*/

OR– Conecta duas ou mais condições.

– Retorna resultados quando qualquer das condições é verdadeira.

– É inclusivo.

Exemplo (or):select stor_name, city, state /*Encontra as lojas que

estão*/

from stores /*na Califórnia ou na cidade */

where state = 'CA' or city = 'Portland' /* de Portland */

Page 41: SQL Apostila

41

SQL Server Introdução a SQL

Condições de Conexão (continuação)

Quando mais de um operador lógico é utilizado, a ordem em que eles são avaliados é a seguinte: not, and, or.

Parênteses podem modificar o significado de uma instrução, para forçar uma outra ordem de avaliação.

Exemplo (sem parênteses):select title_id, type, advance

from titles

where type='business' or type='psycology'

and advance > 5500

Resultado:

title_id type advance

----------- ----------------- ---------------

BU1032 business 5,000.00BU1111 business 5,000.00BU2075 business 10,125.00BU7832 business 5,000.00PS1372 psychology 7,000.00PS2106 psychology 6,000.00

(6 rows affected)

Page 42: SQL Apostila

42

SQL Server Introdução a SQL

Condições de Conexão (continuação)

Exemplo (usando parênteses com AND e OR):

select title_id, type, advance /*Encontra os títulos de livros*/

from titles /*que estão na categoria de */

where (type='business' or type='psycology')

and advance > 5500 /*negócios ou de psicologia */

/*e tiveram um adiantamento */

/*maior que $5500 */

Resultado:

title_id type advance

----------- ----------------- ---------------

BU2075 business 10,125.00

PS1372 psychology 7,000.00

PS2106 psychology 6,000.00

(3 rows affected)

Page 43: SQL Apostila

43

SQL Server Introdução a SQL

Editando o Buffer SQL

Usos:– Corrigir erros de sintaxe SQL;

– Corrigir erros tipográficos.

Sintaxe simplificada:– {vi | edit}

Exemplo:

select from

stores

vi (or edit)

/* Você está agora em um arquivo temporário */

/* Modifique ou corrija a declaração SQL */

/* Escreva o conteúdo deste arquivo */

/* Saia do vi (ou edit) */

select * from

stores

go

Page 44: SQL Apostila

44

SQL Server Introdução a SQL

Editando o Buffer SQL (continuação)

Salva a declaração SQL atual:– Declarações longas;

– Comandos executados mais de uma vez em momentos diferentes;

– Declaração existente é modificada (anteriormen-te salva).

Exemplo:

select stor_name, city, state

from stores

where state in ('CA, 'WA')

vi (or edit)

/*Você está agora num arquivo temporário*/

/*Modifique ou corrija o código SQL se você precisar*/

/*Escreva o conteúdo deste arquivo com outro nome*/

/*Saia do vi (ou edit)*/

reset

:r nome_do_arquivo

/*O buffer de comandos agora contém todas as linhas do nome_do_arquivo*/

go

Page 45: SQL Apostila

45

SQL Server Introdução a SQL

Português para SQL

Português para SQL - Palavras Chave

PORTUGUÊS SQL

entre e incluindo between

sem duplicatas distinct

igual a um dos seguintes in

similar like

listar, encontrar select

onde, que where

Português para SQL

Liste todas as informações das lojas.select *

from stores

ou

select stor_id, stor_name, stor_address, city, state, zip

from stores

Para cada lista de lojas, mostre o número identificador e o nome da loja.

select stor_name, stor_id

from stores

Page 46: SQL Apostila

46

SQL Server Introdução a SQL

Português para SQL (continuação)

Liste as cidades em que as lojas se encontram.select city

from stores

Como você traduziria o seguinte comando para o português?

select state

from stores

Liste as lojas que pediram livros.select distinct stor_id from sales

Encontre o código das lojas que pediram uma quantidade de livros superior a 20.

select distinct stor_id, qty

from sales

where qty > 20

Encontre as lojas que não estão localizadas na Califórnia.

select stor_name

from stores

where state != ‘CA’

Page 47: SQL Apostila

47

SQL Server Introdução a SQL

Português para SQL (continuação)

Encontre o endereço da loja chamada ‘News & Brews’.

select stor_name, stor_address

from stores

where stor_name = ‘News & Brews’

Encontre as lojas que têm um número de identificação entre 7067 e 8000.

select stor_id, stor_name

from stores

where stor_id between ‘7067’ and ‘8000’

Ache todas as lojas cujo nome começa com B.select stor_name

from stores

where stor_name like ‘B%’

Como você traduziria o seguinte comando para o português?

select *

from stores

where stor_name not like ‘B%’

Page 48: SQL Apostila

48

SQL Server Introdução a SQL

Sumário

isql - Entrando no banco de dados.

go - Mais de uma declaração select pode ser executada com a declaração go.

reset - Limpa o buffer SQL.

use nome_do_banco_de_dados - Para se conectar a um banco de dados.

Recuperando dados - select nomes_das_colunas from nome_da_tabela

where condições-de_busca

Chave distinct - Elimina linhas duplicatas na saída.

Sentença where - Determina exatamente que linhas serão recuperadas.

Operadores de Comparação - (=): igual a; (>): maior que; (<): menor que; (>=):maior que ou igual a; (<=): menor que ou igual a; (!=) ou (<>): diferente; (!>): não maior que; (!<): não menor que.

Page 49: SQL Apostila

49

SQL Server Introdução a SQL

between - Faixa inclusiva: valores superior e inferior da faixa são incluídos na busca.

not between - Exclui os valores superior e inferior da faixa especificada.

like - Usada para localizar dados char, varchar e datetime.

% qualquer string com zero ou mais caracteres;

_ qualquer caracter único;

[ ] qualquer caracter único numa determinada faixa;

[^] qualquer caracter único fora de determinada faixa

and / or - Condições de conexão com operadores lógicos.

in - Valores selecionados que correspondam a qualquer um de uma lista de valores.

Page 50: SQL Apostila

50

SQL Server Introdução a SQL

Lab: Recuperação Básica de Dados I

Escreva as declarações SQL que você deve usar para responder as questões abaixo. Estas questões podem ser respondidas usando o banco de dados pubs e consultando as tabelas stores e titles.

1. Conecte-se ao nível do sistema operacional. (Seu instrutor lhe fornecerá uma senha e um username.)

2. Conecte-se ao SQL Server. (Seu instrutor lhe fornecerá uma senha e um username.)

3. Você estará usando tabelas do banco de dados pubs nessa prática. Componha o seu ambiente de forma que você possa recuperar informações desse banco de dados.

4. Tenha certeza de que os dados na tabela ‘stores’ são os mesmos que o instrutor vem usando nas demonstrações.

5. Quais são os nomes de todas as lojas? (Apenas os nomes deverão ser a saída.)

Page 51: SQL Apostila

51

SQL Server Introdução a SQL

Lab: Recuperação Básica de Dados I (continuação)

6. Que lojas estão localizadas no estado de Washington?

7. Exiba todas as informações da tabela titles.

8. Liste os tipos de livros disponíveis.

9. Liste todos os títulos existentes e a data em que foram publicados.

10. Liste os livros que custam mais de $10.

11. Liste todos os tipos de livros de négocios.

12. Encontre todos os livros que falam sobre culinária (por exemplo: mod_cook e trad_cook).

13. Encontre todos os livros que têm a palavra “Computer” em seus títulos.

14. Encontre um livro de psicologia que custe mais de $20.

Page 52: SQL Apostila

52

SQL Server Introdução a SQL

Lab: Recuperação Básica de Dados I (continuação)

15. Liste os livros que têm um preço na faixa entre $10 e $20.

16. Encontre as categorias de livros que o editor número “0877” publica.

17. Que livros estão classificados nas categorias mod_cook, trad_cook e business (negócios)? (Use apenas uma declaração.)

18. Encontre os livros cujos títulos começam com letras entre A e F.

19. O que faz a seguinte declaração SQL?select title_id, type

from titles

where title_id like ‘_C%’

20. O que faz a seguinte declaração SQL?select title_id, pubdate

from titles

where pubdate > ‘12/31/86’

Page 53: SQL Apostila

53

Lab: Recuperação Básica de Dados I (continuação)

Se você tiver mais tempo...

1. Encontre o título do livro que está na cate-goria (type) psicologia, custa mais de $20 e tem a palavra ‘Computer’ no título.

2. Encontre os livros que tiveram um adianta-mento superior a $5000 e venderam menos de 4000 cópias.

3. Que categorias de livros venderam um total de 4000 a 5000 cópias?

4. Que livros venderam mais de 10000 cópias e custam menos de $10, na categoria de negócios (business) e de culinária moderna (modern cooking)?

SQL Server Introdução a SQL

Page 54: SQL Apostila

54

SQL Server Introdução a SQL

Recuperação Básica de Dados II

Nesta seção, o estudante aprenderá a reordenar os resultados de uma consulta de dados. Além de aprender a lidar com valores nulos, o estudante aprenderá a obter dados derivados através da utilização de operações aritméticas.

Objetivos:

Ao final desta seção, o estudante deverá ser capaz de:

– Renomear cabeçalhos de colunas nos dados recuperados;

– Utilizar as funções numéricas na recuperação de dados;

– Definir o significado de um valor nulo;

– Classificar a saída de dados.

Page 55: SQL Apostila

55

SQL Server Introdução a SQL

Renomeando Colunas

O usuário pode estabelecer um outro nome para ser utilizado na saída da declaração select, ao invés do nome da coluna.

Sintaxe simplificada:

select cabeçalho_da_coluna = nome_da_coluna [,...]

Exemplos:select identidade = au_id, “sobrenome” = au_lname

from authors

where state = 'CA'

select “Nº da ident.” = au_id, sobrenome = au_lname

from authors

where state = 'CA'

Cuidado: Suprimir a vírgula na lista de seleção fará com que a coluna seguinte seja tratada como o cabeçalho de uma coluna ao invés de seu nome.

Qual será a saída do seguinte comando?

select identidade = au_id, au_lname au_fnamefrom authorswhere state = 'CA'

Page 56: SQL Apostila

56

SQL Server Introdução a SQL

Strings de Caracteres em Resultados

Acrescentando strings de caracteres ao comando select:

Exemplo (string de caracteres):

select 'O nome da loja é ', stor_name

from stores

where stor_id = '7067'

Resultado:

stor_name

------------------------ --------------------------------------

O nome da loja é News & Brews

(1 row affected)

Exemplo:

select 'Vendas atuais', ytd_sales, 'para o livro', title_id

from titles

where type = 'psychology'

Page 57: SQL Apostila

57

SQL Server Introdução a SQL

Strings de Caracteres em Resultados (continuação)

Resultado: ytd_sales title_id

-------------------- ----------------- ----------------- ----------

Vendas atuais 375 para o livroPS1372

Vendas atuais 2045 para o livroPS2091

Vendas atuais 111 para o livroPS2106

Vendas atuais 4072 para o livroPS3333

Vendas atuais 3336 para o livroPS7777

(5 rows affected)

Exemplo:

select "O nome do editor #", pub_id, "é",

pub_name from publishers

Page 58: SQL Apostila

58

SQL Server Introdução a SQL

Expressões Numéricas

Operadores Aritméticos

Símbolo Operação

+ adição

- subtração

* multiplicação

/ divisão

% módulo

– Podem ser utilizados em qualquer coluna numérica;

– Usados em qualquer comando que permita uma expressão;

– Módulo não pode ser utilizado em colunas dos tipos real, float ou money.

Exemplo (adição):select advance, price, advance+price, title_id

from titles

where type = 'business'

Exemplo (subtração):select advance, price, advance-price, title_id

from titles

where type = 'business'

Page 59: SQL Apostila

59

SQL Server Introdução a SQL

Expressões Numéricas (continuação)

Exemplo (multiplicação):select title, renda = price*ytd_sales

from titles

where type = 'business'

Exemplo (multiplicação - expressões usadas na sentença where):

select title, renda = price*ytd_sales

from titles

where price*ytd_sales > $80000

Exemplo (multiplicação - condições múltiplas):select title, renda = price*ytd_sales

from titles

where price*ytd_sales > $80000

and type = 'business'

Exemplo (divisão):select title, vendas_mensais = ytd_sales/12

from titles

where type = 'business'

Exemplo (módulo - encontra os números ímpares):select total_sales, ytd_sales%2, title_id

from titles

where ytd_sales%2 = 1

Page 60: SQL Apostila

60

SQL Server Introdução a SQL

Conversão de Tipos Para Expressões Numéricas

A função CONVERT:– Converte expressões de um tipo de dados para

outro;

– Usada na lista_de_seleção e no comando where;

– Não se pode converter uma expressão char que contém caracteres não numéricos para uma inteira (int).

Sintaxe:convert (tipo_de_dado, expressão)

Exemplo (erro - tipos de dados incompatíveis):select stor_id * 10

from stores

Resultado:Msg 257, Level 16, State 1, line 1:

Implicit conversion from datatype 'char' to 'int' is not allowed.

Use the CONVERT function to run this query.

Exemplo:select convert(int,stor_id)*10

from stores

Page 61: SQL Apostila

61

SQL Server Introdução a SQL

Conversão de Tipos para Expressões Numéricas (continuação)

Resultado:

----------------

71310

63800

78960

70670

70660

80420

(6 rows affected)

Com tipo de dados money e um outro tipo dado, como float, um cifrão ($) pode ser usado opcionalmente na frente do 'outro tipo' de dado para executar a computação.

Exemplo (omitindo o $):select price * 1.10, title

from titles

where type = 'business'

Page 62: SQL Apostila

62

SQL Server Introdução a SQL

Conversão de Tipos para Expressões Numéricas (continuação)

Exemplo ($):select price * $1.10, title

from titles

where type = 'business'

Resultado:

title

-------------- -------------------------------------------------------------

21.99 The Busy Executive's Database Guide

13.15 Cooking with Computers: Surreptitious

Balanced Sheets

3.29 You Can Combat Computer Stress!

21.99 Straight Talk About Computers

(4 rows affected)

Page 63: SQL Apostila

63

SQL Server Introdução a SQL

Valores Nulos (Null Values)

Um valor nulo (null value) implica em um valor desconhecido.– Um valor nulo NÃO significa zero ou branco; não

existe um valor explicitamente designado;

– IS NULL (ou = NULL) pode ser usado para selecionar colunas contendo valores nulos.

Um valor nulo NUNCA é igual a outro valor nulo.

Algumas colunas são definidas para permitir valores nulos.

Exemplo:select title, price

from titles

where type = 'popular_comp'

and price is null

ou

select title, price

from titles

where type = 'popular_comp'

and price = null

Resultado:title price

-------------------------------------------------------- ---------------------

Net Etiquette Null

(1 row affected)

Page 64: SQL Apostila

64

SQL Server Introdução a SQL

Valores Nulos (continuação)

Exemplo:select title_id, advance

from titles

where advance is not null

Exemplo:select title_id, advance

from titles

where advance < $5000

Resultado:title_id advance

---------- -----------------------------

MC2222 0.00

PS2091 2,275.00

PS3333 2,000.00

PS7777 4,000.00

TC4203 4,000.00

(5 rows affected)

Exemplo:select title_id, advance

from titles

where advance < $5000 or advance is null

Page 65: SQL Apostila

65

SQL Server Introdução a SQL

Valores Nulos (continuação)

Resultado:title_id advance

---------- --------------------

MC2222 0.00

MC3026 NULL

PC9999 NULL

PS2091 2,275.00

PS3333 2,000.00

PS7777 4,000.00

TC4203 4,000.00

(7 rows affected)

Qualquer computação envolvendo nulos (nulls) devolve nulo.

Exemplo:select title_id, advance, price, advance/price

from titles

where type not in ('business', 'psychology', 'trad_cook')

Resultado:title_id advance price

----------- ------------ ------------ -------------------

MC2222 0.00 19.99 0.00

MC3021 15,000.00 2.99 5,016.72

MC3026 NULL NULL NULL

PC1035 7,000.00 22.95 305.01

PC8888 8,000.00 20.00 400.00

PC9999 NULL NULL NULL

Page 66: SQL Apostila

66

SQL Server Introdução a SQL

Select / Order by

O comando ORDER BY classifica os resultados da consulta (em ordem ascendente, caso nada seja especificado).– Itens especificados em uma sentença order by

não precisam aparecer na lista_de_seleção.

– Ao usar order by, nulos são listados primeiro.

Sintaxe simplificada:select [distinct] lista_de_seleção

from tabela [,...]

[where condições_de_busca]

[order by {coluna / expressão} [asc | desc] [,...]]

Exemplo:select stor_name, state

from stores

order by stor_name

Exemplo (usando número p/ identificar a coluna):select stor_name, state /* A(s) coluna(s) deve(m) ser */

from stores /* especificada(s) no select */

order by 1

Exemplo (mais de uma coluna):select stor_name, state

from stores

order by state, stor_name

Page 67: SQL Apostila

67

SQL Server Introdução a SQL

Select / Order by (continuação)

Exemplo (uma coluna ascendente e outra descendente):

select stor_name, state

from stores

order by state, store_name desc

Exemplo (ordenação por coluna derivada):select ((ytd_sales/12)*1.10), title_id /*Projeta quantos*/

from titles /*livros, em média,*/

where type = 'psychology' /*precisam ser vendi-*/

order by ((ytd_sales/12*1.10) /*dos em cada mês,*/

/*do próximo ano, */

/*com aumento de */

/* 10 % nas vendas */

Exemplo (pubdate fora da lista_de_seleção):select title, price

from titles

where pub_id = '0736'

order by pubdate

Exemplo (nulos apresentados primeiro):select title_id, type, price

from titles

where type = 'popular_comp'

order by price

Page 68: SQL Apostila

68

SQL Server Introdução a SQL

Português para SQL

Português para SQL - Palavras-Chave

PORTUGUÊS SQL

arrumar/organizar order by

Liste as lojas e classifique-as por nome.select *

from stores

order by stor_name

Que tipo de livro é “Fifty Years in Buckingham Palace Kitchen”, quanto custa e quando foi publicado?

select type, price, pubdate

from titles

where title = “Fifty Years in Buckingham Palace Kitchens”

O livro acima é um top seller?select ytd_sales, title

from titles

order by ytd_sales

Page 69: SQL Apostila

69

SQL Server Introdução a SQL

Sumário

Renomear Colunas - select título_da_coluna = nome_da_coluna [,...]

Operadores Aritméticos - (+) adição; (-) subtração; (*) multiplicação; (/) divisão; (%) módulo.

Função convert - Convert expressões de um tipo de dados para outro.

($) - Com o tipo de dados money e ‘outro tipo’ de dados, como float, o cifrão ($) pode ser usado em frente ao ‘outro tipo’ de dados para executar a computação.

Null Value (valor nulo) - Implica num valor desconhecido. Computações envolvendo nulos resultam em nulo.

is null - Usado para selecionar colunas contendo valores nulos (null values).

Sentença order by - Classifica os resultados da consulta (normalmente em ordem ascendente, se nada mais for especificado).

Page 70: SQL Apostila

70

SQL Server Introdução a SQL

Lab: Recuperação Básica de Dados II

Use o banco de dados pubs e as tabelas stores, titles e authors para responder às questões abaixo.

1. Mude o cabeçalho da coluna stor_id para CÓDIGO e o stor_name para NOME_LOJA quando for listar os dados das lojas.

2. Aproximadamente quantos livros têm que ser vendidos para pagar o adiantamento sobre cada livro?

3. Qual a renda gerada por cada título? Coloque o título RENDA para o resultado e CÓDIGO para title_id.

4. Um aumento de 15% no preço por livro está projetado para o ano que vem. Liste os preços antigos e novos usando PREÇO_ ANTIGO e PREÇO_NOVO como cabeçalhos.

5. Que títulos ainda não receberam um preço?

Page 71: SQL Apostila

71

SQL Server Introdução a SQL

6. Que editores ainda não decidiram sobre adiantamentos ou resolveram não dar um adiantamento?

7. Classifique a tabela titles por tipo (type) e cada tipo por preço (price).

8. Encontre os autores que moram na Califórnia (‘CA ‘). Liste-os em ordem alfabética por seus sobrenomes, juntamente com seus telefones.

9. Encontre os livros que têm renda total inferior a $10000. (Dica: vendas totais (ytd_sales) é em número de livros e não em valor monetário.)

Page 72: SQL Apostila

72

SQL Server Introdução a SQL

Organizando Dados e Resumindo Resultados

Nesta seção o estudante aprenderá como usar as funções agregadas de construção. O estudante verá que os dados de saída podem ser organizados e manipulados para responder questões relacionadas ao conteúdo do banco de dados. Funções serão usadas em dados agrupados e será apresentada uma outra forma para utilizar uma condição para saída de dados.

Objetivos:

Ao final desta seção, o estudante deverá ser capaz de:

– Usar as funções de agregação;

– Organizar dados em grupos (group by);

– Estabelecer condições em grupos (having).

Page 73: SQL Apostila

73

SQL Server Introdução a SQL

Funções de Agregação

– Funções de agregação, com exceção do count(*), ignoram valores nulos;

– Sum e Avg só funcionam com valores numéricos;

– Apenas uma linha é retornada (se uma sentença group by não tiver sido usada);

– Não podem ser utilizadas num comando where;

– Podem ser aplicados a todas as linhas em uma tabela ou num grupo de uma tabela.

Sintaxe simplificada:select nome_da_função_agregada ([distinct] expressão)

from nome_da_tabela

[where ...condições]

Função Valor Calculado

SUM

AVG

MIN

MAX

COUNT(*)

COUNT([DISTINCT]nome_da_coluna)

total

média dos valores

valor mínimo

valor máximo

número de linhas

número de valores únicos

Page 74: SQL Apostila

74

SQL Server Introdução a SQL

Funções de Agregação (continuação)

COUNT

Count soma o número de linhas que pertencem à condição estabelecida.

Exemplo (número de linhas selecionadas):

select count(*)

from titles

Resultado:---------------------

18

(1 row affected)

Exemplo (número de valores não nulos na coluna):select count(advance)

from titles

Resultado:----------------------

16

(1 row affected)

Page 75: SQL Apostila

75

SQL Server Introdução a SQL

MAX / MIN

Max encontra o maior valor.

Exemplo:select max(price)

from titles

Resultado:

--------------------------

22.95

(1 row affected)

Min encontra o menor valor.

Exemplo:select min(price)

from titles

Resultado:

----------------------------

2.99

(1 row affected)

Page 76: SQL Apostila

76

SQL Server Introdução a SQL

Funções de Agregação (continuação)

SUM / AVG

Sum calcula a soma total dos valores na coluna especificada.

Exemploselect sum(ytd_sales)

from titles

where type = 'psychology'

Resultado:

-----------------------

9939

(1 row affected)

Avg calcula a média dos valores na coluna especificada.

Exemplo:select avg(advance)

from titles

Resultado:

---------------------------

5,962.50

(1 row affected)

Page 77: SQL Apostila

77

SQL Server Introdução a SQL

Funções de Agregação (continuação)

Mais de uma função de agregação pode ser utilizada numa sentença de seleção (select clause).

Exemplo:select min(advance), max(advance)

from titles

Resultado:

-------------------------- ------------------------0.00

15,000.00

(1 row affected)

Page 78: SQL Apostila

78

SQL Server Introdução a SQL

Funções de Agregação (continuação)

A Chave DISTINCT– Opcional com sum, avg e count;

– Não permitida com min, max e count(*);

– Permitida com count(nome_da_coluna);

– Usado apenas com nomes de colunas, não com expressões aritméticas.

Compare:select avg(distinct price) select avg(price)

from titles from titles

where type = 'business' where type = 'business'

Resultado: Resultado:

----------------------- -----------------------11.64

13.73

Exemplo: Quantos tipos diferentes de livros nós temos?

select count(distinct type)

from titles

Page 79: SQL Apostila

79

SQL Server Introdução a SQL

Lidando com Valores Nulos - Isnull

Seleciona um valor nulo para ser considerado numa função de agregação.

isnull(expressão, valor)

Exemplo:select avg(price)

from titles

Resultado:

-----------------------

14.77

(1 row affected)

Exemplo:select avg(isnull(price,$9.98)) /*Livros que ainda não têm*/

from titles /*preço estabelecido*/

/*receberão o valor de*/

/*$9.98*/

Resultado:

-----------------------

14.23

(1 row affected)

Exemplo: Exemplo:select price*2 select isnull(price,0)*2

from titles from titles

Page 80: SQL Apostila

80

SQL Server Introdução a SQL

Português Para SQL

Liste a última data que um livro foi pedido.select max(date) from sales

Liste o preço do livro mais barato disponível.select min(price) from titles

Qual é a média dos preços dos livros que o editor '0736' publica?

select avg(price) from titles

where pub_id='0736'

Liste a quantidade total de livros que foram vendidos este ano.

select sum(ytd_sales) from titles

Liste o número total de títulos de livros.select count(title_id) from titles

Page 81: SQL Apostila

81

SQL Server Introdução a SQL

Lab: Funções de Agregação

Este exercício usa as tabelas titles e sales do banco de dados pubs. Cada questão deve ser respondida com uma declaração SQL.

1. Quantos livros estão disponíveis neste banco de dados?

2. Quantos editores publicaram livros?

3. Se o preço de todos os livros sofrer um aumento de 15% próximo ano, qual será o preço médio do custo de um livro no próximo ano em comparação a este ano?

4. Quantos livros da categoria de negócios (business) foram vendidos?

5. Suponha que qualquer adiantamento que ainda não foi decidido é de $5000. Encontre o adiantamento médio.

Page 82: SQL Apostila

82

SQL Server Introdução a SQL

Select / Group by

A sentença GROUP BY divide os dados em grupos.– Normalmente utilizada com uma função de

agregação na lista_de_seleção;

– Todos os valores nulos na coluna group by são tratados como um grupo.

Sintaxe simplificada:

select [distinct] lista_de_seleção

[from tabela [,...]}

[where condições_de_busca]

[group by [all] expressão_s/_funções_agregadas [,...]]

[order by coluna

/número_da_lista_de_seleção

/expressão [asc | desc ] ],...]]

Uso incorreto de uma função de agregação:

Exemplo (uso incorreto - todos os tipos terão o mesmo preço):

select type, avg(price)

from titles

Page 83: SQL Apostila

83

SQL Server Introdução a SQL

Select / Group by (continuação)

Exemplo (uso correto):

select type, avg(price)

from titles

group by type

Resultado:type

------------------------------ -----------------------

UNDECIDED NULL

business 13.73

mod_cook 11.49

popular_comp 21.48

psychology 13.50

trad_cook 15.96

(6 rows affected)

Page 84: SQL Apostila

84

SQL Server Introdução a SQL

Select / Group by (continuação)

Exemplo (usado com order by):

select avg(price), type

from titles

group by type

order by avg(price)

Resultado:type

------------------------------ -----------------------

UNDECIDED NULL

mod_cook 11.49

psychology 13.50

business 13.73

trad_cook 15.96

popular_comp 21.48

(6 rows affected)

Exemplo:select title_id, sum(qty) /*Quantos livros foram

vendidos*/

from sales /*de cada título?*/

group by title_id

Exemplo:select stor_id, sum(qty) /*Quantos livros foram

vendidos*/

from sales /*para cada loja?*/

group by stor_id

Page 85: SQL Apostila

85

SQL Server Introdução a SQL

Select / Group by (continuação)

Agrupamentos podem ser feitos através do nome_de_coluna ou qualquer expressão que não contenha uma função de agregação. Agrupamentos não podem ser feitos através do título_de_coluna (ou alias).

Exemplo:select 'ID#: ' + title_id, sum(qty)

from sales

group by 'ID#: ' + title_id

Nem todos os itens da lista_de_seleção precisam ser valores fixos ou um valor agregado para cada grupo.

Exemplo:select title_id, stor_id, sum(qty)

from sales

group by title_id

Exemplo (funções agregadas aninhadas):select avg(sum(qty)) /*Mostra a média da quantidade*/

from sales /*de todos os livros vendidos */

group by title_id

Page 86: SQL Apostila

86

SQL Server Introdução a SQL

Select / Group by / Where

Uma sentença WHERE elimina linhas antes do agrupamento.

– Aplica uma condição à tabela antes dos grupos serem formados;

– Não aceitará uma função de agregação.

Sintaxe simplificada:select [distinct] lista_de_seleção

[ from tabela [,...]]

[where condições_de_busca]

[group by [all] expressão_s/_funções_agregadas [,...]]

Exemplo:select title_id, sum(qty) /*Quantos dos livros

vendidos */

from sales /*tinham descontos superiores*/

where discount > 50 /*a 50%? */

group by title_id

Page 87: SQL Apostila

87

SQL Server Introdução a SQL

Select / Group by / All

O modificador all pode ser usado com um group by.– Inclui, no resultado, os grupos especificados

mais aqueles grupos que não possuem linhas que correspondam à condição where;

– O valor agregado será nulo (null) para as linhas que não correspondam à condição where.

Exemplo:select type, avg(price)

from titles

where type in ('business', 'popular_comp')

group by type

Resultado:type

----------------------- ---------------------

business 13.73

popular_comp 21.48

(2 rows affected)

Exemplo:select type, avg(price)

from titles

where type in ('business', 'popular_comp')

group by all type

Page 88: SQL Apostila

88

SQL Server Introdução a SQL

Select / Group by / All (continuação)

Resultado:

type

---------------------------------- -----------------------

UNDECIDED NULL

business13.73

mod_cook NULL

popular_comp 21.48

psychology NULL

trad_cookNULL

(6 rows affected)

Page 89: SQL Apostila

89

SQL Server Introdução a SQL

Select / Group by / Having

A sentença HAVING estabelece condições para a sentença group by.

Sintaxe simplificada:select [distinct] lista_de_seleção

[from tabela [,...]]

[where condições_de_busca]

[group by [all]expressão_s/_funções_agregadas[,...]]

[having condições_de_busca]

[order by {coluna

|número_da_lista_de_seleção

|expressão} [asc | desc] [,...]]

Exemplo:select title_id, pubdate, ytd_sales, price /*Encontra todos*/

from titles /*os livros que venderam */

where ytd_sales > 4000 /*mais de 4000 cópias e lista */

having pubdate > '06/12/85' /*aqueles que têm data de */

/* publicação > 6/12/85 */

OU

select title_id, pubdate, ytd_sales, price

from titles

where ytd_sales > 4000

and pubdate > '06/12/85'

Page 90: SQL Apostila

90

SQL Server Introdução a SQL

Select/Group by/Having (continuação)

Exemplo:select title_id, sum(qty) /*Quantos exemplares foram

*/

from sales /*vendidos dos títulos mais */

group by title_id /*vendidos (>50)?*/

having sum(qty) > 50

Exemplo:select title_id, sum(qty) /*Quais dos títulos mais

*/

from sales /*vendidos foram vendidos entre */

where date between /*os dias 13/09/85 e 22/05/87? */

“09/13/85” and “05/22/87”

group by title_id

having sum(qty) > 50

Page 91: SQL Apostila

91

SQL Server Introdução a SQL

Português para SQL

PORTUGUÊS SQL

organizar por group by

cada/todo group by

condição pós-agrupamento having

Encontre o adiantamento máximo que foi dado em cada categoria (type) de livro.

select max(advance), type from titles

group by type

Qual é a média dos preços dos livros em cada categoria?

select type, avg(price) from titles

group by type

Para cada editor publicando mais de cinco livros, encontre o preço médio de todos os seus títulos.

select pub_id, avg(price) from titles

group by pub_id

having count(*) > 5

Por que uma sentença WHERE não serviria no exemplo acima?

Page 92: SQL Apostila

92

SQL Server Introdução a SQL

Sumário

count - soma o número de linhas que pertencem à condição.

max - Encontra o valor máximo.

min - Encontra o valor mínimo.

sum - Encontra o valor total dos valores na coluna especificada.

avg - Encontra a média dos valores na coluna especificada.

isnull - Seleciona um valor nulo para ser considerado.

Sentença group by - Divide dados em grupos.

Sentença where -Elimina linhas antes de agrupar.

Modificador all - Pode ser usado com group by.

Page 93: SQL Apostila

93

SQL Server Introdução a SQL

Sumário (continuação)

Sentença having - Estabelece condições para a sentença group by.

Sintaxe - select [distinct]lista_de_seleção

[from tabela [,...]

[where condições_de_busca]

[group by [all]expressão_s/_funções_agregadas[, ...]] [havingcondições_de_busca]

Page 94: SQL Apostila

94

SQL Server Introdução a SQL

Lab: Group by

6. Qual é a média de preços de um livro:

a) by type?

b) by publisher?

7. Qual é o custo do livro mais barato e do mais caro para cada categoria de livros?

8. Quantos livros cada editor vendeu este ano?

9. Para os editores que possuem títulos com preços inferiores a $10, calcule a média dos preços de todos os seus livros.

10. Quantos livros existem em cada categoria?

Page 95: SQL Apostila

95

SQL Server Introdução a SQL

Junções

(Joins)

A operação de junção (join) é a marca registrada do modelo relacional. Nesta seção, o estudante aprenderá os conceitos de colunas relacionadas de uma tabela para outra. O estudante aprenderá como efetuar uma junção em uma ou mais tabelas.

Objetivos:

Ao final desta seção, o estudante deverá ser capaz de executar:

– Uma junção baseada numa igualdade;

– Uma junção com outras condições incluídas;

– Uma junção que une uma tabela a ela mesma (self-join);

– Uma junção que inclui linhas não corres-pondentes (outer join);

– Uma junção de mais de duas tabelas.

Page 96: SQL Apostila

96

SQL Server Introdução a SQL

Consultando Duas Tabelas

A operação de junção recupera dados de duas ou mais tabelas.

– A junção é a marca registrada do modelo relacional.

– Ela combina tabelas através da correspondência de valores de linhas em cada tabela.

Exemplo:

Liste stor_id, stor_name, title_id e qty orde-nadas pela venda de cada livro:

stor_id stor_name

7067 News & Brews

7066

8042

Barnum’s

Bookbeat

stores... title_id ...

7896

8042

8042

7131

7066

7067

7067

TC3218

stor_id qty

PS3333

TC3218

BU1032

BU7832

PS2091

PS7777

75

90

40

200

100

200

250

sales

stor_id stor_name title_id qty

706770677066

8042

8042

News & BrewsNews & BrewsBarnum’sBookbeatBookbeat

PS2091

PS7777BU7832PS3333

TC3218

200

2501009040

resultado

Page 97: SQL Apostila

97

SQL Server Introdução a SQL

Que Tabelas Utilizar

Decida que colunas você precisa ver.

Use o diagrama de esquema para encontrar as tabelas para usar.

Siga as linhas de relacionamento para encontar a junção que você precisa usar para conectar as tabelas.

Exemplo:JunçãoListe stor_name, title_id e qty pedidos para cada livro vendido.

stor_idord_numdateqtypaytermstitle_id

SALES

STORES

stor_idstor_namestor_addresscitystatezip

stor_id

stor_id

N

1

Page 98: SQL Apostila

98

SQL Server Introdução a SQL

Operação Join

TITLES

title_idtitletypepub_idpriceadvanceroyaltyytd_salesnotespubdate

PUBLISHERSpub_idpub_namecitystate

TITLES

title_idtitletypepub_idpriceadvanceroyaltyytd_salesnotespubdate

SALES

stor_idord_numdateqtypaytermstitle_id

1 title_id

title_id N

N 1

pub_id

pub_id

Page 99: SQL Apostila

99

SQL Server Introdução a SQL

Joins (Junções)

PS7777PS3333BU1111MC2222TC7777TC4023BU7832PS1372PC9999

title_id title type pub_id price advance royalty ytd_sales notes pubdate

.....

.....

.....

.....

.....

.....

.....

.....

.....

.....

.....

.....

.....

.....

.....

.....

.....

.....

pub_name city statepub_id

1389

0736

0877

Algodata Infosystems

New Moon Books

Binnet & Hardley

Berkeley

Boston

Washington

CA

MA

DC

073607361389087708770877138908771389

publishers

titles

Page 100: SQL Apostila

100

SQL Server Introdução a SQL

Operação Join

Join é uma operação multi-tabela.

– SELECT: Se o nome da coluna for ambíguo, ou seja, se mais de uma coluna nas tabelas especificadas na declaração de origem (from) possuírem o mesmo nome, o nome da coluna deve ser precedido por um nome de tabela.

– FROM: Duas ou mais tabelas listadas na declaração de origem (from) indicam ao SQL Server que uma junção é desejada.

» Tabelas podem estar localizadas no mesmo banco de dados ou em bancos de dados diferentes.

– WHERE: Colunas são comparadas; elas devem ter valores similares (valores pertencentes ao mesmo domínio). Não é necessário que o tipo de dado seja o mesmo, mas deve ser um tipo que o SQL Server converta automaticamente.

» (int, smallint, tinyint, decimal, real, float ou money)

» (char, varchar, datetime e smalldatetime)

– Valores nulos não participam da operação de junção.

– As colunas na condição de junção não precisam estar na sentença de seleção (select clause).

Sintaxe simplificada:select [tabela].nome_da_coluna, [...]

from {tabela}, {tabela}, [...]

[where condições_de_busca]

Page 101: SQL Apostila

101

SQL Server Introdução a SQL

Juntando Tabelas

select pub_name,

publishers.pub_id,

titles.title_id

from publishers, titles

where publishers.pub_id=

titles.pub_id

title_id

BU2075PS2091PS2106PS3333PS7777MC2222MC3021MC3026PS1372TC3218TC4203TC7777BU1032BU1111BU7832PC1035PC8888PC9999

title

You Can Combat...Is Anger the...Life Without...Prolonged Data...Emotinal Security...Silicon Valley...The Gourmet...The Psychology...Computer Phobic...Onions, Leaks...Fifty Years...Sushi, Anyone?...The Busy...Cooking with...Straight Talk...But It Is...Secrets of...Net Etiquette...

pub_id

073607360736073607360877087708770877087708770877138913891389138913891389

pub_id

073608771389

pub_name

New Moon BooksBinnet & HardleyAlgodata Infosystems

publishers

titles

title_id

BU2075PS2091PS2106PS3333PS7777MC2222MC3021MC3026PS1372TC3218TC4203TC7777BU1032BU1111BU7832PC1035PC8888PC9999

pub_id

073607360736073607360877087708770877087708770877138913891389138913891389

pub_name

New Moon BooksNew Moon BooksNew Moon BooksNew Moon BooksNew Moon BooksBinnet & HardleyBinnet & HardleyBinnet & HardleyBinnet & HardleyBinnet & HardleyBinnet & HardleyBinnet & HardleyAlgodata InfosystemsAlgodata InfosystemsAlgodata InfosystemsAlgodata InfosystemsAlgodata InfosystemsAlgodata Infosystems

Resultado da junção

Page 102: SQL Apostila

102

SQL Server Introdução a SQL

Junções Baseadas em Igualdade

Baseada numa igualdade entre os valores nas colunas especificadas.

Exemplo:select stores.stor_id, qty, title_id, stor_name /*Que lojas*/from sales, stores /*pediram que quantidade de*/where sales.stor_id=stores.stor_id /*cada livro*/

Resultado:stor_id qty title_id stor_name

---------- ------ ----------------------------------------------------------------------

7131 50 TC3218 Doc-U-Mat: Quality Laundry and Books7131 80 TC7777 Doc-U-Mat: Quality Laundry and Books7131 200 BU1032 Doc-U-Mat: Quality Laundry and Books7131 350 TC4203 Doc-U-Mat: Quality Laundry and Books7131 400 MC3021 Doc-U-Mat: Quality Laundry and Books7131 500 BU1111 Doc-U-Mat: Quality Laundry and Books7131 35 BU2075 Doc-U-Mat: Quality Laundry and Books7131 137 MC3021 Doc-U-Mat: Quality Laundry and Books7131 345 BU1032 Doc-U-Mat: Quality Laundry and Books6380 200 BU2075 Eric the Read Books6380 250 MC3021 Eric the Read Books6380 200 PS3333 Eric the Read Books6380 500 PS7777 Eric the Read Books6380 125 TC3218 Eric the Read Books6380 135 BU2075 Eric the Read Books6380 320 BU1032 Eric the Read Books6380 300 TC4203 Eric the Read Books6380 400 MC3021 Eric the Read Books7896 75 TC3218 Fricative Bookshop7896 75 TC7777 Fricative Bookshop7896 275 TC4203 Fricative Bookshop7896 340 BU1111 Fricative Bookshop7896 42 BU2075 Fricative Bookshop

...

8042 30 BU2075 Bookbeat8042 94 BU1032 Bookbeat8042 300 TC4203 Bookbeat8042 270 MC3021 Bookbeat8042 133 PC1035 Bookbeat

(116 rows affected)

Page 103: SQL Apostila

103

SQL Server Introduçào a SQL

Junções Baseadas em Igualdade (continuação)

Exemplo (sentença adicional: usando função agre-gada e group by):

select stor_name, sales.stor_id, sum(qty)

from sales, stores

where sales.stor_id = stores.stor_id

group by sales.stor_id, stor_name

/*quantos livros cada loja pediu*/

Resultado:

stor_name stor_id

--------------------------------------------------- -------------------

Eric the Read Books 63802430

Barnum’s 70662430

News & Brews 70672900

Doc-U-Mat:Quality Laundry and Books 71312097

Fricative Bookshop 78961182

Bookbeat 80423733

(6 rows affected)

Page 104: SQL Apostila

104

SQL Server Introdução a SQL

Junções Baseadas em Igualdade (continuação)

Exemplo (sentença adicional: ordenação de colunas derivadas):

select titles.title_id, qty, price, total_price=price*qty

from titles, sales /*Qual o total de vendas*/

where titles.title_id = sales.title_id

order by price*qty /*para cada um dos livros vendidos?*/

Resultado:

title_id qty price total_price

----------- ------ -------------------- --------------

BU2075 30 2.99 89.70

BU2075 35 2.99 104.65

BU2075 42 2.99 125.58

MC3021 69 2.99 206.31

PS2106 30 7.00 210.00

PS2106 31 7.00 217.00

PS2106 50 7.00 350.00

BU2075 135 2.99 403.65

MC3021 137 2.99 409.63

BU2075 150 2.99 448.50

PC1035 25 22.95 573.75

BU2075 200 2.99 598.00

...

(116 rows affected)

Page 105: SQL Apostila

105

SQL Server Introdução a SQL

Sinônimos (Aliases)

Função que proporciona uma forma abreviada de referenciar tabelas com uma única declaração SQL.

Sintaxe simplificada:select lista_de_seleção

from nome_da_tabela alias_1, nome_da_tabela alias_2

where alias_1.nome_da_coluna=alias_2.nome_da_coluna

Exemplo:select t.title_id /*Qual o identificador do

livro */

from titles t, titleauthor ta /*escrito pelo autor cujo código*/

where t.title_id = ta.title_id /*é 409-56-7008?*/

and au_id = '409-56-7008'

Resultado:

title_id

-----------

BU1032

(1 row affected)

Page 106: SQL Apostila

106

SQL Server Introdução a SQL

Outras Condições em Junções

Exemplo (condição adicional):

select stores.stor_id, qty, title_id, stor_name

from sales, stores /* Que lojas pediram menos */

where sales.stor_id=stores.stor_id /* que 70 exemplares */

and qty < 70 /* de um livro? */

Resultado:

stor_id qty title_id stor_name

---------- ----- --------------------------------------------------------------

7131 50 TC3218 Doc-U-Mat: Quality Laundry and Books

7131 35 BU2075 Doc-u-Mat: Quality Laundry and Books

7896 42 BU2075 Fricative Bookshop

7896 25 PC1035 Fricative Bookshop

7067 34 PC1035 News & Brews

7067 53 TC4203 News & Brews

8042 40 TC3218 Bookbeat

8042 30 PS2106 Bookbeat

8042 50 PS2106 Bookbeat

8042 31 PS2106 Bookbeat

8042 69 MC3021 Bookbeat

8042 30 BU2075 Bookbeat

(12 rows affected)

Page 107: SQL Apostila

107

SQL Server Introdução a SQL

Junções Não Baseadas em Igualdade

Operadores de comparação utilizados:> maior que

< menor que

>= maior ou igual a

<= menor ou igual a

Exemplo (Operador de comparação):

/*Que autores vivem em estados que vêm (alfabeticamente) depois do estado em que a loja 'New Moon Books' está localizada? */

select 'publisher state' = p.state, au_lname, au_fname, a.state

from publishers p, authors a

where a.state > p.state

and pub_name = 'New Moon Books'

Resultado:

publisher state au_lname au_fname state

------------------------ -------------- ------------------------

MA Greene Morningstar TN

MA Blotchet-Halls Reginald OR

MA del Castillo Innes MI

MA Panteley Sylvia MD

MA Ringer Anne UT

MA Ringer Albert UT

(6 rows affected)

Page 108: SQL Apostila

108

SQL Server Introdução a SQL

Self-Joins

Efetuando uma junção em uma única tabela.– Junta linhas de uma tabela com outras (ou com

as mesmas) linhas naquela tabela.

Mais de um par de colunas pode ser utilizado para especificar a condição de junção.

Exemplo:

select au1.au_lname,au1.au_fname, au1.city

from authors au1, authors au2 /* Que autores */

where au2.au_lname = 'Karsen' /* moram na mesma */

and au2.au_fname = 'Livia' /* cidade que Livia */

and au1.city = au2.city /* Karsen? */

Resultado:au_lname au_fname city

------------------- -------------------------------------------

Green Marjorie Oakland

Straight Dick Oakland

Stringer Dirk Oakland

MacFeather Stearns Oakland

Karsen Livia Oakland

(6 rows affected)

Page 109: SQL Apostila

109

SQL Server Introdução a SQL

au_lname

BennetGreenCarsonRingerStringerO'LearyDullWhiteMacFeatherSmithDeFranceKarsen ...Straight

au_fname

AbrahamMarjorieCherylAlbertDirkMichaelAnnJohnsonStearnsMeanderMichelLivia ...Dick

city

BerkeleyOaklandBerkeleySalt LakeOaklandSan JosePalo AltoMenio ParkOaklandLawrenceGaryOakland ...Oakland

au_lname

BennetGreenCarsonRingerStringerO'LearyDullWhiteMacFeatherSmithDeFranceKarsen ...Straight

au_fname

AbrahamMarjorieCherylAlbertDirkMichaelAnnJohnsonStearnsMeanderMichelLivia ...Dick

city

BerkeleyOaklandBerkeleySalt LakeOaklandSan JosePalo AltoMenio ParkOaklandLawrenceGaryOakland ...Oakland

au1 au2

authors

Self-Joins (continuação)

au_lname au_fname city

Bennet AbrahamBerkeley

Green MarjorieOakland

Carson CherylBerkeley

Ringer Albert Salt Lake

Stringer DirkOakland

O'Leary Michael San Jose

Dull Ann Palo Alto

White Johnson Menio Park

MacFeather StearnsOakland

Smith MeanderLawrence

DeFrance Michel Gary

Karsen LiviaOakland

... ... ...

Straight DickOakland

Page 110: SQL Apostila

110

SQL Server Introdução a SQL

Self-Joins e Not-Equal Joins

Existem autores que possuem o mesmo sobrenome?

Exemplo (self-join):select a1.au_lname, a1.au_fname

from authors a1, authors a2

where a1.au_lname = a2.au_lname

Exemplo (not-equal join):select a1.au_lname, a1.au_fname

from authors a1, authors a2

where a1.au_id != a2.au_id

Normalmente, uma junção not-equal é feita em conjunção com uma self-join.– Duas colunas são utilizadas na condição de

junção.

Exemplo (correto):select a1.au_lname, a1.au_fname

from authors a1, authors a2

where a1.au_lname = a2.au_lname

and a1.au_id != a2.au_id

Page 111: SQL Apostila

111

au_lnameKarsenGreenDullHunterLocksleRingerSmithBennetRinger

au_lnameKarsenGreenDullHunterLocksleRingerSmithBennetRinger

au_lnameKarsenGreenDullHunterLocksleRingerSmithBennetRinger

au_lnameKarsenGreenDullHunterLocksleRingerSmithBennetRinger

SQL Server Introdução a SQL

Self-Joins e Not-Equal Joins (continuação)

au_lnameKarsenGreenDullHunterLocksleRingerSmithBennetRinger

au1 au2

au_lnameKarsenGreenDullHunterLocksleRingerSmithBennetRinger

Page 112: SQL Apostila

112

SQL Server Introdução a SQL

Self-Joins e Not-Equal Joins (continuação)

Exemplo (self-join e not-equal join):select distinct t1.title, t1.price /* Que livros têm */

from titles t1, titles t2 /* o mesmo preço? */

where t1.price = t2.price

and t1.title_id != t2.title_id

order by t1.price

Resultado:

titleprice

---------------------------------------------------------------------------------------

The Gourmet Miicrowave2.99

You Cam Combat Computer Stress!2.99

Fifty Years in Buckingham Palace Kitchens11.95

Cooking with Computers:Surreptitious Balance Sheets11.95

Straight Talk About Computers19.99

Silicon Valley Gastronomic Treats19.99

The Busy Executive's Database Guide19.99

Prolonged Data Deprivation: Four Case Studies19.99

(8 rows affected)

Page 113: SQL Apostila

113

SQL Server Introdução a SQL

Exemplo (self-join e not-equal join):

select distinct t1.title_idfrom sales s1, sales s2where s1.title_id = s2.title_id /* Que livros são vendidos */and s1.stor_id != s2.stor_id /* por mais de uma loja? */

Resultado:

title_id

------------

BU1032BU1111BU2075BU7832MC3021PC1035PC8888PS2091PS3333PS7777TC3218TC4203TC7777

(13 rows affected)

Page 114: SQL Apostila

114

SQL Server Introdução a SQL

Efetuando Junções em Mais de Duas Tabelas

A declaração from (from clause) deve listar todas as tabelas envolvidas.

A declaração where (where clause) deve listar condições suficientes de junção para relacionar todas as tabelas envolvidas.

Não é necessário exibir uma coluna para cada tabela envolvida na junção.

Liste os autores de cada livro:select au_lname, au_fname, titles.title_id, title

from authors, titleauthor, titles

where authors.au_id = titleauthor.au_id

and titleauthor.title_id = titles.title_id

...

Authors

au_id

409-66-7008213-46-8915238-95-7766...

title_id ...

BU1032 BU1032 ...PC1035 ...

Titleauthor

title_id

BU1032 PC1035...

title ...

The Busy Executive's...But Is It User Friendly

...

...

Titles

au_id

409-66-7008213-46-8915238-95-7766...

au_lname

BennetGreenCarson

au_fname

AbrahamMarjorieCheryl

...

...

...

...

Page 115: SQL Apostila

115

SQL Server Introdução a SQL

Efetuando Junções em Mais de Duas Tabelas (continuação)

Quando n tabelas participam de uma operação de junção, ao menos n-1 condições de junção são necessárias para evitar o produto cartesiano.

Exemplo:select stor_name, title /* Os livros

vendidos */

from stores, sales, titles /* para cada lista de lojas */

where stores.stor_id = sales.stor_id

and sales.title_id = titles.title_id

Resultado:stor_name title--------------------------

------------------------------------------Barnum’s Sushi, Anyone?Bookbeat Life Without FearBarnum’s The Gourmet MicrowaveBookbeat The Gourmet MicrowaveNews & Brews Is Anger the Enemy?Barnum’s But Is It User Friendly?Bookbeat But Is It User Friendly?Fricative Bookshop Sushi, Anyone?Barnum’s Secrets of Silicon Valley...(65 rows affected)

SALES

stor_idord_numdateqtypaytermstitle_id

STORES

stor_idstor_namestor_addresscitystatezip

TITLEStitle_idtitletypepub_idpriceadvanceroyaltyytd_salesnotespubdate

Page 116: SQL Apostila

116

SQL Server Introdução a SQL

Outer Joins

Inclui, no resultado, além das linhas correspondentes, linhas não correspondentes.

Operadores outer join:*= inclui nos resultados todas as linhas da

primeira tabela, não apenas aquelas cujas colunas unidas correspondem.

=* inclui nos resultados todas as linhas da segunda tabela, não apenas

aquelas cujas colunas unidas correspondem.

Sintaxe simplificada:

select lista_de_seleção

from[[banco_de_dados.]proprietário]{tabela1}, [banco_de_dados.] proprietário.] {tabela2},[..]]

[where tabela1.nome_da_coluna {*= | =*} tabela2. nome_da_ coluna]

Page 117: SQL Apostila

117

SQL Server Introdução a SQL

Outer Joins (continuação)

Exemplo:(Suponha que uma nova loja foi adicionada, de forma que, sales não possui uma linha correspon-dente.)

select stor_name, sum(qty) /*Qual a quantidade total*/

from sales, stores /*de livros que cada loja*/

where sales.stor_id =* stores.stor_id /*pediu*/

group by stor_name

Resultado:stor_name

-------------------------------------------------------------------

Barnum’s2430

Bookbeat3733

Doc-U-Mat: Quality Laundry and Books 2097

Eric the Read Books2430

Fricative Bookshop1182

News & Brews2900

nome da loja nova (se incluído) NULL

(6 rows affected)

Page 118: SQL Apostila

118

SQL Server Introdução a SQL

Português para SQL

Qual é o título e o nome do editor para cada livro?

select title, pub_name

from titles, publishers

where publishers.pub_id = titles.pub_id

Quem escreveu cada livro?select title, au_lname, au_fname

from titles, titleauthor, authors

where titles.title_id = titleauthor.title_id

and titleauthor.au_id = authors.au_id

Que lojas pediram que livros?select distinct stor_name, titles.title

from stores, sales, titles

where stores.stor_id = sales.stor_id

and sales.title_id = titles.title_id

Encontre as categorias nas quais existem dois ou mais livros baratos (menos de $15) de diferentes preços. (self-join e not-equal join)

select distinct t1.type, t1.price

from titles t1, titles t2

where t1.price < $15 and t2.price < $15

and t1.type = t2.type

and t1.price != t2.price

Page 119: SQL Apostila

119

SQL Server Introdução a SQL

Sumário

Sintaxe - select [tabela].nome_da_coluna, [...]

from {tabela}, {tabela}, [..]

[where condições_de_busca]

Nomes de colunas ambíguos devem ser precedidos pelo nome da tabela.

Produto cartesiano - Todas as combinações possíveis das linhas de cada uma das tabelas.

Join - Deve estar especificado em uma sentença where.

equi-join - Baseado numa igualdade entre os valores das colunas especificadas.

aliases - Oferecem uma maneira abreviada de referenciar tabelas com uma única declaração SQL.

select lista_de_seleção

from nome_da_tabela alias1, nome_da_tabela alias2

where alias1.nome_da_coluna = alias2.nome_da_coluna

self-join - Une linhas de uma tabela para outras (ou para as mesmas) linhas naquela tabela.

Page 120: SQL Apostila

120

SQL Server Introdução a SQL

not-equal join - Normalmente utilizado em conjunto com uma self-join.

junção múltipla de tabelas - Quando n tabelas são unidas, pelo menos n-1 condições de junção são necessárias para evitar o produto cartesiano.

outer join - Inclui, além das linhas correspon-dentes, as linhas não correspondentes no resultado.

select lista_de_seleção

from [[banco_de_dados.]proprietário.]{tabela1},[banco_de_dados.]proprietário.]{tabela2},[..]]

[where tabela1.nome_da_coluna {*= | =*} tabela2.nome_da_coluna]

Page 121: SQL Apostila

121

SQL Server Introdução a SQL

Lab: Joins

As tabelas stores, sales, titles, publishers, titleauthor, discounts e authors são usadas nesse exercício. Estas tabelas podem ser encontradas no banco de dados pubs.

1. Que title_id's (códigos dos livros) foram pedidos por cada loja?

2. Qual o nome do autor que escreveu o livro com o código (title_id) MC2222?

3. Que descontos foram oferecidos à loja ‘Eric the Read Books’?

4. Que autores moram na mesma cidade que um editor?

5. Que autores moram na mesma cidade?

(Em que cidades moram mais de um autor?) (self-join)

Page 122: SQL Apostila

122

Lab: Joins (continuação)

Se você tiver mais tempo...

6. Que livros foram publicados no mesmo dia?

7. Quantos livros cada autor vendeu?

8. Liste os livros que possuem mais de um autor.

9. Um cliente telefonou para pedir um livro, eles apenas sabiam que era um livro de psicologia escrito por uma mulher chamada Ann ou Anne. Qual o nome completo da autora e o título do livro?

10. Liste todos os autores e, se existir um editor na cidade em que eles moram, liste o pub_name. (outer-join)

SQL Server Introdução a SQL

Page 123: SQL Apostila

123

SQL Server Introdução a SQL

Subconsultas e Uniões

Nesta seção, o estudante aprenderá como consultar o banco de dados usando seleções aninhadas (subconsultas).

Objetivos

Ao final desta seção, o estudante deverá ser capaz de:

– Executar uma consulta com níveis múltiplos;

– Usar uma subconsulta com operadores comparativos;

– Usar uma subconsulta para um teste de existência;

– Usar uma união para combinar resultados de consultas.

Page 124: SQL Apostila

124

SQL Server Introdução a SQL

Subconsultas - Um Exemplo Introdutório

Questão - Que títulos são publicados por New Moon Books?

Usando duas declarações select:1. Encontrar o código (pub_id) para New Moon

Books.select pub_id

from publishers

where pub_name = 'New Moon Books'

pub_id

---------

0736

2. Encontrar os títulos dos livros associados com o código do editor.

select title

from titles

where pub_id = '0736'

title

--------------------------------------------------------------------

You Can Combat Computer Stress!

Is Anger the Enemy?

Life Without Fear

Prolonged Data Deprivation: Four Case Studies

Emotional Security: A New Algorithm

Page 125: SQL Apostila

125

SQL Server Introdução a SQL

Subconsultas- Um Exemplo Introdutório (continuação)

Usando uma declaração de junção:select title

from titles, publishers

where titles.pub_id = publishers.pub_id

and publishers.pub_name = 'New Moon Books'

Utilizando uma subconsulta:select title

from titles

where pub_id =

(select pub_id

from publishers

where pub_name = 'New Moon Books')

Page 126: SQL Apostila

126

SQL Server Introdução a SQL

Escrevendo Subconsultas

Uma subconsulta é uma declaração select, usada como uma expressão, como parte de outra declaração select, update, insert ou delete.

A subconsulta (select aninhado) é resolvida e os resultados substituídos na consulta mais externa.

Se a declaração where da consulta mais externa incluir o nome de uma coluna, esta deverá ser compatível, para a junção (join), com a coluna nomeada na lista_de_seleção da subconsulta (ou seja: mesmo domínio).

Uma subconsulta não pode incluir os comandos order by e compute ou a chave into.

Page 127: SQL Apostila

127

SQL Server Introdução a SQL

Escrevendo Subconsultas (continuação)

Sintaxe simplificada:select lista_de_seleção

[from {tabela} [,...]]

[where condições_de_busca]=

(select lista-de_seleção_da_subconsulta

[from {tabela} [,...]

[where condições_de_busca]

[group by expressão_s/_funções agregadas [,...]]

[having condições_de_busca])

[group by expressão_s/_funções agregadas [,...]]

[having condições_de_busca])

[order by {{tabela}.]coluna

|número_da_lista_de_seleção

|expressão} [asc | desc] [,...]]

[compute agregador_de_linha (coluna) [,...]

[by coluna [,...]] [,...]]

Razões para usar subconsultas:

Muitas junções podem ser estabelecidas como uma subconsulta.– Às vezes é mais fácil de entender do que uma

junção que executa a mesma função.

Executa algumas tarefas que de outra forma seriam impossíveis.

Page 128: SQL Apostila

128

SQL Server Introdução a SQL

Subconsultas - Restrições

Uma lista_de_seleção da subconsulta só pode incluir um nome de coluna (com exceção daquelas que são utilizadas em conjunto com a cláusula exists), ou seja, mais de um valor de coluna não pode ser retornado.

A chave distinct não pode ser utilizada com subconsultas que incluem uma sentença group by.

As sentenças where ou having de uma declaração select, insert, update ou delete podem conter uma subconsulta.

Apenas as colunas da lista_de_seleção da declaração mais externa podem ser exibidas.

Page 129: SQL Apostila

129

SQL Server Introdução a SQL

Múltiplos Níveis de Aninhamento

Uma subconsulta pode conter uma ou mais subconsultas.– Não existe nível máximo de aninhamento.

Exemplo (dois níveis):select title /*Que livros Blochet_Halls*/

from titles /*escreveu*/

where title_id =

(select title_id

from titleauthor

where au_id =

(select au_id

from authors

where au_lname = 'Blochet_Halls' ))

Resultado:title

--------------------------------------------------------------------

Fifty Years in Buckingham Palace Kitchens

(1 row affected)

Page 130: SQL Apostila

130

SQL Server Introdução a SQL

Múltiplos Níveis de Aninhamento (continuação)

Exemplo (dois níveis):

select pub_name, pub_id /*Que editores publicam*/

from publishers /*os livros mais caros*/

where pub_id =

(select pub_id

from titles

where price =

(select max(price)

from titles))

Resultado:

pub_name pub_id

-------------------------------------------- -----------

Algodata Infosystems 1389

(1 row affected)

Page 131: SQL Apostila

131

SQL Server Introdução a SQL

Subconsultas Retornando Múltiplas Linhas

Subconsultas usadas com in ou not in, ao invés de uma igualdade, na sentença where, pode retornar 0 ou mais valores.

Sintaxe simplificada:select lista_de_seleção

[from [[banco_de_dados.proprietário.]{tabela} [,...]]

[where condições_de_busca] [not] in

(subconsulta)

Exemplo:

select distinct stor_id, title_id /*Que livros estão sendo */

from sales /*vendidos na Califórnia */

where stor_id in

(select stor_id

from stores

where states = 'CA')

Page 132: SQL Apostila

132

SQL Server Introdução a SQL

Subconsultas Retornando Múltiplas Linhas (continuação)

Resultado:stor_id title_id

----------- ----------

7066 BU20757066 BU78327066 MC30217066 PC10357066 PC88887066 PS77777066 TC42037066 TC77777067 BU10327067 BU11117067 BU20757067 BU78327067 MC30217067 PC1035...(25 rows affected)

Exemplo:

select distinct stor_name /*Que lojas vendem o livro */

from stores /*The Busy Exec's DB Guide' */

where stor_id in(select stor_idfrom saleswhere title_id in

(select title_idfrom titleswhere title = "The Busy Executive's Database

Guide"))

Page 133: SQL Apostila

133

SQL Server Introdução a SQL

Subconsultas Retornando Múltiplas Linhas (continuação)

Resultado:

stor_name

--------------------------------------------------------------

BookbeatNews & BrewsEric the Read BooksDoc-U-Mat: Quality Laundry and books(4 rows affected)

Exemplo:select distinct pub_name /* Que editores ainda */

from publishers /* não publicaram ao menos 1 */

where pub_id not in /* livro de negócios (business)? */

(select pub_id

from titles

where type = 'business')

Resultado:

pub_name

---------------------------------------

Binnet & Hardley

(1 row affected)

Se usássemos “!=“, ao invés de “not in”, no exemplo acima, o resultado seria o mesmo?

Page 134: SQL Apostila

134

SQL Server Introdução a SQL

Subconsultas com Operadores de Comparação

Se não for utilizada uma das chaves ANY ou ALL, a subconsulta deverá retornar um único valor .

Sintaxe simplificada:

select lista_de_seleção

[from {tabela} [,...]]

[where expressão { = | != | > | >= | < | <= } [any| all]]

(subconsulta)

Exemplo (maior do que):select title_id, price /* Que livros possuem preço

*/

from titles /* superior à média dos preços*/

where price > /* de todos os livros */

(select avg(price)

from titles)

Resultado:

title_id price

------------ ---------------

BU1032 19.99BU7832 19.99MC2222 19.99PC1035 22.95PC8888 20.00PS1372 21.59PS3333 19.99TC3218 20.95TC7777 14.99(9 rows affected)

Page 135: SQL Apostila

135

SQL Server Introdução a SQL

Subconsultas com Operadores de Comparação (continuação)

Exemplo (duas condições):

select distinct title, price

from titles

where type = 'business'

and price >

(select avg(price)

from titles)

Resultado:title price

------------------------------------------------------ --------

Straight Talk About Computers 19.99

The Busy Executive's Database Guide 19.99

(2 rows affected)

Page 136: SQL Apostila

136

SQL Server Introdução a SQL

Subconsultas com Operadores de Comparação (continuação)

Outro Exemplo:

select distinct title /*Que livros requerem um */

from titles /*adiantamento maior que o*/

where advance > /*maior adiantamento pago */

(select max(advance) /*pela Algodata Infosystems*/

from publishers, titles

where titles.pub_id=publishers.pub_id

and pub_name='Algodata Infosystems')

OU (usando all)

select distinct title

from titles

where advance > all

(select advance

from publishers, titles

where titles.pub_id = publishers.pub_id

and pub_name = “Algodata InfoSystems”)

Resultado:

title

------------------------------------------------------------

You Can Combat Computer Stress !

The Gourmet Microwave

(2 rows affected)

Page 137: SQL Apostila

137

Subconsultas com Operadores de Comparação (continuação)

Outro Exemplo:

select distinct title /*Que títulos obtiveram um */

from titles /*adiantamento maior que a*/

where advance > /*quantia mínima paga em */

(select min(advance) /*adiantamento pela */

from titles, publishers /*Algodata Infosystems? */

where titles.pub_id=publishers.pub_id

and pub_name='Algodata Infosystems')

OU (usando any)

select distinct title

from titles

where advance > any

(select advance

from titles, publishers

where titles.pub_id=publishers.pub_id

and pub_name='Algodata Infosystems')

SQL Server Introdução a SQL

Page 138: SQL Apostila

138

Subconsultas com Operadores de Comparação (continuação)

Resultado:

title

--------------------------------------------------------------------------------------

Sushi, Anyone?

Life Without Fear

The Gourmet Microwave

But Is It User Friendly?

Secrets of Silicon Valley

You Can Combat Computer Stress !

Computer Phobic and Non-Phobic Individuals: Behavior ...

Onions, Leeks, and Garlic: Cooking secrets of the Mediterranean

(8 rows affected)

SQL Server Introdução a SQL

Page 139: SQL Apostila

139

SQL Server Introdução a SQL

Exists

EXISTS e NOT EXISTS são usados para implementar duas operações da teoria de grupos.

– EXISTS - Interseção: todos os elementos que pertencem a ambos os grupos.

– NOT EXISTS - Diferença: os elementos que pertencem apenas ao primeiro dos dois grupos.

– A chave exists não é precedida por um nome de coluna.

– Normalmente, a lista_de_seleção da subconsulta será " * " já que a função exists retorna verdadeiro (true) ou falso (false), e não dados.

– exists (subconsulta):

True se linhas são retornadas

False se linhas não são retornadas

– not exists (subconsulta):

True se linhas não são retornadas

False se linhas são retornadas

Sintaxe simplificada:select lista_de_seleção

[from {tabela} [,...]]

[where {exists | not exists}]

(subconsulta)

Page 140: SQL Apostila

140

SQL Server Introdução a SQL

Exists (continuação)

Exemplo (interseção entre authors e publishers):

select distinct city /*Em que cidades estão */

from authors /*localizados tanto um autor*/

where exists /*quanto um editor*/

(select *

from publishers

where authors.city = publishers.city)

Resultado:

city

--------------------------

Berkeley

(1 row affected)

authors.city

publishers.city

Page 141: SQL Apostila

141

SQL Server Introdução a SQL

Exists (continuação)

Exemplo (diferença entre authors e publishers):

select distinct city /*Em que cidades mora um autor*/

from authors /*mas não mora um editor */

where not exists

(select *

from publishers

where authors.city = publishers.city)

Resultado:

city

-----------------------

Gary

Covelo

Oakland

Lawrence

SanJose

Ann Arbor

Corvallis

Nashville

...

(15 rows affected)

publishers.city

authors.city

Page 142: SQL Apostila

142

SQL Server Introdução a SQL

Português para SQL

Quais são os códigos dos livros (title_id's) que a loja Eric the Read Books pediu?

select title_id

from sales

where stor_id =

(select stor_id

from stores

where stor_name = 'Eric the Read Books')

Qual o título do livro mais caro?select title_id

from titles

where price =

(select max(price) from titles)

PORTUGUÊS SQL

encontre ao menos uma linha exists

Que lojas pediram livros de psicologia?select distinct stor_id

from sales

where exists

(select *

from titles

where sales.title_id = titles.title_id

and type = 'psychology')

Page 143: SQL Apostila

143

SQL Server Introdução a SQL

Sumário

Subconsulta - É uma declaração select, usada como uma expressão, como parte de outra declaração select, update, insert ou delete.

Resultados - Substituídos na consulta mais externa.

Subconsulta - Pode conter uma ou mais subconsultas.

any e all - Modificadores de operadores de compa-ração; apenas um valor é retornado.

exists - Interseção

not exists - Diferença

Sintaxe - select lista_de_seleção

[from {tabela} [,...]]

[where condições_de_busca]=

(select lista_de_seleção_subconsulta

[from {tabela} [,...]

[where condições_de_busca]

[group by expressão_s/_funções_agregadas [,...]]

[having condições_de-busca])

[group by expressão_s/_funções_agregadas [,...]]

[having condições_de-busca])

[order by {{tabela}.]coluna

|número_da_lista_de_seleção

|expressão} [asc | desc] [,...]]

[compute agregador_de_linha (coluna) [,...]

[by coluna [,...]] [,...]]

Page 144: SQL Apostila

144

SQL Server Introdução a SQL

Lab: Subconsultas

Use selects aninhados para responder estas questões. As tabelas sales, authors, titles, titleauthor, stores e publishers serão usadas para respondê-las. Estas tabelas estão localizadas no banco de dados pubs.

1. Que autores moram na mesma cidade da 'Algodata Infosystems'?

2. Quantos livros a loja 'Bookbeat' pediu?

3. Que editores publicaram livros de négocios (business)?

4. Que livros não foram pedidos?

5. Que autores são publicados por 'New Moon Books' ?

6. Que livros custam mais que o preço mínimo corrente?

7. Que livros os editores de Massachusetts imprimiram?

Page 145: SQL Apostila

145

SQL Server Introdução a SQL

Lab: Subconsultas (continuação)

8. Que livros foram publicados mas não foram vendidos? (use marcas de existência)

9. Que autores escreveram livros sobre culinária (cooking)?

Responda a questão abaixo com uma junção (join) e com uma consulta aninhada.

10. Que livros são publicados por ‘New Moon Books’?

junção

Aninhamento

Page 146: SQL Apostila

146

Lab: Subconsultas (continuação)

Se você tiver mais tempo...

Tente responder as questões a seguir e verifique se elas podem ser resolvidas usando uma junção (join) e uma subconsulta. (Elas podem ser respondidas por mais de um método.)

1. Qual o nome do editor que vende o livro mais caro?

2. Que livros requerem um adiantamento superior ao maior adiantamento pago pelo editor ‘Algodata Infosystems’?

3. Que autores possuem o mesmo sobrenome?

4. Que lojas não pediram nenhum livro?

SQL Server Introdução a SQL

Page 147: SQL Apostila

147

SQL Server Introdução a SQL

Uniões

Permite ao usuário combinar o resultado de mais de uma seleção.

Exemplo:select city, state from authors

union

select city, state from publishers

union

select city, state from stores

order by state, city

Descarta as linhas duplicatas (a não ser que a opção all seja utilizada)

Sintaxe GeralConsulta 1

[union [all] Consulta n]...

[sentença order by]

[sentença compute]

onde Consulta 1 é:

select lista_de_seleção

[sentença into]

[sentença from] [sentença where]

[sentença group by] [sentença having]

e Consulta n é:

select lista_de_seleção

[sentença from] [sentença where]

[sentença group by] [sentença having]

authors.city

publishers.city

stores.city

Page 148: SQL Apostila

148

SQL Server Introdução a SQL

Regras de Uniões

Qualquer número de operadores de união pode aparecer em uma Declaração SQL Transacional.

Operadores de união são avaliados da esquerda para a direita.Por exemplo,

X union all (Y union Z)

pode não ser equivalente a

(X union all Y) union Z

(use parênteses para controlar a ordem de avaliação)

Todas as listas de seleção, na declaração união, devem ter o mesmo número de expressões.

As expressões nas listas de seleção são processadas em ordem.

Expressões correspondentes nas listas de seleção devem ser do mesmo tipo de dados ou uma conversão implícita dos dados deve ser possível, ou, por fim, sua conversão explícita deve ser especificada.

Page 149: SQL Apostila

149

SQL Server Introdução a SQL

Regras de Uniões (continuação)

Os nomes das colunas no resultado são tirados da primeira consulta na declaração de união - especifique cabeçalhos de colunas apenas na primeira consulta.

Order by e compute são permitidos apenas após todas as consultas - não podem ser usados em cada consulta individualmente.

As sentenças group by e having podem aparecer apenas nas consultas individuais, não podem ser usadas para o resultado final.

A sentença into pode ser utilizada apenas na primeira consulta - para criar uma nova tabela resultante.

O operador de união não pode ser usado com a declaração create view ou com a sentença for browse.

Page 150: SQL Apostila

150

SQL Server Introdução a SQL

Lab: Uniões

As tabelas authors, stores, publishers, titles, titleauthor, discounts e sales do banco de dados pubs são usadas para este exercício.

1. Que estados aparecem no banco de dados?

2. Que livros são ou escritos ou editados na Califórnia (CA)?

Usando junção:

Usando união:

3. Que livros custam mais que o preço médio dos livros, ou têm um desconto superior ao desconto médio?

Page 151: SQL Apostila

151

SQL Server Introdução a SQL

Definição e Manipulação de Dados

Nesta seção o estudante aprenderá a criar uma tabela, inserir dados numa tabela, atualizar dados numa tabela e apagar dados de uma tabela.

Objetivos:

Ao final desta seção, o estudante deverá ser capaz de:

– Criar uma tabela a partir de uma tabela existente;

– Inserir dados em uma tabela;

– Atualizar dados em uma tabela;

– Apagar dados de uma tabela.

Page 152: SQL Apostila

152

SQL Server Introdução a SQL

Criando uma Tabela a Partir de Outra Existente

Chave INTO usada para criar uma tabela a partir de uma tabela existente:

Sintaxe:select lista_de_seleção

[into tabela

[from {tabela} [,...]]

[where condições_de_busca]

Exemplo (tabela criada, dados carregados):select *

into new_titles

from titles

Exemplo (tabela criada, dados não carregados):select *

into new_pubs

from publishers

where 1 = 2

Exemplo (carrega dados):select *

into pub_1389_titles

from titles

where pub_id = '1389'

Exemplo (eliminando colunas):select pub_name, pub_id

into short_pubs

from publishers

Page 153: SQL Apostila

153

SQL Server Introdução a SQL

Modificação de Dados - Inserindo Dados

A sentença INSERT adiciona valores de dados a uma tabela já existente.– O SQL Server verifica, no momento da entrada

do dado, se o valor inserido é do tipo correto de dado.

» Se o valor for muito longo, o SQL Server trunca-o para o comprimento especificado; nenhuma mensagem de aviso é dada.

– Algumas colunas são definidas de forma a permitirem valores nulos.

» Para inserir um valor nulo (null value), em uma coluna que permite valores nulos, especifique null ou não especifique nenhum valor.

– Todos os valores do tipo char e datetime devem ser incluídos entre aspas simples ou duplas.

» Para inserir uma string de caracteres mais longa do que uma linha, use uma barra invertida (\) antes de escrever a próxima linha.

» Para inserir aspas como um caracter, use o tipo oposto de aspas, ou seja, se o usuário deseja inserir aspas simples como um caractere, deverá incluir todos os dados a serem inseridos entre aspas duplas.

Page 154: SQL Apostila

154

SQL Server Introdução a SQL

Inserindo Dados (continuação)

Sintaxe simplificada insert [into] nome_da_tabela

[(lista_de_colunas)] values

{valores(lista_de_valores)|declaração_select}

Adicionar uma única linha:

Exemplo (linha completa):insert into new_pubs

values

('9945', 'Mysteries Galore', 'Kansas City', 'KS')

/*Acrescentando o nome de um novo editor*/

Exemplo (inserindo uma aspa simples):insert into new_pubs

values

('4444', "O'Bryan Publishing House", 'Washington', 'DC')

/*Acrescentado o nome de um novo editor*/

Qualquer coluna não incluída deve permitir nulls:

Exemplo (linha parcial):insert new_pubs (pub_id, pub_name)

values ('3333', "Jardin's Inc.")

/*Acrescentado o nome de um novo editor*/

Page 155: SQL Apostila

155

Inserindo Dados (continuação)

Se a lista de colunas for omitida, os valores devem estar na mesma ordem que os nomes das colunas na declaração CREATE TABLE.

Exemplo (criando): Exemplo (inserindo):create table new_titles insert new_titles values

(title_id char(6), ("BU2222"

title varchar(80), "More or Less!",

type char(12), "business",

pub_id char(4), "5555",

price money null, null,

advance money null, null,

royalty int null, null,

ytd_sales int null, null,

notes varchar(200) null, "ok",

pubdate datetime not null) "06/17/88")

Exemplo (inserindo dados de uma outra tabela):insert into new_pubs (pub_id, pub_name, city, state)

select pub_id, pub_name, city, state

from publishers

Exemplo (inserindo dados, usando uma subcon-sulta):

insert into new_pubs /*Insere novos editores*/

select * /*da área de Boston*/

from mass_publishers

where pub_id in

(select pub_id

from mass_publishers

where city = 'Boston')

SQL Server Introdução a SQL

Page 156: SQL Apostila

156

SQL Server Introdução a SQL

Modificação de Dados - Atualizando Dados

A sentença UPDATE modifica o valor de uma ou mais colunas numa tabela (modifica os valores dos dados em linhas existentes, coluna a coluna).– A sentença SET determina as colunas a serem

modificadas.

– A sentença FROM determina de que tabelas os dados estão sendo originados, se mais de uma tabela estiver sendo usada para determinar o valor da nova coluna.

– A sentença WHERE determina as linhas a serem modificadas.

– Não é possível atualizar múltiplas tabelas numa mesma declaração de atualização (update).

Sintaxe simplificada:update nome_da_tabela

set nome_da_coluna = {expressão | null}

[, nome_da_coluna = {expressão | null}] ...

[from nome_da_tabela, nome_da_tabela, ...]

[where condições-de_busca]

Exemplo (modifica os dados com base num valor constante):

update new_pubs /*O nome de */

set pub_name = "New Publisher's Name" /*um editor */

where pub_name = "New Moon Books" /*mudou */

Page 157: SQL Apostila

157

SQL Server Introdução a SQL

Atualizando Dados (continuação)

Exemplo (modifica dados em todas as linhas que atendem ao critério especificado):

update new_titles

set contract = 0

where pub_id = '1389'

Exemplo (altera dados em todas as linhas - sem condições):

update new_titles

set advance = 0

Exemplo (altera dados em uma tabela com base em dados de outra):

update new_titles

set contract = 0

from new_titles, publishers

where new_titles.pub_id = publishers.pub_id

and pub_name = 'New Moon Books'

Exemplo (atualização usando uma subconsulta):update new_titles /*Atualiza o total de vendas*/

set ytd_sales = /*por 'BU1032'*/

(select sum(qty)

from sales

where title_id = 'BU1032')

where title_id = 'BU1032'

Page 158: SQL Apostila

158

SQL Server Introdução a SQL

Modificação de Dados - Removendo Dados

A sentença DELETE remove dados selecio-nados de uma tabela.– A chave FROM (depois do delete) é opcional.

– A chave FROM (extensão da sintaxe) permite que dados sejam apagados de uma tabela com base em dados armazenados em outras tabelas.

– A sentença WHERE especifica as linhas que serão apagadas. Caso esta sentença seja omitida, todas as linhas serão removidas.

Sintaxe:delete [from] {nome_da_tabela}

[from {nome_da_tabela}] [,...]

[where condições_de_busca]

Exemplo (remove dados de uma tabela, com base numa constante):

delete from new_pubs

where pub_name = 'Mysteries Galore'

Exemplo:delete from new_titles /*Apaga os dados de todos

os*/

where price > $15 /*livros que custam mais de $15*/

Page 159: SQL Apostila

159

SQL Server Introdução a SQL

Removendo Dados (continuação)

Exemplo (apaga linhas com base em dados de outras tabelas):

delete new_titles

from new_titles, new_pubs

where new_titles.pub_id = new_pubs.pub_id

and pub_name = "Jardin's Inc."

Exemplo (remove linhas usando uma subconsulta):

delete from new_titles /*Apaga todos os títulos de livros*/

where title_id in /*de qualquer autor de Utah*/

(select title_id

from titleauthor

where au_id in

(select au_id

from authors

where state = 'UT'))

Page 160: SQL Apostila

160

SQL Server Introdução a SQL

Removendo Definições de Dados

DROP TABLE remove a definição de uma tabela e todos os dados do banco de dados.

Sintaxe:

drop table nome_da_tabela [, nome_da_tabela] ...

Exemplo:

drop table new_titles

Page 161: SQL Apostila

161

SQL Server Introdução a SQL

Sumário

Chave into - Cria uma tabela a partir de outra já existente.

select lista_de_seleção

[into tabela]

[from {tabela} [,..]]

[where condições_de_busca]

Sentença delete - Remove os dados selecionados de uma tabela.

delete [from] {nome_da_tabela}

[where condições_de_busca]

drop table - remove a definição de uma tabela e todos os dados do banco de dados.

drop nome_da_tabela

[,nome_da_tabela]...

Sentença insert - Acrescenta dados a uma tabela já existente.

insert [into] nome_da_tabela

[(lista_de_colunas)]

{values(lista_de_valores)|declaração_select}

Page 162: SQL Apostila

162

SQL Server Introdução a SQL

Sumário (continuação)

Sentença update - Modifica o valor de uma ou mais colunas numa tabela (muda os valores de dados de linhas existentes).

update nome_da_tabela

set nome_da_coluna = {expressão | null}

[, set nome-da_coluna = {expressão |null}

[from nome_da_tabela, nome_da_tabela, ...]

[where condições_de_busca]

Page 163: SQL Apostila

163

SQL Server Introdução a SQL

Lab: Definições de Dados

Neste exercício você criará sua própria tabela.

1. Usando select into, crie uma tabela chamada addressN (onde N é o seu número de usuário) que possui as mesmas colunas que a tabela authors. (Dica: use uma sentença where falsa).

2. Insira duas linhas de dados na tabela addressN (crie entradas de dados fictícias).

3. Insira dados na tabela addressN através da recuperação de todos os autores que moram em Palo Alto e San Jose, a partir da tabela authors. (Dica: use insert com uma declaração select)

4. Modifique um valor existente: o código postal (zip) das pessoas que moram em Palo Alto mudou para ‘94333’.

5. Apague todas as entradas que têm o nome da cidade San Jose.