Lorsque nous exécutons select count(*) from table_name
, il renvoie le nombre de lignes. Qu'est-ce que count(1)
? Que signifie 1
ici? Est-ce le même que count(*)
(car il donne le même résultat à l'exécution)?Que signifie "select count (1) from nom_table" sur les tables de base de données?
Répondre
Le paramètre de la fonction COUNT est une expression à évaluer pour chaque ligne. La fonction COUNT renvoie le nombre de lignes pour lesquelles l'expression évalue à une valeur non nulle. (* est une expression spéciale qui n'est pas évaluée, elle renvoie simplement le nombre de lignes.)
Il existe deux modificateurs supplémentaires pour l'expression: ALL et DISTINCT. Ceux-ci déterminent si les doublons sont rejetés. Puisque ALL est la valeur par défaut, votre exemple est le même que count (ALL 1), ce qui signifie que les doublons sont conservés. Comme l'expression "1" est non nulle pour chaque ligne et que vous ne supprimez pas de doublons, COUNT (1) doit toujours retourner le même nombre que COUNT (*).
Rappelez-vous sélectionnez DISTINCT coloumn1 à partir de table1! = Select count (DISTINCT coloumn1) from table1; –
Comptez aussi (1) ici 1 n'est pas coloumn non, c'est une expression. par exemple) sélectionnez 1 dans le tableau 1; affichera 1 fois non pour les lignes de cette table. –
sélectionnez count (DISTINCT/ALL columnName) à partir de table1; renverra aucune valeur/NULL NOT NULL de la colonne (columnName). –
dans l'oracle Je crois que ces ont exactement le même sens
Est-ce que le 1 se rapporte à la première colonne? – dacracot
non, 1 fait référence au nombre constant 1. Lorsque vous dites, ORDER BY 1, il se réfère à la colonne un. – Thilo
c'est ce que je me demandais il y a un moment, mais vous pouvez spécifier n'importe quel nombre qui est supérieur au nombre de colonnes, mais le résultat est toujours le même. Donc, ce n'est certainement pas le numéro de la colonne. – Nrj
Ceci est similaire à la différence entre
SELECT * FROM table_name and SELECT 1 FROM table_name.
Si vous
SELECT 1 FROM table_name
il vous donnera le numéro 1 chaque rangée dans le tableau. Donc oui count(*)
et count(1)
fourniront les mêmes résultats que le count(8)
ou count(column_name)
count (nom_colonne) n'est pas tout à fait le même - il ne compte pas les lignes avec null dans cette colonne. Voir ici pour plus de détails: http://stackoverflow.com/questions/169784 – Blorgbeard
Hmm, en fait c'est pour SQL Server. Oracle peut fonctionner différemment, je suppose. – Blorgbeard
Compte ne devrait jamais utiliser les valeurs NULL selon le SQL standard, ORacle et SQL Server doivent avoir le même comportement à cet égard. – Thorsten
Il n'y a pas de différence.
COUNT(1)
est simplement de compter une colonne de valeur constante 1 pour chaque ligne. Comme d'autres utilisateurs l'ont dit, c'est la même chose que COUNT(0)
ou COUNT(42)
. Toute valeur non NULL
suffira.
http://asktom.oracle.com/pls/asktom/f?p=100:11:2603224624843292::::P11_QUESTION_ID:1156151916789
L'optimiseur Oracle ne semble utiliser pour avoir des bugs dans ce qui a causé le nombre d'être affecté par quelle colonne que vous avez choisi et si elle était dans un index, de sorte que le COUNT (1) Convention est entrée en étant.
SELECT COUNT(1) from <table name>
devrait faire exactement la même chose que
SELECT COUNT(*) from <table name>
Il peut y avoir été ou encore être des raisons pour lesquelles il effectuerait mieux que SELECT COUNT(*)
sur une base de données, mais je considère qu'un bug dans le DB. Cependant, la signification est différente, car elle ne compte que les lignes avec une valeur non nulle pour la colonne donnée.
Voici a link qui aidera à répondre à vos questions.En bref:
count (*) est la bonne façon d'écrire et compter (1) est Optimisés de count (*) en interne - depuis
a) compter les lignes où 1 est non nul est moins efficace que
b) compter les lignes
en fonction de qui vous demandez, certaines personnes déclarent que l'exécution select count(1) from random_table;
fonctionne plus vite que select count(*) from random_table
. D'autres prétendent qu'ils sont exactement les mêmes.
Cette link indique que la différence de vitesse entre les deux est due à un SCAN COMPLET FULL FAST SCAN.
Vous interprétez mal le lien. LS fait le point que COUNT (COLUMN) peut être le même que et plus rapide que COUNT (*), mais seulement quand aucune colonne NOT NULL n'est indexée mais COLUMN est indexée et n'a en réalité aucune valeur nulle. Plus d'une question piège. –
J'essayais d'utiliser le lien pour documenter l'affirmation que, dans certaines circonstances, COUNT (1) pourrait être plus rapide que COUNT (*). Certaines réponses antérieures avaient fait l'affirmation qu'il n'y avait pas de différences entre les 2, et je fournissais un contre-exemple possible. –
Différence entre le nombre (*) et le nombre (1) dans Oracle? comte
(*) signifie qu'il comptera tous les enregistrements ie nombre chaque cellule MAIS
(1) signifie qu'il ajoutera une colonne de pseudo avec la valeur 1 et renvoie le nombre de tous les dossiers
merci! cela a aidé après avoir lu d'autres réponses top –
peut tester comme ceci:
create table test1(
id number,
name varchar2(20)
);
insert into test1 values (1,'abc');
insert into test1 values (1,'abc');
select * from test1;
select count(*) from test1;
select count(1) from test1;
select count(ALL 1) from test1;
select count(DISTINCT 1) from test1;
- 1. SQL SELECT FROM ... AS avec spécificateur de type de données?
- 2. COUNT Mysql (*) sur plusieurs tables
- 3. Que signifie 0..1 Mean dans EF?
- 4. Que signifie $ NON-NLS-1 $?
- 5. sélection de la première colonne de toutes les tables dans une base de données mysql
- 6. Select Count Distinct
- 7. TSQL: UPDATE avec INSERT INTO SELECT FROM
- 8. Une table organisée par index peut-elle accélérer le processus SELECT COUNT (*) FROM table
- 9. MySQL Select - Combiner COUNT avec GROUP_CONCAT
- 10. Comparaison de deux tables de base de données
- 11. Que signifie TOP 1 dans une requête sql?
- 12. Que signifie $ {2: - $ {1}} dans Bash?
- 13. DCount vs. SQL SELECT COUNT (*)?
- 14. Que signifie l'erreur de virgule flottante -1. # J?
- 15. Lambda Expression de Select * from TableName
- 16. Que fait "select ((select (s), $ | = 1) [0])" faire en Perl?
- 17. MYSQL MyISAM Comment inscrire 2 instruction select + select count
- 18. mysql insert imbriqué select from other db tronque double valeurs
- 19. Django et les tables de base de données héritées bizarres
- 20. Problème avec l'instruction Count pour plusieurs bases de données
- 21. Meilleure pratique pour synchroniser les constantes nommées dans les tables de référence de code et de base de données?
- 22. HQL 1 à plusieurs count() question
- 23. Vérifier le nombre d'enregistrements dans une table de base de données autre que count (*)
- 24. données Interrogation de différentes tables
- 25. Les scripts SQL agissent sur la base de données principale au lieu de la base de données de pratique
- 26. Ajouter les résultats de plusieurs requêtes COUNT
- 27. "select abc de (sélectionner 1) abc" produit "(1)" au lieu de "1"
- 28. Récupère des lignes de plusieurs tables avec un sous-select?
- 29. Que cela signifie-t-il lorsque AuthorizationExecuteWithPrivileges() renvoie -1?
- 30. Sélectionnez Requête sur 2 tables, sur différents serveurs de base de données
Question intéressante. Je serais également intéressé si la réponse est dépendante de l'implémentation (par exemple, si le résultat de la requête est le même dans SQL Server que dans Oracle). –