변수
SET @MyVar1 = 1;
SET @MyVar2 = 2;
SET @MyVar3 = 3.1234;
SET @MyVar4 = '변수입니다. =>';
SET @변수명 = 값; 을 통해 변수를 지정할 수 있습니다.
SELECT @MyVar4 + @MyVar1 + @MyVar2 + @MyVar3;
변수를 지정해놓으면 문제없이 연산이 됩니다.
하지만 LIMIT에 변수를 입력해서 쓸 수 없습니다.
SELECT * FROM userTbl limit @MyVar1; # 틀린 쿼리문
SELECT * FROM userTbl limit 1;
PREPARE
PREPARE은 가변적으로 들어갈 문장 요소 자리에 ?로 구멍을 뚫어놓고, 그 자리를 채우는 방식으로 만듭니다.
PREPARE 구문이름
FROM '실제 쿼리문';
이런 식으로 선언합니다.
EXECUTE 구문이름 USING 전달변수;
이렇게 호출합니다.
SET @MyVar5 = 3 ;
MyVar5에 3을 저장했습니다.
PREPARE myQuery
FROM 'SELECT emp_no, first_name FROM employees limit ?';
FROM 의 뒤에 employees 테이블의 emp_no, first_name 을 호출하고 ?로 매개변수를 선언했습니다.
EXECUTE myQuery USING @MyVar5;
MyQuery 구문을 실행하자 employees테이블의 emp_no과 first_name 컬럼이 @MyVar5 (= 3)개 만큼 출력되었습니다.
MySQL의 데이터형식과 형 변환
MySQL의 데이터형식과 형 변환을 알아보겠습니다.
데이터 변환 시 CAST (), CONVERT () 등의 함수를 이용합니다. 여기 두 함수의 차이점은 거의 없습니다.
CAST(실행문 as 바꿀 자료형);
CONVERT(실행문; 바꿀 자료형);
이런 식으로 문법을 지킵니다.
SELECT avg(hire_date) FROM employees;
실수(double)로 avg(hire_date)를 SELECT해보았습니다.
SELECT CAST(avg(hire_date) AS SIGNED INTEGER) AS '평균 입사일' FROM employees;
CAST 문을 사용해서 위의 결과값을 정수(INTEGER)로 바꿔보았습니다.
SELECT CONVERT(avg(hire_date), SIGNED INTEGER) as '평균 입사일' FROM employees;
CONVERT도 결과값은 같습니다.
날짜로 형 변환
여러 수들을 날짜로 형 변환해보겠습니다.
SELECT CAST('2022$02$18' as DATE);
SELECT CAST('2022$02$18' as DATE);
SELECT CAST('2022&02&18' as DATE);
SELECT CAST('2022#02#18' as DATE);
SELECT CAST('2022@02@18' as DATE);
SELECT CAST('2022.02.18' as DATE);
모두 2022-02-18로 -가 지켜지며 출력됩니다.
또,
MySQL에서는 now()를 이용해 현재 시간을 확인할 수 있습니다.
SELECT now();
현재 시각이 초 단위로 표시되었습니다.
암시적 형 변환(자동 형 변환)
SELECT '100' + 200; # 300
JAVA에선 안되던 것들이 되기 시작합니다. MySQL에서는 문자와 숫자 간 연산이 가능합니다.
SELECT '100' + '200'; # 300
문자 + 문자도 숫자로 이루어진 문자끼리면 수로 변환해서 계산합니다.
SELECT '가나다'+ 100; # 100
숫자로 변환이 안 되는 문자와 정수를 더해보았습니다. 문자는 0으로 변환되고 정수끼리만 연산하여 100이라는 결과가 출력됩니다.
만약 JAVA처럼 연산 결과가 '가나다100', '100200' 문자로 바뀌게 나오고 싶다면 CONCAT을 사용합니다.
concat(자료1, 자료2);
위 문법을 지킵니다.
SELECT concat('100', '200'); #100200
SELECT concat('가나다', 100); #가나다100
이렇게 모두 문자열로 바뀌어서 출력되었습니다.
SELECT 3 > '1HELLO'; # 1
SELECT 3 > '4HELLO'; # 0
SELECT 3 > 'HELLO'; # 1
SQL에는 boolean 자료형이 없습니다.
대신 0 = false, 1 = true로 출력해서 보여줍니다.
문자의 첫머리에 숫자가 포함된 경우 그 첫 글자를 수로 변환해서 계산합니다.
문자만 있는 경우는 역시 0으로 변환합니다.
CASE
CASE는 JAVA의 SWITCH CASE문과 비슷하게 작동합니다. 들어온 자료와 일치하는 구간이 있으면 THEN 뒤의 구문을 출력합니다.
일치하는 자료가 없으면 ELSE로 빠져 나옵니다.
CASE~WHEN~ELSE~END
의 순서를 지킵니다.
SELECT
CASE 5
WHEN 1 THEN '일'
WHEN 5 THEN '오'
WHEN 10 THEN '십'
ELSE '모름'
END as '결과';
문자열 함수
문자열 함수는 문자열을 조작하는데 쓰는 활용도가 높은 함수입니다.
ASCII(문자), CHAR(숫자)
의 식을 지킵니다.
문자는 숫자로, 숫자는 문자로 변환해줍니다.
그러나 CHAR()는 workbernch의 문제로 모든 문자가 BLOB로 출력됩니다.
정상적인 결과를 조회하고 싶다면
BLOB의 Openvalue in viewer -> text 탭을 선택하면 됩니다.
SELECT ASCII('B'); # 66
SELECT CHAR(98); # BLOB -> b