์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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 |
- aws
- DDL
- select
- error
- hikaricp
- docker
- Operating System
- database
- Git
- GPG
- springboot
- ํ์
- MySQL
- ์๊ณ ๋ฆฌ์ฆ
- ConnectionPool
- JDBC
- Spring
- DataSource
- oauth2
- ์๊ณ ๋ฆฌ์ฆ #๋ฐฑ์ค #1717
- ๋ฐฑ์ค
- Transaction
- dml
- interrupt
- OS
- MariaDB
- constraints
- greedy
- DBCP
- where
- Today
- Total
did_story
[MySQL / DML] SELECT, ๋ฐ์ดํฐ ์กฐํ ๋ฐฉ๋ฒ ๋ณธ๋ฌธ
ํด๋น ๊ธ์ ์ ์๊ฐ ๋ ์ด์ ๋งค๋ฒ ์ฐพ์๋ณด๊ธฐ ํ๋ค์ด์(?) ์ ๋ฆฌํ๋ ๊ธ์์ ๋ฐํ๋๋ค.ใ
ใ
SELECT / FROM
SQL์์ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ ๋๋ ๊ธฐ๋ณธ์ ์ผ๋ก SELECT A FROM B๋ฅผ ์ฌ์ฉํฉ๋๋ค.
SQL ๊ตฌ๋ฌธ์ ์์ด ๋ฌธ๋ฒ๊ณผ ๋งค์ฐ ๋น์ทํ๋ฐ, SELECT(์ ํํ๋ค) A๋ฅผ, FROM B(B๋ก๋ถํฐ)๋ผ๊ณ ํด์ํ๋ฉด ์ด๋ ์ ๋ ๋ง์ด ๋ฉ๋๋ค.
SELECT column1, column2, ...
FROM table_name;
ex)
SELECT AuthorID, Title, Content, Likes
FROM Posts;
โ ํด์ : Posts(table)๋ก๋ถํฐ AuthorID, Title, Content, CreatdAt, Likes๋ฅผ ๊ฐ์ ธ์จ๋ค!
SELECT * FROM Posts;
โ : Posts๋ก๋ถํฐ ๋ชจ๋ ์ด(Column)์ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์จ๋ค!
* (asterisk) : ์ ํ๋ tables์ ๋ชจ๋ ๊ฐ๋ค์ ๊ฐ์ ธ์ค๋ ค ํ ๋ ์ฌ์ฉํ๋ค.
์ด๊ฒ์ผ๋ก ๋ชจ๋ ์ ๋ณด๋ฅผ ๋ฐ์์ค๋ฉด ์ข๊ฒ ๋ค๊ณ ์๊ฐํ์ง๋ง ๊ทธ๋ ์ง ์์ผ๋ฉฐ… ๋ค๋ฅธ ํค์๋(WHERE, DISTINCT, AS)๋ฅผ ๋ถ์ฌ์ ์กฐ๊ฑด์ ๋ง๋ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์ ๋ณด๋๋ก ํ์.
1. DISTINCT
DISTINCT๋ ์ ํํ ์ด(Column)์์ ์ค๋ณต๋ ๊ฐ์ ์ ๊ฑฐํ๊ณ ๊ณ ์ ํ ๊ฐ๋ค๋ง ๋ฐํํ๋ ์ฟผ๋ฆฌ์ ๋๋ค.
SELECT DISTINCT column1
FROM table_name;
ex)
SELECT DISTINCT AuthorID
FROM Posts;
โ: Posts ํ ์ด๋ธ์์ ์ค๋ณต๋์ง ์์ ๊ณ ์ ํ AuthorID ๊ฐ๋ง ๊ฐ์ ธ์ต๋๋ค.
DISTINCT์ ๋์ ๋ฐฉ์:
- DISTINCT๋ ์ง์ ํ ์ด์์ ์ค๋ณต๋ ๊ฐ์ ์ ๊ฑฐํ๊ณ , ์ค๋ณต๋์ง ์๋ ๊ฐ๋ง ๋ฐํํฉ๋๋ค.
- ์ด๋, ์ค๋ณต ์ฌ๋ถ๋ ์ง์ ํ ์ด์ ํ์ ๋๋ฉฐ, ๋ค๋ฅธ ์ด์ ๊ณ ๋ ค๋์ง ์์ต๋๋ค.
→ ์๋ก, Posts ํ ์ด๋ธ์ ํ(Row)์ด 10๊ฐ ์์ง๋ง, AuthorID๊ฐ 2๊ฐ์ ๊ณ ์ ํ ๊ฐ๋ง ์๋ค๋ฉด, ํด๋น ์ฟผ๋ฆฌ๋ 2๊ฐ์ AuthorID ๊ฐ๋ง ๋ฐํํฉ๋๋ค.
WHERE
WHERE ์ ๊ธฐ๋ก๋ค์ ํํฐ๋งํ๋ ๋ฐ ์ฌ์ฉํฉ๋๋ค. ์ด ์ ์ ์ง์ ๋ ์กฐ๊ฑด์ ์ถฉ์กฑํ๋ ๋ ์ฝ๋๋ง ์ถ์ถํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
SELECT column1, column2, ...
FROM table_name
WHERE condition;
ex)
SELECT *
FROM Posts
WHERE Likes > 1;
โ: Posts ํ ์ด๋ธ์์ Likes๊ฐ 1๋ณด๋ค ๋ง์ ํ(row)์ ์ ๋ณด๋ง ๊ฐ์ ธ์ต๋๋ค.
- WHERE๋ ํ ์ด๋ธ์ ๋ฐ์ดํฐ๋ฅผ ํํฐ๋งํ์ฌ ์กฐ๊ฑด์ ์ถฉ์กฑํ๋ ๋ ์ฝ๋๋ง ์ ํํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
- WHERE ์ ์ SELECT, UPDATE, DELETE ์ฟผ๋ฆฌ์ ํจ๊ป ์ฌ์ฉํ ์ ์์ต๋๋ค.
- ์กฐ๊ฑด์ด ์ฐธ(TRUE)์ธ ํ(Row)๋ง ๊ฒฐ๊ณผ์ ํฌํจ๋ฉ๋๋ค.
1. WHERE์ ์ฐ์ฐ์
์ฐ์ฐ์ | ์ค๋ช | ์์ | ์ค๋ช |
= | ๊ฐ์ด ๊ฐ์์ง ๋น๊ต | WHERE Likes = 10 | Likes ๊ฐ์ด 10์ธ ํ(Row)๋ง ์ ํํฉ๋๋ค. |
<> ๋๋ != | ๊ฐ์ด ๋ค๋ฅธ์ง ๋น๊ต | WHERE Likes != 5 | Likes ๊ฐ์ด 5๊ฐ ์๋ ํ(Row)๋ง ์ ํํฉ๋๋ค |
>, >= | ๊ฐ์ด ํฐ์ง, ํฌ๊ฑฐ๋ ๊ฐ์์ง ๋น๊ต | WHERE Likes > 50 | Likes ๊ฐ์ด 50๋ณด๋ค ํฐ ํ(Row)๋ง ์ ํํฉ๋๋ค. |
<, <= | ๊ฐ์ด ์์์ง, ์๊ฑฐ๋ ๊ฐ์์ง ๋น๊ต | WHERE Likes <= 50 | Likes ๊ฐ์ด 50 ์ดํ(50 ํฌํจ)์ธ ํ(Row)๋ง ์ ํํฉ๋๋ค |
BETWEEN | ๊ฐ์ด ๋ฒ์ ๋ด์ ์๋์ง ํ์ธ | WHERE Likes BETWEEN 10 AND 100 | Likes ๊ฐ์ด 10 ์ด์ 100 ์ดํ์ธ ํ(Row)๋ง ์ ํํฉ๋๋ค. |
IN | ๊ฐ์ด ๋ชฉ๋ก์ค์ ํ๋์ ์ผ์นํ๋ ์ง ํ์ธ | WHERE PostID IN (11, 12, 13) | PostID ๊ฐ์ด 11, 12, 13 ์ค ํ๋์ธ ํ(Row)๋ง ์ ํํฉ๋๋ค. |
LIKE | ๋ฌธ์์ด ํํด ๋งค์นญ | WHERE Title LIKE 'Post%’ | Title ๊ฐ์ด 'Post'๋ก ์์ํ๋ ๋ฌธ์์ด์ธ ํ(Row)๋ง ์ ํํฉ๋๋ค. |
AND | ์ฌ๋ฌ ์กฐ๊ฑด์ ๋ชจ๋ ์ถฉ์กฑ ํ๋์ง ํ์ธ | WHERE Likes > 10 AND Published = 1 | Likes ๊ฐ์ด 10๋ณด๋ค ํฌ๊ณ , Published ๊ฐ์ด 1(= true)์ธ ํ(Row)๋ง ์ ํํฉ๋๋ค. |
OR | ์ฌ๋ฌ ์กฐ๊ฑด์ค ํ๋๋ฅผ ์ถฉ์กฑ ํ๋์ง ํ์ธ | WHERE Likes > 10 OR Published = 1 | Likes ๊ฐ์ด 10๋ณด๋ค ํฌ๊ฑฐ๋, Published ๊ฐ์ด 1(= true)์ธ ํ(Row)์ ์ ํํฉ๋๋ค. |
IS NULL | ๊ฐ์ด NULL ์ธ์ง ํ์ธ | WHERE UpdatedAt IS NULL | UpdatedAt ๊ฐ์ด NULL(๋น์ด ์์)์ธ ํ(Row)๋ง ์ ํํฉ๋๋ค. NULL์ ๊ฐ์ด ์์์ ๋ํ๋ด๋ฉฐ, ์ผ๋ฐ์ ์ธ ๋น๊ต(=)๋ก ์ฒ๋ฆฌํ ์ ์์ต๋๋ค. |
NOT | ์กฐ๊ฑด์ด ๊ฑฐ์ง์ธ์ง ํ์ธ | WHERE UpdatedAt IS NOT NULL | UpdatedAt ๊ฐ์ด NULL์ด ์๋(๊ฐ์ด ์์) ํ(Row)๋ง ์ ํํฉ๋๋ค. |
2. Text ์ฐ์ฐ์
WHERE์ ์ฐ์ฐ์๋ฅผ ๋ณด๋ฉด LIKE ์์ ์์ ‘%'๊ฐ ๋ณด์ผ ๊ฒ์ด๋ค. ์ ๊ฒ์ ๋ํด์ ์ค๋ช ์ ํด๋ณด๋ ค๊ณ ํฉ๋๋ค.
- ‘%' : ํด๋น ๋ถ๋ถ ๋ฌธ์์ด ์ ์ฒด๋ฅผ ๊ฒ์ํ๋ ๋ฐฉ์์ผ๋ก ์ํํฉ๋๋ค.
- ‘_’ : ํ๋์ ๋ฌธ์๋ฅผ ๋์ฒดํ๋ ๋ฐฉ์์ผ๋ก ๋ฌธ์์ด ๊ฒ์์ ์ํํฉ๋๋ค.
## ์์ ! ##
# 1. Posts table์์ Title์ด 'Post'๋ก ์์ํ๋ ๋ชจ๋ ๊ฒ์๊ธ ๊ฒ์
SELECT * FROM Posts
WHERE Title LIKE 'Post%';
# 2. 'Post'๊ฐ ๋ค์ด๊ฐ๋ ๋ชจ๋ ๊ฒ์๊ธ ๊ฒ์
SELECT * FROM Posts
WHERE Title LIKE '%Post%';
# 3. 'Post'๋ฅผ ํฌํจํ ์ ํํ 6๊ธ์๋ก ๋ ์ ๋ชฉ์ ๊ฒ์
SELECT * FROM Posts
WHERE Title LIKE '_Post_';
# 4. ๋ ๋ฒ์งธ ๋ฌธ์๊ฐ 'o'์ธ ์ ๋ชฉ ๊ฒ์
SELECT * FROM Posts
WHERE Title LIKE '_o%';
# 5. escape
-- % ๋๋ _ ์์ ๋ฐฑ์ฌ๋์ "\"์ ํจ๊ป ์ฌ์ฉํ๋ค.
SELECT * FROM Posts
WHERE Title LIKE '_o\%%\_'; # ex) 'Do% ~~~ _'
# 6. ID๊ฐ '1'๋ก ์์ํ๋ ๋ชจ๋ ๋ฐ์ดํฐ ๊ฒ์
-- ๋ง์ฝ ์ซ์๊ฐ ๋ฌธ์์ด๋ก ์ ์ฅ๋์ด ์๋ค๋ฉด, %์ _๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ํ์ง๋ง ์ด ์ ์ด ์์๋ค..!
SELECT * FROM Stores
WHERE CAST(Address AS CHAR) LIKE '%5_';
ORDER BY
๊ฒฐ๊ณผ ์งํฉ์ ์ค๋ฆ์ฐจ์ ๋๋ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. (๊ธฐ๋ณธ์ ์ค๋ฆ์ฐจ์!)
- ASC : ์ค๋ฆ์ฐจ์(๊ธฐ๋ณธ๊ฐ, ์์ ๊ฐ → ํฐ ๊ฐ)
- DESC : ๋ด๋ฆผ์ฐจ์(ํฐ ๊ฐ → ์์ ๊ฐ)
SELECT *
FROM Posts
ORDER BY CreatedAt DESC;
โ: Posts ํ ์ด๋ธ์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ฉฐ, CreatedAt ์ด์ ๊ธฐ์ค์ผ๋ก ๋ด๋ฆผ์ฐจ์(์ต์ ์)์ผ๋ก ์ ๋ ฌํฉ๋๋ค.
SELECT *
FROM Posts
ORDER BY Published DESC, Likes ASC;
โ: Published๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ ํ, ๋์ผํ Published ๊ฐ์ ๊ฐ์ง ๋ฐ์ดํฐ๋ Likes๋ฅผ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌํฉ๋๋ค.
LIMIT
๋ฐํํ ๋ ์ฝ๋ ์๋ฅผ ์ง์ ํ๋ ๋ฐ ์ฌ์ฉํฉ๋๋ค.
→ โจ(์์ฒ ๊ฐ์ ๋ ์ฝ๋๊ฐ ์๋ ํฐ ํ ์ด๋ธ์ ์ ์ฉ! ๋ง์ ์์ ๋ ์ฝ๋๋ฅผ ๋ฐํํ๋ฉด ์ฑ๋ฅ์ ์ํฅ์ ์ค ์ ์๊ธฐ ๋๋ฌธ์ด๋ค!)
- LIMIT {๊ฐ์ ธ์ฌ ๊ฐ์}
- LIMIT {๊ฐ์ ธ์ฌ ๊ฐ์} OFFSET {๊ฑด๋๋ธ ๊ฐ์}
SELECT * FROM Posts
LIMIT 5;
โ: Posts table์์ 5๊ฐ์ ํ(Row)๋ง ๊ฐ์ ธ์จ๋ค.
SELECT * FROM Posts
ORDER BY CreatedAt DESC
LIMIT 5 OFFSET 3;
โ: Posts table์์ ์ฒ์ 3๊ฐ์ ํ์ ๊ฑด๋๋ฐ๊ณ ๊ทธ๋ค์ 5๊ฐ์ ํ(Row)๋ง ๊ฐ์ ธ์จ๋ค.
์ถ์ฒ : w3 schools
https://www.w3schools.com/mysql/mysql_sql.asp
'BackEnd๐ > DB & SQL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[MySQL / DDL] ์ ์ฝ์กฐ๊ฑด(Constraints)์ ๊ดํ์ฌ ! (1) | 2025.01.17 |
---|---|
[MySQL / DDL] CREAET ๋ถํฐ MODIFY ๊น์ง! (์ ์ฝ ์กฐ๊ฑด x) (0) | 2025.01.13 |
[MariaDB] Docker๋ก MariaDB ์คํ ๋ฐ ์ ์ํ๊ธฐ (3) | 2025.01.03 |