Estructuras de datos en listas enlazadas individualmente y listas secuenciales. Implementar la búsqueda. insertar. borrar. Lo publicaré cuando termine mi carrera. Gracias.
De: Habilidades de programación SQL
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 a través de cuatro declaraciones básicas de manipulación de datos (las funciones principales de SQL), introduciendo a su vez operadores de comparación, aserciones de selección y lógica ternaria. Cuando termine de aprender esto, será obvio que domina SQL.
Antes de comenzar, cree una tabla usando la instrucción CREATE TABLE (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 tablas porque las declaraciones DDL no procesan datos reales en la base de datos. Estas tareas se manejan mediante otro tipo de declaración SQL, la declaración 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, se nos proporciona una tabla denominada EMPLEADOS. Cada fila corresponde a un registro de empleado específico. Familiarícese con esta tabla. Usaremos esto en los siguientes ejemplos.
Insertar declaración
Los usuarios pueden usar la declaración INSERT para insertar una fila de registros en la tabla especificada. Por ejemplo, en este ejemplo, para insertar registros del empleado John Smith en la tabla, usaría la siguiente declaración:
Insertar valores de empleado
('Smith', 'John' , '1980-06-10',
Los Ángeles', 16, 45000);
Usando una declaración INSERT como esta, el sistema intentará completar los valores en las columnas correspondientes. 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á la verificación de tipos. Si los tipos no coinciden (por ejemplo, una columna de número de tipo se completa con una cadena), el sistema rechaza la operación y devuelve 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. Las transacciones mueven una base de datos de una consistencia a otra. Si parte de una transacción falla, toda la transacción fallará y el sistema volverá (o retrocederá) al estado anterior a la transacción.
Volviendo al ejemplo INSERT original, tenga en cuenta que no es necesario encerrar todos los números enteros y decimales entre comillas simples, pero los valores de tipo cadena y fecha deben estar separados por comillas simples. Insertar comas entre números para aumentar la legibilidad genera un error. Recuerde, la coma es el delimitador de elementos en SQL.
Al ingresar valores de texto, también tenga cuidado de utilizar comillas simples. Se utilizan comillas dobles para encapsular el identificador de licencia.
Para el tipo de fecha, tenemos que usar el formato de fecha estándar SQL (aaaa-mm-dd), pero se puede definir en el sistema para aceptar otros formatos. Por supuesto, al acercarse el año 2000, sería mejor utilizar 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:
Insertar valores de empleado
('Bunyan' , 'Paul', '1970-07-04',
Boston', 12, 70000);
Insertar valores de los empleados
('John', 'Adams','1992-01-21',
Boston',20,100000);
Insertar valores de los empleados
('Smith',' Pocahontas', '1976-04-06',
Los Ángeles', 12, 100000);
Insertar valores de los empleados
('Smith', ' Bessie', '1940-05-02',
Boston, £5,2 millones);
Insertar valores de los empleados
('Jones', 'David' , '1970-10-10',
Boston', 8, 45000);
Insertar valores de empleado
('Jones', 'Indiana', '1992-02-01',
Chicago', NULL, NULL);
Para el último elemento, no conocemos el nivel salarial ni el salario anual del Sr. Jones, por lo que ingrese NULL (sin comillas). NULL es un caso especial en SQL, que analizaremos en detalle más adelante. Por ahora sólo debemos pensar que NULL representa un valor desconocido.
En ocasiones, como acabamos de comentar, es posible que queramos asignar valores a algunas columnas, pero no a todas. En lugar de ingresar NULL para las columnas que desea omitir, puede usar otra instrucción INSERT de la siguiente manera:
INSERT INTO Employee(
Nombre, Apellido,
Fecha de contratación, sucursal)
Valor(
Indiana, Jones,
1992-02-01 ', 'Indianapolis');
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, el orden de los valores debe corresponder al orden de las nuevas columnas. Si los elementos FIRST_NAME y LAST_NAME se omiten en esta declaración (estos dos elementos no pueden estar vacíos), la operación SQL fallará.
Echemos un vistazo al diagrama de sintaxis de la declaración INSERT anterior:
Insertar tabla
[(columna {, columna})]
Concepto de valor
(valor de columna [{, valor de columna }]);
Como en el artículo anterior, utilizamos corchetes para indicar opciones y llaves para indicar que se pueden repetir cualquier número de veces (estos caracteres especiales no se pueden utilizar en sentencias SQL reales). Se deben utilizar paréntesis en la cláusula VALUE y en la lista opcional de nombres de columnas.
Instrucciones de selección
La instrucción SELECT selecciona 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 una sentencia SELECT suele ser otra tabla. Durante la 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 puedes combinarlo 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 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 de selección también puede completar cálculos de agregación y clasificación de datos.
La sintaxis más simple de la instrucción SELECT es la siguiente:
Seleccionar columnas de la tabla
Cuando ejecutamos la instrucción SELECT de esta forma, el sistema; devuelve un resultado Una tabla que consta de columnas seleccionadas y todas las filas especificadas de una tabla seleccionada por el usuario. Esta es una forma de implementar operaciones de proyección relacional.
Veamos algunos ejemplos usando la tabla EMPLOYEES en la Figura 1 (esta tabla será utilizada por todas las instancias de sentencia SELECT en el futuro. Damos los resultados reales de la consulta en las Figuras 2 y 3. utilice estos resultados en otros ejemplos).
Supongamos que desea ver una lista de departamentos donde trabajan los empleados. Aquí está la consulta SQL que necesita escribir:
Seleccione BRANCH_OFFICE FROM EMPLOYEES
La ejecución de la instrucción SELECT anterior producirá los resultados que se muestran en la Tabla 2 de la Figura 2.
Debido a que solo especificamos una columna en la instrucción SELECT, solo hay una columna en la tabla de resultados. Tenga en cuenta que hay filas duplicadas en la tabla de resultados porque hay varios empleados trabajando en el mismo departamento (recuerde, SQL devuelve valores de todas las filas seleccionadas). Para eliminar filas duplicadas en los resultados, simplemente agregue una cláusula DISTINCT a la instrucción SELECT:
Seleccione una rama diferente
De los empleados;
Estos son los resultados de la consulta se muestran en la Tabla 3.
Ahora se han eliminado las filas duplicadas, pero los resultados no están en orden. ¿Qué sucede si desea enumerar los resultados alfabéticamente? Puede ordenar los resultados en orden ascendente o descendente simplemente usando la cláusula ORDER BY:
Seleccione diferentes ramas
De empleados
Por rama Clasificación 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, que es la columna que queremos ordenar. ¿Por qué indicamos el nombre de la columna aunque solo haya una columna en la tabla de resultados? Esto se debe a que también podemos ordenar según otras columnas de la tabla, incluso si no se muestran. La palabra clave ASC después del nombre de la columna BRANCH_OFFICE indica que está ordenada en orden ascendente. Si desea ordenar en orden descendente, puede utilizar la palabra clave desc.
Nuevamente debemos señalar que la cláusula ORDER BY solo ordena los resultados en la tabla temporal, no afecta la tabla original;
Supongamos que queremos obtener una lista ordenada por departamento, desde el empleado mejor pagado hasta el empleado peor pagado. Además de lo que aparece en la escala salarial, también nos gustaría ver una lista de los empleados contratados recientemente organizados por fecha de contratación. Estas son las oraciones que usarás:
SELECCIONA sucursal, nombre,
apellido, salario, fecha de contratación
Del empleado
Ordenar DESC por salario,
Fecha de contratación de DESC;
Aquí hemos seleccionado y ordenado varias columnas. La prioridad de la 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, se ordenará por la segunda columna, si hay filas duplicadas en la segunda columna, se ordenará por la tercera columna, y así sucesivamente. Los resultados de esta consulta se muestran en la Tabla 5.
Escribir todos los nombres de las columnas en una tabla larga es bastante engorroso, por lo que SQL le permite usar el símbolo * al seleccionar todas las columnas de la tabla:
SELECCIONAR * DE LOS EMPLEADOS< /p >
Esta consulta devuelve la tabla EMPLOYEES completa, como se muestra en la Tabla 1.
Actualicemos la sintaxis de la instrucción SELECT proporcionada al principio (una barra vertical representa una opción, lo que le permite seleccionar una.
):
Seleccione [diferente]
(columna [{, columna}])*
De la tabla [{, tabla}]
[Ordenar por columna[ASC]|DESC
[{, columna[ASC]|desc }]];
Definir criterios de selección
En Las declaraciones SELECT que hemos cubierto hasta ahora han seleccionado columnas en la tabla de resultados, pero han devuelto todas las filas de la tabla. Veamos cómo restringir la instrucción SELECT para que devuelva solo las filas requeridas:
Seleccione columnas de la tabla [predicado WHERE]
La cláusula WHERE establece las condiciones, tabla resultante Solo filas que; cumplen los criterios están incluidos. Estas condiciones están especificadas por un predicado (una afirmación representa un hecho posible sobre algo). Si la afirmación para una fila determinada es verdadera, la fila se incluirá en la tabla de resultados; de lo contrario, se ignorará. Las afirmaciones en declaraciones SQL generalmente se expresan como comparaciones. Por ejemplo, si necesita consultar a todos los empleados con el apellido Jones, puede usar la siguiente instrucción SELECT:
SELECT * FROM empleados
donde APELLIDO _ NOMBRE = ' Jones
La parte LAST_NAME = 'Jones ' es una afirmación. Cuando se ejecuta la 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
Las aserciones de nuestro ejemplo anterior incluían comparaciones basadas en "equivalencia" (LAST_NAME = 'Jones '), pero las aserciones SQL también pueden incluir otras. Varios tipos de comparaciones. Los más utilizados son:
Competente
No igual a
Menor que
Mayor que
Menor o igual a
Mayor o igual> =
Aquí hay un ejemplo que no está basado en una comparación equivalente:
SELECCIONAR * DE EMPLEADOS
donde salario gt50000;
Esta consulta devolverá empleados con un salario anual superior a $50.000,00 (consulte la Tabla 7).
Conector lógico
A veces necesitamos definir una declaración SELECT con múltiples aserciones. Por ejemplo, si solo quisiera ver información sobre Davy Jones, los resultados de la Tabla 6 serían incorrectos. Para definir mejor la cláusula WHERE, los usuarios pueden utilizar los conectores lógicos AND, o y NOT. Para obtener solo los registros del empleado David Jones, el usuario puede ingresar la siguiente declaración:
SELECT * FROM Employees
Donde apellido = 'Jones', nombre = ' David';
En este ejemplo, conectamos dos afirmaciones 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 de modo que se cumpla una condición cuando cualquiera de las declaraciones sea verdadera, se puede utilizar el conector OR:
SELECT * FROM Employee
Dónde Apellido = 'Jones' o apellido = 'Smith';
A veces, la mejor manera de definir una afirmación es explicarla mediante su descripción opuesta. Si desea verificar la información de todos los empleados excepto la oficina de Boston, puede ejecutar la siguiente consulta:
SELECT * FROM empleados
WHERE NOT(BRANCH _ OFFICE = ' Boston ')
La palabra clave NOT va seguida de una expresión de comparación entre paréntesis. El resultado es un resultado negativo. La expresión entre paréntesis devuelve verdadero si la oficina del departamento del empleado está en Boston, pero el operador NOT invierte el valor para que la fila no se seleccione.
Las afirmaciones se pueden anidar con otras afirmaciones.
Para asegurarse de que se evalúen en el orden correcto, puede rodearlos entre paréntesis:
SELECT * FROM Employees
dónde (Apellido = 'Jones'
y FIRST_NAME = 'Indiana ')
O (apellido = 'Smith'
y FIRST_NAME = 'Bessie');
SQL sigue estándares matemáticos Convenciones para Evaluación de expresiones: las expresiones entre paréntesis se evalúan primero y las demás expresiones se evalúan de izquierda a derecha.
Los conectores lógicos son los descritos anteriormente. Antes de eso, actualizamos la sintaxis de la instrucción SELECT nuevamente:
Select [diferente]
(Column[{, column}]) *
From tabla [ {, tabla} ]
[Ordenar por columna [ASC] | [DESC
[{, columna [ASC] [DESC }] ]
WHERE predicado [{predicado de conexión lógica}];
Lógica cero y ternaria
NULL es un tema más complejo en SQL. La descripción detallada de NULL es más adecuada en SQL. en los tutoriales avanzados, en lugar de en los tutoriales introductorios actuales. Pero debido a que NULL requiere un manejo especial, es probable que lo encuentre, por lo que lo explicaremos brevemente.
En primer lugar, se requiere una sintaxis especial al realizar pruebas nulas en las afirmaciones. Por ejemplo, si el usuario necesita mostrar toda la información de todos los empleados cuyo salario anual se desconoce, el usuario puede utilizar la siguiente instrucción SELECT:
SELECT * FROM Employees
El salario está vacío;
Por el contrario, si el usuario necesita conocer la información de todos los empleados con datos de salario anual, puede utilizar la siguiente declaración:
SELECT * FROM empleados p>
El salario no está vacío;
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: columna = NULL, COLUMN
Esta tabla es muy sencilla. Pero cuando no se prueban explícitamente los NULL (existen), las cosas se complican.
Por ejemplo, si volvemos a mirar la tabla de empleados en la Figura 1, podemos ver que se desconoce el grado salarial o el salario anual de Indiana Jones. Ambas columnas contienen NULL. Imagine ejecutar una consulta como esta:
SELECT * FROM Employees
donde calificación=salario;
En este punto, Indiana Jones debería aparecer en la tabla de resultados. Dado que los ceros son todos iguales, es posible que pasen la calificación inferior o igual al cheque salarial. En realidad, esta es una consulta incuestionable, pero no importa. SQL permite esta comparación siempre que ambas columnas sean numéricas. Sin embargo, Indiana Jones no aparece en los resultados de la consulta. ¿Por qué?
Como mencionamos anteriormente, NULL significa un valor desconocido (no un valor nulo como algunas personas piensan). Para SQL, significa que el valor es desconocido y, mientras el valor sea desconocido, no se puede comparar con otros valores (incluso si los otros valores están vacíos). Entonces SQL permite un tercer tipo de valor de verdad además de verdadero y falso, llamado valores "desconocidos".
Si ambos lados de la comparación son nulos, la afirmación completa se considera indefinida. Después de invertir una afirmación no determinista o combinarla con otras afirmaciones usando AND u OR, el resultado permanece indeterminado. Debido a que la tabla de resultados solo incluye filas para las cuales el valor de aserción es "verdadero", NULL no puede satisfacer esta verificación. Por tanto, es necesario utilizar los operadores especiales IS NULL y IS NOT NULL.
Declaración de actualización
La declaración UPDATE permite al usuario 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 dólares. Podemos actualizar la base de datos (y borrar esos molestos valores nulos) con la siguiente declaración SQL.
Actualizar empleado
Establecer calificación = 16, salario = 40000
donde NOMBRE = 'INDIA'
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 quisiera que todos los empleados de la oficina de Boston se mudaran a Nueva York, podría utilizar la siguiente declaración:
Actualizar empleados
SET BRANCH_OFFICE = 'Nueva York'
donde BRANCH_OFFICE = ' Boston
Si se omite la cláusula WHERE, los valores de departamento de 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}]
[predicado WHERE [{predicado de unión lógica}]];
Declaración DELETE
La declaración DELETE se utiliza para eliminar filas en una tabla conocida. Al igual que en la declaración UPDATE, se eliminarán todas las filas que cumplan las condiciones de la cláusula WHERE. Debido a que no hay una instrucción UNDO o advertencias como "¿Está seguro de que desea eliminar?" en SQL, tenga cuidado al ejecutar esta instrucción. Si decides desmantelar tu oficina de Los Ángeles y despedir a todas las personas que trabajan en ella, este trabajo sucio se puede lograr con la siguiente frase:
Quitar de empleados
donde BRANCH_OFFICE = 'Los Angeles' ;
Como en la declaració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:
Eliminar de la tabla
[WHERE predicado [{predicado de conexión lógica}]];
Ahora hemos completado la introducción de las principales declaraciones del lenguaje de manipulación de datos (DML). No hemos explicado todo lo que SQL puede hacer. SQL también proporciona muchas funciones, como cálculos como promedio y suma de 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 utilizar los comandos GRANT y REVOKE para controlar el acceso a los datos de un usuario.