[SQL] Practice 1
Categories: Database
๐ ๊ฐ์ธ์ ์ธ ๊ณต๊ฐ์ผ๋ก ๊ณต๋ถ๋ฅผ ๊ธฐ๋กํ๊ณ ๋ณต์ตํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ๋ธ๋ก๊ทธ์
๋๋ค.
์ ํํ์ง ์์ ์ ๋ณด๊ฐ ์์ ์ ์์ผ๋ ์ฐธ๊ณ ๋ฐ๋๋๋ค :๐ธ
[ํ๋ฆฐ ๋ด์ฉ์ ๋๊ธ๋ก ๋จ๊ฒจ์ฃผ์๋ฉด ๋ณต๋ฐ์ผ์ค๊ฑฐ์์]
SQL ์ฐ์ต๋ฌธ์
https://www.w3schools.com/sql/exercise.asp?filename=exercise_select1
๊ธฐ๋ณธ์ ์ธ ๋ฌธ์ ์ด๊ณ ์นธํฌ๊ธฐ๋ ๋ต์ ๋ง์ถฐ์ ธ ์์ด์
๋ฌธ์ ํ๋ฉด์ ์ ์ด๋ ๊ฒ ์ฐ๋๊ฑฐ๊ตฌ๋ ํ๊ธฐ ์ข๋คโฆ!!!
GROUP BY๋ ์์ผ๋์นด๋๋ ๋์ค์ ๋ฐฐ์ด๋คํด์
์ ๋ชจ๋ฅด๊ฒ ์ง๋ง GROUP BY๋ ํ์ด๋ณผ๋งํด์ ํ์ด๋ดโฆ
๊ทธ๋ฆฌ๊ณ ์ฐ์ต๋ฌธ์ ๋งจ๋ง์ง๋ง์ GROUP BY ์จ์ผ ๋ ์๋ ์์ด์ ์ฐธ๊ณ ํ๊ธฐ!
์ฐ์ต๋ฌธ์
schema ์์ฑ : ERD๋ณด๊ณ ํ ์ด๋ธ ๋ง๋ค๊ธฐ
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
CREATE TABLE `user` (
`id` int PRIMARY KEY AUTO_INCREMENT,
`name` varchar(255) not NULL,
`email` varchar(255) not NULL
);
CREATE TABLE `content` (
`id` INT AUTO_INCREMENT PRIMARY KEY ,
`title` varchar(255) ,
`body` varchar(255),
`created_at` timestamp not NULL DEFAULT CURRENT_TIMESTAMP, // DEFAULT CURRENT_TIMESTAMP : ์๋ฌด๊ฐ๋ ์์ผ๋ฉด ํ์ฌ์๊ฐ์ด ๋ค์ด์ด
`userId` int,
FOREIGN KEY (`userId`) REFERENCES `user` (`id`)
);
CREATE TABLE `category` (
`id` INT PRIMARY KEY AUTO_INCREMENT NOT NULL ,
`name` varchar(255) NOT NULL
);
CREATE TABLE `content_category` (
`id` INT PRIMARY KEY AUTO_INCREMENT NOT NULL ,
`contentId` INT NOT NULL,
`categoryId` INT NOT NULL,
FOREIGN KEY (`contentId`) REFERENCES `content` (`id`),
FOREIGN KEY (`categoryId`) REFERENCES `category` (`id`)
);
CREATE TABLE `role` (
`id` INT AUTO_INCREMENT PRIMARY KEY NOT NULL,
`name` varchar(255) NOT NULL
);
ALTER TABLE `user` ADD roleId int;
ALTER TABLE `user` ADD FOREIGN KEY (`roleId`) REFERENCES `role` (`id`);
- ์ฌ์ค ์กฐ์ธํ ์ด๋ธ ์์ฑ์ ๋ง์ด ํด๋ดค๋๋ฐ CREATE๊น์ง๋ ๋ง์ด ์ํด๋ด์ ํ๋ค๊ฐ ์ข ํท๊ฐ๋ ธ๋๋ฐ ํท๊ฐ๋ ธ๋ ๋ถ๋ถ์ FOREIGN KEY ์์ฑํ๋ ๊ฒ.
- ์ฐธ์กฐํค ์์ฑํ๊ณ ํด๋น ํค๊ฐ ์ด๋์ ์ค๋ ์ฐธ์กฐํค๋ผ๊ณ ๋ค๋ ๊ฑด๋ฐ ์ฐธ์กฐํค ์์ฑ์ ์๋ง๋ค๊ณ ๋ฐ๋ก FOREIGN KEY๋ถํฐ ๋ง๋ค์๋ค๊ฐ ํ ์คํธ ํต๊ณผ ์๋ผ์ ๋ค์ ์๊ฐํด์ ๋ง๋ค์๋ค..
PART 1.
๋ชจ๋ ํ ์ด๋ธ์ ์ ๋ณด๋ฅผ ๋ถ๋ฌ์ฌ ๋๋ SHOW TABLES;
์ด๋ค ํ ์ด๋ธ์ ๊ตฌ์กฐ๋ฅผ ๋ณผ ๋๋ DESC ํ ์ด๋ธ๋ช ;
DESC๋ DESCRIBE์ ์ฝ์ด์ด๋ค.
ํท๊ฐ๋ ค์ ์ฐพ์๋ดค๋๋ ๋ด๋ฆผ์ฐจ์ ๋ช ๋ น์ด๋ ๋๊ฐ์โฆ> DESC (Descending)
part 2
part 2๋ ๊ฐ๋จํด์ ๊ธ๋ฐฉ ํ.
Part 3.
๋ค๋ฅธ ๊ฒ์ ๊ธธ์ด๊ฐ ๊ธธ์ด์ ํ๋ค๊ณ ์คํ์๋ง ์๋๋ฉด ๊ธ๋ฐฉ ํต๊ณผํ๋๋ฐ 3-2-9๋ 10์ COUNT๋ฅผ ์๋ฐฐ์์ ์กฐ๊ธ ์๊ฐํ๊ณ ์ฐพ์๋ด์ผ ํ๋ค.
3-2-9
3-2-9. teawoongna๊ฐ ์์ฑํ ๊ธ์ ๊ฐ์ (์ปฌ๋ผ๋ช : ContentCount)๋ฅผ ์ถ๋ ฅํ๊ธฐ ์ํ SQL์ ์์ฑ
- ๋ด ์ฝ๋
1
2
3
4
SELECT COUNT(*) AS ContentCount FROM CONTENT
JOIN user
ON user.id=content.userId
WHERE user.name='teawoongna';
-
Reference
AS๋ก ์ฝ์ด ์ฒ๋ผ ์ํฐํฐ๋ช ์ ์ฌ์ฉํจ. ๋๋ถ๋ถ ์ค๋ฌด์ ๊ฐ๋ฉด ์ด๋ ๊ฒ ์์ฑ ๋ง์ด ํ๋ค๊ณ ํด์ ์ด๋ ๊ฒ ์ฐ๋ ๊ฒ์ ๊ถ์ฅ.
3-2-10
๊ฐ user(์ปฌ๋ผ๋ช : name)๊ฐ ์์ฑํ ๊ธ์ ๊ฐ์ (์ปฌ๋ผ๋ช : ContentCount)๋ฅผ ์ถ๋ ฅํ๊ธฐ ์ํ SQL์ ์์ฑ
- ๋ด์ฝ๋
1
2
3
4
SELECT user.name, COUNT(content.id) AS ContentCount
FROM content RIGHT JOIN user
ON user.id=content.userId
GROUP BY user.name;
-
Reference
count๋ ๋ณดํต GROUP BY ์ ๊ฐ์ด ์ฌ์ฉ๋๊ณ ์ฒ์์ 9๋ฒ์ฒ๋ผ count()์ฌ์ฉํด์
SELECT u.name, count()FROM content RIGHT JOIN ~์ฒ๋ผ ์์ฑํ๋๋ฐ
u.name๊ณผ content๊ฐ ๊ฐ์ด ์ฌ์ฉ๋ ์ ์์ด์ *๋ฅผ ์ฌ์ฉํ๋ฉด ์๋๋ค๊ณ ํ๋ค.
count ์ธ๋ ๋ณ์ ๋ฃ์ผ๋ฉด null์ผ ๊ฒฝ์ฐ 1์ ๋ฐํ.
ํน์ ์ปฌ๋ผ์ ๊ธฐ์ค์ผ๋ก ํด์ผ 0์ ๋ฐํํจ.c.* ํด๋ ์๋จ.!
์ ๋ต
Comment
๋๋ถ๋ถ์ ๋ฌธ์ ํ๊ณ ํ
์คํธํ๋ ์๊ฐ์ด๋ผ์ ๋ฌธ์ ๋ง์ด ๋ชปํ์์ผ๋ฉด ํํ์์ํ
๋ฐ
์ด์ ๋ ์ด๋ฐ ๋ฌธ์ ๋ค์ ๋จ๋ จ์ด ๋์ด์ ๊ทธ๋ฐ๊ฐ ํ๋งํด์ ๊ธฐ๋ถ์ด ์ข๋คโฆ.๐
Leave a comment