이번에 듣게 된 '엑셀보다 쉬운 SQL' 강의에서 SQL 기본 문법에 대해 학습했다.
데이터베이스와 테이블을 설계하고 관리하는 DBA를 위한 강의가 아니라,
( 관계형 데이터베이스.. ERD ... Schema ... Entity ... )
단순히 데이터베이스 상에 있는 데이터를 검색해오는 기본적인 기능만 이용하게 해주는 입문자용 강의이다.
괜히 데이터베이스 상의 데이터를 Insert / Update / Delete 등의 작업으로, 데이터의 변경을 주지 않으면서
데이터베이스에서 데이터를 선택해서 가져온다는 의미인
SELECT문을 제대로 사용하여 내가 원하는 데이터를 뽑아올 수 있게 하는 것이 강의의 목표이다.
[1] SELECT Query
- DB의 CRUD 중, 'Read' 기능의 역할을 한다.
- 쿼리(Query)란, 직역하면 데이터베이스에게 '질문' 한다는 뜻이다.
즉, 데이터베이스에게 대답을 해달라는 것 = 명령을 내리는 것과 동일한 의미이다.
- Select 쿼리문은 1) 어떤 테이블에서 2) 어떤 필드의 데이터를 가져올지 로 구성된다.
ex)
select comment from checkins
where week in (1,3)
여기서 테이블은 : checkins
필드는 : comment
* where 은 select문을 통해 DB에서 데이터를 찾아올 때, 조건을 달아준다.
* where ~ in은 튜플() 안에 있는 값에 해당하는 데이터를 들고 오라는 의미이다.
[2] WHERE 절
- SELECT 쿼ㄹ문으로 가져올 데이터에 조건을 걸어주는 것.
- SELECT ~ WHERE로 사용.
ex1)
select * from point_users
where point > 20000;
ex2)
select * from users
where name = "황**";
ex3)
select * from orders
where course_title = "웹개발 종합반" and payment_method = "CARD"
[3] 각종 SQL 문들
1) 데이터베이스 상에 존재하는 릴레이션 = 테이블의 이름들을 보여주는 명령어
show tables;
2) 'orders' 라는 이름을 가진 테이블의 데이터를 전부 가져오기.
select * from orders;
3) 'orders' 테이블의 특정 필드만 가져와보기
select created_at, course_title, payment_method, email from orders;
[4] WHERE 절과 자주 같이 쓰는 문법
1) 같지 않음 ( != )
select * from orders
where course_title != '웹개발 종합반'
2) 범위 ( between )
select * from orders
where created_at between '2020-07-13' and '2020-07-15'
3) 포함 ( in )
select * from checkins c
where week in (1,3)
아래와 같은 방식도 가능.
select * from checkins c
where week in (1,2,3,4,5,6,7,8)
4) 패턴 ( like ) -> % : 어떤 문자열이든 상관 없다는 의미.
select * from users
where email like "%daum.net"
아래와 같은 방식도 가능. ( a%t => a 로 시작하고 중간에 뭐가 들어가도 되며, t 로 끝난다 )
select * from users u
where email like "a%t"
[5] 이외 유용한 문법
1) limit
-> 데이터가 너무 많아서 로드해오는데 시간이 걸릴 때.
테이블이 어떻게 생겼나 보는데 쓰임.. 쓸데없이 모든 데이터 로딩하지 않게!
select * from orders
where payment_method = 'kakaopay'
limit 5
2) distinct
-> 필드의 중복된 값을 제거하고 가져올 때 쓰는 문법.
select distinct(payment_method) from orders
3) count
-> 조건에 해당하는 데이터의 개수를 반환하는 문법.
select count(*) from orders
where payment_method = 'kakaopay'
distinct + count 두 개 합쳐서.
select count(distinct(name)) from users
=========================
[ Chrome 개발자 도구 폰트 사이즈 키우기 / 줄이기 ]
<Mac OS의 경우>
글자 크기 키우기 : Command =
글자 크기 줄이기 : Command -
=========================
interface가 다른 interface를 extends 키워드로 받을 수 있는지는 모르고 있었다.
public interface MemoRepository extends JpaRepository<Memo, Long> {
List<Memo> findAllByOrderByModifiedAtDesc();
}
이와 같이 사용할 수 있었다.