SQL SELECT문 사용법

POOHYA·2022년 3월 10일

SQL

목록 보기
1/6

조건

SELECT FROM member;
SELECT email, age, adress FROM memeber;
SELECT
FROM member WHERE email = 'taehos@hanmail.net;

USE [DB이름];
SELECT * FROM memeber;

SELECT FROM member WHERE age >= 27;
SELECT
FROM member WHERE age BETWEEN 30 AND 39;

SELECT * FROM member WHERE addrea LIKE '서울%';
서울로 시작하는 문자열

SELECT * FROM member WHERE addrea LIKE '%고양시%';
고양시가 포함된 모든 문자열

같지 않음 (!=, <>)

중에 있는 (IN)

SELECT * FROM memeber WHERE age IN (20,30);

한 글자를 나타내는 (_)

SELECT * FROM memeber WHERE email LIKE 'c__@%;
이메일이 c로 시작하고 6자인 회원들

년, 월, 일 추출하기

SELECT FROM member WHERE YEAR(birthday) = '1992';
SELECT
FROM member WHERE MONTH(sign_up_day) IN (6,7,8);
SELECT * FROM member WHERE DAYOFMONTH(sign_up_day) BETWEEN 15 AND 31;

날짜 간의 차이 구하기

SELECT email, sign_up_day, DATEDIFF(sign_up_day, '2019-01-01') FROM member;
SELECT email, sign_up_day, DATEDIFF(sign_up_day, CURDATE()) FROM member;
SELECT email, sign_up_day, DATEDIFF(sign_up_day,birthday) / 365 FROM member;

날짜 더하기 빼기

SELECT email, sign_up_day, DATE_ADD(sign_up_day, INTERVAL 300 DAY) FROM member;
SELECT email, sign_up_day, DATE_SUB(sign_up_day, INTERVAL 250 DAY) FROM member;

#UNIX_timestamp
유닉스 계열의 운영체제에서 날짜와 시간을 나타내는 값
1970년 1월 1일을 기준으로 몇 초가 지난건지
SELECT email, sign_up_day, UNIX_TIMESTAMP(sign_up_day) FROM member;
SELECT email, sign_up_day, FROM_UNIXTIME(UNIX_TIMESTAMP(sign_up_day)) FROM member;

여러개의 조건 만족하는 로우

AND

SELECT * FROM menmber
WHERE gender = 'm'
AND addressl LIKE '서울%'
AND age BETWEEN 25 AND 29;

OR

SELECT * FROM menmber
WHERE MONTH(sign_up_day)
BETWEEN 3 AND 5
OR MONTH(sign_up_day)
BETWEEN 9 AND 12;

AND, OR 같이 사용할때는 AND의 우선순위가 더 높음
->우선순위를 고려하기 보다는 각 조건에 따라 괄호를 사용하는 습관을 들이자!

%
임의의 길이의 문자열
_
한자리수

이스케이핑

어떤 문자에 부여된 특정한 의미로 해석되는게아니라 단순한 문자처럼 취급하는 행위
(역슬래시)로 사용한다.

'(작은따옴표) 이스케이핑

SELECT * FROM member WHERE sentence LIKE '%\'%';

_(언더바) 이스케이핑

SELECT * FROM member WHERE sentence LIKE '%_%';

"(큰따옴표) 이스케이핑

SELECT * FROM member WHERE sentence LIKE '%\"%\"%';

BINARY 대소문자 구분

Mysql 기본 설정에서는 대소문자 구분을 안하게 되어있다
ci case-insensitive의 약자로 문자열이 동일한지 확인할 때, 대소분자 구별을 하지않겠다는 의미

이러한 설정에 상관없이 늘 대소문자를 구분하도록 하는 BINARY가 있다
SELECT FROM member WHERE sentence LIKE BINARY '%G%';
SELECT
FROM member WHERE sentence LIKE BINARY '%g%';

정렬

SELECT * FROM member
ORDER BY height;
키가 작은사람부터 큰사람 까지 정렬(오름차순)

ASC(ascending)

오름차순 기본값
SELECT * FROM member
ORDER BY height ASC;

DESC(descending)

내림차순
SELECT * FROM member
ORDER BY height DESC;

조건문 뒤 정렬

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

정렬기준이 여러개

SELECT * FROM member
ORDER BY YEAT(sign_up_day) DESC, email asc;

Mysql SELECT문 내의 각 절의 순서

SQL의 작성 방식은 정해진 구조와 형식에 따라야한다. 이를 따르지 않으면 SQL문을 실행했을 때 에러가 난다.
링크

CAST text타입 정렬방법

INT타입과 달리 TEXT타입은 정렬방식이 다르다.
TEXT타입은 한문자씩 순서를 비교해 정렬을 수행된다.
숫자값이 담긴 컬럼이 문자열형일때는 해당 컬럼의 값들의 데이터 타입을 일시적을 변경해야한다.
SELECT * FROM member ORDER BY CAST(data AS signed) ASC;
여기서 signed는 양수와 음수를 포함한 모든 정수를 나타낼 수 있는 데이터타입이고 decimal은 소수점이 있는 수를 나타내는 타입이다.

LIMIT

LIMIT n

SELECT * FROM member
ORDER BY sign_up_day DESC
LIMIT 10;

LIMIT m,n

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

8번째 row부터 2개의 row을 출력
cf) row는 0부터 카운트됨

profile
김효주

0개의 댓글