// 반복문
// 반복문은 알고리즘을 짤 때 기본이 된다고 말할 수 있는 구문이다
// 비슷한 코드를 여러번 실행시켜 코드를 간결하게 만들 수 있다.
// 계속해서 반복되는 코드들을 일일히 적어줄 필요없이
// 반복문을 사용하면 원하는 만큼 반복해서 작업을 수행할 수 있다.
//for 구문
let sum = 0;
for (let n = 2; n <= 4; n++) {
//(초기화; 조건식; 증감문;)
sum = sum + n;
}
console.log(sum); //9(2+3+4)
//while 구문
let sum2 = 0;
let n = 2; // 초기화
while (n <= 4) {
// 조건식
sum2 = sum2 + n;
n = n + 1; // 증감문
}
console.log(sum2); // 9
//배열
let arr = [73, 98, 86, 25, 10];
console.log(arr[2]); // 86
arr[2] = 12;
console.log(arr); //[73, 98, 12, 25, 10]
let arr1 = [[73, 98], [86, 25], 10];
console.log(arr1[0]); //[73, 98]
console.log(arr1[0][1]); //98
//객체 object
let user = {
firstName: "GWANGUI",
lastName: "AN",
email: "GWANGUIAN@velog.com",
city: "Ansan",
};
user["firstName"]; // 'AN'
user.firstName; // 'AN'
*// 변수*
*// 변수는 메모리에 저장된다*
let sum; *// 변수 선언*
sum = 3; *// 변수 sum에 3 할당*
*// '='는 '같다'가 아니라 '할당'이다*
sum = 2;
sum = sum + 1; *//sum=3*
sum = sum + 3; *//sum=6*
*// 변수에는 여러가지 타입이 있다.*
*// 숫자, 문자열, Boolean, Null, undefined : 원시자료형(Primitive type)*
*// 배열, 객체, 함수 등 원시자료형이 아닌 모든 것 : 참조자료형(Reference type)*
*// 원시자료형과 참조자료형*
*// 원시자료형이 할당될 때는 '값'이 담긴다.*
*// 참조자료형이 할당될 때는 '주소'가 담긴다. -> 동적으로 크기가 변한다.*
*// 타입 변환 함수*
*// String() : 문자열로 바꿔준다.*
a = String(123); *//123 -> "123"*
typeof a; *// "string"*
*// Number(): 숫자로 바꿔준다*
b = Number("123"); *// "123" -> 123*
typeof b; *// "number"*
*// 함수*
*// 함수를 선언하는 방법에는 함수선언식, 함수표현식, 화살표함수 3가지 방법이 있다*
function Area1(l, h) {
let ans = l * h;
*return* ans;
} *//함수 선언식*
console.log(`함수선언식 : Area1 : ${Area1(2, 3)}`);
const Area2 = function (l, h) {
let ans = l * h;
*return* ans;
}; *//함수 표현식*
console.log(`함수 표현식 : Area2 : ${Area2(2, 35)}`);
const Area3 = (l, h) => {
let ans = l * h;
*return* ans;
}; *//화살표 함수*
console.log(`화살표 함수 : Area3 : ${Area3(3, 3)}`);
const Area3_2 = (l, h) => l * h; *//화살표 함수 : 화살표 뒤의 내용이 return이어서 return을 생략할때는 중괄호도 생략한다.*
console.log(`화살표 함수2 : Area3_2 : ${Area3_2(5, 3)}`);
*// 매개변수(parameter), 전달인자(argument)*
*//매개변수(parameter)*
*//함수의 선언부분에 나열되어 있는 변수,*
*// 여기서는 Area1 함수 선언시에 사용되는 l,h를 매개변수(parameter)라고 한다.*
function Area1(l, h) {
let ans = l * h;
*return* ans;
} *//함수 선언식*
*//전달인자(arguement)*
*//함수를 호출할 때 전달 되는 값, 여기서는 Area1함수에 넣어주는 2,3을 전달인자(argument)라고 한다.*
area = Area1(2, 3);
*// 조건문*
*//비교(=== !==)*
1 === "1"; *//false*
1 == "1"; *//true*
*//'==='는 type을 구분하고 ==는 type을 구분하지 않는다.*
*//그냥 조건문에서는 === !== 를 쓰면 된다.*
*// \\== != 는 쓰지 말자.*
*//Not*
!undefined; *// true: undefined는 false임*
!"Hello"; *// false: 문자열은 true임*
*//기억해야할 6가지 false값 : 조건문을 실행되지 않게 하는 값*
*// if(false)*
*// if(null)*
*// if(undefined)*
*// if(0) // if(1)은 조건문을 항상 실행되게 한다.*
*// if(NaN)*
*// if(' ')*
*// 조건문에서 '?' 를 이용한 조건처리*
*//let result = condition ? value1 : value2*
*//조건 condition이 true이면 value1, false이면 value2 이다.*
let age = prompt("나이를 입력해주세요 .");
let message = age < 20 ? "안녕" : "안녕하세요";
*//age가 20보다 작으면 message = '안녕' , age가 20이상이면 message = '안녕하세요' 이다.*
alert(message);
문자열
// 문자열
let str = "Be developer";
str[0]; // 'B' 문자열은 0,1,2,...(index)번째 형식으로 센다.(배열도 동일)
str.length; // 12 문자열의 길이를 number로 출력한다.
str.indexOf("de"); // 3 찾고자 하는 문자열의 처음으로 일치하는 index를 출력, 찾지 못한 경우 -1 출력
str.lastIndexOf("e"); // 10 indexOf와 동일하나 문자열 뒤에서부터 가장 먼저 일치하는 경우 해당 문자열이 시작하는 index 출력
str.includes("vel"); // true 해당 문자열이 포함되는지 Boolean 형태로 출력
str.split(" "); // ['Be', 'developer'] 해당 문자열이 분리 기준이 되어 분리된 배열 출력
str.substring(2, 4); // ' d' 시작 index에 해당하는 문자열부터 끝 index전까지의 문자열 출력
str.toLowerCase(); // 'be developer' 소문자로 변환된 문자열 출력
str.toUpperCase(); // 'BE DEVELOPER' 대문자로 변환된 문자열 출력
str = str.split(" "); // 문자열의 method는 immutable 하므로 재할당을 해줘야 값이 변경된다.
// 세 개의 단어중 가장 짧은 단어의 길이를 리턴하는 함수.
// Math.min() 과 str.length() 이용
// Math.min(a,b,c,d,..) 는 javascript에서 최솟값을 구하는 함수이다.
// parameter인 a,b,c,d,..들 숫자형이거나, 숫자형으로 변형이 가능한 문자열('3', '98') 이어야 한다.
function findShortestWord(word1, word2, word3) {
let smallestWord = Math.min(word1.length, word2.length, word3.length);
//Math.min(num1,num2,num3,..,) : num1, num2, num3 중에 가장 작은 수 반환.
// parameter들은 숫자형이어야 한다.
return smallestWord;
}
console.log(`${findShortestWord("he", "she", "family")}`);
// str.slice() 를 이용하여 문자열에서 원하는 문자를 추출할 수 있다.
function takeWord(num1, num2, str) {
return str.slice(num1, num2);
}
console.log(`${takeWord(2, 5, "Happy Birthday!")}`);
// str.split(" ")을 이용하여 문자열을 배열로 바꿀 수 있다.
a = "hello world I am human";
//(5) ["hello","world", "I", "am", "human"]
console.log(`${a.split(" ")}`);
console.log(`${a.split(" ")[1]}`);
<!DOCTYPE html> //HTML버전정보(HTML5)
<!--주석:실제로 표현되지 않고 코드에만 보여지는 글-->
<html lang="ko"> //language속성으로 주로 사용하는 나라 언어를 선택할 수 있다(생략가능)
<head>
<meta charset="utf-8"> //문서 캐릭터 설정(글자 깨짐 방지)
<title>사이트이름</title>
</head>
<body>
<header>대게 사이트 이름(로고), 내비게이션, 헤드라인, 검색 등으로 구성된다</header> //헤더 영역
<nav>다른 곳으로 이동하기 위한 링크(link) 또는 이동 방법</nav> //네비게이션 영역
<main> //본문 영역
<section>
섹션의 사전적 의미는 여러 개로 나뉜 것의 한 부분을 의미
내용적 흐름과 구조를 만들기 위해 내용을 나누는 용도로 사용
</section>
</main>
<aside>본문과 따로 구성된 내용을 표시한다</aside> //사이드바 영역
<footer>저작권, 연락정보 등 본문과의 관련성은 있지만 본문에 담기 어려운 내용으로 구성</footer> //푸터 영역
</body>
</html>
줄여서 DB라고도 부른다 DB의 종류는 mysql,mssql,oracle, db2 등 다양하지만 SQL은 database 표준언어로 공통적인 문법으로 사요됨(db별로 약간의 차이는 있음)
select 사용법
SELECT 필드명 FROM 테이블명;
- 테이블로부터 필드명을 선택해 불러온다
예제)
SELECT * FROM dc_account
SELECT aniSeq,aniFeedDate,aniFeedSet1,aniFeed1,aniFeedSet2,aniFeed2,aniFeedSet3,aniFeed3,aniFeedSet4,aniFeed4,aniFeedSet5,aniFeed5 FROM dw_daily_feed;
SELECT * FROM APT_LIST LIMIT 10
SELECT 컬럼명나열 혹은 * FROM 테이블명 LIMIT 보여줄 행의 숫자
SELECT 필드명 FROM 테이블명 where 조건
예제)
SELECT * FROM dc_items WHERE itemSeq
SELECT enrollSeq FROM dc_careenroll where NUMBER = '4';
//조건문추가 and
예제) SELECT itemSeq FROM dc_items WHERE subject = '식대' AND acount = "지출";
BETWEEN
select useddate, accAcount, sum(money) money FROM dc_account WHERE (usedDate BETWEEN '2022-01-01' AND '2022-02-28') AND flagYN ='Y' GROUP BY useddate,accacount ORDER BY useddate asc;
LIKE
select accAcount, SUBJECT, sum(money) money FROM dc_account WHERE usedDate LIKE '%-02-%' AND usedDate like '%2022%' AND accAcount = '수입' AND flagYN ='Y' GROUP BY SUBJECT ORDER BY useddate asc;
select useddate, accAcount, sum(money) money FROM dc_account WHERE usedDate LIKE '%2022-02%' AND flagYN ='Y' AND accAcount = '수입' GROUP BY useddate,accacount ORDER BY useddate asc;
COUNT
예제)
select COUNT(itemSeq) cnt from dawoon.dc_items WHERE subject = '3000' AND acount = '지출' AND flagYN ='Y';
select COUNT(careSeq) cnt from dawoon.dc_caredocument WHERE flagYN ='Y';
Group By
예제)
SELECT acount, subject, COUNT(*) FROM dawoon.dc_items GROUP BY acount, subject HAVING COUNT(*) > 1
SELECT acount, subject FROM dawoon.dc_items GROUP BY acount, subject
select useddate, accAcount, SUM(money) money FROM dc_account WHERE usedDate LIKE '%-02-%' AND usedDate like '%2022%' AND flagYN ='Y' GROUP BY useddate,accacount ORDER BY useddate asc;
MAX
SELECT MAX(accSeq)+1 AS seqMax FROM dc_account;
Replace
SELECT REPLACE('99,999',',','')
ORDER BY
SELECT aniFeedDate AS time, aniFeed1 FROM dw_daily_feed ORDER BY time
CAST
select useddate, accAcount, sum(cast(replace(money,',','') AS INT)) money FROM dc_account WHERE usedDate BETWEEN '2021-01-01' AND '2022-02-22' GROUP BY useddate,accacount ORDER BY useddate asc;
select accAcount, SUBJECT, sum(cast(replace(money,',','') AS INT)) money FROM dc_account WHERE usedDate BETWEEN '2021-01-01' AND '2022-02-22' AND accAcount='지출' GROUP BY SUBJECT ORDER BY useddate asc;
select useddate, accAcount, sum(cast(replace(money,',','') AS INT)) money FROM dc_account WHERE usedDate BETWEEN '2022-02-01' AND '2022-02-23' AND flagYN ='Y' GROUP BY useddate,accacount ORDER BY useddate asc;
insert 사용법
INSERT INTO <테이블명>(속성3, 속성1, 속성2, ...) VALUES(값3, 값1, 값2, ...);
create table dawoon.dc_posorder(number int not null, menu nvarchar(50) null, pay int null, money numeric(18) null, date DATE NULL, primary key clustered (number asc));
select join 사용법
JOIN은 데이터베이스 내의 여러 테이블에서 가져온 레코드를 조합하여 하나의 테이블이나 결과 집합으로 표현해 줍니다.
이러한 JOIN은 보통 SELECT 문과 함께 자주 사용됩니다.
표준 SQL에서는 레코드를 조합하는 방식에 따라 JOIN을 다음과 같이 구분합니다.
1. INNER JOIN
2. LEFT JOIN
3. RIGHT JOIN
INNER JOIN
1. 첫번째테이블이름
INNER JOIN 두번째테이블이름
ON 조건
2. 첫번째테이블이름
JOIN 두번째테이블이름
ON 조건
예제)
SELECT 문서.careSeq, 등록.number, 문서.careStart, 문서.careFinish, 문서.time, 문서.sympton, 문서.count, 문서.injection, 문서.oral, 등록.enrollSeq, 문서.age, 등록.birth, 문서.memo, 문서.flagYN, 문서.regDate, 문서.issueDate, 문서.issueID FROM dc_careenroll 등록 inner JOIN dc_caredocument 문서 ON(등록.enrollSeq = 문서.enrollSeq) GROUP BY 문서.number;
LEFT JOIN
첫번째테이블이름
LEFT JOIN 두번째테이블이름
ON 조건
SELECT * FROM dc_account LEFT JOIN dc_items ON dc_account.subject = dc_items.subject;
RIGHT JOIN
SELECT 등록.number, 등록.enrollSeq, 문서.careStart FROM dawoon.dc_caredocument 문서 RIGHT JOIN dawoon.dc_careenroll 등록 ON (등록.number = 문서.number)
RIGHT OUTER JOIN
SELECT accSeq, usedDate, dc_items.acount, dc_items.itemSeq, dc_items.subject, dc_account.money, content, dc_account.memo, dc_items.flagYN, dc_items.regDate, dc_items.issueDate, dc_items.issueID FROM dc_account RIGHT OUTER JOIN dc_items ON dc_account.subject = dc_items.subject WHERE dc_items.flagYN = "Y"
select subquery 사용법
서브쿼리(subquery)란 다른 쿼리 내부에 포함되어 있는 SELETE 문을 의미합니다.
서브쿼리를 포함하고 있는 쿼리를 외부쿼리(outer query)라고 부르며, 서브쿼리는 내부쿼리(inner query)라고도 부릅니다.
서브쿼리는 반드시 괄호(())로 감싸져 있어야만 합니다.
서브쿼리의 특징
서브쿼리를 사용하면 다음과 같은 장점을 얻을 수 있습니다.
1. 서브쿼리는 쿼리를 구조화시키므로, 쿼리의 각 부분을 명확히 구분할 수 있게 해줍니다.
2. 서브쿼리는 복잡한 JOIN이나 UNION과 같은 동작을 수행할 수 있는 또 다른 방법을 제공합니다.
3. 서브쿼리는 복잡한 JOIN이나 UNION 보다 좀 더 읽기 편합니다.
SELECT ...
FROM (서브쿼리) [AS] 이름
...
multi select 사용법
다중 행 서브 쿼리
서브 쿼리에서 여러 행이 검색되는 쿼리문이다. 연산자를 제외하면 단일 행 서브 쿼리와 같다.
SELECT [DISTINCT] 컬럼, 컬럼 …
FROM 테이블
WHERE 컬럼 <다중 행 연산자> (SELECT 컬럼
FROM 테이블);
다중 열 서브 쿼리
여러 개의 컬럼을 검색하는 서브 쿼리이다.
다중 열 서브 쿼리는 주로 'IN'을 사용하지만 '='도 사용 가능하다. 'IN'의 사용을 권한다.
SELECT [DISTINCT] 컬럼, 컬럼 …
FROM 테이블
WHERE (컬럼1, 컬럼2, …) IN (SELECT 컬럼1, 컬럼2, …
FROM 테이블);
select insert
SELECT 결과 INSERT 하기
SELECT된 결과를 가지고 INSERT 쿼리를 실행하는 문법은 아래와 같다.
All Column
INSERT INTO 들어갈테이블명
SELECT * FROM 조회할테이블명
Some Column
INSERT INTO 들어갈테이블명
(컬럼명1, 컬럼명2, 컬럼명3)
SELECT 컬럼명1, 컬럼명2, 컬럼명3
FROM 조회할테이블명
select union
UNION
UNION은 여러 개의 SELECT 문의 결과를 하나의 테이블이나 결과 집합으로 표현할 때 사용합니다.
이때 각각의 SELECT 문으로 선택된 필드의 개수와 타입은 모두 같아야 하며, 필드의 순서 또한 같아야 합니다.
SELECT 문에 UNION을 적용하는 문법은 다음과 같습니다.
SELECT 필드이름
FROM 테이블이름
UNION
SELECT 필드이름
FROM 테이블이름
UNION ALL
중복되는 레코드까지 모두 출력하고 싶다면, ALL 키워드를 사용해야 합니다.
SELECT 필드이름
FROM 테이블이름
UNION ALL
SELECT 필드이름
FROM 테이블이름
예제)
SELECT useddate, MAX(`수입`) `수입`, MAX(`지출`) `지출` FROM ( select useddate, sum(money) `수입` ,0 `지출` FROM dc_account WHERE (usedDate BETWEEN '2022-01-01' AND '2022-02-28') AND flagYN ='Y' AND accacount='수입' GROUP BY useddate UNION all select useddate, 0 `수입`, sum(money) `지출` FROM dc_account WHERE (usedDate BETWEEN '2022-01-01' AND '2022-02-28') AND flagYN ='Y' AND accacount='지출' GROUP BY useddate ) Z group by useddate ORDER BY useddate ASC;
SELECT z.useddate, MAX(`수입`) `수입`, MAX(`지출`) `지출` FROM ( SELECT SUBSTRING(dc.useddate,6,2) useddate, sum(money) `수입` ,0 `지출` FROM dc_account dc WHERE (dc.usedDate BETWEEN '2022-01-01' AND '2022-02-28') AND flagYN ='Y' AND accacount='수입' GROUP BY dc.useddate UNION all select substring(dc.useddate,6,2) useddate, 0 `수입`, sum(money) `지출` FROM dc_account dc WHERE (dc.usedDate BETWEEN '2022-01-01' AND '2022-02-28') AND flagYN ='Y' AND accacount='지출' GROUP BY dc.useddate ) Z group BY z.useddate ORDER BY z.useddate ASC;
SELECT useddate, MAX(`수입`) income, MAX(`지출`) outcome FROM(select useddate, sum(money) `수입` , 0 `지출` FROM dc_account WHERE(usedDate BETWEEN '2022-02-01' AND '2022-02-28') AND flagYN = 'Y' AND accacount = '수입' GROUP BY useddate UNION all select useddate, 0 `수입`, sum(money) `지출` FROM dc_account WHERE(usedDate BETWEEN '2022-02-01' AND '2022-02-28') AND flagYN = 'Y' AND accacount = '지출' GROUP BY useddate) Z group by useddate ORDER BY useddate ASC;
SELECT z.useddate, MAX(`수입`) `수입`, MAX(`지출`)`지출` FROM ( SELECT SUBSTRING(dc.useddate,6,2) useddate, SUM(money) `수입`, 0 `지출` FROM dc_account dc WHERE (dc.useddate BETWEEN '2022-01-01' AND '2022-02-28') AND flagYN='Y' AND accacount='수입' GROUP BY dc.useddate UNION ALL SELECT SUBSTRING(dc.useddate,6,2) useddate, 0 `수입`, SUM(money) `지출` FROM dc_account dc WHERE (dc.useddate BETWEEN '2022-01-01' AND '2022-02-28') AND flagYN='Y' AND accacount='지출' GROUP BY dc.usedDate) z GROUP BY z.useddate ORDER BY z.useddate ASC;
SELECT useddate, MAX(`수입`)`수입`,MAX(`지출`)`지출` FROM (SELECT useddate, SUM(money)`수입`,0`지출` FROM dc_account WHERE(useddate BETWEEN '2022-01-01' AND '2022-02-28') AND flagYN='Y' AND accacount='수입' GROUP BY useddate UNION ALL SELECT useddate, 0 `수입`, SUM(money)`지출` FROM dc_account WHERE (useddate BETWEEN '2022-01-01' AND '2022-02-28') AND flagYN='Y' AND accacount='지출' GROUP BY useddate)z GROUP BY useddate ORDER BY useddate ASC;
SELECT useddate, MAX(`수입`)`수입`,MAX(`지출`)`지출` FROM (SELECT useddate, SUM(money)`수입`,0`지출` FROM dc_account WHERE(useddate BETWEEN '2022-01-01' AND '2022-02-28') AND flagYN='Y' AND accacount='수입' GROUP BY useddate UNION ALL SELECT useddate, 0 `수입`, SUM(money)`지출` FROM dc_account WHERE (useddate BETWEEN '2022-01-01' AND '2022-02-28') AND flagYN='Y' AND accacount='지출' GROUP BY useddate)z GROUP BY useddate ORDER BY useddate ASC;
SELECT useddate, MAX(`수입`) income, MAX(`지출`) outcome FROM(select useddate, sum(money) `수입` , 0 `지출` FROM dc_account WHERE(usedDate BETWEEN '2022-02-01' AND '2022-02-28') AND flagYN = 'Y' AND accacount = '수입' GROUP BY useddate UNION all select useddate, 0 `수입`, sum(money) `지출` FROM dc_account WHERE(usedDate BETWEEN '2022-02-01' AND '2022-02-28') AND flagYN = 'Y' AND accacount = '지출' GROUP BY useddate) Z group by useddate ORDER BY useddate ASC;
SubString
SELECT useddate, MAX(`수입`)`수입`,MAX(`지출`)`지출` FROM (SELECT useddate, SUM(money)`수입`,0`지출` FROM dc_account WHERE(useddate BETWEEN '2022-01-01' AND '2022-02-28') AND flagYN='Y' AND accacount='수입' GROUP BY useddate UNION ALL SELECT useddate, 0 `수입`, SUM(money)`지출` FROM dc_account WHERE (useddate BETWEEN '2022-01-01' AND '2022-02-28') AND flagYN='Y' AND accacount='지출' GROUP BY useddate)z GROUP BY useddate ORDER BY useddate ASC;
함수
MySQL 내장 함수
MySQL은 사용자의 편의를 위해 다양한 기능의 내장 함수를 미리 정의하여 제공하고 있습니다.