조인(join)
SELECT 테이블.컬럼, ……
FROM 테이블, 테이블, ......
WHERE 조인_조건
AND 일반_조건
ORDER BY 컬럼 ......;
- 조인 조건: 테이블 간의 관계
- 동일한 이름의 컬럼이 존재할 경우 테이블명을 컬럼 앞에 붙여 사용.
- 테이블 개수가 n개일 때 조인 조건은 항상 (n-1)개 이상 존재.
등가 조인
- 조인 조건이 등호로 표시됨.
- 조인 조건으로 사용할 두 테이블의 컬럼명이 일치함.(대부분)
- '테이블1.컬럼명 = 테이블2.컬럼명' 으로 조인 조건을 준다.
비등가 조인
- 조인 조건이 부등호로 표시됨.
- 컬럼 BETWEEN ... AND 를 주로 사용.
조인문 쉽게 작성하는 방법
1. 테이블 구조와 관계를 숙지해야 된다.
- RDB의 모든 테이블은 관계를 가진다.
2. 조인문 작성 과정을 순차대로 작성해야 된다.
- 조인문 작성과정
- select, where, order by절을 구성한다.
- select절과 where절에서 검색할 테이블을 추출한다.
- 테이블 간의 관계를 확인한다.
- 조인 조건을 where절에 작성한다.
- select 절을 마무리한다.
조인문 작성 실습
지문 - 송강 교수가 강의하는 과목을 검색한다.
1. select, where, order by절을 구성한다.
검색 대상: 과목(cname)
조건: 송강 교수: pname = '송강'
SELECT cname
FROM
WHERE pname = '송강';
2. select절과 where절에서 검색할 테이블을 추출한다.
cname: course
pname: professor
SELECT cname
FROM professor, course
WHERE pname = '송강';
3. 테이블 간의 관계를 확인한다.
professor - pno - course
4. 조인 조건을 where절에 작성한다.
SELECT cname
FROM professor p, course c
WHERE p.pno = c.pno AND pname = '송강';
5. select 절을 마무리한다.
SELECT pname 교수이름, cname 과목명
FROM professor p, course c
WHERE p.pno = c.pno AND pname = '송강';
실습
1. 송강 교수가 강의하는 과목을 검색한다.
SELECT pname 교수이름, cname 과목명
FROM professor p, course c
WHERE p.pno = c.pno AND pname = '송강';
2. 과목명에 화학이 포함된 과목을 강의하는 교수의 명단을 검색한다.
SELECT c.cname 과목명, p.pno 교수번호, p.pname 교수이름
FROM professor p, course c
WHERE p.pno = c.pno AND c.cname LIKE '%화학%';
3. 학점이 2학점인 과목과 이를 강의하는 교수를 검색한다.
SELECT p.pname 교수이름, c.cname 과목명, c.st_num 학점수
FROM professor p, course c
WHERE p.pno = c.pno AND c.st_num = 2;
4. 화학과 교수가 강의하는 과목을 검색한다.
SELECT p.section 소속학과, p.pname 교수이름, c.cname 과목명
FROM professor p, course c
WHERE p.pno = c.pno AND p.section ='화학';
5. 화학과 1학년 학생의 기말고사 성적을 검색한다.
SELECT st.major 학과, st.syear 학년, st.sno 학번, st.sname 이름, sc.result 점수
FROM student st, score sc
WHERE st.sno = sc.sno AND st.syear = 1 AND st.major = '화학';
6. 일반화학 과목의 기말고사 점수를 검색한다.
SELECT c.cno 과목번호, c.cname 과목명, sc.result 점수
FROM course c, score sc
WHERE c.cno = sc.cno AND c.cname = '일반화학';
7. 화학과 1학년 학생의 일반화학 기말 고사 점수를 검색한다.
SELECT st.major 학과, st.syear 학년, st.sno 학번, st.sname 이름, c.cname 과목명, sc.result 점수
FROM student st, course c, score sc
WHERE st.sno = sc.sno AND c.cno = sc.cno AND st.major = '화학'
AND st.syear = 1 AND c.cname = '일반화학';
8. 화학과 1학년 학생이 수강하는 과목을 검색한다.
SELECT DISTINCT st.major 학과, st.syear 학년, c.cname 과목명
FROM student st, course c, score sc
WHERE st.sno = sc.sno AND c.cno = sc.cno AND st.major = '화학' AND st.syear = 1
ORDER BY c.cname;
9. 일반화학 과목에서 평가 점수가 A인 학생의 명단을 검색한다.
SELECT c.cname 과목명, st.sno 학번, st.sname 이름, sc.result 점수, g.grade 등급
FROM student st, course c, score sc, scgrade g
WHERE st.sno = sc.sno AND c.cno = sc.cno AND sc.result BETWEEN g.loscore AND g.hiscore
AND c.cname = '일반화학' AND g.grade = 'A';
10. 송강 교수의 과목을 수강하는 학생의 기말고사 점수를 성적 순서로 검색한다.
SELECT p.pname 교수이름, c.cname 과목명, st.sno 학번, st.sname 이름, sc.result 점수
FROM student st, professor p, course c, score sc
WHERE st.sno = sc.sno AND c.cno = sc.cno AND p.pno = c.pno AND p.pname = '송강'
ORDER BY sc.result DESC;
11. 화학과 1학년 학생의 기말고사 성적을 학점(A,B,C,D,F)으로 검색한다.
SELECT st.major 학과, st.syear 학년, st.sno 학번, st.sname 이름, g.grade 등급
FROM student st, score sc, scgrade g
WHERE st.sno = sc.sno AND sc.result BETWEEN g.loscore AND g.hiscore
AND st.syear =1 AND st.major = '화학';
12. 송강 교수가 강의하는 과목에서 평가 점수가 A인 학생의 명단을 과목명과 함께 검색한다.
SELECT p.pname 교수이름, c.cname 과목명, st.sno 학번, st.sname 이름, g.grade 등급
FROM student st, professor p, course c, score sc, scgrade g
WHERE st.sno = sc.sno AND c.cno = sc.cno AND p.pno = c.pno
AND sc.result BETWEEN g.loscore AND g.hiscore
AND p.pname = '송강' AND g.grade = 'A';
13. 화학과 1학년 학생에게 강의하는 교수의 명단을 검색한다.
SELECT DISTINCT p.pno 교수번호, p.pname "화학과 1학년 강의 교수 명단"
FROM student st, professor p, course c, score sc
WHERE st.sno = sc.sno AND c.cno = sc.cno AND p.pno = c.pno
AND st.syear =1 AND st.major = '화학';
2024.01.24 - [SQL] - SQL select - 실습1
SQL select - 실습1
실습 테이블 테이블 내용 테이블 내용 emp dept salgrade 사원 부서 급여등급 student professor course score scgrade 학생 교수 과목 기말고사점수 점수등급 테이블 상세 구조 emp(사원) dept(부서) salgrade(급여등
backendmaster.tistory.com
<테이블 정보>
'SQL' 카테고리의 다른 글
SQL select - 실습9 (2) | 2024.01.30 |
---|---|
SQL select - 실습8 (0) | 2024.01.30 |
SQL select - 실습6 (1) | 2024.01.29 |
SQL select - 실습5 (1) | 2024.01.29 |
SQL select - 실습4 (1) | 2024.01.29 |