,
CAPITULO
B
SES E
s
s
L
Este capítulo usted aprenderá a iniciar y conectarse con MySql asi como a crear y administrar bases de datos a traves de las instruc ciones SOL. Los principales temas de este capítulo son: Iniciar MySql Ingresar a MySql •
Asignar una clave al usuario Root
•
Acceso a la Información Básica El Lenguaje SOL. Administración de Usuarios.
IPHP!I
Desarrollo web con PHP ""..._
_
Iniciar MYSQL Como se explicó en el capítulo anterior, al instalar Xampp usted tendrá ac ceso el servidor Web Apache y los interpretes para lenguajes: PHP y Peri y a la base de datos MySQL.
Después de terminar la instalación se muestran la siguiente ventana:
Completing the XAM PP 1.6.3a Setup Wizard · XAMPP 1.6.3a has been mstelled on your computer. Click Finlsh to dos e this wizard.
1
402
11
________________
__,/Capitulo
3 Base de datos MYSQL
Al hacer clic en Finish se muestra una ventana de felicitaciones.
Según la opción de instalación, al finalizar se muestra en el escritorio Windows un icono para acceder al panel de control del servidor,
del
XAMPP Control Panel
Al instalar Xampp se crea dentro de la carpeta xampp una carpeta llama mysql cuyo contenido es el siguiente:
r;J
•f:J
badup
bin
sqlbench
data
scripts
share
mysql_instal... mysql_unins... resetroot.bat
Dentro de la carpeta Bin se encuentran los ejecutables para administrar MySql.
u 403
1
1 PHP¡¡ll Desarrollo web con PHP "'---------------------
¡
e
j•. .- ~
Atrás
o . 1t; J J)
T
Búsqueda . .
: »
:f~~}:s,r:1~-~~~=~;p~~;y~~l\b!~- --------=-==JtCiti~.L .
1
..
. .
.
my _example my _print_defaults myisam_ftdump myisamchk
L')mysql
..
L')mysql_client_test L')mysql_upgrade L'Jmysqladmin L')mysqlbinlog L')mysqlcheck C'.lmysqld CJmysqld-debug t::'J rnysqld-nt L')mysqldump E:lmysqlimport
' L')my~ql~anager
L')mysqlshow L')mysqltest L')myTest E:lperror L')replace sSt. winmysqladmin @;winmysqladmin ¡gj winmysqladmin. cnt
Para trabajar con MySQL, íngrese al panel de control de Xampp e inicie MySQL haciendo clic en su botón Start como se se muestra en la siguiente ventana:
l<AlIPP Contt:ol Panel Vet:sion 2. S (9. !Iay, 2007) ~indoYs 5.1 Build 2600 Platfo:rm. 2 Set:vice Pack 2 Cut:t:ent Directot:y: c:\xampp Install Dit:ectot:y: c:\xampp Status Check OR Busy ... HySql started [Port 3306]
1140411
________________
___,/Capitulo 3 Base de datos MYSQL
Ingresar a MYSQL Después de iniciar MySQL ingrese ala ventana del D.O.S eligiendo la opción Símbolo del sistema del menú de Inicio.
rm1
Símbolo del sistema
Tambien puede hacer clic en el botón Inicio/Ejecutar y en la ventana que se visualiza escribir: Cmd.
En la ventana del D.O.S ingrese a la carpeta Bin de MySQLcomo se muestra en la siguiente ventana:
:\Documents and Setti ngs\JJ>cd\ :\>Cd
Xampp\MySQL\Bin
:\xampp\mysql\bin>_
La carpeta Bin contiene los ejecutables para ejecutar y administrar MySQL, para visualizarlos puede escribir el comando:
l 405
IPHPll
Desarrollo web con PHP "--.._
_ Dir *.Exe
En la siguiente ventana se muestran los ejecutables para ejecutar y admi nistrar MySQL:
:\xampp\mysql\bin>dir *.exe El volumen de 1 a uní dad C no ti ene etiqueta. El número de serie del volumen es: 70CO-DE90 Directorio
de C :\xampp\mysql\bi n
6/07/2007 01:24 p.m. 6/07/2007 01:24 p.m. J6/07/2007 01:24 p.m. JJ6/07/2007 01: 24 p.m. b6/07 /2007 01: 24 p.m. 6/07/2007 01:24 p.m. 6/07/2007 01:24 p.m. 6/07/2007 01:24 p.m. 6/07/2007 01:24 p.m. 6/07/2007 01:24 p.m. 6/07/2007 01:24 p.m. 6/07/2007 01:14 p.m. 6/07/2007 · 01:24 p.m. . 6/07/2007 01:24 p.m. ·~.J6/07/2007 01:24 p.m. • 6/07/2007 01:24 p.m. 6/07/2007 01:24 p.m. 6/07/2007 01:24 p.m. 6/07/2007 01:24 p.m. 6/07/2007 01:24 p.m . .~ 3/03/2007 11 :52 a.m. 6/07/2007 01:24 p.m. 6/07/2007 01:24 p.m. 6/07/2007 01:24 p.m. 4/04/2005 06:41 p.m. 25 archivos o dirs
1,499,136 comp-err.exe 94, 208 echo. exe 1,826,816 myisamchk.exe 1,724,416 myisamlog.exe 1,748,992 myisampack.exe 1,708,032 n¡yisam_ftdump.exe 2,039,808 mysql.exe 1,990,656 n¡ysqladmin.exe 2,052,096 mysqlbinlog.exe 1,986,560 nr/sqlcheck.exe 8,454,144 mysqld-debug.exe 5,730,304 mysqld-nt.exe 5 , 730, 304 mysq 1 d .. exe 2,035,712 mysqldump.exe 1,982,464 mysqlimport.exe 1,998,848 n¡ysqlmanager.exe 1,982,464 mysqlshow.exe 2,101,248 mysqltest.exe 2, 285, 568 mysql_cl i ent_test. exe 1,544,192 mysql_upgrade.exe 40,960 myTest.exe 1,486,848 my_print_defaults.exe 1,474,560 perror.exe 1,482,752 replace.exe 936,448 winnr/sqladmin.exe 55,937,536 bytes 292,388,864 bytes libres
:\xampp\mysql\bin>
Desde esta carpeta puede ejecutar el archivo mysql para .ingresar al admi nistrador de base de datos. La primera sintaxis que usted puede utilizar para ingresar a MySql es la siguiente: mysql -u Usuario
1
406
1
________________
___,/Capitulo
3 Base de datos MYSQL
El usuario predeterminado de MySql se llama root y en el siguiente ejemplo se ingresa a MySql con dicho usuario:
mysql -u root Como puede observar, este usuario inicialmente no tiene clave y al presionar Enter después de escribir el comando anterior, ingresará a MySql:
:\xampp\mysql\bi
mteysql
-u root Conmands end wi th ; or \g. our MySQL connection id is 2 Server version: 5.0.45-commmity-nt MySQL Conmurri ty Edition <Je 1 come to the MySQL rmrri tor.
or '\h'
for help.
Type '\e'
to clear
(GPL)
the buffer.
El prompt mysql> indica que usted ya ingresó al administrador de base de datos MySQL. Cada comando que escriba en MySQL debe terminar con ; (punto y coma) lo cual indica que ha terminado de escribirlo e inmediata mente MySql lo ejecuta. En el siguiente ejemplo se ha escrito el comando quit que permite salir de MySql.
Asignar una clave al usuario ROOT
Como ya se indicó, el usuario root es el usuario que crea MySql en for ma automática al instalarse y en forma predeterminada no tiene clave. Para asignarle una clave puede utilizar la siguiente sintaxis:
l 407 11
IPHP!I
Desarrollo web con PHP "''
mysqladmin -u usuario password clave La siguiente instrucción le asigna la clave 123 al usuario root: mysqladmin u root password 123
::: : \xampp\nwsq 1 \bi n>nl'jsq1 admin -u root password 123 ~ :\xampp\mysql\bi n>,..
Para ingresar a MySql con el usuario root y su clave asignada escriba la siguiente instrucción Mysql -u root -p con lo cual se le pedirá la clave:
:\xampp\mysql\bi Enter passvord:
n>ITT]'sql -u root -p
Después de digitar la clave ingresará a MySQL:
1
408
!I
/Capitulo
3 Base dedatos MYSQL
:\xampp\mysql\bin>mysql -u root -p Enter pass~ord: *** el come to the MySQL monitor. Comnands end with; or \g. our MySQL connecti on id is 4 · Server version: 5.0,45-community-nt MySQL Community or '\h' for help. Type '\e'
to clear the buff
1.
Si no se ingresa correctamente la clave, se mostrará la siguiente ventana de mensaje: ':>-. .•
:\xampp\trttsql\bin>n~sql -u root -p Enter pass'AOrd: *** ERROR 1045 (28000): Access denied for ES)
Otra forma de ingresar a MySql con la clave asignada es escribiendo la clave inmediatamente después dep (sin ningún espacio) como se muestra en el siguiente ejemplo: ,...1
mys_q_l u_r_o_ot p_1_2_3....,
Acceso a la información básica Después de conectarse a MySql como se muestra en la siguiente venta na, usted, ya puede escribir los comandos para administrar las bases de datos.
n 409 u
llPHP!I
Desarrollo web con PHP '
, :\xampp\mysql\bi n:>mysql -u root -p :Enter passw:lrd: *** elcome to the MySQL monitor. Commands end with; or \g. i our MySQL connection id is 5 Server version: 5.0.45-community-nt MySQL Coinnunity Edition (GPL) or '\h' far help. Type "xc ': to clear the buffer.
La, instrucción Select que se explicará más adelante detalladamente, se puede utilizar juntos con algunas funciones para visualizar la información basica de MySql, como por ejemplo:
U ser() Esta función permite visualizar el nombre del usuario que esta conectado a MySql.
nysql> Select User();
----------------T1 ----------------T 1 root@localhost 1 ----------------T 1 row in set (0.00 sec) 1 User()
Como ya se explicó, el punto y coma (;) le indica a MySql que hemos ter minado de escribir el comando y que lo ejecute. Si presionamos la teda Enter sin escribir el punto y coma, MySql seguirá esperando el comando usando el símbolo>.
!I
41011
________________
__,/Capitulo 3 Base de datos MYSQL
Cuando haya terminado de escribir el comando escriba punto y coma (;)y presione la tecla Enter.
Â> ;
----------------+1 1 User()
----------------+ ----------------+ 1 row in set (0.00 1 root@localhost 1
sec)
rrysql>
Si desea dejar de escribir el comando, escriba los caracteres: \c. Con estos caracteres MySql queda listo para escribir un nuevo comando ignorando el que estaba escribiendo.
Select User ->\e
411
1 .
IPHPI!
Desarrollo web con PHP "-'-----~------------
Version() Esta función permite visualizar la versión de MySql que usted está utilizando:
!nysq l > Sel ect Ver si on ();
k----------------------+
ll Version()
1
k----------------------+ ll 5.0.45-conniunity-nt 1 k----------------------+
j1 row in set (O. 00 sec)
~i ·q·l· -.
t.l·T·Y·
s.
·>··· .. ..
Current_Date Esta función devuelve la fecha del servidor:
sql>
Select Current...Date;
--------------+ 1 Current...Date 1 --------------+ 1 2008-08-22 1 --------------+ row in set (0.00
sec)
Now() Esta función devuelve la fecha y hora del servidor:
a
41211
~··
----------------~/Capítulo
3 Basededatos MYSQL
1iysq 1 > Se 1 ect Nmv(); 1
-----------------~---+ Nmv()
1
---------------------+ 1 2008-08-22 23:09:06 1 ---------------------+ set (0.00 sec)
1 row in
El lenguaje SQL El Lenguaje SQL esta formado por un conjunto de comandos que nos per miten acceder y administrar una base de datos y todos sus objetos. El significado en ingles de SQL es Structured Query Language y en español Lenguaje de Consulta Estructurado. SQL es el lenguaje de consulta universal para bases de datos, es decir, se pueden utilizar también en otros administradores de base de datos como Access, SQL Server, MySQL, etc. Básicamente los coamandos SQL se dividen en dos grupos o categorías según lo que realizan en la base de datos. Lenguaje de Definición de Datos Lenguaje de Manipulación de Datos 1. Lenguaje de Definición de Datos. Llamado también DDL que en ingles significa Data Definition Language. Este tipo de instrucciones SQL permiten crear, modificar y eliminar los ob jetos de una base de datos corno tablas, índices, vistas, etc.
l 413 I
!PHP\I
Desarrollo web con PHP "'-------------------
2. Lenguaje de Manipulación de Datos Llamado también DML que en ingles significa Data Manipulation Langua ge. Este tipo de instrucciones permiten manejar la información almacenada en la base de datos como por ejemplo, agregar registros, actualizarlos, leerlos, etc.
Crear bases de datos C reate Data Base Esta comando permite crear bases de datos en MySql. Su sintaxis es la siguiente: 1 Create DataBase Nombre;
Nombre Es el nombre de la base de datos que desea crear. En el siguiente ejemplo se ha creado una base de datos llamada Empresa.
El mensaje Query Ok significa que la consulta se ha realizado con éxito y la base de datos ya está creada. Si desea visualizar la bases de datos creadas en MySql y confirmar la crea ción de la nueva base de datos puede utilizar el siguiente comando:
!I 414 ll
------.,...------------J/
Capítulo 3 Base de datos MYSQL Show DataBases;
En la siguiente ventana se muestra la ejecución del comando show data bases.
o/SQl> show databases; 1 1 1 1
--------------------+ Database
1
cdcol empresa
1 1
webauth
1
--------------------+ information_schema 1
1 my sq] 1 phpmy adnri n 1 test 1
1 1 1
--------------------+ 7 rows in set (0.19 sec) sq'l» _
Use Esta comando se utiliza para indicar a MySql la base de datos que desea mos utilizar. Su sintaxis es la siguiente: Use Nombre; Nombre Es el nombre de la base de datos que desea activar y utilizar. El comando activa la base de datos Empresa:
415
IPHP!I
Desarrollo web con PHP ' ...
....__
_
Crear tablas Create Table Este comando permite crear tablas dentro de una bases de datos. Su sin taxis es la siguiente:
.-------------Crea te Table Nombre de la Tabla ( Estructura de la Tabla
Dentro de Estructura de la tabla se escribe cada uno de los campos que for marán la nueva tabla con su respetivo tipo de dato y longitud. A continuación se explican los tipos de campos que podemos utilizar al crear una tabla:
Tipos de Datos· Numéricos Tinylnt Permite almacenar datos enteros (sin decimales) con o sin signo. Con signo acepta números entre 128 a, 127 y sin signo entre O a 255. Ocupa 1 byte. Bitó Bool Permite almacenar solo los numeras O y 1. Se puede utilizar como un campo lógico. Smalllnt Tambien acepta numeras enteros con o sin signo. Con signo desde 32768 a 32767 y sin signo entre O y 65'535. Ocupa 2 bytes. Mediumlnt Acepta números enteros con o sin signo. Con signo entre 8.388.608 y 8.388.607 y sin signo entre O y 16777215. Ocupa 3 bytes.
11416
n
_______________
__,/Capitulo
3 Base de datos MYSQL
lnteger o lnt
Acepta números enteros con o sin signo. Con signo acepta valores entre 2147483648 a 2147483647 y sin signo su rango es de O a 4.294.967.295. Ocupa 4 bytes. Biglnt Se utiliza para almacenar numeros enteros con o sin signo. Con signo este tipo de datos acepta valores entre 9.223.372.036.854. 775.808 y 9.223.372.036.854.775.807. Sin signo acepta valores entre O y 18.446.744.073.709.551.615. Ocupa 8 bytes. Float Se utiliza para almacenar números pequeños en coma flotante de precisión simple. El rango es desde 3.402823466E+38 y 1.175494351E38, O y desde 1.175494351 E38 hasta 3.402823466E+38. Ocupa 4 bytes. Double Se utiliza para almacenar números en coma flotante de precisión doble. El rango de valores permitidos es de 1. 7976931348623157E+308 has ta 2.2250738585072014E308 y desde 2.2250738585072014E308 a 1.7976931348623157E+308. Ocupa 8 bytes. Para definir campos numéricos sin signo utiliza la palabra unsigned después de nombre del tipo, ejemplo: Edad integer unsigned;
Tipos de Datos Fecha Date Este tipo de dato permite almacenar fechas entre el 01 de enero del 1001 hasta el 31 de diciembre de 9999. El formato de almacenamiento es de añomesdia. Ocupa 3 bytes. DateTime Se utiliza para almacenar fechas y horas desde el 01 de enero del 1001 con O horas, O minutos y O segundos hasta el 31 de diciembre de 9999 con 417
iPHP!I
Desarrollo web con PHP
°"'------------------
23 horas, 59 minutos y 59 segundos. El formato de almacenamiento es de añomesdia horas:minutos:segundos. Ocupa 8 bytes. TimeStamp Acepta la combinación de fecha y hora. El rango es del 1 de enero de 1970 hasta el 2037. Ocupa 4 bytes. Time Permite almacenar solo horas con el formato HH:MM:SS. Ocupa 4 bytes. Year Permite almacenar sólo el año de una fecha desde 1901 hasta 2155. Ocupa 1 byte.
Tipos de Datos Cadena Char Este tipo de dato permite almacenar de O a 255 caracteres de longitud fija. Varchar Permite almacenar de O a 255 caracteres de longitud variable. Texto Blob Este tipo de dato permite almacenar hasta 65535 caracteres de longitud. MediumBlob
o MediumText
Este tipo de dato permite almacenar hasta 16.777.215 caracteres de longitud LongBlob o LongText: Este tipo de dato permite almacenar hasta 4.294.967.295 caracteres de longitud. La siguiente instrucción crea dentro de la base de datos Empresa la tabla Clientes en forma simple, es decir, sin clave primaria.
,. ' 418 ji~ i
1.·.1
________________
__,/capitulo
3 Base de datos MYSQL
Create Table Clientes
e
Codigo Char(6), Nombre Varchar(SO), Edad Tinyint, Sexo Char (1) > ) ;_ -> -> -> >
Después de escribir el punto y coma (;) y presionar Enter se crea la tabla:
nysql> Create Table Clientes > (
Codigo Char(6), -> Nombre Varchar(SO), > Edad Ti ny i nt, > Sexo Char(l) ->
> ) ;
uery OK, O rows affected (0.06 sec)
Show Tables Este comando muestra las tablas de la base de datos activa.
-------------------+1 -------------------+ 1 row in set (0.00 sec) 1 clientes
nysql>
Eliminar tablas La instrucción Drop Table permite eliminar tablas de una base de datos. Su sintaxis es:
l 419 1
ÍPHP!I
Desarrollo web con PHP '------------------
Drop Table Nombre de la Tabla;
La siguiente instrucción elimina la tabla Clientes:
'sql> Drop Table Clientes; uery OK, O rows affected (0.03 sec) uysql > ..
La instrucción Drop Table elimina físicamente las tablas y registros que contiene, por eso, tenga mucho cuidado de no eliminar tablas que ya con tienen registros y que son importantes. En la siguiente ventana se ha utilizado el comando Show Tables e indica que la base de datos esta vacia (empty).
Crear clave primaria La clave primaria de una tabla es el campo o conjunto de campos van a identificar en forma única a cada registro. Cuando la clave primaria va estar formada por un campo se puede crear
11
420
11
________________
__,./capitulo
3 Base de datos MYSQL
con solo escribir las palabras Primary Key después de definir el campo. Las siguientes instrucciones de ejemplo crean la tabla Clientes el campo Codigo como su clave primaria.
indicando
Create Table Clientes
e
-> Codigo Char(6) Primary Key, ->Nombre Varchar (50), ->Edad Tinyint, ->Sexo Char(l) -> );
uery OK, O rows affected (0.02 sec)
Otra forma de indicar la clave primaria es escribiendo Primary Key des pués de definir todos los campos y entre paréntesis el campo o campos que formaran la clave primaria. Las siguientes instrucciones crean una tabla llamada Detalle Facturas con los campos NumFactura y CodArticulo como clave primaria.
(reate Tab 1 e Deta11 eF acturas (
NumFactura Char(B), CodArticulo Char(6), Precio Decimal(B,2), > Cantidad Smallint, > Pri mary Key (NumFactura, CodArti culo) -> -> ->
-> );
uery OK, O rows affected (0.09 sec)
Describe Este comando permite visualizar la estructura de una tabla.
JIPHP!I
Desarrollo web con PHP "-'---------------.j
1
.........
Describe Nombre de la Tabla; 1
En el siguiente ejemplo se muestra la estructura de la tabla Clientes:
nysql>
Óescri be Clientes;
--------+----------~--+------+-----+---------+-------+ 1 Field 1 Type 1 Null 1Key1Default1Extra1 --------+-------------+------+-----+---------+-------+ 1 Codi go 1 char(6) 1 NO 1 PRI 1 1 1 1 Nombre 1 Edad 1 Sexo
1 varchar(50) ti nyi nt(4) 1 char(1)
1
1 YES 1 YES 1 YES
1
1
1
1 NULL 1 NULL 1 NULL
1 1 1
--------+-------------+------+-----+---------+-------+ rows in set (0.06 sec)
1 . 1 1
En el siguiente ejemplo se muestra la estructura de la tabla DetalleFactu rasDes: ·
<sq 1 > Descri be Deta 11 eF acturas;
-------------+--------------+------+-----+---------+-------+ 1 Field 1 Type 1 Null 1 Key 1 Default 1 Extra -------------+--------------+------+-----+---------+-------+ 1 NumFactura 1 char(8) 1 NO 1 PRI 1 1
1 CodArti culo 1 Precio 1 Cantidad
1 char(6) 1 decima 1(8,2) 1 smallint(6)
1 NO 1 YES 1 YES
1 PRI 1 1 1 NULL 1 1 NULL
1
1 1
-------------+--------------+------+-----+---------+-------+ rows in. set (0.00 sec)
1
1 1
·I
1
Not Null y Default Al crear una tabla podemos indicar si un campo puede aceptar valores nulos o no y ademas asignarle un valor predeterminado. Las campos que son las clave primaria no aceptan nulos y el resto de campo en forma predeterminada si aceptan valores nulos.
!I
42211
----------------~/capitulo
3 Base dedatos MYSQL
Las siguientes instrucciones crean una tabla llamada Amigos donde el nombre no acepta nulos, y el valor predeterminadodel campo distrito es Chiclayo. ·
nysql > (reate Table .Amigos )
(
-> Codigo Char(3) Primary Key, -> Nombre Varchar(35) Not Null,
->Distrito Varchar(25) Default 'Chiclayo' >)
O rows affected (0.02 sec)
i~;~~~d~===ri~;~~'."~='¡Ñ~iiTK;;To;;;~~¡:;T";:;~~I +. -r- +++++ Codigo 1 char(3) 1 NO 1 PRI 1 1 [ Nombre 1 varchar (3 5) 1 NO 1 1 1 l Distrito 1 varchar(25) 1 YES 1 1 Chiclayo 1 ++++++ ,3 rows in set (0.02 sec)
.•
¡
1 1 1
Modificar estructura de una tabla Alter Table Este comando permite modificar la estructura de una tabla. Su sintaxis depende de lo que deseamos modificar:
l 423 u
iPHP!I
Desarrollo web con PHP "
1. Modificar la definición de un campo. Alter Table Nombre de la Tabla Modify Nombre del Campo Nueva Definición; Ejemplo, si se ha creado la tabla Amigos con la siguiente estructura:
sql > Describe
.Amigos;
----------+-------------+------+-----+----------+-------+ 1 Field 1 Type 1 Null 1 Key 1 Default 1 Extra 1 ----------+-------------+------+-----+----------+-------+ 1 Codigo 1 char(3) 1 NO 1 PRI 1 1 1
1 Nombre 1 Distrito
1 varchar(35) 1 NO 1 varchar (25) 1 YES
1 1
1 1 1 Chie layo 1
----------+-------------+------+-----+----------+-------+ (0.02 sec)
1 1
3 rows in set
Y desea cambiar la definición del campo Nombre a Varchar(50) debe escribir la siguiente instrucción:
nysqb Al ter Table .Amigos · > Modify Nombre Varchar(50); uery OK, O rows affected (O. 03 sec) Records: O Dupl i cates: O ~•1arni ngs: O 11'fsql > _
En la siguiente ventana _se muestra la pueva estructura de la tabla Amigos:
1
424
1
________________
__,/Capitulo
3 Base de datos MYSQL
sql> Describe Amigos;
----------+-------------+------+-----+----------+-------+ 1 Field 1 Type 1 Null 1 Key 1 Default 1Extra1 ----------+-------------+------+-----+---------~+-------+ 1 Codigo 1 char(3) . 1 NO 1 PRI 1 1 1 1 Nombre 1 varchar(SO) 1 Distrito 1 varchar(25)
1 YES 1 YES
1 1
1 NULL 1 1 Chiclayo 1
----------+-------------+------+-----+----------+-------+ sec)
1 1
3 rows in set (0.03
1. Eliminar un campo. Alter Table Nombre de la Tabla Orop Column Nombre del Campo; La siguiente instrucciรณn elimina el campo distrito de la tabla Amigos y luego muestra su nueva estructura.
sql> Alter Table Amigos -> Drop Column Distrito; uery OK, o rows affected (0.02 sec) Records: O Duplicates: O Warnings: O sql> Describe Amigos;
--------+-------------+------+-----+---------+-------+ 1 Field 1 Type 1 Null 1 Key 1 Default 1 Extra --------+-------------+------+-----+---------+-------+ 1 Codigo 1 char(3) 1 NO 1 PRI 1 1 1 Nombre 1 varchar(SO)
1 YES
1
1 NULL
1
--------+-------------+------+-----+---------+-------+ sec)
1
1 1
2 rows in set (0.02
2. Agregar un Campo. Alter Table Nombre de la Tabla Add Definiciรณn del Campo; 11425
11
iPHPll
Desarrollo web con PHP "'
Por ejemplo, la siguiente instrucción agrega el campo Edad a la tabla Amigos.
~sql> Alter Table Amigos -> Add Edad Tinyint; uery OK, O rows affected (0.03 sec) Records: O Dup1 i cates: O 'n1arni ngs: O
La siguiente instrucción muestra la nueva estructura de la tabla Amigos:
sql> Describe Amigos;
--------+~------------+------+-----+---------+-------+ 1 Fiel d 1 Type 1 Nul l 1 Key 1 ·Default 1 Extra --------+-------------+------+-----+---------+-------+ J
Codi go
J
Edad
J
char(3)
J
tinyint(4)
·¡ YES
1 Nombre 1 varchar(50) J
NO
1 YES
J
1 J
PRI
J
1
1 NULL
J
J
1
J
J
1 1
NULL
--------+----------~--+------+-----+---------+-------+
3 rows in set (0.00 sec) sq l »
..
Ingresar registros a una tabla lnsert lnto Esta instrucción permite agregar registros a una tabla Sintaxis: lnsert lnto Nombre de la Tabla (Campos) Values (Valores);
1
426
11
________________
__,/Capitulo
3 Base de datos MYSQL
En Campos debe escribir el nombre de cada uno de los campos que desea llenar separados por una coma. En Valores debe escribir los valores con los cuales desea llenar cada uno de los campos. Cada valor también debe estar separado por una coma. La posición de cada valor debe coincidir con cada campo, por ejemplo, si el primer campo es el Codigo, el primer valor debe ser el codigo, si el segundo campo es Nombre, el segundo valor debe ser el nombre. Debe tener en cuenta que los valores para los campos tipo Datetime como Char y Varchar y similares deben ir entre apóstrofes ("). En el siguiente estructura.
ejemplo
así
se utiliza la tabla Clientes creada con la siguiente
Create Table Clientes (
_,,
Codigo Char(6) Primary Key, Nombre Varchar (SO), .Edad Ti nyi nt, Sexo Char(1) ) ;
OK, O rows affected (0.02
sec)
La siguiente instrucción agrega un registro a la tabla Clientes:
Con la sintaxis básica del comando Select se pueden visualizar los registros de una tablas:
IPHPU
Desarrollo web con PHP "
1 Select * From Nombre de la Tabla; La siguiente instrucción muestra los registros de la tabla Clientes:
--------+---------------+------+-----~+ Nombre 1 Edad 1 Sexo 1 --------+---------------+-~----+------+ 1 000001 1 Jase Castillo 1 32 1 M i --------+---------------+------+------+ 1 Codi go 1
row in
set
(0.01
sec)
Si usted va a llenar todos los campos de una tabla y en el mismo orden que están creados no es necesario escribir los nombres de los campos al ingresar el registro. La siguiente instrucción agrega un registro a la tabla Clientes sin indicar los campos:
Puede utilizar varias lineas para agregar registros:
Insert Into Clientes > Values > > '000003 ' ' -> 'Ana Castañeda', -> 36, -> 'F' > ) ; uery OK, 1 row affected (0.00
e
1142811
sec)
________________
___./Capítulo
3 Base de datos MYSQL
sql> Select * From Clientes;
1 1 1 1
--------+---------------+------+------+ Codi go Nombre Edad Sexo --------+---------------+------+------+ 000001 Jase Castillo 32 M 1
000002 000003
1 1
1
1
Julio Davila Ana Castañeda
1 1 1
1
20 36
1 1
1
1
1
M F
1
--------+---------------+------+------+ 3 rows in set (0.00 sec)
1
Agregar Registros con Valores Nulos En la estructura de la tabla Clientes los campos Nombre, Edad y Sexo permiten ingresar valores nulos.
--------+-------------+------+-----+---------+-------+ Fiel d 1 T)•pe 1 Nul 1 1 Key 1 Def'aul t 1 Extra --------+-------------+------+-----+---~-----+-------+ 1 Codi go 1 char(6) 1 NO 1 PRI 1 1
1
1 1 1
Nombre Edad Sexo
1 1 1
varchar (50) ti nyi nt(4) char(1)
1 1 1
YES YES YES
1 1 1
1 1 1
NULL NULL NULL
1 1 1
--------+-----------~-+------+-----+---------+-------+ in set (0.00 sec)
1 1 1 1 1
En forma predeterminada los campos que no se llenan tomaran el valor nulo. La siguiente instrucción sólo agrega el codigo y nombre de un cliente.
H H 429
i!u
llPHPll
Desarrollo web con PHP
°"''
Si se ha especificado el nombre de un campo y lo desea llenar con el valor nulo debe escribir la palabra Null. En el siguiente ejemplo se agrega un registro con el valor Null en la edad:
.
.
En el siguiente ejemplo se agrega un registro con el valor Null en el campo Sexo:
En el siguiente ejemplo se muestran los registros de la tabla Clientes:
~sql> Select * From Clientes; 1
1 1 1
1 1 1
--------+----------------+------+------+ Codigo Nombre Edad Sexo --------+----------------+------+------+ 000001 Jase Castillo 32 M 1
000002 000003 000004 000005 000006
1 1 1
1 1 1
1
Julio Davila · Ana Castañeda Nancy Vilela Miguel Torres El i as Porti 11 a
430
u
1
1 1 1
20 36 NULL NULL 39
1 1 1
1 1 1
M F NULL M NULL
--------+----------------+------+------+
6 rows in set (0.00 sec)
1
1 1
1
1
1 1 1
1 1 1
____________
___._
_,!Capítulo
3 Base de datos MYSQL
Campos.auto numéricos Los campos auto numéricos son aquellos campos cuyo contenido se va llenando en forma automática con una secuencia de valores numéricos. Para definir un campo Auto numérico en MySql debe escribir Auto_lncrement después de definir el campo. Las siguientes instrucciones crean la tabla Personal con los campos Codigo, Nombre y FecNacimiento. El codigo se define con Auto_lncrement.
ny s q l »
>
Create Table Personal
e
-> Codigo Int Auto_Increment Primary Key, ->Nombre Varchar(30) Not Null, > FecNaci miento Date Not Null > )
j
uery OK, O rows affected (0.00 sec)
En la siguiente ventana se muestra la estructura de la tabla Personal:
sql> Describ~
Personal;
---------------+-------------+------+-----+---------+--------------. --+ 1 Field 1 Type 1 Null 1 Key 1 Default 1 Extra ---------------+-------------+------+-----+-------'---+----------------+ 1 Codigo 1 int(ll) 1 NO 1 PRI 1 NULL 1 auto_increment 1 Nombre 1 varchar(30) 1 FecNacimi ento 1 date
1 NO 1 NO
1 1
1 1
1 1
1 1 · 1 1
---------------+-------------+------+-----+---------+----------------+ (0.02 sec)
3 rows in set
Las siguientes instrucciones agregan 05 registros a la tabla Personal.
n 431 u
IPHP!I
Desarrollo web con PHP "-.,,_
_
nys q] > > -> +>
Insert Into Personal (Nomor-e, FecNacimi ento) Val ues ('Julio', '1980-06-30'), ('Ana', '1970-12-31 '), -> ('Teresa', '1985-06-05'), -> ('Cesar', '1988-04-19'), > (' Mi g u e 1 19 9 5 -O 8-15 ' ) ; uery OK, 5 rows affected (O. 00 sec) Records: 5 Dup l i cates: O ~'Jarni ngs: O r ,
'
·En la siguiente ventana se muestra los registros de la tabla Personal donde se puede observar que sin ingresar el codigo del personal, MySql lo asignó en forma automática:
nysql > Se 1 ect ,,. From Persona 1; 1 1 1
1 1
1
--------+--------+---------------+ Codigo 1 Nombre 1 FecNacimiento --------+--------+---------------+ 1 2 3 4 5
1
1
1 1
1
Julio Ana Teresa Cesar Migue 1
1 1
1 1
1
1980-06-30 1970-12-31 1985-06-05 1988-04-19 1995-08-15
--------+--------+---------------+
5 rows in set
1 1 1
1 1 1
(0.00 sec)
Agregar Registros desde Archivos Otra forma de agregar registros a una tabla es el comando Load Data.
1143211
________________
_,/capitulo
3 Base de datos MYSQL
load Data Este comando permite cargar los datos que se encuentran almacenados en un archivo de textos hacia una tabla de una base de datos MySql. En forma predeterminada MySql utiliza como separador de cada campo el tabulador. La sintaxis para cargar datos desde un archivo de textos hacia tablas es la siguiente: 1 Load Data lnFile 'Archivo de Texto' lnto Table Tabla 1 Para esta sintaxis el archivo de texto debe estar grabado en la carpeta de la base de datos que esta utilizando.
~ die~t~~.MVD igi dientes.MVI ig¡db.opt tl. detallefacturas igi detallefacturas, MVD ig¡ detallefacturas.MVI tl. per
¡g¡per.Mv6 ¡g¡per.MVI tl. persona[ ig¡ personal.MVD ig¡ personal.MVI ¡'fil Datos
..s------
Para nuestro ejemplo el archivo se llama Datos.Txt y está grabado en la carpeta de la base de datos Empresa: El archivo Datos.Txt contiene la .lnformaclón para llenar la tabla Amigos cuya estructura es la siguiente:
l 433 H
!IPHP!I
Desarrollo web con PHP °'\......_
sql> Describe
_
Amigos;
-----~--+-------------+------+-----+---------+-------+ 1 Field 1 Type 1 Null 1 Key 1 Default 1 Extra 1 --------+-------------+-~----+-----+---------+-------+ 1 Ccidi go 1 charO) 1 NO 1 PRI 1 1 1
1 1
Nombre Edad
1 1
varchar(SO) ti nyi nt(4)
1 1
YES YES
1 1
1 1
NULL NULL
1 1
--------+-------------+------+~----+---------+-------+ (0.00 sec)
1 1
3 rows in set sql> _
El contenido del archivo Datos.Txt es el siguiente:
~poi ;~~.~ru. 002 003 004' 005 006 007 008 009 010
Juan Jose Ana Maria Maria Jose Jose Maria carmen Luz Jose Miguel carlas usvaldo osear Daniel rsidora Maria Luisa
19 10 22 45 56 48 54 53 34
Como puede observar, el contenido del archivo Datos.Txt se muestran utilizando el bloc de notas y cada columna esta separada por una tabula ción. La tabla Amigos no tiene ningun registro:
ll .~
434 lii 1
------------'-------..........,/Capitulo
3 Basede datosMYSQL
El comando para cargar los datos desde el archivo Datos.Txt hacia la tabla Amigos es el siguiente: Load Data lnFile 'Datos.Txt' lnto Table Amigos;
Despues de ejecutar el comando el contenido de la tabla Amigos es:
sqb
Select
* From Amigos;
--------+----------------+------+ 1 Codi go 1 Nombre 1 Edad --------+----------------+------+ 1 001 1 Juan Jose 1 12
1
1 004 1 005 1 006 1 007 1 008 1 009 1 010
1 1 1 1 1 1
1 002 1 003
1 Ana Maria 1 Maria Jose 1 Jose Maria 1 Carmen .Luz 1 Jose Miguel 1 Carlos Usvaldo 1 Osear Daniel 1 Isidora 1 Mari a Luisa
1 1 1
1 1 1 1 1 1
19 10 22 45
56
48 54
O
34
--------+----------------+------+ (0.00 sec)
1 1 1 1
10 rows in set
Si cada campo estรก separada por un caracter distinto a una tabulaciรณn se debe utilizar Fields Terminated dentro de la sintaxis de Load Data. Fields Terminated
/
El parรกmetro Fields Terminated se utiliza para indicar el carรกcter por el cual estรก separado cada uno de los campos del archivo de textos.
u 435 fl
'1 ¡ hPHPI
1
Desarrollo web con PHP "'
1 Fields Terminated By 'Caracter' Ejemplo, si el contenido del archivo de textos Datos.Txt es el siguiente donde cada campo esta separado por una coma (,)
001,Juan Jose,12 002,Ana Maria,19 003,Maria Jose,10 004,Jose Maria,22 005,carmen Luz,45· -006,Jose Miguel,56 007,carlos usvaldo,48 008,oscar Daniel,54 009,Isidora,53 . 010,Maria Luisa,34
La instrucción para cargar los datos del archivo de textos en la tabla Ami gos es: Load Data lnFile 'Datos.Txt' lnto Table Amigos Fields Terminated By','; Si la tabla Amigos ya contiene registros puede eliminarlos antes de cargarlo los datos, escribiendo la siguiente instrucción: Delete From Amigos; Si cada campo está encerrado entre algun caracteres, como por ejemplo comillas ("") se debe utilizar dentro de Fields el parámetro Enclosed. Enclosed Se Útiliza dentro de Fields para indicar el carácter con el cual está encer rado cada campo. Enclosed By 'Caracter'
u 43611
.,
____________
_,,_ __
__,./Capitulo
3 Base de datos MYSQL
~jemplo, si cad~uno de los campos está encerrado entrecomillas radazo por una coma corno se muestra en el siguiente ejemplo:
"001", "002", "003", "004", "005", "006", "007", "008", ''009", "010",
y sepa
"Juan Jase", "12" "Ana Mari a", "19" "Maria Jase", "10" "Jos e Mari a", "22" "carmen Luz", "45" "Jase Miguel", "56" "car 1 os usva 1 do"; "4 8" "osear Daniel"," 54" '.'rsidora",."5.3" "Mari a Luisa"
La instrucción para cargar. los datos del archivo de textos en la tabla Ami gos es: Load Data lnFile 'Datos.Txt' lnto Table Amigos Fields Terminated By',' Enclosed By '"'; Si ,~I archivo de textos no se encuentra grabado en la carpeta predeter minada, .es decir, en la carpeta de la de la base de datos del servidor, se debe especificar la ruta. Ejemplo, si el archivo de datos esta grabado en la carpeta Archivos dentro de Data de MySql.
hu
437
n I'
!IPHPU
Desarrollo web con PHP '~
..,.,
001 002 003 004 005 006 007 008 009 010
Documento de texto 1 K8
Juan Jase Ana Maria Maria Jase Jose Maria carmen Luz Jose Miguel carlas usvaldo osear Daniel rsidora Maria Luisa
12 19 10 22 45 56 48 54 53 34
La instrucción para cargar los datos del archivo Datos.Txt en la tabla alum nos es la siguiente: Load Data lnFile 'Archlvo/Datos.Txt' lnto Table Amigos;
11
438
1
e
____________
-:..;...··-..,..-......,----'lcapítulo3 Base de datos MYSQL
La instrucción select Esta instrucción es una de las más utilizadas porque permite leer información de las base de datos. Su sintaxis es básicas es: Select * From Nombre de la Tabla; Esta sintaxis se utiliza para leer el contenido de una tabla. En Nombre de la Tabla debe escribir la tabla de la cual desea leer su contenido. Por ejemplo, la siguiente instrucción muestra toda la información de la tabla Amigos. Select * From Amigos;
1 1 1 1 1 1 1 1 1 1 1
--------+-~--------------+------+ Codigo 1 Nombre 1 Edad 1 --------+----------------+------+ 001 002 003 004 005 006 007 008 009 010
1 1 1 1 1 1 1 1 1 1
Juan Jose Ana Mari a Maria Jose Jose Maria Carmen Luz Jose Miguel Carlos Usvaldo Osear Daniel Isi dora Maria Luisa
1 1 1 1 1 1 1 1 1 1
12 19 10 22 45 56 48 54 O 34
--------+----------------+------+
1 1 1 1 1 1 1 1 1 1
10 rows in set (0.00 sec)
11 439 ll
IPHPll
Desarrollo web con PHP ""
Mostrar Sólo Algunos Campos El asterisco (*) que se utiliza en la instrucción Select le indica al Servidor que se desea leer todos los campos de la tabla. En lugar del asterisco usted puede escribir los nombres de campos sepa rados por una coma cuya información desea visualizar. Ejemplos: 1. La siguiente instrucción muestra sólo el nombre y edad de todos los ami gos. Select Nombre,Edad From Amigos;
sql s select
Nombre,Edad
----------------+------+ 1 Nombre 1 Edad 1 ----------------+------+
1 1 1 1 1 1
1 1 1 1
Juan Jase Ana Mari a Maria Jase Jose Mari a Carmen Luz Jase Miguel Carlos Usval do Osear Dani.e 1 !si dora Mari a Luisa
1 1 1 1 1 1
1 1 1 1
12 19 10 22 45 56 48 54 O 34
----------------+------+
10 rows
in set
From Amigos;
1 1 1 1 1 1
1 1 1 1
(0.00 sec)
La siguiente instrucción muestra todos los campos de la tabla Clientes: Select * From Clientes;
1144011
________________
__,/Capitulo
3 Base de datos MYSQL
sql> select * From Clientes;
1 1
1 1 1
1 1
--------+----------------+------+------+ Codigo Nombre Edad Sexo --------+----------------+------+------+ 1
1
1
1
000001 1 Jase Castillo 1 32 1 M 1 000002 1 Julio Davila 1 20 1 M 1 000003 1 Ana Castañeda 1 36 1 F 1 000004 1 Nancy Vilela 1 NULL 1 NULL 1 000005 1 Miguel Torres 1 NULL 1 M 1 000006 1 Elias Portilla 1 39 1 NULL 1
--------+----------------+------+------+
6 rows in set (0.00 sec)
t.a siguiente instrucción sólo muestra el nombre y sexo de los clientes:
Select Nombre,Sexo From Clientes;
sql> select Nombre,Sexo
----------------+------+ 1 Nombre 1 Sexo 1 ----------------+------+
From Clientes;
Jase Castillo 1 M 1 Julio Davila 1 M 1 1 Ana Castañeda 1 F 1 1 Nancy Vi lela 1 NULL 1 1 Miguel Torres 1 M 1 1 Elias Portilla 1 NULL 1 1
1
----------------+------+
6 rows in set (O. 00 sec) .
l 441 11
IPHPll
Desarrollo web con PHP "--------------------
Mostrar Campos Calculados Los campos calculados son los campos que no están creados en la tabla pero que se pueden obtener o calcular con las campos que si están en la tabla. Un ejemplo de campo calculado es el año de nacimiento que no esta en la tabla Amigos pero se puede obtener a partir de la Edad que si se encuentra en la tabla (Año de la fecha del sistema Edad). Para desarrollar el ejemplo debe conocer las siguientes funciones:
CurDate Esta función devuelve la fecha del servidor.
------------+ 1 ------------+ 1 1 2008-08-27 ------------+ 1 set (O. 00 1 Curdate()
sec)
Year Esta función devuelve el año de una fecha. La siguiente instrucción devuelve el año de la fecha del servidor:
sq l > Se lect
Year (Curdate ());
-----------------+ 1 1 Year(Curdate()) -----------------+ 1 2008 1
1144211
________________
_,/Capitulo
3 .Base de datos MYSQL
En el siguiente ejemplo se muestra el nombre, la edad y el año de nacimiento de todos los amigos, · ·
sql > Sel ect Nombre,Edad, Year(Curdate())
- Edad From Amigos;
Ana Mari a Mari a Jose Jose Mari a Carmen Luz Jose Miguel Carlos Usvaldo Osear Daniel Isi dora Maria Luisa
1989 1998 1986 1963 "" 1952 1960 1954 2008 1974
----------------+------+------------------------+ 1 Nombre 1 Edad 1 Year(Curdate()) - Edad 1 ----------------+------+------------------------+ 1 Juan Jose 1 12 1 1996 1 1 1
1 1 1 1 1 1 1
1 1
1 1 1 1 1 1 1
19 10 22 45 56 48 54 O 34
1 1
1 1 1 1 1 1 1
----------------+------+------------------------+ rows in set (0.00 sec)
1 1
1 1 1 1 1 1 1
Para asignar un título a un campo calculado se utiliza As como se muestra en el siguiente ejemplo:
sql> Select Nombre,Edad,Year(Curdate()) - Edad As Nac From Amigos;
----------------+------+------+ ¡ Nombre 1 Edad 1 Nac 1 ----------------+------+------+ Juan Jose 12 1996 1 1 1
1 1
1 1 1 1
1
Ana Maria Maria Jose Jose Maria Carmen Luz Jose Miguel Carlos Usvaldo Osear Daniel Isidora Mari a Luisa
1 1 1
1 1
1 1 1
.¡
1
19 10 22 45 56 48 54 O 34
1 1 1
1 1
1 1 1 1
1
1989 1998 1986 1963 1952 1960 1954 2008 1974.
1
1
1
1 1 1 1
1
----------------+------+------+ 10 rows in set (0.00 sec)
Los siguientes ejemplos utilizan la tabla Artículos creada con la siguiente estructura:
!1443
11
ilPHP!I
Desarrollo web con PHP "'""
Create Table Articulos (
Codi go Char(3) Primary Key, Nombre VarChar(20), .,.> Costo üec imel (8, 2), -> Precio Decimal (8,2), -> Stock Mediumint > ->
-> );
uery OK, O rows affected (O.OS sec)
Algunos registros de ejemplo son:
sql> Select * From Articulas;
--------+--------+----~--+--------+-------+ 1 Codigo 1 Nombre 1 Costo 1 Precio 1 Stock --------+-~------+-------+--------+------~+
1 1 1 1
001 002 003 004
1 1 1 1
cáfe
Arroz Trigo Maiz
1 1 1 1
2.00 4.00 8.00 3 .oo
1 1 1 1
4.0o 5.00 12.00 5 .00
1 1 1 1
10 5
6
4
--------+--------+-------+--------+-------+ in set
(0.00
1 1 1 1 1
sec)
La siguiente instrucción muestra de cada articulo, el nombre, costo, precio y el campo calculado utilidad (precio costo). Select Nombre,Costo,Precio,Precio
1144411
Costo As Utilidad From Articules;
________________
ny s q l >
_,/capitulo
3 Base de datos MYSQL
Se 1 ect Nombre, Costo, Precio, Precio
--------+-------+--------+----------+ 1 Nombre 1 Costo 1 Precio 1 Utilidad --------+-------+--------+----------+ Cafe 2.00 4.00 2.00 1 1
l 1
Arroz 1 Trigo 1 Maíz
1 1
1 l
4.00 8.00 3.00
1
1
1
5.00 1 12.00 1 5.00 1
1.00 4.00 2.00
--------+-------+--------+----------+ rows in set (0.00 sec)
1 1 1
l 1
La siguiente instrucción muestra de cada articulo, el nombre, costo, precio normal y el campo calculado precio al publico (precio menos el 10%). Select Nombre,Costo,Precio,Precio (Precio* 10) /100 As PrecioPub From Articulas;
¡ysql > Sel ect Nombre,Costo, Precio, Precio rti culos; 1 1 1
\
f '!'
1 1
--------+-------+--------+-----------+ Nombre 1 Costo 1 Precio 1 PrecioPub --------+-------+--------+-----------+ Cafe 2.oo 4.0o 3.600000 Arroz Trigo Maíz
l
1
1 1
l
4.00 8.00 3.00
1
1 1
1
5.00 12.00 5.00
1
1 1
4.500000 10.800000 4.500000
--------+----~--+--------+-----------+ rows in set (0.00 sec)
1 1 1
1 1
En la siguiente instrucción se muestra por separado el 10% de descuento que se utiliza en el ejemplo anterior. Select Nombre,Costo,Precio,Precio * 10/100 As Descuento, Precio (Precio * 1 O) /100 As PrecioPub From Articulas;
ll 445 u
IPHP! 1
Desarrollo web con PHP "'
1 1
--------+-------+--------+-----------+-----------+ Nombre Costo Precio Descuento PrecioPub --------+---~---+--------+--------~--+-----------+ Cafe 2.00 4.00 0.400000 3.600000
1 1 1
1
1
1
Arroz Trigo Maíz
1 1 1
1
1
4.00 8.00 3.00
1 1 1
1
1
5.00 12.00 5.00
1 1 1
1
0.500000 1.200000 0.500000
1 1 1
4.500000 10.800000 4.500000
1 1 1 1 1
La siguiente instrucción muestra el nombre, costo, precio, stock y los campos calculados: stock valorizado según el costo (costo* stock), stock valorizado según el precio (precio * stock) y utilidad por articulo (precio costo) * stock: Select Nombre,Costo,Precio,Stock,Costo *Stock As SVC,Precio *Stock As SVP, (Precio Costo)* Stock As Utilidad From Articules;
lf Esta función se puede utilizar dentro Ele Select para realizar una condición y obtener asi un campo calculado. Su sintaxis es: ¡¡ 446 !~
n '"
-----------------J'/
Capitulo 3 Base de datos MYSQL
lf (Condicion,lnstrucción 1, lnstrucción2 ) Condición Es la pregunta que desea realizar dentro de la instrucción Select,
Instrucción 1 Se ejecuta cuando la respuesta a la condición es verdad.
lnstrucción2 Se ejecuta cuando la respuesta a la condición es falsa. La siguiente instrucción de ejemplo muestra de la tabla Amigos el nombre, edad y un mensaje indicand_o si es menor o mayor de edad. Este ultimo campo es calculado con la funcion lf. Select Nombre,Edad,lf (Edad>17,'Mayor','Menor')
sql > Sel ect
Nombre, Edad, If (Edad>17, 'Mayor',
----------------+-~----+-------+ 1 Nombre 1 Edad 1 Obs 1 ----------------+-------r-------+ 1 12 1 Menor
1 Juan Jos e 1 Ana Mari a 1 Mari a Jase 1 Jase Mari a 1 Carmen Luz 1 Jase Miguel 1 Carlos Usvaldo 1 Osear Dani e.l 1 Isidora 1 Mari a Luisa
1
1
1 1
1 1 1 1 1
19 10 22 45 56 48 54 O 34
1 Mayor 1 Menor 1 Mayor 1 Mayor 1 Mayor 1 Mayor l Mayor 1 Menor 1 Mayor
----------------+------+-------+ (0.02 sec)
'Menor')
As Obs From Amigos
As Obs From Ami gas;
1 1
1
1 1
1 1 1 1 1
10 rows in set
n 44111
llPHPll
Desarrollo web con PHP "'
lfNull Esta función se utiliza para preguntar si un campo o expresión contiene un valor Nulo. Su sintaxis es:
l lfNull(Expresio,lnstrucción) 1 Expresión Es la expresión que desea preguntar si contiene un valor Nullo. Tambien se puede especiflcar el nombre del campo de una tabla.
Instrucción Es la instrucción que MySql debe ejecutar si la expresión contiene un valor Nulo. La siguiente instrucción de ejemplo muestra el nombre y sexo de la tabla Clientes. Si el contenido del campo sexo es Null se muestra el mensaje
No Especificado.
Sel ect > Nombre, > IfNul l (Sexo, 'No Especificado') As Sexo > From Clientes;
1
----------------+-----------------+ Nombre 1 Sexo ----------------+-----------------+
1 Jose Casti 11 o 1 J u 1 io D avi l a 1 1 1 1
Ana Castañeda Nancy Vi 1 el a Miguel Torres Elias Portilla
1 1 1 1 1
M F No Es.peci fi cado M No Especificado
------------~---+-----------------+ (0.00 sec)
6 rows in set
1144811
1 M
1
1
1 1 1 1 1
.,,..'/capitulo
3 Base dedatos MYSQL
Case When Esta instrucción se puede utilizar dentro de Select para obtener campos calculados mediante condiciones. Su sintaxis básica es: Case When Condicion Then Instrucción 1 Else lnstrucción2 End
La instrucción 1 se ejecuta cuando la respuesta a la condición es verdad y la instrucción2 cuando es falsa. La siguiente instrucción de ejemplo muestra de la tabla Amigos el nombre, edad y un mensaje indicando si es menor o mayor de edad. Este ultimo campo es calculado con Case When. Select Nombre,Edad,Case When Edad<18 Then 'Menor' Else 'Mayor' End FromAmigos
1
1 Juan Jose 1 Ana Mari a 1 Mari a Jose
1 Jose María 1 Carmen Luz 1 Jose Miguel 1 Carlos Usvaldo 1 Osear Daniel 1 Isídora 1 Mari a Luisa
12. 19 10 22 45 56 48 54
o
34
Menor Mayor Menor Mayor Mayor Mayor Mayor Mayor Menor Mayor
10 rows in set
ll 449 u
llPHP!I
Desarrollo web con PHP "'
La siguiente instrucción es similar al anterior, se diferencia porque aqui se asigna el titulo Observación al campo calculado. Select Nombre,Edad,Case When Edad<18 Then 'Menor' Else 'Mayor' End As Observacion From Amigos
nysql> Select Nombre,Edad,Case When Edad<18 Then ' ervacion From Atnigos;
----------------+------+-------------+ 1 Edad 1 Observaci on 1 ----------------+------+-------------+
1 Nombre
1 Juan Jos e
1
Ana Mari a 1 Mari a Jose 1 Jose .Mari a 1 Carmen Luz 1 1 Jose Miguel 1 1 Carlos Usva l do 1 1 Osear Dani el 1 1 Isi dora 1 1 Mari a Luisa 1 1 1 1 1
12 1.9 10 22 45 56 48 54 O 34
1 Menor
1
1 1 1 1
1 1 1 1
Mayor Menor Mayor Mayor 1 Mayor 1 Mayor 1 Mayor 1 Menor 1 Mayor
----------------+------+--~----------+
·
1 1
1 1 1
10 rows in set (O. 00 sec)
En la sintaxis anterior, se pueden utilizar varias condiciones: Case When Condicion1Then Instrucción 1 When Condicion2 Then lnstrucción2 When Condicion3 Then lnstrucción3 When CondicionN Then lnstrucciónN Else Instrucción End
1145011
----------------~·/Capitulo
3 Base dedatos MYSQL
En las siguientes instrucciones se muestra el nombre, la edad y la etapa de cada amigo. Para obtener la etapa se utiliza Case When con varias condiciones que dependen de la siguiente tabla:
0-12 13 -17 18 - 34 34-79
Adolescente Joven Adulto Anciano
80 ...
> > >
-> -> -> ->
-> -> >
1 1 1 1 1 1
Select Nombre, Edad, Case ~\lhen Edad<13 Then 'Niño' When Edad>12 And Edad<18 Then ~\1hen Edad>17 And Edad<35 Then When Edad>34 And Edad<80 Then Else 'Anciano' End As Etapa From Ami gas;
'Adolescente' '.Joven' 'Adulto'
----------------+------+--------+ Nombre Edad Etapa ----------------+------+--------+ .Juan .Jase 12 Niño 1
Ana Mari a Mari a .Jase .Jase Maria Carmen Luz 1 .Jase Miguel 1 Carlos Usvaldo 1 Osear Daniel 1 Isidora 1 Maria Luisa
1 1 1 1 1
1
1 1 1
1
1
1
1
1 1 1 1 1
19 1 .Joven 10 1 Niño 22 1 .Joven 45 1 Adulto 56 1 Adulto 48 1 Adulto 54 1 Adulto O 1 Niño 34 1 .Joven
1 1 1 1
1
----------------+------+--------+ 10 row:' in set (0.00 sec) ysql>
_
Case When tambien se puede utilizar para ejecutar una instrucción de pendiendo del valor de una variable, para lo cual se utiliza la siguiente sintaxis:
L1 451 1 ·i !
IPHPll
Desarrollo web con PHP "
Case Expresión When 1 er. Valor Then Instrucción 1 When 2do.Valor Then lnstrucción2 When 3er. Valor Then lnstrucción3 When ValorN Then lnstrucciónN Else Instrucción End Para el siguiente ejemplo se utiliza la tabla Personal cuyos registros son los siguientes:
rysql> Select * From Personal; 1 1 1 1
1 1
--------+--------+---------------+ Codigo 1 Nombre 1 FecNacimiento --------+--------+---------------+ 1 2 3 4 5
1 1 1
1 1
Julio Ana Teresa Cesar Miguel
1 1
1
1 1
1980-06-30 1970-12-31 1985-06-05 1988-04-19 1995,-08-15
--------+--------+---------------+
1 1 1 1
1 1
5 rows in set (0.00 sec)
La siguiente instrucción utiliza la sintaxis anterior de Case When para vi sualizar el nombre, fecha de nacimiento y el nombre del mes de la fecha de nacimiento de la tabla Personal.
ll 452
!I
---------..,--------__,/capitulo
3 Base dedatos MYSQL
Select Nombre, -> FecNacinriento, ->Case Month(FecNacimiento) -> When 1 Then 'Enero' -> When 2 Then 'Febrero' > ~·.•hen 3 Then 'Marzo' -> When 4 Then 'Abril' -> When 5 Then 'Mayo' -> When 6 Then 'Junio' -> when 7 Then 'Julio' +> vJhen 8 Then 'Agosto' -> when 9 Then 'Septiembre' -> When 10 Then 'Octubre' -> When 11 Then 'Noviembre' -> ~\1hen 12 Then 'Diciembre' -> End ->As Mes -> From Personal;
--------+---------------+-----------+ Nombre 1 FecNacimiento 1 Mes 1 --------+---------------+-----------+ 1 Julio 1 1980-06-30 1 Junio 1
Ana Teresa 1 Cesar 1 Migue 1 1 1
1970-12-31 1985-06-05 1 1988-04-19 1 1995-08-15
1 1
1 1 1 1
Diciembre Junio Abri 1 Agosto
--------+---------------+-----------+ rows in set (O.DO sec)
nysq 1 "4
>
Mostrar Registros Ordenados Cuando desea visualizar los registros ordenados se utiliza la siguiente sintaxis de la instrucción Select. Select * From Tabla Order By Campo;
1
Después de Order By se escribe el nombre del campo por el cual desea visualizar los registros ordenados. La siguiente instrucción muestra los registros de la tabla Amigos ordenados por su nombre: Select * From Amigos Order By Nombre;
)IPHP!i Desarrollo web con
11ysql> Sel eet
PHP "-'-'------------------
*
From Amigos Order
By
----~---T----------------T------T 1 Codigo 1 Nombre 1 Edad 1 --------T----------------T------T 1 002 1 Ana Maria 1 19 -¡
1 007 l 005 1 009 1 004 1 006 1 001 l 003 1 010 1 008
1 Carlos
Usval do 1 1 Carmen Luz 1 1 Isi dora 1 1 Jose Maria 1 1 Jose Miguel 1 1 Juan Jose 1 l Maria Jose 1 1 Mari a Luisa 1 1 Osear Daniel 1
48 45 O 22 56 12 10 34 54
1
1
1 1 1 1
1 1
1
--------T----------------T------T in set (0.00 see)
Si desea ordenar en forma descendente escriba Dese después del nombre del campo. La palabra Ase indica ordenación ascendente pero es opcional escribirla. La siguiente instrucción muestra los registros de la tabla Amigos ordenados por su Edad en forma descendente. Select * From Amigos Order By Edad Dese;
ny sq l > Sel eet
" From Amigos Order By
--------T----------------T------T 1 Nombre 1 Edad 1 --------T----------------T------T 1 006 1 Jose Miguel 1 56 1 1 Codi go
008 007 005 010 004 002 001 003 009
1 1 1 1 1
1
1 1 1
1 1 1 1 1
1
1 1 1
54 48 45 34 22 19 12 10 O
--------T----------------T------T set (0.00 see)
10 rows in ll}'Sql >
~
1145411
Osear Daniel 1 Carlos Usval do 1 Carmen Luz 1 Mari a Luisa 1 Jose Mari a 1 Ana Mari a 1 Juan Jose 1 Mari a Jose 1 Isi dora 1
1 1 1 1 1
1 1 1 1
----------------~/Capítulo
3 Base dedatos MYSQL
Si desea ordenar por varias campos debe escribirlos separador por una coma. Para el siguiente ejemplo se utiliza el contenido de la tabla Cli entes.
1
--------+----------------+------+------+ Codi go 1 Nombre 1 Edad 1 Sexo 1 --------+----------------+------+------+
1 000001 1
Jase Castillo
1
1
Miguel Torres Elias Portilla
1
1 1 1 1
00000 2 000003 000004 000005 000006
1 J u 1 i o Da.vi 1 a 1 Ana Castañeda. 1 Nancy Vilela 1
1
32 1 M 20 1 M 36 1 F 28 1 F 24 1 M 39 1 M
1 1 1 1
1 1 1 1 1
--------+----------------+------+------+
1
rows in set (0.00 sec)
La siguiente instrucción muestra los registros de la tabla Amigos ordenados por el Sexo y luego por la Edad. En este caso, después de ordenarlos por el sexo, a todas las mujeres las ordena por la edad y luego hace lo mismo con los hombres.
sql> Select * From Clientes Order By Sexo,Edad;
--------+----------------+------+------+ 1 Codi go 1 Nombre 1 Edad 1 Sexo --------+----------------+------+------+ 1
1 1
1 1 1
000004 000003 00000 2 000005 000001 000006
1
1 1
1 1 1
Nancy Vilela Ana Castañeda Ju 1 i o Da.vi 1 a Miguel Torres Jase Castillo Elias Portilla
1
1 1
1 1 1
28 36 20 24 32 39
1
1 1
1 1 1
F F
M M M M
--------+----------------+------+------+
1 1 1 1
1 1 1
' 6 rows in set (O. 00 sec)
ji 455
'~
11'
IPHPll
Desarrollo web con PHP "......
_
La siguiente instrucción muestra los registros de la tabla Clientes ordenados por el Sexo y Nombre.
ysql> Select
* From Clientes
Order By Sexo,Nombre;
--------+-----------~----+------+------+ 1 Codi go 1 Nombre 1 Edad 1 Sexo 1 --------+----------------+------+------+ 1
1 1 1
1 1
000003 000004 000006 000001 00000 2 000005
1
1 1 1
1 1
Ana Castañeda Nancy Vi 1e1 a Elias Portilla Jose Castillo J u 1 i o D avi 1 a Migue 1 Torres
1
1 1 1
1 1
36 28 39 32 20 24
1
1 1 1
1 1
F F M M M M
--------+----------------+-----~+------+
6 rows i t1 set
1 1 1 1
1 1
(0.00 sec)
Mostrar Sólo Algunos Registros Cuando desea mostrar sólo algunos registros de una tabla se utiliza la siguiente sintaxis de la instrucción Select.
Select * From Tabla Where Condición;
1
La condición es aquella que deben cumplir los registros para que se puedan visualizar. Los valores a comparar en campos tipo Date, Char, Varchar o similares deben ir entre apóstrofes. La siguiente instrucción muestra sólo los clientes de sexo masculino. Select * From Clientes Where Sexo
1
456
11
= 'M';
________________
''nysql>
__,/Capitulo
* From Clientes
Select
~vhere
Sexo='M';
--------+----------------+------+------+ Codi go 1 Nombre 1 Edad 1 Sexo --------+----------------+------+------+ ~1 000001 1 .Jose Castillo 1 32 1 M 1 00000 2 1 .Ju 1 i o D avi 1 a 1 1 000005 1 Migue 1 Torres 1 1 000006 1 El i as Porti 11 a 1
3 Base de datos MYSQL
20 1 M 24 1 M 39 1 M
--------+----------------+------+------+ in set (O.DO sec)
1 1 1 1 1
La siguiente instrucción muestra sólo los clientes de sexo Femenino. Select * From Clientes Where Sexo
= 'F';
La siguiente instrucción muestra sólo los clientes de sexo Masculino que tienen mas de 30 años de edad ..
nysql> 1
Select
* From
Clientes
Where
1
1
Sexo='M'
--------+----------------+------+------+ Codigo Nombre Edad Sexo 1
--------+----------------+------+------+ 1 000001 1 .Jose Castillo 1 32 1 M
' 1
000006
1
El i as
Porti
11 a
1
39
1 M
--------+----------------+---~--+--~~--+ 2 rows in set (O.DO sec)
1
1 1
La siguiente instrucción muestra de la tabla personal sólo las personas que nacieron en el mes de Junio (6).
¡ysql >
Sel ect
* From
Personal
~vhere
--------+--------+---------------+ 1 Nombre 1 FecNacimiento 1 --------+--------+---------------+ 1 1 1 .Julio 1 1980-06-30 1 3 Teresa 1985-06-05 --------+--------+---------------+ 2 in set (O. 00 sec)
Month(FecNaci
miento)
=6;
1 Codigo 1
1
1
1
í 457
IPHP\I
Desarrollo web con PHP "'"
La siguiente instrucción muestra de la tabla personal sólo las personas que nacieron después del 31 de Dicembre de 1970.
sql > Se 1 ect * From Persona 1 V.1here FecNaci mi errto c ' 1980-06-30' ;
--------+--------+---------------+ 1 1 Codigo 1 Nombre 1 FecNacimiento --------+--------+---------------+ 1 2 1 Ana 1 1970-12-31 1 --------+--------+---------------+ 1 row in set (0.00 sec1 ¡ysql > _
El Operador Like El operador Like junto con el símbolo de porcentaje(%) permiten comparar cadenas de caracteres. Después de los caracteres a comparar debe escribir el símbolo %, con este símbolo podemos reemplazar a varios caracteres. La siguiente instrucción muestra los amigos cuyo nombre empieza con J. Select * From Amigos Where Nombre Like 'J%';
sql » Se 1 ect
* From Amigos Where Nombre L i ke 'J%';
-~------+----------~--+-~----+ 1 Codigo 1 Nombre 1 Edad 1 --------+-------------+------+ 1 1
1
001 004 006
1 1 1
Juan Jose Jos e Mari a Jase Miguel
1 1 1
12 22 · 56
--------+-------------+------+
3 rows in
set
(0.03
sec)
1 1 1
----------------~/Capitulo
3 Base dedatos MYSQL
La siguiente instrucción muestra todos los amigos que se llaman Jase.
ll}'SQ l>
Se 1 ect
-e
From Amigos •,vhere
--------+-------------+------+ 1 Codigo 1 Nombre 1 Edad --------+-------------+------+ 1 001 1 Juan Jose 1 12 1 Mari a Jose 1 Jose Maria 1 Jose l•liguel
1 003 1 004 1 006
1 1
10 1 22 1 56 1
1 1 1
--------+-------------+------+ in set (0.00 sec)
Mostrar Sólo Algunos Registros y Ordenados Cuando desea mostrar sólo algunos registros de una tabla y ordenados significa que debe utilizar Where y Order By. En estos casos primero debe escribir la condición y luego el campo por los cuales se deben ordenar los registros, es decir, primero debe escribir Where y luego Order By. La siguiente instrucción muestra sólo los clientes de sexo masculino or denados por su nombre. Select * From Clientes Where Sexo='M' Order by Nombre
--------+----------------+~-----+------+ Codigo 1 Nombre 1 Edad 1 Sexo --------+----------------+------+------+ 1 000006 1 Elias Portilla 1 39 1 M 1
1 000001 1 Jose Castillo 1 1
000002 000005
1 1
Julio Davila Miguel Torres
1
1 1
32 1 M 20 1 M 24 1 M
--------+----------------+------+------+ rows in set (O. 00 sec)
1 1
1
1 1
l 459
IPHP!I
Desarrollo web con PHP ''
La siguiente instrucción muestra el nombre y edad de los clientes cuyo nombre termina con la letra a ordenados por su edad.
ysql » Sel ect
Nombre, Edad From Clientes l'ihere Nombre L i ke
----------------+------+ 1 Nombre 1 Edad 1 ----------------+------+ 1 Julio Davila 1 20 1 1 Nancy Vilela 1 1 Ana Castaffeda 1 1 El i as Porti 11 a 1
28 1 36 1 39 1
----------------+------+ rows in set (0.00 sec)
¡ysql>
~
Contar Registros de una Tabla La función Count permite contar registros de una tabla utilizando la instruc ción Select. Para contar todos los registros de una tabla se utiliza la siguiente sin taxis: Select Count(*) From Tabla;
Para contar sólo algunos registros de una tabla se utiliza la siguiente sin taxis: Select Count(*) From Tabla Where Condición; Las siguientes instrucciones de ejemplo se explican con la siguiente tabla llamada Clientes:
1146011
________________
__,,/Capítulo
3 Base de datos MYSQL
ysql> Select • From Clientes; 1
--------+----------------+------+------+ Codigo 1 Nombre 1 Edad 1 Sexo --------+----------------+------+------+
Jose Castillo 1 Julio Davila 1 1 1 Ana CastaAeda 1 1 000004 1 Nancy Vilela 1 1 000005 1 Miguel Torres 1 1 000006 1 El i as Porti 11 a 1 1 1
000001
000002 000003
1 1
1 M 20 1 M 36 1 F 28 1 F 24 1 M 39 1 M
3i
------~-+----------------+------+------+
1 1 1 1 1
1 1
6 rows in set (0.00 sec)
La siguiente instrucción muestra la cantidad total de registros que tiene la tabla Clientes:
Count(•) As Cantidad From Clientes;
(0.00 sec)
La siguiente instrucción muestra la cantidad de clientes de sexo masculi no.
li 461 ¡¡
IPHPll
Desarrollo web con PHP
----------+ 4 1 ----------+ 1 row in set
°"''------------------
1
(0.01
sec)
La siguiente instrucción muestra la cantidad de clientes de sexo femenino que tiene mas de 25 años de edad.
Sumar el Contenido de Campos de una Tabla La función Sum permite sumar el contenido de los campos numéricos de una tabla. Para sumar el contenido de un campo de todos los registros de una tabla se utiliza la siguiente sintaxis: 1
Select Sum(Campo) From Tabla; 1
Para sumar el contenido de campos sólo algunos registros de una tabla se utiliza la siguiente sintaxis:
u 462 n
________________
___,/Capítulo
3 Base de datos MYSQL
Select Sum(Campo) From Tabla Where Condición; Las siguientes instrucciones de ejemplo se explican con la siguiente tabla llamada Clientes:
l~sql> Select * From Clientes; 1 1 1 1 1 1 1
--------+----------------+------+------+--------+ Codigo Nombre Edad Sexo Deuda --------+----------------+------+------+--------+ 000001 Jase Castillo 32 M 120.00 1
00000 2 000003 000004 000005 000006
1 1
1 1 1 1
1
J u 1 i o D avi 1
a Ana Castañeda Nancy Vilela Miguel Torres Elias Portilla
1
1 1 1 1 1
1
20 36 28 24 39
1
1 1 1 1 1
1
M F F M M
1 1
'I 1 1 1
1
80 . 00 200.00, 50.00 100.00 60.00
--------+----------------+------+------+--------+ 6 rows in set (0. 01 sec)
1 1 1 1 1 1
La siguiente instrucción muestra la suma de la deuda de todos los clien
tes:
eysql> Select Sum(Deuda) As Total From Clientes;
--------+ Total 1 --------+ 1 610.00 1 --------+ 1 row in set 1
(0.00 sec)
La siguiente instrucción muestra la deuda de los clientes de sexo mascu lino:
463
lf PHPll
Desarrollo web con PHP "-.....__--...,.-------------
Sum(Deuda) As Tota 1 From Clientes
--------+set
(0.00
~·.1here Sexo> ' M' ;
sec)
fil~ .•
La siguiente instrucción muestra la deuda de los clientes cuyo nombre termina con la letra a. '
Promediar el Contenido de Campos de una Ta bla La función Avg permite obtener el promedio del contenido de los campos numéricos de una tabla. Para promediar el contenido de un campo de todos los registros de una tabla se utiliza la siguiente sintaxis: Select Avg(Campo) From Tabla;
1146411
----------------~/capítulo
3 Base de datos MYSQL
Para promediar el contenido de campos sólo algunos registros de una tabla se utiliza la siguiente sintaxis: Select Avg(Campo) From Tabla Where Condición; Las siguientes instrucciones de ejemplo se explican con la siguiente tabla llamada Clientes:
1¡ysql > Se 1 ect * From Clientes; 1
--------+----------------+------+------+-~------+ Codigo 1 Nombre 1 Edad 1 Sexo 1 Deuda 1 --------+----------------+------+------+--------+ 000001 00000 2 000003 000004 000005 000006
1 1
1 1 1 1
Jase Castillo Ju 1 i o D avi 1 a Ana Castañeda Nancy Vilela Miguel Torres El i as Porti 11 a
1 1
1 1 1 1
32 20 36 28 .24 39
1 1
1 1 1 1
M M F F M M
1 1
1 1 1 1
120.00 80. 00 200. 00 50.00 100.00 60. 00
1 1
1 1 1 1
El siguiente ejemplo muestra el promedio de la deuda de todos los clien tes:
~sql>
Select Avg(Deuda)
---------------+ 1 PromedioDeuda 1 ---------------+ 101.666667 ---------------+ set (0.00 1
1
sec)
465
IPHP!i
Desarrollo web con PHP "'
La siguiente instrucción muestra el promedio de la deuda sólo de los clientes de sexo masculino:
La siguiente instrucción muestrael promedio de la deuda sólo de los clientes cuya edad es menor que 30 años:
sql s Sel ect Avg (Deuda) As PromedioDeuda From Clientes
,+
Where
1 PromedioDeuda 1
---------------+ 76. 666667 1 ---------------+ 1 row in set (0.00 1
sec)
La siguiente instrucción muesta la cantidad total de clientes, la suma de su deuda y su promedio.
Select Count(*) As Cantidad, > Sum(Deuda) As Total, > Avg(Deuda) As Promedio > From Cl; entes;
----------+--~-----+------------+ · ¡ Total 1 Promed1o 1 ----------+--------+------------+ 1 6 1 610.00 1 101.666667 1 --------~-+--------+------------+ 1 row in set (O. 02 sec) 1 Cantidad
i
466
1
----------------~/capitulo
3 Base de datos MYSQL
La siguiente instrucción muesta la cantidad de clientes que tiene sexo fe menino y la suma y promedio de sus deudas:
> Count (*) .As ·cantidad, > Sum(Deuda) .As Tota 1 , -> .Avg(Deuda) .As Promedio -> ->
From Clientes Where Sexo='F';
----------+--------+------------+ Cantidad 1 Total 1 Promedio 1 ----------+--------+------------+ 1 2 1 250.00 1 125.000000 1 ----------+--------+------------+ 1
1 row in set (0.00 sec)
Obtener el Valor Máximo de un Campó La función Max permite obtener el valor máximo del contenido de un campo numérico de una tabla. Para obtener el valor maximo de un campo de todos los registros de una tabla se utiliza la siguiente sintaxis:
j
Select Max(Cai:npo) From Tabla;
Para obtener el valor maximo de un campo de algunos registros de una tabla se utiliza la siguiente sintaxis: Select Max(Campo) From Tabla Where Condición; La siguiente instrucción muestra la edad mayor de la tabla Amigos.
467
IPHP¡I
Desarrollo web con PHP "'""" Select Max(Edad) As Edad Mayor From Amigos;
As EdadMayor From .Amigos;
-----------+ set
1
(0.00
sec)
La siguiente instrucción muestra la deuda mayor de la tabla Clientes:
As MayorDeuda From Clientes;
1
------------+ 200.00 1 _____ _:
+
set
(0.00
sec)
El siguiente ejemplo muestra la deuda mas alta de los clientes nos.
As MayorDeudaFrom Clientes
1
468
11
masculi
Where Sexo='M';
________________
_,/Capítulo 3 Base de datos MYSQL
La siguiente instrucción muestra la edad mas alta de las personas de sexo femenino de la tabla Clientes.
JTfsql > Sel ect Ma.x(Edad) As EdadMayor From Clientes 1
-----------+ EdadMayor
~~here Sexo= ' F';
1
-----------+ 1 36 1
Obtener el Valor Mínimo de un Campo La función Min permite obtener el valor mínimo del contenido de un campo numérico de una tabla. Para obtener el valor mínimo de un campo de todos los registros de una tabla se utiliza la siguiente sintaxis: 1
Select Min(Campo) From Tabla;
Para obtener el valor mínimo de un campo de algunos registros de una tabla se utiliza la siguiente sintaxis: Select Min(Campo) From Tabla Where Condición; La siguiente instrucción muestra la edad menor de la tabla Clientes. Select Min(Edad) As EdadMenor From Clientes;
ii ~ i 469 11 ~"
iPHP!I
Desarrollo web con PHP "-----------------
As Edadf•lenor From Clientes;
-----------+ 1 EdadMenor 1 1
-----------+ 20 1
-.,----------+
1 row
1
n set
(0.00 sec)
El siguiente ejemplo muestra la deuda menor de los clientes masculinos.
sql s Se 1 ect
------------+ 1 DeudaMenor 1
Mi n (Deuda) As DeudaMenor From Clientes;
------------+
50.00 1 .+ 1 set (0.00 1
sec)
La siguiente instrucción muestra la edad menor de las personas de sexo femenino de la tabla Clientes.
uu 470 H¡ i
~/Capítulo
3 Base dedatos MYSQL
Agrupar los Registros de una Tábia La ínstrucción Group By permite agrupar los registros de una tabla por uno o más campos. Cuando agrupamos los registros podemos contarlos, sumarlos, sacar promedios, etc. Los registros siempre se agrupan por las campos escritos antes de la fun ciones Count, Sum, Avg, etc. como se muestra en la siguiente sintaxis: Select Campos, Funciones From Tabla Group By Campos; La siguiente instrucción muestra la cantidad de Clientes por sexo. SelectSexo,Count(*) As Cantidad From Clientes Group By Sexo;
Select Sexo, -> Count(*) As Cantidad -> From Clientes -> Group By Sexo;
1
------+----------+ Sexo 1 Cantidad 1 ------+----------+
1 F. 1 M
1 1
2 1 4 1
------+----------+
in set (0.00 sec)
Como se observa en el ejemplo anterior, los registros estan agrupados por el campo sexo porque es el campo utilizando antes de la funcion Count. La siguiente instrucción muestra la cantidad de Clientes por sexo asi como el total y promedio de sus deudas.
11 471 11
!IPHP!I
Desarrollo web con PHP ""~
rysql> -> -> ""'> -> -> ->
Select Sexo, Count(*) As Cantidad, Sum(Deuda) As Total, Avg(Deuda) As Promedio From Clientes Group By Sexo;
------+----------+--------+------------+ 1 Total 1 Promedio _ 1 ------+----------+--------+------------+
1 Sexo 1 Cantidad 1 1
F M
1 1
2
-
4
1 1
250.00 360.00
1 1
125 .000000 90.000000
------+----------+--------+------------+
2 rows in set
1 1
(O. 00 sec)
Cuando se desea seleccionar registros con campos creados con las fun ciones se utiliza Having en lugar de Where. Los siguientes ejemplos se realizan con la tabla Ventas creada con la si guiente estructura:
rysql> Create Table Ventas > -> Codi go Char (3) Pri mary Key, -> Fecha Dtjte, ->Zona Char(l), -> Importe Decimal (8, 2) -> ); uery OK, O rows affected (0.03 sec)
e
1
472
1
.....__
___,/Capitulo La tabla Ventas¡ tiene los siguientes
registros
3 Base de datos MYSQL
de ejemplo:
nysql> Se1 ect * From Ventas; 1 1 1 1
1 1 1
--------+------------+------+---------+ Codi go Fecha Zona Irnporte --------+------------+------+---------+ 1
001 002 003 004 005 006
1 001 1
1 1 1 1
008 009 010 011 012
1 1 1
1 1 1
1 1
1 1 1 1
1
2008-06-09 2008-07-29 2008-12-18 2008-06-15 2008-05-20 2008-04-01 2oos~o1-10 2008-06-09 2008-08-09 2008-06-09 2008-12-22 2008-08-30
1 1 1
1 1 1
1 1
1 1 1 1
1
A B A e A e B D E D A A
1 1 1
1 1 1
1 1
1 1 1 1
20.00 50.00 30.00 120.00 150.00 25.oo 10.00 130.00 20.00 50.00 40.00 5.00
-----~--+------------+------+---------+
1 1 1 1
1 1 1
1 1
1 1 1 1
12 rows in set (0.00 sec)
La siguiente instrucciĂłn muestra el total vendido por zona.
iysql)
1 1 1
Select Zona,Sum(Importe)
As Total FromVentas
Group By Zona;
------+--------+ A 1 245.00 1 B
e
1 D
1 E
60.00 1 145 .oo 1 1 180.00 1 1 20.00 1 1 1
------+--------+
5 rows in set (0.01 sec)
l 473 11
\IPHP!f
Desarrollo web con PHP ""-....._
_
La siguiente instrucción muestra el total vendido por zona, pero sólo suma las ventas realizadas después del mes de junio del año 2008.
rysqb
Sel ect
> Zona,
-> Sum(Importe) As Total -> From Ventas > ~\lhere Month(Fecha)>6 And Year(Fecha)=2008 -> Group By Zona;
1
------+-------+ Zona 1 Total 1 ------+-------+
1 A 1 B 1 E
1 75 .00 1 60.00 1 20.00
1
1 1
------+-------+ 3 rows in set (0.02
sec)
La siguiente instrucción muestra el total vendido por zona pero sólo las zonas donde se ha vendido más de 150.
Select > Zona, > Sum(Importe) As Total -> From Ventas ~> Group By Zona -> Having Total>150;
1 1 1
1147411
------+--------+ Zona 1 Total 1 ------+--------+ A
D
1 1
245.00 180.00
1 1
------+--------+ in set (0.00
sec)
----'----------------'/capitulo
3 Base dedatos MYSQL
La siguiente instrucción muestra el total vendido por mes y año.
11ysql> Select
Month(Fecha) As Mes, -> Year(Fecha) As Anno, -> Sum(Importe) As Total > From Ventas -> Group By Mes,Anno; ->
1
------+------+--------+ Mes 1 Anno 1 Total 1 ------+------+--------+
1
4 5 6
1 1
8 12
1
1
1
7
1
1 1 1
1 1
2008 1 25.00 1 2008 1 150.00 1 2008 1 320.00 1 2008 1 60.00 1 2008 1 25.00 1 2008 1 70.00 1
------+------+-~------+ in set (0.00 sec)
La siguiente instrucción muestra el total vendido por mes y año pero solo las ventas mayores a 100.
->
> -> > ->
Select Month(Fecha) As Mes, Year(Fecha) As Anno, Sum(Importe) As Total From Ventas Group By Mes,Anno having Total>100;
------+------+--------+ 1 Mes 1 Anno 1 Total 1 ------+------+--------+ 1
1
5 6
1
1
2008 2008
1
1
150.00 320.00
1
1
------+------+--------+
2 ro1111s in set (O. 00 sec)
475
u
IPHP!I
Desarrollo web con PHP "....._
_
La siguiente instrucción muestra un resumen de ventas por zona;
> > > > >
Sel ect zona, Count(*) As Cantidad, sum(Importe) As Total, Avg(Importe) As Promedio From Ventas Group By Zona;
------+----------+--------+-----------+ 1 Tata 1 1 Promedio 1 ------+----------+--------+-----------+ A 5 245 .00 49.000000
1 Zona 1 Cantidad 1
1
I B 1 e I D 1 E
1 1 1
1
2 2 2 1
1
1 60.00 1 145 .oo 1 180.00 1 20.00
1
1
1 30.000000 1 1 72.500000 1 1 90.000000 1 1 20.000000 1
------+----------+--------+-----------+ 5 rows in set (0.00 sec)
La siguiente instrucción muestra un resumen de ventas por mes y año:
Select
> Month(Fecha) As Mes,
-> Year(Fecha) As Anno, -> Count(*) As Cantidad, -> Sum(Importe) As Total, > Avg(Importe) As Promedio :> Frorn Ventas > Group By Mes,Anno;
------+------+----------+--------+------------+ 1 Atino 1 Cantidad 1 Tata 1 1 Promedio 1 ------+------+----------+------~-+------------+ 1 4 1 2oos 1 1 1 2s.oo 1 2s.oooooo 1 1 Mes 1 1 1 1 1
5 1 2008 1 6 1 2008 1 7 1 2008 1 8 1 2008 1 12 1 2008 1
------+------+----------+--------+------------+ (0.00 sec)
6 rows in set
476
1 1 150.00 1 150.000000 1 4 1 320.00 1 80.000000 1 2 1 60.00 1 30.000000 1 2 1 25.00 1 12.500000 1 2 1 70.00 1 35.000000 1
----------------~/capítulo
3 Base dedatos MYSQL
Eliminar los registros de una tabla La instrucción Delete From permite eliminar registros de una tabla. Tiene 2 sintaxis: 1. Cuando se desea eliminar todos los registros de la tabla. Delete From Tabla;
Tabla Es el nombre de la tabla cuyos registros desea eliminar. Debe tener mucho cuidado en utilizar esta sintaxis porque eliminan todos los registros. La siguiente instrucción de ejemplo elimina todos los registros de la tabla Personal: Delete From Personal:
Se tratamos de leer los registros de la tabla Personal después de ejecutar el comando anterior se mostrará lo siguiente:
477
IPHP!I
Desarrollo web con PHP "-...._
_
2. Cuando sedesea eliminar sรณlo algunos registros de la tabla. Delete From Tabla Where Condiciรณn; Condiciรณn Es la condiciรณn que debe cumplir el registro para que se elimine. Ejemplo, la siguiente instrucciรณn elimina las ventas cuyo importe es menor que 1 O. Delete From Ventas Where Importe< 1 O;
sql> Select * From Ventas;
--------+------------+------+---------+ 1 Codigo 1 Fecha 1 Zona 1 Importe 1 --------+------------+------+---------+ 1 001 1 2008-06-09 1 A 1 20. 00 1
1 1 1 1 1 1 1 l 1 1
1
478
11
002 003 004 005 006 007 008 009 010 011
1 1 1 1 1 1 1 1 1 1
2008-07-29 2008-12-18 2008-06-15 2008-05-20 2008-04-01 2008-07-10 2008-06-09 2008-08-09 2008-,06-09 2008-12-22
1 1 1 1 1 1 1 1 1 1
B A
e
A
e
B D E D A
1 1 1 1 1 1 1 1 1 1
50.00 30.00 120. oo 150.00 25.00 10.00 130. 00 20.00 50. 00 40.00
--------+------------+------+---------+ rows in set (0.00 sec)
1 1 1 1 1 1 1 1 1 1
/Capítulo
3 Base dedatos MYSQL
Modificar los registros de una tabla La instrucción Update permite modificar el contenido de los registros de una tabla. Tiene 2 sintaxis: 1. Cuando se desea modificar el valor de un campo de todos los registros de la tabla. Update Tabla Set Campo
= Nuevo
Contenido;
Tabla Es el nombre de la tabla cuyo valor de sus registros desea modificar. Campo Es el nombre del campo cuyo contenido desea modificar Nuevo Contenido En el nuevo valor que desea asignarle al campo. Ejemplo, si el contenido de la tabla Amigos es la siguientes:
sql> Select * From Amigos;
--------+----------------+----~-+ 1 Codi go 1 Nombre 1 Edad 1 --------+----------------+------+ 1 001 1 Juan Jose 1 12 1 1
002
1
Ana Maria
1 003
1 Maria Jase
1 1
1 1
004 005 1 006 1 007 1 008 1 009 1 010
1
1
Jose Maria 1 Carmen Luz 1 1 Jase Miguel 1 1 Carlos Usvaldo 1 1 Osear Daniel 1 1 Isidora 1 1 Maria Luisa 1
19 10 22 45 56 48 54 O 34
--~~----+----------------+------+ 10 r-ows in set (O.DO sec)
1
1 1 1
1 1
1
1
1
IPHPll
Desarrollo web con PHP "~
La siguiente instrucción modifica el contenido del campo Edad de la tabla Amigos agregandole un año a todos los registros.
l~sql> Update Amigos Set Edad= Edad+ 1; uer'y OK, 10 rows affected (O. 00 sec) Rows matched: 10 Changed: 10 Warni nqs : O
Después de ejecutar la instrucción anterior, el contenido de la tabla Amigos es el siguiente:
sql> Select * From Amigos; --------+----------------+------+ 1 Codi go 1 Nombre 1 Edad --------+----------------+------+ 1 001 1 Juan Jase 1 13 1 002 1 Ana Maria 1 20 1 003 1 Mari a Jase 1 11 1 004 1 Jase Mari a 1 23 1 005 1 Carmen Luz 1 46 1 006 1 Jase Miguel 1 57 1 007 1 Carlos Usval do 1 49 l 008 1 Osear Daniel 1 55 1 009 1 Isi dora 1 1 1 010 1 Mari a Luí sa 1 35 --------+----------------+------+ 10 rows in set (O. 00 sec)
1 1 1 1 1 1 1 1 1 1 1
2. Cuando se desea modificar el valor de un campo de sólo algunos registros de la tabla.
480
1
-----------------/Capitulo
3 Base de datos MYSQL
Update Tabla Set Campo=Nuevo Contenido Where Condición;
Condición Es la condición que debe cumplir el registro para que el contenido del campo se pueda modificar. Ejemplo, si el contenido de la tabla Clientes es el siguiente:
1
1 1
1
1 1 1
--------+----------------+------+------+--------+ Codigo Nombre Edad Sexo Deuda --------+----------------+------+------+--------+ 1
000001 000002 000003 000004 000005 000006
1 1
1
1 1 1
1
Jose Castillo Julio Davila Ana Castañeda Nancy Vilela Miguel Torres El i as Porti 11 a
1 1
1
1 1 1
1
32 20 36 28 24 39
1 1
1
1 1 1
1
M M F F M M
1 1
1
1 1 1
120.00 80.00 200.00 50.00 100.00 60. 00
--------+----------------+------+------+--------+
1
1
1 1 1 1 1
6 rows in set (0.00 sec)
La siguiente instrucción le asigna 45 años de edad a Elias Portilla:
l 481
IPHP)
Desarrollo web con PHP "".,..
Relacionar tablas Foreign Key Esta restricción permite relacionar dos tablas de una base de datos creando una clave foránea. La clave foránea permite relacionar dos tablas. La clave foránea de una tabla debe ser la clave primaria en la tabla con la que desea relacionarla o debe ser un campo creado con Unique, es decir que no permita valores duplicados. · Foreing Key se puede escribir al final de la creación de la tabla que tendrá la clave foránea y tiene la siguiente sintaxis: Foreign Key (Campo1) References Tabla (Campo2); Campo1 Es el nombre del campo de la tabla que se está creando que va hacer la clave foránea, es decir, el campo que va ha servidor para relacionarla con la otra tabla. Tabla Es el nombre de la tabla con la que se desea relacionar. Esta tabla debe estar creada. Campo2 Es el nombre del campo de la tabla con la que se desea relacionar. Este campo debe ser la clave primaria de la tabla o debe ser un campo con la restricción Unique, es decir, que no acepte valores duplicados. Las siguientes instrucciones de ejemplo consisten en crear y relacionar las siguientes tablas: Alumnos.
482
________________
...;/Capitulo
3 Base de datos MYSQL
Recibos Conceptos Detalle Recibos Las tablas anteriores
se deben relacionar de la siguiente
manera:
¡·!-~--EJ'1'Luill'los \\:<::n:r:: : o:;: : ;¡.-OO. ¡ Qptions
l:.nr 111
r
1C
'ir
CODIGO NOMBRE SEMESTRE
ESTADO
L.~,~"·
La siguiente instrucción crea la tabla Alumnos:
nysql> Create Table Alumnos > ( -> Codi go Chat'(4) Primary Key, ->Nombre VarChar(35), -> Semestre VarChar(3) -> );
uery OK, O rows affected
(O. 03 sec)
11 483 11
IPHPll
Desarrollo web con PHP ,...._
_
La siguiente instrucción crea la tabla Recibos y la relaciona con la tabla Alumnos:
Create Table Recibos
> (
.
->Numero Char(6) Pr1mary Key, -> Fecha Date, -> CodAlumno Char(4), ->Estado Char(1), -> Forei gn Key (CodAl umno) References Alumnos (Codi go) > ) ;
uery OK, o rows affected (0.02 sec)
Antes de crear la tabla DetalleRecibos, se debe crear la tabla Conceptos ya que debe estar relacionadas. Las siguientes instrucciones crear la tabla Conceptos:
(reate Table Conceptos
e
+> -> Codigo Char(2) Primary Key, -> Descripcion VarChar(20) -> );
uery OK, O rows affected (0.05 sec)
Las siguientes instrucciones crean la tabla DetalleRecibos con la tabla Recibos y Conceptos:
u 484
1
y la relacionan
----------------~/capítulo
ny s q] >
> -> -> -> -> -> -> >
3 Base dedatos MYSQL
Create Tab 1 e Detal 1 eReci bos
e
NumRecibo Char(6), CodConcepto Char(2), Importe Decimal(B,2), Primary Key (NumRecibo,CodConcepto), Foreígn Key (NumRecibo) References Recibos(Numero), Foreígn Key (CodConcepto) References Conceptos(Codigo) );
uery OK, O rows affected
(0.03 sec)
El orden en el que se deben ingresar los registros a las tablas debe ser el mismo en el cual se crean. Para los siguientes ejemplos se han ingresado algunos registros deejemplo en cada una de las tablas: Registros de la tabla Alumnos
~sql>
Select
* From Alumnos;
--------+--------+----------+ 1 Codi go 1 Nombre 1 Semestre
:·.~·!-~ff· T~;;:--n~-------¡ :
, 1 1
.· 1
: 1 · 1 1 1
0004 0005 0006 0007 0008 0009 0010
1 1
1 1 1 1 1
Ju 1 i o
Cesar Mari a Andres Teresa Carlos Migue 1
1 1
1
l 1 1 1
IV II V VI VI I VI
--------+--------+----------+ 10 rows in set (O. 00 sec)
1
1 1
1 1 1 1 1
IPHP!I
Desarrollo web con PHP "'
Registros de la tabla Recibos
~sql> Select • From Recibos; 1
--------+------------+-----------+--------+ Numero 1 Fecha 1 CodA1 umno 1 Estado --------+------------+-----------+--------+
080001 1 2008-07-10 1 0003 080002 1 2008-08-20 1 0010 1 080003 1 2008-08-23 1 0003 1 080004 1 2008-08-01 1 0006 1 080005 1 2008-09-15 1 0008 1 080006 1 2008-09-15 1 0003 1 1
A A ! A 1 A 1 A 1 A 1 1
--------+------------+-----------+--------+
6 rows in set (0.02 sec)
Registros de la tabla Conceptos
sql» Select • From Conceptos;
--------+---------------+ 1 Codigo 1 Descripcion 1 --------+---------------+
01 02 1 03 1 04 1 05 1 06
Matricula 1 lra. Pension 1 2da. Pehsi on 1 3era~ Pension 1 1 4ta. Pension 1 1 Sta. Pensi on 1
1
1
1
1 1 1
--------+---------------+
6 rows in set (0.00 sec)
11
486
1
1 1 1
1 1
1 1
______________ Registros
~¡sql>
____,/Capítulo
3 Base de datos MYSQL
de la tabla DetalleRecibos
Select * From DetalleRecibos;
-----------+-------------+---------+ 1 NumRecibo 1 CodConcepto 1 Importe -----------+-------------+---------+ 1 080001 1 01 1 50.00
1
1
1
1 1
1
1 1 1
1 1
1 1 1
080001 080002 080003 080003 080003 080003 080004 080004 080005 080006 080006 080006
1
1 1
1
1 1 1
1 1
1 1 1
02 01 01 02 03 04 01 02 01 01 02 03
1
1 1
1
1 1 1
1 1
1 1 1
120.00 50.00 50.00 100.00 100.00 100.00 50.00 80.00 50.00 50.00 120.00 120.00
1 1 1
1
1 1
r
1
1 1
1 1 1
-----------+-------------+--------~+
13 rows in set (0.00 sec)
INNER JOIN lnner Join se utiliza dentro de la instrucción Select para leer información de varias tablas. Con lnner Join las tablas se van uniendo de dos en dos. Su sintaxis es: Select Campos From Tabla1 lnner Join Tabla2 On Condición;
l 4s1 B
IPHPU
Desarrollo web con PHP "
Campos Es la lista de campos que desea leer. Si los nombres de los campos es el mismo en las dos tablas debe escribir antes el nombre de la tabla y un punto. Tabla1 Es normalmente la tabla donde el campo que sirve para la relación es la clave externa o foránea. Tabla2 Es normalmente la tabla donde el campo que sirve para la relación es la clave primaria. Condición Es la condicion que se debe cumplir para que se puedan relacionar las dos tablas. Normalmente la condición es que los campos de relación sean iguales. En los siguientes ejemplos se utilizan las tablas Alumnos, Recibos, Con ceptos y DetalleRecibos e lnner Join para visualizar la.información de mas de una tabla. La siguiente instrucción muestra el numero del recibo, la fecha que se emitió, el codigo del alumno y su nombre. Para mostrar la información indicada se utiliza lnner Join para unir las tablas Recibos y Alumnos. Select Numero,Fecha,CodAlumno,Nombre From Recibos lnner Join Alumnos On Recibos.CodAlumno = Alumnos.Codigo;
~ /Capitulo
3 Base dedatos MYSQL
r¡ysql > Sel ect Numero, Fecha,CodAl umno, Nombre -> From Recibos Inner Join Alumnos -> On Recibos.CodAlumno = Alumnos.Codigo; 1
--------+------------+-----------+--------+ Numero Fecha CodAlumno Nombre --------+------------+-----------+--------+ 1
1
1
080001 1 2008-07-10 1 0003 080002 1 2008-08-20 1 0010 1 080003 1 2008-08-23 1 0003 1 080004 1 2008-08-01 1 0006 1 080005 1 2008-09-15 1 0008 1 080006 1 2008-09-15 1 0003 1 1
1
Pedro 1 Miguel 1 1 Pedro 1 1 Maria 1 1 Teresa 1 1 Pedro 1 1 1
--------+------------+-----------+------~-+
6 rows in set (0.03 sec)
La siguiente instrucción muestra el numero del recibo, la fecha que se emitió, el codigo del concepto y su descripción. Para mostrar la información indicada se utiliza lnner Join para unir las tablas OetalleRecibos y Conceptos. Select NumRecibo,CodConcepto,Descripcion, Importe From DetalleRecibos lnner Join Concepto On OetalleRecibos.CodConcepto Conceptos.Codigo;
=
Í 489
!IPHP!i
,¡,¡.
Desarrollo web con PHP "'.......
_
rrysql > Se 1 ect NumRecibo, CodConcepto, Descri pcion, Importe -> From DetalleRecibos Inner Join Conceptos -> On DetalleRecibos.CodConcepto=Conceptos.Codigo; 1
1 1 1 1 1 1 1
1 1 1 1 1 1
-----------+-------------+---------------+---------+ NumRecibo CodConcepto Descripcion Importe -----------+-------------+---------------+---------+ 1
080001 080001 080002 080003 080003 080003 080003 080004 080004 080005 080006 080006 080006
1 1 1 1 1 1
1
1 1 1 1 1 1
1
01 02 01 01 02 03 04 01 02 01 01 02 03
1 1 1 1 1 1 1
1 1 1 1 1 1
1
Matricula 1ra. Pensi on r•latri cul a Matricula 1ra. Pensi on 2da. Pensi on 3era. Pension Matricula 1ra. Pension r•latri cul a Matricula 1ra. Pensi on 2da. Pensi on
1 1 1 1 1 1 1
1 1 1 1 1 1
1
50.00 120. 00 50. oo 50.00 100. 00 100. 00 100.00 50. 00 80.00 50. 00 50. 00 120. 00 120. 00
--~--------+-------------+---------------+---------+
13 rows in set
(0.03
sec)
En la siguiente instrucción se unen las 4 tablas: DetalleRecibos, Conceptos, Recibos y Alumnos. La información muestra en forma detallada cada uno de los pagos realizados en los recibos: Numero del recibo, fecha de emisión, nombre del alumno, descripción del concepto y el importe pagado. Select NumRecibo, Fecha, Nombre, Descripción, Importe From DetalleRecibos Inner Join Conceptos On Detalle Recibos. CodConcepto=Conceptos. Codigo Inner Join Recibos On DetalleRecibos.NumRecibo=Recibos.Numero lnner Join Alumnos On Recibos.CodAlumno=Alumnos.Co.digo;
________________
___,/Capitulo
3 Base de datos MYSQL
rrysql > Se1 ect NumRecibo, Fecha, Nombre,Descri pcion, Importe -> From OetalleRecibos Inner Join Conceptos -> On DetalleRecibos.CodConcepto=Conceptos.Codigo -> Inner Join Recibos -> On DetalleRecibos.NumRecibo=Recibos.Numero -> Inner Join Alumnos > On Recibos. CodA1unmo=A1 umnos.Codi go; 1
-----------+------------+--------+---------------+---------+ NumRecibo 1 Fecha 1 Nombre 1 Descri pci on 1 Importe -----------+------------+--------+---------------+~--------+
080001 080001 1 080002 1 080003 1 080003 1 080003 '1 080003 1 080004 1 080004 1 080005 1 080006 1 080006 1 080006 1 1
2008-07-10 1 Pedro 1 Matri cu 1 a 1 2008-07-10 1 Pedro 1 1ra. Pension 1 1 2008-08-20 1 Miguel 1 Matricula l 1 2008-08-23 1 Pedro 1 Matricula 1 1 2008-08-23 1 Pedro 1 1ra. Pension 1 1 2008-08-23 1 Pedro 1 2da. Pension 1 1 2008-08-23 1 Pedro 1 3era. Pension 1 1 2008-08-01 1 Mari a 1 Matricula 1 1 2008-08-01 1 Mari a 1 1ra. Pensi on 1 1 2008-09-15 1 Teresa 1 Matricula 1 1 2008-09-15 1 Pedro 1 Matricula 1 1 2008-09-15 1 Pedro 1 1ra. Pension 1 1 2008-09-15 1 Pedro 1 2da. Pension 1
1 1
1
50. 00 1 120.00 1 50.00 1 50.00 1 100.00 1 100.00 1 100.00 1 50.00 1 80. 00 1 50. 00 1 50.00 1 120.00 1 120.00 1
-----------+------------+--------+--------~~-----+---------+
13 rows
1
n set (O. 22 sec)
La siguiente instrucción muestra la información de cada recibo emitido: Numero, Fecha, Nombre del Alumno e Importe:
u 491
¡
f
liPHP¡
¡
i
Desarrolloweb con PHP "-------------------
nysql>
Se 1 ect
Numero, Fecha, Nombre, Sum(Importe)
> From Recibos Inner Joi n Deta 11 eReci bes
As Total
> On Recibos. Numero=Deta 11 eReci bos , NumReci bo -> Inner Join > Alumnos On Recibos.CodAlumno=Alumnos.Codigo > Group By Numero , Fecha, Nombre;
'1
--------+------------+--------+--------+ Numero 1 Fecha 1 Nombre 1 Total 1 --------+------------+--------+--------+ 1 080001 1 2008-07-10 1 Pedro 1 170.00 1 1 1 1 1 1
080002 080003 080004 080005 080006
1 1 1 1 1
2008-08-20 2008-08-23 2008-08-01 2008-09-15 2008-09-15
1 1 1 1 1
Miguel Pedro Mari a Teresa Pedro
1 50.00 1 1 350.00 1 1 130.00 1 1 50.00 1 1 290.00 1
--------+------------+--------+--------+ (0.19 sec)
'6 rows in set 'nysql>
La siguiente instrucción muestra el total de pagos por mes y año.
> > -> -> >
1 1 1 1
Se ect Month(Fecha) As Mes, Year (Fecha) As Anno, Sum(Importe) As Total From DetalleRecibos Inner Join Recibos On DetalleRecibos.NumRecibo=Recibos.Numero Group By Mes,Anno;
------+------+--------+ Mes 1 Anno 1 Total 1 ---~--+------+--------+ 7 8 9
1 1 1
2008 2008 2008
170.00 530.00 340.00
1 1 1
------+------+--------+ rows i n set
11492
1 1 1
n
. O3
-----------------..J/
Capitulo 3 Base de datos MYSQL
La siguiente instrucción muestra el codigo, nombre, semestre y total can celado por cada alumno.
sql> Select Codigo,Nombre,Semestre,Sum(Importe) -> From.Alumnos Inner Join Recibos -> On Alumnos.Codigo==Recibos.CodAlumno -~.Inner Join DetalleRecibos -> On Recibos.Numero==DetalleRecibos.NumRecibo -> Group By Codigo,Nombre,Semestre;
1 1
1 1 1
--------+--------+----------+------~-+ Codi go 1 Nombre 1 Semestre 1 Total --------+--------+----------+--------+ 0003 0006 0008 0010
1
1 1 1
Pedro Maria Teresa Miguel
1
1 1 1
VI V VI VI
1
1 1 1
810.00 130.00 50.00 50.00
--------+--------+----------+--------+ rows in set (0.00 sec)
As Total
1 1
1 1 1
Como puede observar, sólo se visualizan los alumno que han cancelado porque la tabla alumnos tiene 1 O registros.
nysq 1 > Se 1 ect "' From A 1 umnos; 1
--------+--------+----------+ Codigo 1 Nombre 1 Semestre 1 --------+--------+----------+
1 0001 1 0002 1 0003
1 1 1
1
1
1
1
0004 0005 1 0006 1
1 1
1
0007
0008 0009 0010
1 1
1 1
1
Luis Ana Pedro Julio Cesar Maria Andres Teresa Carlos Miguel
1 1 1
1
1
1 1
1 1
1
V II VI IV II V VI VI I VI
--------+--------+----------+ 10 rows in set (0.00 sec)
1 1 1 1
1
1 1
1 1
1
1f PHP!I Desarrollo web con PHP "'--------------------
Left Join Left Join tambien permite unir dos tablas con la diferencia que muestra como resultado todos los registros de la primera tabla indicada en la rela ción (Izquierda). Los campos de la segunda tabla indicada en la relación (Derecha) que no tengan registros relacionado con la primera, se mostrarán con el valor Null. Su sintaxis es: Select Campos From Tabla1 Left Join Tabla2 On Condición; Campos Es la lista de campos que desea leer. Si los nombres de los campos es el mismo en las dos tablas debe escribir antes el nombre de la tabla y un punto. Tabla1 Es normalmente la tabla donde el campo que sirve para la relación es la clave externa o foránea. Tabla2 Es normalmente la tabla donde el campo que sirve para la relación es la clave primaria. Condición Es la condicion que se debe cumplir para que se puedan relacionar las dos tablas. Normalmente la condición es que los campos de relación sean iguales. Utilizando Left Join podemos superar el problema del ejemplo anterior, es decir, mostrar todos los registros de la tabla alumnos, como se muestra a continuación. La siguiente instrucción muestra el codigo, nombre, semestre y total can celado por cada alumno. Para mostrar esta información se relacionan las siguientes tablas: 494
3 Base de datos MYSQL
----------------~/capítulo Alumnos Recibos Detalle Recibos
En esta instrucción se utiliza Left Join para que se muestre todos los alum nos:
Sel ect Codi go, Nombre,Semestre, Sum(Importe) As Total -> From Alumnos Left Join Recibos -> On Alumnos.Codigo=Recibos.CodAlumno -> Left Join DetalleRecibos > On Recibos. Numero=Deta11 eReci bos. NwnRecibo +> Group By Codi go, Nombre,Seniestre; ·
1
1 J
1 1
1
1 J 1
1 1
-------~+--------+----------+--------+ Codigo Nombre Semestre Total --------+--------+----------+-~------+ 1
0001 0002 0003 0004 0005 0006 0007 0008 0009 0010
1 1 1
1 J
1 J 1
J J
1
Luis Ana Pedro Julio Cesar Mari a Andres Teresa Carlos Miguel
J
1 1 1
J 1
1 1
1 1
1
V II VI IV II V VI VI I VI
1 1 1
1
J 1
1 1
J J
NULL NULL 810.00 NULL NULL 130.00 NULL 50.00 NULL 50.00
--------+--------+----------+--------+ •.10 rows in set (0.00 sec) ·
1
1 1 1 1
J 1
1 1
1 J
Utilizando la función IFNULL, explicada en páginas anterior, podemos reemplazar el valor NULL por el valor O (cero) u por otro valor como se muestra a continuación. r
La siguiente instrucción es similar a la anterior, se diferencia porque aquí el valor NULL es reemplazado por O (cero) para todos los alumnos que no han realizado ningún pago.
IPHP!I
Desarrollo web con PHP ""......
_
Select Codigo, ->Nombre, -> Semestre, -> IfNul 1 (Sum(Importe) ,O) As Total -> From Alumnos Left Join Recibos -> On Alumnos.Codiqo=Recibos.CodAlumno > Left Joi n Deta 1 i eReci bos > On Recibos. Numero=Deta 11 eReci bos , NumRecibo -> Group By Codigo,Nombre,Semestre;
--------+--------+----------+--------+ Codigo 1 Nombre 1 Semestre 1 Total 1 --------+--------+---------~+--------+ 1 0001 1 Luis 1 V 1 0.00 1 1
1 1 1 1 1 1 1 1 1
0002 0003 0004 0005 0006 0007 0008 0009 0010
1 1 1 1 1 1 1 1 1
Ana . Pedro Ju l i o Cesar Mari a Andres Teresa Carlos Miguel
1 1 1 1 1 1 1 1 1
II VI IV II V VI VI I VI
1 1 1 1 1 1 1 1 1
0.00 810.00 O.00 0.00 130.00 0.00 50.00 0.00 50.00
--------+------~-+----------+--------+ (0.00 sec)
1 1 1 1 1 1 1 1 1
10 rows in set rysql > .,
Adminisatración de usuarios Los usuarios son los nombres de las personas con su respectiva clave que pueden ingresar o conectarse al servidor de base de datos MySql. Como ya se explicó, cuando instala MySql se crea el usuario root el cual tiene todos los permisos o privilegios para administrar el servidor. Usted puede utilizar el comando Grant para crear y asignar pemlsos a nuevos usuarios del servidor MySql. Sintaxis: Grant Permiso On Objeto To Usuario ldentified By 'Clave'
_______
___,
__,/Capitulo
3 Base de datos MYSQL
En el comando Gant, si el usuario no existe, lo crea y le asigna los permisos indicados. Si el usuario ya existe, solo le asigna los permisos.
Permiso Consiste en el nombre del permiso o permisos separados por una coma (,) que desea asignar al usuario. Los permisos mas utilizandos son:
All Asigna todos los permisos al usuario excepto el permiso Grant Option el cual permite a un usuario asignar permisos. Grant Option Con este permiso el usuario podrá asignar permisos. Alter Con este permiso el usuario podrá utilizar el comando Alter Table para modificar la estructura de las tablas. Usa ge Crea el usuario sin ningun permiso. Create Con este permiso el usuario podrá utilizar el comando Create Table para crear tablas. Delete Con este permiso el usuario podrá utilizar Delete para eliminar registros. Drop Con este permiso el usuario podrá utilizar blas.
Drop Table para eliminar ta
l 497 I
JIPHPÍÍ
Desarrollo web con PHP "'"
File Con este permiso el usuario podrá utilizar archivos de texto como por ejem plo en el comando Load Data lnFile. lndex Con ,este permiso el usuario podrá crear y eliminar indices. lnsert Con este permiso el usuario podrá utilizar el comando lnsert para agregar nuevos registros. Select Con este permiso el usuario podrá utilizar el comando Select para leer información almacena en el servidor. Update Con este permiso el usuario podrá utilizar el comando Update para actualizar el contenido de campos. Show DataBases Con este permiso el usuario podrá utilizar el comando Show DataBases para mostrar las bases de datos del servidor.
Objeto Es el nombre del objeto para el cual se deben asignar los permisos indica dos. Los objetos pueden ser bases de datos o tablas. Si desea asignar los permisos a una base de datos, sólo se escribe su nombre. En el siguiente ejemplo se indica que los permisos se asignarán a la base de datos Empresa. On Empresa Si desea asignar permisos a una tabla se debe indicar primero el nombre de la base de datos a la cual pertenece separados por un punto. En el si
u 498 u
________________
___,/Capitulo
3 Base de datos MYSQL
guiente ejemplo se indica que los permisos se asignarán de la base de datos Empresa.
a la tabla Clientes
On Empresa.Clientes Al indicar el nombre de la base de datos o tabla se puede utilizar el carácter comodin * (asterisco). El* se utiliza para reemplazar a todos los caracteres del nombre. En el ejem plo se indica que los permisos se asignarán a todas las base de datos. On*
En el siguiente ejemplo se indica que los permisos se asignarán a todas las base de datos y tablas. On *.*
Usuario Es el nombre del usuario que desea crear y/o asignarle los permisos.
Clave Es la clave que tiene o desea asignar al usuario. Para los siguientes ejemplos se asume que nos hemos conectado al sevidor MySql con el usuario root:
ysql) Select User();
+----------------+ 1•oot@localhost i set (0.02
sec)
llPHP!I
Desarrollo web con PHP """ Y que tenemos en el servidor la base de datos Empresa con las siguientes tablas:
ysql)
show
tables;
+-------------------+ : Tables_in_empresa : +-------------------+ alumnos amigos a:rticulos clientes conceptos detallefactu:ras detallerecibos pe1"sonal J:.. ecibos ventas
+-------------------+ 0 in set (0. 02 sec) l"OWS
La siguiente instrucción crea el usuario llamado Julio con su clave 321 y con el permiso Select para la tabla Clientes de la base de datos Empresa. Grant Select On Empresa.Clientes To Julio ldentified
By '321';
Para verificar el nuevo usuario y el permiso asignado, salga de MySql e ingrese con el usuario Julio y active !a base de datos Empresa: 500
ll
________________
__,/Capítulo
3 Base de datos MYSQL
:'-.xalllpp'-.ll'lysql'-.hin)ll'lysql -u Julio -p nte1• passwo1•d: ,....... e Lcome to t he , MySQL mo n itol:'. Co11'1111ands end \~ith ; o r- '-.g. ~ om• MySQL connect jR ion id is 53 Íei-t.•el' ue1•sion: 5 .0.45-coll'lll'lunity-nt MySQL Coll'l11mnity Edition rype
01• ''-.11'
'help;'
ysql) atabase ysql)
Fo r he Lp , Type
''-.e'
to
e Lear the
(GPL)
huffe1•.
Use Ell'lpl'esa; changed
~
En el siguiente ejemplo se muestra un mensaje de error porque el usuario Julio utiliza Select para la tabla Personal para lo cual no tiene permiso.
Í!lysql)
Select
*
F1•0111
Per-euna L¡
RROR 1142 (42000): SELECT com111and
"pe re one
ysql>
-
L"
En el siguiente ejemplo si se muestran los registros de la tabla Clientes porque el usuario Julio tiene permisos:
'+~-------+----~-------------+------+------+--------+ : Codigo 1 Horob1•e 1 Edad 1 Sexo : Deuda
;+--------+------------------+------+------+--------+
00000? 000002 · 1 000003 1 000004 1 000005 1 · 1
Li1iana Carbone! : Julio Davi1a 1 Ana Castañeda 1 Hancy Ui1e1a : Miguel Torres
:
35 20 36 28 24
M : M ! F 1 F 1 M
350.00 , 80.00 1 200.00 1 50.00 1 100.00
+--------+--------------~---+------+------+--------+ 1•0.,1sin set (0.01 sec)
, : 1
1
En el siguiente ejemplo se muestra un mensaje de error porque el usuario Julio trata de modificar la deuda del cliente 000003 y no tiene permisos:
501
IPHP!I
Desarrollo web con PHP "'------------------
En el siguiente ejemplo se muestra un mensaje de error porque el usuario Julio no tiene permisos para eliminar registros.
Revoke Sintaxis: Revoke Permiso On Objeto From Usuario ; Permiso Consiste en el nombre del permiso o permisos separados por una coma (,) que desea quitar al usuario. Objeto Es el nombre del objeto del cual se deben quitar los permisos indicados. Los objetos pueden ser bases de datos o tablas. Si desea quitar los permisos de una base de datos, sรณlo se escribe su nombre. En el siguiente ejemplo se indica que los permisos se quitarรกn de la base de datos Empresa.
1150211
________________
__,/Capitulo
3 Base de datos MYSQL
On Empresa Si desea quitar permisos a una tabla se debe indicar primero el nombre de la base de datos a la cual pertenece separados por un punto. En el siguiente ejemplo se indica que los permisos se quitarán de la tabla Clientes que pertenece a la base de datos Empresa:
On Empresa.Clientes
Usuario Es el nombre del usuario al cual le desea quitar los 'permisos indicados. Ejemplo: La siguiente instrucción ejecutada por el usuario root quita el permiso Se lect al usuario Ana sobre la tabla Amigos que pertenece a la base de datos Empresa:
En la siguiente instrucción se ha conectado al servidor MySql con el usuario Ana trata de ejecutar el comando Select sobre la tabla Amigos mostrandose un error porque ya no tiene el permiso:
503
IPHP!I
Desarrollo web con PHP "''
En forma predetermina los usuarios creados sólo pueden acceder al ser vidor local (Localhost). Si desea crear usuarios que se puedan conectar desde otra maquina, debe especificar su nombre o IP después del nombre del usuario. La siguiente instrucción crea el usuario Juan con su clave 200 para que se pueda conectar desde la maquina que tiene el IP 192.168.1.33.
Grant Usage On Empresa.* To Juan@192.168.1.33 ldentified By '200'; Para visualizar los permisos que tiene asignado un usuario utilice el co mando: Show Grants.
1
504
1