
Trước hết bọn họ cần tò mò một chút về một trong những "thứ" đặc trưng của Oracle. Nó hoàn toàn có thể không phải là tiêu chuẩn của những DB khác.
Bạn đang xem: Các câu lệnh trong oracle
Dual giống như một bảng ảo, nó gồm tại phần nhiều SCHEMA. Và vày vậy chúng ta cũng có thể truy vấn nó như thể một bảng thông thường.


-- các lần gọi Nextval quý hiếm của My_Sequence đang tăng dần.-- Hãy thử tiến hành lệnh này vài lần.Select My_Sequence.Nextval From Dual;-- chúng ta cũng có thể sử dụng Currval để lấy ra giá trị hiện thời của My_Sequence.Select My_Sequence.Currval From Dual;

Câu lệnh Select là một câu lệnh cơ bạn dạng nhất vào SQL, mục tiêu là truy vấn dữ liệu trong các bảng (Table).
-- truy tìm vấn dữ liệu trên bảng Product_Type-- truy nã vấn toàn thể các cột.Select * From Product_Type;-- Câu lệnh truy hỏi vấn trên với câu lệnh dưới đấy là tương đương nhau.-- Pty là alias (tên túng bấn danh đặt cho bảng Product_Type).Select Pty.* From Product_Type Pty;-- tầm nã vấn một vài cột-- hoàn toàn có thể liệt kê ra.Select Pty.Product_Type_Cd ,Pty.Name
From Product_Type Pty;
-- tầm nã vấn 4 cột trên bảng Employee (Bảng nhân viên).-- thực hiện Emp là Alias (Tên bí danh) đến bảng Employee.Select Emp.Emp_Id ,Emp.First_Name ,Emp.Last_Name ,Emp.Dept_Id
From Employee Emp;
-- sử dụng hàm concat(string1, string2) nhằm nối 2 chuỗi cùng với nhau.-- bọn họ có một cột mới sử dụng "as" để quan niệm tên cột mang đến cột mới này.Select Emp.Emp_Id ,Emp.First_Name ,Emp.Last_Name ,Emp.Dept_Id ,Concat("EMP" ,Emp.Emp_Id) As Emp_No2 -- Cột mới
From Employee Emp;-- rất có thể không cần áp dụng "as" trong định nghĩa Alias cho cột.Select Emp.Emp_Id ,Emp.First_Name ,Emp.Last_Name ,Emp.Dept_Id ,Concat("EMP" ,Emp.Emp_Id) Emp_No2 -- Cột mới
From Employee Emp;-- cùng với Oracle bạn cũng có thể sử dụng toán tử || để nối 2 chuỗi-- Toán tử này có thể nối những chuỗi cùng với nhau.-- (Chú ý chỉ cách Oracle).-- Câu lệnh bên trên viết lại cùng với Oracle.Select Emp.Emp_Id ,Emp.First_Name ,Emp.Last_Name ,Emp.Dept_Id ,"EMP" || Emp.Emp_Id As Emp_No2 -- Cột mới
From Employee Emp;
Câu lệnh Distinct được sử dụng cùng cùng với Select, dùng để làm select những dữ liệu, bỏ qua những dữ liệu trùng nhau. Cú pháp là:
-- truy tìm vấn thành phầm (Sản phẩm thương mại & dịch vụ của Ngân hàng)-- Cột mã sản phẩm, tên và kiểu sản phẩm.Select Pro.Product_Cd ,Pro.Name ,Pro.Product_Type_Cd
From product Pro;-- truy nã vấn các kiểu thành phầm (Product_Type_Cd) vào bảng Product.-- dữ liệu là nhiều, mà lại trùng nhau.Select Pro.Product_Type_Cd from hàng hóa Pro;-- Cần thực hiện Distinct để loại bỏ việc trùng lặp.Select Distinct Pro.Product_Type_Cd from product Pro;
Where là câu lệnh nhằm giới hạn phạm vi tìm kiếm kiếm. Chẳng hạn bạn muốn tìm tìm những sản phẩm dịch vụ gồm kiểu "Cho vay cá thể và ghê doanh".Product_Type_Cd = 'LOAN'.Bạn bắt buộc truy vấn vào bảng PRODUCT, tại những vị trí tất cả Product_Type_Cd= 'LOAN'.
-- truy vấn vấn bảng product tìm các thành phầm dịch vụ tất cả kiểu:-- "Cho vay cá thể và khiếp doanh".-- Ứng cùng với cột Product_Type_Cd = "LOAN".Select * From product Pro Where Pro.Product_Type_Cd = "LOAN";
Chẳng hạn bạn có nhu cầu tìm danh sách các nhân viên bao gồm tên bắt đầu bởi chữ S và thuộc phòng điều hành và quản lý (Operations).
-- Câu lệnh kiếm tìm kiếm các Nhân viên có tên bước đầu bởi chữ S.Select Emp.Emp_Id ,Emp.First_Name ,Emp.Last_Name ,Emp.Dept_Id
From Employee Emp
Where Emp.First_Name lượt thích "S%";-- Câu lệnh tìm kiếm các nhân viên gồm tên bắt đầu bởi chữ S-- với thuộc phòng quản lý điều hành (Operations) Dept_Id = 1.Select Emp.Emp_Id ,Emp.First_Name ,Emp.Last_Name ,Emp.Dept_Id
From Employee Emp
Where Emp.First_Name like "S%"And Emp.Dept_Id = 1;
-- tra cứu kiếm những nhân viên gồm tên ban đầu bởi chữ S hoặc P.-- cùng trong phòng điều hành và quản lý (Operations). (Dept_Id = 1)Select Emp.Emp_Id ,Emp.First_Name ,Emp.Last_Name ,Emp.Dept_Id
From Employee Emp
Where (Emp.First_Name lượt thích "S%" Or Emp.First_Name like "P%")And Emp.Dept_Id = 1;
Toán tử IN chất nhận được kiểm tra một giá bán trị gồm thuộc vào một tập hợp cố định các giá trị nào kia không. Cùng nó rất có thể làm việc với tất cả cac nhiều loại kiểu dữ liệu.
-- Câu lệnh này tìm kiếm kiếm những nhân viên có tên-- Susan hoặc Paula hoặc Helen.Select Emp.Emp_Id ,Emp.First_Name ,Emp.Last_Name ,Emp.Dept_Id
From Employee Emp
Where Emp.First_Name In ("Susan" ,"Paula" ,"Helen");
-- Tìm các nhân viên bao gồm Emp_Id trong tầm từ 5 cho 10.Select Emp.Emp_Id ,Emp.First_Name ,Emp.Last_Name ,Emp.Start_Date
From Employee Emp
Where (Emp.Emp_Id Between 5 and 10);-- Câu lệnh trên tương đương với:Select Emp.Emp_Id ,Emp.First_Name ,Emp.Last_Name ,Emp.Start_Date
From Employee Emp
Where Emp.Emp_Id >= 5And Emp.Emp_Id
From Employee Emp
Có 2 ký kết tự quan trọng trong SQL:Ký tự %Ký từ _Ý nghĩa:% mô tả 0, 1 hoặc những ký tự_ mô tả đúng mực một ký kết tự.Hai cam kết tự này thường được áp dụng trong đk like.
-- search kiếm các khách hàng (Customer) tất cả số FED_ID theo định dạng:-- Phần trước bất kỳ, rồi tới dấu - , rồi tới 2 cam kết tự, rồi tới dấu -, và cuối bất kỳ.-- thực hiện 2 vết _ nhằm minh họa rằng chính là 2 ký kết tự.-- (Mỗi dấu _ là đúng chuẩn một ký tự).Select Cus.Cust_Id ,Cus.Fed_Id ,Cus.Address
From Customer Cuswhere cus.fed_id lượt thích "%-__-%";
Việc query dữ liệu cho một tập kết quả, mà hoàn toàn có thể nó sắp đến xếp không giống như ý muốn, sử dụng Order by để sắp tới xếp hiệu quả trả về.
-- Cú pháp
SELECT "column_name"FROM "table_name"
-- sắp xếp ưu tiên Product_Type_Cd tăng dần-- tiếp đến mới tới Name (Cũng tăng dần)Select Pro.Product_Cd ,Pro.Product_Type_Cd ,Pro.Name
From hàng hóa Pro
Order By Pro.Product_Type_Cd Asc ,Pro.Name Asc; -- vào Order BY, ASC là khoác định.-- vì chưng vậy rất có thể ko yêu cầu viết ASC.Select Pro.Product_Cd ,Pro.Product_Type_Cd ,Pro.Name
From sản phẩm Pro
Order By Pro.Product_Type_Cd ,Pro.Name;-- bố trí ưu tiên Product_Type_Cd sút dần-- sau đó mới cho tới Name (Tăng dần)Select Pro.Product_Cd ,Pro.Product_Type_Cd ,Pro.Name
From sản phẩm Pro
Order By Pro.Product_Type_Cd Desc ,Pro.Name Asc;
-- Tìm các nhân viên tất cả tên bước đầu bởi S.-- bố trí giảm dần theo ngày bước đầu vào làm cho việc.Select Emp.Emp_Id ,Emp.First_Name ,Emp.Last_Name ,Emp.Start_Date
From Employee Emp
Where Emp.First_Name lượt thích "S%"Order By Emp.Start_Date Desc;
Cú pháp Oracle: (Không đề nghị là tiêu chuẩn chỉnh của SQL, bởi vậy rất có thể không được cung ứng bởi Database khác)
-- Đây là cú pháp của Oracle (Có thể ko được cung ứng bởi Database khác).-- sử dụng thứ từ bỏ của cột vào trong câu Order by.-- First_Name là cột thứ hai trong câu Select-- rất có thể sử dụng: Order by 2 cầm cố cho Order by First_Name.Select Emp.Emp_Id ,Emp.First_Name ,Emp.Last_Name ,Emp.Start_Date
From Employee Emp
Order By 2 Desc;
Trước hết bọn họ cần hiểu các hàm tổng đúng theo (Aggregate Functions) là gì:Sum: Hàm tính tổngAvg: Hàm rước trung bìnhCount: Hàm tính số lầnMin: Hàm tìm giá bán trị bé dại nhấtMax: Hàm tìm giá bán trị béo nhất
Đó là một số trong những hàm tổng vừa lòng (Aggregate) thông dụng. Chúng có thể tham gia vào câu lệnh nhóm (Group by).
-- tầm nã vấn tài liệu trong bảng Account.Select Acc.Account_Id ,Acc.Product_Cd ,Acc.Avail_Balance ,Acc.Pending_Balance
From trương mục Acc;
Câu hỏi để ra bạn có nhu cầu xem toàn bô tiền tất cả trong tài khoản, ứng cùng với mỗi loại hình dịch vụ (Product_Cd) không giống nhau. Điều đó có nghĩa là bạn đề xuất nhóm trên những Product_Cd.
Xem thêm: Những câu nói phật dạy ý nghĩa giúp bạn giác ngộ trong cuộc sống
Select Acc.Product_Cd ,Count(Acc.Product_Cd) As Count_Acc -- Số tài khoản ,Sum(Acc.Avail_Balance) As Sum_Avail_Balance -- Tổng số tiền sẵn tất cả trong tài khoản. ,Avg(Acc.Avail_Balance) As Avg_Avail_Balance -- Số chi phí trung bình
From account Acc
Group By Acc.Product_Cd;
Như vậy chúng ta có một cái nhìn đánh giá:Có 4 thông tin tài khoản tham gia dịch vụ "Tiền nhờ cất hộ tiết kiệm" (SAV) với tổng số tiền là 1855.76 với trung bình mỗi tài khoản có 463.94....
Giả sử bạn muốn nhóm các kiểu dịch vụ (Product_Cd) ở bảng Account, và chỉ hiển thị ra các mô hình nào có số fan tham gia > 3.
Select Acc.Product_Cd ,Count(Acc.Product_Cd) As Count_Acc -- Số thông tin tài khoản ,Sum(Acc.Avail_Balance) As Sum_Avail_Balance -- Tổng số chi phí trong thông tin tài khoản ,Avg(Acc.Avail_Balance) As Avg_Avail_Balance -- Số tiền trung bình
From account Acc
Group By Acc.Product_Cd
Having Count(Acc.Product_Cd) > 3;
Bạn bắt buộc phân biệt Where và Having trong và một câu lệnh.Where là một mệnh đề nhằm lọc giảm dữ liệu trước lúc nhóm (Group)Having là một mệnh đề nhằm lọc bớt dữ liệu sau khi đã nhóm (Group)
Trường hợp bạn muốn có những thông tin tổng thích hợp của một bỏ ra nhánh ngân hàng (Bảng BRANCH). Chúng ta cũng có thể sử dụng where nhằm lọc bớt dữ liệu trước lúc group.
Select Acc.Product_Cd ,Count(Acc.Product_Cd) As Count_Acc ,Sum(Acc.Avail_Balance) As Sum_Avail_Balance ,Avg(Acc.Avail_Balance) As Avg_Avail_Balance
From trương mục Acc-- thực hiện Where lọc giảm dữ liệu trước khi group.Where Acc.Open_Branch_Id = 1Group By Acc.Product_Cd-- sử dụng Having lọc sút dữ liệu sau khi đã group
Having Count(Acc.Product_Cd) > 1;
-- Cú pháp câu lệnh Insert Into:INSERT INTO "table_name" ("column1", "column2", ...)VALUES ("value1", "value2", ...);
-- Trèn 1 dòng tài liệu vào bảng Acc_Trasaction-- Cột Txn_ID sẽ sở hữu được giá trị bởi Sequence Hibernate_Sequence chế tạo ra-- Sysdate là hàm của Oracle lấy ra giờ hệ thống (System Date)-- Sysdate: Giờ hiện tại tại.Insert Into Acc_Transaction (Txn_Id ,Amount ,Funds_Avail_Date ,Txn_Date ,Txn_Type_Cd ,Account_Id ,Execution_Branch_Id ,Teller_Emp_Id)Values (Hibernate_Sequence.Nextval -- Txn_Id ,100 -- Amount ,Sysdate -- Funds_Avail_Date ,Sysdate -- Txn_Date ,"CDT" -- Txn_Type_Cd ,2 -- Account_Id ,Null -- Execution_Branch_Id ,Null -- Teller_Emp_Id );
Bạn có thể sử dụng câu Select để cung cấp dữ liệu trèn vào bảng. Thông qua câu lệnh Insert Into ... Select.
-- Ngữ pháp câu lệnh INSERT INTO .. SELECTINSERT INTO "table1" ("column1", "column2", ...)SELECT "column3", "column4", ...FROM "table2";
-- Trèn các dòng tài liệu vào bảng Acc_Transaction-- Lấy dữ liệu từ câu Select.Insert Into Acc_Transaction (Txn_Id ,Txn_Date ,Account_Id ,Txn_Type_Cd ,Amount ,Funds_Avail_Date) Select Hibernate_Sequence.Nextval -- Txn_Id ,Acc.Open_Date -- Txn_Date ,Acc.Account_Id -- Account_Id ,"CDT" -- Txn_Type_Cd ,200 -- Amount ,Acc.Open_Date -- Funds_Avail_Date From account Acc Where Acc.Product_Cd = "CD";
-- Cú pháp câu lệnh Update:UPDATE "table_name"SET "column_1" = "new value 1", "column_2"= "new value 2"WHERE "condition";
Ví dụ bạn có nhu cầu tăng tiền trong các tài khoản của doanh nghiệp có CUST_ID = 1 lên 2%.Theo logic, mỗi khách hàng hoàn toàn có thể có một hoặc các tài khoản, mỗi thông tin tài khoản ứng với 1 mặt hàng dịch vụ của ngân hàng.
-- Update, tăng số chi phí trong tài khoản lên 2% cho quý khách hàng CUST_ID = 1.Update tài khoản Acc
Set Acc.Avail_Balance = Acc.Avail_Balance + 2 * Acc.Avail_Balance / 100 ,Acc.Pending_Balance = Acc.Pending_Balance + 2 * Acc.Pending_Balance / 100Where Acc.Cust_Id = 1;
-- Xóa 2 dòng dữ liệu trong bảng Acc_Transaction:Delete From Acc_Transaction Txn
Where Txt.Txn_Id In (61 ,62);
-- Đếm số tài khoản có giao dịch thanh toán với ngân hàng.Select Count(distinct txn.Account_id) From Acc_Transaction txn;
Chào những bạn, lúc này vô tình gọi được một bài bác tổng thích hợp hơn 40 câu tầm nã vấn hữu dụng trong Oracle tương đối hay phải mình dịch lại và chia sẻ với các bạn, đây là những câu truy tìm vấn mà phần đông DBA nào thì cũng phải lưu lại lại bởi trong thừa trình thống trị Oraclesẽ phải thực hiện đến, kia là phần nhiều câu truy vấn vấn tương quan đến sever server, tinh thần thực thi, tính form size database, ...


I. Oracle date/time queries
Dưới đó là những lệnh có liên quan đến Date/Time vào Oracle.
1/ đem ngày trước tiên của tháng
SELECT ROUND ( (MONTHS_BETWEEN ("01-Feb-2014", "01-Mar-2012") * 30), 0) num_of_days FROM DUAL;ORSELECT TRUNC(sysdate) - TRUNC(e.hire_date) FROM employees;
SELECT ADD_MONTHS (TRUNC (SYSDATE, "MONTH"), i) start_date, TRUNC (LAST_DAY (ADD_MONTHS (SYSDATE, i))) end_date FROM XMLTABLE ( "for $i in 0 to lớn xs:int(D) return $i" PASSING XMLELEMENT ( d, FLOOR ( MONTHS_BETWEEN ( ADD_MONTHS (TRUNC (SYSDATE, "YEAR") - 1, 12), SYSDATE))) COLUMNS i INTEGER PATH ".");
Lưu ý: mọi ví dụ trên áp dụng SYSDATE là ngày lúc này của hệ thống, nếu bạn muốn tính một ngày khác thì hãy thay đổi giá trị cho biến này nhé.
II. Oracledata dictionary queries
Sau đấy là những lệnh hữu ích liên quan đến cấu trúc của database.
11/ kiểm tra table vẫn tồn tại trong database
SELECT column_name AS FOUND FROM user_tab_cols WHERE table_name = "TABLE_NAME" và column_name = "COLUMN_NAME";
III.Database administrationqueries
Các lệnh giành cho Admin cai quản trị database.
16/ Hiển thị database version
SELECT SUBSTR (file_name, 1, 50), AUTOEXTENSIBLE FROM dba_data_files;(OR)SELECT tablespace_name, AUTOEXTENSIBLE FROM dba_data_files;
SELECT S.USERNAME || "(" || s.sid || ")-" || s.osuser UNAME, s.program || "-" || s.terminal || "(" || s.machine || ")" PROG, s.sid || "/" || s.serial# sid, s.status "Status", p.spid, sql_text sqltext FROM v$sqltext_with_newlines t, V$SESSION s, v$process phường WHERE t.address = s.sql_address & p.addr = s.paddr(+) and t.hash_value = s.sql_hash_value
ORDER BY s.sid, t.piece;
IV.Performance related queries
Đây là những câu truy vấn đánh giá hiệu suất.
28. CPU được áp dụng bởi User
SELECT ss.username, se.SID, VALUE / 100 cpu_usage_seconds FROM v$session ss, v$sesstat se, v$statname sn WHERE se.STATISTIC# = sn.STATISTIC# and NAME like "%CPU used by this session%" and se.SID = ss.SID & ss.status = "ACTIVE" & ss.username IS NOT NULLORDER BY VALUE DESC;
SELECT b.sid, b.serial#, a.spid processid, b.process clientpid FROM v$process a, v$session b WHERE a.addr = b.paddr & b.audsid = USERENV ("sessionid");
SELECT owner, COUNT (owner) number_of_objects FROM dba_objects
GROUP BY owner
ORDER BY number_of_objects DESC;
Trên là 30 câu truy vấn vấn SQL có ích dành cho những người quản trị Oracle Database, các bạn hãy giữ giàng để tìm hiểu thêm nhé