select
select 열 이름(들) from 테이블명;
=테이블명에서 열 이름(들)을 가지고 와라
전체출력-select * from 테이블명
응용-select 열이름1,열이름2 from 테이블명
(선택한 열이름들을 출력한다.)
1.숫자 제한
select 열이름 from 테이블명 limit 숫자;
(상위 숫자 갯수대로 출력된다.)
2.정렬
(내림차순)select * from 테이블명 order by 열이름 desc
(오름차순)select * from 테이블명 order by 열이름 asc<—default
3.중복제거
select distinct 중복을 제거하고 싶은 열이름 from 테이블명
where
select 열이름 from 테이블명 where 조건
테이블명에서 열이름을 가지고 오는데 조건에 맞는것만 가지고 와라
1.논리연산자
select 열이름1,열이름2 from 테이블명 where 열이름1또는2 부등호 숫자
2.목록포함
select 열이름1,열이름2 from 테이블명 where 열이름1또는2 in (‘포함하는 숫자1’,’포함하는 숫자2’)
select 열이름1,열이름2 from 테이블명 where 열이름1또는2 not in (‘포함하는 문자1’,’포함하는 문자2’)
2.문자열 포함
select 열이름1,열이름2 from 테이블명 where 열이름1또는2 like ‘%문자열%’
만약 문자열 앞에 %를 빼면 그 앞에 아무것도 없는 것을 출력하라는 의미가 된다.
그렇다면 문자열 뒤에 %를 뺀다면 그 뒤에 아무것도 없는 것을 출력한다는 의미가 된다.
3.and or
select 열이름1,열이름2,열이름3 from 테이블명 where 열이름1또는2또는3 like ‘%문자열%’ and 문자열1또는2또는3 부등호 숫자
select 열이름1,열이름2,열이름3 from 테이블명 where 열이름1또는2또는3 like ‘%문자열%’ or 문자열1또는2또는3 부등호 숫자
group by(참조)
하나,예를 들어보자면
mysql에서 유혈별로 갯수를 가져오고 싶은데 단순히 count 함수로 데이터를 조회하면 전체 갯수만 가져온다.
이렇게 유형별로 갯수를 알고 싶을 때는 컬럼에 데이터를 그룹화 할 수 있는 group by를 사용하는 것이다.
group by를 사용할 때는 두가지를 기억해야 한다.
특정 컬럼을 그룹화 하는 group by
특정 컬럼을 그룹화한 결과에 조건을 거는 having
where랑 having을 헷갈리는 경우가 많은데 where는 그룹화 하기 전이고 having은 그룹화 후에 조건을 거는 것이다.
사용법
컬럼 그룹화
SELECT 컬럼 FROM 테이블 GROUP BY 그룹화할 컬럼
조건 처리 후에 컬럼 그룹화
SELECT 컬럼 FROM 테이블 WHERE 조건식 GROUP BY 그룹화할 컬럼
컬럼 그룹화 후에 조건 처리
SELECT 컬럼 FROM 테이블 GROUP BY 그룹화할 컬럼 HAVING 조건식
조건 처리 후에 컬럼 그룹화 후에 조건 처리
SELECT 컬럼 FROM 테이블 WHERE 조건식 GROUP BY 그룹화할 컬럼 HAVING 조건식
ORDER BY가 존재하는 경우
SELECT 컬럼 FROM 테이블 (WHERE 조건식)
GROUP BY 그룹화할 컬럼 (HAVING 조건식) ORDER BY 컬럼1 (컬럼2,컬럼3…)
select 열이름,통계함수 from 테이블명 group by 열이름
select 열이름1,count(열이름2) from 테이블명 group by 기준이 되는 열이름1
select 열이름1,count(열이름2) from 테이블명 group by 기준이 되는 열이름1 having count(열이름2) 부등호 숫자
join

select 열이름 from 테이블명1 inner join 테이블명2 on 테이블1.열이름 부등호 테이블2.열이름
테이블1과 테이블2 중 열이름 값이 같은 정보를 모두 합쳐라
select 테이블명1 축약.열이름1,테이블명2 축약.열이름2
from 테이블1 as 테이블명1 축약
inner join 테이블2 as 테이블명2 축약
on 테이블명2축약.열이름2 부등호 테이블명1축약.열이름1
left join 테이블2 as 테이블명2 축약
on 테이블명2축약.열이름2 부등호 테이블명1축약.열이름1
subquery(참조)
서브쿼리란 부모 쿼리 안에 작성하는 내부의 SELECT 쿼리이며 주로 부모 쿼리의 FROM과 WHERE의 조건으로 사용한다.
서브쿼리라고 해서 특별한 문법이 있는 것이 아니라 SELECT를 괄호()로 묶어서 가독성을 높인다.
DELETE FROM items WHERE id = (SELECT MIN(id) FROM products);
부모 쿼리:DELETE FROM items WHERE id=()
서브 쿼리:(SELECT MIN(id)) FROM products)
서브 쿼리의 결과를 items 테이블에 추가하는 예제이다.
INSERT INTO items (SELECT * FROM products);
INSERT 하녀는 items 테이블의 컬럼들과 서브 쿼리의 결과 컬럼들이 같아야 에러가 발생하지 않는다.
이 방식은 데이터의 복사나 이동을 할 때 사용할 수 있다.
서브 쿼리는 흔히 사용했던 SELECT 쿼리와 같은 문법으로 사용할 수 있다.
다음은 서브 쿼리에 정렬을 한 후 그 데이터를 기반으로 SELECT 쿼리를 수행하는 예제이다.
SELECT * FROM(SELECT * FROM products ORDER BY no DESC) AS A WHERE A.no <=3;
서브 쿼리의 결과가 하나의 테이블 역할을 할 수 있으므로 별칭(alias)도 사용할 수 있다.
서브 쿼리의 종류
서브 쿼리는 사용