0% acharam este documento útil (0 voto)
20 visualizações49 páginas

Lingagem - SQL - 2024

O documento aborda a linguagem SQL, suas origens e evolução desde 1974, quando foi desenvolvida pela IBM. Ele detalha suas principais componentes, como DML, DDL e DAL, e fornece exemplos de tipos de dados e criação de tabelas, vistas e sinônimos. Além disso, discute a importância de restrições e triggers na gestão de bases de dados.

Enviado por

Clary Manuel
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
20 visualizações49 páginas

Lingagem - SQL - 2024

O documento aborda a linguagem SQL, suas origens e evolução desde 1974, quando foi desenvolvida pela IBM. Ele detalha suas principais componentes, como DML, DDL e DAL, e fornece exemplos de tipos de dados e criação de tabelas, vistas e sinônimos. Além disso, discute a importância de restrições e triggers na gestão de bases de dados.

Enviado por

Clary Manuel
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
Você está na página 1/ 49

GESTÃO DE BASE DE DADOS

LINGUAGEM SQL

Docente
Marcelino Teófilo Hiyelekwa
Contacto:938628292/912117701
E-mail: [email protected]
A LINGUAGEM SQL

 As raízes da linguagem SQL remotam a 1974,


altura em que a IBM desenvolvia um protótipo
de um sistema relacional, designado “System R”
 Simultaneamente foi desebvolvida uma
linguagem, designada SEQUEL, destinada a ser
utilizada nesse sistema e que mais tarde veio a
dar origem a linguagem SQL (Structured Query
Language)
 Em 1984 foi proposto a sua estandardização,
tendo o ANSI e a ISO criado grupos de trabalho
para o efeito.
A LINGUAGEM SQL(Cont.)
 A primeira verção-standard foi proposto em 1986,
com a designação SQL-86.

 Surgiram regularmente novas revisões SQO-98,


SQL-93 e está em preparação o lançamento de uma
nova, que incorporará características tipicamente
associadas à programação orientada por objectos.
 É uma linguagem de alto nível e disponibiliza formas
de interacção com múltiplos sistemas gestores de
base de dados.
A LINGUAGEM SQL(Cont.)
 A linguagem pode ser decomposta em três
grupos principais:
 DML – Data Manipulation Language
 DDL - Data Definition Language
 DAL – Data Administration Language
 DML – Conjunto de instruções que possibilitam a
manipulação da informação existente na base de
dados.
 Inserir Informação, Alterar, Eliminar e Consultar.
A LINGUAGEM SQL(Cont.)
 DDL – Conjunto de instruções que possibilitam a
definiçao da estrutura de BD.
 Criar objectos da BD, Alterar e Eliminar
 DAL – Conjunto de instruções que possibilitam a
definição da política de privilégios sobre a
informação existente numa base de dados.
 Gerir Utilizadores;
 Gerir permições sobre objectos da BD (tabelas, vistas,
funções e procedimentos etc...
DDL
 Alteração da Base de dados
 Criação, Alteração ou Eliminação de Objectos da BD
- CREATE;
- ALTER ;
- DROP.
 Tipos de dados:
- A especificação do domínio de cada atributo pode variar
consoante o SGBD onde é implementada a BD.
- O SQL em Oracle apresenta os seguintes tipos de dados:
VARCHAR2 (n)- Texto de comprimento variável com tamanho
máximo dimensionado por (n) cujo valor máximo é 4000 bytes.
Ex: VARCHAR2 (10) – permite inserir caracteres alfanuméricos até
um limite de 10 bytes.
DDL (Cont.)
CHAR[(n)] – Texto de comprimento fixo determinado por n
cujo valor máximo é 2000 bytes e cujo valor predefinido é
1 byte.
Ex: CHAR(10) – Reserva espaço para 10 caracteres
alfanuméricos.

NUMBER (p,s) – Valores Numéricos reais com sinal, de


precisão (p) e escala (s). A gama de valores de (p) e (s)
vai desde 1 até 38 e a gama de valores. Pode ser
declarado apenas com NUMBER, assumindo os valores
predefinidos de p=38 e s=0
Ex: NUMBER (3,2) – Regista valores entre -9,99 e +9,99
DDL (Cont.)
DATE – Regista informação sobre data e a hora
Tipo de Dados em MYSQL (1)
Tipos Inteiro

Tamanho
Data Type De Até
(Bytes)
TINYINT 1 -128 127
0 255
SMALLINT 2 -32768 32767
0 65535

MEDIUMINT 3 -8388608 8388607

0 16777215
INT 4 -2147483648 2147483647
0 4294967295

BIGINT 8 -9223372036854775808 9223372036854775807


Tipo de Dados em MySQL (2)
 Tipos Data

Data Type Format


DATETIME ''0000-00-00 00:00:00''
DATE ''0000-00-00''
TIMESTAMP ''0000-00-00 00:00:00''
TIME ''00:00:00''
YEAR 0000
Tipo de Dados em MySQL (3)
 Tipos String

Tamanho Tamanho
Value CHAR(4) VARCHAR(4)
(Bytes) (Bytes)
'''' '' '' 4 bytes '''' 1 byte
''ab'' ''ab '' 4 bytes ''ab'' 3 bytes
''abcd'' ''abcd'' 4 bytes ''abcd'' 5 bytes
''abcdefg
''abcd'' 4 bytes ''abcd'' 5 bytes
h''
Tipo de Dados em SQL Server (1)
 Numéricos exatos
 bigint
 numeric
 bit
 smallint
 decimal
 smallmoney
 int
 tinyint
 money
Tipo de Dados em SQL Server (2)
 Numéricos aproximados
 float
 real
 Data e hora
 date
 datetimeoffset
 datetime2
 smalldatetime
 datetime
 time
Tipo de Dados em SQL Server (3)
 Cadeias de caracteres
 char
 varchar
 text

 Cadeias de caracteres Unicode


 nchar
 nvarchar
 ntext

 Cadeia de caracteres binária


 binary
 varbinary
 imagem
SQL-DDL Criação

 Criação de Tabelas
CREATE TABLE <nome_tabela> (<Coluna 1> <Tipo>
[<Opções 1>],
<Coluna 2> <Tipo> [<Opção 2>],
<Coluna n> <Tipo> [<Opção n>],
[<Restrições de integridade>];
Ex: CREATE TABLE Alunos(
Numero NUMBER PRIMARY KEY,
Nome VARCHAR (80) NOT NULL,
Morada VARCHAR (80));
SQL-DDL Criação (Cont.)

CREATE TABLE Livros (


codigo NUMBER UNIQUE,
data_edicao DATE CHECK
(data_edicao BETWEEN
’01-Jan-70’ and
SYSDATE);
SQL-DDL Criação (Cont.)
 ON DELETE | INSERT |UPDATE <ACÇÂO>
 Estas clausulas servem para garantir a consistência da
informação na DB após a alteração de informação. Imagine-se o
seguinte esquema de relacionamento:
Duas relações (“Obra” e “Responsável”) para registar as obras em
curso por parte de uma empresa de construção, podendo cada
obra possuir entre 0 e n responsáveis.

obra Responsável
obra descricao local
123 predio Luanda 123 José
123 Rita
671 estrada K.Sul
671 Paulo
129 Saneamento Luanda
SQL-DDL Criação (Cont.)
 O que acontecera a informação da relação que
regista os responsáveis de cada obra, caso fossem
eliminados tuplas da relação que regista as obras em
andamento?

 Para resolver estas situações especifica-se na


criação da tabela que contém restrições de
referência (isto é, chave externas), o que se pretende
fazer em caso de alteração da informação na relação
referida.
SQL-DDL Criação (Cont.)
CREATE TABLE Encarregado(
CodObra NUMBER,
Encarregado VARCHAR (30),
CONSTRINT C1 PRIMARY KEY (CodObra,
Encarregado),
CONSTRINT C2 FOREIN KEY (CodObra)
REFERENCES Obra(CodObra)
ON UPDATE CASCADE
ON DELETE CASCADE;
SQL-DDL Criação (Cont.)
■ Com base na definição anterior, ao alterar informação na
tabela “Obra” vai-se efectuar a mesma operação na
relação “Responsável”. A este processo designa-se
operação em cascata.
■ Após a eliminação de uma tupla da relação “Obra”, todas
as tuplas da tabela “Responsável” que contivessem valor
para o atributo chave externa igual ao eliminado, vão
também ser eliminados.
■ Caso apenas seja alterada a tabela “Obra”, então o
código correspondente à chave externa vai também ser
actualizado em todas os tuplas necessários
SQL-DDL Rstrições
 Definição de Restrições
 Os exemplo atrás ilustrados mostram formas usuais de incluir
restrições na definição de relações
 Existe uma clausulo geral para esse fim: “CONSTRAINT”
 Serve para definir todos os tipos de restrições e atribuir a cada
uma delas um identificador
 CONSTRAINT <nome> Nome da restrição
 <ESPECIFICAÇÃO> Especificação da restrição . É aqui que se
define o seu tipo e conteúdo.
SQL-DDL Restrições (Cont.)
CREATE TABLE Inscricao_Turma (
CodAluno NUMBER NOT NULL,
CodDisciplina NUMBER NOT NULL,
CodTurma NUMBER NOT NULL,
Ano NUMBER,
Data DATE
CONSTRAINT chave_primario PRIMARY KEY
(Cod Aluno,CodDisciplina),
CONSTRAINT chave_ext_Disciplinas
FOREIGN KEY (CodDisciplina) REFERENCES
Disciplina(CodDisciplina)
ON UPDATE CASCADE ON DELETE CASCADE,
CONSTRAINT chave_ext_alunos
FOREIGN KEY (CodAluno) REFERENCES Aluno (CodAluno)
ON UPDATE CASCADE ON DELETE CASCADE,
CONSTRAINT valor_ano CHEK Ano>0);
SQL-DDL Vistas
 Ao Contrário das tabelas, que são entidades onde os
dados estão Realmente (fisicamente) armazenados, as
“views” são, como o próprio nome indica, perspectivas
de parcelas da BD, reflectindo o seu conteúdo apenas
o estado momentâneo de cada uma das tabelas fonte
de informação. C D
CREATE c1 d1
VIEW AS.. c2 d2
A C D
c3 d3
a1 c1 d1
A B C
a2 c2 d2
a1 b1 c1
Existência Lógica
a2 b2 c2
SQL-DDL Vistas (Cont.)
 Criação de Vistas
CREATE [OR REPLACE] [FORCE ]VIEW <nome_vista>
AS
SELECT <campo 1>, <campo 2>, campo n>
FROM <tabela 1>, <tabela 2>, <tabela n>
WHERE <condição> AND <condição>;

OR REPLACE – Permite alterar uma vista já existente com o


mesmo nome.
FORCE – Leva a cabo a criação da vista, mesmo que o comando
SELECT esteja errado (não sintacticamente) quando à
existência ou validade dos objectos a que faz referência.
Por predefinição, nunca é feito o FORCE.
SQL-DDL Vistas (Cont.)
 Uma vista pode incluir todas ou apenas algumas colunas
de uma ou mais tabelas base.
 Uma vista pode também ser baseada em outras vistas
ou numa combinação de vistas e tabelas.

 EX: CREATE VIEW livros_req AS


SELECT nome, morada
FROM req, leitor
WHERE req.lei = leitor.cod AND data_e =NULLDATE;
SQL-DDL Vistas (Cont.)
 A definição de cada “view” é armazenada no dicionário
de dados e o seu conteúdo calculado sempre que esta se
encontrar referida nalgum bloco SQL.
 Para o nível aplicacional esta é uma operação
completamente transparente, uma vez que uma vista se
comporta perante o “SELECT” exactamente como uma
tabela.
Ex: SELECT numero, nome
FROM vista_nova
WHERE numero > 100;
SQL-DDL Vistas (Cont.)
 Algumas das vantagens tipicamente associadas à
utilização de vistas são:

 Restringir o acesso à BD, mostrando (filtrando) apenas


parte dos dados.
 Simplificar a consulta dos dados, substituindo consultas
complexas (sobre várias tabelas) por consultas directas a
uma vista.
 Permitir que os mesmos dados sejam visualizados de
diferentes formas por diferentes utilizadores.
SQL-DDL Vistas (Cont.)
 Podemos ver as vistas como seleções de informação
pré-definidas e potencialmente residentes no SGBD, por
forma a optimizar consultas bastante frequentes e/ou
computacionalmente bastante exigentes.

 A sua utilização torna-se imprescindível, especialmente


em projectos de maior dimensão e em situações onde o
tempo de resposta constitui um factor importante.
SQL-DDL Sinónimos
 Um sinónimo é uma espécie de nome alternativo para
um objecto da BD.
 No caso de uma tabela, pode ser criado um sinónimo
para cada tabela que tinha o nome muito grande, desse
modo simplificando o acesso a essa tabela.
 O exemplo mais flagrante da criação de sinónimos sobre
tabelas é no caso de existirem vários utilizadores que
acedem às tabelas de um mesmo utilizador da BD.
 Os sinónimos podem ser privados (ao nível do mesmo
utilizador) ou públicos (para todos os utilizadores) e os
objectos que admitem a sua criação são os seguintes:
 Tabelas, Vistas, Sequências Procedimento da Base, Função da
Base, Pacote, Sinónimo e Snapshot
SQL-DDL Sinónimos
 Criação
CREATE [PUBLIC] SYNONYM <nome_do_sinonimo> FOR
[<nome_do_esquema>] <nome_do_objecto>
[ @<database_link>];
 Sinónimo Privado exemplo
CREATE SYNONYM exemplo FOR tabela_nome_grande;

 Sinonimo Publico para um sinónimo privada


CREATE PUBLIC SYNONYM novo FOR M.exemplo;
SQL-DDL Sequências
 A sequência é um objecto da BD que gera
automaticamente números inteiros sequenciais, que não
se repetem.
 Os números extraídos das sequências podem ser
atribuídos a colunas de tabelas.
 As colunas candidatas a receberem valores das
sequências, são colunas com restrições PRIMARY KEY
ou UNIQUE KEY
 A maior vantagem desta abordagem, face a outros SGBD
que optam por criar um tipo de dados que se incrementa
a cada novo registo inserido, é o facto de a sequência ser
um objecto independente da tabela e, portanto, possível
de ser partilhado por várias tabelas.
SQL-DDL Sequências (Cont.)
 A sintaxe para a criação de uma sequência é a seguinte:
CREATE SEQUENCE <nome_da_sequência>
[INCREMENT BY n]
[START WITH n]
[{MAXVALUE n | NOMAXVALUE}]
[{MINVALUE n | NOMINVALUE}]
[{CYCLE | NOCYCLE}]
[{CACHE n | NOCACHE}];
EX: CREATE SEQUENCE Livro_SEQ
INCREMENT BY 10
START WITH 10
MAXVALUE 1000
NOCYCLE
CACHE 5;
SQL-DDL Triggers
 Um trigger é um procedimento SQL que inicia uma acção,
ao ocorrer determinado evento (inserção, alteração ou
remoção)
 São guardados e administrados directamente pelo SGBD,
pelo que não é possível efectuar a sua chamada ou
pedido de execução.
 Cabe ao SGBD a execução automática do trigger, sempre
que o evento que lhe esta associado ocorrer.
 São utilizados para manter a consistência (integridade
referencial) dos dados.
 Cada trigger está associado a uma tabela da BD.
SQL-DDL Triggers (Cont.)
 A sintaxe para a criação de um trigger é a seguinte:
CREATE [OR REPLACE] TRIGGER <nome_trigger> ON <tabela>
FOR <acção>
AS
<Bloco_SQL>
Acção – pode ser INSERT, UPDATE ou DELETE
EX: CREATE TRIGGER atualiza ON directorio
FOR INSERT
AS
INSERT INTO Dir_Update (directorio_id, update_date)
SELECT MAX(directorio_id AS directorio_id Date()
FROM directorio;
SQL-DDL Alteração
 Alterção de tabelas
 A alteração de tabelas de uma BD pode ser feita
exclusivamente de duas formas:
- Adição de colunas (atributos)
- Eliminação de colunas (atributos)
 Sintaxe
ALTER TABLE <nome_tabela>
{[ADD COLUMN <nome_coluna> <tipo> estrições]]
ou [DROP COLUMN <nome_coluna>]}
Ex: ALTER TABLE Aluno
DROP COLUMN Nome;
ALTER TABLE Aluno
ADD COLUMN Idade INTEGER
CHECK IDADE>0;
SQL-DDL Alteração (Cont.)
 Alteração de uma Sequência
 Sintaxe
ALTER SEQUENCE <nome_da_Sequência>
[INCREMENT BY n]
[{MAXVALUE n | NOMAXVALUE}]
[{MINVALUE n | NOMINVALUE}]
[{CYCLE | NOCYCLE}]
[{CACHE n | NOCACHE}];
EX: ALTER SEQUENCE livro_SEQ
MAXVALUE 8000
NOCACHE;
SQL-DDL- Eliminação
 Eliminação de Tabelas
DROP TABLE <nome_tabela>;
EX: DROP TABLE Aluno
■ Eliminação de Vistas
DROP VIEW <nome-vista>
EX: DROP VIEW nova_vista;
■ Eliminação de Sinónimos
DROP [PUBLIC] SYNONYM <nome_sinónimo>;
Ex: DROP PUBLIC SYNONYM Aluno;
■ Eliminação de Sequências
DROP SEQUENCE Livro_SEQ;
SQL-DML
 Ao nível das linguagens de manipulação de dados o SQL
possui instruções que se podem dividir em dois grupos.
 Consulta de informação da BD (SELECT)
 Alteração de informação da BD (INSERT, UPDATE, DELETE).
SELECT
- Da sua execução resultam, no fundo, as vantagens associadas às BD:
facilidade e integridade no acesso e pesquisa de informação em
grande volume de dados. O seu protótipo é o seguinte:
SELECT <colunas>
FROM <tabelas>
[WHERE <condição1>]
[{AND | OR} <condição n];
SQL-DML(Cont.)
 Selecção de todas as colunas
SELECT * FROM Livros;

 Selecção de colunas pelo seu nome


SELECT codigo, titulo FROM Livros;

 Selecção de colunas e expressões


SELECT titulo, preco_req * 2 FROM Livros;

 Selecção de uma expressão com ALIAS


SELECT titulo, preco_req * 2 “Dobro do Preço”
FROM Livros
SQL-DML(Cont.)
Operadores de Conjuntos
 Existem quatro operadores de conjunto que permitem
manusear o resultado dos comandos de SELECT:
- UNION
- UNION ALL
- MINUS
- INTERSECT
 Exemplo de Utilização do Operador de Conjunto UNION:
SELECT codigo, titulo FROM livro
WHERE codigo BETWEEN 10 AND 20
UNION
SELECT codigo, titulo FROM Livro
WHERE codigo BETWEEN 20 AND 30;
SQL-DML(Cont.)
 INSERT
 Serve para inserir novas tuplos (linhas) nas relações (tabelas)
INSERT INTO <tabela> [<coluna>]
VALUES (<valores>)
 Inserir os dados referentes a um novo aluno especificando as colunas
destino
INSERT INTO Alunos (numero, nome, morada)
VALUES (1234, “Rita Duarte”, “Rua da Liberdade”);
 Inserir os dados sem especificação das colunas
INSERT INTO Socio
VALUES (5, “Guilherme Guerreiro”, “M”);
 Inserção de várias linhas usando Subquery
ALTER TABLE Socio DISABLE PRIMARY KEY;
INSERT INTO Socio (SELECT * FROM Socio);
SQL-DML(Cont.)
 UPDATE
UPDATE <nome_da_tabela> [ALIAS]
SET <nome_colunas 1=<novo_valores 1 | subquery>
[ WHERE <condição>]
[ RETURNING <valores> INTO <variáveis>];
Actualização de uma coluna para um linha
UPDATE Socio
SET nome = “Eva Maria dos Santos”
WHERE nome = “Eva Maria”
 Actualização de uma coluna para várias linhas
UPDATE Livros
SET nome = ROUND (preco_req/200.482,50)
WHERE UPPER (divisa) = “KWZ”;
SQL-DML(Cont.)
 DELETE
DELETE [FROM] <nome_da_tabela>
[ WHERE <condição>];
 Eliminar todos os tuplos da relação “Docente”
DELETE FROM Docente;
 Eliminar todos os tuplos da relação “Docente” com nome começando
por “B”.
DELETE FROM Docente
WHERE nome LIKE “B%”;
 Eliminar todos os tuplos da relação Aluno que nunca realizaram
nehuma prova
DELETE FROM Aluno
WHERE codAluno NOT IN (SELECT DISTINCT codAluno FROM Nota;
SQL-DML(Cont.)
■ ORDENAÇÂO
 Para ordenar os resultados de uma pesquisa utiliza-se a cláusulo
ORDER BY.
- Por omissão, a ordenação é efectuada de forma crescente, caso
desejemos inverter a ordem tem que se acrescentar “DESC”

Exemplo:
SELECT *
FROM Cliente
ORDER BY idade DESC
SQL-DML(Cont.)
 O SQL incorpora um conjunto de operadores
destinados a facilitar algumas das operações
matemáticas mais usuais.
- COUNT() – Conta o número de instâncias de uma relção;
- MAX() – Devolve o valor máximo de um atributo num conjunto de
instâncias;
- MIN() – Devolve o valor mínimo de um atributo num conjunto de
instâncias;
- AVG() Devolve o valor médio de um atributo num conjunto de
instâncias;
- SUM() – Soma um atributo num conjunto de instâncias
SQL-DML(Cont.)
 Contar o número de alunos existente
SELECT COUNT (*) AS TOTAL
FROM Aluno;

 Qual a nota máxima alcançada à disciplina de


“Àlebra” ?
SELECT MAX(Nota) AS Maximo
FROM Nota, Disciplina
WHERE CodDisciplina = CodDisciplina
AND Descricao 0”ALgebra”;
SQL-DML(Cont.)
 Listar a nota média das disciplinas para as quais já foram
realizadas mais de 100 provas.
SELECT CodDisciplina, AVG (Nota) AS MEDIA
FROM Nota
GROUP BY CodDisciplina
HAVING COUNT(*) > 100;
 Apresentar a nota máxima dos alunos que têm média superior a
15
SELECT CodAluno, MAX(Nota) AS Maximo
FROM Nota
GROUP BY CodAluno
HAVING AVG(Nota) > 15;
SQL-DML(Cont.)
 Psquisa de Padrões
- É possível pesquisar informação com base em
padrões, através do operador “LIKE”
- Ex: Seleccionar o código e nome de todos os
docentes cujo nome comece por J.
SELECT CodDocente, Nome
FROM Docente
WHERE Nome LIKE “J%”;
% - Qualquer ocorrência de qualquer caractér.
* Uma ocorrência de qualquer caractér
SQL-DML(Cont.)
 Sub-Blocos
- É Possível encadear vários blocos SQL, normalmente através da
clausula IN (EXISTS, NOT IN, NOT EXISTS)
- Qual o nome dos alunos que nunca fizeram nenhuma prova a
“Algebra” ?
SELECT Nome
FROM Aluno
WHERE Numero NOT IN (
SELECT DISTINCT CodAluno
FROM Nota, Disciplina
WHERE N.CodDisciplina=DCodDisciplina
AND D.Descricao = “Algebra”);
SQL-DML(Cont.)
 ROUND (n[,m]) – Arredonda o valor n em m casas à
direita se m>0 ou à esquerda se m<0.
SELECT ROUND (76.89) FROM DUAL;

 TRUNC (n[,m]) – Trunca o valor n em m casas à


direita se m>0 ou à esquerda se m<0.
SELECT TRUNC (76.89, -2) from DUAL;
 MONTHS
 SYSDATE
 UPPER (c1)
 SUBSTR (c1,m[,n])
 LTRIM (c1[conj])
 RTRIM (c1[,conj])

Você também pode gostar