목요일~~
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 분리해서 관리하기



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 |
* 해결해야 할 문제가 어려우면 한 번에 코드 쓰려하지 말고 부분 부분 써보고 합치자!