[데이터베이스] 4주차

임클·2023년 3월 24일
0

학습 목표

  • SQL 개요에 대해 설명한다
  • SQL 데이터베이스의 내용을 변경하는 방법을 이해한다.
  • SQL 기본적인 검색 질의를 이해한다.

학습 내용

  • SQL 개요
  • SQL로 데이터베이스의 내용을 변경하는 방법 (Insert, Update, Delete문)
  • SQL에서 기본적인 검색 질의 (Select … From … Where 절)

SQL (Structured Query Language)

  • 관계 데이터베이스를 기반으로 한 포괄적인 표준 언어
  • 기능
    • 데이터 정의어 (DDL : Data Definition Language) ← 기업마다 많이 다름 , 실습은 Oracle, 이론은 표준
      • 스키마를 정의하고 제약조건을 명시
      • DCL : 보안과 권한 관리, 트리거 등
      • TCL : Commit, Rollback 등
    • 데이터 조작어 (DML : Data Manipulation Language) ← 기업마다 큰 차이 없음
      • Read [Select] , Write [ Insert, Delete, Update ]

SQL로 데이터베이스의 내용을 변경하는 방법

Insert 문

  • 각 애트리뷰트에 대해 지정된 값을 가지고 테이블에 새로 행을 추가할 때 사용
  • 애트리뷰트값들의 순서는 CREATE TABLE 명령에서 명시한 애트리뷰트들의 순서와 같아야함
INSERT INTO <table name> [(<attribute names>)]
VALUES (<values>)

or

INSERT INTO <table name>[(<attribute names>)]
select statement

ex)

Customer의 모든 attribute 값을 넣을 때

insert into Customer
values (555, 'Yu' 'Jia', '540 Magnolia Hall', 'Tallahassee', 'FL',
'32306' , 0.00)

Customer의 일부 attribute 값을 넣을 때

insert into Customer (firstName, lastName, accountId) 
values ('Jia', 'Yu', 555)
  • 누락된 애트리뷰트에 대해서는 기본값(default value)이 입력
  • 정의된 기본값이 없는 경우 null 값이 입력
  • NOT NULL이면서 기본값이 정의되지 않은 경우에는 입력 불가

from으로 부터 where 조건에 맞는 것들 중 select 계산 한 후 insert into 에 넣는다


Update 문

  • 선택된 하나 이상의 튜플에서 애트리뷰트 값들을 수정하기 위해 명령 사용
UPDATAE <table name>
SET <attribute name> = <value> , ...
where <selection condition>

ex)

Q. 급여 지급 작업이 종료되었을 때, 지급 사실을 기록하기 위하여 TimeCard 내용을 변경하라

UPDATE TimeCard
SET paid = true
WHERE paid = false

// WHERE ->  SET -> UPDATE

Q. 직원번호가 ‘145-09-0967’인 직원의 시간당 급여롤 10% 인상하여라

update HourlyEmployee 
set hourlyRate = hourlyRate * 1.1
where  ssn =145-09-0967

DELETE 문

  • 한 테이블에서 튜플들을 삭제하기 위해 사용
DELETE FROM <table name>
WHERE <selection condition>

ex)

Q. 시간제 직원이 아닌 직원에 대해 정보를 TimeCard 테이블에서 모두 삭제하여라.

delete from TimeCard
where not exists (select *
									from HourlyEmployee
									where TimeCard.ssn = HourlyEmployee.ssn)

SQL에서 기본적인 검색 질의

Select 문장을 이용한 질의 작성

  • Select 문장은 Select 절, From 절, Where 절과 같은 3가지 절로 구성
select <attribute names> ...3 
from <tables>   ...1
where <conditions> ...2 (생략가능)
  • Select 절은 결과 릴레이션이 가져야 할 애트리뷰트들을 지정
  • From 절은 이 SQL 문장의 입력으로 사용할 테이블을 지정
  • Where절은 질의를 통해 검색되는 투플들을 명시하는 조건식을 지정 – <선택 사항>
  • 문자와 문자를 연결하는경우
    • Oracle : ||
    • SQL Server : +
    • 공통 : CONCAT(string1, string2)

ex)

Q. ‘Doe’라는 성을 가진 고객을 찾아라

select * from Customer where lastName = 'Doe'
			 3					1              2

Q. ‘01-03-1999’날짜 이후에 직원 ‘376-77-0099’의 근무 일지를 모두 검색하라.

select *
from TimeCard
where ssn='376-77-0099' and date > '01-mar-1999'

Q. Customer 테이블에서 모든 고객의 성과 이름을 검색하라

(선택된 애트리뷰트만을 가지는 릴레이션을 생성하는 예)

select lastName, firstName
from Customer

Q. 결과에서 중복된 튜플을 삭제한 예

distinct

select distinct lastName , firstName
from Customer

부분 문자열 패턴 비교

Like 비교 연산자

  • 셀랙션 조건으로 패턴 매칭(Pattern Matching)을 위해 사용
  • 퍼센트(%): 임의의 가변 길이 문자열을 대표
  • 언더스코어(_): 한 문자를 대표
  • 패턴은 대소문자를 구분함
  • not like: 일치하지 않는 문자열에 대한 검색

ex)

Q. 장르가 ‘Comedy’로 끝나는 모든 영화들을 검색해라

select *
from Movie
where genre like '%comedy'

Q. SSN의 가운데 두 가지가 44인 모든 직원을 검색하여라

select *
from Employee
where ssn like ‘_ _ _-44-_ _ _ _’

산술 적용

  • 표현식으로 문자열, 숫자, 애트리뷰트 값, 산술식, 함수 호출이 올 수 있음

결과 정렬

Order by 절

  • 출력 테이블의 튜플들이 특정 순서로 반환될 수 있도록 지정
  • 기본 값은 오름차순 정렬 (asc)

ex)

Q. 모든 고객 정보를 검색하여, 고객의 성과 이름을 기준으로 오름차순으로 정렬하여라

select *
from Customer
order by lastName, firstName

Q. 모든 고객 정보를 검색하여 , accountId의 값에 따라 내림차순 정렬하여라

select *
from Customer
order by accountId desc

Q. 모든 고객 정보를 검색하여 , lastName은 내림차순, zipcode는 오름차순으로 정렬하여라

select *
from Customer
order by lastName desc, zipcode asc
profile
iOS를 공부하는 임클입니다.

0개의 댓글