sql null SQL에서 NULL을 활용하는 방법은 무수히 많습니다. count(*)이거랑 count(칼럼명) 이 두 개는 값이 다릅니다. 전자같은 경우는 null을 포함해서 계산을 하게 되고 후자는 null을 포함하지 않는 상태에서 계산 되어집니다. 또한, null은 어떤 값과 연산을 하여도 무조건 null이 나오는 특징을 가지고 있습니다. null 관련 함수 nvl(값1, 값2); 값1이 null인 경우 값1 아닌 경우 값2 nullif(값1, 값2) 값1 = 값2인 경우 null 다른 경우 값1 coalesce(값1,값2,값3...) 최초로 null이 아닐때까지 반복 오라클에서는 null이 가장 무겁지만 mssql 에서는 null이 가장 가볍다. sql 읽는 순서 (중요) sql를 읽을때 가장 먼..
SQLD문제를 풀다가 문제가 생각보다 쉽지 않아 블로그에 올려서 공부할려구 한다. SQLD 특성상 sql쿼리를 보고 결과를 유추할 수 있어야 한다. FULL OUTER JOIN같은 경우도 이론은 알고 있는데 막상 문제로 보니 쉽지 않았다. 그래서 그림으로 그려서 이해시킬려구 한다. 다음과 같은 데이터가 준비되었다. INSERT INTO TB_DEPT_52 (DEPT_NO, DEPT_NM) VALUES ('D101','데이터개발팀'); INSERT INTO TB_DEPT_52 (DEPT_NO, DEPT_NM) VALUES ('D102','파이개발팀'); INSERT INTO TB_DEPT_52 (DEPT_NO, DEPT_NM) VALUES (NULL,'자바개발팀'); INSERT into tb_emp_52..
ERD를 표기하는데 자주 사용하는 표기법으로 IE표기 법과 Barker표기법이 있다고 한다. 엔티티, 속성, 관계(카니널리티), 관계(옵셔널리티) 엔티티 db라는게 현실에 존재한 것을 데이터화 시키는걸 말하는 걸로 봐서 엔티티라는건 그 데이터들의 조합을 뜻하는 것 같다는 느낌이다. 이것으로 보고 이 엔티티는 어떤 속성을 속성을 가졌는지, 어떤 값을 가졌는지 알 수 있다. IE는 식별자와 일반속성이 구분되있는걸로 봐서 Barker같은 경우는 식별자와 일반 속성이 구분이 전혀 되지 않는다. 다만, #,*,o같은 문자로 어떤 값인지 대략적으로 알 수 있다. * : 필수 o : 선택이라고 생각하면 된다. 즉, * 붙은 것은 notnull이 붙어있다고 한다. 관계 관계에는 1:1이냐 1:N 이냐 라는 관계가 존재..
트랜잭션에 대해 고민해보자. 애초에 트랜잭션이라는 건 다음과 같습니다. 모든 작업을 성공하거나 실패하는 기능이라고 하는데... SQL에서 트랜잭션이라고 하면 한개라도 실패를 하면 모든 sql은 실패가 떨어진다는 이야기인것 같습니다. 그림을 보면 sql쿼리 3개가 존재한다는 것을 알 수 있습니다. 트랜잭션의 정의에 따른다면, 첫 번째 sql 은 성공 이지만 두 번째 sql이 실패라면 데이터베이스 상에는 아무것도 추가되지 않습니다. 왜냐하면 실패했기 때문이죠. 당연한 이야기죠. 이런 경우는 단일 사용자일때 발생되는 현상입니다. 그렇다면 사용자가 늘어나면 어떻게 될까요? 간단히 그림을 그리면 이 모든 sql문이 통과해야 합니다. 결국 a라는 유저가 sql 테스트에 성공한다면 b라는 유저도 sql 테스트도 성공..
내부 조인과 외부 조인은 어떤 차이점이 있을까? 그림으로 그렸을때는 내부 조인과 외부 조인의 차이는 못느끼지만... 생각을 해보자 말 그대로 해석해보자. 내부 조인... 내부에서 조인을 한다는 것 같다. 그러니까 select * from block1; select * from block2; 이러한 sql이 존재한다고 가정해보자. 그러면 내부니까... 보통은 내부조인은 다음처럼 작성한다. select * from block1 b1 INNER JOIN block2 b2 ON b1.seq = b2.seq; 내부라는건... 뭔가 안에서 액션이 발생한다는 의미인데... 만약, 다른 요소가 존재하면 그것은 조인이 될까? 예를들어 block2에는 semi_color가 존재하는데 block1에는 semi_color가 ..
서브쿼리?는 무엇을 말하는 것일까요? 곰곰히 생각해봅시다. 이름에서 알 수 있듯이 서브 쿼리는 주 쿼리를 도와 주는 쿼리라고 할 수 있습니다. 그러면 주 쿼리는 무엇일까요? select * from block; 사실 서브 쿼리나 주 쿼리나 별 다를게 없습니다. 지금까지 배운것을 전부 넣어보겠습니다. select * from block where color = 'black' group by second_color having size < 20; 그러면 서브쿼리는 어디에 추가 할 수 있을까요? 네 맞습니다, 서브 쿼리는 어디든 넣을 수 있습니다.(적어도 select에서는 말이죠) 위 코드의 열을 확인해보면 *라는 와일드 카드가 보인다는 것을 알 수 있습니다. 여기에서 와일드 카드의 역할은 모든 열을 출력 시..
개인적으로 그룹화를 사용하는 이유는 통계를 내기위해 사용되는 것이라고 생각이 듭니다. 통계에는 평균을 구한다는지, 최댓값, 최솟값, 등등을 구할 수 있습니다. sql에서는 이러한 기능들을 제공하는데 이것을 그룹화라고 부릅니다. sql에서는 다음처럼 사용합니다. group by 그룹화될 열 사실 우리는 우리도 모르게 그룹화를 사용하고 있습니다. 다음 쿼리를 보면서 이야기 해봅시다. select * from block; 이상합니다. 분명히 그룹화를 사용한다고 했는데 어디에도 group by의 흔적이 보이지 않습니다. 정확히 말하면 이 방법은 암묵적인 그룹화 방법입니다. 결국 다음과 같은 쿼리들도 가능하다는 이야기입니다. select count(*) from block; select min(*) from bl..
집합... 우리가 수학에서 가장 잘하는 챕터입니다. 왜냐하면 더 이상 말하지 않겠다. 아무튼 집합에는 3가지 용법이 등장합니다. 합집합, 교집합, 차집합 물론 여집합 같은 것도 있지만 여기에서는 이 3가지만 알아도 충분합니다. 사실 집합에는 전제조건이 있습니다. 정확히 말하면 합집합, 교집합, 차집합을 온전히 구하기 위한 전제조건입니다. 바로 두 집합이 비슷한 부분이 있어야 됩니다. 만약 없다면 합집합, 교집합, 차집합을 하는 의미가 없어질지도 모릅니다. 합집합 합집합의 의미는 두개의 집합을 합친다는 의미입니다. 여기 집합이 두개 있습니다. 여기서 이 두 집합을 합친다면... 다음과 같은 것을 확인 할 수 있습니다. 여기서 질문! 만약, 공통된 부분이 존재한다면, 어떻게 해야할까요? 정답은 공통된 부분은..
지금까지 단일 테이블에 대해 공부하였습니다. 테이블이 여러개라면, 어떻게 될까요? 이것을 우리는 JOIN이라고 부릅니다. 이것을 설명하기 위해서는 그림을 다시 그려야 될것 같습니다. 다중 테이블인 만큼 테이블도 2개를 준비하였습니다. JOIN을 하는 방법은 여러개가 존재하지만, 여기에서는 내부 조인에 대해 학습할 예정입니다. 참고로 외부 조인은 추후에 공부할 예정입니다. 교차 JOIN 교차 JOIN은 2개의 테이블을 교차되었다는 뜻으로 데카르타 곱입니다. 그럼 위 그림을 교차 JOIN을 하게 되면 어떤 일이 발생할까요? 이런 끔찍한 혼종을 출력할 수 있습니다. 이것을 해석하면 윗줄 1번부터 7번까지의 인덱스가 하위 인덱스들을 가진다는 의미입니다. sql구문으로 다시 작성해보죠. select * from ..
sql에서 필터링을 거는 방법은 총 2가지가 존재합니다. 하나는 where절과 having절을 사용해서 필터링을 걸 수 있습니다. 두개의 차이점은 저번 장에서 말했듯이 where절은 select구문에서의 조건문이고 having절은 지정된 그룹의 조건이라 할 수 있습니다. 여기에서는 where절에서 사용되는 필터링에 대해 말하겠습니다. 기본적인 방법은 저번 포스팅에서 말했지만 간단하니 다시 말씀드리겠습니다. select * from block where color = 'brown'; 그림으로 그려보면 다음과 같습니다. 프로그래밍 언어를 학습을 해보면 조건문은 어떤것이 존재할 까요? 간단히 말하면 boolean 자료형이 존재합니다. 즉, true와 false가 나눠져 있는 상태입니다. 위 코드에서는 색상이 ..
select절은 sql구문에서 가장 빈번하게 사용되는 구문입니다. 왜냐하면 select는 조회를 목적으로 만들어진 구문이기 때문입니다. 삽입 : insert같은 경우를 생각해보면 insert를 할 수 있는 경우의 수는 생각보다 없다고 생각합니다. 기껏해야 하나의 테이블에서 삽입을 하기 때문입니다. 하지만 조회는 하나의 테이블에서만 조회도 가능하지만, 하나가 아닌 여러개의 테이블에서 새로운 테이블을 만들어서 사용하던가, 또는 다른 테이블을 참조하는 경우가 흔치 않습니다. 즉, 조회는 다른 방법에 비해 무수히 많기 때문에 다른 구문에 비해 추가적인 노력이 필요하다고 생각합니다. select 절의 요소 select : 열 from : 테이블 or 조인할 방법 where : 조건 group by : 그룹화 ha..
1.데이터 베이스 설계 Sql-Study-Organization/SQL_Repository Contribute to Sql-Study-Organization/SQL_Repository development by creating an account on GitHub. github.com 2. 정규화 Sql-Study-Organization/SQL_Repository Contribute to Sql-Study-Organization/SQL_Repository development by creating an account on GitHub. github.com 3. 트랜잭션 START TRANSACTION 트랜잭션 시작 COMMIT 트랜잭션 내에서 실행한 명령을 적용한 후 종료 ROLLBACK 트랜잭션 내에서..