Sie sind auf Seite 1von 100

Centro de Formao So Domingos

SQL (MySql) Frei Joaquim Jos Hangalo


1

ROTEIRO
I PARTE - INTRODUO AO SQL COMANDOS E SUAS PARTES DA LINGUAGEM SQL II PARTE ADMINSTRAO DE BANCO DE DADOS UTILIZANDO MYSQL PRINCIPAIS INSTRUES III PARTE - PRTICA ESTUDO DE CASO UTILIZANDO MYSQL

A Linguagem SQL (I parte)

Embora se fale que a linguagem SQL uma linguagem de consulta, essa linguagem possui outras capacidades alm de realizar consultas numa base de dados. A linguagem SQL possui recursos para definio da estrutura de dados, para modificar dados na base de dados e recursos para especificar restries de segurana e integridade.

SQL ( Strutured Query Language ). Numerosos Sistemas de Gesto de Base de Dados suportam a linguagem SQL. A SQL estabeleceu-se como a linguagem padro de base de dados relacionais. Embora existam diversas verses, com algumas diferenas entre elas, a estrutura da SQL mantm-se inalterada desde a sua criao.

As partes da linguagem SQL

Data Definition Language (DDL) (Linguagem de Definio de Dados). A SQL DDL fornece comandos para definio e modificao de esquemas de relao, remoo de relaes e criao de ndices. Os principais comandos que fazem parte da DDL so: CREATE, ALTER, DROP. Data Manipulation Language (DML) (Linguagem de Manipulao de Dados). A SQL DML inclui uma sub-linguagem de consulta baseada na lgebra relacional e no clculo relacional. Compreende tambm comandos para inserir, remover e modificar informaes de uma base de dados. Os comandos bsicos da DML so: SELECT, INSERT, UPDATE, DELETE
4

As partes da linguagem SQL


(continuao)

Data Control Language (Linguagem de Controle de Dados). o conjunto de comandos que permitem fazer o cadastramento de utilizadores e determina o seu nvel de privilgio para os objetos da
base de dados. Os principais comandos so: GRANT, REVOKE

Transactions control (Controle de Transaes). A SQL inclui comandos para especificao do incio e fim das transaes. Diversas implementaes permitem o trancamento explcito de dados para o controle de concorrncia. (COMMIT, ROLLBACK, SAVEPOINT)

A Linguagem de Definio de Dados (SQL-DDL)


A Linguagem de Definio de Dados da SQL (SQL-DDL) um conjunto especfico de instrues SQL que fornece meios para a definio e modificao de esquemas de relao, remoo de relaes e criao de ndices. Criando tabelas Uma tabela (ou relao) SQL definida usando o comando create table:

create table r (A1 D1, A2 D2,...,An Dn) onde r o nome da relao, Ai o nome de um atributo no esquema da relao r e Di o tipo do atributo Ai.

A Linguagem de Definio de Dados (SQL-DDL)


(continuao)

create table cliente (nome varchar(30), sexo char(1), CP number(11), endereco varchar(30), cidade varchar(30) ); Uma relao criada inicialmente vazia. O comando insert pode ser utilizado para carregar os dados para a relao(tabela). Muitos produtos de bases de dados relacionais possuem um grande volume de utilitrios para carregar um conjunto inicial de tuplas numa relao(tabela).

A Linguagem de Definio de Dados (SQL-DDL)


(continuao)

Removendo uma Tabela Para remover uma relao de uma base de dados SQL, usa-se o comando drop table. O comando drop table remove todas as informaes sobre a relao. O comando drop table r onde r o nome de uma relao (tabela) existente.

A Linguagem de Definio de Dados (SQL-DDL)


(continuao)

Alterando uma Tabela O comando alter table usado para adicionar, excluir ou alterar atributos numa relao(tabela) existente. Para inserir um novo atributo numa tabela usada a clusula add. Todas as tuplas na relao so assinaladas como null para o valor do novo atributo. alter table r add ( A1 D1, A2 D2, ... ) onde r o nome de uma relao existente e A1 D1, A2 D2, ... uma lista contendo nome do atributo (A) a ser adicionado e o tipo do atributo (D), respectivamente.

A Linguagem de Definio de Dados (SQL-DDL)


(continuao)

Para excluir colunas de uma tabela utiliza-se a clusula drop. alter table r drop A1, A2, ... onde r o nome de uma relao existente e A1, A2, ... uma lista dos atributos a serem removidos. Para alterar o nome de um atributo de uma tabela utiliza-se a clusula rename. alter table r rename A NA onde r o nome de uma relao existente, A o nome do atributo a ter o seu nome alterado para NA. Para alterar o tipo de um atributo

utiliza-se a clusula modify.

10

A Linguagem de Definio de Dados (SQL-DDL)


(continuao)

alter table r modify A1 D1, A2 D2, ... onde r o nome de uma relao existente, A1 D1, A2 D2,... uma lista contendo o nome do atributo (An) a ter o seu tipo alterado para (Dn).

11

A Linguagem de Definio de Dados (SQL-DDL)


(continuao)

Restries de Integridade As restries de integridade servem para garantir as regras inerentes ao sistema que est sendo implementado, prevenindo a entrada de informaes invlidas pelos usurios desse sistema. Para isso, o SGBD deve prover ferramentas para a definio de regras de integridade , a fim de evitar a inconsistncia dos dados que nele sero armazenados. Evitando valores nulos muito comum definirmos atributos que no podem conter valores nulos. Isto , o seu preenchimento obrigatrio para que se mantenha a integridade dos dados no sistema. Para evitar que em algum momento uma coluna de uma tabela possa conter valor nulo (ou no conter valor algum) deve-se utilizar a clusula NOT NULL aps a definio da coluna.
12

A Linguagem de Definio de Dados (SQL-DDL)


(continuao)

Exemplo:

create table cliente (nome varchar(30) NOT NULL, sexo char(1), CP number(11), endereco varchar(40), cidade varchar(20) ) No exemplo acima, a atribuio de um valor coluna nome obrigatrio. Caso o usurio se esquea de preenche-lo, o SGBD apresentar uma mensagem de erro.
13

A Linguagem de Definio de Dados (SQL-DDL)


(continuao)

Evitando valores duplicados Podem existir situaes onde o valor armazenado num atributo de um registo deve ser nico em relao a todos os registros da tabela. Isto , no pode haver dois registros com o mesmo valor para um determinado atributo.
Para implementar esta restrio de integridade deve-se utilizar a clusula UNIQUE aps a especificao de uma coluna.

14

A Linguagem de Definio de Dados (SQL-DDL)


(continuao)

Exemplo: create table cliente (nome varchar(30) NOT NULL, sexo char(1), CP number(11) UNIQUE, endereco varchar(40), cidade varchar(20) ) No exemplo acima, caso o usurio atribua ao campo CP um valor j existente num outro registo desta tabela o SGBD apresentar uma mensagem de erro.
15

A Linguagem de Definio de Dados (SQL-DDL)


(continuao)

Definindo valores default Pode-se definir um valor padro para uma coluna acrescentando sua definio a clusula DEFAULT. Esta clusula permite substituir automaticamente os valores nulos por um valor inicial desejado. create table cliente (nome varchar(30) NOT NULL, sexo char(1), CP number(11) UNIQUE, endereco varchar(40), cidade varchar(20) DEFAULT Lubango )
16

A Linguagem de Definio de Dados (SQL-DDL)


(continuao)

Evitando valores invlidos


Existem situaes onde o valor de um atributo deve pertencer a um determinado domnio. Para que o valor de um atributo fique restrito a um conjunto de valores, utiliza-se a clusula CHECK.

A finalidade da clusula CHECK especificar uma condio, isto , uma limitao de integridade. create table cliente ( nome varchar(30) NOT NULL, sexo char(1) CHECK(sexo IN (M, F)), CP number(11) UNIQUE, endereco varchar(40), cidade varchar(20) DEFAULT Lubango ) 17

A Linguagem de Definio de Dados (SQL-DDL)


(continuao)

Chave Primria A funo da chave primria identificar univocamente uma linha da tabela. Cada tabela deve possuir uma chave primria. Quando se define um atributo como chave primaria, ficam implcitas as clusulas UNIQUE e NOT NULL para este atributo, no sendo necessria a especificao destas. create table cliente (codigo number(5) primary key, nome varchar(30) not null, sexo char(1) CHECK(sexo IN (M, F)), CP number(11) UNIQUE, endereco varchar(40), cidade varchar(20) DEFAULT Lubango ) Opcionalmente pode-se definir a chave primria aps a especificao de 18 todos os atributos da tabela.

A Linguagem de Definio de Dados (SQL-DDL)


(continuao)

Exemplo: create table cliente (codigo number(5), nome varchar(30) not null, sexo char(1) CHECK(sexo IN (M, F)), CP number(11) UNIQUE, endereco varchar(40), cidade varchar(20) DEFAULT Lubango, primary key (codigo) )

19

A Linguagem de Definio de Dados (SQL-DDL)


(continuao)

ATENO: Quando uma tabela possui uma chave primria composta por mais de um atributo, esta forma OBRIGATRIA. create table movimento (agencia number(5), conta number(7), valor number(16,2), primary key (agencia, conta) )

20

A Linguagem de Definio de Dados (SQL-DDL)


(continuao)

Integridade referencial Freqentemente desejamos assegurar que o valor de um determinado campo de uma tabela esteja presente na chave primria de outra tabela. Este campo chamado chave estrangeira (FOREIGN KEY). A SQL original padro no inclua instrues para especificar chaves estrangeiras. Um aperfeioamento posterior foi aprovado como uma adio ao padro. Este recurso permite a especificao de chaves primrias e estrangeiras como parte da instruo create table. create table movimento

(agencia conta valor primary

number(5) references agencias(codigo), number(7) references contas(numero), number(16,2), key (agencia, conta) )
21

Assim como na definio da chave primria, pode-se definir a chave estrangeira aps a especificao de todos os campos (domnio) da tabela.

A Linguagem de Definio de Dados (SQL-DDL)


(continuao)

Exemplo:

create table movimento (agencia number(5) conta number(7) valor number(16,2), primary key (agencia, conta) foreign key (agencia) references agencias, foreign key (conta) references contas)

22

Linguagem de Manipulao de Dados - DML


A principal estrutura da SQL DML consiste em trs clusulas: select, from e where. select A1, A2, A3, ..., An from r1, r2, ..., rm where P onde Ai representa um atributo ri uma tabela P um predicado (condio/critrio de seleo).

23

Linguagem de Manipulao de Dados DML


(continuao)

select Fcodigo, status from Fornecedor where cidade = Paris A condio (ou predicado) que segue where pode incluir operadores de comparao =, <> (diferente), >, >=, < e <=; os operadores booleanos AND, OR e NOT. Select Fcodigo, nome from Fornecedor where cidade = Paris and status > 20 Fcodigo nome 3 Blake A lista A1, A2, ..., An de atributos pode ser substituda por um asterisco (*) para selecionar todos os atributos de todas as relaes presentes na clusula from. select * 24 from Fornecedor

Operadores de comparao
Igual a Diferente de Maior que Maior que ou Igual a Menor Menor que ou Igual a BETWEEN ... AND ... IN (conjunto) LIKE IS NULL = <> > >= < <= Entre dois valores (inclusivo) Corresponde a qualquer Corresponde a contm um valor nulo

Operadores lgicos
AND OR NOT E Ou Negao

Uso do NOT com operadores de comparao


IS NOT NULL NOT IN (conjunto) NOT BETWEEN NOT LIKE No um valor nulo Corresponde a nenhum Fora do intervalo de valores Corresponde a no contm

Linguagem de Manipulao de Dados DML


(continuao)

O resultado da consulta acima ser uma cpia da relao Fornecedor. O resultado de uma consulta SQL uma relao. select status from Fornecedor Linguagens de consultas formais so baseadas em noes matemticas de relao. Assim, nunca deveriam aparecem tuplas duplicadas nas relaes. Na prtica, a eliminao de duplicao uma relativa perda de tempo. Todavia, a SQL permite duplicaes em relaes. Nos casos em que queremos forar a eliminao de duplicaes, inserimos a palavra distinct depois de select. select distinct status from Fornecedor
27

Linguagem de Manipulao de Dados DML


(continuao)

Ordenando o resultado de uma consulta A linguagem SQL oferece uma maneira de controlar a ordem em que as tuplas de uma relao sero dispostas. A clusula ORDER BY ocasiona o aparecimento de tuplas no resultado de uma consulta numa ordem determinada. SELECT A1, A2, ..., An FROM ...r1, r2, ..., rn WHERE ...p ORDER BY A1 [ASC/DESC] A2 [ASC/DESC] ... An [ASC/DESC] Onde An so nomes de atributos que serviro como parmetro de ordenao da consulta.
28

Linguagem de Manipulao de Dados DML


(continuao)

A clusula ORDER BY permite ordenar as linhas do resultado da consulta segundo algum(s) atributo(s) indicado, em ordem crescentes ou decrescente. Quando for necessrio utilizar esta clusula ela sempre deve aparecer na ltima linha da consulta. No h limite quanto ao nmero de atributos utilizados para ordenao. As palavras ASC e DESC determinam se a ordenao ser ascendente ou descendente. Caso nada seja especificado, assumido a ordenao ascendente (ASC). select distinct status from Fornecedor order by status select status, nome from Fornecedor order by status DESC, nome ASC Uma vez que a classificao de um grande nmero de tuplas pode ser custoso, aconselhvel classificar apenas quando necessrio.
29

Modificando a Base de Dados

Como inserir remover ou alterar informaes usando a SQL

Insero de registos Para inserir um dado numa relao, ou especificamos uma tupla para ser inserida ou escrevemos uma consulta cujo resultado seja um conjunto de tuplas a serem inseridas. Obviamente, os valores dos atributos para tuplas inseridas precisam ser membros do domnio do atributo. Da mesma forma, as tuplas inseridas precisam ser do mesmo tipo. A instruo insert mais simples uma requisio para inserir uma tupla. Suponha que desejamos inserir o facto de que Paulo Coelho Farias tem 1.200 na conta 9732 da agncia Chibia.

30

Modificando a Base de Dados


(continuao)

insert into contas values (9732, Chibia ,1200, Paulo Coelho Farias) No exemplo acima, os valores so especificados na ordem na qual os atributos correspondentes esto listados no esquema da relao. Para facilitar os usurios que podem no se lembrar da ordem dos atributos, a SQL permite que os atributos sejam especificados como parte da instruo insert. insert into contas(numero_conta, nome_agencia, saldo, nome_cliente) values (9732,Chibia,1200,Paulo Coelho Farias)
31

Modificando a Base de Dados


(continuao)

Remoo de registros Uma remoo expressa da mesma forma que uma consulta. Podese remover apenas tuplas inteiras, no podemos remover atributos particulares. delete from r where P P representa um predicado e r representa uma relao. O comando delete opera em apenas uma relao. Se desejarmos remover tuplas de diversas relaes, devemos usar um comando delete para cada relao. O predicado na clusula where pode ser to complexo quanto uma clusula where do comando select. Num outro extremo, podemos ter uma clusula where vazia. A requisio delete from emprestimos remove todas as tuplas da relao emprstimos.
32

Modificando a Base de Dados


(continuao)

"Remova todos os registros da conta de Paulo Coelho Farias" delete from contas where nome_cliente = Paulo Coelho Farias "Remova todos os emprstimos com nmeros entre 1300 e 1500" delete from emprestimos where numero between 1300 and 1500

33

Modificando a Base de Dados


(continuao)

Alterao de registos
Em certas situaes, podemos desejar mudar um valor de uma tupla sem mudar todos os valores da tupla. Para isto, a instruo update pode ser utilizada. Como era o caso para insert e delete, podemos escolher as tuplas que sero actualizadas usando uma consulta. Suponha que esteja sendo feito um pagamento de juros, e que em todos os saldos sejam acrescidos 5%. update contas set saldo = saldo * 1.05 A instruo acima aplicada uma vez para cada tupla em contas.

34

Modificando a Base de Dados


(continuao)

A instruo acima aplicada uma vez para cada tupla em contas. Suponhamos agora que contas com saldos superiores a 10.000 recebam 6% de juros e todas as outras recebam 5%.

update contas set saldo = saldo * 1.06 where saldo > 10000 update contas set saldo = saldo * 1.05 where saldo <= 10000

A ordem na qual as duas instrues update so escritas importante. Se mudarmos a ordem das duas instrues, uma conta cujo saldo esteja abaixo de 10.000 poder receber juros de 11.3%.
35

Modificando a Base de Dados


(continuao)

Funes Agregadas A SQL oferece a habilidade para computar funes em grupos de tuplas usando a clusula group by. O atributo ou atributos utilizados na clusula group by so usados para formar grupos. Tuplas com o mesmo valor em todos os atributos na clusula group by so colocados num grupo. : A linguagem SQL possui algumas funo especficas para clculos em grupos de tuplas:

mdia: avg mnimo: min mximo: max total: sum contar: count

As operaes como a avg so chamadas funes agregadas porque operam em agregaes de tuplas. O resultado de uma funo agregada um valor nico. Para ilustrar, considere a consulta:
36

Modificando a Base de Dados


(continuao)

" Encontre a mdia dos saldos em todas as contas"


select avg(saldo) from contas

A funo agregada count usada freqentemente para contar o nmero de tuplas numa relao. A notao para isto count(*). Assim para achar o nmero de tuplas da relao cliente, escrevemos: select count(*) from clientes

37

Juno

38

Juno
Seleo de dados em mais de uma tabela SELECT coluna1, coluna2, ..., colunaN FROM nome_da_tabela WHERE condio_join;

Juno
Seleo de dados em mais de uma tabela SELECT coluna1, coluna2, ..., colunaN FROM nome_da_tabela WHERE condio_join;

Juno
/* NATURAL JOIN as colunas devem ter o mesmo nome e o mesmo tipo */
/* Seleo de todos os funcionrios, inclusive com o nome do departamento em que trabalham */

SELECT funID, funNome, funSobrenome, depID, depNome FROM Funcionarios NATURAL JOIN Departamentos

Juno
/* USING Especificando colunas para o join */
/* Seleo de todos os funcionrios, inclusive com o nome do departamento em que trabalham */

SELECT funID, funNome, funSobrenome, depID, depNome FROM Funcionarios JOIN Departamentos USING (depID)

Juno
/* Clusula ON */
/* Seleo de todos os funcionrios, inclusive com o nome do departamento em que trabalham */

SELECT funID, funNome, funSobrenome, f.depID, depNome FROM Funcionarios f JOIN Departamentos d ON (f.depID = d.depID)

Juno
/* JOINS com a clusula WHERE */ /* Seleo de todos os funcionrios, inclusive com o nome do departamento em que trabalham */

SELECT funID, funNome, funSobrenome, f.depID, depNome FROM Funcionarios f, Departamentos d WHERE f.depID = d.depID

Juno
/* Auto-join */ /* Seleo de todos os alunos, inclusive com as informaes do curso em que esto matriculados */

SELECT f.funID, f.funNome, f.funSobrenome, f.funGerenteID, ger.funNome, ger.funSobrenome FROM Funcionarios f, Funcionarios ger WHERE f.funGerenteID = ger.funID

Juno
/* LEFT OUTER JOIN */ /* Seleo de todos os departamentos e o nome dos funcionrios que trabalham em cada um deles; todos os departamentos devem ser listados, ainda que no haja funcionrios trabalhando nele */

SELECT d.depID, d.depNome, f.funID, f.funNome FROM Departamentos d LEFT OUTER JOIN Funcionarios f ON d.depID = f.depID

Juno
/* RIGHT OUTER JOIN */ /* Seleo de todos os departamentos e o nome dos funcionrios que trabalham em cada um deles; todos os funcionrios devem ser listados, ainda que no estejam alocados a um departamento */

SELECT d.depID, d.depNome, f.funID, f.funNome FROM Departamentos d RIGHT OUTER JOIN Funcionarios f ON d.depID = f.depID

Juno
/* FULL OUTER JOIN */ /* Seleo de todos os departamentos e o nome dos funcionrios que trabalham em cada um deles; todos os funcionrios e todos os departamentos devem ser cadastrados, sem exceo */

SELECT d.depID, d.depNome, f.funID, f.funNome FROM Departamentos d FULL OUTER JOIN Funcionarios f ON d.depID = f.depID

Sub-Consultas

Sub-Consultas
Comando SELECT que est encadeado noutro comando SELECT, produzindo resultados intermdios. Uma subconsulta utilizada quando necessrio seleccionar tuplos de uma tabela com uma condio que dependa de dados da mesma tabela.

Subconsulta
Estrutura geral SELECT .... FROM .... WHERE [at] OPERADOR ( SELECT ... FROM ... [WHERE ... ]) Declarao SELECT localizada dentro de outra declarao SELECT

Subconsulta

1.

2.

Recurso anteriormente utilizado(PLEW) Inexistncia anterior de juno externa Desempenho ruim das ligaes internas

Subconsulta
1. 2.

3.

Preterida devido: Adio de juno externa no SQL-99 Melhora do processamento de juno interna Pouca legibilidade no cdigo com subconsulta ( leitura/ manuteno)

Sintaxes
SELECT * FROM TABELA1[, TABELA2] WHERE [ [NOT] EXISTS ( subconsulta) ] [ [NOT] UNIQUE ( subconsulta)] [ atributo > | < | >= |<= ALL ( subconsulta)] [ atributo > | < | >= |<= ANY ( subconsulta)] [ atributo [,atributo2] [NOT] IN ( subconsulta ) ]

Subconsulta
SELECT descricao , preco FROM comida WHERE preco < ( SELECT AVG(preco) FROM c comida)

Processamento de Subconsulta
SELECT descricao , preco FROM comida WHERE preco < ( SELECT AVG(preco) FROM comida)

( SELECT AVG(preco) FROM c comida) ( (200) 2. SELECT descricao , preco FROM comida WHERE preco < (200) p

Subconsultas que retornam de lista de valores


1. 2.

Dois casos possveis: Um valor nico Lista de valores

O resultado da subconsulta deve estar dentro da declarao da consulta externa.

Subconsultas: retorno de lista

WHERE + emprego de IN / NOT IN


Tab. Func
Num_func 2 4 6 8 10 12 14 16 18 20 Nome_func Maria Joao Antonio Alex Roberto Graa Leila Clea Ane Cintia Null

Tab. Est
Num_Est 3 6 9 12 15 18 Nome_Est Tarso Antonio Nair Graa Quenia Ane Null

Subconsulta: retorno de lista


Ocorrncias de Func onde num_func liga-se com valor da coluna num_est ( Est) l SELECT num_func, nome_func FROM func W WHERE num_func IN ( select num_est FROM est)

SELECT num_func, nome_func FROM func WHERE num_func IN ( 3, 6, 9 , 12, 15, 18, null)
6 12 18 Antonio Graa Ane

Equivale a uma juno interna !

Subconsulta: retorno de lista


Ocorrncias de Func onde num_func NO se ligam com nenhum valor da coluna num_est ( Est) SELECT num_func, nome_func FROM func WHERE num_func NOT IN ( select num_est FROM est )

SELECT num_func, nome_func FROM func WHERE num_func IN ( 3, 6, 9 , 12, 15, 18)

Subconsultas com retorno de valor nico


Uma forma de assegurar o retorno de valor nico o emprego de funes de agregao. Operadores possveis:

= < <= > >= IN | NOT IN BETWEEN

Subconsulta correlativas

Qualquer consulta que contm uma referncia para tabela da consulta externa. No pode ser avaliada antes da consulta externa. PLEW cita como modalidade mais antiga.

Subconsulta com Exists


W WHERE + exists ( correlativa) Reserva um espao separado para cada linha da tabela na consulta externa.

select num_matricula, nome from aluno Sem where exists atributo ( select distinct num_matricula from nota_aluno_disciplina) )

Subconsulta para ligao externa

Empregar NOT EXISTS

SELECT a.num_func, a.nome_func, b. num_est, b. nome_est FROM func a, est b WHERE a.num_func = b. num_est UNION ALL SELECT a.num_func, a.nome_func, null, null FROM func a WHERE NOT EXISTS( select b.num_est FROM est W WHERE a.num_func = b. num_est)

Operadores para subconsultas


> >= < <= < > EXISTS IN/ NOT IN > >= < <= <>ALL > >= < <= <> ANY <>ALL equivale a NOT INT IN equivale a =ANY

Exerccio
Compare a) e b) e justifique a diferena. a) select num_matricula, nome from aluno where exists ( select distinct num_matricula from n nota_aluno_disciplina) b) select num_matricula, nome from aluno where num_matricula in ( select distinct num_matricula from n nota_aluno_disciplina)

Operadores de Conjuntos

Equivalncia com conjuntos matemticos UNION/ UNION ALL INTERSECT CORRESPONDING BY EXCEPT

Subconsultas com operadores de conjuntos


Tratamento de consultas como conjuntos consulta 1 UNION [ALL] | INTERSECT | EXCEPT | MINUS consulta 2

* As consultas devem ter a mesma quantidade e mesmo tipo de campos como retorno para efetuar esses comandos.

Sub - consultas
Exemplos vrios

69

Sub-Consultas (cont.)
SELECT MIN(salario) FROM Funcionario;

Depois devemos encontrar o empregado que ganha esse ordenado:


SELECT Nome, Cargo, Salario FROM Funcionario WHERE Salario = (salario mnimo);

Assim, podemos combinar os dois cdigos:


SELECT Nome, Cargo, Salario FROM Funcionario WHERE Salario = (SELECT MIN(Salario) FROM Funcionario);

Sub-Consultas (cont.)
SELECT Nome, Cargo FROM Funcionario WHERE Cargo = (SELECT Cargo
FROM Funcionario WHERE Nome='Blake');

SELECT Nome, Cod_Depar, Salario FROM Funcionario WHERE (Salario, Cod_Depar)IN(SELECT MIN(Salario), Cod_Depar
FROM Funcionario GROUP BY Cod_Depar);

Sub-Consultas (cont.)
SELECT Cod_Depar, AVG(Salario) FROM Funcionario GROUP BY Cod_Depar
HAVING AVG(Salario) > (SELECT AVG(Salario)
FROM Funcionario WHERE Cod_depar = 30);

Subconsultas
/* Subconsulta de uma nica linha */ /* Quem ganha um salrio maior que o salrio de Paulo? */

SELECT funID, funNome, funSalario FROM Funcionarios WHERE funSalario > ( SELECT funSalario FROM Funcionarios WHERE funNome = Paulo )

Subconsultas
/* Subconsulta de vrias linha operador ANY */ /* Quem ganha um salrio menor que o salrio de qualquer funcionrio do departamento 15? */

SELECT funID, funNome, funSalario FROM Funcionarios WHERE funSalario < ANY ( SELECT funSalario FROM Funcionarios WHERE depID = 15 )

Subconsultas
/* Subconsulta de vrias linha operador ALL */ /* Quem ganha um salrio menor que o salrio de todos os funcionrio do departamento 15? */

SELECT funID, funNome, funSalario FROM Funcionarios WHERE funSalario < ALL ( SELECT funSalario FROM Funcionarios WHERE depID = 15 )

Subconsultas
/* Subconsulta de vrias linhas */ /* Liste todos os funcionrios que no so gerentes */

SELECT funID, funNome, funSalario FROM Funcionarios WHERE funID NOT IN /* equivale a <> ALL ( SELECT DISTINCT funGerenteID FROM Funcionarios WHERE funGerenteID IS NOT NULL )

*/

Subconsultas
/* Subconsulta de vrias linhas */ /* Liste todos os funcionrios que so gerentes */

SELECT funID, funNome, funSalario FROM Funcionarios WHERE funID IN /* equivale a = ANY */ ( SELECT DISTINCT funGerenteID FROM Funcionarios )

Trabalho com Datas (Mysql)

78

Para manipularmos dados do tipo DATA, podemos definir a coluna como DATE, DATETIME ou TIMESTAMP, sendo que suas principais caractersticas so:
# DATE # DATETIME # TIMESTAMP esta no formato AAAA-MM-DD esta no formato AAAA-MM-DD HH:MM:SS esta no formato AAAAMMDDHHMMSS

79

Apesar das datas do tipo DATETIME e TIMESTAMP utilizarem hora, minuto e segundo, podemos utilizar o seu contedo somente com a data. Para isso, utilizase a funo DATE_FORMAT(date,format), que transforma a data apresentada para o formato desejado. Tambm podemos utilizar essa funo para colocar qualquer tipo de data no formato mais adequado para nossa aplicao, como por exemplo no formato "DD/MM/AAAA"

80

As datas so armazenadas no formato norteamericano e, para obtermos o resultado no formato desejado, devemos utilizar a funo acima: Ex: se for necessrio apresentar a data de uma determinada transaco no formato "DD/MM/AAAA" deve-se fazer o comando de seleco com a seguinte sintaxe:

SELECT DATE_FORMAT(nome_da_coluna_com_a_data, '%d/%m/%Y')FROM nome_da_tabela;


81

Ateno especial deve ser dada s colunas definidas como "TIMESTAMP", pois nelas ficam depositados data e horrio de actualizao da linha na tabela, isto : quando feita uma mudana em qualquer dado de uma linha da tabela o dado da coluna definida como TIMESTAMP actualizada com o momento actual.

82

Para melhor entender o uso dos tipos de data no MySQL, apresentamos a seguir comandos que demonstram o resultado de datas formatadas:
SELECT * FROM FORMATODATA; SELECT DATE_FORMAT(DT_DateTime, '%d/%m/%Y') as 'DATETIME', DATE_FORMAT(DT_Date, '%d/%m/%Y') as 'DATE', DATE_FORMAT(DT_Timestamp, '%d/%m/%Y') as 'TIMESTAMP FROM FORMATODATA;

83

Para fazermos uso da data actual, devemos utilizar a funo CURDATE(), que retornar a data corrente no formato AAAAMM-DD e se necessitarmos a data no formato AAAAMMDD utilizamos a funo CURDATE() + 0. Ex.| SELECT CURDATE(), CURDATE + 0; Para obtermos a diferena de dias entre duas datas, utilizamos a funo DATADIFF(data1, data2).

84

Ex.| SELECT DATEDIFF('2007-10-30 23:59:59','2007-12-31' Para somarmos dias a uma data, utilizamos a funo DATE_ADD(date,INTERVAL exprtype)

Ex.| SELECT DATE_ADD('2005-12-31 23:59:59', INTERVAL 1 DAY); Para subtrairmos dias a uma data, utilizamos a funo SUBDATE (date,INTERVAL exprtype)

85

Ex.| SELECT SUBDATE('2005-12-31 23:59:59', INTERVAL 5 DAY); Para obtermos o dia da semana, utilizamos a funo DAYOFWEEK(date)

Ex.| SELECT DAYOFWEEK('1998-02-03'); Para obtermos o dia do ano utilizamos a funo DAYOFYEAR(date)

Ex.| SELECT DAYOFYEAR(CURDATE()); Para obtermos o momento atual, utilizamos a funo NOW() ou SYSDATE() Ex.| SELECT NOW(), SYSDATE();

86

II E III PARTES

II PARTE ADMINSTRAO DE BASE DE DADOS UTILIZANDO MYSQL PRINCIPAIS INSTRUES III PARTE - PRTICA ESTUDO DE CASO UTILIZANDO MYSQL
87

II PARTE ADMINSTRAO DE BASE DE DADOS

MYSQL PRINCIPAIS INSTRUES Viso Geral


Para aceder ao servidor MySQL, preciso utilizar o comando que segue. importante lembrar, que o MySQL tem o seu prprio registo de nomes e senhas, sendo que voc pode possuir uma conta no servidor SQL, mas no telnet, e o oposto tambm vlido..
88

Conexo com MySql

mysql -u root -p supersenha Sintaxe: mysql -u (usurio) -p (senha) ou

mysql -h servidor -u (usurio) --password=(senha) Aps validada a senha, e pr-supondo que o MySQL tenha sido corretamente instalado, voc ver algo como: Cliente M ySQL - NBS Bem vindo ao monitor do MySQL. Use ; aps os comandos ou \g. Sua id 49, e voc est conectado a um servidor verso 3.21.23-beta-log Digite 'help' para ajuda. mysql>

89

Criao e Utilizao de uma Base de Dados

Utilize a instruo SHOW para saber quais bases de dados existem actualmente no servidor: mysql> SHOW DATABASES; A lista das bases de dados provavelmente ser diferente na sua mquina, mas as bases de dados mysql e test provavelmente estaro entre eles. A base de dados mysql necessria porque ela descreve privilgios de acessos de usurios. A base de dados test geralamente fornecida como um espao para que os usurios possam fazer testes. Criar uma base de dados e seleciona-a para o uso; voc deve fazer isso de forma explcita. Para fazer da base de dados actual, use o comando: USE mysql> USE tableDatabase changed

90

Continuao....

DESCRIBE (Descrever)DESC Descreve o layout da tabela Exemplo:DESCRIBE tabela DESC tabela

91

Continuao...

CREATE (criar)CREATE DATABASE nome; Cria uma BD totalmente nova. CREATE TABLE nome; define a estrutura de uma tabela dentro da BD, e a forma como todas as tabelas so criadas no MySql. DROP (excluir)DROP DATABASE nome; remove toda a BD com o seus ficheiros. DROP TABLES nome; apaga uma tabela e os seus dados.

92

Tipos de campos no MySQL

O MySQL oferece os mais comuns campos. Alguns deles esto aqui listados:

CHAR(M) Os campos CHAR so usados para caracteres alfanumricos, como endereos e nomes. O seu tamanho fixo e instaurado ao ser criado. Um campo do tipo CHAR pode ter de 1 a 255 caracteres. Exemplo: endereco_comercial CHAR(10); Define um campo chamado 'endereco_comercial', que pode conter at dez letras. Observe que no h acentos no nome do campo, pois muitos servidores no acentuam, e a tabela teria difcil acesso.
93

Continuao...

VARCHAR(M) A sua estrutura e funcionamento idntico ao campo anterior, salvo que no tipo CHAR, o tamanho definido fixo, e mesmo que no usado, aquele espao em disco alocado. J o campo VARCHAR, aloca apenas o espao necessrio para gravao. Contudo, vale lembrar que trocamos espao por velocidade, pois este campo 50% mais lento que o anterior. Exemplo: endereco_comercial VARCHAR(10); Define um campo chamado endereco_comercial que pode conter at dez letras. Se voc preencher apenas duas, o campo no ocupara todos dez bytes, mas apenas 2.

94

Continuao...

INT(M) [Unsigned] O campo INT, que como o prprio nmero diz, suporta o conjunto dos nmeros inteiros numa variao de -2147483648 a 2147483647. O parmetro Unsigned pode ser passado, excluindo os nmeros negativos, proporcionando um intervalo de 0 at 4294967295. Exemplos: carros_estocados INT; Inteiro vlido: -245 Inteiro vlido: 245 Inteiro invlido: 3000000000 carros_estocados INT unsigned; Inteiro vlido: 245 Inteiro invlido: -245 Inteiro invlido: 3000000000
95

FLOAT[(M,D)] Os pontos flutuantes (FLOAT) representam pequenos nmeros decimais, e so usados para representar nmeros com maior preciso. Exemplo: voltagem_cadeira_eletrica FLOAT(4,2);

Float vlido: 324.50 DATE Campo usado para armazenar informaes referentes a data. A forma padro 'AAAA-MM-DD', onde AAAA corresponde ao ano, MM ao ms, e DD ao dia. Ele pode variar de 0000-00-00 a 9999-12-31. O MySQL possui um conjunto poderoso de comandos de formatao e manipulao de datas. Consulte documentao adicional, se houver interesse. Exemplo: data_de_nascimento DATE; Data vlida: 1999-12-06 Data invlida: 1999-06-12

96

Continuao...

TEXT/BLOB Os campos texto e blob so usados para guardar grandes quantidades de caracteres. Podendo conter de 0 a 65535 bytes, os blobs e texts so teis para armazenar documentos completos, como este que voc est a ler. A nica diferena entre os campos BLOB e TEXT est no facto de um campo TEXT no ser sensvel a letras maisculas e minscula quando uma comparao realizada, e os BLOBs sim. Exemplo: relatorio BLOB; BLOB vlido: 'Minha terra tem palmeiras onde canta o...' relatorio TEXT; TEXT vlido: 'A que saudades que eu sinto...'

97

Continuao...

SET Um campo interessante, que permite que o usurio faa uma escolha dado determinado nmero de opes. Cada campo pode conter at 64 opes. Exemplo: vicio SET("cafe", "cigarro") NOT NULL; Neste exemplo este campo pode conter apenas os seguintes itens: "" "cafe" "cigarro" "cafe,cigarro"
98

Continuao...

ENUM Um campo com funcionamento semelhante ao SET, com a diferena que apenas um valor pode ser escolhido. Exemplo: virtude ENUM("programar", "amar") NOT NULL; Neste exemplo este campo pode conter os seguintes valores: "" "programar" "amar"

99

III PARTE - PRTICA

ESTUDO DE CASO UTILIZANDO MYSQL

100

Das könnte Ihnen auch gefallen