지식인 답변모음 1~2번에서 14년 6월 16일까지 했었고, 이후의 답변 추려봤습니다.
------------------------------------------------------------------------------------------------------------------------
질문 제목 : 오라클 outer join 질문입니다.
내용 : 개발직을 한지 3년정도 되었는데 아직도 확실한 답을 알지 못하였습니다.
전 프로젝트 개발 중 쿼리짤때 LEFT OUTER JOIN 을 LEFT JOIN 으로 줄여 쓰고 있습니다.
RIGHT OUTER JOIN 은 RIGHT JOIN으로 하고요. INNER JOIN 은 그냥 JOIN 이라고 쓰지요.
순전히 편하기도하고 동일한 값이 나오기도 하니 문제 없다 여겼는데 얼마전 욕을 들어서요.
궁금한건 저렇게 줄여쓰면 안되는것인지.무엇때문에 안되는것인지.
DB를 오라클에서 MSSQL로 변환할때 문제가 있는건지 정말 궁금하네요.
시간 날때 한번씩 찾아보고는 있는데 LEFT JOIN이 INNER JOIN 이라느니.
대체 쿼리는 짜본적이 있는 사람들이 글을 남긴건지 참..... 알려주세요~
답변 : 결과는 같고 사용법 역시 같습니다.
욕을 먹었다면 자신의 편의상 줄여씀으로서 표준을 어긴거로 판단해서 그런듯 합니다.
같다고 누구나 안다해도 단순히 right left join 이라고 사용을 하는 것보단 outer 를 명시하여 가독성을 높이고 누군 이렇게, 또 누군 이렇게 쓰는걸 안좋게 생각하는 사람이라면 싫은소리를 할 수 있는거죠.
회사마다, 사람마다 다릅니다만 정식 명칭을 사용하는게 더 좋다고 생각합니다.
* 오라클의 경우 아우터 조인을 질문내용과 같이 (left or right) join 이나 (left or right) outer join과 같이 사용할 수 있고, 이 외에도 아우터조인의 기준이 될 테이블과 아우터조인으로 참조될 테이블간의 컬럼 조인 기술시 메인테이블.컬럼 = 참조테이블.컬럼(+) 와 같이 (+) 키워드를 통해 아우터조인 연산을 수행할 수 있습니다.
답변당시에 저는 입사 1년차의 신입시절이고, 질문자는 3~4년차였네요. 사실 회사마다, 사람마다 모두 다르지만 표준을 지키거나 가독성을 고려한 코딩이 추후에 개발비용보다 지속적으로 발생하기에 더 비싼 유지보수 비용을 줄일 수 있게 됩니다.
------------------------------------------------------------------------------------------------------------------------
질문 제목 : 정규화 예제 질문 드립니다.
내용 : 정규화 공부중인데 예제가 이해가 안됩니다.
도움좀 부탁드립니다. 첫번째 문제입니다
성적표 (학번 이름 전공 과목번호 과목이름 교수명 연구실 성적) 밑에 속성값없이 이렇게 주어주고 정규화하라는데 뭐가 중복이고 뭐가 종속인지도 도대체 모르겠습니다.
적어도 밑에 값을 세네줄만 주면 대충 누가 무슨과목 몇개들으니 과목별로 나눠서 중복을 없애기라도할텐데 그냥 열이름만 나열되어있으니 노답입니다. 왜 뜬금없이 학생(학번 이름 전공) 성적(학번 과목번호 과목이름 교수명 연구실 성적)이 되는지도 모르겠습니다. 결과값을 봐도 도저히 추론이 되지않습니다 제발 이해좀 시켜주세요.
111 | 홍길동 | 도술 | A1 | 건축 | 나건축 | C01호 | A
111 | 홍길동 | 도술 | A2 | 수학 | 나수학 | C02호 | B
111 | 홍길동 | 도술 | A3 | 사회 | 나사회 | C03호 | A
학생 과 성적으로 나눈 이유 = 학번과 이름, 전공 컬럼을 보면 값이 중복됨을 알 수 있습니다.
정규화의 목적중 하나는 중복값을 최소화 하는것이기 때문에 학생의 개인 정보를 저장하는 학생 테이블과 학생의 성적 정보를 저장하는 성적 테이블로 나눠지게 됩니다.
그럼으로서 중복을 최소화하게 되는것이고, 학생과 성적 테이블에는 각각 학번이라는 공통 분모를 가지고 있기 때문에 이 두 컬럼간의 JOIN을 통해 데이터를 합치거나 변별력이 생기게 되는겁니다.
------------------------------------------------------------------------------------------------------------------------
질문 제목 : MSSQL 쿼리 해석
내용 : CASE CHARINDEX('/',Phone) WHEN 0 THEN REPLACE(REPLACE(Phone,'-',''),' ','')
ELSE REPLACE(REPLACE(SUBSTRING(Phone,1,CHARINDEX('/',Phone)-1),'-',''),' ','') END as 핸드폰번호
위에 질의어 인데 다른건 이해 하겠는데
1.ELSE 문을 왜 쓰는지?
2.WHEN 0 THEN 에서 0 의 의미가 무엇인지?
3.SUBSTRING(Column,1,CHARINDEX('/',Column)-1) 에서 -1 의 의미가 무엇인지?
이렇게 3가지가 궁금 합니다. 고수님들 답변 기다리겠습니다. 감사합니다.
* 내용중에 한가지 정정할 부분은 case when else end 문은 함수식이 아닌 조건식입니다. 그렇기에 함수식인 decode 함수보다 성능이 좋습니다. 상황에 맞춰 적절한 사용이 필요하고, MS-SQL 에서는 decode 함수가 없으므로 참고하시기 바랍니다.
------------------------------------------------------------------------------------------------------------------------
이상으로 14.07.14 까지의 답변이었고, 꾸준히 이어나가겠습니다. 데이터베이스와 관련해서 간단한 질문정도는 언제든지 환영하며, 제가 모르더라도 여러 루트로 알아보고, 배운뒤에 답변을 도와드리도록 하겠습니다. 혹 부족한 답변이 보인다면 언제든 조언 및 지적 환영합니다.
'반짝 IT ↗ > 오라클' 카테고리의 다른 글
지식인 답변모음 - 데이터베이스 카테고리_5 (0) | 2018.04.09 |
---|---|
지식인 답변모음 - 데이터베이스 카테고리_4 (0) | 2018.04.09 |
지식인 답변모음 - 데이터베이스 카테고리_2 (0) | 2018.03.23 |
지식인 답변모음 - 데이터베이스 카테고리_1 (0) | 2018.03.21 |
2. 데이터베이스 - SQL (0) | 2018.03.07 |