[DB] 레코드 CRUD 및 연산자

공부 일자 : 2022/09/28 수

◼ 레코드
▪ C: 삽입하기
▫ 어떠한 테이블에 레코드를 삽입하기 우해 아래와 같이 명령한다.

INSERT INTO `스키마`.`테이블` (`열이름`...) VALUES (값,...);

▫ 값을 삽입할 때에는 테이블이 가지고 있는 열의 순서가 무관하게 테이블 이름 뒤 괄호 안에 명시하는 순서대로 값이 삽입된다.
▫ VALUES 뒤에 오는 괄호세트 하나는 하나의 레코드를 의미하며 콤마로 구분하여 한 뭐 리에 여러 레코드를 삽입할 수 있다.
▫ 명시한 (열이름,...)의 순서와 (값,...)의 순서가 반드시 일치해야 한다.

▪ R: 선택하기
▫ 어떠한 테이블에 존재하는 레코드를 선택(조회) 하기 위해 아래와 같이 명령한다.

SELECT

▪ U: 수정하기
▫ 어떠한 테이블에 존재하는 레코드가 가진 값을 열 별로 수정하기 위해 아래와 같이 명령한다.
UPDATE `스키마`.`테이블`
SET [`열이름` = 변경할 값],... ㅣㅇㅇㅇㅇㅇㄴㄴㄴ
[WHERE 조건]?
[LIMIT x]?;
▫ UPDATE키워드는 대상이 되는 테이블에 존재하는 레코드를 기본적으로 모두 수정하려 한다. 하지만 DBMS에기본적으로 안전장치가 있음으로 작동하지 않는다.
▫ SET 키워드 뒤에는 [열이름 = 값] 쌍을 콤마로 구분하여 수정할 열과 값을 여러 개 지정할 수 있다.
이때 수정하고자 하는 레코드를 WHERE 조건을 이용하여 제한할 수 있다.
▫ 마찬가지로, 조건 유무와 관계없이 수정되는 레코드의 개수 자체를 LIMIT 키워드를 이용하여 제한할 수 있다.
▫ WHERE 와 LIMIT는 선택사항이지만 그 순서는 반드시 지켜야한다. 즉, LIMIT가 먼저 오고 뒤에 WHERE가 오면 안 된다.


▪ D: 삭제하기
▫ 어떠한 테이블에 존재하는 레코드르르 삭제하기 위해 아래와 같이 명령한다.

DELETE
FROM `스키마`.`테이블`
[WHERE 조건]?
[LIMIT x]?;

▫ DELETE 키워드는 대상이 되는 테이블에 존재하는 레코드를 기본적으로 모두 삭제하려 한다. 하지만 DBMS에 기본적으로 안전장치가 있음으로 작동하지 않는다.
▫ 이 때 삭제하고자 하는 레코드를 WHERE 조건을 이용하여 제한할 수 있다.
▫ 마찬가지로, 조건 유무와 관계없이 삭제되는 레코드의 개수 자체를 LIMIT 키워드를 이용하여 제한할 수 있다.
▫ WHERE와 LIMIT는 선택사항이지만 그 순서는 반드시 지켜야 한다. 즉, LIMIT가 먼저 오고 뒤에 WHERE가 오면 안된다.

◼ 연산자
▪ 기본 연산자
▫ + : x+y 꼴에서 x값과 y값을 더한다. 단, 문자열 합치기를 지원하지 않음으로 유의한다.
▫ - : x-y 꼴에서 x값에서 y값을 뺀다.
▫ * : x*y 꼴에서 x값과 y값을 곱한다.
▫ / : x/y 꼴에서 x값을 y값으로 나눈다.
▫ % 혹은 x MOD y 꼴에서 x값을 y로 나눈 나머지이다.

▪ 비교연산자
▫ = : x = y 꼴에서 x값이 y값과 같은가의 여부를 반환한다.
▪ 타 언어와 달리 == 및 ===를 사용하지 않음으로 유의한다.
▪ 가능한한 형변환을 통해 비교를 함으로 유의한다.
▪ 영문비교시 대소문자를 가리지 않고 비교함으로 유의한다.
▪ 영문 비교시 대소문자를 구분하기 위해 아래와 같이 BINARY 키워드를 사용한다.

SELECT 'abc' = 'ABC'; -- 1 (TRUE)
SELECT BINARY 'abc' = 'ABC'; -- 0 (FALSE)

▫ > : x > y 꼴에서 x값이 y값 초과하는가에 대한 여부를 반환한다.
▫ < : x < y 꼴에서 x값이 y값 미만인가에 대한 여부를 반환한다.
▫ >= : x >= y 꼴에서 x값이 y값 이상인가의 여부를 반환한다.
▫ <= : x <= y 꼴에서 x값이 y값 이하인가의 여부를 반환한다.
▫ != 혹은 <> : x != y 꼴 혹은 x <> y 꼴에서 x값이 y값과 다른가에 대한 여부를 반환한다.

▪ 논리연산
▫ && 혹은 AND : x&&y 혹은 x AND y 꼴에서 x 조건과 y 조건이 모두 참인가에 대한 여부를 반환한다.
▫ || 혹은 OR : x||y 혹은 x OR y 꼴에서 x 조건과 y 조건중 하나라도 참인가에 대한 여부를 반환한다.

▪ 기타연산
▫ IS NULL : x IS NULL꼴에서 x값이 NULL인가의 여부를 반환한다.
▫ IS NOT NULL : x IS NOT NULL꼴에서 x값이 NULL이 아닌가에대한 여부를 반환한다.
▫ BETWEEN ...AND ...: x BETWEEN n AND x 꼴에서 x값이 n값 이상 x값 이하인가에 대한 여뷰를 반환한다. 당연히 x >= n &&x <=x랑 결과는 같음.
▫ NOT BETWEEN ...AND ...: x BETWEEN n AND x 꼴에서 x값이 n값 이상 x값 미만이거나 x값 초과인가에 대한 여부를 반환한다.
▫ IN(,...): x IN(v,...) 꼴에서 x가 한 개 이상의 값(들) v중 일치하는 것이 있는가에 대한 여부를 반환한다.
SELECT 3 IN (1,3,5,7,9); -- 1 (TRUE)
SELECT 4 IN (1,3,5,7,9); -- 0 (FALSE)

▫ NOT IN (,...): x NOT IN (v,...)꼴에서 값x가 한개이상의 값(들) v중 일치하는 것이 하나도 없는가에 대한 여부를 반홚나다.
▫ LIKE ...: x LIKE y 꼴에서 값 x가 패턴 y에 대해 일치하는 가에대한 여부를 반환한다. // 검색기능 구현에 무조건 쓰임
▪ 패턴은 문자열로 작성한다.
▪ 패턴에서 퍼센트 기호(%)는 '아무거나'라는 뜻으로 사용된다.
SELECT '가족이랑 괌 여행 다녀왔어요' LIKE'괌%'; -- 0 (FALSE)
SELECT '가족이랑 괌 여행 다녀왔어요' LIKE'%괌' -- 0 (FALSE)
SELECT '가족이랑 괌 여행 다녀왔어요' LIKE'%괌%' -- 1 (TRUE)

▫ NOT LIKE ... : LIKE의 반대임.
.

◼ 함수
▪ NOW() 혹은 NOW(n) : 현재 일시를 반환하는 함수이다. n값은 소수점 길이이며 생략시 없는 것으로 한다. n의 최대길이는 6이다.
▪ DATE_ADD(T,INTERVAL a i) : 일시값 t에 i주기의 a만큼의 날짜 혹은 시간을 더한다.
▫ 주기
▪ SECOND : 초
▪ MINUTE : 분
▪ HOUR : 시
▪ DAY : 일
▪ WEEK : 주
▪ MONTH : 월
▪ QUARTER : 분기
▪ YEAR : 년
▫ 가령 현재 시간에서 1시간 미래의 시간을 선택하기 위해 아래와 같이 실행한다.

SELECT DATE_ADD(NOW(),INTERVAL 1 HOUR);

▪ DATE_SUB(t,INTERVAL a i) : 일시값 t에 i주기의 a만큼 날짜 혹은 시간을 뺀다. (과거로 간다)
▫ 주기는 위와 같다.

▪ IF(c, t, f)` : 조건 `c`가 참이면 `t`를, 거짓이면 `f`를 반환한다.
▪ IFNULL(t, a)` : 값 `t`가 `NULL`이라면 `a`를 반환하고, 그렇지 않다면 `t`를 반환한다. `IF(t IS NULL, a, t)`와 같다.
▪ CONCAT(s1, s2, s3,...)` : 주어진 매개변수 `s1`, `s2`, `s3`,...을 모두 이어 붙인다.

> SELECT CONCAT(2022, '10', 04); -- '20221004'
▪ CONCAT_WS(s,v1,v2,v3,) : 매개변수 v1,v2,v3,...를 이어붙이는데 사이사이에 s를 넣는다 단, 구분자 s를 가장 앞과 뒤에는 붙이지않음으로 유의한다

SELECT CONCAT_WS('/','2022','10',04'); -- '2022/10/04'

▪ LEFT(s,l) : 주어진 문자열 s의 앞 l 자리 만큼의 문자열을 잘라 반환한다.
SELECT LEFT('Hello World',5); --'Hello'

▪ RIGHT(s,l) : 주어진 문자열 s의 끝 l 자리 만큼의 문자열을 잘라 반환한다.
SELECT RIGHT('Hello World',5); --'World'

▪ LCASE(s) 혹은 LOWER(s) : 주어진 문자열 s를 모두 소문자화 하여 반환한다.
▪ UCASE(s) 혹은 UPPER(s) : 주어진 문자열 s를 모두 대문자화하여 반환한다.
▪ LTRIM(s) : 주어진 문자열 s에서 선행하는 공백을 모두 제거하여 반환한다.
SELECT LTRIM(' Hello '); -- 'Hello '

▪ RTRIM(s) : 주어진 문자열 s에서 후행하는 공백을 모두 제거하여 반환한다.
SELECT RTRIM(' Hello '); -- ' Hello'

▪ TRIM(s): 주어진 문자열 s에서 양쪽의 공백을 모두 제거하여 반환한다.
SELECT TRIM(' Hello '); -- 'Hello'

▪ REPEAT(s,t) : 주어진 문자열 s를 t번 반복한다.
SELECT REPEAT('ha',3); -- 'hahaha'

▪ REPLACE(s,f,t): 주어진 문자열 s에서 f 문자열을 모두 찾아 t로 치환한다
SELECT REPLACE('Hello World', 'Hello', 'Hi'); -- 'Hi World'

▪ REVERSE(s) : 주어진 문자열 `s`의 순서를 뒤집는다.
SELECT REVERSE('Hello'); -- 'olleH'

▪ SUBSTRING(s,f,l): 주어진 문자열 s에서 f번째 문자부터 l개의 문자열을 반환한다
▫ f값은 1부터 시작함에 유의한다
▫ l값은 '까지' 의 의미를 가지는 문자열의 인덱스 번호가 아닌 f번 부터 선택할 문자열의 '개수'임에 유의한다
SELECT SUBSTRING('Hello World', 7, 5); -- 'World'

'Hello'리터럴만 활용하여서, 결론적으로 'Oh Hell'이라는 문자열을 선택(SELECT)하세요.
SELECT CONCAT(
UCASE(RIGHT('Hello', 1)),
LCASE(LEFT('Hello', 1)),
SPACE(1),
LEFT('Hello', 4));
▪SPACE(n): n번만큼의 공백을 반환한다.
SELECT SPACE(3); -- ' '






▪ ABS(n) : 주어진 숫자 `n`의 절댓값을 반환한다.
▪ ROUND(n) 혹은 `ROUND(n, d)` : 주어진 숫자 `n`에 대해 소수점 `d`자리까지 반올림한다. `d`생략시 정수부까지 반올림한다.
▪ TRUNCATE(n) 혹은 `TRUNCATE(n, d)` : 주어진 숫자 `n`에 대해 소수점 `d`자리까지 버린다. `d`생략시 소수부 전체를 버린다.
▪ CEIL(n) 혹은 `CEILING(n)` : 주어진 숫자 `n`에 대해 소수부를 올림한다.
▪ FLOOR(n) : 주어진 숫자 `n`에 대해 소수부를 버린다.
▪ POW(n, t) : 주어진 숫자 `n`의 `t`승을 구한다.

> SELECT POW(2, 10); -- 1024

▪ `SQRT(n)` : 주어진 숫자 `n`의 제곱근을 구한다.
> ```sql
> SELECT SQRT(16); -- 4