Chap 3. SQL 데이터 검색

Date:     Updated:

카테고리:

태그:

SQL을 공부하기 앞서 가장 중요한 개발 환경을 만들었다. 우선 교재에 따라 MySQL이라는 RDBMS를 채택하여 공부하기로 했다. 표준 SQL을 위주로 공부할거라 Oracle과 큰 차이는 없을거라 생각했다.

자세한 설치 방법은 아래 주소를 참고하였다. (물론 책에도 나와있었지만, 시청각 자료가 있음 훨씬 더 안정적이다.)

MySQL을 설치한 이후 나는 추가적으로 책에서 제공한 DB 샘플 더미 파일을 다운 받아 환경설정을 마쳤다.

서버 & DB 사용하기

서버

처음 클라이언트 터미널을 키면 사용자인증을 하게 된다. 미리 설정했던 비밀번호를 입력하여 MySQL 서버에 들어간다.

일반 터미널을 이용하여 MySQL 서버에 들어가려면 아래와 같은 코드를 입력한다.

mysql -u[사용자명] -p[비밀번호]

DB 선택하기.

우선 서버 내에 어떤 DB가 있는지 확인한다.

show databases;

사용할 DB를 확인한 뒤 밑 코드를 입력해 DB를 선택한다.

use [DB]

중간에 DB를 바꾸고 싶다면 다시 use 명령문을 사용하면 된다.

MySQL 클라이언트 종료

exit;

데이터 검색, 질의

MySQL 클라이언트를 통해 SQL 명령문을 서버에 전송하면 그에 맞는 값을 서버가 응답한다.

SELCET문

DB 속 데이터 검색의 기본구문이다.

SELECT [열이름 OR *] FROM [테이블명];

SELECT는 DML에 속하는 명령어로 데이터를 선택하다, ‘질의’, ‘쿼리’라고 불린다. *은 애스터리스크로 모든 열을 의미하는 메타문자다.

FROM은 처리 대상 테이블을 지정하는 키워드이다.

각 예약어 및 객체명은 띄어쓰기를 해야하며 SQL문 마지막은 ;(세미콜론)으로 끝나야한다.

SQL 명령은 키워드(SELECT, FROM 등)에 의해 ‘구’단위로 구성된다. 구는 순서가 정해져있으며 생략해도 되는 구들이 존재한다.

예약어와 DB 객체명

SELECT, FROM, * 등 SQL 명령문 및 메타문자와 같이 미리 정해져있는 단어, 이름을 예약어라고 한다.

DB 객체 (테이블, 뷰 등)은 반드시 이름이 있어야하며 중복은 허용되지 않는다. 이때 예약어의 이름으로 이름을 생성할 수 없다.

예약어와 DB 객체명은 대소문자를 구별하지 않는다. SELECT이든 select이든 동일하다는 것이다. 다만, DB 제품들은 이를 구별하는 경우도 있다.

SELCET문 실행결과

SELCET 명령을 실행하면 테이블이 출력된다. 행(레코드)와 열(컬럼/필드)로 구성되며 행은 모두 동일하나 열은 각각의 이름이 지정되어 있다. 행과 열이 만나는 부분을 셀이라하며 셀에는 하나의 데이터가 들어간다.

데이터는 대략 3가지로 나뉜다. 자료형은 더 세분화 된 개념이다.

  • 수치형 데이터
    1, 2, 3처럼 숫자만으로 구성된 데이터를 수치형데이터라고 한다. 오른쪽 정렬이다.

  • 문자열형 데이터 말 그래도 문자로 구성되어 있는 데이터를 말한다. 왼쪽 정렬이다.

  • 날짜시간형 데이터 날짜와 시각을 나타내는 데이터이며 왼쪽 정렬이다.

열은 하나의 자료형만을 갖을 수 있다.

NULL 값

NULL값은 데이터 값으로 아무것도 저장되어 있는 않은 상태를 말한다. 즉 해당 셀에 데이터가 없다는 것이다.

테이블 구조 참조

SQL 명령문을 통해 데이터 검색 혹은 테이블을 조작하기 전 필요한 테이블 구조를 파악한다면 더 효율적으로 SQL문을 만들 수 있을거라 생각한다. DESC 명령을 통해 구조를 파악하자!

DESC 명령

DESC, 헷갈릴 수 있다. 원래 내가 알기론 이게 ,, 내림차순 정렬 명령문이었다. 하지만 description 설명이라는 문자의 줄임말로 테이블 구조를 참조하는 명령문으로도 사용한다.

DESC [테이블명];

image

Field - 열이름, Type - 자료형, NUll - 제약사항으로 null값을 허용할지 말지, Key - 키로 지정되어있는가? Default - 기본값으로 만일 데이터를 입력안했을 때 기본적으로 입력되는 값이 적혀있음.

자료형

  • INTEGER

수치형 데이터로 정수값을 저장하는 자료형이다. int(10)은 자리수가 최대 10이라는 것.

  • CHAR

문자열형 데이터로 문자열을 저장한다. 이때 열의 최대 길이를 꼭 지정해야한다. 언제나 고정된 길이로 데이터가 저장되며 자리수보다 적은 데이터가 입력되면 나머지는 공백문자로 저장된다.

  • VARCHAR

문자열형 데이터로 문자열을 저장하고 최대 길이를 꼭 입력해야한다. 다만, CHAR형과 다르게 데이터 크기 즉, 입력한 문자 수에 따라 저장공간 크기가 조정된다. 가변 길이 문자열이다.

  • DATE

날짜값을 저장하는 자료형이다. 연월일 저장함.

  • TIME

시분초를 저장하는 자료형이다.

검색 조건 지정

검색 조건을 지정하기 위해 WHERE 구를 사용한다.

SELCET [열이름] FROM [테이블명] WHERE [조건식]

화면에 표시될 수 있는 데이터(행)는 한정적이고 필요한 데이터만 추출하기 위해 WHERE 구를 사용한다.

SELCET은 열을 선택, WHERE은 행을 선택!

SELCET 구 열 지정하기

SELECT 1, 2 ... FROM [테이블명]

*를 사용해 모든 열을 불러올 수도 있지만 콤마(,)를 이용하여 여러 개의 컬럼을 지정할 수 있다. 컬럼은 SELCET문에 명시된 순서대로 출력되며 중복도 가능하다.

WHERE 구 행 지정하기.

SELCET [] FROM [테이블명] WHERE [조건식]

WHERE 구는 생략 가능하다. 생략 시 모든 행이 출력된다. 다만, 구의 순서는 주의하자.

  • 조건식

    조건식은 ‘열’, ‘연산자’, ‘상수 혹은 문자열’로 구성되어있다. 우리가 흔히 생각하는 조건식으로 참과 거짓을 구별할 수 있는 식이면 된다. 이때 상수는 (예, 2)는 늘 참이다.

⚫ 수치형 자료형은 number = 1 이런식으로 싱글쿼트(‘‘)없이 상수를 입력하면 된다.

⚫ 문자열형은 char = 'heoni00' 이렇게 문자열을 싱글쿼트로 둘러싸 표기해야한다.

⚫ 날짜시간형 또한 싱글쿼트로 둘러싸 표기해야하며 날짜의 경우 연월일을 -로 구분, 시각은 시분초를 :로 구분해야한다.

비교연산자는 대표적으로 ‘=’, ‘<>’, ‘>’, ‘>=’등이 있다.

NULL값 검색

NULL값 검색은 위와 같은 방식으로 진행하지 않는다.

= 연산자가 아닌 IS NULL을 사용한다. NULL값인 경우 반환한다.

조건식 -> birthday IS NULL;

조건 조합

데이터 검색을 할 때 1개의 조건만으로 질의를 하기보단 여러개의 조건을 조합하여 필요한 정보를 검색한다.

논리연산자 AND, OR, NOT

조건식1 AND 조건식2 # 두조건 모두 참이어야 반환
조건식1 OR 조건식2 # 두조건  하나만 참이라도 반환
NOT 조건식 # 조건에 거짓만 반환

이때 주의할 것은 논리연산자의 우선 순위이다.

AND가 1순위, OR가 2순위이다.

만일 여러개의 조건 조합에 정확한 의도대로 추출하고 싶다면 괄호()를 이용하여 우선순위를 묶어라.

패턴 매칭, 부분 검색

 LIKE 패턴(문자열)

LIKE를 이용하여 문자열의 일부분이 포함된 레코드를 추출하는 기법이다. = 연산자가 완전히 같은 것을 찾는다면 LIKE는 필요한 부분만!

다만 메타문자 %_를 잘 사용해야한다. *는 사용 불가

  • %는 임의의 문자열들을 의미한다.
  • _는 임의의 문자를 의미한다.

excel 혹은 python 처럼 $sql$ 처럼 앞뒤에 어떤 자료가 있을 수 있다! 라는 의미와 같다고 생각하면 된다.

예를 들어 조건식이 text = ‘%SQL%’라면 text 컬럼에서 SQL이 중간에 포함된 (처음과 끝도 가능) 행 추출이 되는거다.

만일 ‘SQL%’이라면 문자열 처음에 SQL이 있는 문자 추출, ‘%SQL’라면 문자열 끝에 SQL문자가 있는 레코드 추출이 된다.

이스케이프

당연히 부분 검색에서 %라는 문자 혹은 _문자 '라는 문자를 부분검색할 수도 있다.

이럴땐 프로그래밍 기술 이스케이프를 사용하면 된다.

  • 조건식 text = ‘%/%%’ 이렇게 찾고자하는 문자 %를 /%로 표기하면된다.

  • ‘의 경우 조건식 text = ‘’’’ 처럼 문자를 ''로 표기하면 된다.

SQL 카테고리 내 다른 글 보러가기

댓글 남기기