Ejemplos distintos de SQL. DONDE – condición para seleccionar filas. Establecer alias para columnas de consulta

A menudo cuando usando SQL Para recuperar información de las tablas, el usuario recibe datos redundantes que consisten en filas repetidas absolutamente idénticas. Para evitar esta situación, utilice el argumento distinto de SQL en la cláusula Select. Este artículo discutirá ejemplos del uso de este argumento, así como situaciones en las que es mejor negarse a utilizar el argumento.

Antes de comenzar a ver ejemplos específicos, creemos un par de tablas necesarias en la base de datos.

Preparando mesas

Imaginemos que tenemos información sobre papel tapiz almacenada en nuestra base de datos, presentada en dos tablas. Esta es una tabla Oboi con campos id (identificador único), tipo (tipo de papel tapiz: papel, vinilo, etc.), color (color), estructura (estructura) y precio (precio). Y la tabla Ostatki (permanece) con los campos id_oboi (enlace a un identificador único en la tabla Oboi) y recuento (número de rollos en stock).

Llenemos las tablas con datos. Agreguemos 9 entradas a la tabla de fondos de pantalla:

Papel

Multicolor

En relieve

Papel de dos capas

Vinilo

En relieve

No tejido

En relieve

Papel de dos capas

Papel

Multicolor

Vinilo

Marrón

No tejido

En relieve

Tela

También hay nueve entradas en la tabla con saldos:

Comencemos describiendo cómo usar distintos en SQL.

Lugar de distinto en la cláusula Select

El argumento distinto debe colocarse inmediatamente después de la palabra clave Seleccionar en las consultas. Se aplica a todas las columnas especificadas en la cláusula Select a la vez, porque excluirá filas absolutamente idénticas del resultado final de la consulta. Así, basta con indicar una vez al escribir consulta SQL"seleccionar distinto". La excepción es el uso de funciones distintas dentro de las funciones agregadas, que veremos un poco más adelante.

Debe recordarse que la mayoría de los DBMS no reconocerán consultas como:

SELECCIONE Ostatki distinto.Cuenta, Oboi distinto.*

UNIÓN INTERNA Ostatki EN Wallpaper.id = Ostatki.id_oboi

Aquí el argumento en cuestión se especifica varias veces o una vez, pero antes de la segunda, tercera u otra columna seleccionada. Recibirá un error citando imprecisiones en la sintaxis.

Usar distinto en consultas estándar

Es obvio que con la construcción adecuada de la estructura de las tablas y su llenado, se excluyen situaciones en las que dentro de una tabla aparecen filas absolutamente idénticas. Por lo tanto, ejecutar una consulta "Seleccionar distinto *" que seleccione de una sola tabla no es práctico.

Imaginemos una situación en la que necesitamos saber qué tipo de papel tapiz tenemos por conveniencia, clasifiquemos inmediatamente por tipo:

Como puede ver, hay filas duplicadas en la tabla. Si agregamos Select distinto a la cláusula:

Por lo tanto, si los datos se ingresaron correctamente en las tablas, inmediatamente después de una llamada o solicitud de los clientes podremos responder que el papel tapiz líquido, el papel tapiz de vidrio y el papel tapiz acrílico no están disponibles en la tienda. Teniendo en cuenta que el surtido en las tiendas no suele limitarse a cien papeles pintados, revisar una lista de tipos no únicos sería bastante laborioso.

Usar funciones agregadas internas distintas

El argumento se puede utilizar con cualquier función agregada. Pero para Min y Max, su uso no tendrá ningún efecto, y al calcular la suma o el valor promedio, rara vez es posible imaginar una situación en la que no sea necesario tener en cuenta las repeticiones.

Digamos que queremos saber qué tan lleno está nuestro almacén, y para ello enviamos una solicitud que calcula el número total de rollos en el almacén:

entonces solo obtenemos 119, porque el papel pintado con los números de artículo 3 y 7 se encuentra en el almacén en la misma cantidad. Sin embargo, es obvio que esta respuesta es incorrecta.

El uso más común de distinto en SQL es con la función Count. Así, podemos saber fácilmente cuántos tipos únicos de papel tapiz tenemos:

SELECCIONAR recuento (tipo de fondo de pantalla distinto)

Y obtenga el resultado 5: papel, vinilo, tela y no tejido normal y de dos capas. Seguramente todo el mundo ha visto un anuncio como: “¡Solo tenemos más de 20 tipos de papeles pintados diferentes!”, lo que significa que en esta tienda no hay un par de docenas de rollos de todo, sino papel pintado de una amplia variedad de tipos modernos.

Curiosamente, puede especificar varias funciones Count en una solicitud, con o sin el atributo distintivo. Es decir, esta es la única situación en la que distintos en Select pueden estar presentes varias veces.

Cuándo abandonar un argumento

Debe evitar utilizar el argumento distinto de SQL en uno de dos casos:

  • Selecciona de las tablas y está seguro de que los valores de cada una son únicos. En este caso, utilizar el argumento no es apropiado, porque supone una carga adicional en el servidor o cliente (según el tipo de DBMS).
  • Tienes miedo de perder los datos necesarios. Déjame explicarte.
  • Digamos que tu jefe te pide que enumeres el fondo de pantalla que tienes, con sólo dos columnas: tipo y color. Por costumbre, especifica el argumento distinto:

    Puede parecer que tenemos un solo tipo de papel pintado (normal y bicapa), aunque en realidad incluso en nuestra pequeña mesa hay dos artículos cada uno (el resultado es sin diferencia):

    Por lo tanto, como al redactar cualquier consulta, es necesario tener cuidado con el argumento concreto y resolver competentemente la cuestión de su uso, dependiendo de la tarea en cuestión.

    Alternativa a distinta

    Lo opuesto al argumento distinto es el argumento Todo. Cuando lo usas, se guardan líneas duplicadas. Pero dado que, de forma predeterminada, el DBMS piensa que todos los valores deben imprimirse, el argumento Todo es más un calificador que un argumento funcional real.

    Esperamos que ahora comprenda cuándo se utiliza distinto (SQL). La descripción te dio información completa sobre la conveniencia de utilizar este argumento a la hora de decidir diferentes tareas. Después de todo, como se vio después, incluso un argumento tan simple en su aplicación esconde una probabilidad muy tangible de perder algunos datos y mostrar información inexacta.

    SELECCIONAR

    Conceptos básicos de consultas SELECT en Oracle SQL, sintaxis básica de consultas, lista de columnas, alias y literales, operador q", palabra clave DISTINTO

    El principal medio para obtener información de una base de datos es a través de consultas, es decir, el comando SELECT. Las capacidades básicas de este comando se analizarán en esta sección; otras capacidades más complejas se analizarán en las siguientes secciones. Cada sección resaltará cómo se compara con funciones similares de Microsoft SQL Server.

    Dado que todas las bases de datos principales admiten el estándar ANSI SQL, capacidades básicas tanto en Oracle como en otras bases de datos (Microsoft SQL Server, IBM DB 2, Informix, Sybase, Microsoft Access) serán similares. Las diferencias están en detalles que el estándar SQL no define, pero que son bastante importantes y pueden generar dificultades para los usuarios acostumbrados a consultar otras bases de datos.

    Sintaxis básica SELECCIONAR comandos en Oracle se ve así:

    SELECCIONE [ DISTINCT ] column_list DESDE la fuente DONDE filtrar ORDEN POR sort_expression

    A continuación se muestra un ejemplo de dicha solicitud:

    SELECCIONE empleado_id, nombre, apellido, fecha_contratación DE hr.employees DONDE fecha_contratación< "01.01.2000" ORDER BY last_name

    Como podemos ver, aún no se utilizan en la solicitud. características especiales, parece absolutamente estándar y es completamente idéntico a consultas similares, por ejemplo, en SQL Server. Si necesitamos seleccionar todas las columnas de una base de datos o vista, podemos especificar un asterisco en lugar de una lista de columnas:

    SELECCIONE * DE hr.employees DONDE fecha_contratación< "01.01.2000" ORDER BY last_name

    El nombre para mostrar de una columna se puede cambiar utilizando un alias. Para hacer esto, simplemente escriba el nombre del alias inmediatamente después del nombre de la columna o use la palabra clave AS (ambas sintaxis son completamente equivalentes):

    SELECCIONE apellido Apellido DE hr.employees

    SELECCIONE apellido COMO Apellido DE hr.employees

    Es especialmente conveniente utilizar alias para columnas calculadas que inicialmente no tienen nombre:

    SELECCIONE apellido AS Apellido, salario*12 COMO "Salario del año" DE hr.employees

    Si un alias utiliza espacios o algún tipo de carácter de servicio, dicho alias debe colocarse entre comillas dobles.

    Observemos también algunas características asociadas con la lista de columnas en Oracle. Mientras que en SQL Server los nombres de las columnas de "problema" (con espacios y palabras reservadas) se pueden colocar entre corchetes (y normalmente entre comillas dobles, dependiendo de la configuración de la sesión), en Oracle ambas opciones provocarán un error.

    Puede incluir literales en una lista de columnas en Oracle. Un literal es cualquier valor de cadena, fecha o número que cabe en una lista de columnas y no es ni un nombre de columna ni un alias. Los literales se repetirán para cada columna devuelta. Normalmente se utilizan para crear anotaciones en el conjunto de resultados devuelto:

    SELECCIONE apellido AS Apellido, "Salario del año: ", salario*12 DE hr.employees

    En este ejemplo, "Salario del año: " es el literal que se generará para cada registro.

    Los literales de cadena y los literales de fecha deben estar entre comillas simples. Los literales en forma de valores numéricos no se colocan entre comillas.

    Tenga en cuenta que los literales a menudo se combinan en la salida con valores devueltos por la base de datos mediante el operador de concatenación (||). Los operadores de Oracle se analizarán en las secciones 2.2, 2.3.

    Un problema que a veces surge al trabajar con literales es que el propio literal puede contener un carácter reservado, como comillas simples. Oracle, a diferencia de, por ejemplo, SQL Server, permite al usuario definir de forma independiente el carácter que se utilizará como comillas. Esta redefinición puede verse así. por ejemplo así:

    seleccione departamento_nombre, q "[Se le asigna ID de administrador:]", administrador_id de departamentos

    Intentar utilizar comillas simples normales en un literal dará como resultado un error porque la comilla aparece dentro del valor de carácter del propio literal. Por lo tanto, en este ejemplo, los corchetes actúan como comillas.

    Observemos algunas características del uso del operador q ":

    • se puede utilizar como letra minúscula q y mayúscula (Q);
    • despues de q deberia haber uno regular comillas simples. La siguiente comilla simple finaliza el alcance del operador q;
    • Inmediatamente después de la comilla simple debe ir el carácter elegido por el usuario para ser utilizado como comillas. Este carácter puede ser cualquier cosa excepto un espacio, una nueva línea o una tabulación (incluidas las comillas simples). Si el usuario ha seleccionado el carácter (, (, [ o . En otros casos, el cierre de las comillas se realiza utilizando el mismo carácter que se utilizó para abrirlas.

    Un último punto relacionado con la sintaxis básica de consulta. De forma predeterminada, una consulta devolverá todos los valores de la base de datos que coincidan con los parámetros de la consulta, incluso si algunos de los valores devueltos son exactamente iguales. Por ejemplo, solicitar

    SELECCIONE el salario DE hr. empleados

    devolverá 107 filas, a pesar de que una parte importante de los valores se repetirán.

    Para devolver solo valores únicos (o conjuntos de valores si se devuelven varias columnas), puede utilizar la palabra clave DISTINCT en su consulta:

    SELECCIONE el salario DISTINTO DE hr.employees

    Dicha consulta devolverá 57 valores y todos los valores serán únicos.

    Una característica única de Oracle es que puede utilizar la palabra clave ÚNICA en lugar de DISTINCT. SQL Server no permite esto.

    En la primera parte ya tocamos un poco el lenguaje DML, utilizando casi todo el conjunto de sus comandos, a excepción del comando MERGE.

    Hablaré de DML según mi secuencia desarrollada en experiencia personal. En el camino, también intentaré hablar sobre los lugares "resbaladizos" en los que vale la pena centrarse; estos lugares "resbaladizos" son similares en muchos dialectos del lenguaje SQL.

    Porque el libro de texto está dedicado a una amplia gama de lectores (no solo programadores), entonces la explicación a veces será apropiada, es decir, largo y tedioso. Esta es mi visión del material, que se obtuvo principalmente en la práctica como resultado de la actividad profesional.

    El objetivo principal de este tutorial, paso a paso, es desarrollar una comprensión completa de la esencia del lenguaje SQL y enseñarle cómo aplicar correctamente sus construcciones. Los profesionales de este campo también pueden estar interesados ​​en hojear este material, tal vez puedan aprender algo nuevo por sí mismos, o tal vez simplemente les resulte útil leerlo para refrescar la memoria. Espero que todos lo encuentren interesante.

    Porque DML en el dialecto de la base de datos MS SQL está muy relacionado con la sintaxis de la construcción SELECT, por lo que comenzaré a hablar de DML con él. En mi opinión, la construcción SELECT es la construcción más importante en el lenguaje DML, porque gracias a él o a sus partes, los datos necesarios se recuperan de la base de datos.

    El lenguaje DML contiene las siguientes construcciones:

    • SELECCIONAR – selección de datos
    • INSERTAR – insertar nuevos datos
    • ACTUALIZACIÓN – actualización de datos
    • BORRAR – eliminar datos
    • FUSIONAR – fusión de datos

    En esta parte, veremos solo la sintaxis básica del comando SELECT, que se ve así:

    SELECCIONE column_list o * DESDE la fuente DONDE filtrar ORDEN POR sort_expression
    El tema de la declaración SELECT es muy amplio, por lo que en esta parte me centraré sólo en sus estructuras básicas. Creo que sin conocer bien los conceptos básicos no se puede empezar a estudiar estructuras más complejas, porque entonces todo girará en torno a este diseño básico (subconsultas, uniones, etc.).

    Además, como parte de esta parte, también hablaré de la oferta TOP. Intencionalmente no indiqué esta oración en la sintaxis básica, porque... se implementa de manera diferente en diferentes dialectos SQL.

    Si el lenguaje DDL es más estático, es decir con su ayuda, se crean estructuras rígidas (tablas, relaciones, etc.), luego el lenguaje DML es de naturaleza dinámica, aquí puede obtener los resultados correctos de diferentes maneras.

    El entrenamiento también continuará en modo Paso a Paso, es decir. Al leer, debes intentar inmediatamente completar el ejemplo con tus propias manos. Luego analizas el resultado obtenido e intentas comprenderlo de forma intuitiva. Si algo no queda claro, por ejemplo el significado de una función, busque ayuda en Internet.

    Los ejemplos se mostrarán en la base de datos de prueba, que se creó usando DDL+DML en la primera parte.

    Para aquellos que no crearon una base de datos en la primera parte (ya que es posible que no todos estén interesados ​​en el lenguaje DDL), pueden usar el siguiente script:

    Script de creación de base de datos de prueba

    Crear una base de datos CREAR BASE DE DATOS Prueba GO: actualizar la base de datos de prueba USAR Prueba GO: crear tablas de referencia CREAR TABLA Posiciones (ID int IDENTIDAD (1,1) NO NULO CONSTRAINT PK_Positions PRIMARY KEY, Nombre nvarchar(30) NOT NULL) CREAR TABLA Departamentos(ID int IDENTITY(1,1) NOT NULL CONSTRAINT PK_Departments PRIMARY KEY, Nombre nvarchar(30) NOT NULL) GO - llenar las tablas de referencia con datos SET IDENTITY_INSERT Posiciones ON INSERT Posiciones(ID,Nombre)VALUES (1,N"Contable"), (2,N"Director"), (3,N"Programador"), (4,N"Programador senior") SET IDENTITY_INSERT Posiciones OFF GO SET IDENTITY_INSERT Departamentos ON INSERT Departamentos(ID,Nombre)VALUES (1,N"Administración"), (2,N"Contabilidad"), (3,N"IT") SET IDENTITY_INSERT Departamentos OFF GO - crear una tabla con empleados CREAR TABLA Empleados (ID int NOT NULL, Nombre nvarchar(30), Fecha de cumpleaños, Correo electrónico nvarchar(30), ID de posición int, ID de departamento int, Fecha de contratación fecha NOT NULL CONSTRAINT DF_Employees_HireDate DEFAULT SYSDATETIME(), ManagerID int, CONSTRAINT PK_Employees PRIMARY KEY (ID), CONSTRAINT FK_Employees_DepartmentID CLAVE EXTRANJERA (ID de departamento) REFERENCIAS Departamentos (ID), RESTRICCIÓN FK_Employees_PositionID CLAVE EXTRANJERA (ID de posición) REFERENCIAS Posiciones (ID), RESTRICCIÓN FK_Employees_ManagerID CLAVE EXTRANJERA (ID de gerente) REFERENCIAS Empleados (ID), CONSTRAINT UQ_ Emp loyees_Email ÚNICO (correo electrónico) , CONSTRAINT CK_Employees_ID CHECK (ID ENTRE 1000 Y 1999), INDEX IDX_Employees_Name(Nombre)) GO - rellénelo con datos INSERTAR Empleados (ID,Nombre,Cumpleaños,Correo electrónico,ID de posición,ID de departamento,ID de gerente)VALUES (1000,N"Ivanov I.I. ", "19550219"," [correo electrónico protegido]",2,1,NULL), (1001,N"Petrov P.P.","19831203"," [correo electrónico protegido]",3,3,1003), (1002,N"Sidorov S.S.","19760607"," [correo electrónico protegido]",1,2,1000), (1003,N"Andreev A.A.","19820417"," [correo electrónico protegido]",4,3,1000)

    Eso es todo, ahora estamos listos para comenzar a aprender el lenguaje DML.

    SELECCIONAR: operador de muestreo de datos En primer lugar, para el editor de consultas activo, hagamos la prueba de la base de datos actual seleccionándola en la lista desplegable o usando el comando "USE Prueba".

    Comencemos con la forma más básica de SELECT:

    SELECCIONAR * DE Empleados
    En esta consulta, solicitamos devolver todas las columnas (indicadas por un "*") de la tabla Empleados; puede leer esto como "SELECCIONAR todos los campos DE la tabla de empleados". Si hay un índice agrupado, lo más probable es que los datos devueltos se ordenen por él, en en este caso por columna ID (pero esto no es importante, ya que en la mayoría de los casos indicaremos ordenar en explícitamente usted mismo usando ORDER BY...):

    ID Nombre Cumpleaños Correo electrónico ID de posición ID de departamento Fecha de contratación ID de gerente
    1000 Ivánov I.I. 1955-02-19 [correo electrónico protegido] 2 1 2015-04-08 NULO
    1001 Petrov P.P. 1983-12-03 [correo electrónico protegido] 3 3 2015-04-08 1003
    1002 Sidorov S.S. 1976-06-07 [correo electrónico protegido] 1 2 2015-04-08 1000
    1003 Andréyev A.A. 1982-04-17 [correo electrónico protegido] 4 3 2015-04-08 1000

    En general, vale la pena decir que en el dialecto MS SQL la forma más simple de una consulta SELECT puede no contener un bloque FROM, en cuyo caso puede usarlo para obtener algunos valores:

    SELECT 5550/100*15, SYSDATETIME(), - obteniendo la fecha del sistema de base de datos SIN(0)+COS(0)

    (Sin nombre de columna) (Sin nombre de columna) (Sin nombre de columna)
    825 2015-04-11 12:12:36.0406743 1

    Tenga en cuenta que la expresión (5550/100*15) dio como resultado 825, aunque si calculamos en una calculadora el valor será (832,5). El resultado 825 se obtuvo porque en nuestra expresión todos los números son enteros, por lo tanto el resultado es un número entero, es decir (5550/100) nos da 55, no (55,5).

    Recuerde que la siguiente lógica funciona en MS SQL:

    • Entero / Entero = Entero (es decir, en este caso hay división entera)
    • Real / Entero = Real
    • Entero / Real = Real
    Aquellos. el resultado se convierte a tipo más grande, entonces en los últimos 2 casos obtenemos un número real (piense como en matemáticas: rango números reales es mayor que el rango de números enteros, por lo que el resultado se convierte a él):

    SELECCIONE 123/10, -- 12 123./10, -- 12,3 123/10. -- 12.3
    Aquí (123.) = (123.0), solo que en este caso se puede descartar 0 y solo queda el punto.

    Con otros operaciones aritméticas Se aplica la misma lógica, sólo que en el caso de la división este matiz es más relevante.

    Así que presta atención al tipo de datos. columnas numéricas. Si es un número entero y necesita obtener un resultado real, utilice una transformación o simplemente coloque un punto después del número indicado como constante (123.).

    Puede utilizar la función CAST o CONVERT para convertir campos. Por ejemplo, usemos el campo ID, es de tipo int:

    SELECT ID, ID/100, -- la división entera ocurrirá aquí CAST(ID AS float)/100, -- use la función CAST para convertir al tipo flotante CONVERT(float,ID)/100, -- use la función CONVERT para convertir al tipo float ID/100. -- use la transformación especificando que el denominador es un número real DE Empleados

    ID (Sin nombre de columna) (Sin nombre de columna) (Sin nombre de columna) (Sin nombre de columna)
    1000 10 10 10 10.000000
    1001 10 10.01 10.01 10.010000
    1002 10 10.02 10.02 10.020000
    1003 10 10.03 10.03 10.030000

    Sólo una nota.

    En la base de datos ORACLE, la sintaxis sin un bloque FROM es inaceptable, para ello se utiliza la tabla del sistema DUAL, que contiene una línea:


    SELECCIONE 5550/100*15, -- y en ORACLE el resultado será igual a 832.5 sysdate, sin(0)+cos(0) FROM DUAL

    Nota. El nombre de la tabla en muchos RDB puede ir precedido del nombre del esquema:

    Un esquema es una unidad lógica de una base de datos, que tiene su propio nombre y permite agrupar objetos de la base de datos como tablas, vistas, etc. dentro de sí misma.

    La definición de un esquema en diferentes bases de datos puede diferir; en algunos casos, el esquema está directamente relacionado con el usuario de la base de datos, es decir. En este caso, podemos decir que el esquema y el usuario son sinónimos y todos los objetos creados en el esquema son esencialmente objetos. usuario dado. En M.S. esquema SQL es una unidad lógica independiente que se puede crear por sí sola (consulte CREAR ESQUEMA).

    De forma predeterminada, se crea un esquema en la base de datos MS SQL con el nombre dbo (Propietario de la base de datos) y listo. objetos creados de forma predeterminada, se crean en este esquema. En consecuencia, si simplemente especificamos el nombre de una tabla en una consulta, se buscará en el esquema dbo de la base de datos actual. Si queremos crear un objeto en un esquema específico, también tendremos que anteponer el nombre del objeto al nombre del esquema, por ejemplo, "CREATE TABLE nombre_esquema.nombre_tabla(...)".

    En caso de EM nombre SQL Los esquemas también pueden ir precedidos por el nombre de la base de datos en la que se encuentra el esquema:

    SELECCIONAR * DE Test.dbo.Employees - nombre_base_datos.nombre_esquema.tabla
    Esta aclaración puede resultar útil, por ejemplo, si:

    • en una solicitud accedemos a objetos ubicados en diferentes esquemas o bases de datos
    • necesita transferir datos de un esquema o base de datos a otro
    • Al estar en una base de datos, necesita solicitar datos de otra base de datos.
    • etc.
    Un esquema es una herramienta muy conveniente que resulta útil al desarrollar una arquitectura de base de datos, especialmente bases de datos grandes.

    Además, no olvide que en el texto de la solicitud podemos utilizar comentarios tanto de una sola línea “-- ...” como de varias líneas “/* ... */”. Si la solicitud es grande y compleja, los comentarios pueden ser de gran ayuda para usted o para otra persona, después de un tiempo, a recordar o comprender su estructura.

    Si hay muchas columnas en la tabla, y especialmente si todavía hay muchas filas en la tabla, además si estamos realizando consultas a la base de datos a través de la red, entonces sería preferible seleccionar con un listado directo de los campos que necesitas, separados por comas:

    SELECCIONAR ID, Nombre DE Empleados

    Aquellos. aquí decimos que solo necesitamos devolver los campos ID y Nombre de la tabla. El resultado será el siguiente (por cierto, el optimizador aquí decidió usar el índice creado por el campo Nombre):

    Nombre de identificación
    1003 Andréyev A.A.
    1000 Ivánov I.I.
    1001 Petrov P.P.
    1002 Sidorov S.S.

    Sólo una nota.

    A veces resulta útil observar cómo se recuperan los datos, por ejemplo, para saber qué índices se utilizan. Esto se puede hacer haciendo clic en el botón "Mostrar plan de ejecución estimado" o configurando "Incluir plan de ejecución real - Incluir el plan de ejecución de consulta real en el resultado" (en este caso, solo podremos ver el plan real, respectivamente). después de ejecutar la solicitud):

    El análisis del plan de ejecución es muy útil al optimizar una consulta; le permite descubrir qué índices faltan o qué índices no se utilizan en absoluto y se pueden eliminar.

    Si acaba de comenzar a aprender DML, entonces esto ya no es tan importante para usted, simplemente tome nota y podrá olvidarse de ello con seguridad (tal vez nunca lo necesite): nuestro objetivo inicial es aprender los conceptos básicos del lenguaje DML y aprenda a utilizarlos correctamente y la optimización ya es un arte aparte. A veces es más importante que simplemente tenga una consulta escrita correctamente que devuelva el resultado correcto desde el punto de vista del tema y que personas individuales ya la estén optimizando. Primero, debe aprender a escribir consultas correctamente, utilizando cualquier medio para lograr el objetivo. El objetivo principal que debe alcanzar ahora es que su consulta arroje los resultados correctos.

    Configuración de alias para tablas Al enumerar columnas, pueden ir precedidas del nombre de la tabla ubicada en el bloque FROM:

    SELECCIONE Empleados.ID, Empleados.Nombre DE Empleados

    Pero esta sintaxis suele ser incómoda de usar, porque el nombre de la tabla puede ser largo. Para estos fines, generalmente se especifican y utilizan nombres más cortos: alias:
    SELECCIONE emp.ID,emp.Nombre DE Empleados COMO emp

    o

    SELECT emp.ID,emp.Name FROM Employees emp: se puede omitir la palabra clave AS (prefiero esta opción)

    Aquí emp es un alias para la tabla Empleados que se puede usar en el contexto de esta declaración SELECT. Aquellos. podemos decir que en el contexto de esta declaración SELECT le estamos dando a la tabla un nuevo nombre.

    Sólo una nota.
    En ORACLE, sólo se permite la opción de especificar un alias de tabla sin la palabra clave AS.

    DISTINCT: descartar filas duplicadas La palabra clave DISTINCT se utiliza para descartar filas duplicadas del resultado de la consulta. En términos generales, imagine primero ejecutar una consulta sin la opción DISTINCT y luego descartar todos los duplicados del resultado. Demostremos esto para mayor claridad usando un ejemplo:

    Creemos una tabla temporal para demostración CREATE TABLE #Trash(ID int NOT NULL PRIMARY KEY, Col1 varchar(10), Col2 varchar(10), Col3 varchar(10)) - llene esta tabla con todo tipo de basura INSERT #Trash (ID,Col1, Col2,Col3)VALORES (1,"A","A","A"), (2,"A","B","C"), (3,"C"," A","B "), (4,"A","A","B"), (5,"B","B","B"), (6,"A","A" ,"B") , (7,"A","A","A"), (8,"C","A","B"), (9,"C","A"," B"), ( 10,"A","A","B"), (11,"A",NULL,"B"), (12,"A",NULL,"B") - veamos lo que devuelve la solicitud sin la opción DISTINCT SELECT Col1,Col2,Col3 FROM #Papelera - veamos qué devuelve la consulta con la opción DISTINCT SELECT DISTINCT Col1,Col2,Col3 FROM #Papelera - eliminar la tabla temporal DROP TABLE #Papelera

    Visualmente se verá así (todos los duplicados están marcados con el mismo color): Ahora veamos dónde se puede aplicar esto, usando un ejemplo más práctico: solo regresaremos identificadores únicos

    departamentos (es decir, descubrimos los ID de los departamentos en los que están registrados los empleados):

    SELECCIONAR ID de departamento DISTINTO DE Empleados

    Aquí tenemos 4 líneas, porque... No hay combinaciones repetidas (DepartmentID, PositionID) en nuestra tabla.

    Creamos nuevas columnas ALTER TABLE Employees ADD LastName nvarchar(30), -- apellido FirstName nvarchar(30), -- primer nombre MiddleName nvarchar(30), -- segundo nombre Salario flotante, -- y por supuesto salario en algunas unidades BonusPercent flotante - porcentaje para calcular el bono del salario GO - complételos con datos (algunos datos se omiten intencionalmente) ACTUALIZAR Empleados SET LastName=N"Ivanov", FirstName=N"Ivan", MiddleName=N"Ivanovich", Salario=5000, BonusPercent= 50 DONDE ID=1000 -- Ivanov I.I. ACTUALIZAR Empleados SET Apellido=N"Petrov",Nombre=N"Petr",SegundoNombre=N"Petrovich", Salario=1500, BonusPercent= 15 WHERE ID=1001 -- Petrov P.P. ACTUALIZAR Empleados SET Apellido=N"Sidor",Nombre=N"Sidor",SegundoNombre=NULL, Salario=2500,BonusPercent=NULL WHERE ID=1002 -- Sidorov S.S. ACTUALIZAR Empleados SET Apellido=N"Andreev",Nombre=N"Andrey",SegundoNombre=NULL, Salario=2000,BonusPercent= 30 WHERE ID=1003 -- Andreev A.A.

    Asegurémonos de que los datos se hayan actualizado correctamente:

    SELECCIONAR * DE Empleados

    ID Nombre... Apellido Nombre Segundo nombre Bonificación salarial Porcentaje
    1000 Ivánov I.I. Ivánov Iván Ivánovich 5000 50
    1001 Petrov P.P. petrov Pedro Petróvich 1500 15
    1002 Sidorov S.S. Sidorov sidor NULO 2500 NULO
    1003 Andréyev A.A. andréyev andrés NULO 2000 30
    Establecer alias para las columnas de consulta, creo que sería más fácil mostrarlos aquí que escribirlos:

    SELECCIONAR: proporcione un nombre a la columna calculada. Apellido+" "+Nombre+" "+Segundo nombre AS Nombre completo, -- uso comillas dobles, porque Se utiliza el espacio HireDate AS "Fecha de recepción", -- utilice corchetes, porque se utiliza espacio Cumpleaños AS [ Fecha de nacimiento], -- la palabra AS no es necesaria Salario ZP DE Empleados

    Nombre completo Fecha de ingreso Fecha de nacimiento ZP
    Ivanov Ivan Ivanovich 2015-04-08 1955-02-19 5000
    Petrov Petr Petrovich 2015-04-08 1983-12-03 1500
    NULO 2015-04-08 1976-06-07 2500
    NULO 2015-04-08 1982-04-17 2000

    Como podemos ver, los alias de columna que especificamos se reflejan en el encabezado de la tabla resultante. En realidad, este es el objetivo principal de los alias de columnas.

    Tenga en cuenta, porque los últimos 2 empleados no tenían un segundo nombre especificado (valor NULL), entonces el resultado de la expresión “Apellido+" "+Nombre+" "+Segundo Nombre" también nos devolvió NULL.

    Para unir (agregar, concatenar) cadenas en MS SQL, se utiliza el símbolo “+”.

    Recuerde que todas las expresiones que involucran NULL (por ejemplo, división por NULL, suma con NULL) devolverán NULL.

    Sólo una nota.
    En el caso de ORACLE, el operador “||” se utiliza para concatenar cadenas y la concatenación se vería como "Apellido||" "||Nombre||" "||Segundo nombre". Para ORACLE, vale la pena señalar que tiene una excepción para los tipos de cadena, para ellos NULL y la cadena vacía "" son lo mismo, por lo que en ORACLE dicha expresión devolverá para los últimos 2 empleados "Sidorov Sidor" y "Andrey Andréiev”. En el momento de ORACLE 12c, hasta donde yo sé, no hay ninguna opción que cambie este comportamiento (si me equivoco, corríjame). Aquí me resulta difícil juzgar si esto es bueno o malo, porque... En algunos casos, el comportamiento de una cadena NULL es más conveniente, como en MS SQL, y en otros, como en ORACLE.

    En ORACLE, todos los alias de columnas enumerados anteriormente también son válidos, excepto [...].


    Para no bloquear la construcción usando la función ISNULL, en MS SQL podemos usar la función CONCAT. Consideremos y comparemos 3 opciones:

    SELECCIONE Apellido+" "+Nombre+" "+SegundoNombre Nombre Completo1, -- 2 opciones para reemplazo NULO vacío líneas "" (obtenemos el comportamiento como en ORACLE) ISNULL(LastName,"")+" "+ISNULL(FirstName,"")+" "+ISNULL(SegundoNombre,"") FullName2, CONCAT(LastName," ", Nombre "," ",Segundo Nombre) Nombre Completo3 DE Empleados

    Nombre completo1 Nombre completo2 Nombre completo3
    Ivanov Ivan Ivanovich Ivanov Ivan Ivanovich Ivanov Ivan Ivanovich
    Petrov Petr Petrovich Petrov Petr Petrovich Petrov Petr Petrovich
    NULO Sidorov Sidor Sidorov Sidor
    NULO Andreyev Andrey Andreyev Andrey

    En MS SQL, los alias también se pueden especificar utilizando el signo igual:

    SELECCIONE "Fecha de recepción"=Fechadecontratación, -- además de "..." y […] puede usar "..." [Fecha de nacimiento]=Cumpleaños, ZP=Salario DE Empleados

    Usar la palabra clave AS o el signo igual para especificar un alias probablemente sea más una cuestión de gustos. Pero al analizar las solicitudes de otras personas, este conocimiento puede resultar útil.

    Finalmente diré que es mejor establecer nombres para alias usando solo caracteres latinos y números, evitando el uso de “…”, “…” y […], es decir, usar las mismas reglas que usamos al nombrar las tablas. . Además, en los ejemplos utilizaré sólo esos nombres y no “…”, “…” y […].

    Operadores aritméticos SQL básicos
    Prioridad de ejecución operadores aritméticos Lo mismo que en matemáticas. Si es necesario, el orden de aplicación de los operadores se puede cambiar usando paréntesis - (a+b)*(x/(y-z)).

    Y repito una vez más que cualquier operación con NULL produce NULL, por ejemplo: 10+NULL, NULL*15/3, 100/NULL - todo esto dará como resultado NULL. Aquellos. En pocas palabras, un valor indefinido no puede producir un resultado definido. Tenga esto en cuenta al redactar su consulta y, si es necesario, maneje valores NULL usando las funciones ISNULL y COALESCE:

    SELECT ID,Nombre, Salario/100*BonusPercent AS Result1, -- sin procesar valores NULL Salario/100*ISNULL(BonusPercent,0) AS Result2, -- use la función ISNULL Salario/100*COALESCE(BonusPercent,0) COMO Resultado3 - - use la función FUSIONAR DE Empleados

    Les cuento un poco sobre la función COALESCE:

    COALESCE (expr1, expr2, ..., exprn): devuelve el primer valor no NULO de una lista de valores.

    SELECT COALESCE(f1, f1*f2, f2*f3) val - en este caso se devolverá el tercer valor FROM (SELECT null f1, 2 f2, 3 f3) q

    Me centraré principalmente en hablar sobre construcciones DML y, en su mayor parte, no hablaré sobre las funciones que aparecerán en los ejemplos. Si no entiendes lo que hace una función en particular, busca su descripción en Internet, incluso puedes buscar información por grupo de funciones a la vez, por ejemplo, preguntando en búsqueda de google"EM. cadenas SQL funciones", "Funciones matemáticas de MS SQL" o "Funciones de procesamiento NULL de MS SQL". Hay mucha información sobre funciones y puede encontrarla fácilmente. Por ejemplo, en la biblioteca de MSDN, puede encontrar más información sobre la función COALESCE:

    Extracto de MSDN Comparación de COALESCE y CASE

    La expresión COALESCE es un atajo sintáctico para la expresión CASE. Esto significa que el optimizador de consultas reescribe el código COALESCE(expresión1,...n) como siguiente expresión CASO:

    CASO CUANDO (la expresión1 NO ES NULA) ENTONCES expresión1 CUANDO (la expresión2 NO ES NULA) ENTONCES expresión2 ... ELSE expresiónN FINAL

    Por ejemplo, veamos cómo se puede utilizar el resto de la división (%). Este operador muy útil cuando necesitas dividir registros en grupos. Por ejemplo, saquemos todos los empleados que tienen números de personal (ID) pares, es decir, aquellos ID que son divisibles por 2:

    SELECCIONE ID, Nombre DE Empleados DONDE ID%2=0 - el resto cuando se divide entre 2 es 0

    ORDER BY: ordenar el resultado de la consulta La cláusula ORDER BY se utiliza para ordenar el resultado de la consulta.

    SELECCIONE Apellido, Nombre, Salario DE los Empleados ORDEN POR Apellido, Nombre - ordene el resultado por 2 columnas - por Apellido y luego por Nombre

    Para una nota.

    Hay una palabra clave ASC para ordenar en orden ascendente, pero como la ordenación ascendente es la opción predeterminada, puede olvidarse de esta opción (no recuerdo un momento en el que usé esta opción). Vale la pena señalar que en BY también se puede utilizar para campos que no figuran en la cláusula SELECT (excepto en el caso en que se utiliza DISTINCT, que analizaré a continuación). A modo de ejemplo, me adelantaré un poco usando la opción TOP y mostraré cómo, por ejemplo, puedes seleccionar 3 empleados que tengan el salario más alto, teniendo en cuenta que por motivos de confidencialidad no debo mostrar el salario en sí:

    SELECCIONE LOS 3 PRINCIPALES: devuelva solo los primeros 3 registros del resultado completo ID,Apellido,Nombre DE los empleados ORDEN POR Salario DESC: ordene el resultado en orden descendente Salario

    ID Apellido Nombre
    1000 Ivánov Iván
    1002 Sidorov sidor

    Por supuesto, aquí se da el caso de que varios empleados pueden tener el mismo salario y es difícil decir a qué tres empleados devolverá esta solicitud, esto debe resolverse con el director de tarea; Digamos que después de discutir esta tarea con el gerente, estuvo de acuerdo y decidió usar la siguiente opción: realizar una clasificación adicional por campo de fecha de nacimiento (es decir, valoramos a los jóvenes) y si la fecha de nacimiento de varios empleados puede coincidir. (después de todo, esto tampoco está excluido), luego puede realizar una tercera clasificación en orden descendente de valores de ID (los últimos en la muestra serán aquellos con el ID más alto, por ejemplo, los que fueron aceptados en último lugar, digamos los números de personal se emiten secuencialmente):

    SELECCIONE LOS 3 PRINCIPALES: devuelva solo los primeros 3 registros del resultado completo ID,Apellido,Nombre DE Empleados ORDEN POR Salario DESC, - 1. ordene el resultado en orden descendente por Cumpleaños del salario, - 2. luego por Fecha de nacimiento ID DESC - 3 y para una claridad total del resultado, agregamos clasificación por ID.

    Aquellos. debe intentar que el resultado de la solicitud sea predecible, de modo que en caso de una sesión informativa pueda explicar por qué estas personas en particular fueron incluidas en la “lista negra”, es decir, todo fue elegido honestamente, según las reglas establecidas.

    También puedes ordenar usando diferentes expresiones en la cláusula ORDER BY:

    SELECCIONE Apellido, Nombre DE Empleados ORDEN POR CONCAT (Apellido,", ", Nombre): use la expresión

    También puede utilizar alias especificados para las columnas en ORDER BY:

    SELECCIONE CONCAT(Apellido", ",Nombre) fi DE Empleados ORDEN POR fi - use un alias

    Vale la pena señalar que cuando se usa la cláusula DISTINCT, solo las columnas enumeradas en el bloque SELECT se pueden usar en la cláusula ORDER BY. Aquellos. después de aplicar la operación DISTINCT obtenemos nuevo conjunto datos, con un nuevo conjunto de columnas. Por este motivo, el siguiente ejemplo no funcionará:

    SELECCIONE DISTINCT Apellido, Nombre, Salario DE Empleados ORDEN POR ID: el ID no está en el conjunto resultante que obtuvimos con DISTINCT

    Aquellos. la cláusula ORDER BY se aplica al conjunto resultante antes de que el resultado se devuelva al usuario.

    Nota 1. También puede utilizar los números de las columnas enumeradas en SELECT en la cláusula ORDER BY:

    SELECCIONE Apellido, Nombre, Salario DE Empleados ORDEN POR - ordenar en orden 3 DESC, - 1. Salario descendente 1, - 2. por Apellido 2 - 3. por Nombre

    Para los principiantes parece conveniente y tentador, pero es mejor olvidarlo y nunca utilizar esta opción de clasificación.

    Si en este caso (cuando los campos se enumeran explícitamente), esta opción sigue siendo aceptable, entonces, en el caso de utilizar "*", es mejor no utilizar nunca esta opción. Por qué: porque si alguien, por ejemplo, cambia el orden de las columnas en la tabla o elimina columnas (y esta es una situación normal), es posible que su consulta aún funcione, pero incorrectamente, porque La clasificación ya se puede realizar mediante otras columnas, y esto es insidioso porque este error Es posible que no se revele muy pronto.

    Si los pilares se enumeraran explícitamente, entonces, en la situación anterior, la consulta continuaría funcionando, pero también correctamente (ya que todo está definido explícitamente), o simplemente arrojaría un error que de esta columna no existe.

    Por lo tanto, puede olvidarse con seguridad de ordenar por números de columna.

    Nota 2.
    En MS SQL, al ordenar en orden ascendente, los valores NULL se mostrarán primero.

    SELECCIONE BonusPercent DE Empleados ORDEN POR BonusPercent

    En consecuencia, al usar DESC estarán al final.

    SELECCIONE BonusPercent DE Empleados ORDEN POR BonusPercent DESC

    Si necesita cambiar la lógica para ordenar valores NULL, utilice expresiones, por ejemplo:

    SELECCIONE BonusPercent DE Empleados ORDEN POR ISNULL(BonusPercent,100)

    ORACLE proporciona dos opciones para este propósito: NULLS FIRST y NULLS LAST (usados ​​por defecto). Por ejemplo:

    SELECCIONAR BonusPercent DE Empleados ORDENAR POR BonusPercent DESC NULLS ÚLTIMOS

    Preste atención a esto cuando cambie a una base de datos en particular.

    ARRIBA: devuelve el número especificado de registros. Extracto de MSDN.

    SUPERIOR: limita el número de filas devueltas en el conjunto de resultados de la consulta a un número o porcentaje específico. Cuando se utiliza una cláusula TOP junto con una cláusula ORDER BY, el conjunto de resultados se limita a las primeras N filas del resultado ordenado. De lo contrario, las primeras N filas se devuelven en un orden no especificado. Generalmente se usa con la cláusula ORDER BY y ya hemos visto ejemplos en los que era necesario devolver las primeras N filas del conjunto de resultados.

    Sin ORDER BY normalmente esta propuesta Se usa cuando solo necesitamos mirar una tabla desconocida para nosotros, que puede tener muchos registros, en este caso podemos, por ejemplo, pedir que nos devuelva solo las primeras 10 filas, pero para mayor claridad diremos solo 2:

    SELECCIONE TOP 2 * DE Empleados

    También puede especificar la palabra PORCENTAJE para devolver el porcentaje correspondiente de filas del conjunto de resultados:

    SELECCIONE EL 25 POR CIENTO SUPERIOR * DE Empleados

    En mi práctica, el muestreo más utilizado es el número de filas.

    También puede usar la opción CON LAZOS con ARRIBA, que ayudará a devolver todas las filas en caso de clasificación ambigua, es decir, esta oración devolverá todas las filas que tienen la misma composición que las filas que caen en la selección TOP N. Como resultado, se pueden seleccionar más de N filas. Agreguemos otro "Programador" con un salario de 1500 para demostración.

    INSERTAR Empleados(ID,Nombre,Correo electrónico,ID de puesto,ID de departamento,ID de gerente,Salario) VALORES(1004,N"Nikolaev N.N."," [correo electrónico protegido]",3,3,1003,1500)

    Y agreguemos otro empleado sin indicar puesto y departamento con un salario de 2000:

    INSERTAR Empleados(ID,Nombre,Correo electrónico,ID de puesto,ID de departamento,ID de gerente,Salario) VALORES(1005,N"Alexandrov A.A."," [correo electrónico protegido]",NULL,NULL,1000,2000)

    Ahora seleccionemos, usando la opción CON LAZOS, todos los empleados cuyo salario coincida con el salario de 3 empleados, con el salario más pequeño (espero que quede más claro a qué me refiero):

    SELECCIONE LOS 3 PRINCIPALES CON LAZOS ID, Nombre, Salario DE Empleados ORDEN POR Salario

    Aquí, aunque se indica TOP 3, la solicitud devolvió 4 registros, porque El valor salarial que arrojó TOP 3 (1500 y 2000) se encontró en 4 empleados. Visualmente funciona algo como esto:

    Sólo una nota.
    TOP está implementado en diferentes bases de datos. de diferentes maneras, en MySQL hay una cláusula LIMIT para esto, en la que además puede establecer el desplazamiento inicial.

    En ORACLE 12c, también introdujeron su propio análogo, combinando la funcionalidad TOP y LIMIT: busque las palabras "ORACLE OFFSET FETCH". Antes de la versión 12c, la pseudocolumna ROWNUM se utilizaba normalmente para este propósito.


    ¿Qué pasa si aplicas las cláusulas DISTINCT y TOP al mismo tiempo? Estas preguntas pueden responderse fácilmente mediante la realización de experimentos. En general, no tengas miedo y no seas perezoso para experimentar, porque... mayoría se aprende a través de la práctica. El orden de las palabras en la declaración SELECT es el siguiente: DISTINCT va primero, seguido de TOP, es decir. Si piensa lógicamente y lee de izquierda a derecha, se aplicará el primero en descartar duplicados y luego se creará TOP en función de este conjunto. Bueno, comprobemos y asegurémonos de que este sea el caso:

    SELECCIONAR DISTINTO TOP 2 Salario DE Empleados ORDENAR POR Salario

    Salario
    1500
    2000

    Aquellos. Como resultado, recibimos los dos salarios más bajos de todos. Por supuesto, puede darse el caso de que el salario de algunos empleados no esté especificado (NULL), porque El esquema nos permite hacer esto. Por lo tanto, dependiendo de la tarea, decidimos procesar valores NULL en la cláusula ORDER BY, o simplemente descartar todos los registros para los cuales Salario es NULL, y para ello procedemos a estudiar la cláusula WHERE.WHERE - la condición para seleccionar filas. Esta cláusula se utiliza para filtrar registros según una condición determinada. Por ejemplo, seleccionemos todos los empleados que trabajan en el departamento de "TI" (su ID=3):

    SELECCIONE ID, Apellido, Nombre, Salario DE Empleados DONDE DepartamentoID = 3 - ORDEN POR Apellido, Nombre

    ID Apellido Nombre Salario
    1004 NULO NULO 1500
    1003 andréyev andrés 2000
    1001 petrov Pedro 1500

    La cláusula WHERE se escribe antes del comando ORDER BY.

    El orden de aplicación de los comandos al conjunto inicial de Empleados es el siguiente:

  • DÓNDE: si se especifica, el primer paso de todo el conjunto de Empleados es seleccionar solo los registros que cumplan la condición.
  • DISTINCT: si se especifica, se descartan todos los duplicados
  • ORDENAR POR: si se especifica, el resultado se ordena
  • ARRIBA: si se especifica, solo se devuelve el número especificado de registros del resultado ordenado
  • Veamos un ejemplo para mayor claridad:

    SELECCIONE DISTINTO TOP 1 Salario DE Empleados DONDE IDDepartamento=3 ORDEN POR Salario

    Visualmente se verá así:

    Vale la pena señalar que la verificación de NULL no se realiza con un signo igual, sino utilizando los operadores IS NULL y IS NOT NULL. Solo recuerde que no puede comparar en NULL usando el operador “=" (signo igual), porque el resultado de la expresión también será igual a NULL.

    Por ejemplo, seleccionemos todos los empleados que no tienen un departamento especificado (es decir, IDDepartamento ES NULO):

    SELECCIONE ID, Nombre DE Empleados DONDE ID de Departamento ES NULO

    Ahora, como ejemplo, calculemos la bonificación para todos los empleados que tienen el valor BonusPercent especificado (es decir, BonusPercent NO ES NULO):

    SELECCIONE ID, Nombre, Salario/100*BonusPercent COMO Bonificación DE Empleados DONDE BonusPercent NO ES NULO

    Sí, por cierto, si lo piensas bien, el valor de BonusPercent puede ser igual a cero (0) y el valor también se puede ingresar con un signo menos, porque no impusimos ninguna restricción en este campo.

    Bueno, habiendo hablado del problema, nos dijeron que por ahora consideráramos que si (BonusPercent0

    Operadores booleanos y operadores de comparación simples Sí, aquí no se puede prescindir de las matemáticas, así que hagamos una breve excursión a los operadores booleanos y de comparación simples.

    Solo hay 3 operadores booleanos en SQL: Y, O y NO:

    Para cada operador booleano, puede proporcionar tablas de verdad que muestren adicionalmente cuál será el resultado cuando las condiciones puedan ser NULL:

    Existen los siguientes operadores de comparación simples que se utilizan para formar condiciones:

    Además, hay 2 operadores para verificar un valor/expresión para NULL:

    ES NULO NO ES NULO
    Prueba de igualdad NULL
    Prueba de desigualdad NULL

    Prioridad: 1) Todos los operadores de comparación; 2) NO; 3) Y; 4) O.

    Al construir expresiones lógicas complejas, se utilizan paréntesis:

    ((condición1 Y condición2) O NO (condición3 Y condición4 Y condición5)) O (…)

    Además, al usar paréntesis, puede cambiar secuencia estándar cálculos.

    Aquí intenté dar una idea del álgebra de Boole en un volumen suficiente para trabajar. Como puede ver, para escribir condiciones más complejas no puede prescindir de la lógica, pero aquí no hay mucha (Y, O y NO) y fue inventada por la gente, por lo que todo es bastante lógico.

    Pasemos al final de la segunda parte. Como puede ver, incluso podemos hablar durante mucho tiempo sobre la sintaxis básica de la declaración SELECT, pero para permanecer dentro del alcance del artículo, finalmente la mostraré. adicional operadores lógicos– ENTRE, EN y LIKE.BETWEEN – comprobando la inclusión en el rango

    Valor_prueba ENTRE valor_inicial Y valor_final

    Las expresiones pueden actuar como valores.

    Veamos un ejemplo:

    SELECCIONE ID, Nombre, Salario DE Empleados DONDE Salario ENTRE 2000 Y 3000 - que tiene un salario en el rango de 2000-3000

    En realidad, BETWEEN es una notación simplificada de la forma:

    SELECCIONE ID, Nombre, Salario DE Empleados DONDE Salario>=2000 Y Salario=2000 Y Salario SET ( | ) .,.< COLUMN name> = < VALUE expresslon>.< predlcate>[DÓNDE< cursor name>|

    Uso de WordPress, configuración: en la tabla wp_posts, elimine todas las apariciones de la fila

    ACTUALIZAR wp_posts SET post_content = REEMPLAZAR (post_content, "", "");

    BORRAR DE

    [ DÓNDE | DONDE ACTUAL DE (*solo adjunto*) ];

    ELIMINAR DE Compañeros; // eliminará todo el contenido de la tabla Peers. ELIMINAR DE FinR donde día Me gusta "20120415%"; // ELIMINAR DE los precios DONDE ratesheet_id NO ESTÁ (SELECCIONAR id DE las hojas de tarifas);

    ALTERAR

      Cambiar el valor predeterminado de una columna. Para establecer un nuevo valor predeterminado para una columna, use un comando como: ALTER TABLE productos ALTER COLUMN precio SET DEFAULT 7.77; O ALTERAR TABLA nases ALTERAR COLUMNA zona ESTABLECER DEFAULT "voip";

      Tenga en cuenta que la ejecución de este comando no afecta a los ya cadenas existentes en la tabla, el comando cambiará el valor predeterminado solo para futuros comandos INSERT. Para eliminar cualquier valor predeterminado, utilice

      ALTER TABLE productos ALTER COLUMN precio DROP DEFAULT ;

      El comando hace lo mismo que establecer el valor predeterminado en nulo. Dado que eliminar un valor predeterminado lo establece implícitamente en nulo, no se informará ningún error si se elimina un valor predeterminado existente.

      Funciona como valor predeterminado para la columna. En este caso, la columna de seguimiento del tiempo es de tipo marca de tiempo de datos y esto significa que el valor predeterminado se puede establecer en la función incorporada now(), es decir al agregar nueva linea la columna se escribirá fecha actual y hora ALTER TABLE seguimiento del tiempo ALTER COLUMN date_wd SET DEFAULT now();

      Agregar una restricción. Para agregar una restricción, se utiliza la sintaxis de la tabla para definir esa restricción. Por ejemplo: ALTER TABLE productos ADD CHECK (nombre ""); ALTER TABLE productos ADD CONSTRAINT some_name UNIQUE (product_no); ALTERAR TABLA productos AGREGAR CLAVE EXTRANJERA (product_group_id) REFERENCIAS product_groups;

      Para agregar una restricción no nula que no se puede escribir como una restricción de tabla, use la sintaxis:

      ALTER TABLE productos ALTER COLUMN product_no SET NOT NULL;

      La restricción especificada se aplicará inmediatamente, por lo que los datos de la tabla deben cumplirla antes de agregar la restricción.

    Funciones de agregación

    Hay 5 funciones agregadas en SQL estándar:

      CONTAR: la función devuelve el número de filas que cumplen ciertos criterios.

      SUMA: devuelve la suma (total) de los valores en una columna específica. Filas de columnas con valores NULL son ignorados por la función SUMA.

      AVG: valor promedio en la columna,

    Las funciones de agregación se utilizan como nombres de campos en una cláusula de consulta SELECT, con una excepción: los nombres de campos se utilizan como argumentos. Las funciones SUMA y AVG solo pueden funcionar con campos numéricos. funciones de CONTAR, MAX, MIN funcionan con campos numéricos y de caracteres. Cuando se aplica a campos de caracteres Funciones MÁXIMAS y MIN puede funcionar con caracteres equivalentes a ASCII.

    SELECCIONE Recuento (Libros.ID) COMO [Número de libros] DE Libros;

    El uso de CROUP BY le permite aplicar funciones agregadas a grupos de registros.

    SELECCIONE Count(Books.ID) COMO [Número de libros] FROM Books GROUP BY [Escritor];

    Vistas (VER)

    Una VISTA es un objeto de datos que no contiene ningún dato sobre su propietario. Es un tipo de tabla cuyo contenido se recupera de otras tablas ejecutando una consulta.

    Las tablas base son tablas que contienen datos. Sin embargo, existe otro tipo de tabla: - vistas (VER). Las vistas son tablas cuyo contenido se selecciona u obtiene de otras tablas. Funcionan en consultas y declaraciones DML como las tablas principales, pero no contienen datos propios. Las vistas son como ventanas a través de las cuales se ve información que realmente está almacenada en la tabla subyacente.

      Comando CREAR VISTA. La vista se crea con el comando CREAR VISTA. Consta de las palabras CREAR VISTA, el nombre de la vista que se debe crear, la palabra COMO (CÓMO) y luego la consulta. Creemos la vista del personal de Londres: CREAR VISTA Personal de Londres COMO SELECCIONAR * DE Vendedores DONDE ciudad = "Londres";

      Esta vista se utiliza como cualquier otra tabla. Se puede consultar, modificar, insertar, eliminar y unir a otras tablas y vistas. Solicitud de presentación.



       Arriba