만족

[MYSQL] 셀렉트(SELECT) - 1 본문

[MYSQL] 셀렉트(SELECT) - 1

DataBase/mysql Satisfaction 2021. 4. 26. 03:20

셀렉트는 일정 조건에 따라 새로운 테이블을 만드는 키워드이다.

 

SELECT 열이름[, 열이름2, ...]
  FROM 테이블이름
  [WHERE 조건식1 ...]
  [ORDER BY 열이름 [ASC|DESC]]
  [LIMIT 출력행갯수];

일단 간단한 서식은 위와 같다.

([]는 생략 가능하다)

 

student_id student_name
1 홍길동
2 길동홍
3 동홍길

(student 테이블)

SELECT student_name FROM student;

 

student_name
홍길동
길동홍
동홍길

(쿼리 실행 결과; 열 이름에 student_name만 입력했기 때문에 위와 같이 나온다)

 

WHERE 조건식

WHERE 조건식 을 나열하여 원하는 row만 출력할 수도 있다.

SELECT student_name FROM student WHERE student_id>1;

WHERE student_id>1이 추가되었으므로,

student테이블에서 student_id가 1보다 큰 row만 골라

student_name열만 출력한다.

 

student_name
길동홍
동홍길

(쿼리 실행 결과)

 

조건식은 N개를 사용할 수도 있다.

 

만약 student_id가 1보다 크고, 3보다 작은 학생의 이름을 알고 싶다면,

SELECT student_name FROM student WHERE student_id>1 AND student_id<3;

처럼 AND나 OR를 이용해 여러개의 조건식을 조합할 수도 있다.

 

WHERE 조건식: 주의

student_id student_name
1 홍길동
2 길동홍
3 동홍길
4 NULL

(student 테이블)

 

만약 student_name이 NULL인 row가 있다고 해보자

SELECT student_name FROM student WHERE student_name != '홍길동';

일 때, 결과값이 다음과 같을 것이라고 생각할 수도 있다.

student_name
길동홍
동홍길
NULL

그러나 =, != 연산의 결과에서 NULL값은 포함되지 않는다(항상 false).

student_name
길동홍
동홍길

(실제 쿼리 실행 결과)

 

WHERE 조건식: LIKE

LIKE를 사용해 문자열을 정규 표현식과 유사한 방법을 이용해 검색할 수도 있다.

 

%: 0개 이상의 모든 문자를 포함 (홍% 일 때, {홍, 홍길, 홍길동, 홍길홍}이 포함되고 {김홍길}은 포함되지 않는다)

_: 1개의 모든 문자를 포함 (홍_ 일 때, {홍길}만 포함되고 {홍, 홍길동}은 포함되지 않는다) 

=> %길_은 길이가 2개 이상이면서 길*로 끝나는 모든 문자열이 참이다 ({홍홍길동}, {길서}, {김홍길남} 이 포함될 수 있다)

 

만약 이름이 3글자이고, 중간에 '길'이 들어가는 student_name을 필터링하고 싶다면

WHERE student_name LIKE '_길_'

처럼 사용할 수 있다.

 

LIKE역시 OR나 AND를 이용해 중첩시킬 수도 있다.

WHERE student_name LIKE '_길_' OR student_name LIKE '_홍_'

정렬

ORDER BY 열이름을 입력하여 row의 순서를 바꿀 수도 있다.

 

만약 ORDER BY 열이름 ASC면 ASC는 ascend의 약자로 해당 열에 대해 오름차순 정렬하고,

ORDER BY 열이름 DESC면 DESC는 descend의 약자로 해당 열에 대해 내림차순 정렬한다.

 

SELECT student_name FROM student WHERE student_id>1 ORDER BY student_id DESC;

ORDER BY student_id가 추가되었으므로,

결과 rows에 대해 student_id를 기준으로 내림차순 정렬한다.

 

student_name
동홍길
길동홍

(쿼리 실행 결과)

 

갯수 제한

LIMIT 갯수 를 사용하여 행의 갯수를 제한할 수 있다.

 

SELECT student_name FROM student WHERE student_id>1 ORDER BY student_id DESC LIMIT 1;

LIMIT 1이 추가되었으므로, 결과 행의 갯수는 1개로 제한된다.

 

student_name
동홍길

(쿼리 실행 결과)

'DataBase > mysql' 카테고리의 다른 글

[MYSQL] 조인(JOIN)  (0) 2021.04.26
[MYSQL] Aggregtion(집계)과 GROUP(그룹)  (0) 2021.04.26
[MYSQL] 셀렉트(SELECT) - 2  (0) 2021.04.26
[MYSQL] SQL CREATE/DROP/ALTER  (0) 2021.04.25
[MYSQL] RANK/DENSE_RANK/ROW_NUMBER 함수  (0) 2021.03.03


Comments