20
Jun 13

Pildoritas de Bases de Datos: SQL. Predicados

pildoras bbdd
¡Hola corazones! Una vez más vuelvo con una pildorita de Bases de Datos y de nuevo es otra pildorita de SQL, pero tengo una buena noticia, es la última 😀

Como os comenté en el anterior artículo el tema de hoy serán los predicados y va a ser muy cortito.

Predicados

Los predicados son palabras reservadas que se indican entre SELECT y el nombre de la primera columna, y que indican ciertas características sobre los conjuntos recogidos en la consulta.

Los predicados principales son los siguientes:

Predicado Descripción
ALL Devuelve todos los registros de la consulta. Equivale a no indicar nada entre los campos y el SELECT.
DISTINCT Omite del resultado los registros que tienen los mismos datos en los campos seleccionados.
DISTINCTROW Omite del resultado los registros repetidos (en su totalidad, no sólo en los campos seleccionados)
TOP/LIMIT /ROWNUM Devuelve sólo los registros que se indiquen después de la palabra reservada.

 

Como veis este tema tampoco es que tenga mucha chicha, pero viene bien conocer los predicados porque se utilizan mucho en el día a día. Pondré varios ejemplos para que veáis su potencial.

Vamos a usar de nuevo nuestra amada tabla empleados del anterior post:

empleado

Imaginad que obtenemos los Apellidos de los empleados.

SELECT APELLIDOS FROM EMPLEADO

Puede ocurrir el caso de que existan en nuestra tabla dos personas con los mismos apellidos. En ese caso, obtendríamos dos registros, uno por cada empleado. Si queremos que no haya repeticiones, utilizaríamos el predicado DISTINCT.

SELECT DISTINCT APELLIDOS FROM EMPLEADO

Por otra parte, imaginaos que queremos saber quiénes son las 20 personas de la empresa que cobran más. Para eso utilizaríamos el predicado TOP, junto a la clausula ORDER BY.
Este comando es de los que he visto variar más entre los diferentes motores de búsqueda. Por tanto, indicaré la query para cada motor:

SQLServer

SELECT TOP 20 * EMPLEADOS ORDER BY SALARIO DESC

MySQL

SELECT * EMPLEADOS ORDER BY SALARIO DESC LIMIT 20

Oracle

SELECT * EMPLEADOS WHERE ROWNUM >= 20 ORDER BY SALARIO DESC

Como veis en MySQL y Oracle estas funcionalidades no son predicados como tal, sino clausulas - en el caso de MySQL - o incluso operadores dentro del WHERE (Oracle). No obstante, aunque no se coloquen después de la palabra SELECT su función es exactamente la misma.

DISTINCTROW os puede parecer igual a DISTINCT, pero tiene una diferencia notable: No afecta a los campos de la query repetidos, sino al registro completo.

Por ejemplo, imaginemos que un empleado de nuestro modelo ha estado en dos proyectos. Primero trabajo con una compañía y un tiempo más tarde entra al mismo proyecto pero siendo trabajador de otra cárnica. Si queremos saber simplemente en que proyectos ha trabajado deberíamos utilizar DISTINCTROW, ya que de otra forma tendríamos resultados repetidos.

ejemplo distinctrow

SELECT DISTINCTROW 
PROYECTO.NOMBRE 
FROM 
EMPLEADO, PROYECTO, PROYECTO_HAS_EMPLEADO 
WHERE 
PROYECTO.ID_PROYECTO = PROYECTO_HAS_EMPLEADO.ID_PROYECTO 
AND EMPLEADO.ID_EMPLEADO = PROYECTO_HAS_EMPLEADO.ID_EMPLEADO 
AND ID_EMPLEADO = 3

Bueno, con esto doy por finalizada la parte de SQL de las Pildoritas de Bases de Datos, aunque he sido un poco malvada, porque realmente no hemos terminado con SQL, ya que lo seguiremos usando en lo que queda culturitas. Dejemoslo en que hemos dejado atrás la parte coñazo de aprendizaje del lenguaje en sí. En siguientes pildoritas empezaremos con optimización de SQL.

Índice de Pildoritas

Share
19
Jun 13

La informática es el demonio. Sobre el fail de la AEAT con los datos de la Infanta

Estos días el tema estrella en prensa es el supuesto EPIC FAIL de la Hacienda Tributaria al enviar al Juez Ruz la declaración de la Infanta Cristina, la cual incluía "por error" 13 ventas de propiedades a su nombre no declaradas y que días después la Agencia Tributaria ha reconocido como errores propios.

La primera excusa que dieron desde la Hacienda Tributaria fue que se confundieron con alguien que tenía el mismo DNI. La mentira era bastante evidente, ya que la familia real, igual que la familia de Franco, tienen reservados los números del 0 al 99. En este caso, el DNI de la Infanta Cristina es el 00000014Z. Nadie más tiene este DNI, así que primera mentira tirada en horas.

Luego hablaron de un posible error en los datos que recibió la AEAT, pero el registro de la propiedad y los notarios han negado por su parte que tengan ninguna escritura de la infanta que contemple estas ventas. Esto aparte de ser el mayor caso de FAILs seguidos por parte de una administración pública, empieza a ser un misterio digno de una novela de Agatha Christie.

Y claro, la pregunta que nos viene a todos a la cabeza es , ¿de dónde salen pues estos datos?

Las últimas excusas que he podido oír sobre este tema tuvieron lugar en Telemadrid. En KM0 entró el Presidente de la Organización de Inspectores de Hacienda, Ramsés Pérez Boga, para explicar un poco por que ha ocurrido este error. Las razones expuestas por este señor, y más tarde defendidas y exageradas por los contertulios, consiguieron que ayer me fuera a la cama de muy mala ostia.

Según este hombre se debía, como no, a un error informático. Por norma general para estos señores, analfabetos digitales, un error informático es el recurso más rápido para tapar marrones y limpiarse las manos, pero cualquiera que sepa cómo funciona una aplicación por dentro sabe si de verdad ese es el caso o si por el contrario le están tomando el pelo.

Pues bien, la primera opción según este señor era que seguramente un operario al codificar los datos - entiendo que con esto quería decir que fueron introducidos manualmente - escribió los dos primeros dígitos de un DNI de Bizkaia - empiezan por 14 - y luego le daría al Intro y claro, relacionaría esas ventas a la infanta. ¡Si es que el Intro lo carga el diablo, maldita sea!

180613-logo-haciendaJ.R.Mora

 

Empecemos por lo obvio. ¿Este señor me está diciendo que no se aplica el algoritmo de cifrado afín que valida la letra de verificación del NIF? Es decir, si por error pones 14 y das intro debería mostrarte un hermoso mensajito diciendo que te falta la letra, la cual se obtiene por medio de una fórmula matemática sobre los dígitos del mismo. Dudo mucho que la Agencia Tributaria sea la única administración pública que no compruebe la letra del DNI.

La otra opción es aún más graciosa. Según este Señor un Perroflauta Ninja entró en los sistemas de la Agencia Tributaria y metió, de forma maliciosa, estos datos incorrectos intencionalmente. Obviamente no podemos negar esta hipótesis, igual que no podemos negar la existencia de Dios o de cerdos voladores en otros planetas, pero vamos, suena cuanto menos rocambolesca.

También se barajaba la opción de que alguien suplantara a la infanta para blanquear dinero, ya que un DNI de la realeza no sufriría los controles típicos de cualquier ciudadano. Esto...¿me están diciendo que a la realeza no se les cruzan sus declaraciones con los datos de la agencia tributaria? Es decir, entiendo que el cruce de información - a diferencia de lo que parecía creían algunos contertulios del programa - lo hace un sistema informático y por lo que me están dando a entender, ya no sólo con eso, sino con el resto de FAILS que seguiré comentando después, es que este desarrollo tiene una excepción, un IF como una catedral de grande, que dice IF DNI DE LA REALEZA THEN MIRAME Y NO ME TOQUES. Para la Agencia Tributaria según parece los españoles NO somos iguales y me resulta tan gracioso...porque yo sí tengo memoria a diferencia de muchos españoles y recuerdo a los lameculos reales diciendo eso de "nuestro rey paga impuestos como cualquier ciudadano de a pie, no como la reina de Inglaterra"...jeh ¬¬

Y sigamos con el cruzado de datos. No sé cómo tirará la aplicación de la AEAT, pero intuyo que el cruzado de datos no lo hacen un par de chinos atados a su sitio mientras se dedican a mirar, factura por factura, si las cifras cuadran con la declaración. Imagino que un sistema cortejará los datos, y en caso de resultar incongruentes, saltará un aviso. Luego un operador tendrá que mirar esta declaración y ser él quien valide si esto es correcto o no, y si toca hacer una paralela, etc.

Y lo mejor viene también por parte de la Infanta. La deficiente mental de Cristina - la llamo de tal forma porque es lo que nos hacen entender desde todas las instituciones, que es tontita - ¿no reclamó su declaración al ver que ésta tenía 13 errores por importe de más de un millón de euros?

Lo mejor ya fueron luego los tertulianos, sobre todo los del programa de después, Diario de la Noche, donde uno de los invitados, Antonio Pau - ex-registrador y notario -, que debe ser de los que aún lleva una agenda telefónica de papel en el bolsillo, poco más decía que el cruzamiento automático de datos era el culpable de todo - incluso de la muerte de Lady Di - y que los datos saltan de un campo a otro, que se obtienen resultados incorrectos, etc. Algunas de sus afirmaciones son absurdas, como el tema de los campos saltarines que van de un campo a otro de la BBDD, pero bueno, no seré demasiado dura y vamos a confiar en que, como es de esperar, todos los sistemas son susceptibles de fallos, aunque sean sistemas fiables y sólidos como los de la Agencia Tributaria. ¿El sistema de la Agencia tributaria está tan mal hecho como para cometer 13 errores sobre la misma persona? Joder, en España hacemos software al peso, pero aun así... Lo siento, pero no me lo creo.

Para empezar, como ya he dicho, estos errores son bastante inverosímiles y si encima vemos el número de ellos, 13, pues más razón para no creerlo. Tampoco se sabe de dónde salen esos datos - ninguna administración envió esos datos a la AEAT - y como han llegado a las Bases de Datos de Hacienda es todo un misterio. Para colmo, desde 2005 no saltó esa incongruencia en sus sistemas y la infanta tampoco reclamó que le cobraban más de un millón de euros por la patilla.

Además, me llama soberanamente la atención un dato que parece pasar más desapercibido que los mencionados hasta ahora, y es que parece que nadie revisó los datos que se enviaron al juzgado. ¿De verdad alguien se cree con la trascendencia que tiene el juicio sobre el caso Noos que nadie revisara los datos que enviaron al juzgado? ¿A nadie le llamó la atención aquellas 13 propiedades surgidas de nadie sabe dónde y les dio por cortejarlas?

Han pasado 4 días hasta que la AEAT ha dado explicaciones, y esas explicaciones encima son poco creíbles. Si hay un error de esas características en menos de un día lo identificas y lo subsanas, no me creo que se tardaran 4 días en averiguar las causas.

Más bien lo que yo creo es que alguien envió los datos de la infanta y cuando se descubrió el pastel, papá cogió el teléfono y ordenó que desaparecieran los documentos de los registradores y notarios y cargara con el mochuelo la agencia tributaria. El rey ya demostró que poder para hacer desaparecer papeles tiene, si no que le pregunten por los registros de sus cuadros del museo del prado al Duque de Hernani, y sinceramente de los registradores de la propiedad y notarios no me fio una mierda, viendo lo bien que controlaron los abusos de los bancos durante la burbuja inmobiliaria.

Y bueno, echarle la culpa a la informática como comodín tampoco me sorprende, y más cuando ya he visto más de un comportamiento en los aplicativos de la AEAT "sospechoso". Sin ir más lejos, el otro día hice mi declaración de la renta vía web y en la parte de la devolución estaba marcada la casilla de "Dar a Fondos del Tesoro" como predefinida. Me hizo gracia que ya de primeras intentaran colartela en el borrador, pero mi sorpresa fue mayúscula cuando, una vez metí los datos de devolución en la modificación y fui a confirmarla, mágicamente se había vuelto a marcar la opción de "Fondos del Tesoro". Me pregunto cuántos incautos bien pensados estarán aún esperando que le devuelva hacienda y resulta que su devolución ha sido invertida en el tesoro del país.

Para alguien que no sabe del tema podrá decir "Eso es un error informático", pero los que desarrollamos sabemos perfectamente que eso es algo hecho a propósito, algo intencional, igual que sabemos que las razones dadas por la agencia tributaria son una broma de muy mal gusto.

Share
18
Jun 13

¿Cómo salimos de ésta? Despertando

Cada día que pasa los españoles somos mas conscientes del problema que tenemos. Eso sí, nos ha costado bastante, y todavía nos queda bastante por asimilar. El español de normal procesa las cosas con calma.

Sabemos que la burbuja inmobiliaria y la corrupción – la política nada más por ahora, ya que pocos se paran a pensar en las empresas corruptoras – han sido las causantes de nuestras miserias actuales. La gente, sea de izquierdas o de derechas, coincide en que el rescate a los bancos ha sido una equivocación y que el PP y el PSOE trabajan para las élites financieras.

Todos los recortes los ha sufrido el trabajador y mientras los de arriba siguen con las mismas condiciones, incluso mejores, que antes del comienzo de la crisis. Eso si, muchos miran hacia arriba y sólo ven a los políticos y banqueros, aunque otros muchos ya también meten en ese saco a las grandes empresas del país.

El problema es que todavía la mayoría no ha pensado en como solucionarlo, y no porque no tengamos capacidad, sino porque nunca nos ha gustado – salvo honrosas excepciones – preocuparnos de la política y de las cosas de estado. Estamos acostumbrados a que todo lo hagan los poderosos y nosotros ser ajenos a estos temas: desde tiempos de la edad media, los de arriba nos mandan y nosotros obedecemos.

vivan las cadenas¡Vivan las cadenas!

Todos tenemos claro que los de arriba no nos van a solucionar la papeleta. Ahora nos toca decidir a nosotros si vamos a resignarnos como siempre hemos hecho, o si por el contrario vamos a coger de verdad las riendas de nuestro destino.

Si queremos ser una ciudadanía de verdad, de pleno derecho, tenemos que empezar a ser nosotros los que buscquemos soluciones para salir de este pozo, cosa que por otra parte, sucederá a muy largo plazo, pero que será mejor que ofrecer un futuro a nuestros nietos del siglo XVIII.

¿Por donde empezamos? Pues por el trabajo, que es la forma por la cual subsistimos.

Como contaba en el artículo del Keynesianismo, una de las medidas que tomó Roosevelt fue bajar las jornadas laborales y subir los salarios.

Es obvio hasta para un analfabeto económico (como es mi caso) que el problema de nuestra crisis es que no hay consumo. La gente consume poco porque no tiene dinero y los pequeños empresarios echan gente o bajan sueldos porque si no tienen que cerrar - las grandes empresas lo hacen para que sus accionistas sigan manteniendo sus yates, deportivos y mansiones - las cuales crean el 89% de los trabajos en España.

Y claro, vosotros me diréis, ¿Cómo van a subir los sueldos los pequeños empresarios si como dices arriba tienen que cerrar si no?

Pues fácil. De ese rescate tan bonito de 100.000 millones inyectamos una buena parte a las pequeñas empresas que puedan generar puestos en sectores económicos fiables y solventes, que generen economía de verdad, y no la especulativa formada con burbujas del ladrillo. Esas empresas tendrán buena liquidez para pagar mejores salarios y mayor número de empleados.

¿En que sector invertimos? Pues en los sectores pilar de una economía solvente (esto se explica en primaria, pero os dejo la wiki): En el sector primario y secundario, sobre todo en este último.

Tenemos que apostar por industria y energía, y no la energía montada por el oligopolio energético, sino fomentar energías renovables y así poder ser independientes energéticamente. Paso previo para generar verdadera riqueza a través de la industria.

Dentro de las industrias, la apuesta que más beneficios aporta a las grandes potencias es la I+D, es decir, la ciencia.

Tenemos exceso de gente formada que se está teniendo que ir fuera debido a los fuertes recortes que está sufriendo la ciencia en este país. En España invertimos ahora mismo el 0,5% del PIB, cuando Europa recomienda un 2% como mínimo.

Tampoco nos debemos olvidar de la mayoría de trabajadores dedicados a la construcción y la hostelería que han quedado apeados del progreso. Otra parte de ese rescate yo lo invertiría en planes de formación para la gente desempleada.

En nuestra historia no tuvimos una Revolución Industrial que nos hiciera comprender lo importante que resulta la industria y manufactura. Hasta hace bien poco eramos un país donde la mayoría trabajaba en puestos de baja cualificación, dejando los pocos que requerían algo de formación a los hijos de los ricos.

No nos valoramos y pensamos que somos un pueblo de cazurros porque así ha sido toda nuestra historia. La realidad es que hemos sido cazurros obligados por los caciques inmutables y eternos que dirigían los designios de nuestras vidas.

El sistema interpuesto por los caciques siempre fue un sistema de la edad media, con matices y refinamientos, pero que poco ha cambiado hasta nuestros días. Nada de industria, aquí nos dedicábamos al campo y en los últimos años al sector servicios (salvo honrosas excepciones en País Vasco, Barcelona y poco más tarde en Madrid). Sectores poco cualificados y peor pagados.

españolito que vienes al mundo

Los españoles somos igual de listos y capaces que los alemanes, los suecos o los yankis. Es más, diría que somos todavía más grandes, porque sin tener cultura industrial contamos con muy buenos científicos que son partícipes de avances importantísimos. Sin ir más lejos en el último mes hemos visto claros ejemplos como el de Nuria Martí Gutierrez, participante en la obtención de células madre a partir de un embrión clonado, la cual os recuerdo que despidieron del Centro de Investigación Príncipe Felipe de Valencia, o al mejor físico joven de Europa, Diego Martínez Santos, al cual le han denegado una beca Ramón y Cajal para volver a España.

Me siento muy orgullosa de mi pasado humilde. Mis antepasados eran trabajadores del campo, que vivían en la más absoluta pobreza. Ellos lucharon porque sus hijos prosperaban y vivieran mejor. Aquello dio a lugar a mis padres, dos trabajadores de la hostelería, que pudieron vivir de una burbuja inmobiliaria y turística gestada en el Franquismo y aumentada por los gobiernos de nuestra pseudo-democracia. Gracias a la educación pública, mis padres, con mucho esfuerzo y sacrificio, consiguieron que su hija pudiera ir a la universidad y convertirse en una ingeniera.

Nuestros antepasados querían que progresáramos, y para alcanzar el progreso la población debe tener una masa importante de personas cualificadas dedicadas a la industria, y concretamente, a la ciencia. Seguiremos construyendo casas y dando sol y playa a extranjeros, pero necesitamos un sector industrial fuerte y sólido que pueda mantener al resto de sectores en los malos momentos.

En resumen, mi solución, y creo que la de la gran mayoría de los españoles, es invertir a largo plazo en un tejido laboral de calidad y bien pagado, con el cual podamos costear un bienestar social elevado. Ese tejido se crea a partir de industria y energía y tenemos que hacer hincapié en mirar hacia esa dirección, y no hacia donde miran los de arriba, que es a la misma historia de siempre: Un país de gente pobre cuya única preocupación sea sobrevivir cada día.

Share
11
Jun 13

Neomachismo: Callando bocas

Este fin de semana volví a ver El Objetivo, el programa de Ana Pastor. Para el que no lo haya visto el programa consiste en coger una declaración de un político y por medio de datos desmentirla o confirmarla.

A mi es un programa que me gusta y me parecía necesario, aunque su lugar debería ser la televisión pública (ahora secuestrada por el jodecanales de Somonano) y no un canal privado, que viendo como somos los españolitos lo mismo su share es marginal y lo cancelan.

Pero bueno, a lo que iba, Ana Pastor tuvo la bondad de hacer un análisis, con relación de las declaraciones del mal actor y aun peor político Toni Canto (UPyD), sobre las cifras de denuncias por maltrato.

Una cifra que se me quedó grabada a fuego: un 0,1% de las denuncias por maltrato son falsas. Se dieron otros datos que desmintieron aún más si cabe sus declaraciones sobre el tema, pero me quedaré con ésta, que es la que me tocó la fibra.

meneame

En Menéame últimamente es raro no hacer un comentario sobre este tema de manera racional y no llevarse un saco de negativos, pero como el karma me la pela ahí sigo, dando por saco a los neomachistas que habitan el portal de noticias. Aun así una se pregunta si, viendo que mi punto de vista es tan minoritario, no estaré equivocada, pero datos como éste me despejan las dudas.

 

Han llegado a portada infinitas noticias sobre denuncias falsas (parece que todo el 0,1% de denuncias falsas llega a portada), pero las noticias contrarias a esta ola de satanización hacia las mujeres, como por ejemplo ésta, o ésta otra que envié yo, son rápidamente votadas negativo y tiradas abajo.

Es curioso que este portal, caterva de gente super liberal, culta y, en resumidas cuentas, tan awesome, tenga una mayoría con un discurso igual de rancio y trasnochado que los que justifican la violencia de género. Ellos se creen moralmente por encima de eso y se cubren de una aureola de igualitarios, pero la única diferencia entre el machista de toda la vida y ellos es que estos meneantes usan datos sesgados y manipulados (que ni se molestan en consultar) para argumentar su odio hacia la mujer. Vamos, son más refinados, pero nada más. La desgracia es que, como comento arriba, son mayoría, y sólo hay que ver el número desproporcionado de noticias sobre este 0,1% y sus correspondientes comentarios.

Se argumenta que la violencia doméstica no tiene por qué ser contra la mujer, o que muchas denuncias se retiran, así que la cifra del 0,1% no es válida.

Podemos ponernos todo lo correctos que queramos, pero la violencia, por cultura e historia, mayoritariamente la ejerce un hombre contra una mujer. ¿Puede ejercerla contra los hijos? Claro, pero de normal el que es capaz de maltratar a sus hijos ya lo hace con su mujer. ¿Puede maltratar un hombre a otro hombre? Claro, pero no es lo extendido y tampoco comparable, porque una ostia la encaja mejor (y la devuelve) un tío que una tía, y podrán ponerme verde esos correctistas, pero es la puta verdad, y cualquier tía que lea esto podrá corroborarlo. También habrá mujeres que maltraten a sus maridos, pero en términos de violencia física el número es irrisorio, y aunque está igual de mal, una tía de un golpe no puede matar a su pareja, mientras que un tío sí.

violencia-género

Las denuncias retiradas, por otra parte, dudo que sean las de esas malignas mujeres que tienen todo de cara para hundir la vida de un hombre. Si tan fácil les resulta y tan malas e hijas de putas somos las tías, ¿por qué retirarlas? ¿No será que las que retiran denuncias son precisamente aquellas que lo hacen por miedo, o porque vuelven con sus parejas maltratadoras? Pediría a todos esos meneantes que tanto saben de todo, que aplicarán en este caso el principio de la Navaja de Ockham, que a muchos se les llena la boca con ella cuando hablan de noticias de ciencia, pero ni se les pasa por la cabeza aplicarla en el resto de facetas de la vida.

Por otra parte, esta opinión que doy aquí en mi blog, y que es una opinión igual de respetable que otra, es sistemáticamente votada negativa (recordemos que en menéame el voto negativo es para comentarios que faltan al respeto, spam, etc. pero que al final todos nos pasamos por el arco del triunfo), es más, mucho poseedor de la verdad encima te acusa de feminista (como algo peyorativo), hace un alegato demagógico digno de cualquier político del PPSOE, y termina con un “ves como sois muy malas...”

Efectivamente yo soy feminista, ya que deseo la igualdad entre hombres y mujeres y lo más gracioso, estoy en contra de muchos puntos de la ley de igualdad (Feminista != Feminazi)

Para mas cojones, tengo un familiar cercano que ha sido denunciado por una “tipa” (por ser suave) falsamente por malos tratos y abusos, y gracias a los vacíos de la ley contra violencia de género, ese familiar no puede ver a su hijo y ha tenido hasta que sufrir noches de calabozo sin ton ni son. Ahora bien, considero que ha sido mala suerte encontrarme con una de ese 0,1% de hijasdeputa que hay sueltas por España. La mayoría de mujeres no tendrían estómago para utilizar recursos destinados a mujeres maltratadas con el único fin de joder a su pareja. Pensar lo contrario es simple misoginia.

Puedo estar a favor de que se modifiquen puntos en esta ley, o que se sea mucho más dura con aquellas mujeres que realizan denuncias falsas, pero de eso a pedir que se quite la ley de igualdad, la cual ha salvado muchas vidas y ha conseguido que la mujer haya mejorado sus condiciones sociales (aunque sigan siendo inferiores a las de los hombres en muchos aspectos), o realizar la aseveración de que T_D_S P_T_S, hay un trecho.

Últimamente esta ola ya llega a puntos surrealistas. Ayer mismo, en un meneo que hablaba de la multiorgasmia masculina, hice un par de comentarios sobre la multiorgasmia femenina que se llevaron negativos y sigo sin saber por qué. Es tal el odio a la mujer por gran parte de los meneantes que últimamente decir algo en plan “las mujeres X y los hombres Y” es motivo de persecución y escarnio en la red. De verdad, me dan ganas de dejar de visitar esta web, igual que ya dejé de visitar algunos foros de Mediavida por lo mismo.

Al final he llegado a la conclusión (aquí viene el comentario políticamente incorrecto), de que el problema es que “Internet is full of virgins” xD.

Es decir, hay mucho internauta que para él las tías son como el monstruo del Lago Ness: Han oído hablar de ellas, pero no han tratado con ninguna.

Amiguitos misógenos, que folléis sólo los años bisiestos y muchas tías os hayan dado calabazas no sirve como baremo para medir el hijoputismo de una tía, y menos aún para extrapolar esta actitud en temas tan serios como el maltrato de género. Ya de paso, pensad si el hecho de que no hayáis vistos un par de pechos fuera de una pantalla en años es culpa de las tías, que son muy malas, o culpa de vuestra actitud. Ya sabéis, la Navaja de Ockham 😉

Share
5
Jun 13

Pildoritas de Bases de Datos: SQL. JOIN

pildoras bbdd
En las últimas pildoritas hemos adquirido conocimientos bastante aceptables de sintáxis SQL, pero hasta este momento no hemos utilizado álgebra relacional, que es el verdadero potencial de las Bases de datos SQL. Os pido que a partir de ahora penséis en los datos de tablas o los resultados de una query como conjuntos de datos, si es que no lo hacíais ya.

En muchas ocasiones, por no decir la gran mayoría, necesitaremos datos que se encuentran repartidos en varias tablas. Para ello, nos apoyaremos en la operación por antonomasia para relacionar tablas, el JOIN.

JOIN es el operador cartesiano de Algebra relacional y combina los registros de dos tablas tal que su resultado es la combinación de todos los registros de la primera tabla, con los de la segunda.

Un JOIN, como digo, es una relación entre tablas. Por tanto, ambas tablas deben tener al menos un campo común entre ellas con el que poderlas relacionar. Dichos campos suelen ser keys de las tablas.

El JOIN más típico, es aquel que realizamos de la siguiente forma:

SELECT EMPLEADO.DNI, EMPLEADO.NOMBRE, PUESTO.NOMBRE AS PUESTO 
FROM PUESTO, EMPLEADO 
WHERE EMPLEADO.ID_PUESTO = PUESTO.ID_PUESTO

Con esta consulta obtenemos el DNI, nombre y puesto del empleado en la misma consulta, relacionando como se ve las tablas de Empleado y Puesto. Como vemos, lo único que hemos hecho es igualar la PK de Puesto (FK en Empleado) de ambas tablas.

Este JOIN realizado en el WHERE es igual al INNER JOIN, pero no nos adelantemos, poco a poco.

Existen muchas variaciones del JOIN, así que primeros vamos a ver los básicos: JOIN, LEFT JOIN, RIGHT JOIN, INNER JOIN y FULL OUTER JOIN.

Para los ejemplos de esta sección utilizaremos las tablas de Empleado y Puesto:

Joins (tablas ejemplo)

Por otra parte, los datos de las tablas serán los siguientes:

Empleado

DNI idPuesto idCompañia Nombre Apellidos Teléfono
87190290G 1 1 Pepe Padefo 666666666
28050763D 1 2 Antonia Picateclas 688888888
82500395Q 3 1 Eustaquio Traumas 699999999
01148640C 2 5 Augusto Flipao 655555555
70686067Y NULL 2 Pablo Unknow 644444444

 

Puesto

idPuesto Nombre Descripción
1 Programador Blablau!
2 Analista Blablauuuu!
3 Jefe de Proyecto RequeteBlablauuu!
4 Gerente MegaBlablauuuu!

 

INNER JOIN

Como comentaba justo arriba, el JOIN que se da al igualar la Key de dos claves es el INNER JOIN. Este sólo nos devolverá los datos que sean comunes a ambas tablas (esto tiene sentido si, por ejemplo, hay empleados sin un puesto). El JOIN simple es también un INNER JOIN.

SELECT 
EMPLEADO.DNI, 
EMPLEADO.NOMBRE,
PUESTO.ID_PUESTO,
PUESTO.NOMBRE AS PUESTO 
FROM PUESTO INNER JOIN EMPLEADO 
ON EMPLEADO.ID_PUESTO = PUESTO.ID_PUESTO

inner join

DNI NOMBRE ID_PUESTO PUESTO
87190290G Pepe 1 Programador
28050763D Antonia 1 Programador
82500395Q Eustaquio 3 Jefe Proyecto
01148640C Augusto 2 Analista

 

RIGHT JOIN

El RIGHT JOIN fuerza a que aparezcan todos los registros de la tabla de la derecha. Si no hay vinculación con uno de ellos, se colocarán los campos referenciados de la tabla de la izquierda a NULL.

SELECT EMPLEADO.DNI, 
EMPLEADO.NOMBRE, 
PUESTO.ID_PUESTO, 
PUESTO.NOMBRE AS PUESTO 
FROM PUESTO RIGHT JOIN EMPLEADO 
ON EMPLEADO.ID_PUESTO = PUESTO.ID_PUESTO

right join

DNI NOMBRE ID_PUESTO PUESTO
87190290G Pepe 1 Programador
28050763D Antonia 1 Programador
82500395Q Eustaquio 3 Jefe Proyecto
01148640C Augusto 2 Analista
NULL NULL 4 Gerente

 

LEFT JOIN

El LEFT JOIN fuerza a que aparezcan todos los registros de la tabla de la izquierda. Si no hay vinculación entre alguno de esos registros y los de la tabla de la derecha, se colocarán los campos de la tabla de la derecha a NULL.

SELECT 
EMPLEADO.DNI, 
EMPLEADO.NOMBRE, 
PUESTO.ID_PUESTO, 
PUESTO.NOMBRE AS PUESTO 
FROM PUESTO LEFT JOIN EMPLEADO 
ON EMPLEADO.ID_PUESTO = PUESTO.ID_PUESTO

left join

DNI NOMBRE ID_PUESTO PUESTO
87190290G Pepe 1 Programador
28050763D Antonia 1 Programador
82500395Q Eustaquio 3 Jefe Proyecto
01148640C Augusto 2 Analista
70686067Y Pablo NULL NULL

 

FULL OUTER JOIN

El FULL OUTER JOIN realiza un producto cartesiano entre ambas tablas y obtiene las combinaciones entre todos los registros, haya relación o no.

SELECT 
EMPLEADO.DNI, 
EMPLEADO.NOMBRE, 
PUESTO.ID_PUESTO, 
PUESTO.NOMBRE AS PUESTO 
FROM PUESTO FULL OUTER JOIN EMPLEADO 
ON EMPLEADO.ID_PUESTO = PUESTO.ID_PUESTO

full outer join

DNI NOMBRE ID_PUESTO PUESTO
87190290G Pepe 1 Programador
28050763D Antonia 1 Programador
82500395Q Eustaquio 3 Jefe Proyecto
01148640C Augusto 2 Analista
70686067Y Pablo NULL NULL
NULL NULL 4 Gerente

 

Con esto hemos acabado los JOIN, pero no con el tema, ya que ahora vamos a ver operadores que en vez de combinar tablas, combinan los resultados de varias queries.

UNION / UNION ALL

UNION es como una suma, o un OR lógico para ser más correctos. Lo que hace es unir los registros devueltos por dos consultas en un único conjunto de resultado. Para ello, es obligatorio que ambas queries tengan las mismas columnas en el SELECT.

Si se quiere que se muestren registros duplicados usaremos UNION ALL.

SELECT DNI, NOMBRE FROM EMPLEADO WHERE ID_PUESTO = 1

UNION

SELECT DNI,NOMBRE FROM EMPLEADO WHERE ID_PUESTO = 2

union

 

DNI NOMBRE
87190290G Pepe
28050763D Antonia
01148640C Augusto

 

INTERSECT

INTERSECT es parecido al operador UNION, pero en su caso aplica un AND lógico en vez de un OR.

SELECT DNI, NOMBRE FROM EMPLEADO WHERE ID_PUESTO = 1

INTERSECT

SELECT DNI, NOMBRE FROM EMPLEADO WHERE DNI =  ‘28050763D’

intersect

 

 

DNI NOMBRE
28050763D Antonia

 

MINUS

El operador MINUS lo que hace es subtraer de la primera query los datos devueltos de la segunda que se encuentren en ella.

SELECT DNI, NOMBRE FROM EMPLEADO WHERE ID_PUESTO = 1

MINUS

SELECT DNI, NOMBRE FROM EMPLEADO WHERE DNI =  ‘28050763D’

minus

 

 

DNI NOMBRE
87190290G Pepe

 

 

 

Ahora ya sí, terminamos con el tema de los JOIN. En la siguiente pildorita veremos los predicados, tema que pone fin (ya era hora) a la parte de SQL.

Índice de Pildoritas

Share
4
Jun 13

Diferencias entre turcos y españoles

tumblr_mnsd08qmlj1qb6cnho1_400Estos días podemos ver en la TV, a mitad de informativo y sin mucho despliegue, las protestas que se suceden en Turquía: imágenes de manifestantes enfrentándose a la policía mientras éstos responden con gas lacrimógeno o mangueras de agua a presión.

Esto es lo que vemos en la TV, pero si nos damos una vuelta por Internet, vemos que los medios, de forma consciente, están omitiendo mucha información.

La realidad es que ya han muerto como poco tres personas y otras tantas están heridas graves, tuertas, etc.

Los policias reprimen protestas pacíficas con brazo férrero, asaltando incluso sedes de partidos políticos, o las casas de aquellos que auxilian a los manifestantes. Por su parte, los medios nacionales sufren un apagón informativo de las protestas total.

Eso sí, ni la ONU ni la UE, ni su putísima madre, dice nada. Turquía está en la OTAN , y ya sabéis, todos nuestros aliados son democrátas de toda la vida.

Afortunadamente los propios turcos nos informan de lo que está sucediendo en su país por internet.

Podemos ver como la policía de Turquía poco tiene que envidiar a la española, haciendo un uso de la fuerza desproporcionada, torturando a sus “jefes” (los ciudadanos), gaseando, tirando pelotas de goma a quemarropa...Pero sí que se puede ver una diferencia: los ciudadanos.

Los ciudadanos turcos son gente comprometida y luchadora, con un par de huevos, a diferencia de los españoles. ¿Os imaginais en España a los antidisturbios retirandose después de que los ciudadanos sean los que carguen? A mi directamente me entra la risa.

Y no me vengáis con que son violentos: La manifestación comenzó pacíficamente y no fue hasta que la policía aplicó una violencia brutal que no se produjeron altercados. Una cosa es ser pacifico y otra gilipollas como en España, donde respondemos a las ostias con batucadas y aplausos mudos.

Los turcos saben que si quieren algo tendrán que dejarse la piel, y puede que hasta la vida, por conseguirlo. Y para ellos merece la pena porque gracias a su sacrifico toda su sociedad avanzará.

Aquí en España hemos visto la completa impunidad y violencia con la que actúa el sistema, pero seguimos abrazando el mantra de “poner la otra mejilla” como buen país rancio católico. Todo para salvar nuestro propio pellejo, no nos engañemos.

En España somos tan egoístas que no estamos dispuestos a dejarnos la cara por el conjunto. Para muchos no merece la pena salir con una brecha en la cabeza o con un par de buenos moratones por defender nuestras libertades y derechos.

Aquí hay cinco millones de parados que están en su puta casa todo el día viendo Sálvame y los trabajadores tampoco es que podamos limpiarnos la conciencia diciendo “que salgan los parados a manifestarse”, porque nosotros, que tenemos un trabajo, somos los que mejor podemos coaccionar al gobierno para que deje de robarnos y maltratarnos.

Tenemos un gobierno que no sólo nos está llevando a un modelo de esclavitud similar al de China, sino que está acabando con libertades tan básicas y aceptadas en nuestra sociedad como el aborto, la sanidad y educación pública, etc.

Mientras tanto, los españoles en casa, rascándose los cojones. El día que te vayan a desahuciar, o tengas que ir a urgencias y sufras la falta de medios, chillarás, berrearás y te indignarás muchísimo, pero sólo será eso, la pataleta de un crío consentido y maleducado.

Eso somos los españoles, personas indignas de siquiera llamarnos ciudadanos. Los españoles somos seres serviles que necesitamos siempre que nos digan que hacer y cómo actuar. Tenemos miedo a ser libres.

Esta es la diferencia entre turcos y españoles: Los primeros quieren ser dueños de su destino, y los segundos llevan en su ADN el servilismo de siglos y siglos de sometimiento consentido.

Share
1
Jun 13

Pildoritas de Bases de Datos: SQL. Clausulas II

pildoras bbdd

Un mes ha pasado ya desde la última entrada de las Pildoritas de Bases de Datos. ¡Mil disculpas por el retraso!

Por si os habéis olvidado en este tiempo de la anterior pildorita , os hago un resumen breve: En primer lugar enumeré las clausulas y las expliqué cada una por encima. Tras esto, vimos los operadores condicionales y de comparación, que se utilizan dentro de la clausula WHERE.

En este post vamos a continuar con las clausulas GROUP BY y HAVING, y sus operadores, las funciones de agregación, pero si no os importa cambiaré el orden del anterior post: Primero veremos las funciones de agregación, y luego repasaremos con este nuevo conocimiento las dos clausulas. Ya veréis por qué 😉

Funciones de agregación.

Las funciones de agregación se usan en la clausula SELECT (y en la HAVING, como veremos más tarde), y realizan operaciones que devuelven un único valor de un grupo de registros determinados.

 

Función Descripción
COUNT Devuelve el número de registros de la selección
SUM Devuelve la suma de todos los valores de un campo determinado.
AVG Obtiene la media de los valores de un campo determinado.
MIN Devuelve el valor más bajo del campo especificado.
MAX Devuelve el valor más alto del campo especificado.

 

Vamos a ver algunos ejemplos de consulta utilizando las funciones de agregación. Utilizaré para los ejemplos la tabla Empleado de nuestro eterno modelo de datos.

empleado* A lo mejor os habéis percatado de que hay un campo de más, salario. ¡No os spoileéis el post!

 

Si quisiéramos saber el número total de empleados que tenemos subcontratados por la empresa, usaríamos el operador COUNT.

SELECT COUNT(*)  FROM EMPLEADO

Si por ejemplo, necesitáramos conocer la media que pagamos a nuestros empleados, usaríamos la función AVG.

SELECT AVG(SALARIO) FROM EMPLEADO

Por último, y ya terminamos con los ejemplos en este capítulo, veamos como obtendríamos el salario del empleado que más cobra en la empresa:

SELECT MAX(SALARIO) FROM EMPLEADO

 

Pasemos ahora a las clausulas GROUP BY y HAVING, y veamos que relación tienen éstas con las funciones de agregación.

Clausulas GROUP BY y HAVING

El GROUP BY, como ya vimos, sirve para agrupar registros por los valores de una determinada columna.

Vamos a seguir con el ejemplo de los empleados, pero (ahora sí) vamos a meterle un nuevo campo, salario, para poder ver ejemplos de agrupaciones con algo de chicha.

 

Si quisiéramos saber cuanto le pagamos por los salarios de los empleados a cada compañía que tenemos contratada, agruparíamos por el campo compañía y haríamos un sumatorio del campo salarios.

SELECT SUM(SALARIO) FROM EMPLEADO GROUP BY COMPAÑIA

 

La cláusula HAVING, va en conjunción siempre con la clausula GROUP BY, y sirve para indicar condiciones de filtrado en las agrupaciones.

Es una clausula que muchas veces es prescindible, ya que podemos filtrar los resultados a través de la clausula WHERE, pero si queremos filtrar utilizando funciones de agregación, su uso será obligatorio.

HAVING suele ser lioso de entender en un principio, pero es sencillo visto de forma práctica.

 

En esta ocasión queremos saber a que compañías pagamos más de un millón de euros en el concepto de salario de empleados.

SELECT COMPAÑIA FROM EMPLEADO GROUP BY COMPAÑIA 
HAVING SUM(SALARIO) > 1.000.000

 

Y ahora, hagamos unas cuantas consideraciones con las cuales espero que consigáis afianzar toda esta parte.

 

Las funciones de agregación se utilizan siempre en la clausula SELECT y no necesitan por sí mismas la clausula GROUP BY, y por extensión, la HAVING, como ya habéis visto. Son las clausulas GROUP BY, y HAVING, las que “requieren” siempre de la existencia de una función de agregación. De hecho, en el momento que quisiéramos en una consulta mostrar otro campo a parte de la función de agregación, el motor de bases de datos con el que estuviéramos trabajando nos mostraría un error diciéndonos que este campo debe estar dentro de una clausula GROUP BY. Es decir, las columnas mostradas en el SELECT que no sean una función de agregación deben estar contenidas dentro del GROUP BY.

Lo mejor es ver estos usando un poco de Álgebra de Conjuntos.

Podemos tener el conjunto de empleados, que son todos los registros de la tabla empleado, y aplicar funciones de agregación con él. En este caso como es obvio no necesitamos especificar el comando GROUP BY.

Por otra parte, podríamos querer realizar funciones de agregación con un subconjunto del conjunto empleados. Por ejemplo, podríamos querer operar con el conjunto de empleados que tienen el puesto de 'Programador Junior', y obtener su salario medio.

 

En el primer ejemplo del apartado de la parte del GROUP BY, calculamos cuanto pagamos en concepto de sueldos de empleados a cada compañía. Imaginad que quisiéramos obtener el salario total que pagamos a cada compañía, por cada puesto.

SELECT COMPAÑIA, PUESTO, SUM(SALARIO) FROM EMPLEADO GROUP BY COMPAÑIA, PUESTO

De hecho, si quisiéramos rizar más el rizo, podríamos querer saber los salarios medios que pagamos por los puestos de “Programador Senior” y “Analista Funcional” a cada compañía (por eso de abaratar costes xD).

SELECT COMPAÑIA, PUESTO, AVG(SALARIO) FROM EMPLEADO GROUP BY COMPAÑIA, PUESTO 
HAVING PUESTO IN ('Programador Senior', 'Analista Funcional')

Y ya, por el simple hecho de utilizar clausulas como si no hubiera mañana, vamos a obtener estos registros ordenados de mayor a menor media.

SELECT COMPAÑIA, PUESTO, AVG(SALARIO) FROM EMPLEADO GROUP BY COMPAÑIA, PUESTO 
HAVING PUESTO IN ('Programador Senior', 'Analista Funcional') 
ORDER BY AVG(SALARIO)

¡¡Qué estoy mu locaaa!!

 

Espero que la pildorita de hoy no se os haya atragantado. He intentado daros un buen vaso de agua, sólo espero que este fuera de mini, y no de café xDD

En la próxima pildorita veremos los JOIN...Entonces agradeceréis que os haya introducido con mucha delicadeza el tema del álgebra de conjuntos xD

 

¿Os habéis percatado de que en el último y penúltimo ejemplo podríamos filtrar en el where en vez de en el HAVING?

SELECT COMPAÑIA, PUESTO, AVG(SALARIO) FROM EMPLEADO 
WHERE PUESTO IN ('Programador Senior', 'Analista Funcional') 
GROUP BY COMPAÑIA, PUESTO

¡Mindfuck! 😛

Índice de Pildoritas

Share