martes, 14 de enero de 2014

Tutorial SQlite3 Operadores

Como prometí en el tutorial pasado vamos a aprender como se usa SELECT y WHERE de manera mas profunda,como debe de ser,pero primero que eso debemos conocer los operadores que usa SQLite3.

SQL no es un lenguaje de programación pero tiene algunos operadores similares a los de programación,por ejemplo bool,aritméticos,relacionales.

En la programación es muy muy importante saber usar bases de datos ya que es la forma mas recomendada de almacenar datos en una aplicación,sea web de escritorio móvil así que si tienen dudas de aprender SQLite yo se los recomiendo enteramente,ya que ademas de aprender a manejar un lenguaje SQL que luego nos servirá por ejemplo con MySQL,no necesita servidor y es muy portable.

Primero que nada vamos a abrir una shell para la demostración:

En terminal:

sqlite3

Los operadores son:

suma +

resta -

multiplicacion *

division /

residuo o modulo % 

Para usar estos comandos en sqlite solo tenemos que usar el comando SELECT:


1
2
3
4
5
6
7
SELECT 2+2; -- Suma

SELECT 1*2; -- Multiplicacion

SELECT 9/2; -- Division

SELECT 9%2; -- Division

En el caso de la suma,división y multiplicación es lo mas normal,en el caso del residuo muestra el resto de la multiplicación aproximada:

Por ejemplo:

9/2 = 8 

9-8 = 1

Acompañado de estos tenemos dos operadores unarios:

Sin operación + -- no-op 

Cambio negativo positivo - 

Para que esto funcione necesita estar entre paréntesis para no confundir con los operadores aritméticos:


1
2
3
4
5
SELECT +(2+2); -- no-op,no hace nada,no operation

SELECT -(2+2); -- Invierte,seria 4 ahora es -4

SELECT -(-2+-2); -- Invierte,seria -4 ahora es 4

Los operadores aritméticos pueden ser tan grandes como quieran,por ejemplo:

SELECT 1*3/2*8-8%5*88;
También tenemos los operadores booleanos,que son un poco mas usados,los cuales son:

AND -- Y

OR -- O

NOT -- No

A simple vista parecen solo traducciones del ingles al español,pero no,si tienen conocimientos en programación no es nada del otro mundo es lo mismo,el operador evalúa la expresión y regresa true si es verdadera y false si es falsa,en realidad:

En sqlite:

true es 1

y

false es 0

Veamos un ejemplo,el mas basico y ilustrativo:

SELECT 0 OR 1;
Aquí evalúa una expresión,es como si pusiéramos true or false,al haber un true (1) devuelve true(1),si fuera así:

SELECT 11 OR 10;
También devuelve true ya que son contiene valores no 0.

Veamos un false:

SELECT 0 OR 0;
Aquí mira 0 y como es 0,ve el siguiente 0 y como también es 0,devuelve 0.

El operador AND,este operador es mas estricto ya que es un Y,a lo que quiere decir que los dos valores sean true,el ejemplo mas ilustrativo:

SELECT 0 AND 1;
Devuelve false,ya que solo uno es 1,veamos un true:

SELECT 1 AND 1;

El operador NOT,este operador es una negación lógica,sirve por ejemplo para invertir el resultado:

 SELECT NOT 0 AND 1;
Devuelve true,ya que devolvería false pero al ser false se evalúa a true.

 SELECT NOT 1 AND 1;

Devuelve false,ya que normalmente devolvería true,pero como es una negación devuelve false.

Pueden pensar que son algo inútiles esos operadores,pero estos se complementan con los operadores relacionales,los cuales son:

> Mayor que

< Menor que

== o = Igual que

<> != No igual que

<= Menor o igual que

>= Mayor o igual que

Estos operadores por si mismos devuelven un bool,pero complementados con los operadores lógicos obtenemos un resultado mas especifico,vemos primero como se usan solos:


1
2
3
4
5
6
7
8
9
SELECT 1<10; -- True

SELECT 5>10; -- False

SELECT 10==10; -- True o SELECT 10=10;

SELECT 10<>10; -- False o SELECT 10!=10;

-- True es 1 y False es 0 en SQLite

Pueden hacer sus operaciones con mayor o igual y menor o igual que.

Vamos a ver un ejemplo usando todo lo aprendido hasta ahora:

SELECT 1*2==2*1 AND 1*6==3*2;

En ese caso primero multiplica 1 por 2 que da 3,luego ve si es igual a 2 por 1,que si es,después vemos un AND que hace que verifica para mostrar true que la siguiente expresión se también verdadera,que si es así.

Veamos mas ejemplos,no los explicare:

SELECT 1+4!=5 OR 4-2==2;

SELECT NOT 11+5!=51 OR 4-2==2;

Después tenemos los operadores sueltos,los cuales son operadores usados para cadenas de texto o otros cálculos,los cuales son:

|| Concatenar

GLOB Expresion estilo Unix

LIKE Expresion

IN en

Veamos la mas sencilla,concatenar:

SELECT 'Hola ' || 'Mundo!!!';
o

SELECT 'Tiempo' ||' '|| 'de' || ' ' || 'Tux';

Glob es igual que en Unix,por ejemplo los operadores * y ?:

Primero que nada abrimos una base de datos:

sqlite3 Ejemplo.db

Y pegamos lo que hicimos en el ejemplo anterior:


1
2
3
4
5
6
7
PRAGMA foreign_keys=OFF;
BEGIN TRANSACTION;
CREATE TABLE "Users" (id INTEGER,nombre TEXT,nucleo TEXT,sistema TEXT, version TEXT);
INSERT INTO "Users" VALUES(1,'atheyus','linux','ubuntu','14.04');
INSERT INTO "Users" VALUES(3,'usuario3','linux','gentoo',NULL);
INSERT INTO "Users" VALUES(4,'usuario4','darwin','MacOSX','Lion');
COMMIT;

Bien vamos a ver como seleccionaríamos a los usuarios de núcleo linux pero sin escribir todo:

SELECT * FROM Users WHERE nucleo GLOB 'lin*';

Es igual que en Unix,veamos el otro símbolo:

SELECT * FROM Users WHERE nucleo GLOB 'lin??';

Pueden ver ejemplos en Unix en este tutorial


El uso de LIKE,es similar pero con otros símbolos,el cual es %:

SELECT * FROM Users WHERE nucleo LIKE 'lin%';

Y el símbolo ? seria _ :

SELECT * FROM Users WHERE nucleo LIKE 'lin__';

IN,con el operador IN podemos encontrar un dato en lo que seria una lista de palabras entre paréntesis,por ejemplo:

SELECT * FROM Users WHERE nucleo IN ('linux','darwin');

Por ultimo tenemos los operadores a nivel bit los cuales son:

& AND bit

| OR bit

~ NOT bit

<< Desplazamiento a la izquierda

>> Desplazamiento a la derecha

Los números binarios tampoco son nada del otro mundo,del mundo de la informática :P,los números binarios son los que se usan en la informática el lenguaje nativo con comunicación de voltaje,estos son base dos 1 y 0,1 encendido 0 apagado,es un nivel muy muy bajo en la programación y aunque no es muy usual verlo en la programación de alto nivel o incluso en las sentencias SQL,nos esta de mas aprenderlo ya que los programas mas avanzados lo usan.

No voy a enseñar aquí como funciona eso de hecho recomiendo aprenderlo junto con C o NASM,pero bueno,vamos a ver como se usan los operadores:

Primero que nada vamos a transformar los números de notación decimal base 10,vamos a usar dos numeros en decimal con el mismo numero de digitos,10 y 15:

15 en binario es 1111

Y

10 en binario es 1010

Ahora vamos a usar el AND al igual que en la lógica común se basa en elgir los resultados true,en este caso serian los bits encendidos (a 1) y deben ser ambos:

& 1111
    1010
    1010

En este caso el resultado es 10 en decimal,1010 en binario ya que partimos los bits en uno:

1 AND 0 = 0

1 AND 1 = 1

1 AND 0 = 0

1 AND 1 = 1

En SQL:

SELECT 10&15;

Igualmente OR primero vemos el numero en binario y comparamos en uno:

SELECT 10|15;

El resultado es 15,ya que:

1 OR 0 = 1

1 OR 1 = 1

1 OR 0 = 1

1 OR 1 = 1


1111 en decimal es 15,veamos un ejemplo mas practico:

SELECT 100|99;

El resultado es 103 en decimal ya que:

100  99
1   |   1 = 1 
1   |   1 = 1
0   |   0 = 0
0   |   0 = 0
1   |   0 = 1
0   |   1 = 1
0   |   1 = 1

1100111 es 103 en decimal.

La negación se usa para invertir los resultados veamos:

SELECT ~10

Es -11 esto es un poco mas avanzado ya que usa la logica binaria,asi que les recomiendo este tutorial:

Enlace

Y este:

Enlace

El ultimo operador que nos falta es  el desplazamiento,de derecha o a izquierda:

El desplazamiento se usa agregando bits apagados a la derecha o quitandolos a la izquierda, especificados,por ejemplo desplazar a la izquierda n 2:

SELECT 10<<2 b="">

Es 40 en decimal ya que:

1010 << 2 = 101000 = 40 en decimal

En cambio :

SELECT 10>>2;
Es 2 en decimal ya que:

1010 >> 2 = 10 = 2 en decimal

Eso es todo,veremos como usar lo aprendido de manera practica en el siguiente tutorial.

No hay comentarios.:

Publicar un comentario

Los comentarios serán revisados antes de ser publicados.