KDT/DB

231229 DB - select 구문을 사용한 데이터 검색

001cloudid 2023. 12. 29. 17:40
728x90
  • root : 관리자 계정(서버관리자용)
  • os user : 최소한의 권한만 가지고 있음

 

<Linux(OS) User>

  • root(oracle01)
    Linux 설치 시 내장된 User
    관리자의 권한을 소유함.
  • oracle(oracle)
    DBA, 개발자용 일반 User
    최소한의 권한을 소유함.
    /home/oracle 디렉토리 권한
    /u01/app/oracle 디렉토리 권한
    즉 모든 DB파일은 /home/oracle 또는 /u01/app/oracle 디렉토리에 설치

 

<"ORCL" DB User>

sys, system : DB생성시 자동으로 만들어지는 user

  • sys : sysdba 권한(dba + DB 시작/종료)
    SQL> conn sys/패스워드 as sysdba
  • system : dba 권한
    SQL> conn system/패스워드
  • hr : object(table, view, index, sequence 등) 생성하고 운영 할 수 있는 권한
    ※ system이 hr을 만들면 hr에게 dba 권한까지 줄 수 있음.
    또한 sys가 hr을 만들면 hr에게 dba 권한까지 줄 수 있음.
    즉, dba 권한을 가진 사용자가 많아질 수 있지만, sysdba 권한을 가진 사용자는 sys뿐이다.
    SQL> conn hr(유저명)/패스워드

 

$] 리눅스 명령어

SQL> DB언어

 

<DB 사용하기>

  1. 가상 PC 켜기
  2. Linux 로그인(user : oracle)
  3. 터미널 열기(TUI 환경 작업)
  4. 리스너 켜기
    $] lsnrctl start
    리스너 운영 체제 단에 존재하는 프로세스(DB보다 먼저 켜줘야함)
    user가 db접속할 때 도와줌.
    리스너가 켜진 상태에서 DB가 켜줘야 연결을 도와줌.
    DB가 먼저 켜지면 리스너가 인식을 못함.
  5. sqlplus 프로그램 실행
    $] sqlplus /nolog
    ※TUI - sqlplus, GUI - sql developer
  6. SYS 사용자로 DB 접속(이유는 DB가 꺼져있기 때문에)
    SQL> conn(ect) sys/패스워드 as sysdba(권한명)
    Connected to an idle instance.
    idle 휴무 상태, instance = database. 즉 휴무 상태 DB에 접속했다.
  7.  DB 켜기
    SQL> startup
  8. HR 사용자로 DB 접속
    SQL> conn hr/패스워드
  9. user 확인
    SQL> show user

    ※ hr user 패스워드 변경
    SQL> alter user hr
               identified by 패스워드;

  10. select table_name from user_tables;
    user_tables : DB 사전

 

SELECT

테이블 구조 조회
SQL> desc employees;

SQL> desc departments;

※describe 목적은 컬럼명 데이터타입 데이터사이즈를 기본으로 알려주기 위함임.

   db프로그램마다 기본으로 보여주는 것이 다 다름.

 

테이블로부터 데이터 검색

select * from departments;

 

TUI는 가독성이 좋지 않음(그림 1)

그림 1. select * from departments;

col department_name format a20

sqlplus(oracle TUI 프로그램) 설정명령어 이기 때문에 ; 이 붙지 않음

그림 2. col department_name format a20 설정

 

select employee_id, last_name, salary, hire_date
from employees;

 

그림 3.&nbsp; select employee_id, last_name, salary, hire_date from employees;


col last_name format a18

그림 4.&nbsp; col last_name format a18

※col 컬럼명 format a숫자할 때 주의사항

숫자, 날짜 컬럼 사이즈는 줄이면 안된다. 최소 사이즈 잡아서 나오기 때문이다.

문자만 사이즈 조절이 가능하다.

그림 5. col employee_id format a5 결과

다시 돌리려면 sqlplue를 껐다가 키면 된다.

껐다가 켜면 DB가 꺼진것이 아니므로 hr로 접속하면 된다.

 

쿼리 구문을 쓰다가 오타가 났을 때 오타 수정하는 방법

버퍼에 들어가서 수정
SQL> ed

i로 편집한 후 ESC :wq

버퍼에서 ;콜론은 쓰지 않는다. /를 활용함.
:wq 저장 후 나가기

:q! 원래대로 나가기

그림 6. 쿼리 구문 오타 수정

 

null값

미정인 값, 0이나 공백과는 다른 특수한 값이다. 모든 데이터타입에 사용 가능하다.

select last_name, job_id, salary, commission_pct 
from employees;

 

그림 7. null과 null이 아닐때 차이가 있음

산술식에 null값이 포함된 경우 전체 결과도 null이다.

select last_name, 12*salary*commission_pct
from employees;

 

쿼리 구문을 실행하면 commission_pct가 null인 사원은 null값이 출력된다.

따라서 null값이 있는 식을 계산하려면 함수를 사용해야한다.

그림 8. null*숫자 = null

 

Column Alias

  1. 컬럼명 AS alias
  2. 컬럼명 alias
  3. 컬럼명 [AS] "Alias" → 대소문자 구분, 공백포함, 특수문자 포함을 원하는 경우

그림 9. alias 사용

컬럼명이 last_name이 아니기 때문에 last_name alias name으로 바꾸면 크기 적용이 안됨

또한 alias를 소문자로 했지만 오라클은 제목줄은 대문자로 출력되는게 기본값임.

따라서 대소문자를 구분하기 위해서는 큰 따옴표안에 alias를 작성해준다.

SQL> ed를 통해서 alias에 큰따옴표해주기

그림 10. alias 대소문자 구분

 

연결 연산자(||)

컬럼과 컬럼 연결.

ex)

select last_name||job_id "Employees"
from employees;

 

그림 11. 연결 연산자

last_name과 job_id를 합쳐서 결과가 나옴

 

리터럴 문자

명령어, 테이블명, 컬럼명, 키워드, alias가 아닌 일반적인 문자, 숫자, 날짜값.

문자나 날짜 리터럴은 작은 따옴표로 묶어서 작성. 숫자는 그냥 작성.

cf) MySQL은 " ", ' ' 따옴표 다 지원하지만(구분없이 작성), 안시는 리터럴은 작은따옴표, alias는 큰따옴표

ex)

select last_name || ' is a ' ||job_id "Employee Details" 
from employees;

 

그림 12. 리터럴 문자

 

distinct 키워드 : 중복된 값을 자동으로 제거해주는 키워드

ex) 

select distinct department_id 
from employees;

 

그림 13. 사원이 가지는 부서id

 

그림 14. distinct 키워드 사용

30아래 90위에 공백은 null값이다.

distinct를 쓰고 안쓰고의 성능 차이가 많이 난다.

의외로 distinct를 안쓰는 것이 더 빠르다.

이유는 정렬이라는 작업이 한 단계 더 거치기 때문이다.

 

연습문제 1

그림 15. 연습 문제1

 

연습문제 2

그림 16. 연습 문제2

 

728x90

'KDT > DB' 카테고리의 다른 글

240105 DB - 단일 행 함수 1  (0) 2024.01.05
240103 DB - 조건문과 정렬  (0) 2024.01.03
231227 DB - 데이터정의어 4, 오라클 시작  (0) 2023.12.27
231222 DB - 데이터정의어 3  (0) 2023.12.22
231220 DB - 데이터 정의어 2  (0) 2023.12.20