DB - 02

월요일좋아·2022년 8월 18일
0

DB

목록 보기
2/9

정렬(order by)

오름차순:ASC(default,생략가능)
내림차순:DESC
order by를 설정해주지 않으면 자료를 입력한 순서대로 출력됨.

ASC

SELECT *
FROM member
-- WHERE(생략) -- 
ORDER BY debut_date ASC;

DESC

SELECT *
FROM member
WHERE height >= 164
ORDER BY height DESC;

문자

  • 문자 : 숫자와 구분X
  • 숫자 : 문자와 구분X
  • 특수문자 : SELECT* 와 같이 띄어쓰기 없어도 SELECT * 로 인식.
  • 문자와 문자, 문자와 숫자, 숫자와 숫자가 붙으면 새로운 문자가 되지만 특수문자는 붙여써도 개별로 인식이 됨.

한글은 2byte, 영어는 1byte
-> 하이 : 길이 2, 4byte / hi : 길이 2, 2byte

정렬 1개

SELECT height, debut_date
FROM member
WHERE height >= 164
ORDER BY height;

height값이 같은 데이터를 debut_date 기준으로 다시 정렬

SELECT height, debut_date
FROM member
WHERE height >= 164
ORDER BY height, debut_date;

인덱스를 이용하여도 같은 결과를 도출해낼 수 있다.

SELECT height, debut_date
FROM member
WHERE height >= 164
ORDER BY 1, 2;

LIMIT

LIMIT 예제 1

평균키가 164가 넘고 큰 순서대로 걸그룹 3개만 리턴하라.

SELECT *
FROM member
WHERE height >= 164
ORDER BY height DESC LIMIT 3;

LIMIT 활용 1

LINIT N, M; : N번째부터 M개를 리턴

SELECT *
FROM member
ORDER BY height DESC LIMIT 3, 2; -- 3번째부터 2개를 리턴 --

결과


DISTINCT (중복 제거)


위와 같이 중복값이 나왔을때 중복값을 제거하려면 DISTINCT를 사용하면 된다.

SELECT DISTINCT addr
FROM member
ORDER BY 1;

group by 예제 1

mem_id별로 구매한 물건의 개수의 합을 구하시오.

기본화면

여기서 그룹별 총 구매개수를 알고싶다면?


1. sum()을 통해 amount의 결과값을 합쳐주고 컬럼 별칭도 "총구매개수"로 수정
2. Group by를 통해 mem_id 그룹화
3. sum, max, min, max, avg를 사용하기위해 group by 함수 사용함.


group by 예제 2

mem_id별로 구매한 물건의 총 구매금액을 리턴하시오.

기본

물건 개수 * 가격 = 총 구매금액


예제 3

  1. 전체 구매개수의 평균
    AVG

  2. 전체구매횟수
    COUNT

  3. 전체 레코드의 개수
    COUNT 예제 1

    COUNT 예제 2

  1. 그룹별로 평균 구매개수 리턴

  2. 그룹별로 구매한 상품중에 가장 비싼 금액 리턴


공식! avg, min 등이 사용되지 않은 컬럼에는 group by 함수를 써야 한다.

예제 4

4-1.도시별로 평균키를 리턴하라

기본

결과

4-2. 도시별로 멤버 숫자를 높은 순서대로 리턴하라

기본

결과

HAVING

HAVING 예제 1

그룹별로 총 구매금액이 1000이 넘는 값을 리턴하라.

기본

결과

일반 조건이 아니라 이미 그룹화 된 결과값에 조건을 주려면 WHERE이 아닌 HAVING을 사용해야한다.

HAVING 예제 2

제품의 가격이 50 이상인 것들 중에, 그룹별로 총 구매금액이 1000이 넘는 값 리턴하라.


📌 name -> irum / home-,house -> zip 과 같은 형식으로 변수명 선언 하지 말것!

테이블 생성 후 INSERT로 데이터 넣어줄때

CREATE TABLE hongong1(
 toy_id INT,
 toy_name CHAR(4),
 age INT
)
  1. 기본형
INSERT hongong1 VALUES (1, '우디', 25);
  1. 데이터를 넣는 순서를 다르게 해야할때
INSERT hongong1 (toy_id, age, toy_name) VALUES (2, 25, '버즈');
  1. 데이터를 넣고싶은 열만 골라서 넣고싶을때(빈 자리 = null 값)
INSERT hongong1 (toy_id, toy_name) VALUES (3, '랭시');

-- values가 아닌 value도 사용가능 --
INSERT hongong1 VALUE (4, '제시', 20);

값 자동증가 함수 : AUTO_INCREMENT

CREATE TABLE hongong2(
 toy_id INT AUTO_INCREMENT PRIMARY KEY,
 toy_name CHAR(4),
 age INT
)

SELECT LAST_INSERT_ID(); : 가장 최근 자동 증가값

alter

  1. 간단하게 변경하는 법

  2. ? ? ?


테이블 복사

update

update 예제 1

Pusan을 검색하여 도시명을 한글로 수정하고 인구도 4,000,000으로 수정

delete

delete 예제 1

city_name 데이터 중, New로 시작하는 데이터 삭제하기

DELETE FROM city_popul
WHERE city_name LIKE 'New%';

delete 예제 2 (limit 활용)

  1. S로 시작하는 city_name의 데이터 수 찾기
SELECT COUNT(*)
FROM city_popul
WHERE city_name LIKE 'S%';
  1. S로 시작하는 데이터들 중, 상위 5개 delete 하기.
DELETE FROM city_popul
WHERE city_name LIKE 'S%'
LIMIT 5;

테이블 생성

CREATE TABLE member2(
 mem_id CHAR(8) PRIMARY KEY,
 mem_name VARCHAR(10) NOT NULL,
 mem_number TINYINT UNSIGNED, -- UNSIGNED : ??? --
 addr CHAR(2) NOT NULL,
phone1 CHAR(3),
phone2 CHAR(8),
height TINYINT UNSIGNED,
debut_date DATE
);
CREATE TABLE movie(
 m_id INT,
 m_title VARCHAR(30) NOT NULL,
 m_director VARCHAR(20) NOT NULL,
 m_star VARCHAR(20) NOT NULL,
 m_script LONGTEXT,
 m_film LONGBLOB,
 PRIMARY KEY (m_id) 
 -- primary key를 지정하는 또 다른 방법임(컬럼 두개를 합쳐서 주 키로 설정해줄때 이용:복합주키) --
);

복합 주 키 : create구문 마지막에 PRIMARY KEY (컬럼명)

데이터 형변환

SELECT 1 + '2'; 

뒤에 문자 '2'가 숫자 2로 형변환이 일어나면서 결과는 3이 된다.(묵시적 형변환)

함수 : 짙은 네이비색, ()괄호와 그 안의 매개변수가 반드시 있어야 함
함수(매개변수. . .)

SELECT AVG(price) FROM buy;
-- 결과값 : 142.9167 --

signed : 부호가 있는 정수값
실수(142.9167)인 price를 부호가 있는 정수값으로 CAST

SELECT CAST(AVG(price) AS SIGNED) "평균값" FROM buy; 
-- 결과:143 --

convert : 변환

SELECT CONVERT(AVG(price) , SIGNED) "평균값" FROM buy; 
-- 결과: 143 --

날짜

SELECT CAST('2022$08$18' AS DATE); -- $ : 의미없는 아무 문자, 결과:2022-08-18 --
SELECT CAST('2022#08^18' AS DATE); -- 결과:2022-08-18 --

concat = 합치기

SELECT CONCAT(100 , '200'); 
-- 묵시적으로 100 -> '100' 변환됨, 결과: 100200 --

0개의 댓글