Day24
37958 ワード
Day24
1.スクリプトをインストールし、スクリプトによって生成されたテーブルをバインドします/(SQLPLSSQSL Sample w 2.0.sql)
2.クエリーは、結合タイプとoracleタイプ、Ansiタイプを使用して実装できます.
3.署名の概念を理解し、体現することができる.
授業の進度.
DML、DDL、TCL順(CRUD)->インストール->アーキテクチャ(勘定科目、権限、テーブル)->SELECT構文->集約関数->関数(数値、文字列、日付)
->結合(テーブル間のカラムマッチング)->サブクエリ(ネストされたクエリ)->CRUD[VIEW]->制約
->トランザクション->トリガ->インデックス->ユーザー関数、プロシージャ(PLS/SQL)
講師はここで何人かやらなくてもいいと言っているようです
質問する
Q1.'「2010年1月1日」を基準に、入社10年以上の従業員の勤務年数を照会します.
ただしMonths BETWEEN(「10/01/01」、目標欄)を利用して、社員の名前、入社日、別名で勤務年数を求めます.SELECT EMP_NAME,HIRE_DATE,MONTHS_BETWEEN('10/01/01',HIRE_DATE)/12 AS 근무년수
FROM EMPLOYEE
WHERE MONTHS_BETWEEN('10/01/01',HIRE_DATE) > 120;
Q2.私たちは400人の従業員の名前と給料を印刷します.SELECT EMP_NAME,SALARY
FROM EMPLOYEE
WHERE EMP_ID = 100;
WHERE EMP_ID = TO_CHAR(100); ->명시 형 변환
WHERE EMP_ID = '100';
Q3.名前と入社日を別名で印刷しますが、入社日は0000-00-00で印刷します.
ただしJOB IDはJ 7のみ抽出される.
EX) N<-> C <-> DSELECT EMP_NAME AS 이름 ,TO_CHAR(HIRE_DATE,'YYYY-MM-DD') AS 입사일
FROM EMPLOYEE
WHERE JOB_ID = 'J7';
SELECT EMP_NAME AS 이름 ,TO_CHAR(HIRE_DATE,'YYYY"년"-MM"월"-DD"일"') AS 입사일
Q4. JOB IDがJ 1、J 2の従業員の氏名、基本入社日、詳細入社日を別名として出力します.
詳細入社日を0000/00:00:00に出力します.SELECT EMP_NAME AS 이름,HIRE_DATE AS 기본입사일,TO_CHAR(HIRE_DATE,'YYYY/MM/DD HH24:MI:SS') AS 상세입사일
FROM EMPLOYEE
WHERE JOB_ID IN('J1','J2');
===========================WHERE JOB_ID ='J1' OR JOB_ID ='J2';
Q5. 寒暑期90/04/012090/04/0113:30:30
90年04月01日入社社員の名前と入社日を印刷します.SELECT EMP_NAME,HIRE_DATE
FROM EMPLOYEE
WHERE TO_CHAR(HIRE_DATE,'YYMMDD')='900401';
===========================WHERE HIRE_DATE = TO_DATE('900401 133030','YYMMDD HH24MISS');
RR日付フォーマット
Q6. Oracleに表示される世紀RR日付フォーマット
SELECT EMP_NAME,HIRE_DATE,MONTHS_BETWEEN('10/01/01',HIRE_DATE)/12 AS 근무년수
FROM EMPLOYEE
WHERE MONTHS_BETWEEN('10/01/01',HIRE_DATE) > 120;
SELECT EMP_NAME,SALARY
FROM EMPLOYEE
WHERE EMP_ID = 100;
WHERE EMP_ID = TO_CHAR(100); ->명시 형 변환
WHERE EMP_ID = '100';
SELECT EMP_NAME AS 이름 ,TO_CHAR(HIRE_DATE,'YYYY-MM-DD') AS 입사일
FROM EMPLOYEE
WHERE JOB_ID = 'J7';
SELECT EMP_NAME AS 이름 ,TO_CHAR(HIRE_DATE,'YYYY"년"-MM"월"-DD"일"') AS 입사일
SELECT EMP_NAME AS 이름,HIRE_DATE AS 기본입사일,TO_CHAR(HIRE_DATE,'YYYY/MM/DD HH24:MI:SS') AS 상세입사일
FROM EMPLOYEE
WHERE JOB_ID IN('J1','J2');
WHERE JOB_ID ='J1' OR JOB_ID ='J2';
SELECT EMP_NAME,HIRE_DATE
FROM EMPLOYEE
WHERE TO_CHAR(HIRE_DATE,'YYMMDD')='900401';
WHERE HIRE_DATE = TO_DATE('900401 133030','YYMMDD HH24MISS');
SELECT EMP_NAME,HIRE_DATE,TO_CHAR(HIRE_DATE,'YYYY/MM/DD')
FROM EMPLOYEE
WHERE EMP_NAME='한선기';
===========================SELECT EMP_NAME,HIRE_DATE,TO_CHAR(HIRE_DATE,'RRRR/MM/DD')
FROM EMPLOYEE
WHERE EMP_NAME='한선기';
講師は簡単だと言っていますが、正直これは何なのか分かりません.
第2の例から見ると、現在は1995年である.
最後に2番目の数字95を持って代入します.
1.95は、底部50~99に相当します.
2.指定した年は17で、左側にあります.
3.再来世紀の回車交差点->RR回車再来世紀2017
YYは、現在の年に基づいて指定された日付を入力します.
Q7.RRとYYを比較して印刷します.
SELECT '2009/10/14' AS 현재, '95/10/27' AS 입력,
TO_CHAR(TO_DATE('95/10/27','YY/MM/DD'),'YYYY/MM/DD') AS YY
SELECT '2009/10/14' AS 현재, '95/10/27' AS 입력,
TO_CHAR(TO_DATE('95/10/27','YY/MM/DD'),'YYYY/MM/DD') AS YY형식1,
TO_CHAR(TO_DATE('95/10/27','YY/MM/DD'),'RRRR/MM/DD') AS YY형식2,
TO_CHAR(TO_DATE('95/10/27','RR/MM/DD'),'YYYY/MM/DD') AS RR형식1,
TO_CHAR(TO_DATE('95/10/27','RR/MM/DD'),'RRRR/MM/DD') AS RR형식2
FROM DUAL;
SELECT EMP_NAME,HIRE_DATE,TO_CHAR(TO_DATE('90/04/01','RR/MM/DD'),'YYYY/MM/DD')
FROM EMPLOYEE
WHERE EMP_NAME ='한선기';
DECODE
Q8. その他の単行関数-DECODE
SELECT構文有限を使用してIF-ELSEロジックを実装するOracle関数
DECODE(expr,search1,result1[, searchN, resultN,...][, default])
expr:ターゲット列または文字列
search 1:exprと比較する値
結果1:IF expr=search 1が返す値
default:exprとsearch 1が一致しない場合のデフォルトの戻り値
defaultが指定されておらず、exprとsearch 1が一致しない場合はNULL値を返します.
従業員テーブルに従業員の名前と性別を印刷します.
SELECT EMP_NAME, DECODE(SUBSTR(EMP_NO,8,1), '1','남','2','여','3','남','4','여')AS 성별
FROM EMPLOYEE;
------------------1、3=「男」残りの「女」SELECT EMP_NAME, DECODE(SUBSTR(EMP_NO,8,1), '1','남','3','남','여')AS 성별
FROM EMPLOYEE;
Q9. 「≪従業員|Employee|Planning≫」表で、従業員番号、従業員名およびマネージャを別名として出力します.管理者がいない場合は、「なし」として出力されます.DECODE
SELECT EMP_ID AS "사원의 번호" , EMP_NAME AS "사원의 이름",
DECODE(MGR_ID, NULL,'없음', MGR_ID) AS 관리자
FROM EMPLOYEE;
==============================SELECT EMP_ID AS "사원의 번호" , EMP_NAME AS "사원의 이름",
NVL(MGR_ID, '없음') AS 관리자
FROM EMPLOYEE;
Q10. 社員の名前、職業、給料、昇給を別称で印刷する昇給はDECODEを利用して、もし雑なIDがJ 7ならば、給料の1.1、J 6、給料の1.15、
J 5面給与の1.2、残りは1.05アップ
SELECT EMP_NAME AS 이름, JOB_ID AS 직업,
TO_CHAR(SALARY, 'L999,999,999') AS 봉급,
DECODE(JOB_ID, 'J7', SALARY*1.1, 'J6', SALARY*1.15, 'J5', SALARY*1.2, SALARY*1.05) AS 인상급여
FROM EMPLOYEE;
Q11.ANSI標準構文、DECODE関数に類似SELECT EMP_NAME AS "사원의 이름", JOB_ID AS "직업",
TO_CHAR(SALARY, 'L999,999,999') AS 봉급,
CASE JOB_ID
WHEN 'J7' THEN SALARY*1.1
WHEN 'J6' THEN SALARY*1.15
WHEN 'J5' THEN SALARY*1.2
ELSE SALARY*1.05 END AS 인상급여
FROM EMPLOYEE;
Q12. 従業員の番号、名前、区分を印刷しますが、CASE文を区別して使用します.分割給与が300以下であれば、初級、400以下であれば、中級剰余分は上級に出力されます.
SELECT EMP_ID AS "사원의 번호", EMP_NAME AS 이름,
TO_CHAR(SALARY, 'L999,999,999') AS 봉급,
CASE WHEN SALARY <= 3000000 THEN '초급'
WHEN SALARY <= 4000000 THEN '중급'
ELSE '고급' END AS 구분
FROM EMPLOYEE;
Q13.社員の名前と電子メールのIDを印刷します.ただしIDは電子メールのIDのみを出力します.EX ) sg_ahn@vccあ、comならsg ahnのみIDとして出力し、SUBSTR INSTR
SELECT EMP_NAME, EMAIL,EMP_ID, SUBSTR(EMAIL,1,INSTR(EMAIL, '@')-1)AS ID
FROM EMPLOYEE;
Q14. 基本平均、重複除外平均、NULL平均を含むBOUNUS PCTの平均を計算します.SELECT AVG(BONUS_PCT) "기본 평균" ,
AVG(DISTINCT BONUS_PCT) "중복 제거",
AVG(NVL(BONUS_PCT,0)) "NULL 포함 평균"
FROM EMPLOYEE;
=================================joinの必要性を考えてみましょう。
つまり、別のテーブルに存在する列を参照して、交差状態でクエリーを行うことができます.
FROM EMPLOYEE E, DEPARTMENT D
WHERE E.DEPT_ID = D.DEPT_ID;
両方のテーブルに同じ名前のカラムがある場合.
WHEREセクション:表区切りが必要
SELECT部:2つの表の列の値は同じですが、文法的にどの表がその列の値を表示するかを区別する必要があります.
JOIN->ANSI標準構文
SELECT
FROM TALBE1 (
[INNER] JOING TALBLE2 ON (condition1 [AND condition2]) |
[INNER] JOING TALBLE2 USING (column1 [,....]) |
NATURAL [INNER] JOIN TABLE2 |
LEFT | RIGHT | FULL [OUTER] JOIN TABLE2 ON (condition1 [AND condition2]) |
LEFT | RIGHT | FULL [OUTER] JOIN TABLE2 USING (column1 [,...]) |
CROSS JOIN TABLE2)
WHEREINNER JOIN
Q15. INNER JOIN:結合条件として使用するカラム名が同じであれば、NULLとFALSE値は出力されません.
従業員の表と部門表に、従業員の名前、部門番号、部門名を印刷します.
ANSI ---
SELECT ENAME,DEPTNO,DNAME
FROM EMP
INNER JOIN DEPT USING(DEPTNO);
SELECT ENAME,DEPTNO,DNAME
FROM EMP
JOIN DEPT USING(DEPTNO); = INNER 를 생략가능
ORACLE --
SELECT ENAME,E.DEPTNO,DNAME
FROM EMP E, DEPT D
WHERE E.DEPTNO = D.DEPTNO;
Q16. 2色はUSINGでINNERJOINできますSELECT EMP_NAME, LOC_ID
FROM EMPLOYEE2
JOIN DEPARTMENT USING(DEPT_ID,LOC_ID);
Q17. 結合条件に使用するカラム名は、同時に使用できません.ONANSI ----
SELECT DEPT_NAME,LOC_DESCRIBE
FROM DEPARTMENT
JOIN LOCATION ON (LOC_ID = LOCATION_ID);
ORACLE----
SELECT DEPT_NAME,LOC_DESCRIBE
FROM DEPARTMENT, LOCATION
WHERE LOC_ID = LOCATION_ID;
OUTER JOIN
Q18. OUTER JOIN:メインテーブルの内容はすべて出力し、テーブルの内容からTUREのみ出力します.
CREATE TABLE X(
X1 NUMBER,
X2 NUMBER);
CREATE TABLE Z(
Z1 NUMBER,
Z2 NUMBER);
X ZX1 X2 | Z1 Z2
1 111 | 111 2
2 333 | 222 3
3 444 | 444 4
4 555 | NULL NULL
INSERT INTO X VALUES(1,111);
INSERT INTO X VALUES(2,333);
INSERT INTO X VALUES(3,444);
INSERT INTO X VALUES(4,555);
INSERT INTO X VALUES(NULL,NULL);
INSERT INTO Z VALUES(111,2);
INSERT INTO Z VALUES(222,3);
INSERT INTO Z VALUES(444,4);
INSERT INTO Z VALUES(NULL,NULL);
SELECT * FROM X JOIN Z ON (X2 = Z1); // INNER JOIN
SELECT * FROM X JOIN Z ON (X1 = Z2); (NULL,FALSE값은 출력 되지 않는다)
Q19. プライマリスレーブ関係テーブルフォーマットでは、プライマリテーブルのすべてのコンテンツのみが出力され、スレーブテーブルの値はTRUEの値である.ANSI ------
SELECT *
FROM X LEFT OUTER JOIN Z ON (X2 = Z1);
SELECT *
FROM X RIGHT OUTER JOIN Z ON (X2 = Z1);
ORACLE ---- (+) 주종관계 에서 종 테이블의 컬럼에(+) 키워드를 지정한다.
SELECT *
FROM X,Z
WHERE X.X2 = Z.Z1(+);
SELECT *
FROM X,Z
WHERE X.X2(+) = Z.Z1;
Q.20 FULL OUTER JOINSELECT *
FROM X FULL JOIN Z ON (X2 =Z1);
Q21. CROSS JOIN:全組合せの結果を返すANSI----
SELECT *
FROM X CROSS JOIN Z;
SELECT EMPNO,ENAME,DNAME
FROM EMP CROSS JOIN DEPT;
ORACLE----
SELECT *
FROM X ,Z;
SELECT EMPNO,ENAME,DNAME
FROM EMP ,DEPT;
Q22. JOIN-NON-Equjoin:カラム値が同じ範囲に属するかどうかを決定する結合です.社員の名前、給料、等級を印刷します.
ANSI----
SELECT ENAME,SAL,GRADE
FROM EMP JOIN
SALGRADE ON (SAL BETWEEN LOSAL AND HISAL);
ORACLE---
SELECT ENAME,SAL,GRADE
FROM EMP,SALGRADE
WHERE SAL BETWEEN LOSAL AND HISAL;
SELF JOIN
Q23. SELF JOIN:1つのテーブルを2回チェックインするタイプ
≪メソッド|Method|emdw≫:1つのテーブルを2つの別名として宣言します.
「≪従業員|Employee|Planning≫」表の従業員番号と管理者番号を使用して、従業員、管理者別名として出力します.
SELECT E.ENAME AS 직원,
M.ENAME AS 관리자
FROM EMP E
LEFT JOIN EMP M ON(E.MGR = M.EMPNO);
Reference
この問題について(Day24), 我々は、より多くの情報をここで見つけました https://velog.io/@jahommer/Day24テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol