[2장] 테이블에서 데이터 검색
04강 Hello World 실행하기
- SELECT
SQL 문에서 print("Hello World") 같은 존재.
SELECT * FROM 테이블명
SELECT 명령(질의, 쿼리)으로 테이블을 읽어올 수 있다.
여기서 SELECT 는 명령 종류, * 는 모든 열, sample21 은 테이블명이다.
- 애스터리스크 (*) 는 '모든 열' 을 의미하는 메타문자이다.
- FROM은 처리 대상 테이블을 지정하는 키워드이다.
- 예약어와 데이터베이스 객체명
SELECT, FROM, WHERE ... 등은 구를 결정하는 키워드이자 예약어이다.
테이블 외에 다양한 데이터를 저장하거나 관리하는 '어떤 것' 을 데이터베이스 객체라고 하고 이름을 붙여 관리한다.
- SELECT 예제에서 조회한 테이블도 sample21 이름을 가진 데이터베이스 객체이다.
같은 이름으로 다른 데이터베이스 객체를 만들 수 없고 예약어와 동일한 이름을 사용할 수 없다.
- Hello World 를 실행한 결과 = 테이블
SELECT 명령을 실행하면 행(레코드)과 열(컬럼/필드) 행과 열이 만나는 셀(하나의 데이터 값) 으로 이루어진 표 형식 데이터가 출력된다.
no | name | birth | address |
1 | 홍길동 | NULL | 서울특별시 마포구 |
- no, name, birth, address 는 열 이름
- 1, 홍길동, NULL, 서울특별시 마포구는 한 행(레코드)
- 홍길동은 한 셀
숫자로 구성된 데이터를 수치형 데이터라고 하고 오른쪽 정렬된다.
문자로 구성된 데이터를 문자열형 데이터라 하고 왼쪽 정렬된다.
날짜와 시각을 나타내는 데이터를 날짜시간형 데이터라 하고 왼쪽 정렬된다.
- 열은 하나의 자료형만 가질 수 있다.
- 값이 없는 데이터 = NULL
아무 것도 저장되어 있지 않은 상태로 아직 정의되지 않은 미지의 값, 또는 현재 알 수 없는 값.
만약 회사 테이블에서 신입 사원 데이터가 추가되어야 하는데 이 사원의 부서가 정해지지 않은 경우 NULL 로 표기할 수 있다.
05강 테이블 구조 참조하기
- DESC 명령
SELECT 명령은 열을 지정하여 조건을 붙이거나 특정 열의 값을 읽어올 수 있다.
- Field 열 이름
- Type 자료형
- Null NULL 값을 허용할 것인지 아닌지 나타내는 제약사항
- Key 해당 열이 '키' 로 지정되어 있는지 (기본키, 외래키 ... )
- Default 기본값, 생략했을 경우 채워지는 값.
- 자료형
- INTEGER 형
수치형의 하나로 정수값을 저장할 수 있는 자료형이다.
2. CHAR 형
문자열형의 하나로 문자열을 저장할 수 있는 자료형이다.
최대 길이를 지정해야 한다. CHAR(10) 으로 자료형을 저장하면 최대 10 문자로 된 문자열을 저장할 수 있고 11 문자는 저장할 수 없다.
VARCHAR 형은 저장할 문자열의 길이에 맞춰 저장공간을 가변적으로 사용한다.
반면 CHAR 형은 언제나 고정된 길이로 데이터가 저장된다.
- CHAR 형은 길이가 고정되어 있으므로 최대 길이보다 작은 문자열을 저장할 경우 나머지는 공백 문자로 채워진다.
- CHAR(4) 일때 'AA' 를 저장한다면 'AA ' 로 저장되는 것이다.
- CHAR(4) 일 때 'AA' 와 'AA '를 비교 연산하면 true 가 나오는 반면, VARCHAR(4) 일 때 'AA' 와 'AA '를 비교 연산하면 false 가 나온다. 저장공간이 가변적으로 사용되기 때문이다.
3. VARCHAR 형
데이터 크기에 맞춰 저장 공간의 크기도 변경된다.
4. DATE 형
날짜값을 저장할 수 있는 자료형이다.
5. TIME 형
시간을 저장할 수 있는 자료형이다.
06강 검색 조건 지정하기
- SELECT 구와 WHERE 구
SELECT 열1, 열2 .. FROM 테이블명 WHERE 조건식
검색 시, 행을 선택할 때는 WHERE 구를 열을 선택할 때는 SELECT 구를 사용한다.
- SELECT 구에서 열 지정하기
열을 전혀 지정하지 않거나, 존재하지 않는 열을 지정하면 에러가 발생한다.
열 지정 순서는 임의로 정할 수 있다.
- SELECT name, no FROM sample21; 도 가능하다.
동일한 열을 중복해서 지정해도 상관 없다.
- WHERE 구에서 행 지정하기
SELECT -> WHERE -> FROM 순으로 적으면 에러가 발생한다.
WHERE 구는 생략이 가능하다.
- 생략하면 테이블 내 모든 행이 검색 대상이 된다.
'=' 는 연산자이다.
- 연산자는 어떤 계산을 할 지 지정하는 것이다.
'=' 는 좌우 2개 항목이 필요한 이항 연산자이며 비교한 결괏값이 참인지 거짓인지를 반환하므로 비교 연산자이다.
= 연산자는 서로 같은 값인지를 비교하는 연산자인 반면 <> 연산자는 서로 다른 값인지를 비교하는 연산자이다.
- 문자열형의 상수
문자열형, 날짜시간형을 비교할 경우는 싱글쿼트('')로 둘러싸 표기해야 한다.
- 연월일은 하이픈(-) 시각은 시분초를 콜론(:) 으로 구분하여 표기한다.
자료형에 맞게 표기한 상수값을 리터럴이라 부른다.
- NULL 값 검색
= 연산자로 NULL 을 검색할 수는 없습니다.
- IS NULL
NULL 값을 검색할 때는 = 연산자가 아닌 'IS NULL' 을 사용한다.
NULL 값이 아닌 행을 검색하고 싶다면 'IS NOT NULL' 을 사용하면 된다.
- 비교 연산자
- = 연산자
- <> 연산자
- > 연산자
- < 연산자
- <= 연산
07강 조건 조합하기
- AND
좌우에 항목이 필요한 이항 연산자
좌우 식 모두 참일 경우 참 반환
-> 모든 조건식을 만족하는 경우 조건식은 참이 된다. (및)
-> 논리곱
-> 교집합
- OR
좌우에 항목이 필요한 이항 연산자
좌우 어느 쪽이든 조건을 만족하면 참 반환
-> 어느 쪽이든 하나만 참이 되면 조건식은 참이 된다. (또는)
-> 논리합
-> 합집합
- AND 와 OR 사용 시 주의할 점
no=1 혹은 no=2 에 해당하는 행을 검색하고 싶었으나 2가 상수이므로 무조건 참을 반환하게 되어 모든 행이 조회된다.
- 연산자 우선순위
OR 보다 AND 우선 순위가 높기 때문에
- a=2 AND b=1
- a=1 OR (a=2 AND b=1) OR b=2
순으로 연산된다.
따라서 a=2 AND b=1 을 만족하는 행이 없으므로, a=1 이거나 b=2 인 행이 검색된 것이다.
- NOT
오른쪽에만 항목을 지정하는 단항 연산자
오른쪽에 지정한 조건식의 반대 값을 반환
08강 패턴 매칭에 의한 검색
'LIKE' 술어 사용하면 문자열의 일부분을 비교하는 부분 검색이 가능하다.
= 연산자는 셀의 데이터 값이 완전히 동일한지를 비교하고 LIKE를 사용하면 특정 문자나 문자열이 포함되어 있는지를
검색하는 패턴 매칭이나 부분 검색이 가능하다.
- LIKE
왼쪽에는 매칭 대상 오른쪽에는 패턴
패턴 매칭 시 %(임의의 문자열), _(임의의 문자 하나) 를 사용한다.
sample25 테이블에는 'SQL' 이 포함된 다른 행이 있으나, SQL 앞에도 문자열이 존재하기 때문에 검색되지 않았다.
% 는 빈 문자열과도 매치하기 때문에 첫 번째 행도 검색된다.
1. 전방 일치
SQL 은 RDBMS 를 ~
= SQL%
2. 중간 일치
LIKE는 SQL에서 사용 ~
= %SQL%
3. 후방 일치
입문 SQL
= %SQL
- LIKE로 % 검색하기
이스케이프로 처리가 가능하다.
%\%%
= 메타문자 %, % 그 자체 문자, 메타문자 % 로 연결
- ' 의 이스케이프
'를 2개 연속해서 기술하는 것으로 이스케이프를 처리할 수 있다.
'It's' (x) = ' ' ' (x)
'It''s' (o) = ' '' ' (o)