我正在编写查询以选择具有他们的计划、国家和教师的学生。到目前为止,我有以下查询:
SELECT H.STUDENT_CODE,
H.FIRSTNAME,
H.LASTNAME,
H.PROGRAM,
H.TEACHER_CODE,
H.COUNTRY_CODE,
AC.COUNTRY_NAME,
P.PROGRAM_NAME,
T.TEACHER_NAME
FROM HTUD H,
PROGRAM P,
TEACHER T,
AP_COUNTRY AC
WHERE H.FIRSTNAME LIKE '%ark%'
AND H.PROGRAM = P.PROGRAM
AND H.TEACHER_CODE = T.TEACHER_CODE
AND H.COUNTRY_CODE = AC.COUNTRY_CODE
ORDER BY H.STUDENT_CODE ASC
Run Code Online (Sandbox Code Playgroud)
这两列 H.TEACHER_CODE 和 H.COUNTRY_CODE 有一些空值。如果我运行上面的查询,它只会返回在 H.TEACHER_CODE 和 H.COUNTRY_CODE 这两列中有数据的学生。
但是,我想选择所有学生,无论他们是否在这两列中有数据。如果他们在 H.TEACHER_CODE 和 H.COUNTRY_CODE 列中有数据,那么也返回教师和国家,如果他们没有,只返回没有教师或国家的学生。
那么,我如何选择有或没有老师或国家的所有学生?
您想进行外连接。在Oracle 8i中,必须使用(+)
符号。
SELECT H.STUDENT_CODE,
H.FIRSTNAME,
H.LASTNAME,
H.PROGRAM,
H.TEACHER_CODE,
H.COUNTRY_CODE,
AC.COUNTRY_NAME,
P.PROGRAM_NAME,
T.TEACHER_NAME
FROM HTUD H,
PROGRAM P,
TEACHER T,
AP_COUNTRY AC
WHERE H.FIRSTNAME LIKE '%ark%'
AND H.PROGRAM = P.PROGRAM
AND H.TEACHER_CODE = T.TEACHER_CODE(+)
AND H.COUNTRY_CODE = AC.COUNTRY_CODE(+)
ORDER BY H.STUDENT_CODE ASC
Run Code Online (Sandbox Code Playgroud)
从Oracle 10g开始xou 也可以使用 ANSI 连接语法
SELECT H.STUDENT_CODE,
H.FIRSTNAME,
H.LASTNAME,
H.PROGRAM,
H.TEACHER_CODE,
H.COUNTRY_CODE,
AC.COUNTRY_NAME,
P.PROGRAM_NAME,
T.TEACHER_NAME
FROM HTUD H JOIN PROGRAM P ON (H.PROGRAM = P.PROGRAM)
LEFT OUTER JOIN TEACHER T ON (H.TEACHER_CODE = T.TEACHER_CODE)
LEFT OUTER JOIN AP_COUNTRY AC ON (H.COUNTRY_CODE = AC.COUNTRY_CODE)
WHERE H.FIRSTNAME LIKE '%ark%'
ORDER BY H.STUDENT_CODE ASC
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
101 次 |
最近记录: |