본문 바로가기
학원 수업

11일차 - SQL 'case문'

by Hiolet 2021. 10. 14.

어제 협동조합에 대해 알려주는 줌 미팅을 들어서 다음날 업로드 하는 중

어제 무슨 일이 있었는지 기억이...

 

select구문을 마무리 하고 insert구문 시작했다! 이제 남은건 update랑 delete 남았네.

저번 시간에 선생님이 너무 빨리 수업해서 따라가기 힘들어서 나름 긴장해따...

이번 달 말에 시험을 치는데 달력 보시더니 "더 빨리 해야겠는데..."이러셔서 무서웠다.

 

떨면서 sql 수업 시작

 

문자열 결합

 

문자열 결합은 sql server랑 오라클과 mysql이 서로 다르다.

+ SQL server
|| Oracle, DB2
concat My SQL

 

 

+(더하기) 로는 문자열을 결할 할 수 없다.

MySQL에서 문자열 결합으로 concat을 쓴다.

 

 

 

 

 

 

 

 

 

 


 

substring 함수

 

substring('str', 시작 위치, 문자 갯수)

시작 위치에서 지정한 문자 갯수을 반환한다.

 

 

*시작 위치에 음수로 지정하면 끝자리에서 시작된다.

 


 

날짜 연산

 

current_timestamp 는 시간 출력

current_date 는 년 · 월 · 일 출력 

 

current_date 에 1을 빼면 오늘 날자에서 하루가 빠진다.

 

current_timestamp는 now()와 똑같이 나온다.  그럼 짧은거 써야지 

 

datediff() 날짜 사이에 차이가 얼마인지 알 수 있다.

 

 


 

case when 조건식 then 식1 else 식2 end

 

조건식을 만족하면(참이면) then 식을 반환한다.

자바에서 쓰는 if else와 같은 의미다.

~ then 식1 다음에 또 when 조건식 thent 식이 더 올 수 있다. 이럴 때는 when 조건식을 차례로 처리하다가 조건을 만족하는 when 조건식에 있는 then 식의 처리 결과를 반환한다. 

else는 생략할 수 있는데 그럼 else null이 된다.

 

* sql : java, case : if , when : if else, else : else

*case문은 where구문, order by구문에도 쓸 수 있다.

 

null값 연산 결과는 null이 나오기 때문에 원하는 결과값을 얻을 수 없다. 

이 때 조건문으로 null값을 0으로 변환할 수 있다.  그러니까 생략하지 말라는 거잖아 

 

 

그런데 null값을 변환하는 더 간단한 방법이 두 가지 있다.

 

select ifnull(열, 0) from 테이블 이름;

select coalesce(열, 0) from 테이블 이름; 

null이면 0을 출력하고 아니면 원래 값을 그대로 출력한다.

*coalesce함수는 표준 sql이다. 

 

 

 

case문은 단순 case문과 검색 case문으로나눌 수 있다.

 

단순 case문에는 조건문에 들어갈 열을 when구문 앞에 한번에 써주고 단순 비교값만 넣으면 된다.

 

 

검색 case문은 기본 case문의 형식으로 when 구문에 조건문을 넣으면 된다.

 

단순 case문은 비교연산자(=)로 조건식을 처리하는데 그렇기 때문에 null값을 처리할 수 없다.

그래서 null값이 조건을 만족한다 해도 결과값이 나오지 않고 eles의 결과값이 나온다.

null값을 처리하려면 검색 case를 써야 한다. 

ex) ~when a is null then '데이터 없음' ~

 


 

insert

 

insert into 테이블이름 (열, 열, 열 · · · ) values (값, 값, 값 · · ·)

기본형 데이터를 추가할 수 있다.

만약 전체 열에 각각 값을 준다거나 열의 자료형을 모두 안다면 열이 담긴 괄호는 생략하고 values의 값을 열에 맞게 써주면 된다.

 

위 코드가 생략하지 않은 코드이고 아래가 생략한 코드다.

desc로 자료형과 열에 대해 파악했기 때문에 생략할 수 있다.

 

 

자료형에 맞지 않게 value값을 넣으면 당연히 오류가 난다.

 

 

 


 

not null 제약

 

no열에는 null값이 들어갈 수 없는데 insert into로 a열과 b열에만 데이터를 추가해서 오류가 났다.

 


 

defalut

 

명시적으로 지정하지 않으면 null값이 들어간다.
defalut를 0으로 지정해 두면 값이 없을 때 defalut값이 0으로 들어간다.

 

 

 

Oracle에서는 from을 생략할 수 없다.

 

'학원 수업' 카테고리의 다른 글

13일차 - java '메서드'  (0) 2021.10.15
12일차 - java 'break;'  (0) 2021.10.14
11일차 - html 'select', 'input'  (0) 2021.10.13
10일차 - java ' 제어문 for(반복문)'  (0) 2021.10.12
9일차 - JAVA '제어문 if(조건문)'  (0) 2021.10.11