SQL Básico PDF
SQL Básico PDF
SQL Básico PDF
es/ 1
SQL bsico
El presente documento no tiene ms aspiraciones que servir de recordatorio mnimo para las
rdenes ms bsicas y en su mnima expresin. No es un manual de SQL pero s una
preparacin para el manual mismo (http://dev.mysql.com/doc/refman/5.0/es) y siempre y cuando tu
experiencia en SQL sea casi nula. Al fin y al cabo, lo nico que hacemos es mostrar algo de todo
lo que se puede hacer con SQL en MySQL.
Contenido
Definicin de datos ......................................................................................................................2
CREATE DATABASE nombre ......................................................................................................2
DROP DATABASE nombre .........................................................................................................2
CREATE TABLE nombre (columnas) ENGINE=motor .................................................................2
Definicin de columnas ........................................................................................................3
Definicin de restricciones de clave primaria .......................................................................3
Definicin de restricciones de clave ajena............................................................................4
DROP TABLE nombre ................................................................................................................4
USE basededatos ......................................................................................................................4
CREATE USER 'usuario'@'desdedonde' IDENTIFIED BY 'contrasea' ........................................5
GRANT privilegios ON objeto TO usuario .................................................................................5
REVOKE privilegios ON objeto FROM usuario ..........................................................................5
DROP USER 'usuario'@'desdedonde' .......................................................................................5
Manipulacin de datos .................................................................................................................6
INSERT INTO tabla (columnas) VALUES (VALORES) ..................................................................6
DELETE FROM tabla WHERE condicin ....................................................................................6
UPDATE tabla SET columna=valor WHERE condicin ..............................................................7
SELECT columnas FROM tabla WHERE condicin .....................................................................7
Cuando queremos datos de ms de una tabla .....................................................................7
Valores distintos ...................................................................................................................9
Ordenar ..............................................................................................................................10
Fechas ....................................................................................................................................11
Conclusin ..................................................................................................................................12
BDgite (GITE-11014-UA)
SQL bsico http://idesweb.es/ 2
Definicin de datos
CREATE DATABASE Crear base de datos create database
nombre mibasededatos
Crear una base de datos es el paso previo a crear tablas y trabajar con ellas. Toda tabla en
MySQL pertenece a alguna base de datos.
En MySQL, los nombre de base de datos, tabla, columna, etc., si no son palabras reservadas o
nombres mltiples, no necesitan ni comillas ni acentos graves.
http://dev.mysql.com/doc/refman/5.0/es/legal-names.html
Crear una tabla (dentro de una base de datos) exige definir las columnas, las restricciones de
clave primaria y de claves ajenas y, si utilizamos en algn momento estas ltimas, definir el
motor de almacenamiento INNODB.
BDgite (GITE-11014-UA)
SQL bsico http://idesweb.es/ 3
Definicin de columnas
Cada columna tiene un nombre y un tipo de datos como mnimo. En los sistemas fuertemente
tipados como MySQL, aunque el propio servidor hace ciertas conversiones de tipos cuando es
posible, la definicin del tipo de datos de la columna es bsico, puesto que afecta a las
comparaciones de valores y la ordenacin entre otros. Los tipos de datos ms usuales son:
http://dev.mysql.com/doc/refman/5.0/es/column-types.html
Las columnas que necesitamos que siempre tengan valor, se acompaan con una restriccin
NOT NULL. En las columnas de clave primaria no hace falta, precisamente por definirlas como
tal (aunque muchos asistentes de bases de datos aaden el not null, es redundante).
PRIMARY KEY(codigo)
PRIMARY KEY(articulo, cliente)
BDgite (GITE-11014-UA)
SQL bsico http://idesweb.es/ 4
Borrar una tabla que no existe genera un mensaje de error. No es excesivamente importante
pero MySQL ofrece el operador IF EXISTS: drop table IF EXISTS mitabla, "elimina, si existe una
tabla con ese nombre, la tabla mitabla".
Sin embargo, si vamos a trabajar durante bastante tiempo en esa base de datos, puede que
sea ms cmodo seleccionar primero la base de datos y nos ahorramos algo de escritura:
use mibasededatos;
select * from mitabla;
select * from miotratabla;
select * from yotratabla;
...
BDgite (GITE-11014-UA)
SQL bsico http://idesweb.es/ 5
La creacin de usuarios, aparte de asignarle algunos o todos los permisos posibles, pasa por
asignarle un nombre y especificar desde dnde le permitimos conectarse.
http://dev.mysql.com/doc/refman/5.0/es/create-user.html
Otorgar permisos a un usuario sobre un objeto concreto. Entre otras cosas, dicho objeto puede
ser una base de datos completa (mibd.*) o una tabla (mibd.mitabla). Los permisos ms
habituales son select, insert, delete y update, o sea, permitir la lectura, insercin, borrado y
modificacin de filas.
http://dev.mysql.com/doc/refman/5.0/es/grant.html
BDgite (GITE-11014-UA)
SQL bsico http://idesweb.es/ 6
Manipulacin de datos
INSERT INTO tabla Insertar una fila en una tabla insert into empresa
(columnas) VALUES (numero,nombre) values
(22,'Movistar')
(VALORES)
La sintaxis de esta orden que se presenta aqu es la ms general pero a veces se puede no dar
valor a todas las columnas, aunque depende de si las columnas admiten nulos o no o si se les
ha definido un valor por defecto (predeterminado). Por ejemplo:
DELETE FROM tabla Eliminar una fila de una tabla delete from empresa where
WHERE condicin numero=22
Las condiciones de la parte where de cualquier orden (delete, update, select, ...) normalmente
son comparaciones de columnas y valores.
...where numero=22
...where numero>22 and numero<55
...where numero=22 or nombre='Iberdrola'
...where numero=22 or (numero=42 and nombre='Iberdrola')
es lo mismo que
O sea borrar todas las filas de la tabla. En MySQL "cierto" es igual a 1 y "falso" igual a 0.
BDgite (GITE-11014-UA)
SQL bsico http://idesweb.es/ 7
Igual que en delete, si no se pone condicin where, la modificacin se aplica a todas las filas de
la tabla:
La orden anterior provocara que el nombre de todas las empresas de la tabla fuera el mismo.
update empleado
set empresa=22, nombre='trasladado'
where nombre='Pepe';
Todos los empleados 'Pepe' pasan a trabajar para la empresa 22 y se les cambia el nombre.
SELECT columnas FROM Consultar una o varias tablas select nombre,empresa from
tabla WHERE condicin empleado where
dni<='32999999Z'
La consulta de tablas, la orden select, es de las ms complejas de SQL puesto que es la funcin
principal de una base de datos, almacenamos los datos para consultarlos y procesarlos. Aqu
solo vamos a ver las variantes ms simples.
Muestra toda la tabla empleado, todas las columnas (el '*' significa eso) y todas las filas. Sera
equivalente escribir
Distintas columnas, distintas condiciones, lo que se necesite en cada momento. Pero hasta
ahora solo hemos trabajado con una nica tabla. Si queremos trabajar con 2 o ms, la cosa se
complica.
BDgite (GITE-11014-UA)
SQL bsico http://idesweb.es/ 8
SQL es un lenguaje que podemos decir que no hace caso a las definiciones de claves primarias
y ajenas ya que nos obliga a emparejarlas nosotros mismos (es que no siempre vamos a
necesitar ese emparejamiento y, en realidad, s utiliza estas definiciones pero para otras cosas,
para devolvernos la respuesta lo ms rpido posible). Por ejemplo:
En primer lugar, fjate que ahora hemos utilizado un prefijo para ciertas columnas. Ese prefijo
es la tabla a la que pertenece la columna. Esto es obligatorio cuando hay ambigedad entre
columnas; es lo que ha pasado con "nombre", que tanto los empleados como las empresas
tienen nombre, por lo que SQL necesita saber a qu tabla estamos haciendo referencia. Si no
existe esa ambigedad, no es necesario aunque se puede utilizar si creemos que nos ser ms
fcil escribir la orden, sobre todo en las muy largas.
Se pueden utilizar alias de tabla, pero si se definen hay que utilizarlos en toda la orden:
El resultado que vamos a obtener es la concatenacin de las filas que tiene el mismo valor en
las columnas que hemos utilizado en el where:
BDgite (GITE-11014-UA)
SQL bsico http://idesweb.es/ 9
Si hubiramos ejecutado:
select *
from empresa p, empleado l
where l.empresa=p.cod;
Hubiramos obtenido:
Valores distintos
Si probamos
Vamos a obtener:
empleado.nombre
Pepe
Ana
Pepe
Luisa
Mariola
Si no nos interesan los duplicados, podemos pedirle a SQL que nos los elimine del resultado:
Vamos a obtener:
empleado.nombre
Pepe
Ana
Luisa
Mariola
BDgite (GITE-11014-UA)
SQL bsico http://idesweb.es/ 10
Ordenar
Para ordenar, y siempre al final de la orden de consulta, podemos utilizar order by
empleado.nombre
Ana
Luisa
Mariola
Pepe
BDgite (GITE-11014-UA)
SQL bsico http://idesweb.es/ 11
Fechas
En realidad, funciones de fechas. Nos vamos a ocupar nicamente del formato de la fecha.
Supongamos que la tabla mitabla tiene una columna fecha y solo una fila;
El resultado que obtengo es el formato por defecto del tipo DATETIME. Este es equivalente a
Tngase en cuenta que la fecha 0000-00-00 00:00:00 es un valor por defecto del sistema para
cuando no tiene o no sabe interpretar un valor supuestamente de fecha. De ah que, por
ejemplo, los meses vayan de 00 a 12.
Con todo esto queremos decir que se puede mostrar la fecha como queramos, pero
recordando que MySQL la almacenar tal y como la hemos visto hasta ahora. Simplemente, la
adecuamos a nuestro gusto cuando la consultamos.
BDgite (GITE-11014-UA)
SQL bsico http://idesweb.es/ 12
select lafecha,
date_format(lafecha,'%d/%m/%Y'),
date_format(lafecha,'%m:%Y y la hora %H:%i'),
from mitabla;
Esto hara una insercin de una hipottica fila en mitabla con fecha 2012-09-06. Date cuenta
de que las constantes que expresan fechas van entrecomilladas como cualquier cadena de
caracteres.
Conclusin
Insistimos en que esto ni es un manual de SQL ni pretende serlo, tan solo una mirada muy
superficial al lenguaje para empezar a profundizar a medida que crezcan nuestras necesidades
de manipulacin y gestin de una base de datos en SQL. Todas estas rdenes se pueden
ejecutar mediante el programa mysql que se ejecuta en lnea de comandos y al que se accede
mediante algo as como
mysql -u root -p
(http://dev.mysql.com/doc/refman/5.0/es/mysql.html)
O bien con clientes del tipo de phpMyAdmin, MySQL Workbench o HeidiSQL. En todo caso,
contenidos ms completos se pueden encontrar en:
http://fbddocs.dlsi.ua.es/practicas-sql-espanol
http://dev.mysql.com/doc/index.html
De la versin 5.0, con versin en espaol, el captulo 13 muestra la sintaxis de las rdenes SQL
que implementa MySQL:
http://dev.mysql.com/doc/refman/5.0/es/sql-syntax.html
BDgite (GITE-11014-UA)
SQL bsico http://idesweb.es/ 13
Autores
Armando Surez Cueto,
armando@dlsi.ua.es
http://fbddocs.dlsi.ua.es
Septiembre de 2012
BDgite (GITE-11014-UA)
Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.
Alternative Proxies: