"집계함수"
값 집합의 최대값, 최소값, 평균, 합계 및 개수를 계산
SELECT COUNT(*) FROM users;
SELECT avg(balance) FROM users;
지역별 평균 balance
SELECT DISTINCT country, avg(balance) FROM users WHERE country = "전라북도" ;
지역별 평균 balance 필요
SELECT DISTINCT country, avg(balance) FROM users GROUP BY country;
평균 오름차순 까지 해주기
SELECT DISTINCT country, avg(balance) FROM users GROUP BY country ORDER BY avg(balance) DESC;
나이가 30살 이상인 사람들의 평균 나이 구하기
SELECT AVG(age) FROM users WHERE age >= 30;
SELECT country,COUNT(country) FROM users GROUP BY country;
SELECT column_1, aggregate_function(column_2) FROM table_name GROUP BY column_1, column_2;
특정 그룹으로 묶인 결과를 생성
SELECT last_name, COUNT(*) FROM users GROUP BY last_name;
SELECT last_name, COUNT(*) AS the_number_of_name FROM users GROUP BY last_name;
SELECT last_name, COUNT(*) AS the_number_of_name FROM users GROUP BY last_name ORDER BY COUNT(*) DESC;
SELECT country, AVG(age) FROM users GROUP BY country;
데이터 삽입, 수정, 삭제
사전준비
CREATE TABLE classmates (
name TEXT NOT NULL,
age INTEGER NOT NULL,
address TEXT NOT NULL
);
INSERT INTO table_name (column1, column2, ... ) VALUES (value1, value2, ..);
새 행을 테이블에 삽입
먼저 INSERT INFO 키워드 뒤에 데이터를 삽입할 테이블의 이름을 지정
테이블 이름 뒤에 쉼표로 구분된 컬럼 목록을 추가
VALUES 키워드 뒤에 쉼표로 구분된 값 목록을 추가
INSERT INTO classmates (name, age, address) VALUES ('엄한결', 27, '서울');
INSERT INTO classmates VALUES ('어무해', 27, '장고');
INSERT INTO classmates
VALUES
('상재우', 27, '서울'),
('중재우', 27, '서울'),
('하재우', 27, '서울')
;
UPDATE table_name
SET column_1 = new_value_1,
column_2 = new_value_2
WHERE
search_condition;
UPDATE classmates
SET
name = '김철수',
address = '제주'
WHERE
name = '어무해';
DELETE FROM table_name
WHERE search_condition;
테이블에서 행을 제거
DELETE FROM classmates
WHERE rowid = 5;
DELETE FROM classmates
WHERE name LIKE '%우%';
DELETE FROM classmates;
테이블 나누기 -> 유지보수에 좋음
데이터 베이스 정규형
이름 | 나이 | 취미 |
---|---|---|
엄결 | 27 | 헬스 |
엄한결 | 27 | 노래, 축구 |
회원 id | 강사명 | 운동 | 가격 |
---|---|---|---|
1000 | 엄 | 헬스 | 30000 |
1001 | 엄한 | 수영 | 1000 |
1002 | 엄한결 | 필라테스 | 20000 |
1003 | 엄결 | 요가 | 40000 |
-> 이런 형태의 DB에서는 수영의 금액을 변경해야하고 회원이 몇 천명이면 DB 전부 뒤져서 하나하나 다 수정해야함
-> 수영하는 회원이 추가되면 쓸데없는 데이터 (금액같은)도 하나한 다 추가해야함
따라서, table을 나눠야함
회원 ID | 강사명 |
---|---|
1000 | 엄 |
1001 | 한 |
1001 | 결 |
1001 | 한결 |
강사명 | 운동 | 금액 |
---|---|---|
엄결 | 헬스 | 30000 |
엄한결 | 수영 | 10000 |
테이블에서 부분 함수적 종속성을 제거한 것
복합 키, composite key
composite PK, Partial Dependency를 키워드로 추가 공부 필요
강사명 | 운동 | 금액 |
---|---|---|
엄결 | 헬스 | 30000 |
엄한결 | 수영 | 10000 |
결 | 헬스 | 30000 |
금액은 pk인 강사명과 관련 없음, 금액은 운동column에 의존
-> 분리
강사명 | 운동 |
---|---|
엄결 | 헬스 |
엄한결 | 수영 |
결 | 헬스 |
운동 | 금액 |
---|---|
헬스 | 30000 |
수영 | 10000 |
Transitive Dependency 키워드로 추가 공부 필요
SELECT * FROM articles,users;
SELECT * FROM articles,users WHERE articles.userid = users.rowid;
{테이블 1} INNER JOIN {테이블 2} ON {조건식}
SELECT * FROM articles INNER JOIN users ON userid = users.rowid
-> INNER JOIN
-> Ariticles(왼쪽꺼) 누락없이 users 데이터가 있으면 가져오기
SELECT * FROM articles LEFT JOIN users
ON userid = users.rowid;
users(오른쪽 꺼) 누락없이 articles 있으면 가져오기
SELECT * FROM articles RIGHT JOIN users ON userid=users.rowid;
JOIN
두 개 이상의 테이블에서 데이터를 가져와 결합하는 것