Capítulo 3. El lenguaje SQL.

Capítulo 3. El lenguaje SQL.

1.- Introducción.

SQL (Structured Query Language) es un lenguaje de programación para acceder y manipular bases de datos.

SQL surgió de un proyecto de IBM en el que investigaba el acceso a bases de datos relacionales. Esto poco a poco se ha ido convirtiendo en un estándar de lenguaje de bases de datos y gran parte de ellas lo soportan. Por esta razón, se considera a SQL como un lenguaje normalizado, que nos permite interactuar con cualquier tipo de base de datos (MS Access, SQL Server, MySQL…)

Básicamente SQL está formado por dos tipos de comandos:
– DDL que permiten crear y definir nuevas bases de datos, campos e índices.
– DML que permiten generar consultas para ordenar, filtrar, insertar, modificar y extraer datos de la base de datos.

En este capítulo se usarán solamente los comandos DML, dejándose los comandos DDL para el capítulo correspondiente a MySQL, desde el cual se crearán las tablas y sus campos de forma visual desde su página gestora. También podremos realizar las operaciones correspondientes a los comandos DML desde la página de MySQL, pero su utilidad principal será desde las páginas PHP que creemos.

2.- Sintaxis básica de las órdenes SQL.

Para los comandos SQL usaremos la siguiente nomenclatura:

– Las palabra clave del lenguaje SQL se pondrán en mayúsculas (aunque los gestores de Bases de Datos funcionan indistintamente en mayúsculas, minúsculas o aunque mezclemos ambas en una palabra). Ejemplos de estas palabras son: SELECY, FROM, INSERT, ORDER, etc.

– Entre corchetes cuadrados indicaremos las partes de un comando opcional. Si además aparecen varias opciones separadas por la barra “|” esto nos indica que podremos usar una u otra, pero no las dos.

– Entre las llaves “{“ y “}” indicaremos las partes del comando que pueden aparecer varias veces.

– Entre los símbolos “<“ y “>” indicaremos qué deberemos de poner en ese lugar y que lo sustituiremos por el texto correspondiente, por ejemplo, por el nombre de una tabla o de un campo (sin poner esos símbolos).

– Se recomienda el uso del “sangrado” para indicar que una parte de un comando está incluida en la parte del comando que aparece en la línea anterior (un comando podrá necesitar más de una línea, por eso se recomienda el uso del “sangrado”).

Recordamos al alumno que el objetivo de este curso no es conocer perfectamente SQL, por lo que se verán las instrucciones más importantes y sin entrar en detalle en ellas.

3.- Contenido de la Base de Datos.

Para los siguientes ejemplos vamos a suponer que las tablas del ejemplo “cursosprofesores” contienen los siguientes datos:

PROFESORES:

CodProfesor DNI Nombre Apellidos
115754658LCarlosGarcía López
214587465MPedro Rodríguez Abad
328456474BCarlosMartínez Díaz
436574834AManuelArroyo Gil

CURSOS:

CodCursoNombre  CodProfesor
PHP01Introducción al PHP 1
PHP02PHP. Acceso a Bases de Datos1
OFI01Ofimática: Word y Excel.2
OFI02Ofimática: Writer y Calc.2
OFI03Ofimática Avanzada: Word, Escel.2

Notese que para cada ejercicio siempre vamos a partir de estas tablas, aunque en un ejercicio anterior se haya modificado alguna de ellas.

4.- Ejemplos de “SELECT”

Esta instrucción nos permite “seleccionar” información de la Base de Datos. Su sintaxis general es la siguiente:

SELECT [ALL | DISTINCT ] <nombre_campo> [{,<nombre_campo>}]
FROM <nombre_tabla> [{,<nombre_tabla>}]
[WHERE <condicion> [{ AND|OR <condicion>}]]
[GROUP BY <nombre_campo> [{,<nombre_campo>}]]
[HAVING <condicion>[{ AND|OR <condicion>}]]
[ORDER BY <nombre_campo> [ASC | DESC]
[{,<nombre_campo>|<indice_campo> [ASC | DESC ]}]]

Aunque no veremos todas sus posibilidades, vamos a ir poco a poco viendo sus posibles usos basándonos en las tablas del ejemplo “cursos-profesores”.

– Obtener todos los datos de todos los profesores.

SELECT *
FROM Profesores;

El resultado será:

CodProfesor DNI Nombre Apellidos
115754658LCarlos García López
214587465MPedroRodríguez Abad
328456474BCarlosArroyo Díaz
436574834AManuelMartínez Gil

 

Como podemos ver nos muestra tanto todos los campos de la tabla “Profesores” (esto viene indicado por el asterísco) como todos los profesores.

Además, y como se puede ver, es recomendable terminar la instrucción con un punto y coma.

– Obtener el nombre y apellidos de todos los profesores.

En este caso como sólo queremos ver el nombre y los apellidos sustituimos el asterísco por esa información:

SELECT Nombre, Apellidos
FROM Profesores;

Observemos que la lista de campos que queremos obtener está separada por una coma. Y la solución será:

NombreApellidos
CarlosGarcía López
PedroRodríguez Abad
CarlosArroyo Díaz
ManuelMartínez Gil

 

– Obtener el nombre y apellidos de los profesores con código mayor que 2.

SELECT Nombre, Apellidos
FROM Profesores
WHERE CodProfesor > 2;

Y el resultado será:

NombreApellidos
CarlosArroyo Díaz
ManuelMartínez Gil

– Obtener todos los datos de todos los profesores ordenados por nombre.

En los ejemplos anteriores vemos que el listado normalmente saldrá en el orden en que se dieron de alta los profesores. Para que nos salgan los datos ordenados usaremos ORDER:

SELECT *
FROM Profesores
ORDER BY Nombre;

Y el resultado será:

CodProfesor DNI Nombre Apellidos
115754658LCarlos García López
328456474BCarlos Arroyo Díaz
436574834AManuel Martínez Gil
214587465MPedroRodríguez Abad

Como puede observarse salen ordenados por nombre, pero en el caso de que haya dos profesores con el mismo nombre posiblemente aparezcan en el orden en que se dieron de alta, esto dependerá del Sistema Gestor de Bases de Datos

– Obtener todos los datos de todos los profesores ordenados por nombre y apellidos.

SELECT *
FROM Profesores
ORDER BY Nombre, Apellidos;

Y el resultado será:

CodProfesor DNI Nombre Apellidos
328456474BCarlos Arroyo Díaz
115754658LCarlos García López
436574834AManuel Martínez Gil
214587465MPedroRodríguez Abad

– Obtener los cursos impartidos por el profesor “Carlos”.

En este ejemplo vamos a ver como obtener datos de dos tablas a través de la relación que existe entre ellas con el campo “CodProfesor”.

SELECT Profesores.Nombre, Cursos.CodCurso, Cursos.Nombre
FROM Profesores, Cursos
WHERE Profesores.Nombre = ‘Carlos’
AND Profesores.CodProfesor = Cursos.CodProfesor;

Y el resultado será:

Nombre CodCurso Nombre
CarlosPHP01  Introducción al PHP
CarlosPHP02PHP. Acceso a Bases de Datos

En la instrucción podemos observar varias cosas:
– Cuando tenemos varias tablas y en ellas hay campos con el mismo nombre (en este caso el campo “Nombre”) debemos poner delante el nombre de la tabla seguido de un punto para hacer referencia a dicho campo:
“Profesores.Nombre”, “Profesores.CodProfesor”, etc.

– Cuando usamos el signo igual para compararlo con un número no hacía falta poner las comillas, pero en el caso de querer compararlo con un texto (en este caso con el nombre “Carlos”) debemos ponerlo entre comillas.

– Si necesitamos que se cumplan varias condiciones en el WHERE usaremos AND si estas condiciones se han de complir simultáneamente, y usaremos OR si es sufuciente con que se cumpla sólo alguna de ellas.

– Para expresar la relación entre dos tablas usaremos la igualdad entre los campos que hacen referencia a dicha relación entre las dos tablas (o más si fuera necesario): “Profesores.CodProfesor = Cursos.CodProfesor”.

5.- Ejemplos de “INSERT”

Esta instrucción nos permite “insertar” información de la Base de Datos. Su sintaxis general es la siguiente:

INSERT INTO <nombre_tabla>
[(<campo1>[,<campo2>,…])]
VALUES (<valor1>,<valor2>,…);

Las inserciones sólo se pueden hacer de una en una, es decir, si deseamos insertar 3 nuevos registros deberemos hacer 3 veces esta instrucción: una para cada nuevo registro.

A continuación veremos unos ejemplos de esta instrucción.

– Insertar un curso nuevo al profesor “Manuel”.

INSERT INTO Cursos
VALUES (‘PRG01’, ‘Programación en C’, 4);

Esta instrucción nos insertará un registro nuevo, y la tabla “Cursos” quedará como:

CodCurso Nombre CodProfesor
PHP01Introducción al PHP 1
PHP02PHP. Acceso a Bases de Datos1
OFI01Ofimática: Word y Excel.2
OFI02Ofimática: Writer y Calc2
OFI03Ofimática Avanzada: Word, Escel.2
PRG01 Programación en C 4

En el ejemplo vemos que en caso de no indicar los campos que vamos a rellenar, se toma por defecto que vamos a darle valor a todos los campos en el orden en los que aparecen definidos. Si no queremos dar valor a todos los campos deberemos indicar a cuales vamos a darselo (ver siguiente ejemplo).

– Crear un nuevo curso, sin asignarle profesor.

INSERT INTO Cursos CodCurso, Nombre
VALUES (‘PRG01’, ‘Programación en C’);

Esta instrucción nos insertará un registro nuevo, y la tabla “Cursos” quedará como:

CodCurso Nombre CodProfesor
PHP01Introducción al PHP 1
PHP02PHP. Acceso a Bases de Datos1
OFI01Ofimática: Word y Excel.2
OFI02Ofimática: Writer y Calc2
OFI03Ofimática Avanzada: Word, Escel.2
PRG01 Programación en C 

Podemos observar que no le hemos asignado profesor (CodProfesor) al curso, por lo que éste aparecerá con valor nulo. Entonces pueden pasar varias cosas:

– Si el campo no acepta nulos (esto se indica cuando definimos los campos): la instrucción dará error.
– Que se guarde el registro y que a los campos que no se les ha indicado nada re pongan a “nulo”.
– Que se guarde el registro y que a los campos que no se les ha indicado nada tomen un valor por defecto (que se indicó al definirlos), o un valor “automático” (cuando se definió de tipo autoincremental).

– Crear un nuevo profesor.

INSERT INTO Profesores DNI, Nombre, Apellidos
VALUES (‘27345463E’, ‘Luis’, ‘Olmos Pérez’);

Esta instrucción nos insertará un registro nuevo, y la tabla “Profesores” quedará como:

CodProfesor DNI Nombre Apellidos
115754658LCarlos García López
214587465MPedroRodríguez Abad
328456474BCarlos Martínez Gil
436574834AManuel Arroyo Díaz
527345463E’Luis’Olmos Pérez’

Y podemos observar que el campo CodProfesor, de tipo autoincremental, toma el siguiente valor.

6.- Ejemplos de “UPDATE”

Esta instrucción nos permite “actualizar” información de la Base de Datos. Su sintaxis general es la siguiente:

UPDATE <nombre_tabla>
SET <campo1> = <valor1>
{[,<campo2> = <valor2>,…,<campoN> = <valorN>]}
[WHERE <condicion>];

Las actualizaciones pueden afectar a uno, varios o a todos los registros de una tabla de la Base de Datos. Con esta instrucción (igual que con la de borrado) debemos tener cuidado por que es muy importante usar la opción “WHERE” (aunque sea opcional) pues si no la ponemos nos actualizará todos los registros de la tabla.

– Asignarle el curso PHP01 al profesor Manuel.

UPDATE Cursos
SET CodProfesor = 4
WHERE CodCurso = ‘PHP01’;

La tabla “Cursos” quedará:

CodCurso Nombre CodProfesor
PHP01Introducción al PHP 4
PHP02PHP. Acceso a Bases de Datos1
OFI01Ofimática: Word y Excel.2
OFI02Ofimática: Writer y Calc2
OFI03Ofimática Avanzada: Word, Escel.2

– Asignar al profesor Manuel los cursos que tiene el profesor Pedro.

Normalmente en la condición se usará con el campo clave de la tabla para así conseguir que sólo afecte el cambio a un registro (como en el ejemplo anterior), pero podemos usar cualquier campo y condición (como en este ejemplo).

UPDATE Cursos
SET CodProfesor = 4
WHERE CodProfesor = 2;

La tabla “Cursos” quedará como:

CodCurso Nombre CodProfesor
PHP01Introducción al PHP1
PHP02PHP. Acceso a Bases de Datos1
OFI01Ofimática: Word y Excel.4
OFI02Ofimática: Writer y Calc4
OFI03Ofimática Avanzada: Word, Escel.4

Vemos que se han realizado cambios en 3 registros.

7.- Ejemplos de “DELETE”

Esta instrucción nos permite “borrar” información de la Base de Datos. Su sintaxis general es la siguiente:

DELETE FROM <nombre_tabla>
[WHERE <condicion>];

El borrado puede afectar a uno, varios o a todos los registros de la Base de Datos. Hemos de tener en cuenta que aunque borremos todos los registros, la tabla seguirá existiendo, aunque sin datos. Para borrar la tabla o su estructura existen otras órdenes  que no usaremos por que en caso de necesitarlo podremos hacerlo desde pmpMyAdmin de forma más sencilla (igual que cuando hemos creado la tabla).

Esta instrucción es muy sencilla, pero debermos tener en cuenta una cosa: no debemos de borrar un profesor si éste tiene cursos asignados. Esto aveces es imposible: cuando al definir la tabla “Cursos” le hemos indicado que “CodProfesor” es referencia a otra tabla (“Profesores”) y que no puede tener valores nulos.

– Borrar el curso OFI03.

DELETE FROM Cursos
WHERE CodCurso = ‘OFI03’;

La tabla “Cursos” quedará como:

CodCurso Nombre CodProfesor
PHP01Introducción al PHP 1
PHP02PHP. Acceso a Bases de Datos1
OFI01Ofimática: Word y Excel.4
OFI02Ofimática: Writer y Calc4

– Borrar los cursos del profesor Pedro.

DELETE FROM Cursos
WHERE CodProfesor = 2;

La tabla “Cursos” quedará como:

CodCurso Nombre CodProfesor
PHP01Introducción al PHP1
PHP02PHP. Acceso a Bases de Datos1

 

Publicaciones Similares