본문 바로가기

study/sql

테이블에서 데이터 검색

SQL 첫걸음이란 책을 읽으면서 정리중. 해당 챕터는 명령어 설명이 많이 나온다. 명령어는 다른 좋은 글들이 많기 때문에 자세한 것이 알고싶을 때는 그때그때 검색하면 될 것 같고, 여기서는 큼지막하게, 중요한 것 같은 것만 정리.

 

sql 헬로 월드.

SELECT * FROM sample; : 각 키워드마다 띄어쓰기를 해야 한다. 문장 끝에는 세미콜론을 붙여야 한다. 각 키워드를 분석해보자.

SELECT : 명령의 종류이다. select는 데이터를 읽어오는 명령어다.* : 모든 열을 의미하는 문자.FROM : 처리 대상 테이블을 지정하는 키워드이다.sample : 테이블의 이름이다.=> sample이라는 테이블에서 모든 열의 데이터를 가져오라는 명령어다.

 

다른 프로그래밍 언어와 마찬가지로 예약어가 존재한다. 위 예제를 보면, "SELECT", "*", "FROM" 같은 것이 예약어이다.

 

데이터베이스 객체 : 데이터베이스는 테이블 외에 다양한 데이터를 저장하거나 관리하는 "어떤 것"을 만들 수 있다.(예를 들어 테이블, 뷰) 데이터베이스 객체는 이름을 붙여 관리한다. 이 때, 예약어를 사용할 수 없고, 이미 있는 이름도 사용할 수 없다.

 

예약어와 데이터베이스 객체 이름은 대소문자를 구분하지 않는다. 하지만 제품마다, 설정따라 다를 수 있다.selECt * from saMPle == SELECT * FROM SAMPLE

 

SELECT 명령을 실행하면 표 형식의 데이터가 출력된다. 이것은 행(레코드)과 열(컬럼/필드)로 구성되어 있다. 행과 열이 만나는 부분을 셀이라고 한다. 셀에는 하나의 데이터 값이 저장되어 있다.

 

열은 자료형을 설정할 수 있고, 해당하는 자료형의 데이터만 저장할 수 있다. 

NULL은 데이터가 들어있지 않은 것을 의미한다.

select 명령어 실행 결과


DESC 명령으로 테이블의 구조를 참조할 수 있다. -> DESC samlple;

DESC 명령어 실행 결과

DESC 명령으로 어떤 열이 있는 지 알 수 있고, 그 열에 대한 정보도 알 수 있다.

Field는 열 이름, Type은 자료형, Null은 NULL 값을 허용하는 지, Key는 해당 열이 키로 지정됐는지, Default는 기본값을 의미한다.

 

자료형에는 INTEGER형(정수형), CHAR형(문자열형), VARCHAR형(문자열형), DATE형(연월일), TIME형(시분초)이 있다.

CHAR형은 열의 최대 길이를 지정해야 한다. CHAR(10)은 최대 10자리 문자열만 저장할 수 있다. 그래서 고정 길이 문자열이라고도 한다.

VARCHAR형은 문자열 길이에 맞춰 저장공간이 가변적으로 사용된다. 그래서 가변 길이 문자열이라고도 한다.


모든 열(*)말고 특정 열만 가져오는 방법이 있다.

 

SELECT 구에서 열을 지정해서 값을 가져올 수 있다. -> SELECT title, writer FROM sample

지정하는 순서는 상관없고, 지정한 순서대로 데이터를 표시한다. 열을 아예 지정하지 않거나, 없는 열을 지정한다면 에러가 발생할 수 있다.

 

 

WHERE 구를 사용해서 행을 지정할 수 있다. FROM 뒤에 표기한다. WHERE 뒤에 검색 조건을 표기한다. 그러면 조건에 일치하는 행만 결과로 반환한다. 구의 순서는 바뀌면 안된다.(SELECT * FROM sample WHERE 조건)

 

조건식은 열, 연산자, 상수로 구성된다. EX) no = 2 no는 열 이름, = 은 연산자,  2는 상수. 조건식은 참 또는 거짓 값을 반환해야 한다.

 

다양한 조건식

  • no = 2 : no가 2인 경우
  • no <> 2 : no가 2가 아닌 경우
  • writer = '신짱구' : writer가 '신짱구'인 경우 -> 문자열, 날짜시간형 데이터 비교 시, 싱글쿼트를 사용해야 한다.
  • 연월일은 하이픈(-), 시분초는 콜론(:)으로 구분. -> '2020-01-01', '2020-01-01 01:01:01'
  • name IS NULL : name이 Null인 경우. Null은 = 연산자로 검색 못함.
  • age > 10 , age >= 10, age <10, age <= 10 등등

조건식은 조합해서 사용할 수 있다. AND, OR, NOT

 

WHERE 조건1 AND 조건2 : 조건1과 조건2 만족(교집합)

WHERE 조건1 OR 조건2 : 조건1 또는 조건2 만족(합집합)

EX) WHERE age=10 AND age=11

 

AND 연산자가 OR 연사자보다 우선순위가 높다. 다양한 조건식을 사용하는 경우, 헷갈릴 수 있으니 괄호를 묶어두는 것이 좋다.

 

WHERE NOT 조건1 : 조건1이 아닌 경우.


LIKE라는 술어를 사용하면 부분 검색(패턴 매칭)을 할 수 있다. -> 열 LIKE 패턴.

 

= 연산자는 완전히 같은 경우만 검색이 가능하지만 LIKE를 사용하면 부분적으로 일치하는 경우도 검색할 수 있다.

 

패턴을 정의할 때는 메타문자를 사용한다. 이것은 와일드카드라고도 불리는데, 패턴 매칭 시 '임의의 문자 또는 문자열'에 매치하는 부분을 지정하기 위해 쓰이는 특수 문자이다.

 

%는 임의의 문자열, _(언더바)는 임의의 문자 하나를 의미한다. 패턴을 정의할 때, 여러 메타 문자를 사용해도 된다.

와일드카드로 자주 쓰이는 *은 LIKE에서 사용할 수 없다.

 

SELECT * FROM sample WHERE text LIKE '나는%'; : sample테이블의 text가 '나는'으로 시작하는 열만 가져온다.(전방 일치)

'나는 누구다'(O), '나는나는'(O), '너나는'(X)

 

SELECT * FROM sample WHERE text LIKE '%나는%'; : sample테이블의 text에 '나는'이 들어있는 열만 가져온다.(중간 일치)

'나는 누구다'(O, %는 비어있는 문자열과도 매치됨), '나는나는'(O), '너나는'(O), '너나너는'(X)

 

문자열에 '%'가 들어있고 이것을 검색하려면 WHERE text = '%\%%'; 이렇게 검색한다. % 앞에 \를 붙이면 메타 문자가 아닌 그냥 글자 %를 의미한다. %가 이스케이프된 것이라고 말한다. _(언더바)도 마찬가지.

 

'(싱글쿼트)를 이스케이프 처리하려면 2번 연속으로 기술한다. it's을 SQL에서 기술하려면 'it''s'로 표기한다.