[큐드잇 2주차] SQL 기본

SELECT와 WHERE

select * from member;
    • → 보고 싶은 컬럼명
  • member → 테이블 명
select * from member where email = 'codeit@naver.com';

→ 멤버 테이블에서 해당 이메일을 가진 로우에 모든 컬럼을 조회해줘

SQL 작성 형식

  1. SQL 문 끝에는 항상 세미콜론을 써줘야한다.
  2. SQL 문 안에는 공백이나 개행 등을 자유롭게 넣을 수 있다.
  3. SQL 문의 대소문자 구분 문자
    1. 예약어들은 대문자로, 나머지 부분을 소문자로 쓴다.
  4. 데이터베이스 이름과 테이블 이름
    1. 데이터베이스.테이블

조건을 나타내는 다양한 방법

SELECT * FROM copang_main.member WHERE age BETWEEN 30 AND 39;

→ 나이가 30~39 사이인 로우만 조회

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

→ 나이가 30~39 사이인 로우만 빼고 조회

SELECT * FROM copang_main.member WHERE sign_up_day > '2019-01-01';

→ 2019-01-01 이후로 가입한 사람만 조회

SELECT * FROM copang_main.member WHERE sign_up_day BETWEEN '2019-01-01' AND '2019-12-31';

→ 2019에 가입한 사람만 조회

DATE 타입에도 똑같이 효과가 먹는다

문자열 패턴 매칭 조건

SELECT * FROM copang_main.member WHERE address LIKE '서울%';

→ 주소가 “서울 ~” 인사람을 조회하라

조건 표현식

  1. 같지 않음 (!=, <>)
  2. 이 중에 있는 ~ (IN)
    1. SELECT * FROM copang_main.member WHERE age IN(20 ,30);
    2. 20이나 30이여야 한다.
  3. 한 글자를 나타내는 _
    1. %는 여러 글자, _는 한 글자

DATE 데이터 타입 관련 함수

  1. 연도, 월, 일 추출하기
    1. SELECT * FROM copang_main.member WHERE YEAR(birthday) = '1992';
    2. SELECT * FROM copang_main.member WHERE YEAR(birthday) IN (6, 7, 8);
    3. SELECT * FROM copang_main.member WHERE DAYOFMONTH(birthday) BETWEEN 15 AND 31;
  2. 날짜 간의 차이 구하기
    1. 오늘 날짜를 구하는 함수 → CURDATE()
    2. DATEDIFF(’2018-01-05’, ’2018-01-03’) → 2
  3. 날짜 더하기 빼기
    1. DATE_ADD() → 날짜 형식으로 반환
    2. DATE_SUB() → 날짜 형식으로 반환
    3. DATE_ADD(sign_up_day, INTERVAL 300 DAY) → 300일 더해서 반환
  4. UNIX Timestamp
    1. 특정 날짜의 특정 시간을, 1970년 1월 1일 기준으로, 총 몇 초가 지났는지 나타낸 값

여러개의 조건 걸기

AND

SELECT * FROM copang_main.member
WHERE gender = 'm'
	AND address LIKE '서울%';

→ 서울에 살면서 성별이 남자인 사람만 조회

OR

SELECT * FROM copang_main.member
WHERE MONTH(sign_up_day) BETWEEN 3 AND 5
	OR MONTH(sign_up_day) BETWEEN 9 AND 11;

→ 봄이나 가을에 가입한 회원만 조회

SELECT * FROM copang_main.member
WHERE (gender = 'm' AND height >= 180)
	OR (gender = 'f' AND height >= 170);

→ 먼저 해야하는 조건을 괄호로 감싸자!

여러 조건을 걸 때 주의할 점

  1. OR을 사용할 때의 주의사항
    1. SELECT * FROM copang_main.member WHERE id = 1 or id = 2
      1. id가 1이나 2인 행만 출력
    2. SELECT * FROM copang_main.member WHERE id = 1 or 2
      1. 2가 무조건 true이기 때문에 모든 행 출력
  2. AND와 OR 간의 우선순위
    1. 괄호를 잘치자!

문자열 패턴 매칭 조건 주의점!

  1. 이스케이핑
    1. LIKE 뒤에 사용되는 문자 (%, “, ‘, _) 같은 걸 사용하려면 \를 사용하고 해야한다.
  2. 대소문자 구분
    1. BINARY를 앞에 사용하면 된다.
    2. LIKE BINARY ‘%g%’

데이터 정렬

오름차순 정렬

SELECT * FROM copang_main.member
ORDER BY height (ASC);

내림차순 정렬

SELECT * FROM copang_main.member
ORDER BY height (DESC);

WHERE + ORDER BY

SELECT * FROM copang_main.member
WHERE gender = 'm'
	AND weight >= 70
ORDER BY height ASC;

여러 컬럼으로 정렬

전체 회원중에 년도순으로 내림차순 정렬하고 년도가 같으면 이메일 순으로 오름차순 정렬

SELECT * FROM copang_main.member
ORDER BY YEAR(sign_up_day) DESC, email ASC;

문자열 형 데이터 정렬

INT 일때

TEXT 일때

데이터 일부만 추려보기

SELECT * FROM copang_main.member
ORDER BY sign_up_day DESC
LIMIT 10;

→ 위에 나오는 10개의 로우만 보여줘

SELECT * FROM copang_main.member
ORDER BY sign_up_day DESC
LIMIT 8, 2;

→ 8번째 로우부터 2개의 로우를 보여줘

→ 로우는 0번부터 시작

순서

WHERE → ORDER BY → LIMIT

데이터 변환

CAST('[변환하고자 하는 데이터]' AS [데이터형식])

ex)

CAST('20' AS INT) → 문자를 숫자로

CAST(1234 AS CHAR(10)) → 숫자를 문자로

SELECT와 WHERE

select * from member;
    • → 보고 싶은 컬럼명
  • member → 테이블 명
select * from member where email = 'codeit@naver.com';

→ 멤버 테이블에서 해당 이메일을 가진 로우에 모든 컬럼을 조회해줘

SQL 작성 형식

  1. SQL 문 끝에는 항상 세미콜론을 써줘야한다.
  2. SQL 문 안에는 공백이나 개행 등을 자유롭게 넣을 수 있다.
  3. SQL 문의 대소문자 구분 문자
    1. 예약어들은 대문자로, 나머지 부분을 소문자로 쓴다.
  4. 데이터베이스 이름과 테이블 이름
    1. 데이터베이스.테이블

조건을 나타내는 다양한 방법

SELECT * FROM copang_main.member WHERE age BETWEEN 30 AND 39;

→ 나이가 30~39 사이인 로우만 조회

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

→ 나이가 30~39 사이인 로우만 빼고 조회

SELECT * FROM copang_main.member WHERE sign_up_day > '2019-01-01';

→ 2019-01-01 이후로 가입한 사람만 조회

SELECT * FROM copang_main.member WHERE sign_up_day BETWEEN '2019-01-01' AND '2019-12-31';

→ 2019에 가입한 사람만 조회

DATE 타입에도 똑같이 효과가 먹는다

문자열 패턴 매칭 조건

SELECT * FROM copang_main.member WHERE address LIKE '서울%';

→ 주소가 “서울 ~” 인사람을 조회하라

조건 표현식

  1. 같지 않음 (!=, <>)
  2. 이 중에 있는 ~ (IN)
    1. SELECT * FROM copang_main.member WHERE age IN(20 ,30);
    2. 20이나 30이여야 한다.
  3. 한 글자를 나타내는 _
    1. %는 여러 글자, _는 한 글자

DATE 데이터 타입 관련 함수

  1. 연도, 월, 일 추출하기
    1. SELECT * FROM copang_main.member WHERE YEAR(birthday) = '1992';
    2. SELECT * FROM copang_main.member WHERE YEAR(birthday) IN (6, 7, 8);
    3. SELECT * FROM copang_main.member WHERE DAYOFMONTH(birthday) BETWEEN 15 AND 31;
  2. 날짜 간의 차이 구하기
    1. 오늘 날짜를 구하는 함수 → CURDATE()
    2. DATEDIFF(’2018-01-05’, ’2018-01-03’) → 2
  3. 날짜 더하기 빼기
    1. DATE_ADD() → 날짜 형식으로 반환
    2. DATE_SUB() → 날짜 형식으로 반환
    3. DATE_ADD(sign_up_day, INTERVAL 300 DAY) → 300일 더해서 반환
  4. UNIX Timestamp
    1. 특정 날짜의 특정 시간을, 1970년 1월 1일 기준으로, 총 몇 초가 지났는지 나타낸 값

여러개의 조건 걸기

AND

SELECT * FROM copang_main.member
WHERE gender = 'm'
	AND address LIKE '서울%';

→ 서울에 살면서 성별이 남자인 사람만 조회

OR

SELECT * FROM copang_main.member
WHERE MONTH(sign_up_day) BETWEEN 3 AND 5
	OR MONTH(sign_up_day) BETWEEN 9 AND 11;

→ 봄이나 가을에 가입한 회원만 조회

SELECT * FROM copang_main.member
WHERE (gender = 'm' AND height >= 180)
	OR (gender = 'f' AND height >= 170);

→ 먼저 해야하는 조건을 괄호로 감싸자!

여러 조건을 걸 때 주의할 점

  1. OR을 사용할 때의 주의사항
    1. SELECT * FROM copang_main.member WHERE id = 1 or id = 2
      1. id가 1이나 2인 행만 출력
    2. SELECT * FROM copang_main.member WHERE id = 1 or 2
      1. 2가 무조건 true이기 때문에 모든 행 출력
  2. AND와 OR 간의 우선순위
    1. 괄호를 잘치자!

문자열 패턴 매칭 조건 주의점!

  1. 이스케이핑
    1. LIKE 뒤에 사용되는 문자 (%, “, ‘, _) 같은 걸 사용하려면 \를 사용하고 해야한다.
  2. 대소문자 구분
    1. BINARY를 앞에 사용하면 된다.
    2. LIKE BINARY ‘%g%’

데이터 정렬

오름차순 정렬

SELECT * FROM copang_main.member
ORDER BY height (ASC);

내림차순 정렬

SELECT * FROM copang_main.member
ORDER BY height (DESC);

WHERE + ORDER BY

SELECT * FROM copang_main.member
WHERE gender = 'm'
	AND weight >= 70
ORDER BY height ASC;

여러 컬럼으로 정렬

전체 회원중에 년도순으로 내림차순 정렬하고 년도가 같으면 이메일 순으로 오름차순 정렬

SELECT * FROM copang_main.member
ORDER BY YEAR(sign_up_day) DESC, email ASC;

데이터 일부만 추려보기

SELECT * FROM copang_main.member
ORDER BY sign_up_day DESC
LIMIT 10;

→ 위에 나오는 10개의 로우만 보여줘

SELECT * FROM copang_main.member
ORDER BY sign_up_day DESC
LIMIT 8, 2;

→ 8번째 로우부터 2개의 로우를 보여줘

→ 로우는 0번부터 시작

순서

WHERE → ORDER BY → LIMIT

데이터 변환

CAST('[변환하고자 하는 데이터]' AS [데이터형식])

ex)

CAST('20' AS INT) → 문자를 숫자로

CAST(1234 AS CHAR(10)) → 숫자를 문자로

'공부 > SQL' 카테고리의 다른 글

CSV 파일로 테이블 생성하기  (0) 2024.09.13
데이터 베이스 기본 개념  (1) 2024.09.13