Class03(레코드 및 연산자)
2023. 01. 27. 수업내용 정리
레코드.. 연산자..
레코드
- 레코드(Record)는 테이블에 소속된 실제 데이터를 의미한다.
- 레코드 하나는 하나의 행을 의미한다.
삽입하기
- 테이블에 리코드를 추가하는 것을 삽입(Insert)이라고 한다.
INSERT INTO `스키마`.`테이블` ([`대상 열`,...]) VALUES (값,...);- 위 쿼리에서 콤마로 구분한 한 개 이상의 대상 열의 순서에 맞게 콤마로 구분한 값 한 개 이상이 순서에 맞게 쌍을 이뤄야한다.
- 하나의
INSERT쿼리로 여러 레코드를 한 번에 삽입하기 위해 아래와 같이 콤마로 구분하여 값 세토(SET)를 여러개 작성할 수 있다.INSERT INTO `스키마`.`테이블` ([`대상 열`,...]) VALUES (값,...), (값,...), (값,...), ...;
조회하기
- 테이블에 존재하는 레코드를 조회(선택)하기 위해 아래와 같이 명령한다.
SELECT [ALL | DISTINCT]? `열 이름,...` FROM `스키마`.`테이블` [JOIN] [WHERE [조건]]?, [GROUP BY `통계 취합 기준 열`,... [HAVING [통계에 의한 각 결과의 조건]]?]? [ORDER BY `정렬 기준 열`,... [ASC|DESC]?]? LIMIT [레코드 개수]?;- 조회하고자 하는 열 이름을 명시하지 않고 전체 열을 순서대로 조회하기 위해 열 이름 대신
*로 대신할 수 있다. (실무에선 잘 안 씀) WHERE: 레코드를 선택하는 기준을 주기위해 사용한다. 기술된 조건에 부합하는 레코드만 선택된다.GROUP BY: 통계 함수(가령COUNT(),AVG()등)를 사용할 때 묶어낼 레코드를 묶어낼 때 참고할 값을 가지는 기준 열을 나열한다.GROUP BY없이 통계 함수를 사용할 경우SELECT에 의해 선택되는 레코드 전체를 통계 대상으로 한다.ORDER BY: 레코드 선택 결과를 후행하는정렬 기준 열이 가지는 값에 따라 정렬하고자 할 때 사용한다. 생략시 기본키(Primary Key)가 있다면 기본키 기준 오름차순 정렬을, 없다면 삽입한 순서대로 선택된다.ASC: 오름차순 정렬(Ascending, 생략 시 기본 값)DESC: 내림차순 정렬(Descending)LIMIT: 선택할 레코드의 개수를 제한한다. 생략시 선택 결과를 제한하지 않고 전체 결과를 반환한다.
- 조회하고자 하는 열 이름을 명시하지 않고 전체 열을 순서대로 조회하기 위해 열 이름 대신
## Join
JOIN은SELECT를 하고 있는 대상 테이블이 가지고 있지 않은 데이터를 다른 테이블에서 가져오기위해 사용한다.- 주로 외래 키 관계인 것들 간에
JOIN을 하지만, 반드시 그렇게 해야하지는 않다. JOIN을 위한 구조는 아래와 같다.[LEFT|RIGHT|INNER] JOIN `대상 스키마`.`대상 테이블` ON [JOIN 조건]LEFT JOIN혹은LEFT OUTER JOIN:JOIN키워드를 대상으로 왼쪽(SELECT대상인 테이블)이 가지는 데이터를 기준으로 한다.RIGHT JOIN혹은RIGHT OUTER JOIN:JOIN키워드를 대상으로 오른쪽(JOIN대상인 테이블)이 가지는 데이터를 기준으로 한다.INNER JOIN:SELECT대상인 테이블과JOIN대상인 테이블이 모두 가지고 있는 데이터를 기준으로 한다.CROSS JOIN: 생략Full Outer Join: MariaDB는 Full Outer Join을 지원하지 않음으로 두SELECT결과를UNION하여 결합한다.
## Union
UNION은 열의 개수가 같은 두SELECT의 결과를 하나로 합치기 위해 사용한다. 두SELECT가 가지는 열의 개수가 상이할때에는 사용할 수 없음으로 유의한다.
## Sub Query
- 서브쿼리(Sub Query)는 현재
SELECT하고 있는 열로써 새로운SELECT를 하기위해 사용한다. - 서브쿼리의 결과는 반드시 한 개의 열을 가지고 있어야 한다.
- 사용하기는 편리하지만
JOIN보다 속도가 느림으로 불가피한 상황이 아니면 사용하지 않는다.
수정하기
- 레코드를 수정하기 위해 아래와 같이 명령한다.
UPDATE `스키마`.`테이블` SET [`값을 변경할 열 이름` = [새로운 값]],...위 명령어는 해당 테이블의 모든 레코드의 열 값을 수정하겠다는 의미임으로 임의로 안전 장치를 해제하지 않는 이상 실행되지 않는다. 아래와 같이 수정하고자 하는 레코드를 특정지을 수 있는 별도의 조건을 부여해야만 한다.
UPDATE `스키마`.`테이블` SET[`값을 변경할 열 이름` = [새로운 값]],...조건에 부합하는 레코드 중 수정될 레코드의 개수를 아래와 같이
LIMIT키워드를 이용하여 제한할 수 있다.UPDATE `스키마`.`테이블` SET [`값을 변경할 열 이름` = [새로운 값]],... WHERE [조건] LIMIT [개수];
삭제하기
- 레코드를 삭제하기 위해 아래와 같이 명령한다.
DELETE FROM `스키마`.`테이블 이름`;위 명령어는 해당 테이블의 모든 레코드를 삭제하겠다는 의미임으로 임의로 안전 장치를 해제하지 않는 이상 실행되지 않는다. 아래와 같이 삭제하고자 하는 레코드를 특정지을 수 있는 별도의 조건을 부여해야만 한다.
DELTE FROM `스키마`. `테이블` WHERE [조건];조건에 부합하는 레코드 중 삭제될 레코드의 개수를
LIMIT키워드를 이용하여 아래와 같이 제한할 수 있다.DELETE FROM `스키마`,`테이블` WHERE [조건] LIMIT [개수];
# 연산자
비교 연산자
=:a = b끝에서a와b가 같은가의 여부이다.- 단,
=비교는 대소문자 구분을 하지 않기 때문에 비교 대상 두 개 중 하나 이상에BINARY키워드를 선행하게 하여 비교해야한다. 가령BINARY a = BINARY b.
- 단,
!=혹은<>:a != b혹은a <> b꼴에서a와b가 다른가의 여부이다.>:a > b꼴에서a가b보다 큰가에 대한 여부이다.<:a < b꼴에서a가b보다 작은가에 대한 여부이다.>=:a >= b꼴에서a가b이상인가에 대한 여부이다.<=:a <= b꼴에서a가b이하인가에 대한 여부이다.
논리 연산자
&&혹은AND:a && b혹은a AND b꼴에서a와b가 모두 참인가에 대한 여부이다.||혹은OR:a || b혹은a OR b꼴에서a,b중 하나가 참인가에 대한 여부이다.
사칙 연산자
+:a + b꼴에서a와b의 합이다.-:a - b꼴에서a에서b를 뺀 값이다.*:a * b꼴에서a와b를 곱한 값이다./:a / b꼴에서a를b로 나눈 값이다.%혹은MOD:a % b혹은a MOD b꼴에서a를b로 정수부까지 나눈 나머지이다.
기타 연산자
IN:a IN (b, ...)꼴에서a가 후행하는 값들의 나열에 포함되는가의 여부를 반환한다. 가령,1 IN (1, 2, 3)은TRUE이다.NOT IN:a NOT IN (b,....)꼴에서a가 후행하는 값들의 나열에 포함되지 않는가의 여부를 반환한다.BETWEEN ... AND ...:a BETWEEN b AND c꼴에서a가b이상,c이하인가의 여부를 반환한다. 가령,1 BETWEEN 1 AND 3은TRUE이다.NOT BETWEEN ... AND ...:a NOT BETWEEN b AND c꼴에서a가b이상,c이하의 범위 내에 있지 않은가의 여부이다.IS NULL:a IS NULL꼴에서a가NULL인가의 여부이다.IS NOT NULL:a IS NOT NULL꼴에서a가NULL이 아닌가의 여부이다.LIKE:a LIKE b꼴에서a가b의 패턴에 부합하는가의 여부이다.- 패턴에서
%는 0개 이상의 아무 문자이다. - 패턴에서
_는 1개 이상의 아무 문자이다.
- 패턴에서
NOT LIKE:a NOT LIKE b꼴에서a가b의 패턴에 부합하지 않는가의 여부이다.REGEXP:a REGEXP b꼴에서a가b의 정규 표현식(Regular Expression)을 만족하는가의 여부이다.NOT REGEXP:a NOT REGEXP b꼴에서a가b의 정규 표현식(Regular Expression)을 만족하지 않는가의 여부이다.
댓글남기기