안녕하세요 "타이니스타" 입니다. 저는 10년도 더 이전부터 네이버 포탈 시스템의 지식인 서비스를 이용해 왔는데요.
얼마전에 네이버 지식인 식물신 등급을 달성했습니다 ! 여러 카테고리에 답변을 달았는데요.
그 중에 가장 열심히 답변했던 데이터베이스 분야에서의 지식 답변들 중 다른분들이 궁금할만한 내용을 추려서 글을 올리려 합니다.
식물신 아이콘이에요~ 등급 : 식물신, 시작일 : 2006.03.08, 순위 : 상위 1만명(0.0154%) 이내, 주요활동 분야 : 데이터베이스, 사람과 그룹, 주거살림. 2018.03.21 일자 기준으로 상위 0.0154% 군요 ㅎㅎ
참고로 저는 현재 N포탈 데이터베이스 지식인 10위에 올라있어요~ 상대적으로 주류에 속하지 않으므로 순위가 높은편에 들어가고 있습니다. ^^
지식인 답변모음 1번에서 14년 6월 4일까지 했었고, 이후의 답변 추려봤습니다.
------------------------------------------------------------------------------------------------------------------------
질문 제목 : MS SQL에서 VIEW에 JOIN이 최대로 몇개까지 가능한가요?
내용 : VIEW가 JOIN방식으로 되는거라고 들었습니다.
JOIN은 최대 몇개까지 가능하고 VIEW에는 몇개까지 조인이 가능한지 알고 싶습니다.
지금 SQL Server2008로 101개까지 노가다로 조인해봤는데 이상없이 조인이 되네요
답변 : 조인의 최대 개수를 누군가 명시해 놓은 자료가 있을 수 있겠으나 찾기도 힘들뿐더러 필요한 정보가 아닙니다.
index 설정의 경우 250개. 255개. 라는식으로 명시된 자료가 있으나 그정도로 인덱스를 설정하지 않듯이
조인도 그렇게 많은 테이블을 사용하진 않습니다.
갯수에 제한이 있다면 인덱스와 마찬가지로 250여개 쯤 되지 않을까 추측해 봅니다.
view 가 조인 방식으로 되는걸로 들었다고 하였는데 그 이유를 아는게 더 중요합니다.
view 는 가상의 테이블로 실제로 생성되어있는 테이블 혹은 뷰에 있는 데이터를 토대로 만들어지는 가상의 테이블이며 view 를 만들기 위해선 한개 이상의 테이블이 필요합니다. 뷰는 여러 테이블을 join 하여 특정 용도의 정보를 가지게 되며 그 정보를 from 절에 기술하여 불러옴으로 사용할 수 있는겁니다.
뷰를 생성하지 않고도 뷰의 내용을 가져올 수 있으며 뷰를 생성할 때 작성하는 sql 을 인라인뷰로 작성하는 방법이 있습니다.
인라인뷰는 from 절에 작성하는 서브쿼리의 일종으로서 뷰에 더 가까운 개념으로 생각하면 됩니다.
뷰를 만드는 이유는 특정 정보를 갖는 가상의 테이블이 여러개의 쿼리에서 사용되어질 것이라 판단되는 경우
각 쿼리에 같은 내용의 인라인뷰를 만들기보다는 하나의 뷰를 만들어서 공통으로 관리 및 활용하기 위해 만들어집니다.
뷰로 만들지 않고 인라인뷰로 계속 만들어 사용할 경우 코드가 길어져서 가독성이 떨어지고 코드 관리에 불리한 점이 발생할 여지가 다분하기에 뷰로 만들어 사용하게 되는겁니다.
또한 글쓴이의 의도대로 여러 테이블을 조인하여 뷰를 작성할 경우 속도가 떨어지기에 결코 수많은 테이블을 조인하진 않습니다.
원하는 출력결과를 얻기 위해 억지로 조인을 할 수는 있겠으나 설계상의 복잡함은 물론이거니와
성능의 저하가 필연적으로 따라오게 되며 그럴 경우 설계단계에서 이미 잘못된 것입니다.
결론적으로 최대 개수는 250개라고 추측이 되며 정확한 값을 아는 사람은 실무에서도 별로 없으리라 생각됩니다.
중학교 수학에서 pi 라는 값을 배우셨나요? 3.14 입니다.
소수점 이하로 더 말해보자면 3.141592653589793.....
이런식으로 계속 나아갑니다. 여기서 우리는 3.14 만 알면 되고 뒤의 값은 필요가 없듯이
최대 몇개까지 가능하냐에 대한 의문은 접어두는게 낫다고 봅니다.
마지막으로 쿼리 작성에 가장 중요한 점은 원하는 결과를 가장 빠른 속도로 보여주는 것입니다.
질문에 대한 답이 아니라 다른소리를 늘어놓았으나 도움이 되길 바라며 글을 남깁니다.
* 최대 개수에 대한 정보를 포함하고 있군요. 제가 지금까지 쿼리를 짜면서 저렇게 수십개를 초과하는 조인이 필요한 적은 단 한번도 없었습니다. 그런 경우가 발생한다면 처음부터 DB설계를 잘못했을 가능성이 높겠습니다.
------------------------------------------------------------------------------------------------------------------------
질문 제목 및 내용 : SQL문!!!
SQL문의 (성격, 특징, 레코드삽입, 레코드삭제, 테이블삭제, 업데이트, 검색)이 먼지 알고싶고,
그리고 SQL문의 예시하나 들어주세요.
답변 : 질문이 참 그러네요. 과제인가 싶네요
성격이라.. 표현하기 힘드네요 철학적인 질문에 가깝게 느껴집니다.
sql문은 작성된 실행문에 따라 굉장히 효율적인 처리결과가 나오거나 매우 비효율적인 처리결과가 나오는 극단적인 성격을 지녔습니다. 같은 결과를 만들어낸다고 하더라도 성능을 고려하여 작성한 쿼리의 경우 매우 빠르게 처리되어 시간 및 비용을 감소시키는 반면, 부적절한 쿼리의 경우 불필요한 비용을 발생시키고 잘못하면 중요 데이터가 날아가는 등의 사고가 발생할 수 있습니다.
특징으로는 sql문 작성자의 실력에 크게 영향을 받는다는 것과 굉장히 논리적인 구조로 되어있다는 점이 있습니다.
레코드 삽입 - insert into 문을 통해 특정 테이블에 데이터를 추가하는 작업입니다.
레코드 삭제 - delete 문을 통해 특정 테이블의 데이터를 삭제하는 작업입니다.
테이블 삭제 - drop 명령을 통해 테이블을 날려버리는 작업입니다.
업데이트 - update 문을 통해 특정 테이블의 조건에 맞는 데이터를 수정하는 작업입니다.
검색 - select 문을 통해 특정 테이블의 조건에 맞는 데이터를 출력하는 작업입니다.
select eno, ename
from emp
where deptname = '영업'
이라는 sql 이 검색의 select 문을 이용한 쿼리입니다.
emp 라는 사원정보 테이블에서 from emp <- 이부분
select (선택한다) eno (사원번호), ename(사원명) 을. 선택하여 출력한다.
영업 부서에 속한 정보중에서 -> where edeptname = '영업' <- 이부분
즉, 위의 쿼리는 영업 부서에 속한 모든 사원의 번호와 이름을 불러온다는 뜻입니다.
성격 이나 특징의 경우 철학적인 질문이기에 명확한 답을 드릴 수 없습니다.
만약 과제라면 과제를 내주신 분의 의도가 무엇인지 담거나 수업 내용에서 강조한 내용을 참고하여야 할듯 싶습니다.
* 지식인 활동을 하다보면 공부를 하거나 문제를 해결하면서 발생한 질문이 아닌 과제에 대한 답을 구하는 경우가 종종 있는데요, 질문의 내용, 글에 묻어나는 정성이나 답변할 대상에 대한 존중어린 말투 등에 따라서 단순히 도움주려고 질문만 보는데 기분이 상할때가 있습니다. 데이터베이스의 경우 어느정도 전문적인 지식이 필요하므로 장난성 혹은 툭 던지는 듯한 말투를 자제하고, 문제 줄테니 답주세요. 느낌의 무성의한 질문도 피하는게 도움을 구하는 입장에서도, 도움을 주려는 사람의 입장에서도 서로 좋겠죠?
------------------------------------------------------------------------------------------------------------------------
질문 제목 : sql 예제 해석부탁드려욤
내용 : select Emlid, Dept
from ASSIGNMENT, JOB
WHERE ASSIGNMENT. Jobid = JOB.JOBID
and ASSIGNMENT. TermData = "*"
insert into EMPLOYEE
values ('43212', ' Sue A. Burt', 33 Fair St.', '444661111')
delete from EMPLOYEE
where Name = 'G. Jerry Smith'
update EMPLOYEE
set Address = '1812 Napoleon Ave.'
where Name = 'Joe E. Baker'
답변 : 1. select Emlid, Dept : 두개의 컬럼을 출력하라
from ASSIGNMENT, JOB 어싸인먼트, 잡 테이블에서 데이터를 가져와서
where 절 : 어싸인먼트 테이블의 직업id와 직업 테이블의 직업id 가 같도록 조인(연결) 한 데이터로 간추리고 어싸인먼트 테이블의 텀데이타 값이 * 값인 데이터들만 나오게 하라.
2. employee 테이블에 데이터를 입력하라.
괄호안의 순서대로 (첫번쨰 컬럼 값 = 43212, 두번째 컬럼값 = Sue A. Burt 이런식으로 값이 들어가는것이며
테이블의 컬럼들을 명시하지 않은경우 모든 컬럼에 값을 대입해줘야 명령어가 정상실행.
3. 지워라 empoyee 테이블에 있는 데이터를.
무엇을 지우는가? 이름이 G. Jerry Smith 인 데이터 전부를
4. 수정하라. empoyee 테이블을
주소 컬럼의 값을 1812 Napoleon Ave. 로 수정하라는 뜻이며 이름이 Joe E. Baker 인 데이터의 주소를
변경하라는 조건식이 where 절에 명시되어 있음.
* SQL 문의 기본이 되는 select, insert, delete, update 쿼리 구문이었습니다. select 구문의 경우 조인 연산을 포함하고 있군요. SELECT 쿼리를 잘 보면 from 테이블명, 테이블명 이라고 명시가 되었고, 이 둘간의 관계를 where 조건절에서 테이블.컬럼명 = 테이블.컬럼명 과 같이 조인연산으로 이어주고 있는데요, 이와같은 표기는 dbms 중 오라클 에서 주로 쓰이는 문법이고, inner join 연산을 수행하라는 의미를 갖고 있습니다.
기본이 되는 쿼리인만큼 이 질문/답변도 가져와봤습니다.
------------------------------------------------------------------------------------------------------------------------
이상으로 14.06.16 까지의 답변이었고, 꾸준히 이어나가겠습니다. 데이터베이스와 관련해서 간단한 질문정도는 언제든지 환영하며, 제가 모르더라도 여러 루트로 알아보고, 배운뒤에 답변을 도와드리도록 하겠습니다. 혹 부족한 답변이 보인다면 언제든 조언 및 지적 환영합니다.