SQL

[도서] 혼자 공부하는 SQL [1일차-기본문법]

뇌장하드 2021. 12. 29. 19:14

기초 문법을 적어보려고 합니다.

select (선택하고 싶은 열) from (어디 테이블에서 가져올까?)

 

Use market_db;
select addr 주소, debut_date "데뷔 일자",mem_name from member;

별칭을 할수 있다.

특정한 조건만 조회하기 select ~ from ~ where

select 열_이름 from 테이블_이름 where 조건식;

 

Use market_db;
select * from member where mem_number=4;

관계 연산자는 >,<,>=,<=,= 등이 있습니다.

논리 연산자 AND, OR 

범위가 있는 경우에는 BETWEEN ~ AND를 사용하면 된다.

Use market_db;
select  *  from member where height between 163 and 165;

IN()

주소는 같이 크다 작다로 범위를 지정할수가 없으므로 데이터가 문자이면 or로 일일이 써줘야 한다.

하지만 in()을 사용하면 코드가 간결해 진다.

Use market_db;
select  *  from member where addr = '경기' or addr = '전남' or addr = '경남';

코드가 훨씬 간결해 진다. 

Use market_db;
select  *  from member where addr in('경기', '전남', '경남');

LIKE

문자열 일부를 검색하려면 like를 사용합니다.

이름이 우로 시작한 회원을 검색하고 싶으면 LIKE '우%' 라고 합니다. 제일 앞글자가 우이고 그뒤는 무엇이든 상관이 없다(%)라고 합니다.

Use market_db;
select  *  from member where mem_name like '우%';

꿀팁~~~~~~ 앞에 두글자는 상관없고 뒤는 핑크인 회원을 검색하고 싶으면 __핑크를 사용해줍니다. 

Use market_db;
select  *  from member where mem_name like '__핑크';

서브쿼리

select안에 또다른 select문이 존재를 하는것을 서브 쿼리라고 합니다.

이름이 에이핑크인 회원의 평균키보다 큰회원을 알고 싶다라고 하면 

Use market_db;
select  height from member where mem_name ='에이핑크';
select mem_name, height from  member where height>164;

첫번째로 에이핑크의 키를 알아내고 그값을 두번째 where조건문에다가 넣어줍니다. 

이작업을 하나의 쿼리로 작성을 하고 싶어서 서브쿼리로 찾아보겠습니다.

Use market_db;
select  height, mem_name from member where height>(select height from member where mem_name = '에이핑크');

ORDER BY

order by절은 결과의 순서를 조절을 해주는 절입니다.

 

Use market_db;
select  mem_id, mem_name, debut_date from member order by debut_date;

만약에 데뷔일자가 늦은 순으로 정렬을 하고 싶다면 DESC라고 끝에 붙혀줍니다. 기본값은 ASC입니다.

Use market_db;
select  mem_id, mem_name, debut_date from member order by debut_date desc;

orderby 와 where절을 같이 쓰고 싶으면 where 절 뒤에 order by 절이 나와야 합니다.

평균키가 164 이상인 회원들을 키가 큰 순서대로 정렬하여 출력을 해보겠습니다.

Use market_db;
select  mem_id, mem_name, debut_date, height from member where height >= 164  order by height desc;

 

만약에  트와이스와 잇지의 키가 같아서 잇지가 먼저 나왔습니다. 하지만 걸그룹의 세계에서는 데뷔 순서가 짱입니다.

 

Use market_db;
select  mem_id, mem_name, debut_date, height from member where height >= 164  
order by height desc, debut_date asc;

트와이스가 먼저 나온 모습을 볼수 있습니다.

LIMIT 

limit는 출력하는 개수를 제한하는 문법입니다.

회원을 조회하고 싶은데 3건만 조회를 하고 싶으면 

Use market_db;
select * from member limit 3;

하지만 아무이유 없이 출력을 제한하는건 말이 안되고 order by랑 사용을 하면 limit 시작,개수 로 출력을 할수 있습니다. 

위에 결과는 앞에 0이 생략된 limit 0,3이므로 0번째부터 3개를 출력해라라고 할수 있습니다.

 

DISTINCT

distinct는 중복된 값을 제외하고 출력을 해줍니다.

Use market_db;
select distinct addr from member

GROUP BY

group by는 그룹을 묶어 주는 역활을 해줍니다.

Use market_db;
select mem_id, amount from buy order by mem_id;

이런식으로 그룹이 묶이긴 하지만 amount의 합이나 평균 등등 그룹에 대한 계산을 하고 싶으면 group by를 사용합니다.

 

Use market_db;
select mem_id, sum(amount) from buy group by mem_id;

이번에는 회원이 구입한 총 금액을 알고 싶습니다.

Use market_db;
select mem_id as "회원 아이디", sum(price*amount) as "총 구매 금액" from buy group by mem_id;

count(*)은  null이여도 숫자를 카운팅 합니다. null없는것은 안세고 싶으면 count(열_이름)을 하면 됩니다.

SELECT count(phone1) "연락처가 있는 회원"  FROM market_db.member;

 

Having 

having절은  집계 함수에서 조건을 걸때 사용합니다. 

use market_db;
SELECT mem_id "회원 아이디", sum(price*amount) "총 구매 가격" 
	from buy where sum(price*amount) > 1000  group by mem_id;

이러면 에러가 나서 이때 사용하는 것이 having 절입니다.

 

use market_db;
SELECT mem_id "회원 아이디", sum(price*amount) "총 구매 가격" 
	from buy   group by mem_id having sum(price*amount) > 1000;

 

'SQL' 카테고리의 다른 글

[도서] 혼자 공부하는 SQL [2일차-데이터 변경 SQL문]  (0) 2021.12.30
[도서] 혼자 공부하는 SQL [1일차]  (0) 2021.12.29
SQL 기초 다지기  (0) 2021.12.29