본문 바로가기

멀티캠퍼스 프로젝트형 AI 서비스 개발 5회차/Database

1/27 목

728x90

목요일~~

 

WHERE 조건에서 사용하는 AND·OR·BETWEEN·IN·LIKE 연산자

패턴 매칭 : 와일드카드를 이용해서 특정 패턴만 조회. '%'는 0개 이상의 글자, '_'는 1개의 글자를 의미함

USE sqldb;                                         -- sqldb schema 지정
SELECT * FROM userTBL;

SELECT * FROM userTBL WHERE userName = '김경호'; -- WHERE 조건
SELECT userID, userName FROM userTBL WHERE (birthYear >= 1970) AND (userHeight >= 182);
SELECT userID, userName FROM userTBL WHERE (birthYear >= 1970) OR (userHeight >= 182);
SELECT userID, userName FROM userTBL WHERE userHeight >= 180 AND userHeight <= 183;
SELECT userID, userName FROM userTBL WHERE userHeight BETWEEN 180 AND 183;
SELECT userID, userName FROM userTBL WHERE userAddr = '경남' OR userAddr = '전남' OR userAddr = '경북';
SELECT userID, userName FROM userTBL WHERE userAddr IN ('경남', '전남', '경북');

SELECT userID, userName FROM userTBL WHERE userName LIKE '김%';
-- 패턴 매칭. % : 0개 이상의 글자를 의미함. '김'이 제일 앞 글자인 것만 조회
SELECT userID, userName FROM userTBL WHERE userName LIKE '_종신';
-- _ : 1개의 글자를 의미함. 맨 앞이 한 글자이고 그 다음이 '종신'인 것 조회
SELECT userID, userName FROM userTBL WHERE userName LIKE '_용%';
-- 앞에 아무거나 한 글자가 오고 두 번째는 '용', 세 번째 이후에는 아무거나 오는 값 추출

 

SubQuery : 쿼리문 안에 또 쿼리문이 들어 있는 것. 다중 조건부 구문. ANY·ALL

SELECT userName, userHeight FROM userTBL 
-- SubQuery. 김경호보다 키가 크거나 같은 사람의 이름과 키를 출력
WHERE userHeight >= (
	SELECT userHeight 
	FROM userTBL 
	WHERE userName = '김경호');

SELECT userName, userHeight FROM userTBL
WHERE userHeight >= ANY( 
-- ANY는 서브쿼리 여러 개의 결과 중 한 가지만 만족해도 됨. ALL은 여러 개의 결과를 모두 만족시켜야함
	SELECT userHeight
	FROM userTBL 
    	WHERE userAddr = '경남');

 

ORDER BY 정렬 : ASC(Ascending) 오름차순으로 정렬, DESC(Descending) 내림차순으로 정렬

DISTINCT : 중복된 것은 하나만 남김

LIMIT : 시작, 개수 or 개수 OFFSET 시작

SELECT userName, userID, userDate FROM userTBL ORDER BY userDate;      -- 오름차순. 일차 정렬
SELECT userName, userID, userDate FROM userTBL ORDER BY userDate DESC; -- 내림차순
SELECT userName, userHeight FROM userTBL ORDER BY userHeight DESC, userName ASC;
-- 키가 큰 순서로 정렬하되, 키가 같으면 이름 순으로 정렬. 이차 정렬

SELECT DISTINCT userAddr FROM userTBL;       -- 중복 값 제거. 서울, 경북, 경기, 경남, 전남

SELECT * FROM userTBL LIMIT 0, 3;            -- 0 번째부터 3개 출력
SELECT * FROM userTBL LIMIT 3 OFFSET 0;      -- 위와 동일

CREATE TABLE tmpTBL (SELECT * FROM userTBL); -- userTBL을 복사해서 사용
SELECT * FROM tmpTBL;

DESC tmpTBL; -- 복사한 테이블의 명세를 살펴보면, key(PK, FK)는 복사되지 않음

 

Grouping : DB를 그룹으로 묶어주는 역할, GROUP BY절

집계 함수 : SUM(), AVG(), COUNT(), MIN(), MAX()

SELECT userID, buyAmount FROM buyTBL ORDER BY userID;
SELECT userID, SUM(buyAmount) FROM buyTBL GROUP BY userID ORDER BY userID;
-- 그룹핑해서 ID마다 총 몇 개를 샀는지 정렬 후 조회
SELECT userID, COUNT(buyAmount) FROM buyTBL GROUP BY userID ORDER BY userID; -- 행의 개수 구함
SELECT userID, AVG(buyAmount) FROM buyTBL GROUP BY userID ORDER BY userID;   -- 평균 구함

SELECT userID AS 'ID', SUM(productPrice*buyAmount) AS 'amount' 
FROM buyTBL 
GROUP BY userID ORDER BY userID;
-- 각 사용자의 구매액의 총합
SELECT userID, AVG(buyAmount) FROM buyTBL GROUP BY userID ORDER BY userID;   -- 각 사용자의 구매 개수 평균

SELECT, FROM, WHERE, GROUP BY, HAVING, ORDER BY 순서로 query 작성

SELECT userName, userHeight FROM userTBL     -- 가장 큰 키와 가장 작은 키의 회원 이름과 키를 출력하는 SubQuery
WHERE userHeight = (SELECT MAX(userHeight) FROM userTBL)
OR userHeight = (SELECT MIN(userHeight) FROM userTBL);

SELECT userID, SUM(productPrice*buyAmount) FROM buyTBL
-- WHERE SUM(productPrice*buyAmount) >= 1000 -- WHERE절에는 집계 함수를 쓸 수 없음
GROUP BY userID
HAVING SUM(productPrice*buyAmount) >= 1000;  -- HAVING절에는 집계 함수를 쓸 수 있음

 

Transaction : 일(작업)의 최소 단위. 개발자가 임의로 설정함. 테이블의 데이터를 변경(입력/수정/삭제)할 때 실제 테이블에 완전히 적용하지 않고, 임시로 적용하는 것 → 실수 번복 가능

Transaction을 설정하면 DBMS가 4가지 특성(기능)을 제공함 → ACID 특성

Atomicity(원자성) : All or Nothing

Consistency(일치성) : 데이터의 일관성을 유지

Isolation(독립성) : 동시성 때문에 발생하는 문제를 해결

Durability(영속성) : 데이터가 안전하게 저장되는 것을 보장

SELECT * FROM buyTBL;
START TRANSACTION; -- 트랜잭션 설정
SELECT * FROM buyTBL;
DELETE FROM buyTBL;
ROLLBACK;          -- 트랜잭션 설정 후 했던 작업 취소

INSERT : 데이터의 삽입

CREATE TABLE testTBL (id INT, userName VARCHAR(10), userAge INT);
INSERT INTO testTBL VALUES(1, '아이유', 20);
SELECT * FROM testTBL;
INSERT INTO testTBL(id, userName) VALUES(2, '김연아'); -- column을 지정해서 일부 값만 입력
INSERT INTO testTBL(userAge, userName) VALUES(30, '신사임당');
-- 열의 순서를 바꿔서 입력할 때는 열 이름을 순서에 맞춰 나열

DROP TABLE testTBL;

CREATE TABLE testTBL (
	id INT AUTO_INCREMENT PRIMARY KEY, -- 자동으로 증가함. id 순번. 1번, 2번...
    userName VARCHAR(10),
    userAge INT);
-- ALTER TABLE testTBL AUTO_INCREMENT = 100; -- 시작 값/범위 정해줄 수 있음(MySQL 내부 변수를 수정해야함)
INSERT INTO testTBL VALUES(NULL, '아이유', 20);
INSERT INTO testTBL VALUES(NULL, '김연아', 30);

대량의 샘플 데이터 생성(INSERT) 및 수정(UPDATE), 삭제(DELETE)

CREATE TABLE testTBL (id INT, fname VARCHAR(50), lname VARCHAR(50));

INSERT INTO testTBL             -- 다른 테이블의 데이터를 가져와서 대량으로 입력
    SELECT emp_no, first_name, last_name
    FROM   employees.employees; -- schema.table

SELECT * FROM testTBL;

START TRANSACTION;              -- 트랜잭션 설정
UPDATE testTBL                  -- 테이블 전체의 행을 변경
SET lname = '홍길동';
SELECT * FROM testTBL LIMIT 10;
ROLLBACK;                       -- 트랜잭션 설정 후 했던 작업 취소

UPDATE testTBL
SET lname = '홍길동'
WHERE fname = 'Parto';          -- WHERE절 조건에 해당하는 행만 변경
SELECT lname, fname FROM testTBL WHERE fname = 'Parto';

DELETE FROM testTBL WHERE lname = '홍길동'; -- 조건부 삭제

MySQL에 신규 계정을 만들고 제한된 권한을 부여하여 root 계정(관리자)과 DB 분리해서 관리하기

MySQL 신규 계정 생성 1
MySQL 신규 계정 생성 2
MySQL 신규 계정 생성 3

1. 1/17 월 2. 1/18 화 3. 1/19 수 4. 1/20 목 5. 1/21 금
취업 특강 파이썬
환경 설정

(파이참, 아나콘다, 주피터 노트북)
파이썬
데이터 타입

(list, tuple)
파이썬
데이터 타입

(range, string, dictionary, set, bool)
파이썬
사용자 정의 함수,

객체지향,
사용자 정의 클래스
6. 1/24 월 7. 1/25 화 8. 1/26 수 9. 1/27 목 10. 1/28 금
파이썬
사용자 정의 클래스,

사용자 정의 모듈
DB(MySQL)
DBMS,
MySQL 환경 설정,
DB/테이블 생성,
DB 입력·활용,
Index
DB(MySQL)
View,
백업과 복원,
DB 모델링,
관계(PK, FK),
DML(CRUD),
데이터 타입

DB(MySQL)
DML(CRUD),
WHERE 조건,
패턴 매칭,
SubQuery,
정렬,
그룹핑,
집계 함수,
트랜잭션(ACID 특성)
DB(MySQL)
JOIN

WEB

* 해결해야 할 문제가 어려우면 한 번에 코드 쓰려하지 말고 부분 부분 써보고 합치자!

728x90

'멀티캠퍼스 프로젝트형 AI 서비스 개발 5회차 > Database' 카테고리의 다른 글

1/28 금  (0) 2022.01.28
1/26 수  (0) 2022.01.26
1/25 화  (0) 2022.01.25