<참고> 혼공SQL

핵심적인 SQL 문

SELECT ~ FROM ~ WHERE

 

WHERE 절  뒤에 추가 가능한 절 

결과의 정렬 :  ORDER BY 

SELECT mem_id, mem_name, debut_date 
	FROM member 
	ORDER BY debut_date DESC; -- Desending 내림차순

SELECT mem_id, mem_name, debut_date 
	FROM member 
	ORDER BY debut_date ASC; -- (기본설정)Asecnding 오름차순
    

SELECT mem_id, mem_name, debut_date, height 
	FROM member 
	WHERE height >= 164
	ORDER BY height DESC, debut_date ASC;-- 1순위 키가 큰 순, 2순위 날짜가 빠른순

 

출력의 개수를 제한 : LIMIT

   LIMT 시작, 개수 ->  0 을 첫 데이터라고 설정함.

SELECT mem_id, mem_name, debut_date 
	FROM member 
	ORDER BY debut_date
    LIMIT 3; -- == LIMIT 0, 3
    
# 데뷔 날짜가 빠른 순으로 정렬하고, "4번째" 데이터 부터 2개만 조회
SELECT mem_id, mem_name, debut_date 
	FROM member 
	ORDER BY debut_date
	LIMIT 3, 2;

 

중복된 결과를 제거 : DISTINCT

SELECT DISTINCT addr FROM member;

 

결과를 그룹으로 묶어줌 : GROUP BY

    집계함수 와 함께 - SUM, AVG, MIN, MAX, COUNT

# SUM()
SELECT mem_id, SUM(amount) FROM buy GROUP BY mem_id;

-- 별칭(alias) 사용 : "..."
SELECT mem_id "회원 아이디", SUM(amount) "총 구매 개수"
	FROM buy GROUP BY mem_id; 
    
SELECT mem_id "회원 아이디", SUM(amount*price) "총 구매 금액"
	FROM buy GROUP BY mem_id; 
    
# AVG()
SELECT AVG(amount) "평균 구매 개수" FROM buy; -- 회원이 한번 구매할 때 평균 개수
SELECT mem_id "회원 아이디", AVG(amount) "평균 구매 개수" FROM buy; -- 각 회원 마다 한번 구매할 때  

# COUNT()
SELECT COUNT(*) FROM member; -- 모든 회원 카운트
SELECT COUNT(phone1) FROM member; -- phone1 에 값이 있는 회원 카운트

 

    HAVING 와 함께 - 집계함수를 이용하여 조건을 만들때 사용, 항상 GROUP BY 뒤에 사용

SELECT mem_id "회원 아이디", SUM(price*amount) "총 구매 금액"
	FROM buy
	#WHERE SUM(price*amount) > 1000  -- 에러: 집계함수 사용불가
    GROUP BY mem_id
    HAVING SUM(price*amount) > 1000 -- 집계함수를 이용해서 조건을 만들때 사용
    ORDER by (price*amount) DESC; -- 구매액이 큰사람 부터

 

SELECT 문에 사용되는 절의 순서

SELECT 열이름
	FROM     테이블_이름
	WHERE    조건식
	GROUP BY 열이름
	HAVING   집계함수이용한 조건식
	ORDER BY 열이름
	LIMIT	 숫자
USE 데이터베이스_이름;

#SELECT 열_이름 FROM 테이블_이름;

SELECT * FROM 테이블_이름; -- 테이블에 있는 모든 열(*)을 조회한다.
SELECT col_name1, col_name2 FROM 테이블_이름; -- 여러개의 열을 지정

# 데이터베이스 이름 => market_db
# 아래 1 과 2 는 같은 쿼리 

USE market_db;-- 1
SELECT * FROM product;-- 1

SELECT * FROM market_db.product; -- 2

 

WHERE 조건식 

 

AND , OR

SELECT ... From ... WHERE height >= 163 AND height <= 165;
SELECT ... From ... WHERE height >= 163 OR height <= 165;

 

BETWEEN ~ AND ~ : 숫자 데이터의 특정범위 안에서 조사

SELECT ... FROM ... WHERE height BETWEEN 163 AND 170;

 

IN ( ) : 숫자 데이터가 아닐때 특정 범위 안에서 조사,  IN () 안에 있는 것중 해당하는 것이 있는지 조사

SELECT ... FROM ... WHERE addr IN('경기','경남', '전남');

 

LIKE  : % 이용해서 일부 글자 검색,  -> 우 뒤에 있는 무슨 글자든 허용(%)

SELECT ... FROM ... 
	WHERE mem_name LIKE 'a%'   -- mem_name 필드값이 a로 시작하는 모든 데이터
	WHERE mem_name LIKE '%a'   -- mem_name 필드값이 a로 끝나는 모든 데이터
	WHERE mem_name LIKE '%co%' -- mem_name 필드값에 co를 포함하는 모든 데이터
	WHERE mem_name LIKE 'a%o'  -- mem_name 필드값이 a로 시작하고 o로 끝나는 모든 데이터

  언더바(_) 이용해서 글자 매치 검색 -> 'ㅡㅡ핑크" 총 4글자 중 앞에는 상관없고 뒤에 핑크인 것 조사 

SELECT ... FROM ... WHERE mem_name LIKE '__핑크';

'DataBase > MySQL' 카테고리의 다른 글

MySQL - 데이터 변경  (0) 2023.08.03
MySQL - SELECT  (0) 2023.08.02
MySQL - 데이터베이스, 테이블만들기, 데이터 입력하기  (0) 2023.08.02
[MySQL] Procedures  (0) 2023.08.01
MySQL- 데이터 조회  (0) 2023.07.31

데이터베이스 생성

DROP DATABASE IF EXIST marker db; # 기존에 존재하는 db 지우기
CREATE DATABASE 새로만들_데이터베이스_이름;

테이블 과 열 만들기

USE 새로만든_데이터베이스_이름; -- 사용할 데이터베이스 이름

CREATE TABLE member -- 회원 테이블
( mem_id		CHAR(8) NOT NULL PRIMARY KEY, -- 사용자 아이디(PK)
  mem_name		VARCHAR(10) NOT NULL, -- 이름
  mem_age		INT NOT NULL,  -- 나이
  addr			CHAR(2) NOT NULL, -- 지역(경기,서울,경남 식으로 2글자만입력)
  sigin_up_data		DATE -- 가입일자
);

CREATE TABLE buy -- 구매 테이블
(  num 		INT AUTO_INCREMENT NOT NULL PRIMARY KEY, -- 순번(PK)
   mem_id  	CHAR(8) NOT NULL, -- 아이디(FK)
   prod_name 	CHAR(6) NOT NULL, --  제품이름
   group_name 	CHAR(4)  , -- 분류
   price     	INT  NOT NULL, -- 가격
   amount    	SMALLINT  NOT NULL, -- 수량
   FOREIGN KEY (mem_id) REFERENCES member(mem_id)
);
  • CHAR(고정길이)
  • VARCHAR(가변길이, 10으로 선언해도 3글자를 저장하면 3자리만 사용)
  • 구매 테이블 에서 num 열에 AUTO_INCREMENT 는 자동으로 숫자를 입력해주는 명령어( 1, 2,...) ->  
  • FOREIGN KEY ?

데이터 입력

INSERT INTO member VALUES('JWL', '정우', '경남', '2023.08.02');

INSERT INTO buy VALUES(NULL, 'JWL', '맥북프로', '디지털', 1000, 1);

< 참고 >  책 : 혼자공부하는SQL 

 

'DataBase > MySQL' 카테고리의 다른 글

MySQL - SELECT  (0) 2023.08.02
MySQL - SELECT ~ FROM ~ WHERE  (0) 2023.08.02
[MySQL] Procedures  (0) 2023.08.01
MySQL- 데이터 조회  (0) 2023.07.31
MySQL-설치 및 관련 툴  (0) 2023.07.31
DELIMITER // -- 실행 ,DELIMITER $$ 가능

-- 실행
CREATE  PROCEDURE myProc()
BEGIN
		SELECT * FROM member WHERE member_name  = '아이유';
		SELECT * FROM product WHERE product_name = '바나나';
END

DELIMITER ; --실행


CALL myProc(); -- procedure 호출

이유를 모르겠는데 한번에 실행하면 에러가 뜬다.

END 뒤에 // 를 붙여도 에러가 뜬다.

 

그래서 END 뒤에 // 를 지우고 각각 실행하니 프로시져가 생성되었다....

 

 

 

MySQL :: MySQL 8.0 Reference Manual :: 25.1 Defining Stored Programs

25.1 Defining Stored Programs Each stored program contains a body that consists of an SQL statement. This statement may be a compound statement made up of several statements separated by semicolon (;) characters. For example, the following stored procedur

dev.mysql.com

'DataBase > MySQL' 카테고리의 다른 글

MySQL - SELECT  (0) 2023.08.02
MySQL - SELECT ~ FROM ~ WHERE  (0) 2023.08.02
MySQL - 데이터베이스, 테이블만들기, 데이터 입력하기  (0) 2023.08.02
MySQL- 데이터 조회  (0) 2023.07.31
MySQL-설치 및 관련 툴  (0) 2023.07.31
SELECT 열_이름 FROM 테이블_이름
SELECT 열_이름, 열_이름 FROM 테이블_이름
SELECT 열_이름 FROM 테이블_이름 WHERE 조건

-- LIKE --
SELECT* FROM** customers  WHERE customerName LIKE'D%'; # D로 시작하는 이름 다 검색해줘
SELECT* FROM** customers  WHERE customerName LIKE'%D'; # D로 끝나는 이름 다 검색해줘
SELECT* FROM** customers  WHERE customerName LIKE'%mi%'; # 가운데 mi가 들어간 이름 다 검색해줘

-- 페이지 네이션 할때 --
SELECT * FROM customers LIMIT 10 OFFSET 10 ; # 1~10 보여주고, 다음은 11~20까지 보여줘, ...

* 몰랐던 용어

스키마 (Schema) = 데이터베이스 : 테이블을 저장하는 공간

 

 

 

-- 추가 2023.08.25

 

WHERE 과 DATE_FORMAT 을 이용하여 날짜비교

- 년의 정보만 이용해서 검색 / 년-월-일 로 표시
SELECT BOOK_ID, DATE_FORMAT(PUBLISHED_DATE, '%Y-%m-%d') PUBLISHED_DATE FROM BOOK
WHERE DATE_FORMAT(PUBLISHED_DATE, '%Y') = '2023'

-- 금일 날짜 이용해서 검색
WHERE DATE_FORMAT(column_namd, '%Y-%m-%d') = DATE_FORMAT(CURDATE(),'%Y-%m-%d')

 

DATE_FORMAT(datem, format)

# weekday (full), month (full) and the year of the given date
DATE_FORMAT('2015-09-05', '%W %M %Y') -- Saturday September 2015


# weekday (short), month (short) and the day of the month of the given date
DATE_FORMAT('2015-09-05', '%a %b %c') -- Sat Sep 9

'DataBase > MySQL' 카테고리의 다른 글

MySQL - SELECT  (0) 2023.08.02
MySQL - SELECT ~ FROM ~ WHERE  (0) 2023.08.02
MySQL - 데이터베이스, 테이블만들기, 데이터 입력하기  (0) 2023.08.02
[MySQL] Procedures  (0) 2023.08.01
MySQL-설치 및 관련 툴  (0) 2023.07.31

+ Recent posts