¿Por qué sí o por qué no?Además de un lenguaje declarativo, ¿SQL es un lenguaje funcional?
Respuesta
En términos generales, como sin extensiones a la sintaxis (por ejemplo, PL/SQL, T-SQL), no puede escribir funciones.
Pero sin duda está muy orientado a la expresión, que es una característica que tiene en común con los lenguajes funcionales.
¿Están las funciones objetos de primera clase en SQL? apenas. Entonces yo diría que no.
por definición - no, pero similar por la forma de pensar (y depurar) – ren
Cada consulta SQL es una función. Tal vez simplemente no te gusta la sintaxis. –
Sí, lo son ... SELECCIONAR es una función. Si lees sobre el álgebra relacional, sabrías que SELECCIÓN y PROYECCIÓN son funciones/acciones. Simplemente no lo ves escrito como 'Seleccionar (columnas/expresiones)'; –
Como el punto de un lenguaje funcional es que programes con, bueno, funciones, diría que no. SQL está programando con relaciones (si puede incluso llamar a SQL un lenguaje de programación, en su forma básica, SQL no está completo).
No existe una única definición verdadera de lo que es un lenguaje funcional (o para el caso, lo que es un procedimiento u orientado a objetos).
Pero realmente no puedo pensar en nada que apunte a SQL como funcional. No tiene funciones, no tiene recursión, no tiene cierres, no tiene funciones anidadas, no tiene funciones como tipos de primera clase.
Una pregunta más común es si SQL es un lenguaje de programación en total. No es turing-completo.
+1 para el proceso no completo - Iba a agregar eso a mi respuesta :-( –
El estándar SQL92 no está completo. El PL/SQL de Oracle y el T-SQL de SQL Server y otros están completos. –
sí, pero la pregunta era sobre el SQL en sí, no sobre las extensiones de varios proveedores. – jalf
Creo que los lenguajes SQL y funcionales son muy diferentes entre sí. En un lenguaje funcional, el cálculo se realiza evaluando funciones. Las funciones no mutan el estado. Todo lo que hacen es calcular un valor a partir de sus argumentos. En otras palabras, las funciones no causan efectos secundarios. Los lenguajes funcionales son de propósito general.
SQL es un lenguaje diseñado para tratar con sistemas de administración de bases de datos relacionales. Se puede ver como un lenguaje específico del dominio. Está diseñado para trabajar en "conjuntos" de datos. Puede cambiar el estado global (es decir, la base de datos) mediante comandos como ACTUALIZAR. No existe el concepto de que las funciones se evalúen con un valor. Por lo que yo entiendo, SQL ni siquiera está completo.
Los lenguajes funcionales tienen que causar efectos secundarios de alguna manera, ¿no? –
Pero F # tiene estado, ¿correcto? –
SQL
fue diseñado como un lenguaje declarativo, en el sentido que le diga a what
desea obtener y el motor SQL
decide how
.
Sin embargo, SQL
opera en conjuntos, y los resultados de las funciones pueden ser conjuntos de primera clase en Oracle
, SQL Server
y PostgreSQL
.
Se puede decir que SQL
es un lenguaje funcional, siempre que una función tome un conjunto como entrada y produzca un conjunto como salida.
Es decir, se puede escribir algo como esto:
SELECT *
FROM mytable t
JOIN myfunction(x) f
ON f.col1 = t.col2
, o incluso esto:
SELECT *
FROM mytable t
CROSS APPLY
myfunction(t.col2) f
(en SQL Server
)
o esto:
SELECT t.*, myfunction(t.col2)
FROM mytable t
(enSin embargo, esto no es parte del estándar SQL
.
Al igual que un compilador C++
trata de encontrar una manera óptima de multiplicar dos float
s (en términos de álgebra normal), SQL
optimizador trata de encontrar un equilibrio óptimo formas de multiplicar dos conjuntos (en términos de álgebra relacional).
En C++
, simplemente escriba a * b
y confíe en el compilador para generar un ensamblaje óptimo para esto.
En SQL
, escriba SELECT * FROM a NATURAL JOIN b
y confíe en el optimizador.
Sin embargo, con todas las declaraciones declaradas de SQL
(sin juego de palabras), la mayoría de los optimizadores reales solo pueden hacer reescrituras de consultas muy básicas.
Say, sin optimizador Soy consciente de que es capaz de utilizar un mismo plan eficiente para esta consulta:
SELECT t1.id, t1.value, SUM(t2.value)
FROM mytable t1
JOIN mytable t2
ON t2.id <= t1.id
GROUP BY
t1.id, t1.value
y para éste:
SELECT id, value, SUM(t1.value) OVER (ORDER BY id)
FROM mytable
, por no hablar de más compleja consultas.
Es por eso que todavía necesita formular sus consultas para que utilicen un plan eficiente (sin dejar de producir el mismo resultado), lo que hace que SQL
sea un poco menos lenguaje declarativo.
Recientemente he hecho su mensaje en mi blog sobre esto:
declarativa y funcional? Eso sería una hoja de cálculo.
No, SQL no es un lenguaje funcional. El paradigma es algo diferente. Tenga en cuenta que hay otros tipos de lenguajes de programación declarativa además de funcional: el ejemplo canónico es la programación lógica y PROLOG.
Técnicamente, el álgebra relacional (la base teórica de SQL) no está realmente completa. Aunque los dialectos de SQL modernos añaden suficientes características de procedimiento para que uno pueda implementar procedimientos almacenados y estén completos en este nivel, una única consulta de SQL no es un cálculo completo. Relational Algebra tiene la propiedad de completar godel.La integridad de Godel implica la capacidad de expresar cualquier cálculo que pueda definirse en términos de cálculo de predicados de primer orden, básicamente lo que usted conocería como expresiones lógicas ordinarias.
- 1. Javascript como un lenguaje funcional
- 2. ¿XSLT es un lenguaje de programación funcional?
- 3. ¿Es Erlang realmente un lenguaje funcional?
- 4. lenguaje de ensamblaje funcional
- 5. ¿Haskell es realmente un lenguaje puramente funcional considerando UnpafePerformIO?
- 6. ¿Qué lenguaje de programación funcional debería elegir como primer lenguaje de programación funcional?
- 7. ¿Cuál es la diferencia formal entre un lenguaje de nivel funcional y uno funcional?
- 8. Lista doblemente enlazada en un lenguaje de programación puramente funcional
- 9. Beneficios y usos de un lenguaje de programación funcional
- 10. Hojas de cálculo que utilizan un lenguaje de programación funcional
- 11. Búsqueda rápida de elementos para un lenguaje funcional (Haskell)
- 12. métodos estáticos hacen de Java un lenguaje pseudo funcional?
- 13. Implementación de ESB (Enterprise Service Bus) en un lenguaje funcional
- 14. Cómo el lenguaje funcional es diferente del punto de vista de implementación del lenguaje
- 15. ¿Qué es un lenguaje lambda?
- 16. ¿Es R un lenguaje compilado?
- 17. ¿Por qué es más fácil escribir un compilador en un lenguaje funcional?
- 18. CMS en el lenguaje de programación funcional
- 19. ¿Cómo estructurar una aplicación escrita en un lenguaje funcional?
- 20. ¿Cuál es el lenguaje de programación funcional más mínimo?
- 21. ¿Cuál es la duración de un valor memorable en un lenguaje funcional como Haskell?
- 22. ¿Qué tan práctico es incorporar el núcleo de un lenguaje con un espacio funcional funcional (como ML) en Haskell?
- 23. ¿Cuál es un buen lenguaje funcional sobre el cual construir un servicio web?
- 24. ¿C# es un lenguaje de alto nivel?
- 25. ¿JavaScript es un lenguaje de aplicación?
- 26. ¿Qué es un lenguaje de plantillas?
- 27. ¿Qué es un lenguaje de programación formal?
- 28. ¿Qué es un lenguaje de pegamento?
- 29. ¿Qt 4 es un lenguaje de programación?
- 30. La "programación funcional" tiene un significado claro, pero ¿el "lenguaje funcional"?
I con él eran. – topchef