쌓고 쌓다

[Oracle] SELECT, 합성 연산자(||), DISTINCT, 산술연산, 별명, 정렬, 테이블 구조 본문

프로그래밍/SQL

[Oracle] SELECT, 합성 연산자(||), DISTINCT, 산술연산, 별명, 정렬, 테이블 구조

승민아 2022. 9. 26. 21:57

SQL 언어

  • 관계형 데이터베이스를 조작하기 위한 표준 언어
  • 데이터 베이스의 구조를 정의하거나 저장된 데이터를 검색하기 위함

SQL 언어 특징

  • 비절차적 언어 ( 조건을 만족하는 데이터를 집합 단위로 한꺼번에 처리 )
  • 대화식으로 사용하거나 응용 프로그램에 삽입하여 사용

SQL 명령문의 종류

  • 질의어(DQL: Data Query Language)
    • 데이터베이스에 저장된 데이터를 조회하는 명령어
  • 데이터 조작어(DML: Data Manipulation Language)
    • 데이터의 입력, 수정, 삭제하는 명령어
  • 데이터 정의어(DDL: Data Definition Language)
    • 데이터베이스의 구조를 정의하거나 수정하기 위함 / DB 객체를 생성, 수정, 삭제하는 것도 포함
  • 트랜잭션 처리어(TCL: Transaction Control Language)
    • 트랜잭션 관리를 위한 목적
  • 데이터 제어어(DCL: Data Control Language)
    • 관리자가 데이터나 데이터베이스 객체에 대한 접근 권한 부여와 같은 DB시스템을 관리하는 목적

테이블 인스턴스(Table Instance)

  • 데이터베이스 설계 시에 테이블의 구조와 칼럼의 특성을 요약한 내용
  • 테이블 인스턴스는 테이블의 칼럼 이름, 데이터 타입, 키 종류, NULL이나 중복 값의 허용 여부, 외래 키, 칼럼에 대한 설명으로 구성

데이터 딕셔너리(Data Dictionary)

  • 데이터베이스 객체에 대한 다양한 시스템 정보를 저장하고 있는 테이블의 집합

 

 

현재 접속한 데이터베이스 계정에 생성된 모든 테이블의 이름을 조회

사용자 데이터베이스 계정에서 생성된 테이블 이름을 확인하기 위해 tab이라는 데이터 딕셔너리 테이블을 조회

SELECT * FROM tab;

 

테이블의 구조 확인

데이터베이스의 모든 데이터는 테이블이라는 구조에 저장함.

테이블의 칼럼 이름, 데이터 타입과 길이, NULL 허용 유무 등...

명령어 : DESC table_name

SQL 명령문의 표준 형식

대괄호는 생략 가능

SELECT	[DISTINCT] {*|column [alias] }
    FROM table
   [WHERE condition]
   [GROUP BY group_by_expression]
   [HAVING group_condition]
   [ORDER BY column]

 

총점을 기준으로 내림차순 정렬 출력

SELECT 학번, 이름, c언어, 자료구조, 총점, 등수
    FROM 성적관리테이블
    ORDER BY 총점 DESC

 

홍길동의 성적 출력

SELECT 학번, 이름, c언어, 자료구조, 총점, 등수
    FROM 성적관리테이블
    WHERE 이름='홍길동'

 

 

SELECT 명령문

  • 테이블에 저장된 데이터를 조회하기 위한 명령어
  • 일반 프로그래밍에서는 수백 줄로 구현해야 하나 SELECT는 몇 줄로 가능함.
  • SELECT 명령문에서 FROM 절은 필수
  • SELECT *|columnlist FROM 테이블명
    • 지정한 테이블에서, *는 전체 조회이며 columnlist(A, B, C)는 원하는 칼럼을 나열할 수 있음

방법1 ( 칼럼 나열 )

 

방법2 ( 와일드 문자(*)로 모든 칼럼의 데이터 검색 )

칼럼의 순서는 테이블 생성 시 정의한 순서와 동일

특정 칼럼 선택하여 출력

-> 부서 테이블에서 dname과 deptno를 출력

 

 

중복행 제거하여 출력

SELECT 절에 DISTINCT 키워드를 사용하여 중복행을 제거한다.

 

 단일 칼럼 - 학생 테이블에서 중복되는 학과번호(deptno)를 제외하여 출력

SELECT DISTINCT deptno
    FROM student;

 

DISTINCT 미사용시 조회 결과

 

복수 칼럼 - 학생 테이블에서 중복되는 행을 제외한 학과 번호와 학년 출력

SELECT DISTINCT deptno, grade
    FROM student;

DISTINCT 미사용시 결과

복수 칼럼에서 DISTINCT 사용 시 (deptno, grade) 쌍이 겹치는 것을 제외하여 출력한다.

 

칼럼에 별명(alias) 부여

  • 칼럼 이름이 너무 길어 전체 출력하기 힘들 때
  • SQL 함수나 산술 연사에 의해 일시적으로 만들어진 가상 칼럼에 원하는 이름 부여 

부여 방법

  1. 칼럼 이름과 별명 사이에 공백을 추가
  2. 칼럼 이름과 별명 사이에 AS 키워드를 사용
  3. 큰따옴표("") 사용 - 칼럼 이름 쓰고 띄우고 큰따옴표 안에 별명 쓰기
    1. 큰따옴표 방법은 별명에 공백, 특수문자, 대소문자가 포함된 경우 주로 사용한다.

 

방법1과 2 사용

- 부서 테이블에서 부서 이름 칼럼의 별명은 dept_name, 부서 번호 칼럼의 별명은 DN으로 부여하여 출력

방법3 사용

- 부서 테이블에서 부서 이름 칼럼의 별명은 "Department Name", 부서 번호 칼럼의 별명은 "부서 번호#"로 출력하라

SELECT dname "Department Name", deptno "부서 번호#"
    FROM department;

 

합성 연산자 ( || ) 사용

  • 하나의 칼럼과 다른 칼럼, 산술 표현식, 상수 값과 연결하여 하나의 칼럼처럼 출력
  • 합성 연산자를 기준으로 좌, 우를 연결하여 하나의 칼럼으로 출력
  • 합성 연산자를 사용하여 리터럴(literal) 문자 출력
    • 리터럴 문자를 칼럼 값으로 출력할 때, 리터럴 문자를 단일 인용부호('') 사이에 포함하여 사용

 

예1 - 학생 테이블에서 학번과 이름 칼럼을 연결하여 "Student"라는 별명으로 하나의 칼럼처럼 연결하여 출력

SELECT studno || ' ' || name "Student"
    FROM student;

 

단일 인용 부호 ( ' ' ) 미사용시 에러 뜸

 

예2 - 교수 테이블에서 교수 이름과 직급 칼럼 사이에 '의 직급은'라는 문자열을 추가하고 칼럼 이름을 "Title of Professor"

라는 별명을 사용하여 출력

SELECT name || '의 직급은' || position "Title of Professor"
    FROM professor;

대소문자 구분을 위해 ""를 이용하여 별명 지정했음.

 

단일 인용 부호 (' ') 미사용시 에러 뜸

 

 

예3 -  학생 테이블에 '홍길동의 키는 180, 몸무게는 55'의 형식으로 출력하라

단, 리터럴 문자를 추가하고, 컬럼 이름은 "학생의 키와 몸무게 정보"라는 별명으로 출력

SELECT name || '의 키는 ' || height || ', 몸무게는 ' || weight
    "학생의 키와 몸무게 정보"
    FROM student;

SELECT name || '학생의 키는 ' || height || '(cm)이고, 몸무게는 ' || weight || '(kg)이다.'
    "각 학생의 키와 몸무게"
    FROM student;

 

만약, 쌍따옴표 사용 시

단일 인용 부호를 꼭 사용하자. 큰따옴표 사용 시 에러 발생

 

산술 연산자 ( +, -, *, / )

  • 칼럼 값에 산술 연산자를 적용하여 결과를 출력할 수 있다.
  • 산술 연산은 숫자 또는 날짜 타입으로 지정된 칼럼에만 가능하다.
  • 연산자 우선순위는 수학에서와 동일하며, 괄호를 사용하여 우선순위 변경 가능하다.

 

예1.

학생의 몸무게를 pound로 환산하고 칼럼 이름은 weight_pound라는 별명으로 출력

( 1kg = 2.2 pound )

SELECT name, weight, weight*2.2 AS weight_pound
    FROM student;
SELECT name, weight, weight*2.2 "weight_pound"
    FROM student;

 

예2.

교수 테이블에서 교수 이름, 급여 그리고 보너스를 포함한 연봉을 출력하라.

( 보너스를 포함한 연봉은 급여*12를 한 결과에 100을 더한 값 )

SELECT name, sal, sal*12+100
    FROM professor;

 

예3.

학생 테이블에서 학생 이름, 키, 체중, 표준 체중을 출력

( 표준 체중은 키에서 몸무게를 뺀 값에 0.9를 곱한 값 )

SELECT name, height, weight, (height-weight)*0.9 "표준체중"
    FROM student;

 

 

Comments