기초 문법을 적어보려고 합니다.
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 |