// study DB 내 tStaff 테이블 생성
CREATE TABLE tStaff
-> (
-> name CHAR(15) PRIMARY KEY,
-> depart CHAR(10) NOT NULL,
-> gender CHAR(3) NOT NULL,
-> joindate DATE NOT NULL,
-> grade CHAR(10) NOT NULL,
-> salary INT NOT NULL,
-> score DECIMAL(5,2) NULL
-> );
// 테이블 내 정보 입력
INSERT INTO tStaff VALUES ('김유신','총무부','남','2000-2-3','이사',420,88.8);
INSERT INTO tStaff VALUES ('유관순','영업부','여','2009-3-1','과장',380,NULL);
INSERT INTO tStaff VALUES ('안중근','인사과','남','2012-5-5','대리',256,76.5);
INSERT INTO tStaff VALUES ('윤봉길','영업부','남','2015-8-15','과장',350,71.25);
INSERT INTO tStaff VALUES ('강감찬','영업부','남','2018-10-9','사원',320,56.0);
INSERT INTO tStaff VALUES ('정몽주','총무부','남','2010-9-16','대리',370,89.5);
INSERT INTO tStaff VALUES ('허난설헌','인사과','여','2020-1-5','사원',285,44.5);
INSERT INTO tStaff VALUES ('신사임당','영업부','여','2013-6-19','부장',400,92.0);
INSERT INTO tStaff VALUES ('성삼문','영업부','남','2014-6-8','대리',285,87.75);
INSERT INTO tStaff VALUES ('논개','인사과','여','2010-9-16','대리',340,46.2);
INSERT INTO tStaff VALUES ('황진이','인사과','여','2012-5-5','사원',275,52.5);
INSERT INTO tStaff VALUES ('이율곡','총무부','남','2016-3-8','과장',385,65.4);
INSERT INTO tStaff VALUES ('이사부','총무부','남','2000-2-3','대리',375,50);
INSERT INTO tStaff VALUES ('안창호','영업부','남','2015-8-15','사원',370,74.2);
INSERT INTO tStaff VALUES ('을지문덕','영업부','남','2019-6-29','사원',330,NULL);
INSERT INTO tStaff VALUES ('정약용','총무부','남','2020-3-14','과장',380,69.8);
INSERT INTO tStaff VALUES ('홍길동','인사과','남','2019-8-8','차장',380,77.7);
INSERT INTO tStaff VALUES ('대조영','총무부','남','2020-7-7','차장',290,49.9);
INSERT INTO tStaff VALUES ('장보고','인사과','남','2005-4-1','부장',440,58.3);
INSERT INTO tStaff VALUES ('선덕여왕','인사과','여','2017-8-3','사원',315,45.1);
// 테이블 확인
SELECT*FROM tStaff;
+--------------+-----------+--------+------------+--------+--------+-------+
| name | depart | gender | joindate | grade | salary | score |
+--------------+-----------+--------+------------+--------+--------+-------+
| 강감찬 | 영업부 | 남 | 2018-10-09 | 사원 | 320 | 56.00 |
| 김유신 | 총무부 | 남 | 2000-02-03 | 이사 | 420 | 88.80 |
| 논개 | 인사과 | 여 | 2010-09-16 | 대리 | 340 | 46.20 |
| 대조영 | 총무부 | 남 | 2020-07-07 | 차장 | 290 | 49.90 |
| 선덕여왕 | 인사과 | 여 | 2017-08-03 | 사원 | 315 | 45.10 |
| 성삼문 | 영업부 | 남 | 2014-06-08 | 대리 | 285 | 87.75 |
| 신사임당 | 영업부 | 여 | 2013-06-19 | 부장 | 400 | 92.00 |
| 안중근 | 인사과 | 남 | 2012-05-05 | 대리 | 256 | 76.50 |
| 안창호 | 영업부 | 남 | 2015-08-15 | 사원 | 370 | 74.20 |
| 유관순 | 영업부 | 여 | 2009-03-01 | 과장 | 380 | NULL |
| 윤봉길 | 영업부 | 남 | 2015-08-15 | 과장 | 350 | 71.25 |
| 을지문덕 | 영업부 | 남 | 2019-06-29 | 사원 | 330 | NULL |
| 이사부 | 총무부 | 남 | 2000-02-03 | 대리 | 375 | 50.00 |
| 이율곡 | 총무부 | 남 | 2016-03-08 | 과장 | 385 | 65.40 |
| 장보고 | 인사과 | 남 | 2005-04-01 | 부장 | 440 | 58.30 |
| 정몽주 | 총무부 | 남 | 2010-09-16 | 대리 | 370 | 89.50 |
| 정약용 | 총무부 | 남 | 2020-03-14 | 과장 | 380 | 69.80 |
| 허난설헌 | 인사과 | 여 | 2020-01-05 | 사원 | 285 | 44.50 |
| 홍길동 | 인사과 | 남 | 2019-08-08 | 차장 | 380 | 77.70 |
| 황진이 | 인사과 | 여 | 2012-05-05 | 사원 | 275 | 52.50 |
+--------------+-----------+--------+------------+--------+--------+-------+
여러 개의 레코드에 대해 집합적 계산을 수행하여 합계, 평균, 분산 같은 통계값을 산출함
SELECT COUNT(*) FROM tStaff;
+----------+
| COUNT(*) |
+----------+
| 20 |
+----------+
// COUNT를 총 직원수로 별명 부여
SELECT COUNT(*) AS "총 직원수" FROM tStaff;
+---------------+
| 총 직원수 |
+---------------+
| 20 |
+---------------+
// 월급이 400 이상인 사람 수 구하기
SELECT COUNT(*) FROM tStaff WHERE salary >=400;
+----------+
| COUNT(*) |
+----------+
| 3 |
+----------+
// 월급이 400 이상인 사람 이름 목록 구하기
SELECT name FROM tStaff WHERE salary >=400;
+--------------+
| name |
+--------------+
| 김유신 |
| 신사임당 |
| 장보고 |
// 중복제거 함수 DISTINCT 사용
SELECT COUNT(DISTINCT depart) FROM tStaff;
+--------------+
1. 실적 없이 노는 직원 2명 목록 구하기
SELECT name FROM tStaff WHERE score IS NULL;
2. 성취도 80점 이상인 직원 수 구하기
SELECT COUNT(*) FROM tStaff WHERE score >=80;
- SUM : 합계 계산
- AVG : 평균 계산
- MIN : 최소값 계산
- MAX : 최댓값 계산
- STDDEV : 표준 편차 계산
- VARIANCE : 분산 계산
SELECT depart, AVG(salary) FROM tStaff WHERE salary > 300 GROUP BY depart HAVING AVG(salary) >=360 ORDER BY depart;
+-----------+-------------+
| depart | AVG(salary) |
+-----------+-------------+
| 인사과 | 368.7500 |
| 총무부 | 386.0000 |
+-----------+-------------+
원본 테이블 ( WHERE )-> 통계 대상 선정 ( GROUP BY ) + ( AVG ) -> 집계 ( HAVING ) -> 출력 대상 ( ORDER BY ) -> 출력
DELETE FROM user WHERE id='apple';
WHERE 절은 단일값만 비교 가능!
SELECT*FROM user;
+-----------+----------+------+--------------+----------+-----------+
| id | password | name | phone_number | birthday | email |
+-----------+----------+------+--------------+----------+-----------+
| shjee | 1234 | EL | 01062702217 | 29091999 | shjee2217 |
| shjee2217 | 1234 | EL | 01062702217 | 29091999 | shjee2217 |
| svfwsvs | sdvs | EL | 01062702217 | 12091999 | svfdsv |
+-----------+----------+------+--------------+----------+-----------+
DELETE FROM user WHERE id IN('shjee','svfwsvs');
SELECT*FROM user;
+-----------+----------+------+--------------+----------+-----------+
| id | password | name | phone_number | birthday | email |
+-----------+----------+------+--------------+----------+-----------+
| shjee2217 | 1234 | EL | 01062702217 | 29091999 | shjee2217 |
+-----------+----------+------+--------------+----------+-----------+
' 김상형의 sql 정복 ', 김상형 저, 5장 데이터 집계