데이터베이스는 2차 프로젝트때 쓰인 데이터(bearbnb)와 책에서 제공하는 데이터(sample)를 이용함
select * from <테이블명>; //*은 모든 컬럼(열)을 의미한다.
select id, name from users; //users테이블에서 id, name 가져오기
// 지정한 컬럼 순서대로 표시됨(id, name)
select * from <테이블명> where <조건>;
// 조건식을 만족한(참) 행만 결과값으로 반환한다.
select * from users where name='서진호';
select * from users where birthdate='1980-07-08';
select * from users where country_id=6;
select * from users where country_id<>1;
//문자열형, 시간날짜형은 ' '으로 감싸기
// = 같다, <>같지않다
select * from users where profile_photo is null;
// null값을 검색할 경우 is null쓰기!
select * from users where profile_photo=null; //잘못된 예
Empty set (0.00 sec)
and 먼저 계산됨
select * from users where gender='여자' or country_id<>1 and is_email_valid=1;
//(country_id<>1 and is_email_valid=1)먼저 실행한 뒤
// or gender='여자' 실행
country_id가 1이 아니고 is_email_valid가 1인 user이거나 또는 gender='여자'인 경우
select * from users where name like '김%';
// name컬럼에 '김'이 들어간(매칭되는) 데이터 검색
?% 전방일치
%?% 중간일치
%? 후방일치
select * from <table명> where <조건식> order by <컬럼명>;
// 지정된 커럼명에 따라 행 순서가 변경된다. default 오름차순
select * from users where gender='여자' order by birthdate;
// 여자 users를 생년월일 오름차순(나이많은->젊은)으로 정렬
select * from users where gender='여자' order by birthdate desc; // 내림차순 정렬
desc 내림차순
asc 오름차순
null값인 경우, 가장 작은 값으로 취급한다.
select * from <table명> order by <컬럼1>, <컬럼2>;
// 먼저 <컬럼1>로 정렬한 뒤 <컬럼2> 정렬
// order by <컬럼1>, <컬럼2>와 order by <컬럼2>, <컬럼1>는 다름
select <컬럼명> from <table명> limit <표시할 행 수>[offset 시작행];
// offset에 의한 시작 위치 지정은 limit뒤에 기술한다.
// '시작할 행-1'기억하기! ex)첫 번째 행부터 5개씩 가져온다면 1-1로 위치는 0이 되어 offset은0으로 지정하면 된다.
// ~limit 5 (offset0은 생략가능);
// ~limit 5 offset5; ->6번째 행부터 5개씩 정렬
select <컬럼명> from <table명> where <조건식> order by <컬럼명> limit <표시할 행 수>;
// limit은 반환할 행수를 제한하는 기능, where구로 검색한 뒤 order by로 정렬한 뒤에 최종적으로 처리된다.
서버내부 처리 순서
where구 -> select구 -> order by구
컬럼명이 id, price, quantity인 table1이 있다.
select *, price*quantity as '금액' from table1;
// price*quantity, 가격과 수량을 곱한 값을 새로운 컬럼 생성
// 연산하여 생긴 컬럼은 as와 함께 별명을 붙일 수 있다.(as생략가능)
round()
를 이용하여 반올림하기, 기본적으로 소수점 첫째 자리를 기준으로 반올림한 값을 반환한다.
select amount, round(amount, 1) from table1;
// amount열에 있는 값들을 소수점 둘째자리에서 반올림
concat()
를 이용하여 단위 연결하기
mysql> select *, concat(quantity,unit) as du from sample35;
+------+-------+----------+------+-------+
| no | price | quantity | unit | du |
+------+-------+----------+------+-------+
| 1 | 100 | 10 | 개 | 10개 |
| 2 | 230 | 24 | 통 | 24통 |
| 3 | 1980 | 1 | 장 | 1장 |
+------+-------+----------+------+-------+
substring()
은 문자열의 일부분을 계산해서 반환해주는 함수이다.
mysql> select id,name,birthdate,substring(birthdate,1,4) as year from users where name='조경숙';
+----+-----------+------------+------+
| id | name | birthdate | year |
+----+-----------+------------+------+
| 5 | 조경숙 | 2017-06-25 | 2017 |
+----+-----------+------------+------+
trim()
은 문자열의 앞뒤로 여분의 스페이스가 있을 경우 이를 제거해주는 함수이다.
character_length()
는 문자열의 길이를 계산하여 반환해주는 함수이다. char_length()
로 줄여서 쓸 수 있다.
case when <조건식1> then <식1> [when <조건식2> then <식2>] [else <식3>] end
when에는 참과 거짓을 반환할 수 있는 조건식을 쓴다. when절이 참일 경우 then절에 쓰인 식이 처리된다. 조건절에 만족하지 못할 경우 else에 쓰인 식이 처리됨(else가 생력되어 있을 경우 null값으로 처리됨)
mysql> select id, title, story_profile, case when story_profile=1 then "저장" else "저장안함" end as "저장여부" from stories limit 5;
select <컬럼명> ,case <조건문이 쓰일 컬럼명> when <조건식> then <식> else <식2> end as <지정할 컬럼명> from <테이블명>;
mysql> select id, title, story_profile, case story_profile when 1 then "저장" else "저장안함" end as "저장여부" from stories limit 5;
+----+------------------------+---------------+--------------+
| id | title | story_profile | 저장여부 |
+----+------------------------+---------------+--------------+
| 1 | 성현님 생일파티 | 0 | 저장안함 |
| 2 | 화이링! | 0 | 저장안함 |
| 3 | 화이링! | 0 | 저장안함 |
| 4 | 우리팀 화이링! | 1 | 저장 |
| 5 | story save! | 1 | 저장 |
+----+------------------------+---------------+--------------+
null값을 변환하는 경우 쓰이는 식
mysql> select * from sample37;
+------+
| a |
+------+
| 1 |
| 2 |
| NULL |
+------+
mysql> select a,coalesce(a,0) as"null값 바꾸기" from sample37;
+------+-------------------+
| a | null값 바꾸기 |
+------+-------------------+
| 1 | 1 |
| 2 | 2 |
| NULL | 0 |
+------+-------------------+
우와... 갓정민! sql 정복하고 nosql도 공부 고고~~~