SELECT 열명 FROM 테이블명 LIMIT 행수
**LIMIT을 사용할땐 where , order by 이후에 사용해야한다.
**같이 사용 할 경우**
[실습] (샘플 33) 3행까지 출력하기
--> select no from sample33 limit 3;
[실행 결과]
mysql> select no from sample33 limit 3;
+------+
| no |
+------+
| 1 |
| 2 |
| 3 |
+------+
--------------------------------------------------------------------------
[실습2] 아래와 같이 구현하기 !
--> 행을 내림차순으로 정렬 한후, LIMIT을 이용해 3행만 출력
+------+
| no |
+------+
| 7 |
| 6 |
| 5 |
+------+
[코드]
--> select * from sample33 order by no DESC limit 3;
--------------------------------------------------------------------------
[실습3] LIMIT OFFSET을 이용하여 아래와 같이 출력 하기
*리밋으로 3개를 가져오기 offset은 시작 지점
+------+
| no |
+------+
| 4 |
| 5 |
| 6 |
+------+
[코드]
--> select * from sample33 order by no asc limit 3 offset 3;
--------------------------------------------------------------------------
<수치 연산> (파이썬과 동일)
연산 우선순위는, 곱셈 나눗셈 ,나머지(%)가 우선순위로 계산되고
+ , -가 그 다음 순위로 계산된다 .
- SELECT 식 1 , 식 2 ... from 테이블명
[실습 아래 표 구현]
1) 아래 표 구현
+------+-------+----------+------------------+
| no | price | quantity | price * quantity |
+------+-------+----------+------------------+
| 1 | 100 | 10 | 1000 |
| 2 | 230 | 24 | 5520 |
| 3 | 1980 | 1 | 1980 |
+------+-------+----------+------------------+
-->select *, price * quantity from sample34;
--------------------------------------------------------------------------
2) 아래 표 구현
+------------------+
| price * quantity |
+------------------+
| 1000 |
| 5520 |
| 1980 |
+------------------+
[코드]
--> select price * quantity from sample34;
[실습2 아래 표 구현] amount 열에 price * quantity 담아서 모두 출력
**as를 이용 한다 (생략 가능)
+------+-------+----------+--------+
| no | price | quantity | amount |
+------+-------+----------+--------+
| 1 | 100 | 10 | 1000 |
| 2 | 230 | 24 | 5520 |
| 3 | 1980 | 1 | 1980 |
+------+-------+----------+--------+
--> select *, price * quantity as amount from sample34;
--------------------------------------------------------------------------
[실습 2-1 아래 표 구현] amount 테이블에 price * quantity 담아서 출력
+--------+
| amount |
+--------+
| 1000 |
| 5520 |
| 1980 |
+--------+
[코드]
--> select price * quantity as amount from sample34;
--------------------------------------------------------------------------
[실습] 아래와 같이 구현하기
--> 숫자를 넣게 되면 int()이기 때문에 '을 붙여 문자열로 만들어야한다.
+------+
| 1000 |
+------+
| 1000 |
| 5520 |
| 1980 |
+------+
[코드]
--> select price * quantity as '1000' from sample34;
--------------------------------------------------------------------------
[실습] 아래 표 구현
+------+-------+----------+--------+
| no | price | quantity | amount |
+------+-------+----------+--------+
| 2 | 230 | 24 | 5520 |
+------+-------+----------+--------+
[코드]
--> select *, price * quantity as amount from sample34 where price * quantity >=2000;
#where 다음에 amount를 이용하면 오류가 발생한다.
--FROM > WHERE > SELECT > 테이블 > 행 > 열 순서로 실행된다.
--------------------------------------------------------------------------
[실습] 아래 표 구현
+------+-------+----------+------------------+
| no | price | quantity | price * quantity |
+------+-------+----------+------------------+
| 1 | 100 | 10 | 1000 |
| 2 | 230 | 24 | 5520 |
| 3 | 1980 | 1 | 1980 |
+------+-------+----------+------------------+
[코드]
--> select *, price * quantity from sample34 order by no ASC;
[실습2] 아래 표 구현
+------+-------+----------+------------------+
| no | price | quantity | price * quantity |
+------+-------+----------+------------------+
| 3 | 1980 | 1 | 1980 |
| 2 | 230 | 24 | 5520 |
| 1 | 100 | 10 | 1000 |
+------+-------+----------+------------------+
[코드]
--> select *, price * quantity from sample34 order by no DESC;
[실습3] 아래 표 구현
+------+-------+----------+------------------+
| no | price | quantity | price * quantity |
+------+-------+----------+------------------+
| 2 | 230 | 24 | 5520 |
| 3 | 1980 | 1 | 1980 |
| 1 | 100 | 10 | 1000 |
+------+-------+----------+------------------+
[코드]
--> select *, price * quantity from sample34 order by price * quantity DESC;
--------------------------------------------------------------------------
<함수명(인수1, 인수2)>
-부가세 계산
부가세 5% ==> 1.05
소수점 발생시 반올림
--------------------------------------------------------------------------
[실습 ] 아래 표 구현
+---------+
| amount |
+---------+
| 5961.60 |
| 2138.40 |
| 1080.00 |
+---------+
[코드]
--> select * from sample341;
--------------------------------------------------------------------------
[실습] 아래 표 구현
+------------+
| new_amount |
+------------+
| 5962 |
| 2138 |
| 1080 |
+------------+
[코드]
--> select round(amount) as new_amount from sample341;
--------------------------------------------------------------------------
[실습] 아래 표 구현 (소수점 뒷자리)
+---------+-----------------+
| amount | ROUND(amount,1) |
+---------+-----------------+
| 5961.60 | 5961.6 |
| 2138.40 | 2138.4 |
| 1080.00 | 1080.0 |
+---------+-----------------+
[코드]
--> select amount, ROUND(amount,1) from sample341;
--------------------------------------------------------------------------
[실습] 반올림 100단위로 표현
+---------+------------------+
| amount | round(amount,-2) |
+---------+------------------+
| 5961.60 | 6000 |
| 2138.40 | 2100 |
| 1080.00 | 1100 |
+---------+------------------+
ㄴㅍ
--> select amount, round(amount,-2) from sample341;
--------------------------------------------------------------------------
[실습2] 반올림 10 단위로 표현
+---------+------------------+
| amount | round(amount,-1) |
+---------+------------------+
| 5961.60 | 5960 |
| 2138.40 | 2140 |
| 1080.00 | 1080 |
+---------+------------------+
[코드]
--> select amount, round(amount,-1) from sample341;
--------------------------------------------------------------------------
[실습1] 올림과 버림
+---------+--------------------+
| amount | TRUNCATE(amount,0) |
+---------+--------------------+
| 5961.60 | 5961 |
| 2138.40 | 2138 |
| 1080.00 | 1080 |
+---------+--------------------+
[코드]
--> select amount, TRUNCATE(amount,0) from sample341;
# 0은 소수점 첫번째 자리에서 내림
--------------------------------------------------------------------------
[실습2]
+---------+--------------------+
| amount | TRUNCATE(amount,1) |
+---------+--------------------+
| 5961.60 | 5961.6 |
| 2138.40 | 2138.4 |
| 1080.00 | 1080.0 |
+---------+--------------------+
[코드]
--> select amount, TRUNCATE(amount,1) from sample341;
# 1은 소수점 두번째 자리에서 내림
--------------------------------------------------------------------------
여러 함수 사용해보기 !
(사인, 코사인, 탄젠트 , 제곱근 , 로그값 )
[코드]
--> select amount, sin(amount), cos(amount), tan(amount), SQRT(amount),log(amount) from sample341;
[실행 결과]
+---------+---------------------+---------------------+---------------------+--------------------+-------------------+
| amount | sin(amount) | cos(amount) | tan(amount) | SQRT(amount) | log(amount) |
+---------+---------------------+---------------------+---------------------+--------------------+-------------------+
| 5961.60 | -0.9098226517295911 | 0.4149972799907672 | -2.192358108346717 | 77.21139812229798 | 8.69309418040727 |
| 2138.40 | 0.8545049723865635 | -0.5194432136111111 | -1.6450402084303701 | 46.24283728319447 | 7.667813164824709 |
| 1080.00 | -0.6502191365954637 | 0.7597467172716508 | -0.8558367174398398 | 32.863353450309965 | 6.984716320118266 |
+---------+---------------------+---------------------+---------------------+--------------------+-------------------+
--------------------------------------------------------------------------
#소수점 지우기 ROUND 이용
[코드]
--> select amount, round(sin(amount)), round(cos(amount)), round(tan(amount)), round(SQRT(amount)),round(log(amount)) from sample341;
[실행 결과]
+---------+--------------------+--------------------+--------------------+---------------------+--------------------+
| amount | round(sin(amount)) | round(cos(amount)) | round(tan(amount)) | round(SQRT(amount)) | round(log(amount)) |
+---------+--------------------+--------------------+--------------------+---------------------+--------------------+
| 5961.60 | -1 | 0 | -2 | 77 | 9 |
| 2138.40 | 1 | -1 | -2 | 46 | 8 |
| 1080.00 | -1 | 1 | -1 | 33 | 7 |
+---------+--------------------+--------------------+--------------------+---------------------+--------------------+
--------------------------------------------------------------------------
<문자열 연산>
연산자/ 함수
[문자열 결합 아래 모두 동일]
--------------------------------
+ -->
|| -->
CONCAT --> CONCAT('ABC','1234') = ABC1234
--------------------------------------------------------------------------
[실습1] 아래 표 구현 샘플35 이용
+------+-------+----------+------+-----------------------+
| no | price | quantity | unit | CONCAT(quantity,unit) |
+------+-------+----------+------+-----------------------+
| 1 | 100 | 10 | 개 | 10개 |
| 2 | 230 | 24 | 통 | 24통 |
| 3 | 1980 | 1 | 장 | 1장 |
+------+-------+----------+------+-----------------------+
[코드]
--> select *, CONCAT(quantity,unit) from sample35;
--------------------------------------------------------------------------
+-----------------------+
| concat(quantity,unit) |
+-----------------------+
| 10개 |
| 24통 |
| 1장 |
+-----------------------+
[코드]
--> select concat(quantity,unit) from sample35;
--------------------------------------------------------------------------
+------+-------+----------+
| no | price | quantity |
+------+-------+----------+
| 1 | 100 | 10개 |
| 2 | 230 | 24통 |
| 3 | 1980 | 1장 |
+------+-------+----------+
[코드]
--> select no,price,CONCAT(QUANTITY,unit) as 'quantity' from sample35;
--------------------------------------------------------------------------
[아래표 구현 샘플21]
mysql> select SUBSTRING(address, 1, 5) from sample21;
#주소 목록 1부터 5개 가져온다.
+--------------------------+
| SUBSTRING(address, 1, 5) |
+--------------------------+
| 대구광역시 |
| 대구광역시 |
| 서울특별시 |
+--------------------------+
--------------------------------------------------------
mysql> select SUBSTRING(address,3,3) from sample21;
#주소 시작 3번째부터 3개 가져온다.
+------------------------+
| SUBSTRING(address,3,3) |
+------------------------+
| 광역시 |
| 광역시 |
| 특별시 |
+------------------------+
--------------------------------------------------------
[실습] 아래 코드 구현 후 결과 이해
select trim(address) from sample21; # 한방에 정렬 쫚
select CHARACTER_LENGTH(address) from sample21; # 문자열길이
select CHARACTER_LENGTH('english')
select OCTET_LENGTH('한글') #인코딩 타입에 따라 몇 byte인지 알려준다.
#띄어쓰기에 따라 같은 문자열도 byte가 달라질 수 있다.
select OCTET_LENGTH('english')
--------------------------------------------------------
< 날짜 연산 >
-- > SELECT CURRENT_TIMESTAMP;
#현재 날짜 출력하기(기준: 내 PC기준)
+---------------------+
| CURRENT_TIMESTAMP |
+---------------------+
| 2022-09-16 12:11:20 |
+---------------------+
--------------------------------------------------------------------------
SELECT CURRENT_DATE + INTERVAL 1 DAY; #현재 날짜 + 1일
+-------------------------------+
| CURRENT_DATE + INTERVAL 1 DAY |
+-------------------------------+
| 2022-09-17 |
+-------------------------------+
SELECT CURRENT_DATE + INTERVAL 30 DAY; #현재 날짜 + 30일
+--------------------------------+
| CURRENT_DATE + INTERVAL 30 DAY |
+--------------------------------+
| 2022-10-16 |
+--------------------------------+
SELECT CURRENT_DATE - INTERVAL 30 DAY; #현재 날짜 -30일
+--------------------------------+
| CURRENT_DATE - INTERVAL 30 DAY |
+--------------------------------+
| 2022-08-17 |
+--------------------------------+
SELECT DATEDIFF('2020-03-22','2020-02-03'); #3/22~2/3까지 일수
+-------------------------------------+
| DATEDIFF('2020-03-22','2020-02-03') |
+-------------------------------------+
| 48 |
+-------------------------------------+
--------------------------------------------------------------------------
<CASE 문으로 데이터 변환하기>
CASE WHEN 조건식1 THEN 식1
[WHEN 조건식2 THEN 식2 ...]
[ELSE 식3]
END
예)
1 > 남자
2 > 여자
CASE
WHEN 1 THEN '남자'
WHEN 2 THEN '여자'
END
--------------------------------------------------------------------------
[실습] NULL을 0으로 바꾸기
mysql> SELECT a, CASE WHEN a IS NULL THEN 0
-> ELSE a
-> END AS 'a(null=0)' FROM sample37;
[실행 결과]
+------+-----------+
| a | a(null=0) |
+------+-----------+
| 1 | 1 |
| 2 | 2 |
| NULL | 0 |
+------+-----------+
--------------------------------------------------------------------------
[실습] a에 있는 NULL 값을 100으로 바꾸기
mysql> SELECT A, COALESCE(A,100) FROM SAMPLE37;
+------+-----------------+
| A | COALESCE(A,100) |
+------+-----------------+
| 1 | 1 |
| 2 | 2 |
| NULL | 100 |
+------+-----------------+
--------------------------------------------------------------------------
<검색 CASE 문>
[실습2] A에 1은 , 남자 2는 여자로 바꾸기
* 숫자를 문자로 바꾸는건 디코드 ,
* 문자를 숫자로 바꾸는건 인코드 라고 한다.
첫번째 코드 > SELECT A, CASE WHEN A = 1 THEN '남자'
-> WHEN A = 2 THEN '여자'
-> END '성별'
-> FROM SAMPLE37;
+------+------+
| A | 성별 |
+------+------+
| 1 | 남자 |
| 2 | 여자 |
| NULL | NULL |
+------+------+
--------------------------------------------------------------------------
<단순 case 문>
두번째 코드> SELECT A,
-> CASE A
-> WHEN 1 THEN '남자'
-> WHEN 2 THEN '여자'
-> END '성별'
-> FROM SAMPLE37;
+------+------+
| A | 성별 |
+------+------+
| 1 | 남자 |
| 2 | 여자 |
| NULL | NULL |
+------+------+
--------------------------------------------------------------------------
NULL값을 0 으로 바꾼다.
#null값을 수정 하기 위해선 검색 CASE 문을 사용해야 한다.
SELECT A, CASE WHEN A = 1 THEN '남자'
-> WHEN A = 2 THEN '여자'
-> WHEN A IS NULL THEN 0
-> END '성별'
-> FROM SAMPLE37;
+------+------+
| A | 성별 |
+------+------+
| 1 | 남자 |
| 2 | 여자 |
| NULL | 0 |
+------+------+
--------------------------------------------------------------------------
1. 정렬에 사용 되는 구 ? > order by
2. 내림차순 오름차순 ? > 내림차순 DESC / 오름차순 ASC
3. 검색결과 행제한에 사용 ? >limit
4.열에 별명 붙이는 방법 ? > as
5. 문자열 합치기 함수 ? > CONCAT , + , ||
6. MYSQL에서 사용하는 날짜 확인 ? > DATEDIFF
7. 데이터 변환 ?> 검색 케이스 , 단순 케이스
--------------------------------------------------------------------------
<INSERT>
표의 구조를 바꿀 순 없지만, 행은 추가가 가능하다.
* 열은 안됨
INSERT INTO 테이블명(열1,열2, ...) VALUES(값1, 값2)
--------------------------------------------------------------------------
mysql> select * from sample41;
** INSERT INTO를 이용해서 행 추가 하기!
mysql> INSERT INTO sample41
-> VALUES(1,'ABA','2014-01-25')
-> ;
[실행 결과]
+----+------+------------+
| no | a | b |
+----+------+------------+
| 1 | ABA | 2014-01-25 |
+----+------+------------+
--------------------------------------------------------------------------
[실습2] 샘플41에 NO = 3, A,B 모두 NULL인행 추가
mysql> INSERT INTO SAMPLE41
-> VALUES (3,NULL,NULL);
+----+------+------------+
| no | a | b |
+----+------+------------+
| 0 | NULL | NULL |
| 1 | ABA | 2014-01-25 |
| 3 | NULL | NULL |
+----+------+------------+
--------------------------------------------------------------------------
[실습3] 샘플41에 A는 XYZ , NO는 2 인 행 추가
MYSQL>
INSERT INTO SAMPLE41(A, NO) VALUES('XYZ',2);
+----+------+------------+
| no | a | b |
+----+------+------------+
| 2 | XYZ | NULL |
+----+------+------------+
--------------------------------------------------------------------------
[실습4] 샘플411에 NO =2, D=DEFAULT 행 추가
# default를 추가하면 0이 추가 된다.
INSERT INTO SAMPLE411 VALUES(2,DEFAULT);
[실습5] 샘플411에 NO =3 행 추가
INSERT INTO SAMPLE411(NO) VALUES(3);
--------------------------------------------------------------------------
<DELETE 행 삭제>
DELETE FROM 테이블명 WHERE 조건식;
mysql> delete from sample41 where no = 0;
+----+------+------------+
| no | a | b |
+----+------+------------+
| 1 | ABA | 2014-01-25 |
| 3 | NULL | NULL |
| 2 | XYZ | NULL |
+----+------+------------+
[실습] no가 3인행 삭제
mysql> delete from sample41 where no =3;
+----+------+------------+
| no | a | b |
+----+------+------------+
| 1 | ABA | 2014-01-25 |
| 2 | XYZ | NULL |
+----+------+------------+
---------------------------------------------
<UPDATE>
UPDATE 테이블명 SET 열1= 값1, 열2=값2 ... where 조건식
[실습] update를 이용해서 no 2에 2020 -03-25를 넣기
update sample41 set b ='2020-03-25' where no =2;
+----+------+------------+
| no | a | b |
+----+------+------------+
| 2 | ABA | 2020-03-25 |
| 2 | XYZ | 2020-03-25 |
+----+------+------------+
---------------------------------------------
[실습2] update를 이용해서 no.2를 no3으로 변경!
mysql> update sample41 set no= no+1;
+----+------+------------+
| no | a | b |
+----+------+------------+
| 3 | ABA | 2020-03-25 |
| 3 | XYZ | 2020-03-25 |
+----+------+------------+
---------------------------------------------
[실습3] 샘플41의 no열이 1인행의 a열 값을 xxx로 수정
--> update sample41 set a = 'xxx' where no=1;
[실습4] 샘플41의 no열이 1인행의 b열 값을 2014-01-01로 수정
--> update sample41 set b='2014-01-01' where no =1;
[실습5] 샘플41의 no열이 2인행의 a열을 xxx, b열을 2020-03-23으로 수정
--> update sample41 set a ='xxx', b ='2020-03-25' where no =2;
+----+------+------------+
| no | a | b |
+----+------+------------+
| 3 | ABA | 2020-03-25 |
| 3 | XYZ | 2020-03-25 |
| 1 | xxx | 2014-01-01 |
| 2 | xxx | 2020-03-25 |
+----+------+------------+
---------------------------------------------
[실습] 샘플41의 a열을 null로 수정
update sample41 set a = null;
[실습2] 샘플 41의 테이블 구조 확인
DESC sample41;
[실습3] 샘플 41의 no열을 null로 수정불가능
---------------------------------------------
< 물리삭제 & 논리삭제 >
---------------------------------------------
<COUNT 집계 함수 >
select count(*) from sample51;
+----------+
| count(*) |
+----------+
| 5 |
+----------+
---------------------------------------------
[실습] 샘플51 name열이 A행 추출
mysql> select * from sample51 where name = 'A';
+------+------+----------+
| no | name | quantity |
+------+------+----------+
| 1 | A | 1 |
| 2 | A | 2 |
+------+------+----------+
---------------------------------------------
[실습2] 샘플51 name열이 A행 카운트 함수
mysql> select count(*) from sample51 where name ='A';
+----------+
| count(*) |
+----------+
| 2 |
+----------+
---------------------------------------------
[실습3] no 열 ,name 카운트
*name열은 null값이 있기 때문에 카운트를 하지 않는다.
mysql> select count(no), count(name) from sample51;
+-----------+-------------+
| count(no) | count(name) |
+-----------+-------------+
| 5 | 4 |
+-----------+-------------+
---------------------------------------------
[실습] 아래 두 쿼리의 결과값 확인
select all name from sample51;
--> name 모두 추출
select DISTINCT name from sample51;
--> 중복 값 제거
---------------------------------------------
[실습] 샘플 51의 ALL name과 DISTINCT name 개수 확인
-->
select count(ALL NAME), COUNT(DISTINCT name) from sample51;
+-----------------+----------------------+
| count(ALL NAME) | COUNT(DISTINCT name) |
+-----------------+----------------------+
| 4 | 3 |
+-----------------+----------------------+
---------------------------------------------
< COUNT 외 집계 함수 >
- SUM([ALL | DISTINCT] 집합)
- AVG([ALL | DISTINCT] 집합)
- MIN([ALL | DISTINCT] 집합)
- MAX([ALL | DISTINCT] 집합)
[실습] 샘플51 quantity 합계 구하기
mysql> select SUM(quantity) from sample51;
+---------------+
| SUM(quantity) |
+---------------+
| 16 |
+---------------+
---------------------------------------------
[실습2] 샘플51 name열 합계 구하기
#문자열이기 때문에
mysql> select SUM(DISTINCT name) from sample51;
+--------------------+
| SUM(DISTINCT name) |
+--------------------+
| 0 |
+--------------------+
---------------------------------------------
[실습3] 샘플51 quantity열의 평균 구하기
mysql> select AVG(quantity) from sample51;
+---------------+
| AVG(quantity) |
+---------------+
| 4.0000 |
+---------------+
---------------------------------------------
[실습4] 샘플51 quantity열의 평균, 합계 , 수량 구하기
mysql> select AVG(quantity) as '평균', SUM(quantity) as '합계' , count(quantity) as '수량' from sample51;
+--------+------+------+
| 평균 | 합계 | 수량 |
+--------+------+------+
| 4.0000 | 16 | 4 |
+--------+------+------+
---------------------------------------------
[실습5] 샘플51 quantity열의 평균을 구하고 만약
quantity에 NULL이 있을때는 0으로 치환후 계산,
이름은 avgnull0
mysql> select AVG(case when quantity is NULL then 0
-> ELSE QUANTITY
-> END) AS avgnull0
-> from sample51;
+----------+
| avgnull0 |
+----------+
| 3.2000 |
+----------+
---------------------------------------------
최고 값 구하기 !
mysql> select max(quantity) from sample51;
+---------------+
| max(quantity) |
+---------------+
| 10 |
+---------------+
---------------------------------------------
최솟값 구하기 !
mysql> select min(all quantity) from sample51;
+-------------------+
| min(all quantity) |
+-------------------+
| 1 |
+-------------------+
'MYSQL' 카테고리의 다른 글
MYSQL -4 스키마, 인덱스 (1) | 2022.09.19 |
---|---|
MYSQL - 기초3 (GROUP BY, 서브쿼리) (1) | 2022.09.19 |
MYSQL 데이터 다운로드 오류 (0) | 2022.09.19 |
MYSQL - 1 조건문 , 패턴매칭 ,예약어 (1) | 2022.09.16 |
MYSQL 8.0 설치 방법 (0) | 2022.09.16 |