이 포스트는 2021.12~2022.09 기간동안 벨로그에 작성한 글을 티스토리에 옮겨 적은 것입니다.
n개의 데이터 뽑기
limit를 이용한다.
SELECT NAME FROM ANIMAL_INS
ORDER BY DATETIME
LIMIT 1
정렬한 다음에 맨 첫번째 데이터를 반환
SELECT NAME FROM ANIMAL_INS
ORDER BY DATETIME
LIMIT 6,3
7번째 행부터 3개의 데이터 반환
중복없이 데어터 뽑기
distinct를 이용한다.
SELECT distinct NAME from ANIMAL_INS
중복 없을때 몇 개 있을까?
SELECT count(distinct NAME) from ANIMAL_INS
group by에서의 조건절
group by에서 조건쓸때는 where 대신 having을 쓴다.
SELECT NAME, count(NAME) as counts from ANIMAL_INS
group by name having counts>=2
order by NAME
이름으로 묶어서 2개이상인 애들만 출력.
한창 sql할때는 당연하다가도 좀 오래 안보면 맨날 까먹어..
DATETIME 타입에 대해
DATETIME 타입을 분,시간등으로 쪼개 볼 수 있다.
DATETIME타입의 DATETIME 칼럼이 있을때...
SELECT minute(DATETIME) from ANIMAL_OUTS
SELECT hour(DATETIME) from ANIMAL_OUTS
이런식.
Null 데이터
이름이 null인 동물의 id 출력..
SELECT ANIMAL_ID from ANIMAL_INS where NAME is null
where NAME = null..이런식 절대 노노 is null을 기억하자
SELECT ANIMAL_ID from ANIMAL_INS where NAME is not null
null이 아닌 애들을 출력하려면 is not null
SELECT ANIMAL_TYPE, IFNULL(NAME,"No name"),SEX_UPON_INTAKE
from ANIMAL_INS
order by ANIMAL_ID
null인 애들을 다른 문자열로 대체하려면 IFNULL(칼럼명, 대체문자열)
특정 문자열이 포함되어 있는지 확인
where 칼럼 like '%[문자열]%' 을 쓰면 된다.
SELECT ANIMAL_ID, NAME from ANIMAL_INS
where NAME like '%el%' and ANIMAL_TYPE="Dog"
order by NAME
이름에 el이 있는 강아지 출력
SELECT ANIMAL_ID, NAME from ANIMAL_INS
where NAME like 'A%'
만약 %를 한쪽에만 쓰면..A로 시작하는 이름 가진 동물 출력. 문자 여러개일수도 있다. 'AB%' 이런식으로.. 특정 문자열로 끝나는 쿼리문을 작성할수도 있겠지.
SELECT ANIMAL_ID, NAME from ANIMAL_INS
where NAME like '__a'
언더바도 쓸 수 있다. 이렇게 쓰면 이름의 세번째 글자가 a인 애들을 출력한다. Gia..Kia..등
SELECT ANIMAL_ID, NAME from ANIMAL_INS
where NAME like '__a%'
%랑 조합하면? 3번째 글자가 a고 뒤에는 노상관. Diablo, Charlie 이런 애들도 같이 출력된다.
sql에서의 조건절
select *,
case when 조건 then 값
else 거짓일때 값
end as 별명
from 테이블명
case when ~ then ~ end을 기억하자. else와 as 별명은 없어도 되지만 end는 있어야 한다! select 칼럼명 뒤에 쉼표가 있는 것도 유의
SELECT ANIMAL_ID,NAME,
case when SEX_UPON_INTAKE like 'Intact %'
then 'X' else 'O'
end as '중성화'
from ANIMAL_INS
JOIN에 대하여...
select ~ from 테이블명1 Join 테이블명2 on ~
기본적인 형태는 위와 같다. on을 잘 기억하자. 테이블명.칼럼명 이렇게 쓰기 귀찮아서 테이블명 as 별명으로 줄이는 경우도 많은 듯 하다.
inner join
SELECT O.ANIMAL_ID,O.NAME from ANIMAL_OUTS as O
JOIN ANIMAL_INS as I
on I.ANIMAL_ID= O.ANIMAL_ID
교집합이라고 생각하면 된다. 그냥 냅다 join을 쓰면 inner join이 된다.두 테이블은 ANIMAL_ID라는 공통된 칼럼으로 연결되며, 둘 중 하나에 없는 애들은 출력되지 않는다. 겹치는 칼럼명이 있기 때문에 어떤 테이블의 칼럼인지 꼭 명시해 둔다. select절에서도 마찬가지.
outer join
outer join은 합집합이다. 두가지가 있다.
- LEFT OUTER
- RIGHT OUTER
A LEFT JOIN B 와 B RIGHT JOIN A는 완전히 같은 식이다.
inner join에는 left고 right고 없기 때문인지..outer란 말 없이 left join 하면 알아서 left outer join으로 알아듣는다.
SELECT O.ANIMAL_ID,O.NAME from ANIMAL_OUTS as O
left JOIN ANIMAL_INS as I
on I.ANIMAL_ID= O.ANIMAL_ID
where I.NAME is null and O.NAME is not null
where을 적절히 활용하면 이렇게 뽑아낼수도 있다.
full outer join이란것도 있는데 mysql에서는 지원하지 않는다.
select *
from A left join B
union
select *
from A right join B;
대신 union 키워드와 join문을 적절히 써서 full outer join처럼 구현할 수 있다.
(번외)테이블 생성
create table 테이블명(
필드명 타입,
필드명 타입,
PRIMARY KEY(필드명)
);
설마 이게 나올까 싶지만...기본적인 거니 복습해두자.
CREATE TABLE restList (
restname VARCHAR(255) NOT NULL,
resttype VARCHAR(80) DEFAULT NULL,
addr VARCHAR(255) DEFAULT NULL,
tel VARCHAR(80) DEFAULT NULL,
location VARCHAR(255) DEFAULT NULL,
PRIMARY KEY (restname)
) ;
더 구체적인 예시!
insert,delete,update
insert
INSERT INTO `student` VALUES ('2', 'leezche', '여자', '서울', '2000-10-26');
delete
DELETE FROM student WHERE id = 2;
update
UPDATE `student` SET name='이진경' WHERE id=1;
update 테이블명 set 칼럼명=값 where 조건을 기억하기..
끝으로... 명령어 마지막에 ;를 붙이는 걸 잊지 말자. 프로그래머스 환경에선 없어도 괜찮았지만 ;가 없다면 에러나는 플랫폼도 존재!
'개발 관련 공부 > TIL' 카테고리의 다른 글
코루틴 이해하기 (0) | 2022.09.19 |
---|---|
MVVM 패턴이란? (0) | 2022.09.19 |
동기와 비동기 (0) | 2022.09.18 |
인적성 수리 공식 모음 (0) | 2022.09.16 |
get과 post의 차이점 (0) | 2022.09.15 |
댓글