SQL 첫걸음 정리1

jm_yoon·2021년 4월 14일
0

데이터베이스는 2차 프로젝트때 쓰인 데이터(bearbnb)와 책에서 제공하는 데이터(sample)를 이용함

MySQL

SQL에서의 "Hello World"

select * from <테이블명>; //*은 모든 컬럼(열)을 의미한다.

select id, name from users; //users테이블에서 id, name 가져오기
// 지정한 컬럼 순서대로 표시됨(id, name)

where 조건문

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, or 조합하기

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가 1user이거나 또는 gender='여자'인 경우

like 패턴 매칭

select * from users where name like '김%';
// name컬럼에 '김'이 들어간(매칭되는) 데이터 검색

?% 전방일치
%?% 중간일치
%? 후방일치

order by 정렬하기

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>는 다름

limit 결과 행 제한하기

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 함수

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문으로 데이터 변환하기

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 | 저장         |
+----+------------------------+---------------+--------------+

coalesce

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 |
+------+-------------------+
profile
Hello!

1개의 댓글

comment-user-thumbnail
2021년 4월 18일

우와... 갓정민! sql 정복하고 nosql도 공부 고고~~~

답글 달기