TIL 52 | MySQL 데이터 조회

CHAEIN·2021년 8월 27일
0

MySQL

목록 보기
2/8
  • SELECT ~ FROM
  • WHERE
  • LIKE '%'
  • BETWEEN AND
  • IN
  • AND/OR
  • YEAR(), MONTH(), DAYOFMONTH()
  • DATEDIFF(a,b)
  • DATE_ADD(), DATE_SUB()
  • IS NULL
  • ORDER BY
  • CAST(컬럼 As signed)
  • LIMIT

  • USE 데이터베이스이름
    SELECT 컬럼 FROM 테이블이름

    SELECT로 원하는 필드를 지정하면 해당 row 값들을 확인할 수 있다. 만약 모든 컬럼을 확인하고 싶다면 *와일드카드를 사용하면 된다.

    조건절

    WHERE는 데이터 조회에 조건을 걸어준다.

    SELECT * FROM member
    	WHERE name = "김코딩";

    비교연산자

    비교 연산자 =, >, >=, <, <=, (같지 않음) <>, !=, ^= 를 사용하여 조건을 형성할 수 있다. 날짜인 DATE 타입도 비교 연산자로 연산이 가능하다.

    SELECT * FROM member
      WHERE gender <> 'm'

    문자열(키워드)

    시작 키워드, 끝나는 키워드, 또는 키워드 포함 여부에 따라 데이터를 조회할 수도 있다.

    SELECT * FROM member
      WHERE address LIKE '서울%' #서울로 시작하는 모든 문자열
      #'%키워드%' 해당 문자열이 포함되어있는 데이터
      #'%키워드' 해당 문자열로 끝나는 데이터

    문자열 매칭 조건을 쓸 때 _를 사용하면 글자수도 지정할 수 있다.

    SELECT * FROM member
      WHERE email LIKE `c_____@%'
      #c뒤에 다섯글자

    BETWEEN ~ AND ~

    BETWEEN ~ AND ~ 를 사용하면 조건 범위를 지정할 수 있다. 만약 나이가 30에서 39세 사이의 데이터만 조회하고 싶으면 아래와 같이 작성한다.

    SELECT * FROM member
      WHERE age BETWEEN 30 AND 39;
      # age 컬럼 값이 30이상 39이하인 모든 데이터 조회

    NOT 을 붙이면 해당 age가 아닌 데이터만 조회된다.

    SELECT * FROM member
      WHERE age NOT BETWEEN 30 AND 39;

    IN

    BETWEEN AND 구문처럼 연속 된 범위 말고 특정한 값들 중에서 해당하는 값이 있는 row만 추려야할 때는 IN을 사용한다.

    SELECT * FROM member
      WHERE age in (20,30)
      # age 

    논리연산자

    ANDOR을 사용해 조건을 여러개 설정할 수도 있다.

    SELECT * FROM member
      WHERE gender = 'm'
        AND address LIKE '서울%'
        AND age BETWEEN 25 and 29;
    
    #AND와 OR조건을 함께 사용할 때는 괄호로 묶어준다.
    SELECT * FROM member
      WHERE (gender ='m' AND height >= 180)
        OR (gender ='f' AND height >= 170);

    AND와 OR 조건을 쓸때에는 아래와 같이 쓰지 않도록 유의한다.

    SELECT * FROM member
    	WHERE id =2 or 3; // 틀린 표현
    
    SELECT * FROM member
    	WHERE id IN (2,3) // 올바른 표현
    
    SELECT * FROM member
    	WHERE id =2 or id = 3; // 올바른 표현

    DATE 타입

    날짜를 나타내는 DATE 타입도 조건으로 나타낼 수 있다.

    SELECT * FROM member
      WHERE sign_up_day > '2019-01-01' #2019/1/1 이후 날짜

    DATE 타입은 YEAR(), MONTH(), DAYOFMONTH() 함수를 이용해 연도, 월, 일을 추출할 수 있다.

    SELECT * FROM member
      WHERE YEAR(birthday) = '1992' #연도가 1992인 row 조회
    
    SELECT * FROM member
      WHERE MONTH(birthday) IN (6,7,8) #월이 6월, 7월, 8월인 row 조회
    
    SELECT * FROM member
      WHERE DAYOFMONTH(birthday) BETWEEN 15 AND 31 #15일에서 31일 사이인 row 조회

    DATEDIFF(a,b) 주어진 날짜간 차이도 계산 가능하다

    SELECT birthday, DATEDIFF(CURDATE(), birthday) FROM member
    #CURDATE()는 오늘 날짜를 구하는 함수이다.
    #birthday에서 오늘까지 몇일이나 지났는지를 카운트 해서 알려준다.

    DATE_ADD(), DATE_SUB() 함수를 이용해 주어진 날짜에 더하고 빼는 것도 가능하다.

    SELECT birthday, DATE_ADD(birthday,INTERVAL 300 DAY) FROM member
    #생일에서 300일 지난 값
    
    SELECT birthday, DATE_SUB(birthday,INTERVAL 300 DAY) FROM member
    #생일에서 300일 이전 값

    NULL

    조건절에 null을 사용할 때에는 비교연산자 대신 is 또는 is not을 사용한다.

    SELECT *
    FROM 테이블_이름
    WHERE 특성_1 IS NULL

    정렬

    ORDER BY 를 사용하면 데이터를 정렬할 수 있다.

    SELECT * FROM member
      ORDER BY height;
      #오름차순이 디폴트, 내침차순은 컬럼 뒤에 DESC를 추가한다.

    정렬기준은 여러개를 넣을 수 있다. 작성 순서에 따라 우선순위가 부여된다.

    SELECT * FROM member
      ORDER BY YEAR(sign_up_day) DESC, email ASC;
      #sign_up_day기준으로 먼저 정렬하고 중복값이 있으면 email로 정렬한다.

    만약 조건절과 정렬을 함께 사용할 때에는 조건절이 무조건 정렬보다 앞에 와야한다.

    SELECT * FROM member
      WHERE gender = 'm'
      ORDER BY height

    정렬을 할 때 숫자는 숫자 크기 대로 정렬되지만 데이터 타입이 문자인 숫자의 경우 자리수 별로 비교하여 정렬한다 예를들어 문자인 숫자 19,120,230을 오름차순 정렬 하면 120 > 19 > 230 처럼 정렬된다. 텍스트 타입을 숫자형 데이터처럼 오름차순 하고 싶다면 CAST(컬럼 As signed)라는 함수를 사용한다. signed는 양수와 음수를 포함한 모든 정수를 나타내는 데이터 타입이다.

    SELECT * FROM member
      ORDER BY CAST(height As signed)

    데이터 추출 개수 설정

    limit을 이용해 데이터 일부만 추려볼 수도 있다.

    SELECT * FROM member
      ORDER BY sign_up_day DESC
      LIMIT 10 # 10개만 추려보기
      # 시작점을 정하고 싶을 땐 시작점과 보여줄 개수를 기입하면 된다.
      # LIMIT 시작점, 보여줄개수 => LIMIT 8, 2 (8번째부터 2개만 보여줘라)
      # ROW는 0번째부터 시작한다.

    0개의 댓글