Você está na página 1de 163

SQL Server

Introduo a SQL

Conceitos Bsicos e Termos


Nesta seo, o estudante ser introduzido aos conceitos bsicos de banco de dados. Termos utilizados para fazer referncias a entidades sero definidos. Uma breve explicao sobre o que um sistema gerenciador de banco de dados relacional e como os dados so inseridos e recuperados de um banco de dados tambm consta desta seo. As tabelas do banco de dados de demonstrao sero examinadas. Objetivos: Ao final desta seo, o estudante dever ter a capacidade de:

Estabelecer o propsito 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 esto no banco de dados de demonstrao; Reconhecer e descrever como os dados so inseridos e recuperados de um banco de dados.

SQL Server

Introduo a SQL

A Linguagem SQL Structured Query Language Estruturada de Consulta) (Linguagem

Possui uma estrutura semelhante linguagem


natural (na lngua inglesa); No inclui nenhuma referncia para explicitar caminhos de acesso; uma maneira de recuperao e manipulao 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 aplicao; Possui uma ampla gama de operaes de atualizao; Utilizada para administrao.

SQL Server

Introduo a SQL

Bancos de Dados Definio:

Uma coleo de dados na qual existem relacionamentos entre os elementos dos dados.
Exemplo:

Distribuidora de livros:
Informaes sobre os livros Informaes sobre os editores Informaes sobre os autores

pubs
sales stores
stor_id stor_name stor_address city state zip

titles

publishers

authors

SQL Server

Introduo a SQL

Sistema de Gerenciamento de Bancos de Dados Definio

Software que facilita a definio de estruturas de bancos de dados e o armazenamento e recuperao de dados dessas estruturas.

Gerenc. de Armazenamento

Distribuidor

pubs
sales stores
stor_id stor_name stor_address city state zip

user

titles

publishers

authors

SQL Server

Introduo a SQL

Termos Tabela (relao)

Um grupo de linhas, ou um grupo de listas de


valores: uma relao.

Coluna (atributo)

Anloga 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)

Anloga a um registro de um arquivo; Todas as linhas de uma tabela possuem o


mesmo grupo de colunas.

Chave primria

Uma ou mais colunas com valores que so


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

Domnio

Grupo de valores vlidos para uma determinada


coluna.

SQL Server

Introduo a SQL

Tabelas Modelo Relacional Em um banco de dados relacional, todos os dados esto em tabelas. Uma tabela possui dados relacionados a uma classe particular de objetos. Tabelas so compostas de linhas e colunas. Existe exatamente um valor de dado em cada coluna de cada linha. Exemplo: A tabela de editores (publishers) possui informaes sobre os editores.

Nomes das colunas

pub_id

pub_name

city

state

1389
Linhas 0736

Algodata Infosystems Berkeley


New Moon Books Binnet & Hardley Boston

CA
MA DC

0877

Washington

Colunas
6

SQL Server

Introduo a SQL

Linhas e Colunas Colunas

Cada coluna possui um nome; Cada coluna contm dados sobre um aspecto do
contedo da tabela; Cada coluna contm dados de um tipo nico, como inteiros, caracteres, etc. Coluna pub_id 1389 0736 0877 pub_name city state CA MA DC

Algodata Infosystems Berkeley New Moon Books Binnet & Hardley Boston Washington

Linhas

Cada linha contm dados relacionados a uma


ocorrncia do assunto da tabela; Linhas no esto em nenhuma ordem particular. pub_id 1389 Linha 0736 0877 pub_name city state CA MA DC
7

Algodata Infosystems Berkeley New Moon Books Binnet & Hardley

Boston
Washington

SQL Server

Introduo a SQL

Acesso a Dados / Chaves Primrias O nome da tabela, nome da coluna e a linha determinam um item de dados unicamente.
stores table
stor_id stor_name stor_address 7131 Doc-U-Mat 24-A Quality Avrogado Laundry Way and Books city state zip 98014

Rem- WA ulade

6380

Eric the Read Books


Fricative Bookshop

788 Catamau- Seatgus Ave. tle 89 Madison St.

WA

98056

7896

Frem- CA ont

90019

7067
7066 8042

News & Brews


Barnums Bookbeat

577 First St.

Los Gatos

CA
CA OR

96745
92789 89076

567 Pasadena Tustin Ave. 679 Carson St. Portland

SQL Server

Introduo a SQL

Acesso a Dados / Chaves Primrias (continuao) Pode-se fazer acesso a toda linha por uma nica chave primria. Em toda linha, alguma coluna ou grupo de colunas identifica exclusivamente a linha.

pub_id 1389 0736 0877

pub_name

city

state CA MA DC

Algodata Infosystems Berkeley New Moon Books Binnet & Hardley Boston Washington

SQL Server

Introduo a SQL

Pessoal de Banco de dados / Funes Usurio de Banco de Dados

Recuperao de dados Atualizao de dados Insero de dados Remoo de dados


Projetista do Banco de Dados

Projeto do banco de dados Criao de tabelas Regras de negcios / integridade referencial


Programador de Aplicao de Banco de Dados

Embutir SQL no cdigo Projetar e escrever formulrios para interface do


usurio

Administrador do Sistema de Banco de Dados

Instalao do sistema Cpias de segurana e restaurao Performance e segurana

10

SQL Server

Introduo 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 stor_name stor_address city state zip go

char(4) varchar(40) varchar(40) varchar(20) char(20) char(5)

not null, not null, null, null, null, null)

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, Barnums, 567 Pasadena Ave., Tustin, CA, 92789) go

11

SQL Server

Introduo a SQL

Criando uma Tabela (continuao)


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

12

SQL Server

Introduo a SQL

Recuperao de dados da tabela Recuperando os dados


select * from stores go

Resultado:
7066 7067 8042 Barnum's News & Brews Bookbeat 567 Pasadena Ave. Tustin 577 First St. Los Gatos 679 Carson St. Portland CA CA OR 92789 96745 89076

Conveno de Nomenclatura
banco_de_dados.proprietrio.nm_da_tabela.nm_da_coluna

Exemplos: pubs2.dbo.stores.stor_id pubs2.fred.stores.stor_name

13

SQL Server

Introduo a SQL

O Banco de Dados pubs


authors titleauthor publishers titles roysched discounts sales

stores

pubs contm 8 tabelas de dados relacionados operao de um negcio fictcio de distribuio de livros.
titles authors titleauthor publishers stores sales roysched discounts Informaes bsicas de cada livro. Informaes sobre os autores. Uma tabela utilizada para conectar os autores com os seus livros. Informaes sobre os editores. Informaes sobre as lojas que vendem os livros. Registros de resumo de vendas para as lojas. Uma lista apresentando o percentual de royalty referente a cada ttulo. Uma tabela dos vrios descontos disponveis.

14

SQL Server

Introduo a SQL

Detalhes das tabelas de pubs


TITLEAUTHOR au_id title_id au_ord royaltyper
N au_id
N title_id 1

TITLES title_id title type pub_id price advance royalty ytd_sales notes pubdate
pub_id N 1

title_id N

ROYSCHED title_id lorange hirange royalty

title_id 1 N 1

SALES stor_id ord_num date qty payterms title_id


N stor_id

au_id

AUTHORS au_id au_lname au_fname phone address city state zip contract
pub_id 1

1 stor_id

PUBLISHERS pub_id pub_name city state


N stor_id

STORES stor_id stor_name stor_address city state zip

DISCOUNTS discounttype stor_id lowqty highqty discount 15

SQL Server

Introduo a SQL

Definio das Colunas publishers - Editores que publicaram os livros que este distribuidor possui.
pub_id
pub_name city state

Cdigo de identificao nico para um editor. Nome do editor Cidade do editor Estado do editor

authors - Autores que escreveram um ou mais livros.


au_id au_lname au_fname phone address city state zip contract Nmero da identidade do autor ltimo sobrenome Prenome Telefone Endereo Cidade Estado C.E.P. 0=No existe contrato para este livro 1=Existe contrato para este livro

16

SQL Server

Introduo a SQL

Definio das Colunas (continuao) titles - Livros que esto para ser publicados ou que j foram publicados e so oferecidos por este distribuidor.
title_id title type pub_id price advance royalty ytd_sales notes pubdate Cdigo identificador nico para um ttulo Nome do livro Tipo do livro (negcios, psicologia, etc.) Cdigo para o editor deste livro Preo da unidade Adiantamento pago ao autor Royalty correspondente ao livro Nmero de livros vendidos para as lojas Comentrios adicionais Data da publicao

17

SQL Server

Introduo a SQL

Definio das Colunas (continuao) titleauthor - Autores para cada livro e livros para cada autor.
au_id title_id au_ord royaltyper Cdigo do autor que escreveu este livro Cdigo do livro escrito por este autor Ordem dos direitos deste autor (autor n.1, autor n.2) 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 lorange hirange royalty Cdigo do livro para o qual as faixas de direitos autorais se aplicam Limite inferior de nmero de livros vendidos Limite superior de nmero de livros vendidos Royalty para esta faixa de livros vendidos

18

SQL Server

Introduo a SQL

Definio das Colunas (continuao) stores - Lojas que vendem livros deste distribuidor.
stor_id Cdigo identificador nico para uma loja stor_name Nome da loja stor_address Endereo city Cidade state Estado zip C.E.P.

sales - Datas de vendas para pedidos de livros de vrias lojas.


stor_id ord_num date qty payterms title_id Cdigo da loja que pediu este livro Cdigo identificador do pedido Data do pedido Nmero de exemplares pedidos deste ttulo Termos de pagamento Cdigo do livro pedido

19

SQL Server

Introduo a SQL

discounts - Tipos de descontos disponveis.


discounttype stor_id Trs tipos de descontos Cdigo da loja para a qual este desconto se aplica Nmero mnimo de livros para este desconto Nmero mximo de livros para este desconto Percentual de desconto

lowqty
highqty discount

20

SQL Server

Introduo a SQL

Sumrio Structured Query Language (SQL) - Linguagem bem semelhante lngua natural (na lngua inglesa), que se constitui numa maneira de recuperar e manipular dados. Banco de Dados - Uma coleo de dados na qual existem relacionamentos entre os elementos dos dados.

Sistema de Gerenciamento de Banco de Dados Software que facilita a definio de estruturas de banco de dados e o armazenamento e recuperao de dados dessas estruturas.
Termos - Tabela, Coluna, Linha, Chave Principal, Domnio. Funes de Banco de Dados - Usurio de banco de dados, Projetista de banco de dados, Programador de aplicao de banco de dados, Administrador do sistema de banco de dados. Conveno de nomenclatura - banco_de_dados. proprietrio.nome_da_tabela.nome_da_coluna
21

SQL Server

Introduo a SQL

Questes de Reviso: 1. O que significa SQL? 2. Qual a definio de domnio? 3. Indique duas caractersticas da linguagem SQL. 4. Qual o outro termo usado para nomear uma tabela? 5. Que tabela contm o endereo da loja? 6. Que tabela contm o nmero identificador dos editores? 7. Que cabealho de coluna usado para registrar a data de publicao de um livro? 8. Que tabela e coluna possuem os dados sobre contratos existentes? 9. Que tabela usada para armazenar informaes sobre o custo de um livro? 10. Existem trs colunas city no banco de dados pubs. Liste o nome completo que faz referncia a estas trs colunas.

22

SQL Server

Introduo a SQL

Recuperao Bsica de Dados I


Nesta seo o estudante aprender como utilizar as declaraes bsicas do SQL para recuperar dados de um banco de dados. Para que isto seja feito, necessrio que a interface da linguagem SQL seja utilizada. Objetivos: Ao final desta seo, 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 condies para restringir os dados recuperados; Utilizar expresses booleanas na condio da consulta; Utilizar um editor para modificar o buffer do SQL.

23

SQL Server

Introduo a SQL

SQL Server: Uma Viso Geral


BCP - Bulk Copy tool

Entradas ou sadas de informaes em grande volume, com base em linha de comando e interface grfica Gerador de relatrios Report Workbench

db-library

ISQL

SQL ServerTM

Data Workbench Cliente baseado em interfaces grficas para fazer acesso s facilidades do SQL Server

Utilitrio SQL Interativo, Linha de comando

db-library

Ferramentas de desenvolvimento de aplicaes ba seadas em formu lrios e dirigidas a eventos APT Workbench

APT-Library

APT-SQL 24

SQL Server

Introduo 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 mquina hospedeira, e que voc no possui uma senha.

Sintaxe:
UNIX ou DOS: isql -Unome_do_usurio -Psenha VMS: isql/user=nome_do_usurio/password=senha

Exemplo:
isql -Ufred -Psecret 1>

25

SQL Server

Introduo a SQL

Usando ISQL A interface SQL

Linhas numeradas aparecem como um prompt; Voc agora pode utilizar declaraes SQL; Os prompts subseqentes, gerados aps
pressionar <Enter>, so incrementados; Para comear 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 declarao select pode ser executada com o comando go.

Saindo do ISQL:
Sintaxe: {quit | exit} Exemplo: 1> quit ready 15:54:05

26

SQL Server

Introduo 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

model

pubs

user

27

SQL Server

Introduo a SQL

Recuperao Simples- Select/From Utilizados para recuperar dados em um banco de dados.

A sentena SELECT especifica as colunas que


voc deseja recuperar.

A sentena FROM especifica a tabela ou tabelas


de onde voc deseja recuperar os dados.

Sintaxe Simplificada:
select lista_de_seleo from lista_de_tabelas

Exemplo (todas as colunas):


select * /* Lista todos os dados que esto na */
*/

from stores /* tabela stores

28

SQL Server

Introduo a SQL

Recuperao Simples- Select/From (continuao)


Resultado:
stor_id stor_name city state zip --------- -------------------------------------------------------------------------------------7131 Doc-U-Mat: Quality Laundry and Books Remulade WA 98014 6380 Eric the Read Books Seattle WA 98056 7896 Fricative Bookshop Fremont CA 90019 7067 New & Brews Los Gatos CA 96745 7066 Barnums Tustin CA 92789 8042 Bookbeat Portland OR 89076 (6 rows affected) stor_address -------------------------------24-A Avrogado Way 788 Catamaugus Ave. 89 Madison St. 577 First St. 567 Pasadena Ave. 678 Carson St.

Exemplo (uma coluna):


select stor_name /* Lista os nomes das lojas apenas da */ from stores /* tabela stores */

29

SQL Server

Introduo a SQL

Select/From (continuao)
Resultado:
stor_name ------------------------------------------------------Doc-U-Mat: Quality Laundry and Books Eric the Read Books Fricative Bookshop News & Brews Barnums 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 -------------------------------------------------------Doc-U-Mat: Quality Laundry and Books Eric the Read Books Fricative Bookshop News & Brews Barnums Bookbeat (6 rows affected) city -------------------Remulade Seattle Fremont Los Gatos Tustin Portland state -----WA WA CA CA CA OR

30

SQL Server

Introduo a SQL

Reordenando Colunas A ordem dos nomes das colunas nas declaraes select, determina a ordem das colunas no resultado. Exemplo (sada 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_name ---------------- -----------------------------------------------------Remulade Doc-U-Mat:Quality Laundry and Books Seattle Eric the Read Books Fremont Fricative Bookshop Los Gatos News & Brews Tustin Barnums Portland Bookbeat (6 rows affected) state ------WA WA CA CA CA OR

31

SQL Server

Introduo a SQL

Eliminando Duplicatas A chave DISTINCT elimina linhas duplicatas na sada. Sintaxe simplificada:
select [distinct] lista_de_seleo from lista_de_tabelas

Exemplo (sem distinct):


select state from stores /* Lista os estados que esto */ /* na tabela stores */

Resultado:
state ------WA WA CA CA CA OR (6 rows affected)

Exemplo (com distinct):


select distinct state from stores /* Lista uma ocorrncia do nome do */ /* estado na tabela stores */

Resultado:
state ------CA OR WA (3 rows affected)

32

SQL Server

Introduo a SQL

Recuperao Qualificada- Select/From/Where O comando WHERE determina exatamente que linhas sero recuperadas. Sintaxe simplificada:
select lista_de_seleo from lista_de_tabelas where condies_de_busca

Qualificaes no comando Where:

Operadores de comparao (=, >, <) Faixas (BETWEEN e NOT BETWEEN) Correspondncia de caracteres (LIKE e NOT LIKE) Valores desconhecidos (IS NULL e IS NOT NULL) Listas (IN e NOT IN) Combinaes dos acima (AND, OR)
NOT pode negar qualquer expresso booleana e chaves como LIKE, NULL, BETWEEN e IN.

33

SQL Server

Introduo a SQL

Select/From/Where-Operadores de comparao A seguir esto os operadores de comparao:


Operador = > < >= <= != <> !> !< Significado igual a maior que menor que maior que ou igual a menor que ou igual a diferente diferente no maior que no 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 minsculas so maiores que letras


maisculas, letras maisculas so maiores que nmeros.
34

SQL Server

Introduo a SQL

Operadores de Comparao (continuao) Exemplo (igual):


select stor_name, city, state /* Encontra as lojas */ from stores /* que esto localizadas */ where state = 'CA' /* na Califrnia */

Resultado:
stor_name ------------------------------------------------Fricative Bookshop News & Brews Barnum's city state ------------------Fremont CA Los Gatos CA Tustin CA

Exemplo (diferente):
select stor_name, city, state /* Encontra as lojas que */ from stores /* no esto localizadas */ where state != 'CA' /* na Califrnia */

Exemplo (maior que):


select stor_id, stor_name /* Encontra o cdigo de */ from stores /* identificao e o nome de */ where stor_id > '7066' /* qualquer loja cujo cdigo */ /* maior que 7066 */

Exemplo (menor que):


select city, stor_name /* Encontra o nome das lojas que */ from stores /* esto localizadas em cidades */ where city < 'Remulade' /* que, alfabeticamente, vm */ /* antes de Remulade */ 35

SQL Server

Introduo a SQL

Select/From/Where - Faixas BETWEEN - Chave usada para especificar uma faixa inclusiva: os valores extremos da faixa tambm so includos 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'

36

SQL Server

Introduo a SQL

Select/From/Where-Caracteres Correspondentes A Chave LIKE

Usada para selecionar linhas que contenham


campos que correspondem a pores especificadas de uma srie 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 /* comeam com a letra B maiscula*/ where stor_name like 'B%'

Exemplo (not like):


select stor_name /* Encontra as lojas cujos nomes */ from stores /* no comeam com B maisculo */ where stor_name not like 'B%' 37

SQL Server

Introduo a SQL

Caracteres Correspondentes (continuao) Exemplo(especifica nmero de caracteres):


select stor_id, stor_name /*Encontra lojas que possuem*/ from stores /*cdigo com quatro dgitos, dos quais */ where stor_id like '70__' /*os primeiros dois so 70 */

Exemplo(faixa de caracteres):
select stor_name /*Encontra as lojas cujos nomes */ from stores /*comeam com qualquer letra maiscula*/ 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 /*no comea com nenhuma letra */ where stor_name like '[^D-F]%' /*maiscula 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 /* comeam com A,B,C ou de G a Z */ where stor_name like '[A-C,G-Z]%'

38

SQL Server

Introduo a SQL

Select/From/Where - Listas A Chave IN

Permite ao usurio selecionar valores que


correspondam a qualquer um de uma lista de valores.

Exemplo (in):
select stor_name, city, state from stores where state in ('CA', 'WA') /*Encontra as lojas de*/ /*Washington e da */ /*Califrnia*/

Exemplo (not in):


select stor_name, city, state /*Encontra as lojas que no*/ from stores /*esto nem na Califrnia,*/ where state not in ('CA', 'WA')/*nem em Washington*/

39

SQL Server

Introduo a SQL

Select/From/Where - Condies de Conexo Condies de conexo com operadores lgicos (AND/OR). AND

Agrupa duas ou mais condies. Retorna resultados apenas quando todas as


condies so verdadeiras.

Exemplo (and):
select stor_name, city, state /*Encontra as lojas que*/ from stores /*esto em Fremont, */ where state = 'CA and city ='Fremont' /*na Califrnia*/

OR

Conecta duas ou mais condies. Retorna resultados quando qualquer


condies verdadeira. inclusivo.

das

Exemplo (or):
select stor_name, city, state /*Encontra as lojas que esto*/ from stores /*na Califrnia ou na cidade */ where state = 'CA' or city = 'Portland' /* de Portland */

40

SQL Server

Introduo a SQL

Condies de Conexo (continuao) Quando mais de um operador lgico utilizado, a ordem em que eles so avaliados a seguinte: not, and, or. Parnteses podem modificar o significado de uma instruo, para forar uma outra ordem de avaliao. Exemplo (sem parnteses):
select title_id, type, advance from titles where type='business' or type='psycology' and advance > 5500

Resultado:
title_id type --------------------------BU1032 business BU1111 business BU2075 business BU7832 business PS1372 psychology PS2106 psychology (6 rows affected) advance --------------5,000.00 5,000.00 10,125.00 5,000.00 7,000.00 6,000.00

41

SQL Server

Introduo a SQL

Condies de Conexo (continuao) Exemplo (usando parnteses com AND e OR):


select title_id, type, advance /*Encontra os ttulos de livros*/ from titles /*que esto na categoria de */ where (type='business' or type='psycology') and advance > 5500 /*negcios ou de psicologia */ /*e tiveram um adiantamento */ /*maior que $5500 */

Resultado:
title_id ----------BU2075 PS1372 PS2106 type advance ----------------- --------------business 10,125.00 psychology 7,000.00 psychology 6,000.00

(3 rows affected)

42

SQL Server

Introduo a SQL

Editando o Buffer SQL Usos:

Corrigir erros de sintaxe SQL; Corrigir erros tipogrficos.


Sintaxe simplificada:

{vi | edit}
Exemplo:
select from stores vi (or edit) /* Voc est agora em um arquivo temporrio */ /* Modifique ou corrija a declarao SQL */ /* Escreva o contedo deste arquivo */ /* Saia do vi (ou edit) */ select * from stores go

43

SQL Server

Introduo a SQL

Editando o Buffer SQL (continuao) Salva a declarao SQL atual:

Declaraes longas; Comandos executados mais de uma vez em


momentos diferentes; Declarao existente modificada (anteriormente salva).

Exemplo:
select stor_name, city, state from stores where state in ('CA, 'WA') vi (or edit) /*Voc est agora num arquivo temporrio*/ /*Modifique ou corrija o cdigo SQL se voc precisar*/ /*Escreva o contedo deste arquivo com outro nome*/ /*Saia do vi (ou edit)*/ reset :r nome_do_arquivo /*O buffer de comandos agora contm todas as linhas do nome_do_arquivo*/ go
44

SQL Server

Introduo a SQL

Portugus para SQL Portugus para SQL - Palavras Chave


PORTUGUS
entre e incluindo sem duplicatas igual a um dos seguintes similar listar, encontrar onde, que

SQL
between distinct in like select where

Portugus para SQL Liste todas as informaes 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 nmero identificador e o nome da loja.


select stor_name, stor_id from stores

45

SQL Server

Introduo a SQL

Portugus para SQL (continuao) Liste as cidades em que as lojas se encontram.


select city from stores

Como voc traduziria o seguinte comando para o portugus?


select state from stores

Liste as lojas que pediram livros.


select distinct stor_id from sales

Encontre o cdigo 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 no esto localizadas na Califrnia.


select stor_name from stores where state != CA

46

SQL Server

Introduo a SQL

Portugus para SQL (continuao) Encontre o endereo da loja chamada News & Brews.
select stor_name, stor_address from stores where stor_name = News & Brews

Encontre as lojas que tm um nmero de identificao entre 7067 e 8000.


select stor_id, stor_name from stores where stor_id between 7067 and 8000

Ache todas as lojas cujo nome comea com B.


select stor_name from stores where stor_name like B%

Como voc traduziria o seguinte comando para o portugus?


select * from stores where stor_name not like B%

47

SQL Server

Introduo a SQL

Sumrio isql - Entrando no banco de dados. go - Mais de uma declarao select pode ser executada com a declarao go. reset - Limpa o buffer SQL. use nome_do_banco_de_dados conectar a um banco de dados. Para se

Recuperando dados - select nomes_das_colunas


from nome_da_tabela where condies-de_busca

Chave distinct - Elimina linhas duplicatas na sada. Sentena where - Determina exatamente que linhas sero recuperadas. Operadores de Comparao - (=): igual a; (>): maior que; (<): menor que; (>=):maior que ou igual a; (<=): menor que ou igual a; (!=) ou (<>): diferente; (!>): no maior que; (!<): no menor que.
48

SQL Server

Introduo a SQL

between - Faixa inclusiva: valores superior e inferior da faixa so includos 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 - Condies de conexo com operadores lgicos.

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

49

SQL Server

Introduo a SQL

Lab: Recuperao Bsica de Dados I Escreva as declaraes SQL que voc deve usar para responder as questes abaixo. Estas questes podem ser respondidas usando o banco de dados pubs e consultando as tabelas stores e titles. 1. Conecte-se ao nvel 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 prtica. Componha o seu ambiente de forma que voc possa recuperar informaes desse banco de dados. 4. Tenha certeza de que os dados na tabela stores so os mesmos que o instrutor vem usando nas demonstraes.

5. Quais so os nomes de todas as lojas? (Apenas os nomes devero ser a sada.)


50

SQL Server

Introduo a SQL

Lab: Recuperao Bsica de Dados I (continuao) 6. Que lojas esto localizadas no estado de Washington? 7. Exiba todas as informaes da tabela titles. 8. Liste os tipos de livros disponveis. 9. Liste todos os ttulos 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 ngocios.

12. Encontre todos os livros que falam sobre culinria (por exemplo: mod_cook e trad_cook).
13. Encontre todos os livros que tm a palavra Computer em seus ttulos. 14. Encontre um livro de psicologia que custe mais de $20.
51

SQL Server

Introduo a SQL

Lab: Recuperao Bsica de Dados I (continuao) 15. Liste os livros que tm um preo na faixa entre $10 e $20. 16. Encontre as categorias de livros que o editor nmero 0877 publica. 17. Que livros esto classificados nas categorias mod_cook, trad_cook e business (negcios)? (Use apenas uma declarao.) 18. Encontre os livros cujos ttulos comeam com letras entre A e F. 19. O que faz a seguinte declarao SQL?
select title_id, type from titles where title_id like _C%

20. O que faz a seguinte declarao SQL?


select title_id, pubdate from titles where pubdate > 12/31/86

52

SQL Server

Introduo a SQL

Lab: Recuperao Bsica de Dados I (continuao) Se voc tiver mais tempo...

1. Encontre o ttulo do livro que est na categoria (type) psicologia, custa mais de $20 e tem a palavra Computer no ttulo.
2. Encontre os livros que tiveram um adiantamento superior a $5000 e venderam menos de 4000 cpias. 3. Que categorias de livros venderam um total de 4000 a 5000 cpias? 4. Que livros venderam mais de 10000 cpias e custam menos de $10, na categoria de negcios (business) e de culinria moderna (modern cooking)?

53

SQL Server

Introduo a SQL

Recuperao Bsica de Dados II


Nesta seo, o estudante aprender a reordenar os resultados de uma consulta de dados. Alm de aprender a lidar com valores nulos, o estudante aprender a obter dados derivados atravs da utilizao de operaes aritmticas.

Objetivos:
Ao final desta seo, o estudante dever ser capaz de:

Renomear cabealhos de colunas nos dados


recuperados; Utilizar as funes numricas na recuperao de dados; Definir o significado de um valor nulo; Classificar a sada de dados.

54

SQL Server

Introduo a SQL

Renomeando Colunas O usurio pode estabelecer um outro nome para ser utilizado na sada da declarao select, ao invs do nome da coluna. Sintaxe simplificada:
select cabealho_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 vrgula na lista de seleo far com que a coluna seguinte seja tratada como o cabealho de uma coluna ao invs de seu nome. Qual ser a sada do seguinte comando?
select identidade = au_id, au_lname au_fname from authors where state = 'CA' 55

SQL Server

Introduo a SQL

Strings de Caracteres em Resultados Acrescentando strings comando select: de caracteres ao

Exemplo (string de caracteres):


select 'O nome da loja ', stor_name from stores where stor_id = '7067'

Resultado: ------------------------O nome da loja (1 row affected) stor_name -----------------------------------News & Brews

Exemplo:
select 'Vendas atuais', ytd_sales, 'para o livro', title_id from titles where type = 'psychology'

56

SQL Server

Introduo a SQL

Strings de Caracteres em Resultados (continuao)


Resultado:
ytd_sales -------------------- ----------------Vendas atuais 375 Vendas atuais 2045 Vendas atuais 111 Vendas atuais 4072 Vendas atuais 3336 (5 rows affected) ----------------para o livro para o livro para o livro para o livro para o livro title_id ---------PS1372 PS2091 PS2106 PS3333 PS7777

Exemplo:
select "O nome do editor #", pub_id, "", pub_name from publishers

57

SQL Server

Introduo a SQL

Expresses Numricas Operadores Aritmticos


Smbolo
+ * / %

Operao
adio subtrao multiplicao diviso mdulo

Podem ser utilizados em qualquer coluna


numrica; Usados em qualquer comando que permita uma expresso; Mdulo no pode ser utilizado em colunas dos tipos real, float ou money.

Exemplo (adio):
select advance, price, advance+price, title_id from titles where type = 'business'

Exemplo (subtrao):
select advance, price, advance-price, title_id from titles where type = 'business' 58

SQL Server

Introduo a SQL

Expresses Numricas (continuao) Exemplo (multiplicao):


select title, renda = price*ytd_sales from titles where type = 'business'

Exemplo (multiplicao - expresses usadas na sentena where):


select title, renda = price*ytd_sales from titles where price*ytd_sales > $80000

Exemplo (multiplicao - condies mltiplas):


select title, renda = price*ytd_sales from titles where price*ytd_sales > $80000 and type = 'business'

Exemplo (diviso):
select title, vendas_mensais = ytd_sales/12 from titles where type = 'business'

Exemplo (mdulo - encontra os nmeros mpares):


select total_sales, ytd_sales%2, title_id from titles where ytd_sales%2 = 1

59

SQL Server

Introduo a SQL

Converso Numricas

de

Tipos

Para

Expresses

A funo CONVERT:

Converte expresses de um tipo de dados para



outro; Usada na lista_de_seleo e no comando where; No se pode converter uma expresso char que contm caracteres no numricos para uma inteira (int).

Sintaxe:
convert (tipo_de_dado, expresso)

Exemplo (erro - tipos de dados incompatveis):


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

60

SQL Server

Introduo a SQL

Converso de Tipos Numricas (continuao)


Resultado:
---------------71310 63800 78960 70670 70660 80420 (6 rows affected)

para

Expresses

Com tipo de dados money e um outro tipo dado, como float, um cifro ($) pode ser usado opcionalmente na frente do 'outro tipo' de dado para executar a computao. Exemplo (omitindo o $):
select price * 1.10, title from titles where type = 'business'

61

SQL Server

Introduo a SQL

Converso de Tipos Numricas (continuao) Exemplo ($):


select price * $1.10, title from titles where type = 'business'

para

Expresses

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)

62

SQL Server

Introduo a SQL

Valores Nulos (Null Values) Um valor nulo (null value) implica em um valor desconhecido.

Um valor nulo NO significa zero ou branco; no

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 so 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 -------------------------------------------------------Net Etiquette (1 row affected) price -------------------Null 63

SQL Server

Introduo a SQL

Valores Nulos (continuao) 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 ---------MC2222 PS2091 PS3333 PS7777 TC4203 advance ----------------------------0.00 2,275.00 2,000.00 4,000.00 4,000.00

(5 rows affected)

Exemplo:
select title_id, advance from titles where advance < $5000 or advance is null

64

SQL Server

Introduo a SQL

Valores Nulos (continuao)


Resultado:
title_id ---------MC2222 MC3026 PC9999 PS2091 PS3333 PS7777 TC4203 (7 rows affected) advance -------------------0.00 NULL NULL 2,275.00 2,000.00 4,000.00 4,000.00

Qualquer computao (nulls) devolve nulo. Exemplo:

envolvendo

nulos

select title_id, advance, price, advance/price from titles where type not in ('business', 'psychology', 'trad_cook')

Resultado:
title_id ----------MC2222 MC3021 MC3026 PC1035 PC8888 PC9999 advance -----------0.00 15,000.00 NULL 7,000.00 8,000.00 NULL price -----------19.99 2.99 NULL 22.95 20.00 NULL ------------------0.00 5,016.72 NULL 305.01 400.00 NULL

65

SQL Server

Introduo 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 sentena order by


no precisam aparecer na lista_de_seleo. Ao usar order by, nulos so listados primeiro.

Sintaxe simplificada:
select [distinct] lista_de_seleo from tabela [,...] [where condies_de_busca] [order by {coluna / expresso} [asc | desc] [,...]]

Exemplo:
select stor_name, state from stores order by stor_name

Exemplo (usando nmero 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 66

SQL Server

Introduo a SQL

Select / Order by (continuao) Exemplo (uma descendente): coluna ascendente e outra

select stor_name, state from stores order by state, store_name desc

Exemplo (ordenao por coluna derivada):


select ((ytd_sales/12)*1.10), title_id from titles where type = 'psychology' order by ((ytd_sales/12*1.10) /*Projeta quantos*/ /*livros, em mdia,*/ /*precisam ser vendi-*/ /*dos em cada ms,*/ /*do prximo ano, */ /*com aumento de */ /* 10 % nas vendas */

Exemplo (pubdate fora da lista_de_seleo):


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 67

SQL Server

Introduo a SQL

Portugus para SQL Portugus para SQL - Palavras-Chave


PORTUGUS arrumar/organizar SQL 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

68

SQL Server

Introduo a SQL

Sumrio Renomear Colunas - select ttulo_da_coluna = nome_da_coluna [,...] Operadores Aritmticos - (+) adio; (-) subtrao; (*) multiplicao; (/) diviso; (%) mdulo. Funo convert - Convert expresses de um tipo de dados para outro. ($) - Com o tipo de dados money e outro tipo de dados, como float, o cifro ($) pode ser usado em frente ao outro tipo de dados para executar a computao. Null Value (valor nulo) - Implica num valor desconhecido. Computaes envolvendo nulos resultam em nulo. is null - Usado para selecionar colunas contendo valores nulos (null values). Sentena order by - Classifica os resultados da consulta (normalmente em ordem ascendente, se nada mais for especificado).
69

SQL Server

Introduo a SQL

Lab: Recuperao Bsica de Dados II Use o banco de dados pubs e as tabelas stores, titles e authors para responder s questes abaixo. 1. Mude o cabealho da coluna stor_id para CDIGO e o stor_name para NOME_LOJA quando for listar os dados das lojas. 2. Aproximadamente quantos livros tm que ser vendidos para pagar o adiantamento sobre cada livro?

3. Qual a renda gerada por cada ttulo? Coloque o ttulo RENDA para o resultado e CDIGO para title_id.
4. Um aumento de 15% no preo por livro est projetado para o ano que vem. Liste os preos antigos e novos usando PREO_ ANTIGO e PREO_NOVO como cabealhos. 5. Que ttulos ainda no receberam um preo?

70

SQL Server

Introduo a SQL

6. Que editores ainda no decidiram sobre adiantamentos ou resolveram no dar um adiantamento? 7. Classifique a tabela titles por tipo (type) e cada tipo por preo (price). 8. Encontre os autores que moram na Califrnia (CA ). Liste-os em ordem alfabtica por seus sobrenomes, juntamente com seus telefones.

9. Encontre os livros que tm renda total inferior a $10000. (Dica: vendas totais (ytd_sales) em nmero de livros e no em valor monetrio.)

71

SQL Server

Introduo a SQL

Organizando Dados e Resumindo Resultados


Nesta seo o estudante aprender como usar as funes agregadas de construo. O estudante ver que os dados de sada podem ser organizados e manipulados para responder questes relacionadas ao contedo do banco de dados. Funes sero usadas em dados agrupados e ser apresentada uma outra forma para utilizar uma condio para sada de dados. Objetivos: Ao final desta seo, o estudante dever ser capaz de:

Usar as funes de agregao; Organizar dados em grupos (group by); Estabelecer condies em grupos (having).

72

SQL Server

Introduo a SQL

Funes de Agregao
Funo SUM AVG Valor Calculado total mdia dos valores

MIN
MAX COUNT(*) COUNT([DISTINCT] nome_da_coluna)

valor mnimo
valor mximo nmero de linhas nmero de valores nicos

Funes de agregao, com exceo do


count(*), ignoram valores nulos; Sum e Avg s funcionam com valores numricos; Apenas uma linha retornada (se uma sentena group by no tiver sido usada); No 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_funo_agregada ([distinct] expresso) from nome_da_tabela [where ...condies] 73

SQL Server

Introduo a SQL

Funes de Agregao (continuao) COUNT Count soma o nmero de linhas que pertencem condio estabelecida. Exemplo (nmero de linhas selecionadas): select count(*) from titles Resultado:
--------------------18 (1 row affected)

Exemplo (nmero de valores no nulos na coluna):


select count(advance) from titles

Resultado:
---------------------16 (1 row affected)

74

SQL Server

Introduo 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)

75

SQL Server

Introduo a SQL

Funes de Agregao (continuao) SUM / AVG

Sum calcula a soma total dos valores na coluna especificada.


Exemplo
select sum(ytd_sales) from titles where type = 'psychology'

Resultado:

----------------------9939 (1 row affected)

Avg calcula a mdia dos valores na coluna especificada.


Exemplo:
select avg(advance) from titles

Resultado:

--------------------------5,962.50 (1 row affected)

76

SQL Server

Introduo a SQL

Funes de Agregao (continuao) Mais de uma funo de agregao pode ser utilizada numa sentena de seleo (select clause). Exemplo:
select min(advance), max(advance) from titles Resultado: -------------------------0.00

-----------------------15,000.00

(1 row affected)

77

SQL Server

Introduo a SQL

Funes de Agregao (continuao) A Chave DISTINCT

Opcional com sum, avg e count; No permitida com min, max e count(*); Permitida com count(nome_da_coluna); Usado apenas com nomes de colunas, no com
expresses aritmticas.

Compare:
select avg(distinct price) from titles where type = 'business' select avg(price) from titles where type = 'business'

Resultado: ----------------------11.64

Resultado: ----------------------13.73

Exemplo: Quantos tipos diferentes de livros ns temos?


select count(distinct type) from titles

78

SQL Server

Introduo a SQL

Lidando com Valores Nulos - Isnull Seleciona um valor nulo para ser considerado numa funo de agregao. isnull(expresso, valor) Exemplo:
select avg(price) from titles

Resultado:

----------------------14.77 (1 row affected)

Exemplo:
select avg(isnull(price,$9.98)) /*Livros que ainda no tm*/ from titles /*preo estabelecido*/ /*recebero o valor de*/ /*$9.98*/

Resultado:

----------------------14.23 (1 row affected)

Exemplo:
select price*2 from titles

Exemplo:
select isnull(price,0)*2 from titles 79

SQL Server

Introduo a SQL

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

Liste o preo do livro mais barato disponvel.


select min(price) from titles

Qual a mdia dos preos 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 nmero total de ttulos de livros.


select count(title_id) from titles

80

SQL Server

Introduo a SQL

Lab: Funes de Agregao Este exerccio usa as tabelas titles e sales do banco de dados pubs. Cada questo deve ser respondida com uma declarao SQL. 1. Quantos livros esto disponveis neste banco de dados? 2. Quantos editores publicaram livros? 3. Se o preo de todos os livros sofrer um aumento de 15% prximo ano, qual ser o preo mdio do custo de um livro no prximo ano em comparao a este ano? 4. Quantos livros da categoria de negcios (business) foram vendidos? 5. Suponha que qualquer adiantamento que ainda no foi decidido de $5000. Encontre o adiantamento mdio.

81

SQL Server

Introduo a SQL

Select / Group by A sentena GROUP BY divide os dados em grupos.

Normalmente utilizada com uma funo de

agregao na lista_de_seleo; Todos os valores nulos na coluna group by so tratados como um grupo.

Sintaxe simplificada:

select [distinct] [from [where [group by [all] [order by

lista_de_seleo
tabela [,...]} condies_de_busca] expresso_s/_funes_agregadas [,...]] coluna /nmero_da_lista_de_seleo /expresso [asc | desc ] ],...]]

Uso incorreto de uma funo de agregao: Exemplo (uso incorreto - todos os tipos tero o mesmo preo):
select type, avg(price) from titles
82

SQL Server

Introduo a SQL

Select / Group by (continuao) Exemplo (uso correto):


select type, avg(price) from titles group by type

Resultado:
type -----------------------------UNDECIDED business mod_cook popular_comp psychology trad_cook (6 rows affected) ----------------------NULL 13.73 11.49 21.48 13.50 15.96

83

SQL Server

Introduo a SQL

Select / Group by (continuao) Exemplo (usado com order by):


select avg(price), type from titles group by type order by avg(price)

Resultado:
type -----------------------------UNDECIDED mod_cook psychology business trad_cook popular_comp (6 rows affected)

----------------------NULL 11.49 13.50 13.73 15.96 21.48

Exemplo:
select title_id, sum(qty) /*Quantos livros foram vendidos*/ from sales /*de cada ttulo?*/ group by title_id

Exemplo:
select stor_id, sum(qty) /*Quantos livros foram vendidos*/ from sales /*para cada loja?*/ group by stor_id

84

SQL Server

Introduo a SQL

Select / Group by (continuao) Agrupamentos podem ser feitos atravs do nome_de_coluna ou qualquer expresso que no contenha uma funo de agregao. Agrupamentos no podem ser feitos atravs do ttulo_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_seleo 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 (funes agregadas aninhadas):


select avg(sum(qty)) from sales group by title_id /*Mostra a mdia da quantidade*/ /*de todos os livros vendidos */

85

SQL Server

Introduo a SQL

Select / Group by / Where Uma sentena WHERE elimina linhas antes do agrupamento.

Aplica uma condio tabela antes dos grupos


serem formados; No aceitar uma funo de agregao.

Sintaxe simplificada:
select [distinct] lista_de_seleo [ from tabela [,...]] [where condies_de_busca] [group by [all] expresso_s/_funes_agregadas [,...]]

Exemplo:
select title_id, sum(qty) from sales where discount > 50 group by title_id /*Quantos dos livros vendidos */ /*tinham descontos superiores*/ /*a 50%? */

86

SQL Server

Introduo 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 no possuem linhas que correspondam condio where; O valor agregado ser nulo (null) para as linhas que no correspondam condio where.

Exemplo:
select type, avg(price) from titles where type in ('business', 'popular_comp') group by type

Resultado:
type ----------------------business popular_comp (2 rows affected) --------------------13.73 21.48

Exemplo:
select type, avg(price) from titles where type in ('business', 'popular_comp') group by all type 87

SQL Server

Introduo a SQL

Select / Group by / All (continuao)


Resultado:
type ---------------------------------UNDECIDED business mod_cook popular_comp psychology trad_cook (6 rows affected) ----------------------NULL 13.73 NULL 21.48 NULL NULL

88

SQL Server

Introduo a SQL

Select / Group by / Having A sentena HAVING estabelece condies para a sentena group by.
Sintaxe simplificada:
select [distinct] [from [where [group by [all] [having [order by lista_de_seleo tabela [,...]] condies_de_busca] expresso_s/_funes_agregadas[,...]] condies_de_busca] {coluna |nmero_da_lista_de_seleo |expresso} [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 cpias e lista */ having pubdate > '06/12/85' /*aqueles que tm data de */ /* publicao > 6/12/85 */

OU
select title_id, pubdate, ytd_sales, price from titles where ytd_sales > 4000 and pubdate > '06/12/85'

89

SQL Server

Introduo a SQL

Select/Group by/Having (continuao) Exemplo:


select title_id, sum(qty) /*Quantos exemplares foram */ from sales /*vendidos dos ttulos mais */ group by title_id /*vendidos (>50)?*/ having sum(qty) > 50

Exemplo:
select title_id, sum(qty) /*Quais dos ttulos 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

90

SQL Server

Introduo a SQL

Portugus para SQL


PORTUGUS SQL

organizar por cada/todo condio ps-agrupamento

group by group by having

Encontre o adiantamento mximo que foi dado em cada categoria (type) de livro.
select max(advance), type from titles group by type

Qual a mdia dos preos dos livros em cada categoria?


select type, avg(price) from titles group by type

Para cada editor publicando mais de cinco livros, encontre o preo mdio de todos os seus ttulos.
select pub_id, avg(price) from titles group by pub_id having count(*) > 5

Por que uma sentena WHERE no serviria no exemplo acima?


91

SQL Server

Introduo a SQL

Sumrio count - soma o nmero de linhas que pertencem condio. max - Encontra o valor mximo. min - Encontra o valor mnimo. sum - Encontra o valor total dos valores na coluna especificada. avg - Encontra a mdia dos valores na coluna especificada. isnull - Seleciona um valor nulo para ser considerado. Sentena group by - Divide dados em grupos. Sentena where -Elimina linhas antes de agrupar. Modificador all - Pode ser usado com group by.

92

SQL Server

Introduo a SQL

Sumrio (continuao) Sentena having - Estabelece condies para a sentena group by. Sintaxe select [distinct]lista_de_seleo [from tabela [,...] [where condies_de_busca] [group by [all] expresso_s/_funes_agregadas[, ...]] [having condies_de_busca]

93

SQL Server

Introduo a SQL

Lab: Group by 6. Qual a mdia de preos 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 ttulos com preos inferiores a $10, calcule a mdia dos preos de todos os seus livros.

10. Quantos livros existem em cada categoria?

94

SQL Server

Introduo a SQL

Junes (Joins)
A operao de juno (join) a marca registrada do modelo relacional. Nesta seo, o estudante aprender os conceitos de colunas relacionadas de uma tabela para outra. O estudante aprender como efetuar uma juno em uma ou mais tabelas. Objetivos: Ao final desta seo, o estudante dever ser capaz de executar:

Uma juno baseada numa igualdade; Uma juno com outras condies includas; Uma juno que une uma tabela a ela mesma
(self-join); Uma juno que inclui linhas no correspondentes (outer join); Uma juno de mais de duas tabelas.

95

SQL Server

Introduo a SQL

Consultando Duas Tabelas A operao de juno recupera dados de duas ou mais tabelas.

A juno a marca registrada do modelo


relacional. Ela combina tabelas atravs da correspondncia de valores de linhas em cada tabela.

Exemplo: Liste stor_id, stor_name, title_id e qty ordenadas pela venda de cada livro: sales
stores stor_id ... title_id qty 7896 8042 8042 7131 7066 7067 resultado stor_name 7067 TC3218 PS3333 TC3218 75 90 40 ... stor_id 7067 7066 8042 stor_name News & Brews Barnums Bookbeat

BU1032 200 BU7832 100 PS2091 200 PS7777 250 qty 200 250 100 90 40

stor_id 7067 7067 7066 8042 8042

title_id News & Brews PS2091 News & Brews PS7777 Barnums BU7832 Bookbeat PS3333 Bookbeat TC3218

96

SQL Server

Introduo 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 juno que voc precisa usar para conectar as tabelas. Exemplo: Juno Liste stor_name, title_id e qty pedidos para cada livro vendido.
SALES stor_id ord_num date qty payterms title_id N stor_id 1 stor_id

STORES
stor_id stor_name stor_address city state zip 97

SQL Server

Introduo a SQL

Operao Join

TITLES

title_id title type pub_id price advance royalty ytd_sales notes pubdate

N pub_id

PUBLISHERS pub_id pub_id pub_name 1 city state

TITLES title_id title type pub_id price advance royalty ytd_sales notes pubdate

SALES

1 title_id

title_id N

stor_id ord_num date qty payterms title_id

98

SQL Server

Introduo a SQL

Joins (Junes) titles


title_id title type pub_id price advance royalty ytd_sales notes pubdate

PS7777 ..... PS3333 ..... BU1111 ..... MC2222 ..... TC7777 ..... TC4023 ..... BU7832 ..... PS1372 ..... PC9999 .....

0736 0736 1389 0877 0877 0877 1389 0877 1389

..... ..... ..... ..... ..... ..... ..... ..... .....

publishers
pub_id 1389 0736 0877 pub_name city state CA MA DC

Algodata Infosystems Berkeley New Moon Books Binnet & Hardley Boston Washington

99

SQL Server

Introduo a SQL

Operao Join Join uma operao multi-tabela.

SELECT: Se o nome da coluna for ambguo, ou


seja, se mais de uma coluna nas tabelas especificadas na declarao de origem (from) possurem o mesmo nome, o nome da coluna deve ser precedido por um nome de tabela. FROM: Duas ou mais tabelas listadas na declarao de origem (from) indicam ao SQL Server que uma juno desejada.
Tabelas podem estar localizadas no mesmo banco de dados ou em bancos de dados diferentes.

WHERE: Colunas so comparadas; elas devem


ter valores similares (valores pertencentes ao mesmo domnio). No necessrio 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 no participam da operao de


juno. As colunas na condio de juno no precisam estar na sentena de seleo (select clause).

Sintaxe simplificada:
select [tabela].nome_da_coluna, [...] from {tabela}, {tabela}, [...] [where condies_de_busca] 100

SQL Server

Introduo a SQL

Juntando Tabelas
select pub_name, publishers.pub_id, titles.title_id from publishers, titles where publishers.pub_id= titles.pub_id

titles
title_id BU2075 PS2091 PS2106 PS3333 PS7777 MC2222 MC3021 MC3026 PS1372 TC3218 TC4203 TC7777 BU1032 BU1111 BU7832 PC1035 PC8888 PC9999 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 0736 0736 0736 0736 0736 0877 0877 0877 0877 0877 0877 0877 1389 1389 1389 1389 1389 1389

publishers
pub_id 0736 0877 1389 pub_name New Moon Books Binnet & Hardley Algodata Infosystems

Resultado da juno
pub_name New Moon Books New Moon Books New Moon Books New Moon Books New Moon Books Binnet & Hardley Binnet & Hardley Binnet & Hardley Binnet & Hardley Binnet & Hardley Binnet & Hardley Binnet & Hardley Algodata Infosystems Algodata Infosystems Algodata Infosystems Algodata Infosystems Algodata Infosystems Algodata Infosystems

pub_id
0736 0736 0736 0736 0736 0877 0877 0877 0877 0877 0877 0877 1389 1389 1389 1389 1389 1389

title_id BU2075 PS2091 PS2106 PS3333 PS7777 MC2222 MC3021 MC3026 PS1372 TC3218 TC4203 TC7777 BU1032 BU1111 BU7832 PC1035 PC8888 PC9999

101

SQL Server

Introduo a SQL

Junes 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 ---------- ---------------7131 50 TC3218 7131 80 TC7777 7131 200 BU1032 7131 350 TC4203 7131 400 MC3021 7131 500 BU1111 7131 35 BU2075 7131 137 MC3021 7131 345 BU1032 6380 200 BU2075 6380 250 MC3021 6380 200 PS3333 6380 500 PS7777 6380 125 TC3218 6380 135 BU2075 6380 320 BU1032 6380 300 TC4203 6380 400 MC3021 7896 75 TC3218 7896 75 TC7777 7896 275 TC4203 7896 340 BU1111 7896 42 BU2075 ... 8042 30 BU2075 8042 94 BU1032 8042 300 TC4203 8042 270 MC3021 8042 133 PC1035 (116 rows affected) stor_name ----------------------------------------------------------Doc-U-Mat: Quality Laundry and Books Doc-U-Mat: Quality Laundry and Books Doc-U-Mat: Quality Laundry and Books Doc-U-Mat: Quality Laundry and Books Doc-U-Mat: Quality Laundry and Books Doc-U-Mat: Quality Laundry and Books Doc-U-Mat: Quality Laundry and Books Doc-U-Mat: Quality Laundry and Books Doc-U-Mat: Quality Laundry and Books Eric the Read Books Eric the Read Books Eric the Read Books Eric the Read Books Eric the Read Books Eric the Read Books Eric the Read Books Eric the Read Books Eric the Read Books Fricative Bookshop Fricative Bookshop Fricative Bookshop Fricative Bookshop Fricative Bookshop Bookbeat Bookbeat Bookbeat Bookbeat Bookbeat

102

SQL Server

Introduo a SQL

Junes Baseadas em Igualdade (continuao) Exemplo (sentena adicional: usando funo agregada 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 --------------------------------------------------Eric the Read Books Barnums News & Brews Doc-U-Mat:Quality Laundry and Books Fricative Bookshop Bookbeat (6 rows affected) stor_id ---------- --------6380 2430 7066 2430 7067 2900 7131 2097 7896 1182 8042 3733

103

SQL Server

Introduo a SQL

Junes Baseadas em Igualdade (continuao) Exemplo (sentena colunas derivadas): adicional: ordenao de

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 ----------BU2075 BU2075 BU2075 MC3021 PS2106 PS2106 PS2106 BU2075 MC3021 BU2075 PC1035 BU2075 ... qty -----30 35 42 69 30 31 50 135 137 150 25 200 price -------------------2.99 2.99 2.99 2.99 7.00 7.00 7.00 2.99 2.99 2.99 22.95 2.99 total_price -------------89.70 104.65 125.58 206.31 210.00 217.00 350.00 403.65 409.63 448.50 573.75 598.00

(116 rows affected) 104

SQL Server

Introduo a SQL

Sinnimos (Aliases) Funo que proporciona uma forma abreviada de referenciar tabelas com uma nica declarao SQL. Sintaxe simplificada:
select lista_de_seleo 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 cdigo*/ where t.title_id = ta.title_id /* 409-56-7008?*/ and au_id = '409-56-7008'

Resultado:
title_id ----------BU1032 (1 row affected)

105

SQL Server

Introduo a SQL

Outras Condies em Junes Exemplo (condio 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 ---------- ----- ---------7131 50 TC3218 7131 35 BU2075 7896 42 BU2075 7896 25 PC1035 7067 34 PC1035 7067 53 TC4203 8042 40 TC3218 8042 30 PS2106 8042 50 PS2106 8042 31 PS2106 8042 69 MC3021 8042 30 BU2075 (12 rows affected) stor_name ---------------------------------------------------Doc-U-Mat: Quality Laundry and Books Doc-u-Mat: Quality Laundry and Books Fricative Bookshop Fricative Bookshop News & Brews News & Brews Bookbeat Bookbeat Bookbeat Bookbeat Bookbeat Bookbeat

106

SQL Server

Introduo a SQL

Junes No Baseadas em Igualdade Operadores de comparao utilizados:


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

Exemplo (Operador de comparao):


/*Que autores vivem em estados que vm (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 -----------------------MA MA MA MA MA MA (6 rows affected) au_lname -------------Greene Blotchet-Halls del Castillo Panteley Ringer Ringer au_fname ----------------Morningstar Reginald Innes Sylvia Anne Albert state ------TN OR MI MD UT UT 107

SQL Server

Introduo a SQL

Self-Joins Efetuando uma juno 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 condio de juno. 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 ------------------Green Straight Stringer MacFeather Karsen (6 rows affected) au_fname -----------------------Marjorie Dick Dirk Stearns Livia city ------------------Oakland Oakland Oakland Oakland Oakland

108

SQL Server

Introduo a SQL

Self-Joins (continuao)
authors
au_lname Bennet Green Carson Ringer Stringer O'Leary Dull White MacFeather Smith DeFrance Karsen ... Straight au_fname Abraham Marjorie Cheryl Albert Dirk Michael Ann Johnson Stearns Meander Michel Livia ... Dick city Berkeley Oakland Berkeley Salt Lake Oakland San Jose Palo Alto Menio Park Oakland Lawrence Gary Oakland ... Oakland

au1
au_lname Bennet Green Carson Ringer Stringer O'Leary Dull White MacFeather Smith DeFrance Karsen ... Straight au_fname city Abraham Marjorie Cheryl Albert Dirk Michael Ann Johnson Stearns Meander Michel Livia ... Dick Berkeley Oakland Berkeley Salt Lake Oakland San Jose Palo Alto Menio Park Oakland Lawrence Gary Oakland ... Oakland au_lname Bennet Green Carson Ringer Stringer O'Leary Dull White MacFeather Smith DeFrance Karsen ... Straight au_fname city Abraham Marjorie Cheryl Albert Dirk Michael Ann Johnson Stearns Meander Michel Livia ... Dick

au2
Berkeley Oakland Berkeley Salt Lake Oakland San Jose Palo Alto Menio Park Oakland Lawrence Gary Oakland ... Oakland 109

SQL Server

Introduo 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 juno not-equal feita em conjuno com uma self-join.

Duas colunas so utilizadas na condio de


juno.

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
110

SQL Server

Introduo a SQL

Self-Joins e Not-Equal Joins (continuao)


au1 au_lname Karsen Green Dull Hunter Locksle Ringer Smith Bennet Ringer au_lname Karsen Green Dull Hunter Locksle Ringer Smith Bennet Ringer au2 au_lname Karsen Green Dull Hunter Locksle Ringer Smith Bennet Ringer au_lname Karsen Green Dull Hunter Locksle Ringer Smith Bennet Ringer au_lname Karsen Green Dull Hunter Locksle Ringer Smith Bennet Ringer 111

au_lname Karsen Green Dull Hunter Locksle Ringer Smith Bennet Ringer

SQL Server

Introduo a SQL

Self-Joins e Not-Equal Joins (continuao) Exemplo (self-join e not-equal join):


select distinct t1.title, t1.price from titles t1, titles t2 where t1.price = t2.price and t1.title_id != t2.title_id order by t1.price /* Que livros tm */ /* o mesmo preo? */

Resultado:
title ------------------------------------------------------------------------------The Gourmet Miicrowave You Cam Combat Computer Stress! Fifty Years in Buckingham Palace Kitchens Cooking with Computers:Surreptitious Balance Sheets Straight Talk About Computers Silicon Valley Gastronomic Treats The Busy Executive's Database Guide Prolonged Data Deprivation: Four Case Studies (8 rows affected) price -------2.99 2.99 11.95 11.95 19.99 19.99 19.99 19.99

112

SQL Server

Introduo a SQL

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


select distinct t1.title_id from sales s1, sales s2 where s1.title_id = s2.title_id /* Que livros so vendidos */ and s1.stor_id != s2.stor_id /* por mais de uma loja? */

Resultado:
title_id -----------BU1032 BU1111 BU2075 BU7832 MC3021 PC1035 PC8888 PS2091 PS3333 PS7777 TC3218 TC4203 TC7777 (13 rows affected)

113

SQL Server

Introduo a SQL

Efetuando Junes em Mais de Duas Tabelas

A declarao from (from clause) deve listar todas as tabelas envolvidas. A declarao where (where clause) deve listar condies suficientes de juno para relacionar todas as tabelas envolvidas. No necessrio exibir uma coluna para cada tabela envolvida na juno. 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-7008 213-46-8915 238-95-7766 ...

au_lname Bennet Green Carson

au_fname Abraham Marjorie Cheryl

... ... ... ... ...

Titleauthor au_id 409-66-7008 213-46-8915 238-95-7766 ...

title_id ... BU1032 BU1032 ... PC1035 ... Titles

title_id BU1032 PC1035 ...

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

... ...

114

SQL Server

Introduo a SQL

Efetuando Junes em Mais de Duas Tabelas


(continuao)

Quando n tabelas participam de uma operao de juno, ao menos n-1 condies de juno so necessrias 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 -------------------------Barnums Bookbeat Barnums Bookbeat News & Brews Barnums Bookbeat Fricative Bookshop Barnums ... (65 rows affected) TITLES title_id title type pub_id price advance royalty ytd_sales notes pubdate title -----------------------------------------Sushi, Anyone? Life Without Fear The Gourmet Microwave The Gourmet Microwave Is Anger the Enemy? But Is It User Friendly? But Is It User Friendly? Sushi, Anyone? Secrets of Silicon Valley

STORES SALES stor_id ord_num date qty payterms title_id

stor_id stor_name stor_address city state zip


115

SQL Server

Introduo a SQL

Outer Joins Inclui, no resultado, alm das linhas correspondentes, linhas no correspondentes. Operadores outer join:
*= inclui nos resultados todas as linhas da primeira tabela, no apenas aquelas cujas colunas unidas correspondem. inclui nos resultados todas as linhas da segunda tabela, no apenas aquelas cujas colunas unidas correspondem.

=*

Sintaxe simplificada: select lista_de_seleo from[[banco_de_dados.]proprietrio]{tabela1}, [banco_de_dados.] proprietrio.] {tabela2},[..]] [where tabela1.nome_da_coluna {*= | =*} tabela2. nome_da_ coluna]

116

SQL Server

Introduo a SQL

Outer Joins (continuao) Exemplo:


(Suponha que uma nova loja foi adicionada, de forma que, sales no possui uma linha correspondente.)
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 ---------------------------------------------------------Barnums Bookbeat Doc-U-Mat: Quality Laundry and Books Eric the Read Books Fricative Bookshop News & Brews nome da loja nova (se includo) (6 rows affected) --------2430 3733 2097 2430 1182 2900 NULL

117

SQL Server

Introduo a SQL

Portugus para SQL Qual o ttulo 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 preos. (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

118

SQL Server

Introduo a SQL

Sumrio Sintaxe - select [tabela].nome_da_coluna, [...] from {tabela}, {tabela}, [..] [where condies_de_busca] Nomes de colunas ambguos precedidos pelo nome da tabela. devem ser

Produto cartesiano - Todas as combinaes possveis das linhas de cada uma das tabelas. Join - Deve estar especificado em uma sentena where. equi-join - Baseado numa igualdade entre os valores das colunas especificadas. aliases - Oferecem uma maneira abreviada de referenciar tabelas com uma nica declarao SQL.
select lista_de_seleo 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.
119

SQL Server

Introduo a SQL

not-equal join - Normalmente utilizado em conjunto com uma self-join. juno mltipla de tabelas - Quando n tabelas so unidas, pelo menos n-1 condies de juno so necessrias para evitar o produto cartesiano. outer join - Inclui, alm das linhas correspondentes, as linhas no correspondentes no resultado.
select lista_de_seleo from [[banco_de_dados.]proprietrio.]{tabela1},[banco_de _dados.]proprietrio.]{tabela2},[..]] [where tabela1.nome_da_coluna {*= | =*} tabela2.nome_da_coluna]

120

SQL Server

Introduo a SQL

Lab: Joins As tabelas stores, sales, titles, publishers, titleauthor, discounts e authors so usadas nesse exerccio. Estas tabelas podem ser encontradas no banco de dados pubs.

1. Que title_id's (cdigos dos livros) foram pedidos por cada loja? 2. Qual o nome do autor que escreveu o livro com o cdigo (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)

121

SQL Server

Introduo a SQL

Lab: Joins (continuao) 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 ttulo do livro?

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

122

SQL Server

Introduo a SQL

Subconsultas e Unies
Nesta seo, o estudante aprender como consultar o banco de dados usando selees aninhadas (subconsultas). Objetivos Ao final desta seo, o estudante dever ser capaz de:

Executar uma consulta com nveis mltiplos; Usar uma subconsulta com operadores
comparativos; Usar uma subconsulta para um teste de existncia; Usar uma unio para combinar resultados de consultas.

123

SQL Server

Introduo a SQL

Subconsultas - Um Exemplo Introdutrio Questo - Que ttulos so publicados por New Moon Books? Usando duas declaraes select:
1. Encontrar o cdigo (pub_id) para New Moon Books.
select pub_id from publishers where pub_name = 'New Moon Books' pub_id --------0736

2. Encontrar os ttulos dos livros associados com o cdigo 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 124

SQL Server

Introduo a SQL

Subconsultas(continuao)

Um

Exemplo

Introdutrio

Usando uma declarao de juno:


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')

125

SQL Server

Introduo a SQL

Escrevendo Subconsultas Uma subconsulta uma declarao select, usada como uma expresso, como parte de outra declarao select, update, insert ou delete. A subconsulta (select aninhado) resolvida e os resultados substitudos na consulta mais externa.

Se a declarao where da consulta mais externa incluir o nome de uma coluna, esta dever ser compatvel, para a juno (join), com a coluna nomeada na lista_de_seleo da subconsulta (ou seja: mesmo domnio).
Uma subconsulta no pode incluir os comandos order by e compute ou a chave into.

126

SQL Server

Introduo a SQL

Escrevendo Subconsultas (continuao) Sintaxe simplificada:


select lista_de_seleo [from {tabela} [,...]] [where condies_de_busca]= (select lista-de_seleo_da_subconsulta [from {tabela} [,...] [where condies_de_busca] [group by expresso_s/_funes agregadas [,...]] [having condies_de_busca]) [group by expresso_s/_funes agregadas [,...]] [having condies_de_busca]) [order by {{tabela}.]coluna |nmero_da_lista_de_seleo |expresso} [asc | desc] [,...]] [compute agregador_de_linha (coluna) [,...] [by coluna [,...]] [,...]]

Razes para usar subconsultas: Muitas junes podem ser estabelecidas como uma subconsulta.

s vezes mais fcil de entender do que uma


juno que executa a mesma funo.

Executa algumas tarefas que de outra forma seriam impossveis.


127

SQL Server

Introduo a SQL

Subconsultas - Restries Uma lista_de_seleo da subconsulta s pode incluir um nome de coluna (com exceo daquelas que so utilizadas em conjunto com a clusula exists), ou seja, mais de um valor de coluna no pode ser retornado. A chave distinct no pode ser utilizada com subconsultas que incluem uma sentena group by. As sentenas where ou having de uma declarao select, insert, update ou delete podem conter uma subconsulta. Apenas as colunas da lista_de_seleo da declarao mais externa podem ser exibidas.

128

SQL Server

Introduo a SQL

Mltiplos Nveis de Aninhamento Uma subconsulta pode conter uma ou mais subconsultas.

No existe nvel mximo de aninhamento.


Exemplo (dois nveis):
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)

129

SQL Server

Introduo a SQL

Mltiplos Nveis de Aninhamento (continuao) Exemplo (dois nveis):


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 -------------------------------------------Algodata Infosystems (1 row affected) pub_id ----------1389

130

SQL Server

Introduo a SQL

Subconsultas Retornando Mltiplas Linhas Subconsultas usadas com in ou not in, ao invs de uma igualdade, na sentena where, pode retornar 0 ou mais valores. Sintaxe simplificada:
select lista_de_seleo [from [[banco_de_dados.proprietrio.]{tabela} [,...]] [where condies_de_busca] [not] in (subconsulta)

Exemplo:
select distinct stor_id, title_id /*Que livros esto sendo */ from sales /*vendidos na Califrnia */ where stor_id in (select stor_id from stores where states = 'CA')

131

SQL Server

Introduo a SQL

Subconsultas
(continuao)

Retornando

Mltiplas

Linhas

Resultado:
stor_id ----------7066 7066 7066 7066 7066 7066 7066 7066 7067 7067 7067 7067 7067 7067 ... (25 rows affected) title_id ---------BU2075 BU7832 MC3021 PC1035 PC8888 PS7777 TC4203 TC7777 BU1032 BU1111 BU2075 BU7832 MC3021 PC1035

Exemplo:
select distinct stor_name /*Que lojas vendem o livro */ from stores /*The Busy Exec's DB Guide' */ where stor_id in (select stor_id from sales where title_id in (select title_id from titles where title = "The Busy Executive's Database Guide"))

132

SQL Server

Introduo a SQL

Subconsultas
(continuao)

Retornando

Mltiplas

Linhas

Resultado:
-------------------------------------------------------------Bookbeat News & Brews Eric the Read Books Doc-U-Mat: Quality Laundry and books (4 rows affected)

stor_name

Exemplo:
select distinct pub_name /* Que editores ainda */ from publishers /* no publicaram ao menos 1 */ where pub_id not in /* livro de negcios (business)? */ (select pub_id from titles where type = 'business')

Resultado:
pub_name

--------------------------------------Binnet & Hardley (1 row affected)

Se usssemos !=, ao invs de not in, no


exemplo acima, o resultado seria o mesmo?
133

SQL Server

Introduo a SQL

Subconsultas com Operadores de Comparao


Se no for utilizada uma das chaves ANY ou ALL, a subconsulta dever retornar um nico valor . Sintaxe simplificada: select lista_de_seleo [from {tabela} [,...]] [where expresso { = | != | > | >= | < | <= } [any| all]] (subconsulta)

Exemplo (maior do que):


select title_id, price /* Que livros possuem preo */ from titles /* superior mdia dos preos*/ where price > /* de todos os livros */ (select avg(price) from titles)

Resultado: title_id

-----------BU1032 BU7832 MC2222 PC1035 PC8888 PS1372 PS3333 TC3218 TC7777 (9 rows affected)

--------------19.99 19.99 19.99 22.95 20.00 21.59 19.99 20.95 14.99 134

price

SQL Server

Introduo a SQL

Subconsultas com Operadores de Comparao


(continuao)

Exemplo (duas condies):


select distinct title, price from titles where type = 'business' and price > (select avg(price) from titles)

Resultado:
title -----------------------------------------------------Straight Talk About Computers The Busy Executive's Database Guide (2 rows affected) price -------19.99 19.99

135

SQL Server

Introduo a SQL

Subconsultas com Operadores de Comparao


(continuao)

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) 136

SQL Server

Introduo a SQL

Subconsultas com Operadores de Comparao


(continuao)

Outro Exemplo:
select distinct title /*Que ttulos obtiveram um */ from titles /*adiantamento maior que a*/ where advance > /*quantia mnima 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')

137

SQL Server

Introduo a SQL

Subconsultas com Operadores de Comparao


(continuao)

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)

138

SQL Server

Introduo a SQL

Exists EXISTS e NOT EXISTS so usados para implementar duas operaes da teoria de grupos.

EXISTS - Interseo: todos os elementos que


pertencem a ambos os grupos. NOT EXISTS - Diferena: os elementos que pertencem apenas ao primeiro dos dois grupos. A chave exists no precedida por um nome de coluna. Normalmente, a lista_de_seleo da subconsulta ser " * " j que a funo exists retorna verdadeiro (true) ou falso (false), e no dados. exists (subconsulta): True se linhas so retornadas False se linhas no so retornadas not exists (subconsulta): True se linhas no so retornadas False se linhas so retornadas

Sintaxe simplificada:
select lista_de_seleo [from {tabela} [,...]] [where {exists | not exists}] (subconsulta)

139

SQL Server

Introduo a SQL

Exists (continuao) Exemplo (interseo entre authors e publishers):


select distinct city /*Em que cidades esto */ from authors /*localizados tanto um autor*/ where exists /*quanto um editor*/ (select * from publishers where authors.city = publishers.city)

Resultado:
authors.city city -------------------------Berkeley (1 row affected)

publishers.city

140

SQL Server

Introduo a SQL

Exists (continuao) Exemplo (diferena entre authors e publishers):


select distinct city /*Em que cidades mora um autor*/ from authors /*mas no 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)

authors.city

publishers.city

141

SQL Server

Introduo a SQL

Portugus para SQL Quais so os cdigos 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 ttulo do livro mais caro?


select title_id from titles where price = (select max(price) from titles)

PORTUGUS encontre ao menos uma linha

SQL 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')

142

SQL Server

Introduo a SQL

Sumrio Subconsulta - uma declarao select, usada como uma expresso, como parte de outra declarao select, update, insert ou delete. Resultados - Substitudos na consulta mais externa. Subconsulta - Pode conter uma ou mais subconsultas. any e all - Modificadores de operadores de comparao; apenas um valor retornado. exists - Interseo not exists - Diferena Sintaxe select lista_de_seleo [from {tabela} [,...]] [where condies_de_busca]= (select lista_de_seleo_subconsulta [from {tabela} [,...] [where condies_de_busca] [group by expresso_s/_funes_agregadas [,...]] [having condies_de-busca]) [group by expresso_s/_funes_agregadas [,...]] [having condies_de-busca]) [order by {{tabela}.]coluna |nmero_da_lista_de_seleo |expresso} [asc | desc] [,...]] [compute agregador_de_linha (coluna) [,...] [by coluna [,...]] [,...]]

143

SQL Server

Introduo a SQL

Lab: Subconsultas Use selects aninhados para responder estas questes. As tabelas sales, authors, titles, titleauthor, stores e publishers sero usadas para respond-las. Estas tabelas esto 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 ngocios (business)? 4. Que livros no foram pedidos? 5. Que autores so publicados por 'New Moon Books' ? 6. Que livros custam mais que o preo mnimo corrente? 7. Que livros os editores de Massachusetts imprimiram?
144

SQL Server

Introduo a SQL

Lab: Subconsultas (continuao) 8. Que livros foram publicados mas no foram vendidos? (use marcas de existncia) 9. Que autores escreveram culinria (cooking)? livros sobre

Responda a questo abaixo com uma juno (join) e com uma consulta aninhada.

10. Que livros so publicados por New Moon Books? juno

Aninhamento

145

SQL Server

Introduo a SQL

Lab: Subconsultas (continuao) Se voc tiver mais tempo...

Tente responder as questes a seguir e verifique se elas podem ser resolvidas usando uma juno (join) e uma subconsulta. (Elas podem ser respondidas por mais de um mtodo.)

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 no pediram nenhum livro?

146

SQL Server

Introduo a SQL

Unies Permite ao usurio combinar o resultado de mais de uma seleo. 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 no ser que a opo all seja utilizada) Sintaxe Geral
authors.city Consulta 1 [union [all] Consulta n]... publishers.city [sentena order by] [sentena compute] stores.city onde Consulta 1 : select lista_de_seleo [sentena into] [sentena from] [sentena where] [sentena group by] [sentena having] e Consulta n : select lista_de_seleo [sentena from] [sentena where] [sentena group by] [sentena having]

147

SQL Server

Introduo a SQL

Regras de Unies Qualquer nmero de operadores de unio pode aparecer em uma Declarao SQL Transacional. Operadores de unio esquerda para a direita. so avaliados da

Por exemplo, X union all (Y union Z) pode no ser equivalente a (X union all Y) union Z (use parnteses para controlar a ordem de avaliao)

Todas as listas de seleo, na declarao unio, devem ter o mesmo nmero de expresses. As expresses nas listas de seleo so processadas em ordem. Expresses correspondentes nas listas de seleo devem ser do mesmo tipo de dados ou uma converso implcita dos dados deve ser possvel, ou, por fim, sua converso explcita deve ser especificada.
148

SQL Server

Introduo a SQL

Regras de Unies (continuao) Os nomes das colunas no resultado so tirados da primeira consulta na declarao de unio - especifique cabealhos de colunas apenas na primeira consulta. Order by e compute so permitidos apenas aps todas as consultas - no podem ser usados em cada consulta individualmente.

As sentenas group by e having podem aparecer apenas nas consultas individuais, no podem ser usadas para o resultado final.
A sentena into pode ser utilizada apenas na primeira consulta - para criar uma nova tabela resultante. O operador de unio no pode ser usado com a declarao create view ou com a sentena for browse.

149

SQL Server

Introduo a SQL

Lab: Unies As tabelas authors, stores, publishers, titles, titleauthor, discounts e sales do banco de dados pubs so usadas para este exerccio. 1. Que estados aparecem no banco de dados? 2. Que livros so ou escritos ou editados na Califrnia (CA)? Usando juno:

Usando unio:

3. Que livros custam mais que o preo mdio dos livros, ou tm um desconto superior ao desconto mdio?

150

SQL Server

Introduo a SQL

Definio e Manipulao de Dados


Nesta seo 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 seo, 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.

151

SQL Server

Introduo 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_seleo [into tabela [from {tabela} [,...]] [where condies_de_busca]

Exemplo (tabela criada, dados carregados):


select * into new_titles from titles

Exemplo (tabela criada, dados no 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

152

SQL Server

Introduo a SQL

Modificao de Dados - Inserindo Dados A sentena 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 so definidas de forma a permitirem valores nulos. Para inserir um valor nulo (null value), em uma coluna que permite valores nulos, especifique null ou no especifique nenhum valor. Todos os valores do tipo char e datetime devem ser includos 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 prxima linha. Para inserir aspas como um caracter, use o tipo oposto de aspas, ou seja, se o usurio deseja inserir aspas simples como um caractere, dever incluir todos os dados a serem inseridos entre aspas duplas.

153

SQL Server

Introduo a SQL

Inserindo Dados (continuao) Sintaxe simplificada


insert [into] nome_da_tabela [(lista_de_colunas)] values {valores(lista_de_valores)|declarao_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 no includa 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*/
154

SQL Server

Introduo a SQL

Inserindo Dados (continuao)


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

Exemplo (criando):
create table new_titles (title_id char(6), title varchar(80), type char(12), pub_id char(4), price money null, advance money null, royalty int null, ytd_sales int null, notes varchar(200) null, pubdate datetime not null)

Exemplo (inserindo):
insert new_titles values ("BU2222" "More or Less!", "business", "5555", null, null, null, null, "ok", "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 subconsulta):


insert into new_pubs select * from mass_publishers where pub_id in (select pub_id from mass_publishers where city = 'Boston') /*Insere novos editores*/ /*da rea de Boston*/

155

SQL Server

Introduo a SQL

Modificao de Dados - Atualizando Dados A sentena UPDATE modifica o valor de uma ou mais colunas numa tabela (modifica os valores dos dados em linhas existentes, coluna a coluna).

A sentena SET determina as colunas a serem


modificadas. A sentena FROM determina de que tabelas os dados esto sendo originados, se mais de uma tabela estiver sendo usada para determinar o valor da nova coluna. A sentena WHERE determina as linhas a serem modificadas. No possvel atualizar mltiplas tabelas numa mesma declarao de atualizao (update).

Sintaxe simplificada:
update nome_da_tabela set nome_da_coluna = {expresso | null} [, nome_da_coluna = {expresso | null}] ... [from nome_da_tabela, nome_da_tabela, ...] [where condies-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 */
156

SQL Server

Introduo a SQL

Atualizando Dados (continuao) Exemplo (modifica dados em todas as linhas que atendem ao critrio especificado):
update new_titles set contract = 0 where pub_id = '1389'

Exemplo (altera dados em todas as linhas - sem condies):


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 (atualizao 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' 157

SQL Server

Introduo a SQL

Modificao de Dados - Removendo Dados A sentena DELETE remove dados selecionados de uma tabela.

A chave FROM (depois do delete) opcional. A chave FROM (extenso da sintaxe) permite que

dados sejam apagados de uma tabela com base em dados armazenados em outras tabelas. A sentena WHERE especifica as linhas que sero apagadas. Caso esta sentena seja omitida, todas as linhas sero removidas.

Sintaxe:
delete [from] {nome_da_tabela} [from {nome_da_tabela}] [,...] [where condies_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 where price > $15 /*Apaga os dados de todos os*/ /*livros que custam mais de $15*/

158

SQL Server

Introduo a SQL

Removendo Dados (continuao) 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 ttulos 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'))

159

SQL Server

Introduo a SQL

Removendo Definies de Dados DROP TABLE remove a definio 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

160

SQL Server

Introduo a SQL

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


select lista_de_seleo [into tabela] [from {tabela} [,..]]
[where condies_de_busca]

Sentena delete - Remove os dados selecionados de uma tabela.


delete [from] {nome_da_tabela} [where condies_de_busca]

drop table - remove a definio de uma tabela e todos os dados do banco de dados.
drop nome_da_tabela [,nome_da_tabela]...

Sentena insert - Acrescenta dados a uma tabela j existente.


insert [into] nome_da_tabela [(lista_de_colunas)] {values(lista_de_valores)|declarao_select}

161

SQL Server

Introduo a SQL

Sumrio (continuao) Sentena 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 = {expresso | null} [, set nome-da_coluna = {expresso |null} [from nome_da_tabela, nome_da_tabela, ...] [where condies_de_busca]

162

SQL Server

Introduo a SQL

Lab: Definies de Dados Neste exerccio voc criar sua prpria tabela. 1. Usando select into, crie uma tabela chamada addressN (onde N o seu nmero de usurio) que possui as mesmas colunas que a tabela authors. (Dica: use uma sentena where falsa). 2. Insira duas linhas de dados na tabela addressN (crie entradas de dados fictcias). 3. Insira dados na tabela addressN atravs da recuperao de todos os autores que moram em Palo Alto e San Jose, a partir da tabela authors. (Dica: use insert com uma declarao select) 4. Modifique um valor existente: o cdigo postal (zip) das pessoas que moram em Palo Alto mudou para 94333. 5. Apague todas as entradas que tm o nome da cidade San Jose.
163