Thực hành SQL trên Oracle - Trần Thị Lượng
SQLDBA cung cấp các dịch vụquản trịhệthống, như: tạo lập CSDL, mở- đóng
CSDL, tạo và quản lý các USER . Các bước đểkhởi động tại Server nhưsau:
• Khởi động máy chủ
• Bật dịch vụ OracleServiceXXX(trong đó XXX là tên của CSDL) bằng cách
nhấn vào Start -> Program -> Service -> OracleServiceXXX -> Nhấn chuột
phải -> Nhấn Start. Chú ý chỉbật dịch vụnày khi người cài đặt không đểchế
độtự động hay khi dịch vụnày chưa được bật.
• Bật dịch vụOracleXXXTNSLístener (trong đó XXX là tên của Database
Home) bằng cách nhấn vào Start -> Program -> Service ->
OracleXXXTNSLístener -> Nhấn chuột phải -> Nhấn Start. Chú ý chỉbật
dịch vụnày khi người cài đặt không đểchế độtự động hay khi dịch vụnày
chưa được bật.
• Khi bật xong CSDL đã sẵn sàng đểlàm việc
FROM EMP WHERE DEPTNO = 10; ENAME TRANSLATE( JOB TRANSLATE ---------- ---------- --------- --------- KING KING PRESIDENT PTESIDENT CLARK FLARK MANAGER MINIGET MILLER MILLER CLERK CLETK Ví dụ hàm REPLACE(char,search_string[,replacement_string]) SELECT JOB, REPLACE(JOB, ‘SALESMAN’, ‘SALESPERSON’), ENAME, REPLACE(ENAME, ‘CO’,’PR’) FROM EMP WHERE DEPTNO =30 OR DEPTNO =20; JOB REPLACE(JOB,'SALESMAN', ENAME REPLACE(ENAME,'CO',' --------- ----------------------- --------- ------ --------- GV: Trần Thị Lượng - HVKTMM 31 MANAGER MANAGER BLAKE BLAKE MANAGER MANAGER JONES JONES SALESMAN SALESPERSON MARTIN MARTIN SALESMAN SALESPERSON ALLEN ALLEN SALESMAN SALESPERSON TURNER TURNER CLERK CLERK JAMES JAMES SALESMAN SALESPERSON WARD WARD ANALYST ANALYST FORD FORD CLERK CLERK SMITH SMITH ANALYST ANALYST SCOTT SPRTT CLERK CLERK ADAMS ADAMS Ví dụ các hàm lồng nhau: SELECT DNAME, LENGHT(DNAME), LENGHT(TRANSLATE,DNAME, ‘AS’,’A’)) FROM DEPT; DNAME LENGTH(DNAME) LENGTH(TRANSLATE(DNAME,'AS','A')) -------------- ------------- ---------------------- ----------- ACCOUNTING 14 14 RESEARCH 14 13 SALES 14 12 OPERATIONS 14 13 c. Các hàm ngày MONTH_BETWEEN(d1, d2) cho biết só tháng giữa ngày d1 và d2. ADD_MONTHS(d,n) cho ngày d thêm n tháng. NEXT_DAY(d, char ) cho ngày tiếp theo ngày d có thứ chỉ bởi char. LAST_DAY(d) cho ngày cuối cùng trong tháng chỉ bởi d. Ví dụ hàm MONTH_BETWEEN(d1, d2) GV: Trần Thị Lượng - HVKTMM 32 SELECT MONTHS_BETWEEN( SYSDATE, HIREDATE), MONTHS_BETWEEN('01-01-2000','05-10-2000') FROM EMP WHERE MONTHS_BETWEEN( SYSDATE,HIREDATE)>240; MONTHS_BETWEEN(SYSDATE,HIREDATE) TWEEN('01-01- 2000','05-10-2000') -------------------------------- ------------------ -------------- 241.271055 -9.1290323 241.206539 -9.1290323 243.367829 -9.1290323 Ví dụ hàm ADD_MONTHS(d,n) SELECT HIREDATE, ADD_MONTHS(HIRE,3), ADD_MONTHS(HIREDATE,-3) FROM EMP WHERE DEPTNO=20; HIREDATE ADD_MONTHS ADD_MONTHS ---------- ---------- ---------- 02-04-1981 02-07-1981 02-01-1981 03-12-1981 03-03-1982 03-09-1981 17-12-1980 17-03-1981 17-09-1980 09-12-1982 09-03-1983 09-09-1982 12-01-1983 12-04-1983 12-10-1982 Ví dụ hàm NEXT_DAY(d, char ) SELECT HIREDATE, NEXT_DAY(HIREDATE,’FRIDAY’), NEXT_DAY(HIREDATE,6) FROM EMP WHERE DEPTNO = 10; HIREDATE NEXT_DAY(H NEXT_DAY(H ---------- ---------- ---------- 17-11-1981 20-11-1981 20-11-1981 09-06-1981 12-06-1981 12-06-1981 GV: Trần Thị Lượng - HVKTMM 33 23-01-1982 29-01-1982 29-01-1982 Ví dụ hàm LAST_DAY(d) SELECT SYSDATE, LAST_DAY(SYSDATE), HIREDATE, LAST_DAY(HIREDATE), LAST_DAY(’15-01-2001’) FROM EMP WHERE DEPTNO =20; SYSDATE LAST_DAY(S HIREDATE LAST_DAY(H LAST_DAY(' ---------- ---------- ---------- ---------- ------- --- 28-03-2001 31-03-2001 02-04-1981 30-04-1981 31-01- 2001 28-03-2001 31-03-2001 03-12-1981 31-12-1981 31-01- 2001 28-03-2001 31-03-2001 17-12-1980 31-12-1980 31-01- 2001 28-03-2001 31-03-2001 09-12-1982 31-12-1982 31-01- 2001 28-03-2001 31-03-2001 12-01-1983 31-01-1983 31-01- 2001 Một số hàm khác có thể áp dụng cho kiểu ngày: ROUND(date1) trả về ngày date 1 tại thời điểm giữa trưa 12:00 AM ROUND(date1,’MONTH’) Nếu date 1 nằm trong nửa tháng đầu trả về ngày đầu tiên của thàng, ngược lại sẽ trả về ngày đầu tiên của tháng sau. ROUND(date1,’YEAR’) Nếu date 1 nằm trong nửa năm đầu trả về ngày đầu tiên của thàng, ngược lại sẽ trả về ngày đầu tiên của năm sau. TRUNC(date1, ’MONTH’) Trả về ngày đầu tiên của tháng chứa date1 TRUNC(date1, ’YEAR’) Trả về ngày đầu tiên của năm chứa date1 d. Các hàm chuyển đổi kiểu TO_CHAR(number|date, ‘fmt’) Chuyển kiểu số và ngày về kiểu ký tự. TO_NUMBER(char) Chuyển ký tự có nội dung số sang số GV: Trần Thị Lượng - HVKTMM 34 TO_DATE(‘chsr’,’fmt’) Chuyển ký tự sang kiểu ngày với định dạng đặt trong fmt. DECODE(EXPR, SEARCH1, RESULT1, SEARCH2, RESULT2, DEFAULT): So sánh biểu thức expr với giá trị search nếu đúng trả về giá trị result nếu không trả về giá trị default. NVL(COL|VALUE, VAL) Chuyển giá trị COL|VALUE thành val nếu null. Greatest(col|value1, col|value2) Trả giá trị lớn nhất trong dãy giá trị. Vd: SELECT To_char (sysdate, ‘day, ddth month yyyy’) from dummy; SELECT EMPNO, ENAME, HIREDATE FROM EMP WHERE HIREDATE = TO_DATE (‘June 4, 1984’, ‘month dd, yyyy’); INSERT INTO EMP (EMPNO, DEPTNO, HIREDATE VALUES (777, 20, TO_DATE(’19-08-2000’, ‘DD-MM- YYYY’); SELECT ENAME, JOB, DECODE (JOB, ‘CLERK’,’WWORKER’,’MANAGER’,’BOSS’,’UNDEFINED’) DECODD_JOB FROM EMP; SELECT GREATEST(1000,2000), GREATEST(SAL,COMM) FROM EMP WHERE DEPTNO = 10; Một số khuôn dạng ngày SCC hoc CC th k; S ch ngày BC YYYY hoc SYYYY nm; S ch ngày BC YYY, YY, Y Ch nm vi 3,2,1 ký t s IYYY, IYY, IY, I Ch nm theo chun ISO GV: Trần Thị Lượng - HVKTMM 35 SYEAR, YEAR Ch nm theo cách phát âm ca ngi anh; Q Quý trong nm MM Giá tr tháng vi 2 s (01-12) MONTH Tên y ca tháng theo ting anh, dài 9 MON Tháng vi 3 ký t vin tt (JAN, FEB...) WW, W Tun trong nm hoc trong tháng DDD, DD, D Ngày trong nm, tháng hoc tun DAY Ch th trong tun DY Ch th trong tun vi 3 ký t vit tt J Ngày Julian; bt u t ngày 31/12/4713 trc công nguyên AM, PM Ch nh sáng, chiu HH, HH12 HH24 Ch gi trong ngày (1-12) hoc (0- 23) MI Phút (0-59) SS Giây (0-59) SSSSS S giây n na êm (0-86399) / . , - c t ng thêm khi t trong khuôn dng “char” on ký t t trong nháy úp c t ng thêm khi t trong khuôn dng TH Thêm phn th t (1st, 2nd, 4th ) SP Phát âm s ( FOUR vi DDSP) SPTH, THSP Phát âm và chuyn sang dng th t ( First, second, ...) RR Ngày chuyn giao thiên niên k vi các nm <1999. N m 0-49 50-99 Nm hin ti 0-49 th k hin ti Th k sau 50-99 Th k trc Th k hin GV: Trần Thị Lượng - HVKTMM 36 ti Một số khuôn dạng số Ký t Mô t Ví d Kt qu 9 Xác nh hin th 1 s 999999 1234 0 Hin th c s 0 u nu dài khuôn dng ln hn s hin có 099999 001234 $ Thêm ký t tin t $999999 $1234 L Thêm ký t tin t bn a L999999 FF1234 . Du thp phân 999999.9 9 1234.00 , Du phân cách phn nghìn 999,999 1,234 MI Du âm bên phi ( vi các giá tr âm) 999999MI 1234- PR Thêm ngoc nhn vào các giá tr âm 999999PR EEE Chuyn sang hin th s E 99.9999R RRR 1.234E+03 V Nhân vi 10 n, n là s các s 9 t sau V 9999V99 123400 B Hin th c giá tr 0 nu = 0. B9999.99 1234.00 e. Bài tập 1. Liệt kê tên nhân viên, mã phòng ban và lương nhân viên được tăng 15% (PCTSAL). DEPTNO ENAME PCTSAL ---------- ---------- ---------- 10 KING 5000 30 BLAKE 2850 10 CLARK 2450 20 JONES 2975 30 MARTIN 1250 GV: Trần Thị Lượng - HVKTMM 37 30 ALLEN 1600 30 TURNER 1500 30 JAMES 950 30 WARD 1250 20 FORD 3000 20 SMITH 800 20 SCOTT 3000 20 ADAMS 1100 10 MILLER 1300 2. Viết câu lệnh hiển thị như sau: EMPLOYEE_AND_JOB -------------------- KING*******PRESIDENT BLAKE********MANAGER CLARK********MANAGER JONES********MANAGER MARTIN******SALESMAN ALLEN*******SALESMAN TURNER******SALESMAN JAMES**********CLERK WARD********SALESMAN FORD*********ANALYST SMITH**********CLERK SCOTT********ANALYST ADAMS**********CLERK MILLER*********CLERK 3. Viết câu lệnh hiển thị như sau: EMPLOYEE ----------------- KING (President) BLAKE (Manager) CLARK (Manager) JONES (Manager) MARTIN (Salesman) ALLEN (Salesman) TURNER (Salesman) JAMES (Clerk) WARD (Salesman) FORD (Analyst) GV: Trần Thị Lượng - HVKTMM 38 SMITH (Clerk) SCOTT (Analyst) ADAMS (Clerk) MILLER (Clerk) 4. Viết câu lệnh hiển thị như sau: ENAME DEPTNO JOB ---------- ---------- --------------- BLAKE 30 Manager MARTIN 30 Salesperson ALLEN 30 Salesperson TURNER 30 Salesperson JAMES 30 Clerk WARD 30 Salesperson 5. Tìm ngày thứ 6 đầu tiên cách 2 tháng so với ngày hiện tại hiển thị ngày dưới dạng 09 February 1990. 6. Tìm thông itn về tên nhân viên, ngày gia nhập công ty của nhân viên phòng số 20, sao cho hiển thị như sau: ENAME DATE_HIRED ---------- -------------------------- JONES april,SECOND 1981 FORD december,THIRD 1981 SMITH december,SEVENTEENTH 1980 SCOTT december,NINTH 1982 ADAMS january,TWELFTH 1983 7. Hiển thị tên nhân viên, ngày gia nhập công ty, ngày xét nâng lương (sau ngày gia nhập công ty 1 năm), sắp xếp theo thứ tự ngày xét nâng lương. ENAME HIREDATE REVIEW ---------- ---------- ---------- SMITH 17-12-1980 17-12-1981 ALLEN 20-02-1981 20-02-1982 WARD 22-02-1981 22-02-1982 JONES 02-04-1981 02-04-1982 BLAKE 01-05-1981 01-05-1982 CLARK 09-06-1981 09-06-1982 TURNER 08-09-1981 08-09-1982 MARTIN 28-09-1981 28-09-1982 GV: Trần Thị Lượng - HVKTMM 39 KING 17-11-1981 17-11-1982 JAMES 03-12-1981 03-12-1982 FORD 03-12-1981 03-12-1982 MILLER 23-01-1982 23-01-1983 SCOTT 09-12-1982 09-12-1983 ADAMS 12-01-1983 12-01-1984 8.Hiển thị tên nhân viên và lương dưới dạng ENAME SALARY ---------- ------------ ADAMS BELOW 1500 ALLEN 1600 BLAKE 2850 CLARK 2450 FORD 3000 JAMES BELOW 1500 JONES 2975 KING 5000 MARTIN BELOW 1500 MILLER BELOW 1500 SCOTT 3000 SMITH BELOW 1500 TURNER On Target WARD BELOW 1500 9. Cho biết thứ của ngày hiện tại 10. Đưa chuỗi dưới dạng nn/nn, kiểm tra nếu khúng khuôn dạng trả lời là YES, ngược lại là no. Kiểm tra với các chuỗi 12/34, 01/1a, 99\88 VALUE VALID? ----- ------- 12/34 YES 11. Hiển thị tên nhân viên, ngày gia nhập công ty, ngày lĩnh lương sao cho ngày lĩnh lương phải vào thứ 6, nhân viên chỉ được nhận lương sau ít nhất 15 ngày làm việc tại công ty, sắp xếp theo thứ tự ngày gia nhập công ty. GV: Trần Thị Lượng - HVKTMM 40
File đính kèm:
- Thực hành SQL trên Oracle - Trần Thị Lượng.pdf