m y sql prof. andré rabelo. m y sql mysql é um sgdb multiusuário que utiliza a linguagem de banco...
TRANSCRIPT
MYSQLProf. André Rabelo
MYSQL MySQL é um SGDB multiusuário que utiliza a
linguagem de banco de dados SQL.
É uma implementação cliente-servidor.
Entre suas vantagens podemos destacar: VELOCIDADE ROBUSTEZ USABILIDADE
MYSQL - CARACTERÍSTICAS Manipula número ilimitado de usuários
simultâneos; Alta velocidade de execução; Possui APP’s C, C++, JAVA, PERL, PHP entre outros. Portabilidade Disponibiliza vários tipos de dados Suporte completo a operadores SQL e suas funções Sistemas de privilégios simples Suporte a ODBC Disponibiliza registros de tamanhos fixos e variados Manipula COMPROVADAMENTE grandes bancos de
dados(50.000.000 de registros)
MYSQL - ESTRUTURA O conceito da estrutura que mantém os blocos
de informações é conhecido como TABELA.
Estes registros por sua vez são constituídos de objetos menores conhecidos como tipo de dados.
Os tipos de dados juntos podem ser chamados de registro
BANCO DE DADOS> TABELAS> REGISTRO> TIPODE DADOS
MYSQL - ESTRUTURA Tipos de dados MySQL:
CHAR(M) – strings de tamanho fixo (1 a 255) VARCHAR(M) – strings de tamanho flexível(1 a
255) INT(M) – inteiro entre -2147483648 e
2147483647 FLOAT[(M,D)] – números decimais com D casas DATE – armazenamento de datas no
formato”YYYY-MM-DD” TEXT/BLOB – strings entre 255 e 65535
MYSQL - ESTRUTURA Tipos de dados MySQL – ATRIBUTOS:
PRIMARY KEY(chave primária) – Usado para diferenciar os registros de uma tabela. Impedindo chaves repetidas;
Auto_increment – incrementa automaticamente um registro quando este é inserido(auto-numeração)
NOT NULL – bloqueia valores nulos
MYSQL - ESTRUTURA Privilégios
Pela atribuição de um conjunto de privilégios um usuário em um determinado host tem permissão para executar comandos sobre a base de dados.
O sistema de privilégios MySQL se baseia em três funções principais:
Host User DB
MYSQL – O AMBIENTE Realizar instalação do SGBD MySQL.
MYSQL – O AMBIENTE Acesso:
mysql –u root –p
Mostrando bases disponíveisshow databases;
Criando base de dadoscreate database projeto;
Selecionando base de dadosuse projeto;
MYSQL – O AMBIENTE Criando Tabela:
create table Aluno ( ID int not null auto_increment primary key, Nome varchar(40), Email varchar(30), DataNasc date, Matricula char(9) );
Mostrar tabelas do banco selecionadoshow table;
Mostrar estrutura de uma tabeladesc table;
MYSQL – O AMBIENTE Inserindo campo em tabela:
alter table aluno add endereco varchar(100) after nome
Apagando campo em tabela:alter table aluno drop email;
Apagando tabela:drop table aluno;
Apagando banco de dados:drop database projeto;
MYSQL – CONSULTAS SQL Inserindo registros:
insert into alunos(null, ‘André’, ‘Rua Bambui’,’510’,’1977-06-21’,’1234567’);
Selecionando Registros:
select * from aluno;
Apagando Registro:
delete from aluno where id =2;
MYSQL – CONSULTAS SQL Atualizando Registros
update aluno set nome = ‘André Rabelo’ where id = 1
MYSQL – BASE DE TESTES Utilizaremos para nossos exercícios a base
de testes Adventure Works. Disponível no link:
http://sourceforge.net/projects/awmysql/files/AWBackup.zip/download
INFORMAÇÕES SOBRE A BASE DE TESTES A AdventureWorks é uma base de dados de
testes liberada gratuitamente pela MICROSOFT e migrada para o MySQL
No link abaixo podemos encontrar especificações sobre todas as tabelas do AW.
http://technet.microsoft.com/pt-br/library/ms124438(SQL.100).aspx
IMPORTANDO A AW PARA O SEU COMPUTADOR Para executarmos arquivos com dados SQL
no MySQL utilizamos o comando source:
source [caminho]
MYSQL – COMANDO SELECT Deve-se ressaltar que a linguagem SQL é
utilizada tanto por profissionais responsáveis pelos dados, onde é ressaltada principalmente pela figura do DBA, quanto por desenvolvedores.
Estes últimos estão preocupados em “transformar dados em informações”.
Portanto, para os desenvolvedores costuma-se dizer que conhecer o SELECT já basta, devido a importância deste comando.
MYSQL – COMANDO SELECT Utilizaremos a base de testes AW para executar comandos
básicos através de exemplos.
Exemplo 01 – Selecione todos campos(ou colunas) da tabela CONTACT(contém uma lista de nomes e informações relativas a todos clientes, funcionários e fornecedores).
SELECT * FROM CONTACT
O exemplo acima utiliza o coringa “*” para selecionar todos campos de maneira como foram criados.A instrução SELECT, seleciona um grupo de registros de uma ou mais tabelas.A instrução FROM nos indica a necessidade de pesquisarmos tais dados na tabela CONTACT.
MYSQL – COMANDO SELECT Cláusula WHERE:
O WHERE corresponde ao operador “restrição” da álgebra relacional. Contém a condição que os registros devem obedecer a fim de serem listados.
Pode comparar valores em colunas, literais, expressões aritméticas ou funções.
Podemos utilizar os seguintes operadores lógicos:Operador Significado= Igual a > Maior que< Menor que>= Maior OU igual a<= Menor OU igual a
MYSQL – COMANDO SELECT Utilização de Select com cláusula where:
SELECT * FROM CONTACT WHERE contactid = 234
SELECT * FROM CONTACT WHERE FIRSTNAME = ‘Gustavo’//em textos o conjunto de caracteres devem
estar //em apóstrofos OU aspas na cláusula where.
MYSQL – COMANDO SELECT Exemplo 02 – Selecione todos funcionários que
recebem mais de $ 50.00 a hora. Apresente o código do funcionário e o seu salário mensal(salHora * 8 * 30):
RESPOSTA: Neste problema precisamos de uma expressão, que é a combinação de um ou mais valores, operadores ou funções que resultarão em um valor. Esta expressão poderá conter nomes de colunas, valores numéricos, constantes e operadores aritméticos.
//a tabela EMPLOYEEPAYHISTORY contém //informações sobre pagamentos de funcionários.
SELECT EmployeeID, Rate * 8 * 30 FROM EMPLOYEEPAYHISTORY WHERE Rate > 50
MYSQL – COMANDO SELECT Exemplo 03 – Apresente a instrução anterior porém no
lugar dos nomes “feios” employeeID, rate*8*30, apresente os títulos CÓD FUNCIONÁRIO e SAL MENSAL.
Resposta: Neste exemplo deveremos denominar colunas por apelidos. Os nomes mostrados, são os nomes dados as colunas das tabelas. Utilizamos os apelidos para apresentarmos nomes mais sugestivos a usuários, não acostumados ao nosso “informatiquês”.
SELECT employeeID "CÓDIGO FUNC",rate*8*30 "SAL MENSAL"
FROM EMPLOYEEPAYHISTORY WHERE rate > 50
MYSQL – COMANDO SELECT Exemplo 04 – Exiba todos os salários
existentes na empresa porém omita eventuais duplicidades.
RESPOSTA: A cláusula DISTINCT elimina duplicidades, significando que somente relações distintas serão apresentadas como resultado de uma pesquisa.
SELECT DISTINCT RATE FROM EMPLOYEEPAYHISTORY
MYSQL – COMANDO SELECT EXEMPLO 05 – Liste os nomes e email’s de cada contato
(TABELA CONTACTS), porém classificadso em ordem crescente. Faça o mesmo em ordem decrescente.
RESPOSTA: Para ordenarmos a ordem de apresentação dos registros utilizamos a cláusula ORDER BY. A cláusula DESC coloca os registros em ordem decrescente:
SELECT FIRSTNAME,EMAILADDRESS FROM CONTACT ORDER BY FIRSTNAME
SELECT FIRSTNAME,EMAILADDRESS FROM CONTACT ORDER BY FIRSTNAME DESC
MYSQL – COMANDO SELECT EXEMPLO 06 – Selecione todos contatos que
tem o sobrenome “Adams” Resposta:
SELECT * FROM CONTACT WHERE LASTNAME = "Adams“
O exemplo exigiu uma restrição pelo sobrenome “Adams” e assim foi necessário utilizarmos a cláusula where.
Podemos utilizar outros operadores nesta cláusula, exemplos abaixo:
MYSQL – COMANDO SELECTOperador SignificadoBETWEEN .... AND .... Entre dois valores(inclusive)In(...) Lista de valoresLIKE Com um padrão de caracteresIS NULL É um valor nulo
MYSQL – COMANDO SELECT Exemplos://funcionarios com salário/hora entre 20 e 50SELECT EMPLOYEEID,RATE FROM EMPLOYEEPAYHISTORY WHERE RATE BETWEEN 20 AND 50//funcionários que tenham salário/hora iguais a //25,24,13.45,9.5SELECT EMPLOYEEID,RATE
FROM EMPLOYEEPAYHISTORY WHERE RATE IN (25,24,13.45,9.5)
MYSQL – COMANDO SELECT//contatos com nomes que iniciam com a letra
“F”SELECT * FROM CONTACT
WHERE FIRSTNAME LIKE “F%”//O símbolo % pode ser usado para construir //pesquisas (% = qualquer sequencia de
nenhum ou //vários caracteres.//contatos que não foram cadastrados
apresentaçõesSELECT * FROM CONTACT
WHERE TITLE IS NULL
MYSQL – COMANDO SELECT Operadores Negativos
Operadore Descrição<> DiferenteNOT NOME_COLUNA = Diferente da colunaNOT NOME_COLUNA > Não maior que NOT BETWEEN Não está entre os valoresNOT IN Não existe em uma lista de valores
dadaNOT LIKE Diferente do padrão de caracteres
dadoIS NOT NULL Não é um valor nulo
MYSQL – COMANDO SELECT Exemplo 07 – Selecione os empregados que
o salário/hora sejam menores de 20 e maiores que 50.
RESPOSTA – Necessitamos aqui de operadores negativos:
SELECT EMPLOYEEID,RATE FROM EMPLOYEEPAYHISTORY WHERE RATE NOT BETWEEN
20 AND 50
MYSQL – COMANDO SELECT Exemplo 08 – Selecione todos os funcionários
com salário/hora NÃO estejam entre 20 e 50 E que recebam quinzenalmente(coluna PayFrequency quando = 1 salário mensal quando = 2 salário quinzenal)
RESPOSTA: necessitaremos de consultas com condições múltiplas. Operadores AND(E) e OR(OU).
SELECT EMPLOYEEID,RATE FROM EMPLOYEEPAYHISTORY WHERE RATE NOT BETWEEN 20 AND 50
AND PAYFREQUENCY = 2
MYSQL – COMANDO SELECT Funções de CaracteresFunção ResultadoLower Força caracteres maiusculos a aparecerem
minusculosUpper Força caractere minúsculos a aparecerem
maiúsculosConcat(x,y) Concatena a string X com a string YSubstring(str,x,y)
Extrai uma substring de str, começada em X e terminada em Y
MYSQL – COMANDO SELECT//Nome de todos os contatos com letra//minúscula
SELECT LOWER(FIRSTNAME) FROM CONTACT
//as 3 primeiras letras dos nomes de todos os //contatos
SELECT SUBSTRING(FIRSTNAME,1,3) FROM CONTACT
//exiba todos os nomes dos contatos no seguinte formato: “Mr. Gustavo”SELECT CONCAT(TITLE," ",FIRSTNAME) FROM CONTACT
MYSQL – COMANDO SELECT Funções Agregadas(ou de agrupamento)Função RetornoAvg(n) Média do valor n, ignorando nulosCount(expr) Vezes que o número da expr avalia para algo
não nuloMax(expr) Maior valor da exprMin(expr) Menor valor da exprSum(n) Soma os valores de n, ignorando nulos
MYSQL – COMANDO SELECT Exemplo 9 – Apresente a média, o maior, o
menor e também a somatória dos valores/hora dos salários pagos a funcionários:
RESPOSTA:SELECT AVG(RATE) FROM EMPLOYEEPAYHISTORY;SELECT MAX(RATE) FROM EMPLOYEEPAYHISTORY ;SELECT MIN(RATE) FROM EMPLOYEEPAYHISTORY ;SELECT SUM(RATE) FROM EMPLOYEEPAYHISTORY ;
MYSQL – COMANDO SELECT AGRUPAMENTOS
As funções de grupo operam sobre grupos de registros (linhas). Retornam resultados baseados em grupos em vez de resultados por registro individual.
Utilizamos a cláusula GROUP BY é usada para dividir a consulta em grupos.
Exemplo 10 – Apresente a média dos salários pagos quinzenalmente e mensalmente:
SELECT PAYFREQUENCY,AVG(RATE) FROM EMPLOYEEPAYHISTORYGROUP BY PAYFREQUENCY
ATENÇÃO: QUALQUER COLUNA OU EXPRESSÃO QUE NÃO SEJA UMA FUNÇÃO AGREGADA DEVERÁ CONSTAR NA CLÁUSULA GROUP BY.
NÃO PODEMOS ASSIM TENTAR IMPOR UMA “RESTRIÇÃO” DO TIPO AGREGADA A CLÁUSULA WHERE.
MYSQL – COMANDO SELECT Cláusula HAVING:
Pode ser utilizada para especificar quais grupos serão exibidos, portanto restringindo-os.
Exemplo 11 - Apresente o número de contatos que querem receber promoções da empresa via email(campo EmailPromotion = 0 não deseja, EmailPromotion =1 deseja). Não exiba valores nulos ou diferentes de 0 ou 1.
SELECT EMAILPROMOTION, COUNT(CONTACTID) FROM CONTACTGROUP BY EMAILPROMOTIONHAVING EMAILPROMOTION IN(0,1)
MYSQL – COMANDO SELECT Seqüência do comando SELECT:
SELECT COLUNA(S) FROM TABELA(S) WHERE CONDIÇÃO(ÕES) DO(S) REGISTRO(S) GROUP BY CONDIÇÃO(ÕES) DO(S) REGISTRO(S) HAVING CONDIÇÃO(ÕES) DO(S) REGISTRO(S) ORDER BY COLUNA(S)
A seguinte avaliação será feita: WERE – para estabelecer linhas individuais(não
pode conter funções de grupo; GROUP BY – para fixar grupos; HAVING – para selecionar grupos de exibição.
MYSQL – COMANDO SELECT Junções por igualdade
O relacionamento existente entre tabelas devem possuir colunas interligadas com valores iguais. A junção é realizada em sua maioria entre chaves primárias e estrangeiras.
Exemplo 12 – Listar todos os nomes e datas de nascimento todos os empregados(tabelas employee e contact)
RESPOSTA – Observamos que o nome do empregado se encontra na tabela CONTATO(FIRSTNAME) e a data de nascimento se encontra na tabela EMPLOYEE(BirthDate), vemos também que o relacionamento entre as duas se dá pelo campo CONTACT ID. Então:
SELECT FIRSTNAME,BIRTHDATE FROM EMPLOYEE,CONTACT
WHERE EMPLOYEE.ContactID = CONTACT.ContactID
MYSQL – COMANDO SELECT Exemplo 13 – Liste todos os nomes dos
funcionários e seus salários. RESPOSTA: Repare que o campo FirstName está
na tabela Contact enquanto o campo Rate se encontra na tabela EmployeePayHistory. O relacionamento entre estas tabelas existe somente por intermédio da tabela Employee. Portanto:SELECT FIRSTNAME,RATE FROM EMPLOYEE E,CONTACT C, EMPLOYEEPAYHISTORY EHWHERE E.CONTACTID = C.CONTACTID AND E.EMPLOYEEID = EH.EMPLOYEEID