parcial 2


Instalar MYSQL

Video Tutorial 1 SQL. Instalación de MYSQL y las primeras consultas SQL con MySql Workbench
MySQL (My S-Q-L) es un sistema de gestión de bases de datos relacionales de codigo abierto, que se ejecuta en un servidor con acceso de usuario múltiple a diversas bases de datos.
MySQL es una base de datos muy popular utilizada en aplicaciones web, y es un componente central del conjunto de software de código abierto; LAMP. LAMP es un acrónimo para "Linux, Apache, MySQL, Perl/PHP/Python." Los proyectos de código abierto que necesitan un sistema de gestión completo para bases de datos suelen utilizar MySQL.
Para instalar MySQL:
- primero descargamos "MySQL Installer MSI" en "http://dev.mysql.com/downloads/mysql/www.dev.mysql.com/downloads/mysql/"
- cuando instalamos "MySQL Installer MSI", se instalan el servidor y el workbench.
Qué es SQL?
Es un lenguaje diseñado para gestionar datos que están en una base de datos relacional.
Qué es una base de datos relacional?
Una base de datos relacional es una base de datos que cumple con el modelo relacional, el cual es el modelo más utilizado en la actualidad para implementar bases de datos ya planificadas. Permiten establecer interconexiones (relaciones) entre los datos (que están guardados en tablas), y a través de dichas conexiones relacionar los datos de ambas tablas, de ahí proviene su nombre: "Modelo Relacional".
Una base de datos normalmente incluye software para gestionar la base de datos. Existen diferentes tipos de software pero el más común es el servidor, que mantiene los datos; un programa que es un servidor y que se ejecuta en un segundo plano. Los diferentes programas se conectan a este servidor y este es el encargado de dar datos y actualizarlos.
Esta es la razón por la que descargamos un servidor de base de datos.
El workbench, que también hemos instalado, está conectado a esta base de datos.
Primeras consultas;
Una vez que tenemos todo instalado, podemos hacer nuestras primeras consultas SQL;
- Primero creamos un nuevo schema "edu"
- Después creamos una nueva tabla "books", dentro del schema "edu" con cuatro columnas; "idbooks", "title", "author", "isbn"

Clientes SQL y Esquemas

Video Tutorial 2 SQL. Tipos de bases de datos, Clientes SQL y Esquemas en Bases de Datos.
En este tutorial vamos a hablar de las diferentes tipos de bases de datos, los diferentes clientes SQL y la definición de un esquema.

Base de datos

Una base de datos o banco de datos es un conjunto de datos pertenecientes a un mismo contexto y almacenados sistemáticamente para su posterior uso.

Tipos de bases de datos

Las bases de datos pueden clasificarse de varias maneras, de acuerdo al contexto que se esté manejando, la utilidad de las mismas o las necesidades que satisfagan.
Haremos una clasificación entre las bases de datos de "código abierto" y las bases de datos "comerciales".
Las de código abierto tienen la ventaja que son gratuitas y tienen una comunidad que las soporta.
·                      

Crear y modificar tablas

SENTENCIA CREATE TABLE

La sentencia CREATE TABLE es utilizada para crear una tabla en una base de datos.
Las tablas se organizan en filas y columnas; y cada tabla debe tener un nombre.

SINTAXIS PARA LA SENTENCIA CREATE TABLE

CREATE TABLE table_name
(
column_name1 data_type(size),
column_name2 data_type(size),
column_name3 data_type(size),
....
);
Los parámetros "column_name" especifican los nombres de las columnas de las tablas.
Los parámetros "data_type" especifican que tipo de datos puede haber en esa columna (ej. varchar, integer, decimal, date, etc.).
El parámetro "size" especifica la longitud máxima de la columna de la tabla.

Ejemplo de la sentencia SQL CREATE TABLE:

Ahora vamos a crear en el esquema "eli", una tabla llamada "publisher", que contiene cuatro columnas; idpublisher, name, address, and phone.
En el MySQL Workbench escribimos la instrucción CREATE TABLE:

Descripción: http://www.edu4java.com/_img/sql/createTableSql2.pngLa columna idpublisher es de tipo int y contendrá un integer. Esta es la "primary key"; el identificador único. Las columnas "name, address, y phone" son de tipo varchar y contendrá caracteres, con una longitud máxima para estos campos de 45 caracteres.

SENTENCIA ALTER TABLE

La sentencia ALTER TABLE se utiliza para añadir, borrar o modificar columnas de una tabla existente.

SINTAXIS PARA LA SENTENCIA ALTER TABLE

Para borrar una columna de una tabla, hay que utilizar la siguiente sintaxis (algunos sistemas de bases de datos no permiten borrar una columna):
ALTER TABLE table_name
DROP COLUMN column_name
En nuestro ejemplo, borramos la columna "address" con la siguiente instrucción;
Descripción: http://www.edu4java.com/_img/sql/dropTableSql2.png
Para añadir una columna a una tabla, hay que utilizar la siguiente sintaxis;
ALTER TABLE table_name
ADD column_name datatype
En nuestro ejemplo, vamos a modificar la tabla "books" de nuestros anteriores tutoriales y vamos a añadir una nueva columna "idpublisher", para que sepamos quien es el editor de cada libro, con la siguiente instrucción;
Descripción: http://www.edu4java.com/_img/sql/addColumnSql2.png

Podemos hacer lo mismo en la consola;

Primero con la sentencia DROP;
Ejemplo 1: En la tabla "publisher" borramos la columna "address";
Descripción: http://www.edu4java.com/_img/sql/dropConsolaSql3.png
Ejemplo 2; En la tabla "books" borramos la columna "idpublisher":
Descripción: http://www.edu4java.com/_img/sql/drop2ConsolaSql3.png
Podemos hacer lo mismo con la instrucción ADD;
Añadimos una columna "idpublisher" en la tabla "books";
Descripción: http://www.edu4java.com/_img/sql/addConsolaSql3.png

SQL - DDL y DML - SELECT

DDL y DML

Las sentencias SQL se dividen en dos categorías; Lenguaje de definición de datos; data definition language (DDL) yLenguaje de manipulación de datos ;data manipulation language (DML).

Lenguaje de definición de datos (DDL)

Las sentencias DDL se utilizan para crear y modificar la estructura de las tablas así como otros objetos de la base de datos.
·                     CREATE - para crear objetos en la base de datos.
·                     ALTER - modifica la estructura de la base de datos.
·                     DROP - borra objetos de la base de datos.
·                     TRUNCATE - elimina todos los registros de la tabla, incluyendo todos los espacios asignados a los registros.

Lenguaje de manipulación de datos (DML)

Las sentencias de lenguaje de manipulación de datos (DML) son utilizadas para gestionar datos dentro de los schemas. Algunos ejemplos:
·                     SELECT - para obtener datos de una base de datos.
·                     INSERT - para insertar datos a una tabla.
·                     UPDATE - para modificar datos existentes dentro de una tabla.
·                     DELETE - elimina todos los registros de la tabla; no borra los espacios asignados a los registros.

Sentencia SELECT

La sentencia SELECT se utiliza para seleccionar datos de una base de datos.
Se guarda el resultado en una tabla llamada "result-set".

Sintaxis de la Sentencia SELECT 1

 SELECT column_name,column_name
FROM table_name;
 

Ejemplo de la sentencia SELECT

En el siguiente ejemplo pedimos el "titulo", "autor" y "isbn" de todos los registros de la tabla "books". Como ven SQL no hace distinción entre mayúsculas y minúsculas. Podemos escribir SQL tanto en minúsculas como mayúsculas.
Descripción: http://www.edu4java.com/_img/sql/selectSql4-2.png
y

Sintaxis de la Sentencia SELECT 2

SELECT * FROM table_name;
EL asterisco * significa que queremos todas las columnas de la tabla.

Ejemplo de la sentencia SELECT * FROM

A continuación podemos ver el resultado de la petición; SELECT * FROM eli.publisher; toda la información de la tabla "publisher";
Descripción: http://www.edu4java.com/_img/sql/selectFromSql4.png
Como ven, estamos utilizando indistintamente la consola y el workbench. Es importante que la consola les sea familiar, ya que así la pueden utilizar cuando no tengan una interface gráfica.

Sentencia SQL WHERE

La sentencia WHERE se usa para extraer sólo los registros que cumplan con una condición. Funciona como un filtro.

Sintaxis de la sentencia SQL WHERE

  SELECT column_name,column_name
FROM table_name
WHERE column_name operator value;

Ejemplo de la sentencia SQL WHERE

En este ejemplo, estamos pidiendo todos los registros de la tabla "books" que tengan "idpublisher"=1. Conseguiremos los resultados que cumplan esa condición;
Descripción: http://www.edu4java.com/_img/sql/selectWhereSql4_4.png

Claúsula ORDER BY

La claúsula ORDER BY se utiliza para ordenar los resultados a través de una o más columnas.
La claúsula ORDER BY ordena los registros de manera ascendente por defecto. Para hacerlo de manera descendente, se puede utilizar la claúsula DESC.

Sintaxis de la claúsula SQL ORDER BY

  SELECT column_name,column_name
FROM table_name
ORDER BY column_name,column_name ASC|DESC;
  

Ejemplo de la claúsula ORDER BY

En este ejemplo ordenamos la tabla "books" en orden alfabético utilizando el "título";
Descripción: http://www.edu4java.com/_img/sql/orderbySQL4-3.png

SQL - JOIN

Video Tutorial 5 SQL. Instrucciones SQL JOIN con Mysql Workbench

SQL JOIN se utiliza para combinar registros de dos o más tablas.

SQL JOIN

La instrucción SQL JOIN se utiliza para combinar dos o más tablas, tomando un campo común de las dos.
El JOIN más común es: SQL INNER JOIN (join simple). Un SQL INNER JOIN devuelve todos los registros de varias tablas que cumplen con la condición.

SINTAXIS INNER JOIN

SELECT column_name(s)
FROM table1
INNER JOIN table2
ON table1.column_name=table2.column_name;
ó
SELECT column_name(s)
FROM table1
JOIN table2
ON table1.column_name=table2.column_name;
INNER JOIN es lo mismo que JOIN.
Descripción: http://www.edu4java.com/_img/sql/diagramInnerJoin.png

Ejemplo INNER JOIN

En nuestro ejemplo combinamos todos los registros de las tablas "publisher" y "books" cuando se cumple con la condición books.idpublisher=publisher.idpublisher.

Descripción: http://www.edu4java.com/_img/sql/innerJoinSql5.png


SQL LEFT JOIN

La claúsula LEFT JOIN devuelve todas los registros de la tabla de la izquierda (table1), con las correspondientes de la tabla de la derecha (table2). El resultado es NULL en la parte de la derecha cuando no hay registros que correspondan con la condición.

SINTAXIS SQL LEFT JOIN

 SELECT column_name(s)
FROM table1
LEFT JOIN table2
ON table1.column_name=table2.column_name;
 
en algunas bases de datos LEFT JOIN es LEFT OUTER JOIN;
 SELECT column_name(s)
FROM table1
LEFT OUTER JOIN table2
ON table1.column_name=table2.column_name;
Descripción: http://www.edu4java.com/_img/sql/diagramLeftJoin.png

Ejemplo SQL LEFT JOIN


Descripción: http://www.edu4java.com/_img/sql/leftJoinSql5.png
Aquí podemos ver que el resultado es el mismo que el INNER JOIN pero esto es porque todos los registros de "books" tienen un "idpublisher" que coincide con un "idpublisher" de la tabla "publisher". Si insertamos un nuevo registro en la tabla "books", con un "idpublisher" que no coincida con ningun "idpublisher" de la tabla "publisher" (idpublisher=0) entonces;
Descripción: http://www.edu4java.com/_img/sql/leftjoin2Sql5.png

cuando escribimos nuestra consulta LEFT JOIN no vamos a obtener ningún registro de la tabla "publisher";
Descripción: http://www.edu4java.com/_img/sql/leftjoin3Sql5.png

Claúsula RIGHT JOIN

La instrucción RIGHT JOIN devuelve todas los registros de la tabla de la derecha (table2), y todas los registros correspondientes de la tabla de la izquierda (table1). El resultado será NULL cuando no haya registros correspondientes de la tabla de la izquierda.

SQL RIGHT JOIN Syntax

  SELECT column_name(s)
FROM table1
RIGHT JOIN table2
ON table1.column_name=table2.column_name;
  
ó
  SELECT column_name(s)
FROM table1
RIGHT OUTER JOIN table2
ON table1.column_name=table2.column_name;
  
Descripción: http://www.edu4java.com/_img/sql/diagramRightJoinSql5.png

Ejemplo SQL RIGHT JOIN

Podemos cambiar en la consulta SQL, el orden de las tablas para que veamos que es lo mismo que el LEFT JOIN pero al revés:
Descripción: http://www.edu4java.com/_img/sql/rightJoinSql5.png

SQL - INSERT

Video Tutorial 6 SQL. Instrucciones INSERT INTO/INSERT INTO SELECT con MySql Workbench

Sentencia SQL INSERT INTO

La sentencia INSERT INTO se utiliza para insertar nuevos registros a una tabla

Sintaxis SQL INSERT INTO

Se puede escribir la sentencia INSERT INTO de dos maneras.
La primera forma no especifica los nombres de las columnas en las que se inserta los datos, sólo se especifican los valores:
INSERT INTO table_name
VALUES (value1,value2,value3,...);
    
La segunda forma especifica tanto los nombres de las columnas como los valores a insertar;
INSERT INTO table_name (column1,column2,column3,...)
VALUES (value1,value2,value3,...);

EJEMPLO SQL INSERT INTO

Insertamos dos nuevos valores en una nueva tabla "publisher2";
INSERT INTO eli.publisher2 (name, phone) VALUES ('New Store', '555 666');
A continuación vemos la tabla con los datos insertados después de la operación SQL INSERT INTO; Descripción: http://www.edu4java.com/_img/sql/InsertIntoSql6.png

Con SQL, podemos copiar información de una tabla a otra.

Sentencia SQL INSERT INTO SELECT

La sentencia INSERT INTO SELECT selecciona datos de una tabla y los inserta en otra tabla ya existente. Los registros ya existentes de la tabla destino, no se ven afectadas.

Sintaxis SQL INSERT INTO SELECT

Podemos copiar todas los registros de una tabla a otra ya existente:
INSERT INTO table2
SELECT * FROM table1;
O podemos copiar de una tabla a otra, solamente las columnas que queremos:
INSERT INTO table2
(column_name(s))
SELECT column_name(s)
FROM table1;

Ejemplo SQL INSERT INTO SELECT

Vamos a copiar los valores de las columnas "name" y "phone" desde la tabla "publisher" a la tabla "publisher2";
INSERT INTO eli.publisher2 (name, phone) SELECT name, phone from eli.publisher;
A continuación podemos ver los datos en nuestra tabla después de la operación INSERT INTO SELECT;
Descripción: http://www.edu4java.com/_img/sql/insertIntoSelectSql6.png

Nota: Tanto en el caso de la sentencia INSERT INTO como de la sentencia INSERT INTO SELECT, no es necesario escribir las columnas en la consulta SQL, cuando los valores coincidan en tipo y tamaño con el perfil de la columna donde van a ser insertados;
INSERT INTO eli.publisher2 VALUES (4, 'Old store', '555 999');
Descripción: http://www.edu4java.com/_img/sql/insertIntoNoColumnsSql6.png

SQL - UPDATE SET

Sentencia SQL UPDATE

La sentencia UPDATE se utiliza para actualizar registros ya existentes de una tabla.
Nos permite elegir los campos a actualizar y los datos con que actualizarlos.

Sintaxis SQL UPDATE

La sintaxis básica de la claúsula UPDATE es la siguiente:
    UPDATE table_name
SET column_name = value
WHERE condition
    

Ejemplo SQL UPDATE

Primero vamos a ver que datos tenemos en la tabla "publisher2";
Descripción: http://www.edu4java.com/_img/sql/update1Sql7.png
Actualizamos las columnas "phone" y "name" cuando el "idpublisher=4" con la siguente instrucción;
UPDATE eli.publisher2 SET phone='111 111', name='OLD STORE' WHERE idpublisher=4;
Volvemos a mirar los datos de la tabla "publisher2" y vemos que los datos han sido actualizados correctamente;
Descripción: http://www.edu4java.com/_img/sql/update2Sql7.png

SQL - DELETE y TRUNCATE

Video Tutorial 8 SQL. Instrucción DELETE FROM y TRUNCATE con MySql Workbench


Sentencia SQL DELETE

La sentencia DELETE se utiliza para borrar registros de una tabla.
Se especifica de que tabla se quieren borrar los registros y si se necesita, se puede añadir una claúsula WHERE para especificar qué registros borrar.
Hay que tener en cuenta que si se omite la claúsula WHERE, se borrarán todos los registros!

Sintaxis SQL DELETE

DELETE FROM table_name
WHERE some_column=some_value;
    

Ejemplo SQL DELETE

A continuación vemos nuestra tabla "publisher3", que es la que vamos a usar en nuestro ejemplo para borrar datos;
Descripción: http://www.edu4java.com/_img/sql/delete1Sql8.png
Ahora vamos a borrar las columnas que tengan el idpublisher=4";
DELETE FROM `eli`.`publisher3` WHERE `idpublisher`='4';
Y el resultado es;
Descripción: http://www.edu4java.com/_img/sql/delete2Sql8.png

Sentencia SQL TRUNCATE

Elimina todas las filas de una tabla. Es una instrucción DDL; internamente hace un DROP de la tabla y después hace un CREATE de la misma tabla.
TRUNCATE TABLE es similar a la sentencia DELETE pero sin la claúsula WHERE. Tiene la desventaja de que no se puede borrar selectivamente toda la tabla y la ventaja de que TRUNCATE TABLE es más rápido y utiliza menos recursos.

Sintaxis SQL TRUNCATE

TRUNCATE table_name;

Ejemplo SQL TRUNCATE

Vamos a borrar la tabla "publisher2";
TRUNCATE eli.publisher2;
Y a continuación vemos como quedó la tabla "publisher2";
Descripción: http://www.edu4java.com/_img/sql/truncateSql8.png

SQL - Funciones

Funciones: left, substring, concat, upper, lower con mysql workbench


FUNCIÓN SQL LEFT

Retorna la parte izquierda de un string a partir del número de caracteres especificado.

SINTAXIS FUNCION SQL LEFT

LEFT ( character_expression , integer_expression )
1.           "Character_expression" es una expressión de caracteres o de datos binarios. Puede ser una constante, variable o una columna.
2.           "Integer_expression" es un integer positivo que especifica los caracteres que retornará de "character_expression".

EJEMPLO DE LA FUNCIÓN SQL LEFT

Como vemos en la tabla "books", el nombre de los autores no empieza siempre con mayúscula. Vamos a cambiarlo, para esté bien escrito.
Aquí vemos la columna "author";
Descripción: http://www.edu4java.com/_img/sql/sql9/funcionesSql9_1.png
Y a continuación vemos como, la función LEFT(), retorna la primera letra de la columna "author", que en este caso es la letra "e";
Descripción: http://www.edu4java.com/_img/sql/sql9/funcionesSql9_2.png

FUNCIÓN SQL UPPER

La función UPPER() convierte el valor del campo a mayúscula.

SINXTAXIS DE LA FUNCIÓN SQL UPPER

SELECT UPPER(column_name) FROM table_name;

Ejemplo de la función SQL UPPER

Una vez que tenemos la primera letra del autor, queremos que esté en mayúsculas y esto lo conseguimos con la siguiente instrucción;
Descripción: http://www.edu4java.com/_img/sql/sql9/funcionesSql9_3.png

FUNCIÓN SQL SUBSTRING

La función SUBSTRING() retorna el substring especificado.

SINTAXIS DE LA FUNCIÓN SQL SUBSTRING

SUBSTRING (string, position, [length])
Donde "position" y "length" son integers. Esta sintaxis dice; retornar el substring dado desde el caracter en la posición indicada (position), con la longitud indicada (length).
En MySQL y Oracle, la longitud (length) es un argumento opcional. Cuando "length" no se especifica, se retorna el string completo a partir del caracter en la posición indicada.

EJEMPLO DE LA FUNCIÓN SQL SUBSTRING

A continuación vemos como la función devuelve todo el string, de la columna "author", a partir de la segunda letra:
Descripción: http://www.edu4java.com/_img/sql/sql9/funcionesSql9_4.png

FUNCIÓN SQL LOWER

La función LOWER() retorna una expresión de caracteres convertida de mayúsculas a minúsculas.

SINTAXIS DE LA FUNCIÓN SQL LOWER

SELECT LOWER(column_name) FROM table_name;

EJEMPLO DE LA FUNCIÓN SQL LOWER

Desde el principio del tutorial queremos obtener los nombres de los autores escritos correctamente; con la primera letra en mayúsculas y las demás en minúsculas. Ya hemos conseguido la primera letra en mayúscula y ahora vamos a conseguir el resto de la palabra en minúsculas. Para esto utilizamos la siguiente función LOWER();
Descripción: http://www.edu4java.com/_img/sql/sql9/funcionesSql9_6.png

FUNCIÓN SQL CONCAT

Retorna un string que es el resultado de concatenar dos o más valores (strings).

SINTAXIS FUNCIÓN SQL CONCAT

CONCAT ( string_value1, string_value2 [, string_valueN ] );

EJEMPLO DE LA FUNCIÓN SQL CONCAT

Siguiendo con el ejemplo queremos unir la primera letra con el resto del nombre del autor. Para esto utilizaremos la función CONCAT, que unirá la primera letra en mayúscula de la columna "autor" con el resto de la palabra en minúscula;Descripción: http://www.edu4java.com/_img/sql/sql9/funcionesSql9_7.png

SQL - Subselects

Subselects (Subconsultas) con MySql Workbench SINTAXIS DE LAS SUBCONSULTAS

Los subselects o subconsultas se utilizan normalmente dentro de una sentencia SELECT.
La sintaxis básica es la siguiente:
SELECT column_name [, column_name ]  
FROM   table1 [, table2 ] 
WHERE  column_name OPERATOR        
      (SELECT column_name [, column_name ] 
      FROM table1 [, table2 ] 
      [WHERE])

EJEMPLO DE UNA SUBCONSULTA (SUBQUERIES)

A continuación tenemos nuestra tabla "authors";
Descripción: http://www.edu4java.com/_img/sql/sql10/authorsSql10.png
Vamos a seleccionar el autor más joven utilizando la siguiente consulta:
SELECT * FROM eli.authors where birthday= (select max(birthday) from eli.authors);
Y este es el resultado;
Descripción: http://www.edu4java.com/_img/sql/sql10/subQueryAuthorsSql10.png
Para ejemplos más complicados no dude en ver el video tutorial al comienzo de esta página.

SQL - Count y Group By

Video Tutorial SQL 11. Count, Group By con MySql Workbench

FUNCIÓN SQL COUNT

La FUNCIÓN SQL COUNT retorna el número de registros de una consulta.

SINTAXIS DE LA FUNCIÓN SQL COUNT(*)

SELECT COUNT(*)
FROM table_name

EJEMPLO DE LA FUNCIÓN SQL COUNT(*)

A continuación tenemos la tabla "authors".
Descripción: http://www.edu4java.com/_img/sql/sql11/authorsSql11.png
Con la función Count() podemos ver el número de autores que tenemos en la tabla;
Descripción: http://www.edu4java.com/_img/sql/sql11/authorscountSql11.png

FUNCIÓN SQL GROUP BY

La función SQL GROUP BY es utilizada para agrupar datos idénticos en grupos.

SINTAXIS DE LA FUNCIÓN SQL GROUP BY

SELECT column1, column2  
FROM table_name  
WHERE [ conditions ]  
GROUP BY column1, column2

EJEMPLO DE LA FUNCIÓN SQL GROUP BY

Para este ejemplo vamos a ver primero nuestra tabla "books";
Descripción: http://www.edu4java.com/_img/sql/sql11/groupBySql11.png
Basándonos en esta tabla, vamos a escribir una consulta para agrupar a los autores de los libros;
Descripción: http://www.edu4java.com/_img/sql/sql11/groupBySql11_2.png

SQL - AND ,OR

Operadores lógicos SQL AND ,OR con MySql Workbench

OPERADOR LÓGICO SQL AND

El operador AND muestra un registro cuando la primera condición y la segunda se cumplen.

EJEMPLO DEL OPERADOR SQL AND

Tenemos la tabla "books" con la siguiente información;
Descripción: http://www.edu4java.com/_img/sql/sql12/andOperator1Sql12.png
Y queremos seleccionar los títulos de los libros que tiene isbn="4444" Y el author="edu". En este caso sólo nos retornará un libro; "sql in 15 minutes".
Hacemos la selección con la siguiente consulta;
SELECT TITLE FROM eli.books WHERE isbn='4444' and AUTHOR='edu';
Como podemos ver a continuación, el resultado es el esperado;
Descripción: http://www.edu4java.com/_img/sql/sql12/andOperator2Sql12.png
Cuando usamos AND, es conveniente poner la condición con menor probabilidad de que se cumpla, en primer lugar. El sistema de la base de datos evalúa las condiciones de izquierda a derecha. Si tenemos dos o más operadores AND en una condición, el que está a la izquierda, es el primero en ser evaluado, y sólo si es verdadera, se evalua la siguiente condición. Si, esa condición también es verdadera, se evaluará la tercera condición. Si ponemos la condición menos probable en primer lugar, se ahorra trabajo al sistema de la base de datos, aumentando así la velocidad.

OPERADOR LÓGICO SQL OR

El operador OR, muestra los registros cuando se cumple la primera condición Ó la segunda.

EJEMPLO DEL OPERADOR SQL OR

Con la misma tabla "books" podemos seleccionar los títulos de los libros que tienen el "isbn=4444" o el autor="eli":
SELECT TITLE FROM eli.books WHERE isbn='4444' or AUTHOR='ELI';
Descripción: http://www.edu4java.com/_img/sql/sql12/orOperatorSql12.png
Hasta ahora hemos utilizado un sólo operador AND o OR dentro de una claúsula WHERE, pero se pueden incluir tantas como sean necesarias. También se pueden mezclar los operadores AND y OR en una misma claúsula.

SQL - SELECT DISTINCT

TUTORIAL SQL SELECT DISTINCT con MySql Workbench

SQL SELECT DISTINCT

La claúsula DISTINCT nos devuelve valores únicos. En una tabla, una columna puede contener valores duplicados; y algunas veces sólo se necesita un listado de los valores diferentes.

SINTAXIS SELECT DISTINCT SQL

La claúsula DISTINCT se añade a las sentencias SELECT , justo después de la palabra clave SELECT.
    SELECT DISTINCT column_name,column_name
FROM table_name;

EJEMPLO SELECT DISTINCT SQL

Podemos ver como en nuestra tabla "books" tenemos duplicados los autores "eli" y "edu";Descripción: http://www.edu4java.com/_img/sql/sql13/distinctSql13.png
Si queremos solamente el listado de los valores diferentes, podriamos escribir la siguiente consulta sql;
SELECT DISTINCT AUTHOR FROM eli.books;
Obteniendo este resultado;
Descripción: http://www.edu4java.com/_img/sql/sql13/distinct2sql13.png

SQL - LIKE

TUTORIAL SQL operador LIKE con MySql Workbench

OPERADOR SQL LIKE

El operador LIKE permite utilizar caracteres comodín en la búsqueda de un patrón dentro de una columna. Un caracter comodín es aquel que no coincide con un caracter específico si no con cualquier caracter o caracteres.
El operador LIKE selecciona valores alfanuméricos con un determinado patrón.

SINTAXIS DEL OPERADOR SQL LIKE

    SELECT column_name(s)
FROM table_name
WHERE column_name LIKE pattern;

EJEMPLO SQL LIKE

Usaremos la siguiente tabla "publisher3" para nuestro ejemplo:
Descripción: http://www.edu4java.com/_img/sql/sql14/publisher3sql14.png
En nuestro ejercicio queremos seleccionar los nombres de los "publishers" (editores), que terminan con una "a".
Utilizaremos la siguiente sentencia SQL:
SELECT * FROM eli.publisher3 where name like '%a'; 
     
Utilizando MySQL Workbench como interfaz gráfica vemos el siguiente resultado;
Descripción: http://www.edu4java.com/_img/sql/sql14/like1sql14.png
El símbolo "%" se utiliza para definir los comodines en el patrón, tanto delante como detrás de otros caracteres;
Descripción: http://www.edu4java.com/_img/sql/sql14/like2sql14.png
Hay que tener en cuenta que si estamos utilizando MS Access, hay que cambiar el símbolo de porcentaje (%), por el de un asterisco (*):
SELECT * FROM eli.publisher3 WHERE name like '*a';
En algunas bases de datos, el operador LIKE es sensible a las mayúsculas y las minúsculas; en otras no. Oracle, por ejemplo si que lo es y SQL, como vemos a continuación, no;
Descripción: http://www.edu4java.com/_img/sql/sql14/like3sql14.png
Podemos utilizar el operador LIKE junto con el operador NOT, que nos devolverá aquellos registros que no coincidan con el patrón.
·                     Descripción: http://www.edu4java.com/_img/sql/sql14/like4sql14.png
·                      SQL - BETWEEN

Video tutorial sobre el operador SQL BETWEEN con MySql

OPERADOR SQL BETWEEN

BETWEEN es un operador muy útil a utilizar dentro de la claúsula WHERE, para especificar un rango de valores inclusivos. Se utiliza normalmente con fechas pero también se puede usar con strings y con números.

SINTAXIS DEL OPERADOR SQL BETWEEN

SELECT column_name(s)
FROM table_name
WHERE column_name BETWEEN value1 AND value2;

EJEMPLO DEL OPERADOR SQL BETWEEN

Para nuestro ejemplo, utilizaremos nuestra tabla "authors":
Descripción: http://www.edu4java.com/_img/sql/sql15/between1Sql15.png
Con la siguiente sentencia SQL, queremos seleccionar los autores nacidos entre el 2 de febrero de 1971 y el 1 de enero de 1985:
SELECT * FROM eli.authors WHERE birthday BETWEEN '1971-02-02' AND '1985-01-01';
Obteniendo el siguiente resultado;
Descripción: http://www.edu4java.com/_img/sql/sql15/between2Sql15.png
Utilizando el operador BETWEEN, podemos ver que nos devuelve los mismos resultados que los operadores "mayor o igual" (>=) y "menor o igual" (<=). Es importante recordar que el operador BETWEEN es inclusivo.

Se puede utilizar BETWEEN con más tipos de datos además de fechas, como por ejemplo texto;
A continuación tenemos la tabla "books", que vamos a usar para este ejemplo;
Descripción: http://www.edu4java.com/_img/sql/sql15/between3Sql15.png
Queremos seleccionar los registros que su título empieza con la letra "a" a la "s";
SELECT * FROM eli.books WHERE title BETWEEN 'a' and 's';
Descripción: http://www.edu4java.com/_img/sql/sql15/between4Sql15.png
Obtendremos en los resultados los títulos que empiezan con la "a", la "b", etc hasta la "r", que es la última letra antes de la "s". Sin embargo no obtendremos resultados que empiecen con la letra "s". Obtendriamos un registro, en el caso de que hubiera un título compuesto de la letra "s" solamente. Cualquier título que empiece con la letra "s" y un sólo caracter más, es mayor que la "s" y está fuera del rango de valores.

Uso del operador NOT con el operador BETWEEN:

Podemos utilizar el operador BETWEEN en conjunción con el operador NOT. En este caso SQL selecciona el valor que no esté en el rango especificado.
De nuestra tabla "publisher";
Descripción: http://www.edu4java.com/_img/sql/sql15/between5Sql15.png
Vamos a seleccionar los nombres de los editores, que tengan un número de teléfono que no esté dentro del rango "4999" y "5010";
SELECT name FROM eli.publisher where phone not between '4999' and '5010';
Descripción: http://www.edu4java.com/_img/sql/sql15/between6Sql15.png

SQL - UNION

Video tutorial del operador SQL UNION con MySql

OPERADOR SQL UNION

El operador UNION se utiliza cuando se necesita combinar los resultados de dos consultas diferentes. Los resultados no tienen que tener ninguna vinculación entre ellos; se quiere mostrar todos los resultados juntos.
A través del operador UNION se pueden juntar los resultados de dos o más consultas SELECT.

SINTAXIS DEL OPERADOR SQL UNION

SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;
El operador UNION se coloca entre las dos consultas para indicarle a la base de datos que queremos que los resultados de cada selección se presenten juntos en el resultado.
Los nombres de las columnas que aparecen en el resultado de una UNION son normalmente iguales al nombre de las columnas de la primera selección de la UNION.

EJEMPLO SQL UNION

Vamos a unir los resultados de las tablas "publisher" y "publisher3";
TABLA PUBLISHER
TABLA PUBLISHER3
Descripción: http://www.edu4java.com/_img/sql/sql16/publishersql16.png
Descripción: http://www.edu4java.com/_img/sql/sql16/publisher3sql16.png

Unimos las columnas "names" de nuestras tablas con la siguiente sentencia SQL;
SELECT name FROM eli.publisher3 

UNION 

SELECT name FROM eli.publisher; 




Para ver el resultado utilizamos MySql Workbench;
Descripción: http://www.edu4java.com/_img/sql/sql16/union1sql16.png
Para utilizar el operador UNION hay que tener en cuenta las siguientes reglas;
1.           Cada consulta debe producir el mismo número de columnas;
2.           Los tipos de datos de las columnas deben ser los mismos o al menos la base de datos debe poder convertir esos datos para que sean los mismos.El tipo de dato de cada columna se determinó en la creación de la tabla. Si no se está seguro del tipo de dato de una columna, se puede ver en la base de datos.

UNION ALL

En el ejemplo del operador UNION, vemos que se devuelve sólo los nombres que son únicos. Si quieres que se devuelvan todos los datos de la base de datos, aunque estén repetidos, hay que utilizar la claúsula ALL, como vemos en la siguiente sentencia SQL:
   SELECT name FROM eli.publisher3 
   UNION ALL
   SELECT name FROM eli.publisher;

A continuación vemos que aparecen todos los registros, incluidos "eli" y "edu4java", repetido dos veces;

Descripción: http://www.edu4java.com/_img/sql/sql16/unionAllsql16.png

Claúsula ORDER BY utilizado con UNION

La claúsula ORDER BY se escribe al final de las sentencias UNION y se refiere a la primera consulta SELECT.
En DB2 de IBM, la claúsula ORDER BY se escribe al final solamente si el nombre de la columna que se ordena aparece en todas las consultas.
En Oracle, la sintaxis del operador UNION es diferente. No se especifica el nombre del columna a ordenar, si no la posición donde aparece la columna dentro del SELECT.

SQL - CREATE INDEX

Sentencia SQL CREATE INDEX con MySql

Los índices en una tabla son análogos a un catálogo en una biblioteca; si no se tiene un catálogo y hay que buscar un libro determinado en la Biblioteca Británica de Londres, con más de 150 millones de ejemplares, hay que buscar libro por libro y eso llevará un ratito :)
Sin embargo, con un catálogo, se busca el libro en el catálogo y se va directamente a la estanteria indicada.
Sin un índice, la base de datos tiene que buscar en todos y cada uno de los registros de la tabla (este proceso se llama escaneo de tabla). Si tenemos un índice, la base de datos recorre el índice, encuentra donde están los datos y los va a buscar. Esta hace que el proceso sea mucho más rápido.

Un índice guarda un puntero al registro de la tabla

¿Cómo hace para encontrar los otros valores que están en ese mismo registro? Los índices de la base de datos almacenan punteros a los registros correspondientes de la tabla. Un puntero es una referencia al espacio en la memoria del disco donde está guardado los datos de los registros correspondientes en la tabla.
En el índice, por tanto, se guarda el valor de la columna del índice así como un puntero al registro de la tabla donde están los demás valores de esa fila.
Imaginemos que nuestra tabla "books" que tenemos a continuación, tiene miles de registros y que queremos encontrar el autor del libro "Android in 3 days". Podemos crear un índice con la columna "title". Este índice será como este;
Descripción: http://www.edu4java.com/_img/sql/sql_index/index.jpg

Index

Title
Puntero
Android in 3 days
puntero
Game development
puntero
Java for beginners
puntero
Spring
puntero
Sql in 15 minutes
puntero
Spring
puntero



Uno de los valores del índice para un "title" podría ser algo como (“Android in 3 days”, 0×82829), donde 0×82829 es la dirección en el disco (puntero), donde esta la fila con los datos para “Android in 3 days”. Si no se tiene el puntero se tendría un único valor, lo que no tendría valor ya que no se podría encontrar el resto de los valores para ese registro- como el "autor" del libro.

SINTAXIS DE LA SENTENCIA SQL CREATE INDEX

La creación de un índice se hace a través de una sentencia CREATE INDEX, que te permite nombrar al índice, especificar la tabla y la columnas o columnas para indexar e indicar si queremos que el indice esté ordenado ascendentemente (ASC) o descendentemente (DESC).
Esto varía según la base de datos, en MySQL 5.0 estas palabras se permiten para extensiones futuras para especificar almacenamiento de índice ascendente o descendente. Actualmente se parsean pero se ignoran; los valores de índice siempre se almacenan en orden ascendente.
Si una columna se pide en orden descendente en una sentencia SELECT, el proceso será más rápido si esa columna tiene un índice creado, ordenado descendentemente.
El formato básico de la sentencia es la siguiente;
      CREATE INDEX <index_name>

  ON <table_name> (<column_names>)

SQL CREATE UNIQUE INDEX

Los índices también pueden ser "únicos". Este tipo de índices previene de la entrada de valores duplicados en la columna o combinación de columnas en donde existe índice.

SINTAXIS DE LA SENTENCIA SQL CREATE UNIQUE INDEX

CREATE UNIQUE INDEX index_name
     ON table_name (column_name)
Se pueden crear índices en cualquier momento; no hay que hacerlo justo después de ejecutar la sentencia CREATE TABLE. También se puede crear índices en las tablas que ya tienen datos. Lo que no se puede hacer, es crear un índice único en una tabla que ya contiene valores duplicados. MySQL lo identifica y no crea el índice. El usuario tiene que eliminar primero los valores duplicados antes de crearlo.
La utilización de los índices tiene un coste asociado. Los índices utilizan un espacio en el disco y harán que las operaciones INSERT, UPDATE, y DELETE vayan más lentas, ya que cada vez que una de estas operaciones se lleva a cabo, se actualizan los índices así como la base de datos.
Nota: La sintaxis de la creación de los índices puede ser diferente según la base de datos. Por lo tanto hay que verificar la sintaxis según la que se esté usando.

ELIMINAR INDICES

La sentencia DROP INDEX se utiliza para eliminar los índices.
 DROP INDEX <index_name> ON <table_name>




No hay comentarios:

Publicar un comentario