sql5 (MongoDB)

ilysm·2023년 2월 10일

pymysql
1. 커넥션 연결 connection
2. 커서 (데이터베이스의 로우를 가리키는 것) cursor
3. sql호출, %s parameter
4. 커서 → 커리 시행
5. 조회 :fetch , 생성 수정: commit

GROUP BY : 집계
WHERE에서 처리 후 GROUP BY
WHERE: 테이블에 실제 존재하는 데이터만 간섭할 수 있음
1. 테이블을 조건에 맞게 자름
2. 집계하여 임시테이블을 만듬
3. 다시 자름
HAVING 조건절

  • 얻고자하는 조건이 SELECT에 있어야 걸 수 있음 (ex SUM(b.qty).
  • GROUP BY의 걸린 행에 간섭이 가능해짐.
    buy qty <- qty가 10개가 넘으면 x
SELECT b.id, SUM(qty) AS sum_qty
FROM buy
GROUP BY b.product 
HAVING sum_qty > 10

작가 이름별 도서관 책 보유량 (count)를 알고 싶습니다.
python으로 결과를 가져오면 될 것 같고, dataframe으로 예쁘게 내보냅시다.
단, 책 갯수가 10개보다 많아야 합니다.

SQL : 정형화된(데이터가 구조화, 틀, 규칙) 질의어

  • Database → table → columns
  • but 빅데이터는 구조x, 일정하지 않음

NOSQL: No 구조화된 질의어, 자유롭다. 트렌잭션↓, 대량의 데이터, 유연함

  • Database → collection → Document(BSON)
  • 대량의 입출력
  • 프로그램마다 언어가 다 다름 (몽고db 코드를 카산드라에서 사용 불가)

MongoDB: key, value → BSON (Binary 형태로 저장(압축) + Json)
스키마(데이터 구조) 유연 ← 스키마가 없는 것은 아님, 유연, key에 따라 분류되는 형식

MongoDB

use database; 하면 데이터를 만듬 존재, 실데이터 x

db.[컬렉션 이름]insertOne({"name":"User","count":1});

컬렉션 이름이 있으면 찾아주고 없으면 만들어줌.

db.testcol.insertOne({"name": "user2", a:1,b:2})

Query

find ({ "a":1})
find ({ "a":{lt: {}}})
db.inventory.find({"qty": {"$gt": 30}}).pretty()
#qty가 30 이상인 것 찾기

mongodb 키는법

  1. db프로그램 mongod -- dbpath = D:\mongoDB\data
  2. db사용을 위한 명령 프로그램 : mongo [host|port|db]
    몽고 db
  • use database 명
  • db.컬렉션 이름 ~
  1. inventory 에서 qty가 50개 이상인 데이터만 찾아서 출력합니다.
db.inventory.find({"qty": {"$gt": 50}}).pretty()
  1. notebook만 찾아 보겠습니다. #json데이터를 넣어주면 됨
db.inventory.find({item : 'notebook'})
db.inventory.find({item: {$in: ["notebook"]}}).pretty()
  1. paper와 planner의 size 데이터만 가져옵니다.
db.inventory.find({item : {$in :['paper','planner']}},{'size':true})

python mysql 연결

  • pymysql

python mongodb 연결

  • connection
  • database
  • collection
  • find | insert | update

실습 in python

  1. inventory에서 status가 'D'인 item 이름만 가지고 온다
import pymongo

connection = pymongo.MongoClient("mongodb://localhost:27017/") # mongoda connection 연결

database=connection['test'] # 데이터 베이스를 찾는다.
collection= database['inventory'] # 컬렉션을 찾는다.

query={'status':'D'}
datas=collection.find(query) # 쿼리한다.

list2=[]
for data in datas: # 데이터가 여러건이면 for문에서 찾아온다.
    list2.append(data)

df2=pd.DataFrame(list2)
df2['item']
  1. inventory에서 qty가 70보다 큰 데이터를 가지고 온다.
import pymongo

connection = pymongo.MongoClient("mongodb://localhost:27017/") 

database=connection['test'] 
collection= database['inventory'] 

query={"qty": {"$gt": 70}}
datas=collection.find(query)


list3=[]
for data in datas: 
    list3.append(data)

df3=pd.DataFrame(list3)
df3
  1. status가 A이고, qty가 30보다 작은 데이터의 item 이름만 가지고 온다.
import pymongo

connection = pymongo.MongoClient("mongodb://localhost:27017/")

database=connection['test'] 
collection= database['inventory'] 

query={'status':'A' , "qty": {"$lt": 30} }
datas=collection.find(query) 

list4=[]
for data in datas:
    list4.append(data)

df4=pd.DataFrame(list4)
df4

NoSQL(MongoDB)

입력이 빠르다 (데이터 구조x)
원하는 데이터를 마음대로 넣을 수 있다.
구조 잡는 밑작업이 필요 없음 (있는 그대로를 MongoDB로 집어넣기 때문에)

SQL

테이블을 미리 만들어 놓고 들어가게끔 구조가 필요함.
명령어 형식이 아니라 insert를 해줘야함

그룹화 하기 aggregation 집계 방법

aggregation : 집계 방법 (count, sum, max, min, group)
find : 데이터 검색

update

one

  • 조건, 표현식

many

update(
{조건문},
{$set:{바꾸고 싶은 것}}
);

ex
 db.inventory.updateMany( {status:"D"}, { $set: {status: "b"}})

총정리

데이터베이스 RDBMS

  • 관계형 데이터를 저장 관리하는 시스템
  • databas - table - columns*rows

table을 조작하는 방법 : sql (s구조화된 q질의 l언어)

DML : 테이블을 조작하는 언어 CRUD

(CREAT [INSERT], READ [SELECT], UPDATE [UPDATE], DELETE [DELETE] )

#INSERT
INSERT INTO (컬럼) VALUES ~

#SELECT
SELECT 컬럼 FROM 테이블 WHERE 조건 

#UPDATE
UPDATE 테이블 SET 컬럼 = 내용 WHERE 조건

#DELETE
DELETE FROM 테이블 WHERE 조건

JOIN : 두 개 테이블 이상의 데이터를 가져올 때

INNER JOIN 테이블 ON 연결

OUTER JOIN (LEFT JOIN, RIGHT JOIN)

집계 함수

  • SUM(), MIN(), MAX(), AVG(), MEAN(), COUNT(), GROUP BY
    (SELECT에 나온 컬럼명을 GROUP BY에 넣어줘야함)
  • GROUP BY 은 WHERE 절은 집계하기 전
  • HAVING 은 WHERE 집계하기 후

Transaction

TRANSACTION START
COMMIT () # 처리 해주기
ROLLBACK() # 실패시 롤백 해야함

테이블 만들기 CREATE TABLE

  • 이름, 자료형, 제약조건 (PK 기본키 , FK 외래키)

PK : 하나의 열을 대표하는키
FK : 관계를 나타내는 관계 정보를 갖고 있는 키

테이블 바꾸기 ALTER TABLE

ALTER TALBE 명 ADD|DROP|MODIFY 하고싶은 것

모델링

  • 개체(table) 속성(컬럼) 관계(FK) 대표값(PK)을 잘 설계하는 것

관계

  • 1:1 : 서로가 같은 PK, 컬럼합으로 합친다.
  • 1:N : FK를 넣어준다.
  • N:M : 서로 하나의 데이터가 여러개의 데이터가 바라봄. 1:N, M:1 사이 Mapping table 만들어줌

PySQL

커넥션 → 커서 → query → 결과

NoSQL

구조가 없는 sql (MongoDB)
database - collection - document

MongoDB에 데이터 집어넣기

db.[컬렉션].insert | find | update | delete

find({조건},{가져올 데이터})
update({바꿀데이터},{$set:{바뀔데이터}})
profile
한걸음씩 배워나갑니다

1개의 댓글

comment-user-thumbnail
2023년 2월 20일

꼼꼼한 학습일지 잘 읽었습니다~ 앞으로도 응원 드리겠습니다^.^ 남은 과정 끝까지 화이팅 화이팅~!

답글 달기