G

Guachaaa

Usuario (Argentina)

Primer post: 8 jun 2009Último post: 25 nov 2009
3
Posts
74
Puntos totales
13
Comentarios
Hacker vs Cracker
Hacker vs Cracker
InfoporAnónimo8/10/2009

¿Qué es un hacker? Un hacker se autodefine como una persona que sólo desea conocer el funcionamiento interno de los sistemas informáticos, ayudando a mejorarlos en el caso de que detecte fallos en su seguridad. El hacker dice actuar por el ansia de conocimiento y el reto de descifrar el funcionamiento interno de los ordenadores y servidores de Internet. Para un hacker, el objetivo es asaltar los sistemas de seguridad de los servidores de Internet para llegar hasta su interior, pero, una vez dentro, no causar ningún daño. A veces, el hacker deja una señal o “bandera” en el servidor (al estilo de “yo estuve aquí”), que sirva como prueba de que ha conseguido acceder a él. El hacker con su actividad permite que los administradores del sistema vulnerado detecten el acceso al servidor, ayudándoles así a mejorar la seguridad. Frecuentemente los “hackers”, tras acceder a un sistema, informan a sus propietarios de los agujeros de seguridad que tiene su servidor, para que nadie malintencionado (como un cracker) pueda aprovecharse a posteriori de esa vulnerabilidad. Orígenes Se dice que el término de Hacker surgió de los programadores del Massachusetts Institute of Technology (MIT), que en los 60, por usar hacks, se llamaron a sí mismos hackers, para indicar que podían hacer programas mejores y aun más eficaces, o que hacían cosas que nadie había podido hacer. Reglas del Hacker 1). Nunca destroces nada intencionalmente en la computadora que estés hackeando. 2). Para formar parte de este gremio es importante que estés permanentemente conectado a la red y en constante comunicación con los hackers, ya sea por vía e-mail o a través de las convenciones. 3). Por nada del mundo dejes tu dirección real, tu nombre o tu teléfono en ningún sistema, ya que alguien puede aprovechar esa información y hacer mal uso de ella. 4). Ten cuidado a quien le pasas información. De ser posible, mejor no lo hagas si no conoces a la persona o los fines a que tiene destinado ese archivo. 5). Un hacker debe proponer cambios tecnológicos, para que cada vez sean más los interesados en ellos, ya que su deber es ayudar a las empresas a verificar si los sistemas y las redes son efectivamente seguros. 6). Respeta y protege la privacidad. 7). Comparte los datos y el software, ya que un hacker es todo aquel que trabaja con gran pasión y entusiasmo por lo que hace. 8). Promueve el derecho a las comunicación de todas las personas y en todo el mundo y no seas egoista, comparte la informacion para asi expandir el conocimiento. 9). Pon a prueba la seguridad y la integridad de todos los sistemas informáticos a tu alcance. 10). Su misión: crea arte y belleza en una computadora. La idea es innovar nuevos programas que faciliten la vida de los usuarios Hackers famosos * Richard Stallman * Kevin Mitnick * Ken Thompson * Eric S. Raymond ¿Qué es un cracker? Al igual que el hacker, el cracker es también un apasionado del mundo informático. La principal diferencia consiste en que la finalidad del cracker es dañar sistemas y ordenadores. Tal como su propio nombre indica, el significado de cracker en inglés es “rompedor”, su objetivo es el de romper y producir el mayor daño posible. Para el hacker, el cracker no merece ningún respeto ya que no ayudan ni a mejorar programas ni contribuyen a ningún avance en ese sentido. Desde distintos ámbitos se ha confundido el término hacker con el de cracker, y los principales acusados de ataques a sistemas informáticos se han denominado hackers en lugar de crakers. El término cracker fue acuñado por primera vez hacia 1985 por hackers que se defendían de la utilización inapropiada por periodistas del término hacker. Se distinguen varios tipos de cracker: PIRATA. Su actividad consiste en la copia ilegal de programas, rompiendo sus sistemas de protección y licencias. Luego distribuye los productos por Internet, a través de CD”s, etc. LAMER. Se trata de personas con poco conocimiento de informática que consiguen e intercambian herramientas no creadas por ellos para atacar ordenadores. Ejecutan aplicaciones sin saber mucho de ellas causando grandes daños. PHREAKERS. Son los crackers de las líneas telefónicas. Se dedican a atacar y “romper” los sistemas telefónicos ya sea para dañarlos o realizar llamadas de forma gratuita. TRASHER. Su traducción al español es la de ‘basurero’. Se trata de personas que buscan en la basura y en papeleras de los cajeros automáticos para conseguir claves de tarjetas, números de cuentas bancarias o información secreta para cometer estafas y actividades fraudulentas a traves de Internet. INSIDERS. Son los crackers ‘corporativos’, empleados de las empresas que las atacan desde dentro, movidos usualmente por la venganza.

10
9
C
Como ser Un hacker? por Eric S. Raymond
InfoporAnónimo6/8/2009

Cómo convertirse en hacker: Eric Steven Raymond Que es un hacker? El Jargon File (http://www.tuxedo.org/jargon) contiene un montón de definiciones del termino "hacker", la mayoría basadas en la afición a lo técnico y en el placer de resolver problemas sobrepasando los límites. Si deseas saber cómo convertirte en un hacker, bien, solo 2 puntos son realmente relevantes. Existe una comunidad, una cultura compartida, de programadores expertos y magos de las redes, cuya historia se remonta décadas atrás a los tiempos de los primeros miniordenadores de tiempo compartido y los tempranos experimentos con ARPAnet. Los miembros de esta cultura crearon el término "hacker". Los hackers construyeron Internet. Los hackers hicieron de Unix el sistema operativo que es hoy día. Los hackers hacen andar Usenet. Los hackers hacen funcionar la WWW. Si eres parte de esta cultura, si has contribuido a ella y otras personas saben quién eres y te llaman hacker, entonces eres un hacker. Los mentalidad hacker no está confinada a esta cultura del software. Hay gente que aplica la actitud de hacker a otras cosas, como la electrónica o la música —de hecho, puedes encontrarla en los más altos niveles de cualquier ciencia o arte. Los hackers de software reconocen estos espíritus emparentados en otras partes y pueden llamarlos "hackers" también— y algunos sostienen que la naturaleza hacker es en realidad independiente del medio particular en el cual el hacker trabaja. Sin embargo, en el resto de este documento nos centraremos en las habilidades y actitudes de los hackers de software, y en las tradiciones de la cultura compartida que originó el término "hacker". Existe otro grupo de personas que se llaman a sí mismos hackers, pero que no lo son. Son personas (generalmente varones adolescentes) que se divierten irrumpiendo ilegalmente en ordenadores y haciendo "phreaking" en el sistema teléfonico. Los auténticos hackers tienen un nombre para esas personas: "crackers", y no quieren saber nada de ellos. Los auténticos hackers opinan que la mayoría de los crackers son perezosos, irresponsables y no muy brillantes, y fundamentan su crítica en que ser capaz de romper la seguridad no le hace a uno un hacker, de la misma manera que ser capaz de arrancar un coche con un puente en la llave no le convierte en ingeniero de automotores. Desafortunadamente, muchos periodistas y escritores utilizan erróneamente la palabra "hacker" para describir a los crackers; esto causa enorme irritación a los auténticos hackers. La diferencia básica es esta: los hackers construyen cosas; los crackers las destruyen. Si quieres ser un hacker, continúa leyendo. Si lo que quieres es ser un cracker, ve directo a leer el alt.2600 (servidor de noticias) y prepárate para soportar la dura realidad cuando descubras que no eres tan listo como crees. Y eso es todo lo que voy a decir de los crackers. La actitud del hacker Los hackers resuelven problemas y construyen cosas, y creen en la libertad y la ayuda voluntaria mutua. Para ser aceptado como hacker, deberás comportarte como si tuvieras esta actitud en tu interior. Y para comportarte como si tuvieras esta actitud, deberás creerte de verdad dicha actitud. Pero si piensas en cultivar las actitudes de hacker solo como una forma de ganar aceptación en esta cultura, te estás equivocando. Transformarse en la clase de persona que cree estas cosas es importante para ti —para ayudarte a aprender y mantenerte motivado. Como en todas las artes creativas, el modo más efectivo de transformarse en un maestro es imitar la mentalidad de los maestros —no sólo intelectualmente, sino también emocionalmente. O como dice el siguiente poema zen moderno: Para seguir la trayectoria: mira al maestro, sigue al maestro, camina junto con el maestro, mira a través del maestro, conviértete en el maestro. Así que, si quieres ser un hacker, repite lo que sigue hasta que te creas lo que estás diciendo: 1. El mundo está lleno de problemas fascinantes que esperan ser resueltos Es muy divertido ser un hacker, pero es la clase de diversión que requiere mucho esfuerzo. El esfuerzo requiere motivación. Los atletas triunfadores obtienen su motivación a partir de un tipo de placer físico que surge de trabajar su cuerpo, al forzarse a sí mismos más allá de sus propios límites físicos. De manera similar, para ser un hacker deberás sentir un estremecimiento de tipo primitivo cuando resuelves problemas, afinas tus habilidades y ejercitas tu inteligencia. Si no eres la clase de persona que te sientes inclinado hacia estas cosas de forma natural, necesitarás poder experimentarlas para llegar a ser un hacker. De no ser así, encontrarás que tu energía para "hackear" se verá agotada por otras distracciones como el sexo, el dinero o la aprobación social. (Además deberás desarrollar cierta clase de fe en tu propia capacidad de aprendizaje —la creencia de que, aun cuando puedes no saber todo lo que necesitas para resolver un problema, si tomas una parte de él y aprendes desde allí, aprenderás lo suficiente para resolver la siguiente parte, y así, hasta que lo tengas resuelto por completo.) 2. Ningún problema tendría que resolverse dos veces Los cerebros creativos son un recurso valioso y limitado. No deben desperdiciarse reinventando la rueda cuando hay tantos y tan fascinantes problemas nuevos esperando por allí. Para comportarte como un hacker, debes creer que el tiempo para pensar que emplean otros hackers es precioso —tanto, que es casi una obligación moral para ti el compartir la información, resolver los problemas y luego exponer la solución de manera que los otros hackers puedan resolver nuevos problemas, en lugar de enfrentarse perpetuamente con los viejos. (No tienes que pensar que estás obligado a regalar todo tu producto creativo, aunque aquellos hackers que lo hacen son los que obtienen más respeto por parte de los demás hackers. Es consistente con los valores de un hacker venderse lo suficiente para pagar la comida, el alquiler y los ordenadores. También está bien la utilización de estas habilidades de hacker para sostener a la familia, o incluso hacerse rico, siempre que no olvides la lealtad a tu arte y a tus colegas hackers mientras lo haces.) 3. El aburrimiento y el trabajo rutinario son perniciosos Los hackers (y las personas creativas en general) nunca debieran ser sometidas a trabajos estupidamente repetitivos, porque cuando esto sucede significa que no están haciendo lo único que son capaces de hacer: resolver nuevos problemas. Este desperdicio de talento daña a todo el mundo. Por ello, las tareas rutinarias, repetitivas y aburridas no sólo son desagradables, sino intrínsecamente perversas. Para comportarte como un hacker, debes creer en esto lo suficiente como para automatizar las tareas rutinarias todo lo que se pueda, no solamente por ti mismo, sino para beneficio de todos los demás (especialmente otros hackers). (Existe una aparente excepción a esta regla. Los hackers hacen cosas a veces que pueden parecer repetitivas o aburridas a un observador, pero son un ejercicio para lograr claridad mental o para adquirir cierta habilidad u obtener cierta clase de experiencia que no podría conseguirse de otro modo. Pero esto es una elección —ningún ser pensante debiera nunca ser forzado a una situación que les aburra.) 4. La libertad es buena Los hackers son antiautoritarios por naturaleza. Cualquiera que pueda darte órdenes, puede obligarte a dejar de resolver ese problema que te está fascinando —y, dada la manera como trabajan las mentes autoritarias, encontrarán alguna razón espantosamente estúpida para hacerlo. Por eso, la actitud autoritaria debe ser combatida donde sea que se la encuentre, pues si se la deja te asfixiará, tanto a ti como a otros hackers. (Esto no es lo mismo que combatir toda autoridad. Los niños necesitan guía, y los criminales, restricciones. Un hacker puede estar de acuerdo en aceptar algún tipo de autoridad para poder obtener algo que desea más que el tiempo que gasta en seguir órdenes. Pero este es un pacto limitado, consciente; la clase de sumisión que desean los autoritarios no está en oferta.) Los autoritarios prosperan en la censura y el secreto. Y desconfían de la cooperación voluntaria y del intercambio de información —sólo les agrada la cooperación que tienen bajo su control. Así que, para comportarte como un hacker, deberás desarrollar una hostilidad instintiva hacia la censura, el secreto y la utilización de la fuerza o el fraude para someter a adultos responsables. Y deberás estar preparado para actuar en consencuencia. 5. La actitud no es sustituto para la competencia Para ser un hacker, deberás desarrollar algunas de esas actitudes. Pero tener solo la actitud no te transformará en hacker, como tampoco te puede transformar en un atleta campeón o en estrella del rock. Para transformarte en hacker necesitarás inteligencia, práctica, dedicación y trabajo duro. Por lo tanto, debes aprender a desconfiar de la actitud y respetar la competencia en todas sus formas. A ningún hacker le gusta perder el tiempo con quienes adoptan la pose de hacker, sino que veneran la competencia —especialmente la competencia al hackear, pero la competencia en cualquier ámbito está bien. Especialmente buena es la competencia en habilidades exigentes que poca gente domina, y la mejor es la competencia en habilidades exigentes que requieren agudeza mental, destreza y concentración. Si respetas la competencia, disfrutarás desarrollándola en ti mismo —el trabajo duro y la dedicación se transformarán en una especie de juego intenso, y no una rutina. Esa actitud es vital para transformarse en hacker. Habilidades básicas para el hacking La actitud hacker es vital, pero más aún lo son las habilidades. La actitud no es sustituto para la competencia, y existe un cierto conjunto de herramientas básicas que debes dominar antes que cualquier hacker sueñe con llamarse así. Este conjunto de herramientas cambia lentamente a lo largo del tiempo a medida que la tecnología crea nuevas habilidades y descarta otras por obsoletas. Por ejemplo, se incluía la programación en lenguaje máquina, y no se hablaba de HTML hasta hace poco. Pero hacia finales de 1996, está claro que se debe incluir lo siguiente: 1. Aprende a programar Esta es, por supuesto, la habilidad fundamental del hacker. Si no conoces ningún lenguaje de programacion, recomiendo empezar con Python. Es limpio, bien documentado, y relativamente fácil para novatos. A pesar de ser un buen primer lenguaje, no es un juguete; es muy poderoso, flexible y se adapta bien a grandes proyectos. He escrito un detallado análisis de Python (http://noframes.linuxjournal.com/lj-issues/issue73/3882.html). Hay disponibles buenos tutoriales (http://www.python.org/doc/Intros.html) en el sitio web de Python (http://www.python.org/). Java es tambien un buen lenguaje para iniciarse en la programación. Es más difícil que Python, pero produce código más rápido que Python. Creo que es un buen segundo lenguaje para aprender. Pero no creas que podrás ser un hacker, siquiera un programador, si solo conoces un único lenguaje —debes aprender cómo pensar en los problemas de programación de una manera general, independiente de cualquier lenguaje. Para ser un hacker de verdad, precisas llegar al punto en el cual aprendas un lenguaje nuevo en días, relacionando lo que está en el manual con lo que ya sabe de antes. Esto significa que debes aprender varios lenguajes muy diferentes entre sí. Si deseas meterte seriamente en programación, tendrás que aprender C, la base de Unix. C++ es muy parecido a C; si conoces uno, aprender el otro no te resultará difícil. Sin embargo, ninguno de ellos es bueno para aprender a programar. Y hoy día, cuanto más puedas evitar programar en C, mas productivo serás. C es muy eficiente, y trabaja bien con los recursos de las maquinas. Desafortunadamente, C obtiene su eficiencia a base de mucho manejo a bajo nivel de los recursos (como la memoria) a mano. Todo esa programación a bajo nivel es muy compleja y propensa a errores, y tendrás que dedicar gran cantidad de tiempo a la depuración de los programas. Con las máquinas de hoy, tan poderosas, esto ya no es tan necesario —es más inteligente usar un lenguaje que use el tiempo de máquina menos eficientemente, pero en cambio use tu tiempo más eficientemente. O sea, Python. Otros lenguajes de particular importancia para los hackers son Perl (http://www.perl.com/) y LISP (http://www.lisp.org/). Perl vale la pena aprenderlo por razones prácticas: es amplísimamente usado por páginas web dinámicas y por sistemas de administración, así que incluso si nunca has escrito en Perl, deberías aprender a leerlo. Mucha gente usa Perl en la forma que yo sugiero usar Python, para evitar la programacion en C en trabajos que no requieran la eficiencia de C. Necesitarás ser capaz de entenderlo. Vale la pena aprender LISP por una razón diferente — La profunda e iluminadora experiencia que obtendrás cuando finalmente lo logres te hará ser mejor programador el resto de tus días, incluso si no usas LISP mucho. (Puedes obtener fácilmente algo de primera experiencia con LISP escribiendo y modificando los modos de edición del editor Emacs.) Lo mejor hoy día es aprender estos cinco (Python, Java, C/C++, Perl y LISP). Además de ser estos lenguajes los mas importantes en el hacking, representan muy diversas formas de aproximarse a la programación, y cada uno te educará de diferentes maneras. No puedo dar instrucciones completas en este documento de cómo puedes aprender a programar —es una habilidad compleja. Pero puedo adelantarte que los libros y los cursos no servirán (muchos, tal vez la mayoría de los mejores hackers, son autodidactas). Puedes aprender las características de los lenguajes —partes de conocimiento— de libros, pero el verdadero conocimiento lo adquieres en la vida real aplicando lo que ya sabes. Lo que sí servirá es a) leer código y b) escribir código. El aprendizaje de la programación es como aprender a escribir bien en lenguaje natural. La mejor manera de aprender es leer algo de las cosas escritas por los maestros del estilo, luego escribir algunas cosas tú mismo, leer mucho más, escribir un poco más... y repetir esto hasta que lo que escribes empieza a mostrar la clase de fuerza y economía que aprecias en tus modelos. Antes era difícil encontrar código de buena calidad para leer, porque había pocos programas de cierta magnitud disponibles en código fuente de tal manera que los hackers noveles pudieran meterles mano. Esta situación ha cambiado drásticamente: software de fuente abierta, herramientas de programación libres y sistemas operativos libres (todo ello hecho por hackers) están ampliamente disponibles en la actualidad. Lo que me lleva elegantemente a nuestro siguiente tema... 2. Consigue uno de los Unices libres; aprende a usarlo y a ponerlo en funcionamiento Asumo que tienes un ordenador personal o puedes acceder a uno (a estos muchachos de hoy día les resulta tan sencillo obtenerlo... ). El paso con mucho más importante que cualquier novato puede dar en el camino de adquirir las habilidades de un hacker es obtener una copia de Linux o alguno de los otros Unices tipo BSD libres, instalarlo en una máquina personal y hacerlo funcionar. Sí, es cierto que existen otros sistemas operativos en el mundo además de Unix. Pero sólo pueden encontrarse en formato binario —no puedes ni leer el código ni modificarlo—. Si intentas aprender a hackear en una máquina DOS, Windows o en un MacOS te sentirás como si tratas de aprender a bailar con el cuerpo escayolado. Bajo OS/X es posible, pero solo una parte del del sistema es código de fuente abierta —Es como si estuvieras golpeando un muro de varias capas de cemento, y aparte tienes que ser cuidadoso para no desarrollar el mal hábito de depender del código propietario de Apple. Si te concentras en Unix bajo el capó, puedes aprender cosas mas útiles. Unix es el sistema operativo de Internet. Si bien puedes aprender a usar Internet sin saber Unix, nunca podrás ser un hacker en Internet sin conocerlo. Por este motivo, la cultura hacker actual está muy centrada en Unix. (Esto no fue siempre así, e incluso la situación le desagrada a algunos de los hackers más veteranos, pero la simbiosis entre Unix e Internet es tan fuerte que hasta la energía de Microsoft parece incapaz de hacerle mella.) Así que consigue un Unix —personalmente me gusta Linux, pero hay otros (y sí, puedes hacer funcionar Linux y DOS/Windows en la misma máquina). Apréndelo. Hazlo funcionar. Métele mano, anímate. Comunícate en Internet mediante él. Lee el código. Modifícalo. En ese sistema se incluyen las mejores herramientas de programación (que incluyen C, Lisp y Perl) de lo que cualquier sistema operativo de Microsoft ni siquiera podría soñar, además te divertirás y te sumergirás en un caudal de conocimientos de tal magnitud que nunca hubieras imaginado, hasta que en cierto momento, mirando hacia atrás, te darás cuenta que ya eres un maestro hacker consumado. Si quieres saber más acerca del aprendizaje de Unix, ve a The Loginataka (http://www.tuxedo.org/~esr/faqs/loginataka.html). Si quieres meter tus manos en Linux, echa un ojo en Dónde puedo obtener Linux (http://linuxresources.com/apps/ftp.html). Puedes encontrar ayuda y recursos de BSD Unix en http://www.bsd.org/. He escrito sobre los fundamentos básicos de Unix y de Internet (http://www.linuxdoc.org/HOWTO/Unix-and-Internet-Fundamentals-HOWTO/index.html). (Nota: No recomiendo instalar ni Linux ni BSD a solas si eres novato. Para Linux, encuentra un grupo de usuarios local de Linux y pide ayuda; o contáctalo mediante Open Projects Network => http://www.linpeople.org/. LISC mantiene canales IRC - http://openprojects.nu/services/irc.html - donde puedes obtener ayuda.) 3. Aprende a usar la Web y a programar en HTML La mayoría de las cosas que ha construido la cultura hacker funcionan fuera de la vista del gran público, ayudando en el funcionamiento de fábricas, oficinas y universidades, y carecen de un impacto obvio en la vida de quienes no son hackers. La Web es la única gran excepción, y es tan enorme y brillante este juguete de hackers que incluso los políticos admiten que está cambiando el mundo. Sólo por esta razón (y hay un montón de otras igualmente buenas), debes aprender a trabajar en la Web. No me estoy refiriendo a aprender a manejar un navegador (cualquiera puede hacer eso), sino que debes aprender a escribir HTML, el lenguaje de marcas de la Web. Si aún no sabes cómo programar, el aprendizaje que implica la escritura de HTML te enseñará algunos de los hábitos mentales que te ayudarán luego con la programación. Así que hazte una página personal. Prueba con XHTML, que es más claro que el clasico HTML. (Existen buenos tutoriales para principiantes en la Web; aquí hay uno - http://www.make-a-web-site.com/ -.) Pero no vayas a creer que por tener una página personal estás más cerca de ser un hacker. La Web está llena de páginas personales. La mayoría de ellas son banales, basura sin contenido —basura muy vistosa, pero basura al fin (si deseas saber más sobre este tema, mira en The HTML Hell Page - http://www.tuxedo.org/~esr/html-hell.html -). Para que valga la pena, tu página debe tener contenido —debe ser interesante y/o útil para los otros hackers. Y esto nos lleva al próximo tema... 4. Si no tienes un inglés funcional, apréndelo Como estadounidense y hablante nativo de inglés, era reacio a sugerir esto, por si se interpretaba como una suerte de imperialismo cultural. Pero hablantes nativos de otras lenguas me han urgido a que señale que el inglés es el lenguaje con el que trabaja la cultura hacker e Internet, y necesitarás saberlo para funcionar en la comunidad hacker. Esto es muy cierto. Tiempo atrás, alrededor de 1991, aprendí que muchos hackers que tenían el inglés como segundo idioma lo usaban en discusiones técnicas, incluso cuando compartían su lengua natal; me comentaron que el inglés tiene un vocabulario técnico más rico que cualquier otra lengua y sencillamente por esto era mejor herramienta para el trabajo. Por razones similares, las traducciones de libros técnicos escritos originalmente en inglés son con frecuencia insatisfactorias (si es que se hacen). Linus Torvalds, un finlandés, comenta su codigo en inglés (al parecer nunca se le ocurrió hacerlo de otra manera). Su fluidez con el inglés ha sido un importante factor en su habilidad para reclutar una comunidad mundial de desarrolladores de Linux. Y esto nos lleva al próximo tema... Estatus en la cultura hacker De manera similar a muchas otras culturas sin economía monetaria, el hackerismo se basa en la reputación. Estás intentando resolver problemas interesantes, pero cuan interesantes y buenas son las soluciones que encuentres es algo que sólo tus iguales o superiores técnicamente hablando serán capaces de juzgar. De acuerdo a esto, cuando juegas el juego del hacker, aprendes a puntuarte principalmente en función de lo que los otros hackers piensan acerca de tus habilidades (este es el motivo por el cual no puedes ser un hacker de verdad hasta que otros hackers te denominen así de manera consistente). Este hecho está empañado por la imagen del hacking como trabajo solitario; también por un tabú cultural hacker (que ahora está decayendo, pero aún es fuerte) que impide que se admita el ego o la validación externa como elementos involucrados en la propia motivación. Específicamente, el hackerismo es lo que los antropólogos denominan una cultura del don. Adquieres estatus y reputación no mediante la dominación de las otras personas, ni por ser hermoso/a, ni por tener cosas que las otras personas desean, sino por donar cosas. Específicamente, al donar tu tiempo, tu creatividad, y el resultado de tu destreza. Existen básicamente cinco clases de cosas que puedes hacer para obtener el respeto de los hackers: 1. Escribir software de fuente abierta Lo primero (lo más central y más tradicional) es escribir programas que los otros hackers opinen que son divertidos o útiles, y donar los fuentes del programa a la cultura hacker para que sean utilizados. (Solíamos llamarlo free software pero esto confundía a demasiada gente, que no estaban seguros de qué se suponía que significaba free [en inglés, el término free es polisémico y puede significar "libre" o "gratis". En castellano no se da tal ambigüedad por lo que la expresión "software libre" resulta perfectamente adecuada — N. del T.]. La mayoría de nosotros, al menos un ratio 2:1 de acuerdo con los análisis del contenido de la web, ahora preferimos el término software "open source" - http://www.opensource.org/ - [En castellano, sin embargo, se sigue usando habitualmente "software libre", aunque en esta versión hemos respetado, como es natural, el cambio en la terminología de Eric, que ha sustituido " free software" por open source en todos sus documentos, y lo hemos traducido por "código de fuente abierta" — N. del T.]). Los más reverenciados semidioses del hackerismo son las personas que han escrito programas de gran magnitud, con grandes capacidades que satisfacen necesidades de largo alcance, y los donan, de tal manera que cualquiera pueda utilizarlos. 2. Ayudar a probar y depurar software de fuente abierta También son reconocidas aquellas personas que depuran los errores del software de fuente abierta. En este mundo imperfecto, inevitablemente pasaremos la mayoría de nuestro tiempo de desarrollo en la fase de depuración. Este es el motivo por el cual los desarrolladores de software de fuente abierta piensan que un buen "beta-tester" (probador de versiones beta, alguien que sabe cómo describir claramente los síntomas, que puede localizar correctamente los problemas, que tolera los errores en una entrega apurada, y que está dispuesto a aplicar unas cuantas rutinas sencillas de diagnóstico) vale su peso en oro. Aun contando con un solo probador de estos, puede hacerse que el proceso de depuración pase de ser una prolongada pesadilla que lo deja a uno exhausto a ser sólo una saludable molestia. Si eres novato, trata de encontrar un programa en desarrollo en el cual estés interesado, y conviértete en un buen probador beta. Hay una progresión natural desde ayudar a probar programas, luego ayudar a depurarlos y más adelante ayudar a modificarlos. Aprenderás un montón de esa manera, y la gente te ayudará en el futuro. 3. Publicar información útil Otra buena cosa que puedes hacer es recopilar y filtrar información útil e interesante y construir páginas web o documentos tipo FAQ ("Preguntas Frecuentes" , y ponerlos a disposición de los demás. La gente que mantiene las FAQ técnicas más importantes gozan de casi tanto respeto como los autores de software libre. 4. Ayudar a mantener en funcionamiento la infraestructura La cultura hacker (y el desarrollo ingenieril de Internet, para el caso) funciona gracias al trabajo voluntario. Existe una gran cantidad de trabajo necesario pero sin glamour que debe hacerse para que esto siga marchando —administrar listas de correo, moderar foros de discusión, mantener sitios donde se archivan grandes cantidades de software, desarrollar RFCs (ftp://ftp.rfc-editor.org/in-notes/rfc2555.txt) y otros estándares técnicos. La gente que desarrolla estas actividades goza de mucho respeto, porque todos saben que esos trabajos son grandes consumidores de tiempo y no tan divertidos como meterse con el código. Al hacerlos demuestran su dedicación. 5. Hacer algo por la cultura hacker en sí misma Finalmente, puedes propagar la cultura hacker en sí misma (por ejemplo, escribiendo un texto acerca de cómo transformarse en hacker ). Esto es algo que no estarás en disposición de hacer hasta que seas bien conocido en el ambiente por alguna de las cuatro cosas recién descritas. La cultura hacker no tiene líderes exactamente, pero tiene héroes culturales, ancianos de la tribu, historiadores y portavoces. Cuando hayas estado en las trincheras tiempo suficiente, podrás crecer y transformarte en uno de ellos. Pero ten cuidado: los hackers desconfían del ego ruidoso en sus jefes tribales, así que la búsqueda visible de esa clase de fama es peligrosa. En lugar de esforzarte en ello, es mejor colocarse en una posición tal que ella caiga sobre ti, y luego debes comportarte de manera modesta y con gracia con tu estatus. La conexión hacker/nerd Contrariamente al mito popular, no tienes que ser un nerd [literalmente "empollón", pero en la jerga hacker (http://www.tuxedo.org/~esr/jargon/html/entry/nerd.html) se ha asumido de forma irónica, perdiendo el matiz originalmente despectivo, y ha acabado usándose como sinónimo de alguien que se preocupa por las cosas importantes y no se entretiene en trivialidades. — N. del T.] para ser hacker. Ayuda, sin embargo, y muchos hackers son nerds. Al ser un marginado social, el nerd puede mantenerse concentrado en las cosas realmente importantes, como pensar y hackear. Por esta razón, muchos hackers han adoptado la etiqueta "nerd" e incluso utilizan el desagradable término geek (http://www.tuxedo.org/~esr/jargon/html/entry/geek.html) como insignia de orgullo —es su forma de declarar su propia independencia de las expectativas sociales normales. Si deseas ver una discusión más extensa, dirígete a The Geek Page (http://samsara.circus.com/~omni/geek.html). Si puedes concentrarte lo suficiente en el hacking para ser bueno en ello, y encima disfrutar de vida personal, está bien. Es muchísimo más fácil ahora que cuando yo era un novato en los años setenta; la cultura dominante ve con mejores ojos a los tecno-nerds en la actualidad. Hay además un número creciente de personas que se dan cuenta de que con frecuencia los hackers son un material de alta calidad para novio/novia/marido/esposa. Si te siente atraído por la actividad hacker porque no tienes vida propia, está bien también —al menos no tendrá problemas de concentración—. A lo mejor más adelante puedes conseguir una vida propia como el resto de la gente. Cuestiones de estilo De nuevo, para ser un hacker, debes desarrollar la mentalidad del hacker. Existen algunas cosas que puedes hacer cuando estás sin ordenador, que pueden ayudarte. Estas cosas no son sustituto para la actividad propia de hackear (nada lo es) pero muchos hackers las realizan, y sienten que de alguna manera primitiva se conectan con la esencia de la actividad de hackear. * Aprende a escribir correctamente en tu lengua. A pesar de que existe el estereotipo de que los programadores no son capaces de escribir, una cantidad sorprendente de hackers (incluyendo a los mejores que conozco), son escritores competentes. * Lee ciencia-ficción. Ve a las reuniones sobre ciencia-ficción (es un buen método para conocer hackers y proto-hackers). * Estudia zen, y/o practica artes marciales. (La disciplina mental se parece en ambos casos.) * Desarrolla un oído analítico para la música. Aprende a apreciar clases peculiares de música. Aprenda a tocar correctamente algún instrumento musical, o a cantar. * Desarrolla inclinación por los dobles sentidos y los juegos de palabras. Cuantas más cosas de estas hayas hecho, es más probable que poseas material natural para hacker. Por qué estas cosas en particular y no otras es algo que no está completamente claro, pero todas están conectadas con un mezcla de tu parte izquierda y derecha de las habilidades de tu cerebro, lo que parece ser una cosa importante; los hackers ser capaces tanto de razonamiento lógico como de dar pasos al margen de lógica aparente de un problema en un momento dado. Trabaja tan intensamente como juegas y juega tan intensamente como trabajas. Para los verdaderos hackers, la diferiencia entre "juego", "trabajo", "ciencia" y "arte" tienden a desaparecer, o mezclarse en un alto nivel de creatividad. Además, no te des por satisfecho con tener un estrecho rango de habilidades. Aunque la mayoría de los hackers se autodescriben como programadores, suelen ser más que competentes en actividades diversas —administración de sistemas, diseño web y arreglar problemas de hardware son algo común—. Un hacker que, por un lado, es administrador de sistemas, por el otro es también habilidoso en programación de scripts y diseño de webs. Los hackers no hacen las cosas a medias; si se meten de lleno en un tema, tienden a ser muy buenos en él. Finalmente, unas cuantas cosas que no debes hacer: * No uses un nombre de usuario tonto o grandioso. * No te metas en "flamewars" (discusiones airadas) en Usenet (ni en ningún otro lado). * No te llames a ti mismo "ciberpunk", y no pierdas tu tiempo con nadie que lo haga. * No publiques en los foros ni escribas correos con montones de errores de tecleo o construcciones gramaticales incorrectas. La única reputación que te ganarás con esas costumbres es la de tonto. Los hackers tienen una gran memoria —puede costar años hasta que te acepten de nuevo después de estas cosas. El problema con los apodos virtuales merece alguna explicación. Ocultar tu identidad detrás de un apodo es un comportamiento infantil y tonto que es característico de los crackers, warez d00dz, y otras formas inferiores de vida. Los hackers no hacen eso; ellos están orgullosos de lo que hacen y lo quieren asociado con sus nombres reales . Así que si tienes un nombre de estos, abandónalo. En la cultura hacker solo servirán para marcarte como un perdedor.

64
17
C
Consultas sql server
Apuntes Y MonografiasporAnónimo11/25/2009

[estas son las tablas que usamos] UNION UNION: (OTRO DIA M PONGO A COMPLETAR TODO) EJERCICIOS: Se quiere saber que vendedores y clientes hay en la empresa; para los casos en que su teléfono y dirección de e-mail sean conocidos. Se deberá visualizar el código, nombre y si se trata de un cliente o de un vendedor. Ordene por la tercer columna y la segunda. select cod_vend, nom_vend, 'vend' Tipo from vendedores where nro_tel is not null and [e-mail] is not null union select cod_clie, nom_clie, 'cliente' from clientes where nro_tel is not null and [e-mail] is not null order by 3,2 Se quiere saber que artículos, clientes y vendedores hay en la empresa. Determine los campos a mostrar y su ordenamiento select cod_arti 'Código', descripcion 'Nombre', 'Articulo'Tipo from articulos union select cod_clie, nom_clie, 'Cliente' from clientes union select cod_vend, nom_vend, 'Vendedor' from vendedores order by 3 Se quiere saber que artículos hay en la empresa y cuáles han sido vendidos. Determine Ud. las columnas a mostrar. select cod_arti Código, descripcion Articulo, 'En Stock' Tipo from articulos union select D.cod_arti, A.descripcion, 'Vendido' from detalle D, Articulos A where D.cod_arti = A.cod_arti order by 3 Se quiere saber las direcciones tanto de clientes como de vendedores. Para el caso de los vendedores, códigos entre 3 y 12. En ambos casos la direcciones deberán ser conocidas. Rotule como NOMBRE, DIRECCION, INTEGRANTE (en donde indicará si es cliente o vendedor). Ordenado por la primera columna y la última. select nom_clie Nombre, direccion Direccion, 'Cliente' Integrante from clientes where direccion is not null union select nom_vend, direccion, 'Vendedor' from vendedores where direccion is not null and cod_vend between 3 and 12 order by 1,3 Se quiere saber que clientes hay en la empresa y quienes han comprado entre el 11/12/2002 y el 27/02/2003. Muestre el código, sin duplicarlos. select cod_clie Codigo from clientes union select cod_clie from facturas where fecha between 2002-11-12 and 2003-27-02 Idem al ejercicio anterior, sólo que además del código, identifique de donde obtiene la información. select cod_clie Código, 'Clientes' Desde from clientes union all select cod_clie, 'Facturas' from facturas F where fecha between '2002-11-12' and '2003-27-02' Se quiere saber que clientes hay en la empresa y quiénes han comprado; para el primer caso para nombres que empiecen con letras que van de la “c” a la “l” y para el segundo para facturas que oscilen entre 10 y 23. Muestre el código (no elimine los que se repiten). select cod_clie Código, 'Pasivo' Tipo from clientes where nom_clie like '[c-l]%' union all select cod_clie, 'Activo' from facturas F where F.nro_factu between 10 and 23 ------------------------------------------------------------------------------------- INNER JOIN El INNER JOIN: Es otro tipo de composición de tablas. En lugar de hacer el producto cartesiano completo, para cada una de las tablas busca directamente en la otra tabla las filas que cumplen la condición. LEFT OUTER JOIN: Toma todos los registros de la tabla izquierda, aunque no tengan ningún registro coincidente (clave), en la tabla de la derecha. RIGHT OVER JOIN: Realiza la selección de todos los registros de la tabla de la derecha, aunque NO tenga ningún registros de la tabla de izquierda. EJERCICIOS: Liste factura, fecha, vendedor y cliente para las ventas del año 2006 y 2007. select f.nro_factu, f.fecha,v.nom_vend, c.nom_clie from facturas f inner join vendedores v on f.cod_vend=v.cod_vend inner join clientes c on f.cod_clie=c.cod_clie where year (f.fecha) in (2006, 2007) Liste código de vendedor, nombre, fecha y factura; para las ventas en lo que va del año. select v.cod_vend, v.nom_vend, f.fecha, f.nro_factu from facturas f inner join vendedores v on f.cod_vend=v.cod_vend where year(f.fecha)=2007 Liste código de vendedor, nombre, fecha y factura; para las ventas en lo que va del año. select v.nom_vend, v.cod_vend, f.fecha, f.nro_factu from facturas f right join vendedores v on f.cod_vend=v.cod_vend where year(f.fecha)=2007 or f.fecha is null or f.nro_factu is null Liste descripción, cantidad e importe; aun para aquellos artículos que no registran ventas. select a.descripcion, d.cant, d.pre_unit, d.pre_unit*d.cant as 'total' from detalle d full join articulos a on d.cod_arti=a.cod_arti full join facturas f on d.nro_factu=f.nro_factu order by a.descripcion from nombre de talba join otra table on igualamos campos para listar todas las facturas, y los clientes a los que he facturado para casos en que las facturas no tengan campo cliente, . left join es una unión a la izquierda muerto todos los campos de la izquierda y solo los coicidentes con la derecha. Con el reight Muesta todos los campos de la derecha y solo los coicidentes con la derecha Con el full join muestra todos los campos Liste factura, fecha, vendedor, cliente, articulo, cantidad e importe; para las ventas de febrero y marzo de los años 2006 y 2007 y siempre que el articulo empiece con letras que van de la “a” a la “m”. Ordene por fecha, cliente y articulo. select f.nro_factu, f.fecha, v.nom_vend, c.nom_clie, a.descripcion, d.cant, d.pre_unit, d.cant*d.pre_unit from facturas f full join vendedores v on f.cod_vend=v.cod_vend inner join detalle d on f.nro_factu=d.nro_factu inner join articulos a on a.cod_arti=d.cod_arti inner join clientes c on f.cod_clie=c.cod_clie where month(f.fecha)in (2, 3) and year(f.fecha) in (2006, 2007) Liste código de cliente,nombre, fecha y factura para las ventas del año 2007. Muestre los clientes hayan comprado o no en ese año. select c.cod_clie,c.nom_clie, f.fecha, f.nro_factu from facturas f full join clientes c on f.cod_clie=c.cod_clie where year (f.fecha)=2007 Se quiere saber los artículos que compro el cliente 7 en lo que va del año. Liste articulo, observaciones e importe. select a.descripcion, c.nom_clie from facturas f inner join clientes c on f.cod_clie=c.cod_clie inner join detalle d on f.nro_factu=f.nro_factu inner join articulos a on d.cod_arti=a.cod_arti where c.cod_clie=7 and year(f.fecha)=2007 Se quiere saber los artículos que compraron los clientes que empiezan con “p”. Liste cliente, articulo, cantidad e importe. Ordene por cliente y articulo, este en forma descendente. Rotule como CLIENTE, ARTICULO, CANTIDAD, IMPORTE. select c.nom_clie as 'cliente', a.descripcion as 'articulo' , d.cant as 'cantidad', d.pre_unit as 'precio', d.cant*d.pre_unit as 'total' from facturas f inner join detalle d on f.nro_factu=d.nro_factu inner join articulos a on d.cod_arti=a.cod_arti inner join clientes c on f.cod_clie=c.cod_clie where c.nom_clie like '%' order by c.nom_clie desc, a.descripcion desc ---------------------------------------------------------------------------- SUB-CONSULTAS Subconsultas: Es una consulta que aparece dentro de la cláusula WHERE ó HAVING de otra sentencia SQL. Subconsultas en la cláusula WHERE Test De Comparación: (= , < , > ) Compara el valor de una expresión con un único valor producido por una subconsulta Test de Pertenencia A Conjunto (IN): Compara un valor de datos con una columna de valores producida por una subconsulta. NOT IN: esta expresión significa que no está incluida en la lista de valores generada por la subconsulta. Test de Existencia (EXISTS): Comprueba si una subconsulta produce alguna fila de resultados. Este test sólo se utiliza en subconsultas. NOT EXISTS: esta expresión invierte la lógica. Test de Cuantificados: ANY y ALL: Ambos tests comparan un valor de datos con la columna de valores producidos por una subconsulta. EJERCICIOS: Se quiere saber que artículos no fueron vendidos el año pasado y que el precio unitario del artículo oscile entre 2 y 6. Muestre el nombre del artículo, observaciones y precio unitario. select cod_arti, descripcion, observaciones, pre_unit from articulos where pre_unit between 2 and 6 and cod_arti not in (select distinct cod_arti from facturas f, detalle d where d.nro_factu=f.nro_factu and year(fecha)=2008) Se quiere saber que clientes vinieron más de 5 veces el año pasado. Muestre el nombre del cliente, número de factura y fecha. Rotule como CLIENTE, FACTURA, FECHA VENTA. Ordene por nombre de cliente y fecha select c.cod_clie as COD_CLIENTe, c.nom_clie as CLIENTES ,f.nro_factu as FACTURAS, f.fecha as FECHA from clientes c, facturas f where c.cod_clie=f.cod_clie and year (fecha)=2008 and 5<(select count (*) from facturas f1 where f1.cod_clie=c.cod_clie and year (fecha)=2008 ) order by c.nom_clie, f.fecha asc Se quiere saber que clientes vinieron entre el 12/12/2004 y el 13/7/2007. Muestre el nombre del cliente y su dirección de mail. Ordene por nombre de cliente. select c.cod_clie, c.nom_clie, [e-mail] from clientes c where cod_clie in (select cod_clie from facturas where fecha between '12/12/2004' and '13/7/2007') Liste número de factura, fecha y cliente para los casos en que todas las veces que vino a comprar haya sido en el mes de febrero. Ordene por cliente y fecha. select distinct c.cod_clie, c.nom_clie, [e-mail] from clientes c, facturas f where c.cod_clie=f.cod_clie and fecha between '12/12/2004' and '13/7/2007' Muestre el número de factura y la fecha de venta para los casos en que por año se hayan hecho menos de 9 ventas. Rotule como FACTURA, FECHA VENTA. select f.nro_factu as FACTURA , f.fecha as FECHA_VENTA from facturas f where 9 > ( select count(*) from facturas f1 where year (f.fecha) = year (f1.fecha) ) Muestre el número de factura, la fecha de venta, el artículo y el importe para los casos en que para esa factura su importe total sea superior o igual a 150. select f.nro_factu , f.fecha , a.descripcion , d.pre_unit*d.cant from facturas f , articulos a , detalle d where a.cod_arti = d.cod_arti and f.nro_factu = d.nro_factu and 150 < = ( select sum (d1.pre_unit*d1.cant) from detalle d1 where d1.nro_factu = d.nro_factu) Se quiere saber que vendedores nunca atendieron a estos clientes:6, 1. Muestre solamente el nombre del vendedor. Rotule como VENDEDOR. select * from vendedores v where v.cod_vend not in ( select f.cod_vend from facturas f where cod_clie in (1,6) ) Se quiere saber de que artículos superó el promedio de ventas de 80. Muestre el nombre del artículo y sus observaciones. Rotule como ARTICULO, OBSERVACIONES. select descripcion as ARTICULOS , observaciones as OBSERVACIONES from articulos a where 80 < ( select avg (pre_unit*cant) from detalle d where a.cod_arti = d.cod_arti) Que artículos nunca se vendieron?. Tenga además en cuenta que su nombre comience con letras que van de la “d” a la “p”. Muestre solamente la descripción de artículo. select descripcion from articulos a where cod_arti not in ( select distinct d.cod_arti from detalle d) and a.descripcion like '[d-p]%' order by descripcion´ ------------------------------------------------- SUB-CONSULTAS CON HAVING EJERCICIOS: Se quiere saber la fecha de la primer venta y el importe de ventas por vendedor, para los casos en que su promedio de ventas sea superior al importe promedio global. Rotule como VENDEDOR, TOTAL VENTAS. select nom_vend, min(fecha), sum(pre_unit*cant), avg(pre_unit*cant) from facturas f, detalle d, vendedores v where f.nro_factu=d.nro_factu and v.cod_vend=f.cod_vend group by nom_vend having avg(pre_unit*cant) > (select avg(pre_unit*cant) from detalle) Se quiere saber el importe promedio y el importe de ventas por fecha y cliente, para los casos en que los números de factura que oscilen entre 20 y 35 y que ese importe de ventas sea superior o igual al promedio global. Rotule como FECHA VENTA, CLIENTE, IMPORTE, PROMEDIO. SELECT fecha, nom_clie, sum(pre_unit*cant), avg(pre_unit*cant) from facturas f, clientes c, detalle d where f.nro_factu= d.nro_factu and c.cod_clie = f.cod_clie and f.nro_factu between 20 and 35 group by fecha, nom_clie, d.cod_arti having sum(pre_unit*cant) > (select avg(pre_unit*cant) from detalle ) Se quiere saber el importe vendido, la cantidad vendida por artículo, para los casos en que los números de factura no sean uno de los siguientes:2, 10, 7, 13, 22 y que ese importe promedio sea inferior al importe promedio de ese artículo. SELECT descripcion, sum(d.pre_unit*cant), avg(d.pre_unit*cant) from articulos a, detalle d where a.cod_arti = d.cod_arti and nro_factu not in (10,2,7,13,22) group by descripcion, d.cod_arti having avg(d.pre_unit*cant) < (select avg(d1.pre_unit*cant) from detalle d1 where d1.cod_arti= d.cod_arti) Se quiere saber la cantidad vendida, el importe vendido y el promedio vendido por fecha, siempre que esa cantidad vendida sea superior al promedio de la cantidad global. Rotule como FECHA VENTA, CANTIDAD, IMPORTE, PROMEDIO. Ordene por fecha en forma descendente. select fecha, sum(cant), sum(pre_unit*cant), avg(pre_unit*cant) from facturas f, detalle d where f.nro_factu =d.nro_factu group by fecha having sum(cant) > (select avg(cant) from detalle) Se quiere saber el promedio vendido por fecha y artículo para los casos en que las cantidades vendidas oscilen entre 5 y 20 y que ese importe sea superior al importe promedio de ese artículo. Rotule como FECHA VENTA, ARTICULO, FEC PRIMER VENTA, PROMEDIO. select fecha, descripcion, avg(d.pre_unit*cant) from facturas f, articulos a, detalle d where f.nro_factu = d.nro_factu and a.cod_arti = d.cod_arti and cant between 5 and 20 group by fecha, descripcion, d.cod_arti having sum(d.pre_unit*cant) > (select avg(d1.pre_unit*cant) from detalle d1 where d1.cod_arti =d.cod_arti) Se quiere saber el importe vendido por fecha para los casos en que ese promedio vendido sea inferior al importe promedio global. Rotule como FECHA, IMPORTE. SELECT fecha, sum(pre_unit*cant) from detalle d,facturas f where f.nro_factu = d.nro_factu group by fecha having avg(pre_unit*cant) < (select avg(pre_unit*cant) from detalle) ------------------------------------------------------------- SUMARIAS EJERCICIOS: Se quiere saber la cantidad de clientes que hay en la empresa. select count (cod_clie) as cantidad From dbo.clientes Se quiere saber la cantidad de artículos que hay en la empresa. select count (cod_arti) as cantidad from dbo.articulos Se quiere saber que cantidad de vendedores hay en la empresa. select count (cod_vend) as cantidad from dbo.vendedores Se quiere saber la cantidad de ventas que hizo el vendedor de código 3. select count (nro_factu) as cantidad from dbo.facturas where cod_vend = 3 Se quiere saber la cantidad vendida, la cantidad de ventas y el importe para la factura 10. select sum(cant) as 'Cantidad vendida',count (nro_factu) as 'Cantidad de ventas',sum(pre_unit*cant) as Importe from dbo.detalle where nro_factu=10 Se quiere saber cual fue la fecha de la primera y última venta. Rotule como PRIMERVENTA, ULTIMA VENTA. select max (fecha) as 'ultima venta' , min (fecha) as 'primera venta' from dbo.facturas Se quiere saber cual fue la máxima y la mínima cantidad que se vendió para el artículo 10. select max(cant) as 'Maxima venta', min (cant) as 'Minima venta' from dbo.detalle where cod_arti = 10 Se quiere saber la cantidad total vendida, el monto y el importe promedio total; para vendedores cuyo nombres comienzan con letras que van de la “d” a la “l”. select sum (d.cant) as 'Cantidad total vendida' , sum (d.pre_unit) as 'Monto', avg (d.pre_unit*d.cant) as 'Importe promedio total' from dbo.detalle d, dbo.vendedores v where v.nom_vend like '[d-l]%' Se quiere saber el promedio del importe vendido, el total del importe vendido, el promedio de la cantidad vendida y el total de la cantidad vendida. select avg(pre_unit*cant) as 'Promedio importe', sum(pre_unit*cant) as 'Importe total', avg(cant) as 'Promedio cantidad vendida', sum(cant) as 'Total cantidad vendida' from dbo.detalle Se quiere saber el total vendido, el promedio vendido y la cantidad total vendida para el cliente de código 3. select sum(d.cant) as 'Total vendido', avg(d.cant) as 'Promedio vendido' from dbo.detalle d, dbo.clientes c where c.cod_clie = 3 Se quiere saber la fecha de la primera venta, la cantidad total vendida y el monto total vendido para los artículos que empiecen con “c”. select min(f.fecha) as 'Fecha primer venta', sum(d.cant) as 'Cant total vendida', sum(d.pre_unit) as 'Monto total' from dbo.facturas f, dbo.detalle d, dbo.articulos a where a.descripcion like 'c%' Se quiere saber la cantidad total vendida y el monto total vendido para el periodo del 15/06/2005 al 15/03/2007. select sum(d.cant) as 'Cantidad total ', sum(d.pre_unit*d.cant) as 'Monto total' from dbo.detalle d, dbo.facturas f where f.fecha between '15/06/2005' and '15/03/2007' Se quiere saber la cantidad de veces y la última vez que vino el cliente de apellido Abarca. select count(f.nro_factu) as 'Cantidad de veces' , max(f.fecha) as 'Ultima visita' from dbo.facturas f , dbo.clientes c where c.nom_clie like 'Abarca%' Se quiere saber el importe total vendido y el importe promedio vendido para números de factura que no sean los siguientes: 13, 5, 17, 33, 24. select sum(d.cant*pre_unit)as 'Importe total' , avg(d.cant*d.pre_unit) 'Importe promedio' from dbo.detalle d, dbo.facturas f where d.nro_factu= f.nro_factu and f.nro_factu not in (13,5,17,33,29) ---------------------------------------------------- VISTAS EJERCICIOS: Cree las siguientes vistas: Detalle_Ventas_Vendedor: Liste la fecha, la factura, el codigo y nombre del vendedor, el articulo, la cantidad e importe, para lo que va del año. Rotule como FECHA, NRO_FACTURA, CODIGO_VENDEDOR, OMBRE_VENDEDOR, ARTICULO, CANTIDAD, IMPORTE. create view [Detalle_ventas_vendedor] as ( select f.fecha as FECHA, f.nro_factu as NRO_FACTURA, v.cod_vend as CODIGO_VENDEDOR, v.nom_vend as NOMBRE_VENDEDOR, a.descripcion as ARTICULO, d.cant as CANTIDAD, (d.pre_unit*d.cant) as IMPORTE from facturas f, vendedores v, articulos a, detalle d where year (fecha) = 2009) select * from [Detalle_ventas_vendedor] Subtotales_Ventas_Vendedor: Se quiere saber el importe vendido y la cantidad de ventas por vendedor. Rotule como VENDEDOR, IMPORTE_VENDIDO, CANTIDAD_VENDIDA. create view [subtotales_ventas_vendedor] as ( select count (v.cod_vend) as CANTIDAD_VENTAS, v.nom_vend , sum(d.pre_unit*d.cant) as IMPORTE from facturas f, detalle d, vendedores v where f.cod_vend = v.cod_vend and f.nro_factu = d.nro_factu group by v.nom_vend ) select * from [subtotales_ventas_vendedor] Modifique las vistas según el siguientes detalle: La vista creada en el punto b, agréguele la condición de que solo tome lo del año en curso y que también muestre el promedio vendido y el código del vendedor. alter view [subtotales_ventas_vendedor] as ( select count (v.cod_vend) as CANTIDAD_VENTAS, v.nom_vend , sum(d.pre_unit*d.cant) as IMPORTE, avg(d.pre_unit*d.cant) as PROMEDIO_VENDIDO, v.cod_vend from facturas f, detalle d, vendedores v where f.cod_vend = v.cod_vend and f.nro_factu = d.nro_factu and year (fecha) = 2009 group by v.nom_vend, v.cod_vend) select * from [subtotales_ventas_vendedor] Consulta las vistas según el siguiente detalle: Llame a la vista creada en el punto 1.a pero filtrando por importes inferiores a $20. select * from [Detalle_ventas_vendedor] where IMPORTE <= 20 Llame a la vista creada en el punto 1.b filtrando para el vendedor Miranda. select * from [subtotales_ventas_vendedor] where nom_vend like 'Miranda%' Llama a la vista creada en el punto 1.b filtrando para promedios superiores a 100. select * from [subtotales_ventas_vendedor] where PROMEDIO_VENDIDO > 40 Elimine las vistas creadas en el punto 1 (no se olvide de colocar el nombre como corresponde) drop view [Detalle_ventas_vendedor] drop view [subtotales_ventas_vendedor] ---------------------------------------------------- PROCEDIMIENTOS ALMACENADOS EJERCICIOS: Cree los siguientes SP: LEGAJO-Detalle_Ventas: liste la fecha, la factura, el vendedor, el cliente, el artículo, cantidad e importe. Este SP recibirá como parámetros de E un rango de fechas. create procedure detalle_venta @fecha1 as smalldatetime, @fecha2 as smalldatetime as select f.fecha, f.nro_factu, v.nom_vend, c.nom_clie, a.descripcion, d.cant, (d.cant*d.pre_unit) from clientes c, facturas f, vendedores v, articulos a, detalle d where f.nro_factu = d.nro_factu and c.cod_clie = f.cod_clie and a.cod_arti = d.cod_arti and v.cod_vend = f.cod_vend and fecha between @fecha1 and @fecha2 execute detalle_venta '20/03/2008','13/11/2009' CantidadArt_Cli : este SP me debe devolver la cantidad de artículos o clientes (según se pida) que existen en la empresa. create procedure CantidadArt_Clie @opcion1 int as begin if (@opcion1 = 1) select count (*) from Articulos as Articulos else select count (*) from Clientes as Clientes end execute CantidadArt_Clie '1' INS_Vendedor: Cree un SP que le permita insertar registros en la tabla vendedores. create procedure INS_Vendedores @cod_vend as int output, @nom_vend as nvarchar (50), @dir as nvarchar (50), @nro_tel as int, @e_mail as nvarchar (50), @fec_nac as smalldatetime as begin insert into vendedores (nom_vend, direccion, nro_tel, fec_nac) values (@nom_vend, @dir, @nro_tel, @fec_nac) set @cod_vend = @@identity end declare @a as int execute INS_Vendedores @a output, 'Pedro Perez', 'Lavalleja 250', 4205889, null, '20/03/2001' UPD_Vendedor: cree un SP que le permita modificar un vendedor cargado. create procedure UPD_Vendedor @cod_vend int, @nom_vend nvarchar (50), @dir nvarchar (50), @nro_tel int, @correo nvarchar (50), @fec_nac smalldatetime as update vendedores set nom_vend = @nom_vend, direccion = @dir, nro_tel = @nro_tel, [e-mail]= @correo, fec_nac = @fec_nac where cod_vend = @cod_vend execute UPD_Vendedor 12, 'Pedro Perez', 'Lavalleja 250', 4205889, null, '20/03/2001' DEL_Vendedor: cree un SP que le permita eliminar un vendedor ingresado. create procedure DEL_Vendedores @cod_vend as int as delete from vendedores where cod_vend = @cod_vend exec DEL_Vendedores '13'

0
0
PosteameloArchivo Histórico de Taringa! (2004-2017). Preservando la inteligencia colectiva de la internet hispanohablante.

CONTACTO

18 de Septiembre 455, Casilla 52

Chillán, Región de Ñuble, Chile

Solo correo postal

© 2026 Posteamelo.com. No afiliado con Taringa! ni sus sucesores.

Contenido preservado con fines históricos y culturales.