MySQL 문법 정리

권하준·2024년 5월 9일
1

이것저것

목록 보기
2/4

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 '#%%';

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)
profile
자바 BE 개발자 지망생입니다.

0개의 댓글