1) Use문
2) SELECT
3) WHERE 절
select *
from 테이블명
4) ORDER BY절
5) LIMIT문
6) DISTINCT문
7) GROUP BY절
8) Having절
정수형
문자형
대량의 데이터 형식
실수형
날짜형
변수 선언 및 대입
변수 출력
USE market_db;
SET @txt = '가수 이름 => ';
SET @height = 166;
SELECT @txt, mem_name FROM member WHERE height > @height;
SET @count = 3;
PREPARE mySQL FROM 'SELECT mem_name, height FROM member ORDER BY height LIMIT ?';
EXECUTE mySQL USING @count; // USING으로 물음표(?)에 변수의 값 대입
SELECT CAST(AVG(price) AS SIGNED) '평균 가격' FROM buy; // SIGNED : 부호가 있는 정수
// OR
SELECT CONVERT(AVG(price), SIGNED) '평균 가격' FROM buy;
SELECT CAST('2022$12$12' AS DATE); // 결과 : 2022-12-12
SELECT '100' + '200'; // 결과 : 300
SELECT CONCAT(100, '200'); // 결과 : 100200
SELECT B.mem_id, CONCAT(M.phone1, M.phone2) '연락처'
FROM buy B
INNER JOIN memeber M
ON B.mem_id = M.mem_id
WHERE B.mem_id = 'GRL';
SELECT M.mem_id, M.mem_name, B.prod_name, M.addr
FROM member M
LEFT OUTER JOIN buy B
ON M.mem_id = B.mem_id
ORDER By M.mem_id;
CREATE TABLE cross_table
SELECT *
FROM buy
CROSS JOIN memeber;
// 직원 중 경리 부장의 직속상관인 관리이사의 사내 연락처를 알고 싶을 경우 EMP 열과 MANAGER 열을 조인
SELECT A.emp "직원", B.emp "직속상관", B.phone "직속상관연락처"
FROM emp_table A
INNER JOIN emp_table B
ON A.manager = B.emp
WHERE A.emp = "경리부장";
DELIMITER $$
CREATE PROCEDURE ifProc1()
BEGIN
DECLARE debutDate DATE; -- 데뷔 일자
DECLARE curDate DATE; -- 오늘
DECLARE days INT; -- 활동한 일수
SELECT debut_date INTO debutDate // 결과를 변수에 저장
FROM market_db.memeber
WHERE mem_id = 'APN';
SET curDATE = CURRENT_DATE(); -- 현재 날짜
SET days = DATEDIFF(curDate, debutDate); -- 날짜의 차이, 일 단위
IF (days/365) >= 5 THEN
SELECT CONCAT('데뷔 ', days, '일');
ELSE
SELECT '데뷔' + days + '일';
END IF;
IF 100 = 100 THEN -- 항상 실행
SELECT '100은 100과 같습니다.';
END IF;
END $$
DELIMITER ;
CALL ifProc1();
SELECT M.mem_id, M.mem_name, SUM(price * amount) "총구매액"
CASE
WHEN (SUM(price * amount) >= 1500) THEN "최우수고객"
WHEN (SUM(price * amount) >= 1000) THEN "우수고객"
WHEN (SUM(price * amount) >= 1) THEN "일반고객"
ELSE "비회원고객"
END "회원등급"
FROM buy B
RIGHT OUTER JOIN member M
ON B.mem_id = M.mem_id
GROUP BY M.mem_id
ORDER BY SUM(price * amount) DESC;
DELIMITER $$
CREATE PROCEDURE whileProc()
BEGIN
DECLARE i INT; -- 1에서 100까지 증가할 변수
DECLARE hap INT; -- 더한 값을 누적할 변수
SET i = 1;
SET hap = 0;
myWhile: -- WHILE문을 myWhile 이라는 레이블로 지정함
WHILE (i <= 100) DO
IF (i%4 == 0) THEN
SET i = i + 1; -- i의 원래 값에 1를 더해서 다시 i에 넣으라는 의미
ITERATE myWhile; -- 지정한 label 문으로 가서 계속 진행
END IF;
SET hap = hap + i;
IF (hap > 1000) THEN
LEAVE myWhile; -- 지정한 label 문을 떠남 (즉, while문 종료)
END IF;
END WHILE;
SELECT '1부터 100까지의 합 ==> ', hap;
END $$
DELIMITER;
CALL whileProc();
CREATE TABLE gate_table (id INT AUTO_INCREMENT PRIMARY KEY, entry_time DATETIME);
SET @curDate = CURRENT_TIMESTAMP(); -- 현재 날짜와 시간
PREPARE myQuery FROM 'INSERT INTO gate_table VALUES(NULL, ?)';
EXECUTE myQuery USING @curDate;
DEALLOCATE PREPARE myQuery;
기본 키에 입력되는 값은 중복X + NULL값 입력X
기본 키로 생성한 것은 자동으로 클러스터형 인덱스가 생성됨
테이블은 기본 키를 1개만 가질 수 있음
CREATE TABLE에서 설정하는 기본 키 제약조건
CREATE TABLE member
( mem_id CHAR(8) NOT NULL PRIMARY KEY, -- 기본 키 설정
mem_name VARCHAR(10) NOT NULL,
height TINYINT UNSIGNED NULL
);
// 또는
CREATE TABLE member
( mem_id CHAR(8) NOT NULL,
mem_name VARCHAR(10) NOT NULL,
height TINYINT UNSIGNED NULL,
PRIMARY KEY (mem_id) -- 기본 키 설정
// 기본 키 이름 설정
CONSTRAINT PRIMARY KEY pk_mem_id (mem_id)
);
ALTER TABLE member
ADD CONSTRAINT
PRIMARY KEY (mem_id);
📖 참고 📖
- ✏️
1️⃣2️⃣3️⃣4️⃣5️⃣ ➡️⬇️⬆️
📖 참고 📖
- ✏️
1️⃣2️⃣3️⃣4️⃣5️⃣ ➡️⬇️⬆️
📖 참고 📖
- ✏️
1️⃣2️⃣3️⃣4️⃣5️⃣ ➡️⬇️⬆️
📖 참고 📖
- ✏️
1️⃣2️⃣3️⃣4️⃣5️⃣ ➡️⬇️⬆️