summaryrefslogtreecommitdiff
path: root/Docs/Tutorial-MySQL-final.txt
diff options
context:
space:
mode:
Diffstat (limited to 'Docs/Tutorial-MySQL-final.txt')
-rw-r--r--Docs/Tutorial-MySQL-final.txt1643
1 files changed, 0 insertions, 1643 deletions
diff --git a/Docs/Tutorial-MySQL-final.txt b/Docs/Tutorial-MySQL-final.txt
deleted file mode 100644
index bd52554a611..00000000000
--- a/Docs/Tutorial-MySQL-final.txt
+++ /dev/null
@@ -1,1643 +0,0 @@
-8 Tutorial MySQL
-=======================
-
-Este capítulo ofrece un tutorial de introducción a MySQL, mostrando cómo usar el programa cliente
-mysql para crear y usar una simple base de datos. mysql (al que algunas veces nos referimos como
-"monitor terminal" o simplemente "monitor") es un programa interactivo que te permite conectarte a
-un servidor MySQL, ejecutar consultas y observar los resultados. mysql puede ser usado también en
-modo batch: escribes tus consultas en un fichero de texto, para después pedirle a mysql que
-ejecute el contenido del fichero. Se cubren aquí esas dos formas de usar de usar mysql.
-
-Para ver una lista de opciones proporcionadas por mysql, lánzalo con las opción --help :
-
- shell> mysql --help
-
-Este capítulo asume que mysql está instalado en tu máquina, y que hay disponible un servidor al que
-te puedes conectar. Si esto no es así, contacta con tu administrador MySQL. (Si el administrador
-eres tú, necesitarás consultar otra sección de este manual).
-
-El capítulo describe el proceso completo de configurar y usar una base de datos. Si estás interesado
-sólo en acceder una base de datos ya existente, querrás saltar las secciones que describen cómo
-crear la base de datos y las tablas que la contienen.
-
-Dado que este capítulo es un tutorial básico, se dejarán en el tintero muchos
-detalles. Consulta las secciones relevantes del manual para más información sobre los temas
-aquí cubiertos.
-
-
-8.1 Conectando y desconectando del servidor
-=============================================
-
-
-Para conectarse al servidor, generalmente necesitarás facilitar un nombre de usuario MySQL cuando
-lances el cliente mysql y, lo más probable, también un password. Si el servidor se está ejecutando
-en una máquina distinta a la que estás conectado, necesitarás especificar también un nombre de
-host. Contacta con tu administrador para averiguar qué parámetros de conexión necesitas usar para
-conectar (es decir, qué host, nombre de usuario y password usar). Una vez que conozcas los
-parámetros adecuados, deberás ser capaz de conectar de la siguiente forma:
-
-shell> mysql -h host -u user -p
-Enter password: *******
-Welcome to the MySQL monitor. Commands end with ; or \g.
-Your MySQL connection id is 459 to server version: 3.22.20a-log
-
-Type 'help' for help.
-
-mysql>
-
-El prompt te indica que mysql ya está listo para la introducción de comandos.
-
-Algunas instalaciones MySQL permiten a los usuarios conectarse como usuarios "anonymous" (sin
-nombre) al servidor ejecutándose en el host local. Si este es el caso en tu máquina, deberías ser
-capaz de conectar a ese servidor invocando mysql sin ninguna opción:
-
-shell> mysql
-
-Una vez que hayas conectado con éxito, puedes desconectarte en cualquier momento tecleando QUIT en
-el prompt mysql> :
-
-mysql> QUIT
-Bye
-
-También puedes desconectar tecleando control-D.
-
-La mayor parte de los ejemplos en las siguientes secciones asumen que estás conectado al
-servidor. Lo indicarán por el prompt mysql>
-
-
-8.2 Haciendo consultas
-========================
-
-Asegúrate de que estás conectado al servidor, como se ha discutido en secciones anteriores. El
-hacerlo no implica que tengas seleccionada ninguna base de datos con la que trabajar, pero está
-bien. En este punto, es más importante averiguar un poco sobre cómo lanzar consultas que lanzarse
-directamente a la creación de tablas, cargar datos en ellas y recuperar los datos de las
-mismas. Esta sección describe los principios básicos de la entrada de comandos, usando varias
-consultas que puedes probar para familiarizarte con la forma de trabajo de mysql.
-
-Aquí presentamos un comando simple que pide al servidor que nos diga su número de versión y fecha
-actual. Tecléalo como se muestra a continuación siguiendo el prompt mysql> y pulsa la tecla RETURN:
-
-
-mysql> SELECT VERSION(), CURRENT_DATE;
-+-----------+--------------+
-| version() | CURRENT_DATE |
-+-----------+--------------+
-| 3.22.23b | 2000-01-05 |
-+-----------+--------------+
-1 row in set (0.06 sec)
-
-mysql>
-
-Esta consulta ilustra muchas cosas sobre mysql:
-
-* Un comando consiste normalmente de una sentencia SQL seguida por un punto y coma. (Existen algunas
- excepciones donde no es necesario el punto y coma. QUIT, mencionado más adelante, es una de
- ellas. Conoceremos otras más adelante.)
-
-* Cuando lanzas un comando, mysql lo envía al servidor para su ejecución y muestra los resultados,
- después imprime otro mysql> para indicar que está listo para otro comando.
-
-* mysql muestra la salida de una consulta como una tabla (filas y columnas). La primera fila
- contiene etiquetas para las columnas. Las siguientes filas son el resultado de la
- consulta. Normalmente, las etiquetas de las columnas son los nombres de las columnas que has
- obtenido de la base de datos. Si pides el valor de una expresión en vez de una columna de una
- tabla (como en el ejemplo anterior), mysql etiqueta la columna usando la propia expresión.
-
-* mysql muestra el número de filas que se han dado como resultado, y cuánto tiempo llevó la
- ejecución de la consulta, lo que te da una idea aproximada del rendimiento del servidor. Estos
- valores son imprecisos porque representan tiempo real (no tiempo de CPU o máquina), y porque están
- afectados por factores como la carga del servidor y la latencia de la red. (Por cuestiones de
- brevedad, la línea "rows in set" no se mostrará en los ejemplos posteriores de este capítulo.)
-
-Las palabras clave pueden ser tecleadas en cualquier combinación mayúscula/minúscula. Las siguientes
-consultas son equivalentes:
-
-mysql> SELECT VERSION(), CURRENT_DATE;
-mysql> select version(), current_date;
-mysql> SeLeCt vErSiOn(), current_DATE;
-
-He aquí otra consulta. Demuestra que puedes usar mysql como una calculadora sencilla:
-
-mysql> SELECT SIN(PI()/4), (4+1)*5;
-+-------------+---------+
-| SIN(PI()/4) | (4+1)*5 |
-+-------------+---------+
-| 0.707107 | 25 |
-+-------------+---------+
-
-Los comandos vistos hasta aquí han sido relativamente cortos, sentencias de una sola línea. También puedes
-insertar múltiples sentencias en una sola línea. Simplemente, termina cada una con un punto y coma:
-
-mysql> SELECT VERSION(); SELECT NOW();
-
-+-----------+
-| version() |
-+-----------+
-| 3.22.23b |
-+-----------+
-
-+---------------------+
-| NOW() |
-+---------------------+
-| 2000-01-05 17:33:16 |
-+---------------------+
-
-Un comando no necesita ser dado todo en una sóla línea, así pues, los comandos largos que requieran
-varias lineas no son un problema. mysql determina cuando termina tu sentencia buscando el punto y
-coma final, no buscando el final de la línea de entrada. (En otras palabras, mysql acepta entrada de
-libre formato: recoleta las líneas de entrada pero no las ejecutahasta que vea el punto y coma.)
-
-Aquí tenemos un simple ejemplo de múltiples líneas:
-
-mysql> SELECT
- -> USER()
- -> ,
- -> CURRENT_DATE;
-+----------------+--------------+
-| USER() | CURRENT_DATE |
-+----------------+--------------+
-| root@localhost | 2000-01-05 |
-+----------------+--------------+
-
-En este ejemplo, observa como cambia el prompt de mysql> a -> una vez que has insertado la primera
-línea de una consulta multi-línea. Esta es la forma en que mysql indica que no ha encontrado una
-sentencia completa y que está esperando por el resto. El prompt es tu amigo, dado que ofrece una
-retroalimentación (feedback) significativa. Si usas ese feedback, siempre sabrás a qué está
-esperando mysql.
-
-Si decides que no quieres ejecutar un comando que está en proceso de introducción, puedes cancelarlo
-tecleando \c :
-
-mysql> SELECT
- -> USER
- -> \c
-mysql>
-
-Observa aquí también el prompt. Ha vuelto a mysql> tras haber tecleado \c, ofreciendo un feedback
-que indica que mysql está listo para un nuevo comando.
-
-La siguiente tabla muestra cada uno de los prompts que puedes ver y resume qué es lo que significan
-y el estado en el que se encontrará mysql:
-
-Prompt Significado
-mysql> Listo para un nuevo comando
- -> Esperando una nueva línea de una consulta multi-línea
- '> Esperando la siguiente línea, se ha insertado una línea que comienza con (')
- "> Esperando la siguiente línea, se ha insertado una línea que comienza con (")
-
-Las sentencias multi-línea ocurren comúnmente "por accidente" cuando intentas lanzar un comando en
-una única línea, pero olvidas el punto y coma del final. En este caso, mysql espera más entrada:
-
-mysql> SELECT USER()
- ->
-
-Si esto es lo que te ocurre (crees que has introducido una sentencia pero la única respuesta es un
-prompt como ->), lo más probable es que mysql esté esperando por el punto y coma. Si no observas qué
-es lo que te dice el prompt, podrías quedarte esperando un buen rato antes de enterarte de qué es lo
-que sucede. Introduce un punto y coma para completar la sentencia, y mysql la ejecutará:
-
-mysql> SELECT USER()
- -> ;
-+----------------+
-| USER() |
-+----------------+
-| root@localhost |
-+----------------+
-
-Los prompts '> y "> ocurren durante la recogida de strings. En MySQL, puedes escribir strings
-encerrados por comillas simples (') o dobles (") (por ejemplo, 'hola' o "adios"), y mysql te permite
-introducir también strings que se cortan en múltiples líneas. Cuando veas un prompt como '> ó ">,
-significa que has introducido una línea que contenía un string que comenzaba por (') o ("), pero que
-no has introducido aún la comilla (simple o doble) de cierre. Esto está bien si realmente estabas
-introduciendo un string multi-línea, pero no es lo más normal. Lo que sí es más normal, es que los
-prompts '> ó "> indiquen que te has olvidado del caracter de cierre " ó '. Por ejemplo:
-
-mysql> SELECT * FROM mi_tabla WHERE nombre ="García AND edad < 30;
- ">
-
-Si tecleas esta sentencia SELECT, después pulsas ENTER y esperas por el resultado, no sucederá
-nada. En lugar de preocuparte, "¿por qué tarda tanto esta consulta?", observa la pista que te ofrece
-el prompt "> . Esto te indica que mysql espera ver el resto de un string que aún no ha
-terminado. (¿Ves el error en la sentencia? La cadena "García ha perdido las comillas de cierre.)
-
-Llegados a este punto, ¿qué puedes hacer?. Lo más fácil es cancelar el comando. Sin embargo, no
-puedes teclear simplemente \c en este ejemplo, dado que mysql ¡lo interpretará como parte del string
-que está leyendo! En vez de eso, introduce las comillas de cierre (para que mysql sepa que ya has
-terminado de introducir el string), y después teclea \c :
-
-mysql> SELECT * FROM mi_tabla WHERE nombre ="García AND edad < 30;
- "> "\c
-mysql>
-
-El prompt vuelve a cambiar a mysql>, indicando que mysql está listo para un nuevo comando.
-
-Es importante saber qué significan los prompts '> y ">, dado que si introduces por error un string
-sin cerrar, cualquier otra línea que introduzcas serán ignoradas por mysql - ¡incluyendo una línea
-que contenga QUIT! Esto puede ser bastante confuso, especialmente si no sabes que debes introducir
-la comilla de cierre antes de poder cancelar el comando actual.
-
-8.3 Creando y usando una base de datos
-==========================================
-
-Ahora que sabes como introducir comandos, es hora de acceder a la base de datos.
-
-Supon que tienes varias mascotas en tu casa (tu pequeño "zoo") y que te gustaría llevar un control
-de varios tipos de información sobre estos animales. Puedes hacerlo creando tablas que guarden tus
-datos y cargandolas con la información deseada. Después puedes responder a diferentes series de
-preguntas sobre tus animales extrayendo los datos de las tablas. Esta sección explica cómo hacer
-todo esto:
-
-* Cómo crear una base de datos
-* Cómo crear una tabla
-* Cómo cargar los datos en la tabla
-* Cómo extraer información de la tabla de varias maneras
-* Cómo usar múltiples tablas
-
-La base de datos del zoo será simple (deliberadamente), pero no es difícil pensar en situaciones del
-mundo real en las que se pudiera utilizar una base de datos similar. Por ejemplo, se podría usar una base
-de datos como ésta en una granja para llevar un control del ganado, o por un veterinario para
-controlar el historial de sus pacientes.
-
-Usa la sentencia SHOW para averiguar qué bases de datos existen actualmente en el servidor:
-
-mysql> SHOW DATABASES;
-+----------+
-| Database |
-+----------+
-| mysql |
-| test |
-+----------+
-
-Probablemente, la lista de las bases de datos será diferente en tu máquina, pero las bases de datos
-mysql y test es probable que se encuentren en esa lista. Se requiere la base de datos mysql pues
-describe los privilegios de acceso de los usuarios. La base de datos test se ofrece como campo de
-pruebas para que los usuarios prueben ahí sus teorías.
-
-Si la base de datos test existe, intenta acceder a ella:
-
-mysql> USE test
-Database changed
-
-Observa que USE, como QUIT, no requiere un punto y coma. (Puedes terminar este tipo de sentencias
-con un punto y coma si quieres, pero no es necesario.) La sentencia USE es especial en otro sentido,
-también: debe ser tecleada en una sola línea.
-
-Puedes usar la base de datos test (si tienes acceso a ella) para los ejemplos que siguen, pero
-cualquier cosa que crees en dicha base de datos puede ser eliminada por cualquiera que tenga acceso
-a ella. Por esta razón, deberías pedir a tu administrador MySQL permisos para usar una base de datos
-propia. Suponte que le quieres llamar zoo. El administrador necesitará ejecutar entonces la
-siguiente orden:
-
-mysql> GRANT ALL ON zoo.* TO tu_nombre;
-
-donde tu_nombre es el nombre de usuario MySQL que tengas asignado.
-
-ejemplo:
-
-mysql> GRANT ALL ON zoo.* TO chessy@localhost;
-Query OK, 0 rows affected (0.08 sec)
-
-
-8.3.1 Creando y seleccionando una base de datos
-==================================================
-
-Si el administrador creó la base de datos para tí cuando te configuró los permisos, puedes comenzar
-a usarla. En otro caso, deberás crearla tú mismo:
-
-[chessy@bishito chessy]$ mysql -u chessy
-Welcome to the MySQL monitor. Commands end with ; or \g.
-Your MySQL connection id is 6 to server version: 3.22.23b
-
-Type 'help' for help.
-
-mysql> CREATE DATABASE zoo;
-Query OK, 1 row affected (0.02 sec)
-
-
-Bajo Unix, los nombres de bases de datos son sensibles a las mayúsculas/minúsculas (a diferencia de
-los comandos SQL), así que deberás referirte siempre a tu base de datos con el nombre zoo, no como
-Zoo, ZOO o cualquier otra variante. Es es así también para las tablas. (Bajo Windows, esta
-restricción desaparece, aunque deberías referirte a las bases de datos y a las tablas usando la
-misma sintaxis en tus consultas.)
-
-Crear una base de datos no la selecciona para su uso, debes hacerlo explícitamente. Para hacer que
-la base de datos zoo sea tu base de datos de trabajo, usa el comando:
-
-mysql> USE zoo;
-Database changed
-
-Tu base de datos sólo necesita ser creada una vez, pero debes seleccionarla para usarla cada vez que
-comiences una sesión mysql. Puedes hacerlo lanzando un comando USE como se ha visto en el
-ejemplo. Alternativamente, puedes seleccionar la base de datos desde la línea de comandos cuando
-lanzas mysql. Simplemente especifica su nombre tras los parámetros de conexión que hayas
-escrito. Por ejemplo:
-
-shell> mysql -h host -u user -p zoo
-Enter password: ********
-
-Observa que en la línea de comandos del ejemplo, zoo no es tu password. Si quieres introducir tu
-password como parámetro en la línea de comandos tras la opción -p, debes hacerlo sin teclear un
-espacio en blanco intermedio (es decir, como -pmi_password, no como -p mi_password). Sin embargo, no
-es recomendable poner tu password en la línea de comandos, pues hacerlo lo expone a posibles
-miradas de otros usuarios conectados a tu máquina.
-
-8.3.2 Creando una tabla
-============================
-
-Crear una tabla es la parte fácil, pero hasta este momento está vacía, como te dice la orden SHOW
-TABLES:
-
-mysql> SHOW TABLES;
-Empty set (0.00 sec)
-
-La parte más dura consiste en decidir cual va a ser la estructura de tu base de datos: qué tablas
-necesitarás, y qué columnas tendrá cada una de ellas.
-
-Querrás seguramente una tabla que contenga un registro por cada una de tus mascotas. Esta tabla
-puede llamarse mascotas, y debería contener, como mínimo, el nombre de cada animal. Dado que el
-nombre por sí solo no es muy interesante, la tabla debería contener otra información. Por ejemplo,
-si más de una persona de tu familia tiene mascotas, probablemente quieras listar el propietario de
-cada animal. También querrás guardar información descriptiva básica como puede ser la especie y el
-sexo de cada mascota.
-
-¿Qué pasa con la edad? Podría ser de interés, pero no es una buena cosa a guardar en una base de
-datos. La edad cambia a medida que pasa el tiempo, lo que significa que tendrás que actualizar tus
-registros a menudo. En vez de eso, es mejor almacenar un valor fijo como la edad de
-nacimiento. Después, cada vez que necesites saber la edad, puedes calcularla como la diferencia
-entre la fecha actual y la fecha de nacimiento. MySQL ofrece funciones para realizar cálculos
-aritméticos entre fechas, por lo que esto no es difícil. Almacenar la fecha de nacimiento en lugar
-de la edad tiene también otras ventajas:
-
-* Puedes usar la base de datos para generar recordatorios de cumpleaños de mascotas. (Si crees que
- este tipo de consulta es algo tonta, observa que es la misma pregunta que necesitarás hacer en el
- contexto de una base de datos de un negocio para identificar clientes a los que pronto necesitarás
- mandar un saludo por su cumpleaños, para ese toque personal asistido por ordenador :-)
-
-* Puedes calcular la edad en relación a fechas distintas a la fecha actual. Por ejemplo, si
- almacenas la fecha de muerte en la base de datos, puedes calcular fácilmente lo vieja que era una
- mascota cuando murió.
-
-Seguramente puedas pensar en otros tipos de información que sería útil en la tabla mascota, pero los
-identificados hasta ahora son suficientes por el momento: nombre, propietarios, especie, sexo, fecha
-de nacimiento y muerte.
-
-Usa una sentencia CREATE TABLE para especificar la estructura de tu tabla:
-
-mysql> CREATE TABLE mascota (nombre VARCHAR(20), propietario VARCHAR(20),
- -> especie VARCHAR(20), sexo CHAR(1), nacimiento DATE, muerte DATE);
-
-VARCHAR es una buena elección para las columnas nombre, propietario y especie dado que los valores
-de estas columnas variarán su longitud. Las longitudes de estas columnas no necesitan ser iguales, y
-no necesitan ser 20. Puedes elegir cualquier longitud entre 1 y 255, cualquiera que te parezca
-razonable. (Si realizar una elección pobre y resulta que más adelante necesitas un campo mayor,
-MySQL ofrece una sentencia ALTER TABLE.)
-
-El sexo del animal puede ser representado en una variedad de formas, por ejemplo, "m" y "f", o
-quizás "masculino" y "femenino". Es más simple usar un único caracter, "m" ó "f".
-
-El uso del tipo de datos DATE para las columnas de nacimiento y muerte es una opción bastante
-obvia.
-
-Ahora que ya has creado una tabla, SHOW TABLES debería producir alguna salida:
-
-mysql> SHOW TABLES;
-+---------------+
-| Tables in zoo |
-+---------------+
-| mascota |
-+---------------+
-
-Para verificar que tu tabla fue creada de la forma que esperabas, usa una sentencia DESCRIBE:
-
-mysql> DESCRIBE mascota;
-+-------------+-------------+------+-----+---------+-------+
-| Field | Type | Null | Key | Default | Extra |
-+-------------+-------------+------+-----+---------+-------+
-| nombre | varchar(20) | YES | | NULL | |
-| propietario | varchar(20) | YES | | NULL | |
-| especie | varchar(20) | YES | | NULL | |
-| sexo | char(1) | YES | | NULL | |
-| nacimiento | date | YES | | NULL | |
-| muerte | date | YES | | NULL | |
-+-------------+-------------+------+-----+---------+-------+
-
-Puedes usar DESCRIBE en cualquier momento, por ejemplo, si olvidas los nombres de las columnas de tu
-tabla o a qué tipo de datos pertenecen.
-
-8.3.3 Cargando datos en una tabla
-=====================================
-
-Una vez creada tu tabla, necesitas poblarla. Las sentencias LOAD DATA e INSERT son útiles para esto.
-
-Suponte que tus registros de mascotas pueden ser descritos como se muestra más abajo. (Observa que
-MySQL espera que las fechas se introduzcan en formato AAAA-MM-DD; esto podría ser diferente a lo que
-estás acostumbrado.)
-
-nombre propietario especie sexo nacimiento muerte
-Fluffy Harold gato f 1993-02-04
-Claws Gwen gato m 1994-03-17
-Buffy Harold perro f 1989-05-13
-Fang Benny perro m 1990-08-27
-Bowser Diane perro m 1998-08-31 1995-07-29
-Chirpy Gwen pájaro f 1998-09-11
-Whistler Gwen pájaro 1997-12-09
-Slim Benny serpiente m 1996-04-29
-
-Dado que estás comenzando con una tabla vacía, una forma sencilla de poblarla consiste en crear un
-fichero de texto conteniendo una fila para cada uno de tus animales, y después cargar el contenido del
-fichero en la tabla con una sola sentencia.
-
-Puedes crear un fichero de texto "mascota.txt" conteniendo un registro por línea, con valores separados
-por tabuladores, y dados en el orden en el que las columnas fueron listadas en la sentencia CREATE
-TABLE. Para valores perdidos (como sexos desconocidos, o fechas de muerte de animales que aún están
-vivos), puedes usar valores NULL. Para representar estos en tu fichero de texto, use \N. Por
-ejemplo, el registro para Whistler el pájaro sería algo como esto (donde el espacio en blanco entre
-valores es un simple caracter de tabulación):
-
-Whistler Gwen pájaro \N 1997-12-09 \N
-
-Para cargar el fichero de texto "mascota.txt" en la tabla mascota, usa este comando:
-
-mysql> LOAD DATA LOCAL INFILE "mascota.txt" INTO TABLE mascota;
-
-Puedes especificar el valor de separación de columna y el marcador de final de línea explícitamente
-en la sentencia LOAD DATA si lo deseas, pero por defecto equivalen a TAB y LF (intro). Estos valores
-por defecto son suficientes para que la sentencia que lee el fichero "mascota.txt" funcione
-correctamente.
-
-Cuando quieras añadir nuevos registros uno a uno, la sentencia INSERT es muy útil. En su forma más
-simple, ofreces valores para cada columna, en el orden en el que las columnas fueron listadas en la
-sentencia CREATE TABLE. Supón que Diane consige un nuevo hamster llamado Puffball. Podrías añadir un
-nuevo registro usando una sentencia INSERT como esta:
-
-mysql> INSERT INTO mascota
- -> VALUES ('Puffball','Diane','hamster','f','1999-03-30',NULL);
-
-Observa que los valores string y fecha se espefican encerrados entre comillas. Observa también que,
-con INSERT, puedes insertar NULL directamente para representar un valor perdido. No usamos \N como
-hacíamos con LOAD DATA.
-
-De este ejemplo, deberías ser capaz de ver que hubiera dido mucho más costoso teclear todos los
-datos necesarios en la tabla mascota con sentencias INSERT que hacerlo como lo hemos hecho con una
-única sentencia LOAD DATA.
-
-
-8.3.4 Extrayendo información de una tabla
-===============================================
-
-
-La sentencia SELECT se usa para recabar información de una tabla. La forma
-general de la sentencia es:
-
-SELECT qué_seleccionar
-FROM de_qué_tabla
-WHERE condiciones_a_satisfacer
-
-qué_seleccionar indica qué es lo que quieres seleccionar. Puede ser una lista de
-columnas, o * para indicar "todas las columnas". de_qué_tabla indica la tabla de
-la que quieres extraer datos. La claúsula WHERE es opcional. Si está presente,
-condiciones_a_satisfacer especifica las codiciones que las filas deben cumplir
-para estar presentes en el resultado de la selección.
-
-8.3.4.1 Seleccionando todos los datos
-=======================================
-
-La forma más simplede SELECT recoge toda la información de una tabla:
-
-mysql> SELECT * FROM mascota;
-+----------+-------------+-----------+------+------------+------------+
-| nombre | propietario | especie | sexo | nacimiento | muerte |
-+----------+-------------+-----------+------+------------+------------+
-| Bluffy | Harold | gato | f | 1993-02-04 | NULL |
-| Claws | Gwen | gato | m | 1994-03-17 | NULL |
-| Buffy | Harold | perro | f | 1989-05-13 | NULL |
-| Fang | Benny | perro | m | 1990-08-27 | NULL |
-| Bowser | Diane | perro | m | 1998-08-31 | 1995-07-29 |
-| Chirpy | Gwen | pájaro | f | 1998-09-11 | NULL |
-| Whistler | Gwen | pájaro | NULL | 1997-12-09 | NULL |
-| Slim | Benny | serpiente | m | 1996-04-29 | NULL |
-| Puffball | Diane | hamster | f | 1999-03-30 | NULL |
-+----------+-------------+-----------+------+------------+------------+
-
-Esta forma de SELECT es útil si quieres revisar tu tabla al completo, por
-ejemplo, tras haberla cargado con tu conjunto inicial de datos. Como suele
-suceder, la salida ya muestra un error en tu fichero de datos: Bowser ¡parece
-haber nacido tras su muerte! Consultando tus papeles originales sobre el
-pedigree del perro, descubres que la fecha correcta de nacimiento es 1989, no
-1998.
-
-Existen al menos un par de maneras de arreglar esto:
-
-* Edita el fichero "mascota.txt" para corregir el error, después vacía la tabla
- y vuelve a cargarla usando DELETE y LOAD DATA:
-
-mysql> DELETE from mascota;
-mysql> LOAD DATA LOCAL INFILE "mascota.txt" INTO TABLE mascota;
-
-Sin embargo, si haces esto, debes re-escribir el registro para Puffball.
-
-* Arreglar sólo el registro erróneo con la sentencia UPDATE:
-
-mysql> UPDATE mascota SET nacimiento="1989-08-31" WHERE nombre="Bowser";
-
-Como se muestra más arriba, es fácil recuperar el cuerpo de una data. Pero
-típicamente no querrás hacer eso, en particular cuando la tabla sea muy
-larga. Generalmente, estarás más interesado en responder a una pregunta en
-particular, en cuyo caso deberás especificar algunas restricciones en la
-información que deseas. Veamos algunas consultas de selección en términos de
-preguntas sobre tus mascotas que se deben responder.
-
-8.3.4.2 Seleccionando filas en particular
-=============================================
-
-Puedes seleccionar sólo filas en particular de tu tabla. Por ejemplo, si quieres
-verificar el cambio que has realizado a la fecha de nacimiento de Bowser,
-selecciona el registro de Bowser de la siguiente forma:
-
-mysql> SELECT * FROM mascota WHERE nombre="Bowser";
-+--------+-------------+---------+------+------------+------------+
-| nombre | propietario | especie | sexo | nacimiento | muerte |
-+--------+-------------+---------+------+------------+------------+
-| Bowser | Diane | perro | m | 1989-08-31 | 1995-07-29 |
-+--------+-------------+---------+------+------------+------------+
-
-La salida confirma que el año está correctamente registrado como 1989, no 1998.
-
-Las comparaciones de cadenas de texto son normalmente insensibles a las
-mayúsculas/minúsculas, por lo que puedes especificar el nombre como "bowser",
-"BOWSER", etc. El resultado de la consulta será el mismo.
-
-Puedes especificar condiciones en cualquier columna, no sólo el nombre. Por
-ejemplo, si quisieras saber qué animales nacieron a partir de 1998, examina la
-columna nacimiento:
-
-mysql> SELECT * FROM mascota WHERE nacimiento >= "1998-1-1";
-+----------+-------------+---------+------+------------+--------+
-| nombre | propietario | especie | sexo | nacimiento | muerte |
-+----------+-------------+---------+------+------------+--------+
-| Chirpy | Gwen | pájaro | f | 1998-09-11 | NULL |
-| Puffball | Diane | hamster | f | 1999-03-30 | NULL |
-+----------+-------------+---------+------+------------+--------+
-
-Puedes combinar condiciones, por ejemplo, para localizar los perros hembra:
-
-mysql> SELECT * FROM mascota WHERE especie="perro" AND sexo="f";
-+--------+-------------+---------+------+------------+--------+
-| nombre | propietario | especie | sexo | nacimiento | muerte |
-+--------+-------------+---------+------+------------+--------+
-| Buffy | Harold | perro | f | 1989-05-13 | NULL |
-+--------+-------------+---------+------+------------+--------+
-
-La consulta anterior usa el operador lógico AND. Existe también un operador OR:
-
-mysql> SELECT * FROM mascota WHERE especie="serpiente" OR especie="pájaro";
-+----------+-------------+-----------+------+------------+--------+
-| nombre | propietario | especie | sexo | nacimiento | muerte |
-+----------+-------------+-----------+------+------------+--------+
-| Chirpy | Gwen | pájaro | f | 1998-09-11 | NULL |
-| Whistler | Gwen | pájaro | NULL | 1997-12-09 | NULL |
-| Slim | Benny | serpiente | m | 1996-04-29 | NULL |
-+----------+-------------+-----------+------+------------+--------+
-
-AND y OR pueden entremezclarse. Si lo haces, es una buena idea el utilizar
-paréntesis para indicar cómo deberían agruparse las condiciones:
-
-mysql> SELECT * FROM mascota WHERE (especie="gato" AND sexo="m")
- -> OR (especie="perro" AND sexo="f");
-+--------+-------------+---------+------+------------+--------+
-| nombre | propietario | especie | sexo | nacimiento | muerte |
-+--------+-------------+---------+------+------------+--------+
-| Claws | Gwen | gato | m | 1994-03-17 | NULL |
-| Buffy | Harold | perro | f | 1989-05-13 | NULL |
-+--------+-------------+---------+------+------------+--------+
-
-8.3.4.3 Seleccionando columnas en particular
-===================================================
-
-Si no quieres ver filas completas de tu tabla, simplemente nombra las columnas
-en las cuales estás interesado, separadas por comas. Por ejemplo, si quieres
-saber cuándo nacieron tus animales, selecciona las columnas nombre y nacimiento:
-
-mysql> SELECT nombre, nacimiento FROM mascota;
-+----------+------------+
-| nombre | nacimiento |
-+----------+------------+
-| Bluffy | 1993-02-04 |
-| Claws | 1994-03-17 |
-| Buffy | 1989-05-13 |
-| Fang | 1990-08-27 |
-| Bowser | 1989-08-31 |
-| Chirpy | 1998-09-11 |
-| Whistler | 1997-12-09 |
-| Slim | 1996-04-29 |
-| Puffball | 1999-03-30 |
-+----------+------------+
-
-Para averiguar quién posee mascotas, usa esta consulta:
-
-mysql> SELECT propietario FROM mascota;
-+-------------+
-| propietario |
-+-------------+
-| Harold |
-| Gwen |
-| Harold |
-| Benny |
-| Diane |
-| Gwen |
-| Gwen |
-| Benny |
-| Diane |
-+-------------+
-
-Sin embargo, observa que la consulta simplemente obtiene el campo propietario de
-cada registro, y algunos de ellos aparecen más de una vez. Para minimizar la
-salida, obtén cada registro de salida único una sola vez añadiendo la palabra
-reservada DISTINCT:
-
-mysql> SELECT DISTINCT propietario FROM mascota;
-+-------------+
-| propietario |
-+-------------+
-| Benny |
-| Diane |
-| Gwen |
-| Harold |
-+-------------+
-
-Puedes usar una claúsula WHERE para combinar la selección de filas con la
-selección de columnas. Por ejemplo, para conseguir sólo las fechas de nacimiento
-de perros y gatos, usa esta consulta:
-
-mysql> SELECT nombre, especie, nacimiento FROM mascota
- -> WHERE especie = "perro" OR especie = "gato";
-+--------+---------+------------+
-| nombre | especie | nacimiento |
-+--------+---------+------------+
-| Bluffy | gato | 1993-02-04 |
-| Claws | gato | 1994-03-17 |
-| Buffy | perro | 1989-05-13 |
-| Fang | perro | 1990-08-27 |
-| Bowser | perro | 1989-08-31 |
-+--------+---------+------------+
-
-8.3.4.4 Ordenando filas
-===========================
-
-Tal vez hayas observado que en los ejemplos anteriores las filas del resultado
-se muestran sin ningún tipo de orden en particular. Sin embargo, a menudo es más
-fácil de examinar la salida de una consulta cuando las filas están ordenadas de
-alguna manera en particular. Para ordenar un resultado, usa la claúsula ORDER
-BY.
-
-Aquí mostramos las fechas de nacimiento de los animales, ordenadas por fecha:
-
-mysql> SELECT nombre, nacimiento FROM mascota ORDER BY nacimiento;
-+----------+------------+
-| nombre | nacimiento |
-+----------+------------+
-| Buffy | 1989-05-13 |
-| Bowser | 1989-08-31 |
-| Fang | 1990-08-27 |
-| Bluffy | 1993-02-04 |
-| Claws | 1994-03-17 |
-| Slim | 1996-04-29 |
-| Whistler | 1997-12-09 |
-| Chirpy | 1998-09-11 |
-| Puffball | 1999-03-30 |
-+----------+------------+
-
-Para ordenar de forma inversa, añade la palabra reservada DESC (descendente) al
-nombre de la columna por la que estás ordenando:
-
-mysql> SELECT nombre, nacimiento FROM mascota ORDER BY nacimiento DESC;
-+----------+------------+
-| nombre | nacimiento |
-+----------+------------+
-| Puffball | 1999-03-30 |
-| Chirpy | 1998-09-11 |
-| Whistler | 1997-12-09 |
-| Slim | 1996-04-29 |
-| Claws | 1994-03-17 |
-| Bluffy | 1993-02-04 |
-| Fang | 1990-08-27 |
-| Bowser | 1989-08-31 |
-| Buffy | 1989-05-13 |
-+----------+------------+
-
-Puedes ordenar por múltiples columnas. Por ejemplo, para ordenar por tipo de
-animal, después por fecha de nacimiento dentro del mismo tipo de animal estando
-los animales más jóvenes primero, usa la siguiente consulta:
-
-mysql> SELECT nombre, especie, nacimiento FROM mascota ORDER BY especie, nacimiento DESC;
-+----------+-----------+------------+
-| nombre | especie | nacimiento |
-+----------+-----------+------------+
-| Claws | gato | 1994-03-17 |
-| Bluffy | gato | 1993-02-04 |
-| Puffball | hamster | 1999-03-30 |
-| Chirpy | pájaro | 1998-09-11 |
-| Whistler | pájaro | 1997-12-09 |
-| Fang | perro | 1990-08-27 |
-| Bowser | perro | 1989-08-31 |
-| Buffy | perro | 1989-05-13 |
-| Slim | serpiente | 1996-04-29 |
-+----------+-----------+------------+
-
-Observa que la palabra reservada DESC se aplica sólo al nombre de columna que
-preceda a la palabra reservada (nacimiento); los valores especie siguen siendo
-ordenados en forma ascendente.
-
-8.3.4.5 Cálculos de fecha
-============================
-
-MySQL ofrece muchas funciones que puedes usar para realizar cálculos con fechas,
-por ejemplo, para calcular edades o extraer partes de fechas.
-
-Para determinar cuantos años tiene cada una de tus mascotas, puedes calcular la
-edad como la diferencia entre la fecha de nacimiento y la fecha actual. Puedes
-hacerlo convirtiendo las dos fechas a dias, coge la diferencia, y divídela por
-365 (el número de dias en un año):
-
-mysql> select nombre, (TO_DAYS(NOW())-TO_DAYS(nacimiento))/365 FROM mascota;
-+----------+------------------------------------------+
-| nombre | (TO_DAYS(NOW())-TO_DAYS(nacimiento))/365 |
-+----------+------------------------------------------+
-| Bluffy | 6.94 |
-| Claws | 5.83 |
-| Buffy | 10.68 |
-| Fang | 9.39 |
-| Bowser | 10.38 |
-| Chirpy | 1.34 |
-| Whistler | 2.10 |
-| Slim | 3.71 |
-| Puffball | 0.79 |
-+----------+------------------------------------------+
-
-Aunque la consulta funcione, existen algunos puntos que podrían ser
-mejorados. Primero, el resultado podría ser revisado más fácilmente si las filas
-se presentaran ordenadas de alguna manera. Segundo, la cabecera de la columna
-edad no es muy significativa.
-
-El primer problema puede ser solucionado añadiendo una cláusula ORDER BY nombre
-para ordenar la salida por nombre. Para arreglar el tema del encabezamiento de
-columna, puedes darle un nombre a dicha columna de tal forma que aparezca una
-etiqueta diferente en la salida (esto es lo que se llama un alias de columna):
-
-mysql> select nombre, (TO_DAYS(NOW())-TO_DAYS(nacimiento))/365 AS edad
- -> FROM mascota ORDER BY nombre;
-+----------+-------+
-| nombre | edad |
-+----------+-------+
-| Bluffy | 6.94 |
-| Bowser | 10.38 |
-| Buffy | 10.68 |
-| Chirpy | 1.34 |
-| Claws | 5.83 |
-| Fang | 9.39 |
-| Puffball | 0.79 |
-| Slim | 3.71 |
-| Whistler | 2.10 |
-+----------+-------+
-
-Para ordenar la salida por edad en lugar de por nombre, puedes hacerlo usando
-símplemente una cláusula ORDER BY diferente:
-
-mysql> select nombre, (TO_DAYS(NOW())-TO_DAYS(nacimiento))/365 AS edad
- -> FROM mascota ORDER BY edad;
-+----------+-------+
-| nombre | edad |
-+----------+-------+
-| Puffball | 0.79 |
-| Chirpy | 1.34 |
-| Whistler | 2.10 |
-| Slim | 3.71 |
-| Claws | 5.83 |
-| Bluffy | 6.94 |
-| Fang | 9.39 |
-| Bowser | 10.38 |
-| Buffy | 10.68 |
-+----------+-------+
-
-Puede usarse una consulta similar para determinar la edad de la muerte para los
-animales que hayan muerto. Puedes determinar qué animales son estos comprobando
-si el valor muerte es NULL o no. Después, para aquellos que no tengan un valor
-NULL, calcular la diferencia entre los valores muerte y nacimiento:
-
-mysql> select nombre, nacimiento, muerte,
- -> (TO_DAYS(NOW())-TO_DAYS(nacimiento))/365 AS edad
- -> FROM mascota WHERE muerte IS NOT NULL ORDER BY edad;
-+--------+------------+------------+-------+
-| nombre | nacimiento | muerte | edad |
-+--------+------------+------------+-------+
-| Bowser | 1989-08-31 | 1995-07-29 | 10.38 |
-+--------+------------+------------+-------+
-
-La consulta usa muerte IS NOT NULL en lugar de muerte != NULL dado que NULL es
-un valor especial. Esto se explica más adelante. [Puedes consultar la sección
-[Working with NULL] del manual de MySQL.
-
-¿Qué harías si quisieras saber qué animales cumplen años el mes que viene? Para
-este tipo de cálculos, año y día son irrelevantes, simplemente querrás extraer
-la parte mes de la columna nacimiento. MySQL ofrece muchas funciones de
-extracción de parte-de-fecha, como YEAR(),MONTH() y DAY(). La función apropiada
-para nuestro problema es MONTH(). Para ver cómo funciona, ejecuta una consulta
-rápida que muestre el valor de la fecha de nacimiento y el mes de nacimiento
-(MONTH(nacimiento)):
-
-mysql> SELECT nombre, nacimiento, MONTH(nacimiento) FROM mascota;
-+----------+------------+-------------------+
-| nombre | nacimiento | MONTH(nacimiento) |
-+----------+------------+-------------------+
-| Bluffy | 1993-02-04 | 2 |
-| Claws | 1994-03-17 | 3 |
-| Buffy | 1989-05-13 | 5 |
-| Fang | 1990-08-27 | 8 |
-| Bowser | 1989-08-31 | 8 |
-| Chirpy | 1998-09-11 | 9 |
-| Whistler | 1997-12-09 | 12 |
-| Slim | 1996-04-29 | 4 |
-| Puffball | 1999-03-30 | 3 |
-+----------+------------+-------------------+
-
-Buscar animales que hayan nacido en el mes próximo es también sencillo de
-realizar. Suponte que Abril es el mes actual. Entonces el valor del mes es 4 y
-lo que buscas son animales nacidos en Mayo (mes 5):
-
-mysql> SELECT nombre, nacimiento FROM mascota WHERE MONTH(nacimiento) = 5;
-+--------+------------+
-| nombre | nacimiento |
-+--------+------------+
-| Buffy | 1989-05-13 |
-+--------+------------+
-
-Existe una pequeña complicación si el mes actual es Diciembre, por supuesto. No
-puedes añadir simplemente uno al número de mes (12) y buscar animales nacidos en
-el mes 13, dado que no existe tal mes. En lugar de eso, debes buscar animales
-nacidos en Enero (mes 1).
-
-Puedes escribir la consulta de tal forma que funcione independientemente del mes
-en el que estemos. De esa forma no tendrás que usar un número de mes en
-particular en la consulta. DATE_ADD() te permite añadir un intervalo de tiempo a
-una fecha dada. Si añades un mes al valor de NOW(), y después extraes la parte
-del mes con MONTH(), el resultado produce el mes del cumpleaños que buscamos:
-
-
-mysql> select NOW();
-+---------------------+
-| NOW() |
-+---------------------+
-| 2000-01-13 18:13:09 |
-+---------------------+
-
-mysql> SELECT nombre, nacimiento FROM mascota
- -> WHERE MONTH(nacimiento) = MONTH(DATE_ADD(NOW(),INTERVAL 1 MONTH));
-+--------+------------+
-| nombre | nacimiento |
-+--------+------------+
-| Bluffy | 1993-02-04 |
-+--------+------------+
-
-Una manera difente de conseguir los mismos resultados es añadir 1 al mes actual
-para conseguir el mes siguiente (tras usar la función módulo (MOD) para
-convertir el valor de mes actual en 0 si estamos en Diciembre (mes 12)):
-
-mysql> SELECT nombre, nacimiento FROM mascota
- -> WHERE MONTH(nacimiento) = MOD(MONTH(NOW()),12) +1;
-+--------+------------+
-| nombre | nacimiento |
-+--------+------------+
-| Bluffy | 1993-02-04 |
-+--------+------------+
-
-
-8.3.4.6 Trabajando con valores NULL
-=======================================
-
-Los valores NULL pueden ser sorprenderte hasta que te acostumbras a
-usarlos. Conceptualmente, NULL significa "valor perdido" o "valor desconocido" y
-se trata de forma diferente que otros valores. Para realizar comparaciones
-respecto a NULL, no puedes utilizar los operadores de comparación aritméticos
-como =, < o != . Puedes realizar una demostración de esto, prueba la siguiente consulta:
-
-mysql> SELECT 1 = NULL, 1 != NULL, 1 < NULL, 1 > NULL;
-+----------+-----------+----------+----------+
-| 1 = NULL | 1 != NULL | 1 < NULL | 1 > NULL |
-+----------+-----------+----------+----------+
-| NULL | NULL | NULL | NULL |
-+----------+-----------+----------+----------+
-
-Ciertamente, de estas comparaciones no se pueden extraer resultados
-significativos. Para conseguirlo, usa los operadores IS NULL y IS NOT NULL:
-
-mysql> SELECT 1 IS NULL, 1 IS NOT NULL;
-+-----------+---------------+
-| 1 IS NULL | 1 IS NOT NULL |
-+-----------+---------------+
-| 0 | 1 |
-+-----------+---------------+
-
-En MySQL, 0 significa falso y 1 significa VERDADERO.
-
-Este tratamiento especial de NULL fue la causa de que en la sección anterior
-fuera necesario determinar qué animales ya no vivían usando "muerte IS NOT NULL"
-en lugar de "muerte != NULL".
-
-8.3.4.7 Asociación/Coincidencia de patrones (PATTERN MATCHING)
-================================================================
-
-MySQL ofrece las características de asociación de patrones estándar así como
-una forma de coincidencia de patrones basadas en expresiones regulares
-extendidas similares a las usadas por utilidades UNIX como vi, grep y sed.
-
-La asociación de patrones SQL te permite usar '_' para asociar cualquier
-caracter simple, y '%' para asociar un número arbitrario de caracteres
-(incluyendo cero caracteres). Los patrones SQL no toman en cuenta las
-diferencias entre mayúsculas y minúsculas. Se muestran debajo algunos
-ejemplos. Observa que no se utiliza = o != en el trabajo con patrones SQL;
-utiliza en su lugar los operadores de comparación LIKE o NOT LIKE.
-
-Para buscar nombres que comienzan por "b":
-
-mysql> SELECT * FROM mascota WHERE nombre LIKE "b%";
-+--------+-------------+---------+------+------------+------------+
-| nombre | propietario | especie | sexo | nacimiento | muerte |
-+--------+-------------+---------+------+------------+------------+
-| Bluffy | Harold | gato | f | 1993-02-04 | NULL |
-| Buffy | Harold | perro | f | 1989-05-13 | NULL |
-| Bowser | Diane | perro | m | 1989-08-31 | 1995-07-29 |
-+--------+-------------+---------+------+------------+------------+
-
-Para buscar nombres que terminen por "fy":
-
-mysql> SELECT * FROM mascota WHERE nombre LIKE "%fy";
-+--------+-------------+---------+------+------------+--------+
-| nombre | propietario | especie | sexo | nacimiento | muerte |
-+--------+-------------+---------+------+------------+--------+
-| Bluffy | Harold | gato | f | 1993-02-04 | NULL |
-| Buffy | Harold | perro | f | 1989-05-13 | NULL |
-+--------+-------------+---------+------+------------+--------+
-
-Para buscar nombres que contengan una "w":
-
-mysql> SELECT * FROM mascota WHERE nombre LIKE "%w%";
-+----------+-------------+---------+------+------------+------------+
-| nombre | propietario | especie | sexo | nacimiento | muerte |
-+----------+-------------+---------+------+------------+------------+
-| Claws | Gwen | gato | m | 1994-03-17 | NULL |
-| Bowser | Diane | perro | m | 1989-08-31 | 1995-07-29 |
-| Whistler | Gwen | pájaro | NULL | 1997-12-09 | NULL |
-+----------+-------------+---------+------+------------+------------+
-
-Para buscar nombres de longitud cinco caracteres, usa el patrón "_" :
-
-mysql> SELECT * FROM mascota WHERE nombre LIKE "_____";
-+--------+-------------+---------+------+------------+--------+
-| nombre | propietario | especie | sexo | nacimiento | muerte |
-+--------+-------------+---------+------+------------+--------+
-| Claws | Gwen | gato | m | 1994-03-17 | NULL |
-| Buffy | Harold | perro | f | 1989-05-13 | NULL |
-+--------+-------------+---------+------+------------+--------+
-
-El otro tipo de asociación de patrones ofrecido por MySQL utiliza expresiones
-regulares extendidas. Cuando se realiza una comprobación buscando una coincidencia
-para este tipo de patrón, se deben usar los operadores REGEXP y NOT REGEXP (o
-RLIKE y NOT RLIKE, dado que son sinónimos).
-
-Algunas características de las expresiones regulares extendidas son:
-
-* `.' se asocia con cualquier caracter (pero sólo uno)
-
-* Una clase de caracteres `[...]' se asocia con culquier caracter contenido
- dentro de los corchetes. Por ejemplo, `[abc]' se asocia con 'a', 'b' ó
-
-* 'c'. Para nombrar un rango de caracteres, usa un guión. `[a-z]' se asocia con
-cualquier letra en minúscula, donde '[0-9]' se asocia con cualquier dígito.
-
-* '*' se asocia con 0 o más instancias de lo que preceda al asterisco. Por
- ejemplo,'a*' coincide con cualquier número de a's,'[0-9]*' se asocia con
- cualquier número de dígitos, y '.*' se asocia con cualquier cosa.
-
-* Las expresiones regulares son sensibles a las mayúsculas/minúsculas, pero
- puedes utilizar una clase caracter para asociar ambos casos si los deseas. Por
- ejemplo, '[aA]' coincide tanto con la letra a minúscula como con la letra A
- mayúscula y '[a-zA-Z]' coincide con cualquier letra en cualquier modo
- mayúscula/minúscula.
-
-* El patrón se asocia si ocurre en cualquier lugar dentro del valor a ser
- probado (los patrones SQL coinciden sólo si se asocian con el valor
- completo).
-
-* Para anclar un patrón de manera que se busque la coincidencia bien al comienzo
- o bien al final del valor a ser comprobado, usa '^' al comienzo del patrón o
- '$' al final del patrón, respectivamente.
-
-Para demostrar cómo funcionan las expresiones regulares, las consultas LIKE
-mostradas antes son reescritas debajo para usar REGEXP:
-
-Para buscar nombres que comiencen por "b", usa '^' para buscar la coincidencia
-al comienzo del nombre y '[bB]' para buscar la asociación tanto con la b
-minúscula como con la b mayúscula:
-
-mysql> SELECT * FROM mascota WHERE nombre REGEXP "^[bB]";
-+--------+-------------+---------+------+------------+------------+
-| nombre | propietario | especie | sexo | nacimiento | muerte |
-+--------+-------------+---------+------+------------+------------+
-| Bluffy | Harold | gato | f | 1993-02-04 | NULL |
-| Buffy | Harold | perro | f | 1989-05-13 | NULL |
-| Bowser | Diane | perro | m | 1989-08-31 | 1995-07-29 |
-+--------+-------------+---------+------+------------+------------+
-
-Para buscar nombres que terminen por "fy", usa "$" para buscar la coincidencia
-al final del nombre:
-
-mysql> SELECT * FROM mascota WHERE nombre REGEXP "fy$";
-+--------+-------------+---------+------+------------+--------+
-| nombre | propietario | especie | sexo | nacimiento | muerte |
-+--------+-------------+---------+------+------------+--------+
-| Bluffy | Harold | gato | f | 1993-02-04 | NULL |
-| Buffy | Harold | perro | f | 1989-05-13 | NULL |
-+--------+-------------+---------+------+------------+--------+
-
-Para buscar nombres que contengan una "w", utiliza "[wW]" para buscar la
-asociación tanto en mayúsculas como minúsculas:
-
- mysql> SELECT * FROM mascota WHERE nombre REGEXP "[wW]";
-+----------+-------------+---------+------+------------+------------+
-| nombre | propietario | especie | sexo | nacimiento | muerte |
-+----------+-------------+---------+------+------------+------------+
-| Claws | Gwen | gato | m | 1994-03-17 | NULL |
-| Bowser | Diane | perro | m | 1989-08-31 | 1995-07-29 |
-| Whistler | Gwen | pájaro | NULL | 1997-12-09 | NULL |
-+----------+-------------+---------+------+------------+------------+
-
-Dado que un patrón de una expresión regular se asocia si ocurre en cualquier
-lugar del valor, no es necesario poner un caracter comodín en ningún lado del
-patrón para conseguir que se asocie con el valor completo como harías si usaras
-un patrón SQL.
-
-Para buscar nombres conteniendo exactamente cinco caracteres, usa "^" y "$" para
-asociar el comienzo y el final de un nombre, y cinco instancias de "." entre
-ellos:
-
-mysql> SELECT * FROM mascota WHERE nombre REGEXP "^.....$";
-+--------+-------------+---------+------+------------+--------+
-| nombre | propietario | especie | sexo | nacimiento | muerte |
-+--------+-------------+---------+------+------------+--------+
-| Claws | Gwen | gato | m | 1994-03-17 | NULL |
-| Buffy | Harold | perro | f | 1989-05-13 | NULL |
-+--------+-------------+---------+------+------------+--------+
-
-También podrías haber escrito la consulta anterior usando el operador '{n}'
-"repetir n veces":
-
-mysql> SELECT * FROM mascota WHERE nombre REGEXP "^.{5}$";
-+--------+-------------+---------+------+------------+--------+
-| nombre | propietario | especie | sexo | nacimiento | muerte |
-+--------+-------------+---------+------+------------+--------+
-| Claws | Gwen | gato | m | 1994-03-17 | NULL |
-| Buffy | Harold | perro | f | 1989-05-13 | NULL |
-+--------+-------------+---------+------+------------+--------+
-
-
-8.3.4.8 Contando filas
-=======================
-
-Las bases de datos son usadas a menudo para responder a la pregunta, "¿cuantas
-veces aparece un determinado tipo de datos en una tabla?". Por ejemplo, podrías
-querer saber cuántas mascotas tienes, o cuántas mascotas tiene cada propietario,
-o podrías querer realizar varios tipos de censos respecto a tus animales.
-
-Contar el número total de animales que tienes es lo mismo que preguntar
-"¿cuántas filas hay en la tabla mascota?", dado que hay sólo una fila por
-mascota. La función COUNT() cuenta el número de resultados no-NULL , así pues,
-la consulta a realizar para contar el número de animales tiene la siguiente forma:
-
-mysql> SELECT COUNT(*) FROM mascota;
-+----------+
-| COUNT(*) |
-+----------+
-| 9 |
-+----------+
-
-Antes, conseguiste los nombres de las personas que poseen una mascota. Puedes
-usar COUNT() para averiguar cuántas mascotas tiene cada propietario:
-
-mysql> SELECT propietario, COUNT(*) FROM mascota GROUP BY propietario;
-+-------------+----------+
-| propietario | COUNT(*) |
-+-------------+----------+
-| Benny | 2 |
-| Diane | 2 |
-| Gwen | 3 |
-| Harold | 2 |
-+-------------+----------+
-
-Observa el uso de GROUP BY para agrupar todos los registros de cada
-propietario. Si no lo hubiéramos puesto, todo lo que conseguirias sería un
-mensaje de error:
-
-mysql> SELECT propietario, COUNT(propietario) FROM mascota;
-ERROR 1140: Mixing of GROUP columns (MIN(),MAX(),COUNT()...) with no GROUP
-columns is illegal if there is no GROUP BY clause
-
-COUNT() y GROUP BY son útiles para la caracterización de tus datos de varias
-formas. Los siguientes ejemplos muestran difentes maneras para realizar
-operaciones de censo animal.
-
-Número de animales por especies:
-
-mysql> SELECT especie, COUNT(*) FROM mascota GROUP BY especie;
-+-----------+----------+
-| especie | COUNT(*) |
-+-----------+----------+
-| gato | 2 |
-| hamster | 1 |
-| pájaro | 2 |
-| perro | 3 |
-| serpiente | 1 |
-+-----------+----------+
-
-Número de animales por sexo:
-
-mysql> SELECT sexo , COUNT(*) FROM mascota GROUP BY sexo;
-+------+----------+
-| sexo | COUNT(*) |
-+------+----------+
-| NULL | 1 |
-| f | 4 |
-| m | 4 |
-+------+----------+
-
-(En este resultado, NULL indica "sexo desconocido")
-
-El número de animales por combinación de especies y sexo:
-
-mysql> SELECT especie , sexo, COUNT(*) FROM mascota GROUP BY especie, sexo;
-+-----------+------+----------+
-| especie | sexo | COUNT(*) |
-+-----------+------+----------+
-| gato | f | 1 |
-| gato | m | 1 |
-| hamster | f | 1 |
-| pájaro | NULL | 1 |
-| pájaro | f | 1 |
-| perro | f | 1 |
-| perro | m | 2 |
-| serpiente | m | 1 |
-+-----------+------+----------+
-
-No necesitas recuperar una tabla completa cuando uses COUNT(). Por ejemplo, la
-consulta anterior, cuando se realiza sólo sobre perros y gatos, se escribe así:
-
-mysql> SELECT especie , sexo, COUNT(*) FROM mascota
- -> WHERE especie = "perro" OR especie = "gato"
- -> GROUP BY especie, sexo;
-+---------+------+----------+
-| especie | sexo | COUNT(*) |
-+---------+------+----------+
-| gato | f | 1 |
-| gato | m | 1 |
-| perro | f | 1 |
-| perro | m | 2 |
-+---------+------+----------+
-
-O, si quieres conocer el número de animales por sexo sólo para animales de sexo
-conocido:
-
-mysql> SELECT especie , sexo, COUNT(*) FROM mascota
- -> WHERE sexo IS NOT NULL
- -> GROUP BY especie, sexo;
-+-----------+------+----------+
-| especie | sexo | COUNT(*) |
-+-----------+------+----------+
-| gato | f | 1 |
-| gato | m | 1 |
-| hamster | f | 1 |
-| pájaro | f | 1 |
-| perro | f | 1 |
-| perro | m | 2 |
-| serpiente | m | 1 |
-+-----------+------+----------+
-
-
-8.3.5 Usando más de una tabla
-===============================
-
-La tabla mascota guarda datos sobre las mascotas que posees. Si quieres guardar
-otra información sobre ellos, como eventos en sus vidas, visitas al veterinario
-o cuándo han tenido hermanos, necesitas otra tabla. ¿Cómo debería ser esta otra
-tabla?
-
-* Deberá contener el nombre de la mascota de tal forma que pudieras saber a qué
- animal corresponde cada evento almacenado en la misma.
-
-* Necesitará una fecha para conocer cuándo ocurrió el evento.
-
-* Necesitará un campo para describir el evento
-
-* Si quieres ser capaz de categorizar los eventos, sería útil tener un campo de
- tipo evento.
-
-Dadas estas consideraciones, la sentencia CREATE TABLE para la tabla "evento" se
-parecería a esto:
-
-mysql> CREATE TABLE evento (nombre VARCHAR(20), fecha DATE,
- -> tipo VARCHAR(15), anotación VARCHAR(255));
-
-Como ocurría con la tabla mascota, es más fácil cargar los registros iniciales
-creando un fichero de texto delimitado por tabuladores conteniendo la
-información:
-
-Fluffy 1995-05-15 parto 4 cachorros, 3 hembras, 1 macho
-Buffy 1993-06-23 parto 5 cachorros, 2 hembras, 3 machos
-Buffy 1994-06-19 parto 3 cachorros, 3 hembras
-Chirpy 1999-03-21 veterinario necesitó enderezamiento de pico
-Slim 1997-08-03 veterinario costilla rota
-Bowser 1991-10-12 perrera
-Fang 1991-10-12 perrera
-Fang 1998-08-28 cumpleaños Se le regala un nuevo juguete de goma
-Claws 1998-03-17 cumpleaños Se le regala un nuevo collar de pulgas
-Whistler 1998-12-09 cumpleaños Primer cumpleaños
-
-
-Carga los registros así:
-
-mysql> LOAD DATA LOCAL INFILE "evento.txt" INTO TABLE evento;
-
-Basándote en lo que has aprendido de las consultas que has ejecutado em la tabla
-mascota, deberías ser capaz de realizar recuperaciones de datos en los registros
-de la tabla "evento"; los principios son los mismos. ¿Pero qué hacer cuando la
-tabla evento no sea suficiente por sí sola de responder a cuestiones que
-podrías llegar a realizar?
-
-Supón que quisieras averiguar las edades de cada mascota al tener cachorros. La
-tabla evento indica cuándo ha ocurrido esto, pero para calcular la edad de la
-madre, necesitas su fecha de nacimiento. Dado que eso está almacenado en la
-tabla mascota, necesitas ambas tablas para la consulta:
-
-mysql> SELECT mascota.nombre , (TO_DAYS(fecha) - TO_DAYS(nacimiento))/365 AS edad, anotación
- -> FROM mascota, evento
- -> WHERE mascota.nombre = evento.nombre AND tipo = "parto";
-+--------+------+----------------------------------+
-| nombre | edad | anotación |
-+--------+------+----------------------------------+
-| Fluffy | 2.27 | 4 cachorros, 3 hembras, 1 macho |
-| Buffy | 4.12 | 5 cachorros, 2 hembras, 3 machos |
-| Buffy | 5.10 | 3 cachorros, 3 hembras |
-+--------+------+----------------------------------+
-
-Existen varios puntos que anotar sobre esta consulta:
-
-* La cláusula FROM lista dos tablas dado que la consulta necesita extraer
- información de las dos.
-
-* Cuando se combina la información de múltiples tablas, necesitas especificar
- cómo pueden ser asociados los registros de una tabla con los registros de la
- otra. Esto es fácil dado que ambas tienen una columna nombre (N.T.: nombre es
- una clave extranjera). La consulta usa la cláusula WHERE para combinar los
- registros de las dos tablas basándose en los valores de nombre.
-
-* Dado que la columna nombre aparece en ambas tablas, debes ser específico sobre
- a qué tabla te refieres cuando estés hablando de esa columna. Esto se realiza
- poniendo el nombre de la tabla como prefijo de la columna.
-
-No necesitas tener dos tablas diferentes para realizar un join. En algunas
-ocasiones es útil realizar un join de una tabla consigo misma, si quieres comparar
-registros de una tabla con otros registros en la misma tabla. Por ejemplo, para buscar
-parejas de sexos entre tus mascotas, puedes enlazar la tabla mascota consigo
-mismo para emaparejar machos y hembras de las mismas especies:
-
-mysql> SELECT p1.nombre, p1.sexo, p2.nombre, p2.sexo, p1.especie
- -> FROM mascota AS p1, mascota AS p2
- -> WHERE p1.especie = p2.especie AND p1.sexo = "f" AND p2.sexo = "m";
-+--------+------+--------+------+---------+
-| nombre | sexo | nombre | sexo | especie |
-+--------+------+--------+------+---------+
-| Fluffy | f | Claws | m | gato |
-| Buffy | f | Fang | m | perro |
-| Buffy | f | Bowser | m | perro |
-+--------+------+--------+------+---------+
-
-
-En esta consulta, especificamos un par de alias para el nombre de las tablas
-y ser capaces así de referirnos a las columnas y saber en todo momento a qué
-instancia de qué tabla se asocia cada referencia de columna.
-
-8.4 Obtener información sobre bases de datos y tablas
-================================================================
-
-¿Qué ocurre si olvidas el nombre de una base de datos o de una tabla, o cuál es
-la estructura de una tabla dada (ejm. : ¿cómo se llaman sus columnas?) MySQL
-soluciona este problema a través de numerosas sentencias que ofrecen información
-sobre las bases de datos y las tablas que soporta.
-
-Ya hemos visto SHOW DATABASES, que lista las bases de datos gestionadas por el
-servidor. Para averiguar qué base de datos está actualmente seleccionada, usa la
-función DATABASE():
-
-mysql> SELECT DATABASE();
-+------------+
-| DATABASE() |
-+------------+
-| zoo |
-+------------+
-
-Si aún no has seleccionado ninguna base de datos, el resultado estará en blanco.
-
-Para averiguar qué tablas contiene la base de datos actual (por ejemplo, cuando
-no estás seguro sobre el nombre de una tabla), usa este comando:
-
-mysql> SHOW TABLES;
-+---------------+
-| Tables in zoo |
-+---------------+
-| evento |
-| mascota |
-+---------------+
-
-Si quieres averiguar la estructura de una tabla, el comando DESCRIBE te será
-útil; muestra información sobre cada columna de una tabla:
-
-mysql> DESCRIBE mascota;
-+-------------+-------------+------+-----+---------+-------+
-| Field | Type | Null | Key | Default | Extra |
-+-------------+-------------+------+-----+---------+-------+
-| nombre | varchar(20) | YES | | NULL | |
-| propietario | varchar(20) | YES | | NULL | |
-| especie | varchar(20) | YES | | NULL | |
-| sexo | char(1) | YES | | NULL | |
-| nacimiento | date | YES | | NULL | |
-| muerte | date | YES | | NULL | |
-+-------------+-------------+------+-----+---------+-------+
-
-Field indica el nombre de la columna, Type es el tipo de datos para la columna,
-Null indica si la columna puede contener o no valores NULL, Key indica si la
-columna está indexada o no, y Default especifica el valor por defecto para la
-columna.
-
-Si tienes índices en una tabla, SHOW INDEX FROM nombre_tabla te mostrará
-información sobre ellos.
-
-8.5 Usando mysql en modo batch
-=================================
-
-En las secciones previas, hemos usado mysql interactivamente para introducir
-consultas y observar los resultados. También puedes ejecutar mysql en modo
-batch. Para realizarlo, escribe los comandos que quieras ejecutar en un fichero,
-después pídele a mysql que lea su entrada desde el fichero:
-
-shell> mysql < fichero-batch
-
-(N.T.: en ocasiones se traduce como fichero por lotes)
-
-Si necesitas especificar parámetros de conexión en la línea de comandos, el
-comando podría parecerse a esto:
-
-shell> mysql -h host -u user -p < fichero-batch
-Enter password: ********
-
-Cuando usas MySQL de esta manera, estás creando un fichero script (de guión), y
-después ejecutando el script.
-
-¿Por qué usar un script? He aquí algunas razones:
-
-* Si ejecutas una consulta repetidamente (digamos, cada día o cada semana), el
- construir un script con esta consulta te permite evitar volver a teclearla
- cada vez que la ejecutes.
-
-* Puedes generar nuevas consultas a partir de consultas ya existentes similares
- simplemente copiando y editando los ficheros script.
-
-* El modo batch puede ser también muy útil cuando estés desarrollando una
- consulta, particularmente para comandos multi-línea o múltiples secuencias de
- comandos de múltiples sentencias. Si cometes un error, no necesitas reescribir
- todo. Símplemente edita el script para corregir el error, y después pídele a
- mysql que lo vuelva a ejecutar.
-
-* Si tienes una consulta que produce resultados muy largos, puedes usar un
- paginador para filtrar esta salida en lugar de ver cómo se desplaza fuera del
- alcance de tu pantalla:
-
-
-shell> mysql < fichero_batch | more
-
-* Puedes redirigir la salida a un fichero para un procesamiento posterior:
-
-shell> mysql < fichero_batch > mysql.out
-
-* Puedes distribuir tu script a otras personas para que puedan ejecutar también
- tus comandos.
-
-* Algunas situaciones no permiten un uso interactivo, por ejemplo, cuando
- ejecutas una consulta como una tarea de cron. (N.T.: cron es un comando UNIX
- que sirve para planificar y ejecutar comandos UNIX en el tiempo). En este
- caso, debes usar el procesamiento por lotes.
-
-El formato de salida por defecto es diferente (más conciso) cuando ejecutas
-mysql en modo batch que cuando lo usas de manera interactiva. Por ejemplo, la
-salida de SELECT DISTINCT especie FROM mascota es la siguiente cuando se
-ejecuta de manera interactiva:
-
-mysql> SELECT DISTINCT especie FROM mascota;
-+-----------+
-| especie |
-+-----------+
-| gato |
-| hamster |
-| pájaro |
-| perro |
-| serpiente |
-+-----------+
-
-Y la siguiente si se ejecuta en modo batch:
-
-especie
-gato
-hamster
-pájaro
-perro
-serpiente
-
-Si quieres obtener el formato de salida del modo interactivo también en modo
-batch, usa mysql -t. Para redirigir a salida estándar los comandos que se están
-ejecutando, usa mysql -vvv.
-
-
-
-8.6 Consultas del proyecto gemelos
-
-En Analytikerna y Lentus, hemos estado realizando el trabajo de campo y sistemas para
-un gran proyecto de investigación. Este proyecto es una colaboración entre el Instituto de
-Medicina Medioambiental en el Karolinska Institutet Stockholm y la Sección en Investigación
-Clínica en Envejecimiento y Psicología en la Universidad del Sur de California.
-
-El proyecto consistió en una parte de selección donde todos los gemelos en Suecia mayores de
-65 años eran entrevistados por teléfono. Los gemelos que reunían ciertos criterios pasaban a la
-siguiente fase. En esta fase posterior, los gemelos que querían participar eran visitados por
-un equipo doctor/enfermera. Algunos de los exámenes incluían exámenes físicos y neuropsicológicos,
-pruebas de laboratorio, neuroimágenes, valoración del estado psicológico, y recopilación de la
-historia familiar. Además, se recogieron datos sobre los factores de riesgo médicos y
-medioambientales.
-
-Puede encontrarse más información sobre los estudios de gemelos en :
-
- http://www.imm.ki.se/TWIN/TWINUKW.HTM
-
-La última parte del proyecto se administra con un interfaz web escrito usando Perl y MySQL.
-Cada noche, todos los datos de las entrevistas son movidos a una base de datos MySQL.
-
-8.6.1 Buscar todos los gemelos no-distribuidos
-
-La siguiente consulta se usa para determinar quién pasa a la segunda parte del proyecto:
-
- select
- concat(p1.id, p1.tvab) + 0 as tvid,
- concat(p1.christian_name, " ", p1.surname) as Name,
- p1.postal_code as Code,
- p1.city as City,
- pg.abrev as Area,
- if(td.participation = "Aborted", "A", " ") as A,
- p1.dead as dead1,
- l.event as event1,
- td.suspect as tsuspect1,
- id.suspect as isuspect1,
- td.severe as tsevere1,
- id.severe as isevere1,
- p2.dead as dead2,
- l2.event as event2,
- h2.nurse as nurse2,
- h2.doctor as doctor2,
- td2.suspect as tsuspect2,
- id2.suspect as isuspect2,
- td2.severe as tsevere2,
- id2.severe as isevere2,
- l.finish_date
- from
- twin_project as tp
- /* For Twin 1 */
- left join twin_data as td on tp.id = td.id and tp.tvab = td.tvab
- left join informant_data as id on tp.id = id.id and tp.tvab = id.tvab
- left join harmony as h on tp.id = h.id and tp.tvab = h.tvab
- left join lentus as l on tp.id = l.id and tp.tvab = l.tvab
- /* For Twin 2 */
- left join twin_data as td2 on p2.id = td2.id and p2.tvab = td2.tvab left join informant_data as id2 on p2.id = id2.id and p2.tvab = id2.tvab
- left join harmony as h2 on p2.id = h2.id and p2.tvab = h2.tvab
- left join lentus as l2 on p2.id = l2.id and p2.tvab = l2.tvab,
- person_data as p1,
- person_data as p2,
- postal_groups as pg
- where
- /* p1 gets main twin and p2 gets his/her twin. */
- /* ptvab is a field inverted from tvab */
- p1.id = tp.id and p1.tvab = tp.tvab and
- p2.id = p1.id and p2.ptvab = p1.tvab and
- /* Just the sceening survey */
- tp.survey_no = 5 and
- /* Skip if partner died before 65 but allow emigration (dead=9) */
- (p2.dead = 0 or p2.dead = 9 or
- (p2.dead = 1 and
- (p2.death_date = 0 or
- (((to_days(p2.death_date) - to_days(p2.birthday)) / 365)
- >= 65))))
- and
- (
- /* Twin is suspect */
- (td.future_contact = 'Yes' and td.suspect = 2) or
- /* Twin is suspect - Informant is Blessed */
- (td.future_contact = 'Yes' and td.suspect = 1 and id.suspect = 1) o
- /* No twin - Informant is Blessed */
- (ISNULL(td.suspect) and id.suspect = 1 and id.future_contact = 'Yes') or
- /* Twin broken off - Informant is Blessed */
- (td.participation = 'Aborted'
- and id.suspect = 1 and id.future_contact = 'Yes') or
- /* Twin broken off - No inform - Have partner */
- (td.participation = 'Aborted' and ISNULL(id.suspect) and p2.dead = 0))
- and
- l.event = 'Finished'
- /* Get at area code */
- and substring(p1.postal_code, 1, 2) = pg.code
- /* Not already distributed */
- and (h.nurse is NULL or h.nurse=00 or h.doctor=00)
- /* Has not refused or been aborted */
- and not (h.status = 'Refused' or h.status = 'Aborted'
- or h.status = 'Died' or h.status = 'Other')
- order by
- tvid;
-
-Algunas explicaciones:
-
-`concat(p1.id, p1.tvab) + 0 as tvid'
- Queremos ordenar por la concatenación de `id' y `tvab' en orden numérico.
- Añadiendo `0' al resultado provocamos que *MySQL* trate el resultado como
- un número.
-
-column `id'
- Esto identifica un par de gemelos. Es una clave en todas las tablas.
-
-column `tvab'
- Esto identifica un gemelo de una pareja. Tiene un valor de `1' ó `2'
-
-column `ptvab'
- Esto es la inversa de `tvab'. Cuando `tvab' es `1' esto es `2', y
- vice versa. Esto existe para ahorrarnos teclear y para hacer más fácil
- la optimización de la consulta a MySQL.
-
-
-Esta consulta demuestra, entre otras cosas, cómo realizar búsquedas en una tabla
-enlazada con la misma tabla a través de un join (p1 y p2). En el ejemplo, ésto
-se usa para comprobar cuándo un gemelo de una pareja murió antes de cumplir 65.
-En caso afirmativo, la fila no es devuelta.
-
-Todo lo anterior existe en todas las tablas con información relacionada con los gemelos.
-Tenemos una clave tanto en id, tvab (todas las tablas) como en id,ptvab (person_data) para
-construir consultas más rápidas.
-
-En nuestra máquina de producción (una UltraSPARC 200MHz), esta consulta devuelve alrededor
-de 150-200 filas y tarda menos de un segundo.
-
-El número actual de registros en las tablas usadas arriba:
-
-Tabla Filas
-
-person_data 71074
-lentus 5291
-twin_project 5286
-twin_data 2012
-informant_data 663
-harmony 381
-postal_groups 100
-
-
-
-
-8.6.2 Mostrar una tabla con el estado de la pareja de gemelos.
-
-Cada entrevista finaliza con un código de estado llamado event. La consulta mostrada
-debajo se usa para imprimir una tabla sobre todas las parejas de gemelos combinadas por evento.
-Esto indica en cuántas parejas ambos gemelos han finalizado, en cuántas parejas
-ha finalizado un gemelo y el otro se rechazó, etc.
-
- select
- t1.event,
- t2.event,
- count(*)
- from
- lentus as t1,
- lentus as t2,
- twin_project as tp
- where
- /* We are looking at one pair at a time */
- t1.id = tp.id
- and t1.tvab=tp.tvab
- and t1.id = t2.id
- /* Just the sceening survey */
- and tp.survey_no = 5
- /* This makes each pair only appear once */
- and t1.tvab='1' and t2.tvab='2'
- group by
- t1.event, t2.event;
-
-
-