

관계형 데이터베이스 관리 시스템(RDBMS)에서 데이터를 조회, 삽입, 갱신, 삭제하기 위해 사용 되는 프로그래밍 언어
CRUD
SQL 구문도 위의 목적에 맞게 크게 세 가지로 구분
DB 구축 시 세 가지로 분류해 작업 (sql문을 세 가지로 분류)
- DDL문(sql문)을 활용하여 테이블 구축
- DML문(sql문)을 활용하여 데이터 삽입 / 조회 / 수정 / 삭제 ⇒ 가장 많이 사용됨. (중요도가 높음)
- DCL문(sql문)을 활용하여 사용자 관리 (권한 부여)
ex) 로그인 테이블 ⇒ 내 정보만 수정, 게시글 테이블 ⇒ 테이블 내 데이터 모두 수정 가능
DDL
DML
DCL


-- mariaDB접속
mariadb -u root -p
-- 스키마(schema, database)
CREATE DATABASE 테이블명;
-- 스키마 목록 조회
SHOW databases;
-- 스키마 선택
USE 테이블명;
-- 테이블 생성 / 테이블에 저장된 레코드(row)를 고유하게 식별하는 키 PRIMARY KEY
CREATE TABLE 테이블명(id INT PRIMARY KEY, name VARCHAR(255), email VARCHAR(255), password VARCHAR(255));
-- 테이블 컬럼(column, 열) 조회
DESCRIBE 테이블명;
-- 상세 조회
SHOW FULL COLUMNS;
-- 테이블 생성문 조회
SHOW CREATE TABLE 테이블명; -- 테이블을 삭제하기 전 저장해두면 그대로 복구(재생성) 가능!
-- 테이블 전체에 대한 제약 조건 FOREIGN KEY
CREATE TABLE 테이블명(x,x,x, FOREIGN KEY (x_참조 테이블 컬럼) REFERENCES 참조 테이블 (컬럼));
-- 테이블 index 조회
SHOW INDEX FROM 테이블명;
-- ALTER 문 : 테이블의 구조를 변경
-- 테이블 이름 변경
ALTER TABLE 테이블1 RENAME 테이블2
-- 테이블 컬럼 추가
-- 컬럼 추가 ADD / 수정 MODIFY / 삭제 DROP
ALTER TABLE 테이블명 ADD COLUMN 컬럼명 VARCHAR(50);
-- 컬럼명 변경 => 덮어쓰기 개념이므로 기존에 있던 값도 꼭 함께 적어주기!
ALTER TABLE 테이블명 CHANGE COLUMN 원래컬럼명 변경컬렴명 VARCHAR(255);
-- 컬럼 타입과 제약 조건 변경
ALTER TABLE 테이블명 MODIFY COLUMN 컬럼명 VARCHAR(255) NOT NULL;
alter table author add column address VARCHAR(255);
alter table post modify column title VARCHAR(255) not null; alter table post modify column contents VARCHAR(3000);
-- 데이터 삽입 INSERT INTO
INSERT INTO 테이블명(컬럼1, 컬럼2, 컬럼3) VALUES(데이터1, 데이터2, 데이터3);
-- 테이블 제약 조건 조회
-- 내가 현재 USE하고 있는 스키마에서 : 데이터 조회 SELECT / * : 모든 컬럼 조회
SELECT * FROM 테이블명;
-- USE 하고 있지 않다면?
SELECT * FROM 스키마명.테이블;
=> SELECT * FROM information_schema.key_column_usage WHERE TABLE_NAME = 'posts';
-- 테이블 레코드의 내용 수정 UPDATE
UPDATE 테이블명 SET 컬럼명=데이터 WHERE 레코드=n;
-- 테이블 삭제
DELETE FROM 테이블명 WHERE 레코드=n;
-- SELECT의 다양한 조회 방법
SELECT * FROM 테이블명;
SELECT * FROM 테이블명 WHERE 레코드 > n AND 레코드1 = 값;
-- 특정 컬럼만 조회
SELECT 컬럼명 FROM 테이블명 WHERE 레코드 = 값;
-- 중복 제거하고 조회
SELECT DISTINCT 컬럼명 FROM 테이블명;
-- 정렬 : ORDER BY. 데이터의 출력 결과를 특정 기준으로 정렬
-- 아무런 정렬 조건없이 조회할 경우에는 PK 기준 오름차순으로 조회됨.
-- 오름차순 : ASC / 내림차순 : DESC
SELECT * FROM 테이블명 ORDER BY 컬럼명 ASC;
-- 멀티 ORDER BY / 여러 컬럼으로 정렬. 먼저 쓴 컬럼 우선 정렬 후 다음 정렬 옵션 적용.
SELECT * FROM 테이블명 ORDER BY 컬럼명, 컬럼명1 DESC; -- 중복일 경우에 컬럼명1 DESC 하겠다!
-- LIMIT NUMBER : 특정 숫자로 결과값 개수 제한
SELECT * FROM 테이블명 ORDER BY 컬럼명 DESC LIMIT n; -- n=1 일 경우 한 개만 보겠다!
-- ALIAS(별칭)을 이용한 SELECT : AS 키워드 사용
SELECT name AS 이름, email AS 이메일 FROM 테이블명;
-- 테이블이 여러 개 일 경우 / 테이블 뒤에 넣는 별칭에서는 as 생략 OK!
SELECT a.name AS 이름, a.email as 이메일 from author as a;
-- NULL 을 조회 조건으로. 비어있는 것만 조회 = NULL / 반대 = NOT NULL;
SELECT * FROM 테이블명 WHERE 컬럼명 IS NULL;

내가 배우고 있는 개념들이 실제 업무에서도 사용되는 거라니!
수업이 더더욱 매력적으로 다가오기 시작했다. ^ㅇ^
한 개념을 실습하는데도 시간이 많이 소요됐다. 여러 케이스들을 적용하여 실습할 때는 더더욱 버벅인 것 같다. 프로그래머스에서 SQL 문제 풀이를 진행했었는데, 확실히 개념은 읽어보는 것보다 직접 실습해보는 것이 더 뇌리에 쏙 박히는 것 같다. 여러 문제를 복습해보면서 이해가 되지 않아 뒤쳐지는 일은 반드시 없도록 해야겠다.