SQL(Structured Query Language)란?
: MySQL같은 관계형 데이터베이스에서 데이터를 읽거나 생성 및 수정하기 위해 사용하는 언어.
- CRUD가 존재,
Create,Read,Update,Delete
SELECT id,name,age,gender
FROM users
위의 구문은 users테이블에서 id,name,age,gender를 찾겠다는 것을 쓴것
SELECT id,name,age,gender
FROM users
WHERE name = "아이유"
위의 구문과 비슷한데 users테이블에서 id,name,age,gender를 찾을 건데 name은 꼭 아이유여야만한다.
INSERT INTO users (id,name,age,gender)
VALUES (1,"아이유",27,"여자"), (2,"제인",19,"여자")
users테이블에서 id,name,age,gender속성에 값을 (1,"아이유",27,"여자"), (2,"제인",19,"여자") 이와 같이 생성하라는 구문이다.
UPDATE users SET age = 25 WHERE name = "아이유"
users테이블에 where을 이용해 name이 "아이유"인 사람만 age값을 25라 바꾸라는 말
DELETE FROM users WHERE gender = "남자"
users테이블에 where을 이용해 gender가 "남자"를 삭제하라는 말
SELECT 1
FROM users
WHERE EXISTS (SELECT *
FROM users
WHERE user_name = '아이유');
users테이블에서 서브쿼리로 "users테이블에 user_name이 '아이유'인 정보를 다 불러와라"에서 온 구문에서 그 중에서 1이 존재한다면 갖고오라는 구문
해당 레코드에 대해서 EXISTS 이하의 서브쿼리를 실행하고 서브쿼리에 대한 결과가 '존재하는지'
를 확인합니다.
반대로, NOT EXIST 를 사용하여 반대의 경우도 체크 할 수 있다.
문법
SELECT
테이블별칭.조회할칼럼,
테이블별칭.조회할칼럼
FROM 기준테이블 별칭
INNER JOIN 조인테이블 별칭 ON 기준테이블별칭.기준키 = 조인테이블별칭.기준키
아래는 실제코드를 넣은 것이다.
SELECT
users.id,
users.name,
users.age,
users.gender,
accounts.account_type
FROM users
JOIN accounts ON accounts.id = users.account_id
users테이블에서 accounts테이블에 컬럼으로 있는 accounts.id와 users.account_id join을 이용해 같으면 그 같은 값만 users.id, users.name, users.age, users.gender, accounts.account_type를 select해라라는 구문이다.
일반적으로 제일 많이 쓰이는 join구문으로,inner join입니다.
그외에 여러 유형들이 있습니다.
(INNER) JOIN: 일반적인 join문. 기준이 되는 테이블 (left table)과 join이 걸리는 테이블(right table) 양쪽 모두에 matching되는 row만 select가 됨.
LEFT (OUTER) JOIN: 기준이 되는 테이블 (left table)의 모든 row와 join이 걸리는 테이블(right table)중 left table과 matching되는 row만 select가 됨.
RIGHT (OUTER) JOIN: join이 걸리는 테이블(right table)의 모든 row와 기준이 되는 테이블 (left table)에서 right table과 matching되는 row만 select가 됨.
FULL (OUTER) JOIN: 기준이 되는 테이블 (left table)과 join이 걸리는 테이블(right table) 양쪽 모두의 모든 row를 select 한다.
CREATE TABLE accounts(
id INT NOT NULL AUTO_INCREMENT,
account_type VARCHAR(100) NOT NULL,
PRIMARY KEY (id)
);
CREATE TABLE users(
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(255) NOT NULL,
email VARCHAR(255) NOT NULL,
hashed_password VARCHAR(255) NOT NULL,
account_id INT NOT NULL,
PRIMARY KEY (id),
UNIQUE KEY email (email),
CONSTRAINT `users_account_fkey` FOREIGN KEY (`account_id`) REFERENCES `accounts` (`id`)
);```