Maison > Article > base de données > Comment utiliser avec comme dans l'instruction SQL
La phrase
WITH AS, également appelée partie de sous-requête, peut définir un fragment SQL, qui sera utilisé par l'intégralité de l'instruction SQL. Il peut rendre l'instruction SQL plus lisible ou être utilisé comme partie fournissant des données dans différentes parties d'UNION ALL.
– pour un alias
with tmp as (select * from tb_name)
– pour plusieurs alias
with tmp as (select * from tb_name), tmp2 as (select * from tb_name2), tmp3 as (select * from tb_name3), …
– équivalent à la construction d'une table temporaire e
with e as (select * from scott.emp e where e.empno=7499) select * from e;
– équivalent à la construction de tables temporaires e et d
with e as (select * from scott.emp), d as (select * from scott.dept) select * from e, d where e.deptno = d.deptno;
est en fait une grande Les instructions SQL qui sont utilisés à plusieurs reprises par le tas sont placés avec as et un alias est donné, afin que les requêtes ultérieures puissent l'utiliser. Cela joue un rôle d'optimisation dans les grands lots d'instructions SQL et est clair.
Avec comme utilisation pour insérer des données dans une table
insert into table2 with s1 as (select rownum c1 from dual connect by rownum <= 10), s2 as (select rownum c2 from dual connect by rownum <= 10) select a.c1, b.c2 from s1 a, s2 b where…;
sélectionnez s1.sid, s2.sid à partir de s1, s2 doit avoir des conditions associées, sinon le résultat sera un produit cartésien.
avec comme équivalent à la vue virtuelle.
Avec une phrase, également appelée factorisation de sous-requête, vous permet de faire beaucoup de choses, définir un fragment SQL, qui sera utilisé par l'intégralité de l'instruction SQL. Parfois, il s'agit de rendre l'instruction SQL plus lisible, ou elle peut se trouver dans différentes parties de l'union, toutes en tant que partie qui fournit des données.
Particulièrement utile pour tous les syndicats. Parce que chaque partie de l'union peut être identique, mais si chaque partie est exécutée une fois, le coût est trop élevé, vous pouvez donc utiliser la phrase with as, qui ne doit être exécutée qu'une seule fois. Si le nom de la table défini par l'expression with as est appelé plus de deux fois, l'optimiseur placera automatiquement les données obtenues par l'expression with as dans une table temporaire. S'il n'est appelé qu'une seule fois, il ne le fera pas. L'invite matérialisée force les données de la phrase with as à être placées dans une table temporaire globale. De nombreuses requêtes peuvent être accélérées de cette façon.
with sql1 as (select to_char(a) s_name from test_tempa), sql2 as (select to_char(b) s_name from test_tempb where not exists (select s_name from sql1 where rownum=1)) select * from sql1 union all select * from sql2 union all select ‘no records’ from dual where not exists (select s_name from sql1 where rownum=1) and not exists (select s_name from sql2 where rownum=1);
Avantages de l'instruction AVEC :
(1) La lisibilité SQL est améliorée. Par exemple, donnez un nom significatif à une sous-requête spécifique, etc.
(2). La sous-requête with n'est exécutée qu'une seule fois et les résultats sont stockés dans l'espace table temporaire de l'utilisateur, qui peut être référencé plusieurs fois pour améliorer les performances.
Exemple : lors du processus d'importation d'EXCEL, les données doivent parfois être stockées dans une table temporaire. La prochaine fois que l'importation est effectuée, les données de la table temporaire seront parfois effacées. Deux utilisateurs peuvent utiliser les données de l'autre séparément, ce qui peut prêter à confusion. Cependant, vous pouvez utiliser la fonction WITH et l'instruction UNION pour fusionner une instruction SQL et la stocker dans SESSION. Lorsque vous avez besoin d'exporter des informations d'erreur, vous pouvez utiliser. cette instruction pour construire des données.
Recommandations associées : "Tutoriel mysql"
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!