SMALL
  • [자바스크립트]알림 창 열고 닫기
<!DOCTYPE html>
<html lang="en">
  <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>Document</title>
    <link rel="stylesheet" href="main.css" />
    <script src="main.js"></script>
  </head>
  <body>
    <div class="alert-box" id="alert">
      <p id="title">Alert 박스</p>
      <button id="close">닫기</button>
    </div>
    <button onclick="알림창1열기('아이디를 입력해라')">버튼1</button>
    <button onclick="알림창1열기('비번입력해라')">버튼2</button>

    <!-- onclick 안쓰고 이벤트리스너로 닫기 -->
    <script>
      document
        .getElementById("close")
        .addEventListener("mouseover", function () {
          document.getElementById("alert").style.display = "none";
        });
    </script>
  </body>
</html>
.alert-box {
  background: rgb(207, 207, 241);
  color: blue;
  padding: 10px;
  border-radius: 5px;
  display: none;
}
/* 
ui 숨김 - display:none 치면 숨겨집니다.
*/
function 알림창1열기(구멍) {
  document.getElementById("title").innerHTML = 구멍;
  document.getElementById("alert").style.display = "block";
}
// function 알림창2열기() {
//   document.getElementById("title").innerHTML = "비번입력하세요";
//   document.getElementById("alert").style.display = "block";
// }

 

 

 

 

// const는 상수이다. 상수는 변경불가능하다.

// let은 변수이다. 변수는 변경가능하다.

 

 

- 함수연습코드

const sum = function (limit) {
  let output = 0;
  for (let i = 1; i <= limit; i++) {
    output += i;
  }
  return output;
};

console.log(`합은 ${sum(10)}`);
console.log(`합은 ${sum(20)}`);
console.log(`합은 ${sum(30)}`);

const isLeapYear = function (연도) {
  return (연도 % 4 === 0 && 연도 % 100 !== 0) || 연도 % 400 === 0;
};

// 함수연습문제
const 테스트 = function (배열, 콜백함수) {
  for (const 값 of 배열) {
    콜백함수(값);
  }
};

const 함수 = function (콜백함수의_매개변수) {
  console.log(`${콜백함수의_매개변수}번째 안녕하세요`);
};
테스트([52, 273, 103, 32], 함수);
// 콜백함수의_매개변수
LIST

'일반' 카테고리의 다른 글

DOM은 무엇인가  (0) 2022.01.02
자바스크립트 객체  (0) 2022.01.01
[자바스크립트]반복문,배열,객체  (0) 2021.12.29
[자바스크립트]변수,타입,함수,조건문,문자열  (0) 2021.12.29
html 기본 구조 코드  (0) 2021.12.27
SMALL
  • 반복문
  • for 구문
  • while 구문
  • 배열
  • 객체
// 반복문

// 반복문은 알고리즘을 짤 때 기본이 된다고 말할 수 있는 구문이다
// 비슷한 코드를 여러번 실행시켜 코드를 간결하게 만들 수 있다.
// 계속해서 반복되는 코드들을 일일히 적어줄 필요없이
// 반복문을 사용하면 원하는 만큼 반복해서 작업을 수행할 수 있다.

//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'
LIST

'일반' 카테고리의 다른 글

자바스크립트 객체  (0) 2022.01.01
[자바스크립트] 알림창코드, 함수연습코드  (0) 2021.12.31
[자바스크립트]변수,타입,함수,조건문,문자열  (0) 2021.12.29
html 기본 구조 코드  (0) 2021.12.27
정리  (0) 2021.12.24
SMALL
  • 변수
  • 타입
  • 함수
  • 조건문
*// 변수*

*// 변수는 메모리에 저장된다*

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]}`);
LIST

'일반' 카테고리의 다른 글

[자바스크립트] 알림창코드, 함수연습코드  (0) 2021.12.31
[자바스크립트]반복문,배열,객체  (0) 2021.12.29
html 기본 구조 코드  (0) 2021.12.27
정리  (0) 2021.12.24
정리  (0) 2021.12.24
SMALL
<!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>

 

LIST

'일반' 카테고리의 다른 글

[자바스크립트] 알림창코드, 함수연습코드  (0) 2021.12.31
[자바스크립트]반복문,배열,객체  (0) 2021.12.29
[자바스크립트]변수,타입,함수,조건문,문자열  (0) 2021.12.29
정리  (0) 2021.12.24
정리  (0) 2021.12.24
SMALL

SQL 정리

테이블 : 간단히 말하면 엑셀파일과 비슷함

엑셀파일을 특정 주제별로 저장하듯이 테이블에도 특정 주제별 데이터들이 저장되어있다

 

데이터베이스 : 테이블들이 모여있고 SQL을 실행할수 있도록 해주는 하나의 시스템

줄여서 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, ...);

삽입시 주의사항) 속성을 입력한 순서에 맞게 값도 순서대로 입력해야 한다

값이 문자열일 경우 ""으로 묶어준다

 

UPDATE 사용법

UPDATE 테이블명 SET 필드명 값 조건

DELETE 사용법

DELETE FROM 테이블명 조건;

create 테이블 생성

CREATE TABLE 테이블이름

(

    필드이름1 필드타입1,

    필드이름2 필드타입2,

    ...

)

예제)

CREATE TABLE IF NOT EXISTS `dc_notememo` (
  `noteSeq` varchar(20) NOT NULL COMMENT '번호',
  `userNm` varchar(10) DEFAULT '' COMMENT '이름',
  `memo` varchar(4000) DEFAULT '' COMMENT 'Memo',
  `flagYN` varchar(1) DEFAULT 'Y' COMMENT '가용여부(Y:유효/N:삭제)',
  `regDate` datetime DEFAULT NULL COMMENT '최초저장일',
  `issueDate` datetime DEFAULT NULL COMMENT '최종저장일',
  `issueID` varchar(20) DEFAULT '' COMMENT '최종저장자 ID'
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='사용자 관리';

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은 사용자의 편의를 위해 다양한 기능의 내장 함수를 미리 정의하여 제공하고 있습니다.

MySQL에서 미리 정의하여 제공해 주는 대표적인 내장 함수의 종류는 다음과 같습니다.

 

1. 문자열 함수

2. 수학 함수

3. 날짜와 시간 함수

 

문자열함수


문자열 길이

LENGTH() 함수는 전달받은 문자열의 길이를 반환합니다.

SELECT LENGTH('12345678');

문자열 결합

CONCAT() 함수는 전달받은 문자열을 모두 결합하여 하나의 문자열로 반환합니다.

만약 전달받은 문자열 중 하나라도 NULL이 존재하면, NULL을 반환합니다.

 

SELECT CONCAT('Ora', 'cle Cor', 'poration'), 

CONCAT('Oracle', NULL, 'Corporation');

특정 문자열의 위치 검색

LOCATE() 함수는 인수로 전달받은 문자열이 특정 문자열에서 처음으로 나타나는 위치를 찾아서, 해당 위치를 반환합니다.

만약 전달받은 문자열이 특정 문자열 내에 존재하지 않으면 0을 반환합니다.

 

다른 대부분의 프로그래밍 언어에서는 문자열의 첫 번째 문자의 인덱스를 0부터 시작하여 그 위치를 계산합니다.

하지만 MySQL에서는 문자열의 첫 번째 문자의 인덱스를 언제나 1부터 시작하여 계산하므로, 주의를 기울여야 합니다.

 

이때 세 번째 인수로 특정 문자열에서 전달받은 문자열을 찾기 시작할 인덱스를 전달할 수도 있습니다.

 

SELECT LOCATE('abc', 'ababcDEFabc'), 

LOCATE('abc', 'ababcDEFabc', 4);

문자열 추출

LEFT() 함수는 전달받은 문자열의 왼쪽부터 명시한 개수만큼의 문자를 반환합니다.

RIGHT() 함수는 전달받은 문자열의 오른쪽부터 명시한 개수만큼의 문자를 반환합니다.

SELECT LEFT('MySQL PHP HTML Java', 5), 

RIGHT('MySQL PHP HTML Java', 4);

문자열 대소문자 변경

LOWER() 함수는 전달받은 문자열의 문자를 모두 소문자로 변경합니다.

UPPER() 함수는 전달받은 문자열의 문자를 모두 대문자로 변경합니다.

SELECT LOWER('MySQL PHP HTML Java'), 

UPPER('MySQL PHP HTML Java');

문자열 대체

REPLACE() 함수는 전달받은 문자열에서 특정 문자열을 찾은 후에, 찾은 문자열을 대체 문자열로 교체합니다.

SELECT REPLACE('MySQL', 'My', 'MS ');

문자열 다듬기

TRIM() 함수는 전달받은 문자열의 앞이나 뒤, 또는 양쪽 모두에 있는 특정 문자를 제거합니다.

 

TRIM() 함수에서 사용할 수 있는 지정자는 다음과 같습니다.

 

1. BOTH : 전달받은 문자열의 양 끝에 존재하는 특정 문자를 제거함. (기본 설정)

2. LEADING : 전달받은 문자열 앞에 존재하는 특정 문자를 제거함.

3. TRAILING : 전달받은 문자열 뒤에 존재하는 특정 문자를 제거함.

 

만약 지정자를 명시하지 않으면, 자동으로 BOTH로 설정됩니다.

또한, 제거할 문자를 명시하지 않으면, 자동으로 공백을 제거하게 됩니다.

SELECT TRIM('   !!!MySQL PHP HTML Java!!!    '), 

TRIM(LEADING '!' FROM '!!!MySQL PHP HTML Java!!!')

숫자로 이루어진 문자열의 형식화

FORMAT() 함수는 숫자 타입의 데이터를 세 자리마다 쉼표(,)를 사용하는 '#,###,###.##' 형식으로 변환해 줍니다.

하지만 반환되는 데이터의 형식이 숫자 타입이 아닌 문자열 타입이므로, 주의를 기울여야 합니다.

이때 두 번째 인수로 반올림할 소수 부분의 자릿수까지 전달할 수 있습니다.

 

SELECT FORMAT(123456789.123456, 3);

수학 함수

올림과 내림

FLOOR() 함수는 인수로 전달받은 값과 같거나 작은 수 중에서 가장 큰 정수를 반환합니다.

CEIL() 함수는 반대로 인수로 전달받은 값과 같거나 큰 수 중에서 가장 작은 정수를 반환합니다.

 

SELECT FLOOR(10.95),

FLOOR(11.01),

FLOOR(-10.95),

FLOOR(-11.01);
SELECT CEIL(10.95),

CEIL(11.01),

CEIL(11),

CEIL(-10.95),

CEIL(-11.01);
SELECT ROUND(10.49),

ROUND(10.5),

ROUND(-10.5),

ROUND(-10.49);

지수와 로그

SQRT() 함수는 전달받은 수의 제곱근 중 양수값을 반환합니다.

POW() 함수는 전달받은 수의 거듭제곱을 반환합니다.

POW() 함수의 첫 번째 인수로는 밑수를 전달하고, 두 번째 인수로는 지수를 전달합니다.

 

EXP() 함수는 인수로 지수를 전달받아, e의 거듭제곱을 계산하여 반환합니다.

LOG() 함수는 전달받은 수의 자연로그 값을 계산하여 반환합니다.

SELECT SQRT(4), 

POW(2, 3),

EXP(3), 

LOG(3);

삼각 함수

MySQL에서는 다음 함수를 사용하여 쿼리에 간단히 삼각 함수를 사용할 수 있습니다.

SIN() 함수는 전달받은 수의 사인값을, COS() 함수는 코사인값을, TAN() 함수는 탄젠트값을 반환합니다.

SELECT SIN(PI()/2), 

COS(PI()), 

TAN(PI()/4);

기타 함수

ABS(X) 함수는 전달받은 수의 절댓값을 반환합니다.

RAND() 함수는 0.0보다 크거나 같고 1.0보다 작은 하나의 실수를 무작위로 생성하여 반환합니다.

SELECT ABS(-3), 

ROUND(RAND()*100, 0);

날짜와 시간 함수

현재 날짜와 시간 정보

NOW() 함수는 현재 날짜와 시간을 반환합니다.

이때 반환되는 값은 'YYYY-MM-DD HH:MM:SS' 또는 YYYYMMDDHHMMSS 형태로 반환됩니다.

 

CURDATE() 함수는 현재 날짜를 반환합니다.

이때 반환되는 값은 'YYYY-MM-DD' 또는 YYYYMMDD 형태로 반환됩니다.

 

CURTIME() 함수는 현재 시각을 반환합니다.

이때 반환되는 값은 'HH:MM:SS' 또는 HHMMSS 형태로 반환됩니다.

 

SELECT NOW(),

CURDATE(),

CURTIME();

특정 날짜와 시간 정보

DATE() 함수는 전달받은 값에 해당하는 날짜 정보를 반환합니다.

MONTH() 함수는 전달받은 값에서 월에 해당하는 값만을 반환하며, 0부터 12 사이의 값을 가집니다.

DAY() 함수는 전달받은 값에서 일자에 해당하는 값만을 반환하며, 0부터 31 사이의 값을 가집니다.

 

HOUR() 함수는 전달받은 값에서 시간에 해당하는 값만을 반환하며, 0부터 23 사이의 값을 가집니다.

MINUTE() 함수는 전달받은 값에서 분에 해당하는 값만을 반환하며, 0부터 59 사이의 값을 가집니다.

SECOND() 함수는 전달받은 값에서 초에 해당하는 값만을 반환하며, 0부터 59 사이의 값을 가집니다.

 

SELECT DATE('2016-02-19 12:34:56'), 

MONTH('2016-01-02 12:34:56'), 

DAY('2016-01-02 12:34:56'), 

HOUR('12:34:56'), 

MINUTE('12:34:56'), 

SECOND('12:34:56');

요일과 월 이름

MONTHNAME() 함수는 전달받은 값의 월에 해당하는 이름을 반환합니다.

DAYNAME() 함수는 전달받은 값의 요일에 해당하는 이름을 반환합니다.

SELECT MONTHNAME('2017-02-19'), 

DAYNAME('2017-02-19');

연도별, 월별, 주별 일수

DAYOFWEEK() 함수는 전달받은 값의 일자가 해당 주에서 몇 번째 날인지를 반환합니다.

이 함수는 1부터 7 사이의 값을 반환합니다. (일요일 = 1, 토요일 = 7)

 

DAYOFMONTH() 함수는 전달받은 값의 일자가 해당 월에서 몇 번째 날인지를 반환합니다.

이 함수는 0부터 31 사이의 값을 반환합니다.

 

DAYOFYEAR() 함수는 전달받은 값의 일자가 해당 연도에서 몇 번째 날인지를 반환합니다.

이 함수는 1부터 366 사이의 값을 반환합니다.

SELECT DAYOFMONTH('2017-02-19'), 

DAYOFWEEK('2017-02-19'), 

DAYOFYEAR('2017-02-19');

날짜와 시간의 형식화

DATE_FORMAT() 함수는 전달받은 형식에 맞춰 날짜와 시간 정보를 문자열로 반환합니다.

 

DATE_FORMAT() 함수에 인수로 전달할 수 있는 날짜와 시간 표현의 형식은 다음과 같습니다.

SELECT DATE_FORMAT('2017-02-19 12:34:56', '%D %y %a %d %m %b %j');

프로시저

sql문을 매번 하나하나 수행하기보다는 프로시저로 만들어놓은 다음 불러오는 방식

 

select * from memberTBL where memberName = '당탕이';

select * from productTBL where productName = '냉장고';

 

 

트리거

트리거란 테이블에 부착되어서 테이블에 insert나 update 또는 delete 작업이 발생되며 실행되는 코드를 말한다.

 

이벤트

mysql 문법중에는 예약 작업을 수행할 수 있는 이벤트 스케줄러가 있다.
이벤트 스케줄러는 말그대로 특정 이벤트를 자동으로 정기적으로 수행시킬 수 있다.

이벤트 스케줄러 생성하기

CREATE EVENT IF NOT EXISTS [이벤트 이름]

    ON SCHEDULE

    [수행, 반복 할 시간]

    ON COMPLETION NOT PRESERVE

    ENABLE

    COMMENT [코멘트]

    DO

    [수행할 명령]

END

[이벤트이름] 은 해당 이벤트 스케줄의 이름을 정해준다.

[수행,반복 할 시간] 은 해당 명령을 수행하거나 반복할 시간 및 기간을 정해준다.

[코멘트] 는 해당 이벤트의 내용을 입력해주면 된다.

[수행할 명령] 은 해당 이벤트 시간의 수행할 명령을 입력하면 된다.

뷰는 가상의 테이블이라고 생각하면 된다.

뷰는 실제 행동 데이터를 가지고 있지 않다. 실체를 가지고 있지 않으며 진짜 테이블에 링크된 개념이라고 생각하면된다

 

 

 

 

 

LIST
SMALL

select

insert

update

delete

 

create

 

select join

 

select subquery

 

multi select

 

select insert

 

select union

 

함수

 

프로시저

 

트리거

 

이벤트

 

LIST

+ Recent posts