2022. 2. 18.ㆍ공부/SQL, R
SQL에서도 변수 선언이 가능할까? - 가능합니다.
SQL에서도 JAVA나 파이썬처럼 변수를 선언하여 객체 지향 프로그래밍이 가능하며, 변수를 지정할 때는 아래의 문법을 사용한다.
SET @변수명 = 값; -- 변수 선언
SELECT @변수명; -- 선언한 변수 호출
SELECT @변수1 + @변수2 -- SELECT 구문을 이용하여 변수끼리 연산
SELECT 구문을 통해 변수와 테이블 데이터를 함께 나열하는 것도 가능하다. 예를 들어 @myVar4라는 변수 값에 '가수의 이름 =>'이라는 값을 넣어주고, 자료 조회 시 @myVar4와 userTbl의 user_name을 조회하면 다음과 같은 결과를 얻을 수 있다. 단, 쿼리문 작성 시 limit 뒤에 변수를 사용하는 것은 불가한데, 이러한 문제는 PREPARE 구문을 통해 해결할 수 있다.
PREPARE 구문은 쿼리문 작성 시 변수의 역할을 하는 요소(가변적으로 값을 바꾸고 싶은 요소) 자리를 ?로 작성하고, 추가적으로 EXECUTE~USING 구문을 작성해서 ?에 값을 넣어주는 방식으로 사용한다. 사용법은,
SET @myVar5 = 3; -- 1. myVar5 변수에 3을 저장함
PREPARE myQ FROM 'SELECT user_name,height FROM userTbl limit ?' -- 2. limit 뒤에 ?를 가진 myQ라는 쿼리를 제작
EXECUTE myQ USING @myVar5; -- 3. EXECUTE로 myQ를 호출할 때 USING으로 만들어놓은 변수를 넣어줌
SQL에서도 강제형 변환과 자동형 변환이 가능할까? - 가능합니다.
강제형 변환 시에는 CAST()와 CONVERT() 함수를 사용한다. 두 함수의 문법은 다음과 같으며, 예시 코드는 실수로 출력되는 buyTbl의 amount 평균값을 정수로 캐스팅한 사례이다. SIGNED INTEGER는 부호가 붙은 인티저라는 뜻이다.
CAST(변환시킬 데이터값 as 변환할 자료형)
CONVERT(변환시킬 데이터값, 변환할 자료형)
SELECT CAST(avg(amount) AS SIGNED INTEGER) as '평균구매수' FROM buyTbl;
자동 형 변환같은 경우, SQL에서는 문자와 숫자의 연산이 숫자!로 자동 형 변환되는 모습을 볼 수 있다. JAVA에서는 숫자 데이터를 sysout(""+....)를 사용하여 문자로 리턴받도록 자동 형 변환을 하곤 했었는데 SQL에서는 숫자에 소괄호 씌우더라도 숫자로 바로 알고 계산해주는 모습을 볼 수가 있다. 연산식에 문자와 숫자가 섞여있으면 정수끼리만 연산한다.
만약 SQL에서 연산 결과가 문자로 바뀌게 나오고 싶다면 CONCAT()함수를 활용하면 된다.
SELECT CONCAT(100,200);
CONCAT 함수 안의 인자값은 연산의 결과(300)가 아닌 문자(100200)로 조회된다.
SQL에서도 논리 자료형 있을까? - 그건 없습니다.
논리 자료형은 없어서 TRUE는 1로, FALSE는 0으로 표현한다. 심지어 연산식에 문자가 섞여있을 경우 '첫 머리에 숫자가 포함되어 있는 문자열'라면 문자는 날리고 해당 값을 숫자로 인지하고, '문자로만 이루어진 문자열'이라면 0으로 인지한다.
SELECT 3 > 1; -- 연산의 결과가 TRUE이며, 코드 실행할 경우 SQL에서는 콘솔에 0으로 찍힘
SELECT 1 > 3; -- 연산의 결과가 FALSE이며, 코드 실행할 경우 SQL에서는 콘솔에 1로 찍힘
'공부 > SQL, R' 카테고리의 다른 글
[R] R에서 CSV파일 불러오는 법 (Mac) (0) | 2022.02.20 |
---|---|
20210218_SQL 기초 8 (기타 SQL 내장 함수) (0) | 2022.02.18 |
20210217_SQL 기초 7 (JOIN 구문) (0) | 2022.02.17 |
20220216_SQL 기초 6 (PRIMARY KEY를 가진 테이블 수정하기) (0) | 2022.02.17 |
20220215_SQL 기초 5(SQL 구문의 분류, INSERT로 자료 넣는 3가지 방법, TRUNCATE로 로그 남기지 않고 빠르게 삭제) (0) | 2022.02.17 |