mysql -h "엔드포인트" -P 포트 -u admin -p비밀번호
Document % mkdir sql_ws
Document % cd sql_ws
sql_ws %
sql_ws % code .
경찰서 정보를 테이블로 만들어봅니다.
sql_ws 폴더 위치로 이동하여 zerobase 에 접속
% cd sql_ws
sql_ws % mysql -u root -p zerobase
source test01.sql
desc police_station ;
% mysql -u username -p <database> < </path/filename.sql>
sql_ws % mysql -u root -p zerobase < test02.sql
mysqldump
특정 Database Backup
mysqldump -u username -p dbname > backup.sql
mysqldump -u username -p --all-databases > backup.sql
mysqldump -u root -p zerobase > zerobase.sql
mysql -h 엔드포인트 -P 3306 -u admin -p
use zerobase;
source zerobase.sql
show tables;
mysqldump -u username -p dbname tablename > backup.sql
mysqldump -u root -p zerobase celeb > celeb.sql
mysqldump -d -u username -p dbname tablename > backup.sql
mysqldump -d -u username -p dbname > backup.sql
mysqldump -d -u root -p zerobase snl_show > snl.sql
pip install mysql-connector-python
import mysql.connector
local = mysql.connector.connect(
host = 'localhost',
user = "root",
password = "*****"
)
remote = mysql.connector.connect(
host = "엔드포인트",
port = 3306,
user = "admin",
password = "*****"
)
local.close()
remote.close()
local = mysql.connector.connect(
host = 'localhost',
user = "root",
password = "*****"
database = "zerobase"
)
remote = mysql.connector.connect(
host = "엔드포인트",
port = 3306,
user = "admin",
password = "*****",
database = "zerobase"
)
cur = remote.cursor()
cur.execute("CREATE TABLE sql_file (id int, filename varchar(16))")
remote.close()
desc sql_file;
remote = mysql.connector.connect(
host = "database-2.c15ppmahjx3n.ap-southeast-2.rds.amazonaws.com",
port = 3306,
user = "admin",
password = "zerobase",
database = "zerobase"
)
cur = remote.cursor()
cur.execute("DROP TABLE sql_file")
remote.close()
desc sql_file;
test03.sql 생성
test03.sql 실행
remote = mysql.connector.connect(
host = "엔드포인트",
port = 3306,
user = "admin",
password = "*****",
database = "zerobase"
)
cur = remote.cursor()
sql = open("test03.sql").read()
cur.execute(sql)
remote.close()
test04.sql 생성
실행
remote = mysql.connector.connect(
host = "database-2.c15ppmahjx3n.ap-southeast-2.rds.amazonaws.com",
port = 3306,
user = "admin",
password = "*****",
database = "zerobase"
)
cur = remote.cursor()
sql = open("test04.sql").read()
cur.execute(sql, multi = True)
remote.close()
sql_file 테이블 조회
읽어올 데이터 양이 많은 경우 : buffered = True
참고 : 검색 결과를 Pasndas 로 읽기
import pandas as pd
df = pd.DataFrame(result)
df.head()
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, ...);
CREATE TABLE orders
(
oid int not null,
order_no varchar(16),
pid int,
primary key (oid),
constraint FK_person FOREIGN KEY (pid) REFERENCES person(pid)
);
ALTER TABLE tablename
DROP FOREIGN KEY FK_constraint ;
alter table tablename
add foreign key (column) references REF_tablename(REF_column) ;
ALTER TABLE orders
ADD FOREIGN KEY (pid) REFERENCES person(pid) ;
police_station 테이블 / primary key 지정
crime_status 컬럼 추가 / foreign key 지정
root 계정으로
1번 답 : 테이블 생성
2번 답 : primary key 삭제
primary key가 여러개 설정이어도 같음
3번 답 : foreign key 삭제
foreign key 이름 FK_study
4번 답 : foreign key 연결
5번 답 : primary key 연결
실습 환경
: AWS RDS (database-2)
: police_station 테이블 사용
: crime_status 테이블 사용
집계함수
select count(column)
from tablename
where condition ;
crime_status 테이블에서 경찰서는 총 몇 군데? (중복 제외)
참고 / 비교
crime_type은 총 몇 가지?
select sum(column) from tablename
where condition ;
범죄 총 발생 건수는?
살인의 총 발생 건수는?
중부 경찰서에서 검거된 총 범죄 건수는?
select avg(column) from tablename
where condition ;
select min(column) from tablename
where condition ;
select max(column) from tablename
where condition ;
select column1, column2, ...
from tablename
where condition;
group by column1, column2, ...
order by column1, column2, ... ;
정렬(order by) 가능
distinct는 정렬할 수가 없음
group by + 집계함수
select column1, column2, ...
from table
where condition
group by col1, col2, ...
having condition (aggregate functions)
order by col1, col2, ... ;
실습환경
: AWS RDS (database-2) zerobase
: sandwich 데이터 (50 rows)
입력값을 기준으로 단일 값을 반환하는 함수
SELECT ucase(string) ;
SELECT lcase(string) ;
select mid(string, start_position, length) ;
SELECT length(string) ;
SELECT round(number, decimals_place) ;
decimals_place(소수점 위치) 옵션을 주지 않으면,
디폴트 값으로 소수점 첫번째 자리에서 반올림
소수점 첫번째 위치는 0
소수점 두번째 자리는 1 / 세번째 자리는 2
일 단위 위치는 -1
십 단위 위치는 -2
sandwich 테이블 실습
SELECT now() ;
SELECT round(number, decimal_place) ;
0 위치(소수점 첫째자리) 이후를 반올림하여 잘라준다 => 12,346
소수점 자리가 비워져있으면 0으로 채워서 반환
oil_price 테이블 실습
: 반올림 => round / 백원단위 => -3
: format(가격, 0)
하나의 SQL 문 안에 포함되어 있는 또 다른 SQL 문을 말한다.
메인쿼리가 서브쿼리를 포함하는 종속적인 관계이다.
: 서브쿼리는 메인쿼리의 컬럼 사용 가능
: 메인쿼리는 서브쿼리의 컬럼 사용 불가
Subquery는 괄호로 묶어서 사용
단일 행 혹은 복수 행 비교 연산자와 함께 사용 가능
subquery 에서는 order by 사용X
select column1, (select column2, from table2 where condition)
from table1
where condition ;
select a.column, b.column
from table1 a, (select column1, coulmn2 from table2) b
where condition ;
Single Row : 하나의 행을 검색 (+ 비교연산자)
Multiple Row : 하나 이상의 행을 검색
Mutiple Column : 하나 이상의 열을 검색
select column_names
from table_name
where column_name = (select column_names
from table_name
where condition)
order by column_name ;
select column_names
from table_name
where column_name in (select column_names
from table_name
where condition)
order by column_name ;
select column_names
from table_name
where exists (select column_names
from table_name
where condition)
order by column_name ;
select column_names
from table_name
where column_name = any (select column_names
from table_name
where condition)
order by column_name ;
select column_names
from table_name
where column_name = All (select column_names
from table_name
where condition)
order by column_name ;
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_names ;