Professional Documents
Culture Documents
Grupo de Bases de Dados e Imagens Instituto de Cincias Matemticas e de Computao e a ca Universidade de So Paulo - So Carlos a a caetano@icmc.usp.br
28 de setembro de 2009 So Carlos, SP - Brasil a
GBdI-ICMC-USP
1 / 47
Outline
GBdI-ICMC-USP
2 / 47
Introduo ca
Introduo a SQL ca
Desenvolvida e implementada pelo Laboratrio de Pesquisa da IBM o em San Jose entre os anos de 1964 e 1969, a Linguagem SQL Structured Query Language, inicialmente chamada SEQUEL foi , criada como uma interface entre os usurios e o Sistema de a Gerenciamento de Bancos de Dados Relacional, o System R que , estava sendo desenvolvido no Laboratrio. o Por apresentar-se promissora devido ` sua simplicidade e o grande a poder de consulta em SGBDR, a linguagem SQL atualmente o e padro industrial em linguagemde consultas a banco de dados, e a atinge mais de 95% do mercado de sistemas de gerenciamento de bases de dados.
GBdI-ICMC-USP
4 / 47
Introduo ca
Introduo ca
SQL uma linguagem de consulta sosticada, que vem evoluindo e continuamente, embora mantendo um n de padronizao muito vel ca alto. Entre seus principais atrativos est a pequena quantidade de a comandos extremamente poderosos, atendendo ao paradigma Relacional, ou seja, o programador expressa em SQL o que ele quer recuperar, no como deve ser recuperado. a SQL padronizado pelo American National Standart Institute e (ANSI) e pela International Standard Organization (ISO). A ultima verso foi aprovada pela ISO em 2001, tendo sido designada a SQL:2001.
GBdI-ICMC-USP
5 / 47
Introduo ca
Introduo ca
Linguagem de Denio de Dados - DDL ca Linguagem de Manipulao de Dados - DML ca Linguagem de Controle de Dados - DCL
GBdI-ICMC-USP
6 / 47
DDL
Todos os elementos podem ser criados (CREATE), corrigidos (ALTER) e removidos (DROP), totalizando 36 comandos (cada um com sintaxe prpria). o
Grupo de Bases de Dados e Imagens () Linguagem SQL Conceitos e Comandos Bsicos a GBdI-ICMC-USP 8 / 47
DDL
Sintaxe: CREATE TABLE <nome da tabela> ( <defini~o de Coluna>,... ca <Restri~es de Integridade>,... co ); <defini~o de Coluna> pode ser: ca <nome atr> <tipo de dado> [ NULL | NOT NULL | USER | DEFAULT <default- value> | COMPUTED BY <expresion> ]
GBdI-ICMC-USP
9 / 47
DDL
<tipo de dado> pode ser: {SMALLINT | INTEGER | FLOAT | DOUBLE PRECISION} | {DECIMAL | NUMERIC} [( precision [, scale])] | DATE | {CHAR | CHARACTER | CHARACTER VARYING | VARCHAR} [(int)] | BLOB }
GBdI-ICMC-USP
10 / 47
DDL
<Restri~es de Integridade> podem ser: co PRIMARY KEY [<nome da chave>] (<Atributo>,...) | UNIQUE [<nome da chave>] (<Atributo>,...) | FOREIGN KEY [<nome da chave>] (<Atributo>,...>) REFERENCES <tabela> (<Atributos chaves>, ...)[<a~es>] co | CHECK [<nome da condi~o>] ( <condi~o> ) ca ca
GBdI-ICMC-USP
11 / 47
DDL
Restries de Integridade so tratadas em SQL como Restries co a co (CONSTRAINT). Elas podem ser restries de Atributo ou de Tabela. co Restries de atributos (ou de colunas) so declaradas para cada co a atributo: <nome atr> <tipo de dado> CONSTRAINT <nome Constraint> {PRIMARY KEY | UNIQUE | FOREIGN KEY ... | CHECK ...} Restries de tabela so declaradas separadamente, depois que todos co a os atributos necessrios tenham sido declarados: a <nome atr> <tipo de dado> CONSTRAINT <nome Constraint> {PRIMARY KEY (ATR,...)| UNIQUE (ATR,...)| FOREIGN KEY .. CHECK ...} Ambas podem ser avaliadas de imediato, ou postergadas: [DEFERRABLE | NOT DEFERRABLE] [INITIALLY DEFERRED | INITIALLY IMMEDIATE]
Grupo de Bases de Dados e Imagens () Linguagem SQL Conceitos e Comandos Bsicos a GBdI-ICMC-USP 12 / 47
DDL
Exemplo: CREATE TABLE Turma ( sigla char(7) NOT NULL, numero decimal(2) NOT NULL, codigo decimal(4) PRIMARY KEY, NNalunos decimal(3), FOREIGN KEY SiglaDaTurma (Sigla) REFERENCES Discip (Sigla) ON DELETE CASCADE ON UPDATE CASCADE, UNIQUE SiglaNumero (Sigla, Numero), CHECK LimiteDeVagas (NNalunos<50) );
Grupo de Bases de Dados e Imagens () Linguagem SQL Conceitos e Comandos Bsicos a GBdI-ICMC-USP 13 / 47
DDL
Sintaxe: ALTER TABLE <nome da tabela> ADD <defini~o de Coluna> ca ADD <Restri~o de integridade> -- Chaves primria, ca a -- Secund., Estrang.
MODIFY <defini~o de Coluna> ca MODIFY <defini~o de Coluna> {SET|DROP} DEFAULT <default-value> ca MODIFY <defini~o de Coluna> {SET|DROP} NOT NULL ca
<defini~o de Coluna> ca CHECK | DROP <nome da chave> UNIQUE (<defini~o de Coluna>, ...) ca PRIMARY KEY | DROP FOREIGN KEY
DDL
<defini~o de coluna> pode ser: ca <Nome Atributo> <Tipo de Dado> {SET|DROP} [NULL] | [DEFAULT default-value ]
GBdI-ICMC-USP
15 / 47
DDL
ALTER TABLE Professor ADD CorCabelos CHAR(25) DEFAULT Branco; ALTER TABLE Aluno ADD Altura INT DEFAULT NULL; ALTER TABLE Aluno DROP Altura; ALTER TABLE Professor MODIFY CorCabelos CHAR(30) ; ALTER TABLE Aluno ADD MonitoraDiscip CHAR(7) REFERENCES Disciplina (Sigla) ON UPDATE CASCADE ON DELETE SET NULL; ALTER TABLE Aluno DROP MonitoraDiscip;
Grupo de Bases de Dados e Imagens () Linguagem SQL Conceitos e Comandos Bsicos a GBdI-ICMC-USP 16 / 47
DDL
Sintaxe: DROP TABLE [IF EXISTS] <nome da tabela> [, ...] [CASCADE | RESTRICT]; Exemplo: DROP TABLE Aluno;
GBdI-ICMC-USP
17 / 47
DDL
Sintaxe: CREATE DOMAIN <Nome do Domnio> [AS] <Tipo de Dado> | [[NOT] NULL] | [DEFAULT valor-default] | [CHECK ( Condi~o)] ca
GBdI-ICMC-USP
18 / 47
DDL
<condi~o> = { ca VALUE <operador> <val> | VALUE [NOT] BETWEEN <val> AND <val> | VALUE [NOT] LIKE <val> [ESCAPE <val>] | VALUE [NOT] IN ( <val> [, <val> ...]) | VALUE IS [NOT] NULL | VALUE [NOT] CONTAINING <val> | VALUE [NOT] STARTING [WITH] <val> | (<Condi~o>) ca | NOT <Condi~o> ca | <Condi~o> OR <Condi~o> ca ca | <Condi~o> AND <Condi~o> ca ca } <operador> = {= | < | > | <= | >= | !< | !> | <> | !=}
Grupo de Bases de Dados e Imagens () Linguagem SQL Conceitos e Comandos Bsicos a GBdI-ICMC-USP 19 / 47
DDL
Exemplos: CREATE DOMAIN DNome_Pessoa CHAR (40) NULL; CREATE DOMAIN DCodigo INT NOT NULL;
GBdI-ICMC-USP
20 / 47
DDL
GBdI-ICMC-USP
21 / 47
DML
GBdI-ICMC-USP
23 / 47
DML
Sintaxe: <Consulta>={ SELECT [ ALL | DISTINCT ] <lista de atributos> FROM <lista de Tabelas> [WHERE <condi~o>] ca [GROUP BY <lista de atributos> [HAVING <condi~o>]] ca [ORDER BY <Lista de atributos> [ASC|DESC], ...] }; <Consulta1> UNION [ALL] <Consulta2>; | <Consulta1> INTERSECT [ALL] <Consulta2>; | <Consulta1> EXCEPT [ALL] <Consulta2>;
Grupo de Bases de Dados e Imagens () Linguagem SQL Conceitos e Comandos Bsicos a GBdI-ICMC-USP 24 / 47
DML
GBdI-ICMC-USP
25 / 47
DML
GBdI-ICMC-USP
26 / 47
DML
Exemplo: Listar os alunos, disciplinas e notas tiradas em turmas com mais de 10 alunos SELECT A.Nome, T.Sigla Disciplinas, M.Nota FROM Alunos A, Turma T, Matricula M WHERE A.NUSP=M.NUSP AND M.CodigoTurma=T.Codigo AND T.NNAlunos>10 ORDER BY A.Nome, T.Sigla;
GBdI-ICMC-USP
27 / 47
DML
Exemplo: Listar A mdia das notas das disciplinas em turmas com mais de e 10 alunos SELECT T.Sigla, AVG(M.Nota) FROM Turma T, Matricula M WHERE M.CodigoTurma=T.Codigo GROUP BY T.sigla HAVING Count(*)>10;
GBdI-ICMC-USP
28 / 47
DML
O Modelo Relacional um Meta Modelo: capaz de modelar a si mesmo. e e Assim existem: Tabelas de Tabelas, Tabelas de Atributos, etc. No gerenciador Interbase (e vrios outros), as tabelas do sistemas so a a ltradas para no serem mostradas no ISQL, mas podem ser acessadas a normalmente. Seus nomes comeam com RDB$. c Exemplo: SELECT RDB$Field_Name, RDB$Relation_Name, RDB$Field_Position FROM RDB$Relation_Fields WHERE RDB$Relation_Name NOT LIKE RDB$% ORDER BY RDB$Relation_Name, RDB$Field_Position
GBdI-ICMC-USP
29 / 47
DML
Junes so especicadas na clusula WHERE ou na clusula FROM, mas a forma completa co a a a somente pode ser especicada na clusula FROM. a <Lista de Tabelas> = <joined_table> | <Tabela> <joined_table> = <Tabela> <join-type> <Tabela> {ON <Condi~oJun~o> | ( <joined_table>) | ca ca USING (<atrib1> [, ...] | NATURAL} <join-type> = {[INNER] | [CROSS] | {LEFT | RIGHT | FULL}[OUTER] } JOIN A <Condi~oJun~o> pode ser indicada como: ca ca
GBdI-ICMC-USP
30 / 47
DML
<Condi~oJun~o> = { ca ca <val> <operator> <val> | <val> [NOT] BETWEEN <val> AND <val> | <val> [NOT] LIKE <val> [ESCAPE <val>] | <val> [NOT] IN ( <val> [, <val> ] | <select_list>) | <val> IS [NOT] NULL | <val> {[NOT] {=<|>}|>=|<=} {ALL|SOME|ANY} (<select_list>) | EXISTS ( <select_expr>) | SINGULAR ( <select_expr>) | <val> [NOT] CONTAINING <val> | <val> [NOT] STARTING [WITH] <val> | (<Condi~oJun~o>) ca ca | NOT <Condi~oJun~o> ca ca | <Condi~oJun~o> OR <Condi~oJun~o> ca ca ca ca | <Condi~oJun~o> AND <Condi~oJun~o> ca ca ca ca }
Grupo de Bases de Dados e Imagens () Linguagem SQL Conceitos e Comandos Bsicos a GBdI-ICMC-USP 31 / 47
DML
Exemplo: Listar todas as disciplinas, com seus respectivos pr-requisitos. e SELECT D.Sigla, D.Nome, Pre.Sigla FROM Discip D LEFT OUTER JOIN Discip Pre ON D.SiglaPreReq=Pre.Sigla;
GBdI-ICMC-USP
32 / 47
DML
Sintaxe: Formato 1: Insere uma tupla de cada vz. e INSERT INTO <Tabela> [( <Atributo>, ... )] VALUES ( expression | DEFAULT, ... ); Formato 2: Insere mltiplas tuplas a partir de uma tabela.z u INSERT INTO <Tabela> [( <Atributo>, ... )] <Comando SELECT>;
GBdI-ICMC-USP
33 / 47
DML
Formato 1: Insere uma tupla de cada vz. e insert into Professor values (Antonio,5656,MS-3,33); insert into Professor ( Nome, Grau, NNfuncional) values (Antoninho, MS-3, 5757); Formato 2: Insere mltiplas tuplas a partir de uma tabela. u INSERT INTO pessoa ( Nome, Idade ) SELECT nome, idade from Aluno; INSERT INTO pessoa ( Nome, Idade ) SELECT nome, idade from Professor; INSERT INTO Saocarlenses SELECT * FROM aluno WHERE cidade like S%Carlos;
Grupo de Bases de Dados e Imagens () Linguagem SQL Conceitos e Comandos Bsicos a GBdI-ICMC-USP 34 / 47
DML
Sintaxe: UPDATE <tabela> SET <Atributo> = <express~o>, ... a [ WHERE <Condi~o> ] ca <express~o> = {<Atributo>|<constante>|<expr>|NULL|USER} a Onde <expr> qualquer comando SELECT que resulte em apenas uma e tupla e uma coluna.
GBdI-ICMC-USP
35 / 47
DML
Aumentar em um a idade de todos os alunos. UPDATE Alunos SET Idade=Idade+1 UPDATE Turma SET NNAlunos= ( SELECT count (*) FROM matricula WHERE codigoTurma=101) WHERE Codigo=101; Note-se que a clusula WHERE deve selecionar apenas as tuplas de Turma a com cdigo=101. o
Grupo de Bases de Dados e Imagens () Linguagem SQL Conceitos e Comandos Bsicos a GBdI-ICMC-USP 36 / 47
DML
Sintaxe: DELETE [FROM] <tabela> [WHERE <Condi~o>] ca Exemplos: Apaga todas as tuplas do aluno cujo NUSP vale 1234: DELETE FROM Aluno WHERE NUSP=1234; Remove todos os Alunos em que o atributo Cidade tem o valor indicado: DELETE FROM Aluno WHERE Cidade = Mirim-Guau; c Apaga Todas as tuplas da relao; ca DELETE FROM Aluno;
Grupo de Bases de Dados e Imagens () Linguagem SQL Conceitos e Comandos Bsicos a GBdI-ICMC-USP 37 / 47
DML
Uso de Funoes c
Funoes usadas em comandos da DML c
Funes podem ser utilizadas em geral, em qualquer lugar onde um co <atributo> pode ser utilizado. Por exemplo, nas clusulas SELECT e a WHERE do comando SELECT. Existem funes para todos os tipos de dados da linguagem co
1 2 3 4
GBdI-ICMC-USP
38 / 47
DML
Uso de Funoes c
Funoes para Agregados c
Funes para Agregados podem ser utilizadas apenas em comandos co SELECT que tenham as clausulas HAVING e ORDER BY. AVG(<Param_agreg>) Retorna a mdia e COUNT(*) Retorna o nmero de tuplas no grupo. u COUNT(<Param_agreg>) Retorna o nmero de tuplas distintas ou u onde os atributos no so nulos. a a MAX(<Param_agreg>) Retorna o maior valor encontrado MIN(<Param_agreg>) Retorna o menor valor encontrado SUM(<Param_agreg>) Retorna a soma dos valores <Param_agreg> pode ser: DISTINCT <atributos> | <atributos>
Grupo de Bases de Dados e Imagens () Linguagem SQL Conceitos e Comandos Bsicos a GBdI-ICMC-USP 39 / 47
DML
Uso de Funoes c
Funoes sobre tipos de dados: Tipos Numricos c e
ABS (num-expr) ACOS (num-expr) -- em radianos ASIN (num-expr) ATAN (num-expr) ATAN2 (num-expr1, num-expr2) -- Arco-tangente de num-expr1/num-expr2 em radianos. CEILING (num-expr) -- Menor inteiro nao menor que COS (num-expr) COT (num-expr) -- Cotangente DEGREES (num-expr) -- Converte de Radianos para Graus EXP (num-expr) FLOOR (num-expr) -- Maior inteiro n~o maior que a LOG (num-expr) LOG10 (num-expr) PI (*) POWER (num-expr1, num-expr2) -- num-expr1 elevado a num-expr2 RADIANS (num-expr) -- Converte de Graus para Radianos RAND ([integer-expr]) REMAINDER (num-expr, num-expr) ROUND (num-expr, integer-expr) --Arredonda para integer-expr casas decimais SIGN (num-expr) SIN (num-expr) SQRT (num-expr) TAN (num-expr) TRUNCATE (num-expr, integer-expr) --Trunca para integer-expr casas decimais
GBdI-ICMC-USP
40 / 47
DML
Uso de Funoes c
Funoes sobre tipos de dados: Cadeias de Caracteres c
BYTE_LENGTH (Cadeia) BYTE_SUBSTR (Cadeia, posic_inicial[, num_bytes]) CHAR (Numero-ASCII) INSERTSTR (num-posic, Cadeia1, Cadeia2) -- Insere Cadeia2 em Cadeia1 a partir de Posic. LCASE (Cadeia) LEFT (Cadeia, num-expr) LENGTH (Cadeia) LOCATE (Cadeia1, Cadeia2[, num-posic]) -- Retorna a posicao onde Cadeia2 foi encontrada em Cadeia 1, procurando a partir da Posicao dada. LTRIM (Cadeia) -- Remove brancos do incio REPEAT (Cadeia, num-vezes) RIGHT (Cadeia, num-expr) RTRIM Cadeia) -- Remove brancos do final SIMILAR (Cadeia1, Cadeia2) -- Porcentagem de caracteres que comparam por =. SPACE (integer-expr) STRING (Cadeia[, ...]) -- Concatena as cadeias dadas SUBSTR (Cadeia, num_inicio[, Num_bytes]) TRIM (Cadeia) -- Remove brancos do incio e do final UCASE (Cadeia)
GBdI-ICMC-USP
41 / 47
DML
Uso de Funoes c
Funoes sobre tipos de dados: Tempo e Data c
DATE (Cadeia) -- Data DATEFORMAT (DataHora, Cadeia-formato) -- Retorna cadeia com datahora dada, no formato dado em Cadeia_formato. DATETIME (Cadeia) -- Data e Hora DAY (Data) -- Dia da Data indicada DAYNAME(Data) -- Nome do dia da semana DAYS (Data) -- Diferena em dias de hoje at a data indicada c e DAYS (Data, Data) -- Diferena em dias das datas c DAYS (Data, Num-dias) -- Data indicada mais o numero de dias indicado DOW (Data) -- 1= domingo, 2=segunda,... HOUR (DataHora) HOURS (DataHora) HOURS (DataHora, DataHora) HOURS (DataHora, Num-Horas) MINUTE (DataHora) MINUTES (DataHora) MINUTES (DataHora, DataHora) MINUTES (DataHora, Num_minutos) MONTH (Data) MONTHNAME (Data) MONTHS (Data) MONTHS (Data, Data) MONTHS (Data, Num_Minutos) ...
GBdI-ICMC-USP
42 / 47
DML
Uso de Funoes c
Funoes sobre tipos de dados: Tempo e Data c
... NOW (*) -- Data e Hora QUARTER(Data) -- Jan/fev/mar =1, abr/mai/jun=2... SECOND (expression) SECONDS (DataHora) SECONDS (DataHora, DataHora) SECONDS (DataHora, Num_Segundos) TODAY (*) --Data WEEKS (Data) WEEKS (Data, Data) WEEKS (Data, Num_Semanas) YEAR (Data) YEARS (Data) YEARS (Data, Data) YEARS (Data, Num_Anos) YMD (Num_anos, Num_meses, Num_dias)
GBdI-ICMC-USP
43 / 47
DML
Uso de Funoes c
Funoes sobre tipos de dados: Miscelnea c a
CAST(expression AS datatype) Retorna o valor da expresso como a sendo do tipo Datatype. DATALENGTH (<Atributo>) Retorna o nmero de bytes gastos para u armazenar. DB_NAME( ) Retorna o nome da base de dados. NUMBER (*) Gera nmeros desde 1 at o nmero de tuplas, para cada u e u tupla de um comando SELECT. Pode ser usado para gerar chaves em comandos INSERT, mas nesse caso deve-se ddar preferenci ao uso da clausula AUTOINCREMENT.
GBdI-ICMC-USP
44 / 47
DCL
Os comandos da sub-liguagem de Manipulao de Dados tm estrutura ca e individual. Alguns exemplos so: a CONNECT: Permite a conexo a uma base de dados atravs de um a e gerenciador; DISCONNECT: Desconecta de uma base de dados; COMMIT: Torna permanente todas as alteraes feitas desde o in co cio da conexo; a ROLLBACK: Descarta todas as alteraes feitas desde o in da co cio conexo, ou do ultimo comando COMMIT ou ROLLBACK. a
GBdI-ICMC-USP
46 / 47
Grupo de Bases de Dados e Imagens Instituto de Cincias Matemticas e de Computao e a ca Universidade de So Paulo - So Carlos a a caetano@icmc.usp.br
28 de setembro de 2009 So Carlos, SP - Brasil a
FIM
Grupo de Bases de Dados e Imagens () Linguagem SQL Conceitos e Comandos Bsicos a GBdI-ICMC-USP 47 / 47