2009-04-01 12 views

Répondre

14

Pas vraiment - vous pouvez utiliser SELECT pour initialiser une variable.

Exemples from here:

mysql> SELECT 1 + 1; -> 2

+0

Je ne pensais pas à l'initialisation des variables. – TheTXI

+0

Oracle ne vous a-t-il pas obligé à SELECT FROM DUAL? –

+0

@Paul - il demande à propos de mysql, je crois que vous avez raison à propos d'Oracle –

1

Non, vous pouvez très facilement faire

SELECT 1+1 
7

Pas dans MySQL, non. Vous pouvez le faire:

SELECT 1 + 1; 

Ce sera dans certains DBMSs si - Oracle par exemple, il faudrait vous faire:

SELECT 1 + 1 FROM DUAL; 
+0

FYI, serveur sql permet SELECT x aussi bien –

0

(EDIT: Maladroit l'onglet MYSQL.)

Cela dépend de la base de données.

Dans Oracle, IIRC, la valeur de est requise. Mais Oracle a une table DUAL qui renvoie toujours une ligne pour les cas où tout le travail est fait dans la clause SELECT.

D'autre part, SQL Server ne nécessite pas FROM, pour renvoyer la valeur d'une variable suffit de le sélectionner:

SELECT @myVar 
0

Comme mentionné par ocedecio DE n'est pas nécessaire dans chaque déclaration.

Par exemple, je tendance à utiliser la syntaxe suivante pour initialiser une table avec des données

insert into status(code, description) 
select 'O', 'Open' 
union all select 'C', 'Closed' 
union all select 'P', 'Parked' 

etc ..

EDIT (suite aux commentaires par gamecat)

L'exemple ci-dessus montre lorsque SELECT sans FROM peut avoir une utilisation pratique. Vous pouvez bien sûr il suffit d'appeler:

select 'O', 'Open' 
union all select 'C', 'Closed' 
union all select 'P', 'Parked' 
+0

insert! = Select ;-) –

+0

oui, mais ce que vous pouvez utiliser la partie select séparément, je viens de donner un exemple pratique où il peut être utilisé – kristof

0

Fondamentalement dans SQL Server 2005 mot clé FROM n'est pas nécessaire pour les fonctions de valeur et Scalar les fonctions du système, mais obligatoire pour les fonctions d'une valeur de table.

Scalar fonctions à valeurs peuvent exécutable comme ci-dessous la syntaxe

Sélectionnez functionname (arguments)

Tableau fonctions à valeurs peuvent exécutable comme ci-dessous la syntaxe

Select * from functionname (arguments)

autre

Sélectionnez col1, col2 à partir du nom de fonction (argument1, argument2)

0

En fait, les deux "SELECT 1" et "SELECT 1 FROM DUAL" fonctionnent dans les dernières versions de MySQL.

Assez intéressant, "SELECT 1 1 = 1" nécessite une clause FROM: "SELECT 1 FROM DUAL 1 = 1" est très bien. Dans d'autres plates-formes, comme PostgreSQL, "SELECT 1 WHERE 1 = 1" fonctionne correctement.

Une autre bizarrerie: "SELECT 1 FROM DUAL GROUP BY 1 A 1 = 1" fonctionne en MySQL 5.7, mais échoue en MySQL 5.5.


Résumé du nécessaire/optionnelle de clause dans différentes plates-formes:

  • MySQL, MariaDB, Amazon Aurora: en option ou utiliser "FROM dual".
  • Oracle: utilisez "FROM dual".
  • IBM DB2: utilisez "FROM sysibm.sysdummy1".
  • Informix: utiliser "DE SysTables OU tabid = 1"
  • Firebird, Interbase: utiliser "FROM RDB $ database".
  • Microsoft Access: requis, mais pas de table fictive. Essayez d'utiliser "FROM (SELECT COUNT (*) FROM first_table_found WHERE 1 = 0) AS double".
  • SQL Server, SQL Azure, SQL Server CE, Sybase ASE, SQL Anywhere, Ingres, PostgreSQL, Redshift, SQLite: facultatif.
Questions connexes