어제 기본적인 SQL 언어와 흐름을 배우고 복습하며 조금씩 익숙해지니까 오늘은 확실히 할 만했던 것 같다.
CREATE TABLE orders (
order_id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
cust_id CHAR(10) NOT NULL,
prod_name CHAR(6) NOT NULL,
price INT NOT NULL,
amount SMALLINT NOT NULL,
FOREIGN KEY (cust_id) REFERENCES customer (cust_id)
ON DELETE CASCADE
ON UPDATE CASCADE
);
ALTER TABLE students
ADD CONSTRAINT fk_students_advisor_id
FOREIGN KEY (advisor_id) REFERENCES professors (professor_id)
ON DELETE SET NULL
ON UPDATE SET NULL;
SELECT CONSTRAINT_NAME FROM information_schema.KEY_COLUMN_USAGE WHERE TABLE_NAME = "orders";
ALTER TABLE 테이블 이름 DROP FOREIGN KEY 제약명;
INSERT INTO customer (cust_id, cust_name, address, phone, birth)
VALUES ("C001", "김민수", "서울시", "01012345678", "1990-05-14");
INSERT INTO customer
VALUES ("C002", "이영희", "부산시", "01023456789", "1985-08-22");
INSERT INTO customer
VALUES
("C003", "박철수", "대전시", "01034567890", "1992-11-02"),
("C004", "정유진", "광주시", "01045678901", "1998-01-19");
INSERT INTO orders (cust_id, prod_name, price, amount)
VALUES ("C001", "커피머신", 120000, 1);
SELECT 컴럼 FROM 테이블 WHERE 조건 GROUP BY 컬럼 HAVING 조건 ORDER BY 컬럼 LIMIT 숫자;
# 컬럼 별칭
SELECT 컬럼 AS 별칭 FROM 테이블;
# 테이블 병칭
SELECT 별칭.컬럼 FROM 테이블 AS 별칭;
# AS 생략 가능
SELECT 컬럼1 별칭1, 컬럽2 별칭2 FROM 테이블;
SELECT 컬럼 FROM 테이블 WHERE 조건
SELECT * FROM student WHERE age BETWEEN 20 AND 25;
SELECT * FROM class WHERE category IN ("백엔드", "프론트엔드", "디자인");
SELECT * FROM student WHERE name LIKE "이%";
SELECT * FROM student WHERE name LIKE "%영";
SELECT * FROM student WHERE name LIKE "__영"; # 언더바 1개당 글자 1개
SELECT * FROM student WHERE name LIKE "_원%";
SELECT * FROM student WHERE name LIKE "%원%"; # "원"포함 여부
SELECT * FROM student WHERE age IS NULL;
SELECT * FROM student WHERE age IS NULL ORDER BY class_id DESC LIMIT 1, 2;
SELECT DISTINCT class_id FROM student;
# 1.
SELECT class_id, COUNT(*) student_count FROM student GROUP BY class_id;
# 2.
SELECT gender, AVG(age) avg_age FROM student GROUP BY gender;
# 3.
SELECT gender, AVG(age) avg_age FROM student GROUP BY gender HAVING AVG(age) >= 26;
# 4.
SELECT class_id, MIN(join_date) first_join FROM student GROUP BY class_id;
# 5.
SELECT class_id, MIN(age) min_age FROM student GROUP BY class_id HAVING MIN(age) >= 25;
# 6.
SELECT gender, (MAX(age) - MIN(age)) age_gap FROM student GROUP BY gender HAVING (MAX(age) - MIN(age)) >= 3;
# 7.
SELECT class_id, AVG(age) avg_age FROM student GROUP BY class_id HAVING AVG(age) >= 24 ORDER BY avg_age DESC;
이제 데이터를 추가하고 수정하는 등 기능을 하나씩 배우니까 점점 재미있어지는 것 같다. 데이터를 처리하는 언어이다 보니까 앞으로를 생각해서라도 지금부터 잘 배우고 잘 복습해둬야겠다.