MySQL 2
MySQL 2
MySQL 2
El comando "SELECT" recupera los registros de una tabla. Luego del comando
SELECT indicamos los nombres de los campos a rescatar.
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:
Ejemplo:
Fuente: https://www.tutorialesprogramacionya.com
INSERT INTO (Insertar registro)
Un registro es una fila de la tabla que contiene los datos propiamente dichos.
Cada registro tiene un dato por cada columna.
Fuente: https://www.tutorialesprogramacionya.com
Operadores relacionales
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:
Between / In
Con "IN" averiguamos si el valor del campo está incluido en la lista, con "NOT"
antecediendo la condición, invertimos el resultado.
Selecciones ordenadas
Fuente: https://www.tutorialesprogramacionya.com
UPDATE (Borrar registro)
Si queremos eliminar uno o varios registros debemos indicar cuál o cuáles,
para ello utilizamos el comando "DELETE" junto con la cláusula "WHERE" con
la cual establecemos la condición que deben cumplir los registros a borrar. Por
ejemplo, queremos eliminar aquelregistro cuyo nombre de usuario es
'Leonardo':
Fuente: https://www.tutorialesprogramacionya.com
Índices
Para facilitar la obtención de información de una tabla se utilizan índices.
Es importante identificar el o los campos por los que sería útil crear un índice,
aquellos campos por los cuales se realizan operaciones de búsqueda con
frecuencia.
Una tabla puede tener hasta 64 índices. Los nombres de índices aceptan todos
los caracteres y pueden tener una longitud máxima de 64 caracteres. Pueden
comenzar con un dígito, pero no pueden tener sólo dígitos.
Una tabla puede ser indexada por campos de tipo numérico o de tipo caracter.
También se puede indexar por un campo que contenga valores NULL, excepto
los PRIMARY.
"SHOW index" muestra información sobre los índices de una tabla. Por
ejemplo:
Los valores indexados deben ser únicos y además no pueden ser nulos. Una
tablasolamente puede tener una clave primaria por lo tanto, solamente tiene un
índice PRIMARY.
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.
Podemos ver la estructura de los índices de una tabla con "SHOW index". Por
ejemplo:
Ejemplo:
DROP TABLE if exists libros; CREATE TABLE libros(
codigo int unsigned auto_increment, titulo varchar(40) not null,
autor varchar(30), editorial varchar(15), primary key(codigo)
);
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; a este tema lo veremos más adelante.
DROP TABLE IF EXISTS usuarios;
DESCRIBE usuarios;
Index
Dijimos que hay 3 tipos de índices. Hasta ahora solamente conocemos la clave
primaria que definimos al momento de crear una tabla.
Vamos a ver el otro tipo de índice, común. Un índice común se crea con
"index", los valores no necesariamente son únicos y aceptan valores "null".
Puede haber varios por tabla.
Vamos a trabajar con nuestra tabla "libros".
Unique Index
Veamos el otro tipo de índice, único. Un índice único se crea con "unique", los
valores deben ser únicos y diferentes, aparece un mensaje de error si
intentamos agregar un registro con un valor ya existente. Permite valores nulos
y pueden definirse varios por tabla. Podemos darle un nombre, si no se lo
damos, se coloca uno por defecto.
Vamos a trabajar con nuestra tabla "libros".
Eliminar índice
Podemos eliminar los índices creados con "index" y con "unique" pero no el
que se crea al definir una clave primaria. Un índice PRIMARY se elimina
automáticamente al eliminar la clave primaria.
Para agregar un índice único a una tabla existente usamos "CREATE unique
index", indicamos el nombre, sobre qué tabla y entre paréntesis, el o los
campos por los cuales se indexará.
Un índice PRIMARY no puede agregarse, se crea automáticamente al definir
una clave primaria.
Campos autoincrementables
Un campo de tipo entero puede tener otro atributo extra 'auto_increment'. Los
valores de uncampo 'auto_increment', se inician en 1 y se incrementan en 1
automáticamente.
Fuente: https://www.tutorialesprogramacionya.com
UPDATE (Actualizar registro)
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 "RealMadrid":
Fuente: https://www.tutorialesprogramacionya.com
LIKE
Hemos realizado consultas utilizando operadores relacionales para comparar
cadenas. Por ejemplo, sabemos recuperar los libros cuyo autor sea igual a la
cadena "Borges":
Note que el símbolo "%" ya no está al comienzo, con esto indicamos que el
título debe tener como primera letra la "A" y luego, cualquier cantidad de
caracteres.
Para seleccionar todos los libros que no comiencen con "A":
Así como "%" reemplaza cualquier cantidad de caracteres, el guión bajo "_"
reemplaza un caracter, es el otro caracter comodín. Por ejemplo, queremos ver
los libros de "Lewis Carroll" pero no recordamos si se escribe "Carroll" o
"Carrolt", entonces tipeamos esta condición:
'_%', mostrará todos los registros porque lo interpreta como "patrón que
comienza con un caracter cualquiera y sigue con cualquier cantidad de
caracteres". Debemos utilizar "\_%", esto se interpreta como 'patrón que
comienza con guión bajo y continúa con cualquier cantidad de caracteres".
Fuente: https://www.tutorialesprogramacionya.com
Funciones matemáticas
Existen en MySQL funciones que nos permiten contar registros, calcular
sumas, promedios, obtener valores máximos y mínimos. Ya hemos aprendido
"count()", veamos otras.
La función "sum()" retorna la suma de los valores que contiene el campo
especificado. Por ejemplo, queremos saber la cantidad de libros que tenemos
disponibles para la venta:
Fuente: https://www.tutorialesprogramacionya.com
Primary key y Foreign Key
Las claves primarias (Primary Keys) son valores que identifican de manera
única a cada fila o registro de una tabla, esto quiere decir que no se puede
repetir. Por ejemplo: un DNI, un código de producto, etc.
Una clave foránea (Foreign Key) es un campo de una tabla “X” que sirve
para enlazar o relacionar entre sí con otra tabla “Y” en la cual el campo de esta
tabla es una llave primaria (Primary Key). Para que sea una clave foránea un
campo, esta tiene que ser una llave primaria en otra tabla.
Por ejemplo, en la tabla clientes el dni es una primary key, pero en una tabla
“pedidos” representa a quién pertenece ese determinado pedido.
En los siguientes apartados veremos más detalles sobre estos dos tipos de
claves.
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:
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 nulos(más adelante
explicaremos esto detalladamente). Ingresamos algunos registros:
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; a este tema lo veremos más adelante.
Ejemplo:
DESCRIBE usuarios;
Fuente: https://www.tutorialesprogramacionya.com
Clave foránea
Un campo que se usa para establecer un "JOIN" con otra tabla en la cual es
clave primaria, se denomina "clave ajena o foránea".
En el ejemplo de la librería en que utilizamos las tablas "libros" y "editoriales"
con los campos:
libros: codigo (clave primaria), titulo, autor, codigo_editorial, precio, cantidad y
editoriales: codigo (clave primaria), nombre.
Fuente: https://www.tutorialesprogramacionya.com
JOIN
Los JOINs en SQL sirven para combinar filas de dos o más tablas basándose
en un campocomún entre ellas, devolviendo por tanto datos de diferentes
tablas. Un JOIN se produce cuando dos o más tablas se juntan en una
sentencia SQL.
Los más importantes son los siguientes:
1. INNER JOIN: Devuelve todas las filas cuando hay al menos una
coincidencia en ambas tablas.
2. LEFT JOIN: Devuelve todas las filas de la tabla de la izquierda, y las
filas coincidentes de la tabla de la derecha.
3. RIGHT JOIN: Devuelve todas las filas de la tabla de la derecha, y las
filas coincidentes de la tabla de la izquierda.
4. OUTER JOIN: Devuelve todas las filas de las dos tablas, la izquierda y
la derecha. También se llama FULL OUTER JOIN.
1. INNER JOIN
INNER JOIN selecciona todas las filas de las dos columnas siempre y cuando
haya una coincidencia entre las columnas en ambas tablas. Es el tipo de JOIN
más común.
SELECT nombreColumna(s)
FROM tabla1
INNER JOIN tabla2
ON tabla1.nombreColumna=table2.nombreColumna;
Vamos a verlo también con un ejemplo, mediante las tablas clientes y pedidos:
clientes:
pedidos:
233 4 160
234 2 48
235 3 64
236 4 92
SET FOREIGN_KEY_CHECKS = 0;
ALTER TABLE pedidos ADD FOREIGN KEY(id_cliente) REFERENCES
clientes(id_cliente); SET FOREIGN_KEY_CHECKS = 1;
nombre id_pedido
2. LEFT JOIN
LEFT JOIN mantiene todas las filas de la tabla izquierda (la tabla1). Las filas
de la tabla derecha se mostrarán si hay una coincidencia con las de la
izquierda. Si existen valores enla tabla izquierda pero no en la tabla derecha,
ésta mostrará null.
SELECT c.id_cliente,c.nombre,p.id_pedido
FROM clientes c
LEFT JOIN pedidos p
ON c.id_cliente=p.id_cliente;
nombre id_pedido
Ahora vemos que se muestran todas las filas de la tabla Clientes, que es la
tabla de la izquierda, tantas veces como haya coincidencias con el lado
derecho. Marco Lambert no harealizado ningún pedido, por lo que se muestra
null.
3. RIGHT JOIN
Es igual que LEFT JOIN pero al revés. Ahora se mantienen todas las filas de la
tabla derecha (tabla2). Las filas de la tabla izquierda se mostrarán si hay una
coincidencia con las de la derecha. Si existen valores en la tabla derecha pero
no en la tabla izquierda, ésta se mostrará null.
Ahora van a aparecer todos los pedidos, y los nombres de los clientes que han
realizado unpedido. Nótese que también se ha cambiado el orden, y se han
ordenado los datos por id_pedido.
PedidoID NombreCliente
4. OUTER JOIN
OUTER JOIN o FULL OUTER JOIN devuelve todas las filas de la tabla
izquierda (tabla1) y de la tabla derecha (tabla2). Combina el resultado de los
joins LEFT y RIGHT. Aparecerá null en cada una de las tablas
alternativamente cuando no haya una coincidencia.
La imagen que representa el OUTER JOIN es la siguiente:
UNION
SELECT c.id_cliente,p.id_pedido
FROM clientes c
RIGHT JOIN pedidos p
ON c.id_cliente=p.id_cliente;
Fuente: https://www.tutorialesprogramacionya.com
ALTER TABLE
Para modificar la estructura de una tabla existente, usamos "alter table". "alter
table" se usa para:
- agregar nuevos campos,
- eliminar campos existentes,
- modificar el tipo de dato de un campo,
- agregar o quitar modificadores como "null", "unsigned",
"auto_increment",
- cambiar el nombre de un campo,
- agregar o eliminar la clave primaria,
- agregar y eliminar índices,
- renombrar una tabla.
"alter table" hace una copia temporal de la tabla original, realiza los cambios
en la copia, luego borra la tabla original y renombra la copia.
Aprenderemos a agregar campos a una tabla.
Para ello utilizamos nuestra tabla "libros", definida con la siguiente estructura:
- código, int unsigned auto_increment, clave primaria,
- titulo, varchar(40) not null,
- autor, varchar(30),
- editorial, varchar (20),
- precio, decimal(5,2) unsigned.
Usamos "alter table" seguido del nombre de la tabla y "add" seguido del
nombre del nuevocampo con su tipo y los modificadores.
Agreguemos otro campo a la tabla:
"alter table" nos permite alterar la estructura de la tabla, podemos usarla para
eliminar un campo.
Continuamos con nuestra tabla "libros". Para eliminar el campo "edicion"
tipeamos:
Entonces, para borrar un campo de una tabla usamos "alter table" junto con
"drop" y elnombre del campo a eliminar.
Si intentamos borrar un campo inexistente aparece un mensaje de error y la
acción no serealiza.
Podemos eliminar 2 campos en una misma sentencia:
Con "alter table" podemos modificar el tipo de algún campo incluidos sus
atributos. Continuamos con nuestra tabla "libros", definida con la siguiente
estructura:
- código, int unsigned,
- titulo, varchar(30) not null,
- autor, varchar(30),
- editorial, varchar (20),
- precio, decimal(5,2) unsigned,
- cantidad int unsigned.
Usamos "alter table" seguido del nombre de la tabla y "modify" seguido del
nombre del nuevo campo con su tipo y los modificadores.
Queremos modificar el tipo del campo "titulo" para poder almacenar una
longitud de 40caracteres y que no permita valores nulos, tipeamos:
Hay que tener cuidado al alterar los tipos de los campos de una tabla que ya
tiene registros cargados. Si tenemos un campo de texto de longitud 50 y lo
cambiamos a 30 de longitud, los registros cargados en ese campo que
superen los 30 caracteres, se cortarán (en versiones nuevas de MySQL 8.x
genera un error y no modifica la estructura de la tabla) Igualmente, si un
campo fue definido permitiendo valores nulos, se cargaron registros con
valores nulos y luego se lo define "not null", todos los registros con valor nulo
para ese campo cambiarán al valor por defecto según el tipo (cadena vacía
para tipo texto y 0 para numéricos), ya que "null" se convierte en un valor
inválido.
Si definimos un campo de tipo decimal(5,2) y tenemos un registro con el valor
"900.00" y luego modificamos el campo a "decimal(4,2)", el valor "900.00" se
convierte en un valor inválido para el tipo, entonces guarda en su lugar, el valor
límite más cercano, "99.99" (enversiones nuevas de MySQL genera un error y
no modifica la estructura de la tabla).
Si intentamos definir "auto_increment" un campo que no es clave primaria,
aparece un mensaje de error indicando que el campo debe ser clave primaria.
Por ejemplo:
Fuente: https://www.tutorialesprogramacionya.com
Subconsultas
El uso de subconsultas es una técnica que permite utilizar el resultado de una
tabla SELECT en otra consulta SELECT. Permite solucionar consultas
complejas mediante el uso de resultados previos conseguidos a través de otra
consulta.
El SELECT que se coloca en el interior de otro SELECT se conoce con el
término de SUBCONSULTAS. Esa SUBCONSULTA se puede colocar dentro
de las cláusulas WHERE, HAVING, FROM o JOIN.
Subconsultas simples
Las subconsultas simples son aquellas que devuelven una única fila. Si
además devuelven una única columna, se las llama subconsultas escalares,
ya que devuelven un único valor. La sintaxis es:
SELECT
listaExpresiones
FROM tabla
WHERE expresión OPERADOR
(SELECT
listaExpresiones
FROM tabla);
Además tienen que devolver el mismo tipo y número de datos para relacionar la
subconsulta con la consulta que la utiliza (no puede ocurrir que la subconsulta
tenga dos columnas y ese resultado se compara usando una sola columna en
la consulta general).
Fuente: https://www.tutorialesprogramacionya.com
Funciones para Strings
NO debe haber espacios entre un nombre de función y los paréntesis porque
MySQL puede confundir una llamada a una función con una referencia a una
tabla o campo que tenga el mismo nombre de una función.
MySQL tiene algunas funciones para trabajar con cadenas de caracteres.
Estas son algunas:
-char(x,..): retorna una cadena con los caracteres en código ASCII de los
enteros enviados como argumentos. Ejemplo: select char(65,66,67); retorna
"ABC".
Ejemplo práctico:
Fuente: http://www.tutorialesprogramacionya.com
Funciones para valores numéricos
MySQL tiene algunas funciones para trabajar con números. Aquí presentamos
algunas. RECUERDE que NO debe haber espacios entre un nombre de
función y los paréntesis porque MySQL puede confundir una llamada a una
función con una referencia a una tabla ocampo que tenga el mismo nombre de
una función.
-abs(x): retorna el valor absoluto del argumento "x". Ejemplo: select abs(-20);
retorna 20.
-rand(): retorna un valor de coma flotante aleatorio dentro del rango 0 a 1.0.
Fuente: http://www.tutorialesprogramacionya.com
Columnas calculadas
Es posible obtener salidas en las cuales una columna sea el resultado de un
cálculo y no uncampo de una tabla.
Si queremos ver los títulos, precio y cantidad de cada libro escribimos la
siguiente sentencia:
select titulo,precio,cantidad from libros;
Ejemplo práctico:
drop table if exists libros; create table libros(
codigo int unsigned auto_increment,
titulo varchar(40) not null, autor varchar(30), editorial varchar(15),
precio decimal(5,2) unsigned, cantidad smallint unsigned, primary key (codigo)
);
Fuente: http://www.tutorialesprogramacionya.com
GROUP BY
Es posible obtener salidas en las cuales una columna sea el resultado de un
cálculo y no uncampo de una tabla.
Si queremos ver los títulos, precio y cantidad de cada libro escribimos la
siguiente sentencia:
select titulo,precio,cantidad from libros;
Podemos agrupar por más de un campo, por ejemplo, vamos a hacerlo por
"ciudad" y"sexo":
-- Queremos conocer el total de las compras agrupadas por sexo: select sexo,
sum(montocompra) from visitantes
group by sexo;
Fuente: http://www.tutorialesprogramacionya.com
HAVING
Así como la cláusula "where" permite seleccionar (o rechazar) registros
individuales; la cláusula "having" permite seleccionar (o rechazar) un grupo de
registros.
Si queremos saber la cantidad de libros agrupados por editorial usamos la
siguiente instrucción ya aprendida:
Aquí, selecciona los registros rechazando los que no cumplan con la condición
dada en "where", luego los agrupa por "editorial" y finalmente rechaza los
grupos que no cumplan con la condición dada en el "having".
Generalmente se usa la cláusula "having" con funciones de agrupamiento, esto
no puede hacerlo la cláusula "where". Por ejemplo queremos el promedio de los
precios agrupados por editorial, de aquellas editoriales que tienen más de 2
libros:
Podemos encontrar el mayor valor de los libros agrupados por editorial y luego
seleccionar las filas que tengan un valor mayor o igual a 30:
Ejemplo:
drop table if exists libros; create table libros(
codigo int unsigned auto_increment, titulo varchar(60) not null,
autor varchar(30), editorial varchar(15),
precio decimal(5,2) unsigned, primary key (codigo)
);
-- sólo queremos aquellos cuyo promedio supere los 25 pesos: select editorial,
avg(precio)
from libros
group by editorial having avg(precio)>25;
-- Queremos contar los registros agrupados por editorial sin tener en cuenta
-- a la editorial "Planeta"
select editorial, count(*) from libros where editorial<>'Planeta'
group by editorial;
select editorial, count(*) from libros group by editorial
having editorial<>'Planeta';
-- Queremos la cantidad de libros, sin tener en cuenta los que tienen precio
nulo,
-- agrupados por editorial, rechazando los de editorial "Planeta" select editorial,
count(*) from libros
where precio is not null group by editorial
having editorial<>'Planeta';
-- mayor valor de los libros agrupados por editorial y luego seleccionar las filas
-- que tengan un valor mayor o igual a 30 select editorial, max(precio)
from libros
group by editorial
having max(precio)>=30;
-- Para esta misma sentencia podemos utilizar un "alias" para hacer referencia
a la
-- columna de la expresión
select editorial, max(precio) as 'mayor' from libros
group by editorial having mayor>=30;
Fuente: http://www.tutorialesprogramacionya.com
Procedimientos almacenados
Los procedimientos almacenados se crean en la base de datos seleccionada.
En primer lugar se deben tipear y probar las instrucciones que se incluyen en el
procedimiento almacenado, luego, si se obtiene el resultado esperado, se crea
elprocedimiento.
Los procedimientos almacenados pueden hacer referencia a tablas, vistas y
otros procedimientos almacenados.
Un procedimiento almacenado pueden incluir cualquier cantidad y tipo de
instrucciones. Para crear un procedimiento almacenado empleamos la
instrucción "create procedure". La sintaxis básica parcial es:
call pa_libros_mayor_precio();
Fuente: http://www.tutorialesprogramacionya.com
Backup con mysqldump
1) Acceder a la ubicación del archivo mysqldump.exe con cmd (en modo
administrador)
2) Hacer el backup