AWS RDS
SQL File
SQL파일을 이용해서 mysql에 실행할 수 있다.
SQL File로 Database를 백업할 수 있다.
SQL File로 Table 단위를 백업할 수 있다.
데이터를 제외하고 테이블 생성 쿼리만 백업할 수 있다.
Python with MySQL
MySQL Driver 설치: pip install mysql -connector-python
MySQL 접속 하기 위한 코드
mydb = mysql.connector.connect(
host = "<hostname>", # localhost or AWS 엔드포인트
port = "<Port>",
user = "<username>",
password = "<password>"
# database = "<databasename>"
)
mydb.close() #접속 종료
mycursor = mydb.cursor()
mycursor.execute(<query>)
mycursor = mydb.cursor()
sql = open("<filename>.sql").read()
mycursor.execute(sql)
#or
mycursor.execute(sql, multi=True) # Query가 여러개 존재하는 경우
mycursor = mydb.cursor(buffered=True)
mycursor.execute(<query>)
result = mycursor.fetchall()
for result_iterrator in result:
print(result_iterrator)
# Pandas로 일기
df = pd.DataFrame(result)
df.head()
Python with CSV
mycursor = mydb.cursor(buffered = True)
sql = "insert into tablename VALUES (%s, %s,...)"
for i , row in df.iterrows():
cursor.excute(sql, tuple(row))
print(tuple(row))
mycursor.commit()
Primary Key, Foreign Key
Primary Key(기본키)
Primary Key(기본키): 테이블의 각 레코드를 식별하는 키
생성문법
CREATE TABLE tablename
(
column1 datatype NOT NUll,
column2 datatype NOT NUll,
...
CONSTRAINT constraint_name
PRIMARY KEY (column1, column2,...)
);
# 기본키가 여러개의 칼럼이어도 삭제 가능
ALTER TABLE tablename
DROP PRIMARY KEY;
ALTER TABLE tablename
ADD PRIMARY KEY (column1, column2, ...);
# or
ALTER TABLE tablename
ADD CONSTRAINT constraint_name PRIMARY KEY (column1, column2, ...);
Foreign Key (외래키)
CREATE TABLE tablename
(
column1 datatype NOT NUll,
column2 datatype NOT NUll,
column3 datatype,
column4 datatype,
...
CONSTRAINT constraint_name
PRIMARY KEY (column1, column2,...),
CONSTRAINT constraint_name #왜래키를 지정하는 경우 CONSTRAINT가 생략 할 수 있다.
FOREIGN KEY (column3, column4,...) REFERENCES REF_tablename(REF_column)
);
# 자동 생성된 CONSTRAINT를 확인하는 방법
SHOW CREATE TABLE tablename;
ALTER TABLE tablename
DROP FOREIGN KEY FK_constraint;
# desc tablename;으로는 확인이 안되지만 SHOW CREATE TABLE tablename;에서 확인 가능
ALTER TABLE tablename
ADD FOREIGN KEY (column) REFERENCES REF_tablename(REF_column);
예제
SELECT c.police_station, p.name
from crime_status c, police_station p
WHERE p.name like concat('서울', c.police_station, '경찰서')
GROUP BY c.police_station, p.name;

ALTER TABLE police_station
ADD PRIMARY KEY (name);
ALTER TABLE crime_status
ADD COLUMN reference VARCHAR(16);
ALTER TABLE crime_status
ADD FOREIGN KEY (reference) REFERENCES police_station(name);
UPDATE crime_status c, police_station p
SET c.reference = p.name
WHERE p.name like concat('서울', c.police_station, '경찰서');
SELECT c.police_station, p.address
FROM crime_status c, police_station p
WHERE c.reference = p.name
GROUP BY c.police_station;
집계합수
SELECT COUNT(column)# SUM, AVG, MIN, MAX, FIRST, LAST
FROM tablename
WHERE condition;
GROUP BY
SELECT column1, column2,...
FROM table
WHERE condition
GROUP BY column1, column2,...
ORDER BY column1, column2,...
#EX
SELECT police_station, status_type, AVG(case_number)
FROM crime_status
GROUP BY police_station, status_type
LIMIT 5;
HAVING
SELECT column1, column2,...
FROM table
WHERE condition
GROUP BY column1, column2,...
HAVING condition (Aggregate Functions)
ORDER BY column1, column2,...
Scalar Functions
SELECT UCASE(string);
SELECT LCASE(string);
SELECT MID(string, start_position, lenth); # 첫글자는 1, 마지막 글자는 -1
SELECT LENGTH(string);# 공백은 1, 문자가 없는 경우 0, null은 null
SELECT ROUND(number, decimals_place); # 1단위 위치는 -1
SELECT NOW();
SELECT FORMAT(number, decimal_place); # decimal: 표시할 소수점 위치
SQL Subquery
스카라 서브쿼리(Scalar Subquery)
SELECT column1, (SELECT column2 FROM table2 WHERE condition)
FROM table1
WHERE condition;
인라인 뷰(Inline View)
SELECT a.column1, b.column
FROM table1 a, , (SELECT column1, column2 FROM table2) b
WHERE condition;
중첩 서브쿼리(Nested Subquery)
#Single Row
# 비교연산자에 사용되는 경우 하나의 결과값을 가져야한다.
SELECT column_names
FROM table_name
WHERE column_name = (SELECT column_name
FROM table_name
WHERE condition)
ORDER BY column_name;
#Multiple Row
# in
SELECT column_names
FROM table_name
WHERE column_name IN (SELECT column_name
FROM table_name
WHERE condition)
ORDER BY column_name;
#exists
# 서브쿼리 결과에 값이 있으면 반환
SELECT column_names
FROM table_name
WHERE EXISTS (SELECT column_name
FROM table_name
WHERE condition)
ORDER BY column_name;
#ANY
# 결과중 하나라도 만족하면(비교연산자 사용)
SELECT column_names
FROM table_name
WHERE column_name = ANY (SELECT column_name
FROM table_name
WHERE condition)
ORDER BY column_name;
#ALL
# 결과중 모두 만족하면(비교연산자 사용)
SELECT column_names
FROM table_name
WHERE column_name = ALL (SELECT column_name
FROM table_name
WHERE condition)
ORDER BY column_name;
#Multiple Column
# 서브쿼리 내에 메인쿼리 칼럼이 사용되는 경우
SELECT column_names
FROM table_name a
WHERE (a.column1,a.column2,...) IN (SELECT (b.column1, b.column2,...)
FROM table_name b
WHERE a.column_name = b.column_name)
ORDER BY column_name;