테이블에서 데이터 검색
🎯Hello World 실행하기
SELECT 명령: SELECT * FORM 테이블명
- 붙여쓰면 에러 발생
- 입력이 끝나면 명령의 마지막을 나타내는 세미콜론(;) 넣어주기
- SELECT: 명령의 종류, 예약어
- FROM: 예약어
- * : 모든 열(모든 열을 의미하는 메타문자)
- sample21: 테이블명(데이터베이스 객체)
- ;: 명령문의 마지막
- 명령 실행 결과 표 형식의 데이터 출력
SELECT * FROM sample21;
+------+--------+------------+-------------------+
| no | name | birthday | address |
+------+--------+------------+-------------------+
| 1 | 박준용 | 1976-10-18 | 대구광역시 수성구 |
| 2 | 김재진 | NULL | 대구광역시 동구 |
| 3 | 홍길동 | NULL | 서울특별시 마포구 |
+------+--------+------------+-------------------+
3 rows in set (0.03 sec)
출력 결과로 나온 테이블은 행과 열로 구성된 표 형식의 데이터.
데이터는 자료형으로 분류할 수 있으며, 열은 하나의 자료형만 가질 수 있음
- no: 수치형
- name: 문자열형
- birthay: 날짜시간형
값이 없는 데이터는 NULL 처리됨, 즉 아무 것도 저장되어 있지 않은 상태
🎯테이블 구조 참조하기
DESC 명령: DESC 테이블명;
DESC sample21;
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| no | int | YES | | NULL | |
| name | varchar(20) | YES | | NULL | |
| birthday | date | YES | | NULL | |
| address | varchar(40) | YES | | NULL | |
+----------+-------------+------+-----+---------+-------+
4 rows in set (0.04 sec)
DESC는 SQL 명령이 아니지만, 테이블에 어떤 열이 정의되어 있는지 알 수 있음.
▶️DESC 명령으로 테이블 구조를 참조 가능
자료형: 열의 가장 중요한 속성
- INTEGER형: 수치형의 하나로 정수값 저장 가능(소수점 포함 X)
- CHAR형: 문자열형의 하나로 문자열을 저장할 수 있는 자료형, 언제나 고정된 길이로 데이터 저장. 고정 길이 문자열 자료형
- VARCHAR형: 문자열을 저장할 수 있는 자료형, 최대 길이를 지정하는 점은 CHAR형과 같으나 CHAR형과 달리 데이터 크기에 맞춰 저장 공간의 크기도 변경 가능. 가변 길이 문자열 자료형
- DATE형: 날짜값 저장(연월일의 데이터)
- TIME형: 시간 저장(시분초의 데이터)
🎯검색 조건 지정하기
SELECT 구와 WHERE 구: SELECT 열1, 열2 FROM 테이블명 WHERE 조건식
조건을 지정하여 데이터를 검색. 행을 선택할 때는 WHERE 구, 열을 선택할 때는 SELECT 구 사용.
SELECT 구에서 열 지정: SELECT 열1, 열2 ... FROM 테이블명
SELECT no, name FROM sample21;
+------+--------+
| no | name |
+------+--------+
| 1 | 박준용 |
| 2 | 김재진 |
| 3 | 홍길동 |
+------+--------+
3 rows in set (0.01 sec)
콤마(,)를 이용해 열 구분, 여러 개 지정 가능. 지정한 열만 결괏값으로 표시됨
SELECT 구에서 결과로 표시하고 싶은 열 지정 가능
WHERE 구로 행 추출: SELECT 열 FROM 테이블명 WHERE 조건식
SELECT * FROM sample21 WHERE no=2;
+------+--------+----------+-----------------+
| no | name | birthday | address |
+------+--------+----------+-----------------+
| 2 | 김재진 | NULL | 대구광역시 동구 |
+------+--------+----------+-----------------+
1 row in set (0.00 sec)
WHERE 구는 생략 가능하며, 생략할 경우 테이블 내의 모든 행이 검색 대상이 됨
조건식은 '열과 연산자, 상수로 구성되는 식'. 예를 들어 'no = 2'에서는 no 열 값이 2인 행이 참이 됨
SELECT * FROM sample21 WHERE no <> 2;
+------+--------+------------+-------------------+
| no | name | birthday | address |
+------+--------+------------+-------------------+
| 1 | 박준용 | 1976-10-18 | 대구광역시 수성구 |
| 3 | 홍길동 | NULL | 서울특별시 마포구 |
+------+--------+------------+-------------------+
2 rows in set (0.01 sec)
no 열 값이 2가 아닌 행만 검색.
= 연산자와 반대로 <> 연산자는 서로다른 값인지를 비교하는 연산자
SELECT * FROM sample21 WHERE name='박준용';
+------+--------+------------+-------------------+
| no | name | birthday | address |
+------+--------+------------+-------------------+
| 1 | 박준용 | 1976-10-18 | 대구광역시 수성구 |
+------+--------+------------+-------------------+
1 row in set (0.01 sec)
name 열 값이 '박준용'인 행만 추출.
문자열형을 비교하는 경우 싱글쿼트(' ')로 둘러싸 표기(날짜시간형도 동일, 이때 연월일을 하이픈(-)으로 구분)
SELECT * FROM sample21 WHERE birthday = NULL;
Empty set (0.00 sec)
= 연산자로 NULL 검색 불가
SELECT * FROM sample21 WHERE birthday IS NULL;
+------+--------+----------+-------------------+
| no | name | birthday | address |
+------+--------+----------+-------------------+
| 2 | 김재진 | NULL | 대구광역시 동구 |
| 3 | 홍길동 | NULL | 서울특별시 마포구 |
+------+--------+----------+-------------------+
2 rows in set (0.00 sec)
NULL 값을 검색할 때는 = 연산자가 아닌 IS NULL 사용. 좌변 항목의 값이 NULL인 경우 참을 반환
반대로 NULL 값이 아닌 행을 검색하고 싶다면 IS NOT NULL 사용
🔎연산자의 종류
- = 연산자: 좌변과 우변 항목 비교 후 서로 같은 값이면 참을, 같지 않으면 거짓을 반환
- <> 연산자: 값이 서로 다른 경우 참 반환
- > 연산자: 좌변의 값이 우변의 값보다 클 경우 참을, 같거나 작을 경우 거짓을 반환
- >= 연산자: 좌변의 값이 우변의 값보다 크거나 같을 경우 참을, 작을 경우 거짓을 반환
- < 연산자: 좌변의 값이 우변의 값보다 작을 경우 참을, 같거나 클 경우 거짓 반환
- <= 연산자: 좌변의 값이 우변의 값보다 작거나 같을 경우 참을, 클 경우 거짓 반환
🎯조건 조합하기
AND, OR, NOT:
조건식1 AND 조건식2
조건식1 OR 조건식2
NOT 조건식
sample24 테이블 불러오기
SELECT * FROM sample24;
+------+------+------+------+
| no | a | b | c |
+------+------+------+------+
| 1 | 1 | 0 | 0 |
| 2 | 0 | 1 | 0 |
| 3 | 0 | 0 | 1 |
| 4 | 2 | 2 | 0 |
| 5 | 0 | 2 | 2 |
+------+------+------+------+
5 rows in set (0.00 sec)
AND로 조합하기
SELECT * FROM sample24 WHERE a<>0 AND b<>0;
+------+------+------+------+
| no | a | b | c |
+------+------+------+------+
| 4 | 2 | 2 | 0 |
+------+------+------+------+
1 row in set (0.00 sec)
AND 연산은 조건을 만족하는 행을 집합으로 표현했을 때 이들 집합이 겹치는 부분, 즉 교집합으로 계산 가능.
AND 연산자는 논리곱을 계산하는 논리 연산자로, AND로 조건식을 연결하면 모든 조건을 만족하는 행 검색 가능
OR로 조합하기
SELECT * FROM sample24 WHERE a<>0 OR b<>0;
+------+------+------+------+
| no | a | b | c |
+------+------+------+------+
| 1 | 1 | 0 | 0 |
| 2 | 0 | 1 | 0 |
| 4 | 2 | 2 | 0 |
| 5 | 0 | 2 | 2 |
+------+------+------+------+
4 rows in set (0.00 sec)
OR 연산은 조건을 만족하는 행을 집합으로 표현했을 때 이 집합들을 합한 부분, 즉 합집합으로 계산 가능.
OR 연산자는 논리합을 계산한는 논리 연산자로, OR로 조건식을 연결하면 어느 쪽이든 조건을 만족하는 행을 모두 검색 가능
🔎AND와 OR 사용 주의사항
▶️SELECT * FROM sample24 WHERE no=1 OR 2; ❌
SELECT * FROM sample24 WHERE no=1 OR n=2; ⭕
▶️연산자 우선순위: AND는 OR에 비해 우선 순위가 높음, OR 먼저 계산할 때는 위해 괄호로 묶어줘야 함
NOT으로 조합하기
SELECT * FROM sample24 WHERE NOT(a<>0 OR b<>0);
+------+------+------+------+
| no | a | b | c |
+------+------+------+------+
| 3 | 0 | 0 | 1 |
+------+------+------+------+
1 row in set (0.00 sec)
NOT 연산자는 오른쪽에만 항목을 지정하는 '단항 연산자'로, 오른쪽에 지정한 조건식의 반대 값을 반환.
위 코드 실행 결과, a 열이 0이 아니거나 b 열이 0이 아닌 행을 제외한 나머지 행을 검색
🎯패턴 매칭에 의한 검색
패턴 매칭, 부분 검색: 특정 문자나 문자열이 포함되어 있는지 검색하고 싶은 경우 사용
LIKE: 열명 LIKE '패턴'
LIKE에서 사용할 수 있는 메타문자: %, _
메타 문자는 패턴 매칭 시 임의의 문자 또는 문자열에 매치하는 부분을 지정하기 위해 쓰이는 특수 문자.
퍼센트(%)는 임의의 문자열을 의미하며, 언더스코어(_)는 임의의 문자 하나를 의미함.
패턴을 정의할 때는 메타문자를 여러 개 사용 가능
sample25 테이블 불러오기
SELECT * FROM sample25;
+------+-------------------------------------------------+
| no | text |
+------+-------------------------------------------------+
| 1 | SQL은 RDBMS를 조작하기 위한 언어이다. |
| 2 | LIKE에서는 메타문자 %와 _를 사용할 수 있다. |
| 3 | LIKE는 SQL에서 사용할 수 있는 술어 중 하나이다. |
+------+-------------------------------------------------+
3 rows in set (0.01 sec)
'SQL'이라는 문자를 포함하는 행을 패턴 매칭으로 검색
SELECT * FROM sample25 WHERE text LIKE 'SQL%';
+------+---------------------------------------+
| no | text |
+------+---------------------------------------+
| 1 | SQL은 RDBMS를 조작하기 위한 언어이다. |
+------+---------------------------------------+
1 row in set (0.00 sec)
LIKE 술어 'SQL%'로 패턴 매칭(전방 일치)
전방 일치: 문자열 앞쪽에 지정한 문자와 일치, 지정한 문자 뒤로 임의의 문자열 존재
SQL로 시작되는 행만 검색
SELECT * FROM sample25 WHERE text LIKE '%SQL%';
+------+-------------------------------------------------+
| no | text |
+------+-------------------------------------------------+
| 1 | SQL은 RDBMS를 조작하기 위한 언어이다. |
| 3 | LIKE는 SQL에서 사용할 수 있는 술어 중 하나이다. |
+------+-------------------------------------------------+
2 rows in set (0.00 sec)
LIKE 술어로 '%SQL'로 패턴 매칭(중간 일치)
중간 일치: 지정 문자열이 중간에 존재, 지정한 문자 앞뒤로 임의의 문자열 존재
문자열 도중에 존재하는 SQL 검색, %는 임의의 문자열과 매치하며 빈 문자열에도 매치함.
cf) %SQL과 같이 검색하면 앞쪽에 임의의 문자열이 존재하는 후방 일치가 됨
LIKE로 %를 검색하기
메타문자와 동일한 문자를 LIKE로 검색할 때 이스케이프 방법으로 처리. 예를 들어 LIKE로 %를 검색하는 경우에는 '\%'와 같이 \을 %앞에 붙여줌.
SELECT * FROM sample25 WHERE text LIKE '%\%%';
+------+---------------------------------------------+
| no | text |
+------+---------------------------------------------+
| 2 | LIKE에서는 메타문자 %와 _를 사용할 수 있다. |
+------+---------------------------------------------+
1 row in set (0.00 sec)
맨 앞의 %는 임의의 문자열과 매치
그 다음 %는 앞에 \가 있어 이스케이프가 된 것을 의미하기 때문에 메타문자가 아닌 일반문자 %를 의미함.
문자열 상수 안에 '를 포함하고 싶은 경우, 표준 SQL에서는 '를 2개 연속해서 기술하는 것으로 이스케이프 처리.
예를 들어 'It's'라는 문자열을 문자열 상수로 표기하면 'It''s'로 사용. ' 하나만 문자열 데이터일 경우 ''''로 작성
'Project > Backend 프로젝트' 카테고리의 다른 글
| 백엔드 프로젝트 4주차 (SQL 첫걸음) - 4장 (0) | 2023.10.07 |
|---|---|
| 백엔드 프로젝트 4주차 (SQL 첫걸음) - 3장 (0) | 2023.09.30 |
| 백엔드 프로젝트 3주차 (SQL 첫걸음) - 1장 (0) | 2023.09.17 |
| 백엔드 프로젝트 1주차 (Learn HTML) - 4 (1) | 2023.09.11 |
| 백엔드 프로젝트 1주차 (Learn HTML) - 3 (0) | 2023.09.09 |