1) SQL์ด๋?
SQL(Structured Query Language)
-
SQL์ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ค ์ฝ๊ฒ ๊ฒ์ํ๊ณ ์ถ๊ฐ, ์ญ์ , ์์ ๊ฐ์ ์กฐ์์ ํ ์ ์๋๋ก ๊ณ ์๋ ์ปดํจํฐ ์ธ์ด์ ๋๋ค.
-
๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๋ฐ์ดํฐ๋ฅผ ์กฐ์ํ๊ณ ์ฟผ๋ฆฌํ๋ ํ์ค ์๋จ์ ๋๋ค.
-
DML (Data Manipulation Language): ๋ฐ์ดํฐ๋ฅผ ์กฐ์ํ๊ธฐ ์ํด ์ฌ์ฉํฉ๋๋ค.
INSERT, UPDATE, DELETE, SELECT ๋ฑ์ด ์ฌ๊ธฐ์ ํด๋นํฉ๋๋ค. -
DDL (Data Definition Language): ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์คํค๋ง๋ฅผ ์ ์ํ๊ฑฐ๋ ์กฐ์ํ๊ธฐ ์ํด ์ฌ์ฉํฉ๋๋ค.
CREATE, DROP, ALTER ๋ฑ์ด ์ฌ๊ธฐ์ ํด๋นํฉ๋๋ค. -
DCL (Data Control Language) : ๋ฐ์ดํฐ๋ฅผ ์ ์ดํ๋ ์ธ์ด์ ๋๋ค.
๊ถํ์ ๊ด๋ฆฌํ๊ณ , ๋ฐ์ดํฐ์ ๋ณด์, ๋ฌด๊ฒฐ์ฑ ๋ฑ์ ์ ์ํฉ๋๋ค.
GRANT, REVOKE ๋ฑ์ด ์ฌ๊ธฐ์ ํด๋นํฉ๋๋ค.
Database ์์ฑํ๊ธฐ
์ฝ์์์ ๋ค์๊ณผ ๊ฐ์ด ๋ช ๋ น์ ์คํํฉ๋๋ค.
MySQL ๊ด๋ฆฌ์ ๊ณ์ ์ธ root๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ฆฌ ์์คํ ์ ์ ์ํ๊ฒ ๋ค๋ ๊ฒ์ ๋๋ค.
mysql –uroot -p
window ์ฌ์ฉ์๋ ์ค์น ์์ ์ ๋ ฅํ๋ ์ํธ๋ฅผ ์ ๋ ฅํฉ๋๋ค.
MySQL DBMS์ ์ ์ํ๋ฉด “mysql>” ํ๋กฌํํธ๊ฐ ๋ณด์ ๋๋ค.
๊ด๋ฆฌ์ ๊ณ์ ์ผ๋ก MySQL์ ์ ์ํ๋ค๋ฉด, ๋ค์๊ณผ ๊ฐ์ ๋ช ๋ น์ผ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์์ฑํฉ๋๋ค.
mysql> create database DB์ด๋ฆ;
mysql> create database connectdb;
Database ์ฌ์ฉ์ ์์ฑ๊ณผ ๊ถํ ์ฃผ๊ธฐ
-
Database๋ฅผ ์์ฑํ๋ค๋ฉด, ํด๋น ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํ๋ ๊ณ์ ์ ์์ฑํด์ผ ํฉ๋๋ค.
-
๋ํ, ํด๋น ๊ณ์ ์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ด์ฉํ ์ ์๋ ๊ถํ์ ์ค์ผ ํฉ๋๋ค.
-
์๋์ ๊ฐ์ ๋ช ๋ น์ ์ด์ฉํด์ ์ฌ์ฉ์ ์์ฑ๊ณผ ๊ถํ์ ์ค ์ ์์ต๋๋ค.
-
db์ด๋ฆ ๋ค์ * ๋ ๋ชจ๋ ๊ถํ์ ์๋ฏธํฉ๋๋ค.
-
@’%’๋ ์ด๋ค ํด๋ผ์ด์ธํธ์์๋ ์ ๊ทผ ๊ฐ๋ฅํ๋ค๋ ์๋ฏธ์ด๊ณ , @’localhost’๋ ํด๋น ์ปดํจํฐ์์๋ง ์ ๊ทผ ๊ฐ๋ฅํ๋ค๋ ์๋ฏธ์ ๋๋ค.
-
flush privileges๋ DBMS์๊ฒ ์ ์ฉ์ ํ๋ผ๋ ์๋ฏธ์ ๋๋ค.
-
ํด๋น ๋ช ๋ น์ ๋ฐ๋์ ์คํํด์ค์ผ ํฉ๋๋ค.
grant all privileges on db์ด๋ฆ.* to ๊ณ์ ์ด๋ฆ@'%' identified by ๏ผ์ํธ’;
grant all privileges on db์ด๋ฆ.* to ๊ณ์ ์ด๋ฆ@'localhost' identified by ๏ผ์ํธ’;
flush privileges;
- ์ฌ์ฉ์ ๊ณ์ ์ด๋ฆ์ 'connectuser', ์ํธ๋ 'connect123!@#', ํด๋น ์ฌ์ฉ์๊ฐ ์ฌ์ฉํ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ 'connectdb'๋ก ๊ณ์ ์ ์์ฑํ๋ ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ๋ช ๋ น์ ์ํํฉ๋๋ค.
grant all privileges on connectdb.* to connectuser@'%' identified by 'connect123!@#';
grant all privileges on connectdb.* to connectuser@'localhost' identified by 'connect123!@#';
flush privileges;
๊ฐ์์์๋ mysql 5 ๋ฒ์ ์ผ๋ก ์ค๋ช ํ๋๋ฐ
mysql 8๋ฒ์ ์์๋ create user๋ฅผ ๋จผ์ ํด์ฃผ๊ณ grant๋ฅผ ํด์ผ ํ๋ค. ใ ก error log
๋ฐฉ๋ฒ 1
CREATE user connectuser @'%' identified by 'connect123!@#';
GRANT ALL privileges on connectdb.* to connectuser @'%';
๋ฐฉ๋ฒ 2
CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';
GRANT ALL ON *.* TO 'username'@'localhost';
flush privileges;
์์ฑํ Database์ ์ ์ํ๊ธฐ
์๋์ ๊ฐ์ด ๋ช ๋ น์ ์คํํ์ฌ ์ํ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ํ ์ ์์ต๋๋ค.
mysql –hํธ์คํธ๋ช
–uDB๊ณ์ ๋ช
–p ๋ฐ์ดํฐ๋ฒ ์ด์ค์ด๋ฆ
db์ด๋ฆ์ด connectdb, db๊ณ์ ์ด connectuser, ์ํธ๊ฐ connect123!@# ์ผ ๊ฒฝ์ฐ ์ฝ์์ฐฝ์์ ๋ค์๊ณผ ๊ฐ์ด ์ ๋ ฅํฉ๋๋ค.
mysql –h127.0.0.1 –uconnectuser –p connectdb
MySQL ์ฐ๊ฒฐ๋๊ธฐ
ํ๋กฌํํธ์์ quitํน์ exit๋ผ๊ณ ์ ๋ ฅํฉ๋๋ค.
mysql> QUIT
mysql> exit
Bye๋ผ๊ณ ๋์ค๋ฉด ์ฐ๊ฒฐ ๋๊ธฐ์ ์ฑ๊ณตํ ๊ฒ์ ๋๋ค.
MySQL ๋ฒ์ ๊ณผ ํ์ฌ ๋ ์ง ๊ตฌํ๊ธฐ
mysql> SELECT VERSION(), CURRENT_DATE;
ํ๋กฌํํธ์์๋ SQL์ ์ ๋ ฅํฉ๋๋ค.
SQL์ semicolon (;)์ผ๋ก ๋๋ฉ๋๋ค.
SQL์ ์ฟผ๋ฆฌ(Query)๋ผ๊ณ ์ฝ์ต๋๋ค.
์ฟผ๋ฆฌ๋ DBMS์๊ฒ ๋ช ๋ น์ ๋ด๋ฆด ๋ ์ฌ์ฉํ๋ ๋ฌธ์ฅ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ์ฝ์ต๋๋ค.
SELECT๋ ์ด๋ค ๋ด์ฉ์ ์กฐํํ ๋ ์ฌ์ฉํ๋ ํค์๋์ ๋๋ค.
MySQL์ ์ฟผ๋ฆฌ์ ํด๋นํ๋ ๊ฒฐ๊ณผ์ ์ ์ฒด row๋ฅผ ์ถ๋ ฅํ๊ณ ๋ง์ง๋ง์ ์ ์ฒด row ์์ ์ฟผ๋ฆฌ์คํ์ ๊ฑธ๋ฆฐ ์๊ฐ์ ํ์ํฉ๋๋ค.
ํค์๋๋ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ณํ์ง ์์ต๋๋ค.
๋ค์ ์ฟผ๋ฆฌ๋ค์ ๋ชจ๋ ๊ฐ์ต๋๋ค.
mysql> SELECT VERSION(), CURRENT\_DATE;
mysql> select version(), current\_date;
mysql> SeLeCt vErSiOn(), current\_DATE;
์ฟผ๋ฆฌ๋ฅผ ์ด์ฉํด์ ๊ณ์ฐ์์ ๊ฒฐ๊ณผ๋ ๊ตฌํ ์ ์์ต๋๋ค.
ํจ์ ๋ฐ ์์ ์ฌ์ฉ ์์
mysql> SELECT SIN(PI()/4), (4+1)\*5;
์ฌ๋ฌ ๋ฌธ์ฅ์ ํ ์ค์ ์ฐ์์ผ๋ก ๋ถ์ฌ์ ์คํ์ด ๊ฐ๋ฅํฉ๋๋ค.
๊ฐ ๋ฌธ์ฅ์ semicolon(;)๋ง ๋ถ์ฌ์ฃผ๋ฉด ๋ฉ๋๋ค.
mysql> SELECT VERSION(); SELECT NOW();
ํ๋์ SQL์ ์ฌ๋ฌ ์ค๋ก ์ ๋ ฅ๊ฐ๋ฅํ๋ค.
MySQL์ ๋ฌธ์ฅ์ ๋์ ๋ผ์ธ์ผ๋ก ๊ตฌ๋ถํ๋ ๊ฒ์ด ์๋๋ผ semicolon(;)์ผ๋ก ๊ตฌ๋ถํ๊ธฐ ๋๋ฌธ์ ์ฌ๋ฌ ์ค์ ๊ฑฐ์ณ ๋ฌธ์ฅ์ ์ฐ๋ ๊ฒ๋ ๊ฐ๋ฅํฉ๋๋ค.
mysql> SELECT
-> USER()
-> ,
-> CURRENT\_DATE;
SQL์ ์ ๋ ฅํ๋ ๋์ค์ ์ทจ์ํ ์ ์๋ค.
๊ธด ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ๋ค๊ฐ ์ค๊ฐ์ ์ทจ์ํด์ผ ํ๋ ๊ฒฝ์ฐ์๋ ์ฆ์ \c๋ฅผ ๋ถ์ฌ์ฃผ๋ฉด ๋ฉ๋๋ค.
mysql> SELECT
-> USER()
-> \c
mysql>
DBMS์ ์กด์ฌํ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ์ธํ๊ธฐ
์์ ํ๊ธฐ ์ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ ํํ๊ธฐ ์ํด์๋ ์ด๋ค ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์กด์ฌํ๋์ง ์์๋ณด์์ผ ํฉ๋๋ค.
ํ์ฌ ์๋ฒ์ ์กด์ฌํ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฐพ์๋ณด๊ธฐ ์ํด์ SHOW statement์ ์ฌ์ฉํฉ๋๋ค.
mysql> show databases;
์ฌ์ฉ์ค์ธ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ํํ๊ธฐ
Database์ ์ ํํ๊ธฐ ์ํด, “use” command ์ฌ์ฉํฉ๋๋ค.
mysql> use mydb;
๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ ํํ๋ ค๋ฉด, ์ด๋ฏธ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์กด์ฌํด์ผ ํ๋ฉฐ ํ์ฌ ์ ์ ์ค์ธ ๊ณ์ ์ด ํด๋น ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํ ์ ์๋ ๊ถํ์ด ์์ด์ผ ํฉ๋๋ค.
๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๊ณต๊ฐ ํ ์ด๋ธ(Table)
-
๋ง์ดํฌ๋ก์ํํธ์ ์์ (Excel)์ ์คํํ๋ฉด ํ๊ฐ ๋์ต๋๋ค. ์ด๋ฌํ ํ์ ๊ฐ์ข ๊ฐ์ ์ ์ฅํ ์ ์์ต๋๋ค.
-
๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์์ ์ ํ์ ์ ์ฌํ ํ ์ด๋ธ์ ๊ฐ์ง ์ ์์ต๋๋ค.
-
์์ ๊ณผ ๋ค๋ฅธ ์ ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์์ฑํด๋ ํ ์ด๋ธ์ ์กด์ฌํ์ง ์๋๋ค๋ ๊ฒ์ ๋๋ค.
-
ํ ์ด๋ธ์ ์ฌ์ฉํ๋ ค๋ฉด ํ ์ด๋ธ์ ์์ฑํ๋ SQL์ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
-
๊ทธ๋ฆฌ๊ณ , ํ ์ด๋ธ์ ๊ฐ์ ์ ์ฅํ๋ ค๋ฉด ์ ์ฅํ๊ธฐ ์ํ SQL์ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
ํ ์ด๋ธ(table)์ ๊ตฌ์ฑ์์
-
ํ ์ด๋ธ : RDBMS์ ๊ธฐ๋ณธ์ ์ ์ฅ๊ตฌ์กฐ ํ ๊ฐ ์ด์์ column๊ณผ 0๊ฐ ์ด์์ row๋ก ๊ตฌ์ฑํฉ๋๋ค.
-
์ด(Column) : ํ ์ด๋ธ ์์์์ ๋จ์ผ ์ข ๋ฅ์ ๋ฐ์ดํฐ๋ฅผ ๋ํ๋. ํน์ ๋ฐ์ดํฐ ํ์ ๋ฐ ํฌ๊ธฐ๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค.
-
ํ(Row) : Column๋ค์ ๊ฐ์ ์กฐํฉ. ๋ ์ฝ๋๋ผ๊ณ ๋ถ๋ฆผ. ๊ธฐ๋ณธํค(PK)์ ์ํด ๊ตฌ๋ถ. ๊ธฐ๋ณธํค๋ ์ค๋ณต์ ํ์ฉํ์ง ์์ผ๋ฉฐ ์์ด์๋ ์ ๋ฉ๋๋ค.
-
Field : Row์ Column์ ๊ต์ฐจ์ ์ผ๋ก Field๋ ๋ฐ์ดํฐ๋ฅผ ํฌํจํ ์ ์๊ณ ์์ ๋๋ NULL ๊ฐ์ ๊ฐ์ง๊ณ ์์ต๋๋ค.
ํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์กด์ฌํ๋ ํ ์ด๋ธ ๋ชฉ๋ก ํ์ธํ๊ธฐ
Database๋ฅผ ์ ํ ํ, Database์ ์ ์ฒด ํ ์ด๋ธ ๋ชฉ๋ก์ ์ถ๋ ฅํฉ๋๋ค.
mysql> show tables;
Empty set (0.02 sec)
“empty set” ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ด๋ค ํ ์ด๋ธ๋ ์์ง ์์ฑ๋์ง ์์๋ค๋ ๊ฒ์ ์๋ ค์ค๋๋ค.
ํ ์ด๋ธ ๊ตฌ์กฐ๋ฅผ ํ์ธํ๊ธฐ ์ํ DESCRIBE ๋ช ๋ น
table ๊ตฌ์กฐ๋ฅผ ํ์ธํ๊ธฐ ์ํด, DESCRIBE ๋ช ๋ น์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์งง๊ฒ DESC๋ผ๊ณ ์ฌ์ฉํด๋ ๋ฉ๋๋ค.
EMPLOYEEํ ์ด๋ธ์ ๊ตฌ์กฐ๋ฅผ ํ์ธํด ๋ด ์๋ค.
**mysql> desc EMPLOYEE;
2) DML(select, insert, update, delete)
๋ฐ์ดํฐ ์กฐ์์ด(Data Manipulation Language, DML)์ ์ข ๋ฅ
๋ฐ์ดํฐ ์กฐ์์ด๋ ๋ชจ๋ ๋์ฌ๋ก ์์ํฉ๋๋ค.
์์ํ๋ ๋์ฌ์ ๋ฐ๋ผ์ ๋ค์๊ณผ ๊ฐ์ 4๊ฐ์ง ์กฐ์์ด๊ฐ ์์ต๋๋ค.
- SELECT – ๊ฒ์
- INSERT - ๋ฑ๋ก
- UPDATE - ์์
- DELETE - ์ญ์
SELECT ๊ตฌ๋ฌธ์ ๊ธฐ๋ณธ๋ฌธํ
์ ์ฒด ๋ฐ์ดํฐ ๊ฒ์
SELECT ๋ค์ * ๋ฅผ ๊ธฐ์ ํจ์ผ๋ก์จ ๋ํ๋ผ ์ ์๋ค.
-
์์ : departments ํ ์ด๋ธ์ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ์ถ๋ ฅํ์์ค.
SELECT * FROM DEPARTMENT;
ํน์ ์ปฌ๋ผ ๊ฒ์
SELECT ๋ค์ ์ปฌ๋ผ์ ์ฝค๋ง(,)๋ก ๊ตฌ๋ณํด์ ๋์ด
-
์์ : employee ํ ์ด๋ธ์์ ์ง์์ ์ฌ๋ฒ(empno), ์ด๋ฆ(name), ์ง์ (job)์ ์ถ๋ ฅํ์์ค.
select empno, name, job from employee;
(์ด๋ค ์ปฌ๋ผ์ด ์๋์ง๋ desc๋ช ๋ น์ผ๋ก ํ์ธํ ์ ์๋ค)
์ปฌ๋ผ์ Alias๋ถ์ฌํ๊ธฐ
์ปฌ๋ผ์ ๋ํ ALIAS(๋ณ์นญ)์ ๋ถ์ฌํด์ ๋ํ๋ด๋ ์นผ๋ผ์ HEADING์ ๋ณ๊ฒฝํ ์ ์๋ค.
-
์์ : employee ํ ์ด๋ธ์์ ์ง์์ ์ฌ๋ฒ(empno), ์ด๋ฆ(name), ์ง์ (job)์ ์ถ๋ ฅํ์์ค.
select empno as ์ฌ๋ฒ, name as ์ด๋ฆ, job as ์ง์ from employee; select empno ์ฌ๋ฒ, name ์ด๋ฆ, job ์ง์ from employee; (๊ณต๋ฐฑ ๊ฐ๋ฅ)
์ปฌ๋ผ์ ํฉ์ฑ(Concatenation)
๋ฌธ์์ด ๊ฒฐํฉํจ์ concat ์ฌ์ฉ
-
์์ : employee ํ ์ด๋ธ์์ ์ฌ๋ฒ๊ณผ ๋ถ์๋ฒํธ๋ฅผ ํ๋์ ์นผ๋ผ์ผ๋ก ์ถ๋ ฅํ์์ค.
SELECT concat( empno, '-', deptno) AS '์ฌ๋ฒ-๋ถ์๋ฒํธ' FROM employee;
์ค๋ณตํ์ ์ ๊ฑฐ
์ค๋ณต๋๋ ํ์ด ์ถ๋ ฅ๋๋ ๊ฒฝ์ฐ, DISTINCT ํค์๋๋ก ์ค๋ณตํ์ ์ ๊ฑฐ
-
์์ 1 : ์ฌ์ ํ ์ด๋ธ์ ๋ชจ๋ ๋ถ์๋ฒํธ ์ถ๋ ฅํ์์ค. (์ฌ์ ์๋งํผ ์ถ๋ ฅ๋๋ค.)
select deptno from employee;
-
์์ 2 : ์ฌ์ ํ ์ด๋ธ์ ๋ถ์๋ฒํธ๋ฅผ ์ค๋ณต๋์ง ์๊ฒ ์ถ๋ ฅํ์์ค.
select distinct deptno from employee;
์ ๋ ฌํ๊ธฐ
-
์์ : employee ํ ์ด๋ธ์์ ์ง์์ ์ฌ๋ฒ(empno), ์ด๋ฆ(name), ์ง์ (job)์ ์ถ๋ ฅํ์์ค. ๋จ, ์ด๋ฆ์ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌํฉ๋๋ค.
-
1 alias๋ฅผ ์ฌ์ฉํ์ง ์์์ ๊ฒฝ์ฐ select empno, name, job from employee order by name; select empno, name, job from employee order by 2; (2๋ฒ์งธ col ์ด๋ ์๋ฆฌ)
2 alias๋ฅผ ์ฌ์ฉํ์ ๊ฒฝ์ฐ select empno as ์ฌ๋ฒ, name as ์ด๋ฆ, job as ์ง์ from employee order by ์ด๋ฆ;
-
์์ : employee ํ ์ด๋ธ์์ ์ง์์ ์ฌ๋ฒ(empno), ์ด๋ฆ(name), ์ง์ (job)์ ์ถ๋ ฅํ์์ค. ๋จ, ์ด๋ฆ์ ๊ธฐ์ค์ผ๋ก ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌํฉ๋๋ค.
select empno, name, job from employee order by name desc;
ํน์ ํ ๊ฒ์- where์
-
์ฐ์ ๋น๊ต ์ฐ์ฐ์
์์ : employee ํ ์ด๋ธ์์ ๊ณ ์ฉ์ผ(hiredate)์ด 1981๋ ์ด์ ์ ์ฌ์์ด๋ฆ๊ณผ ๊ณ ์ฉ์ผ์ ์ถ๋ ฅํ์์ค.
select name, hiredate from employee where hiredate < '1981-01-01';
-
๋ ผ๋ฆฌ์ฐ์ฐ์
์์ : employee ํ ์ด๋ธ์์ ๋ถ์๋ฒํธ๊ฐ 30์ธ ์ฌ์์ด๋ฆ๊ณผ ๋ถ์๋ฒํธ๋ฅผ ์ถ๋ ฅํ์์ค.
select name, deptno from employee where deptno = 30;
-
IN ํค์๋
์์ : employee ํ ์ด๋ธ์์ ๋ถ์๋ฒํธ๊ฐ 10๋๋ 30์ธ ์ฌ์์ด๋ฆ๊ณผ ๋ถ์๋ฒํธ๋ฅผ ์ถ๋ ฅํ์์ค.
select name, deptno from employee where deptno in (10, 30); select * from employee where deptno = 10 or deptno = 30;
-
LIKE ํค์๋
์์ผ๋ ์นด๋๋ฅผ ์ฌ์ฉํ์ฌ ํน์ ๋ฌธ์๋ฅผ ํฌํจํ ๊ฐ์ ๋ํ ์กฐ๊ฑด์ ์ฒ๋ฆฌ
%: 0์์๋ถํฐ ์ฌ๋ฌ ๊ฐ์ ๋ฌธ์์ด์ ๋ํ๋
_ : ๋จ ํ๋์ ๋ฌธ์๋ฅผ ๋ํ๋ด๋ ์์ผ๋ ์นด๋
์์ : employee ํ ์ด๋ธ์์ ์ด๋ฆ์ 'A'๊ฐ ํฌํจ๋ ์ฌ์์ ์ด๋ฆ(name)๊ณผ ์ง์ (job)์ ์ถ๋ ฅํ์์ค.
select name, job from employee where name like '%A%';
’A%’ A๋ก ์์ํ ์ฌ๋๋ค ’%A’ A๋ก ๋๋๋ ์ฌ๋๋ค ‘_A%’ ๋ฐ๋์ 2๋ฒ์งธ A๊ฐ ์ค๋ ์ฌ๋๋ค
ํจ์์ ์ฌ์ฉ
-
UCASE, UPPER (from ๋ค์์ ํ ์ด๋ธ์ด ์์ ๊ฒฝ์ฐ์๋ ํ ์ด๋ธ์์ ์กฐํํ๋ ๊ฒ์ด ์๋๋๋ค.)
-
LCASE. LOWER
-
SELECT lower(name) FROM employee;
-
-
substring
-
LPAD, RPAD
-
select LPAD (name, 10, ‘+’) from employee;
-
-
TRIM, LTRIM, RTRIM
-
ABS(x) : x์ ์ ๋๊ฐ์ ๊ตฌํฉ๋๋ค.
-
MOD(n,m) % : n์ m์ผ๋ก ๋๋ ๋๋จธ์ง ๊ฐ์ ์ถ๋ ฅํฉ๋๋ค.
-
FLOOR(x) : x๋ณด๋ค ํฌ์ง ์์ ๊ฐ์ฅ ํฐ ์ ์๋ฅผ ๋ฐํํฉ๋๋ค. BIGINT๋ก ์๋ ๋ณํํฉ๋๋ค.
-
CEILING(x) : x๋ณด๋ค ์์ง ์์ ๊ฐ์ฅ ์์ ์ ์๋ฅผ ๋ฐํํฉ๋๋ค.
-
ROUND(x) : x์ ๊ฐ์ฅ ๊ทผ์ ํ ์ ์๋ฅผ ๋ฐํํฉ๋๋ค.
-
POW(x,y) POWER(x,y) : x์ y ์ ๊ณฑ ์น์ ๋ฐํํฉ๋๋ค.
-
GREATEST(x,y,...) : ๊ฐ์ฅ ํฐ ๊ฐ์ ๋ฐํํฉ๋๋ค.
-
LEAST(x,y,...) : ๊ฐ์ฅ ์์ ๊ฐ์ ๋ฐํํฉ๋๋ค.
-
CURDATE(),CURRENT_DATE : ์ค๋ ๋ ์ง๋ฅผ YYYY-MM-DD๋ YYYYMMDD ํ์์ผ๋ก ๋ฐํํฉ๋๋ค.
-
CURTIME(), CURRENT_TIME : ํ์ฌ ์๊ฐ์ HH:MM:SS๋ HHMMSS ํ์์ผ๋ก ๋ฐํํฉ๋๋ค.
-
NOW(), SYSDATE() , CURRENT_TIMESTAMP : ์ค๋ ํ์๊ฐ์ YYYY-MM-DD HH:MM:SS๋ YYYYMMDDHHMMSS ํ์์ผ๋ก ๋ฐํํฉ๋๋ค.
-
DATE_FORMAT(date,format) : ์ ๋ ฅ๋ date๋ฅผ format ํ์์ผ๋ก ๋ฐํํฉ๋๋ค.
-
PERIOD_DIFF(p1,p2) : YYMM์ด๋ YYYYMM์ผ๋ก ํ๊ธฐ๋๋ p1๊ณผ p2์ ์ฐจ์ด ๊ฐ์์ ๋ฐํํฉ๋๋ค.
์ฐธ๊ณ ์ฌํญ: mysql์ ์์ idx๊ฐ 1d์ด๋ค.
CAST ํ๋ณํ
cast(expression as type)
convert(____, ____)
convert(____ USING transcoding_name)
- ์์
mysql> select cast(now() as date);
+---------------------+
| cast(now() as date) |
+---------------------+
| 2003-09-25 |
+---------------------+
1 row in set (0.00 sec)
mysql> select cast(1-2 as unsigned);
+----------------------------+
| cast(1-2 as unsigned) |
+----------------------------+
| 18446744073709551615 |
+----------------------------+
๊ทธ๋ฃนํจ์
ex) count(boss) count(comm)
-
์์ : employee ํ ์ด๋ธ์์ ๋ถ์๋ฒํธ๊ฐ 30์ธ ์ง์์ ๊ธ์ฌ ํ๊ท ๊ณผ ์ดํฉ๊ณ๋ฅผ ์ถ๋ ฅํ์์ค.
SELECT AVG(salary) , SUM(salary) FROM employee WHERE deptno = 30;
๊ทธ๋ฃนํจ์์ group by ์
๊ทธ๋ฃนํํ์ง ์์๋ ๊ทธ๋ฃนํด์ฃผ๊ธฐ์ ๊ทธ๋ฃน ํจ์์ ๊ฒฝ์ฐ ์ฃผ์๊ฐ ํ์ํ๋ค.
-
์์ : employee ํ ์ด๋ธ์์ ๋ถ์๋ณ ์ง์์ ๋ถ์๋ฒํธ, ๊ธ์ฌ ํ๊ท ๊ณผ ์ดํฉ๊ณ๋ฅผ ์ถ๋ ฅํ์์ค.
SELECT deptno, AVG(salary) , SUM(salary) FROM employee group by deptno;
select๋ฌธ๊ณผ join
select emp_name as ์ฌ์๋ช
dept_name as ๋ถ์๋ช
where employee as A
join department as B
where a.dept_no =b.dept_no;
๋ฐ์ดํฐ ์ ๋ ฅ (INSERT๋ฌธ)
INSERT INTO ํ
์ด๋ธ๋ช
(ํ๋1, ํ๋2, ํ๋3, ํ๋4, … )
VALUES ( ํ๋1์ ๊ฐ, ํ๋2์ ๊ฐ, ํ๋3์ ๊ฐ, ํ๋4์ ๊ฐ, … );
INSERT INTO ํ
์ด๋ธ๋ช
VALUES ( ํ๋1์ ๊ฐ, ํ๋2์ ๊ฐ, ํ๋3์ ๊ฐ, ํ๋4์ ๊ฐ, … );
INSERT INTO employee (empno, name, deptno) VALUES (1111, ‘kang’, 100);
ํ๋๋ช ์ ์ง์ ํด์ฃผ๋ ๋ฐฉ์์ ๋ํดํธ ๊ฐ์ด ์ธํ ๋๋ ํ๋๋ ์๋ ฅํ ์ ์์ต๋๋ค.
ํ๋๋ช ์ ์ง์ ํด์ฃผ๋ ๋ฐฉ์์ ์ถ ํ, ํ๋๊ฐ ์ถ๊ฐ/๋ณ๊ฒฝ/์์ ๋๋ ๋ณ๊ฒฝ์ ์ ์ฐํ๊ฒ ๋์ฒ ๊ฐ๋ฅํฉ๋๋ค.
ํ๋๋ช ์ ์๋ตํ์ ๊ฒฝ์ฐ์๋ ๋ชจ๋ ํ๋ ๊ฐ์ ๋ฐ๋์ ์ ๋ ฅํด์ผ ํฉ๋๋ค.
null์ด ๋ถ๊ฐ๋ฅํ ์กฐ๊ฑด (not-null or primary)์ ์ปฌ๋ผ์ ๋ฐ๋์ ๋์ดํ์ฌ ๊ฐ์ ์ง์ ํด์ผ ํ๋ค. (์ค๋ฅ๋ฐ์)
-
์์ : ROLEํ ์ด๋ธ์ role_id๋ 200, description์๋ 'CEO'๋ก ํ๊ฑด์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ์์ค.
insert into ROLE (role_id, description) values ( 200, 'CEO'); or insert into ROLE values (200, 'CEO'); // col์ด 2๊ฐ๋ผ์ ๊ฐ๋ฅํ๋ค
๋ฐ์ดํฐ ์์ (UPDATE๋ฌธ)
UPDATE ํ
์ด๋ธ๋ช
SET ํ๋1=ํ๋1์๊ฐ, ํ๋2=ํ๋2์๊ฐ, ํ๋3=ํ๋3์๊ฐ, …
WHERE ์กฐ๊ฑด์
์กฐ๊ฑด์์ ํตํด ํน์ row๋ง ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
์กฐ๊ฑด์(where์ )์ ์ฃผ์ง ์์ผ๋ฉด ์ ์ฒด ๋ก์ฐ๊ฐ ์ํฅ์ ๋ฏธ์น๋ ์กฐ์ฌํด์ ์ฌ์ฉํ๋๋ก ํฉ๋๋ค.
-
์์ : ROLEํ ์ด๋ธ์ role_id๊ฐ 200์ผ ๊ฒฝ์ฐ description์ 'CTO'๋ก ์์ ํ์์ค.
UPDATE ROLE SET description = 'CTO' WHERE role_id = 200;
๋ฐ์ดํฐ ์ญ์ (DELETE๋ฌธ)
DELETE FROM ํ
์ด๋ธ๋ช
WHERE ์กฐ๊ฑด์
์กฐ๊ฑด์์ ํตํด ํน์ row๋ง ์ญ์ ํ ์ ์์ต๋๋ค.
์กฐ๊ฑด์(where์ )์ ์ฃผ์ง ์์ผ๋ฉด ์ ์ฒด๊ฐ ๋ค ์ง์์ง ์ ์์ผ๋ ์กฐ์ฌํด์ ์ฌ์ฉํ๋๋ก ํฉ๋๋ค.
-
์์ : ROLEํ ์ด๋ธ์์ role_id๋ 200์ธ ์ ๋ณด๋ฅผ ์ญ์ ํ์์ค.
DELETE FROM ROLE WHERE role_id = 200;
3) DDL(create, drop)
MySQL ๋ฐ์ดํฐ ํ์
ํ ์ด๋ธ ์์ฑํ๊ธฐ
create table ํ
์ด๋ธ๋ช
(
ํ๋๋ช
1 ํ์
[NULL | NOT NULL][DEFAULT ][AUTO_INCREMENT],
ํ๋๋ช
2 ํ์
[NULL | NOT NULL][DEFAULT ][AUTO_INCREMENT],
ํ๋๋ช
3 ํ์
[NULL | NOT NULL][DEFAULT ][AUTO_INCREMENT],
...........
PRIMARY KEY(ํ๋๋ช
)
);
๋ฐ์ดํฐ ํ ์ธ์๋ ์์ฑ๊ฐ์ ๋น ๊ฐ ํ์ฉ ์ฌ๋ถ๋ NULL ๋๋ NOT NULL๋ก ์ค์
DEFAULT ํค์๋์ ํจ๊ป ์ ๋ ฅํ์ง ์์์ ๋์ ์ด๊ธฐ๊ฐ์ ์ง์
์ ๋ ฅํ์ง ์๊ณ ์๋์ผ๋ก 1์ฉ ์ฆ๊ฐํ๋ ๋ฒํธ๋ฅผ ์ํ AUTO_INCREMENT์ด ์๋ค.
-
์ค์ต: EMPLOYEE์ ๊ฐ์ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง EMPLOYEE2 ํ ์ด๋ธ์ ์์ฑํ์์ค.
CREATE TABLE EMPLOYEE2( empno INTEGER NOT NULL PRIMARY KEY, name VARCHAR(10), job VARCHAR(9), boss INTEGER, hiredate VARCHAR(12), salary DECIMAL(7, 2), comm DECIMAL(7, 2), deptno INTEGER);
ํ ์ด๋ธ ์์ (์ปฌ๋ผ ์ถ๊ฐ / ์ญ์ )
ALTER TABLE ํ
์ด๋ธ๋ช
ADD ํ๋๋ช
ํ์
[NULL|NOT NULL][DEFAULT][AUTO_INCREMENT];
ALTER TABLE ํ
์ด๋ธ๋ช
DROP ํ๋๋ช
;
-
์ค์ต_์ปฌ๋ผ์ถ๊ฐ – EMPLOYEE2 ํ ์ด๋ธ์ ์์ผ(birthdate)์นผ๋ผ์ varchar(12)ํ์์ผ๋ก ์ถ๊ฐํ์์ค.
alter table EMPLOYEE2 add birthdate varchar(12);
-
์ค์ต_์ปฌ๋ผ์ญ์ – EMPLOYEE2 ํ ์ด๋ธ์ ์์ผ(birthdate)์นผ๋ผ์ ์ญ์ ํ์์ค.
alter table EMPLOYEE2 drop birthdate;
ํ ์ด๋ธ ์์ (์ปฌ๋ผ ์์ )
ALTER TABLE ํ
์ด๋ธ๋ช
CHANGE ํ๋๋ช
์ํ๋๋ช
ํ์
[NULL|NOT NULL][DEFAULT][AUTO_INCREMENT];
change ํค์๋๋ฅผ ์ฌ์ฉํ๊ณ ์นผ๋ผ์ ์๋กญ๊ฒ ์ฌ์ ์ (์ด๋ฆ๋ถํฐ ์์ฑ๊น์ง ์ ๋ถ)
-
์ค์ต – EMPLOYEE2 ํ ์ด๋ธ์ ๋ถ์๋ฒํธ(deptno)๋ฅผ dept_no๋ก ์์ ํ์์ค.
alter table EMPLOYEE2 change deptno dept_no int(11);
ํ ์ด๋ธ ์ด๋ฆ ๋ณ๊ฒฝ
ALTER TABLE ํ
์ด๋ธ๋ช
RENAME ๋ณ๊ฒฝ์ด๋ฆ;
-
์ค์ต – EMPLOYEE2 ํ ์ด๋ธ์ ์ด๋ฆ์ EMPLOYEE3๋ก ๋ณ๊ฒฝํ์์ค.
alter table EMPLOYEE2 rename EMPLOYEE3;
ํ ์ด๋ธ ์ญ์ ํ๊ธฐ
DROP TABLE ํ
์ด๋ธ์ด๋ฆ;
์ฐธ๊ณ ๋ก, ์ ์ฝ ์กฐ๊ฑด์ด ์์ ๊ฒฝ์ฐ์๋ drop table ๋ช ๋ น์ผ๋ก๋ ํ ์ด๋ธ์ด ์ญ์ ๋์ง ์์ ์ ์์ต๋๋ค.
๊ทธ๋ด ๊ฒฝ์ฐ๋ ํ ์ด๋ธ์ ์์ฑํ ๋ฐ๋ ์์๋ก ์ญ์ ๋ฅผ ํด์ผํฉ๋๋ค.
* ํ ์ด๋ธ ์ญ์ ํ desc ๋ช ๋ น์ ์ํํ๋ฉด, ์กด์ฌํ์ง ์๋ ํ ์ด๋ธ์ด๋ผ๊ณ ํ์๋ฉ๋๋ค.
-
์ค์ต – EMPLOYEE2 ํ ์ด๋ธ์ ์ญ์ ํ์์ค.
drop table EMPLOYEE2;
'Spring > Boost Course Web' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
2.2 ์น ๊ฐ๋ฐํ๊ฒฝ ์ค์ (0) | 2020.11.19 |
---|---|
2.1 Web๊ฐ๋ฐ์ ์ดํด (0) | 2020.11.19 |
1.5 JDBC (0) | 2020.11.19 |
1.4 Maven (0) | 2020.11.19 |
1.3 ๊ฐ๋ฐํ๊ฒฝ ์ค์ (0) | 2020.11.09 |
1.1 MySQL (0) | 2020.11.09 |