Você está na página 1de 10

SQL (Structured Language Query)

1. 2. 3. 4. 5. 6.

Introduo............................................................................................................................. 2 Relao MER X SQL ............................................................................................................... 2 Nomenclatura ....................................................................................................................... 2 Tipos de dados ...................................................................................................................... 3 Sub-linguagens...................................................................................................................... 3 Comandos DDL...................................................................................................................... 3 6.1 6.2 6.3 CREATE (TABLE) ............................................................................................................. 6 DROP (TABLE) ................................................................................................................ 6 ALTER (TABLE) ............................................................................................................... 6

7.

Comandos DML ..................................................................................................................... 7 7.1 7.2 7.3 7.4 7.5 INSERT ........................................................................................................................... 7 DELETE ........................................................................................................................... 7 UPDATE ......................................................................................................................... 8 SELECT ........................................................................................................................... 8 WHERE........................................................................................................................... 8

8.

JOIN (Relacionamentos) ....................................................................................................... 9

2 1. Introduo A linguagem SQL utilizada para definio de esquemas relacionais de banco de dados que so controlados por um programa conhecido como Sistema Gerenciador de Banco de Dados (SGBD). Em algumas literaturas, a sigla adotada SGBDR, onde o R significa Relacional. Estes esquemas relacionais so compostos por tabelas, relacionamentos e registros (tuplas). Cabe ao SGBD gerenciar estes itens, mantendo a integridade entre os dados e a estrutura fsica das tabelas. 2. Relao MER X SQL Relacionando o Modelo Entidade-Relacionamento com o SGBD, os termos abaixo listados se equivalem: Modelo Entidade-Relacionamento Entidades Relacionamentos Modelo (completo/suficiente) Atributos SGBD Tabelas Chaves estrangeiras Banco de Dados Campos Registros

Seguindo a tabela anterior, pode-se conferir que no h equivalncia no Modelo EntidadeRelacionamento em relao aos Registros (SGBD). Isto ocorre pelo fato do MER ter foco na definio da estrutura organizacional das tabelas, deixando o seu contedo para ser tratado posteriormente, ao se iniciar os trabalhos diretos no SGBD. 3. Nomenclatura Ao manipular bases de dados, necessrio que se definam padres em relao aos nomes de tabelas e campos. Esta regra adotada pelo fato do projeto poder ser compartilhado e o uso de normas auxilia na leitura e interpretao do banco. A escolha do padro fica a critrio dos usurios, mas neste curso devemos seguir as seguintes regras: Tipo Tabelas Campos Exemplos clientes, servicos, id, notas_fiscais nome, cpf, endereo, data_nascimento, estado_civil pk_clientes, pk_servicos fk_notas_fiscais_clientes, fk_estados_paises

Chave Primria Chave Estrangeira

Note que todos os campos apresentam letras minsculas e no h espaos entre os termos. No seu lugar, deve ser colocado um underline (_) separando as palavras. Outro item a ser desconsiderado o uso de acentuaes, visto que os esquemas SQL podem ser reproduzidos em qualquer banco de dados e os acentos podem gerar srios problemas de codificao.

3 4. Tipos de dados Ao criar uma tabela, devemos definir o tipo de dado de cada coluna e o seu tamanho, dependendo do campo. Esta regra necessria para manter a integridade e o controle sobre as informaes inseridas no banco de dados. Sendo assim, ao definir uma coluna com o tipo numrico, esta coluna aceitar apenas valores numricos. Ao tentar inserir um dado no-numrico, o banco ir abortar a transao e apresentar uma mensagem de erro ao usurio. Os tipos de dados mais comuns so: Tipo int varchar Valores Inteiros Texto Exemplo 0 1 2 4 1020 Pedro, pedro.yasui, 1TIN, pyasui@bbb.com 100,24 0,99 1993,00 0 (Falso) 1 (Verdadeiro) 02/07/1986, 2011-05-08, dependendo da codificao.

decimal Nmeros decimais bit Verdadeiro/Falso datetime Data

Alm destes tipos ainda podemos utilizar NVARCHAR, CHAR, BIGINT, entre outros. A sua utilizao deve ser considerada de acordo com a necessidade e o conhecimento do usurio. 5. Sub-linguagens Os comandos SQL foram divididos em grupos, de acordo com a sua natureza. Inicialmente, iremos trabalhar com as sub-linguagens DDL e DML. O primeiro item (Data Definition Language Linguagem de Definio de Dados) contm os comandos utilizados para definir a estrutura relacional do banco de dados, como criao de bancos, tabelas, chaves, entre outros. J o segundo grupo (DML Data Manipulation Language Linguagem de Manipulao de Dados), contm comandos para manipulao dos registros como, por exemplo, inserir, alterar, atualizar, apagar, entre outros. Vale ressaltar que estas operaes podero sofrer restries de acordo com a definio das tabelas e relacionamentos, mantendo a integridade e consistncia do modelo. Alm das sub-linguagens DDL e DML, existem ainda os grupos DCL, DTL e DQL, que trabalham basicamente com atribuio de permisso, controle de transaes, entre outros. O estudo destes contedos recomendado para os interessados em aprender a fundo o assunto, o que no o foco deste curso. 6. Comandos DDL Para iniciarmos a prtica com a linguagem SQL, vamos aprender os comandos definidos na sub-linguagem conhecida como DDL (Linguagem de Definio de Dados). Ao utilizarmos estes comandos, estaremos definindo as tabelas e relacionamentos do nosso banco, ou seja, toda a estrutura fsica do modelo. Os comandos classificados como DDL so os seguintes: CREATE DROP ALTER

4 Nestes exemplos utilizaremos estes comandos para a criao, alterao e remoo de tabelas (TABLE) exclusivamente. No entanto, podemos combinar o uso dos comandos para a criao de bases de dados (DATABASE), usurios (LOGIN), esquemas (SCHEMA), etc. Para a plena utilizao destes comandos, necessrio que o MER j se encontre bem definido e com todas as propriedades refinadas, facilitando a escrita do banco. Este processo de modelagem evita que falhas aconteam, visto que alteraes e correes na estrutura fsica do modelo podem demorar a aparecer e normalmente demandam muito esforo para serem solucionadas, podendo ocasionar perdas de informaes. Com base nestes itens, fica evidente a importncia da criao do MER antes de realizar efetivamente a implementao do banco de dados em um SGBD. Durante a explicao dos comandos, utilizaremos como base um sistema de compra e venda de produtos, que se encontra modelado no esquema relacional abaixo.

Uma regra importante definir primeiro as entidades com cardinalidade nvel 1, pois elas fornecem a chave para as tabelas com cardinalidade nvel n. Clientes cod_cliente int nome varchar(100) endereco varchar(50) cidade varchar(40) estado varchar(2) cep varchar(9) telefone varchar(13) rg varchar(12) cpf varchar(14)

X X X X X X

Vendedores cod_vendedor int X nome varchar(100) X endereco varchar(50) X

5 cidade estado cep telefone rg cpf ramal varchar(40) varchar(2) varchar(9) varchar(13) varchar(12) varchar(14) varchar(10) Pedidos int int int datetime varchar(150) X X X

cod_pedido cod_vendedor cod_cliente data_venda observacoes

X X X X

Produtos cod_produto int nome varchar(40) descricao varchar(100) valor_unitario decimal(10,2)

X X X X

Fornecedores cod_fornecedor int nome varchar(40) endereco varchar(50) cidade varchar(40) estado varchar(2) cep varchar(9) telefone varchar(13) contato_responsavel varchar(100) cnpj varchar(18) Pecas cod_peca Int nome Int cod_fornecedor Int descricao varchar(100) localizacao_estoque varchar(15) Pedidos_Produtos cod_pedido Int cod_produto Int quantidade Int valor_total decimal(10,2) Produtos_Pecas cod_produto int X cod_peca int X quantidade int X

X X X X X X X X X

X X X X X

X X X X

6 6.1 CREATE (TABLE) Utilizamos a clusula CREATE TABLE para a definio das tabelas, representadas pelas entidades no modelo relacional. Para facilitar a escrita do cdigo, as tabelas j esto definidas com o nome dos campos, tipos, chaves e obrigatoriedade, que ser representada pela clusula NOT NULL. Logo abaixo, podemos conferir a sintaxe e um exemplo da sua utilizao. Sintaxe: Exemplo: CREATE [item] [nome]; CREATE TABLE clientes( cod_cliente int nome varchar(100) endereco varchar(50) cidade varchar(40) estado varchar(2) cep varchar(9) telefone varchar(13), rg varchar(12), cpf varchar(14), CONSTRAINT pk_clientes );

not null not null, not null, not null, not null, not null,

identity(1,1),

PRIMARY KEY (cod_cliente)

Ao executar este bloco a tabela clientes ser criada no banco de dados. Note que existem restries (representadas pelas clusulas CONSTRAINT) que devem ser respeitadas. No exemplo, a CONSTRAINT pk_clientes representa a chave primria (PRIMARY KEY) da tabela. As outras tabelas devem ser criadas de acordo com o exemplo anterior. A ordem da criao deve ser respeitada, para garantir a integridade dos relacionamentos. 6.2 DROP (TABLE) O comando DROP utilizado para dropar (apagar) os componentes de uma base de dados. Com isso, todas as estruturas criadas com o uso do comando CREATE podem ser removidas com o comando DROP. Sintaxe: Exemplo: DROP [item] [nome]; DROP TABLE clientes;

Este comando acima listado ir remover a tabela clientes, bem como todos os seus campos e chaves. O contedo da tabela tambm removido e no poder mais ser recuperado. 6.3 ALTER (TABLE) Para alterarmos a estrutura de uma tabela, fazemos uso do comando ALTER TABLE. Estas alteraes compreendem adio/remoo de campos, constraints, ndices, entre outros. O uso deste comando deve ser estudado, pois a atualizao de determinados campos pode comprometer o funcionamento e a integridade da tabela. Sintaxe: ALTER TABLE [nome] [ADD/DROP COLUMN] [nome/nome tipo]

Exemplo:

ALTER TABLE clientes ADD idade int not null; ALTER TABLE clientes DROP COLUMN idade;

7. Comandos DML Aps definir a estrutura fsica, restries e relacionamentos, o prximo passo fazer uso destes recursos de maneira adequada. Para tal, a linguagem SQL fornece instrues que possibilitam que o usurio manipule de maneira segura as informaes. Atravs destas instrues ser possvel realizar aes como inserir, remover, atualizar e recuperar dados. Ao manipular um registro que no respeita alguma restrio (CONSTRAINT) da tabela especificada, o SGBD ir apresentar uma mensagem de erro ao usurio. Por se tratar de mensagens especficas, cabe ao mesmo interpretar e verificar a procedncia do erro, alterando o comando para que seja realizado com sucesso. 7.1 INSERT Este comando possibilita ao usurio inserir novos registros nas tabelas especificadas. Cada linha deve ser inserida individualmente, passando as informaes necessrias. Caso o usurio no especifique a ordem desejada da entrada de dados, o banco de dados ir interpretar a ordem definida durante a criao da tabela (CREATE TABLE). Sintaxe: Exemplo: INSERT INTO [tabela] (colunas) VALUES (valores) INSERT INTO clientes VALUES (v1, v2, v3, ..., vn) INSERT INTO clientes (c1, c2, ..., cn) VALUES (v1, v2, ..., vn)

Nestes exemplos, estamos inserindo valores (v1, v2, vn) na tabela cliente. A diferena que no primeiro caso, no estamos definindo a ordem das colunas, enquanto no segundo, as colunas encontram-se especificadas, podendo assumir valores ou no. 7.2 DELETE Ao contrrio do comando INSERT, o DELETE agir removendo registros das tabelas, de acordo com as condies informadas. Para isso, fazemos uso da clusula WHERE, que ser explicada posteriormente. Vale lembrar que os registros removidos do banco de dados no podem ser recuperados, sendo apagados permanentemente. Tambm vale lembrar que o uso deste comando requer habilidade e ateno do usurio, ficando o mesmo responsvel por eventuais perdas de informaes. Sintaxe: DELETE FROM [tabela] DELE TE FROM [tabela] WHERE [condicoes] DELETE FROM clientes DELETE FROM clientes WHERE cod_cliente = 10

Exemplo:

O primeiro comando ir remover todos os registros da tabela cliente enquanto o segundo ir remover apenas o cliente que possuir o campo cod_cliente igual a 10.

8 7.3 UPDATE Ao inserir um registro no banco podemos cometer equvocos, passando informaes inconsistentes para o sistema. Para corrigir estes deslizes, utilizamos o comando UPDATE. Sintaxe: UPDATE [tabela] SET [campo] = [valor] UPDATE [tabela] SET [campo] = [valor] WHERE [condicoes] UPDATE clientes SET cidade = Curitiba UPDATE clientes SET cidade = Curitiba WHERE estado = PR

Exemplo:

Semelhante ao comando DELETE, o primeiro exemplo ir atualizar todos os registros setando o campo cidade dos clientes como Curitiba. No segundo, trabalhamos de forma mais efetiva, setando Curitiba no campo cidade apenas para os clientes que possuem o valor PR no campo estado. 7.4 SELECT Os comandos anteriores (INSERT, DELETE e UPDATE) so chamados para realizar alteraes nos dados presentes na base de dados. Para a recuperao dos mesmos, utilizamos o comando SELECT, responsvel por buscar as informaes pretendidas e apresenta-las ao usurio ou servio responsvel. Para maximizar a sua utilizao, devemos combinar o seu uso com a clusula WHERE, trazendo resultados precisos atravs de filtros e restries bem definidas e flexveis. Sintaxe: SELECT [campos] FROM [tabelas] SELECT [campos] FROM [tabelas] WHERE [condicoes] SELECT * FROM produtos SELECT cod_produto, nome, valor_unitario FROM produtos WHERE valor_unitario > 100

Exemplo:

Observando os exemplos acima, podemos concluir que o primeiro SELECT ir recuperar todos os registros possveis presentes na tabela produtos e o segundo SELECT recuperar apenas o cod_produto, nome e valor_unitario apenas nos registros onde valor_unitario for maior que 100 (valor fixo nesta consulta). 7.5 WHERE A clusula WHERE deve ser empregada para inserir regras para a utilizao dos comandos DML. Estas regras iro definir qual registro ser afetado ou qual intervalo ser utilizado para a manipulao. Logo abaixo, sero apresentados exemplos com esta clusula. Associando esta clusula ao SELECT, possvel recuperar todos os clientes residentes na cidade de Curitiba que esto registrados na tabela clientes. Exemplo: SELECT FROM WHERE * clientes cidade = Curitiba

Para atualizar e remover registros utiliza-se a clusula WHERE para especificar quais itens sero afetados, impedindo que o banco de dados seja inteiramente alterado. No primeiro

9 exemplo, ser alterado o campo telefone quando o cod_cliente for igual a 45. J no segundo, ser removido o cliente com o nome Pedro Henrique do banco de dados. Exemplo 1: UPDATE SET WHERE clientes telefone = (41)9988-8899 cod_cliente = 45

Exemplo 2:

DELETE FROM clientes WHERE nome = Pedro Henrique

8. JOIN (Relacionamentos) Ao buscarmos informaes em um SGBD, normalmente estas no se encontram em uma mesma tabela, sendo necessrio estabelecer relacionamentos entre as tabelas para a realizao das consultas, que so conhecidos como JOINS. Atravs dos JOINS, o SGBD consegue interpretar a consulta SQL e separar as tabelas que sero utilizadas para que o usurio acesse os dados necessrios. Atravs deste recurso, o usurio pode encontrar solues para perguntas como quais itens foram pedidos por determinado cliente, quais peas foram compradas de cada fornecedor, entre outros. Cabe ressaltar que as operaes de JOIN devem ser bem analisadas antes de serem colocadas em produo, pois o mapeamento de campos desnecessrios pode afetar negativamente a performance do sistema. A forma mais simples de se realizar estas ligaes comparando o valor das chaves primrias presentes nas tabelas consultadas. Neste caso, a ligao fica estabelecida e o interpretador consegue retornar a consulta sem duplicidade de dados, impedindo que seja retornado um produto cartesiano. Problema: sua confeco. Soluo: Retornar o cdigo da pea e o nome e quantidade dos materiais utilizados na

SELECT FROM WHERE ORDER BY

p.nome, pc.nome, pp.quantidade produtos p, produtos_pecas pp, pecas pc p.cod_produto = pp.cod_produto AND pc.cod_peca = pp.cod_peca p.nome

10 Resultado:

Exemplificando, a consulta anterior deve retornar dados de trs tabelas diferentes (produtos, pecas e produtos_pecas). Isto ocorre pois o nome do produto se encontra na tabela produtos, o nome das peas se encontra na tabelas pecas e a quantidade de peas utilizadas no produto se encontra na tabelas produtos_pecas, sendo necessrio agrupar os dados para que a recuperao de informao seja possvel.

Você também pode gostar