Banco de dados - Linguagem SQL

Propaganda
Banco de dados
Linguagem SQL
Prof. Emerson Ribeiro de Mello
Instituto Federal de Santa Catarina – IFSC
campus São José
[email protected]
http://docente.ifsc.edu.br/mello/bcd
06 de março de 2017
1/16
Abordagem relacional: Restrição de integridade
Princı́pio fundamental de um SGBD é a manutenção da integridade dos
dados
Dados refletem corretamente a realidade representada pelo BD e são
consistentes entre si
Integridade de domı́nio
Valor de um campo deve respeitar a definição de valores permitidos
Integridade de vazio
Indica se os valores de uma coluna podem ou não ser vazios (NULL)
Integridade de chave
Valores das chaves primárias devem ser únicos
Integridade referencial
Valores que aparecem uma chave estrangeira devem aparecer na chave
primária da tabela referenciada
2/16
Structured Query Language – SQL
Desenvolvida dentro da IBM na década de 70, sendo hoje a mais usada
em SGBD relacional
Baseada em álgebra relacional, permite:
definição e controle de acesso aos dados; manipulação de dados
Existem padrões ANSI e ISO, porém um código SQL geralmente não é
portável e pequenos ajustes são necessários para cada SGBD
SQL-86, SQL-89, SQL-92
SQL:1999, SQL:2003, SQL:2008, SQL:2011
3/16
Linguagem SQL é
Data Definition Language – DDL
Especificação do esquema relacional
Cria, altera, exclui tabelas
Data Manipulation Language – DML
Consulta, insere, modifica e exclui tuplas das tabelas
A linguagem não é sensı́vel a caixa (alta ou baixa)
Ex: CREATE, create
4/16
Data Definition Language – DDL
Linguagem para especificação do esquema ou estrutura do banco de
dados
Compilador gera um conjunto de tabelas em um conjunto de arquivos
denominados dicionário de dados
A DDL permite a especificação de:
Tabelas
Domı́nio dos valores permitidos para cada atributo
Restrições de integridade
Índices, controle de acesso, estrutura fı́sica das tabelas no disco
5/16
Data Definition Language – DDL
Linguagem para especificação do esquema ou estrutura do banco de
dados
Compilador gera um conjunto de tabelas em um conjunto de arquivos
denominados dicionário de dados
A DDL permite a especificação de:
Tabelas
Domı́nio dos valores permitidos para cada atributo
Restrições de integridade
Índices, controle de acesso, estrutura fı́sica das tabelas no disco
Os próximos exemplos são válidos para o MySQL 5.7
5/16
Alguns tipos de domı́nio
Tipo
CHAR(M)
VARCHAR(M)
BINARY(M)
SMALLINT(M)
INT(M)
BIGINT(M)
FLOAT(M,D)
DOUBLE(M,D)
BOOLEAN
Descrição
Cadeia de caracteres de tamanho fixo. 0 ≥ M ≤ 255
Cadeia de caracteres de tamanho variável. 0 ≥ M ≤
65.535. UTF-8 requer 3 bytes por caracter, então tamanho máximo de 21.844
Equivalente ao CHAR, porém armazena string de forma
binária ao invés de caracteres
Inteiro de −32.768 a 32.767
Inteiro de −2.147.483.648 a 2.147.483.648
Inteiro
de
−9.223.372.036.854.775.808
a
9.223.372.036.854.775.807
Real sendo M o total de dı́gitos para a parte inteira e D
o total de digital para a parte decimal
Float com o dobro de precisão
Tipo booleano (TRUE ou FALSE)
6/16
Criando tabelas
https://dev.mysql.com/doc/refman/5.7/en/create-table.html
Esquema de uma tabela – nome da tabela, atributos e seus tipos de
domı́nio
1
2
3
4
CREATE TABLE Aluno(
matricula INT,
nome VARCHAR(80),
email VARCHAR(80));
7/16
Criando tabelas
https://dev.mysql.com/doc/refman/5.7/en/create-table.html
Esquema de uma tabela – nome da tabela, atributos e seus tipos de
domı́nio
10
11
12
13
CREATE TABLE Aluno(
matricula INT,
nome VARCHAR(80),
email VARCHAR(80));
Campo matrı́cula como chave primária e seu valor incrementado
automaticamente para cada nova tupla inserida na tabela
14
15
16
17
18
CREATE TABLE Aluno(
matricula INT NOT NULL AUTO_INCREMENT,
nome VARCHAR(80),
email VARCHAR(80),
PRIMARY KEY (matricula));
7/16
Criando tabelas
Nome das colunas não precisam fazer referência ao nome da tabela
Ex: nomeAluno, emailAluno
Para a chave primária é desejado que faça referência ao nome da tabela,
pois esse campo poderá ser chave estrangeira em outra tabela
Ex: matriculaAluno
8/16
Apagando e alterando tabelas
Apagando
19
DROP TABLE Aluno;
Alterando
20
ALTER TABLE Aluno ADD COLUMN tel INT;
21
22
ALTER TABLE Aluno CHANGE COLUMN tel telefone VARCHAR(40);
23
24
ALTER TABLE Aluno MODIFY COLUMN telefone VARCHAR(25);
25
26
ALTER TABLE Aluno DROP COLUMN telefone;
9/16
Data Manipulation Language – DML
Permite acessar ou manipular dados no banco de dados
https://dev.mysql.com/doc/refman/5.7/en/non-typed-operators.html
Operador
AND , &&
OR , ||
NOT , !
!= , <>
>, >=
<, <=
=
:=
LIKE
IS [NOT] NULL
BETWEEN ...AND ...
Descrição
E lógico
OU lógico
Negação
Diferente
Maior, maior ou igual
Menor, menor ou igual
Atribuição para as instruções SET e UPDATE;
igualdade para os demais contextos
Atribuição
Busca por padrão
Se [não] é NULO
Valor dentro de uma faixa
10/16
Data Manipulation Language – DML
Permite acessar ou manipular dados no banco de dados
Inserindo
27
28
INSERT INTO Aluno (nome, email, telefone)
VALUES ('Joao', '[email protected]', '48-1234');
Apagando todas as linhas da tabela
29
DELETE FROM Aluno;
Atualizando valores de todas as linhas da tabela
30
UPDATE Aluno SET curso := 'Telecomunicaç~
oes';
11/16
SELECT – consulta SQL (query)
Resultado de uma consulta SQL é uma tabela
31
32
33
SELECT A1, A2, ..., An
FROM T1, T2, ..., Tn
WHERE P
A – Atributo
T – Tabela
P – predicado da consulta
Recuperando todas as colunas e linhas uma tabela
34
SELECT * FROM Aluno;
Recuperando as colunas nome e email de todas as linhas
35
SELECT nome, email FROM Aluno;
Recuperando todas disciplinas cursadas por um aluno e removendo
duplicatas
36
SELECT DISTINCT disciplina FROM Aluno;
12/16
SELECT
Recuperando todos os dados de todos os alunos do curso de
Telecomunicações e que moram em São José
37
38
SELECT * FROM Aluno
WHERE curso = 'Telecomunicaç~
oes' AND cidade = 'S~
ao José';
Todos funcionários com salário maior que R$ 1.000,00
39
40
SELECT * FROM Funcionarios
WHERE salario > 1000
Usando operadores aritméticos
41
SELECT 5 * 2 AS resultado;
42
43
SELECT horaExtra * valorHora * 2 as valorHE FROM funcionario;
13/16
SELECT
Ordenando o resultado
44
45
SELECT * FROM Aluno
ORDER BY nome, matricula;
Buscando por padrões em cadeias de caracteres
% – qualquer substring
– qualquer caracter
46
SELECT * FROM Aluno WHERE nome LIKE 'Jo~
ao%';
47
48
SELECT * FROM Aluno WHERE nome LIKE '%Silva%';
49
50
SELECT * FROM Aluno WHERE nome LIKE 'Jo_o %';
14/16
SELECT
Funções de agregação
Valor médio (AVG), mı́nimo (MIN), máximo (MAX), soma (SUM), total
(COUNT)
51
SELECT COUNT(*) as totalAlunos FROM Aluno;
52
53
SELECT AVG(salario) from Funcionario;
Com exceção do COUNT, todos os demais ignoram tuplas que tenham o
valor NULL nos atributos agregados
GROUP BY – Obtendo salário médio dos funcionários por departamento
54
55
SELECT departamento, AVG(salario) from Funcionario
GROUP BY departamento;
Atributos na instrução SELECT que estejam fora das funções de agregação
devem obrigatoriamente aparecer na lista do GROUP BY
15/16
SELECT
Obtendo nomes dos departamentos cujo salário médio de seus
funcionários seja maior que 1000
56
57
58
SELECT departamento, AVG(salario) from Funcionario
GROUP BY departamento
HAVING AVG(salario) > 1000;
Retornando no máximo as 100 primeiras linhas
59
60
SELECT nome FROM Aluno LIMIT 100;
SELECT nome FROM Aluno LIMIT 0,100;
Retornando no máximo 20 linhas a partir da linha 100
61
SELECT nome FROM Aluno LIMIT 100,20;
16/16
Download