0

次の SQL クエリの目的は、サン フランまたは LA に住む各女性マネージャーの名前と給与を返すことです。なぜこのクエリが女性のマネージャーだけでなく男性のマネージャーを返すのか、私は混乱しています...私は当初、制約「gender = 'F'」を自然な結合とともに定義すると、すべての男性のマネージャーが取り除かれると思っていたでしょう。すぐにリスト。

select Lastname, FirstName, MidInitial, salary, gender
  from Employee natural join Works natural join Manages
where Lastname = ManagerLastname and
FirstName = MFirstName and
MidInitial = MMidInitial and
gender = 'F' and
city = 'San Fran' or city = 'LA';

--RESULT:
LASTNAME    FIRSTNAME   MIDINITIAL  SALARY  GENDER
Brandy      Dan         L           42000   M
Clemson     Ann         M           39000   F
Gill        Mary        L           48700   F
Simon       Eric        K           45000   M

上記のクエリに本質的に問題があると思う人はいますか? 参考: このデータベースのテーブルのスキーマは次のとおりです。

create table Employee(
    Lastname    varchar(10),
    FirstName   varchar(10),
    MidInitial  char(1),
    gender      char(1),
    street      varchar(10),
    city        varchar(10),
    primary key(Lastname, FirstName, MidInitial));

create table company(
    company_name    varchar(20),
    city    varchar(10),
    primary key(company_name));

create table Works(
    Lastname    varchar(10),
    FirstName   varchar(10),
    MidInitial  char(1),
    company_name    varchar(20),
    salary      numeric(8,2),
    primary key(Lastname, FirstName, MidInitial, company_name),
    foreign key(Lastname, FirstName, MidInitial) references Employee,
    foreign key(company_name) references company);

create table Manages(
    Lastname    varchar(10),
    FirstName   varchar(10),
    MidInitial  char(1),
    ManagerLastname varchar(10),
    MFirstName  varchar(10),
    MMidInitial char(1),
    start_date  date,
    primary key(Lastname, FirstName, MidInitial, ManagerLastname, MFirstName, MMidInitial),
    foreign key(Lastname, FirstName, MidInitial) references Employee);

また、SQL for Oracle 11g R2 を使用しています。

これを見てくれてありがとう!

4

1 に答える 1

2

問題はAND、 よりも優先順位が高いことですOR

したがって、クエリは、実際には次のようになります。

Lastname = ManagerLastnameFirstName = MFirstNameMidInitial = MMidInitialgender = 'F'city = 'San Fran' のすべてのレコードを表示

- また -

都市 = 'LA'

あなたが望むものは:

where Lastname = ManagerLastname and
FirstName = MFirstName and
MidInitial = MMidInitial and
gender = 'F' and
( city = 'San Fran' or city = 'LA' )
于 2013-09-22T20:47:52.183 に答える