SHOW DATABASES;
mysql 데이터 베이스 선택USE mysql;
SHOW TABLES;
DESC user;
test 데이터 베이스 선택(없으면 먼저 만들어주세요.)CREATE DATABASE IF NOT EXISTS test
USE test;
SHOW TABLES;
DROP DATABASE IF EXISTS a1;
a1) 생성CREATE DATABASE IF NOT EXISTS a1;
a1) 선택USE a1;
SHOW DATABASES;
SHOW TABLES;
CREATE TABLE article(
title VARCHAR(100),
body TEXT
);
DESC article;
INSERT INTO article(title, body) VALUES("제목", "내용");
SELECT title FROM article;
SELECT title, body FROM article;
SELECT body, title FROM article;
SELECT * FROM article;
INSERT INTO article(title, body) VALUES("제목", "내용");
SELECT * FROM article;
ALTER TABLE article
ADD COLUMN id INT FIRST;
SELECT * FROM article WHERE id IS NULL;
UPDATE article SET id = 1 WHERE id IS NULL;
SELECT * FROM article;
UPDATE article SET id = 2 LIMIT 1;
SELECT * FROM article;
INSERT INTO article(id, title, body) VALUES(3, "제목3", "내용3");
SELECT * FROM article;
DELETE FROM article WHERE id = 2;
SELECT * FROM article;
ALTER TABLE article
ADD COLUMN regDate DATETIME AFTER id;
DESC article;
SELECT * FROM article;
UPDATE article SET regDate = "2018-08-10 15:00:00" WHERE id = 1;
SELECT * FROM article;
SELECT NOW();
UPDATE article SET regDate = NOW() WHERE id = 3;
SELECT * FROM article;
DROP DATABASE IF EXISTS a2;
a2) 생성CREATE DATABASE IF NOT EXISTS a2;
a2) 선택USE a2;
CREATE TABLE article(
id INT,
regDate DATETIME,
title VARCHAR(100),
body TEXT
);
SELECT * FROM article;
INSERT INTO article(regDate, title, body) VALUES(NOW(), "제목", "내용");
INSERT INTO article(regDate, title, body) VALUES(NOW(), "제목", "내용");
SELECT * FROM article;
-- ALTER TABLE article
-- MODIFY COLUMN id INT NOT NULL;
UPDATE article SET id = 0;
ALTER TABLE article
MODIFY COLUMN id INT NOT NULL;
SELECT * FROM article;
-- ALTER TABLE article
-- ADD COLUMN PRIMARY KEY(id);
UPDATE article SET id = 1 LIMIT 1;
SELECT * FROM article;
UPDATE article SET id = 2 WHERE id = 0;
ALTER TABLE article
ADD PRIMARY KEY(id);
ALTER TABLE article
MODIFY COLUMN id INT NOT NULL AUTO_INCREMENT;
DESC article;
ALTER TABLE article MODIFY COLUMN regDate DATETIME NOT NULL;
ALTER TABLE article MODIFY COLUMN title VARCHAR(100) NOT NULL;
ALTER TABLE article MODIFY COLUMN body TEXT NOT NULL;
ALTER TABLE article
MODIFY COLUMN id INT UNSIGNED NOT NULL AUTO_INCREMENT;
ALTER TABLE article
ADD COLUMN writer VARCHAR(100) AFTER title;
ALTER TABLE article
RENAME COLUMN writer TO nickname;
ALTER TABLE article
MODIFY COLUMN nickname VARCHAR(100) AFTER body;
ALTER TABLE article
ADD COLUMN hit INT;
ALTER TABLE article
DROP COLUMN hit;
ALTER TABLE article
ADD COLUMN hit INT;
UPDATE article SET nickname = "무명";
INSERT INTO article(regDate, title, body, nickname, hit) VALUES(NOW(), "제목3", "내용3", "홍길순", 10);
INSERT INTO article(regDate, title, body, nickname, hit) VALUES(NOW(), "제목4", "내용4", "홍길동", 5);
INSERT INTO article(regDate, title, body, nickname, hit) VALUES(NOW(), "제목5", "내용5", "홍길동", 10);
INSERT INTO article(regDate, title, body, nickname, hit) VALUES(NOW(), "제목6", "내용6", "임꺽정", 100);
SELECT * FROM article ORDER BY hit DESC LIMIT 3;
SELECT * FROM article WHERE nickname LIKE "홍길%";
SELECT * FROM article WHERE hit >= 10 AND hit <= 55;
SELECT * FROM article WHERE nickname != "무명" AND hit <= 50;
SELECT * FROM article WHERE nickname = "무명" OR hit >= 55;
DROP DATABASE IF EXISTS a5;
CREATE DATABASE IF NOT EXISTS a5;
USE a5;
CREATE TABLE dept(
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
PRIMARY KEY(id),
regDate DATETIME NOT NULL,
name VARCHAR(100) NOT NULL
);
INSERT INTO dept(regDate, name) VALUES(NOW(), "홍보");
INSERT INTO dept(regDate, name) VALUES(NOW(), "기획");
CREATE TABLE emp(
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
PRIMARY KEY(id),
regDate DATETIME NOT NULL,
name VARCHAR(100) NOT NULL,
deptName CHAR(100) NOT NULL
);
INSERT INTO emp(deptDate, name, deptName) VALUES(NOW(), "홍길동", "홍보");
INSERT INTO emp(deptDate, name, deptName) VALUES(NOW(), "홍길순", "홍보");
INSERT INTO emp(deptDate, name, deptName) VALUES(NOW(), "임꺽정", "기획");
UPDATE emp SET deptName = "마케팅" WHERE deptName = "홍보";
UPDATE emp SET deptName = "홍보" WHERE deptName = "마케팅";
ALTER TABLE emp
ADD COLUMN deptId INT UNSIGNED NOT NULL;
UPDATE emp SET deptid = 1 WHERE deptName = "홍보";
UPDATE emp SET deptid = 2 WHERE deptName = "기획";
ALTER TABLE emp
DROP COLUMN deptName;
UPDATE dept SET name = "마케팅" WHERE name = "홍보";
SELECT * FROM emp;
SELECT * FROM dept WHERE id = 1;
SELECT * FROM emp INNER JOIN dept;
SELECT emp.*,dept.id, dept.name FROM emp
INNER JOIN dept
ON emp.deptId = dept.id;
SELECT emp.id as 사원번호,
emp.name as 사원명,
DATE(emp.regDate) as 입사일,
dept.name as 부서명
FROM emp INNER JOIN dept
ON emp.deptId = dept.id
ORDER BY 부서명, 사원명;
SELECT E.id as 사원번호,
E.name as 사원명,
DATE(E.regDate) as 입사일,
D.name as 부서명
FROM emp as E INNER JOIN dept as D
ON E.deptId = D.id
ORDER BY 부서명, 사원명;
SELECT FROM emp; -- 사원
SELECT FROM dept; -- 부서
INSERT INTO emp(regDate,name,deptId) VALUES(NOW(), "김영희", 2);
INSERT INTO dept(regDate, name) VALUES(NOW(), "IT");
SELECT * FROM dept;
INSERT INTO emp(regDate, name, deptId) VALUES(NOW(), "김철수", 3);
DROP DATABASE IF EXISTS a3;
CREATE DATABASE IF NOT EXISTS a3;
USE a3;
CREATE TABLE article(
id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
regDate DATETIME NOT NULL,
subject VARCHAR(100) NOT NULL,
body TEXT NOT NULL
);
INSERT INTO article(regDate, subject, body) VALUES(NOW(), "제목1", "내용1");
INSERT INTO article(regDate, subject, body) VALUES(NOW(), "제목2", "내용2");
INSERT INTO article(regDate, subject, body) VALUES(NOW(), "제목3", "내용3");
SELECT * FROM article;
CREATE TABLE comment(
id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
regDate DATETIME NOT NULL,
articleId INT UNSIGNED NOT NULL,
body TEXT
);
INSERT INTO comment(regDate, articleId, body) VALUES(NOW(), 1, "댓글 내용 1");
INSERT INTO comment(regDate, articleId, body) VALUES(NOW(), 1, "댓글 내용 2");
INSERT INTO comment(regDate, articleId, body) VALUES(NOW(), 2, "댓글 내용 3");
SELECT * FROM comment;
SELECT * FROM comment;
SELECT A.id,
A.subject,
C.articleId,
C.body
FROM article as A INNER JOIN comment as C;
SELECT A.id,
A.subject,
C.articleId,
C.body
FROM article as A INNER JOIN comment as C
ON A.id = C.articleId;
SELECT FROM article;
SELECT FROM comment;
-- 12강
DROP DATABASE IF EXISTS a6;
CREATE DATABASE IF NOT EXISTS a6;
USE a6;
CREATE TABLE board (
id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
regDate DATETIME NOT NULL,
name CHAR(100) NOT NULL UNIQUE
);
INSERT INTO board(regDate, name) VALUES(NOW(), "공지");
INSERT INTO board(regDate, name) VALUES(NOW(), "자유");
SELECT *
FROM board
WHERE name = '공지';
SELECT * FROM board;
SELECT *
FROM (
SELECT 1 as id, NOW() as regDate, "공지" as name
UNION
SELECT 2 as id, NOW() as regDate, "자유" as name
) as board;
SELECT
FROM (
SELECT FROM board
) as board;
ONLY_FULL_GROUP_BY 모드 끄기, 이 부분은 이해하지 않으셔도 됩니다.SET SESSION sql_mode = (SELECT REPLACE(@@sql_mode, 'ONLY_FULL_GROUP_BY', ''));
SET sql_mode = (SELECT REPLACE(@@sql_mode, 'ONLY_FULL_GROUP_BY', ''));
DROP DATABASE IF EXISTS a6;
CREATE DATABASE IF NOT EXISTS a6;
USE a6;
CREATE TABLE dept(
id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
regDate DATETIME NOT NULL,
name CHAR(100) UNIQUE
);
INSERT INTO dept(regDate, name) VALUES(NOW(), "홍보");
INSERT INTO dept(regDate, name) VALUES(NOW(), "기획");
CREATE TABLE emp(
id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
regDate DATETIME NOT NULL,
name CHAR(100) NOT NULL,
deptId INT UNSIGNED NOT NULL,
salary INT UNSIGNED NOT NULL
);
INSERT INTO emp(regDate, name, deptId, salary) VALUES(NOW(), "홍길동", 1, 5000);
INSERT INTO emp(regDate, name, deptId, salary) VALUES(NOW(), "홍길순", 1, 6000);
INSERT INTO emp(regDate, name, deptId, salary) VALUES(NOW(), "임꺽정", 2, 4000);
SELECT COUNT(*) FROM emp;
SELECT MAX(id) FROM emp;
SELECT MAX(salary) FROM emp;
SELECT MIN(salary) from emp;
SELECT SUM(salary) FROM emp;
SELECT deptId, SUM(salary) FROM emp GROUP BY deptId;
SELECT deptId, MAX(salary) FROM emp GROUP BY deptId;
SELECT deptId, MIN(salary) FROM emp GROUP BY deptId;
SELECT deptId, AVG(salary) FROM emp GROUP BY deptId;
SELECT IF(deptId = 1, "홍보", "기획"),
GROUP_CONCAT(name ORDER BY id DESC SEPARATOR ", ") as 사원목록,
CONCAT(FORMAT(AVG(salary),0),"만원") as 평균연봉,
CONCAT(FORMAT(MAX(salary),0),"만원") as 최고연봉,
CONCAT(FORMAT(MIN(salary),0),"만원") as 최소연봉,
CONCAT(COUNT(*),"명") as 사원수
FROM emp
GROUP BY deptId;
SELECT CASE
WHEN deptId = 1
THEN "홍보"
WHEN deptId = 2
THEN "기획"
ELSE "무소속"
END as 부서명
,
GROUP_CONCAT(name ORDER BY id DESC SEPARATOR ", ") as 사원목록,
CONCAT(FORMAT(AVG(salary),0),"만원") as 평균연봉,
CONCAT(FORMAT(MAX(salary),0),"만원") as 최고연봉,
CONCAT(FORMAT(MIN(salary),0),"만원") as 최소연봉,
CONCAT(COUNT(*),"명") as 사원수
FROM emp
GROUP BY deptId;
SELECT D.id as 부서,
GROUP_CONCAT(E.name ORDER BY E.id DESC SEPARATOR ", ") as 사원목록,
CONCAT(FORMAT(AVG(E.salary),0),"만원") as 평균연봉,
CONCAT(FORMAT(MAX(E.salary),0),"만원") as 최고연봉,
CONCAT(FORMAT(MIN(E.salary),0),"만원") as 최소연봉,
CONCAT(COUNT(*),"명") as 사원수
FROM emp as E INNER JOIN dept as D
ON E.deptid = D.id
GROUP BY E.deptId;
SELECT D.id as 부서,
GROUP_CONCAT(E.name ORDER BY E.id DESC SEPARATOR ", ") as 사원목록,
CONCAT(FORMAT(AVG(E.salary),0),"만원") as 평균연봉,
CONCAT(FORMAT(MAX(E.salary),0),"만원") as 최고연봉,
CONCAT(FORMAT(MIN(E.salary),0),"만원") as 최소연봉,
CONCAT(COUNT(*),"명") as 사원수
FROM emp as E INNER JOIN dept as D
ON E.deptid = D.id
GROUP BY E.deptId
HAVING AVG(E.salary) >= 5000;
-- 부서별, 부서명, 사원리스트, 평균연봉, 최고연봉, 최소연봉, 사원수 , 연봉 5000 이상
SELECT
FROM(
SELECT D.id as 부서,
GROUP_CONCAT(E.name SEPARATOR ", ") as 사원리스트,
AVG(E.salary) as 평균연봉,
MAX(E.salary) as 최고연봉,
MIN(E.salary) as 최저연봉,
COUNT() as 사원수
FROM emp as E INNER JOIN dept as D
ON E.deptId = D.id
GROUP BY D.id
) as S
WHERE S.평균연봉 >= 5000;
SELECT FROM emp;
SELECT FROM dept;
ONLY_FULL_GROUP_BY 모드 끄기, 이 부분은 이해하지 않으셔도 됩니다.SET SESSION sql_mode = (SELECT REPLACE(@@sql_mode, 'ONLY_FULL_GROUP_BY', ''));
SET sql_mode = (SELECT REPLACE(@@sql_mode, 'ONLY_FULL_GROUP_BY', ''));
DROP DATABASE IF EXISTS a6;
CREATE DATABASE a6;
USE a6;
CREATE TABLE dept (
id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
regDate DATETIME NOT NULL,
name CHAR(100) NOT NULL UNIQUE
);
INSERT INTO dept
SET regDate = NOW(),
name = '홍보';
INSERT INTO dept
SET regDate = NOW(),
name = '기획';
CREATE TABLE emp (
id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
regDate DATETIME NOT NULL,
name CHAR(100) NOT NULL,
deptId INT UNSIGNED NOT NULL,
salary INT UNSIGNED NOT NULL
);
INSERT INTO emp
SET regDate = NOW(),
name = '홍길동',
deptId = 1,
salary = 5000;
INSERT INTO emp
SET regDate = NOW(),
name = '홍길순',
deptId = 1,
salary = 6000;
INSERT INTO emp
SET regDate = NOW(),
name = '임꺽정',
deptId = 2,
salary = 4000;
SELECT deptId, MAX(salary) as 연봉
FROM emp
GROUP BY deptId;
SELECT *
FROM emp as E
INNER JOIN(
SELECT
E.deptId,
MAX(salary) as maxSalary
FROM emp as E
GROUP BY E.deptId
) as S
ON E.deptId = S.deptId
AND E.salary = S.maxSalary;
SELECT E.name as 사원명,
DATE_FORMAT(E.regDate,"%Y-%m-%d") as 입사일,
D.name,
CONCAT(FORMAT(E.salary,0),"만원") as 연봉
FROM emp as E
INNER JOIN(
SELECT
E.deptId,
MAX(salary) as maxSalary
FROM emp as E
GROUP BY E.deptId
) as S
ON E.deptId = S.deptId
AND E.salary = S.maxSalary
INNER JOIN dept as D
ON E.deptId = D.id;
SELECT FROM emp;
SELECT FROM dept;