mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-25 17:12:03 +00:00
181 lines
65 KiB
Markdown
181 lines
65 KiB
Markdown
|
---
|
|||
|
machine_translated: true
|
|||
|
machine_translated_rev: ad252bbb4f7e2899c448eb42ecc39ff195c8faa1
|
|||
|
toc_priority: 40
|
|||
|
toc_title: "La Compatibilit\xE9 ANSI"
|
|||
|
---
|
|||
|
|
|||
|
# Compatibilité ANSI SQL du dialecte CLICKHOUSE SQL {#ansi-sql-compatibility-of-clickhouse-sql-dialect}
|
|||
|
|
|||
|
!!! note "Note"
|
|||
|
Cet article s'appuie sur le tableau 38, “Feature taxonomy and definition for mandatory features”, Annex F of ISO/IEC CD 9075-2:2013.
|
|||
|
|
|||
|
## Différences de comportement {#differences-in-behaviour}
|
|||
|
|
|||
|
Le tableau suivant répertorie les cas où la fonctionnalité de requête fonctionne dans ClickHouse, mais ne se comporte pas comme spécifié dans ANSI SQL.
|
|||
|
|
|||
|
| Feature ID | Nom De La Fonctionnalité | Différence |
|
|||
|
|------------|-------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------|
|
|||
|
| E011 | Types de données numériques | Le littéral numérique avec période est interprété comme approximatif (`Float64`) au lieu de exact (`Decimal`) |
|
|||
|
| E051-05 | Les éléments sélectionnés peuvent être renommés | Les renommages d'élément ont une portée de visibilité plus large que le simple résultat de sélection |
|
|||
|
| E141-01 | Contraintes non nulles | `NOT NULL` est implicite pour les colonnes de table par défaut |
|
|||
|
| E011-04 | Opérateurs arithmétiques | Clickhouse déborde au lieu de l'arithmétique vérifiée et modifie le type de données de résultat en fonction des règles personnalisées |
|
|||
|
|
|||
|
## Fonction D'État {#feature-status}
|
|||
|
|
|||
|
| Feature ID | Nom De La Fonctionnalité | Statut | Commentaire |
|
|||
|
|------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
|||
|
| **E011** | **Types de données numériques** | **Partiel**{.text-warning} | |
|
|||
|
| E011-01 | Types de données INTEGER et SMALLINT | Oui{.text-success} | |
|
|||
|
| E011-02 | Types de données réel, double précision et flottant types de données | Partiel{.text-warning} | `FLOAT(<binary_precision>)`, `REAL` et `DOUBLE PRECISION` ne sont pas pris en charge |
|
|||
|
| E011-03 | Types de données décimales et numériques | Partiel{.text-warning} | Seulement `DECIMAL(p,s)` est pris en charge, pas `NUMERIC` |
|
|||
|
| E011-04 | Opérateurs arithmétiques | Oui{.text-success} | |
|
|||
|
| E011-05 | Comparaison numérique | Oui{.text-success} | |
|
|||
|
| E011-06 | Casting implicite parmi les types de données numériques | Aucun{.text-danger} | ANSI SQL permet la distribution implicite arbitraire entre les types numériques, tandis que ClickHouse repose sur des fonctions ayant plusieurs surcharges au lieu de la distribution implicite |
|
|||
|
| **E021** | **Types de chaînes de caractères** | **Partiel**{.text-warning} | |
|
|||
|
| E021-01 | Type de données CARACTÈRE | Aucun{.text-danger} | |
|
|||
|
| E021-02 | TYPE DE DONNÉES variable de caractère | Aucun{.text-danger} | `String` se comporte de la même manière, mais sans limite de longueur entre parenthèses |
|
|||
|
| E021-03 | Littéraux de caractères | Partiel{.text-warning} | Aucune concaténation automatique de littéraux consécutifs et prise en charge du jeu de caractères |
|
|||
|
| E021-04 | Fonction CHARACTER\_LENGTH | Partiel{.text-warning} | Aucun `USING` clause |
|
|||
|
| E021-05 | Fonction OCTET\_LENGTH | Aucun{.text-danger} | `LENGTH` se comporte de la même façon |
|
|||
|
| E021-06 | SUBSTRING | Partiel{.text-warning} | Pas de support pour `SIMILAR` et `ESCAPE` clauses, pas de `SUBSTRING_REGEX` variante |
|
|||
|
| E021-07 | Concaténation de caractères | Partiel{.text-warning} | Aucun `COLLATE` clause |
|
|||
|
| E021-08 | Fonctions supérieures et inférieures | Oui{.text-success} | |
|
|||
|
| E021-09 | La fonction TRIM | Oui{.text-success} | |
|
|||
|
| E021-10 | Conversion implicite entre les types de chaînes de caractères de longueur fixe et de longueur variable | Aucun{.text-danger} | ANSI SQL permet la distribution implicite arbitraire entre les types de chaîne, tandis que ClickHouse repose sur des fonctions ayant plusieurs surcharges au lieu de la distribution implicite |
|
|||
|
| E021-11 | La POSITION de la fonction | Partiel{.text-warning} | Pas de support pour `IN` et `USING` clauses, pas de `POSITION_REGEX` variante |
|
|||
|
| E021-12 | Comparaison de caractères | Oui{.text-success} | |
|
|||
|
| **E031** | **Identificateur** | **Partiel**{.text-warning} | |
|
|||
|
| E031-01 | Identificateurs délimités | Partiel{.text-warning} | Le support littéral Unicode est limité |
|
|||
|
| E031-02 | Identificateurs minuscules | Oui{.text-success} | |
|
|||
|
| E031-03 | Fuite de soulignement | Oui{.text-success} | |
|
|||
|
| **E051** | **Spécification de requête de base** | **Partiel**{.text-warning} | |
|
|||
|
| E051-01 | SELECT DISTINCT | Oui{.text-success} | |
|
|||
|
| E051-02 | Groupe par clause | Oui{.text-success} | |
|
|||
|
| E051-04 | GROUP BY peut contenir des colonnes `<select list>` | Oui{.text-success} | |
|
|||
|
| E051-05 | Les éléments sélectionnés peuvent être renommés | Oui{.text-success} | |
|
|||
|
| E051-06 | Clause HAVING | Oui{.text-success} | |
|
|||
|
| E051-07 | Qualifié \* dans la liste select | Oui{.text-success} | |
|
|||
|
| E051-08 | Nom de corrélation dans la clause FROM | Oui{.text-success} | |
|
|||
|
| E051-09 | Renommer les colonnes de la clause FROM | Aucun{.text-danger} | |
|
|||
|
| **E061** | **Prédicats de base et conditions de recherche** | **Partiel**{.text-warning} | |
|
|||
|
| E061-01 | Prédicat de comparaison | Oui{.text-success} | |
|
|||
|
| E061-02 | Entre prédicat | Partiel{.text-warning} | Aucun `SYMMETRIC` et `ASYMMETRIC` clause |
|
|||
|
| E061-03 | Dans le prédicat avec la liste des valeurs | Oui{.text-success} | |
|
|||
|
| E061-04 | Comme prédicat | Oui{.text-success} | |
|
|||
|
| E061-05 | Comme prédicat: clause D'échappement | Aucun{.text-danger} | |
|
|||
|
| E061-06 | Prédicat NULL | Oui{.text-success} | |
|
|||
|
| E061-07 | Prédicat de comparaison quantifié | Aucun{.text-danger} | |
|
|||
|
| E061-08 | Existe prédicat | Aucun{.text-danger} | |
|
|||
|
| E061-09 | Sous-requêtes dans le prédicat de comparaison | Oui{.text-success} | |
|
|||
|
| E061-11 | Sous-requêtes dans dans le prédicat | Oui{.text-success} | |
|
|||
|
| E061-12 | Sous-requêtes dans le prédicat de comparaison quantifiée | Aucun{.text-danger} | |
|
|||
|
| E061-13 | Sous-requêtes corrélées | Aucun{.text-danger} | |
|
|||
|
| E061-14 | Condition de recherche | Oui{.text-success} | |
|
|||
|
| **E071** | **Expressions de requête de base** | **Partiel**{.text-warning} | |
|
|||
|
| E071-01 | Opérateur de table distinct UNION | Aucun{.text-danger} | |
|
|||
|
| E071-02 | Opérateur de table UNION ALL | Oui{.text-success} | |
|
|||
|
| E071-03 | Sauf opérateur de table DISTINCT | Aucun{.text-danger} | |
|
|||
|
| E071-05 | Les colonnes combinées via les opérateurs de table n'ont pas besoin d'avoir exactement le même type de données | Oui{.text-success} | |
|
|||
|
| E071-06 | Tableau des opérateurs dans les sous-requêtes | Oui{.text-success} | |
|
|||
|
| **E081** | **Les privilèges de base** | **Partiel**{.text-warning} | Les travaux en cours |
|
|||
|
| **E091** | **Les fonctions de jeu** | **Oui**{.text-success} | |
|
|||
|
| E091-01 | AVG | Oui{.text-success} | |
|
|||
|
| E091-02 | COUNT | Oui{.text-success} | |
|
|||
|
| E091-03 | MAX | Oui{.text-success} | |
|
|||
|
| E091-04 | MIN | Oui{.text-success} | |
|
|||
|
| E091-05 | SUM | Oui{.text-success} | |
|
|||
|
| E091-06 | TOUS les quantificateurs | Aucun{.text-danger} | |
|
|||
|
| E091-07 | Quantificateur DISTINCT | Partiel{.text-warning} | Toutes les fonctions d'agrégation ne sont pas prises en charge |
|
|||
|
| **E101** | **Manipulation des données de base** | **Partiel**{.text-warning} | |
|
|||
|
| E101-01 | Insérer une déclaration | Oui{.text-success} | Remarque: la clé primaire dans ClickHouse n'implique pas `UNIQUE` contrainte |
|
|||
|
| E101-03 | Déclaration de mise à jour recherchée | Aucun{.text-danger} | Il y a un `ALTER UPDATE` déclaration pour la modification des données de lot |
|
|||
|
| E101-04 | Requête de suppression recherchée | Aucun{.text-danger} | Il y a un `ALTER DELETE` déclaration pour la suppression de données par lots |
|
|||
|
| **E111** | **Instruction SELECT à une ligne** | **Aucun**{.text-danger} | |
|
|||
|
| **E121** | **Prise en charge du curseur de base** | **Aucun**{.text-danger} | |
|
|||
|
| E121-01 | DECLARE CURSOR | Aucun{.text-danger} | |
|
|||
|
| E121-02 | Les colonnes ORDER BY n'ont pas besoin d'être dans la liste select | Aucun{.text-danger} | |
|
|||
|
| E121-03 | Expressions de valeur dans la clause ORDER BY | Aucun{.text-danger} | |
|
|||
|
| E121-04 | Instruction OPEN | Aucun{.text-danger} | |
|
|||
|
| E121-06 | Déclaration de mise à jour positionnée | Aucun{.text-danger} | |
|
|||
|
| E121-07 | Instruction de suppression positionnée | Aucun{.text-danger} | |
|
|||
|
| E121-08 | Déclaration de fermeture | Aucun{.text-danger} | |
|
|||
|
| E121-10 | Instruction FETCH: implicite suivant | Aucun{.text-danger} | |
|
|||
|
| E121-17 | Avec curseurs HOLD | Aucun{.text-danger} | |
|
|||
|
| **E131** | **Support de valeur Null (nulls au lieu de valeurs)** | **Partiel**{.text-warning} | Certaines restrictions s'appliquent |
|
|||
|
| **E141** | **Contraintes d'intégrité de base** | **Partiel**{.text-warning} | |
|
|||
|
| E141-01 | Contraintes non nulles | Oui{.text-success} | Note: `NOT NULL` est implicite pour les colonnes de table par défaut |
|
|||
|
| E141-02 | Contrainte UNIQUE de colonnes non nulles | Aucun{.text-danger} | |
|
|||
|
| E141-03 | Contraintes de clé primaire | Aucun{.text-danger} | |
|
|||
|
| E141-04 | Contrainte de clé étrangère de base avec la valeur par défaut NO ACTION Pour l'action de suppression référentielle et l'action de mise à jour référentielle | Aucun{.text-danger} | |
|
|||
|
| E141-06 | Vérifier la contrainte | Oui{.text-success} | |
|
|||
|
| E141-07 | Colonne par défaut | Oui{.text-success} | |
|
|||
|
| E141-08 | Non NULL déduit sur la clé primaire | Oui{.text-success} | |
|
|||
|
| E141-10 | Les noms dans une clé étrangère peut être spécifié dans n'importe quel ordre | Aucun{.text-danger} | |
|
|||
|
| **E151** | **Support de Transaction** | **Aucun**{.text-danger} | |
|
|||
|
| E151-01 | COMMIT déclaration | Aucun{.text-danger} | |
|
|||
|
| E151-02 | Déclaration de restauration | Aucun{.text-danger} | |
|
|||
|
| **E152** | **Instruction de transaction set de base** | **Aucun**{.text-danger} | |
|
|||
|
| E152-01 | SET TRANSACTION statement: clause sérialisable de niveau D'isolement | Aucun{.text-danger} | |
|
|||
|
| E152-02 | SET TRANSACTION statement: clauses en lecture seule et en lecture écriture | Aucun{.text-danger} | |
|
|||
|
| **E153** | **Requêtes pouvant être mises à jour avec des sous requêtes** | **Aucun**{.text-danger} | |
|
|||
|
| **E161** | **Commentaires SQL en utilisant le premier Double moins** | **Oui**{.text-success} | |
|
|||
|
| **E171** | **Support SQLSTATE** | **Aucun**{.text-danger} | |
|
|||
|
| **E182** | **Liaison du langage hôte** | **Aucun**{.text-danger} | |
|
|||
|
| **F031** | **Manipulation de schéma de base** | **Partiel**{.text-warning} | |
|
|||
|
| F031-01 | Instruction CREATE TABLE pour créer des tables de base persistantes | Partiel{.text-warning} | Aucun `SYSTEM VERSIONING`, `ON COMMIT`, `GLOBAL`, `LOCAL`, `PRESERVE`, `DELETE`, `REF IS`, `WITH OPTIONS`, `UNDER`, `LIKE`, `PERIOD FOR` clauses et aucun support pour les types de données résolus par l'utilisateur |
|
|||
|
| F031-02 | Instruction créer une vue | Partiel{.text-warning} | Aucun `RECURSIVE`, `CHECK`, `UNDER`, `WITH OPTIONS` clauses et aucun support pour les types de données résolus par l'utilisateur |
|
|||
|
| F031-03 | Déclaration de subvention | Oui{.text-success} | |
|
|||
|
| F031-04 | ALTER TABLE statement: ajouter une clause de colonne | Partiel{.text-warning} | Pas de support pour `GENERATED` clause et période de temps du système |
|
|||
|
| F031-13 | Instruction DROP TABLE: clause RESTRICT | Aucun{.text-danger} | |
|
|||
|
| F031-16 | Instruction DROP VIEW: clause RESTRICT | Aucun{.text-danger} | |
|
|||
|
| F031-19 | REVOKE statement: clause RESTRICT | Aucun{.text-danger} | |
|
|||
|
| **F041** | **Table jointe de base** | **Partiel**{.text-warning} | |
|
|||
|
| F041-01 | INNER join (mais pas nécessairement le mot-clé INNER) | Oui{.text-success} | |
|
|||
|
| F041-02 | INTÉRIEURE mot-clé | Oui{.text-success} | |
|
|||
|
| F041-03 | LEFT OUTER JOIN | Oui{.text-success} | |
|
|||
|
| F041-04 | RIGHT OUTER JOIN | Oui{.text-success} | |
|
|||
|
| F041-05 | Les jointures externes peuvent être imbriqués | Oui{.text-success} | |
|
|||
|
| F041-07 | La table intérieure dans une jointure extérieure gauche ou droite peut également être utilisée dans une jointure intérieure | Oui{.text-success} | |
|
|||
|
| F041-08 | Tous les opérateurs de comparaison sont pris en charge (plutôt que juste =) | Aucun{.text-danger} | |
|
|||
|
| **F051** | **Date et heure de base** | **Partiel**{.text-warning} | |
|
|||
|
| F051-01 | Type de données de DATE (y compris la prise en charge du littéral de DATE) | Partiel{.text-warning} | Aucun littéral |
|
|||
|
| F051-02 | TYPE DE DONNÉES DE TEMPS (y compris la prise en charge du littéral de temps) avec une précision de secondes fractionnaires d'au moins 0 | Aucun{.text-danger} | |
|
|||
|
| F051-03 | Type de données D'horodatage (y compris la prise en charge du littéral D'horodatage) avec une précision de secondes fractionnaires d'au moins 0 et 6 | Aucun{.text-danger} | `DateTime64` temps fournit des fonctionnalités similaires |
|
|||
|
| F051-04 | Prédicat de comparaison sur les types de données DATE, heure et horodatage | Partiel{.text-warning} | Un seul type de données disponible |
|
|||
|
| F051-05 | Distribution explicite entre les types datetime et les types de chaînes de caractères | Oui{.text-success} | |
|
|||
|
| F051-06 | CURRENT\_DATE | Aucun{.text-danger} | `today()` est similaire |
|
|||
|
| F051-07 | LOCALTIME | Aucun{.text-danger} | `now()` est similaire |
|
|||
|
| F051-08 | LOCALTIMESTAMP | Aucun{.text-danger} | |
|
|||
|
| **F081** | **UNION et sauf dans les vues** | **Partiel**{.text-warning} | |
|
|||
|
| **F131** | **Groupées des opérations** | **Partiel**{.text-warning} | |
|
|||
|
| F131-01 | WHERE, GROUP BY et ayant des clauses prises en charge dans les requêtes avec des vues groupées | Oui{.text-success} | |
|
|||
|
| F131-02 | Plusieurs tables prises en charge dans les requêtes avec des vues groupées | Oui{.text-success} | |
|
|||
|
| F131-03 | Définir les fonctions prises en charge dans les requêtes groupées vues | Oui{.text-success} | |
|
|||
|
| F131-04 | Sous requêtes avec des clauses GROUP BY et HAVING et des vues groupées | Oui{.text-success} | |
|
|||
|
| F131-05 | Sélectionnez une seule ligne avec des clauses GROUP BY et HAVING et des vues groupées | Aucun{.text-danger} | |
|
|||
|
| **F181** | **Support de module Multiple** | **Aucun**{.text-danger} | |
|
|||
|
| **F201** | **Fonction de distribution** | **Oui**{.text-success} | |
|
|||
|
| **F221** | **Valeurs par défaut explicites** | **Aucun**{.text-danger} | |
|
|||
|
| **F261** | **Expression de cas** | **Oui**{.text-success} | |
|
|||
|
| F261-01 | Cas Simple | Oui{.text-success} | |
|
|||
|
| F261-02 | Cas recherché | Oui{.text-success} | |
|
|||
|
| F261-03 | NULLIF | Oui{.text-success} | |
|
|||
|
| F261-04 | COALESCE | Oui{.text-success} | |
|
|||
|
| **F311** | **Déclaration de définition de schéma** | **Partiel**{.text-warning} | |
|
|||
|
| F311-01 | CREATE SCHEMA | Aucun{.text-danger} | |
|
|||
|
| F311-02 | Créer une TABLE pour les tables de base persistantes | Oui{.text-success} | |
|
|||
|
| F311-03 | CREATE VIEW | Oui{.text-success} | |
|
|||
|
| F311-04 | CREATE VIEW: WITH CHECK OPTION | Aucun{.text-danger} | |
|
|||
|
| F311-05 | Déclaration de subvention | Oui{.text-success} | |
|
|||
|
| **F471** | **Valeurs de sous-requête scalaire** | **Oui**{.text-success} | |
|
|||
|
| **F481** | **Prédicat null étendu** | **Oui**{.text-success} | |
|
|||
|
| **F812** | **Base de repérage** | **Aucun**{.text-danger} | |
|
|||
|
| **T321** | **Routines SQL-invoked de base** | **Aucun**{.text-danger} | |
|
|||
|
| T321-01 | Fonctions définies par l'utilisateur sans surcharge | Aucun{.text-danger} | |
|
|||
|
| T321-02 | Procédures stockées définies par l'utilisateur sans surcharge | Aucun{.text-danger} | |
|
|||
|
| T321-03 | L'invocation de la fonction | Aucun{.text-danger} | |
|
|||
|
| T321-04 | L'instruction d'APPEL de | Aucun{.text-danger} | |
|
|||
|
| T321-05 | Déclaration de retour | Aucun{.text-danger} | |
|
|||
|
| **T631** | **Dans le prédicat avec un élément de liste** | **Oui**{.text-success} | |
|