๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์›น๊ณต๋ทฐ

SQL ์˜ˆ์ œ ์ •๋ฆฌ 01. ๋ฐ์ดํ„ฐ ๊ฒ€์ƒ‰

by ์ด๋…ธํ‚ค_ 2021. 5. 2.

ํ•™์ƒ, ๊ณผ๋ชฉ, ์ˆ˜๊ฐ•์‹ ์ฒญ ํ…Œ์ด๋ธ” ์ƒ์„ฑํ•˜์—ฌ ํ…Œ์ŠคํŠธํ•จ. 

dbํ™˜๊ฒฝ : mariadb

db๊ด€๋ฆฌ ํˆด : mariadb ์‚ฌ์šฉ์‹œ์— ๊ฐ™์ด ์„ค์น˜๋œ heidiSql

 

1. ํ…Œ์ด๋ธ” ์ƒ์„ฑ ๊ตฌ๋ฌธ

(1) ๊ณผ๋ชฉ ํ…Œ์ด๋ธ” ์ƒ์„ฑ

CREATE TABLE `course` (
	`no` VARCHAR(20) NOT NULL COLLATE 'utf8_general_ci',
	`name` VARCHAR(20) NULL DEFAULT NULL COLLATE 'utf8_general_ci',
	`credit` INT(11) NULL DEFAULT NULL,
	`dept` VARCHAR(20) NULL DEFAULT NULL COLLATE 'utf8_general_ci',
	`pr_name` VARCHAR(20) NULL DEFAULT NULL COLLATE 'utf8_general_ci',
	PRIMARY KEY (`no`) USING BTREE
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB
;

(2) ํ•™์ƒ ํ…Œ์ด๋ธ” 

CREATE TABLE `student` (
	`no` INT(11) NOT NULL,
	`name` VARCHAR(20) NULL DEFAULT NULL COLLATE 'utf8_general_ci',
	`year` INT(11) NULL DEFAULT NULL,
	`dept` VARCHAR(20) NULL DEFAULT NULL COLLATE 'utf8_general_ci',
	PRIMARY KEY (`no`) USING BTREE
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB
;

(3) ์ˆ˜๊ฐ•์‹ ์ฒญ ํ…Œ์ด๋ธ”

CREATE TABLE `enrol` (
	`sno` INT(11) NULL DEFAULT NULL,
	`cno` VARCHAR(50) NULL DEFAULT NULL COLLATE 'utf8_general_ci',
	`grade` CHAR(50) NULL DEFAULT NULL COLLATE 'utf8_general_ci',
	`midterm` INT(11) NULL DEFAULT NULL,
	`final` INT(11) NULL DEFAULT NULL
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB
;

2. ํ…Œ์ด๋ธ”์— ๋ฐ์ดํ„ฐ ์‚ฝ์ž…

(1) ๊ณผ๋ชฉ ํ…Œ์ด๋ธ”์— ๋ฐ์ดํ„ฐ ์‚ฝ์ž…

INSERT INTO `course` (`no`, `name`, `credit`, `dept`, `pr_name`) VALUES ('C123', 'ํ”„๋กœ๊ทธ๋ž˜๋ฐ', 3, '์ปดํ“จํ„ฐ', '๊น€์„ฑ๊ตญ');
INSERT INTO `course` (`no`, `name`, `credit`, `dept`, `pr_name`) VALUES ('C312', '์ž๋ฃŒ๊ตฌ์กฐ', 3, '์ปดํ“จํ„ฐ', 'ํ™ฉ์ˆ˜๊ด€');
INSERT INTO `course` (`no`, `name`, `credit`, `dept`, `pr_name`) VALUES ('C324', 'ํŒŒ์ผ๊ตฌ์กฐ', 3, '์ปดํ“จํ„ฐ', '์ด๊ทœ์ฐฌ');
INSERT INTO `course` (`no`, `name`, `credit`, `dept`, `pr_name`) VALUES ('C413', '๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค', 3, '์ปดํ“จํ„ฐ', '์ด์ผ๋กœ');
INSERT INTO `course` (`no`, `name`, `credit`, `dept`, `pr_name`) VALUES ('E412', '๋ฐ˜๋„์ฒด', 3, '์ „์ž', 'ํ™๋ด‰์ง„');

(2) ํ•™์ƒ ํ…Œ์ด๋ธ”์— ๋ฐ์ดํ„ฐ ์‚ฝ์ž…

INSERT INTO `student` (`no`, `name`, `year`, `dept`) VALUES (100, '๋‚˜์ˆ˜์˜', 4, '์ปดํ“จํ„ฐ');
INSERT INTO `student` (`no`, `name`, `year`, `dept`) VALUES (200, '์ด์ฐฌ์ˆ˜', 3, '์ „๊ธฐ');
INSERT INTO `student` (`no`, `name`, `year`, `dept`) VALUES (300, '์ •๊ธฐํƒœ', 1, '์ปดํ“จํ„ฐ');
INSERT INTO `student` (`no`, `name`, `year`, `dept`) VALUES (400, '์†ก๋ณ‘๊ธธ', 4, '์ปดํ“จํ„ฐ');
INSERT INTO `student` (`no`, `name`, `year`, `dept`) VALUES (500, '๋ฐ•์ข…ํ™”', 2, '์‚ฐ๊ณต');

(3) ์ˆ˜๊ฐ•์‹ ์ฒญ ํ…Œ์ด๋ธ”์— ๋ฐ์ดํ„ฐ ์‚ฝ์ž…

INSERT INTO `enrol` (`sno`, `cno`, `grade`, `midterm`, `final`) VALUES (100, 'C413', 'A', 90, 95);
INSERT INTO `enrol` (`sno`, `cno`, `grade`, `midterm`, `final`) VALUES (100, 'E412', 'A', 95, 95);
INSERT INTO `enrol` (`sno`, `cno`, `grade`, `midterm`, `final`) VALUES (200, 'C123', 'B', 85, 80);
INSERT INTO `enrol` (`sno`, `cno`, `grade`, `midterm`, `final`) VALUES (300, 'C312', 'A', 90, 95);
INSERT INTO `enrol` (`sno`, `cno`, `grade`, `midterm`, `final`) VALUES (300, 'C324', 'C', 75, 75);
INSERT INTO `enrol` (`sno`, `cno`, `grade`, `midterm`, `final`) VALUES (300, 'C413', 'A', 95, 90);
INSERT INTO `enrol` (`sno`, `cno`, `grade`, `midterm`, `final`) VALUES (400, 'C312', 'A', 90, 95);
INSERT INTO `enrol` (`sno`, `cno`, `grade`, `midterm`, `final`) VALUES (400, 'C324', 'A', 95, 90);
INSERT INTO `enrol` (`sno`, `cno`, `grade`, `midterm`, `final`) VALUES (400, 'C413', 'B', 80, 85);
INSERT INTO `enrol` (`sno`, `cno`, `grade`, `midterm`, `final`) VALUES (400, 'E412', 'C', 65, 75);
INSERT INTO `enrol` (`sno`, `cno`, `grade`, `midterm`, `final`) VALUES (500, 'C312', 'B', 85, 80);

3. ์˜ˆ์ œ

(1) ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ์— ์ค‘๋ณต ๋ ˆ์ฝ”๋“œ ์ œ๊ฑฐ

- ํ•™์ƒ ํ…Œ์ด๋ธ”์— ์–ด๋–ค ํ•™๊ณผ ๋“ค์ด ์žˆ๋Š”์ง€ ๊ฒ€์ƒ‰

[์งˆ์˜๋ฌธ]

SELECT  DISTINCT student.dept FROM student

๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ ๋ ˆ์ฝ”๋“œ์— ์ค‘๋ณต์„ ์ œ๊ฑฐํ•˜๊ธฐ ์œ„ํ•ด distinct ๋ช…์„ธ

[๊ฒฐ๊ณผ]

 

(2) ํ…Œ์ด๋ธ”์˜ ์—ด ์ „๋ถ€๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋Š” ๊ฒฝ์šฐ

- ํ•™์ƒ ํ…Œ์ด๋ธ” ์ „๋ถ€๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋ผ

[์งˆ์˜๋ฌธ]

SELECT * FROM student;

* : asterisk

[๊ฒฐ๊ณผ]

(3) ์กฐ๊ฑด ๊ฒ€์ƒ‰

- ํ•™์ƒ ํ…Œ์ด๋ธ”์—์„œ ํ•™๊ณผ(dept)๊ฐ€ '์ปดํ“จํ„ฐ'์ด๊ณ  ํ•™๋…„์ด 4์ธ ํ•™์ƒ์˜ ํ•™๋ฒˆ๊ณผ ์ด๋ฆ„์„ ๊ฒ€์ƒ‰ํ•˜๋ผ

[์งˆ์˜๋ฌธ]

SELECT student.no, student.name FROM student WHERE student.dept='์ปดํ“จํ„ฐ' AND student.year=4

where ์ ˆ์— ๋‚˜์˜ค๋Š” ์กฐ๊ฑด์‹์—๋Š” ๋น„๊ต์—ฐ์‚ฐ์ž์™€ ๋ถˆ๋ฆฌ์–ธ ์—ฐ์‚ฐ์ž and, or, not์„ ์‚ฌ์šฉํ• ์ˆ˜ ์žˆ์œผ๋ฉฐ ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๊ด„ํ˜ธ ์‚ฌ์šฉ ๊ฐ€๋Šฅ. ์—ฐ์‚ฐ์ž ๋Œ€์‹  ํ‚ค์›Œ๋“œ๋กœ๋„ ํ‘œํ˜„ ๊ฐ€๋Šฅํ•˜๋‹ค. year>=3 and year <=4  ๋Œ€์‹  year between 3 and 4๋กœ ํ‘œํ˜„ ๊ฐ€๋Šฅ

[๊ฒฐ๊ณผ]

 

(4) ์ˆœ์„œ๋ฅผ ๋ช…์„ธํ•˜๋Š” ๊ฒ€์ƒ‰

- ์ˆ˜๊ฐ•์‹ ์ฒญ ํ…Œ์ด๋ธ”์—์„œ ์ค‘๊ฐ„์„ฑ์ ์ด 90์  ์ด์ƒ์ธ ํ•™์ƒ์˜ ํ•™๋ฒˆ๊ณผ ๊ณผ๋ชฉ ๋ฒˆํ˜ธ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋˜ ํ•™๋ฒˆ์— ๋Œ€ํ•ด์„œ๋Š” ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ, ๊ทธ๋ฆฌ๊ณ  ๊ฐ™์€ ํ•™๋ฒˆ์— ๋Œ€ํ•ด์„œ๋Š” ๊ณผ๋ชฉ ๋ฒˆํ˜ธ์˜ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ๊ฒ€์ƒ‰ํ•˜๋ผ

[์งˆ์˜๋ฌธ]

SELECT enrol.sno, enrol.cno 
FROM enrol
WHERE enrol.midterm>=90
ORDER BY enrol.sno DESC, enrol.cno asc

์˜ค๋ฆ„์ฐจ์ˆœ asc, ๋‚ด๋ฆผ์ฐจ์ˆœ desc

์ฒ˜์Œ๋‚˜์˜จ sno๋Š” 1์ฐจ์ •๋ ฌ, ๋‘๋ฒˆ์งธ ๋‚˜์˜จ cno๋Š” 2์ฐจ์ •๋ ฌ

2์ฐจ ์ •๋ ฌ์€ 1์ฐจ ์ •๋ ฌ ๋ฒ”์œ„ ๋‚ด์—์„œ ์ •๋ ฌ ์‹œํ‚ค๋Š” ๊ฒƒ์„ ๋งํ•จ

[๊ฒฐ๊ณผ]

(5) ์‚ฐ์ˆ ์‹, ๋ฌธ์ž์ŠคํŠธ๋ง, ์ƒˆ๋กœ์šด ์—ด ์ด๋ฆ„์ด ๋ช…์„ธ๋œ ๊ฒ€์ƒ‰

- ์ˆ˜๊ฐ•์‹ ์ฒญ ํ…Œ์ด๋ธ”์—์„œ ๊ณผ๋ชฉ๋ฒˆํ˜ธ๊ฐ€ 'C312'์ธ ์ค‘๊ฐ„ ์„ฑ์ ์— 3์ ์„ ๋”ํ•œ ์ ์ˆ˜๋ฅผ 'ํ•™๋ฒˆ', '์ค‘๊ฐ„์„ฑ์ ='์ด๋ž€ ํ…์ŠคํŠธ ๋‚ด์šฉ์„ '์‹œํ—˜', ๊ทธ๋ฆฌ๊ณ  '์ ์ˆ˜'๋ผ๋Š” ์—ด ์ด๋ฆ„์œผ๋กœ ๊ฒ€์ƒ‰ํ•˜๋ผ

[์งˆ์˜๋ฌธ]

SELECT enrol.sno AS 'ํ•™๋ฒˆ', '์ค‘๊ฐ„์„ฑ์ =' AS '์‹œํ—˜', enrol.midterm AS '์ ์ˆ˜' 
FROM enrol
WHERE enrol.cno = 'C312'

AS~ : ๋ณ„๋ช…์„ ์ง€์ •ํ•œ ๊ฒƒ. ์ƒ๋žต๊ฐ€๋Šฅ

[๊ฒฐ๊ณผ]

(6) ๋ณต์ˆ˜ ํ…Œ์ด๋ธ”๋กœ๋ถ€ํ„ฐ์˜ ๊ฒ€์ƒ‰

-๊ณผ๋ชฉ ๋ฒˆํ˜ธ 'C413'์— ๋“ฑ๋กํ•œ ํ•™์ƒ์˜ ์ด๋ฆ„, ํ•™๊ณผ, ์„ฑ์ ์„ ๊ฒ€์ƒ‰ํ•˜๋ผ

[์งˆ์˜๋ฌธ]

SELECT s.name, s.dept, e.grade 
FROM student s, enrol e
WHERE s.no = e.sno AND e.cno='C413'

S, E๋Š” ํˆฌํ”Œ ๋ณ€์ˆ˜(range variable)์ž„. 

์กฐ์ธ ์งˆ์˜๋ฌธ์—์„œ ์–ด๋–ค ์กฐ๊ฑด์œผ๋กœ ์กฐ์ธ์„ ํ•˜๋Š๋ƒ๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์กฐ์ธ ์กฐ๊ฑด ๋˜๋Š” ์กฐ์ธ ํ”„๋ ˆ๋””ํŒƒ(Join predicate)์ด๋ผํ•œ๋‹ค. 

๋‹ค์Œ๊ณผ ๊ฐ™์ด๋„ ์œ„ ์งˆ์˜๋ฌธ์„ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

SELECT student.name, student.dept, enrol.grade 
FROM student join enrol on(student.`no` = enrol.sno)
WHERE enrol.cno='C413'

SELECT student.name, student.dept, enrol.grade
FROM student join enrol USING(sno) //student ํ…Œ์ด๋ธ”์˜ NO๊ฐ€ sno๋กœ ๋ณ€๊ฒฝ๋˜์–ด์•ผ๋จ. ์ปฌ๋Ÿผ๋ช…์ด ๋‹ค๋ฆ„.
WHERE enrol.cno='C413'

SELECT student.name, student.dept, enrol.grade
FROM student NATURAL JOIN enrol
WHERE enrol.cno='C413'

[๊ฒฐ๊ณผ]

(7) ์ž๊ธฐ ์ž์‹ ์˜ ํ…Œ์ด๋ธ”์— ์กฐ์ธํ•˜๋Š” ๊ฒ€์ƒ‰

- ๊ฐ™์€ ํ•™๊ณผ ํ•™์ƒ๋“ค์˜ ํ•™๋ฒˆ์„ ์Œ์œผ๋กœ ๊ฒ€์ƒ‰ํ•˜๋ผ. ๋‹จ, ์ฒซ๋ฒˆ์งธ ํ•™๋ฒˆ์€ ๋‘๋ฒˆ์งธ ํ•™๋ฒˆ๋ณด๋‹ค ์ž‘๊ฒŒ ํ•˜๋ผ

[์งˆ์˜๋ฌธ]

SELECT s1.no AS S1ํ•™๋ฒˆ, s2.no AS s2ํ•™๋ฒˆ
FROM student s1, student s2
WHERE s1.dept = s2.dept 
AND	s1.`no` < s2.`no`

[๊ฒฐ๊ณผ]

(8) ์ง‘๊ณ„ ํ•จ์ˆ˜(Aggregate function or ์—ดํ•จ์ˆ˜(column function))๋ฅผ ์ด์šฉํ•œ ๊ฒ€์ƒ‰

- ํ•™์ƒ ํ…Œ์ด๋ธ”์˜ ํ•™์ƒ ์ˆ˜๊ฐ€ ์–ผ๋งˆ์ธ๊ฐ€๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋ผ

[์งˆ์˜๋ฌธ]

SELECT COUNT(*) as ํ•™์ƒ์ˆ˜
FROM student;

count, sum, avg, max, min์ด ์žˆ์Œ

[๊ฒฐ๊ณผ]

- ํ•™๋ฒˆ์ด 300์ธ ํ•™์ƒ์ด ๋“ฑ๋กํ•œ ๊ณผ๋ชฉ์€ ๋ช‡๊ฐœ์ธ๊ฐ€?

[์งˆ์˜๋ฌธ]

SELECT COUNT(DISTINCT enrol.cno)
FROM enrol
WHERE enrol.sno=300

[๊ฒฐ๊ณผ]

- ๊ณผ๋ชฉ 'C413'์— ๋Œ€ํ•œ ์ค‘๊ฐ„ ์„ฑ์ ์˜ ํ‰๊ท ์€ ์–ผ๋งˆ์ธ๊ฐ€?

[์งˆ์˜๋ฌธ]

SELECT AVG(enrol.midterm) AS ์ค‘๊ฐ„ํ‰๊ท 
FROM enrol
WHERE enrol.cno='C413'

avg ํ•จ์ˆ˜ ๊ฒฐ๊ณผ ๊ฐ’์˜ ํƒ€์ž…์€ ํ•ด๋‹น ์—ด์˜ ๋ฐ์ดํƒ€ ํƒ€์ž…๊ณผ ๊ฐ™์Œ

[๊ฒฐ๊ณผ]

(9) GROUP BY๋ฅผ ์ด์šฉํ•œ ๊ฒ€์ƒ‰

- ๊ณผ๋ชฉ๋ณ„ ๊ธฐ๋ง ์„ฑ์ ์˜ ํ‰๊ท ์„ ๊ฒ€์ƒ‰ํ•˜๋ผ

[์งˆ์˜๋ฌธ]

SELECT cno, AVG(enrol.final) AS ๊ธฐ๋งํ‰๊ท 
FROM enrol 
GROUP BY enrol.cno

group by๋Š” ๋…ผ๋ฆฌ์ ์œผ๋กœ from ์ ˆ์— ์žˆ๋Š” ํ…Œ์ด๋ธ”์„ group by ์ ˆ์— ๋ช…์„ธ๋œ ์—ด์˜ ๊ฐ’์— ๋”ฐ๋ผ ๊ทธ๋ฃน์œผ๋กœ ๋ถ„ํ• ํ•œ๋‹ค.

[๊ฒฐ๊ณผ]

 

(10) HAVING์„ ์‚ฌ์šฉํ•œ ๊ฒ€์ƒ‰

- 3๋ช… ์ด์ƒ ๋“ฑ๋กํ•œ ๊ณผ๋ชฉ์˜ ๊ธฐ๋ง ํ‰๊ท  ์„ฑ์ ์„ ๊ฒ€์ƒ‰ํ•˜๋ผ

[์งˆ์˜๋ฌธ]

SELECT cno, AVG(enrol.final) AS ๊ธฐ๋งํ‰๊ท 
FROM enrol
GROUP BY enrol.cno
HAVING COUNT(*) >= 3

HAVING์€ ๊ฐ ๊ทธ๋ฃน์˜ ๊ตฌ์„ฑ ์š”๊ฑด์„ ๋ช…์„ธํ•จ. ๋งŒ์ผ group by๊ฐ€ ์ƒ๋žต๋˜๋ฉด ํ…Œ์ด๋ธ” ์ „์ฒด๋ฅผ ํ•˜๋‚˜์˜ ๊ทธ๋ฃน์œผ๋กœ ์ทจ๊ธ‰ํ•จ.

[๊ฒฐ๊ณผ]

(11) ๋ถ€์† ์งˆ์˜๋ฌธ(Subquery)์„ ์‚ฌ์šฉํ•œ ๊ฒ€์ƒ‰

- ๊ณผ๋ชฉ ๋ฒˆํ˜ธ 'C413'์— ๋“ฑ๋กํ•œ ํ•™์ƒ์ด๋ฆ„์„ ๊ฒ€์ƒ‰ํ•˜๋ผ

SELECT NAME 
FROM student
WHERE no IN(
	SELECT sno 
	FROM enrol 
	WHERE cno = 'C413'
	)

subquery๋Š” ๋‹ค๋ฅธ ์งˆ์˜๋ฌธ์— ์ค‘์ฒฉ(nested)๋˜์–ด ์‚ฌ์šฉ๋˜๋Š” ๊ฒ€์ƒ‰๋ฌธ. 

select-from-where-group by-having์˜ ํ˜•ํƒœ๋ฅผ ์ทจํ•œ๋‹ค.

๋ถ€์† ์งˆ์˜๋ฌธ์„ ํฌํ•จํ•˜๊ณ  ์žˆ๋Š” ์งˆ์˜๋ฌธ์„ ์ค‘์ฒฉ ์งˆ์˜๋ฌธ(nested query)๋ผ๊ณ  ํ•จ. 

์œ„์˜ ์งˆ์˜๋ฌธ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Œ

SELECT NAME 
FROM student
WHERE no IN(100,200,300)

SELECT s.NAME 
FROM student s, enrol e
WHERE s.`no` = e.sno 
AND e.cno='C413'

- ๊ณผ๋ชฉ๋ฒˆํ˜ธ 'C413'์— ๋“ฑ๋กํ•˜์ง€ ์•Š์€ ํ•™์ƒ์˜ ์ด๋ฆ„์„ ๊ฒ€์ƒ‰ํ•˜๋ผ

[์งˆ์˜๋ฌธ]

SELECT NAME 
FROM student
WHERE no NOT IN(
	SELECT sno 
	FROM enrol 
	WHERE cno = 'C413'
	)

[๊ฒฐ๊ณผ]

 

- ํ•™์ƒ '์ •๊ธฐํƒœ'์™€ ๊ฐ™์€ ํ•™๊ณผ์— ์†ํ•˜๋Š” ํ•™์ƒ์˜ ์ด๋ฆ„๊ณผ ํ•™๊ณผ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋ผ

[์งˆ์˜๋ฌธ]

SELECT NAME, dept 
FROM student
WHERE dept IN(
	SELECT dept 
	FROM student 
	WHERE name= '์ •๊ธฐํƒœ'
	)

[๊ฒฐ๊ณผ]

 

- ์ˆ˜๊ฐ•์‹ ์ฒญ ํ…Œ์ด๋ธ”์—์„œ ํ•™๋ฒˆ์ด 500์ธ ํ•™์ƒ์˜ ๋ชจ๋“  ๊ธฐ๋ง ์„ฑ์ ๋ณด๋‹ค ์ข‹์€ ํ•™๊ธฐ๋ง ์„ฑ์ ์„ ๋ฐ›์€ ํ•™์ƒ์˜ ํ•™๋ฒˆ๊ณผ ๊ณผ๋ชฉ๋ฒˆํ˜ธ๋ฅผ ๊ฒ€์ƒ‰

[์งˆ์˜๋ฌธ]

SELECT sno, cno
FROM enrol
WHERE final > ALL (
	SELECT final 
	FROM enrol 
	WHERE sno=500
	)

์ด ๋ถ€์† ์งˆ์˜๋ฌธ์€ ๋˜ํ•œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ALL, ANY, SOME๊ณผ ๊ฐ™์€ ํ‚ค์›Œ๋“œ์™€ ํ•จ๊ป˜ ์กฐ๊ฑด์‹์—์„œ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ

[๊ฒฐ๊ณผ]

(12) LIKE๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒ€์ƒ‰

- ๊ณผ๋ชฉ๋ฒˆํ˜ธ๊ฐ€ C๋กœ ์‹œ์ž‘ํ•˜๋Š” ๊ณผ๋ชฉ์˜ ๊ณผ๋ชฉ ๋ฒˆํ˜ธ์™€ ๊ณผ๋ชฉ์ด๋ฆ„์„ ๊ฒ€์ƒ‰ํ•˜๋ผ

[์งˆ์˜๋ฌธ]

SELECT NO, name
FROM course
WHERE NO LIKE 'C%'

% : ์„œ๋ธŒ ์ŠคํŠธ๋ง ํŒจํ„ด์„ ๋ช…์„ธ

์œ„์˜ C%๋Š” C๋กœ ์‹œ์ž‘ํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ์–ด๋–ค ๋ฌธ์ž ์ŠคํŠธ๋ง์ด๋“  ์ƒ๊ด€์—†๋‹ค๋Š” ๋œป

LIKE 'S_ _ _ ' : S๋กœ ์‹œ์ž‘๋˜๋Š” ์„ธ๋ฌธ์ž ์ŠคํŠธ๋ง

LIKE '%S_ _ ' : ์ŠคํŠธ๋ง ๋์—์„œ ์„ธ๋ฒˆ์งธ๊ฐ€ 'S'์ธ ์ŠคํŠธ๋ง

LIKE '%S%' : S๊ฐ€ ํฌํ•จ๋œ ์ŠคํŠธ๋ง

[๊ฒฐ๊ณผ]

(13) NULL์„ ์‚ฌ์šฉํ•œ ๊ฒ€์ƒ‰

- ํ•™์ƒ ํ…Œ์ด๋ธ”์— ํ•™๋ฒˆ์ด 600, ์ด๋ฆ„ '๊น€๊ธธ๋™', ํ•™๊ณผ๊ฐ€ NULL์ธ ํˆฌํ”Œ์ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •.

-> insert๋ฌธ 

INSERT INTO `student` (`no`, `name`, `year`, `dept`) VALUES (600, '๊น€๊ธธ๋™', 2, NULL);

- ํ•™๊ณผ๊ฐ€ NULL์ธ ํ•™์ƒ์˜ ํ•™๋ฒˆ๊ณผ ์ด๋ฆ„์„ ๊ฒ€์ƒ‰

[์งˆ์˜๋ฌธ]

SELECT NO, name
FROM student
WHERE dept IS null

์—ด์ด๋ฆ„ IS [NOT] NULL์˜ ํ˜•์‹๋งŒ ํ—ˆ์šฉ๋จ.

์—ด์ด๋ฆ„ = NULL์˜ ํ˜•์‹์€ ๋ถˆ๋ฒ•์ ์ธ ๊ฒƒ์œผ๋กœ ํ—ˆ์šฉ๋˜์ง€ ์•Š๋Š”๋‹ค.

null๊ณผ์˜ ์–ด๋– ํ•œ ๋น„๊ต ์—ฐ์‚ฐ์ž๋“  ๋ชจ๋‘ ๊ฑฐ์ง“์ž„

 

NULL : ๋ˆ„๋ฝ์ •๋ณด๋กœ์„œ (missing information) ๊ฐ’์€ ์žˆ์ง€๋งŒ ๋ชจ๋ฅด๋Š” ๊ฐ’(Unknown value), ํ•ด๋‹น๋˜์ง€ ์•Š๋Š” ๊ฐ’(unapplicable value) ๋˜๋Š” ์˜๋„์ ์œผ๋กœ ์œ ๋ณดํ•œ๊ฐ’(withheld value)์„ ๋‚˜ํƒ€๋ƒ„. 

Null์€ ์ฐธ๋„ ์•„๋‹ˆ๊ณ  ๊ฑฐ์ง“๋„ ์•„๋‹Œ ๋ฏธ์ •(unknwon)์ด ๋œ๋‹ค.

[๊ฒฐ๊ณผ]

(14) EXIST๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒ€์ƒ‰

- ๊ณผ๋ชฉ 'C413'์— ๋“ฑ๋กํ•œ ํ•™์ƒ์˜ ์ด๋ฆ„์„ ๊ฒ€์ƒ‰ํ•˜๋ผ

[์งˆ์˜๋ฌธ]

SELECT name
FROM student
WHERE EXISTS
	(SELECT *
	FROM enrol
	WHERE enrol.sno = student.`no`
	AND enrol.cno = 'C413'
	)

EXIST : ์กด์žฌ ์ •๋Ÿ‰์ž(existential quantifier). exists ๋‹ค์Œ์— ๋‚˜์˜ค๋Š” ๊ฒ€์ƒ‰๋ฌธ์˜ ์‹คํ–‰ ๊ฒฐ๊ณผ๋กœ ๊ฒ€์ƒ‰๋œ ํˆฌํ”Œ์ด ์กด์žฌํ•˜๋Š”๊ฐ€๋ฅผ ๊ฒ€์‚ฌํ•จ. ์ด ๋ถ€์†์งˆ์˜๋ฌธ์€ exists(select*from)์„ ์‹คํ–‰ํ•œ๋’ค ๊ฒฐ๊ณผ๊ฐ€ ๊ณต์ง‘ํ•ฉ์ด ์•„๋‹ˆ๋ฉด ์ฐธ์ด๋˜๊ณ , ๊ณต์ง‘ํ•˜์ด๋ฉด ๊ฑฐ์ง“์ด ๋œ๋‹ค.

[๊ฒฐ๊ณผ]

-๊ณผ๋ชฉ 'C413'์— ๋“ฑ๋กํ•˜์ง€ ์•Š์€ ํ•™์ƒ์˜ ์ด๋ฆ„์„ ๊ฒ€์ƒ‰

[์งˆ์˜๋ฌธ]

SELECT name
FROM student
WHERE NOT EXISTS
	(SELECT *
	FROM enrol
	WHERE enrol.sno = student.`no`
	AND enrol.cno = 'C413'
	)

[๊ฒฐ๊ณผ]

(15) UNION์ด ๊ด€๋ จ๋œ ๊ฒ€์ƒ‰

- 3ํ•™๋…„์ด๊ฑฐ๋‚˜ ๋˜๋Š” ๊ณผ๋ชฉ 'C324'์— ๋“ฑ๋กํ•œ ํ•™์ƒ์˜ ํ•™๋ฒˆ์„ ๊ฒ€์ƒ‰ํ•˜๋ผ

[์งˆ์˜๋ฌธ]

SELECT no
FROM student
WHERE year=3 
UNION
	SELECT sno
	FROM enrol
	WHERE cno='C324'

UNION : ์ผ๋ฐ˜ ์ง‘ํ•ฉ๋ก ์˜ ํ•ฉ์ง‘ํ•ฉ๊ณผ ๊ฐ™๋‹ค. ๊ฒฐ๊ณผ ํ…Œ์ด๋ธ”์—์„œ ์ค‘๋ณต๋˜๋Š” ํˆฌํ”Œ์€ ์ œ๊ฑฐ๋œ๋‹ค. intersection(๊ต์ง‘ํ•ฉ), except(์ฐจ์ง‘ํ•ฉ) ์—ฐ์‚ฐ์ด์žˆ๋‹ค. 

 

 

๋Œ“๊ธ€