(Structured Query Language)
O SQL é uma linguagem para consultas a banco de dados. Banco de Dados (em inglês DataBase) é um conjunto de tabelas relacionadas entre si e gerenciadas por um SGBD (Sistema Gerenciador de Banco de Dados). Um SGBD (em inglês DBMS - DataBase Management System) é uma ferramenta usada para acessar, manter e gerenciar bancos de dados através do SQL. Temos como exemplos de SGDBs o MS-SQL Server, PostgreSQL, MySQL, Oracle, Firebird, DB2 etc.
-
SELECT (selecionar/consultar)
- select * from cliente ()
- select id,nome from cliente ()
- select salario+10,text from empregado (pode-se usar os operadores aritméticos +, -, * e /)
- select (id) cpf from usuario (alias de coluna)
- select (id) as cpf from usuario (idem)
- select distinct grupo_id from usuario (não exibe linhas repetidas)
- Obs: Os operadores aritméticos existentes são +, -, * e /.
SELECT + ORDER BY (ordenar as linhas)
- select * from usuario order by id ()
- select * from usuario order by id asc ()
- select * from usuario order by id desc ()
- select * from usuario order by 3(pela terceira coluna)
- select id_software, nm_software, te_descricao_software from softwares order by id_software ()
SELECT + LIMIT (mostra uma quantidade de linhas)
- select * from usuario limit 3 (mostra as três primeiras linhas)
SELECT + WHERE (restringir/especificar o valor de retorno de uma consulta)
- select * from usuario where nome = 'juvenal' (quando for uma string deve-se colocar apóstrofo)
- select * from usuario where id = 83886080 ()
- select * from usuario where id = '83886080' ()
- select * from usuario where nome_id != 'convidado' (diferente)
- select * from usuario where nome_id <> 'convidado' (diferente)
- select * from usuario where nome = 'hugo' and id = 2 ()
- select * from usuario where id = 80 or usuario = 'jose'()
- select Account, Forward from Users where Forward IS NOT NULL (mostra os resultados nao nulos)
- select Account, Forward from Users where Forward IS NOT NULL and Forward != '' (mostra os resultados nao nulos e os que nao estao em branco)
- select Account, Forward from Users where Forward IS NOT NULL and Forward <> '' (idem)
- Obs1: Os operadores de comparação existentes são =, !=, <>, <, <=, > e >=.
- Obs2: Os operadores lógicos existentes são AND, OR e NOT.
- Obs3: Os operadores SQL existentes são BETWEEN...AND, IN(list), LIKE, NOT LIKE, IS NULL E IS NOT NULL.
SELECT + WHERE + BETWEEN
- select * from usuario where cpf between 83886080 and 83886082 ()
- select * from usuario where cpf not between 83886080 and 83886082 ()
SELECT + WHERE + IN
- select * where usuario IN ('convidado','administrador','hugo') ()
- select * where usuario NOT IN ('convidado','administrador','hugo') ()
SELECT + WHERE + LIKE
- select * from usuario where nome LIKE 'convid%' ()
- select * from usuario where nome NOT LIKE 'convid%' ()
- select * from usuario where nome LIKE 'hug_' ()
- Obs: O caracter "%" representa qualquer caracte e o "_" representa um caracter.
SELECT + WHERE + IS NULL
- select * from usuario where sobrenome IS NULL ()
- select * from usuario where sobrenome is not null ()
-
SELECT + WHERE + JOIN (consultar dados em mais de uma tabela, geralmente usa a PK [Primary Key] e a FK [Foreign Key] para linkar as tabelas)
- select * from usuario,grupo (duas tabelas - JOIN grosseiro)
- select * from grupo, usuario where grupo.id = usuario.grupo_id (duas tabelas - JOIN correto - sempre usa o WHERE)
- select * from usuario, grupo where usuario.grupo_id = grupo.id (idem)
- select * from usuario u, grupo g where u.grupo_id = g.id (idem, mas com alias de tabelas)
SELECT + WHERE + EQUI JOIN (equijoin é um join feito com o operador = )
- select * from grupo, usuario where grupo.id = usuario.grupo_id ()
SELECT + WHERE + NON-EQUI JOIN (non-equijoin é um join feito com o operador que não seja o =. Usado quando nenhum coluna de uma tabela corresponde diretamente a uma coluna da segunda tabela. O non-equijoin é um join de uma tabela com ela mesma)
- select * from grupo, usuario where grupo.id BETWEEN usuario.grupo_id and usuario.grupo_id()
SELECT + WHERE + OUTER JOIN (outer join é um join usado para ver linhas que normalmente não satisfazem a condição de JOIN)
- ??? ()
SELECT + WHERE + SELF JOIN ()
- select * from empregado , gerente where empregado.gerente_id = gerente.id ()
-
SELECT + AVG (média)
- select avg(salary) from empresa ()
SELECT + COUNT (conta o número de linhas)
- select count(empregado) from empresa ()
SELECT + SUM (soma)
- select sum(salary) from empresa ()
SELECT + MIN (mínimo)
- select min(salary) from empresa ()
SELECT + MAX (máximo)
- select max(salary) from empresa ()
SELECT + UPPER (maiúscula)
- select upper(nome) from empregado ()
-
SELECT + GROUP BY ()
- select dept_id from s_emp group by dept_id (não repete o mesmo registro, ou seja, os agrupa. Digite "select dept_id from s_emp order by dept_id" e veja que vários registros se repetem)
- select dept_id, count(*) from s_emp group by dept_id (não repete o mesmo registro e contabiliza os registros repetidos. Se for retirado o "group by" a consultada não funcionará, pois o "count" necessita que os registros repetidos estejam agrupados. A consulta "select dept_id, count(*) from s_emp order by dept_id" dará um erro, pois não houve agrupamento, mas sim um ordenamento)
- select title, max(salary) from s_emp group by title (mostra o salário mais alto de cada título do cargo, ou seja, mostra o maior valor do campo "salary", sendo ele agrupado pelo campo "title")
Obs: funções de grupo não podem ser utilizadas em cláusulas WHERE e ORDER BY. No caso do ORDER BY nao e necessario, pois mesmo que ao fazer uma consulta e os registros vierem todos desordenados o GROUP BY conseguira trabalhar e trara os registros agrupados, ou seja, sem repeticao, nao havendo a necessidade de ordena-los primeiro.
SELECT + HAVING ()
- select dept_id, avg(salary) from s_emp group by dept_id having sum(salary) > 2000(não repete o mesmo registro, ou seja, os agrupa e só mostra o resultado se a soma dos salários do agrupamento for maior que 2000)
-
SELECT + QUERY (SUBQUERY) ()
- select ename, job, sal from emp where sal = (select min (sal) from emp) (mostra a linha do empregado que tem o menor salário)
- select ename, job, sal from emp where deptno = (select deptno from dept where loc = 'chicago') (mostra as linhas dos empregados cujo o número do departamento seja o da localidade Chicago)
Agora que foi entendido alguns comando básico SQL, vamos ver como é originado um banco de dados. Tudo começa pelo MER (Modelo de Entidade e Relacionamento) que é uma associação entre entidades distintas:
- Entidade: conjunto de objetos sobre as quais se deseja manter as informações no banco de dados, ou seja, as tabelas. Exemplo: Pedido, cliente, departamento etc;
- Atributos: descrição ou qualificação de uma entidade, ou seja, as colunas/campos. Exemplo: atributos do pedido são id, data_pedido, data_entrega etc. Atributos do cliente são id, nome, sobrenome, telefone, endereço etc;
- Classe: tabela;
- Objeto: registro ou linha;
- Relacionamento: conjunto de associações entre as entidades, ou seja, as foreign keys;
- Regras de negócio: restrições ou diretrizes para inserir, modificar ou deletar um atributo ou entidade, ou seja, as constraints;
Essa parte será um pouco mais extensa, pois será necessário passar vários conceitos para o entendimento da criação de uma tabela. Tabela é entendida como objeto do banco de dados utilizado para armazenar dados. Para a criação do objeto usa-se um comando DDL. Para a criação de uma tabela usa-se o seguinte padrão:
CREATE TABLE [schema.]TABELA (COLUNA DATA_TYPE [constraint_coluna], [constraint_tabela]) ()- SCHEMA: nome do proprietário;
- TABELA: nome do objeto;
- COLUNA: nome do atributo;
- DATATYPE: tipo e tamanho do dado. Os tipos de dados são: Integer, smallint, float, double precision, numeric, decimal, date, time, timestamp, character, varying character e blob. O blob é usado para armazenar dados grandes de tamanho indeterminado e variável, como images, desenhos vetoriais, arquivos de som, vídeo, documentos etc;
- CONSTRAINT DE COLUNA: integridade da coluna. Estabelece regras a nível de coluna ou tabela onde as linhas são inseridas, atualizadas ou deletadas. A constraint deve ser satisfeita para ter sucesso na operação. Previne a deleção de uma tabela ou coluna se houver dependências. A constraint pode ser nomeada ou o próprio servidor a nomeia, pode ser criada ao mesmo tempo da criação da tabela/coluna ou depois. Os tipos de constraint são: NOT NULL, UNIQUE, PRIMARY KEY, FOREIGN KEY e CHECK. Segue o padrão: COLUMN [CONSTRAINT nome_constraint] TIPO_CONSTRAINT;
- CONSTRAINT DE TABELA: integridade da tabela. Idem. Segue o padrão: COLUMN, [CONSTRAINT nome_constraint] TIPO_CONSTRAINT (coluna, ...).
- create table empregado (nome varchar(15) not null) (cria uma tabela chamada EMPREGADO com uma coluna chamada NOME. Essa coluna vai ser um string que pode conter até 15 caractere)
- create table empregado (id numeric(7) CONSTRAINT empregado_nn not null CONSTRAINT empregado_pk PRIMARY KEY, nome varchar(15) not null)(cria uma tabela chamada EMPREGADO com duas colunas chamadas ID e NOME. A coluna chamada ID é do tipo númerico até 7 números, não poderá ser nulo e é a chave primária da tabela. As constraints da tabela ID se chamam "empregado_nn" e "empregado_pk". A coluna nome vai ser um string que pode conter até 15 caractere. Essas constraints são de coluna).
- create table empregado (id numeric(7) CONSTRAINT empregado_nn not null CONSTRAINT empregado_pk PRIMARY KEY, nome varchar(15) not null, setor_id integer CONSTRAINT empregado_setor_id_fk REFERENCES setor (id))(cria uma tabela chamada EMPREGADO com duas colunas chamadas ID e NOME. A coluna chamada ID é do tipo númerico até 7 números, não poderá ser nulo e é a chave primária da tabela. As constraints da tabela ID se chamam "empregado_nn" e "empregado_pk". A coluna nome vai ser um string que pode conter até 15 caractere. A coluna chamada SETOR_ID é numérica de até 2 númros e é uma chave estrangeira referente a tabela SETOR coluna ID. Todas as constraints são de coluna).
-
DROP TABLE nome_tabela ()
- drop table empregado (deleta a tabela chamada "empregado")
Obs: não é possível realizar rollback.
DML (Data Manipulation Language) compreende os comandos usados para incluir, atualizar ou deletar dados no banco de dados.
-
INSERT INTO nome_tabela [coluna,...] VALUES (valores,...) ()
- insert into empregado values (1,'Hugo',100663298) ()
- insert into empregado (id,nome,setor_id) values (2,'Juvenal',100663296)()
- insert into empregado (id,nome,setor_id) values (3,'Ronaldo',null)(o setor_id terá o valor NULL implicitamente)
- insert into historic select id, last_name, salary, title, start_date from s_emp where start_date < '01-JAN-94' (adicionando linhas de uma outra tabela)
-
UPDATE nome_tabela SET coluna=valor [WHERE condição] ()
- UPDATE empregado SET id=3 where nome = 'Hugo' ()
- UPDATE empregado SET id=3, setor_id=100663296 where nome = 'Hugo'()
- update users set password = '23E1EA2062A733A1651572DF3022A71EA' where id = 17()
- update softwares_inventariados set id_software = '32' where nm_software_inventariado = 'WinZip' ()
-
DELETE FROM nome_tabela SET WHERE condição ()
- DELETE FROM empregado WHERE id=3 (ao tentar deletar um registro que esteja sendo referenciado em uma outra tabela, será retornado um erro de violação de constraint)
- alter table s_region add comentario VARCHAR(255) ()
- alter table s_emp add full_name computed by (last_name||,||first_name) ()
Obs: a nova coluna se torna a última.
- alter table s_region drop column comentario (sintáxe)
- alter table s_emp rename column salary to payment (Oracle)
- alter table s_emp alter salary to payment (FireBird)
- exec sp_rename 's_emp.salary','payment' (SQL Server. A sintaxe é "EXEC sp_rename 'Table.OldColumnName','NewColumnName')
- select * from information_schema.key_column_usage where table_name='table_name'; (mostra as constraints da coluna que é a KEY)
- select * from information_schema.table_constraints where table_name='table_name'; ()
- show create table table_name; ()
- show table status from teampass like 'table_name'; ()
- alter table table_name drop primary key | unique(column) | constraint constraint_name [cascade] (sintáxe)
- alter table s_emp drop constraint s_emp_manager_id_fk (Oracle)
Obs: não é possível modificar uma constraint. Pode-se somente adicionar ou deletar.
- alter table table_name add [constraint constraint_name type (column) (sintáxe)
- alter table s_emp add constraint s_emp_manager_id_fk foreign key (manager_id) references s_emp(id) (exemplo Oracle)
- ALTER table table_name MODIFY columm_name VARCHAR(200); (exemplo simples)
- ALTER TABLE table_name CHANGE columm_name columm_name TEXT CHARACTER SET utf8 COLLATE utf8_general_ci NULL; (exemplo complexo)
Obs: não é possível modificar uma constraint. Pode-se somente adicionar ou deletar.
DEPOIS
- ROLLBACK
- select * from s_region ()
- begin tran savepoint_a (as mudanças daqui para frente ficarão no buffer. No SQL Server se usa BEGIN TRAN, no FireBird é SAVEPOINT)
- insert into s_region (id, name) values (8, 'Central') (inseri uma linha)
- select * from s_region (mostra a mudança na tabela s_region)
- rollback tran savepoint_a (volta ao estado anterior ao BEGIN TRAN. No SQL Server se usa ROLLBACK, no FireBird é ROLLBACK TO)
select * from s_region (mostra a tabela sem alterações)
- COMMIT
- select * from s_region ()
- begin tran savepoint_a (as mundaças daqui para frente ficarão no buffer)
- insert into s_region (id, name) values (8, 'Central') (inseri uma linha)
- select * from s_region (mostra a mudança na tabela s_region)
- commit tran savepoint_a (as mudanças que estão no buffer serão gravadas no disco. No SQL Server se usa COMMIT TRAN)
- select * from s_region (mostra a tabela alterada)
- CREATE DATABASE Test
- DROP DATABASE Test
- USE Test
DML (Data Manipulation Language) compreende os comandos usados para incluir, atualizar ou deletar dados no banco de dados. Ex: INSERT, UPDATE, DELETE, SELECT, MERGE, CALL, EXPLAIN PLAN e LOCK TABLE.
DDL (Data Definition Language) compreende os comandos usados para criar, alterar, truncar, comentar, renomear ou dropar estruturas ou esquemas de dados. Ex: CREATE, ALTER, DROP e UNDROP (TABLE, INDEX, VIEWS, STORE PROCEDURE, FUNCTION E TRIGGERS).
DCL (Data Control Language) compreende os comandos usados para conceder e revogar (GRANT e REVOKE) privilégios de acesso a bases de dados. Ex: GRANT e REVOKE.
TCL (Transaction Control Language) compreende os comandos usados para commit, savepoint, roolback e set transaction para os dados. Ex: BEGIN, COMMIT e ROOLBACK.
SCL (Session Control Language) compreende os comandos usados para ALTER SESSION E SET ROLE.
SCL (System Control Language) compreende os comandos usados para.
ESQL (Embedded SQL) compreende os comandos usados para .
