ECC/SQL 첫걸음

[SQL] 2. 테이블에서 데이터 검색

jiheechoi 2025. 3. 22. 02:26

1. SELECT 명령 구문

1)SELECT 명령: DML에 속하는 SQL 명령어. 이 명령어를 통해 데이터베이스의 데이터를 읽어올 수 있음. '질의'나 '쿼리'라고 불리기도 한다.

 

-예시

SELECT * FROM sample21;

▶ SELECT 명령 입력 예시

   → SELECT: SQL 명령의 한 종류. 'SELECT 명령을 실행하세요'라는 의미임.

   → 애스터리스크(*): '모든 열'을 의미하는 메타문자

   → FROM: 처리 대상 테이블을 지정하는 키워드. FROM 뒤에 테이블 명을 지정함.

   → sample21: 테이블명

   → 세미콜론(;): 명령문의 마지막을 나타내는 문자. 세미콜론을 붙이지 않고 엔터키를 누르면 입력 중인 것으로 간주되어 명령문이 실행되

       지 않음.

   → 명령어를 실행하면 sample21 테이블의 모든 데이터를 읽어옴.

 

-SQL 명령은 키워드에 의해 '구'라는 단위로 나눌 수 있음.

   → ex)SELECT구: SELECT * / FROM구: FROM sample21

 

2) 예약어와 데이터베이스 객체명

-예약어: 구를 결정하는 키워드 

   → ex)SELECT, FROM 등

-데이터베이스 객체: 다양한 데이터를 저장하거나 관리하는 기능을 가진 것. 테이블, 뷰 등이 있음.

   → 데이터베이스 객체는 이름을 붙여 관리함.

  ※ 주의사항

  • 같은 이름으로 다른 데이터베이스 객체를 만들 수 없음.
  • 데이터베이스 객체명에는 예약어와 동일한 이름을 사용할 수 없음.

   → 예약어와 데이터베이스 객체명은 대소문자를 구별하지 않음.

 

3) 테이블

-테이블은 '행(레코드)'과 '열(컬럼/필드)'로 구성된 표 형식의 데이터를 말함.

-행은 모두 동일한 형태로 되어 있으며 옆으로 '열'이 나열되는데, 열마다 이름이 지정되어 있음.

-각각의 행과 열이 만나는 부분을 '셀'이라고 부르며, 셀에는 하나의 데이터 값이 저장됨.

no name birthday address
1 박준용  1976-10-18 대구광역시 수성구
2 김재진 NULL 대구광역시 동구
3 홍길동 NULL 서울특별시 마포구

 

-숫자만으로 구성된 데이터를 '수치형' 데이터라고 함. 

   → 수치형 데이터는 오른쪽 정렬로 표시됨  ex) 각 행의 no열 값

-임의의 문자로 구성된 데이터를 '문자열형' 데이터라고 함.

   → 문자열형 데이터는 왼쪽 정렬로 표시됨  ex) 각 행의 name열 값

-날짜와 시각을 나타내는 데이터를 '날짜시간형' 데이터라고 함.

   → 날짜시간형 데이터는 왼쪽 정렬로 표시됨  ex) 각 행의 birthday열 값

-각 열은 하나의 자료형만 가질 수 있음. 

-NULL은 '아무 것도 저장되어 있지 않은 상태'를 의미함.

2. 테이블 구조 참조하기

1)DESC 명령

DESC 테이블명;

 

-DESC 명령을 실행하면 테이블 구조를 참조할 수 있음.

  • Field: 열 이름이 표시됨.
  • Type: 해당 열의 자료형을 나타냄.
  • Null: NULL 값을 허용할 것인지 아닌지를 나타내는 제약사항으로, yes로 지정하면 NULL 값을 허용한다는 의미.
  • Key: 해당 열이 '키'로 지정되어 있는지를 나타냄.
  • Default: 행을 추가할 때 열의 데이터 값을 생략했을 경우 적용되는 값(=기본값)

2) 자료형

  • INTEGER형: 수치형의 하나로, 정수값을 저장할 수 있는 자료형. 소수점은 포함 불가함.
  • CHAR형: 문자열형의 하나로, 문자열을 저장할 수 있는 자료형. 문자열의 최대 길이를 지정해야 함. VARCHAR형과 달리 언제나 고정된 길이로 데이터가 저장됨(=고정 길이 문자열 자료형). 최대 길이보다 작은 문자열 저장시 공백문자로 나머지를 채운 후 저장.
  • VARCHAR형: 문자열형의 하나로, 최대 길이를 지정하는 점은 CHAR형과 같음. 그러나, CHAR형과 달리 데이터 크기에 맞춰 저장공간의 크기도 변경됨(=가변 길이 문자열 자료형).
  • DATE형: 날짜값을 저장할 수 있는 자료형. 즉 연월일의 데이터를 저장할 수 있는 자료형.
  • TIME형: 시간을 저장할 수 있는 자료형.

3. 검색 조건 지정하기

-검색: 행이나 열을 선택하여 데이터베이스에서 데이터를 읽어오는 것.

-검색 조건 지정은 행을 선택하는 것과 열을 선택하는 것으로 구분할 수 있음.

   →행을 선택할 때는 WHERE 구를 사용하며, 열을 선택할 때는 SELECT 구를 사용함. 

 

1)SELECT 구에서 열 지정하기

SELECT 열1, 열2… FROM 테이블명

 

-콤마를 이용하여 열명 여러개를 지정 가능함. 

-지정한 열만 결괏값으로 표시됨.

-열을 전혀 지정하지 않거나, 테이블에 존재하지 않는 열을 지정하면 구문 에러 발생.

-열 지정 순서는 임의로 정할 수 있고, 결과는 지정한 열의 순서대로 표시됨.

-동일한 열을 중복해서 지정해도 무관함.

 

2)WHERE 구에서 행 지정하기 

SELECT 열 FROM 테이블명 WHERE 조건식

 

-WHERE 구는 FROM 구의 뒤에 표기해야 함.

   →SQL에서는 구의 순서가 정해져 있어 순서를 바꿔적을 수 없음. WHERE 구는 생략 가능함. 만약 WHERE 구를 생략하면 테이블 내의

      모든 행이 검색대상이 됨.

-조건에 일치하는 행만 SELECT의 결과로 반환됨.

-조건식: 열과 연산자, 상수로 구성되는 식. 조건식은 참과 거짓을 반환하는 비교 연산자나 술어를 사용해서 표기되고, 명령문은 조건식이 참이 되는 행만 결과로 반환함.

   →ex) no = 2 

 

3)문자열형의 상수

-리터럴: 자료형에 맞게 표기한 상수값

-수치형 조건식의 경우, 비교할 숫자를 그대로 조건식에 표기함.

-문자열형과 날짜시간형 조건식의 경우, 리터럴을 싱글쿼트('')로 둘러싸 표기함.

   →이때, 날짜시간형 리터럴의 연월일은 하이픈(-)으로 구분하고, 시각형 리터럴은 시분초를 콜론(:)으로 구분하여 표기함. 

 

4)NULL 값 검색

-NULL 값은 = 연산자가 아닌 'IS NULL' 이라는 술어를 사용함.

   →ex) SELECT * FROM sample21 WHERE birthday IS NULL; 과 같이 사용. 결과로 birthday 항목의 값이 NULL인 행을 반환.

-NULL 값이 아닌 행을 검색하고 싶다면 'IS NOT NULL' 이라는 술어를 사용함.

 

5)비교 연산자 

  • = 연산자: 좌변과 우변의 값이 같을 경우 참이 됨.
  • <> 연산자: 좌변과 우변의 값이 같지 않을 경우 참이 됨.
  • > 연산자: 좌변의 값이 우변의 값보다 클 경우 참이 됨.
  • < 연산자: 좌변의 값이 우변의 값보다 작을 경우 참이 됨.
  • >= 연산자: 좌변의 값이 우변의 값보다 크거나 같을 경우 참이 됨.
  • <= 연산자: 좌변의 값이 우변의 값보다 작거나 같을 경우 참이 됨.

4. 조건 조합하기

1)AND로 조합하기

-좌우의 식 모두 참일 경우 AND 연산자는 참을 반환함.

-논리곱을 계산하는 논리 연산자

SELECT * FROM sample24 WHERE a<>0 AND b<>0;

 

   →a 열과 b 열이 모두 0이 아닌 행을 반환.

 

2)OR로 조합하기

-좌우의 식 중 어느 쪽이든 조건을 만족하면 참을 반환함.

-논리합을 계산하는 논리 연산자

SELECT * FROM sample24 WHERE a<>0 OR b<>0;

   

   →a 열이 0이 아니거나 b 열이 0이 아닌 행을 반환.

 

3)AND와 OR을 사용할 경우 주의할 점

-AND 연산자나 OR 연산자의 좌우로 열이나 상수만을 지정한다면 기대한 결과값을 얻을 수 없을 가능성이 있음.

   →ex) no 열의 값이 1 또는 2인 행을 추출하는 경우

SELECT * FROM sample24 WHERE no=1 OR 2;

 

   ▶ 상수 2는 논리 연산으로 항상 참이 되므로 결과적으로 모든 행을 반환하게 된다. 따라서 이 명령어를 통해 올바를 결과를 얻을 수 없음.

SELECT * FROM sample24 WHERE no=1 OR no=2;

 

   ▶ 올바른 조건식.

 

-연산자 우선순위: AND는 OR에 비해 우선 순위가 높음.

   → 원하는 조건을 지정하기 위해 괄호()로 우선순위를 변경할 수 있음.

 

4)NOT으로 조합하기 

-오른쪽에만 항목을 지정하는 단항 연산자.

-오른쪽에 지정한 조건식의 반대 값을 반환함.

SELECT * FROM sample24 WHERE NOT(a<>0 OR b<>0);

5. 패턴 매칭에 의한 검색 

1)LIKE로 패턴 매칭하기

-패턴 매칭(=부분 검색): 셀의 데이터 값에 특정 문자나 문자열이 포함되어 있는지를 검색하고 싶은 경우 사용하는 방법.

-= 연산자로 검색할 경우에는 열 값이 완전히 일치할 때 참이 되지만 LIKE 술어를 사용하면 열 값이 부분적으로 일치하는 경우에도 참이 됨.

열명 LIKE '패턴'

   

    → 왼쪽에는 매칭 대상을 지정하고, 오른쪽에는 패턴을 문자열로 지정(수치형 상수는 지정 불가)

    → 패턴을 지정할 때는 메타문자를 사용할 수 있음.

-메타문자: 패턴 매칭 시 '임의의 문자 또는 문자열'에 매치하는 부분을 지정하기 위해 쓰이는 특수 문자. '와일드카드'라고도 함. 패턴을 정의할 때 사용할 수 있는 메타문자로는 퍼센트(%)와 언더스코어(_)가 있다.

    → 퍼센트: 임의의 문자열 / 언더스코어: 임의의 문자 하나를 의미.

 

SELECT * FROM sample25 WHERE text LIKE 'SQL%';

 

    → 문자열이 SQL로 시작하는 행을 반환.

SELECT * FROM sample25 WHERE text LIKE '%SQL%';

 

    → 문자열 도중에 SQL이 존재하는 행을 반환. 이때, 메타문자 %는 빈 문자열과도 매치하므로 SQL로 시작하는 문자열도 반환됨.

 

2) 이스케이프

-LIKE에서는 메타문자 부분이 임의의 문자열을 의미하므로 %나 _를 검색조건으로 지정하는 방법이 필요

    → 이스케이프라는 방법으로 처리 가능('\%'나 '\_'와 같이 \를 메타문자 앞에 붙여서 검색 가능)

    → 문자열 상수 '의 이스케이프: 문자열 상수 안에 '를 포함하고 싶은 경우 '를 2개 연속해서 기술하면 됨.