Linguagem SQL Comandos Básicos Caetano Traina Júnior Grupo de Bases de Dados e Imagens Instituto de Ciências Matemáticas e de Computação Universidade de São Paulo - São Carlos caetano@icmc.sc.usp.br
Comando CREATE TABLE Cria uma Tabela no Esquema da Aplicação Sintaxe: CREATE TABLE <nome da tabela> ( <definição de Coluna>,...-- tantos atributos quantos necessários <Restrições de Integridade> ); <definição de Coluna> pode ser <nome atr> <tipo de dado> [NULL NOT NULL USER DEFAULT <default- value> COMPUTED BY <expresion>
Comando CREATE TABLE Tipos de dados <tipo de dado> pode ser: {SMALLINT INTEGER FLOAT DOUBLE PRECISION} {DECIMAL NUMERIC} [( precision [, scale])] DATE {CHAR CHARACTER CHARACTER VARYING VARCHAR} [( int)] BLOB }
Comando CREATE TABLE Primeiro Exemplo Exemplo: CREATE TABLE Aluno ( nome varchar(40) NOT NULL, NUSP decimal(8) NOT NULL, idade decimal(2) DEFAULT 18, cidade varchar(30), ID_Responsavel varchar(20) DEFAULT USER ) ;
Comando CREATE TABLE Restrições de Integridade <Restrições de Integridade> podem ser: PRIMARY KEY [<nome da chave>] ( <Atributo>,... ) UNIQUE [<nome da chave>] ( <Atributo>,... ) FOREIGN KEY [<nome da chave>] (< <Atributo>,... > ) REFERENCES <tabela> ( <Atributos chaves>,... ) [ <ações> ] CHECK [<nome da condição>] ( <condição> ) <ações> podem ser: ON { UPDATE DELETE } { CASCADE SET NULL SET DEFAULT }
Comando CREATE TABLE Segundo 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 (Value <50) );
Comando ALTER TABLE Modifica tabelas já definidas Sintaxe: ALTER TABLE <nome da tabela> ADD <definição de Coluna> ADD <Restrição de integridade> -- Chaves primária, Secund. Estrang. MODIFY <definição de Coluna> MODIFY <definição de Coluna> DEFAULT <default-value> MODIFY <definição de Coluna> [ NOT ] NULL DROP <definição de Coluna> DROP CHECK DROP <nome da chave> DROP UNIQUE ( <definição de Coluna>,... ) DROP PRIMARY KEY DROP FOREIGN KEY RENAME <novo nome> RENAME <Atributo> TO <novo atributo> <definição de coluna> pode ser: <Nome Atributo> <Tipo de Dado> [NULL ] [ DEFAULT default-value ] -- nao vale [NOT NULL]
Comando ALTER TABLE Exemplos 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;
Comando DROP TABLE Remove completamente uma tabela e sua definição Sintaxe: DROP TABLE <nome da tabela>; Exemplo: DROP TABLE Aluno;
Comando CREATE DOMAIN Cria um tipo de dado definido pelo usuário Sintaxe: CREATE DOMAIN [ AS ] <Nome do Domínio> <Tipo de Dado> [ [ NOT ] NULL ] [ DEFAULT valor-default ] [ CHECK ( Condição ) ]
Comando CREATE DOMAIN Cria um tipo de dado definido pelo usuário <condição> = { 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>) NOT <Condição> <Condição> OR <Condição> <Condição> AND <Condição> } <operador> = {= < > <= >=!<!> <>!=
Comando CREATE DOMAIN Exemplos CREATE DOMAIN DNome_Pessoa CHAR (40) NULL; CREATE DOMAIN DCodigo INT NOT NULL; CREATE DOMAIN DIdade INT CHECK (VALUE BETWEEN 1 AND 120);
Comando DROP DOMAIN Elimina um tipo de dado já definido pelo usuário Sintaxe: DROP DOMAIN <Nome do Domínio> Exemplo: DROP DOMAIN Nome_Pessoa;
Exercícios Comandos da DDL Considerando a definição para a Base de Dados ALUNOS, dada previamente, a) (*) Re-escrever o Script original, para definir todas as restrições de integridade; b) (*) Escrever um novo Script, para remover todas as restrições de integridade; c) (*) Escrever um novo Script, para reativar todas as restrições de integridade; d) Escrever um novo Script, para ativar a verificação de pelo menos 4 condições para os atributos individuais. Entregar apenas os Exercícios marcados com (*)
Comando SELECT Realiza as consultas em uma base de dados Sintaxe: SELECT [ ALL DISTINCT ] <lista de atributos> FROM <lista de Tabelas> [ WHERE <condição> ] [ GROUP BY <Atributo>,... [ HAVING <condição> ] ] ORDER BY <Lista de atributos> [ ASC DESC ],... ]
SELECT A1 FROM R WHERE C1 Comando SELECT Realiza as consultas em uma base de dados R... C1 A1
SELECT A1 FROM R WHERE C1 GROUP BY A2 HAVING C2 Comando SELECT Realiza as consultas em uma base de dados C2 A1 R... C1 A1+A2
Comando SELECT Realiza as consultas em uma base de dados 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.Codito AND T.NNAlunos>10 ORDER BY A.Nome, T.Sigla; R Alunos A Turma T Matricula M C1 A.NUSP=M.NUSP M.CodigoTurma= T.Codigo T.NNAlunos>10 A.Nome A1 T.Sigla Disciplinas M.Nota
Comando SELECT Realiza as consultas em uma base de dados Exemplo:Listar A média das notas das disciplinas em turmas com mais de 10 alunos SELECT T.Sigla Disciplinas, AVG(M.Nota) FROM Turma T, Matricula M WHERE M.CodigoTurma=T.Codito AND GROUP BY T.Sigla HAVING T.NNAlunos>10; C2 T.NNAlunos >10 A1 T.Sigla Disciplinas AVG(M.Nota) R Turma T Matricula M C1 M.CodigoTurma= T.Codigo A2 T.Sigla ( Disciplinas ) T.NNAlunos +A1 AVG(M.Nota)
Comando SELECT Realiza as consultas em uma base de dados O Modelo Relacional é um Meta Modelo: é capaz de modelar a si mesmo. Assim existem: Tabelas de Tabelas, Tabelas de Atributos, etc. No gerenciador Interbase (e vários outros), as tabelas do sistemas são filtradas para não serem mostradas no ISQL, mas podem ser acessadas normalmente. Seus nomes começam com RDB$. 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
Comando SELECT Lista de tabelas <Lista de Tabelas> = <joined_table> <Tabela> <joined_table> = <Tabela> <join-type> JOIN <Tabela> ON <CondiçãoJunção> ( <joined_table>) <join-type> = { } JOIN
Comando SELECT Lista de tabelas <CondiçãoJunção> = { <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>) NOT <CondiçãoJunção> <CondiçãoJunção> OR <CondiçãoJunção> <CondiçãoJunção> AND <CondiçãoJunção> }
Comando SELECT Lista de tabelas Exemplo: SELECT D.Sigla, D.Nome, Pre.Sigla FROM Discip D LEFT OUTER JOIN Discip Pre ON D.SiglaPreReq=Pre.Sigla
Comando INSERT INTO Insere tuplas em uma Relação Sintaxe: Formato 1: -- Insere uma tupla de cada vez. INSERT INTO <Tabela> [( <Atributo>,... )] VALUES ( expression DEFAULT,... ); Formato 2: -- Insere múltiplas tuplas a partir de uma tabela. INSERT INTO <Tabela> [( <Atributo>,... )] <Comando SELECT>;
Comando INSERT INTO Insere tuplas em uma Relação Exemplos Formato 1: - Insere uma tupla de cada vez. insert into Professor values ('Antonio', '5656', 'MS-3', 33); insert into Professor ( Nome, Grau, NNfuncional) values ('Antoninho', 'MS-3', '5757'); Formato 2: -- Insere múltiplas tuplas a partir de uma tabela. INSERT INTO pessoa ( Nome, Idade ) SELECT nome, idade from aluno; INSERT INTO Sancarlenses SELECT * FROM aluno WHERE cidade like S%Carlos ;
Comando UPDATE TABLE Altera o valor de atributos de tuplas de uma relação Sintaxe: UPDATE <tabela> SET <Atributo> = <expressão>,... [ WHERE <Condição> ] <expressão> = {<Atributo> <constante> <expr> NULL USER?} <expr> = Qualquer comand SELECT que resulte em apenas uma tupla e uma coluna.
Comando UPDATE TABLE Altera o valor de atributos de tuplas de uma relação Exemplo: UPDATE Alunos SET Idade=Idade+1 -- Todas as tuplas da relação têm idade incrementada de um (1) UPDATE Turma SET NNAlunos= ( SELECT count (*) FROM matricula WHERE codigoturma=101 ) WHERE Codigo=101 --Apenas as tuplas de Turma com código=101
Comando DELETE FROM Remove tuplas de uma relação Sintaxe: DELETE [FROM] <tabela> [WHERE <Condição>] Exemplos: DELETE FROM Aluno WHERE NUSP=1234; -- Apaga tupla cujo NUSP vale 1234 DELETE FROM Aluno WHERE Cidade = Mirim-Guaçu' -- Remove todos os Alunos em que o atributo Cidade tem o valor indicado. DELETE FROM Aluno; -- Apaga Todas as tuplas da relação
Linguagem SQL Comandos Básicos Caetano Traina Júnior Grupo de Bases de Dados e Imagens Instituto de Ciências Matemáticas e de Computação Universidade de São Paulo - São Carlos caetano@icmc.sc.usp.br
Esquema Exemplo create table Professor ( nome varchar(40) NOT NULL, NNfuncional char(7) NOT NULL, grau char(7), idade decimal(2)); create table Aluno ( nome varchar(40) NOT NULL, NUSP decimal(8) NOT NULL, idade decimal(2), cidade varchar(30)) ; create table Discip ( sigla char(7) NOT NULL, nome varchar(25) NOT NULL, siglaprereq char(7), NNcred decimal(2) NOT NULL); create table Turma ( sigla char(7) NOT NULL, numero decimal(2) NOT NULL, codigo decimal(4) NOT NULL, NNalunos decimal(3)); create table Matricula ( codigoturma decimal(4) NOT NULL, NUSP decimal(8) NOT NULL, nota decimal(3)); create table Ministra ( NNfuncprof char(7) NOT NULL, codigo decimal(4) NOT NULL, livro varchar(50));
Esquema Exemplo Matriculas de alunos Professor = { Nome, N#Funcional, Grau, Idade} Aluno = { Nome, N#USP, Idade, Cidade} Turma = { Sigla, Número, Código, N#Alunos} Discip. = { Sigla, Nome, SiglaPréReq, N#Créd.} Matrícula = { CódigoTurma, N#USP, nota} Ministra = { N#FuncProf, Código, livro}