class_08.js
let result1 = 2 > 1;
let result2 = 2 == 1;
let result3 = 2 != 1;
console.log(result1);
console.log(result2);
console.log(result3);
//문자열 비교
console.log("------------------------")
let result4 = 'Z' > 'A';
let result5 = 'Glow' > 'Glee';
let result6 = 'Bee' > 'Be';
console.log(result4);
console.log(result5);
console.log(result6);
console.log("------------------------")
// 다른 형을 가진 값 간의 비교
// 비교하려는 값에 자료형이 다르면
// 자바스크립트는 이 값들을 숫자형으로 바꾼다.
let result7 = '2' > 1;
let result8 = '01' == 1;
console.log(result7);
console.log(result8);
console.log("------------------------")
// === 일치 연산자
//== 동등 연산자
let result9 = 0 == false; // 0과 false를 구별 못합니다.
let result10 = '' == false; // 빈 문자열이라도 구분하지 못함
console.log(result9);
console.log(result10);
//일치 연산자(strict) 동등 연산자
let result11 = 0 === false;
let result12 = '' === false;
console.log(result11);
console.log(result12);
class_09.js
/*
null 병합 연산자 ??
최근에 추가됨.
a ?? b 의 평가
a가 null도 아니고 undefined도 아니면 a
그 외의 경우는 b이다.
let x = a ?? b;
x = (a !== null && a !== undefined) ? a : b;
*/
let firstName = null;
let lastName = null;
let nickName = "바이올렛";
let myName = firstName ?? lastName ?? nickName;
console.log(myName);
let nickName2 = "퍼플"
let myName2 = firstName ?? lastName ?? nickName2;
console.log(myName2);
class_10-1.js
<!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>class_10</title>
<script>
// 지역 변수
function showMessage() {
let message = "안녕하세요!";
alert(message);
}
alert(message);
//함수 내에서 선언한 변수인 지역 변수는 함수 안에서만 접근할 수 있다.
</script>
</head>
<body>
<script>
showMessage();
</script>
</body>
</html>
class_10-2.js
<!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>class_10</title>
<script>
//외부 변수
let userName = 'John';
function showMessage() {
let message = 'Hello' + userName;
alert(message);
}
showMessage();
</script>
</head>
<body>
</body>
</html>
class_10-3.js
<!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>class_10</title>
<script>
let userName = 'John';
function showMessage() {
userName = "Bob";
let message = 'Hello, ' + userName;
alert(message);
}
//생각 !!
//1.
// alert(userName); // 함수 호출 전이므로 John이 출력됨
showMessage();
//2.
alert(userName); // 함수에 의해 Bob로 값이 변경됨
</script>
</head>
<body>
</body>
</html>
class_10-4.js
<!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>class_10</title>
<script>
let userName = 'John';
function showMessage() {
let userName = "Bob"; // 외부변수와 같은 이름을 가진 지역변수
let message = 'Hello, ' + userName; // Bob
alert(message);
}
showMessage();
alert(userName);
// 함수는 외부 변수에 접근하지 않습니다.
</script>
</head>
<body>
</body>
</html>
-- sqlDB
DROP DATABASE IF EXISTS sqldb;
CREATE DATABASE sqldb;
USE sqldb;
CREATE TABLE usertbl -- 회원 테이블
(
userID CHAR(8) NOT NULL PRIMARY KEY, -- 사용자 아이디 (PK)
name VARCHAR(10) NOT NULL, -- 이름
birthYear INT NOT NULL, -- 출생연도
addr CHAR(2) NOT NULL, -- 지역(경기, 서울, 2글자만 입력)
mobile1 CHAR(3), -- 국번 (011, 010)
mobile2 CHAR(8), -- 휴대폰의 나머지 번호(하이픈 제외)
height SMALLINT, -- 키 (+-32768)
mDate DATE -- 회원가입일
);
select * from usertbl;
DELETE from usertbl;
INSERT INTO usertbl VALUES('LSG', '이승기', 1987, '서울', '011', '1111111', 182, '2008-8-8');
INSERT INTO usertbl VALUES('KBS', '김범수', 1979, '경남', '011', '2222222', 173, '2012-4-4');
INSERT INTO usertbl VALUES('KKH', '김경호', 1971, '전남', '019', '3333333', 177, '2007-7-7');
INSERT INTO usertbl VALUES('JYP', '조용필', 1950, '경기', '011', '4444444', 166, '2009-4-4');
INSERT INTO usertbl VALUES('SSK', '성시경', 1979, '서울', NULL , NULL , 186, '2013-12-12');
INSERT INTO usertbl VALUES('LJB', '임재범', 1963, '서울', '016', '6666666', 182, '2009-9-9');
INSERT INTO usertbl VALUES('YJS', '윤종신', 1969, '경남', NULL , NULL , 170, '2005-5-5');
INSERT INTO usertbl VALUES('EJW', '은지원', 1972, '경북', '011', '8888888', 174, '2014-3-3');
INSERT INTO usertbl VALUES('JKW', '조관우', 1965, '경기', '018', '9999999', 172, '2010-10-10');
INSERT INTO usertbl VALUES('BBK', '바비킴', 1973, '서울', '010', '0000000', 176, '2013-5-5');
-- 구매 테이블 만들기
CREATE TABLE buytbl -- 회원 구매 테이블
(
num INT AUTO_INCREMENT NOT NULL PRIMARY KEY, -- 순번(pk)
userID CHAR(8) NOT NULL, -- 아이디 (PK)
prodName CHAR(8) NOT NULL, -- 물품명
groupName CHAR(4), -- 분류
price INT NOT NULL, -- 단가
amount SMALLINT NOT NULL,
FOREIGN KEY(userID)REFERENCES usertbl(userID)
);
select * FROM buytbl;
INSERT INTO buytbl VALUES(NULL, 'KBS', '운동화', NULL , 30, 2);
INSERT INTO buytbl VALUES(NULL, 'KBS', '노트북', '전자', 1000, 1);
INSERT INTO buytbl VALUES(NULL, 'JYP', '모니터', '전자', 200, 1);
INSERT INTO buytbl VALUES(NULL, 'BBK', '모니터', '전자', 200, 5);
INSERT INTO buytbl VALUES(NULL, 'KBS', '청바지', '의류', 50, 3);
INSERT INTO buytbl VALUES(NULL, 'BBK', '메모리', '전자', 80, 10);
INSERT INTO buytbl VALUES(NULL, 'SSK', '책' , '서적', 15, 5);
INSERT INTO buytbl VALUES(NULL, 'EJW', '책' , '서적', 15, 2);
INSERT INTO buytbl VALUES(NULL, 'EJW', '청바지', '의류', 50, 1);
INSERT INTO buytbl VALUES(NULL, 'BBK', '운동화', NULL , 30, 2);
INSERT INTO buytbl VALUES(NULL, 'EJW', '책' , '서적', 15, 1);
INSERT INTO buytbl VALUES(NULL, 'BBK', '운동화', NULL , 30, 2);
-- where 절
use sqldb;
SELECT * FROM usertbl WHERE name = '김경호';
-- 관계연산자 사용
-- and
SELECT userID, name FROM usertbl WHERE birthYear >= 1970 AND height >= 182;
-- or
SELECT userID, name FROM usertbl WHERE birthYear >= 1970 OR height >= 182;
-- BETWEEN AND
-- 키가 180 ~ 183인 사람을 조회
SELECT userID, name FROM usertbl WHERE height BETWEEN 180 AND 183;
SELECT userID, name FROM usertbl WHERE height>=180 AND height<=183;
-- IN
-- 지역이 경남, 전남, 경북인 사람의 정보를 확인
SELECT name, addr FROM usertbl WHERE addr = '경남' or addr = '전남' or addr = '경북';
-- 이와 동일하게 연속적인 값이 아닌 이상적인 값을 위해 IN구문을 사용할 수 있다.
SELECT name, addr FROM usertbl WHERE addr IN('경남','전남','경북');
SELECT * FROM usertbl;
-- 경기와 서울에 포함된 사람만 출력해주세요
SELECT name, addr FROM usertbl WHERE addr IN('서울','경기');
-- LIKE (주의점 ! = 사용시 검색이 안됨)
SELECT name, height FROM usertbl WHERE name LIKE '김%';
SELECT name, height FROM usertbl WHERE name LIKE '_종신';
SELECT name, height FROM usertbl WHERE name LIKE '_용%';
-- 조용필__사용해주셔서 감사합니다.
-- 서브쿼리(SubQuery 하위튀김)
-- 서브쿼리란 간단히 말해 쿼리문 안에 또 쿼리문이 들어 있는 것을 말한다.
-- ex) 김경호보다 키가 크거나 같은 사람의 이름과 키를 출력해주세요
-- 1
SELECT name, height FROM usertbl WHERE name = '김경호'; -- 177
-- 2
SELECT name, height FROM usertbl WHERE height >= 177;
-- 1과 2를 합치고 싶으면 쿼리 안에 쿼리를 만드는 서브쿼리문
-- 3
SELECT name, height FROM usertbl
WHERE height > (SELECT height FROM usertbl WHERE name = '김경호');
SELECT*FROM usertbl;
-- 1 김범수보다 키가 크거나 같은 사람을 출력해주세요 한방쿼리 사용
SELECT name, height FROM usertbl
WHERE height >= (SELECT height FROM usertbl WHERE name = '김범수');
-- 2 지역이 경남에 사는 사람보다 키가 크거나 같은 사람을 추출
-- ANY, ALL
SELECT name, height FROM usertbl
WHERE height >= (SELECT height FROM usertbl where addr = '경남'); -- 경남에 사는 사람이 2명이라 오류
-- ANY 구문 (둘 다 해당되는 경우에 조건들을 출력) 170도 좋고 173도 좋다
SELECT name, height FROM usertbl
WHERE height >= ANY(SELECT height FROM usertbl where addr = '경남');
-- ALL 구문 (둘 다 만족해야 되는 조건을 추출) 173보다 큰 사람만 검색
SELECT name, height FROM usertbl
WHERE height >= ALL(SELECT height FROM usertbl where addr = '경남');
-- ORDER BY : 결과물에 대한 영향을 미치지는 않지만 결과가 출력되는 순서를 조절하는 구문이다.
SELECT name, mDate FROM usertbl ORDER BY mDate ASC; -- 오름차순
SELECT name, mDate FROM usertbl ORDER BY mDate DESC; -- 내림차순
SELECT * FROM usertbl;
-- 정렬을 두 가지 조건
-- 문제 name, height height 내림차순 name 오름차순
SELECT name, height FROM usertbl ORDER BY height DESC, name ASC;
-- order by 절을 MYSQL 성능을 상당히 떨어뜨릴 소지가 있기 때문에 꼭 필요한 경우가 아니라면 사용하지 않는 것이 좋다.
-- DISTINCT 문구
SELECT addr FROM usertbl;
SELECT DISTINCT addr FROM usertbl ORDER BY addr;
-- LIMIT 문구
SELECT name, addr FROM usertbl LIMIT 3; -- 상위 3개만 보여달라
-- LIMIT 시작, 끝
SELECT name, addr FROM usertbl ORDER BY name LIMIT 3, 5; -- (0번부터 시작), 5개
-- 테이블을 복사하는 CREATE TABLE
CREATE TABLE buyTBL2(SELECT * FROM buytbl); -- 회원가입 기능을 만드는 데 새로운 컬럼을 추가해서 추가, 삭제, 수정
-- 특정한 열만 복사해서 만들수도 있다.
CREATE TABLE buyTBL3(SELECT num, userid, prodName FROM buytbl);
SELECT * FROM buyTbl;
SELECT * FROM buyTbl2;
-- 주의할 점 (테이블 복사시에는) primary key 및 foreing key 등 제약조건은 복사되지 않는다.
-- GROUP BY
-- 시나리오1 우리 쇼핑몰에서 사용자별 몇 건의 구매를 했는지 확인하고 싶다.
USE sqldb;
SELECT userID, amount FROM buytbl ORDER BY userID;
-- 그룹을 만들어서 결과를 낸다.
SELECT userID, amount
FROM buytbl
GROUP BY userID;
-- 집계 함수
SELECT userID, sum(amount)
FROM buytbl
GROUP BY userID;
-- 별칭 사용하기
SELECT userID AS '사용자 아이디', SUM(amount) AS '총 구매 개수'
FROM buytbl
GROUP BY userID;
-- 시나리오2 사용자별 총 구매액의 총합을 출력하자 (별칭 사용)
SELECT userID AS '사용자 아이디', SUM(price) AS '총구매액'
FROM buytbl
GROUP BY userID;
-- 집계함수 sum과 group by 절은 함께 자주 사용된다.
-- ABG(),MIN(),MAX(),COUNT()
SELECT*FROM buytbl;
-- 시나리오3 전체 구매자가 구매한 물품의 개수의 평균을 구해보자
SELECT AVG(amount) AS '평균 구매 개수'
FROM buytbl;
-- 시나리오4 사용자별 평균 몇개의 물품을 구매했는지 평균을 내보자.
SELECT userID, AVG(amount) AS '평균 구매 개수'
FROM buytbl
GROUP BY userID;
drop table buytbl2;
-- 시나리오5 가장 큰 키와 가장 작은 키의 회원 이름과 키를 출력해보자
-- 주의 1
SELECT name, MAX(height), MIN(height) FROM usertbl;
-- 결과 187, 166 결과는 맞지만 이름은 한명만 나온다.
-- 주의 2
SELECT name, MAX(height), MIN(height)
FROM usertbl
GROUP BY name;
-- 서브쿼리로 조합해서 사용하는 것이 가장 수월하다.
SELECT name, height
FROM usertbl
WHERE height=(SELECT MAX(height)FROM usertbl)
OR height = (SELECT MIN(height)FROM usertbl);
-- 시나리오6 휴대폰이 있는 사용자 수를 카운터 하자
SELECT*FROM usertbl;
SELECT count(*) FROM usertbl; -- 전체 회원의 수
-- 한번 쿼리 문을 작성해보세요 mobile1 별칭 휴대폰이 있는 사용자
SELECT count(mobile1) AS '휴대폰이 있는 사용자' FROM usertbl;
-- !! Having 절
SELECT userID AS '사용자', SUM(price*amount)AS '총구매액'
FROM buytbl
GROUP BY userID;
-- 시나리오1 천원 이상 구매한 회원에게 사은품을 증정하고 싶다.
-- 실행 안되는 쿼리문
SELECT userID AS '사용자', SUM(price*amount)AS '총구매액'
FROM buytbl
WHERE SUM(price*amount)>1000
GROUP BY userID;
-- 정답
SELECT userID AS '사용자', SUM(price*amount)AS '총구매액'
FROM buytbl
GROUP BY userID
Having SUM(price*amount)>1000;
-- 필요하다면 ORDER BY 추가 가능하다
SELECT userID AS '사용자', SUM(price*amount)AS '총구매액'
FROM buytbl
GROUP BY userID
Having SUM(price*amount)>1000
ORDER BY SUM(price*amount)ASC;
-- ROLLUP
-- 총합 또는 중간 합계가 필요하다면 GROUP BY 절과 함께 WITH ROLLUP문을 사용하면 된다.
SELECT num,groupName,sum(price*amount) AS '비용'
FROM buytbl
GROUP BY groupName, num
WITH ROLLUP;
SELECT num,groupName,sum(price*amount) AS '비용'
FROM buytbl
GROUP BY groupName
WITH ROLLUP;
/*
SELECT
FROM
WHERE
GROUP BY
HAVING
ORDER BY
LIMIT
SQL (STRUCTURED QUERY LANGUAGE)- 분류
쿼리문의 종류
DML(Data Maipulation Language) - 데이터 조작 언어
- 데이터를 조작 (삽입, 수정, 삭제, 선택)하는데 사용되는 언어
DDL(Data Definition Language) - 데이터 정의 언어
- 데이터 베이스를 생성, 테이블, 뷰, 인덱스 개체 생성, 삭제 변경하는 질의어
CREATE
DROP
ALTER
TRUNCATE
DCL(Data Control Language) - 데이터 제어 언어
GRANT = 특정 데이터베이스 사용자에 특정 작업에 대한 수행 권한을 부여한다.
REVOKE = 특정 데이터베이스 사용자에게 특정 작업에 대한 수행 권한을 박탈 또는 회수한다.
ㄴ면접용
*/
'코리아 IT아카데미 > grid·flex·mySql·jsp' 카테고리의 다른 글
14일차 | json 파일 만들기, 프로그램 설치, 다이나믹 웹 프로젝트 만들기 (0) | 2021.12.02 |
---|---|
13일차 | Javascript, mySQL (0) | 2021.12.01 |
11일차 | sql (0) | 2021.11.29 |
10일차 | flex 14,15,17 / sql (0) | 2021.11.26 |
9일차 | flex , SQL (0) | 2021.11.25 |