Database초보우낙

17. 오라클의 기타 비교연산자 4가지를 파이썬에서 구현하기 본문

파이썬

17. 오라클의 기타 비교연산자 4가지를 파이썬에서 구현하기

오운학 2024. 4. 16. 15:23

오라클의 기타 비교연산자 4가지 !

오라클 판다스

  1. between .. and emp[’sal’].between(1000,3000)
  2. in emp[’job’].isin([10,20])
  3. like emp[’ename’].apply(lambda 함수)
  4. isnull emp[’comm’].isnull()

 

문제1. 월급이 1000에서 3000사이인 사원들의 이름과 월급을 출력하세요

emp[['ename','sal']][emp['sal'].between(1000,3000) ]

 

 

문제2. scott유저로 접속해서 scott유저가 가지고 있는 모든 테이블들에 대해서 통계정보를 수집하세요(SQLPLUS)

exec dbms_stats.gather_schema_stats('SCOTT');

 

 

문제3. scott유저가 소유하고 있는 테이블명과 그 건수를 출력하세요

select table_name, num_rows
from user_tables;

 

 

문제4. 위의 결과를 파이썬에서 출력하세요

import  cx_Oracle
import pandas as  pd

# 파이썬에서 오라클로 접속하기 위한 정보를 구성
dsn = cx_Oracle.makedsn('192.168.19.14',8081,'orcl')
db = cx_Oracle.connect('scott','tiger',dsn)

cursor=db.cursor() # 오라클의 데이터를 올리기 위한 메모리 구성
cursor.execute("""select table_name, num_rows from user_tables""") # 쿼리수행문의 결과를
                                        # 메모리로 올린다.
row = cursor.fetchall() # 메모리의 데이터를 row 변수에 담는다
emp = pd.DataFrame(row) # row 에 담긴 값을 emp 테이블로 구성
colname = cursor.description

col=[]   #  col 이라는 비어있는 리스트를 생성합니다. 

for i in  colname:  #colname 리스트 변수에 값을 하나씩 불러와서 i 에 담습니다.
    col.append( i[0].lower() ) # i변수에 첫번째 요소를 소문자로 변경해서 col리스트에
    
emp = pd.DataFrame(list(row), columns=col) # row에 담긴 emp 데이터를 가지고 
emp # 판다스 데이터 프레임을 생성하는데 컬럼명을 col 변수에 담긴 컬럼명으로 생성합니다.

 

문제5.scott이 가지고 있는 테이블중에서 건수가 5~14사이인 테이블만 출력하세요

import  cx_Oracle
import pandas as  pd

# 파이썬에서 오라클로 접속하기 위한 정보를 구성
dsn = cx_Oracle.makedsn('192.168.19.14',8081,'orcl')
db = cx_Oracle.connect('scott','tiger',dsn)

cursor=db.cursor() # 오라클의 데이터를 올리기 위한 메모리 구성
cursor.execute("""select table_name, num_rows from user_tables""") # 쿼리수행문의 결과를
                                        # 메모리로 올린다.
row = cursor.fetchall() # 메모리의 데이터를 row 변수에 담는다
emp = pd.DataFrame(row) # row 에 담긴 값을 emp 테이블로 구성
colname = cursor.description

col=[]   #  col 이라는 비어있는 리스트를 생성합니다. 

for i in  colname:  #colname 리스트 변수에 값을 하나씩 불러와서 i 에 담습니다.
    col.append( i[0].lower() ) # i변수에 첫번째 요소를 소문자로 변경해서 col리스트에
    
data = pd.DataFrame(list(row), columns=col) # row에 담긴 emp 데이터를 가지고 
data[:][data.num_rows.between(5,14)] # 판다스 데이터 프레임을 생성하는데 컬럼명을 col 변수에 담긴 컬럼명으로 생성합니다.

data[:] 은 모든 컬럼을 다 가져오라는 뜻

문제6. 사원 데이터 프레임에서 직업이 SALESMAN, ANALYST 의 모든 컬럼을 출력하시오!

답 : emp[ : ] [ emp.job.isin([’SALESMAN’,’ANALYST’]) ]

 

 

문제7. scott유저의 테이블들 중에서 EMP와 DEPT의 테이블명과 그 건수를 조회하세요

data[:][ data.table_name.isin(['EMP','DEPT'])]

 

 

문제8. 오라클 데이터 베이스의 테이블 스페이스 이름들을 파이썬에서 출력하시오!

 

문제9. dba 가 항상 모니터링해야하는 테이블 스페이스의 사용량을 파이썬에서 출력하시오 !

import  cx_Oracle
import pandas as  pd

# 파이썬에서 오라클로 접속하기 위한 정보를 구성
dsn = cx_Oracle.makedsn('192.168.19.14',8081,'orcl')
db = cx_Oracle.connect('system','oracle_4U',dsn)

cursor=db.cursor() # 오라클의 데이터를 올리기 위한 메모리 구성
cursor.execute("""select   t.tablespace_name,
                        ((t.total_size - f.free_size) / t.total_size) * 100 usedspace
                 from (select tablespace_name, sum(bytes)/1024/1024 total_size
                           from dba_data_files
                           group by tablespace_name) t,
                        (select tablespace_name, sum(bytes)/1024/1024 free_size
                           from dba_free_space
                           group by tablespace_name) f
           where t.tablespace_name = f.tablespace_name(+)""") # 쿼리수행문의 결과를
                                        # 메모리로 올린다.
row = cursor.fetchall() # 메모리의 데이터를 row 변수에 담는다
emp = pd.DataFrame(row) # row 에 담긴 값을 emp 테이블로 구성
colname = cursor.description

col=[]   #  col 이라는 비어있는 리스트를 생성합니다. 

for i in  colname:  #colname 리스트 변수에 값을 하나씩 불러와서 i 에 담습니다.
    col.append( i[0].lower() ) # i변수에 첫번째 요소를 소문자로 변경해서 col리스트에
    
data = pd.DataFrame(list(row), columns=col) # row에 담긴 emp 데이터를 가지고 
data# 판다스 데이터 프레임을 생성하는데 컬럼명을 col 변수에 담긴 컬럼명으로 생성합니다.

import matplotlib.pyplot as plt

# 사원 이름을 x축으로, 월급을 y축으로 하는 막대 그래프 생성
plt.bar(emp['ename'], emp['sal'])

# 그래프에 제목 추가
plt.title('사원별 월급')

# x축과 y축에 각각 이름 붙이기
plt.xlabel('사원 이름')
plt.ylabel('월급')

# 그래프 보여주기
plt.show()

 

 

 

 

문제10. 사원 테이블의 월급을 막대 그래프로 시각화 하시오 !

import matplotlib.pyplot as plt
import numpy as np

# Set colors for each bar
colors = plt.cm.viridis(np.linspace(0, 1, len(emp['ename'])))

# Create a bar chart with different colors for each bar
emp['sal'].plot(kind='bar', color=colors, figsize=(12, 6))

# Add title to the chart
plt.title('Employee Salary Bar Chart')

# Add label to x-axis
plt.xlabel('Employee')

# Add label to y-axis
plt.ylabel('Salary')

# Add employee names to x-axis
plt.xticks(range(len(emp['ename'])), emp['ename'])

# Display the chart
plt.show()

 

 

문제11. 커미션이 null 인 사원들의 이름과 커미션을 출력하시오

emp[['ename','comm']] [ emp.comm.isnull() ]

 

문제12. 커미션이 null 이 아닌 사원들의 이름과 커미션을 출력하시오

emp[['ename','comm']] [ ~emp.comm.isnull() ]

설명 : ~은 not

 

 


Like

문제13.이름의 첫번째 철자가 A로 시작하는 사원들의 이름과 월급을 출력하세요

emp[['ename','sal']][emp.ename.apply(lambda 입력값:출력값[0]=='A') ]

emp[['ename','sal']][emp.ename.apply(lambda x:x[0]=='A') ]

 

문제14. 이름의 끝글짜가 T로 끝나는 사원의 이름과 월급을 출력하세요

emp[['ename','sal']][emp.ename.apply(lambda x:x[-1]=='T') ]