Sie sind auf Seite 1von 27

UNIVERSIDAD CATOLICA DE TEMUCO

ESCUELA DE INGENIERIA
Manual de mySQL 3.23
Gua bsica de SQL
CURSO : Bases de Datos
PROFESOR : Gustavo Donoso
AYUDANTE : Marcelo Sez
II SEMESTRE DEL 22
Escrito por Marcelo O. Sez Segura - Septiembre 22
marcelosaez@hotmail.com
manuaI Bs1co de 5QI my5QI 3.23
NSSfmss 2
LENGUAJE DE
DEFINICION DE DATOS
{D.D.L.)
CREATE DATABASE
CREATE TABLE
ALTER TABLE
DROP
manuaI Bs1co de 5QI my5QI 3.23
NSSfmss 3
'' 5EATEACTA5 OOI Iengua]e de de11n1c1on de daIos)
Las sentencias DDL son aquellas utilizadas para la creacin de una base de datos y todos sus
componentes: tablas, indices, relaciones, desencadenantes (triggers), procedimientos almacenados, etc.
Las instrucciones DDL basicamente son las siguientes :
N CREATE [DATABASE] [TABLE]
N ALTER [TABLE]
N DROP [DATABASE] [TABLE]
CREATE DATABASE : Permite crear una nueva base de datos.
SINTAXIS :
CREATE DATABASE [IF NOT EXISTS] NombreBaseDatos
Ejemplo : Este ejemplo crea una base de datos denominada `ventas'
CREATE DATABASE ventas;
Para crear una nueva base de datos, usted debe tener los permisos como administrador de la base de
datos, al crear una nueva base de datos, mySQL crea una carpeta con el nombre de la base de datos dentro de
la carpeta de datos asignada para mySQL (ver la variable datadir de mySQL).
CREATE TABLE : Permite crear una tabla dentro de una determinada base de datos.
SINTAXIS :
CREATE TABLE [IF NOT EXIST] <NombreTabla>
( campo_1 <Tipo_Dato> [Opciones] ,
campo_2 <Tipo_Dato> [Opciones] ,
... ... ... ,
campo_n <Tipo_Dato> [Opciones] ,
[PRIMARY KEY (campo_clave)] ,
[KEY <nombre> (campo_clave)] ,
[UNIQUE INDEX <nombre> (campo_indice)] ,
[INDEX <nombre> (campo_indice)] ,
[FOREIGN KEY <campo> (indice)
REFERENCES <tabla_ref> <campo> (indice)]
)
[COMMENT = `Comentario de Tabla']
<NombreTabla> : <NombreTabla> es requerido, los nombres validos de tablas pueden tener hasta un
maximo de 6+ caracteres exceptuando los caracteres `J' y `.'
campo_1, campo_2,..., campo_n : Indican los nombres de las columnas de la tabla. Los nombres de
campos deben comenzar obligatoriamente con un simbolo alfabtico (a..z) y debe tener
como maximo un largo de 6+ caracteres y sin espacios en blanco, sin embargo, puede
utilizar el caracter underscore o `_' para separar palabras dentro de un campo, en
especial, evite tambin utilizar acentos ,'n' y otros simbolos no alfabticos o numricos.
Como ejemplo :
3_valor // mal escrito, el primer carcter no es alfabtico
codigo cliente // mal escrito, pues incluye un espacio en blanco
total_venta // correctamente escrito
manuaI Bs1co de 5QI my5QI 3.23
NSSfmss +
<Tipo_Dato> : Corresponde al tipo de dato que sera almacenado en el campo o columna de la tabla,
entre los tipos mas comunes utilizados se tienen los siguientes :
TINYINT [(largo)] [UNSIGNED] [ZEROFILL] Entero pequeo
INTEGER [(largo)] [UNSIGNED] [ZEROFILL] Entero
REAL [(largo, decimales)] [UNSIGNED] [ZEROFILL] Real
DOUBLE [(largo, decimales)] [UNSIGNED] [ZEROFILL] Doble precisin
FLOAT [(largo, decimales)] [UNSIGNED] [ZEROFILL] Flotante
DECIMAL (largo, decimales) [UNSIGNED] [ZEROFILL] Decimales fijo
NUMERIC (largo, decimales) [UNSIGNED] [ZEROFILL] Decimales fijo
CHAR (largo) [BINARY] Carcter
VARCHAR (largo) [BINARY] Carcter variable
DATE Fecha
TIME Hora
DATETIME Fecha - hora
BLOB Almacn de datos
TEXT Textos grandes
ENUM (valor_1, valor_2, valor_3,..., valor_n) Enumerado
SET (valor_1, valor_2, valor_3,..., valor_n) Valores fijos
[UNSIGNED] : Valor numrico sin signo (slo nmeros positivos).
[ZEROFILL] : Rellena automticamente los datos numricos con cero.
Ejemplo de distintos tipos de datos :
CREATE TABLE producto
( id_producto INTEGER (6) ,
codigo_interno CHAR (15) ,
seccion_prod INT (6) ,
nombre VARCHAR (40) ,
descrip VARCHAR (40) ,
marca VARCHAR (40) ,
unidad_venta CHAR (5) ,
precio_venta NUMERIC (8,2) ,
stock_act FLOAT ,
fecha_vencim DATE ,
imagen_prod BLOB ,
estado SET ('BUENO', 'REGULAR', 'MALO')
)
Este ejemplo crea una tabla denominada `producto' con distintos tipos de datos, note que solo en
algunos campos es necesario especificar longitud, e incluso en otros la cantidad de decimales.
[Opciones] : Corresponden a algunas caracteristicas para asignar a las columnas o campos de forma
predeterminada, las opciones para las columnas son las siguientes :
[NOT NULL | NULL] [DEFAULT valor_predeterminado] [AUTO_INCREMENT]
NOT NULL : Indica que el campo o columna no admitira valores nulos.
NULL : Indica que la columna puede aceptar valores nulos, esta es una
opcin predeterminada al crear una tabla.
DEFAULT : Puede especificar un valor predeterminado para una columna
AUTO_INCREMENT : Indica que el campo es autoincremental para cada registro que se
anade, esta opcin slo esta disponible para campos de tipo INTEGER
manuaI Bs1co de 5QI my5QI 3.23
NSSfmss S
Ejemplo de CREATE TABLE con opciones de campos :
CREATE TABLE producto
( id_producto INTEGER (6) NOT NULL AUTO_INCREMENT,
codigo_interno CHAR (15) NOT NULL,
seccion_prod INT (6) NOT NULL,
nombre VARCHAR (40) DEFAULT 'PRODUCTO NUEVO',
descrip VARCHAR (40) NULL,
marca VARCHAR (40) NULL,
unidad_venta CHAR (5) DEFAULT 'UD.',
precio_venta NUMERIC (8,2) NULL,
stock_act FLOAT DEFAULT 0,
fecha_vencim DATE NULL,
imagen_prod BLOB NULL,
estado SET ('BUENO', 'REGULAR', 'MALO')
)
[PRIMARY KEY] y [KEY] : permite establecer claves e indices claves para acceder o consultar mas
velozmente a los registros de la tabla.
La clausula PRIMARY KEY permite establecer una clave primaria unica para la tabla, el motor
de base de datos utilizara de forma predeterminada esta clave, que debe tener como
condiciones principales ser un campo definido como NOT NULL (valores de registros nulos) y
ademas, los valores de los registros deben ser unicos.
La clausula KEY permite establecer un indice para una columna determinada, esta clausula es
similar a [INDEX].
Ejemplo de CREATE TABLE usando claves :
CREATE TABLE producto
( id_producto INTEGER (6) NOT NULL AUTO_INCREMENT,
codigo_interno CHAR (15) NOT NULL,
seccion_prod INT (6) NOT NULL,
nombre VARCHAR (40) DEFAULT 'PRODUCTO NUEVO',
descrip VARCHAR (40) NULL,
marca VARCHAR (40) NULL,
unidad_venta CHAR (5) DEFAULT 'UD.',
precio_venta NUMERIC (8,2) NULL,
stock_act FLOAT DEFAULT 0,
fecha_vencim DATE NULL,
imagen_prod BLOB NULL,
estado SET (`BUENO', `REGULAR', `MALO'),
PRIMARY KEY (id_producto),
KEY codigo (codigo_interno)
)
En este ejemplo, el campo `id_producto' se ha considerado como una clave principal del
tipo unico y el campo `codigo_interno' como una columna indice denominada `codigo'.
manuaI Bs1co de 5QI my5QI 3.23
NSSfmss 6
[UNIQUE INDEX] e [INDEX] : Estas clausulas funcionan de manera similar a [PRIMARY KEY] Y [KEY],
si se especifica [UNIQUE INDEX], la columna referenciada debe ser del tipo [NOT NULL], la
clausula [INDEX] permite crear indices para columnas con valores de claves candidatas o para
establecer relaciones del tipo uno a muchos entre dos o mas tablas de la base de datos junto
con las claves primarias o indices unicos.
Ejemplo de CREATE TABLE usando indices :
CREATE TABLE producto
( id_producto INTEGER (6) NOT NULL AUTO_INCREMENT,
codigo_interno CHAR (15) NOT NULL,
seccion_prod INT (6) NOT NULL,
nombre VARCHAR (40) DEFAULT `PRODUCTO NUEVO',
descrip VARCHAR (40) NULL,
marca VARCHAR (40) NULL,
unidad_venta CHAR (5) DEFAULT `UD.',
precio_venta NUMERIC (8,2) NULL,
stock_act FLOAT DEFAULT 0,
fecha_vencim DATE NULL,
imagen_prod BLOB NULL,
estado SET (`BUENO', `REGULAR', `MALO'),
UNIQUE INDEX producto (id_producto),
INDEX codigo (codigo_interno)
)
A diferencia de la sentencia [PRIMARY KEY], la clausula [UNIQUE INDEX] debe especificar
un nombre de indice, que puede o no coincidir con el nombre de la columna, esta regla se aplica
tambien en el caso de la sentencia [INDEX].
De forma predeterminada, la sentencia sentencia [PRIMARY KEY] crea indices con nombres
identicos a las columnas referenciadas.
[FOREIGN KEY ... REFERENCES ...] : Aunque esta clausula esta soportada por el estandar SQL, mySQL
omite toda referencia a la sentencia [FOREIGN KEY], pues aun no esta completamente
implementada en la versin 3.23 del motor de base de datos, sin embargo, como la gran
mayoria de los otros motores de bases de bases de datos como PostgreSQL, Interbase, SQL
Server, ORACLE, SyBase, Informix , etc., soportan esta sentencia, por ello, es bueno revisar sus
funciones :
Que significa FOREIGN KEY y para que sirve ?
Respuesta : Significa Clave Foranea o forastera, es decir, una clave de indice que se encuentra
en la tabla, pero que su valor dentro de columna en la tabla esta determinada por el valor de
otra tabla, en otras palabras, FOREICN KEY, nos permite crear una relacin entre dos o mas
tablas de la base de datos a traves de referencias.
Cuales son los requisitos para establecer relaciones por medio de FOREIGN KEY ?
Respuesta : Basicamente se necesitan dos tablas a relacionar y elementos de columnas en
comun, ambas columnas a relacionar deben estar indexadas, la columna referenciada debe ser
obligatoriamente una clave primaria (PRINARY KEY) o bien UNIQUE INDEX, y la tabla que hace
la referencia debe estar obligatoriamente indexada ya sea con las ssentencias INDEX o KEY.
manuaI Bs1co de 5QI my5QI 3.23
NSSfmss 7
Ejemplo de CREATE TABLE claves forneas :
En el ejemplo siguiente crearemos 3 tablas, Ciros, Ciudades y Clientes, cada tabla tendra claves
primarias, sin embargo, en la tabla de Clientes realizaremos relaciones entre esta tabla a las
tablas de Ciros y Ciudades mediante las columnas id_giro e id_ciudad respectivamente.
CREATE TABLE giro
( id_giro INT(6) NOT NULL AUTO_INCREMENT,
nom_giro VARCHAR(40),
PRIMARY KEY (id_giro))
;
CREATE TABLE ciudad
( id_ciudad INT(6) NOT NULL AUTO_INCREMENT,
nom_ciudad VARCHAR(25) NOT NULL,
PRIMARY KEY (id_ciudad) )
;
CREATE TABLE cliente
( id_cliente INT(6) NOT NULL AUTO_INCREMENT,
rut CHAR(12) NOT NULL,
id_giro INT(6) NOT NULL,
contacto VARCHAR(25) ,
direccion VARCHAR(40) ,
razon_soc VARCHAR(40) ,
id_ciudad INT(6) NOT NULL,
telefono CHAR(15) ,
fax CHAR(15) ,
e_mail VARCHAR(40) ,
PRIMARY KEY (id_cliente) ,
UNIQUE INDEX (rut) ,
INDEX (id_giro) ,
INDEX (id_ciudad) ,
FOREIGN KEY id_giro (id_giro) REFERENCES giro (id_giro),
FOREIGN KEY id_ciudad (id_ciudad) REFERENCES ciudad (id_ciudad) )
La imagen representa como se establecen las relaciones entre clientes - ciudades y giro.
[COMMENT] : Esta clausula es opcinal y permite establecer un comentario a la tabla, por ejemplo :
CREATE TABLE giro
( id_giro INT(6) NOT NULL AUTO_INCREMENT,
nom_giro VARCHAR(40),
PRIMARY KEY (id_giro))
COMMENT `Tabla de giros comerciales.'
manuaI Bs1co de 5QI my5QI 3.23
NSSfmss 8
ALTER TABLE : Permite efectuar modificaciones en la estructura de la tabla, permitiendo cambiar nombres
de columna o campos, tipo de dato, anadir columnas e indices y tambien eliminarlos.
SINTAXIS :
ALTER TABLE <NombreTabla>
ADD [COLUMN] <nombre_campo> <Tipo_Dato> [Opciones],...
o ADD INDEX <nombre_indice> (columna1, columna2, ...)
o ADD PRIMARY KEY (columna1, columna2, ... )
o ADD UNIQUE <nombre_indice> (columna1, columna2, ...)
o ADD FOREIGN KEY <nombre_indice> (columna1, columna2, ...)
REFERENCES <nombre_tabla> (indice)
o CHANGE [COLUMN] <campo_antiguo > <campo_nuevo> <Tipo_Dato> [Opciones]
o MODIFY [COLUMN] <campo_nuevo> <Tipo_Dato> [Opciones]
o DROP [COLUMN] <campo>
o DROP PRIMARY KEY
o DROP INDEX <nombre_indice>
o RENAME [TO] <nombre_tabla>
<NombreTabla> : <NombreTabla> es el nombre de la tabla que se va a modificar.
ADD [COLUMN] : Permite anadir una columna a la tabla, para utilizar la clausula ADD debe especificar el
nombre de la columna y el tipo de dato, tambien puede incluir las opciones NULL, NOT NULL
entre otras.
Ejemplo de ALTER TABLE para aadir columnas :
En este ejemplo, se agrega la columna sexo a la tabla, pero ademas se especifica que es una
columna con valores No nulos y con un valor predeterminado como N (masculino).
ALTER TABLE persona ADD sexo CHAR(1) DEFAULT 'M' NOT NULL
ADD INDEX : Permite crear un indice para la tabla, para utilizar la clausula ADD INDEX debe especificar el
nombre de indice y la(s) columnas por las cuales se indexara.
Ejemplo de ALTER TABLE para aadir indices :
En este ejemplo creamos un indice para la tabla cliente con el nombre `nro_telefono' y
basado en la columna telefono.
ALTER TABLE cliente ADD INDEX nro_telefono (telefono)
En este otro ejemplo creamos un indice para la tabla persona con el nombre `apellidos' y
basado en las columnas ap_paterno y ap_materno.
ALTER TABLE persona ADD INDEX apellidos (ap_paterno, ap_materno)
manuaI Bs1co de 5QI my5QI 3.23
NSSfmss 9
ADD PRIMARY KEY : Permite crear una clave primaria.
Ejemplo de ALTER TABLE para crear una clave primaria :
En este ejemplo creamos la clave primaria de la tabla cliente basados en la columna
id_cliente.
ALTER TABLE cliente ADD PRIMARY KEY (id_cliente)
ADD UNIQUE : Permite crear un indice del tipo unico, es decir, los valores de la columna referenciada sera
unicos, es necesario especificar un nombre de indice y entre parntesis referenciar la(s)
columna(s) que compondran el indice.
Ejemplo de ALTER TABLE para crear un ndice nico :
En este ejemplo creamos un indice de tipo unico denominado rut que incluye la columna rut
de la tabla de clientes.
ALTER TABLE cliente ADD UNIQUE rut (rut)
ADD FOREIGN KEY : Permite establecer una clave foranea o relacin entre dos tablas.
NOTA : Como lo habiamos mensionado antes esta clausula es omitida por mySQL, sin embargo
se espera que en un futuro sea incorporada en nuevas versiones del motor de base de datos.
Ejemplo de ALTER TABLE para crear claves forneas :
En este ejemplo establecemos una clave foranea por medio del identificador de giro (id_giro)
de la tabla cliente y el identificador de giro (id_giro) de la tabla de giros.
ALTER TABLE cliente
ADD FOREIGN KEY id_giro (id_giro)
REFERENCES giro (id_giro)
CHANGE : Permite cambiar el nombre y la estructura de una columna, para ello debe especificar el
noombre del campo que se va a cambiar, el nuevo nombre de campo, el tipo de dato que
almacenara y sus opciones.
Ejemplo de ALTER TABLE para modificar campos :
En estos dos ejemplos modificamos dos campos de la tabla de clientes, el primero cambia el
nombre `razon_soc' por `razon_social', en el segundo ejemplo cambiamos el tipo de dato
para la columna telefono de VARCHAR a INTEGER.
ALTER TABLE cliente CHANGE razon_soc razon_social VARCHAR(40)
;
ALTER TABLE cliente CHANGE telefono telefono INTEGER(15)
manuaI Bs1co de 5QI my5QI 3.23
NSSfmss 10
MODIFY : Permite cambiar el tipo de dato de una columna, a diferencia de la opcin CHANCE, sta
clausula no permite cambiar el nombre de la columna.
Ejemplo de ALTER TABLE usando modificacin de columna :
En este ejemplo cambiamos el tipo de dato de la columna rut a CHAR de largo 12.
ALTER TABLE cliente MODIFY rut CHAR(12)
DROP : La clausula drop dentro de la sentencia ALTER TABLE permite eliminar campos, claves
primarias e indices.
Ejemplos de ALTER TABLE usando la clusula DROP :
En este ejemplo cambiamos el tipo de dato de la columna rut a CHAR de largo 12.
ALTER TABLE cliente DROP COLUMN fax
Elimina el campo fax de la tabla de clientes
ALTER TABLE cliente DROP PRIMARY KEY
Elimina la clave primaria de la tabla de clientes, para eliminar la clave primaria no es necesario
especificar el indice pues el motor de base de datos reconoce automaticamente la clave primaria
para ser eliminada.
ALTER TABLE cliente DROP INDEX rut
Elimina el indice denominado rut de la tabla de clientes
RENAME TO : Esta sentencia permite cambiar el nombre de una tabla.
Ejemplo de ALTER TABLE usando RENAME :
En este ejemplo cambiamos el el nombre de la tabla `cliente' por `mis_clientes'.
ALTER TABLE cliente RENAME TO mis_clientes
manuaI Bs1co de 5QI my5QI 3.23
NSSfmss 11
DROP : Permite eliminar bases de datos y tablas.
SINTAXIS :
DROP DATABASE [IF EXISTS] NombreBaseDatos
O bien
DROP TABLE [IF EXISTS] Nombretabla1, Nombretabla2, ...
Ejemplo de DROP DATABASE :
En este ejemplo eliminamos la base de datos `ventas'.
NOTA : Esta accin elimina tambien todas las tablas asociadas a la base de datos.
DROP DATABASE ventas
Ejemplo de DROP TABLE :
En este ejemplo eliminamos las tablas `giro', `ciudad' y `cliente'.
NOTA : Esta accin elimina tambien todas las tablas asociadas a la base de datos.
DROP TABLE giro, ciudad, cliente
manuaI Bs1co de 5QI my5QI 3.23
NSSfmss 12
LENGUAJE DE
MANIPULACION DE DATOS
{D.M.L.)
INSERT
UPDATE
DELETE
SELECT
manuaI Bs1co de 5QI my5QI 3.23
NSSfmss 13
'' 5EATEATA5 OmI Iengua]e de man1puIac1on de daIos)
Las sentencias DNL son aquellas utilizadas para insertar, modificar, eliminar y consultar sobre los datos de una
base de datos.
Las instrucciones DNL son las siguientes :
N INSERT
N UPDATE
N DELETE
N SELECT
INSERT : Permite crear una tabla dentro de una determinada base de datos.
SINTAXIS :
INSERT INTO <NombreTabla>
(campo_1, campo_2, ..., campo_n)
VALUES
( valor_campo_1, valor_campo_2,... valor_campo_n)
o bien
INSERT INTO <NombreTabla>
SET campo_1 = valor_campo_1,
campo_2 = valor_campo_2,
... ... ....
campo_n = valor_campo_n
o bien
INSERT INTO <NombreTabla>
(campo_1, campo_2, ..., campo_n)
SELECT [expresion de consulta]
Ejemplos de INSERT INTO . . . :
Estos ejemplos insertan un registro en la tabla producto, utilizando distindas opciones para la
sentencia INSERT.
INSERT INTO producto
(codigo_interno, seccion_prod, nombre, descrip,
marca, unidad_venta, precio_venta, stock_act, estado)
VALUES
(`125-00325-450', 125 , `IMPRESORA',
`BJC-2100 - INYECCION DE TINTA',
`CANON', `UD.', 55000, 30, `BUENO' )
;
INSERT INTO producto
SET codigo_interno = `125-00325-450' ,
seccion_prod = 125 ,
nombre = `IMPRESORA' ,
descrip = `BJC-2100 - INYECCION DE TINTA'
marca = `CANON' ,
unidad_venta = `UD.' ,
precio_venta = 55000 ,
stock_act = 30 ,
estado = `BUENO'
manuaI Bs1co de 5QI my5QI 3.23
NSSfmss 1+
UPDATE : Efectua modificaciones en los registros de una tabla.
SINTAXIS :
UPDATE <NombreTabla>
SET campo_1 = valor_campo_1,
campo_2 = valor_campo_2,
... ... ....
campo_n = valor_campo_n
[WHERE <condicion_para_actualizar>]
Ejemplos de UPDATE . . . :
Estos ejemplos los registros de la tabla producto, utilizando distindas opciones para la
sentencia INSERT.
UPDATE producto
SET unidad_venta = `UD.'
WHERE nombre = `IMPRESORA'
Este ejemplo se actualiza la columna unidad_venta a unidades para todas las impresoras en
la tabla.
UPDATE producto
SET seccion_prod = 120 ,
nombre = `MONITOR' ,
descrip = `E40 - 14 PULGADAS SVGA'
marca = `VIEWSONIC' ,
unidad_venta = `UD.' ,
precio_venta = 75300 ,
stock_act = 80 ,
estado = `BUENO'
WHERE codigo_interno = `125-00325-450'
Este ejemplo se actualiza la una serie de columnas la tabla para un cdigo unico.
UPDATE cliente
SET direccion = `DESCONOCIDA' ,
pais = `CHILE'
Actualiza todos los registros de la tabla pues no se especifica ninguna condicin.
manuaI Bs1co de 5QI my5QI 3.23
NSSfmss 1S
DELETE : Elimina registros en una tabla.
SINTAXIS :
DELETE FROM <Tabla>
[WHERE <condicion_de_borrado>]
Ejemplos de DELETE . . . :
DELETE FROM producto
WHERE nombre = `IMPRESORA'
Este ejemplo elimina de la tabla `producto' todas las impresoras.
Puede establecer mas de una condicin de eliminacin operando logicamente con AND|OR
DELETE FROM producto
WHERE nombre = `IMPRESORA' AND
Estado = `MALO'
Este ejemplo elimina de la tabla `producto' todas las impresoras en mal estado.
DELETE FROM producto
WHERE nombre = `IMPRESORA' OR
Estado = `MALO'
Este otro ejemplo elimina de la tabla `producto' todas las impresoras y tambien todos los productos
en mal estado o ambas condiciones a la vez.
DELETE FROM producto
Este otro ejemplo elimina todos los registros de la tabla `producto' puesto que no se establece
ninguna condicin de eliminacin.
manuaI Bs1co de 5QI my5QI 3.23
NSSfmss 16
SELECT : efectua consulta a una o mas tablas de una base de datos.
SINTAXIS :
SELECT [ALL | DISTINCT] [<columna>] ,..., [<columna>]
o bien [columna] [AS <alias>] ,..., [columna] [AS <alias>]
o bien [expresion_calculada]
o bien [funcion_SQL]
o bien [*]
<FROM <Tabla_1>, [Tabla_2, ... , Tabla_n]>
WHERE <[condicion_de_consulta]> [AND | OR]
<[condicion_de_consulta]> [AND]
...
<[condicion_de_consulta]>
GROUP BY [columna_1, columna_2, ... columna_n]
ORDER BY [columna_1, columna_2, ... columna_n] [ASC | DESC]
LIMIT <fila_inicio>,<fila_fin>
[ALL | DISTINCT] : Permite consultar por todos los registros de una columna o bien entregar solamente los
diferentes elementos de una o mas columnas.
[<columna>] : Permite indicar cual sera la columna o campo de la tabla que sera incuido en la
instruccin SELECT.
[*] : Caracter comodin que representa la inclusin de todas las columnas de la(s) tablas que
seran consultadas por SELECT.
[AS <alias>] : Se aplica solamente a [<columna>] y permite indicar un alias especial de columna,
esta opcin es muy util en caso de instrucciones SELECT calculadas o nombres de
columnas no autodocumentadas.
[expresion_calculada] : Cualquier operacin matematica, lgica, de cadena o fecha que sea
soportada por el motor de base de datos.
[funcion_SQL] : Existen dentro del motor de base de datos una serie de funciones SQL que son
operables a tablas, entre las mas conocidas estan las siguientes :
COUNT(<columna | *>) Cuenta registros
COUNT(<DISTINCT <columna>,...) Cuenta registros distintos
AVG(<columna>) Promedio
MIN(<columna>) Minimo
MAX(<columna>) Mximo
SUM(<columna>) Suma
STD(<columna>) Desviacin estndar
<FROM <Tabla_1>,...> : Permite especificar sobre cual o cuales tablas se realizara la consulta.
Hasta este momento, podemos decir que la sintaxis basica para consultar a una tabla es
la siguiente :
SELECT * FROM personas
(Seleccione todas las columnas desde la tabla clientes)
manuaI Bs1co de 5QI my5QI 3.23
NSSfmss 17
[WHERE <[condicion_de_consulta]>] : Una sentencia SELECT puede incluir condiciones de consulta,
estas condiciones son la base principal de la potencia del lenguaje SQL.
Si se desea incluir mas de una condicin para establecer la consulta, puede utilizar los
operadores logicos AND y OR.
Ejemplos de SELECT . . . WHERE . . . :
Supongamos para nuestros ejemplos la siguente tabla `personas'
N Mostrar todas la columnas y todos los registros de una tabla
SELECT * FROM personas
El resultado de esta sentencia SQL retorna todos los registros de la tabla de forma similar a
como muestra la imagen anterior (usando el programa mySQLFront)
manuaI Bs1co de 5QI my5QI 3.23
NSSfmss 18
N Mostrar algunas columnas y todos los registros de una tabla
SELECT rut, nombres, ap_paterno, ap_materno
FROM personas
El resultado de esta sentencia SQL retorna solamente las columnas especificadas de la tabla
`personas', el resultado de esta consulta es el siguiente :
N Contar los registros de una tabla
SELECT COUNT(*)
FROM personas
Esta sentencia SQL retorna el total de registros de la tabla `personas' , note que la
instruccin SQL entrega una sola columna con el nombre de la funcin ejecutada :
Esta otra sentencia SQL es identica a la anterior resspecto a su funcin de contar
registros, sin embargo, utiliza la clausula AS que permite asignar un nuevo nombre a la
columna resultante :
SELECT COUNT(*) AS total_registros
FROM personas
La sentencia AS
permite cambiar
el nombre de la
columna
manuaI Bs1co de 5QI my5QI 3.23
NSSfmss 19
N Consultar los registros de una tabla aplicando condiciones
SELECT rut, nombres, ap_paterno, ap_materno, ciudad
FROM personas
WHERE ap_paterno = `LOPEZ'
Esta sentencia permite consultar a `todos los registros', sin embargo, condiciona el resultado por
intermedio de la clausula WHERE, en este caso, solo se mostraran las personas cuyo apellido
paterno (ap_paterno) es idntico a `LOPEZ' :
SELECT rut, nombres, ap_paterno, ap_materno, ciudad
FROM personas
WHERE ap_paterno = `LOPEZ' AND
ciudad = `TEMUCO'
Sin embargo, en mas de una oportunidad se necesitara establecer mas de una condicin de
consulta WHERE, para ello, puede disponer de multiples condiciones de consulta, anadiendo a
las condiciones el operador logico AND y OR, en este caso en particular, limitamos nuestra
consulta a :
Las personas de apellido `LOPEZ' Y (AND) que ademas sean de `TEMUCO' :
[GROUP BY <columna_1> [, columna_2,... ]] : Otra caracteristica de la sentencia SELECT es
la capacidad de agrupar los datos mediante la clausula GROUP BY. Las agrupaciones
corresponden a conjuntos de datos o registros agrupados en un solo registro
representativo o significativo que cumple la condicin, tomemos el ejemplo en particular
de la siguiente instruccin SELECT :
SELECT rut, nombres, ap_paterno, ap_materno, ciudad
FROM personas
WHERE ap_paterno = `LOPEZ'
GROUP BY ciudad
Este ejemplo agrupa por ciudad a las personas de apellido paterno igual a `LOPEZ', note que
en un ejemplo anterior existian mas de un registro para ciudades como `TEMUCO' e
`IMPERIAL'.
manuaI Bs1co de 5QI my5QI 3.23
NSSfmss 20
[ORDER BY [<columna_1>,... ] [ASC | DESC]] : Existe dento de las posibilidades de la instruccin
SELECT la capacidad de ordenar los registros consultados de una manera muy facil, para
ello, solo basta incluir en nuestra sentencia la clausula ORDER BY :
SELECT rut, nombres, ap_paterno, ap_materno, ciudad
FROM personas
WHERE ap_paterno = `LOPEZ'
ORDER BY ciudad
Note que este ejemplo varia el resultado mostrando los datos ordenados por ciudad.
SELECT rut, nombres, ap_paterno, ap_materno, ciudad
FROM personas
WHERE ap_paterno = `LOPEZ'
ORDER BY ap_paterno, ap_materno
Tambien es posible especificar mas de una columna de ordenamiento separandolas por comas.
SELECT rut, nombres, ap_paterno, ap_materno, ciudad
FROM personas
WHERE ap_paterno = 'LOPEZ'
ORDER BY rut DESC
Puede especificar si el orden es ascendente o descendente mediante las sentencias ASC o DESC
(de forma predeterminada mySQL ordena Ascendentemente los datos)
manuaI Bs1co de 5QI my5QI 3.23
NSSfmss 21
[LIMIT <fila_inicio>,<fila_fin>] : Cuando los resultados son muy extensos y slo se necesita un
conjunto pequeno de registros es necesario aplicar un limite de registros a retornar, esto
algo muy usado en buscadores web o bien para reducir los tiempos de respuesta cuando
no se necesita el conjunto total de registo.NySQL ofrece la capacidad de retornar un
conjunto limitado de registros usando la clausula LIMIT :
SELECT rut, nombres, ap_paterno, ap_materno, ciudad
FROM personas
ORDER BY ap_paterno, ap_materno
LIMIT 0,10
Este ejemplo muestra los primeros 10 registros de la consulta.
SELECT rut, nombres, ap_paterno, ap_materno, ciudad
FROM personas
ORDER BY ap_paterno, ap_materno
LIMIT 10,20
Este otro ejemplo muestra registros entre los 10 primeros y los 20 siguientes.
manuaI Bs1co de 5QI my5QI 3.23
NSSfmss 22
Consultas SELECT a tablas relacionales
Como ya explicamos anteriormente, es posible establecer relaciones entre una o mas tablas, para ello,
se definen generalmente `Claves Foraneas' o FOREICN KEY, estas claves (comunmente columnas de tipo unico,
o indices) estan presente en ambas tablas a relacionar, para nuestros ejemplos supongamos las siguientes
tablas :
CREATE TABLE giro
( id_giro INT(6) NOT NULL AUTO_INCREMENT,
nom_giro VARCHAR(40),
PRIMARY KEY (id_giro))
;
CREATE TABLE ciudad
( id_ciudad INT(6) NOT NULL AUTO_INCREMENT,
nom_ciudad VARCHAR(25) NOT NULL,
PRIMARY KEY (id_ciudad) )
;
CREATE TABLE cliente
( id_cliente INT(6) NOT NULL AUTO_INCREMENT,
rut CHAR(12) NOT NULL,
id_giro INT(6) NOT NULL,
contacto VARCHAR(25) ,
direccion VARCHAR(40) ,
razon_soc VARCHAR(40) ,
id_ciudad INT(6) NOT NULL,
telefono CHAR(15) ,
fax CHAR(15) ,
e_mail VARCHAR(40) ,
PRIMARY KEY (id_cliente) ,
UNIQUE INDEX (rut) ,
INDEX (id_giro) ,
INDEX (id_ciudad) ,
FOREIGN KEY id_giro (id_giro) REFERENCES giro (id_giro),
FOREIGN KEY id_ciudad (id_ciudad) REFERENCES ciudad (id_ciudad) )
Relacin entre la tabla
`Cliente' y la tabla `Ciudad'
usando como clave foranea
la columna `id_ciudad'
Relacin entre la tabla
`Cliente' y la tabla `Ciro'
usando como clave foranea
la columna `id_giro'
manuaI Bs1co de 5QI my5QI 3.23
NSSfmss 23
Ahora bien, ya sabemos que la tabla `Cliente' se relaciona por medio de las columnas id_ciudad e
id_giro con las tablas `Ciudad' y `Giro' respectivamente, supongamos entonces los siguientes datos para
cada tabla como muestran las figuras :
Tabla : `Ciudad' :
Registros : 1S
Tabla : `Ciudad' :
Registros : 10
Tabla : `Cliente' :
Registros : 1S
manuaI Bs1co de 5QI my5QI 3.23
NSSfmss 2+
Como podemos apreciar a simple vista, no es posible saber leyendo directamente en la tabla
`cliente' cual es el giro del cliente ni tampoco en que ciudad se encuentra, sin embargo, si existen las
claves `id_giro' e `id_ciudad' que se encuentran en las tablas `giro' y `ciudad' y que indican cuales
son los giros y las ciudades para el cliente, por lo tanto, una consulta relacional para extraer el giro del cliente
puede resultar de la siguiente forma :
SELECT id_cliente, rut, razon_soc,
giro.id_giro, nom_giro
FROM cliente, giro
WHERE cliente.id_giro = giro.id_giro
Note que la instruccin SQL es muy similar al comun de todas, salvo que la columna id_giro especifica
de cual tabla se extraeran los datos, debido a que al relacionar las tablas `cliente' y `giro' se repite la
columna en cuestin, se produce ambigedad al no especificar a cual de las dos tablas pertenece el campo
id_giro.
Otra consideracin es la expresin relacional para unir las tablas, en la cual se igualan los campos clave
en ambas tablas, esto es : cliente.id_giro = giro.id_giro
Resultado de la consulta al relacionar por medio del campo id_giro:
De manera similar, entonces, podemos relacionar al `cliente' con la `ciudad' en que reside, por lo
tanto , la consulta queda de la siguiente forma :
SELECT id_cliente, rut, razon_soc,
ciudad.id_ciudad, nom_ciudad
FROM cliente, ciudad
WHERE cliente.id_ciudad = ciudad.id_ciudad
manuaI Bs1co de 5QI my5QI 3.23
NSSfmss 2S
Ya que sabemos entonces como establecer relaciones entre una tabla y otra, la problematica de
relacionar mas de dos tablas a la vez se ve solucionada en la clausla WHERE y la condicin de unin AND, esto
nos permite establecer una nueva relacion o condicin para otras tablas, por consiguiente, nuestra consulta al
`cliente' con sus respectivos giro y ciudad de residencia se solucionan de la siguiente forma :
SELECT id_cliente, rut, razon_soc,
giro.id_giro, nom_giro,
ciudad.id_ciudad, nom_ciudad
FROM cliente, giro, ciudad
WHERE cliente.id_giro = giro.id_giro AND
cliente.id_ciudad = ciudad.id_ciudad
Finalmente y a simple vista, ahora si podemos saber por medio de las claves de columnas establecidas cual es
giro y la ciudad del cliente.
manuaI Bs1co de 5QI my5QI 3.23
NSSfmss 26
Consultas SELECT y busquedas mas libres
N Condiciones de consulta usando comodines de bsqueda :
Dentro de una expresin SELECT - SQL es posible utilizar una condicin de busqueda y coincidencia
especial para valores `no exactos' pero de gran similitud, esta utilidad se presenta por medio de la clausula
LIKE, esta clausula dentro de una SELECT permite buscar utilizando un caracter comodin `%' (simbolo de
porcentaje), una combinacin LIKE mas este simbolo comodin permite ahorrar busquedas de subcadenas e
inclusive letras dentro de columnas de tablas, veamos entonces un simple ejemplo de SELECT ... LIKE:
Buscar a todas las personas que su apellido paterno comience con `D', ordenados por apellido paterno y
materno simultaneamente :
SELECT rut, nombres, ap_paterno, ap_materno
FROM personas
WHERE ap_paterno LIKE 'D%'
ORDER BY ap_paterno, ap_materno
Note la sencillez con que se expresa la consulta SQL, para la clausula LIKE slo basta poner el caracter
comodin `%' despues de de la letra `D' y retornara todo lo que comience con esa letra. Cabe notar la
similitud del caracter comodin de busqueda con el conocido `*' asterisco de DOS, ejemplo :
DIR D*.doc // DOS Buscara todos los documentos Word en la carpeta actual.
Entonces, si es posible consultar por los apellidos que comienzan con D, tambien es posible realizar la
siguiente consulta :
Seleccionar a todas las personas cuyo nombre comienza con `PATRICIO' no importando el otro nombre
de la persona :
SELECT rut, nombres, ap_paterno, ap_materno
FROM personas
WHERE nombres LIKE 'PATRICIO%'
ORDER BY ap_paterno, ap_materno
manuaI Bs1co de 5QI my5QI 3.23
NSSfmss 27
Sin embargo, el comodin `%' no solo es posible usarlo a la derecha de las cadenas de busqueda, sino
que tambien a la izquierda y realizar multiples combinaciones del caracter comodin, ejemplos :
SELECT rut, nombres, ap_paterno, ap_materno
FROM personas
WHERE nombres LIKE '%PATRICIO'
ORDER BY ap_paterno, ap_materno
Esta consulta retorna todas las personas cuyo segundo nombre es `PATRICIO' pues el caracter comodin
ahora se encuentra a la izquierda.
Y ademas como nunca faltan las consultas del siguiente tipo : Seleccione a todas las personas cuyo
nombre sea `PATRICIO' no importando si es el primer o segundo nombre :
SELECT rut, nombres, ap_paterno, ap_materno
FROM personas
WHERE nombres LIKE '%PATRICIO%'
ORDER BY ap_paterno, ap_materno
De esta forma, como muestra la figura, podemos obtener todas las peersonas cuyo nombre es PATRICIO,
sin importar si es el primer o segundo nombre.

Das könnte Ihnen auch gefallen