SQL 연습하면서 사용한 문법 정리
공부하면서 새로운 문법 발견하면 계속 업데이트 예정
✨ 테이블 관련
DROP TABLE <테이블명>;
- 테이블 제거
✨ 데이터 조작 관련(Insert, Update, Delete)
INSERT INTO (테이블명)(저장할 필드 목록) VALUES (저장할 값 목록)
- 테이블에 레코드 저장
- ex: INSERT INTO TABLE(NAME, AGE) VALUES ('hajun', 25);
UPDATE (테이블명) SET (수정할필드)=(수정할 값), ...
- 레코드 값 수정
- ex: UPDATE TABLE SET AGE=10 WHERT NAME='hajun';
DELETE FROM (테이블명) WHERE (조건)
- 레코드 제거
- ex: DELETE FROM TABLE WHERE AGE<20
✨ 데이터 조회 관련(Select)
SELECT (필드명) FROM (테이블명)
특정 테이블에서 특정 필드 출력
- 여러 필드 출력할 때는
,
사용- EX: SELECT NAME, AGE FROM TABLE
- 모든 필드 출력할 때는
*
사용 - 만약 보여지는 컬럼 명을 변경하고 싶으면
AS
키워드 사용- EX: SELECT NAME AS N FROM TABLE;
- 조건절 안에서도 사용 가능
- EX: SELECT NAME FROM TABLE WHERE AGE = (SELECT MAX(AGE) FROM TABLE) ;
WHERE (조건)
(조건)을 만족하는 레코드만 선택
- ex: SELECT NAME FROM TABLE WHERE AGE > 7
- 관계 연산자 사용 가능
- 두 변수가 같은지 비교할때는
=
한번만- ex: SELECT NAME FROM TABLE WHERE AGE = 5
NULL
관련 조건문 사용시IS
,NOT
,NULL
등 사용 가능- ex: SELECT NAME FROM TABLE WHERE AGE IS NOT NULL
ORDER BY (필드명)
(필드명) 기준으로 정렬
- ex: SELECT * FROM TABLE ORDER BY AGE
- 기본은 오름차순 정렬
ORDER BY ~~ ASC
: 오름차순 정렬ORDER BY ~~ DESC
: 내림차순 정렬
- 정렬 기준 여러개일 때는
,
사용- 만약 두개 오름차순, 내림차순 다르면 각각 기록
- ex: SELECT NAME FROM TABLE ORDER BY AGE ASC, NAME DEST
- 만약 두개 오름차순, 내림차순 다르면 각각 기록
LIMIT 갯수/ LIMIT offset, 갯수
특정 갯수만 출력
- LIMIT 다음 숫자가 하나: 특정 갯수만 출력
- ex: SELECT * FROM TABLE ORDER BY AGE LIMIT 1
- LIMIT 다음 숫자가 두개: (offset)에서부터 특정 갯수 출력
- ex: SELECT * FROM TABLE ORDER BY AGE LIMIT 3, 5
DISTINCT 필드명
중복되는 필드값들 제거
- EX: SELECT DISTINCT NAME FROM TABLE;
CASE WHEN 조건 THEN 반환값 ELSE 반환값 END
조건적으로 데이터 조회
-EX: SELECT CASE WHEN AGE<20 THEN '미성년자' ELSE '성인' END FROM TABLE;
JOIN ~ ON
두개의 테이블을 함께 출력
EX: SELECT * FROM TABLE1 JOIN TABLE2 ON TABLE1.ID=TABLE2.ID;
- 각 테이블은
AS
를 사용해 별칭으로 표현 가능- ex: SELECT * FROM TABLE1 AS T1 JOIN TABLE2 AS T2 ON T1.ID=T2.ID
CONVERT(변경할 값, 변경할 타입/길이)
특정 값을 다른 타입으로 변경
- EX: SELECT * FROM TABLE WHERE CONVERT(AGE, CHAR)='20' ;
✨ GROUP BY 관련(집계)
GROUP BY 필드명
중복되는 필드를 가진 항목끼리 그룹으로 묶어서 처리
- EX: SELECT COUNT(NAME) FROM TABLE GROUP BY NAME;
- SELECT 절에서는 GROUP안에 정의된 필드만 사용 가능
- 다른 필드를 출력해도 에러가 나지는 않지만, 의미 없는 값이 출력됨(여러 레코드중 하나의 필드값만 출력)
- 만약 다른 필드 값을 출력하려면 ***집계 함수***를 사용해야 함
WHERE 조건/ HAVING 조건
조건에 부합하는 필드만 선택
- EX: SELECT COUNT(NAME) FROM TABLE WHERE AGE>20 GROUP BY NAME HAVING COUNT(NAME)>2 ;
- WHERE절은 GROUP되기 전, HIVING 절은 GROUP된 후 처리됨
- 위의 예시에서는, AGE가 20 이상인 값들만 GROUP으로 묶어 집계, 집계된 값 중 중복되는 이름이 2개 이상인 것들만 출력
COUNT 필드명
각 그룹별 레코드 갯수 출력
EX: SELECT COUNT(NAME) FROM TABLE GROUP BY NAME;
✨ 날짜/시간 관련
DATE_FORMAT(DATE 필드, 출력형식)
DATE, DATETIME 필드를 원하는 형식으로 출력
- EX: SELECT DATE_FORMAT(DATE, '%Y-%m-%d);
- => 2020-01-15
- 형식을 나타낼 때는 문자열 안에 %기호와 함께 표현
- %Y: 년도(2024)
- %y: 년도(24)
- %M: 월(JANUARY)
- %m: 월(01)
- %w: 요일(MONDAY)
- %d: 날짜(15)
- %H: 시간(24시간 형식)
- %l: 시간(12시간 형식)
- 그 외 등등
DATEDIFF(날짜1, 날짜2)
두 날짜 사이의 기간(DAY) 리턴
- EX: SELET DATEDIFF('2024-05-24', '2024-05-29) FROM TABLE;
✨ 연산 관련
MAX(필드명)/MIN(필드명)
해당 필드의 최대값/최소값 출력
- ex: SELECT MAX(AGE) FROM TABLE;
- => 30
- DATE 필드 등에도 사용 가능
COUNT(필드)
검색하려는 필드의 총 개수를 출력
- EX: SELECT COUNT()* FROM TABLE WHERE AGE >= 20;
AVG(필드)
검색하려는 필드의 평균값을 출력
- EX: SELECT AVG(AGE) FROM TABLE;
ROUND(소수값, 반올림하여 얻을 자릿수)
소수값을 반올림
- EX: SELECT ROUND(3.141592, 2);
=> 3.14
<나눠지는 값> DIV <나눈 값>
나머지 연산의 몫만 반환
- EX: SELECT 14 DIV 3;
- 4
✨ 문자열 관련
SUBSTRING(문자열, 위치, 길이)
- 문자열의 일부분 추출
- EX: SELECT SUBSTRING(NAME, 1,3) FROM TABLE;
- 위치 인덱스는 1부터 시작
WHERE ~ LIKE ~
문자열 검색시 특정 문자열 검색은 LIKE
와 %
활용
- EX: ABC로 시작하는 레코드 검색
- WHERE NAME LIKE 'ABC%';
- EX: ABC가 포함되는 레코드 검색
- WHERE NAME LIKE '%ABC%';
- 문자열에 %기호가 포함되는 경우 #을 붙임
- EX: '%로 시작하는 레코드 검색
- WHERE NAME LIKE '#%%';
- EX: '%로 시작하는 레코드 검색
CONCAT(붙일 문자열1, 붙일 문자열2)
문자열 붙이기
- EX: SELECT CONCAT(AGE, '살입니다.') FROM TABLE;
✨ NULL 처리 관련
IFNULL(<필드명>, <NULL일 경우 대체 값>
조회하려는 데이터가 NULL일 경우 대체
- ex: SELECT NAME, IFNULL(AGE, '모름') FROM TABLE;
ISNULL(필드명)
해당 필드가 NULL 인지 체크(BOOL 반환)
- EX: SELECT COUNT(_) FROM TABLE WHERE **_ISNULL(NAME)***
'DB' 카테고리의 다른 글
[DB, Index] B-Tree 인덱스 사용하여, 쿼리 수행 속도 비교해보자 (0) | 2025.01.23 |
---|
SQL 연습하면서 사용한 문법 정리
공부하면서 새로운 문법 발견하면 계속 업데이트 예정
✨ 테이블 관련
DROP TABLE <테이블명>;
- 테이블 제거
✨ 데이터 조작 관련(Insert, Update, Delete)
INSERT INTO (테이블명)(저장할 필드 목록) VALUES (저장할 값 목록)
- 테이블에 레코드 저장
- ex: INSERT INTO TABLE(NAME, AGE) VALUES ('hajun', 25);
UPDATE (테이블명) SET (수정할필드)=(수정할 값), ...
- 레코드 값 수정
- ex: UPDATE TABLE SET AGE=10 WHERT NAME='hajun';
DELETE FROM (테이블명) WHERE (조건)
- 레코드 제거
- ex: DELETE FROM TABLE WHERE AGE<20
✨ 데이터 조회 관련(Select)
SELECT (필드명) FROM (테이블명)
특정 테이블에서 특정 필드 출력
- 여러 필드 출력할 때는
,
사용- EX: SELECT NAME, AGE FROM TABLE
- 모든 필드 출력할 때는
*
사용 - 만약 보여지는 컬럼 명을 변경하고 싶으면
AS
키워드 사용- EX: SELECT NAME AS N FROM TABLE;
- 조건절 안에서도 사용 가능
- EX: SELECT NAME FROM TABLE WHERE AGE = (SELECT MAX(AGE) FROM TABLE) ;
WHERE (조건)
(조건)을 만족하는 레코드만 선택
- ex: SELECT NAME FROM TABLE WHERE AGE > 7
- 관계 연산자 사용 가능
- 두 변수가 같은지 비교할때는
=
한번만- ex: SELECT NAME FROM TABLE WHERE AGE = 5
NULL
관련 조건문 사용시IS
,NOT
,NULL
등 사용 가능- ex: SELECT NAME FROM TABLE WHERE AGE IS NOT NULL
ORDER BY (필드명)
(필드명) 기준으로 정렬
- ex: SELECT * FROM TABLE ORDER BY AGE
- 기본은 오름차순 정렬
ORDER BY ~~ ASC
: 오름차순 정렬ORDER BY ~~ DESC
: 내림차순 정렬
- 정렬 기준 여러개일 때는
,
사용- 만약 두개 오름차순, 내림차순 다르면 각각 기록
- ex: SELECT NAME FROM TABLE ORDER BY AGE ASC, NAME DEST
- 만약 두개 오름차순, 내림차순 다르면 각각 기록
LIMIT 갯수/ LIMIT offset, 갯수
특정 갯수만 출력
- LIMIT 다음 숫자가 하나: 특정 갯수만 출력
- ex: SELECT * FROM TABLE ORDER BY AGE LIMIT 1
- LIMIT 다음 숫자가 두개: (offset)에서부터 특정 갯수 출력
- ex: SELECT * FROM TABLE ORDER BY AGE LIMIT 3, 5
DISTINCT 필드명
중복되는 필드값들 제거
- EX: SELECT DISTINCT NAME FROM TABLE;
CASE WHEN 조건 THEN 반환값 ELSE 반환값 END
조건적으로 데이터 조회
-EX: SELECT CASE WHEN AGE<20 THEN '미성년자' ELSE '성인' END FROM TABLE;
JOIN ~ ON
두개의 테이블을 함께 출력
EX: SELECT * FROM TABLE1 JOIN TABLE2 ON TABLE1.ID=TABLE2.ID;
- 각 테이블은
AS
를 사용해 별칭으로 표현 가능- ex: SELECT * FROM TABLE1 AS T1 JOIN TABLE2 AS T2 ON T1.ID=T2.ID
CONVERT(변경할 값, 변경할 타입/길이)
특정 값을 다른 타입으로 변경
- EX: SELECT * FROM TABLE WHERE CONVERT(AGE, CHAR)='20' ;
✨ GROUP BY 관련(집계)
GROUP BY 필드명
중복되는 필드를 가진 항목끼리 그룹으로 묶어서 처리
- EX: SELECT COUNT(NAME) FROM TABLE GROUP BY NAME;
- SELECT 절에서는 GROUP안에 정의된 필드만 사용 가능
- 다른 필드를 출력해도 에러가 나지는 않지만, 의미 없는 값이 출력됨(여러 레코드중 하나의 필드값만 출력)
- 만약 다른 필드 값을 출력하려면 ***집계 함수***를 사용해야 함
WHERE 조건/ HAVING 조건
조건에 부합하는 필드만 선택
- EX: SELECT COUNT(NAME) FROM TABLE WHERE AGE>20 GROUP BY NAME HAVING COUNT(NAME)>2 ;
- WHERE절은 GROUP되기 전, HIVING 절은 GROUP된 후 처리됨
- 위의 예시에서는, AGE가 20 이상인 값들만 GROUP으로 묶어 집계, 집계된 값 중 중복되는 이름이 2개 이상인 것들만 출력
COUNT 필드명
각 그룹별 레코드 갯수 출력
EX: SELECT COUNT(NAME) FROM TABLE GROUP BY NAME;
✨ 날짜/시간 관련
DATE_FORMAT(DATE 필드, 출력형식)
DATE, DATETIME 필드를 원하는 형식으로 출력
- EX: SELECT DATE_FORMAT(DATE, '%Y-%m-%d);
- => 2020-01-15
- 형식을 나타낼 때는 문자열 안에 %기호와 함께 표현
- %Y: 년도(2024)
- %y: 년도(24)
- %M: 월(JANUARY)
- %m: 월(01)
- %w: 요일(MONDAY)
- %d: 날짜(15)
- %H: 시간(24시간 형식)
- %l: 시간(12시간 형식)
- 그 외 등등
DATEDIFF(날짜1, 날짜2)
두 날짜 사이의 기간(DAY) 리턴
- EX: SELET DATEDIFF('2024-05-24', '2024-05-29) FROM TABLE;
✨ 연산 관련
MAX(필드명)/MIN(필드명)
해당 필드의 최대값/최소값 출력
- ex: SELECT MAX(AGE) FROM TABLE;
- => 30
- DATE 필드 등에도 사용 가능
COUNT(필드)
검색하려는 필드의 총 개수를 출력
- EX: SELECT COUNT()* FROM TABLE WHERE AGE >= 20;
AVG(필드)
검색하려는 필드의 평균값을 출력
- EX: SELECT AVG(AGE) FROM TABLE;
ROUND(소수값, 반올림하여 얻을 자릿수)
소수값을 반올림
- EX: SELECT ROUND(3.141592, 2);
=> 3.14
<나눠지는 값> DIV <나눈 값>
나머지 연산의 몫만 반환
- EX: SELECT 14 DIV 3;
- 4
✨ 문자열 관련
SUBSTRING(문자열, 위치, 길이)
- 문자열의 일부분 추출
- EX: SELECT SUBSTRING(NAME, 1,3) FROM TABLE;
- 위치 인덱스는 1부터 시작
WHERE ~ LIKE ~
문자열 검색시 특정 문자열 검색은 LIKE
와 %
활용
- EX: ABC로 시작하는 레코드 검색
- WHERE NAME LIKE 'ABC%';
- EX: ABC가 포함되는 레코드 검색
- WHERE NAME LIKE '%ABC%';
- 문자열에 %기호가 포함되는 경우 #을 붙임
- EX: '%로 시작하는 레코드 검색
- WHERE NAME LIKE '#%%';
- EX: '%로 시작하는 레코드 검색
CONCAT(붙일 문자열1, 붙일 문자열2)
문자열 붙이기
- EX: SELECT CONCAT(AGE, '살입니다.') FROM TABLE;
✨ NULL 처리 관련
IFNULL(<필드명>, <NULL일 경우 대체 값>
조회하려는 데이터가 NULL일 경우 대체
- ex: SELECT NAME, IFNULL(AGE, '모름') FROM TABLE;
ISNULL(필드명)
해당 필드가 NULL 인지 체크(BOOL 반환)
- EX: SELECT COUNT(_) FROM TABLE WHERE **_ISNULL(NAME)***
'DB' 카테고리의 다른 글
[DB, Index] B-Tree 인덱스 사용하여, 쿼리 수행 속도 비교해보자 (0) | 2025.01.23 |
---|