본문 바로가기

SQL/혼공학습단 8기 - SQL

Week2 - 기본 문법 및 테이블 입력 및 수정

기본 미션

🐯 Chapter 03 p.138 - 확인문제 2번 풀고 인증샷.

확인문제는 총 6문항이 있고 2번 외의 것들도 함께 풀어보겠습니다.

1. 다음 SELECT 문에서 사용되는 절을 차례대로 나열하세요.
[ ORDER BY, WHERE, LIMIT, SELECT, FROM]
SELECT, FROM, WHERE ORDER BY, LIMIT 순서로 사용된다.
💡 2. 다음 보기중에서 각 문항의 빈칸에 들어갈 것을 고르세요.
[ LIKE, DESC, ORDER BY, DISTINCT, ASC, AND, OR, >=, LIMIT ]

① SELECT * FROM member __________ height;
SELECT * FROM member __________ 5,2;
SELECT __________  phone1 FROM member;

① ORDER BY
② LIMIT
③ DISTINCT
3. 다음 빈칸에 들어갈 예약어를 채우세요.
[ ORDER BY 절에서 오름차순을 위하 예약어는 _________ 이고,
내림차순을 위한 예약어는 ________ 다.
① ASC
② DESC
4. 다음 LIMIT에 대한 문법이 틀린 것을 하나 고르세요.
① LIMIT 5 ② LIMIT 3,5 ③ LIMIT 0,3,5 ④ LIMIT 5 OFFSET 3

LIMIT의 활용

출력의 개수를 제한하는 문법으로 형식은 LIMIT 시작, 개수 이며 이는 곧 LIMIT 개수 OFFSET 시작 과 동일한 문법이다.

또한 시작 데이터는 0이 default값이다.

주로 ORDER BY와 함께 쓰이는 일이 많다.

5. 다음은 어떤 예약어에 대한 설명인지 쓰세요.
[ 조회된 결과에서 중복된 것은 한개만 남기며, SELECT문의 열 이름 앞에 붙여준다]

DISTINCT

6.다음은 GROUP BY에서 사용되는 집계함수입니다 거리가 먼것을 하나 고르세요.
① SUM( ) ② AVG( ) ③HAVING( ) ④ COUNT( )

HAVING 절

HAVING 은 집계함수가 아닌, GROUP BY 뒤에 따라오는 조건절로 WHERE와 비슷하 개념. 다시 말하면 HAVING 은 집계함수에 대해서 조건을 제한 하는 것

 

집계 함수 aggregate function

① SUM( ) : 합계 구하기

② AVG( ) : 평균값 구하기

③ MIN( ) : 최소값 구하기

④ MAX( ) : 최대값 구하기

⑤ COUNT( ) : 행의 개수를 세는것

⑥ COUNT(DISTINCT) : 행의 개수를 세지만 중복 결과의 하나만 센다.

 

 

* chapter3 의 개념은 지난 포스트로 대신합니다

https://kimmaadata.tistory.com/108?category=1048649

 

[SQL] 그룹화, 그룹 조건, 정렬 및 출력갯수 - Group by, Having, Order by, Limit

Group by Having Order by Limit GROUP BY 데이터를 그룹으로 묶어주는 기능을 한다. HAVING GROUP BY와 함께 사용되며 WHERE 절대신 집계함수와 관련된 조건을 제한한다. ORDER BY 결과의 값이나 개수에 대해서..

kimmaadata.tistory.com

추가 미션

🐱 데이터 입력, 삭제하는 기본 형식 작성하기

기본 형식

데이터 입력: INSERT

INSERT INTO tablename[(col1, col2, ...)] VALUES (val1, val2, .)
  • 테이블 이름을 생략할 경우 VALUES 의 값들의 순서 및 개수는 테이블을 정의할 때의 열 순서 및 개수와 동일해야 한다.
# 예시
-- 테이블 생성
CREATE TABLE hongong1 (toy_id INT, toy_name CHAR(4), age INT);
-- 테이블 수정
INSERT INTO hongong1 VALUES(1, '우디', 25);
  • 테이블이 가지고 있는 열중 입력하고 싶지 않을때는 입력할 열의 이름을 써주어야 한다. 이경우 생략한 열에는 아무것도 없다는 의미의 NULL값이 들어간다
# 예시
INSERT INTO hongog1 (toy_id, toy_name) VALUES (2, '버즈')
-- age 열에는 자동으로 NULL값이 배정됨
  • 열의 이름을 함께 명시할때는 열의 기본 순서는 상관없지만 VALUES의 값은 INTO다음 입력한 열의 순서에 맞추어 입력 해야한다.

다른 테이블의 데이터를 한번에 입력하기 : INSERT INTO ~SELECT

  • INSERT 할 테이블의 열 개수와 SELECT문의 열 개수는 같아야 한다.
INSERT INTO tablename_copy(col1, col3, ...)
	SELECT col1, col3, ... FROM tablename_original

데이터 삭제: DELETE

DELETE FROM tablename WHERE condition;
  • DELETE는 UPDATE와 거의 비슷하게 사용 할 수 있다. 
  • 행단위로 삭제한다.
  • DELETE절을 조건절인 WEHERE절 없이 사용하면 모든 행 데이터가 삭제된다
  • 여러 조건을 넣어서 지정된 행만 지울 수 있다
# 예시
-- city_popul테이블의 city_name열에서 New로 시작하는 데이터 상위 5개만 지우기
DELETE FROM city_popul
	WHERE city_name LIKE 'New%'
    LIMIT 5;

 

심화 형식

데이터 입력 자동 증가 값 : AUTO_INCREMENT

  • 열을 정의할때 1부터 증가하는 값을 입력한다.
  • AUTO_INCREMENT로 지정하는 열은 무조건 PRIMARY KEY로 지정
  • INSERT절을 사용하여 수정할때 AUTO_INCREMENT가 지정된 열은 NULL을 넣어 처리 하면 됨.
# AUTO_INCREMENT 예시
-- 테이블 생성
CREATE TABLE hongong2 (
	toy_id INT AUTO_INCREMENT PRIMARY KET,
    toy_name CHAR(4),
    age INT);
    
 -- AUTO_INCREMENT지정 이후 INSERT를 사용할때
 INSERT INTO hongong2 VALUES (NULL, '보핍', 25);
 INSERT INTO hongong2 VALUES (NULL, '슬링키', 22);
 INSERT INTO hongong2 VALUES (NULL, '렉스', 21);
  • 계속 입력하다가 마지막 자동 증가 번호를 확인 하기 위한 쿼리문
SELECT LAST_INSERT_ID();
  • 자동증가 번호를 바꾸고 싶을때 사용 하는 쿼리문 ALTER TABLE (테이블의 구조를 변형하는 SQL)
-- 자동 증가 번호 바꾸는 ALTER
ALTER TABLE hongong2 AUTO_INCREMENT=100;
-- 바로 이어서 INSERT구문을 사용하면 100부터 시작하는 ID번호를 부여한다
  • 자동 증가되는 수를 바꾸고 싶을때 사용하는 시스템 변수 @@시스템변수
-- 테이블 생성
CREATE TABLE hongong2 (
	toy_id INT AUTO_INCREMENT PRIMARY KET,
    toy_name CHAR(4),
    age INT);
 
 -- 시작 번호를 1000으로 지정
 ALTER TABLE hongong2 AUTO_INCREMENT=1000;
 
 -- 1000 부터 3씩 증가
 SET @@auto_increment-increment=3;
💡 시스템 변수란 MySql에서 자체적으로 가지고 있는 설정값이 저장된 변수.
👉 시스템 변수 값을 확인하려면 SELECT @@시스템변수
👉전체 시스템 변수의 종류를 알고 싶으면 SHOW GLOBAL VARIABLES

 

데이터 수정 : UPDATE

  • 기존에 입력되어있는 값을 수정하는 문법
UPDATE tablename
	SET col1 = val1, col2=val2, ....
    WHERE conditions
  • 한번에 여러조건의 여러열을 변경 할 수 있다
# 예시
-- city_popul 테이블의 city_name 이 New York인 열의 이름 변경 및 같은 행의 다른 열도 동시에 수정
UPDATE city_popul
	SET city_name = '뉴욕', population = 0
    WHERE city_name = 'New York'
  • 연산 함수 사용도 가능하다
  • WHERE절이 없어도 되는데, 대신 모든 행이 변경된다
# 예시
-- WHERE 절이 없는 경우 모든 행에 적용 된다, 함수를 사용하여 전체 값을 수정
UPDATE city_popul
	SET population = population / 10000;

대용량 테이블의 삭제 : DROP, TRUNCATE

  • 대용량의 테이블이 여러건 있을때 사용하는 방식
  • DROP : 테이블 자체를 삭제, 따라서 처리 시간이 매우 빠름 = 테이블 자체가 필요없을때 사용
DROP TABLE tablename1;
  • TRUNCATE : DELETE와 동일한 효과를 내지만 속도가 무척 빠름 = 테이블의 구조가 필요하고 내용이 필요없을때 사용
TRUNCATE TABLE tablename2;
  • DROP은 테이블을 삭제 하지만, DELETE와 TRUNCATE는 테이블을 남겨놓는다.
💡 DELETE를 사용할 경우 빅데이터의 경우 많은 정보를 삭제하기에는 위의 두가지 형식보다 처리속도가 느리다.