NATURAL JOIN Problem

Hi,
After reading about natural join on wikipedia , I have been interested in using this syntax to express equi joins between tables that share some common column names. So I have these 3 tables:
--Cours (sigle, titre, nbCredits)
--Inscription (sigle, trim, matricule, numSect, cumulatif, noteFinale)
--Personne (nas, nom, prenom, typPers, matricule, pmatricule)
When I specify * in the select clause, I only get 3 rows, which makes sense given the restriction I have specified in the where clause. But what I don't understand is that when I replace the * with specific column names, then oracle returns a whole bunch of additional rows that should have been rejected in the where clause. It seems to me Oracle should still only return 3 rows. Does this make sense to anyone? Here is the query I am running:
SELECT *
FROM Cours NATURAL JOIN Inscription NATURAL JOIN Personne
WHERE prenom='John'
AND nom='Doe'
AND nbCredits>2
AND noteFinale<>'F'
AND noteFinale IS NOT NULL;
-- 3 rows selected (good)
SELECT sigle, titre
FROM Cours NATURAL JOIN Inscription NATURAL JOIN Personne
WHERE prenom='John'
AND nom='Doe'
AND nbCredits>2
AND noteFinale<>'F'
AND noteFinale IS NOT NULL;
-- 80 rows selected (bad)
Ludovic
Edited by: user3968717 on Dec 5, 2009 12:41 PM
Edited by: user3968717 on Dec 5, 2009 12:42 PM

ok so here is how you can reproduce the problem:
DROP TABLE Inscription;
DROP TABLE Cours;
DROP TABLE Personne;
--Personne (nas, nom, prenom, typPers, matricule, pmatricule)
--Personne (123456789, ‘Guertin’, ‘François’, ‘P’, NULL, ‘p900771’)
CREATE TABLE Personne (
nas NUMBER(9),
CONSTRAINT pk_nas
PRIMARY KEY(nas),
nom VARCHAR2(100) NOT NULL,
prenom VARCHAR2(100) NOT NULL,
typPers CHAR NOT NULL,
CONSTRAINT check_typepers
CHECK (typPers IN ('E', 'X', 'P')),
matricule NUMBER(7) UNIQUE,
pmatricule VARCHAR2(7) UNIQUE
--Cours (sigle, titre, nbCredits)
--Cours (‘INF3303’, ‘Java avancé’, 3)
CREATE TABLE Cours (
sigle VARCHAR2(12),
CONSTRAINT pk_sigle
PRIMARY KEY(sigle),
titre VARCHAR2(100) NOT NULL,
nbCredits NUMBER(2)
--Inscription (sigle, trim, matricule, numSect, cumulatif, noteFinale)
--Inscription (‘INF1101’, ’08-1’, 1234567, 1, 85, ’B’)
CREATE TABLE Inscription (
sigle VARCHAR2(12),
trim CHAR(4),
matricule NUMBER(7),
CONSTRAINT fk_inscription_personne
FOREIGN KEY(matricule)
REFERENCES Personne(matricule),
numSect NUMBER(2) NOT NULL,
cumulatif NUMBER(5,2),
CONSTRAINT check_cumulatif
CHECK (cumulatif BETWEEN 0 AND 20),
noteFinale VARCHAR2(2),
CONSTRAINT pk_sigle_trim_matricule
PRIMARY KEY (sigle, trim, matricule)
INSERT INTO Personne (nas, nom, prenom, typPers, matricule, pmatricule) VALUES (438183442, 'Ould Bachir', 'Mohamed', 'E', 1194330, NULL);
INSERT INTO Personne (nas, nom, prenom, typPers, matricule, pmatricule) VALUES (704839482, 'Ben Ali', 'Guillaume- Alexandre', 'E', 1051001, NULL);
INSERT INTO Personne (nas, nom, prenom, typPers, matricule, pmatricule) VALUES (299473563, 'Ouali', 'Lijun', 'E', 1440954, NULL);
INSERT INTO Personne (nas, nom, prenom, typPers, matricule, pmatricule) VALUES (528291948, 'Nicolescu', 'Irina', 'E', 1249904, NULL);
INSERT INTO Personne (nas, nom, prenom, typPers, matricule, pmatricule) VALUES (406489610, 'Hertrich', 'Basil D.', 'E', 836600, NULL);
INSERT INTO Personne (nas, nom, prenom, typPers, matricule, pmatricule) VALUES (538967530, 'Gagnon', 'Jean-Francois', 'E', 862895, NULL);
INSERT INTO Personne (nas, nom, prenom, typPers, matricule, pmatricule) VALUES (683587008, 'Capistran', 'Hanifa', 'E', 557177, NULL);
INSERT INTO Personne (nas, nom, prenom, typPers, matricule, pmatricule) VALUES (420147705, 'Gélinas', 'Dominique', 'E', 775406, NULL);
INSERT INTO Personne (nas, nom, prenom, typPers, matricule, pmatricule) VALUES (547877666, 'Pidgeon', 'Louis-Martin', 'E', 1295394, NULL);
INSERT INTO Personne (nas, nom, prenom, typPers, matricule, pmatricule) VALUES (641624707, 'Dubois', 'Walter', 'E', 621940, NULL);
INSERT INTO Personne (nas, nom, prenom, typPers, matricule, pmatricule) VALUES (276753600, 'Dupuis', 'Nassim', 'E', 1012940, NULL);
INSERT INTO Personne (nas, nom, prenom, typPers, matricule, pmatricule) VALUES (347189227, 'Lévesque', 'Segla', 'E', 1330092, NULL);
INSERT INTO Personne (nas, nom, prenom, typPers, matricule, pmatricule) VALUES (771931031, 'Hoang', 'Sylvain', 'E', 845099, NULL);
INSERT INTO Personne (nas, nom, prenom, typPers, matricule, pmatricule) VALUES (760952747, 'Deschamps', 'René', 'E', 1095066, NULL);
INSERT INTO Personne (nas, nom, prenom, typPers, matricule, pmatricule) VALUES (448428805, 'Desforges', 'Sandrine', 'E', 555402, NULL);
INSERT INTO Personne (nas, nom, prenom, typPers, matricule, pmatricule) VALUES (294843128, 'Detuncq', 'Serge', 'E', 1406818, NULL);
INSERT INTO Personne (nas, nom, prenom, typPers, matricule, pmatricule) VALUES (510245759, 'Mbassegue', 'J.-P.', 'E', 534725, NULL);
INSERT INTO Personne (nas, nom, prenom, typPers, matricule, pmatricule) VALUES (599298612, 'Lefrançois', 'L.''Hocine', 'E', 1497297, NULL);
INSERT INTO Personne (nas, nom, prenom, typPers, matricule, pmatricule) VALUES (343687369, 'Mullins', 'Marie-Claude', 'E', 1534079, NULL);
INSERT INTO Personne (nas, nom, prenom, typPers, matricule, pmatricule) VALUES (697415856, 'Kashyap', 'Jean-François', 'E', 1009214, NULL);
INSERT INTO Personne (nas, nom, prenom, typPers, matricule, pmatricule) VALUES (201038917, 'Ouzineb', 'François', 'E', 593700, NULL);
INSERT INTO Personne (nas, nom, prenom, typPers, matricule, pmatricule) VALUES (687370755, 'Farhat', 'Bernard', 'E', 1458644, NULL);
INSERT INTO Personne (nas, nom, prenom, typPers, matricule, pmatricule) VALUES (518828231, 'Boudreault', 'Rémi', 'E', 671409, NULL);
INSERT INTO Personne (nas, nom, prenom, typPers, matricule, pmatricule) VALUES (520474003, 'Lesage', 'Ion', 'X', NULL, 'p136014');
INSERT INTO Personne (nas, nom, prenom, typPers, matricule, pmatricule) VALUES (384843784, 'Latreille', 'Patrice', 'E', 611719, NULL);
INSERT INTO Personne (nas, nom, prenom, typPers, matricule, pmatricule) VALUES (676878312, 'Imbeau', 'Jean-Charles', 'E', 912927, NULL);
INSERT INTO Personne (nas, nom, prenom, typPers, matricule, pmatricule) VALUES (643878433, 'Henri', 'Nassim', 'E', 1185544, NULL);
INSERT INTO Personne (nas, nom, prenom, typPers, matricule, pmatricule) VALUES (337901910, 'Lafleur', 'Hamza', 'E', 657154, NULL);
INSERT INTO Personne (nas, nom, prenom, typPers, matricule, pmatricule) VALUES (775289961, 'Derome', 'Jean', 'E', 600728, NULL);
INSERT INTO Personne (nas, nom, prenom, typPers, matricule, pmatricule) VALUES (740755632, 'Baron', 'Christian', 'E', 1164635, NULL);
INSERT INTO Personne (nas, nom, prenom, typPers, matricule, pmatricule) VALUES (540055231, 'Messas', 'Aouni-A', 'E', 1323029, NULL);
INSERT INTO Personne (nas, nom, prenom, typPers, matricule, pmatricule) VALUES (296229241, 'Milot', 'Robert', 'E', 1478064, NULL);
INSERT INTO Personne (nas, nom, prenom, typPers, matricule, pmatricule) VALUES (761602775, 'Lakis', 'Stéphane', 'E', 1249685, NULL);
INSERT INTO Personne (nas, nom, prenom, typPers, matricule, pmatricule) VALUES (490121163, 'Salako', 'Sylvain', 'E', 1268450, NULL);
INSERT INTO Personne (nas, nom, prenom, typPers, matricule, pmatricule) VALUES (547485629, 'Wygowski', 'Sébastien', 'E', 772428, NULL);
INSERT INTO Personne (nas, nom, prenom, typPers, matricule, pmatricule) VALUES (384542025, 'Lacroix', 'Ralph', 'E', 1384960, NULL);
INSERT INTO Personne (nas, nom, prenom, typPers, matricule, pmatricule) VALUES (411088972, 'Dubeau', 'Walter', 'E', 1509165, NULL);
INSERT INTO Personne (nas, nom, prenom, typPers, matricule, pmatricule) VALUES (664857491, 'Paraschivoiu', 'Mohamed', 'E', 1001731, NULL);
INSERT INTO Personne (nas, nom, prenom, typPers, matricule, pmatricule) VALUES (599119293, 'Gagnon', 'Pierrette', 'E', 1130188, NULL);
INSERT INTO Personne (nas, nom, prenom, typPers, matricule, pmatricule) VALUES (626247031, 'Abou-Khalil', 'Mario', 'E', 1520042, NULL);
INSERT INTO Personne (nas, nom, prenom, typPers, matricule, pmatricule) VALUES (769101909, 'Lacroix', 'Dina Sandrine', 'E', 1280046, NULL);
INSERT INTO Personne (nas, nom, prenom, typPers, matricule, pmatricule) VALUES (750382719, 'Tremblay', 'Pierrette', 'E', 668396, NULL);
INSERT INTO Personne (nas, nom, prenom, typPers, matricule, pmatricule) VALUES (328263556, 'Daigneault', 'Pierre', 'E', 1470609, NULL);
INSERT INTO Personne (nas, nom, prenom, typPers, matricule, pmatricule) VALUES (619801573, 'Bosisio', 'René', 'E', 1200428, NULL);
INSERT INTO Personne (nas, nom, prenom, typPers, matricule, pmatricule) VALUES (371336464, 'Fernandez', 'Samer', 'E', 1117180, NULL);
INSERT INTO Personne (nas, nom, prenom, typPers, matricule, pmatricule) VALUES (747655251, 'Bertrand', 'Gérald', 'E', 1270615, NULL);
INSERT INTO Personne (nas, nom, prenom, typPers, matricule, pmatricule) VALUES (253548669, 'Bélanger', 'Djebar', 'E', 692265, NULL);
INSERT INTO Personne (nas, nom, prenom, typPers, matricule, pmatricule) VALUES (655272366, 'Gagné', 'Raymond', 'E', 984770, NULL);
INSERT INTO Personne (nas, nom, prenom, typPers, matricule, pmatricule) VALUES (392982583, 'Lafleur', 'Chahé', 'E', 934101, NULL);
INSERT INTO Personne (nas, nom, prenom, typPers, matricule, pmatricule) VALUES (246459235, 'Banville', 'Pierre', 'E', 1525599, NULL);
INSERT INTO Personne (nas, nom, prenom, typPers, matricule, pmatricule) VALUES (424729975, 'Paraschivoiu', 'France', 'E', 952338, NULL);
INSERT INTO Personne (nas, nom, prenom, typPers, matricule, pmatricule) VALUES (363488896, 'Millette', 'Samer', 'E', 1590893, NULL);
INSERT INTO Personne (nas, nom, prenom, typPers, matricule, pmatricule) VALUES (648370940, 'Lejeune', 'Jose', 'E', 748277, NULL);
INSERT INTO Personne (nas, nom, prenom, typPers, matricule, pmatricule) VALUES (541639150, 'Daoud', 'Christian', 'E', 1040265, NULL);
INSERT INTO Personne (nas, nom, prenom, typPers, matricule, pmatricule) VALUES (645224662, 'Brunet', 'Éric', 'E', 1246886, NULL);
INSERT INTO Personne (nas, nom, prenom, typPers, matricule, pmatricule) VALUES (687701963, 'Houde', 'Claude', 'E', 638341, NULL);
INSERT INTO Personne (nas, nom, prenom, typPers, matricule, pmatricule) VALUES (512932438, 'Heuzey', 'Jules', 'E', 665428, NULL);
INSERT INTO Personne (nas, nom, prenom, typPers, matricule, pmatricule) VALUES (388460612, 'McSorley', 'Patrice', 'E', 549806, NULL);
INSERT INTO Personne (nas, nom, prenom, typPers, matricule, pmatricule) VALUES (236153443, 'Bilodeau', 'Thang', 'X', NULL, 'p42803');
INSERT INTO Personne (nas, nom, prenom, typPers, matricule, pmatricule) VALUES (595724089, 'Ruiz', 'Yvon', 'X', NULL, 'p694058');
INSERT INTO Personne (nas, nom, prenom, typPers, matricule, pmatricule) VALUES (622802612, 'Srinivasan', 'Bernard', 'E', 936457, NULL);
INSERT INTO Personne (nas, nom, prenom, typPers, matricule, pmatricule) VALUES (234299107, 'Cybis', 'Jean-Marc', 'E', 1536823, NULL);
INSERT INTO Personne (nas, nom, prenom, typPers, matricule, pmatricule) VALUES (643414695, 'Brochu', 'Claude-Jean', 'E', 1541861, NULL);
INSERT INTO Personne (nas, nom, prenom, typPers, matricule, pmatricule) VALUES (311014945, 'Roy', 'Guy', 'E', 1509489, NULL);
INSERT INTO Personne (nas, nom, prenom, typPers, matricule, pmatricule) VALUES (729095588, 'Bilodeau', 'Marie-Claude', 'E', 1083588, NULL);
INSERT INTO Personne (nas, nom, prenom, typPers, matricule, pmatricule) VALUES (245107290, 'N''Dri', 'Eduardo', 'X', NULL, 'p654662');
INSERT INTO Personne (nas, nom, prenom, typPers, matricule, pmatricule) VALUES (484560064, 'Carreau', 'Louise', 'E', 605540, NULL);
INSERT INTO Personne (nas, nom, prenom, typPers, matricule, pmatricule) VALUES (398475115, 'Bussières', 'Giuliano', 'E', 1161512, NULL);
INSERT INTO Personne (nas, nom, prenom, typPers, matricule, pmatricule) VALUES (732507105, 'Robert', 'Bernard', 'E', 650703, NULL);
INSERT INTO Personne (nas, nom, prenom, typPers, matricule, pmatricule) VALUES (618379982, 'Aubertin', 'Patrice', 'E', 1013940, NULL);
-- Insere les cours
INSERT INTO Cours (sigle, titre, nbCredits) VALUES ('INF4201', 'Les systèmes experts: concepts et réalisation', 3);
INSERT INTO Cours (sigle, titre, nbCredits) VALUES ('MEC8903', 'Fabrication pièces plastiques par injection', 3);
INSERT INTO Cours (sigle, titre, nbCredits) VALUES ('PL010', 'Science et ingénierie des polymères', 3);
INSERT INTO Cours (sigle, titre, nbCredits) VALUES ('CY140', 'Piratage informatique', 3);
INSERT INTO Cours (sigle, titre, nbCredits) VALUES ('ST201', 'Stage industriel I', 1);
INSERT INTO Cours (sigle, titre, nbCredits) VALUES ('E-222', 'Éléments de circuits électriques', 3);
INSERT INTO Cours (sigle, titre, nbCredits) VALUES ('ST102E', 'Stage industriel II - suite', 2);
INSERT INTO Cours (sigle, titre, nbCredits) VALUES ('MEC8508', 'Développement de produits en envir. virtuel', 3);
INSERT INTO Cours (sigle, titre, nbCredits) VALUES ('AE3400', 'Commande de vol', 3);
INSERT INTO Cours (sigle, titre, nbCredits) VALUES ('AE4500', 'Informatique embarquée', 3);
INSERT INTO Cours (sigle, titre, nbCredits) VALUES ('ST102', 'Stage industriel II', 1);
INSERT INTO Cours (sigle, titre, nbCredits) VALUES ('MEC6906', 'Stage industriel II', 6);
INSERT INTO Cours (sigle, titre, nbCredits) VALUES ('MEC8310', 'Projet en environnement virtuel', 6);
INSERT INTO Cours (sigle, titre, nbCredits) VALUES ('ST101', 'Stage industriel I', 1);
INSERT INTO Cours (sigle, titre, nbCredits) VALUES ('AE4715', 'Avionique', 3);
INSERT INTO Cours (sigle, titre, nbCredits) VALUES ('ST101E', 'Stage industriel I - suite', 2);
INSERT INTO Cours (sigle, titre, nbCredits) VALUES ('CP110', 'Électrotechnique appliquée', 3);
INSERT INTO Cours (sigle, titre, nbCredits) VALUES ('E-302', 'Distribution électrique', 3);
INSERT INTO Cours (sigle, titre, nbCredits) VALUES ('E-331', 'Commande et protection', 3);
INSERT INTO Cours (sigle, titre, nbCredits) VALUES ('PHS8201', 'Optoélectronique', 3);
INSERT INTO Cours (sigle, titre, nbCredits) VALUES ('CP130', 'Logique', 3);
INSERT INTO Cours (sigle, titre, nbCredits) VALUES ('CIV1100', 'Relations interPersonne_A08lles', 1);
INSERT INTO Cours (sigle, titre, nbCredits) VALUES ('ST202', 'Stage industriel II', 1);
INSERT INTO Cours (sigle, titre, nbCredits) VALUES ('MET8106', 'Énergie électrochimique', 3);
INSERT INTO Cours (sigle, titre, nbCredits) VALUES ('MEC6905', 'Stage industriel I', 6);
INSERT INTO Cours (sigle, titre, nbCredits) VALUES ('CP510', 'Projet intégrateur', 3);
INSERT INTO Cours (sigle, titre, nbCredits) VALUES ('MIN-STO3', 'Préparation et rapport du stage', 3);
INSERT INTO Cours (sigle, titre, nbCredits) VALUES ('MTH1110', 'Équations différentielles ordinaires', 2);
INSERT INTO Cours (sigle, titre, nbCredits) VALUES ('MIN-STO2', 'Préparation et rapport du stage', 3);
INSERT INTO Cours (sigle, titre, nbCredits) VALUES ('CY130', 'Clavardage et communications', 3);
-- Insere les inscriptions
INSERT INTO Inscription (sigle, trim, matricule, numSect, cumulatif, noteFinale) VALUES ('MIN-STO2', '07-3', 1051001, 1, 5.6, 'F');
INSERT INTO Inscription (sigle, trim, matricule, numSect, cumulatif, noteFinale) VALUES ('MEC8310', '09-2', 555402, 1, 8, 'F');
INSERT INTO Inscription (sigle, trim, matricule, numSect, cumulatif, noteFinale) VALUES ('MIN-STO2', '07-1', 1384960, 1, 11.8, 'F');
INSERT INTO Inscription (sigle, trim, matricule, numSect, cumulatif, noteFinale) VALUES ('MEC6905', '09-2', 1164635, 1, 10.4, 'F');
INSERT INTO Inscription (sigle, trim, matricule, numSect, cumulatif, noteFinale) VALUES ('AE3400', '07-1', 1280046, 1, 12.6, 'F');
INSERT INTO Inscription (sigle, trim, matricule, numSect, cumulatif, noteFinale) VALUES ('MEC8903', '07-1', 1001731, 1, 9.5, 'F');
INSERT INTO Inscription (sigle, trim, matricule, numSect, cumulatif, noteFinale) VALUES ('MEC8903', '06-1', 1509489, 1, 11.8, 'F');
INSERT INTO Inscription (sigle, trim, matricule, numSect, cumulatif, noteFinale) VALUES ('MEC8310', '06-3', 1051001, 1, 10.8, 'F');
INSERT INTO Inscription (sigle, trim, matricule, numSect, cumulatif, noteFinale) VALUES ('PHS8201', '08-2', 1384960, 1, 9.8, 'F');
INSERT INTO Inscription (sigle, trim, matricule, numSect, cumulatif, noteFinale) VALUES ('MIN-STO2', '07-1', 845099, 1, 10.8, 'F');
INSERT INTO Inscription (sigle, trim, matricule, numSect, cumulatif, noteFinale) VALUES ('MTH1110', '07-3', 1497297, 1, 8.3, 'F');
INSERT INTO Inscription (sigle, trim, matricule, numSect, cumulatif, noteFinale) VALUES ('CY130', '09-2', 1534079, 1, 9.9, 'F');
INSERT INTO Inscription (sigle, trim, matricule, numSect, cumulatif, noteFinale) VALUES ('INF4201', '06-1', 748277, 1, 16.2, 'B');
INSERT INTO Inscription (sigle, trim, matricule, numSect, cumulatif, noteFinale) VALUES ('ST201', '08-3', 668396, 1, 12.9, 'F');
INSERT INTO Inscription (sigle, trim, matricule, numSect, cumulatif, noteFinale) VALUES ('MTH1110', '07-3', 593700, 1, 11.6, 'F');
INSERT INTO Inscription (sigle, trim, matricule, numSect, cumulatif, noteFinale) VALUES ('MTH1110', '06-1', 1013940, 1, 14.1, 'C');
INSERT INTO Inscription (sigle, trim, matricule, numSect, cumulatif, noteFinale) VALUES ('CIV1100', '08-1', 555402, 1, 8.1, 'F');
INSERT INTO Inscription (sigle, trim, matricule, numSect, cumulatif, noteFinale) VALUES ('ST201', '09-2', 1384960, 1, 5.5, 'F');
INSERT INTO Inscription (sigle, trim, matricule, numSect, cumulatif, noteFinale) VALUES ('ST201', '09-2', 1051001, 1, 6.6, 'F');
INSERT INTO Inscription (sigle, trim, matricule, numSect, cumulatif, noteFinale) VALUES ('CY130', '06-1', 1246886, 1, 13.4, 'F');
INSERT INTO Inscription (sigle, trim, matricule, numSect, cumulatif, noteFinale) VALUES ('AE4500', '06-3', 555402, 1, 13.7, 'F');
INSERT INTO Inscription (sigle, trim, matricule, numSect, cumulatif, noteFinale) VALUES ('CIV1100', '08-3', 1194330, 1, 7.1, 'F');
INSERT INTO Inscription (sigle, trim, matricule, numSect, cumulatif, noteFinale) VALUES ('MTH1110', '06-1', 549806, 1, 7.4, 'F');
INSERT INTO Inscription (sigle, trim, matricule, numSect, cumulatif, noteFinale) VALUES ('PL010', '08-3', 555402, 1, 9, 'F');
INSERT INTO Inscription (sigle, trim, matricule, numSect, cumulatif, noteFinale) VALUES ('PHS8201', '07-1', 1509165, 1, 9.1, 'F');
INSERT INTO Inscription (sigle, trim, matricule, numSect, cumulatif, noteFinale) VALUES ('MET8106', '07-1', 1200428, 1, 6.7, 'F');
INSERT INTO Inscription (sigle, trim, matricule, numSect, cumulatif, noteFinale) VALUES ('AE3400', '09-2', 534725, 1, 12.3, 'F');
INSERT INTO Inscription (sigle, trim, matricule, numSect, cumulatif, noteFinale) VALUES ('ST101', '07-1', 650703, 1, 8, 'F');
INSERT INTO Inscription (sigle, trim, matricule, numSect, cumulatif, noteFinale) VALUES ('PHS8201', '07-2', 657154, 1, 7.5, 'F');
INSERT INTO Inscription (sigle, trim, matricule, numSect, cumulatif, noteFinale) VALUES ('CY130', '06-1', 1051001, 1, 7.9, 'F');
INSERT INTO Inscription (sigle, trim, matricule, numSect, cumulatif, noteFinale) VALUES ('AE4500', '06-3', 1509165, 1, 7, 'F');
INSERT INTO Inscription (sigle, trim, matricule, numSect, cumulatif, noteFinale) VALUES ('MTH1110', '07-3', 668396, 1, 14.3, 'C');
INSERT INTO Inscription (sigle, trim, matricule, numSect, cumulatif, noteFinale) VALUES ('MET8106', '07-2', 668396, 1, 12.5, 'F');
INSERT INTO Inscription (sigle, trim, matricule, numSect, cumulatif, noteFinale) VALUES ('MET8106', '08-3', 934101, 1, 9.5, 'F');
INSERT INTO Inscription (sigle, trim, matricule, numSect, cumulatif, noteFinale) VALUES ('MEC8903', '06-1', 1470609, 1, 9.4, 'F');
INSERT INTO Inscription (sigle, trim, matricule, numSect, cumulatif, noteFinale) VALUES ('INF4201', '07-2', 1323029, 1, 9.3, 'F');
INSERT INTO Inscription (sigle, trim, matricule, numSect, cumulatif, noteFinale) VALUES ('MEC6905', '08-3', 1384960, 1, 4.6, 'F');
INSERT INTO Inscription (sigle, trim, matricule, numSect, cumulatif, noteFinale) VALUES ('MIN-STO2', '09-3', 665428, 1, NULL, NULL);
INSERT INTO Inscription (sigle, trim, matricule, numSect, cumulatif, noteFinale) VALUES ('AE4500', '06-3', 1246886, 1, 9.2, 'F');
INSERT INTO Inscription (sigle, trim, matricule, numSect, cumulatif, noteFinale) VALUES ('CP130', '07-1', 1117180, 1, 7.2, 'F');
INSERT INTO Inscription (sigle, trim, matricule, numSect, cumulatif, noteFinale) VALUES ('PHS8201', '08-2', 1470609, 1, 9.1, 'F');
INSERT INTO Inscription (sigle, trim, matricule, numSect, cumulatif, noteFinale) VALUES ('MEC8903', '09-3', 934101, 1, NULL, NULL);
INSERT INTO Inscription (sigle, trim, matricule, numSect, cumulatif, noteFinale) VALUES ('ST101', '08-2', 748277, 1, 4.7, 'F');
INSERT INTO Inscription (sigle, trim, matricule, numSect, cumulatif, noteFinale) VALUES ('PL010', '06-3', 1470609, 1, 9, 'F');
INSERT INTO Inscription (sigle, trim, matricule, numSect, cumulatif, noteFinale) VALUES ('MET8106', '08-1', 912927, 1, 6.7, 'F');
INSERT INTO Inscription (sigle, trim, matricule, numSect, cumulatif, noteFinale) VALUES ('AE3400', '06-3', 1130188, 1, 7.4, 'F');
INSERT INTO Inscription (sigle, trim, matricule, numSect, cumulatif, noteFinale) VALUES ('INF4201', '06-1', 1001731, 1, 10.7, 'F');
INSERT INTO Inscription (sigle, trim, matricule, numSect, cumulatif, noteFinale) VALUES ('INF4201', '06-1', 621940, 1, 15.7, 'C+');
INSERT INTO Inscription (sigle, trim, matricule, numSect, cumulatif, noteFinale) VALUES ('MEC8310', '06-2', 1117180, 1, 12.5, 'F');
INSERT INTO Inscription (sigle, trim, matricule, numSect, cumulatif, noteFinale) VALUES ('ST201', '09-1', 1012940, 1, 6.9, 'F');
INSERT INTO Inscription (sigle, trim, matricule, numSect, cumulatif, noteFinale) VALUES ('MTH1110', '06-3', 692265, 1, 16.7, 'B');
INSERT INTO Inscription (sigle, trim, matricule, numSect, cumulatif, noteFinale) VALUES ('INF4201', '07-2', 1541861, 1, 7.5, 'F');
INSERT INTO Inscription (sigle, trim, matricule, numSect, cumulatif, noteFinale) VALUES ('MEC8903', '07-1', 605540, 1, 12.6, 'F');
INSERT INTO Inscription (sigle, trim, matricule, numSect, cumulatif, noteFinale) VALUES ('MEC8508', '09-1', 1458644, 1, 8.4, 'F');
INSERT INTO Inscription (sigle, trim, matricule, numSect, cumulatif, noteFinale) VALUES ('CY130', '06-1', 1470609, 1, 17, 'B+');
INSERT INTO Inscription (sigle, trim, matricule, numSect, cumulatif, noteFinale) VALUES ('MEC8310', '06-2', 934101, 1, 13.3, 'F');
INSERT INTO Inscription (sigle, trim, matricule, numSect, cumulatif, noteFinale) VALUES ('MTH1110', '09-3', 1249685, 1, NULL, NULL);
INSERT INTO Inscription (sigle, trim, matricule, numSect, cumulatif, noteFinale) VALUES ('MIN-STO2', '08-2', 657154, 1, 12, 'F');
INSERT INTO Inscription (sigle, trim, matricule, numSect, cumulatif, noteFinale) VALUES ('MIN-STO2', '07-1', 1013940, 1, 14.1, 'C');
INSERT INTO Inscription (sigle, trim, matricule, numSect, cumulatif, noteFinale) VALUES ('MEC6905', '07-2', 1458644, 1, 11.3, 'F');
INSERT INTO Inscription (sigle, trim, matricule, numSect, cumulatif, noteFinale) VALUES ('ST101', '08-2', 1249904, 1, 5.2, 'F');
INSERT INTO Inscription (sigle, trim, matricule, numSect, cumulatif, noteFinale) VALUES ('MEC6905', '09-3', 657154, 1, NULL, NULL);
INSERT INTO Inscription (sigle, trim, matricule, numSect, cumulatif, noteFinale) VALUES ('MET8106', '08-3', 1470609, 1, 12.9, 'F');
INSERT INTO Inscription (sigle, trim, matricule, numSect, cumulatif, noteFinale) VALUES ('AE3400', '06-3', 1270615, 1, 11, 'F');
INSERT INTO Inscription (sigle, trim, matricule, numSect, cumulatif, noteFinale) VALUES ('ST101', '07-3', 671409, 1, 10.2, 'F');
INSERT INTO Inscription (sigle, trim, matricule, numSect, cumulatif, noteFinale) VALUES ('INF4201', '09-3', 836600, 1, NULL, NULL);
INSERT INTO Inscription (sigle, trim, matricule, numSect, cumulatif, noteFinale) VALUES ('MET8106', '08-3', 1534079, 1, 11.9, 'F');
INSERT INTO Inscription (sigle, trim, matricule, numSect, cumulatif, noteFinale) VALUES ('MTH1110', '08-3', 1323029, 1, 6.9, 'F');
INSERT INTO Inscription (sigle, trim, matricule, numSect, cumulatif, noteFinale) VALUES ('CIV1100', '08-1', 1012940, 1, 13.2, 'F');
INSERT INTO Inscription (sigle, trim, matricule, numSect, cumulatif, noteFinale) VALUES ('MTH1110', '06-3', 1117180, 1, 11, 'F');
INSERT INTO Inscription (sigle, trim, matricule, numSect, cumulatif, noteFinale) VALUES ('ST201', '09-1', 1095066, 1, 8.9, 'F');
INSERT INTO Inscription (sigle, trim, matricule, numSect, cumulatif, noteFinale) VALUES ('MEC8903', '08-3', 775406, 1, 6.4, 'F');
INSERT INTO Inscription (sigle, trim, matricule, numSect, cumulatif, noteFinale) VALUES ('MEC8310', '06-2', 1280046, 1, 4.8, 'F');
INSERT INTO Inscription (sigle, trim, matricule, numSect, cumulatif, noteFinale) VALUES ('MEC8903', '06-1', 1330092, 1, 12, 'F');
INSERT INTO Inscription (sigle, trim, matricule, numSect, cumulatif, noteFinale) VALUES ('MEC6905', '09-2', 593700, 1, 14.7, 'C');
INSERT INTO Inscription (sigle, trim, matricule, numSect, cumulatif, noteFinale) VALUES ('AE3400', '08-1', 1117180, 1, 5.8, 'F');
INSERT INTO Inscription (sigle, trim, matricule, numSect, cumulatif, noteFinale) VALUES ('INF4201', '06-1', 1478064, 1, 9.5, 'F');
INSERT INTO Inscription (sigle, trim, matricule, numSect, cumulatif, noteFinale) VALUES ('PL010', '08-1', 1384960, 1, 10.2, 'F');
INSERT INTO Inscription (sigle, trim, matricule, numSect, cumulatif, noteFinale) VALUES ('AE3400', '08-1', 1406818, 1, 10.7, 'F');
INSERT INTO Inscription (sigle, trim, matricule, numSect, cumulatif, noteFinale) VALUES ('PL010', '09-2', 638341, 1, 15.1, 'C+');
INSERT INTO Inscription (sigle, trim, matricule, numSect, cumulatif, noteFinale) VALUES ('MIN-STO2', '07-1', 1534079, 1, 7.4, 'F');
INSERT INTO Inscription (sigle, trim, matricule, numSect, cumulatif, noteFinale) VALUES ('MEC6905', '07-3', 1440954, 1, 10.5, 'F');
INSERT INTO Inscription (sigle, trim, matricule, numSect, cumulatif, noteFinale) VALUES ('AE4500', '07-1', 1536823, 1, 4.3, 'F');
INSERT INTO Inscription (sigle, trim, matricule, numSect, cumulatif, noteFinale) VALUES ('MEC8310', '06-2', 1295394, 1, 7.1, 'F');
INSERT INTO Inscription (sigle, trim, matricule, numSect, cumulatif, noteFinale) VALUES ('INF4201', '09-2', 1440954, 1, 11.2, 'F');
INSERT INTO Inscription (sigle, trim, matricule, numSect, cumulatif, noteFinale) VALUES ('PL010', '08-3', 1440954, 1, 10, 'F');
INSERT INTO Inscription (sigle, trim, matricule, numSect, cumulatif, noteFinale) VALUES ('PL010', '08-3', 611719, 1, 11.7, 'F');
INSERT INTO Inscription (sigle, trim, matricule, numSect, cumulatif, noteFinale) VALUES ('MEC6905', '09-2', 775406, 1, 6.5, 'F');
INSERT INTO Inscription (sigle, trim, matricule, numSect, cumulatif, noteFinale) VALUES ('MTH1110', '06-1', 665428, 1, 10.3, 'F');
INSERT INTO Inscription (sigle, trim, matricule, numSect, cumulatif, noteFinale) VALUES ('MET8106', '07-2', 1384960, 1, 5.2, 'F');
INSERT INTO Inscription (sigle, trim, matricule, numSect, cumulatif, noteFinale) VALUES ('MEC6905', '09-2', 772428, 1, 13.3, 'F');
INSERT INTO Inscription (sigle, trim, matricule, numSect, cumulatif, noteFinale) VALUES ('ST201', '06-1', 772428, 1, 14.9, 'C');
INSERT INTO Inscription (sigle, trim, matricule, numSect, cumulatif, noteFinale) VALUES ('MET8106', '09-1', 1295394, 1, 5.6, 'F');
INSERT INTO Inscription (sigle, trim, matricule, numSect, cumulatif, noteFinale) VALUES ('MEC8508', '09-2', 934101, 1, 12.5, 'F');
INSERT INTO Inscription (sigle, trim, matricule, numSect, cumulatif, noteFinale) VALUES ('ST101', '07-1', 845099, 1, 12.1, 'F');
INSERT INTO Inscription (sigle, trim, matricule, numSect, cumulatif, noteFinale) VALUES ('ST201', '08-3', 1509165, 1, 6.6, 'F');
INSERT INTO Inscription (sigle, trim, matricule, numSect, cumulatif, noteFinale) VALUES ('AE4715', '06-3', 600728, 1, 12.4, 'F');
INSERT INTO Inscription (sigle, trim, matricule, numSect, cumulatif, noteFinale) VALUES ('INF4201', '09-2', 1013940, 1, 12.2, 'F');
INSERT INTO Inscription (sigle, trim, matricule, numSect, cumulatif, noteFinale) VALUES ('MEC8310', '06-1', 934101, 1, 13.2, 'F');
INSERT INTO Inscription (sigle, trim, matricule, numSect, cumulatif, noteFinale) VALUES ('CP130', '07-3', 1509489, 1, 6.5, 'F');
COMMIT;
The query with * only gives 1 result, which is right, but when I use sigle, titre instead I get 5 extra rows. Why?
SELECT sigle, titre
FROM Cours NATURAL JOIN Inscription NATURAL JOIN Personne
WHERE prenom='Pierre'
AND nom='Daigneault'
AND nbCredits>2
AND noteFinale\<\>'F'
AND noteFinale IS NOT NULL;
SIGLE TITRE
INF4201 Les systèmes experts: concepts et réalisation
INF4201 Les systèmes experts: concepts et réalisation
CY130 Clavardage et communications
MIN-STO2 Préparation et rapport du stage
MEC6905 Stage industriel I
PL010 Science et ingénierie des polymères
6 rows selected
SELECT *
FROM Cours NATURAL JOIN Inscription NATURAL JOIN Personne
WHERE prenom='Pierre'
AND nom='Daigneault'
AND nbCredits>2
AND noteFinale\<\>'F'
AND noteFinale IS NOT NULL;
MATRICULE SIGLE TITRE NBCREDITS TRIM NUMSECT CUMULATIF NOTEFINALE NAS NOM PRENOM TYPPERS PMATRICULE
1470609 CY130 Clavardage et communications 3 06-1 1 17 B+ 328263556 Daigneault Pierre E
1 rows selected
Edited by: user3968717 on Dec 5, 2009 3:06 PM
Edited by: user3968717 on Dec 5, 2009 3:09 PM

Similar Messages

  • A simple problem with natural join

    i have 2 tables what have columns with distinct's names are referenced.
    natural join not works 'cose only foreign key reference this 2 tables.
    Have something to make table join in using an specific foreign key??
    I'm using oracle9i
    Example:
    table a( a_cod number, a_name varchar2(20))
    table b( b_cod number, b_month_year date, b_salary number)
    ALTER TABLE b ADD ( CONSTRAINT b_a_FK FOREIGN KEY (b_cod)
    REFERENCES a (a_cod));
    select * from a natural join b
    where trunc(b_month_year) = trunc(sysdate)

    I'm not express me correctly.
    We have 2 tables like this:
    CREATE TABLE PPTBA001
      PPA001_GROUP             NUMBER(3)            NOT NULL,
      PPA001_PEOPLECODE        VARCHAR2(20 BYTE)    NOT NULL,
      PPA001_NAME              VARCHAR2(60 BYTE)    NOT NULL,
      PPA001_DATEOFBIRTHDAY    DATE                 NOT NULL);
    CREATE TABLE CLTBA001
      CLA001_GROUP            NUMBER(3)             NOT NULL,
      CLA001_CLIENTCODE       VARCHAR2(20 BYTE)     NOT NULL,
      CLA001_SITUATION        NUMBER(1)             DEFAULT 1);
    SELECT * FROM PPTBA001 NATURAL JOIN CLTBA001;
    ALTER TABLE CLTBA001 ADD (
      CONSTRAINT CLA001_PPAA001_FK1 FOREIGN KEY (CLA001_GROUP, CLA001_CLIENTCODE)
        REFERENCES PPTBA001 (OFA001_GROUP,OFA001_PEOPLECODE));
          the select returns without results. 'cose does not have columns like same name.
    Natural join use a columns with same name. I need something use an foreign key.
    Why?? Now i have a problem .. i need aggregate one more column in primary key
    and i need change all selects that have join with PPTBA001 and put manualy a new column.. if have a other possibility like natural join to using a foreign key to join the selects problems is so more easy to resolve.
    Message was edited by:
    jonas.lima

  • Problems with natural join

    Hi!
    I'm learning SQL and I have lot of doubts but I think with this example I can generalize them.
    I have the tables:
    book {idbook (PK), namebook}
    auhor {idauthor (PK), nameauthor, idcountry (FK)}
    authorship {idauthor (FK), idbook (FK)} (both the same constraint PK)
    country {idcountry (PK), namecountry}
    I want the name of the books that have authors from Canada.
    I assumed that a correct query would be:
    SELECT namebook FROM book NATURAL JOIN (authorship NATURAL JOIN (author NATURAL JOIN country)) WHERE country.namecountry = 'Canada';
    The result that I expected was:
    Book3
    Book5
    but this query returns me all books that have relations in authorship (with authors from any country), 2 times!! like:
    book2
    book3
    book4
    book5
    book2
    book3
    book4
    book5
    the best I can do to get my correct result is:
    SELECT namebook FROM book NATURAL JOIN (authorship NATURAL JOIN author) WHERE author.idcountry = 2;
    But of course I can't use this one...
    Does anyone can explain me what is happening?
    Thanks a lot!
    Edited by: user12040235 on 15/10/2009 09:37
    Edited by: user12040235 on 15/10/2009 09:51

    Hi,
    That may be a bug.
    I get the correct results (2 rows) in Oracle 10.1, but I get the same bad results you do (12 rows) in Oracle 11.1.
    In Oracle 11, I get the expected results if say "SELECT *" instead of "SELECT book.namebook".
    I also get the correct results if I add any of the join columns to the SELECT clause. Adding a non-join column, e.g.
    SELECT  BOOK.namebook, author.nameauthor
    FROM            book
    ...gets the wrong results.
    For the benefit of anyone who wants to try this:
    DROP TABLE     author;
    create table     author     AS
    SELECT  1 AS idauthor, 'Jose Luiz do Rego' AS nameauthor, 1 AS idcountry     FROM dual     UNION ALL
    SELECT         2, 'Barbara Bela',                                      2          FROM dual     UNION ALL
    SELECT         3, 'Juan Domingues',                                    5          FROM dual     UNION ALL
    SELECT         4, 'José Mauro de Vasconcelos',                         1          FROM dual     UNION ALL
    SELECT         5, 'Vader',                                             2          FROM dual     UNION ALL
    SELECT         6, 'navathe',                                           4          FROM dual     UNION ALL
    SELECT         7, 'Machado de Assis',                                  1          FROM dual
    drop table     AUTHORSHIP;
    CREATE TABLE     authorship     AS
    SELECT         2 AS idauthor,          5 AS idbook     FROM dual     UNION ALL
    SELECT         1 AS idauthor,          1 AS idbook     FROM dual     UNION ALL
    SELECT         5 AS idauthor,          3 AS idbook     FROM dual     UNION ALL
    SELECT         6 AS idauthor,          2 AS idbook     FROM dual     UNION ALL
    SELECT         7 AS idauthor,          4 AS idbook     FROM dual     UNION ALL
    SELECT         7 AS idauthor,          6 AS idbook     FROM dual;
    drop table     book;
    CREATE TABLE   book     AS
    SELECT         1 AS idbook, 'book1' AS namebook     FROM dual     UNION ALL
    SELECT         2 AS idbook, 'book2' AS namebook     FROM dual     UNION ALL
    SELECT         3 AS idbook, 'book3' AS namebook     FROM dual     UNION ALL
    SELECT         4 AS idbook, 'book4' AS namebook     FROM dual     UNION ALL
    SELECT         5 AS idbook, 'book5' AS namebook     FROM dual     UNION ALL
    SELECT         6 AS idbook, 'book6' AS namebook     FROM dual     UNION ALL
    SELECT         7 AS idbook, 'book7' AS namebook     FROM dual;
    DROP TABLE     country;
    CREATE TABLE     country     AS
    SELECT         1 AS idcountry, 'Brazil' as namecountry     FROM dual     UNION ALL
    SELECT         2 AS idcountry, 'Canada' as namecountry     FROM dual     UNION ALL
    SELECT         3 AS idcountry, 'Chile' as namecountry     FROM dual     UNION ALL
    SELECT         4 AS idcountry, 'Venezuela' as namecountry    FROM dual     UNION ALL
    SELECT         5 AS idcountry, 'USA' as namecountry          FROM dual     UNION ALL
    SELECT         6 AS idcountry, 'Argentina' as namecountry    FROM dual     ;

  • Natural join , join on & join using

    Hi
    I am preparing for the IZO-051 exams .I am totally confused with the concept of joins when answering questions .
    In the Oracle certification book ..HR schema example of employees and departments is given
    While answering the multiple choice questions it is difficult to to choose answer !!
    I wanted to know if *Join using & join on conditions yield the same result in some cases or
    where there are only 1 common column between two tables * ??
    for eg if the same HR schema is to be taken
    QUES: Which sql statement produce the name ,department name & city of all the employees who earn more than 10,000.
    The correct answer given is the query below ..
    I understand the query delivers the needed result ..
    select first_name ,department_name,city
    from employees e
    join departments d
    using(department_id)
    join locations l
    using(location_id)
    where salary > 10000;
    Also the query below gives the same results but this is not the answer???
    select first_name, department_name,city
    from employees e join departments d on (e.department_id= d.department_id)
    join locations l on (d.location_id=l.location_id)
    where salary>10000;
    ALSO is there any efficiency issues related to the queries??

    Hi,
    VANPERSIE wrote:
    Frank Kulash wrote:
    The only thing you really have to know about them is "Don't use them." >Nobody in the real world does.Dear Frank
    You confuse me
    why you said noboby in the real world use them?Obviously, that was hyperbolic. I haven't asked everyone in the world if they use USING or EXISTS.
    I have seen a lot of code, on this forum and elsewhere, written by a large number of people I honestly think that fewer than 1 in 1000 uses either USING or NATURAL JOIN, and it is always in the context of studying for an exam, like you, or trying something the user saw in a book. I have absolutely never seen any production code that used either.
    please I just want to know whyWhy are they not used? They make assumptions about the relationships between tables based entirely on column names. Those assumptions do often not reflect reality. People are liable to name their columns anything, sometimes with very good reasons, that don't match the assumptions made by USING and NATRUAL JOIN.
    NATURAL JOIN is more obviious. It's common to have auditing columns such as created_date or last_modify_user in several tables. No human being would assume that these columns were designed for joining, but that's exactly what NATURAL JOIN assumes.
    USING has the same problem, to a much lesser degree. If you're using 3 tables, and they all have a column named order_id, you can't use order_id to join only 2 of the tables with USING. Also, it reverses the convention of qualifying columns that are used in multiple tables. Many people regulary qualify columns (e.g. <b>d.</b>deptno); personally, I think it's a great programming practice. When you use ON, then you must qualify column names that occur in multiple tables, but when you use USING then you must not qualify the columns that occur in join conditions, but you must qualify other ambiguous columns. Most people find that very conf<b>using</b>.

  • IN A NATURAL JOIN THE ANSWER QUERY DEPENDS OF PROJECTION ??!!

    Hi,
    Related to this question
    Link: problems with natural join
    Does the answer query depend of projection in a complex NATURAL JOIN query?
    Thanks,
    Ion

    You are most likely encountering this bug:
    Bug 5031632 - Wrong results from NATURAL JOIN, Metalink Note: 5031632.8
    It currently affects all versions of Oracle.
    You can tell something weird is going on by the EXPLAIN PLAN results:
    Query:
    SELECT     *
    FROM     BOOK
    NATURAL JOIN
         AUTHORSHIP
         NATURAL JOIN
              AUTHOR
              NATURAL JOIN
              COUNTRY
    WHERE     COUNTRY.NAMECOUNTRY = 'Canada'
    Explain Plan:
    SQL> /
    PLAN_TABLE_OUTPUT
    Plan hash value: 3878360587
    | Id  | Operation        | Name | Rows  | Bytes | Cost (%CPU)| Time     |
    |   0 | SELECT STATEMENT |      |     1 |    39 |    28   (8)| 00:00:01 |
    |*  1 |  HASH JOIN       |      |     1 |    39 |    28   (8)| 00:00:01 |
    |*  2 |   HASH JOIN      |      |     1 |    29 |    17   (6)| 00:00:01 |
    |*  3 |    HASH JOIN     |      |     1 |    23 |     9  (12)| 00:00:01 |
    |   4 |     VIEW         |      |     2 |    16 |     2   (0)| 00:00:01 |
    |   5 |      UNION-ALL   |      |       |       |            |          |
    |   6 |       FAST DUAL  |      |     1 |       |     2   (0)| 00:00:01 |
    |*  7 |       FILTER     |      |       |       |            |          |
    |   8 |        FAST DUAL |      |     1 |       |     2   (0)| 00:00:01 |
    |   9 |     VIEW         |      |     3 |    45 |     6   (0)| 00:00:01 |
    |  10 |      UNION-ALL   |      |       |       |            |          |
    |  11 |       FAST DUAL  |      |     1 |       |     2   (0)| 00:00:01 |
    |  12 |       FAST DUAL  |      |     1 |       |     2   (0)| 00:00:01 |
    |  13 |       FAST DUAL  |      |     1 |       |     2   (0)| 00:00:01 |
    |  14 |    VIEW          |      |     4 |    24 |     8   (0)| 00:00:01 |
    |  15 |     UNION-ALL    |      |       |       |            |          |
    |  16 |      FAST DUAL   |      |     1 |       |     2   (0)| 00:00:01 |
    |  17 |      FAST DUAL   |      |     1 |       |     2   (0)| 00:00:01 |
    |  18 |      FAST DUAL   |      |     1 |       |     2   (0)| 00:00:01 |
    |  19 |      FAST DUAL   |      |     1 |       |     2   (0)| 00:00:01 |
    |  20 |   VIEW           |      |     5 |    50 |    10   (0)| 00:00:01 |
    |  21 |    UNION-ALL     |      |       |       |            |          |
    |  22 |     FAST DUAL    |      |     1 |       |     2   (0)| 00:00:01 |
    |  23 |     FAST DUAL    |      |     1 |       |     2   (0)| 00:00:01 |
    |  24 |     FAST DUAL    |      |     1 |       |     2   (0)| 00:00:01 |
    |  25 |     FAST DUAL    |      |     1 |       |     2   (0)| 00:00:01 |
    |  26 |     FAST DUAL    |      |     1 |       |     2   (0)| 00:00:01 |
    Predicate Information (identified by operation id):
       1 - access("BOOK"."IDBOOK"="AUTHORSHIP"."IDBOOK")
       2 - access("AUTHORSHIP"."IDAUTHOR"="AUTHOR"."IDAUTHOR")
       3 - access("AUTHOR"."IDCOUNTRY"="COUNTRY"."IDCOUNTRY")
       7 - filter(NULL IS NOT NULL)
    Query:
    SELECT     NAMEBOOK
    FROM     BOOK
    NATURAL JOIN
         AUTHORSHIP
         NATURAL JOIN
              AUTHOR
              NATURAL JOIN
              COUNTRY
    WHERE     COUNTRY.NAMECOUNTRY = 'Canada'
    Explain Plan:
    SQL> /
    PLAN_TABLE_OUTPUT
    Plan hash value: 3246924444
    | Id  | Operation             | Name | Rows  | Bytes | Cost (%CPU)| Time     |
    |   0 | SELECT STATEMENT      |      |     1 |    24 |    27   (4)| 00:00:01 |
    |*  1 |  HASH JOIN            |      |     1 |    24 |    27   (4)| 00:00:01 |
    |   2 |   MERGE JOIN CARTESIAN|      |     1 |    21 |    19   (6)| 00:00:01 |
    |*  3 |    HASH JOIN          |      |     1 |    11 |     9  (12)| 00:00:01 |
    |   4 |     VIEW              |      |     2 |    16 |     2   (0)| 00:00:01 |
    |   5 |      UNION-ALL        |      |       |       |            |          |
    |   6 |       FAST DUAL       |      |     1 |       |     2   (0)| 00:00:01 |
    |*  7 |       FILTER          |      |       |       |            |          |
    |   8 |        FAST DUAL      |      |     1 |       |     2   (0)| 00:00:01 |
    |   9 |     VIEW              |      |     3 |     9 |     6   (0)| 00:00:01 |
    |  10 |      UNION-ALL        |      |       |       |            |          |
    |  11 |       FAST DUAL       |      |     1 |       |     2   (0)| 00:00:01 |
    |  12 |       FAST DUAL       |      |     1 |       |     2   (0)| 00:00:01 |
    |  13 |       FAST DUAL       |      |     1 |       |     2   (0)| 00:00:01 |
    |  14 |    BUFFER SORT        |      |     5 |    50 |    19   (6)| 00:00:01 |
    |  15 |     VIEW              |      |     5 |    50 |    10   (0)| 00:00:01 |
    |  16 |      UNION-ALL        |      |       |       |            |          |
    |  17 |       FAST DUAL       |      |     1 |       |     2   (0)| 00:00:01 |
    |  18 |       FAST DUAL       |      |     1 |       |     2   (0)| 00:00:01 |
    |  19 |       FAST DUAL       |      |     1 |       |     2   (0)| 00:00:01 |
    |  20 |       FAST DUAL       |      |     1 |       |     2   (0)| 00:00:01 |
    |  21 |       FAST DUAL       |      |     1 |       |     2   (0)| 00:00:01 |
    |  22 |   VIEW                |      |     4 |    12 |     8   (0)| 00:00:01 |
    |  23 |    UNION-ALL          |      |       |       |            |          |
    |  24 |     FAST DUAL         |      |     1 |       |     2   (0)| 00:00:01 |
    |  25 |     FAST DUAL         |      |     1 |       |     2   (0)| 00:00:01 |
    |  26 |     FAST DUAL         |      |     1 |       |     2   (0)| 00:00:01 |
    |  27 |     FAST DUAL         |      |     1 |       |     2   (0)| 00:00:01 |
    Predicate Information (identified by operation id):
       1 - access("BOOK"."IDBOOK"="AUTHORSHIP"."IDBOOK")
       3 - access("AUTHOR"."IDCOUNTRY"="COUNTRY"."IDCOUNTRY")
       7 - filter(NULL IS NOT NULL)
    41 rows selected.There are two major differences in these plans.
    1. The correct result has HASH JOINS. However the incorrect result has a MERGE JOIN CARTESIAN. A cartesian join should not be here as there is no need for one per the table structure and NATURAL JOIN syntax.
    2. There is a filter condition missing in the predicate information session.
    Both #1 and #2 above point to the bug I identified. The current work around us to use the JOIN ... ON syntax.
    HTH!

  • Query based on "NATURAL JOIN" statement of Oracle9i

    I have created following 4 tables
    create table CUST_MASTER
    (CUST_NO NUMBER(3),CUST_NAME VARCHAR2(20),CUST_CITY VARCHAR2(20));
    create table ITEM_MASTER
    (ITEM_NO NUMBER(2),ITEM_NAME VARCHAR2(20),
    PRICE NUMBER(4));
    create table ORDER_HEADER
    ( ORDER_NO NUMBER(4), CUST_NO NUMBER(3));
    create table ORDER_ITEMS
    ( ORDER_NO NUMBER(4), ITEM_NO NUMBER(2), QTY NUMBER(3));
    Based on the above 4 table I have executed the following query.
    select c.cust_no, c.cust_name, c.cust_city, oh.order_no, i.item_no, i.item_name, i.price, oi.qty
    from cust_master c, item_master i, order_header oh, order_items oi
    where c.cust_no = oh.cust_no and oh.order_no = oi.order_no and oi.item_no = i.item_no;
    How should I build similar query in Oracle9i making use of "NATURAL JOIN" statement?

    Hallo,
    yes you are correct.
    From SQL Reference
    NATURAL JOIN The NATURAL keyword indicates that a natural join is being performed. A natural join is based on all columns in the two tables that have the same name. It selects rows from the two tables that have equal values in the relevant columns
    Nothing about foreign keys.
    Test:
    select * from scott.emp natural join scott.dept
        DEPTNO      EMPNO ENAME      JOB               MGR HIREDATE                  SAL       COMM DNAME          LOC         
            20           7369     SMITH          CLERK                7902     17.12.1980            800                    RESEARCH           DALLAS
            30           7499     ALLEN          SALESMAN             7698     20.02.1981           1600            300     SALES              CHICAGO
            30           7521     WARD           SALESMAN             7698     22.02.1981           1250            500     SALES              CHICAGO
            20           7566     JONES          MANAGER              7839     02.04.1981           2975                    RESEARCH           DALLAS
            30           7654     MARTIN         SALESMAN             7698     28.09.1981           1250           1400     SALES              CHICAGO
            30           7698     BLAKE          MANAGER              7839     01.05.1981           2850                    SALES              CHICAGO
            10           7782     CLARK          MANAGER              7839     09.06.1981           2450                    ACCOUNTING         NEW YORK
            20           7788     SCOTT          ANALYST              7566     19.04.1987           3000                    RESEARCH           DALLAS
            10           7839     KING           PRESIDENT                     17.11.1981           5000                    ACCOUNTING         NEW YORK
            30           7844     TURNER         SALESMAN             7698     08.09.1981           1500              0     SALES              CHICAGO
            20           7876     ADAMS          CLERK                7788     23.05.1987           1100                    RESEARCH           DALLAS
            30           7900     JAMES          CLERK                7698     03.12.1981            950                    SALES              CHICAGO
            20           7902     FORD           ANALYST              7566     03.12.1981           3000                    RESEARCH           DALLAS
            10           7934     MILLER         CLERK                7782     23.01.1982           1300                    ACCOUNTING         NEW YORK
    alter table scott.emp drop constraint fk_deptno
    select * from scott.emp natural join scott.dept
        DEPTNO      EMPNO ENAME      JOB               MGR HIREDATE                  SAL       COMM DNAME          LOC         
            20           7369     SMITH          CLERK                7902     17.12.1980            800                    RESEARCH           DALLAS
            30           7499     ALLEN          SALESMAN             7698     20.02.1981           1600            300     SALES              CHICAGO
            30           7521     WARD           SALESMAN             7698     22.02.1981           1250            500     SALES              CHICAGO
            20           7566     JONES          MANAGER              7839     02.04.1981           2975                    RESEARCH           DALLAS
            30           7654     MARTIN         SALESMAN             7698     28.09.1981           1250           1400     SALES              CHICAGO
            30           7698     BLAKE          MANAGER              7839     01.05.1981           2850                    SALES              CHICAGO
            10           7782     CLARK          MANAGER              7839     09.06.1981           2450                    ACCOUNTING         NEW YORK
            20           7788     SCOTT          ANALYST              7566     19.04.1987           3000                    RESEARCH           DALLAS
            10           7839     KING           PRESIDENT                     17.11.1981           5000                    ACCOUNTING         NEW YORK
            30           7844     TURNER         SALESMAN             7698     08.09.1981           1500              0     SALES              CHICAGO
            20           7876     ADAMS          CLERK                7788     23.05.1987           1100                    RESEARCH           DALLAS
            30           7900     JAMES          CLERK                7698     03.12.1981            950                    SALES              CHICAGO
            20           7902     FORD           ANALYST              7566     03.12.1981           3000                    RESEARCH           DALLAS
            10           7934     MILLER         CLERK                7782     23.01.1982           1300                    ACCOUNTING         NEW YORK
    ALTER TABLE scott.emp
    ADD CONSTRAINT fk_deptno FOREIGN KEY (deptno)
    REFERENCES SCOTT.dept (deptno)
    ENABLE NOVALIDATE
    /Regards
    Dmytro Dekhtyaryuk

  • How to specify more than Two Tables in NATURAL JOIN

    Hi,
    I am using Oracle9i R-2. I want help in writing a Query using Two Tables in SQL*PLUS. I am using ANSI/ISO Standrard for table-joins:
    select col1, col2, descr
    from tab1 natural join tab2
    There are two columns col1 & col2 is common between thse two tables. So, it will join them and query execute well.
    How can i use 3rd table tab3 in the same way in Natural Join...? If column col1 & col2 is available in tab3 also.
    I tried this way, but it gives me error:
    select col1, col2
    from tab1 natural join tab2 natural join tab3
    Is it possible to specify more than two tables in Natural Join Clause.
    Please check that out & help please. Thanks.
    Regards,
    Kamesh Rastogi

    I do not get an error when I try the same thing on the same version, as demonstrated below. Can you post your table structure and a copy and paste of a run of your actual query with the error that you are receiving?
    scott@ORA92> select banner from v$version
      2  /
    BANNER
    Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
    PL/SQL Release 9.2.0.1.0 - Production
    CORE     9.2.0.1.0     Production
    TNS for 32-bit Windows: Version 9.2.0.1.0 - Production
    NLSRTL Version 9.2.0.1.0 - Production
    scott@ORA92> select * from tab1
      2  /
          COL1       COL2 COL3
             1          1 A
            10         10 B
    scott@ORA92> select * from tab2
      2  /
          COL1       COL2 COL4
             1          1 C
            20         20 D
    scott@ORA92> select * from tab3
      2  /
          COL1       COL2 COL5
             1          1 E
            30         30 F
    scott@ORA92> select col1, col2, col3, col4, col5
      2  from tab1 natural join tab2 natural join tab3
      3  /
          COL1       COL2 COL3 COL4 COL5
             1          1 A    C    E
    scott@ORA92>

  • Natural Join multiple tables bug!! SQLPLus 10.1.0.4.2

    SQLPLus 10.1.0.4.2 bug detected!! Who knows how to fix it? Many thanks
    I'm experimenting with natural join and found some really strange behaviour when I tried to combine multiple natural joins.
    I have the following schema:
    Model (ModelID PK, brand, type, year), 49 records
    Car (CarID PK, ModelID FK, OwnerID FK, price) 60 records
    Owner (OwnerID PK, name, adres) 48 records
    The database system is Oracle 10g 64bit on Windows 2003 64bit
    The following query gives me the result I expect (29 records):
    SELECT * FROM Owner NATURAL JOIN Car NATURAL JOIN Model
    WHERE brand='Volkswagen'
    However when I start specifying columns in the select clause the number of records in the result differs depending on the columns I select:
    SELECT OwnerID FROM Owner NATURAL JOIN Car NATURAL JOIN Model
    WHERE brand='Volkswagen'
    --> 1260 records
    SELECT OwnerID, CarID FROM Owner NATURAL JOIN Car NATURAL JOIN Model WHERE brand='Volkswagen'
    --> 1260 records
    SELECT ModelID FROM Owner NATURAL JOIN Car NATURAL JOIN Model
    WHERE brand='Volkswagen'
    --> 29 records (as expected).
    Would this be caused by a bug in Oracle or is there a logical explanation?
    TIA,
    Axel Hallez

    Duplicate thread:
    Natural Join bug!! Is this a sqlplus bug, how to fix it?

  • IN in NATURAL JOIN help

    SELECT name,telephone
    FROM Customer where cid IN
    (SELECT cid
    FROM Order where oid IN
    (SELECT oid
    FROM OrderDetal where icode IN
    (SELECT icode
    FROM item where itemName=’Dry Fish 200g’)));
    How can I convert this query to Natural join?
    Thanks in Advance

    Hi,
    You can't do that with NATURAL JOIN.
    Forget about NATURAL JOIN.  I've never seen it used outside of a texbook (or on a forum like this) for good reasons.  If you add a column to any table, that may change the results of any NATURAL JOIN involving that table.  You don't want to look at all those queries whenever you condiser adding a new column to a table; you don't even want to keep track of which queries you'd have to look at.
    Upon sober reflection, I think it might be possible to do this with NATURAL JOIN, depending on how your tables are designed. I can't tell if it's possible or not without seeing the CREATE TABLE statements for all the tables involved, including unique constraints. If it is possible, it would look like this:
    SELECT        c.name, c.telephone
    FROM          Customer   c
    NATURAL JOIN  Orders     o -- ORDER is not a good table name
    NATURAL JOIN  OrderDetal od
    NATURAL JOIN  Item  i
    WHERE         i.ItemName = 'Dry Fish 200g'
    Depending on your data, you may need SELECT DISTINCT.
    Message was edited by: FrankKulash
    NATURAL JOIN is still a bad idea.

  • Join PRoblems in Oracle  BI

    Experts,
    Do we have any automated tool that will detect joins in the layers ???
    secondly in case we start with manually joining the tables will there be any join problems like we have in BO?
    Third In case of manual joins in physical layer can have to make joins that suit our requirement or we have to follow the database structure. and join all columns that could be joined in the structure
    thanks in advance
    Edited by: ZSAMEE on May 2, 2011 11:55 AM
    Edited by: ZSAMEE on May 2, 2011 12:11 PM

    As far as I know there are no tools out there that would automatically join the tables in BMM layer. You have to join the fact and dimensions to design star/snow flake schema's manually.
    Thanks,
    -Amith.

  • HT6114 Joined problem labels Labels to color everyone in the line archives mp3 and selection in dots as it exists now can be anyone who wants to do what HELPS of how thoroughly enjoyable.

    Joined problem labels Labels to color everyone in the line archives mp3 and selection in dots as it exists now can be anyone who wants to do what HELPS of how thoroughly enjoyable.

    Sp188585 wrote:
    Joined problem labels Labels to color everyone in the line archives mp3 and selection in dots as it exists now can be anyone who wants to do what HELPS of how thoroughly enjoyable.
    Sorry, you will have to outline your issues more clearly.
    Thanks
    Pete

  • Join Using vs. Natural Join

    Hi I'm preparing for "Oracle9i: DBA Fundamentals I" exam as well.
    I just don't understand why I get different results with these two queries
    Here I 'm using join
    1 select last_name, department_name
    2 from employees
    3 join departments using (department_id)
    4* where last_name like'H%'
    SQL> /
    LAST_NAME DEPARTMENT_NAME
    Hunold IT
    Himuro Purchasing
    Hall Sales
    Hutton Sales
    Hartstein Marketing
    Higgins Accounting
    but when I use a natural join I get fewer rows:
    SQL> select last_name, department_name
    2 from employees
    3 natural join departments
    4 where last_name like'H%'
    5 /
    LAST_NAME DEPARTMENT_NAME
    Himuro Purchasing
    Hall Sales
    what's the difference between join and natural join?

    A NATURAL JOIN joins the two tables based on columns with the same name. So, in your case, the natural join is equivalent to:
    SQL> SELECT last_name, department_name
      2  from employees JOIN departments using (department_id, manager_id)
      3  WHERE last_name like 'H%'
      4  /
    LAST_NAME                 DEPARTMENT_NAME
    Hall                      Sales
    Himuro                    PurchasingNatural joins are a Bad Thing (tm).
    HTH
    John

  • Natural Join/ Join.....Using

    Hi All,
    Is it possible to use table name or alias to qualify column name when using Natural Join / Join.....Using
    As far as I know we cannot do it. So is the following statement syntatically correct:
    SELECT e.last_name, l.location_id
    FROM employees e JOIN location l
    USING (employee_id);
    Thanks.

    First there is no relation between employees and location ;-)
    Second (as you presumed) you cannot use a qualifier for join columns:
    michaels>  SELECT e.last_name, d.department_id
      FROM employees e JOIN departments d USING (department_id)
    Error at line 1
    ORA-25154: column part of USING clause cannot have qualifierbut with other columns it is ok:
    michaels>  SELECT e.last_name, d.department_name
      FROM employees e JOIN departments d USING (department_id)
    LAST_NAME                 DEPARTMENT_NAME              
    Whalen                    Administration               
    Hartstein                 Marketing                    
    Fay                       Marketing                    
    Raphaely                  Purchasing                   
    106 rows selected.

  • Natural join versus using

    Hi all,
    Could anybody clear my doubt regarding NATURAL and USING join. Can we join two columns in NATURAL join if there data types are different. And in USING also should we have same data type or they can be of different type also. In my case it is according to what we have in the books and in other case it is not.
    Regards
    Harpreet Singh
    Coredatabase Systems

    Hi,
    There are some differences ...
    select a.last_name,b.name,dep_id  -- cannot user qualifier
    from emp a
    inner join dep b using (dep_id);
    that is equal to
         select a.last_name,b.name,a.dep_id -- can use qualifier
         from emp a
         inner join dep b on (a.dep_id = b.dep_id)
         that is equal to
              select a.last_name,b.name,dep_id -- cannot user qualifier
              from emp a
              natural join dep bCheers

  • Natural join--not supported in this technology

    Technology on which natural join is executed doesnt support natural joins.
    the odi version i am usind is 11.1.1.
    Look Up also doesnt seem to work in odi 11.1.1.
    How to use look up in odi 11.1.1.

    HI,
    For lookup you can use Outer join.
    For insert you can use Suppose s1 is source and T1 is Target then you can do S1 left outer join with T1.
    Thanks,
    Lony

Maybe you are looking for

  • I downloaded tv show but they do not show up on my ipod

    I downloaded a tv show but they do not show up on my ipod

  • PL/SQL log messages are not printing from Java concurrent program

    Hi, I have a strange issue while submitting the Java concurrent program through PL/SQL. I have a PL/SQL concurrent program which will invoke the Java concurrent program inside the package by use of "FND_GLOBAL.SUBMIT_REQUEST". It worked and submitted

  • Sound distortion in Zen Visio

    Hi. I have a Zen Micro 5g and a Zen Vision M(both at latest firmware), which both i set the equaliser to 2-2-3-2-2. When i listened to the same song, there seems to be some hissing sounds in the Zen Vision but crystal clear in the Zen Micro at some p

  • Filestream Partitioning across multiple drives

    I have a SQL 2008 R2 ENT database with the single [PRIMARY] filegroup, and a single FilestreamGroup.  The filestream has millions of records, cannot be restored, and is about to exceed the drive space limit. The table with the single filestream colum

  • AIA 11g ABCS compilation error

    We are having issues with our ABCS compilations (trying this on Jdev 11.1.1.2).. The error message is .. Error(17,60): Failed to compile bpel generated classes. failure to compile the generated BPEL classes for BPEL process "SyncCustomerPartyListEbiz