
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Number Button Game</title>
<style>
h3 {
text-align: center;
}
.number-btn {
padding: 20px 40px;
font-size: 24px;
margin: 5px;
cursor: pointer;
width: 100px;
height: 100px;
border: 2px solid black;
}
.button-row {
display: flex;
}
#number-container {
display: flex;
flex-direction: column;
align-items: center;
margin-top: 100px;
}
</style>
</head>
<body>
<div id = "number-container">
<h3>숫자 버튼 게임</h3>
<div class="button-row" id = "buttonRow1"></div>
<div class="button-row" id = "buttonRow2"></div>
<div class="button-row" id = "buttonRow3"></div>
<button onclick="restartGame()">Restart</button>
</div>
<script>
let NUMBER_BTN = [];
function createSuffleButtons(){
const buttonRow1 = document.getElementById("buttonRow1");
const buttonRow2 = document.getElementById("buttonRow2");
const buttonRow3 = document.getElementById("buttonRow3");
NUMBER_BTN = [];//얘를 넣어야 초기화가 되서 restart를 했을 때 문제가 없음
for(let i = 0; i < 9; i++){
const button = document.createElement('button');
button.textContent = i === 0 ? '' : i;//i가 0이면 공백 아니면 숫자
button.className = 'number-btn'; //위 생성한 button의 클래스 이름 생성
// button.onclick = swapButton(this); 함수 호출의 값을 할당해야함
button.onclick = function() {swapButton(this)};
NUMBER_BTN.push(button);
}
const SHUFFLED_BTN = shuffle(NUMBER_BTN)
for(let i = 0; i < 9; i++){
if(i < 3){
buttonRow1.appendChild(SHUFFLED_BTN[i]);
}
else if(i < 6){
buttonRow2.appendChild(SHUFFLED_BTN[i]);
}
else{
buttonRow3.appendChild(SHUFFLED_BTN[i]);
}
}
}
//배열 요소 셔플
function shuffle(array){
for(let i = array.length -1 ; i > 0 ; i--){
let j = Math.floor(Math.random() * (i + 1));
[array[i], array[j]] = [array[j], array[i]];
}
return array;
}
function findEmptyButton(){//클래스가 number-btn이고 내용이 비어있는 요소가 존재한다면 그 요소를 반환
return document.querySelector('.number-btn:empty');
}
function isAdjcent(button1, button2){
const btn1Index = NUMBER_BTN.indexOf(button1);
const btn2Index = NUMBER_BTN.indexOf(button2);
const rowDiff = Math.abs(Math.floor(btn1Index / 3) - Math.floor(btn2Index / 3));
const colDiff = Math.abs(btn1Index % 3 - btn2Index % 3);
return ((rowDiff === 1 && colDiff === 0) || (rowDiff === 0 && colDiff === 1)); }
function swapButton(clickedButton){
const emptyButton = findEmptyButton();
if(isAdjcent (clickedButton, emptyButton)){
const clickedText = clickedButton.textContent;
clickedButton.textContent = emptyButton.textContent;
emptyButton.textContent = clickedText
checkSuccess();
}
}
function checkSuccess(){
//.map을 사용해 NUMBER_BTN배열의 각 요소에서 textContent를 추출하고 join을 사용해 하나의 문자열로 결합하고 공백 제거
//.map()은 버튼의 텍스트 내용을 추출하고 그 값을 새로운 배열에 추가하는 작업을 반복하기 위해 사용
const buttonValues = NUMBER_BTN.map(a => a.textContent).join('').trim();
let success = true;
if(buttonValues !== '123456780'){
success = false;
}
if(success) alert("성공하셨습니다!!!!");
}
//초기화 함수
function restartGame(){
const buttonsRows = document.querySelectorAll('.button-row');
//button행들 삭제
buttonsRows.forEach(a => a.innerHTML = '');//querySelectorAll은 nodeList로 반환하기 때문에 forEach()나 for..of로 접근
//새로 생성
createSuffleButtons();
}
//초기 게임 설정
createSuffleButtons();
</script>
</body>
</html>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<p id = "demo"></p>
<script>
const fruits = ["Banana", "Orange", "Apple", "Mango"];
let text = fruits.join();
document.getElementById("demo").innerHTML = text;
</script>
</body>
</html>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<p id = "demo"></p>
<script>
const fruits = ["Banana", "Orange", "Apple", "Mango"];
let text = fruits.join(' * ');
document.getElementById("demo").innerHTML = text;
</script>
</body>
</html>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<p id = "demo"></p>
<script>
const fruits = ["Banana", "Orange", "Apple", "Mango"];
let text = fruits.pop();
document.getElementById("demo").innerHTML = text;
//Mango
</script>
</body>
</html>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<p id = "demo"></p>
<script>
const fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.push("Kiwi");
let text = fruits.length;
document.getElementById("demo").innerHTML = text;
//5
</script>
</body>
</html>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<p id = "demo"></p>
<script>
const fruits = ["Banana", "Orange", "Apple", "Mango"];
let text = fruits.shift();
document.getElementById("demo").innerHTML = text;
//Banana
</script>
</body>
</html>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<p id = "demo"></p>
<script>
const fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.unshift("Lemon");
let text = fruits.length;
document.getElementById("demo").innerHTML = text;
//5
</script>
</body>
</html>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<p id = "demo"></p>
<script>
const fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits[fruits.length] = "kiwi";
let text = fruits.join();
document.getElementById("demo").innerHTML = text;
//Banana,Orange,Apple,Mango,kiwi
</script>
</body>
</html>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<p id = "demo"></p>
<script>
const myGirls = ["Cecilie", "Lone"];
const myBoys = ["Emil", "Tobias", "Linus"];
let text = myGirls.concat(myBoys);
document.getElementById("demo").innerHTML = text;
//Cecilie,Lone,Emil,Tobias,Linus
</script>
</body>
</html>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<p id = "demo"></p>
<script>
const myGirls = ["Cecilie", "Lone"];
const myBoys = ["Emil", "Tobias", "Linus"];
const arr3 = ["Robin", "Morgan"];
let text = myGirls.concat(myBoys, arr3);
document.getElementById("demo").innerHTML = text;
//Cecilie,Lone,Emil,Tobias,Linus,Robin,Morgan
</script>
</body>
</html>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<title>Event Handling</title>
</head>
<body>
<p id="demo"></p>
<script>
const arr1 = ["Emil", "Tobias", "Linus"];
const arr2 = ["Peter"];
document.getElementById("demo").innerHTML = arr1.concat(arr2);
// Emil,Tobias,Linus,Peter
</script>
</body>
</html>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<p id = "demo"></p>
<script>
const fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.splice(2, 0, "Lemon", "Kiwi");
document.getElementById("demo").innerHTML = fruits;
//Banana,Orange,Lemon,Kiwi,Apple,Mango
</script>
</body>
</html>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<p id = "demo"></p>
<script>
const fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.splice(2, 2, "Lemon", "Kiwi");
document.getElementById("demo").innerHTML = fruits;
//Banana,Orange,Lemon,Kiwi
</script>
</body>
</html>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<p id = "demo"></p>
<script>
const fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.splice(2, 1);
document.getElementById("demo").innerHTML = fruits;
//Banana,Orange,Mango
</script>
</body>
</html>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<p id = "demo"></p>
<script>
const fruits = ["Banana", "Orange", "Lemon", "Apple", "Mango"];
document.getElementById("demo").innerHTML = fruits.slice(1);
//Orange,Lemon,Apple,Mango
</script>
</body>
</html>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<p id = "demo"></p>
<script>
const fruits = ["Banana", "Orange", "Lemon", "Apple", "Mango"];
document.getElementById("demo").innerHTML = fruits.slice(1, 3);
//Orange,Lemon
</script>
</body>
</html>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<p id = "demo"></p>
<script>
const fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.sort();
document.getElementById("demo").innerHTML = fruits;
//Apple,Banana,Mango,Orange
</script>
</body>
</html>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<p id = "demo"></p>
<script>
const fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.sort();
fruits.reverse();
document.getElementById("demo").innerHTML = fruits;
//Orange,Mango,Banana,Apple
</script>
</body>
</html>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<p id = "demo"></p>
<script>
const points = [40, 100, 1, 5, 25, 10];
points.sort((a, b) => a-b);
document.getElementById("demo").innerHTML = points;
//1,5,10,25,40,100
</script>
</body>
</html>
4.다음을 숫자의 크기 내림차순으로 정렬하시오.
const points = [40, 100, 1, 5, 25, 10];
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<p id = "demo"></p>
<script>
const points = [40, 100, 1, 5, 25, 10];
points.sort((a, b) => b-a);
document.getElementById("demo").innerHTML = points;
//100,40,25,10,5,1
</script>
</body>
</html>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<p id = "demo"></p>
<script>
const points = [40, 100, 1, 5, 25, 10];
for(let i = 0; i < points.length; i++){
let j = Math.floor(Math.random() * (i + 1));
[points[i], points[j]] = [points[j], points[i]];
}
document.getElementById("demo").innerHTML = points;
//40,100,1,10,5,25
</script>
</body>
</html>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<p id = "demo"></p>
<script>
const points = [40, 100, 1, 5, 25, 10];
points.sort((a, b) => b - a);
document.getElementById("demo").innerHTML = points[0];
//100
</script>
</body>
</html>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<p id = "demo"></p>
<script>
const points = [40, 100, 1, 5, 25, 10];
points.sort((a, b) => a - b);
document.getElementById("demo").innerHTML = points[0];
//1
</script>
</body>
</html>
다음 문제들을 Array 메소드를 이용하여 코딩하시오.
선생님 코드
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Hangman</title>
</head>
<body>
<script>
let arr = ['hello', 'monkey', 'candy', 'pancake'];
let word = arr[Math.floor(Math.random()*arr.length)];
let flag = true;
let wordArr = new Array(word.length);
wordArr.fill('_')
while(wordArr.indexOf('_') !== -1) {
let answer = prompt('글자를 입력하세요. 취소를 누르면 게임을 멈춥니다.');
if(answer === null){
alert('안타까워요 정답은 ' + word + '입니다.');
flag = false;
break;
}
if(answer.length !== 1) {
alert('한글자만 입력하세요.');
continue;
}
let idx = 0;
while( (idx =word.indexOf(answer, idx)) !== -1) wordArr[idx++] = answer;
alert(wordArr.join(" "));
}
if(flag) alert('정답입니다.');
</script>
</body>
</html>
내가 푼거는 아직 미완성.. 함수 이용해서 풀었는데 잘 작동이 안됌
내가 푼거 완성!!
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Game</title>
</head>
<body>
<script>
// 게임에 사용되는 단어 목록
let words = ["monkey", "candy", "dog", "korea", "programming"];
// 게임에 사용될 무작위 단어 선정
let randomWord;
// 사용자가 맞추어야 하는 단어
let guessedWord;
// 추측 횟수
let remainingGuesses;
// 게임 초기화 함수
function initializeGame() {
randomWord = words[Math.floor(Math.random() * words.length)];
remainingGuesses = 6;
guessedWord = "_".repeat(randomWord.length).split('').join(' ');
displayGameState();
}
// 남은 횟수 알려주는 함수
function displayGameState() {
alert("남은 횟수 : " + remainingGuesses + "\n" + guessedWord + "\n" + "스펠링을 입력해주세요. 취소를 누르면 게임이 멈춥니다.");
}
function correctDisplay(){
alert("남은 횟수 : " + remainingGuesses + "\n" + guessedWord + "\n" + " 맞습니다! 다음 스펠링을 입력해주세요.")
}
function wrongDisplay(){
alert("남은 횟수 : " + remainingGuesses + "\n" + guessedWord + "\n" + "틀리셨습니다. 다른 스펠링을 입력해주세요.")
}
// 사용자가 제출한 알파벳이랑 정답 비교
function handleGuess(guess) {
let found = false;
for (let i = 0; i < randomWord.length; i++) {
if (randomWord[i] === guess) {
guessedWord = guessedWord.substring(0, i * 2) + guess + guessedWord.substring(i * 2 + 1);
found = true;
}
}
// 스펠링이 맞았을 때만 게임 상태 표시
if (found) {
// 게임 종료 조건
if (guessedWord.replace(/ /g, "") === randomWord) {
alert("축하합니다. 정답을 맞추셨습니다. 정답은 " + randomWord);
initializeGame();
}
correctDisplay();
} else {
// 만약 추측한 알파벳이 없으면 횟수 감소
remainingGuesses--;
// 게임 종료 조건
if (remainingGuesses === 0) {
alert("더 이상 남은 기회가 없습니다.. 실패하셨어요 정답은 " + randomWord + " 였습니다.");
initializeGame();
return; // 게임 종료 후 함수 종료
} else {//입력받은 스펠링이 틀렸을 때
wrongDisplay();
let userInput = prompt("다른 알파벳을 입력하세요.");
if (userInput === null) {
alert("게임을 종료합니다.");
return; // 사용자가 취소 버튼을 누르면 함수 종료
}
handleGuess(userInput.toLowerCase()); // 대소문자 구분하지 않음
}
}
}
initializeGame();
// 사용자 입력 받기
while (remainingGuesses > 0 && guessedWord !== randomWord) {
// 게임 시작
let userInput = prompt("알파벳을 입력하세요.");
if (userInput === null) {
alert("게임을 종료합니다.");
break; // 사용자가 취소 버튼을 누르면 반복문 종료
}
handleGuess(userInput.toLowerCase()); // 대소문자 구분하지 않음
}
</script>
</body>
</html>
데이터 형식 바이트 수 숫자 범위
( TINY INT ) 1 -128 ~ 127
( SMALL INT ) 2 -32,768 ~ 32,767
( INT ) 4 약 -21억 ~ + 21억
( BIG INT ) 8 약 -900경 ~ +900경
set @myVar1 = 4;
set @myVar2 = 4;
SELECT @myVar1 + @myVar2 AS sum;
set @txt = '가수 이름 ==>';
set @height = 166;
SELECT @txt, mem_name FROM member join buy WHERE height > @height;

LIMIT에는 변수를 사용할 수 없기 때문에 문법상 오류이다.
SET @count = 3;
SELECT mem_name, height FROM member ORDER BY height LIMIT @count; -- 에러
SET @count = 3;
PREPARE mySQL FROM 'SELECT mem_name, height FROM member ORDER BY height LIMIT ?';
EXECUTE mySQL USING @count;
@count변수에 3이라는 값을 할당
prepare문에 from절은 쿼리를 준비 >> LIMIT ? 부분은 변수로 대체된다.
EXECUTE문을 사용해 준비된 쿼리문을 실행한다.
USING @count구문은 위에서 LIMIT ? 부분을 @count변수의 값을 대체한다.
cast()나 convert()함수 안에 올 수 있는 데이터 형식은 CHAR,
SIGNED, SIGNED, UNSIGNED, DATE, TIME, DATETIME등
SIGNED는 부호가 있는 정수, UNSIGNED는 부호가 없는 정수
cast
select cast(avg(price)AS SIGNED) as '평균 가격' from buy;
143
convert
select convert(avg(price), SIGNED) as '평균 가격' from buy;
143
SELECT CAST('2022$12$12' AS DATE);
SELECT CAST('2022/12/12' AS DATE);
SELECT CAST('2022%12%12' AS DATE);
SELECT CAST('2022@12@12' AS DATE);
select num, concat(cast(price as char), 'X', cast(amount as char), '=') '가격x수량', price*amount '구매액' from buy;

SELECT '100' + '200';
-- 실행 결과
300
SELECT CONCAT('100', '200');
-- 실행 결과
100200
SELECT CONCAT(100, '200')
-- 100200
SELECT 100 + '200';
-- 300
select * FROM buy b
inner join member m on b.mem_id = m.mem_id where m.mem_id = 'GRL';
select b.mem_id, m.mem_name, b.prod_name, m.addr, concat(m.PHONE1, m.PHONE2) '연락처'
FROM buy b inner join member m on m.mem_id = b.mem_id;

select m.mem_id, m.mem_name, m.addr
from buy b inner join member m on b.mem_id = m.mem_id
order by m.mem_id;

select m.mem_id, m.mem_name, b.prod_name, m.addr
from buy b right outer join member m
on m.mem_id = b.mem_id
order by m.mem_id;

select distinct m.mem_id, b.prod_name, m.mem_name, m.addr
from buy b right join member m
on b.mem_id = m.mem_id
where b.prod_name is null
ORDER BY m.mem_id;

SELECT * FROM buy CROSS JOIN member;
SELECT COUNT(*) "데이터 개수" FROM sakila.inventory CROSS JOIN world.city;
CREATE TABLE cross_table SELECT * FROM sakila.actor -- 200건
CROSS JOIN world.country; -- 239건
SELECT A.emp "직원", B.emp "직속상관", B.phone "직속상관연락처"
FROM emp_table A
INNER JOIN emp_table B
ON A.manager = B.emp
WHERE A.emp = '경리부장';
SELECT * FROM cross_table LIMIT 5;
drop procedure if exists ifProc1;
delimiter $$
create procedure ifProc1()
begin
if 100 = 100
then select '100은 100과 같습니다.';
end if;
end $$
delimiter ; --띄어쓰기 해야함
call ifProc1();

drop procedure if EXISTS ifProc2;
delimiter $$
create procedure ifPro2()
begin
declare myNum int;
set myNum = 200;
if myNum = 100
then select '100입니다.';
else
select '100이 아닙니다';
end if;
end $$
delimiter ;
call ifProc2();
--100이 아닙니다 출력
drop procedure if exists ifProc3;
delimiter $$
create procedure ifProc3()
begin
declare debuteDate Date;
declare curDate Date;
declare days int;
select debut_date into debuteDate from market_db.member where mem_id = 'APN';
SET curDate = current_date();
set days = datediff(curDate, debuteDate);
if(days/365) >= 5
then select concat('데뷔한 지 ', days, '일이나 지났습니다. 핑순이들 축하합니다!');
ELSE
select ('데뷔한 지 ' + days + '일 밖에 안되었네요. 핑순이들 화이팅~');
end if;
end $$
delimiter ;
call ifProc3();

CURRENT_DATE()
CURRENT_TIMESTAMP()
DATEDIFF(날짜 1, 날짜 2)
SELECT CURRENT_DATE(), DATEDIFF('2021-12-31', '2000-1-1') '날짜 차이';

DROP PROCEDURE IF EXISTS HAHA;
DELIMITER $$
CREATE PROCEDURE HAHA()
BEGIN
IF 100 = 100
THEN SELECT '100';
ELSEIF 200 = 200
THEN SELECT '200';
ELSEIF 300 = 300
THEN SELECT '300';
ELSE
SELECT '그 밖에 숫자';
END IF;
END $$
CALL HAHA();

7.caseProc 스토어드 프로시저가 있으면 삭제한다.
다음 내용으로 caseProc 스토어드 프로시저를 만든다.
point INT, credit CHAR(1)로 두 개의 변수를 선언한다.
point 변수에 88을 대입한다.
case 문으로
point가 90 이상이면 credit에 A를
point가 80 이상이면 credit에 B를
point가 70 이상이면 credit에 C를
point가 60 이상이면 credit에 D를
그렇지 않으면 credit에 F를 대입한다.
그리고 다음과 같이 출력하자
취득점수==>88 학점==>B
DROP PROCEDURE IF EXISTS caseProc;
DELIMITER $$
CREATE PROCEDURE caseProc()
BEGIN
DECLARE point INT;
DECLARE credit CHAR(1);
SET point = 88;
CASE
WHEN point >= 90
THEN SET credit = 'A';
WHEN point >= 80
THEN SET credit = 'B';
WHEN point >= 70
THEN SET credit = 'C';
WHEN POINT >= 60
THEN SET credit = 'D';
ELSE
SET credit = 'F';
END CASE;
SELECT CONCAT('취득점수 ==>', point), CONCAT('학점====>', credit);
END $$
DELIMITER ;
CALL caseProc();

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;
SELECT * FROM buy;
DROP PROCEDURE IF EXISTS whileProc;
DELIMITER $$
CREATE PROCEDURE whileProc()
BEGIN
DECLARE i INT;
DECLARE hap INT;
SET i = 1;
SET hap = 0;
WHILE(i <= 100) DO
SET hap = hap + 1;
SET i = i + 1;
END WHILE;
SELECT '1부터 100까지의 합 -->', hap;
END $$
DELIMITER ;
CALL whileProc();

ITERATE
LEAVE
DROP PROCEDURE IF EXISTS whileProc2;
DELIMITER $$
CREATE PROCEDURE whileProc2()
BEGIN
DECLARE i INT;
DECLARE hap INT;
SET i = 1;
SET hap = 0;
myWhile:
WHILE(i <= 1000) DO
IF (i % 4 = 0)
THEN SET i = i + 1;
ITERATE mywhile;
END IF;
SET hap = hap + 1;
IF(hap > 1000)
THEN LEAVE myWhile;
END IF;
SET i = i + 1;
END WHILE;
SELECT '1부터 100까지의 합 (4의 배수 제외), 1000 넘으면 종료 ==>', hap;
END $$
DELIMITER ;
CALL whileProc2();

use market_db;
PREPARE myQuery FROM 'SELECT * FROM member WHERE mem_id = "BLK"';
EXECUTE myQuery;
DEALLOCATE PREPARE myQuery;
gate_table이 있다면 삭제한다.
다음 내용을 가지고 테이블을 만든다.
id INT 자동증가
entry_time DATETIME
현재 날짜와 시간을 동적으로 넣도록 하자.
그리고 그 결과를 확인하자.
DROP TABLE IF EXISTS gate_table;
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;
SELECT * FROM gate_table;