SELECT와 WHERE
테이블의 데이터를 조회해보자
SELECT: 테이블의 원하는 데이터를 조회할 때 사용하는 구문
SELECT * FROM copang_main.member;
별표(*) -> ‘모든 속성’을 뜻한다
~ 테이블의 모든 row가 조회된다
SELECT email, age, address FROM copang_main.member;
이런 식으로 원하는 column의 row만 조회할 수 있다
*그냥 테이블 이름(member)만 적어도 실행되지만 테이블 이름이 중복되는 경우가 있을 수 있기에 데이터베이스 이름과 함께(copang_main.member) 적어준다. USE문으로 데이터베이스를 지정해줘도 문제가 없다.
WHERE을 사용해 특정 조건을 만족하는 row만 조회할 수 있다
SELECT * FROM copang_main.member WHERE email = 'taehos@hanmail.net';
SQL문의 작성 형식
1. 끝에는 항상 세미콜론(;)을 써줘야 한다.
2. 키워드들이 최소한 하나 이상의 공백으로 구분되어 있고, 세미콜론으로 마무리가 되어 있다면 문장 중간에 공백이나 줄 바꿈을 자유자재로 넣어도 된다.
3. 가독성을 위해 예약어는 대문자로 적고 사용자 지정어는 소문자로 적는 것이 관례이다.
조건을 나타내는 다양한 방법
속성값~이상/이하 -> 부등호
SELECT * FROM copang_main.member WHERE age >= 27;
구간 -> BETWEEN~AND
SELECT * FROM copang_main.member WHERE age BETWEEN 30 AND 39;
제외 -> NOT
SELECT * FROM copang_main.member WHERE age NOT BETWEEN 30 AND 39;
특정 텍스트가 포함된 문자열 뽑아 내기 -> LIKE
SELECT * FROM copang_main.member WHERE address LIKE '서울%';
서울% -> ‘서울’로 시작하는
%서울% -> ‘서울’이 포함된
%서울 -> ‘서울’로 끝나는
같음 -> =
같지 않음 -> !=, <>
정확히 이 중에 있는~ -> IN(a,b,c..)
SELECT * FROM copang_main.member WHERE age IN(20,30);
한 글자를 나타내는~ -> 언더바(_)
SELECT * FROM copang_main.member WHERE email LIKE 'c_____@%';
~ 이 경우에는 c를 포함한 6자리 문자열이 포함된 이메일
*주의할 점
1. 이스케이핑 문제
% ‘ _ “
이렇게 4가지는 표현식과 겹치기 때문에 문자열로 사용하려면 앞에 역슬레쉬(\)를 붙이자
SELECT * FROM copang_main.member WHERE sentence LIKE '%\%%';
2. 대(소)문자 문제
특정 대(소)문자가 포함된 문자열을 다룰 때는 BINARY를 앞에 붙이자
SELECT * FROM copang_main.member WHERE sentence LIKE BINARY '%G%';
DATE 데이터 타입 관련 함수
데이터 형식이 DATE인 값들도 부등호 적용이 가능하다
SELECT * FROM copang_main.member WHERE sign_up_day > '2019-01-01';
BETWEEN~AND 적용도 가능하다
SELECT * FROM copang_main.member
WHERE sign_up_day BETWEEN '2018-01-01' AND '2018-12-31';
1. 연도(YEAR), 월(MONTH), 일(DAYOFMONTH) 추출하기
SELECT * FROM copang_main.member WHERE YEAR(birthday) = '1992';
-> DATE 데이터 타입 속성의 연도가 1992인 것을 뽑아낸다.
SELECT * FROM copang_main.member WHERE MONTH(sign_up_day) IN(6,7,8);
-> 생일이 6,7,8월 중에 있는 사람들을 뽑아낸다.
SELECT * FROM copang_main.member WHERE DAYOFMONTH(sign_up_day) BETWEEN 15 AND 31;
-> 각 달의 후반부(15~31)에 가입한 회원들을 뽑아낸다.
2. 날짜 간의 차이 구하기
SELECT email, sign_up_day, DATEDIFF(sign_up_day, '2019-01-01') FROM copang_main.member;
특정 날짜를 기점으로 그 날짜와의 차이를 구한다
3. 날짜 더하기 빼기
SELECT email, sign_up_day, DATE_ADD(sign_up_day, INTERVAL 300 Day) FROM copang_main.member;
DATE_ADD() -> 날짜를 더한 결과를 띄운다
SELECT email, sign_up_day, DATE_SUB(sign_up_day, INTERVAL 250 Day) FROM copang_main.member;
DATE_SUB() -> 날짜를 뺀 결과를 띄운다
4. UNIX Timestamp 값
UNIX Timestamp값: 1970년 1월 1일을 기준으로 총 몇 초가 지났는지를 나타낸 값
UNIX_TIMESTAMP() -> 일반 시간을 유닉스 타임스탬프로 변환
FROM_UNIXTIME() -> 유닉스 타입스탬프에서 일반 시간으로 변환
여러 개의 조건 걸기
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;
~ 가입 날짜가 3~5월 사이거나 9~11월 사이인 멤버
AND와 OR을 동시에 사용하는 경우)
SELECT * FROM copang_main.member
WHERE (gender ='m' AND height >= 180)
OR (gender ='f' AND height >= 170);
데이터 정렬해서 보기
‘정렬 -> row들을 특정 column을 기준으로 순서대로 출력하는 것’
ORDER BY 속성; -> 해당 속성의 row들을 작은 순서대로(오름차순) 정렬
SELECT * FROM copang_main.member
ORDER BY height;
* 정렬 순서가 이상할 경우 속성의 데이터타입을 체크해보자!
데이터 타입을 일시적으로 바꾸는 경우 CAST함수를 사용할 수 있다
내림차순으로 정렬하려면? -> DESC
SELECT * FROM copang_main.member
ORDER BY height DESC;
* 기본값인 오름차순도 ASC로 표현할 수 있다
특정 row들을 조회하고 정렬하는 경우~
‘WHERE’가 ‘OREDER BY’보다 먼저 나와야 함
SELECT * FROM copang_main.member
WHERE gender = 'm'
AND weight>=70
ORDER BY height ASC;
심화) 다중으로 정렬하는 경우
A 속성을 기준으로 오름차순 정렬한 후 안에서 B 속성을 기준으로 내림차순 정렬..
SELECT * FROM copang_main.member
ORDER BY YEAR(sign_up_day) DESC, email ASC;
데이터 일부만 추려보기
LIMIT n; -> 정렬 후에 상위 n개를 추려준다.
SELECT * FROM copang_main.member
ORDER BY sign_up_day DESC
LIMIT 10;
상위 9,10번만 보고 싶다면? LIMIT m, n;
LIMIT 8, 2;
~ 9번부터 2개를 출력하라는 의미 (row는 0번부터 시작이다!)
*LIMIT 속성은 페이지를 load하는 pagination과 관련 있다
본 내용은 Codeit의 '개발자를 위한 SQL 데이터베이스'를 바탕으로 작성되었습니다.
'Computer Science > Database, SQL' 카테고리의 다른 글
[Codeit/MySQL] #6 서브쿼리와 뷰를 활용한 데이터 분석 (11) | 2021.04.16 |
---|---|
[Codeit/MySQL] #5 테이블 조인을 통한 데이터 분석 (4) | 2021.04.16 |
[Codeit/MySQL] #4 데이터 분석 입문 (0) | 2021.04.16 |
[Codeit/MySQL] #2 테이블 생성 (4) | 2021.04.15 |
[Codeit/MySQL] #1 데이터베이스 기본 개념 (0) | 2021.04.15 |