FACULDADE DE COMPUTAO DE MONTES CLAROS Professora: Nayara Mura de Souza - nayamsouza@gmail.com
Apostila Banco de Dados 1
SQL: Structured Query Language Linguagem de Consulta Estruturada
uma linguagem usada para a consulta, atualizao, criao e gerenciamento de banco de dados relacionais, cujo prottipo originariamente foi desenvolvido pela IBM na dcada 70. As instrues que compem a linguagem SQL se dividem em quatro grandes grupos: DDL - Data Definition Language Linguagem de definio de dados: Contm instrues voltadas para a criao e manuteno de uma base de dados. DML - Data Manipulation Language Linguagem de manipulao de dados: Contm instrues voltadas para a manipulao dos dados contidos nas tabelas de um banco de dados, como incluso, alterao e cancelamento de registros. DQL - Data Query Language Linguagem de consulta de dados: Embora seja composto por uma nica instruo (SELECT), porm com muitas clusulas, uma das mais importantes, pois permite ao usurio efetuar consultas simples ou complexas em uma base de dados. DCL - Data Control Language Linguagem de controle de dados: Contm instrues que permitem o controle de acesso a um banco de dados por parte de usurios do sistema.
Regras usadas pelo SQL para nomear campos e definir os tipos de dados por eles suportados. Nome de tabelas e campos: o Nunca inicie o nome de um objeto com um nmero. Eles somente podem ser iniciados com uma letra maiscula ou minscula (A..Z ou a..z), exemplo: Livro, Cliente, titulo, nome, end, etc. Voc no pode usar: 1ttulo, 3autor, etc. o Nunca use acentos ou cedilhas em seus nomes, exemplo: no lugar de ttulo, endereo, use: titulo, endereco (sem acento e sem cedilha). o No use espaos em branco ou smbolos, como: *, -, +, etc., porque so proibidos. Os nicos smbolos permitidos so: trao (_) ou cifro ($). Assim sendo, no use: titulo Livro, nome.Autor, preco+Item, etc. o modo correto : tituloLivro, nomeAutor, precoItem, titulo_livro, nome_autor, preco_item, etc. o Procure usar nomes curtos (mximo de 20 caracteres) e que lembrem seu significado, isto vai facilitar bastante na interpretao de seu banco de dados. melhor usar endCli para um campo que contenha o endereo de clientes, do que um nome absurdo, como AxtNk, que nada tem a ver com endereo. o Estabelea sua prpria nomenclatura de dados, como, por exemplo: Cli para uma tabela de clientes, cliNome, cli_nome ou cNome para o campo que contenha o nome do cliente, etc.
FACULDADE DE COMPUTAO DE MONTES CLAROS Professora: Nayara Mura de Souza - nayamsouza@gmail.com
Apostila Banco de Dados 2
Definio dos principais tipos de campos permitidos no SQL:
Tipo caractere de largura fixa Permite o armazenamento de caracteres alfanumricos, de comprimento fixo, nos campos de uma tabela, representado por: CHAR (n). Exemplo: cpf_cli CHAR (14), uf_cli CHAR (2), nome_cli CHAR (50).
Tipo caractere de largura varivel usado para armazenar caracteres alfanumricos, de comprimento varivel, nos campos de uma tabela, representado por: VARCHAR(n). Exemplo: Nome_cli VARCHAR(50), End_cli VARCHAR(50).
Tipo numrico inteiro O tipo numrico inteiro permite o armazenamento de nmeros inteiros negativos ou positivos, que estejam compreendidos entre 2.147.483.648 e 2.147.483.648. Representado por: INTEGER.
Tipo numrico inteiro curto O tipo numrico inteiro curto armazena nmeros inteiros compreendidos entre 32.768 e 32.767, ocupando 2 Bytes de armazenamento, sendo representado por: SMALLINT.
Tipo numrico decimal Este tipo de campo usado para armazenar valores que contenham nmeros com casas decimais preestabelecidas, sendo representado por: DECIMAL(p,e). Sendo que p corresponde ao comprimento total do valor numrico, tambm conhecido por preciso, e e o nmero de dgitos de sua parte fracionria, tambm conhecido por escala. O ponto decimal em si no contado como um caractere, e o valor mximo permitido para a preciso (p) e a escala (e) 18, sendo que a escala sempre deve ser menor ou igual preciso, exemplo: preco_livro DECIMAL (6,2)
Tipo numrico de dupla preciso O tipo numrico de dupla preciso armazena valores decimais de ponto flutuante, e a preciso e a escala possuem comprimentos variveis, com uma preciso de 15 dgitos compreendidos entre 2,22571553486231 x 10-308 a 1,79769313486231 x 10-308. O espao ocupado no armazenamento de 8 Bytes, sendo representado por: DOUBLE PRECISION.
FACULDADE DE COMPUTAO DE MONTES CLAROS Professora: Nayara Mura de Souza - nayamsouza@gmail.com
Apostila Banco de Dados 3
Tipo numrico flutuante Este tipo de campo armazena valores decimais de ponto flutuante, e a preciso e a escala possuem comprimentos variveis, com uma preciso de sete dgitos compreendidos entre 1,175657 x 10-38 e 3,402823 x 10-38. O espao ocupado no armazenamento de 4 Bytes, sendo representado por: FLOAT.
Tipo data Usado no armazenamento de datas, sendo definido por: DATE.
Tipo hora Tem por objetivo armazenar dados temporais compreendidos entre 00:00 AM at 23:59:9999 PM, sendo definido por: TIME.
Tipo data e hora Este tipo de campo tem por objetivo armazenar dados temporais compostos por uma data e uma hora, sendo definido por: TIMESTAMP.
Tipo de dados nulos O tipo de dados nulos uma condio usada para indicar que no obrigatria a presena de um determinado valor em um campo. Valores nulos so bastante utilizados em instrues SQL, como criao de tabelas, pesquisas, etc. Para inserir valores nulos em um campo, voc digita duas aspas simples ( ) sem nenhum valore entre elas. Valores nulos podem ser atribudos a campos do tipo string (caractere), cuja sintaxe definida por: NULL. Exemplo: fax_cli VARCHAR(9) NULL. Indica que o campo fax_cli do tipo VARCHAR pode conter valores nulos NULL. Quando um determinado campo for obrigado a conter um determinado valor, voc deve negar a condio de NULL, antecedendo-a pela palavra-chave NOT, como mostramos em seguida: NOT NULL. Exemplo: nome_cli VARCHAR(50) NOT NULL.
SGBD
Para as aulas de SQL ser necessrio instalar o Firebird e o IB Expert. O user name : SYSDBA, e password: masterkey.
FACULDADE DE COMPUTAO DE MONTES CLAROS Professora: Nayara Mura de Souza - nayamsouza@gmail.com
Apostila Banco de Dados 4
Instrues DDL da Linguagem SQL
A fase que contempla a construo fsica de um banco de dados (criao e manuteno de suas tabelas) definida por um grupo de instrues da linguagem SQL denominada DDL (Data definition Language Linguagem de definio de dados), que permite criar (CREATE), alterar (ALTER) e excluir (DROP) objetos de um banco de dados.
Domnios (Domains)
Sem dvida, o domnio (domain) uma das grandes invenes criadas para um sistema de gerenciamento de banco de dados. Trata-se de um dicionrio de dados em que voc define campos customizados a serem usados pelas tabelas que comporo uma base de dados. Embora seu uso no seja obrigatrio, acostume-se a usa-los, pois so bastante teis quando vrias tabelas de um banco de dados utilizam um mesmo tipo de campo, como, por exemplo: CPF, nome, endereo, telefone, etc. Vamos supor que seu sistema possua quatro tabelas em que o campo CPF seja utilizado. Neste caso, ao criar cada uma dessas tabelas, seria altamente recomendvel ou at mesmo imprescindvel que o campo CPF tivesse as mesmas caractersticas em todas as tabelas em que ele aparecesse, evitando discrepncias entre as caractersticas, evitando assim, de ter que se lembrar delas, pois lembrar caractersticas algo que nunca ocorre, ou voc as pesquisa ou acaba inserindo caractersticas diferentes nas diversas tabelas que usam o CPF. Pelo que foi exposto at o presente momento, no fica difcil entender que domnios devem ser criados antes que as tabelas de um banco de dados sejam definidas.
FACULDADE DE COMPUTAO DE MONTES CLAROS Professora: Nayara Mura de Souza - nayamsouza@gmail.com
Apostila Banco de Dados 5
Na linguagem SQL, domnios so criados por intermdio da instruo CREATE DOMAIN. Sintaxe simplificada: CREATE DOMAIN <nome do domnio> AS <tipo de dado> [NOT NULL] [DEFAULT <valor default>] [CHECK (condio)
Em que: Nome do domnio: (uso obrigatrio) contendo no mximo 128 caracteres. Use sempre uma letra para o primeiro caractere, sendo que a partir do segundo caractere podem ser usados nmeros, letras, underscore (_), arroba (@) ou cifro ($). No permitido o uso de palavras reservadas ao SQL. Tipo de dado: (uso obrigatrio) respeite as regras definidas para os tipos de dados. NOT NULL: (uso facultativo) indica que o campo deve ser obrigatoriamente preenchido. DEFAULT: (uso facultativo) define um valor padro (default) inserido automaticamente no campo, quando nenhum outro valor for digitado. CHECK: (uso facultativo) define uma regra para limitar valores digitados em um campo.
Nota: As clusulas entre colchetes so opcionais e as que esto entre os smbolos menor (<) e maior que (>) devem ser substitudas pelos valores desejados.
Exemplos: CREATE DOMAIN dnome AS VARCHAR (70) NOT NULL CREATE DOMAIN ddata AS DATE DEFAULT NOW CREATE DOMAIN dpreco AS DECIMAL (12,2) CHECK (value > 0)
FACULDADE DE COMPUTAO DE MONTES CLAROS Professora: Nayara Mura de Souza - nayamsouza@gmail.com
Apostila Banco de Dados 6
Abrir o IB Expert e criar os domnios listados abaixo:
Nome Tipo Tamanho Restries Comentrios dcodigo Integer NOT NULL Usado para o armazenamento de cdigos de clientes, produtos, fornecedores, etc. Os nmeros inseridos neste campo no podem conter valores nulos. dnome Varchar 70 Usado para nome de clientes, fornecedores, ttulos de livros, etc. dcpf Char 14 Usado para armazenar nmeros de CPF com pontos e hfen. dtiporua Varchar 4 Usado para armazenar o tipo do logradouro, exemplo: Rua, Av, Prac, etc. dnomerua Varchar 30 Usado para armazenar o nome do logradouro. dnum Varchar 6 Usado para armazenar o nmero. dcidade Varchar 30 Usado para armazenar nomes de cidades. duf Char 2 Usado para armazenar unidades federativas. destado Varchar 30 Usado no armazenamento de nomes de estados. dcep Char 9 Usado para armazenar CEPs. dddd Char 3 Usado para armazenar o DDD de um telefone. dfone Char 13 Usado para armazenar nmeros de telefones. demail Varchar 60 Usado para armazenar e-mails. ddata Date Usado para armazenar datas. ddtatual Date now Usado no armazenamento de datas atuais, como, por exemplo, a data de incluso de um registro em uma tabela.
Sintaxe para criao: CREATE DOMAIN <nome do domnio> AS <tipo de dado> [NOT NULL] [DEFAULT <valor default>] [CHECK (condio)]
Sintaxe para alterao: ALTER DOMAIN <nome do domnio> TYPE <tipo de dado>
FACULDADE DE COMPUTAO DE MONTES CLAROS Professora: Nayara Mura de Souza - nayamsouza@gmail.com
Apostila Banco de Dados 7
Domnios so alterados por intermdio da instruo ALTER DOMAIN. Sintaxe: ALTER DOMAIN <nome do domnio> TYPE <tipo de dado>
Exemplo: ALTER DOMAIN dendereco TYPE VARCHAR (50); Altera o domnio dendereco para o tipo VARCHAR com 50 posies.
Como excluir domnios Do mesmo modo que voc altera domnios, tambm pode exclui-los de um banco de dados por intermdio da instruo DROP. Sintaxe: DROP DOMAIN <nome do domnio>
Exemplo: DROP DOMAIN demail;
Como criar tabelas
Na linguagem SQL, tabelas so criadas por intermdio da instruo CREATE TABLE. Sintaxe simplificada: CREATE TABLE <nome da tabela> <nome do campo> <tipo de dado> [NOT NULL] [DEFAULT <valor default>] [CHECK (condio)] [CONSTRAINT <nome da constraint> PRIMARY KEY <nome do campo>] [CONSTRAINT <nome da constraint> FOREIGN KEY <nome do campo> REFERENCES <nome da tabela pai> (<campo da tabela pai) ]: [ON UPDATE {CASCADE l NO ACTION}] [ON DELETE {CASCADE l NO ACTION}] Em que: Nome da tabela: (uso obrigatrio) contendo no mximo 128 caracteres. Use sempre uma letra par o primeiro caractere, sendo que a partir do segundo caractere podem ser usados nmeros, letras, underscore (_), arroba (@) ou cifro ($). No permitido o uso de palavras reservadas do SQL. Nome do campo: (uso obrigatrio) respeite as mesmas regras pra o nome de tabelas. Tipo de dado: (uso obrigatrio) respeite as regras definidas para os tipos de dados.
FACULDADE DE COMPUTAO DE MONTES CLAROS Professora: Nayara Mura de Souza - nayamsouza@gmail.com
Apostila Banco de Dados 8
NOT NULL: (uso facultativo) indica que o campo deve ser obrigatoriamente preenchido. DEFAULT: (uso facultativo) define um valor padro (default) inserido automaticamente no campo, quando nenhum outro valor for digitado. CHECK: (uso facultativo) define uma regra para limitar valores digitados em um campo. CONSTRAINT: (uso facultativo) define restries impostas tabela, garantindo sua integridade. PRIMARY KEY: (uso facultativo) define o campo que conter a chave primria de uma tabela. FOREIGN KEY: (uso facultativo) define se um determinado campo uma chave estrangeira. REFERENCES: (uso obrigatrio se FOREIGN for utilizado) estabelece o relacionamento do campo com a tabela pai. ON UPDATE: (uso facultativo se FOREIGN for utilizado) atualiza automaticamente os valores contidos no campo, caso o valor do campo relacionado com tabela pai seja alterado. A clusula NO ACTION (default) impede que esta atualizao seja feita automaticamente. Por ser uma clusula default, voc no obrigado a escrev-la. ON DELETE: ( de uso facultativo se FOREIGN for utilizado) exclui automaticamente os valores contidos no campo, caso o valor do campo relacionado com a tabela pai seja Excludo. A clusula NO ACTION (default) impede que esta excluso seja feita automaticamente. Por ser uma clusula default, voc no obrigado a escrev-la.
FACULDADE DE COMPUTAO DE MONTES CLAROS Professora: Nayara Mura de Souza - nayamsouza@gmail.com
Apostila Banco de Dados 9
Como alterar tabelas Quando uma tabela j estiver em seu banco de dados, qualquer alterao em sua estrutura deve ser executada por intermdio da instruo ALTER TABLE, sendo as seguintes alteraes possveis: Alterar nomes de campos; Adicionar novos campos; Excluir campos; Inserir novas restries ou alterar restries j existentes.
Para alterar a estrutura de uma tabela, a seguinte sintaxe simplificada deve ser usada: ALTER TABLE <nome da tabela> [ADD <nome do novo campo> <tipo do campo>] [NOT NULL] [ALTER <nome do campo> TYPE <tipo do campo>] [ALTER <nome do campo> TO <novo nome do campo>] [DROP <nome do campo a excluir>]
Em que: ADD: Adiciona um novo campo tabela; ALTER...TYPE: Altera o tipo de um campo; ALTER...TO: Altera o nome de um campo; DROP: Exclui um campo da tabela.
Exemplos: ALTER TABLE clientes ADD cpf CHAR (14) NOT NULL Insere na tabela clientes o campo de nome cpf do tipo CHAR de 14 posies, sendo que seus valores no podem ser nulos.
ALTER TABLE clientes DROP cpf Exclui o campo cpf da tabela.
ALTER TABLE fornecedores ALTER valor TYPE decimal (10,2) Altera o tipo do campo de nome valor para decimal (10,4)
ALTER TABLE fornecedores ALTER end TO endfor Altera o nome do campo end para endfor.
FACULDADE DE COMPUTAO DE MONTES CLAROS Professora: Nayara Mura de Souza - nayamsouza@gmail.com
Apostila Banco de Dados 10
Como excluir tabelas
Caso uma tabela no seja mais til ao banco de dados, ela pode ser excluda por intermdio da instruo DROP TABLE.
Sintaxe: DROP TABLE <nome da tabela>
Exemplo: DROP TABLE fornecedores Elimina a tabela fornecedores do banco de dados. Uma vez excluda uma tabela, voc no pode mais pode recuper-la, a menos que recupere o backup (cpia de segurana). Este assunto ser tratado oportunamente.
FACULDADE DE COMPUTAO DE MONTES CLAROS Professora: Nayara Mura de Souza - nayamsouza@gmail.com
Apostila Banco de Dados 11
Criao de Tabelas Abrir o IB Expert e criar as tabelas listadas abaixo:
Tabela ufs
Tabela atividades
Tabela areas
Tabela clientes
FACULDADE DE COMPUTAO DE MONTES CLAROS Professora: Nayara Mura de Souza - nayamsouza@gmail.com
Apostila Banco de Dados 12
Sintaxe: CREATE TABLE <nome da tabela> <nome do campo> <tipo de dado> [NOT NULL] [DEFAULT <valor default>] [CHECK (condio)] [CONSTRAINT <nome da constraint> PRIMARY KEY <nome do campo>] [CONSTRAINT <nome da constraint> FOREIGN KEY <nome do campo> REFERENCES <nome da tabela pai> (<campo da tabela pai) ]:
FACULDADE DE COMPUTAO DE MONTES CLAROS Professora: Nayara Mura de Souza - nayamsouza@gmail.com
Apostila Banco de Dados 13
Instrues DML da Linguagem SQL
As instrues DML permitem manipular dados contidos nas diversas tabelas que compem um banco de dados. Tais instrues se dividem em trs grupos, a saber: INSERT: permite inserir registros em uma tabela; UPDATE: efetua alteraes de dados em registros j existentes de uma tabela; DELETE: exclui registros de uma tabela.
A instruo Insert
Essa instruo tem por objetivo adicionar um registro a uma determinada tabela de um banco de dados, uma rotina largamente empregada na manuteno de qualquer base de dados. Imagine novos livros sendo inseridos ao acervo de uma editora, o cadastramento de novos clientes e fornecedores, etc. Sintaxe simplificada: INSERT INTO <nome_da_tabela> (campo_1, campo_2, ..., campo_n) VALUES (valor_campo_1, valor_campo_2, ..., valor_campo_n)
Em que: Campo_1, campo_2, campo_n correspondem aos nomes dos campos aos quais os dados sero acrescentados. valor_campo_1, valor_campo_2, valor_campo_n correspondem aos valores a serem inseridos nos campos especficos do novo registro. Cada valor inserido no campo que corresponde posio do valor na lista: valor_campo_ 1 inserido no campo_1 do novo registro, valor_campo_2 no campo_2I e assim sucessivamente. Voc deve separar os valores com uma vrgula e colocar os campos do tipo texto e data entre apstrofos ( ).
Exemplo: INSERT INTO Categorias (categoria) VALUES (Literatura) Insere na tabela Categorias um novo registro em que o campo categoria recebe o nome de Literatura. Para que um registro possa ser inserido em uma tabela, necessrio que o banco de dados esteja conectado.
FACULDADE DE COMPUTAO DE MONTES CLAROS Professora: Nayara Mura de Souza - nayamsouza@gmail.com
Apostila Banco de Dados 14
A instruo Update
Sintaxe: UPDATE <nome_da_tabela> SET <nome do campo> = <valor do campo> [WHERE condio]
Exemplos: UPDATE clientes SET fone = 1111-2432 WHERE idcli = 5612 Atualiza o telefone do cliente de nmero 5612 para 1111-2432
UPDATE funcionarios SET salrio = 7500.00 WHERE codcli = 5612 Atualiza o salrio do funcionrio de cdigo nmero 5612 para 7500.00, na tabela funcionrios. Em ambos os casos descritos, apenas um registro foi alvo do UPDATE. A instruo update tambm pode ser utilizada para alterar mais de um campo simultaneamente.
Sintaxe: UPDATE <nome_da_tabela> SET <nome do campo_1> = <valor_1>,[<nome do campo_2> = <valor_2>,] [<nome do campo_n> = <valor_n>] [WHERE condio] Mais de um registro tambm pode ser alterado simultaneamente: UPDATE clientes SET tiprua = Avenida WHERE tiprua = Av.
A instruo Delete
Sintaxe: DELETE FROM <nome_da_tabela> [WHERE condio]
Exemplos: DELETE FROM clientes exclui todos os registros da tabela clientes.
Instrues DQL (Linguagem de Consulta de Dados)
Sintaxe: SELECT * FROM <nome da tabela> Exemplo: SELECT * FROM Livros; SELECT <nome campo_1, nome campo_2, nome campo_n> FROM <nome da tabela>
FACULDADE DE COMPUTAO DE MONTES CLAROS Professora: Nayara Mura de Souza - nayamsouza@gmail.com
Apostila Banco de Dados 15
Exemplos: SELECT ttulo, autor, preco FROM Livros;
A clusula where
SELECT titulo, autor, preco FROM livros WHERE autor = Carlos Antonio;
LIKE
SELECT titulo, autor, preco FROM Livros WHERE titulo LIKE %SITE%; Retorna para a consulta os campos titulo, autor e preo, que contenham no ttulo a palavra SITE. SELECT titulo, autor, preco FROM livros WHERE titulo = Windows 2000; Retorna para a consulta os campos titulo, autor e preo, cujo ttulo seja igual a Windows 2000.
BETWEEN
SELECT titulo, autor, preo FROM livros WHERE preco BETWEEN 20.00 AND 50.00; Retorna para a consulta os campos titulo, autor e preo, cujo campo preco contenha valores compreendidos entre 20.00 e 50.00. Os seguintes operadores tambm podem ser utilizados em uma consulta: > (maior que), >= (maior ou igual a), < (menor que), <= (menor ou igual a), = (igual a) e <> (diferente).
Operadores lgicos:
SELECT titulo, autor, preo FROM Livros WHERE dtlanc >= 01/01/1980 Retorna para a consulta apenas os registros cujo campo dtlanc seja maior ou igual a 01/01/1980. SELECT titulo, autor, preo FROM Livros WHERE datapedido <> 05/03/2002 Retorna para a consulta apenas os registros cujo campo dataPedido seja diferente de 05/03/2002. Os operadores lgicos AND, OR, etc. tambm podem ser usados com a clusula WHERE.
UPPER
SELECT idcli, nomecli, telefone FROM clientes WHERE UPPER(nomecli) = UPPER (carlos pangratti) o WHERE case-sensitive, o que pode resultar em pesquisas incorretas pois voc nunca sabe exatamente como um determinado valor foi digitado. Para contornar este problema,
FACULDADE DE COMPUTAO DE MONTES CLAROS Professora: Nayara Mura de Souza - nayamsouza@gmail.com
Apostila Banco de Dados 16
podemos usar a funo UPPER, que tem por objetivo converter todos os caracteres minsculos em maisculos.
A clusula ORDER BY Exemplos: SELECT titulo, autor, preco FROM ivros ORDER BY preco asc