Está en la página 1de 17

TEORIA Y DISEO DE BASE DE DATOS

5. Lenguajes de bases de datos


5.1 Introduccin
Los lenguajes de consulta (query language) son especificaciones formales para
representar consultas. An cuando son llamados de "consulta" en realidad
pueden hacer mucho ms que consultas.

5.2 Structured Query Language (SQL)

Creado por IBM alrededor de los aos 70s


Combinacin de lgebra relacional y clculo relacional
En 1986 ANSI e ISO lo estandarizan en SQL-86
Otras versiones: SQL-92, SQL-99

5.2.1 Data Manipulation Language (DML)


INSERT
insert into table_name (column_name, ..., column_name)
values (value, ..., value);
insert into musicians (musician_id, last_name, first_name, nickname)
values (2,'Lydon','John','Johnny Rotten');
insert into musicians
values (2,'Lydon','John','Johnny Rotten');

INSERT [LOW_PRIORITY | DELAYED] [IGNORE]


[INTO] tbl_name [(col_name,...)]
VALUES ((expression |
DEFAULT),...),(...),...
[ ON DUPLICATE KEY UPDATE
col_name=expression, ... ]
or INSERT [LOW_PRIORITY | DELAYED] [IGNORE]
[INTO] tbl_name [(col_name,...)]
SELECT ...
or INSERT [LOW_PRIORITY | DELAYED] [IGNORE]
[INTO] tbl_name
SET col_name=(expression | DEFAULT), ...
[ ON DUPLICATE KEY UPDATE
col_name=expression, ... ]

UPDATE
update table_name
set column_name= value,
...,
column_name=value

UNHEVAL-elchus@.com

Pgina 1

TEORIA Y DISEO DE BASE DE DATOS


where column_name=value;
update albums
set year=1994
where album_id=4;
update albums
set category='old music'
where year < 1980;

UPDATE [LOW_PRIORITY] [IGNORE] tbl_name


SET col_name1=expr1 [, col_name2=expr2 ...]
[WHERE where_definition]
[ORDER BY ...]
[LIMIT row_count]

or:
UPDATE [LOW_PRIORITY] [IGNORE] tbl_name [, tbl_name
...]
SET col_name1=expr1 [, col_name2=expr2 ...]
[WHERE where_definition]

DELETE
delete
where
delete
where

from table_name
column_name=value
from albums
albums_id=4;

DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM


table_name
[WHERE where_definition]
[ORDER BY ...]
[LIMIT row_count]

or:
DELETE [LOW_PRIORITY] [QUICK] [IGNORE]
table_name[.*] [, table_name[.*] ...]
FROM table-references
[WHERE where_definition]

or:
DELETE [LOW_PRIORITY] [QUICK] [IGNORE]
FROM table_name[.*] [, table_name[.*] ...]
USING table-references
[WHERE where_definition]

UNHEVAL-elchus@.com

Pgina 2

TEORIA Y DISEO DE BASE DE DATOS

SELECT
select column_name, ..., column_name
from table_name
where column_name=value;
select title
from albums
where category='industrial';

SELECT [STRAIGHT_JOIN]
[SQL_SMALL_RESULT] [SQL_BIG_RESULT]
[SQL_BUFFER_RESULT]
[SQL_CACHE | SQL_NO_CACHE]
[SQL_CALC_FOUND_ROWS] [HIGH_PRIORITY]
[DISTINCT | DISTINCTROW | ALL]
select_expression,...
[INTO {OUTFILE | DUMPFILE} 'file_name'
export_options]
[FROM table_references
[WHERE where_definition]
[GROUP BY {unsigned_integer | col_name |
formula}
[ASC | DESC], ... [WITH ROLLUP]]
[HAVING where_definition]
[ORDER BY {unsigned_integer | col_name |
formula}
[ASC | DESC] ,...]
[LIMIT [offset,] row_count | row_count OFFSET
offset]
[PROCEDURE procedure_name(argument_list)]
[FOR UPDATE | LOCK IN SHARE MODE]]
table_name [[AS] alias]
[[USE INDEX (key_list)]
| [IGNORE INDEX (key_list)]
| [FORCE INDEX (key_list)]]

JOIN
select bands.band_name
from bands,albums
where albums.category='alternative'
and bands.band_id=albums.band_id;

SELECT t1.name, t2.salary FROM employee AS t1, info AS


t2 -> WHERE t1.name = t2.name;
SELECT table1.* FROM table1 -> LEFT JOIN table2 ON
table1.id=table2.id -> WHERE table2.id IS NULL;

UNHEVAL-elchus@.com

Pgina 3

TEORIA Y DISEO DE BASE DE DATOS


table_reference, table_reference
table_reference [INNER | CROSS] JOIN table_reference
[join_condition]
table_reference STRAIGHT_JOIN table_reference
table_reference LEFT [OUTER] JOIN table_reference
[join_condition]
table_reference NATURAL [LEFT [OUTER]] JOIN
table_reference
{ OJ table_reference LEFT OUTER JOIN table_reference
ON conditional_expr }
table_reference RIGHT [OUTER] JOIN table_reference
[join_condition]
table_reference NATURAL [RIGHT [OUTER]] JOIN
table_reference

UNION
(SELECT a FROM table_name WHERE a=10 AND B=1
ORDER BY a LIMIT 10) UNION (SELECT a FROM
table_name WHERE a=11 AND B=2 ORDER BY a LIMIT 10)
ORDER BY a;

SELECT ...
UNION [ALL | DISTINCT]
SELECT ...
[UNION [ALL | DISTINCT]
SELECT ...]

SUBQUERIES
select title
from albums,
where band_id in
(select bands.band_id
from bands, band_musician
where band_musician.musician_id=2
and bands.band_id=band_musician.band_id);

INDEX
CREATE INDEX part_of_name ON customer (name(10));
CREATE INDEX two_attributes ON customer (name(10),
balance);

CREATE [UNIQUE|FULLTEXT] INDEX index_name


[index_type]

UNHEVAL-elchus@.com

Pgina 4

TEORIA Y DISEO DE BASE DE DATOS


ON tbl_name (index_col_name,...)
index_col_name:
col_name [(length)] [ASC | DESC]
SHOW INDEX FROM tbl_name
DROP INDEX index_name ON tbl_name

EXPLAIN
explain table_name;
explain select...;

UNHEVAL-elchus@.com

Pgina 5

TEORIA Y DISEO DE BASE DE DATOS


(carlos) [prueba]> create index iname on
auser(last_name,first_name);
Query OK, 1 row affected (0.15 sec)
Records: 1 Duplicates: 0 Warnings: 0
(carlos) [prueba]> show index from auser;
+-------+------------+----------+--------------+------------+-----------+-------------+----------+-------+------+------------+---------+
| Table | Non_unique | Key_name | Seq_in_index |
Column_name | Collation | Cardinality | Sub_part |
Packed | Null | Index_type | Comment |
+-------+------------+----------+--------------+------------+-----------+-------------+----------+-------+------+------------+---------+
| auser |
0 | PRIMARY |
1 | id
| A
|
1 |
NULL | NULL
|
| BTREE
|
|
| auser |
1 | iname
|
1 |
last_name
| A
|
1 |
NULL |
NULL
| YES | BTREE
|
|
| auser |
1 | iname
|
2 |
first_name | A
|
1 |
NULL |
NULL
| YES | BTREE
|
|
+-------+------------+----------+--------------+------------+-----------+-------------+----------+-------+------+------------+---------+
3 rows in set (0.00 sec)
(carlos) [prueba]> explain select * from auser
where last_name='aguilar';
+----+-------------+-------+------+--------------+-------+---------+-------+------+-------------------------+
| id | select_type | table | type | possible_keys |
key
| key_len | ref
| rows | Extra
|
+----+-------------+-------+------+--------------+-------+---------+-------+------+-------------------------+
| 1 | SIMPLE
| auser | ref | iname
|
iname |
256 | const |
1 | Using where; Using
index |
+----+-------------+-------+------+--------------+-------+---------+-------+------+-------------------------+
1 row in set (0.08 sec)

5.2.2 Data Definition Language (DDL)


CREATE
create table table_name (
column_name column_type column_modifiers,

UNHEVAL-elchus@.com

Pgina 6

TEORIA Y DISEO DE BASE DE DATOS


...,
column_name column_type column_modifiers);
create table musicians(
musician_id INT,
last_name CHAR(40),
first_name CHAR(40),
nickname CHAR(40));

CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name


[(create_definition,...)]
[table_options] [select_statement]

or:
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
[(] LIKE old_tbl_name [)];
create_definition:
col_name type [NOT NULL | NULL] [DEFAULT
default_value] [AUTO_INCREMENT]
[[PRIMARY] KEY] [COMMENT 'string']
[reference_definition]
| [CONSTRAINT [symbol]] PRIMARY KEY [index_type]
(index_col_name,...)
| KEY [index_name] [index_type]
(index_col_name,...)
| INDEX [index_name] [index_type]
(index_col_name,...)
| [CONSTRAINT [symbol]] UNIQUE [INDEX]
[index_name] [index_type] (index_col_name,...)
| FULLTEXT [INDEX] [index_name]
(index_col_name,...)
| [CONSTRAINT [symbol]] FOREIGN KEY [index_name]
(index_col_name,...)
[reference_definition]
| CHECK (expr)
type:
TINYINT[(length)] [UNSIGNED] [ZEROFILL]
| SMALLINT[(length)] [UNSIGNED] [ZEROFILL]
| MEDIUMINT[(length)] [UNSIGNED] [ZEROFILL]
| INT[(length)] [UNSIGNED] [ZEROFILL]
| INTEGER[(length)] [UNSIGNED] [ZEROFILL]
| BIGINT[(length)] [UNSIGNED] [ZEROFILL]
| REAL[(length,decimals)] [UNSIGNED] [ZEROFILL]
| DOUBLE[(length,decimals)] [UNSIGNED] [ZEROFILL]
| FLOAT[(length,decimals)] [UNSIGNED] [ZEROFILL]
| DECIMAL(length,decimals) [UNSIGNED] [ZEROFILL]
| NUMERIC(length,decimals) [UNSIGNED] [ZEROFILL]
| CHAR(length) [BINARY | ASCII | UNICODE]
| VARCHAR(length) [BINARY]
| DATE
| TIME
| TIMESTAMP
| DATETIME

UNHEVAL-elchus@.com

Pgina 7

TEORIA Y DISEO DE BASE DE DATOS


|
|
|
|
|
|
|
|
|
|

TINYBLOB
BLOB
MEDIUMBLOB
LONGBLOB
TINYTEXT
TEXT
MEDIUMTEXT
LONGTEXT
ENUM(value1,value2,value3,...)
SET(value1,value2,value3,...)

index_col_name:
col_name [(length)] [ASC | DESC]
reference_definition:
REFERENCES tbl_name [(index_col_name,...)]
[MATCH FULL | MATCH PARTIAL]
[ON DELETE reference_option]
[ON UPDATE reference_option]
reference_option:
RESTRICT | CASCADE | SET NULL | NO ACTION |
SET DEFAULT
table_options: table_option [table_option] ...
table_option:
{ENGINE | TYPE} = {BDB | HEAP | ISAM | InnoDB |
MERGE | MRG_MYISAM | MYISAM}
| AUTO_INCREMENT = #
| AVG_ROW_LENGTH = #
| CHECKSUM = {0 | 1}
| COMMENT = 'string'
| MAX_ROWS = #
| MIN_ROWS = #
| PACK_KEYS = {0 | 1 | DEFAULT}
| PASSWORD = 'string'
| DELAY_KEY_WRITE = {0 | 1}
| ROW_FORMAT = { DEFAULT | DYNAMIC | FIXED |
COMPRESSED }
| RAID_TYPE = { 1 | STRIPED | RAID0 }
RAID_CHUNKS=# RAID_CHUNKSIZE=#
| UNION = (table_name,[table_name...])
| INSERT_METHOD = { NO | FIRST | LAST }
| DATA DIRECTORY = 'absolute path to directory'
| INDEX DIRECTORY = 'absolute path to directory'
| DEFAULT CHARACTER SET character_set_name
[COLLATE collation_name]
select_statement:
[IGNORE | REPLACE] [AS] SELECT ...
legal select statement)

(Some

FOREIGN CONSTRAINTS
[CONSTRAINT symbol] FOREIGN KEY [id]
(index_col_name, ...)
REFERENCES tbl_name (index_col_name, ...)
[ON DELETE {CASCADE | SET NULL | NO ACTION |

UNHEVAL-elchus@.com

Pgina 8

TEORIA Y DISEO DE BASE DE DATOS


RESTRICT}]
[ON UPDATE {CASCADE | SET NULL | NO ACTION |
RESTRICT}]

CREATE TABLE parent(id INT NOT NULL, PRIMARY KEY


(id) ) TYPE=INNODB;
CREATE TABLE child(id INT, parent_id INT, INDEX
par_ind (parent_id),
FOREIGN KEY (parent_id) REFERENCES parent(id) ON
DELETE CASCADE ) ENGINE=INNODB;
CREATE TABLE product (category INT NOT NULL, id INT
NOT NULL,
price DECIMAL,
PRIMARY KEY(category, id)) ENGINE=INNODB;
CREATE TABLE customer (id INT NOT NULL,
PRIMARY KEY (id)) ENGINE=INNODB;
CREATE TABLE product_order (no INT NOT NULL
AUTO_INCREMENT,
product_category INT NOT NULL,
product_id INT NOT NULL,
customer_id INT NOT NULL,
PRIMARY KEY(no),
INDEX (product_category, product_id),
FOREIGN KEY (product_category, product_id)
REFERENCES product(category, id)
ON UPDATE CASCADE ON DELETE RESTRICT,
INDEX (customer_id),
FOREIGN KEY (customer_id)
REFERENCES customer(id)) ENGINE=INNODB;

DROP
DROP [TEMPORARY] TABLE [IF EXISTS] tbl_name [,
tbl_name,...] [RESTRICT | CASCADE]

ALTER
ALTER TABLE t1 MODIFY b BIGINT NOT NULL;

ALTER [IGNORE] TABLE tbl_name alter_specification [,


alter_specification] ...
alter_specification:
ADD [COLUMN] create_definition [FIRST | AFTER
column_name ]

UNHEVAL-elchus@.com

Pgina 9

TEORIA Y DISEO DE BASE DE DATOS


| ADD [COLUMN] (create_definition,
create_definition,...)
| ADD INDEX [index_name] [index_type]
(index_col_name,...)
| ADD [CONSTRAINT [symbol]] PRIMARY KEY
[index_type] (index_col_name,...)
| ADD [CONSTRAINT [symbol]] UNIQUE [index_name]
[index_type] (index_col_name,...)
| ADD FULLTEXT [index_name] (index_col_name,...)
| ADD [CONSTRAINT [symbol]] FOREIGN KEY
[index_name] (index_col_name,...)
[reference_definition]
| ALTER [COLUMN] col_name {SET DEFAULT literal |
DROP DEFAULT}
| CHANGE [COLUMN] old_col_name create_definition
[FIRST | AFTER column_name]
| MODIFY [COLUMN] create_definition [FIRST | AFTER
column_name]
| DROP [COLUMN] col_name
| DROP PRIMARY KEY
| DROP INDEX index_name
| DISABLE KEYS
| ENABLE KEYS
| RENAME [TO] new_tbl_name
| ORDER BY col
| CHARACTER SET character_set_name [COLLATE
collation_name]
| table_options

DATABASE
CREATE DATABASE [IF NOT EXISTS] db_name
[create_specification [, create_specification]
...]
create_specification:
[DEFAULT] CHARACTER SET charset_name
| [DEFAULT] COLLATE collation_name
DROP DATABASE db_name

GRANTS
GRANT priv_type [(column_list)] [, priv_type
[(column_list)] ...]
ON {tbl_name | * | *.* | db_name.*}
TO user_name [IDENTIFIED BY [PASSWORD]
'password']
[, user_name [IDENTIFIED BY [PASSWORD]
'password'] ...]
[REQUIRE
NONE |
[{SSL| X509}]
[CIPHER cipher [AND]]
[ISSUER issuer [AND]]
[SUBJECT subject]]

UNHEVAL-elchus@.com

Pgina 10

TEORIA Y DISEO DE BASE DE DATOS


[WITH [GRANT OPTION | MAX_QUERIES_PER_HOUR # |
MAX_UPDATES_PER_HOUR # |
MAX_CONNECTIONS_PER_HOUR
#]]
REVOKE priv_type [(column_list)] [, priv_type
[(column_list)] ...]
ON {tbl_name | * | *.* | db_name.*}
FROM user_name [, user_name ...]
REVOKE ALL PRIVILEGES,GRANT OPTION FROM user_name [,
user_name ...]

Ejemplos en Postgresql:
Grant insert privilege to all users on table films :
GRANT INSERT ON films TO PUBLIC;
Grant all privileges to user manuel on view kinds :
GRANT ALL PRIVILEGES ON kinds TO manuel;

Ejemplos en Mysql
To revoke the GRANT OPTION privilege from a user, use a priv_type
value of GRANT OPTION:
mysql> REVOKE GRANT OPTION ON ... FROM ...;

priv_type
ALL
[PRIVILEGES]

Sets all simple privileges except GRANT

ALTER

Allows use of ALTER TABLE

CREATE

Allows use of CREATE TABLE

CREATE
TEMPORARY
TABLES

Allows use of CREATE TEMPORARY TABLE

DELETE

Allows use of DELETE

DROP

Allows use of DROP TABLE

EXECUTE

Allows the user to run stored procedures


(MySQL 5.0)

FILE

Allows use of SELECT ... INTO OUTFILE


and LOAD DATA INFILE

INDEX

Allows use of CREATE INDEX and DROP

UNHEVAL-elchus@.com

OPTION

Pgina 11

TEORIA Y DISEO DE BASE DE DATOS


INDEX
INSERT

Allows use of INSERT

LOCK TABLES

Allows use of LOCK TABLES on tables for


which you have the SELECT privilege

PROCESS

Allows use of SHOW FULL PROCESSLIST

REFERENCES

Not yet implemented

RELOAD

Allows use of FLUSH

REPLICATION
CLIENT

Gives the right to the user to ask where


the slave or master servers are

REPLICATION
SLAVE

Needed for replication slaves (to read


binary log events from the master)

SELECT

Allows use of SELECT

SHOW
DATABASES

SHOW DATABASES shows all databases

SHUTDOWN

Allows use of mysqladmin shutdown

SUPER

Allows use of CHANGE MASTER, KILL


thread, PURGE MASTER LOGS, and SET
GLOBAL statements, the mysqladmin debug
command; allows you to connect (once)
even if max_connections is reached

UPDATE

Allows use of UPDATE

USAGE

Synonym for ``no privileges''

GRANT OPTION

Allows privileges to be granted

MySQL has four privilege levels:


Global level
Global privileges apply to all databases on a given
server. These privileges are stored in the mysql.user
table. GRANT ALL ON *.* and REVOKE ALL ON *.* will
grant and revoke only global privileges.
Database level
Database privileges apply to all tables in a given
database. These privileges are stored in the
mysql.db and mysql.host tables. GRANT ALL ON db.*
and REVOKE ALL ON db.* will grant and revoke only
database privileges.
Table level
Table privileges apply to all columns in a given table.
These privileges are stored in the
mysql.tables_priv table. GRANT ALL ON db.table
and REVOKE ALL ON db.table will grant and revoke
UNHEVAL-elchus@.com

Pgina 12

TEORIA Y DISEO DE BASE DE DATOS


only table privileges.
Column level
Column privileges apply to single columns in a given
table. These privileges are stored in the
mysql.columns_priv table. When using REVOKE you
must specify the same columns that were granted.

VIEWS
CREATE [ OR REPLACE ] VIEW name [ ( column_name [,
...] ) ] AS query
CREATE VIEW comedies AS
SELECT * FROM films WHERE kind = 'Comedy';

5.3 QUEL
5.3.1 Antecedentes

Desarrollado por M. Stonebraker en 1976


Lenguaje original de "ingres"
Basado en el clculo relacional de tuplas

5.3.2 Componentes

Declaracin de variables tuplas


range of t is r

recuperacin de tuplas
retrieve (ti.aj... )

filtrado
where P

no se permiten queries anidados


no provee unin, interseccin ni resta.

5.3.2.1 Ejemplos bsicos


nombres de estudiantes de ing. en sistemas
UNHEVAL-elchus@.com

Pgina 13

TEORIA Y DISEO DE BASE DE DATOS


range of e is estudiantes
retrieve unique (e.nombre)
where e.carrera='is'
datos de estudiantes de ing. en sistemas
range of e is estudiantes
retrieve (e.all)
where e.carrera='is'
nombres de estudiantes que han reprobado
range of e is estudiantes
range of c is est_cursos
retrieve unique (e.nombre)
where e.id=c.id and c.calif < 7.5

5.3.3 Funciones agregadas: count,sum, max, avg, min


formato
agregado(t.a)
agregado(t.a where P)
agregado(t.a by s.b1, s.b2,..s.bn where P)
5.3.3.1 Ejemplos
Promedio de calificaciones del depto de is
range of t is est_cursos
retrieve avg(t.calif where depto='is')
id de estudiantes con alguna calificacion mayor al promedio
range of e is est_cursos
range of s is est_cursos
retrieve unique(e.id)
where e.calif > avg(s.calif)

5.3.4 Quel tambien posee la manera de agregar, actualizar y


eliminar tuplas.
eliminar los estudiantes de is con id menor a 123456
range of t is estudiantes
delete t
where t.id < 123456
UNHEVAL-elchus@.com

Pgina 14

TEORIA Y DISEO DE BASE DE DATOS

5.4 Query by example QBE


5.4.1 Antecedentes

Desarrollo de ibm en los 70s


Ejemplo de programacin visual
Sintxis bidimensional
Genera consultas a partir de ejemplos
Relacin directa con clculo relacional de tuplas

5.4.2 Estructura

plantillas de tablas con renglones


variables de dominio (_x, _y, etc)
comandos, palabras clave (P., ALL.,...)

5.4.3 Ejemplos
a) id y nombre de los estudiantes de ingenieria en sistemas
estudiantes

id
P._x

nombre
P._y

carrera
is

b) todos los datos de todos los estudiantes


estudiantes

id
P._x

nombre
P._y

carrera
P._z

o bien
estudiantes
P.

id

nombre

carrera

c) nombres de los estudiantes de is incluyendo duplicados


estudiantes

id

nombre
P.ALL.

carrera
is

d) ids de estudiantes que han tomado los cursis is 441 y is 323


est_cursos

id
P._x
_x

UNHEVAL-elchus@.com

depto
is
is

num
441
323

calif

Pgina 15

TEORIA Y DISEO DE BASE DE DATOS


e) nombres de estudiantes de ing en sistemas que han reprobado algun curso
estudiantes

est_cursos

id
_x

id
_x

nombre
P.ALL.

depto

carrera
is

num

calif
< 7.5

f) ids de estudiantes que han tomado cursos con el estudiante 777


est_cursos

id
777
P._x

depto
_y
_y

num
_z
_z

calif

g) nombres de estudiantes que no son empleados


estudiantes

est_empl

id
_x

nombre
P.ALL.

id nombre
_x

carrera

area

carrera

promedio de calificaciones del estudiante 777 en cursos que no son de is


est_cursos

id
depto
777 is

num

calif
P.AVG.ALL.

5.4.4 QBE en Microsoft Access

UNHEVAL-elchus@.com

Pgina 16

TEORIA Y DISEO DE BASE DE DATOS

UNHEVAL-elchus@.com

Pgina 17

También podría gustarte