Oracle - SQL PL/SQL SELECT ename, sal *12, comm FROM SELECT ename, (sal+250)*12 FROM emp; emp; Tiêu đề cột (column alias) Trong mệnh đề SELECT, column alias phần nhãn hiển thị column lấy số liệu Trong column alias dấu cách viết cách sau tên column dấu cách Column alias chấp nhận có dấu cách đặt dấu nháy kép (“ “) Ví dụ: (ANUAL column alias) SELECT ename, SAL*12 ANUAL, comm FROM emp; Ghép tiếp cột liệu Toán tử ghép tiếp chuỗi (||) cho phép ghép tiếp liệu cột khác dòng liệu với thành chuỗi Ta có nhiều toán tử ghép chuỗi column alias Ví dụ: SELECT empno||ename EMPLOYEE FROM emp; Ghép tiếp chuỗi ký tự Trong mệnh đề SELECT, ta thực ghép tiếp ký tự nào, biểu thức hay số mà column column alias Ví dụ: SELECT empno || ename || ‘ WORK IN DEPARTMENT ’ || deptno ‘Employee Detail’ FROM emp; 2.1.4 Phân biệt giá trị liệu trả Trong thực tế nhiều giá trị liệu dòng liệu kết xuất trùng Gây nhiều bất tiện Để lấy dòng liệu phân biệt với Ta sử dụng mệnh đề DISTINCT câu lệnh truy vấn Ví dụ: SQL> SELECT deoptno FROM dept; DEPTNO 10 30 10 20 14 rows selected SQL> SELECT DISTINCT deoptno FROM dept; DEPTNO 10 30 20 rows selected Trang 10 Oracle - SQL PL/SQL 2.1.5 Giá trị NULL Cột có giá trị rỗng (NULL) cột chưa gán giá trị, nói cách khác chưa khởi tạo giá trị Các cột với kiểu liệu có trị NULL, trừ khóa hay có ràng buộc toàn vẹn NOT NULL Trong biểu thức có giá trị NULL kết NULL Ví dụ: SELECT ename, FROM emp; sal*12 + comm ANUAL_SAL NULL hàm SQL Trong hàm làm việc với cột hay hàm vô hướng (scalar function) Các hàm loại trả trị null có tham số NULL, trừ hàm NVL TRANSLATE trả giá trị thực Cú pháp hàm NVL: NVL (DATECOLUMN,’01-01-2001’) NVL(NUMBERCOLUMN, 9) NVL(CHARCOLUMN,’STRING’) NVL(comm,0) trả trị comm null SELECT ename, sal*12 + NVL(comm,0) ANUAL_SAL FROM emp; Trong hàm làm việc với nhóm cột (group function): Hầu hết hàm làm việc nhóm bỏ qua trị null, ví dụ sử dụng hàm AVG để tính trung bình cho cột có giá trị 1000, NULL, NULL, NULL, 2000 Khi trung bình tính (1000+2000)/2=1500, trị null bị bỏ qua xem trị NULL biểu thức so sánh, điều kiện Để kiểm tra có phải NULL hay không dùng toán tử IS NULL IS NOT NULL Nếu biểu thức so sánh có trị null tham gia kết biểu thức phụ thuộc vào trị null kết không xác định, nhiên biểu thức DECODE, hai giá trị null xem phép so sánh Oracle xem biểu thức với kết không xác định tương đương với FALSE (Ví dụ: comm = NULL) có kết không xác định biểu thức so sánh xem cho kết FALSE Trong câu lệnh sau mẫu tin chọn SELECT * FROM emp WHERE comm=NULL; Nếu muốn chọn nhân viên có comm NULL phải dùng toán tử IS NULL SELECT * FROM emp WHERE comm IS NULL; 2.2.SQL*PLUS, CÔNG CỤ TƯƠNG TÁC LỆNH SQL VỚI DATABASE 2.2.1 Câu lệnh tương tác SQL*Plus Oracle hỗ trợ công cụ SQL*Plus cho phép người sử dụng tương tác trực tiếp với Oracle Server thông qua câu lệnh SQL PL/SQL Theo người sử dụng tương tác với Oracle Server thông qua hai loại câu lệnh: Câu lệnh SQL Câu lệnh thân chương trình SQL*Plus Trang 11 Oracle - SQL PL/SQL Hình vẽ Câu lệnh SQL*Plus Khác biệt lệnh SQL SQL*Plus SQL Là ngôn ngữ để giao tiếp với Oracle Server việc truy xuất liệu Câu lệnh dựa ký tự chuẩn ASCII Thao tác liệu có bảng định nghĩa database Câu lệnh nạp vào nhớ đệm nhiều dòng Câu lệnh không viết tắt SQL*Plus Nhận dạng lệnh SQL gửi lệnh lên Server Tuỳ thuộc vào phiên Oracle Không thao tác với liệu database Câu lệnh tải trực tiếp không thông qua đệm Câu lệnh viết tắt Có sử dụng ký tự kết thúc lệnh thực Không đòi hỏi phải có ký tự kết thúc lệnh Sử dụng hàm việc định dạng liệu Sử dụng lệnh định dạng liệu SQL*Plus 2.2.2 Phân nhóm câu lệnh SQL*Plus Các lệnh SQL*Plus phân thành nhóm sau: Nhóm lệnh Diễn giải Môi trường Tác động gây ảnh hưởng tới môi trường làm việc SQL*Plus phiên làm việc Định dạng liệu Định dạng lại liệu trả từ server Thao tác file Lưu giữ, nạp chạy file scrips Thực lệnh Gửi lệnh SQL có đệm lên server Soạn thảo Sửa đổi lại lệnh SQL có đệm Trang 12 Oracle - SQL PL/SQL Tương tác Cho phép người dùng tạo biến sử dụng câu lệnh SQL thao tác với biến như: nhập liệu, kết xuất liệu Các lệnh khác Các lệnh khác cho phép kết nối tới sở liệu hiển thị cột liệu theo định dạng 2.2.3 Chi tiết lệnh SQL*Plus Kết nối tới CSDL Cú pháp: Conn[ect] /[@]; Với: user_name password database Tên truy nhập Mật truy nhập Tên database truy nhập Ví dụ: Conn Tester/tester@DB1; Hiển thị cấu trúc bảng liệu Cú pháp: Desc[ribe] ; Với: table_name Tên bảng cần hiển thị cấu trúc Ví dụ: Desc Name DEPTNO DNAME LOC Dept; Null? Type NOT NULL NUMBER(2) VARCHAR2(14) VARCHAR2(13) Lệnh soạn thảo Tên lệnh Diễn giải A[PPEND] text Đưa thêm đoạn text vào dòng C[HANGE] /old/new Chuyển đoạn text cũ thành đoạn text dòng C[HANGE] /text/ Xoá đoạn text dòng CL[EAR] BUFF[ER] Xoá tất dòng SQL buffer DEL Xoá dòng DEL n Xoá dòng n DEL m n Xoá dòng từ m đến n I[NPUT] Thêm số dòng định I[NPUT] text Thêm dòng có chứa text L[IST] Liệt kê toàn dòng SQL buffer Trang 13 Oracle - SQL PL/SQL L[IST] n Liệt kê dòng n L[IST] m n Liệt kê dòng m đến n R[UN] Hiển thị chạy lệnh buffer N Nhày đến dòng n N text Thay dòng n đoạn text text Chèn dòng trước dòng Lệnh thao tác file Diễn giải Tên lệnh SAVE filename [.ext] [REP[LACE]|APP[END]] Ghi nội dung bufer thành file APPEND để ghi thêm vào file REPLACE để chèn lên nội dung file cũ GET filename [.ext] Ghi nội dung file vào buffer Mặc định phần đuôi sql Chạy STA[RT] filename [.ext] lệnh file @ filename [.ext] Giống lệnh Start ED[IT] Soạn thảo nội dung bufffer có tên afiedt.buf Để chạy nội dung buffer dùng lệnh / ED[IT]filename [.ext ] Soạn thảo nội dung file SPO[OL] filename [.ext ] [OFF|OUT] Cất kết hiển thị hình file Vd: SPOOL result.sql SPOOL OFF EXIT Thoát khỏi SQL*Plus Lệnh định dạng cột liệu Cú pháp: COLUMN [{column | alias} [option]] Tên lệnh Diễn giải CLE[AR] Xoá định dạng column FOR[MAT] format Chuyển định dạng cột liệu HEA[DING] text Đặt nhãn co column JUS[TIFY] align Cán trái - left , phải - right, - center cho nhãn NOPRI[NT] ẩn column NUL[L] text Hiển thị text giá trị column NULL PRI[NT} Hiển thị column TRU[NCATED] Xoá chuỗi cuối dòng hiển thị WRA[PPED] Phủ cuối chuỗi dòng Ví dụ 1: Chỉnh định dạng nhãn column Trang 14 Oracle - SQL PL/SQL COLUMN ename HEADING ‘Employee|Name’ FORMAT A15 COLUMN sal JUSTIFY LEFT FORMAT $ 99,990.00 COLUMN hiredate FORMAT A9 NULL ‘ Not hired’ Ví dụ 2: Hiển thị định dạng column COLUMN COLUMN ename Ví dụ 3: Xoá định dạng column COLUMN ename CLEAR CLEAR COLUMN Các loại định dạng Định dạng Diễn giải Ví dụ Kết An Hiển thị dài n ký tự dùng cho column dạng ký tự dạng ngày Hiển thị số, không bao gồm số 999999 1234 Hiển thị số 099999 01234 $Hiển thi $ $9999 $1234 Hiển thị ký tự L L9999 L1234 Hiển thị dấu thập phân 9999.99 1234.00 Hiển thị dấu phân chia hàng nghìn 9,999 1,234 L , 2.3.BÀI TẬP Chọn toàn thông tin bảng SALGRADE GRADE LOSAL HISAL 700 1201 1401 2001 3001 1200 1400 2000 3000 9999 Chọn toàn thông tin bảng EMP EMPNO ENAME JOB MGR HIREDATE 7839 7698 7782 7566 7654 7499 7844 7900 7521 7902 7369 7788 7876 7934 KING BLAKE CLARK JONES MARTIN ALLEN TURNER JAMES WARD FORD SMITH SCOTT ADAMS MILLER PRESIDENT MANAGER MANAGER MANAGER SALESMAN SALESMAN SALESMAN CLERK SALESMAN ANALYST CLERK ANALYST CLERK CLERK 7839 7839 7839 7698 7698 7698 7698 7698 7566 7902 7566 7788 7782 17-11-1981 01-05-1981 09-06-1981 02-04-1981 28-09-1981 20-02-1981 08-09-1981 03-12-1981 22-02-1981 03-12-1981 17-12-1980 09-12-1982 12-01-1983 23-01-1982 SAL COMM 5000 2850 2450 2975 1250 1600 1500 950 1250 3000 800 3000 1100 1300 1400 300 500 DEPTNO 10 30 10 20 30 30 30 30 30 20 20 20 20 10 Trang 15 Oracle - SQL PL/SQL Hiển thị loại nghề nghiệp JOB ANALYST CLERK MANAGER PRESIDENT SALESMAN Hiển thị tên nhân viên thu nhập năm (REMUNERATION) ENAME REMUNERATION KING BLAKE CLARK JONES MARTIN ALLEN TURNER JAMES WARD FORD SMITH SCOTT ADAMS MILLER 14 rows selected 60000 34200 29400 35700 16400 19500 18000 11400 15500 36000 9600 36000 13200 15600 Hiển thị theo nội dung Who, what and when KING HAS HELP THE POSITION OF PRESIDENT IN DEPT 10 SINCE 17-11-1981 BLAKE HAS HELP THE POSITION OF MANAGER IN DEPT 30 SINCE 01-05-1981 CLARK HAS HELP THE POSITION OF MANAGER IN DEPT 10 SINCE 09-06-1981 JONES HAS HELP THE POSITION OF MANAGER IN DEPT 20 SINCE 02-04-1981 MARTIN HAS HELP THE POSITION OF SALESMAN IN DEPT 30 SINCE 28-09-1981 ALLEN HAS HELP THE POSITION OF SALESMAN IN DEPT 30 SINCE 20-02-1981 TURNER HAS HELP THE POSITION OF SALESMAN IN DEPT 30 SINCE 08-09-1981 JAMES HAS HELP THE POSITION OF CLERK IN DEPT 30 SINCE 03-12-1981 WARD HAS HELP THE POSITION OF SALESMAN IN DEPT 30 SINCE 22-02-1981 FORD HAS HELP THE POSITION OF ANALYST IN DEPT 20 SINCE 03-12-1981 SMITH HAS HELP THE POSITION OF CLERK IN DEPT 20 SINCE 17-12-1980 SCOTT HAS HELP THE POSITION OF ANALYST IN DEPT 20 SINCE 09-12-1982 ADAMS HAS HELP THE POSITION OF CLERK IN DEPT 20 SINCE 12-01-1983 MILLER HAS HELP THE POSITION OF CLERK IN DEPT 10 SINCE 23-01-1982 14 rows selected Hiển thị cấu trúc bảng emp; Thay đổi nhãn định dạng hiển thị cột sal hiredate bảng emp; Trang 16 Oracle - SQL PL/SQL Chương TRUY VẤN DỮ LIỆU CÓ ĐIỀU KIỆN 3.1.CÁC GIỚI HẠN TRONG TRUY VẤN DỮ LIỆU Trong phần lớn trường hợp lấy liệu từ database, ta cần lấy phần liệu không cần lấy tất Để hạn chế liệu trả không cần thiết, ta sử dụng mệnh đề điều kiện câu lệnh truy vấn Hình vẽ Hạn chế liệu trả 3.1.1 Mệnh đề WHERE Cú pháp: SELECT [DISTINCT ] {*, column [alias], } FROM table [WHERE condition (s)]; Với: column alias table condition tên cột liệu trả tiêu đề cột liệu trả tên bảng truy vấn liệu mệnh đề điều kiện để lọc liệu trả Mệnh đề WHERE dùng để đặt điều kiện cho toàn câu lệnh truy vấn Trong mệnh đề WHERE có thành phần: Tên column Toán tử so sánh Tên column, số danh sách giá trị Ví dụ: SELECT DEPTNO, JOB, ENAME, SAL FROM EMP WHERE SAL BETWEEN 1000 AND 2000 ; Trang 17 Oracle - SQL PL/SQL Truy vấn liệu với nhiều điều kiện Mệnh đề WHERE cho phép ghép nhiều điều kiện thông qua toán tử logic AND/OR Toán tử AND yêu cầu liệu phải thoả mãn điều kiện Toán tử OR cho phép liệu thoả mãn điều kiện Ví dụ: SELECT DEPTNO, JOB, ENAME, SAL FROM EMP WHERE SAL BETWEEN 1000 AND 2000 AND JOB = ‘MANAGER’; SELECT DEPTNO, JOB, ENAME, SAL FROM EMP WHERE SAL BETWEEN 1000 AND 2000 OR JOB = ‘MANAGER’; SELECT DEPTNO, JOB, FROM EMP WHERE SAL > 1500 AND JOB = ‘MANAGER’ OR JOB =’SALESMAN’; EMPNO, ENAME, SAL SELECT DEPTNO, JOB, FROM EMP WHERE SAL > 1500 AND (JOB = ‘MANAGER’ OR JOB =’SALESMAN’); EMPNO, ENAME, SAL 3.1.2 Các toán tử sử dụng mệnh đề WHERE Toán tử so sánh Toán tử = !=, ^=, '+, > Diễn giải Toán tử hay tương đương Toán tử khác hay không tương đương Toán tử lớn < Toán tử nhỏ >= Toán tử lớn ... SQL PL /SQL Theo người sử dụng tương tác với Oracle Server thông qua hai loại câu lệnh: Câu lệnh SQL Câu lệnh thân chương trình SQL* Plus Trang 11 Oracle - SQL PL /SQL Hình vẽ Câu lệnh SQL* Plus... định dạng liệu SQL* Plus 2.2.2 Phân nhóm câu lệnh SQL* Plus Các lệnh SQL* Plus phân thành nhóm sau: Nhóm lệnh Diễn giải Môi trường Tác động gây ảnh hưởng tới môi trường làm việc SQL* Plus phiên làm... SELECT * FROM emp WHERE comm IS NULL; 2.2 .SQL* PLUS, CÔNG CỤ TƯƠNG TÁC LỆNH SQL VỚI DATABASE 2.2.1 Câu lệnh tương tác SQL* Plus Oracle hỗ trợ công cụ SQL* Plus cho phép người sử dụng tương tác trực