MySQL 기초 문법

기본 문법

SET SELECT… FROM … JOIN … (ON) … WHERE… GROUP BY … (HAVING) … ORDER BY … (LIMIT OFFSET)

  • SET

    어떤 변수에 특정 값을 할당하는 것으로 로컬 변수를 활용한 풀이 할 때 사용

    • SET @VAR := 5; : 사용자 정의 변수 선언 및 초기화 (:=은 대입연산자)
    • SET @A := 15, @B := 20;
  • SELECT
    • SELECT COUNT(*): 데이터의 전체 행의 개수 확인
    • SELECT COUNT(NAME): NAME 열에 NULL이 아닌 행의 개수 확인
    • SELECT COUNT(NAME) AS COUNT: 결과물의 열 이름을 COUNT로 설정
    • SELECT DISTINCT NAME: NAME 열에서 중복 데이터 제거 (DISTINCT는 옆에 온 모든 컬럼을 고려함)
    • SELECT COUNT(DISTINCT NAME): NAME 열에서 중복 데이터 제거한 후 개수 세기
    • SELECT (@HOUR := @HOUR +1) AS HOUR, (SELECT COUNT(*) FROM ANIMAL_OUTS WHERE HOUR(DATETIME) = @HOUR) AS COUNT: HOUR 변수의 값을 1씩 증가시키면서 그에 맞는 개수 세기
    • SELECT IFNULL (NAME, “No Name”) AS NAME: NAME열이 NULL인 데이터의 값을 “No Name”으로 변경
    • CASE ~ WHEN ~ THEN ~ ELSE END: WHEN 조건절이 참이면 THEN 절에 있는 내용 출력 아니면 ELSE 절에 있는 내용 출력, 마지막에는 END로 닫아주기 CASE WHEN SEX_UPON_INTAKE LIKE ‘%Neutered%’ OR SEX_UPON_INTAKE LIKE ‘%Spayed%’ THEN ‘O’ ELSE ‘X’ END as ‘중성화’
    • DATE_FORMAT(DATE,형식)을 통해 DATE의 형식을 바꾸기
    • DATE_FORMAT(DATETIME, ‘%Y-%M-%D)는 2014-December-25th DATE_FORMAT(DATETIME, ‘%Y-%m-%d)는 2016-04-02 이런 형식으로 나타냄
    • SELECT TOP 20 PERCENT * FROM CITY ORDER BY AREA DESC
    • SELECT TOP 20 * FROM CITY ORDER BY AREA DESC
    • SELECT * FROM TCIRY ORDER BY AREA DESC LIMIT 3 OFFSET 2: 처음부터 앞의 2개를 건너뛰고 이후 3개의 행을 구한다.
  • ORDER BY
    • ORDER BY ANIMAL_ID DESC: 역순정렬(내림차순)
    • ORDER BY ANIMAL_ID ASC: (오름차순)
    • 여러 조건을 한 줄에 사용 가능 ORDER BY ANIMAL_ID ASC, DATETIME DESC
  • WHERE
    • 특정 조건을 만족하는 자료 찾기 WHERE INTAKE_CONDITION = ‘Sick’
    • 특정 조건을 만족하지 않는 자료 찾기 WHERE INTAKE_CONDITION != ‘Sick’ OR WHERE INTAKE_CONDITION <> ‘Sick’
    • WHERE NAME IS NOT NULL: NULL이 아닌 데이터 찾기
    • WHERE NAME IN (‘Lucy’, ‘Ella’, ‘Pickle’, ‘Rogan’, ‘Sabrina’, ‘Mitty’): IN은 불연속 데이터를 조사할 수 있음. 이름이 다음과 같은 데이터 찾기
    • WHERE NAME LIKE ‘%el%’ AND ANIMAL_TYPE = ‘DOG’: 이름에 EL 이 들어가면서 개인 데이터 찾기
    • WHERE NAME NOT LIKE ‘%el%’
    • WHERE SALE LIKE ‘%30#%’ ESCAPE ‘#’: #를 이스케이프 문자로 지정하고 #다음의 %는 일반 문자로 해석
    • WHERE NAME BETWEEN ‘가’ AND ‘사’: BETWEEN은 연속된 범위만 조사할 수 있음
  • LIMIT

    상위 N개의 데이터 조회하기 위해 사용

    • LIMIT 1: 맨 위에서부터 1개까지의 정보 조회
    • LIMIT 3: 맨 위에서부터 3개까지의 정보 조회
    • LIMIT 2,6: 위에서 2번째 부터 6번째까지의 정보 조회
  • GROUP BY (+ HAVING)

    같은 그룹끼리 묶어서 조회하기

    • GROUP BY ANIMAL_TYPE: ANIMAL_TYPE 별로 데이터 조회
    • GROUP BY DEPART, GENDER: DEPART로 묶고 GENDER로 다시 묶기
    • GROUP BY는 WHERE이 아닌 HAVING과 함께 사용해야 함
    • GROUP BY NAME HAVING COUNT(NAME)>1: 이름이 2번 이상 쓰인 이름을 조회
    • GROUP BY HOUR(DATETIME) HAVING HOUR>=9 AND HOUR<=19: DATETIME의 시간만 추출하여 조회
  • JOIN

    두 테이블의 데이터를 일정한 조건으로 연결하여 하나의 테이블 처럼 만드를 것

    • INNER JOIN: 교집합
    • LEFT OUTER JOIN: 공통적인 부분 + LEFT에 있는 것만
    • RIGHT OUTER JOIN: 공통적인 부분 + RIGHT에 있는 것만
    • LEFT OUTER JOIN + WHERE B.ID IS NULL: A-B
    • RIGHT OUTER JOIN + WHERE A.ID IS NULL: B-A
    • FULL OUTER JOIN: A와 B에 있는 것 모두
    • FULL OUTER JOIN + WHER A.ID IS NULL OR B.ID IS NULL: 교집합을 제외한 모든 부분
  • COUNT 함수
    • SELECT COUNT(*) FROM TSTAFF WHERE SALARY >= 400: 필드에 상관없이 결과의 레코드 개수 구하기
    • SELECT COUNT(NAME) FROM TSTAFF: NAME에 유효한 값이 ㅡㄹ어있는 레코드의 개수 조사
    • SELECT COUNT(*) FROM TSTAFF WHERE SCORE IS NULL
  • 통계값 함수
    • SELECT SUM(POPU), AVG(POPU) FROM TCITY: 인구의 총합과 평균을 구하기
    • MIN
    • MAX
    • STDDEV
    • VARIANCE
  • INSERT
    • INSERT INTO 테이블 VALUES 값목록
    • INSERT INTO TCITY (NAME, AREA, POPU, METRO, REGION) VALUES (‘서울’, 6650, 684, ‘Y’, ‘경기), (‘부산’, 768, 8465, ‘Y’, ‘경상’)
    • INSERT INTO TSTAFF(NAME, DEPART) SELECT NAME, REGION FROM TCITY WEHRE REGION =’ 경기’
  • DELETE
    • DELETE FROM TCITY WHERE REGION=’경기’
    • TRUNCATE TABLE TCITY : ㅌ테이블에 있는 모든 것 다 지우기
  • UPDATE
    • UPDATE TCITY SET POPU=1000, REGION=’충청’ WHERE NAME=’서울’
  • 서브쿼리
    • 서브쿼리는 보통 WEHRE절, SELECT절, FROM절에서 사용한다. FROM 절의 서브쿼리를 특별히 인라인뷰라고 한다. 인라인뷰는 서브쿼리에서 잠시 만들어 쓰고 버리는 테이블이다.
    • SELECT NAME FROM TCITY WHERE POPU=(SELECT MAX(POPU) FROM TCITY)
    • SELECT DELIVERY FROM TCATEGORY WHERE CATEGORY=(SELECT CATEGORY FROM TITEM WHERE ITEM=’청바지’): 데이터가 담긴 테이블이 2개일때
    • SELECT NAME FROM TSTAFF WHERE SALARY > ANY (SELECT SALARY FROM TSTAFF WHERE DEPART =’영업부’)
    • SELECT MEMBER, ADDR FROM (SELECT * FROM TMEMBER WHERE AGE<19) A WHERE A.MONEY >= 10000;
  • UNION
    • UNION은 복수개의 결과셋에 대한 합집합을 생성한다. 중복값은 제거해줌. 중복값 그대로 쓰려면 UNION ALL 사용
    • SELECT * FROM ITEM WHERE CATEGORY =’식품’ UNION SELECT * FROM ITEM WHERE CATEGORY = ‘가전’: 실품과 가전에 해당하는 것만 보여줌
  • INTERSECT
    • INTERSECT는 교집합을 구한다.
    • SELECT * FROM STAFF WHERE DEPART=’영업부’ INTERSECT SELECT NAME FROM TSTAFF WHERE GENDER =’여’:
  • MINUS
    • MINUS는 차집합을 구한다.
    • ELECT * FROM STAFF WHERE DEPART=’영업부’ MINUS SELECT NAME FROM TSTAFF WHERE GENDER =’여’: