CREATE TABLE 제품(
제품ID NUMBER PRIMARY KEY, -- PK : 기본키 FK: 외래키
제품명 VARCHAR2(50) NOT NULL
);
CREATE TABLE 제품상세 (
상세ID NUMBER PRIMARY KEY,
제품ID NUMBER, -- 제품의 외래키 제품 ID와 묶여있음
설명 VARCHAR(100) NOT NULL,
-- 외래키 지정문
-- CONSTRAINT [제약조건 명] FOREIGN KEY([컬럼명]) REFERENCES [참고할 테이블 이름]([참조할 컬럼])
-- [ON DELETE CASCADE | ON DELETE SET NULL]
-- ON DELETE CASCADE:
-- 부모 테이블의 데이터가 삭제되면, 연결된 자식 테이블의 데이터도 함께 삭제
-- ON DELETE SET NULL:
-- 부모 테이블의 데이터가 삭제되면, 연결된 자식 테이블의 외래키 열이 NULL 값으로 설정됩니다.
CONSTRAINT FK_제품상세_제품ID FOREIGN KEY (제품ID) REFERENCES 제품(제품ID)
);
INSERT INTO 제품 VALUES(1,'제품A');
INSERT INTO 제품 VALUES(2,'제품B');
INSERT INTO 제품 VALUES(3,'제품C');
INSERT INTO 제품상세 VALUES(1,1,'제품A 상제정보');
INSERT INTO 제품상세 VALUES(2,1,'제품B 상제정보');
INSERT INTO 제품상세 VALUES(3,1,'제품C 상제정보');
DELETE FROM 제품상세
WHERE 상세ID = 4;
INSERT INTO 제품상세 VALUES(4,4,'제품D 상세정보');
SELECT P.제품명, D.설명
FROM 제품 P
JOIN 제품상세 D ON P.제품ID = D.제품ID
ORDER BY D.상세ID;
SELECT*FROM 제품상세;
DELETE FROM 제품상세 WHERE 상세ID = 3;
DELETE FROM 제품 WHERE 제품ID = 1;
-- DEFAULT : 디폴드 값 주기
-- CHECK : 검사
CREATE TABLE 회원(
회원ID NUMBER PRIMARY KEY,
아이디 VARCHAR2(50) NOT NULL UNIQUE,
성별 CHAR(1) NOT NULL CHECK (성별 IN ('M', 'F')),
이용료 NUMBER DEFAULT 10000
);
SELECT * FROM 회원;
INSERT INTO 회원
VALUES(1, 'USER1', 'M', 12000);
INSERT INTO 회원
VALUES(2, 'USER2', 'F', 15000);
INSERT INTO 회원
VALUES(3, 'USER3', 'M', 10000);
-- DEFAULT : 10000값 자동기입
INSERT INTO 회원 (회원ID, 아이디, 성별)
VALUES(5, 'USER5', 'M');
-- DEFAULT 값 간편하게 사용하기
INSERT INTO 회원
VALUES(6, 'USER6', 'F', DEFAULT);
오라클 db 비주얼 스튜디오 / 파이썬으로 불러오기
방법.1
import oracledb
# 데이터 베이스 연결
oracledb.init_oracle_client() #파이썬 버전
username = 'hr' #오라클 사용자 이름
password = '1234' #오라클 비밀번호
dsn = 'localhost:1521/xe' #데이터베이스 연결문자열 (예:호스트이룸:포트/서비스이름')
conn = oracledb.connect (user = username, password = password, dsn = dsn)
#커서 생성
cur = conn.cursor()
#SQL 쿼리실행
cur.execute('SELECT MEM_ID,MEM_NAME,ADDR,DEBUT_DATE FROM MEMBERS')
#결과 출력
print('----------------멤버ID 멤버이름 주소 데뷔년도---')
print('-'*100)
while True:
row = cur.fetchone() #쿼리 결과에서 한 행을 가져옴
if row is None: #더 이상 가져올 행이 없으면 루프 종료
break
print(f'{row[0]:<5} {row[1]:<15} {row[2]:<20} {row[3].strftime('%Y-%m-%d'):<10}')
cur.close()
conn.close()
방법.2
import oracledb
# 데이터 베이스 연결
oracledb.init_oracle_client() #파이썬 버전
username = 'hr' #오라클 사용자 이름
password = '1234' #오라클 비밀번호
dsn = 'localhost:1521/xe' #데이터베이스 연결문자열 (예:호스트이룸:포트/서비스이름')
conn = oracledb.connect (user = username, password = password, dsn = dsn)
#커서 생성
cur = conn.cursor()
#SQL 쿼리실행
cur.execute('SELECT MEM_ID,MEM_NAME,ADDR,DEBUT_DATE FROM MEMBERS')
#결과 출력
print('멤버ID 멤버이름 주소 데뷔년도')
print('-'*100)
for row in cur:
print(f'{row[0]:<5} {row[1]:<15} {row[2]:<20} {row[3].strftime('%Y-%m-%d'):<10}')
cur.close()
conn.close()
방법.3
import oracledb
# 데이터 베이스 연결
oracledb.init_oracle_client() #파이썬 버전
username = 'hr' #오라클 사용자 이름
password = '1234' #오라클 비밀번호
dsn = 'localhost:1521/xe' #데이터베이스 연결문자열 (예:호스트이룸:포트/서비스이름')
conn = oracledb.connect (user = username, password = password, dsn = dsn)
#커서 생성
cur = conn.cursor()
#SQL 쿼리실행
cur.execute('SELECT MEM_ID,MEM_NAME,ADDR,DEBUT_DATE FROM MEMBERS')
#결과 출력
print('----------------멤버ID 멤버이름 주소 데뷔년도---')
print('-'*100)
while True:
row = cur.fetchone() #쿼리 결과에서 한 행을 가져옴
if row is None: #더 이상 가져올 행이 없으면 루프 종료
break
data1 = row[0]
data2 = row[1]
data3 = row[2]
data4 = row[3].strftime('%Y-%m-%d')
print('%5s %15s %20s %s' % (data1, data2, data3, data4))
cur.close()
conn.close()