[내일배움캠프] 1월 10일 화요일 TIL 회고록
CREATE 문
1) 테이블을 생성하는 문
2) 기본 문법
CREATE TABLE 테이블_이름 ( 열_ 이름 데이터_ 타입 )
예시
CREATE TABLE users (id int, name char(35), age int);
INSERT 문
1) 테이블에 데이터를 삽입하는 문
2) 기본 양식
INSERT INTO 테이블_이름 [(열1, 열2, 열3]) VALUES (값1, 값2,값3)
3) 사용법
3-1 ) 열을 생략하여 값 넣기
INSERT INTO users VALUES (6,'철수',5);
3-2 ) 열을 생략하지 않고 값 넣기
INSERT INTO users (id,name,age) VALUES (7,'원장선생님',40);
3-3) 열을 생략하지 않고 id 값을 제외하고 값 넣기
INSERT INTO users (name,age) VALUES ('채성아선생님',40);
실행하면 id값이 NULL 값으로 들어가있다.
추가로 열을 명시하면 순서가 바뀌어도 정상적으로 값이 넣어진다.
INSERT INTO users (age,id,name) VALUES (40,9,'짱구아빠');
AUTO_INCREMENT
1) 자동으로 증가하는 값
2) 반드시 Primary Key 로 지정해야 한다.
3) 예시
3-1) 테이블 생성
CREATE TABLE users ( id int AUTO_INCREMENT PRIMARY KEY, name char(35), age int);
3-2) 생성한 테이블에 값 넣기
id값에 null을 적고 값을 넣으면 자동으로 숫자를 지정해준다.
INSERT INTO users (id,name,age) VALUES (null,'짱구',5);
INSERT INTO ~ SELECT 문
1) 다른 테이블의 데이터를 한번에 입력한다.
2) SELECT 문의 열 개수는 INSERT 할 테이블의 열 개수가 같아야 한다.
3-1 ) 데이터베이스 가져오기
다른 테이블을 만들기 위해 https://dev.mysql.com/doc/world-setup/en/world-setup-installation.html 이 사이트에서 world.sql 스크립트 파일을 다운받아 MySQLWorkbench에 해당 데이터베이스를 불러왔다.
이 코드로 world 테이블 안에 city 컬럼의 정보를 볼 수 있다.
desc world.city
3-2 ) 테이블 만들기
만든 데이터베이스를 사용해서 테이블을 만들었다.
주의할 점은 데이터 타입을 지정할때 위에 사진에 있는 Type을 맞춰서 지정해야한다.
city_name은 위에 name으로 저장되니 ?? char(35), population 은 위에 Population으로 저장되니 int로 만든다.
CREATE TABLE my_city (city_name char(35), population int);
3-3 ) world.city 에서 name, Population을 my_city에 추가하기 (INSERT INTO ~ SELECT 문 사용)
되게 직관적이라 이해하기 편하다.
INSERT INTO my_city SELECT name, population FROM world_city
UPDATE
1) 기존에 있던 값을 수정합니다.
2) 예시
UPDATE 테이블 이름
SET 열1 = 값1, 열2 = 값2
WHERE 조건;
3) 위에서 만든 my_city에 city_name에 들어있는 'SEOUL'을 '서울'로 바꿔보기
UPDATE my_city
SET city_name = '서울'
WHERE city_name = 'SEOUL';
데이터 삭제 (DELETE , TRUNCATE, DROP)
1) DELETE
1. 테이블의 행 데이터를 지운다.
예시)
DELETE FROM 테이블_이름 WHERE 조건;
예시2) my_city 에서 'NEW'로 시작하는 도시 지우기
DELETE FROM my_city WHERE city_name LIKE 'NEW%';
해당 코드를 이용해 찾아봤는데 조회가 되지 않았다. 잘 지워진 듯 하다.
SELECT city_name FROM my_city WHERE city_name LIKE 'NEW%';
2) TRUNCATE
1. DELETE 문과 비슷하나 WHERE 문을 사용할 수 없다. 따라서 모든 행을 삭제한다.
2. DELETE 문보다 속도가 빠르다
예시)
TRUNCATE TABLE 테이블 이름;
3) DROP
1. 테이블 자체를 삭제한다. 속도가 매우 빠르다 (DELETE < TRUNCATE < DROP 순으로 빠르다.)
예시)
DROP TABLE 테이블_이름;
프로그래머스 SQL
문제 : 3월에 태어난 여성 회원 목록 출력하기
문제 설명 :
풀이 : 먼저 출력되는 값이 MEMBER_ID , MEMBER_NAME, GENDER, DATE_OF_BIRTH 이 출력되고,
받아오는 건 MEMBER_PROFILE에서 받아온다.
SELECT MEMBER_ID, MEMBER_NAME, GENDER,DATE_OF_BIRTH
FROM MEMBER_PROFILE
조건문을 작성 할 WHERE 문에는 성별이 여자인 회원만 받아와야 하니 GENDER = 'W' 를 적어준다.
생년월일에서 3월인 사람들만 출력되어야 하니 LIKE 문을 사용하여 3월인 사람만 출력되게 적어준다. ( '%03%')
그리고 회원 ID를 기준으로 오름차순으로 정렬되어야 하니 ORDER BY 문을 사용하여 오름차순으로 정렬되게 만들어준다.
WHERE GENDER ='W' AND DATE_OF_BIRTH LIKE '%03%'
ORDER BY MEMBER_ID ASC;
이러고 실행했는데 실패가 나왔다. 출력된 것을 보니 전화번호가 NULL 값인 사람도 들어가 있었다. 문제에는 NULL값은 출력 X 였다.
NULL 값을 출력 대상에서 제외시키는 것은 강의에서 배우지 못했기에 구글링을 했다.
http://triki.net/prgm/250 해당 블로그를 참조했다.
필드 값이 NULL이 아닌 데이터만 조회하면 되므로 IS NOT NULL 을 사용하면 된다.
출력 되어야 하는 값에는 전화번호가 담긴 TLNO은 출력이 안되야 하므로 SELECT 에는 적지 않고 WHERE 문에 적어줬다.
WHERE GENDER ='W' AND DATE_OF_BIRTH LIKE '%03%' AND TLNO IS NOT NULL
여기까지 한 후 실행했는데 이번에는 또 전화번호가 문제였다..
출력 된 생년월일은 1992-03-16:00:00:00 이런식으로 출력되었고 출력 되어야 할 생년월일은 1992-03-16 이렇게 나와야했다.
이거도 강의에선 배우지 못해 구글링을 하였다.
https://wakestand.tistory.com/555 해당 블로그를 참고했다.
SELECT DATE_FORMAT(NOW(), '%Y%m%d'); 을 이용하면 된다고 적혀있어서
SELECT에 적어둔 DATE_OF_BIRTH 대신 SELECT DATE_FORMAT(DATE_OF_BIRTH , '%Y%m%d') 을 적었다.
SELECT MEMBER_ID, MEMBER_NAME, GENDER, DATE_FORMAT(DATE_OF_BIRTH,'%Y-%m-%d')
전체 코드
-- 코드를 입력하세요
SELECT MEMBER_ID, MEMBER_NAME, GENDER, DATE_FORMAT(DATE_OF_BIRTH,'%Y-%m-%d')
FROM MEMBER_PROFILE
WHERE GENDER ='W' AND DATE_OF_BIRTH LIKE '%03%' AND TLNO IS NOT NULL
ORDER BY MEMBER_ID ASC;
실행 결과
내일은 강의를 듣고 프로그래머스 문제를 계속 풀어봐야겠다.