안녕하세요, 혼자 공부하는 SQL을 보고 학습한 자료를 남깁니다.
SQL 프로그래밍
SQL은 C, 자바, 파이썬과 같은 프로그래밍 언어처럼 코딩이 가능하다.
스토더으 프로시저
위와 같은 형식을 통해서 SQL로 프로그래밍을 할 수 있다.
IF문
IF문은 조건식이 참이면 실행하고 거짓이면 실행하지 않는 것이다.
위와 같은 형식으로 사용할 수 있다.
SQL 문장이 여러 개이기 때문에 BEGIN과 END로 묶어준다.
손코딩 실습
IF 100 = 100 THEN
SELECT '100은 100과 같습니다.'
END IF;
100 = 100 조건절이 참이므로
SELECT '100은 100과 같습니다.' 문이 실행되어
100은 100과 같습니다.라는 다음의 결과가 출력된다.
하지만 위의 예제에서 IF문의 조건절이 100 = 200 이므로 거짓이므로
IF문 내의 쿼리를 실행하지 않고
곧 바로 종료된다.
IF~ELSE문
IF~ELSE문의 경우 참이면 실행하고, 거짓이어도 실행할 문장이 따로 있다.
DECLARE문을 통해서 변수를 선언한다.
SET 명령어를 통해서 선언한 변수에 값을 200 할당한다.
조건절이 거짓이므로 ELSE문의 쿼리가 실행된다.
CALL 명령어로 프로시저를 실행하였으므로 프로시저가 실행된다.
결과 값으로 '100이 아닙니다.'가 출력된다.
SELECT INTO 명령문을 통해서 debutDate에 조회된 결과를 대입한다.
CURRENT_DATE() 함수를 통해서 curDATE에 값을 대입한다.
DATEDIFF(curDATE, debutDate); 함수를 통해서 날짜의 차이를 계산한다.
IF문을 통해서 5년이 지났는지 안 지났는지를 확인한다.
참이면 참인 결과 값을 실행하고 거짓이라면 거짓인 결과를 실행한다.
프로시저 선언을 종료한다.
CALL 명령문을 통해서 프로시저를 호출한다.
결과값이 출력된 것을 확인할 수 있다.
CURRENT_DATE() 함수와 DATEDIFF()함수를 사용해보았다.
CASE 문
CASE 문을 통해서 여러 조건절을 통해 값을 분류해서 결과값을 조회한 것을 볼 수 있다.
고객을 나누어서 혜택을 다르게 주려고 한다.
실습을 통해서 알아보겠다.
조인한 결과에서 GROUP BY를 통해 결과를 조회했다.
하지만 INNER JOIN을 해서 유령 고객은 조회가 되지 않는다.
그래서 RIGHT OUT JOIN을 해서
유령고객까지 전부 다 조회를 했다.
CASE문을 활용을 해서 회원의 등급을 조회했다.
WHILE문
조건식이 참인 동안에 SQL 문장들이 계속 반복이 되요.
WHILE문 응용
4의 배수를 제외한 1~1000까지의 합의 결과를 조회하였다.
ITERATE와 LEAVE를 통해서 4의 배수라면 ITERATE를 통해서 다음 반복문으로 넘어가고 i가 1000이 넘어가면 WHILE 반복문을 종료한다.
그리고 합한 결과를 조회하는 쿼리문을 실행하도록 한다.
CALL 명령문을 통해서 whileProc2()를 호출한다.
동적 SQL
SQL문을 동적으로 즉, 실시간으로 변형시켜서 사용할 수있다는 것이다.
실행 후에는 DEALLOCATE PREPARE로 문장을 해제해주는 것이 바람직하다.
위의 드래그한 쿼리문을 3번 실행을 하면
SQL문이 동적으로 실행이 되서
출입한 시간이 조회가 된다.
감사합니다.
https://www.youtube.com/watch?v=IOCsreDYqFE&list=PLVsNizTWUw7GCfy5RH27cQL5MeKYnl8Pm&index=12
'SQLD' 카테고리의 다른 글
[혼자 공부하는 SQL] SQL 테이블 제약조건 (기본키, 외래키, 고유키) (0) | 2024.10.26 |
---|---|
[혼자 공부하는 SQL] GUI 환경에서 테이블 생성하기, SQL로 테이블 만들기 (0) | 2024.10.26 |
[혼자 공부하는 SQL] 두 테이블을 묶는 JOIN(INNER JOIN, OUTER JOIN, CROSS JOIN, SELF JOIN) (0) | 2024.10.25 |
[혼자 공부하는 SQL] MySQL의 데이터 형식 (정수형, 문자형, 실수형, 날짜형)과 형 변환 (0) | 2024.10.25 |
[혼자 공부하는 SQL] 데이터 변경을 위한 SQL문 (INSERT, UPDATE, DELETE) (1) | 2024.10.25 |