1 Sentencias SQL

Descargar como pptx, pdf o txt
Descargar como pptx, pdf o txt
Está en la página 1de 30

MYSQL – SENTENCIAS DDL Y DML

1 - Introducción.
SQL, Structure Query Language (Lenguaje de Consulta Estructurado) es un
lenguaje de programacion para trabajar con base de datos relacionales
como MySQL, Oracle, etc.
MySQL es un interpretador de SQL, es un servidor de base de datos.
MySQL permite crear base de datos y tablas, insertar datos, modificarlos,
eliminarlos, ordenarlos, hacer consultas y realizar muchas operaciones, etc.,
resumiendo: administrar bases de datos.
Ingresando instrucciones en la linea de comandos o embebidas en un
lenguaje como PHP nos comunicamos con el servidor. Cada sentencia debe
acabar con punto y coma (;).
La sensibilidad a mayúsculas y minúsculas, es decir, si hace diferencia entre
ellas, depende del sistema operativo, Windows no es sensible, pero Linux si.
Por ejemplo Windows interpreta igualmente las siguientes sentencias:
create database administracion;
Create DataBase administracion;
Pero Linux interpretará como un error la segunda.
MYSQL – SENTENCIAS DDL Y DML
2 - show databases
Una base de datos es un conjunto de tablas.
Una base de datos tiene un nombre con el cual accederemos a ella.
Para que el servidor nos muestre las bases de datos existentes, se lo
solicitamos enviando la instrucción:
show databases;
3 - Creación de una tabla y mostrar sus campos (create table - show tables
- describe - drop table)
Una base de datos almacena sus datos en tablas.
Una tabla es una estructura de datos que organiza los datos en columnas y
filas; cada columna es un campo (o atributo) y cada fila, un registro. La
intersección de una columna con una fila, contiene un dato específico, un
solo valor.
Cada registro contiene un dato por cada columna de la tabla.
Cada campo (columna) debe tener un nombre. El nombre del campo hace
referencia a la información que almacenará.
Cada campo (columna) también debe definir el tipo de dato que
almacenará.
MYSQL – SENTENCIAS DDL Y DML

Gráficamente acá tenemos la tabla usuarios, que contiene dos campos


llamados: nombre y clave. Luego tenemos tres registros almacenados en
esta tabla, el primero almacena en el campo nombre el valor "Mario Perez"
y en el campo clave "Marito", y así sucesivamente con los otros dos
registros.
Las tablas forman parte de una base de datos.
Para ver las tablas existentes en una base de datos tipeamos:
show tables;
Al crear una tabla debemos resolver qué campos (columnas) tendrá y que
tipo de datos almacenarán cada uno de ellos, es decir, su estructura.
La tabla debe ser definida con un nombre que la identifique y con el cual
accederemos a ella.
MYSQL – SENTENCIAS DDL Y DML
Creamos una tabla llamada "usuarios", tipeamos:
create table usuarios (nombre varchar(30), clave varchar(10));
Si intentamos crear una tabla con un nombre ya existente (existe otra tabla
con ese nombre), mostrará un mensaje de error indicando que la acción no
se realizó porque ya existe una tabla con el mismo nombre.
Para ver las tablas existentes en una base de datos tipeamos nuevamente:
show tables;
Ahora aparece "usuarios“.
Cuando se crea una tabla debemos indicar su nombre y definir sus campos
con su tipo de dato. En esta tabla "usuarios" definimos 2 campos:
- nombre: que contendrá una cadena de hasta 30 caracteres de longitud,
que almacenará el nombre de usuario y
- clave: otra cadena de caracteres de 10 de longitud, que guardará la
clave de cada usuario.
Cada usuario ocupará un registro de esta tabla, con su respectivo nombre y
clave.
MYSQL – SENTENCIAS DDL Y DML
Para ver la estructura de una tabla usamos el comando "describe" junto al
nombre de la tabla:
describe usuarios;
Aparece lo siguiente:

Esta es la estructura de la tabla "usuarios"; nos muestra cada campo, su


tipo, lo que ocupa en bytes y otros datos como la aceptación de valores
nulos etc,.
Para eliminar una tabla usamos "drop table". Tipeamos:
drop table usuarios;
Si tipeamos nuevamente:
drop table usuarios;
Aparece un mensaje de error, indicando que no existe, ya que intentamos
borrar una tabla inexistente.
Para evitar este mensaje podemos tipear:
drop table if exists usuarios;
En la sentencia precedente especificamos que elimine la tabla "usuarios" si
existe.
MYSQL – SENTENCIAS DDL Y DML
4 - Carga de registros a una tabla y su recuperación (insert into - select)
Un registro es una fila de la tabla que contiene los datos propiamente
dichos. Cada registro tiene un dato por cada columna.
Recordemos como crear la tabla "usuarios":
create table usuarios (nombre varchar(30), clave varchar(10));
Al ingresar los datos de cada registro debe tenerse en cuenta la cantidad y el
orden de los campos.
Ahora vamos a agregar un registro a la tabla:
insert into usuarios (nombre, clave) values ('Mario Perez','Marito');
Usamos "insert into". Especificamos los nombres de los campos entre
paréntesis y separados por comas y luego los valores para cada campo,
también entre paréntesis y separados por comas.
La tabla usuarios ahora la podemos graficar de la siguiente forma:
MYSQL – SENTENCIAS DDL Y DML
Es importante ingresar los valores en el mismo orden en que se
nombran los campos, si ingresamos los datos en otro orden, no
aparece un mensaje de error y los datos se guardan de modo
incorrecto.
Note que los datos ingresados, como corresponden a campos
de cadenas de caracteres se colocan entre comillas simples. Las
comillas simples son OBLIGATORIAS.
Para ver los registros de una tabla usamos "select":
select nombre,clave from usuarios;
Aparece un registro.
El comando "select" recupera los registros de una tabla. Luego
del comando select indicamos los nombres de los campos a
rescatar.
MYSQL – SENTENCIAS DDL Y DML
5 - Típos de datos básicos de un campo de una tabla.
Ya explicamos que al crear una tabla debemos resolver qué campos
(columnas) tendrá y que tipo de datos almacenará cada uno de ellos, es
decir, su estructura. Estos son algunos tipos de datos básicos:

- varchar: se usa para almacenar cadenas de caracteres. Una cadena es una


secuencia de caracteres. Se coloca entre comillas (simples): 'Hola'. El tipo
"varchar" define una cadena de longitud variable en la cual determinamos
el máximo de caracteres. Puede guardar hasta 255 caracteres. Para
almacenar cadenas de hasta 30 caracteres, definimos un campo de tipo
varchar(30). Si asignamos una cadena de caracteres de mayor longitud que
la definida, la cadena se corta. Por ejemplo, si definimos un campo de tipo
varchar(10) y le asignamos la cadena 'Buenas tardes', se almacenará
'Buenas tar' ajustándose a la longitud de 10 caracteres.
MYSQL – SENTENCIAS DDL Y DML
- integer: se usa para guardar valores numéricos enteros, de -
2000000000 a 2000000000 aprox. Definimos campos de este
tipo cuando queremos representar, por ejemplo, cantidades.
- float: se usa para almacenar valores numéricos decimales. Se
utiliza como separador el punto (.). Definimos campos de este
tipo para precios, por ejemplo.
Antes de crear una tabla debemos pensar en sus campos y
optar por el tipo de dato adecuado para cada uno de ellos. Por
ejemplo, si en un campo almacenaremos números enteros, el
tipo "float" sería una mala elección; si vamos a guardar precios,
el tipo "float" es correcto, no así "integer" que no tiene
decimales.
MYSQL – SENTENCIAS DDL Y DML
6 - Recuperación de algunos campos (select)
Para ver todos los registros de una tabla:
select * from libros;
El comando "select" recupera los registros de una tabla. Con el asterisco (*)
indicamos que seleccione todos los campos de la tabla que nombramos.
Podemos especificar el nombre de los campos que queremos ver
separándolos por comas:
select titulo,autor,editorial from libros;
En la sentencia anterior la consulta mostrará sólo los campos "titulo",
"autor" y "editorial". En la siguiente sentencia, veremos los campos
correspondientes al título y precio de todos los libros:
select titulo,precio from libros;
Para ver solamente la editorial y la cantidad de libros tipeamos:
select editorial,cantidad from libros;
MYSQL – SENTENCIAS DDL Y DML
7 - Recuperación de registros específicos (select - where)
Vimos cómo ver todos los registros de una tabla:
select nombre, clave from usuarios;
El comando "select" recupera los registros de una tabla. Detallando los
nombres de los campos separados por comas, indicamos que seleccione
todos los campos de la tabla que nombramos.
Existe una cláusula, "where" que es opcional, con ella podemos especificar
condiciones para la consulta "select". Es decir, podemos recuperar algunos
registros, sólo los que cumplan con ciertas condiciones indicadas con la
cláusula "where". Por ejemplo, queremos ver el usuario cuyo nombre es
"Mario Perez", para ello utilizamos "where" y luego de ella, la condición:
select nombre, clave from usuarios where nombre='Mario Perez';
Para las condiciones se utilizan operadores relacionales.
El signo igual(=) es un operador relacional. Para la siguiente selección de
registros especificamos una condición que solicita los usuarios cuya clave es
igual a 'bocajunior':
select nombre, clave from usuarios where clave='bocajunior';
Si ningún registro cumple la condición establecida con el "where", no
aparecerá ningún registro.
MYSQL – SENTENCIAS DDL Y DML
8 - Operadores Relacionales = <> < <= > >=
Hemos aprendido a especificar condiciones de igualdad para seleccionar registros de una tabla;
por ejemplo:
select titulo,autor,editorial from libros where autor='Borges';
Utilizamos el operador relacional de igualdad.
Los operadores relacionales vinculan un campo con un valor para que MySQL compare cada
registro (el campo especificado) con el valor dado.
Los operadores relacionales son los siguientes:
= igual
<> distinto
> mayor
< menor
>= mayor o igual
<= menor o igual
Podemos seleccionar los registros cuyo autor sea diferente de 'Borges', para ello usamos la
condición:
select titulo,autor,editorial from libros where autor<>'Borges';
Podemos comparar valores numéricos. Por ejemplo, queremos mostrar los libros cuyos precios
sean mayores a 20 pesos:
select titulo,autor,editorial,precio from libros where precio>20;
También, los libros cuyo precio sea menor o igual a 30:
select titulo,autor,editorial,precio from libros where precio<=30;
MYSQL – SENTENCIAS DDL Y DML
9 - Borrado de registros de una tabla (delete)
Para eliminar los registros de una tabla usamos el comando "delete":
delete from usuarios;
La ejecución del comando indicado en la línea anterior borra TODOS los
registros de la tabla.
Si queremos eliminar uno o varios registros debemos indicar cuál o cuáles,
para ello utilizamos el comando "delete" junto con la clausula "where" con
la cual establecemos la condición que deben cumplir los registros a borrar.
Por ejemplo, queremos eliminar aquel registro cuyo nombre de usuario es
'Leonardo':
delete from usuarios where nombre='Leonardo';
Si solicitamos el borrado de un registro que no existe, es decir, ningún
registro cumple con la condición especificada, no se borrarán registros, pues
no encontró registros con ese dato.
MYSQL – SENTENCIAS DDL Y DML
10 - Modificación de registros de una tabla (update)
Para modificar uno o varios datos de uno o varios registros utilizamos
"update" (actualizar).
Por ejemplo, en nuestra tabla "usuarios", queremos cambiar los valores de
todas las claves, por "Real Madrid":
update usuarios set clave='Real Madrid';
Utilizamos "update" junto al nombre de la tabla y "set" junto con el campo a
modificar y su nuevo valor.
El cambio afectará a todos los registros.
Podemos modificar algunos registros, para ello debemos establecer
condiciones de selección con "where".
Por ejemplo, queremos cambiar el valor correspondiente a la clave de
nuestro usuario llamado 'Mario Perez', queremos como nueva clave 'Boca',
necesitamos una condición "where" que afecte solamente a este registro:
update usuarios set clave='Boca' where nombre='MarioPerez';
Si no encuentra registros que cumplan con la condición del "where", ningún
registro es afectado.
MYSQL – SENTENCIAS DDL Y DML
Las condiciones no son obligatorias, pero si omitimos
la cláusula "where", la actualización afectará a todos
los registros.
También se puede actualizar varios campos en una
sola instrucción:
update usuarios set nombre='MarceloDuarte',
clave='Marce' where nombre='Marcelo';
Para ello colocamos "update", el nombre de la tabla,
"set" junto al nombre del campo y el nuevo valor y
separado por coma, el otro nombre del campo con su
nuevo valor.
MYSQL – SENTENCIAS DDL Y DML
11 - Clave primaria.
Una clave primaria es un campo (o varios) que identifica 1 solo registro (fila)
en una tabla.
Para un valor del campo clave existe solamente 1 registro. Los valores no se
repiten ni pueden ser nulos.
Veamos un ejemplo, si tenemos una tabla con datos de personas, el número
de documento puede establecerse como clave primaria, es un valor que no
se repite; puede haber personas con igual apellido y nombre, incluso el
mismo domicilio (padre e hijo por ejemplo), pero su documento será
siempre distinto.
Si tenemos la tabla "usuarios", el nombre de cada usuario puede
establecerse como clave primaria, es un valor que no se repite; puede haber
usuarios con igual clave, pero su nombre de usuario será siempre distinto.
Establecemos que un campo sea clave primaria al momento de creación de
la tabla:
create table usuarios ( nombre varchar(20), clave varchar(10), primary
key(nombre));
MYSQL – SENTENCIAS DDL Y DML
Para definir un campo como clave primaria agregamos "primary key" luego
de la definición de todos los campos y entre paréntesis colocamos el
nombre del campo que queremos como clave.
Si visualizamos la estructura de la tabla con "describe" vemos que el campo
"nombre" es clave primaria y no acepta valores .
Ingresamos algunos registros:
insert into usuarios (nombre, clave)
values ('Leonardo','payaso');
insert into usuarios (nombre, clave)
values ('MarioPerez','Marito');
insert into usuarios (nombre, clave)
values ('Marcelo','River');
insert into usuarios (nombre, clave)
values ('Gustavo','River');
Si intentamos ingresar un valor para el campo clave que ya existe, aparece
un mensaje de error indicando que el registro no se cargó pues el dato clave
existe. Esto sucede porque los campos definidos como clave primaria no
pueden repetirse.
MYSQL – SENTENCIAS DDL Y DML
Ingresamos un registro con un nombre de usuario repetido, por
ejemplo:
insert into usuarios (nombre, clave) values ('Gustavo','Boca');
Una tabla sólo puede tener una clave primaria. Cualquier
campo (de cualquier tipo) puede ser clave primaria, debe
cumplir como requisito, que sus valores no se repitan.
Al establecer una clave primaria estamos indexando la tabla, es
decir, creando un índice para dicha tabla.
MYSQL – SENTENCIAS DDL Y DML
12 - Campo entero con autoincremento.
Un campo de tipo entero puede tener otro atributo extra 'auto_increment'. Los
valores de un campo 'auto_increment', se inician en 1 y se incrementan en 1
automáticamente.
Se utiliza generalmente en campos correspondientes a códigos de identificación para
generar valores únicos para cada nuevo registro que se inserta.
Sólo puede haber un campo "auto_increment" y debe ser clave primaria (o estar
indexado).
Para establecer que un campo autoincremente sus valores automáticamente, éste
debe ser entero (integer) y debe ser clave primaria:
create table libros(codigo int auto_increment, titulo varchar(20),
autor varchar(30), editorial varchar(15), primary key (codigo));
Para definir un campo autoincrementable colocamos "auto_increment" luego de la
definición del campo al crear la tabla.
Hasta ahora, al ingresar registros, colocamos el nombre de todos los campos antes
de los valores; es posible ingresar valores para algunos de los campos de la tabla,
pero recuerde que al ingresar los valores debemos tener en cuenta los campos que
detallamos y el orden en que lo hacemos.
MYSQL – SENTENCIAS DDL Y DML
Cuando un campo tiene el atributo "auto_increment" no es necesario
ingresar valor para él, porque se inserta automáticamente tomando el
último valor como referencia, o 1 si es el primero.
Para ingresar registros omitimos el campo definido como
"auto_increment", por ejemplo:
insert into libros (titulo,autor,editorial) values('El aleph','Borges','Planeta');
Este primer registro ingresado guardará el valor 1 en el campo
correspondiente al código.
Si continuamos ingresando registros, el código (dato que no ingresamos) se
cargará automáticamente siguiendo la secuencia de autoincremento.
Un campo "auto_increment" funciona correctamente sólo cuando contiene
únicamente valores positivos.
Está permitido ingresar el valor correspondiente al campo
"auto_increment", por ejemplo:
insert into libros (codigo,titulo,autor,editorial) values(6,'Martin Fierro','Jose
Hernandez','Paidos');
MYSQL – SENTENCIAS DDL Y DML
Pero debemos tener cuidado con la inserción de un dato en campos
"auto_increment". Debemos tener en cuenta que:
- si el valor está repetido aparecerá un mensaje de error y el registro no
se ingresará.
- si el valor dado saltea la secuencia, lo toma igualmente y en las
siguientes inserciones, continuará la secuencia tomando el valor más alto.
- si el valor ingresado es 0, no lo toma y guarda el registro continuando la
secuencia.
- si el valor ingresado es negativo (y el campo no está definido para
aceptar sólo valores positivos), lo ingresa.
Para que este atributo funcione correctamente, el campo debe contener
solamente valores positivos.
MYSQL – SENTENCIAS DDL Y DML
13 - Comando truncate table.
Aprendimos que para borrar todos los registro de una tabla se
usa "delete" sin condición "where".
También podemos eliminar todos los registros de una tabla con
"truncate table". Por ejemplo, queremos vaciar la tabla "libros",
usamos:
truncate table libros;
La sentencia "truncate table" vacía la tabla (elimina todos los
registros) y vuelve a crear la tabla con la misma estructura.
La diferencia con "drop table" es que esta sentencia borra la
tabla, "truncate table" la vacía.
La diferencia con "delete" es la velocidad, es más rápido
"truncate table" que "delete" (se nota cuando la cantidad de
registros es muy grande) ya que éste borra los registros uno a
uno.
MYSQL – SENTENCIAS DDL Y DML
Otra diferencia es la siguiente: cuando la tabla tiene un campo
"auto_increment", si borramos todos los registros con "delete" y luego
ingresamos un registro, al cargarse el valor en el campo autoincrementable,
continúa con la secuencia teniendo en cuenta el valor mayor que se había
guardado; si usamos "truncate table" para borrar todos los registros, al
ingresar otra vez un registro, la secuencia del campo autoincrementable
vuelve a iniciarse en 1.
Por ejemplo, tenemos la tabla "libros" con el campo "codigo" definido
"auto_increment", y el valor más alto de ese campo es "5", si borramos
todos los registros con "delete" y luego ingresamos un registro sin valor de
código, se guardará el valor "6"; si en cambio, vaciamos la tabla con
"truncate table", al ingresar un nuevo registro sin valor para el código,
iniciará la secuencia en 1 nuevamente.
MYSQL – SENTENCIAS DDL Y DML
14 - Valores null.
Analizaremos la estructura de una tabla que vemos al utilizar el comando
"describe". Tomamos como ejemplo la tabla "libros":

La primera columna indica el tipo de dato de cada campo.


La segunda columna "Null" especifica si el campo permite valores nulos;
vemos que en el campo "codigo", aparece "NO" y en las demás "YES", esto
significa que el primer campo no acepta valores nulos (porque es clave
primaria) y los otros si los permiten.
La tercera columna "Key", muestra los campos que son clave primaria; en el
campo "codigo" aparece "PRI" (es clave primaria) y los otros están vacíos,
porque no son clave primaria.
MYSQL – SENTENCIAS DDL Y DML
La cuarta columna "Default", muestra los valores por defecto, esto es, los
valores que MySQL ingresa cuando omitimos un dato o colocamos un valor
inválido; para todos los campos, excepto para el que es clave primaria, el
valor por defecto es "null".
La quinta columna "Extra", muestra algunos atributos extra de los campos;
el campo "codigo" es "auto_increment".
"null' significa "dato desconocido" o "valor inexistente". No es lo mismo que
un valor 0, una cadena vacía o una cadena literal "null".
A veces, puede desconocerse o no existir el dato correspondiente a algún
campo de un registro. En estos casos decimos que el campo puede contener
valores nulos. Por ejemplo, en nuestra tabla de libros, podemos tener
valores nulos en el campo "precio" porque es posible que para algunos
libros no le hayamos establecido el precio para la venta.
En contraposición, tenemos campos que no pueden estar vacíos jamás, por
ejemplo, los campos que identifican cada registro, como los códigos de
identificación, que son clave primaria.
MYSQL – SENTENCIAS DDL Y DML
Por defecto, es decir, si no lo aclaramos en la creación de la tabla, los
campos permiten valores nulos.
Imaginemos que ingresamos los datos de un libro, para el cual aún no
hemos definido el precio:
insert into libros (titulo,autor,editorial,precio) values ('El
aleph','Borges','Planeta',null);
Note que el valor "null" no es una cadena de caracteres, no se coloca entre
comillas.
Si un campo acepta valores nulos, podemos ingresar "null" cuando no
conocemos el valor.
Los campos establecidos como clave primaria no aceptan valores nulos.
Nuestro campo clave primaria, está definido "auto_increment"; si
intentamos ingresar el valor "null" para este campo, no lo tomará y seguirá
la secuencia de incremento.
MYSQL – SENTENCIAS DDL Y DML
El campo "titulo", no debería aceptar valores nulos, para establecer este
atributo debemos crear la tabla con la siguiente sentencia:
create table libros(codigo int auto_increment, titulo varchar(20) not null autor
varchar(30), editorial varchar(15), precio float, primary key (codigo));
Entonces, para que un campo no permita valores nulos debemos especificarlo
luego de definir el campo, agregando "not null". Por defecto, los campos
permiten valores nulos, pero podemos especificarlo igualmente agregando
"null".
Explicamos que "null" no es lo mismo que una cadena vacía o un valor 0 (cero).
Para recuperar los registros que contengan el valor "null" en el campo "precio"
no podemos utilizar los operadores relacionales vistos anteriormente: = (igual)
y <> (distinto); debemos utilizar los operadores "is null" (es igual a null) y "is not
null" (no es null):
select * from libros where precio is null;
La sentencia anterior tendrá una salida diferente a la siguiente:
select * from libros where precio=0;
Con la primera sentencia veremos los libros cuyo precio es igual a "null"
(desconocido); con la segunda, los libros cuyo precio es 0.
MYSQL – SENTENCIAS DDL Y DML
Igualmente para campos de tipo cadena, las siguientes sentencias "select"
no retornan los mismos registros:
select * from libros where editorial is null;
select * from libros where editorial='';
Con la primera sentencia veremos los libros cuya editorial es igual a "null",
con la segunda, los libros cuya editorial guarda una cadena vacía.
MYSQL – SENTENCIAS DDL Y DML
15 - Valores numéricos sin signo (unsigned)
Los campos de tipo entero pueden tener el atributo "auto_increment", que
incrementa automáticamente el valor del campo en 1.
Los campos de cualquier tipo aceptan el atributo "null" y "not null" con lo
cual permiten o no valores nulos.
Otro atributo que permiten los campos de tipo numérico es "unsigned".
El atributo "unsigned" (sin signo) permite sólo valores positivos.
Si necesitamos almacenar edades, por ejemplo, nunca guardaremos valores
negativos, entonces sería adecuado definir un campo "edad" de tipo entero
sin signo:
edad integer unsigned;
Si necesitamos almacenar el precio de los libros, definimos un campo de
tipo "float unsigned" porque jamás guardaremos un valor negativo.
Es importante elegir el tipo de dato adecuado, el más preciso, según el caso.
Si un campo almacenará sólo valores positivos, es útil definir dicho campo
con este atributo.
MYSQL – SENTENCIAS DDL Y DML
En los tipos enteros, "unsigned" duplica el rango, es decir, el tipo "integer"
permite valores de -2000000000 a 2000000000 aprox., si se define "integer
unsigned" el rango va de 0 a 4000000000 aprox.
Los tipos de coma flotante (float por ejemplo) también aceptan el atributo
"unsigned", pero el valor del límite superior del rango se mantiene.

También podría gustarte