My sql 파이썬 numpy

박재정·2025년 2월 3일

학습정보

목록 보기
14/29

1. 아래의 용어를 설명하시오.

- DB :

DB(DataBase)는 set of data stored in computer. 즉, 컴퓨터에 저장되는 데이터 집합입니다. 이런 데이터들은 쉽게 접근, 사용하기 위해서 구조화된 형태로 존재합니다. (Table, key-value 형태 등등)

- DBMS :

DBMS(DataBase Management System)은 말 그대로 해석하면 DB를 관리하는 시스템을 의미합니다.

다시 한번 정리하면 DB는 여러 사람들이 공유하고 사용하는 목적으로 관리되는 정보를 의미합니다. Oracle Korea에서는 DB를 이렇게 정의하고 있습니다. '일반적으로 컴퓨터 시스템에 전자적으로 저장되는 구조화된 정보 or 데이터의 조직화된 모음' 이라구요. 이런 정보는 우리가 잘 아는 엑셀 파일로도 관리할 수 있고 테이블 형태로 저장할 수도 있습니다.

다시 DBMS 이야기로 돌아가서, 이런 DB는 그 자체로는 어떠한 작업을 할 수 없는 그저 정보이기 때문에 다루기 위해서 DBMS라는 소프트웨어 프로그램이 필요합니다. DBMS에서는 DB와 유저, 프로그램 사이의 인터페이스 역할을 수행하고 유저가 정보를 생성, 검색, 수정, 삭제 등등의 작업을 관리할 수도 있게 해줍니다. 추가적으로 SQL 튜닝이나, 데이터 백업, 복구, 모니터링까지도 가능하게 해줍니다.(SQL 기반 DBMS경우)

결국 최고의 DBMS는 데이터를 효과적으로 처리하며 사용자의 데이터를 정확한 기록으로 유지할 수 있도록 도와주며 데이터 구성, 조작, 검색을 제공하고 적시에 원하는 정보에 엑세스하도록 하는 것입니다.

- RDBMS :

RDMBS는 Relational DataBase Management System의 약자이고, 관계형 DB 관리 시스템이라는 뜻입니다. 1970년 Edgar Codd는 RDBMS에 대한 이론적 기초를 확립한 논문을 발표했으며, 지난 40년이상 동안 지배적인 DBMS로 자리잡고 있을만큼 영향력이 큰 DBMS입니다.

그렇다면, R 즉, 관계형?의 의미가 무엇일까 정리해봅니다. 정보를 저장할때, Table이라는 형태로 저장을 하는데, 단순하게 생각하면 엑셀에 표를 생각하면 편합니다(위에 그림). 이런 테이블은 정보(유저 정보, 상점 정보, 결제 정보 등)들로 각각 구성이 되는데, 이런 테이블 사이의 연관성을 관계성이라고 뜻합니다. RDBMS에서는 키(key)를 통해서 연관된 정보들을 함께 조회하는데 특화되어 있습니다.

2. 상용화된 DBMS 종류 4가지 정도를 말해 보시오.(티베로 포함)

Tibero, Oracle, MS SQL Server

3. 아래의 SQL 구문을 작성하시오.

  • emp 테이블에서 사원번호, 사원이름, 직업을 출력해보세요.
SELECT empno, ename, job FROM emp;
  • emp 테이블에서 사원번호, 급여, 입사일을 출력해보세요.
    단,급여가 적은 순서대로 출력
SELECT empno, sal, hiredate 
FROM emp 
ORDER BY sal ASC;
  • emp 테이블에서 급여가 2000 이상인 사원의 사원번호, 사원이름, 급여 출력하기
SELECT empno, ename, sal 
FROM emp 
WHERE sal >= 2000;
  • 현재 서버에 어떤 DB(스키마)가 있는지
SELECT username FROM all_users;
  • 사용할 데이터 베이스를 scott 으로 지정
ALTER SESSION SET CURRENT_SCHEMA = scott;
  • emp table 에 무슨 열이 있는지 확인
DESC emp;

파이썬

4. 넘파이와 리스트의 차이는?

1) 각 자료형이 다를 때

Python list는 숫자형이나 문자형 여러 가지 자료형을 한 번에 다룰 수 있다.

Numpy array는 한 가지 동일한 자료형이어야 한다. (숫자형 + 문자형 = 모두 문자형으로 전환)

주의! Numpy array를 사용하기 전에 import numpy as np 선언해주기

# Python list
p_list = [1, 2, 3, 4, '물음표']
# 출력: [1, 2, 3, 4, '물음표']

# numpy array
np.array([1, 2, 3, 4, '물음표'])
# 출력값: array(['1', '2', '3', '4', '물음표']) (문자열로 변형되어 출력된다)

2) 2차원 이상 배열 구조일 때

Python list는 배열의 원소 구조가 달라도 괜찮다.

Numpy array는 배열의 원소 구조가 모두 동일해야 한다.

# Python list
p_list2 = [[1], [2, 3], [4, 5, 6]]
# 출력: [[1], [2, 3], [4, 5, 6]]

# Numpy array
# 배열 원소의 개수가 다를 때 잘못된 값이 출력
np.array([[1], [2, 3], [4, 5, 6]])
# 출력: array([list([1]), list([2, 3]), list([4, 5, 6])], dtype=object)

# 배열 원소의 개수를 동일하게 했을 때 정상적인 값이 출력
np.array([[1, 2], [3, 4], [5, 6]])
# 출력:
# array([[1, 2],
#        [3, 4],
#        [5, 6]])```

Python list 연산은 덧셈일 경우 두 리스트 값이 꼬리를 물어 연결된다.

곱셈일 경우는 두 리스트 사이에는 적용을 못하지만 하나의 리스트에 숫자를 곱해주면 원소가 정수 값으로 복사가 된다.

주의! 리스트에서는 덧셈 , 곱셈를 제외한 다른 연산은 적용되지 않는다.

Numpy array은 모든 연산자를 사용할 수 있고, 두 값에서 동일한 위치에 있는 원소별로 연산이 된다.

array에 어떤 숫자를 연산해주면, 전체 값에 적용된다. (예제 확인)

주의! 두 값을 연산할 때는 array의 원소의 개수가 동일해야 한다.

# Python list 덧셈
p_list = [1, 2, 3, 4]

p_list2 = [5, 6, 7, 8]

p_list + p_list2
# 출력: [1, 2, 3, 4, 5, 6, 7, 8]

# Python list 곱셈
p_list * p_list2
# 출력: 에러발생

P_list * 2
# 출력: [1, 2, 3, 4, 1, 2, 3, 4]

# Numpy array
arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])

arr1 + arr2
# 출력: array([5, 7, 9])

arr1 * 2
# 출력: array([2, 4, 6])

세 번째 Python list와 Numpy array 메서드 차이
list 와 array 각각에 활용되는 메서드가 다르기 때문에

list 메서드를 array에 적용해서도 안 되고, array 메서드를 list에 적용해서도 안 된다!
중요한 것
Python list는 list.append(), list.pop()를 통해서 자유롭게 원소 변경 및 크기 변경이 가능하다.

반면, numpy array는 만들어지고 나면 메서드를 통해 원소의 update는 가능하지만, array의 크기를 변경할 수는 없다.

  • array의 크기란 array.shape 했을 때 확인 할 수 있는 값인데,

예를 들어 array.shape 값이 (3, 4)라면 3행에 4열의 크기를 가지고 있는 array라는 것이다.

Numpy array는 언제 쓰는가?
Numpy array를 언제 쓰는지를 알기에 앞서 왜 쓰는지를 먼저 알아야 한다.

자유롭게 원소 변경 및 크기 변경이 가능한 list가 동적이기 때문에 정적인 numpy array에 비해 활용도가 높지 않을까라는 생각을 했다.

하지만, Numpy array는 list에 비해서 비교적 빠른 연산을 지원하고 메모리를 효율적으로 사용할 수 있는 큰 장점을 지니고 있다.

비교적 빠른 연산이 가능한 이유는 원소의 type checking을 할 필요가 없기 때문인데 이는 위에서 알아봤던 데이터 타입이 통일되기 때문이다.

메모리를 효율적으로 사용할 수 있는 이유는 universal function를 제공하기 때문에 같은 연산 반복에 대해 훨씬 빠르다.

이는 데이터의 크기가 클수록 차이가 커진다.

Numpy array의 장점을 통해서 언제 쓰는지를 알 수 있다. 다양한 활용 이유가 있겠지만,

'빅데이터'를 다룰 때 Numpy array의 장점이 크게 발휘한다.

5. 아래에서 슬라이싱을 활용하여 아래의 출력이 나오도록 하시오.

arr = np.array([
[ 1, 2, 3, 4, 5 ],
[ 6, 7, 8, 9, 10 ],
[ 11, 12, 13, 14, 15]
])

import numpy as np

# 주어진 배열 생성
arr = np.array([
   [1, 2, 3, 4, 5],
   [6, 7, 8, 9, 10],
   [11, 12, 13, 14, 15]
])

# 두 번째 행([6, 7, 8, 9, 10])만 선택하는 슬라이싱
result = arr[1:2, :]

출력)
[[ 6 7 8 9 10]]

6. 아래 출력을 적어 보세요.

arr = np.array([
[ 0, 1, 2 ],
[ 3, 4, 5 ],
[ 6, 7, 8 ]
])

print(arr.shape) #(3,3)
print(arr[2,2]) #8
print(arr[0,0]) #0

print(arr[-1,-1]) #8
print(arr[-2,-2]) #4
print(arr[-2,2]) #5

profile
파이썬, SQL 개발

0개의 댓글