¡Aprenda programación sencilla de bases de datos!
zorro es demasiado fácil de tirar. . .
Aprende SQL. .
Encontraré algunas declaraciones básicas para usted
Domine las cuatro declaraciones de operaciones de datos más básicas de SQL: Insertar, Seleccionar, Actualizar y Eliminar.
Dominar SQL es un activo valioso para los usuarios de bases de datos. En este artículo, lo guiaremos para que domine las cuatro declaraciones de manipulación de datos más básicas (las funciones principales de SQL) para introducir operadores de comparación, aserciones de selección y lógica de tres valores en secuencia. Cuando complete estos estudios, es obvio que ha comenzado a dominar SQL.
Antes de comenzar, utilice la instrucción CREATE TABLE para crear una tabla (como se muestra en la Figura 1). Las declaraciones DDL definen objetos de base de datos como tablas, columnas y vistas. No procesan filas en la tabla porque las declaraciones DDL no procesan datos reales en la base de datos. Estas tareas se manejan mediante otro tipo de declaración SQL: declaraciones del lenguaje de manipulación de datos (DML).
Hay cuatro operaciones DML básicas en SQL: INSERTAR, SELECCIONAR, ACTUALIZAR y ELIMINAR. Dado que la mayoría de los usuarios de SQL los utilizan comúnmente, es necesario que los expliquemos uno por uno aquí. En la Figura 1 damos una tabla denominada EMPLEADOS. Cada fila corresponde a un registro de empleado específico. Familiarícese con esta tabla, ya que la usaremos en ejemplos posteriores.
Instrucción INSERT
Los usuarios pueden utilizar la instrucción INSERT para insertar una fila de registros en una tabla especificada. Por ejemplo, para insertar el registro del empleado John Smith en la tabla de este ejemplo, puede utilizar la siguiente instrucción:
INSERT INTO EMPLOYEES VALUES
('Smith', 'John ', ' 1980-06-10',
'Los Angles', 16, 45000);
A través de dicha declaración INSERT, el sistema intentará completar estos valores en las columnas correspondientes del medio. Las columnas están organizadas en el orden que definimos cuando creamos la tabla. En este ejemplo, el primer valor "Smith" se completará en la primera columna APELLIDO_NOMBRE; el segundo valor "Juan" se completará en la segunda columna PRIMER_NOMBRE... y así sucesivamente.
Dijimos que el sistema "intentará" completar los valores y, además de hacer cumplir las reglas, también realizará comprobaciones de tipos. Si los tipos no coinciden (como completar una cadena en una columna de número de tipo), el sistema rechazará la operación y devolverá un mensaje de error.
Si SQL rechaza el valor de una columna que usted completa, los valores de otras columnas en la declaración no se completarán. Esto se debe a que SQL brinda soporte para transacciones. Una transacción mueve una base de datos de una consistencia a otra. Si una parte de la transacción falla, toda la transacción fallará y el sistema se restaurará (o revertirá) al estado anterior a la transacción.
Volviendo al ejemplo INSERT original, tenga en cuenta que no es necesario encerrar todos los números decimales enteros entre comillas simples, y los valores de tipo cadena y fecha deben distinguirse entre comillas simples. Insertar comas entre números para aumentar la legibilidad provocará un error. Recuerde, las comas son el delimitador de elementos en SQL.
También tenga cuidado de utilizar comillas simples al ingresar valores literales. Se utilizan comillas dobles para encapsular identificadores delimitados.
Para los tipos de fecha, debemos utilizar el formato de fecha estándar de SQL (aaaa-mm-dd), pero se puede definir en el sistema para aceptar otros formatos. Por supuesto, a medida que se acerca el año 2000, será mejor que utilice cuatro dígitos para representar el año.
Ahora que comprende cómo funciona la instrucción INSERT, pasemos a las otras partes de la tabla EMPLOYEES:
INSERT INTO EMPLOYEES VALUES
( 'Bunyan ', 'Paul', '1970-07-04',
'Boston', 12, 70000);
INSERTAR EN VALORES DE EMPLEADOS
(' John','Adams','1992-01-21',
'Boston', 20, 100000);
INSERTAR EN VALORES DE EMPLEADOS
( 'Smith', 'Pocahontas', '1976-04-06',
'Los Angles', 12, 100000
INSERTAR EN LOS VALORES DE LOS EMPLEADOS
('Smith', 'Bessie', '1940-05-02',
'Boston', 5, 200000
INSERTAR VALORES DE EMPLEADOS
<); p> ('Jones', 'Davy', '1970-10-10','Boston', 8, 45000);
INSERTAR VALORES DE EMPLEADOS p>
('Jones', 'Indiana', '1992-02-01',
'Chicago', NULL, NULL
En el último elemento, no No conocemos el grado salarial ni el salario anual del Sr. Jones, por lo que ingresamos NULL (sin comillas). NULL es un caso especial en SQL, que analizaremos en detalle más adelante. Por ahora pensamos que NULL representa un valor desconocido.
A veces, como en la situación que acabamos de comentar, es posible que queramos asignar valores a algunas pero no a todas las columnas. Además de ingresar NULL para las columnas que se omitirán, también puede usar otra instrucción INSERT, como sigue:
INSERT INTO EMPLOYEES(
FIRST_NAME, LAST_NAME,
HIRE_DATE, BRANCH_OFFICE)
VALOR(
'Indiana', 'Jones',
'1992-02-01', 'Indianápolis');
p>De esta manera, primero enumeramos una serie de nombres de columnas después del nombre de la tabla. Las columnas que no figuran en la lista se completarán automáticamente con valores predeterminados o NULL si no se establece ningún valor predeterminado. Tenga en cuenta que cambiamos el orden de las columnas y el orden de los valores corresponde al nuevo orden de las columnas. Si los elementos FIRST_NAME y LAST_NAME se omiten en la declaración (estas dos disposiciones no pueden estar vacías), la operación SQL fallará.
Echemos un vistazo al diagrama de sintaxis de la declaración INSERT anterior:
INSERT INTO table
[(columna { , columna})] p>
VALORES
(valor de columna [{, valor de columna}]);
Como en el artículo anterior, utilizamos corchetes para indicar elementos opcionales y llaves para indicar que se pueden repetir cualquier número de elementos (no puede utilizar estos caracteres especiales en la declaración SQL real). Se deben utilizar paréntesis en la cláusula VALUE y en la lista opcional de nombres de columnas.
Sentencia SELECT
La instrucción SELECT puede seleccionar filas y columnas específicas de una o más tablas. Debido a que consultar y recuperar datos son las funciones más importantes en la administración de bases de datos, la instrucción SELECT es la parte de SQL que requiere más carga de trabajo. De hecho, alguien que sólo accede a la base de datos para analizar datos y generar informes puede no saber nada sobre otras declaraciones SQL.
El resultado de la sentencia SELECT suele ser generar otra tabla. Durante el proceso de ejecución, el sistema selecciona filas y columnas coincidentes de la base de datos según los criterios del usuario y coloca los resultados en una tabla temporal. En SQL directo, muestra los resultados en la pantalla del terminal o envía los resultados a una impresora o archivo. También se puede combinar con otras declaraciones SQL para colocar los resultados en una tabla con un nombre conocido.
La declaración SELECT es poderosa. Aunque en la superficie parece que solo se usa para completar la operación de álgebra relacional "selección" (o "restricción") mencionada en la primera parte de este artículo, de hecho también puede completar otras dos operaciones relacionales: "proyección" y "conexión" ", la declaración SELECT también puede completar cálculos de agregación y ordenar datos.
La sintaxis más simple de la instrucción SELECT es la siguiente:
SELECCIONAR columnas DE tablas
Cuando ejecutamos una instrucción SELECT de esta forma, el sistema devuelve; La tabla de resultados compuesta por las columnas seleccionadas y todas las filas especificadas en la tabla seleccionada por el usuario. Esta es una forma de implementar operaciones de proyección relacional.
Veamos algunos ejemplos del uso de la tabla EMPLOYEES en la Figura 1 (esta tabla será utilizada por todas las instancias futuras de la declaración SELECT. Damos los resultados de la consulta real en las Figuras 2 y 3. Usaremos estos resultados en otros ejemplos).
Supongamos que desea ver una lista de los departamentos de trabajo de los empleados. Entonces la siguiente es la consulta SQL que necesita escribir:
SELECT BRANCH_OFFICE FROM EMPLOYEES
La ejecución de la instrucción SELECT anterior producirá los resultados que se muestran en la Tabla 2 en la Figura 2.
Dado que solo especificamos una columna en la instrucción SELECT, solo hay una columna en nuestra tabla de resultados. Observe que hay filas duplicadas en la tabla de resultados. Esto se debe a que hay varios empleados trabajando en el mismo departamento (recuerde que SQL devuelve valores de todas las filas seleccionadas). Para eliminar filas duplicadas en los resultados, simplemente agregue la cláusula DISTINCT a la instrucción SELECT:
SELECT DISTINCT BRANCH_OFFICE
FROM EMPLOYEES
La consulta Los resultados son; se muestra en la Tabla 3.
Ahora que se han eliminado las filas duplicadas, los resultados no están en orden.
¿Qué sucede si desea que los resultados aparezcan en orden alfabético? Simplemente use la cláusula ORDER BY para ordenar los resultados en orden ascendente o descendente:
SELECT DISTINCT BRANCH_OFFICE
FROM EMPLOYEES
ORDER BY BRANCH_OFFICE ASC;
Los resultados de esta consulta se muestran en la Tabla 4. Observe cómo el nombre de la columna BRANCH _OFFICE se coloca después de ORDER BY, esta es la columna que queremos ordenar. ¿Por qué tenemos que especificar el nombre de la columna incluso cuando solo hay una columna en la tabla de resultados? Esto se debe a que también podemos ordenar por otras columnas de la tabla, incluso si no se muestran. La palabra clave ASC después del nombre de la columna BRANCH_OFFICE significa ordenar en orden ascendente. Si desea ordenar en orden descendente, utilice la palabra clave DESC.
También debemos señalar que la cláusula ORDER BY sólo ordena los resultados en la tabla temporal; no afecta a la tabla original;
Supongamos que queremos obtener una lista ordenada por departamento y desde el empleado mejor pagado hasta el empleado peor pagado. Además de lo que está en los tramos salariales, también nos gustaría ver una lista por fecha de contratación, comenzando con el empleado contratado más recientemente. Estas son las declaraciones que usarás:
SELECCIONAR SUCURSAL_OFICINA, PRIMER_NOMBRE,
APELLIDO, SALARIO, FECHA_CONTRATACIÓN
DE EMPLEADOS
ORDENAR POR SALARIO DESC,
HIRE_DATE DESC;
Aquí seleccionamos y ordenamos varias columnas. La prioridad de clasificación está determinada por el orden de los nombres de las columnas en la declaración. SQL ordenará la primera columna listada primero. Si hay filas duplicadas en la primera columna, estas filas se ordenarán según la segunda columna, y si hay filas duplicadas en la segunda columna, estas filas se ordenarán según la tercera columna... ...y así sucesivamente. Los resultados de esta consulta se muestran en la Tabla 5.
Es bastante problemático escribir todos los nombres de las columnas en una tabla muy larga, por lo que SQL permite el uso de * al seleccionar todas las columnas de la tabla:
SELECT * FROM EMPLOYEES ;
Esta consulta devuelve la tabla EMPLOYEES completa, como se muestra en la Tabla 1.
Actualicemos la sintaxis de la instrucción SELECT dada al principio (la línea vertical representa una opción, lo que permite seleccionar una):
SELECT [DISTINCT ]
(columna [{, columnas}])| *
DESDE la tabla [{, tabla}]
[ORDENAR POR columna [ASC]
[{, columna [ASC] | DESC }]];
Definir criterios de selección
En la instrucción SELECT que hemos introducido hasta ahora, se selecciona la columna de la tabla. pero se devuelven todas las filas de la tabla. Veamos cómo restringir la instrucción SELECT para que devuelva solo las filas que desea:
SELECCIONE columnas DE tablas [WHERE predicados]
La cláusula WHERE establece las condiciones, únicamente; Las filas que cumplen las condiciones se incluyen en la tabla de resultados. Estas condiciones están especificadas por predicados (los predicados indican un posible hecho sobre algo).
Si la afirmación es válida para una fila determinada, la fila se incluye en la tabla de resultados; de lo contrario, la fila se ignora. Las afirmaciones generalmente se expresan mediante comparaciones en declaraciones SQL. Por ejemplo, si necesita consultar a todos los empleados con el apellido Jones, puede usar la siguiente instrucción SELECT:
SELECT * FROM EMPLOYEES
WHERE LAST_NAME = 'Jones';
LAST_NAME = La parte 'Jones' es la afirmación. Al ejecutar esta declaración, SQL compara la columna LAST_NAME de cada fila con "Jones". Si el apellido de un empleado es "Jones", la afirmación es verdadera y la información del empleado se incluirá en la tabla de resultados (consulte la Tabla 6).
Las seis comparaciones más utilizadas
La aserción en nuestro ejemplo anterior incluye una comparación basada en "equivalencia" (LAST_NAME = 'Jones'), pero las aserciones SQL también pueden incluir varios otros tipos. de comparaciones. Los más utilizados son:
Igual =
No igual a lt;
Menor que
Mayor que; gt;
p>
Menor o igual a lt; =
Mayor o igual a gt =
Un ejemplo que no está basado sobre la comparación de igualdad se proporciona a continuación:
SELECT * FROM EMPLOYEES
WHERE SALARY gt;
Esta consulta devolverá empleados cuyo salario anual sea mayor a $50,000.00; (ver Tabla 7).
Conectores lógicos
A veces necesitamos definir una sentencia SELECT con más de una aserción. Por ejemplo, si solo quisiera ver información sobre Davy Jones, los resultados de la Tabla 6 serían incorrectos. Para definir mejor una cláusula WHERE, el usuario puede utilizar los conectores lógicos AND, OR y NOT. Para obtener solo los registros del empleado Davy Jones, el usuario puede ingresar la siguiente declaración:
SELECT * FROM EMPLOYEES
WHERE LAST_NAME = 'Jones' AND FIRST_NAME = 'Davy' ;
En este ejemplo, conectamos dos aserciones a través del conector lógico AND. La expresión completa se satisface sólo si se cumplen ambas afirmaciones. Si el usuario necesita definir una declaración SELECT para satisfacer la condición cuando alguno de los elementos es verdadero, se puede utilizar el conector OR:
SELECT * FROM EMPLOYEES
WHERE LAST_NAME = ' Jones' OR LAST_NAME = 'Smith';
A veces, la mejor manera de definir una afirmación es expresarla por su opuesto. Si desea ver la información de todos los empleados excepto los de la oficina de Boston, puede realizar la siguiente consulta:
SELECT * FROM EMPLOYEES
WHERE NOT(BRANCH_OFFICE = 'Boston' );
La palabra clave NOT va seguida de una expresión de comparación entre paréntesis. El resultado es una negación del resultado. Si el departamento de un empleado tiene una oficina en Boston, la expresión entre paréntesis devuelve verdadero, pero el operador NOT invierte el valor, por lo que la fila no se seleccionará.
Las aserciones se pueden anidar con otras aserciones.
Para asegurarse de que se evalúen en el orden correcto, puede rodearlos entre paréntesis:
SELECT * FROM EMPLOYEES
WHERE (LAST_NAME = 'Jones'
AND FIRST_NAME = 'Indiana')
OR (LAST_NAME = 'Smith'
AND FIRST_NAME = 'Bessie');
SQL sigue las convenciones matemáticas estándar para Evaluación de expresiones: las expresiones entre paréntesis se evaluarán primero y las demás expresiones se evaluarán de izquierda a derecha.
Los conectores lógicos se han explicado anteriormente. Antes de explicar el siguiente contenido, actualizamos una vez más la sintaxis de la instrucción SELECT:
SELECT [DISTINCT]
. (columna [{, columna } ] )| *
DESDE la tabla [ { , tabla} ]
[ORDENAR POR columna [ASC] [DESC
[{ , columna [ASC] | [DESC } ] ]
WHERE predicado [ { predicado de conector lógico } ];
NULL y lógica de tres valores
NULL es un tema complejo en SQL, y una descripción detallada de NULL es más adecuada para una introducción en un tutorial de SQL avanzado que en el tutorial introductorio actual. Pero como NULL requiere un manejo especial y es probable que lo encuentres, lo explicaremos brevemente.
En primer lugar, se requiere una sintaxis especial al probar NULL en aserciones. Por ejemplo, si el usuario necesita mostrar toda la información de todos los empleados con salario anual desconocido, el usuario puede usar la siguiente declaración SELECT:
SELECT * FROM EMPLOYEES
DONDE ESTÁ EL SALARIO NULL;
Por el contrario, si el usuario necesita información sobre todos los empleados cuyos datos salariales anuales se conocen, puede utilizar la siguiente declaración:
SELECT * FROM EMPLOYEES
WHERE SALARY IS NOT NULL;
Tenga en cuenta que utilizamos la palabra clave IS NULL o IS NOT NULL después del nombre de la columna, en lugar del formulario de comparación estándar: COLUMN = NULL, COLUMN <> NULL o el operador lógico NO (NULL).
Este formulario es bastante sencillo. Pero las cosas pueden complicarse cuando no se prueban explícitamente los NULL (y existen).
Por ejemplo, al mirar nuestra tabla EM-PLOYEES en la Figura 1, podemos ver que se desconoce el grado salarial o el valor salarial anual de Indiana Jones. Ambas columnas contienen NULL. Puedes imaginarte ejecutando la siguiente consulta:
SELECT * FROM EMPLOYEES
WHERE GRADE lt;= SALARY;
En este punto, Indiana Jones debería aparecer en el tabla de resultados. Debido a que todos los NULL son iguales, es posible que puedan pasar la verificación de GRADO menor o igual a SALARIO. En realidad, esta es una consulta obvia, pero no importa. SQL permite este tipo de comparaciones siempre que ambas columnas sean de tipo numérico.
Sin embargo, Indiana Jones no aparece en los resultados de la consulta. ¿Por qué?
Como mencionamos anteriormente, NULL representa un valor desconocido (en lugar de un valor NULL, como algunos podrían imaginar). Lo que esto significa para SQL es que el valor es desconocido y, mientras el valor sea desconocido, no se puede comparar con otros valores (incluso si los otros valores son NULL). Entonces SQL permite un tercer tipo de valor de verdad además de verdadero y falso, llamado valor "desconocido".
Si ambos lados de la comparación son NULL, la afirmación completa se considera no determinista. Cuando una afirmación no determinista se niega o se combina con otras afirmaciones utilizando AND u OR, el resultado sigue siendo no determinista. Dado que la tabla de resultados solo incluye filas para las cuales el valor de aserción es "verdadero", es imposible que NULL satisfaga esta verificación. Esto requiere el uso de operadores especiales IS NULL y NOT NULL.
Instrucción UPDATE
La instrucción UPDATE permite a los usuarios modificar filas existentes en una tabla conocida.
Por ejemplo, acabamos de descubrir que Indiana Jones tiene una calificación de 16 y un salario de $40,000.00. Podemos actualizar la base de datos (y borrar esos molestos NULL) con la siguiente declaración SQL.
ACTUALIZAR EMPLEADOS
ESTABLECER GRADO = 16, SALARIO = 40000
DONDE PRIMER NOMBRE = 'Indiana'
Y APELLIDO = 'Jones' ;
El ejemplo anterior ilustra una actualización de una sola fila, pero la instrucción UPDATE puede operar en varias filas. Se actualizarán todas las filas que cumplan la condición WHERE. Si desea que todos los empleados de la oficina de Boston se muden a Nueva York, puede utilizar la siguiente declaración:
ACTUALIZAR EMPLOYEES
SET BRANCH_OFFICE = 'Nueva York'
WHERE BRANCH_OFFICE = 'Boston';
Si se omite la cláusula WHERE, los valores de departamento en todas las filas de la tabla se actualizarán a 'Nueva York'.
El diagrama de flujo de sintaxis de la instrucción UPDATE es el siguiente:
ACTUALIZAR tabla
SET columna = valor [{, columna = valor}]
[ WHERE predicado [ { predicado de conector lógico}]];
sentencia DELETE
La sentencia DELETE se utiliza para eliminar filas en una tabla conocida. Como en la declaración UPDATE, se eliminarán todas las filas que cumplan las condiciones de la cláusula WHERE. Dado que no hay ninguna instrucción UNDO o advertencia como "¿Está seguro de eliminar?" en SQL, tenga cuidado al ejecutar esta instrucción. Si se tomara la decisión de cerrar la oficina de Los Ángeles y despedir a todos sus empleados, el trabajo sucio se podría realizar con esta declaración:
BORRAR DE EMPLEADOS
WHERE BRANCH_OFFICE = ' Los Ángeles ';
Como en la instrucción UPDATE, omitir la cláusula WHERE hará que la operación se aplique a todas las filas de la tabla.
El diagrama de flujo de sintaxis de la declaración DELETE es el siguiente:
DELETE FROM table
[WHERE predicado [ {predicado de conector lógico} ] ]; /p>
ELIMINAR DE la tabla
p>
Ahora hemos completado la introducción de las declaraciones principales del lenguaje de manipulación de datos (DML). No hemos descrito todo lo que SQL puede hacer. SQL también proporciona muchas funciones, como promediar, sumar y otros cálculos sobre datos en tablas. Además, SQL también puede completar consultas de varias tablas (consultas de varias tablas o uniones). El lenguaje también le permite controlar el acceso a los datos de los usuarios mediante los comandos GRANT y REVOKE