기본적으로 많이 사용되는 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 등은 출력되지 않음
'프로그래밍 언어 > SQL - MySQL' 카테고리의 다른 글
[MySQL] 함수, 조건문, 데이터 그룹화 (0) | 2021.08.01 |
---|---|
[MySQL] 데이터 조작어 (DML) 및 데이터 정의어(DDL) (0) | 2021.08.01 |
[MYSQL] 우분투에 Employees 샘플 데이터 베이스 설치하기 (0) | 2021.06.25 |
[MySQL] MySQL과 관련된 기본적인 명령어들 (0) | 2021.06.12 |
[MySQL 공부] SELECT 문 (0) | 2021.05.17 |
댓글