Select 구문을 사용한 데이터 검색, null VS 0 VS 공백, Distinct

Select 구문을 사용한 데이터 검색

테이블 구조조회

describe 테이블명이지만 실무에선 줄여서 desc 테이블명 명령어를 사용한다.

1
SQL> desc 테이블명

테이블로부터 데이터검색

  1. 아스타(*)
    별표(*)라고 아스타 읽는다
    테이블명에 모든 컬럼을 출력해달라는 의미이다.
    그때 출력되는 순서는 기본 컬럼이 출력되는 순서이다.
1
2
SQL> select *
SQL> from 테이블명
  1. 컬럼사이즈조절
    컬럼사이즈를 조절하고싶다면 아래 명령어를 입력하면된다.
    사이즈를 줄이는 건 세션단위로만 지속된다.
1
2
3
4
SQL> col 사이즈조절할컬럼명 format a원하는사이즈

//예시
SQL> col department_name format a20

사이즈를 줄이는 건 쉽게 가능하지만 사이즈를 늘리는건 안된다.
따라서 사이즈를 너무 많이 줄여서 #이 엄청 뜬 경우 sql프로그램을 종료 후 재실행해야하면 원래 사이즈로 돌아간다.

아래 exit쿼리는 sql만 종료할 뿐 db를 종료하는 것이 아니다.
sql만 종료하고 다시 유저로 로그인하면 간단하게 끝!

1
2
3
SQL> exit
SQL> conn 유저명/비번
SQL> col 사이즈조절할컬럼명 format a원하는사이즈

원하는 순서대로 컬럼을 출력하고 싶다면 아래와같이 쿼리구문을 날리면된다.
기본 순서가 바뀌는 것이 아니라 내가 display하고싶은 순서대로 화면에 출력만해주는 것이다.

  1. 산술식
    쿼리구문에는 산술식이 가능하다. 산술식은 사칙연산만 가능하다.
    테이블 employees에서 2가지 컬럼(last_name, salary)과 산술식이 들어간 컬럼 1개(12*(salary+100)))를 출력하는 코드는 아래와 같다.
1
2
SQL> select last_name, salary, 12*(salary+100)
SQL> from employees




null값

null은 사용할 수 없는 값, 알려지지 않은 값, 할당받지 못한 값, 모르는 값, 아직 정의되지 않은 값이다.
null은 0과 공백과는 다른 특수한 값으로 모든 데이터타입에 사용가능하다.

  1. null VS 0 VS 공백
  • null은 알려지지 않은 값이고 모든 데이터타입에 사용가능.

  • 숫자 0(zero)는 숫자데이터타입의 한 종류

  • 공백은 캐릭터데이터타입의 한 종류

숫자 0와 null은 구분이 가능하다
어떻게?
desc 명령어를 통해서!

1
SQL> desc 테이블명

위의 명령어로 출력되는 테이블의 TYPE에 NUMBER인 경우 0의 값일것이다.

그렇다면 공백과 NULL은 어떻게 구분할까?
desc 명령어를 통해서는 구분할수가없고, 구분할 수 있는 함수가 존재한다.

결국 desc명령어를 통해 null과 숫자데이터타입은 구분이 가능하지만 null과 공백데이터타입은 육안으로 구분하기힘들다.

  1. null은 사칙연산을 해도 null이 된다.
    null때문에 계산이 잘 안되는 경우가 왕왕있다.
    계산할때만이라도 null값을 0으로 넣어서 계산하는 함수가 존재한다.




제목명을 보기좋게 display하기

alias (엘리아스) 별칭

칼럼명에 별칭(alias 엘리아스)을 넣어 데이터를 출력할 수 있다.

  1. 칼럼명 as alias
  2. 칼럼명 alias
  3. 칼럼명 (as) “Alias” : 대소문자구분, 공백포함, 특수문자 포함을 원하는 경우 as생략가능!
1
2
SQL> select last_name as name, salary*12 "Annual Salary"
SQL> from employees;

엘리아스를 사용하면 엘리아스명으로 format을 새로 지정해줘야한다.
위에 별칭을 줬던 두 컬럼의 사이즈를 format해보자.

1
2
SQL> col name format a20
SQL> col "Annual Salary" format a20

|| 연산자 사용

두개의 컬럼을 하나로 합쳐서 출력하면서 직원이름과 job id를 매칭시켜서 출력하고싶다면 ||연산자를 사용하면 된다. 그리고 두 컬럼사이를 구분하기 위해 리터럴 값은 ‘ is a ‘ 를 넣어준다.
리터럴값이 뭘까? 아래에 설명글을 보자.

1
2
3
SQL> select last_name || ' is a ' || job_id
SQL> as "Employees Details"
SQL> from employees;

리터럴

리터럴값 : 명령어, 테이블명, 컬럼명, 엘리아스, 키워드는 아닌데 쿼리구문에 포함된 일반 문자,숫자,날짜 값!

숫자 리터럴값은 그냥적어도 되지만 문자나 날짜 리터럴값은 작은따음표(‘’)로 묶어서 작성해야한다.

실제 문법은 큰따옴표(“”)는 안되고 작은따옴표만 가능하지만 요즘에는 사용 프로그램에 따라 큰따옴표도 자동적으로 작은따옴표료 인식하기도한다.




Distinct

중복된 값을 자동으로 제거해 주고 한번만 display해주는 키워드

1
2
SQL> select distinct department_id
SQL> from employees;

예를들어 employees 테이블에 사원들의 department_id가 총 몇개인지 궁금하다.
이럴때 distinct 키워드를 쓰지않고 출력하게된다면 모든 사원의 department_id가 사원수만큼 출력된다.

  • 1번부서
  • 2번부서
  • 1번부서
  • 1번부서
  • 5번부서
  • 5번부서
  • 6번부서
  • 총 7row

이때 distinct 키워드를 사용하면 중복값을 제거하고 출력할수있다

  • 1번부서
  • 2번부서
  • 5번부서
  • 6번부서
  • 총 4row

이를 통해 department_id의 총 갯수파악이 쉬워진다.