목록Root (80)
기록 > 기억
프로시저 ● 프로시저 생성 및 호출 # 프로시저 생성 DELIMITER $$ CREATE PROCEDURE 프로시저명() BEGIN SELECT END $$ DELIMITER ; # 프로시저 호출 CALL 프로시저명(); ● DELIMITER 사용 이유 프로시저 안에는 세미콜론이 여러개 있기 때문에 세미콜론 단위로 명령을 읽어들임 → 에러발생! 프로시저를 통으로 명령문이라 인식할수 있도록 구분하기 위함 ● 매개변수 모드 IN 프로시저로 전달 하는 값 OUT 프로시저에서 반환 하는 값 INOUT IN과 OUT 기능을 둘다 함 ● 변수 선언 및 값 할당 # 변수 선언 DECLARE 변수명 데이터타입; # 값 할당 SET 변수명 = 값; ● 조건문 ① IF 문 # IF문 IF 조건 THEN -- A; END ..
내장 함수 ● 문자 함수 # ASCII(문자) → 문자의 아스키코드 값 반환 SELECT ASCII('A'); -- 65 # CONCAT(문자열1, 문자열2, ...) → 문자열 결합 ***** SELECT CONCAT('I', ' love', ' you'); -- I love you # INSERT(문자열, 시작위치, 개수, 새 문자열) → 문자열의 시작위치부터 길이만큼 새 문자열로 변경 SELECT INSERT('I love you', 3, 4, 'hate'); -- I hate you # REPLACE(문자열, 찾을 문자열, 새 문자열) → 문자열에서 찾은 문자열을 새 문자열로 변경 SELECT REPLACE('I love you', 'you', 'her'); -- I love her #LEFT(문..
INSERT / UPDATE / DELETE 문 ● INSERT 문 # 방명록 테이블 CREATE TABLE guestbook( num INT AUTO_INCREMENT PRIMARY KEY, mid VARCHAR(20), mdate DATE, doc VARCHAR(500), pwd VARCHAR(20) ); # INSERT INTO table명(col1, col2, col3, ...) VALUES(val1, val2, val3, ...); # 컬럼의 수와 값의 수는 일치 시켜야 함 # 컬럼의 위치와 값의 위치도 일치 시켜야 함 # 일행 추가 INSERT INTO guestbook(mid, mdate, doc, pwd) VALUES('son', NOW(), 'Hello Son!', '1111'); # 다..
EXISTS ① 서브쿼리가 하나 이상의 행을 반환하면 TRUE를 반환, 그렇지 않으면 FALSE를 반환 ② EXISTS 연산자는 일치하는 행을 찾으면 추가 처리를 종료하기 때문에 쿼리 속도가 향상됨 예제 1) # 하나 이상의 주문을 한 고객 조회 SELECT c.customerNumber, c.customerName FROM customers c WHERE EXISTS ( SELECT 1 FROM orders o WHERE o.customernumber = c.customernumber ); # 고객테이블의 고객번호가 주문테이블에 있는 경우 # 서브쿼리는 일치하는 첫번째 행을 반환함 (TRUE를 반환하고 주문테이블 검사 중지) # 주문을 하지 않은 고객 조회 SELECT c.customerNumber, ..
GROUP BY / HAVING 예제 1) # 주문상태별 총금액 조회 SELECT o.status , SUM(od.quantityOrdered * od.priceEach) AS amount FROM orders o JOIN orderdetails od USING (orderNumber) GROUP BY o.status; status |amount | ----------+----------+ Shipped |8865094.64| Resolved | 134235.88| Cancelled | 238854.18| On Hold | 169575.61| Disputed | 61158.78| In Process| 135271.52| 예제 2) # 발송된 주문들의 연도별 총금액 조회 SELECT YEAR(o.order..
서브쿼리 예제 1) # 미국에 위치한 사무실에서 근무하는 직원들 조회 SELECT lastName, firstName FROM employees WHERE officeCode IN ( SELECT officeCode FROM offices WHERE country = 'USA' ); # 1.서브쿼리 → 미국에 위치한 모든 사무실 코드 반환 # 2.외부쿼리 → 서브쿼리에서 반환한 사무실에서 근무하는 직원의 성과 이름 조회 lastName |firstName|officeCode| ---------+---------+----------+ Murphy |Diane |1 | Patterson|Mary |1 | Firrelli |Jeff |1 | Bow |Anthony |1 | Jennings |Leslie |1 ..
Alias 별칭 안먹히는 현상 ● 에러 발생 SELECT concat(year(paymentDate), '년 ' , month(paymentDate), '월') "결제 연월" , sum(amount) "결제금액 합계" FROM payments WHERE customerNumber IN ( SELECT customerNumber FROM customers WHERE salesRepEmployeeNumber = 1165 ) GROUP BY 결제 연월; 컬럼에 "결제 연월" 이라는 Alias를 주고, 그 별칭을 사용했는데 에러 발생함!! ● 에러 원인 Alias 가 한글이던 영어든 "공백" 을 가지고 있으면 안됨 ● 해결 방안 ① 공백이 들어간 Alias를 사용할 때 백틱(` `) 을 사용 SELECT con..
JOIN 절 예제 ② ① INNER JOIN 한 테이블의 각 행과 다른 테이블의 모든 행을 일치시키며 두 테이블의 열이 포함된 행을 조회 예제 1) # 제품코드, 제품명, 제품라인설명 조회 SELECT p.productCode , p.productName , pl.textDescription FROM products p JOIN productlines pl USING (productLine); # ON p.productLine = pl.productLine 과 같음 예제 2) # 주문번호, 주문상태, 주문번호별 총매출액 조회 SELECT o.orderNumber , o.status , sum(od.quantityOrdered * od.priceEach) "총매출액" FROM orders o JOIN or..