Escolar Documentos
Profissional Documentos
Cultura Documentos
pg 1 de 19
APOSTILA NR 07 - SQL
1. INTRODUO
A SQL, Structured Query Language (ou Linguagem de Consulta Estruturada), a linguagem
padro para acesso a bancos de dados relacionais. aceita por quase todos os produtos existentes no
mercado. Foi desenvolvida no incio da dcada de 1970, nos laboratrios da IBM. Inicialmente, foi
chamada de SEQUEL; posteriormente seu nome foi alterado para SQL.
Em 1982, o American National Standard Institute (ANSI) tornou a SQL padro oficial de
linguagem em ambiente relacional.
Aps sofrer algumas alteraes, a SQL passou a ter capacidade de ser utilizada em linguagens
hospedeiras, tais como: COBOL, FORTRAN, C, JAVA, DELPH, VISUAL BASIC, PHP, etc. Dessa
forma, programas aplicativos (front-end) passaram a ser desenvolvidos e implementados com o uso da
linguagem SQL embutida. As solicitaes ao banco de dados so feitas por meio da SQL
independentemente da linguagem utilizada pelo aplicativo.
DBA/SQL Plus
Aplicao
Usurio/Aplicao
SQL
Rede corporativa
SQ L
Aplicao
Desenvolvedor
Banco
de Dados
2. A LINGUAGEM SQL
A linguagem SQL possui dois grandes grupos de instrues: DDL (Data Definition Language) e
DML (Data Manipulation Language).
A DDL permite ao usurio a definio da estrutura e organizao dos dados armazenados e,
tambm, a relao entre eles.
A DML permite ao usurio a manipulao dos dados (inserir, alterar e apagar) e a consulta aos
mesmos.
Podemos, ainda, considerar uma terceira categoria:DCL (Data Control Language). Esta permite
atribuir privilgios de acesso ao banco de dados.
Apostila de SQL.....................................................................................................pg 2 de 19
DDL
DML
DCL
CREATE
ALTER
DROP
RENAME
SELECT
INSERT
UPDATE
DELETE
GRANT
Criar
Alterar
Eliminar
Renomear
Consultar dados
Inserir dados
Modificar dados
Eliminar dados
Segurana quanto a acesso
3. TIPOS DE DADOS
Em nosso curso utilizaremos o SGBD Oracle. Vamos acess-lo por meio de sua interface
nativa: o SQL/PLUS.
Os principais tipos de dados que utilizaremos so:
DATE Os dados sempre sero armazenados com sculo, ano, ms, dia, hora, minuto e
segundo.
Apostila de SQL.....................................................................................................pg 3 de 19
SQL> CREATE TABLE cliente
2 (CodClinte
3
Nome
4
Ident
5
End
6
Tel
Number(8),
Varchar2(80),
Varchar2(11),
Varchar2(50),
Varchar2(12));
Tabela criada.
Tipo
------------NUMBER(8)
VARCHAR2(80)
VARCHAR2(11)
VARCHAR2(50)
VARCHAR2(12)
Apostila de SQL.....................................................................................................pg 4 de 19
Tabela criada.
SQL> CREATE TABLE cliente
2 (CodClinte
3
Nome
4
Ident
5
End
6
Tel
Tabela criada.
4.3.2 UNIQUE
Define uma ou mais colunas que no podem ter valor repetido em mais de uma linha da
tabela.
EXEMPLO:
SQL>
2
3
4
5
6
Tabela criada.
Apostila de SQL.....................................................................................................pg 5 de 19
Tabela criada.
SQL> DESC CLIENTE
Nome
----------------------------------------CODCLINTE
NOME
IDENT
END
TEL
Nulo?
-------NOT NULL
NOT NULL
NOT NULL
NOT NULL
Tipo
------------NUMBER(8)
VARCHAR2(80)
VARCHAR2(11)
VARCHAR2(50)
VARCHAR2(12)
Apostila de SQL.....................................................................................................pg 6 de 19
Tabela criada.
4.3.5. CHECK
Define um conjunto de valores permitidos ou condies para insero de valores em uma
determinada coluna.
EXEMPLO:
SQL>
2
3
4
5
6
7
Tabela criada.
Apostila de SQL.....................................................................................................pg 7 de 19
ALTER TABLE
MODIFY (coluna
Tipo
--------------NUMBER(4)
VARCHAR2(50)
DATE
VARCHAR2(11)
CLIENTE
tipo de dado);
Exemplo:
SQL> ALTER TABLE cliente
2 MODIFY (END
VARCHAR2(60));
Tabela alterada.
SQL> DESC CLIENTE
Nome
Nulo?
----------------------------------------- -------COD_CLIENTE
END
DATA_NASC
CPF
Tipo
-----------NUMBER(4)
VARCHAR2(60)
DATE
VARCHAR2(11)
4.4.2.Eliminando coluna
ALTER TABLE (nome da tabela)
DROP COLUMN (nome da cluna);
Exemplo:
Tipo
----------------NUMBER(4)
DATE
VARCHAR2(11)
Apostila de SQL.....................................................................................................pg 8 de 19
4.4.3.Incluindo restries
Tipo
------------NUMBER(4)
DATE
VARCHAR2(11)
Apostila de SQL.....................................................................................................pg 9 de 19
5. COMANDOS DML (DATA MANIPULATION LANGUAGE)
5.1 INSERIR LINHAS EM TABELAS
Para incluir dados em uma tabela pode-se, ou no, incluir valores em todas as suas colunas(caso
no sejam obrigatrias). Este procedimento realizado com o comando INSERT.
A relao de colunas poder ser omitida quando forem includos valores para todas as colunas
dessa tabela. Neste caso, os valores sero atribudos s colunas na seqncia em que as mesmas se
apresentam na tabela (esta ordem pode ser verificada com o comando Desc). No aconselhvel o uso
de comandos de incluso com omisso da lista de colunas dentro de aplicaes em geral, pois, sempre
que a estrutura da tabela for alterada, a aplicao tambm sofrer alteraes, mesmo que seja a incluso
de campos com valores nulos.
COMANDO SQL:
INSERT INTO nome da tabela
[ (nome da coluna [,nome da coluna])]
VALUES
(valor da coluna [,valor da coluna])
EXEMPLOS:
Explicitando as colunas
SQL>
2
3
4
1 linha criada.
SQL>
2
3
4
1 linha criada.
No explicitando as colunas
SQL> INSERT INTO CLIENTE
2 VALUES
3 ('4','JANAINA','FE','638-9976');
1 linha criada.
Utilizando sequncia:
SQL> create table cliente2
2 (cod_cliente number(4),
3 nome
varchar2(30));
Apostila de SQL.....................................................................................................pg 10 de 19
Tabela criada.
SQL> INSERT INTO cliente2
2 VALUES
3 (cliente_cod_cliente.NEXTVAL,'MARIA');
1 linha criada.
SQL> INSERT INTO cliente2
2 VALUES
3 (cliente_cod_cliente.NEXTVAL,'juca');
1 linha criada.
SQL> INSERT INTO cliente2
2 VALUES
3 (cliente_cod_cliente.NEXTVAL,'PAULO');
1 linha criada.
SQL> SELECT * FROM CLIENTE2;
COD_CLIENTE
----------1
2
3
NOME
-----------------------------MARIA
juca
PAULO
SELECT *
FROM prof.aluno;
CODCLIENTE
---------1
2
3
NOME
--------------MARA
JUCA
CLAUDECIR
4 CLARA
IDENT
--------------76702
76809
087872
END
NOTA
-------------------- ---------RUA DA GLORIA NR 75
9,4
RUA DOS PATOS NR 95
5,4
RUA ESPIRITO SAGRADO
7,4
NR 875
73789
RUA DA GLORIA NR 95
8,7
Apostila de SQL.....................................................................................................pg 11 de 19
SQL> SELECT nome, nota
2 FROM prof.aluno;
NOME
NOTA
--------------- ---------MARA
9,4
JUCA
5,4
CLAUDECIR
7,4
CLARA
8,7
SELECIONOU SOMENTE AS COLUNAS NOME E NOTA
Exemplos
SQL> SELECT *
2 FROM prof.aluno
3 WHERE nome='MARA';
CODCLIENTE NOME
IDENT
END
NOTA
---------- --------------- --------------- -------------------- ---------1 MARA
76702
RUA DA GLORIA NR 75
9,4
Apostila de SQL.....................................................................................................pg 12 de 19
NOME
NOTA
--------------- ---------MARA
9,4
CLARA
8,7
AND
OR
NOT
e lgico
ou lgico
negao
Listar na tabela PROF.DISCIPLINA os cursos com carga horria maior que 50 e cujos professores
sejam aqueles de cdigo 1
SQL>
select *
2
from prof.disciplina
3
where carga_horaria > 50
4 and cod_professor =1;
COD_DISCIPLINA
-------------1
2
_ substitui um caractere
Exemplo: LAPIS% pode enxergar os seguintes registros
LAPIS PRETO
LAPIS CERA
LAPIS BORRACHA
Apostila de SQL.....................................................................................................pg 13 de 19
Listar todos os professores cujos nomes iniciam com a letra J
SQL>
2
3
select *
from professor
where nome_professor like 'J%';
COD_PROFESSOR
------------3
4
NOME_PROFESSOR
-------------------JANA
JULIANA
TITULACAO
--------------BACHAREL
MESTRE
select *
from professor
where nome_professor not like 'J%';
COD_PROFESSOR
------------1
2
NOME_PROFESSOR
-------------------LUIZ
MIRANDA
TITULACAO
--------------MESTRE
DOUTOR
Operadores IN e NOT IN
Esses operadores listam registros que esto ou no contidos no conjunto de valores fornecidos.
Estes operadores minimizam o uso dos operadores =, <>, and e or.
Listar todos os professores que sejam mestres ou doutores
SQL> select *
2 from professor
3 where titulacao in ('MESTRE','DOUTOR');
COD_PROFESSOR
------------1
2
4
NOME_PROFESSOR
-------------------LUIZ
MIRANDA
JULIANA
TITULACAO
----------MESTRE
DOUTOR
MESTRE
select *
from professor
where titulacao not in ('MESTRE','DOUTOR');
COD_PROFESSOR NOME_PROFESSOR
TITULACAO
------------- -------------------- -------------3 JANA
BACHAREL
Apostila de SQL.....................................................................................................pg 14 de 19
A utilizao do valor nulo (NULL) muito problemtica, pois cada implementao da
linguagem pode adotar qualquer representao para valor nulo
Listar todos os professores que no possuam titulao
SQL> select *
2 from professor
3 where titulacao is null;
no h linhas selecionadas
NOME_PROFESSOR
-------------------LUIZ
MIRANDA
JANA
JULIANA
TITULACAO
--------------MESTRE
DOUTOR
BACHAREL
MESTRE
TITULACAO
--------------MESTRE
MESTRE
DOUTOR
DOUTOR
MESTRE
Apostila de SQL.....................................................................................................pg 15 de 19
SQL> select d.nome_disciplina, p.nome_professor
2 from disciplina d, professor p
3 where d.cod_professor=p.cod_professor;
NOME_DISCIPLINA
--------------BANCO DE DADOS
ESTRUTURA DADOS
MATEMATICA
ESTATISTICA
ECONOMIA
NOME_PROFESSOR
-------------------LUIZ
LUIZ
MIRANDA
MIRANDA
JULIANA
NOME_DISCIPLINA
--------------MATEMATICA
ESTATISTICA
NOME_PROFESSOR
-------------------MIRANDA
MIRANDA
EXERCCIOS
Exerccio 01 : Crie as tabelas do estudo de caso videolocadora, seus relacionamentos, restries de
integridade, insira dados e execute consultas nas mesmas
A seguir, como parte da resposta, a criao das tabelas cliente, alocao, fita e filme
SQL> CREATE TABLE cliente
2 (CodCliente
NUMBER(5) PRIMARY KEY,
3
Nome
VARCHAR2(30) NOT NULL,
4
Ident
VARCHAR2(15) UNIQUE NOT NULL,
5
End
VARCHAR2(30) NOT NULL,
6
Tel
VARCHAR2(13) );
Tabela criada.
SQL> CREATE TABLE fita
2 (CodFita
NUMBER(5) PRIMARY KEY,
3
Fab
VARCHAR2(20) NOT NULL,
4
CodFilme
NUMBER(5) NOT NULL);
Tabela criada.
SQL> CREATE TABLE alocacao
2 (CodCliente
NUMBER(5) ,
3
CodFita
NUMBER(5) ,
4
DataLoc
Date not null,
Apostila de SQL.....................................................................................................pg 16 de 19
5
6
7
8
9
10
11
12
13
14
DataDevPrev
DATE NOT NULL,
DataDevReal
DATE NOT NULL,
CONSTRAINT ALOC_PK
PRIMARY KEY (CodCliente,CodFita),
CONSTRAINT
ALOC_FK_CLI
FOREIGN KEY (CodCliente)
REFERENCES
cliente(CodCliente),
CONSTRAINT
ALOC_FK_FITA
FOREIGN KEY (CodFita)
REFERENCES
FITA(CodFita) );
Tabela criada.
SQL> CREATE TABLE filme
2 (CodFilme
NUMBER(5) PRIMARY KEY,
3
Titulo
VARCHAR2(20) NOT NULL,
4
Dur
VARCHAR2(6) NOT NULL,
5
IdiomaOrig
VARCHAR2(10),
6
Categoria
VARCHAR2(10) NOT NULL,
7
CONSTRAINT
FILME_CK_CAT
8
CHECK (cATEGORIA in ('ROMANCE','SUSPENCE','POLICIAL','AO')));
Tabela criada.
SQL> ALTER TABLE fita
2 ADD (CONSTRAINT fit_fk_codfilme
3
FOREIGN KEY (CodFilme)
4
REFERENCES filme(CodFilme));
Tabela alterada.
TABLE
TABLE
TABLE
TABLE
TABLE
TABLE
Apostila de SQL.....................................................................................................pg 17 de 19
DURACAO
IDIOMA_ORIG
CATEGORIA
Apostila de SQL.....................................................................................................pg 18 de 19
INSERT INTO FILME
VALUES
(02,'DURO DE MATAR','02H40M','INGLES','AO');
INSERT INTO FILME
VALUES
(03,'UMA LINDA MULHER','01H35M','INGLES','AO');
INSERT INTO ATOR
VALUES
(01,'VIVIEN LIGH','IRLANDES');
INSERT INTO ATOR
VALUES
(02,'CLARCK GABLE','AMERICANO');
INSERT INTO ATOR
VALUES
(03,'JULIA ROBERTS','AMERICANO');
INSERT INTO ATOR
VALUES
(04,'BRUCE WILLYS','AMERICANO');
INSERT INTO ATUACAO
VALUES
(01,01);
INSERT INTO ATUACAO
VALUES
(01,02);
INSERT INTO ATUACAO
VALUES
(02,04);
INSERT INTO ATUACAO
VALUES
(03,03);
EXERCCIO NR 02 : Dados os modelos conceitual e lgico abaixo, crie as tabelas no banco de dados.
No esquea de criar, tambm todas as restries de integridade necessrias.
Apostila de SQL.....................................................................................................pg 19 de 19
DER:
Nome
Cod_aluno
Nome_discipli
na
Nota(0,1)
Cod_disciplina
ALUNO
(0,n)
CURSA
(1,n)
DISCIPLINA
Carga_horaria
CPF
(0,n)
MINISTRA
(1,1)
Nome_professor
PROFESSOR
Cod_professor
titulao(0,1)
Modelo Lgico:
PROFESSOR(Cd_Professor, Nome_prof(NN), titulao(NN))
DISCIPLINA(Cd_Dsiciplina, Nome_disciplina(NN), Carga_horria(NN), Cod_professor(FK,NN))
Cd_Professor referencia PROFESSOR
ALUNO (Cd_Aluno, Nome_Aluno(NN), CPF (NN,U))
CURSA (Cod_Aluno(FK), Cd_disciplina(FK), Nota )
Cd_aluno referencia ALUNO
Cd_Disciplina referencia DISCIPLINA