06. 검색 조건 지정하기
학습 내용
조건을 지정하여 데이터를 검색하는 방법
행을 WHERE 구, 열을 SELECT 구로 선택하여 검색하는 방법
1. SELECT 구에서 열 지정하기
열 여러개 지정 가능 : SELECT 열1, 열2... FROM 테이블명
열이 정의된 순서와 동일한 순서로 지정할 필요 없음
중복으로 열을 지정해도 상관 없음
mysql> SELECT * FROM sample21;
+------+--------+------------+-------------------+
| no | name | birthday | address |
+------+--------+------------+-------------------+
| 1 | 박준용 | 1976-10-18 | 대구광역시 수성구 |
| 2 | 김재진 | NULL | 대구광역시 동구 |
| 3 | 홍길동 | NULL | 서울특별시 마포구 |
+------+--------+------------+-------------------+
3 rows in set (0.01 sec)
mysql> SELECT no, name FROM sample21;
+------+--------+
| no | name |
+------+--------+
| 1 | 박준용 |
| 2 | 김재진 |
| 3 | 홍길동 |
+------+--------+
3 rows in set (0.00 sec)
mysql> SELECT address, name FROM sample21;
+-------------------+--------+
| address | name |
+-------------------+--------+
| 대구광역시 수성구 | 박준용 |
| 대구광역시 동구 | 김재진 |
| 서울특별시 마포구 | 홍길동 |
+-------------------+--------+
3 rows in set (0.00 sec)
mysql> SELECT address, name, no, no FROM sample21;
+-------------------+--------+------+------+
| address | name | no | no |
+-------------------+--------+------+------+
| 대구광역시 수성구 | 박준용 | 1 | 1 |
| 대구광역시 동구 | 김재진 | 2 | 2 |
| 서울특별시 마포구 | 홍길동 | 3 | 3 |
+-------------------+--------+------+------+
3 rows in set (0.00 sec)
2. WHERE 구에서 행 지정하기
보통 행은 열에 비해 훨씬 많음
WHERE 구는 FROM 구의 뒤에 표기 : SELECT 열 FROM 테이블명 WHERE 조건식
구의 순서와 생략
- SQL에는 구의 순서가 정해져 있어 바꿔적을 수 없음
- WHERE 구처럼 생략 가능한 구 존재(생략 시 테이블 내의 모든 행이 검색 대상)
WHERE 구
- 조건식 : 열, 연산자, 상수로 구성되는 식
- WHERE 구로 행만 추출할 수도 있고, 동시에 열 지정도 가능
mysql> SELECT * FROM sample21 WHERE no = 2;
+------+--------+----------+-----------------+
| no | name | birthday | address |
+------+--------+----------+-----------------+
| 2 | 김재진 | NULL | 대구광역시 동구 |
+------+--------+----------+-----------------+
1 row in set (0.00 sec)
mysql> SELECT no, name FROM sample21 WHERE no = 2;
+------+--------+
| no | name |
+------+--------+
| 2 | 김재진 |
+------+--------+
1 row in set (0.00 sec)
조건식
- 조건식 'no = 2'는 no 열 값이 2일 경우에 참이 되는 조건
- 'no = 2' = 'no' + '=' + '2'
- 'no' : 열 이름
- '=' : 어떤 계산을 할지 지정하는 연산자, =의 경우, 좌우로 2개 항목이 필요한 이항 연산자에 해당, 동시에 결괏값이 참/거짓인지 반환하므로 비교 연산자에 해당
- '2' : 상수
값이 서로 다른 경우 '<>'
- 서로 다른 값인지를 비교하는 연산자 (<=> '=' : 서로 같은 값인지를 비교하는 연산자)
mysql> SELECT * FROM sample21;
+------+--------+------------+-------------------+
| no | name | birthday | address |
+------+--------+------------+-------------------+
| 1 | 박준용 | 1976-10-18 | 대구광역시 수성구 |
| 2 | 김재진 | NULL | 대구광역시 동구 |
| 3 | 홍길동 | NULL | 서울특별시 마포구 |
+------+--------+------------+-------------------+
3 rows in set (0.00 sec)
mysql> SELECT * FROM sample21 WHERE no <> 2;
+------+--------+------------+-------------------+
| no | name | birthday | address |
+------+--------+------------+-------------------+
| 1 | 박준용 | 1976-10-18 | 대구광역시 수성구 |
| 3 | 홍길동 | NULL | 서울특별시 마포구 |
+------+--------+------------+-------------------+
2 rows in set (0.00 sec)
3. 문자열형의 상수
- 문자열의 경우 싱글쿼트('')로 둘러싸 비교값 표기
- 날짜시간형의 경우에도 싱글쿼트로 둘러싸 표기, 연월일은 하이픈(-), 시분초는 콜론(:)으로 구분하여 표기 ex. '2023-03-03 10:22:33'
- 문자열형의 열과 비교하기 위해선 조건으로 지정할 값도 그 자료형에 맞춰 지정해야 함
- 리터럴 Literal : 자료형에 맞게 표기한 상수값
mysql> SELECT * FROM sample21;
+------+--------+------------+-------------------+
| no | name | birthday | address |
+------+--------+------------+-------------------+
| 1 | 박준용 | 1976-10-18 | 대구광역시 수성구 |
| 2 | 김재진 | NULL | 대구광역시 동구 |
| 3 | 홍길동 | NULL | 서울특별시 마포구 |
+------+--------+------------+-------------------+
3 rows in set (0.00 sec)
mysql> SELECT * FROM sample21 WHERE name = '박준용';
+------+--------+------------+-------------------+
| no | name | birthday | address |
+------+--------+------------+-------------------+
| 1 | 박준용 | 1976-10-18 | 대구광역시 수성구 |
+------+--------+------------+-------------------+
1 row in set (0.00 sec)
4. NULL값 검색
IS NULL
- '=' 연산자로는 NULL 값 검색 불가능
- IS NULL : 술어
mysql> SELECT * FROM sample21;
+------+--------+------------+-------------------+
| no | name | birthday | address |
+------+--------+------------+-------------------+
| 1 | 박준용 | 1976-10-18 | 대구광역시 수성구 |
| 2 | 김재진 | NULL | 대구광역시 동구 |
| 3 | 홍길동 | NULL | 서울특별시 마포구 |
+------+--------+------------+-------------------+
3 rows in set (0.00 sec)
mysql> SELECT * FROM sample21 WHERE birthday IS NULL;
+------+--------+----------+-------------------+
| no | name | birthday | address |
+------+--------+----------+-------------------+
| 2 | 김재진 | NULL | 대구광역시 동구 |
| 3 | 홍길동 | NULL | 서울특별시 마포구 |
+------+--------+----------+-------------------+
2 rows in set (0.00 sec)
<-> IS NOT NULL : NULL 값이 아닌 행 검색
mysql> SELECT * FROM sample21 WHERE birthday IS NOT NULL;
+------+--------+------------+-------------------+
| no | name | birthday | address |
+------+--------+------------+-------------------+
| 1 | 박준용 | 1976-10-18 | 대구광역시 수성구 |
+------+--------+------------+-------------------+
1 row in set (0.00 sec)
5. 비교 연산자
= 연산자
좌변과 우변의 값이 같을 경우 참
<> 연산자
좌변과 우변의 값이 같지 않을 경우 참
> 연산자
좌변의 값이 우변의 값보다 클 경우 참
>= 연산자
좌변의 값이 우변의 값보다 크거나 같을 경우 참
< 연산자
좌변의 값이 우변의 값보다 작을 경우 참
<= 연산자
좌변의 값이 우변의 값보다 작거나 같을 경우 참
'공부 > TIL' 카테고리의 다른 글
[SQL 첫걸음] 3장 11강 ~ 13강 (1) | 2024.01.04 |
---|---|
[SQL 첫걸음] 2장 07강 조건 조합하기 (0) | 2023.11.21 |
[SQL 첫걸음] 2장 05강 테이블 구조 참조하기 (0) | 2023.11.11 |
[SQL 첫걸음] MySQL 설치 및 세팅 오류 해결(윈도우) (2) | 2023.11.06 |
[SQL 첫걸음] 2장 04강 테이블에서 데이터 검색 (0) | 2023.11.06 |