반응형
반응형
-- 사용 테이블 예제
DROP TABLE IF EXISTS product_order;

CREATE TABLE product_order(
	ID   INT AUTO_INCREMENT PRIMARY KEY,
	name VARCHAR(20),
	product VARCHAR(50),
	price DOUBLE
);

INSERT INTO product_order(name, product, price) VALUES('홍길동', 'TV', -5000);
INSERT INTO product_order(name, product, price) VALUES('가길동', 'TV', 500.7);  
INSERT INTO product_order(name, product, price) VALUES('나길동', 'TV', 500);  
INSERT INTO product_order(name, product, price) VALUES('다길동', 'TV', 9);

 

📝ABS

  • ABS(숫자)
  • 절대값을 계산해줍니다.
SELECT name, price, ABS(price) as abs
  FROM product_order 
 WHERE name='홍길동';

 

Document
name price abs
홍길동 -5000 5000

 

📝CELING, FLOOR, ROUND

  • CEILING(숫자) FLOOR(숫자) ROUND(숫자)
  • CEILING올림, FLOOR내림, ROUND반올림을 해줍니다.

 

SELECT  name, price, CEILING(price) AS ceilng, FLOOR(price) AS floor, ROUND(price) AS round
  FROM product_order 
 WHERE name='가길동';

 

Document
name price ceilng floor round
가길동 500.5 501 500 501

 

 

📝MOD

  • MOD(숫자1, 숫자2)
  • 숫자1을 숫자 2로 나눈 나머지 값을 반환합니다.

 

SELECT name, price, MOD(price,450) AS price_mod
  FROM product_order 
 WHERE name='나길동';

 

Document
name price price_mod
나길동 500 50

 

📝POW, SQRT

  • POW(숫자1숫자2) SQRT(숫자)
  • POW제곱을 의미합니다 여기선 2^3을 의미합니다.
  • SQRT제곱근을 나타냅니다.
SELECT name, price, POW(price,2) AS POW, SQRT(price)  AS sqrt
  FROM product_order 
 WHERE name='다길동';

 

Document
name price pow sqrt
다길동 9 81 3

 

📝SIGN

  • SIGN(숫자)
  • 숫자가 양수이면 1을 반환하고0이면 0 음수면 -1을 반환합니다.

 

SELECT name, price, SIGN(price) as sign
  FROM product_order 
 WHERE name IN ('홍길동','나길동');

 

Document
name price sign
홍길동 -5000 -1
나길동 500 1

 

📝RAND

  • RAND()
  • RAND()는 0 ~ 1 까지 실수를 랜덤으로 내보내줍니다.

 

SELECT FLOOR(1 + (RAND() * (5) )) AS random;
-- 1 ~ 6까지 랜덤한 정수가 나온다. (FLOOR를 이용해 자리 내림을 해서 정수가 나오게 된다.)

 

📝CONV

  • CONV(숫자원래 진수, 변환할 진수)
  • 숫자에 적힌 원래 진수 다른 진수로 변환시켜줍니다.

 

SELECT CONV('AA',16,2) AS conv;

 

Document
conv
101010

 

 

📝TRUNCATE

  • TRUCATE(숫자, 정수)
  • 정수에는 소수점을 몇번자리까지 표현할지 정합니다. 그 밑에 숫자는 다 버리고 정수의 경우 0으로 채워넣습니다.
  • TRUNCATE(12345.12345, -2); 이거 같은 경우는 -2 정수 2번째 자리까지 버립니다.

 

SELECT TRUNCATE(12000.12500,2) AS plus_truncate, TRUNCATE(12350.124800,-2) AS minus_truncate;

 

Document
plus_truncate minus_truncate
12000.12 12300
반응형
반응형

 

-- 사용 테이블 예제
DROP TABLE IF EXISTS product_order;

CREATE TABLE product_order(
	ID   INT AUTO_INCREMENT PRIMARY KEY,
	NAME VARCHAR(20),
	product VARCHAR(50),
	price INT
);

INSERT INTO product_order(name, product, price) VALUES('   홍길동   ', 'zxTVzx', 5000);

 

 

📝LTRIM, RTRIM

  • LTRIM(문자열), RTRIM(문자열)
  • 문자열의 왼쪽, 오른쪽의 공백을 없애줍니다.
SELECT LTRIM(name) AS LTRIM, RTRIM(name) AS RTRIM
  FROM product_order;

 

Document
LTRIM RTRIM
홍길동 홍길동

 

📝TRIM

  • TRIM(문자열)
  • 문자열좌우 공백을 없애줍니다.
  • BOTH로 좌우 공백이 아니라 없앨 단어를 선정할 수도 있습니다.
SELECT TRIM(name) AS name FROM product_order;

 

Document
NAME
홍길동

 

📝REPEAT

  • REPEAT(문자열, 횟수)
  • 문자열을 횟수만큼 반복합니다.
SELECT REPEAT(product,3) AS 3_times FROM product_order;

 

Document
3_times
zxTvzxzxTvzxzxTvzx

 

 

📝REPLACE

  • REPLACE(문자열, 바꾸고 싶은 문자열, 바꿀 문자열)
  • 문자열에 바꾸고 싶은 문자열을 바꿀 문자열로 바꿉니다
SELECT REPLACE(price, 50, 800) AS new_price FROM product_order;

 

Document
new_price
80000

 

📝REVERSE

  • REVERSE(문자열)
  • 문자열을 거꾸로 뒤집습니다
SELECT REVERSE(TRIM(NAME)) AS NAME FROM product_order;

 

Document
NAME
동길홍
반응형
반응형
-- 사용 테이블 예제

DROP TABLE IF EXISTS product_order;

CREATE TABLE product_order(
	ID   INT AUTO_INCREMENT PRIMARY KEY,
	NAME VARCHAR(20),
	product VARCHAR(50),
	price INT
);


INSERT INTO product_order(name, product, price) VALUES('홍길동', 'TV', 5000);

 

📝INSERT

  • INSERT(적용문자열,위치길이삽입할 문자)
  • 위치에서 길이만큼 없애고 삽입할 문자를 그 안에 넣습니다

 

SELECT INSERT(NAME, 1, 2, '김순') AS change_name FROM product_order;

 

Document
change_name
김순동

 

📝LEFT, RIGHT

  • LEFT(문자열, 길이), RIGHT(문자열길이)
  • 왼쪽 또는 오른쪽에서 길이만큼 문자열을 반환합니다.

 

SELECT LEFT(NAME, 1) AS familly_name, RIGHT(NAME, 2) AS NAME FROM product_order;

 

Document
family_name name
길동

 

📝LOWER, UPPER

  • LOWER(문자열), UPPER(문자열)
  • LOWER대문자를 소문자UPPER소문자를 대문자로 바꿔줍니다.

 

SELECT LOWER('ABC') AS lower, UPPER('abc') AS upper;

 

Document
lower upper
abc ABC

 

📝LPAD

  • LPAD(문자열, 변경할 길이, 채울 문자열), RPAD(문자열, 변경할 길이채울 문자열)
  • 문자열길이만큼 늘리 빈 곳채울 문자열로 채워줍니다.

 

SELECT LPAD(NAME, 5, 'zx') AS LPAD , RPAD(NAME, 5, 'v') AS RPAD FROM product_order;

 

Document
LPAD RPAD
zx홍길동 홍길동vv

 

📝SPACE

  • SPACE(길이)
  • 길이만큼 공백을 만듭니다.
SELECT concat(SPACE(3), NAME, SPACE(3)) AS space_name FROM product_order;

 

Document
space_name
홍길동
반응형
반응형
-- 사용 테이블 예제

DROP TABLE IF EXISTS product_order;

CREATE TABLE product_order(
	ID   INT AUTO_INCREMENT PRIMARY KEY,
	NAME VARCHAR(20),
	product VARCHAR(50),
	price INT
);


INSERT INTO product_order(name, product, price) VALUES('홍길동', 'TV', 5000);

📝CHAR_LENGTH

  • CHAR_LENGTH(문자열)
  • 문자열의 길이를 반환합니다.

 

SELECT name ,CHAR_LENGTH(name) AS LENGTH FROM product_order;

 

 

Document
name lenght
홍길동 3

 

📝CONCAT

  • CONCAT(문자열문자열2)  or CONCAT_WS(구분자문자열문자열2)
  • 문자와 문자를 이어줍니다. 구분자를 이용하면 문자를 이을 때 구분자로 묶어줍니다.

 

SELECT CONCAT(NAME, ' ^ ', product, ' ^ ', price) AS concat FROM product_order;

 

Document
concat
홍길동^TV^5000

 

📝FORMAT

  • FORMAT(숫자,소수점 자리수)
  • 설정한 소수점 자리수까지만 표현합니다. 
# (1500.5035 일시 1500.5까지만 표시)
SELECT name ,FORMAT(price,1) AS new_format FROM product_order;

 

 

Document
name new_format
홍길동 5,000

📝SUBSTRING

  • SUBSTRING(문자열시작위치길이)
  • 문자열을 시작위치자리부터 길이만큼 출력합니다.

 

SELECT SUBSTRING(NAME, 2, 2) AS sub_name FROM product_order;

 

Document
sub_name
길동

 

반응형
반응형
-- 사용 테이블 예제

CREATE TABLE product_order(
	ID   INT AUTO_INCREMENT PRIMARY KEY,
	NAME VARCHAR(20),
	product VARCHAR(50),
	price INT
);


INSERT INTO product_order(name, product, price) VALUES('홍길동', 'TV', 5000);
INSERT INTO product_order(name, product, price) VALUES('홍길동', '핸드폰', 10000);
INSERT INTO product_order(name, product, price) VALUES('홍길순', '핸드폰', 10000);
INSERT INTO product_order(name, product, price) VALUES('김민지', '핸드폰', 10000);
INSERT INTO product_order(name, product, price) VALUES('홍길순', '컴퓨터', 2000);
INSERT INTO product_order(name, product, price) VALUES('김민수', '컴퓨터', 2000);
INSERT INTO product_order(name, product, price) VALUES('이민지', '생수', 500);
INSERT INTO product_order(name, product, price) VALUES('홍길동', '생수', 500);

 

📝CAST

  • CAST(변환시킬 값 AS (UN)SIGNED형변환 시킬 자료형)
SELECT CAST(AVG(price) AS INTEGER) AS '평균 구매금액' FROM product_order;

 

Document
평균 구매금액
5,000

 

📝CONVERT

  • CONVERT(변환시킬 값(UN)SIGNED 형변환 시킬 자료형)
SELECT CONVERT(AVG(price), INTEGER) AS '평균 구매금액' FROM product_order;

 

Document
평균 구매금액
5,000

 

📝IF

  • IF(수식, , 거짓)
SELECT  name, IF(price >= 5000, 'UP', 'DOWN') 
  FROM product_order
 GROUP BY name;

 

Document
name IF(price >=5000, 'UP', 'DOWN')
김민수 DOWN
김민지 UP
이민지 DOWN
홍길동 UP
홍길순 UP

 

 

📝IF NULL

  • IFNULL(수식1, NULL일 경우 반환 값)
SELECT IFNULL(NULL, 'true') AS is_null;

 

Document
is_null
true

 

📝CASE WHEN ELSE END

  • CASE... WHEN... ELSE... END
    • CASE에는 값이 들어가고 WHEN에는 각 해당 상황에 조건이 들어갑니다.
    • 조건이 맞으면 THEN을 실행합니다. 다 그렇지 않으면 ELSE를 실행합니다
    • CASE문이 다 끝나면 END를 마지막에 적어줘야합니다 

 

SELECT 
       name,
       CASE WHEN price = 500 THEN '생수입니다'
            WHEN price = 2000 THEN '컴퓨터입니다'
            WHEN price = 5000 THEN 'TV입니다'
            WHEN price = 10000 THEN '핸드폰입니다'
            ELSE '모르겠습니다'
       END AS '상품'
  FROM product_order;

 

Document
name 상품
홍길동 TV입니다
홍길동 핸드폰입니다
홍길순 핸드폰입니다
김민지 핸드폰입니다
홍길순 컴퓨터입니다
김민수 컴퓨터입니다
이민지 생수입니다
홍길동 생수입니다
반응형
반응형
-- 사용 테이블 예제
CREATE TABLE product_order(
	ID   INT AUTO_INCREMENT PRIMARY KEY,
	NAME VARCHAR(20),
	product VARCHAR(50),
	price INT
);


INSERT INTO product_order(name, product, price) VALUES('홍길동', 'TV', 5000);
INSERT INTO product_order(name, product, price) VALUES('홍길동', '핸드폰', 10000);
INSERT INTO product_order(name, product, price) VALUES('홍길순', '핸드폰', 10000);
INSERT INTO product_order(name, product, price) VALUES('김민지', '핸드폰', 10000);
INSERT INTO product_order(name, product, price) VALUES('홍길순', '컴퓨터', 2000);
INSERT INTO product_order(name, product, price) VALUES('김민수', '컴퓨터', 2000);
INSERT INTO product_order(name, product, price) VALUES('이민지', '생수', 500);
INSERT INTO product_order(name, product, price) VALUES('홍길동', '생수', 500);

📝SET

  • SET@변수이름 = 값;
    • 데이터베이스에서변수 선언은 이렇게 합니다.

 

SET @appleCount = 5;
SET @bananaCount = 15;

SELECT @appleCount AS appleCount;
SELECT @appleCount + @bananaCount AS total;

 

select * 
	from(SELECT @junho:=@junho+1 as wooram, A.* FROM mytable A, (SELECT @junho:=0) as R order by wooram desc) total 
where wooram > 259 and wooram <= 268;
  • select @junho:= 0
    • a = 0과 등치
  • @junho:=@junho+1
    • a = a + 1과 등치

 

즉 := 은 대입을 의미한다.

 

📝PREPARE, EXECUTE

  • PREPARE쿼리 이름을 만들고 FROM쿼리에 들어갈 내용을 적습니다.
  • PREPARE은 독자적으로 실행되진 않고 EXECUTE를 이용해야 실행이 됩니다.
  • USING은 ?값을 대입해주기 위해서 적은 것입니다. ?가 없다면 굳이 안 적어도 됩니다. 
SET @productName = "TV";

PREPARE productOrderQuery
   FROM 'SELECT name, product, price FROM product_order WHERE product = ?';
   
EXECUTE productOrderQuery USING @productName;

 

Document
name product price
홍길동 TV 5000
반응형
반응형
SMALLINT -32768 ~ 32767
INT 약 -21억 ~ 21억
BIGINT 약 -900경 ~ 900경
FLOAT -3.40E+38 ~ 1.17E-38 (소수점 7자리까지 저장)
DOUBLE -1.22E-308 ~ 1.79E+308 (소수점 15자리까지 저장)
DECIMAL(m,[d]) 전체 자리수(m)과 소수점 이하 자리수(d)를 가진 숫자 저장
예) DECIMAL(5,2) 전체자리수 5자리로 하되
그 중 소수점을 2자리로 하겠다는 의미입니다.
CHAR INSERT문과 UPDATE문을 사용할 때 CHAR형식이 더 유리
VARCHAR 가변 길이문자형을 저장합니다. 입력한 데이터에 맞게
최대길이 안에 길이가 바뀝니다.
LONGTEXT 최대 4GB크기 TEXT데이터 값 저장
말 그대로 대용량 글자를 저장하기위한 형식
LONGBLOB 최대 4GB BLOB 데이터 값 저장
사진, 동영상, 문서파일 등 대용량 이진데이터 저장에 사용
DATE YYYY-MM-DD 형식 저장
TIME HH:MM:SS 형식으로 저장
DATETIME YYYY-MM-DD HH:MM:SS 형식으로 저장

 

반응형
반응형

 

-- 사용 테이블 예제
CREATE TABLE product_order(
	ID   INT AUTO_INCREMENT PRIMARY KEY,
	NAME VARCHAR(20),
	product VARCHAR(50),
	price INT
);


INSERT INTO product_order(name, product, price) VALUES('홍길동', 'TV', 5000);
INSERT INTO product_order(name, product, price) VALUES('홍길순', '핸드폰', 10000);
INSERT INTO product_order(name, product, price) VALUES('김민지', '핸드폰', 10000);
INSERT INTO product_order(name, product, price) VALUES('김민수', '컴퓨터', 2000);
INSERT INTO product_order(name, product, price) VALUES('이민지', '생수', 500);

📝윈도우 함수

행과 행 사이 관계를 쉽게 정의하기 위해 만든 MySQL에서 제공하는 함수로 OVER절이 들어간 함수입니다.

말이 좀 어려울 수 있는데 간단하게 MAX, MIN처럼 최대값 또는 최소값을 구하기 쉽게 제공하는 것과 같은 거입니다.

예시를 보시면 이해하기 쉬울 겁니다.

 

📝ROW_NUMBER

OVER에는 일반적으로 어떤 기준으로 할지에 대한 정렬 방식이 있습니다.

예를 들면 ORDER BY price DESC의 경우 지출 금액 내림차순으로 정렬되어있습니다. 그 기준으로 ROW_NUMBER(순위를 매기겠다)라는 의미입니다.

 

하기와 같이 지출 순위를 붙여서 만드려면 복잡하게 만들어야하는데 이걸 편하게 도와줍니다.

SELECT ROW_NUMBER() OVER(ORDER BY price DESC) "지출 순위", name, price FROM product_order;

 

Document
지출 순위 name price
1 김민지 10000
2 홍길순 10000
3 홍길동 5000
4 김민수 2000
5 이민지 500

 

📝DENSE_RANK

DENSE_RANK같은 경우는 만약 비교값이 동일할 경우 공동순위로 올려줍니다.

하기에서는 김민지와 홍길순의 지출액이 같지만 김민지가 먼저 나오게 됩니다.

SELECT DENSE_RANK() OVER(ORDER BY price DESC) "지출 순위", name, price FROM product_order;

 

Document
지출 순위 name price
1 김민지 10000
1 홍길순 10000
2 홍길동 5000
3 김민수 2000
4 이민지 500

 

 

📝RANK

RANK의 경우 홍길동이 3위가 아닌 2위로 나오게 됩니다 만약 3위로 나오게 하고 싶으면 RANK 함수를 이용하면 됩니다.

 

SELECT RANK() OVER(ORDER BY price DESC) "지출 순위", name, price FROM product_order;

 

Document
지출 순위 name price
1 김민지 10000
1 홍길순 10000
3 홍길동 5000
4 김민수 2000
5 이민지 500
반응형
반응형
-- 사용 테이블 예제
CREATE TABLE product_order(
	ID   INT AUTO_INCREMENT PRIMARY KEY,
	NAME VARCHAR(20),
	product VARCHAR(50),
	price INT
);

INSERT INTO product_order(name, product, price) VALUES('홍길동', 'TV', 5000);
INSERT INTO product_order(name, product, price) VALUES('홍길동', '라디오', 3000);
INSERT INTO product_order(name, product, price) VALUES('홍길동', '컴퓨터', 2000);
INSERT INTO product_order(name, product, price) VALUES('홍길동', '핸드폰', 10000);
INSERT INTO product_order(name, product, price) VALUES('홍길순', 'TV', 5000);
INSERT INTO product_order(name, product, price) VALUES('홍길순', '라디오', 3000);
INSERT INTO product_order(name, product, price) VALUES('홍길순', '컴퓨터', 2000);
INSERT INTO product_order(name, product, price) VALUES('홍길순', '핸드폰', 10000);
INSERT INTO product_order(name, product, price) VALUES('김민수', 'TV', 5000);
INSERT INTO product_order(name, product, price) VALUES('김진수', '컴퓨터', 2000);
INSERT INTO product_order(name, product, price) VALUES('김민수', '컴퓨터', 2000);

 

📝AUTO_INCREMENT

레코드가 들어올때마다 자동으로 숫자가 올라가는 옵션입니다 보통 ID(primary key)[int]에 적용합니다.  

ALTER TABLE product_order AUTO_INCREMENT = 100; -- 100번 부터 시작하는 AUTO_INCREMENT
SET @@AUTO_INCREMENT_INCREMENT = 3;             -- 증가하는 수준 정하기 가능

 

📝UPDATE

UPDATE 문은 삽입된 데이터를 변경할 수 있습니다 하기 쿼리는 TV의 가격을 10000으로 조정한 예제 입니다.

UPDATE product_order SET price = 10000 WHERE product = 'TV';

 

 

📝DELETE, DROP, TRUNCATE

  • DELETE문말 그대로 삭제한다는 의미로 레코드를 삭제합니다.
  • DROP문테이블 자체를 삭제합니다
  • TRUNCATE레코드를 삭제합니다.

 

3가지의 특성은 아래 주석과 같습니다.

DELETE FROM product_order;    -- 로그 기록 + 내용 삭제 (쿼리 수행 시간 느림)           [속도 : 3등]
DELETE TABLE product_order;   -- 로그 기록(x) +  테이블 자체 삭제 (쿼리 수행 시간 빠름)[속도 : 1등]
TRUNCATE TABLE product_order; -- 로그 기록(x) + 내용 삭제 (쿼리 수행 시간 빠름)        [속도 : 2등]
반응형