Вы находитесь на странице: 1из 66

BIG DATA E DATA SCIENCE:

PARTE 3

Gerenciamento de Bancos de
Dados com o SQL

TALITHA FAUSTINO SPERANZA

Ncleo de Mtodos Estatsticos e Computacionais

1
ROTEIRO DA AULA
1. Motivao
2. Database Management Systems
Funes
Diagramas Entidade-Relacionamento
Bancos de Dados Relacionais
Opes no Mercado
3. Introduo ao SQL
Linguagens de Programao No-Procedurais
Vantagens de Utilizar SQL
4. Comandos SQL
Criao de Bancos e Tabelas
Preenchimento de Tabelas
Alterao e Remoo de Tabelas
5. Utilizao do MySQL Workbench
6. Integrao do MySQL com o R
7. Exerccios
2
MOTIVAO
O qu vamos estudar?
Bancos de Dados Relacionais
Conjunto de tabelas interligadas e pertencentes a
um mesmo campo semntico

3
MOTIVAO
O qu vamos estudar?

Database Management Systems


Softwares que tornam os processos de busca, armazenamento
e carregamento dos bancos de dados transparentes para o
usurio.

4
MOTIVAO
O qu vamos estudar?

SQL (Structured Query Language)


Linguagem de programao simples, projetada para
executar as funes fundamentais dos DBMSs.

5
MOTIVAO
Por qu vamos estudar?
BDs relacionais, DBMSs e SQL so peas fundamentais do
mundo dos softwares direcionados ao processamento e anlise
de dados.

So conhecimentos indispensveis a qualquer cientista de


dados.

6
MOTIVAO
Por qu vamos estudar?

SQL: Pr-requisito para aplicaes em NoSQL

SGBDs possuem caractersticas desejveis para


manipulao de grandes massas de dados:
Persistncia
Compartilhamento
Representao de Interrelaes
Agilidade

7
DATABASE MANAGEMENT SYSTEMS
Funes
MANUTENO
ACESSO AOS DADOS atualizao
recuperao formatao
CRIAO DE BASES
aquisio
organizao disseminao
armazenamento

Pergunta:
Qual a diferena entre um DBMS e um processador de texto ou
um gerenciador de planilhas?

8
DATABASE MANAGEMENT SYSTEMS
Funes

Resposta:
No caso dos DBMSs necessrio planejamento antes de criar
as estruturas de armazenamento de dados. A forma como
estes dados se relacionam deve ser corretamente modelada.
Isso interessante porque
1) Facilita o acesso por parte do pesquisador
2) Agiliza a busca pela mquina
3) Assegura a integridade e consistncia dos dados

Mas como podemos construir esses modelos?

9
DATABASE MANAGEMENT SYSTEMS
Diagramas ER

Atravs de Diagramas
Entidade-Relacionamento
(ER)

importante que estes


diagramas sejam produzidos
antes de montar a base no DBMS.

10
DATABASE MANAGEMENT SYSTEMS
Diagramas ER

A exigncia destes modelos


prvios no um exagero.

Diagramas ER muito simples so


exceo. Ainda mais no mundo
do Big Data.

Vamos examin-los
mais de perto.

11
DATABASE MANAGEMENT SYSTEMS
Diagramas ER
Suponha que voc queira montar uma base de
dados para o seu blog. As tabelas poderiam ser:
nome da exemplos de
tabela Autores colunas
nome, sobrenome, apelido

Categorias Posts Tags


nome, sobrenome, apelido ttulo, texto, data, configs nome, sobrenome, apelido

Comentrios Usurios
usurio, data nome, sobrenome, apelido

12
DATABASE MANAGEMENT SYSTEMS
Diagramas ER

Faltam muitas informaes sobre as relaes!

Cardinalidade? Autores Direo?


nome, sobrenome, apelido

Categorias Posts Tags


nome, sobrenome, apelido ttulo, texto, data, etc nome, sobrenome, apelido

Posts
relacionados? Comentrios Usurios
usurio, data nome, sobrenome, apelido

13
blog_post no existe sem blog_author

blog_comment no existe sem blog_post

blog_tag no existe sem blog_post


1
N
N

PRIMARY KEY

FOREIGN KEY

Diagrama ER

14
DATABASE MANAGEMENT SYSTEMS
Bancos de Dados Relacionais

Como representamos estas relaes nas tabelas em si?

Foreign Key (chave


estrageira)
Primary Key (chave
primria)
title article author

Lorem Ipsum Praesent commodo 2


felis et odio (...) id first_name last_name

Dolor Sit Nam et dui euismod, 1 1 Joo Silva


pretium erat (...) 2 Maria Santos
Donec vulputate In pharetra erat in 1
purus convallis (...)

Maecenas orci Praesent tristique at 2


libero ac (...)

15
DATABASE MANAGEMENT SYSTEMS
Principais opes no mercado

SQL Server
(Microsoft)

Oracle

PostgreSQL

MySQL NOSSA
(Oracle) OPO

16
DATABASE MANAGEMENT SYSTEMS
Por qu usaremos o MySQL?
SQL Server:
- Excelente sistema de clusters e de partio de dados
- Compatvel com o padro ANSI/SQL
- No Open Source
- A verso gratuita limita o tamanho das bases em 4GB

Oracle:
- Mesmas vantagens do SQL Server
- No Open Source
- A verso gratuita limita o tamanho das bases em 11GB

17
DATABASE MANAGEMENT SYSTEMS
Por qu usaremos o MySQL?
PostgreSQL
- Considerado o SGBD Open Source mais avanado do mercado.
- Amplamente extensvel
- Pode ter performance pior que o MySQL em aplicaes que dependem
somente de operaes de leitura.

MySQL:
- Vantagem sobre o PostgreSQL em operaes de leitura. POPULAR

- Gratuito/Open Source GIL

- Conta com o suporte da gigante Oracle ESCALVEL

GRATUITO
- Maior comunidade de usurios
INTEGRVEL AO R

18
SQL
Structured Query Language

Linguagem de programao de domnio especfico e no


procedural.
Padro da indstria (loose standard) para fazer interface com
todas a funes bsicas dos DBMSs.

Somente as partes mais fundamentais das declaraes em


SQL funcionam em todos os DBMSs - h inmeras extenses.
H diversas funes extras nos DBMSs, mas elas no so
portveis como os comandos SQL.
Diagramas

19
SQL
Structured Query Language
Linguagens no procedurais no requerem muitos
conhecimentos de programao.
Apenas a especificao de QUAIS estruturas sero acessadas
necessria. No preciso dizer COMO o acesso ser executado.
Diminui o nmero de linhas de cdigo em DUAS ordens de
grandeza!
No necessrio escrever loops ou condies (if, for, while)

Para aplicaes intensivas em dados, o ganho


em produtividade e qualidade incalculvel

20
SQL
Structured Query Language

Observaes:

H outra forma de fazer acessos no procedurais: atravs da


interface grfica.
Depende do DBMS, ou seja, no portvel.

As linguagens no procedurais so limitadas e no oferecem,


muitas vezes, o nvel de controle desejado.

Transact-SQL (Microsoft), PL/SQL (Oracle)

21
COMANDOS SQL
Criao de uma base de dados

obrigatrio
user-defined

CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name

alternativas
opcional

-- CRIANDO A BASE DE DADOS 'COMPANY'


CREATE SCHEMA company ;

22
COMANDOS SQL
Criao de tabelas

Criaremos duas Nm. Cadeia de


inteiro Caracteres
tabelas da base
company no MySQL
Workbench, usando DEPT_ID DEPT_NAME

SQL, passo a passo 1 Contabilidade


TABELA
DEPARTMENT

A coluna DEPT_ID 2 Marketing

contm o identificador
nico (primary key) de 3 Vendas
cada linha (cada
departamento)

23
COMANDOS SQL
Criao de tabelas
Nm. Cadeia de Nm. Nm. Nm.
inteiro Caracteres inteiro real inteiro

EMP_ID EMP_NAME EMP_AGE EMP_SALARY DEPT_ID

TABELA EMPLOYEE
1 Joo 23 10000 1

2 Maria 24 7000 2

A coluna EMP_ID
contm o identificador 3 Jos 25 8000 3

nico (primary key) de


cada linha (cada 4 Ana 27 6000 1
empregado)
5 Antnio 28 5000 2

24
COMANDOS SQL
Criao de tabelas
Chave estrangeira
(foreign key)
EMP_ID EMP_NAME EMP_AGE EMP_SALARY DEPT_ID

Chave primria
1 Joo 23 10000 1
(primary key)

2 Maria 24 7000 2 DEPT_ID DEPT_NAME

3 Jos 25 8000 3 1 Contabilidade

4 Ana 27 6000 1 2 Marketing

5 Antnio 28 5000 2 3 Vendas

TABELA EMPLOYEE TABELA DEPARTMENT


Ateno: No necessrio
que as duas chaves
tenham o mesmo nome.

25
COMANDOS SQL
Criao de tabelas

CREATE TABLE <table-name> ( <column-list> [<constraint-list>] )

Em <column-list> definimos TIPOS, que podem ser:


CHAR(L) DECIMAL(I,P)
VARCHAR(L) DATE
INTEGER DATETIME
FLOAT(P) TIMESTAMP

26
COMANDOS SQL
Criao de tabelas

CREATE TABLE <table-name> ( <column-list> [<constraint-list>] )

<contraint-list> contm RESTRIES, tais como:


PRIMARY KEY NOT NULL
UNIQUE CHECK
FOREIGN KEY

27
COMANDOS SQL
Criao de tabelas

CREATE TABLE <table-name> ( <column-list> [<constraint-list>] )

-- CRIANDO A TABELA Department


CREATE TABLE company.Department(dept_id integer,
dept_name varchar(100) not null,
CONSTRAINT DeptPK PRIMARY KEY (dept_id));

28
COMANDOS SQL
Criao de tabelas

CREATE TABLE <table-name> ( <column-list> [<constraint-list>] )

-- CRIANDO A TABELA Employee


CREATE TABLE company.Employee (emp_id integer,
emp_name varchar(100) not null,
emp_age integer,
emp_salary float not null,
dept_id integer,
CONSTRAINT EmployeePK PRIMARY KEY (emp_id),
CONSTRAINT EmployeeFK
FOREIGN KEY (dept_id) REFERENCES Department(dept_id));

29
COMANDOS SQL
Preenchimento de Tabelas

INSERT [INTO] tbl_name [(col_name,...)]


{VALUES | VALUE}

-- Inserir linha [ 15 30 ] nas colunas 1 e 2


INSERT INTO tbl_name (col1,col2) VALUES(15,col1*2);

-- Inserir linhas [ 1 2 3 ], [ 4 5 6 ], [ 7 8 9 ] nas colunas a, b, c


INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);

30
COMANDOS SQL
Preenchimento de Tabelas

INSERT [INTO] tbl_name [(col_name,...)]


{VALUES | VALUE}

INSERT INTO company.Department (dept_name, dept_id)


VALUES ("Contabilidade",1),
("Marketing",2),
("Vendas",3);

INSERT INTO company.Employee (emp_id, emp_name, emp_age, emp_salary, dept_id)


VALUES(1,"Joo",23,10000.00,1),
(2,"Maria",24,7000.00,2),
(3,"Jos",25,8000.00,3),
(4,"Ana",27,6000,1),
(5,"Antnio",28,5000,2);

31
COMANDOS SQL
Preenchimento de Tabelas
INSERT um comando lento. Ele averigua se todos os valores da
linha esto consistentes, isto , no violam nenhuma restrio de
integridade. Caso algum viole, nenhum valor inserido na linha.
Em seu wizard de importao, o Workbench executa um INSERT
por linha do arquivo de dados. um processo bastante demorado
e, caso o arquivo esteja corrompido em algum ponto, as linhas no
corrompidas sero importadas de qualquer forma, deixando a
tabela inconsistente.
Para poupar tempo e evitar importar dados de arquivos
corrompidos, usamos o comando LOAD DATA. Ele no utiliza
INSERT e no importa nenhuma linha caso o arquivo tenha
problemas.
32
COMANDOS SQL
Preenchimento de Tabelas

parmetro opcional, mas TEM que ser usado caso se esteja


lendo um arquivo da sua prpria mquina (nosso caso)

LOAD DATA [LOCAL] INFILE 'file_name'


INTO TABLE tbl_name
[{FIELDS | COLUMNS} [TERMINATED BY 'string'] [[OPTIONALLY]
ENCLOSED BY 'char']
[ESCAPED BY 'char'] ]
[LINES [STARTING BY 'string'] [TERMINATED BY 'string']]
[IGNORE number {LINES | ROWS}]
CUIDADO!
As aspas so importantes

33
COMANDOS SQL
Preenchimento de Tabelas

LOAD DATA [LOCAL] INFILE 'file_name' {...}


Suponha que voc tenha um arquivo
contendo os dados ao lado. Uma tabela valor moeda
com as colunas "valor" e "moeda" j foi
30.25 AUD
criada no MySQL, mas est vazia e ser
preenchida com os valores do arquivo, 59.60 US$
que segue as seguintes regras de sintaxe: 653.39 R$
# -> nova linha 426.52 AUD
$ -> separao de campos 3.2 US$
" " -> contm cadeias de caracteres 54.05 R$
\ -> caracter de escape

34
COMANDOS SQL
Preenchimento de Tabelas

LOAD DATA [LOCAL] INFILE 'file_name' {...}

#arquivo de dados genrico


#as regras de sintaxe no seguem
qualquer padro oficial
# LOAD DATA LOCAL INFILE "caminho\\para\\arquivo"
#valor$moeda INTO TABLE nome_da_tabela
#30.25$"AUD" FIELDS TERMINATED BY '$'
#59.60$"US\$" ENCLOSED BY '"'
#653.39$"R\$" ESCAPED BY "\\"
#426.52$"AUD" LINES STARTING BY '#'
#3.2$"US\$" IGNORE 4 LINES;
#54.05$"R\$"

35
COMANDOS SQL
Preenchimento de Tabelas

LOAD DATA [LOCAL] INFILE 'file_name' {...}


Seu arquivo poderia ser um .csv, como \n -> nova linha
abaixo. Nesse caso, as regras de sintaxe , -> separador de campos (colunas)
so outras:
" " -> contm cadeias de caracteres
arquivo .csv padro\n
valor,moeda\n LOAD DATA LOCAL INFILE "caminho\\para\\arquivo"
30.25,"AUD"\n INTO TABLE nome_da_tabela
59.60,"US$"\n FIELDS TERMINATED BY ','
653.39,"R$"\n ENCLOSED BY '"'
426.52,"AUD"\n LINES TERMINATED BY '\n'
3.2,"US$"\n IGNORE 2 LINES;
54.05,"R$"\n

36
COMANDOS SQL
Consulta aos dados
Para fazer buscas no banco, utilizamos o comando SELECT. Suas vrias
clusulas sero examinadas uma a uma.

SELECT [ DISTINCT | *] [AS alias]


[FROM table_names
[WHERE where_condition]
[GROUP BY {col_name} [ASC | DESC], ...]
[ORDER BY {col_name} [ASC | DESC], ...]
[INTO OUTFILE 'file_name']
H mais clusulas alm de WHERE, GROUP BY, ORDER BY e INTO
OUTFILE, mas essas so certamente as mais usadas.

37
COMANDOS SQL
Consulta aos dados

SELECT [ DISTINCT | *] {...}

-- CONSULTAR TODAS AS LINHAS SELECT * FROM Department


SELECT * FROM Employee

EMP_ID EMP_NAME EMP_AGE EMP_SALARY DEPT_ID DEPT_ID DEPT_NAME

1 Joo 23 10000 1
1 Contabilidade

2 Maria 24 7000 2
2 Marketing
3 Jos 25 8000 3

3 Vendas
4 Ana 27 6000 1

5 Antnio 28 5000 2

38
COMANDOS SQL
Consulta aos dados

SELECT [ DISTINCT | *] {...}


WHERE e AS

Quem so os empregados SELECT EMP_NAME AS NAME, EMP_AGE AS AGE


com mais de 25 anos? FROM company.Employee
WHERE EMP_AGE > 25;
Quantos anos eles tm?

NAME AGE Enquanto SELECT filtra


colunas, WHERE filtra linhas.
Ana 27

Antnio 28

39
COMANDOS SQL
Consulta aos dados

SELECT [ DISTINCT | *] {...}


WHERE e AS

Quem so os SELECT EMP_NAME


empregados cujo nome FROM company.Employee
WHERE EMP_NAME LIKE 'J%'
comea com a letra J?

EMP_NAME O caracter '%' chamado de


wildcard. Indica que qualquer
Joo
cadeia de caracteres pode
Jos entrar em seu lugar.

40
COMANDOS SQL
Consulta aos dados

SELECT [ DISTINCT | *] {...}


WHERE e AS

A qual departamento pertence


cada empregado?
SELECT e.EMP_NAME, d.DEPT_NAME
FROM company.Employee e, company.Department d
WHERE e.DEPT_ID = d.DEPT_ID;

Para entender esta consulta, precisamos ter em


mente a ordem em que o MySQL avalia comandos
deste tipo.

41
COMANDOS SQL
Consulta aos dados

SELECT [ DISTINCT | *] {...}

Ordem de Avaliao de uma Query

Operaes Operaes Resultados


de Linha de Grupo
ORDER BY
FROM GROUP BY
SELECT
WHERE HAVING

42
COMANDOS SQL
Consulta aos dados
FROM company.Employee e, company.Department d
WHERE e.DEPT_ID = d.DEPT_ID

EMP_ID EMP_NAME EMP_AGE EMP_SALARY DEPT_ID DEPT_ID DEPT_NAME

1 Joo 23 10000 1 1 Contabilidade

2 Maria 24 7000 2 2 Marketing

3 Jos 25 8000 3 3 Vendas

4 Ana 27 6000 1
SELECT e.EMP_NAME, d.DEPT_NAME

5 Antnio 28 5000 2

43
COMANDOS SQL
Consulta aos dados

SELECT [ DISTINCT | *] {...}


WHERE e AS

EMP_NAME DEPT_NAME SELECT e.EMP_NAME, d.DEPT_NAME


FROM company.Employee e, company.Department d
WHERE e.DEPT_ID = d.DEPT_ID;
Joo Contabilidade

Ana Contabilidade

Maria Marketing Agora sabemos dizer


a qual departamento
Antnio Marketing
pertence cada
Jos Vendas empregado.

44
COMANDOS SQL
Consulta aos dados

SELECT [ DISTINCT | *] {...} GROUP BY

Qual a quantidade de empregados


em cada departamento?
SELECT d.DEPT_NAME, count(e.EMP_NAME) as NUM_EMPLOYEE
FROM company.Employee e, company.Department d
WHERE e.DEPT_ID = d.DEPT_ID
GROUP BY d.DEPT_NAME ;

45
COMANDOS SQL
Consulta aos dados

SELECT [ DISTINCT | *] {...} GROUP BY

EMP_ID EMP_NAME EMP_AGE EMP_SALARY DEPT_ID DEPT_ID DEPT_NAME

1 Joo 23 10000 1 1 Contabilidade

2 Maria 24 7000 2 2 Marketing

3 Jos 25 8000 3 3 Vendas

4 Ana 27 6000 1 FROM company.Employee e,


company.Department d
WHERE e.DEPT_ID = d.DEPT_ID
5 Antnio 28 5000 2

46
COMANDOS SQL
Consulta aos dados

SELECT [ DISTINCT | *] {...} GROUP BY

EMP_ID EMP_NAME EMP_AGE EMP_SALARY DEPT_NAME

1 Joo 23 10000 Contabilidade

2 Maria 24 7000 Marketing

GROUP BY d.DEPT_NAME ;
3 Jos 25 8000 Vendas

4 Ana 27 6000 Contabilidade

5 Antnio 28 5000 Marketing

47
COMANDOS SQL
Consulta aos dados

SELECT [ DISTINCT | *] {...} GROUP BY

EMP_NAME DEPT_NAME

Joo Contabilidade

Ana Contabilidade 2
Maria Marketing 2 SELECT d.DEPT_NAME,
count(e.EMP_NAME) as NUM_EMPLOYEE

Antnio Marketing 1
Jos Vendas

48
COMANDOS SQL
Consulta aos dados

SELECT [ DISTINCT | *] {...} GROUP BY

DEPT_NAME NUM_EMPLOYEE SELECT d.DEPT_NAME,


count(e.EMP_NAME) as NUM_EMPLOYEE
Contabilidade 2 FROM company.Employee e, company.Department d
WHERE e.DEPT_ID = d.DEPT_ID
Marketing 2 GROUP BY d.DEPT_NAME ;

Vendas 1

Agora sabemos dizer a


quantidade de empregados
em cada departamento.

49
COMANDOS SQL
Consulta aos dados

Funes de agregao: GROUP BY


AVG() - mdia
COUNT() - nmero de linhas
FIRST() - primeiro valor
LAST() - ltimo valor
MAX() - valor mximo
MIN() - valor mnimo
SUM() - soma dos valores
Todas as colunas que no aparecerem nas funes de
agregao devem ser includas na clusula GROUP BY

50
COMANDOS SQL
Consulta aos dados

SELECT [ DISTINCT | *] {...} GROUP BY

Qual a mdia dos salrios dos empregados


que ganham mais de 5000, por departamento?

SELECT d.DEPT_NAME,
count(e.EMP_NAME) as NUM_EMPLOYEE,
avg(e.EMP_SALARY) as AVG_SALARY
FROM Employee e, Department d
WHERE e.DEPT_ID=d.DEPT_ID AND EMP_SALARY > 5000
GROUP BY d.DEPT_NAME;

51
COMANDOS SQL
Consulta aos dados

SELECT [ DISTINCT | *] {...} GROUP BY

DEPT_NAME NUM_EMPLOYEE AVG_SALARY

Accounting 1 8000 Apenas Antnio, que trabalha no


Marketing, no entra na conta, pois
Marketing 1 7000
ganha exatamente 5000.
Sales 2 8000

SELECT d.DEPT_NAME, count(e.EMP_NAME) as NUM_EMPLOYEE, avg(e.EMP_SALARY) as AVG_SALARY


FROM Employee e, Department d
WHERE e.DEPT_ID=d.DEPT_ID AND EMP_SALARY > 5000
GROUP BY d.DEPT_NAME;

52
COMANDOS SQL
Consulta aos dados

SELECT [ DISTINCT | *] {...} ORDER BY

Qual o salrio de cada EMP_NAME EMP_SALARY


empregado, ordenado do mais
Antnio 5000
baixo para o mais alto?
Ana 6000
SELECT EMP_NAME, EMP_SALARY
FROM company.Employee Maria 7000
ORDER BY EMP_SALARY ASC ;
Jos 8000

Joo 10000

53
COMANDOS SQL
Consulta aos dados

SELECT [ DISTINCT | *] {...} ORDER BY

Qual o salrio mdio de cada DEPT_NAME AVG_SALARY

departamento, ordenado do Marketing 6000


mais baixo para o mais alto?
Vendas 8000

Contabilidade 8000
SELECT d.DEPT_NAME, avg(e.EMP_SALARY) as AVG_SALARY
FROM company.Employee e, company.Department d
WHERE e.DEPT_ID = d.DEPT_ID
GROUP BY d.DEPT_NAME
ORDER BY AVG_SALARY ASC;

54
COMANDOS SQL
Modificao de Tabelas
ALTER TABLE tbl_name
ADD [COLUMN] (col_name column_definition,...)
[FIRST | AFTER col_name ]
| ADD [CONSTRAINT [symbol]] PRIMARY KEY (col_name,...)
| ADD [CONSTRAINT [symbol]] FOREIGN KEY (col_name,...)
[REFERENCES] reference_definition
| MODIFY [COLUMN] col_name column_definition
[FIRST | AFTER col_name]
| DROP [COLUMN] col_name
| DROP PRIMARY KEY
| DROP FOREIGN KEY fk_symbol

55
COMANDOS SQL
Modificao de Tabelas

ALTER TABLE tbl_name (...)

Queremos adicionar mais uma informao


tabela de empregados: o gnero.
ALTER TABLE company.Employee
ADD COLUMN (emp_gender varchar(10));

ALTER TABLE company.Employee


MODIFY COLUMN emp_gender char(1) ;

Aps definir o tipo da coluna, mudamos de ideia e


alteramos para um tipo de tamanho fixo.

56
COMANDOS SQL
Modificao de Tabelas

UPDATE table_name
SET col_name1= expr [, col_name2 = expr2 ] ...
[WHERE where_condition]
[ORDER BY ...]
[LIMIT row_count]

UPDATE company.Employee SET emp_gender = 'M'


WHERE emp_name = 'Joo' OR emp_name = 'Jos' OR emp_name ='Antnio' ;

UPDATE company.Employee SET emp_gender = 'F'


WHERE emp_name = 'Maria' OR emp_name = 'Ana' ;

57
COMANDOS SQL
Modificao de Tabelas

DELETE FROM tbl_name


[WHERE where_condition]
[ORDER BY ...]
[LIMIT row_count]

Error Code: 1451. Cannot delete or update


DELETE FROM company.Department a parent row: a foreign key constraint fails
WHERE dept_id = 1 ; (`company`.`employee`, CONSTRAINT `EmployeeFK`
FOREIGN KEY (`dept_id`) REFERENCES `department`
(`dept_id`))

No conseguimos deletar a linha da tabela Department,


porque existe uma chave estrangeira apontando para ela!

58
COMANDOS SQL
Remoo de Tabelas e Bases

DROP [IF EXISTS] TABLE table_name


DROP TABLE company.Employee ;

DROP [IF EXISTS] DATABASE database_name


DROP DATABASE company ;

59
INTEGRAO COM O R

1. Criar um usurio e uma senha para a base

2. Procurar o nome do host no MySQL:


SHOW VARIABLES WHERE Variable_name = 'hostname';

3. Instalar o pacote RMySQL e carreg-lo:


install.packages('RMySQL')
library(RMySQL)

60
INTEGRAO COM O R
4. Estabelecer a conexo com a base:
conn = dbConnect(MySQL(), db = "wdi", user = "wdiuser",
password = 'wdiuser', host = "Talitha-PC", port=3306)

5. Fazer uma consulta CountryCode


1 ABW
results <- dbGetQuery(conn, "select CountryCode from Country") 2 ADO
3 AFG
head(results) 4 AGO
5 ALB
6 ARB
6. Desconectar
dbDisconnect(conn)

61
REFERNCIAS

Manual de Referncia do MySQL:


http://dev.mysql.com/doc/refman/5.7/en/sql-syntax.html
Bassil, Youssef. A Comparative Study on the Performance of the
Top DBMS Systems. Journal of Computer Science & Research
(JCSCR). Vol. 1, No. 1. Fevereiro de 2012.
Elmasri, Ramez; Navathe, Shamkant B. Sistemas de Bancos de
Dados. 4a Edio. Pearson Education. So Paulo, 2005.

62
INSTRUES/FAQ
Lista 1
1. Onde esto os arquivos .csv que devem ser carregados para a base Titanic? No
Dropbox, em Big Data\Banco de Dados\Data Management\Titanic.

2. Onde estes arquivos devem ser colocados? Algumas verses do MySQL Workbench s
aceitam ler arquivos que estejam em C:\ProgramData\MySQL\MySQL Server 5.7\Uploads.
Ateno: A pasta ProgramData est escondida.

3. Mesmo colocando os arquivos nesta pasta do item 2, no funcionou. O que fazer? No


MySQL Workbench, v em Edit > Preferences > SQL Editor, desmarque a opo Safe
Updates e reconecte-se ao servidor. No esquea de colocar duas barras (\\) no endereo
do arquivo que est tentando carregar. Comparar cuidadosamente seu cdigo com os
exemplos dos slides tambm indicado : )

63
INSTRUES/FAQ
Lista 1
4. No consigo usar o comando LOAD DATA para carregar as tabelas. Todos os
arquivos esto corrompidos? No, nenhum est. Voc provavelmente est esquecendo de
inserir a palavra LOCAL no comando. Veja os exemplos do LOAD DATA nestes slides.

5. Meu cdigo executou perfeitamente mas h marcas vermelhas do lado das linhas.
Tem alguma coisa errada? No. Esse um bug conhecido da verso do MySQL Workbench
que est instalada nas mquinas do laboratrio.

64
INSTRUES/FAQ
Lista 2
1. Onde esto os arquivos .csv que devem ser carregados para a base wdi? No Dropbox,
em Big Data\Banco de Dados\Data Management\WDI. Os arquivos .csv que esto na
mquina da FGV esto corrompidos. No usem.

2. Onde estes arquivos devem ser colocados? Algumas verses do MySQL Workbench s
aceitam ler arquivos que estejam em C:\ProgramData\MySQL\MySQL Server 5.7\Uploads.
Ateno: A pasta ProgramData est escondida.

3. Mesmo colocando os arquivos nesta pasta do item 2, no funcionou. O que fazer? No


MySQL Workbench, v em Edit > Preferences > SQL Editor, desmarque a opo Safe
Updates e reconecte-se ao servidor. No esquea de colocar duas barras (\\) no endereo
do arquivo que est tentando carregar. Comparar cuidadosamente seu cdigo com os
exemplos dos slides tambm indicado : )

65
INSTRUES/FAQ
Lista 2
4. No consigo usar o comando LOAD DATA para carregar as tabelas. Todos os
arquivos esto corrompidos? No, nenhum est. Voc provavelmente est esquecendo de
inserir a palavra LOCAL no comando. Veja os exemplos do LOAD DATA nestes slides.

5. Carreguei a tabela Series, mas apareceram vrios warnings. Tem problema? No.
Esses warnings apenas indicam que o MySQL truncou espaos em branco. Por exemplo,
transformou a string "1.2 " em 1.2.

6. Meu cdigo executou perfeitamente mas h marcas vermelhas do lado das linhas.
Tem alguma coisa errada? No. Esse um bug conhecido da verso do MySQL Workbench
que est instalada nas mquinas do laboratrio.

7. O MySQL Workbench no permite que eu crie tabelas com colunas dos tipos
varchar(5000) ou tinyint. O que fazer? Troque varchar(5000) por text e tinyint por
integer.
66

Вам также может понравиться