본문 바로가기
프로그래밍 언어/SQL - MySQL

[MySQL] SELECT 문 - where 절

by Physics 2021. 6. 26.
728x90

기본적으로 많이 사용되는 SELECT 문의 구조

SELECT	select_expr
	[FROM	table_references]
    [WHERE  where_condition]
    [GROUP BY	{col_name | expr | position}] 
    [HAVING where_condition]
    [ORDER BY {col_name| expr | position}]

• WHERE 조건절을 이용하면 SELECT로 추출한 데이터 중 원하는 데이터만 추출이 가능하다. 
• 일종의 엑셀의 "필터"와 같은 역활 

- 여러 개의 열들을 가져올 경우, 열들은 콤마(,)로 구분됨 

별칭(AS) : 열들의 이름을 별도의 별칭(Alias)로 지정할 수 있다. 
- 별칭의 중간에 공백이 있는 경우 반드시 작은 따옴표('')로 별칭을 감싸줘야 한다.  

LIMIT 명령어

- 출력의 갯수를 제한하는 경우에 사용함 
- LIMIT <N>을 쓰면, 화면에 N개의 열만 출력됨 

SELECT	select_expr
	[FROM	table_references]
    [WHERE  where_condition]
    [GROUP BY	{col_name | expr | position}] 
    [HAVING where_condition]
    [ORDER BY {col_name| expr | position}]
    [LIMIT <화면에 출력할 열의 갯수>]

1. 숫자 및 문자 / 날짜형 데이터 필터링 

SELECT <column1>, <column2> FROM <table> WHERE <비교할_열_이름> <비교연산자> <숫자/문자>;

  •  <column1>, <column2> : 출력하고 싶은 열 
  •  <table> : 참조를 원하는 테이블 
  •  <비교할_열_이름> <비교 연산자> <숫자/문자>: 필터링하고 싶은 조건   
     a. 비교 연산자 ( 헷갈리는 부분만 작성함) 
      - BETWEEN A AND B : 지정된 두 값 사이에 있는지 확인 
      - IS NULL : NULL 값을 가진 열을 검색하는 경우 
      - IS NOT NULL : NULL 값이 아닌 열을 검색하는 경우 사용
    ※ NOTE: NULL 값은 오름차순/내림차순 정렬 시 가장 큰 값으로 분류됨 
  • 문자열을 비교할 경우, 작은따옴표('')를 사용하여 비교할 문자열을 나타내야 한다. 

(ex - 1) 

mysql> SELECT * FROM current_dept_emp WHERE emp_no <= 10010;
+--------+---------+------------+------------+
| emp_no | dept_no | from_date  | to_date    |
+--------+---------+------------+------------+
|  10001 | d005    | 1986-06-26 | 9999-01-01 |
|  10002 | d007    | 1996-08-03 | 9999-01-01 |
|  10003 | d004    | 1995-12-03 | 9999-01-01 |
|  10004 | d004    | 1986-12-01 | 9999-01-01 |
|  10005 | d003    | 1989-09-12 | 9999-01-01 |
|  10006 | d005    | 1990-08-05 | 9999-01-01 |
|  10007 | d008    | 1989-02-10 | 9999-01-01 |
|  10008 | d005    | 1998-03-11 | 2000-07-31 |
|  10009 | d006    | 1985-02-18 | 9999-01-01 |
|  10010 | d006    | 2000-06-26 | 9999-01-01 |
+--------+---------+------------+------------+

 

2. Order By 사용 

where를 사용하는 경우, order by는 반드시 문장의 맨 끝에 사용해야 한다. 

SELECT <열이름> FROM <테이블이름> WHERE <조건절> ORDER BY <열이름>;

 

3. 비교 연산자

비교 연산자에는 ">,<, >=, <=" 등이 있다. 

1) BETWEEN <값1> AND <값2> : 연속적인 숫자로 이루어진 열들의 경우, <값1> 과 <값2> 사이의 값들을 추출한다. 
  - 연속적이지 않은 값 (사람 이름)의 경우 BETWEEN을 사용할 수 없다. 이 경우, IN 연산자를 사용한다. 
  - ex) student 테이블에서 키가 180~183인 사람을 조회 

SELECT name, height FROM student WHERE height BETWEEN 180 and 183;

 

2) IN (값1, 값2, 값3) 
  - OR를 여러번 한 것과 동일 
  - where col_name = '값1' OR col_name = '값2', col_name = '값3' 
  - where col_name IN(값1, 값2, 값3)

 

4. 논리 연산자

where 절에 사용할 수 있는 논리 연산자들은 다음과 같다: AND, OR, IN, NOT IN

  (1) AND: select <열이름1>, <열이름2> ,... FROM <테이블 명> WHERE <조건절1> AND <조건절2>; 
  (2) OR:   select <열이름1>, <열이름2> ,... FROM <테이블 명> WHERE <조건절1> OR <조건절2>; 
     - 우선 순위는 OR 연산자가 AND 연산자보다 더 높으므로, AND 연산자를 먼저 처리를 하려면 괄호로 묶어주어야 한다.  
  (3) IN : select <열이름1>, <열이름2> ,... FROM <테이블명> WHERE <비교할 열 이름> IN (조건1, 조건2); 
     - 의미: 특정 테이블로부터 특정한 조건들 안에 속하는 모든 데이터들을 추출하라 
     - OR 연산자를 여러번 사용할 경우, IN 연산자로 대체할 수 있다. 
     - IN 연산자는 OR 연산자보다 처리 속도가 빠르다. 
     - IN 연산자 안에 다른 select 문장을 사용할 수 있다. 
  (4) NOT IN: select <열이름1>, <열이름2>,... FROM <테이블명> WHERE <비교할 열이름> NOT IN (조건 1, 조건 2);
     - 의미: 특정 테이블로부터 특정한 조건들 안에 속하지 않는 모든 데이터를 추출하라.

     - IN 연산자의 부정 

5. 텍스트 마이닝을 활용한 데이터 조건

•  where 절을 이용하여 조건에 맞는 텍스트를 찾을 때는 LIKE 연산자를 이용하여 필터링한다. 
•  Syntax: Select <열이름> FROM <테이블 명> WHERE <필터링하고 싶은 열이름> LIKE <조건>;
•  LIKE 뒤의 <조건>은 아래와 같다. 
  a. 뒤에 나오는 문자들을 알 수 없는 경우: '찾고 싶은 문자열%'
     - 와일드 카드 '%': 모든 문자를 의미 
     - ex) WHERE words LIKE 'he%'; 
      : hem, heal, hell, hello, 와 같이 he로 시작하는 모든 문자열들을 검색함 
  b. 앞에 나오는 문자들을 알 수 없는 경우: '%찾고 싶은 문자열'
  c. 중간에 나오는 문자들을 아는 경우: '%찾고 싶은 문자열%' 
  d. 뒤에 나오는 문자 하나만 모르는 경우: '찾고 싶은 문자열_' 
     - 언더라인바를 사용함으로써 하나의 임의의 문자가 추가된 문자열을 검색함 
     - ex) hem은 필터링하지만, heal, hello, hell 등은 출력되지 않음 

728x90

댓글