[1] SQL 기본문법 (1)

정창현·2023년 9월 20일
0

혼공SQL

목록 보기
1/5

1. SELECT

(1) SELECT~FROM~WHERE

SELECT 문은 구축이 완료된 테이블에서 데이터를 추출하는 기능을 한다. 기본형식은 아래와 같으며 그 순서를 지켜야한다.

select 열_이름
	from 데이터베이스_이름.테이블_이름
    where 조건식
    group by 열_이름
    having 조건식
    order by 열_이름
    limit 숫자;

SELECT 문의 열_이름에 해당하는 데이터를 조회한다. 열_이름 대신 *를 사용하면 모든 열의 데이터를 가져온다.

select * from ex_database.ex_table; --전부 조회
select ex_column1,  ex_column2 from ex_database.ex_table; --해당하는 열 조회

그리고 USE 문을 활용해 기본으로 사용하는 데이터베이스를 지정할 수 있다.

use ex_database; --데이터베이스 지정
select * from ex_table; --지정된 데이터베이스에서 테이블 조회

또한 열_이름의 해당하는 데이터 중 특정 조건에 해당하는 데이터만 조회할 수 있는데, WHERE 문이 그 기능을 수행한다. 또한 관계 연산자(<, >, ...)와 논리 연산자(and, or, ...), IN(), LIKE 등과 함께 사용할 수 있다.

--예시1) 연산자 활용
use market_db;
select mem_id, mem_name
	from member
    where height>=165 and mem_number>6;
--예시2) 연산자 활용
use market_db;
select *
	from member
    where height between 160 and 170;
--예시3) in 활용
select mem_name "이름", addr "주소"
	from market_db.member
    where addr in ('경기', '강원');
--예시4) like 활용
use market_db;
select *
	from member
    where mem_name like '에%' or mem_name like '__핑크';
--예시5) 서브 쿼리
use market_db;
select mem_name "이름", height "평균 키"
	from member
    where height > (select height from member where mem_name='뉴진스');





(2) SELECT ~ ORDER BY ~ LIMIT

결과의 정렬을 위한 ORDER BY, 개수를 제한하는 LIMIT, 중복된 데이터를 제거하는 DISTINCT 등을 SELECT 문과 함께 사용할 수 있다.

1) ORDER BY

ORDER BY는 기본적으로 오름차순(ASC)으로 정렬하며, 명령에 따라 내림차순(DESC)로 정렬할 수 있다. 또한 앞선 조건에 따라 먼저 정렬한다.

--예시) 키 큰 순서대로, 키가 같으면 데뷔 날짜가 오래된 순서(작은 순서)대로 정렬해서 조회
select *
	from member
    where height > 160
    order by height desc, debut_date asc;

2) LIMIT

LIMIT는 시작과 개수를 통해서 출력 개수를 제한한다.

--예시1) 첫번째 부터 2개 출력
select mem_name
	from member
    limit 2; -- 시작은 기본적으로 0으로 설정되어 있기 때문에 limit 0, 2;와 동일
--예시2) 두번째 부터 3개 출력
select mem_name
	from member
    limit 1, 3;
--예시2) 세번째 부터 4개 출력, offset 활용
select mem_name
	from member
    limit 4 offset 2;





(3) SELECT (DISTINCT)~ GROUP BY ~ HAVING

DISTINC는 중복된 결과를 제거하고, GROUP BY는 집계함수와 같이 쓰여 데이터를 그룹화한다. 특히 그룹화 할때의 조건은 WHERE이 아닌 HAVING을 사용한다.

1) DISTINCT

집합의 원소와 같다고 생각하면 편하다. 열_이름 앞에 붙여주면 된다.

--예시1)
select addr from member;

실행결과 : 경기, 경남, 서울, 경남, 전남, 서울 , 경북, 경기

--예시2)
select distinct addr from member order by addr;

실행결과 : 경기, 경남, 경북, 서울, 전남

2) GROUP BY ~ HAVING

집계함수(aggregate function)와 관련된 조건을 제한하여 그룹화한다. 집계 함수는 다음과 같다.

  • SUM() : 합계
  • AVG() : 평균
  • MIN() : 최소값
  • MAX() : 최대값
  • COUNT() : 행의 개수
  • COUNT(DISTINCT) : 중복 제외한 행의 개수
--예시) 연락처가 있는 회원 수
select count(phone1) "연락처 있는 회원 수" from member;
--예시) 총 구매금액 1000원을 넘긴 회원들의 아이디를 총 구매금액이 큰 순서대로 조회
select mem_id "회원 아이디", sum(price*amount) "총 구매금액"
	from buy
    group by mem_id
    having sum(price*amount) > 1000
    order by sum(price*amount) desc;







2. 데이터 변경

(1) INSERT INTO ~ VALUES

테이블에 데이터를 삽입하는 명령이다.

--예시1) 테이블에 데이터 삽입
use market_db;
create table hongong1 (toy_id int, toy_name char(4), age int);
insert into hongong1 values (1, '우디', 25);
insert into hongong1 (toy_name, toy_id) values ('버즈', 2);
--예시2) toy_id를 auto_increment로 지정한 테이블
create table hongong2 (
	toy_id int auto_increment primary key, --꼭 primary key로 지정해야 함
    toy_name char(4),
    age int);
insert into hongong2 values (null, '보핍', 25);
insert into hongong2 values (null, '슬링키', 22);
insert into hongong2 values (null, '렉스', 21);
--예시3) auto_increment의 시작을 100으로 증가값을 3으로 바꾸기
alter table hongong2 auto_increment=100;
set @@auto_increment_increment=3; --시스템 변수는 앞에 @@ 붙임
--예시4) 다른 테이블의 데이터를 한 번에 입력
create table city_popul (city_name char(35), popul int);
insert into city_popul
	select Name, Population from  world.city;





(2) UPDATE ~ SET

기존에 입력되어 있는 값을 수정하는 명령이다.

--예시1) city_name열의 'Seoul'인 행의 city_name을 '서울'로 수정
update city_popul
	set city_name = '서울'
    where city_name = 'Seoul';
--예시2) city_name열의 'New York'인 행의 city_name을 '뉴욕'으로, popul을 0으로 수정
update city_popul
	set city_name = '뉴욕', popul = 0
    where city_name = 'New York';
--예시3) 모든 행의 city_name을 '서울'로 수정
update city_popul
	set city_name = '서울';





(3) DELETE FROM

데이터를 행 단위로 삭제하는 명령이다.

--예시1) 'New'로 시작하는 행 상위 5개만 삭제
delete from city_popul
	where city_name like 'New%'
    limit 5;
--예시2) 모든 행 삭제
truncate table city_popul;

TRUNCATE 문은 DELETE FROM 문을 WHERE 없이 사용하는 것과 동일한 효과이지만 속도는 전자가 훨씬 빠르다. DROP 문은 테이블을 삭제하는 명령어로 앞선 두 명령어와 다르다. TRUNCATE 문은 빈 테이블이 남지만, DROP 문은 테이블이 아예 사라진다.




저자 우재남, 혼자 공부하는 SQL, 한빛미디어

profile
안녕하세요. 반갑습니다. 모켈레-음베음베

0개의 댓글