Hướng Dẫn Học SQL Cho Người Mới Bắt đầu Với Oracle
Có thể bạn quan tâm
- Tất cả tài liệu
- Java
- Java Basic
- Java Collections Framework
- Java IO
- Java New IO
- Java Date Time
- Servlet/JSP
- Eclipse Tech
- SWT
- RCP
- RAP
- Eclipse Plugin Tools
- XML & HTML
- Java Opensource
- Java Application Servers
- Maven
- Gradle
- Servlet/Jsp
- Thymeleaf
- Spring
- Spring Boot
- Spring Cloud
- Struts2
- Hibernate
- Java Web Service
- JavaFX
- SWT
- Oracle ADF
- Android
- iOS
- Python
- Swift
- C#
- C/C++
- Ruby
- Dart
- Batch
- Database
- Oracle
- MySQL
- SQL Server
- PostGres
- Other Database
- Oracle APEX
- Report
- Client
- ECMAScript / Javascript
- TypeScript
- NodeJS
- ReactJS
- Flutter
- AngularJS
- HTML
- CSS
- Bootstrap
- OS
- Ubuntu
- Solaris
- Mac OS
- VPS
- Git
- SAP
- Amazon AWS
- Khác
- Chưa phân loại
- Phần mềm & ứng dụng tiện ích
- VirtualBox
- VmWare
- Giới thiệu
- Cơ sở dữ liệu học SQL (LearningSQL)
- Bắt đầu nhanh
- Một số "thứ" đặc biệt của Oracle
- Các câu lệnh truy vấn (Query)
- Các câu lệnh trèn dữ liệu (Insert)
- Câu lệnh cập nhập (Update)
- Câu lệnh xóa dữ liệu (Delete)
- SQL Functions
- SQL Join
- Câu truy vấn con (Subquery)
1. Giới thiệu
Tài liệu này hướng dẫn cho những người mới bắt đầu làm quen với SQL. Tài liệu hướng dẫn dựa trên:ORACLE (10g, 11g)
- Ngôn ngữ SQL
- Ngữ pháp SQL (Ngữ pháp cơ bản, tiêu chuẩn cho mọi loại DB)
- Ngữ pháp SQL riêng của Oracle.
2. Cơ sở dữ liệu học SQL (LearningSQL)
Tài liệu này sử dụng cơ sở dữ liệu LearningSQL (phiên bản Oracle). Bạn cần tạo cơ sở dữ liệu đó để tiện cho việc học (Bạn chỉ mất không quá 5 phút để làm việc này). Script tạo cơ sở dữ liệu và cấu trúc của cơ sở dữ liệu này bạn có thể xem tại:- Cơ sở dữ liệu Oracle mẫu để học SQL
3. Bắt đầu nhanh
Ví dụ truy vấn (Query)Với Oracle, tốt nhất bạn sử dụng một công cụ trực quan, ở đây tôi sử dụng PL/SQL Developer. Bạn có thể cài đặt PL/SQL Developer theo hướng dẫn tại:- Cài đặt PL/SQL Developer trên Windows
4. Một số "thứ" đặc biệt của Oracle
Trước hết chúng ta cần tìm hiểu một chút về một số "thứ" đặc biệt của Oracle. Nó có thể không phải là tiêu chuẩn của các DB khác.DualDual giống như một bảng ảo, nó có tại mọi SCHEMA. Và vì vậy bạn có thể truy vấn nó giống một bảng thông thường.Select * from Dual; Select 'Dual is special table in Oracle' As Column_Title From Dual;SequenceSequence là một đối tượng để tạo ra các số tăng dần.Ví dụ tạo ra một Sequence có tên My_Sequence.-- Tạo mới một Sequence có tên My_Sequence; Create Sequence My_Sequence;Lúc đó trên công cụ trực quan bạn có thể nhìn thấy Sequence bạn vừa tạo ra.-- Mỗi lần gọi Nextval giá trị của My_Sequence sẽ tăng dần. -- Hãy thử thực thi lệnh này vài lần. Select My_Sequence.Nextval From Dual; -- Bạn 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;5. Các câu lệnh truy vấn (Query)
SQL SelectCâu lệnh Select là một câu lệnh cơ bản nhất trong SQL, mục đích là truy vấn dữ liệu trong các bảng (Table).- PRODUCT_TYPE: Bảng dữ liệu các kiểu sản phẩm (Kiểu dịch vụ của ngân hàng).
- Product_Type_Cd = 'LOAN'.
- 03-05-2002 ==> 09-08-2002 (Theo dd-MM-yyyy)
- Ký tự %
- Ký tự _
- % mô tả 0, 1 hoặc nhiều ký tự
- _ mô tả chính xác một ký tự.
- Sum: Hàm tính tổng
- Avg: Hàm lấy trung bình
- Count: Hàm tính số lần
- Min: Hàm tìm giá trị nhỏ nhất
- Max: Hàm tìm giá trị lớn nhất
- Có 4 tài khoản tham gia dịch vụ "Tiền gửi tiết kiệm" (SAV) với tổng số tiền là 1855.76 và trung bình mỗi tài khoản có 463.94.
- ...
- Where là một mệnh đề để lọc bớt dữ liệu trước khi nhóm (Group)
- Having là một mệnh đề để lọc bớt dữ liệu sau khi đã nhóm (Group)
6. Các câu lệnh trèn dữ liệu (Insert)
Câu lệnh Insert IntoCú pháp:-- Cú pháp câu lệnh Insert Into: INSERT INTO "table_name" ("column1", "column2", ...) VALUES ("value1", "value2", ...);Ví dụ bạn trèn thêm một giao dịch khách hàng vào bảng ACC_TRANSACTION:-- Trèn 1 dòng dữ liệu vào bảng Acc_Trasaction -- Cột Txn_ID sẽ có giá trị do Sequence Hibernate_Sequence 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. 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 );Sau khi thực thi câu lệnh nhấn Commit để hoàn thành, nhấn Rollback để hủy việc trèn dữ liệu:Câu lệnh Insert Into SelectBạ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 .. SELECT INSERT INTO "table1" ("column1", "column2", ...) SELECT "column3", "column4", ... FROM "table2";Ví dụ:-- Trèn nhiều dòng dữ 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';7. Câu lệnh cập nhập (Update)
-- 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 muốn tăng tiền trong các tài khoản của khách hàng có CUST_ID = 1 lên 2%.Câu lệnh Update:-- Update, tăng số tiền trong tài khoản lên 2% cho khách hàng CUST_ID = 1. Update Account Acc Set Acc.Avail_Balance = Acc.Avail_Balance + 2 * Acc.Avail_Balance / 100 ,Acc.Pending_Balance = Acc.Pending_Balance + 2 * Acc.Pending_Balance / 100 Where Acc.Cust_Id = 1;Truy vấn lại, sau khi Update.Theo logic, mỗi khách hàng có thể có một hoặc nhiều tài khoản, mỗi tài khoản ứng với 1 sản phẩm dịch vụ của ngân hàng.
8. Câu lệnh xóa dữ liệu (Delete)
Cú pháp xóa các bản ghi trong bảng.-- Cú pháp xóa các dòng dữ liệu trong bảng. DELETE FROM "table_name" WHERE "condition";-- 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);9. SQL Functions
SQL CountCOUNT() trả về số dòng phù hợp với một tiêu chí cụ thể.-- Đếm số row (dòng) có trong bảng Account Select Count(Acc.Account_Id) From Account Acc;Đếm số tài khoản ngân hàng, có giao dịch với ngân hàng (Bảng Acc_Transaction)-- Đếm số tài khoản có giao dịch với ngân hàng. Select Count(distinct txn.Account_id) From Acc_Transaction txn;Sử dụng với Group by:Một khách hàng có thể mở nhiều tài khoản, mỗi tài khoản ứng với một sản phẩm dịch vụ của ngân hàng.Bạn muốn liệt kê các khách hàng (CUST_ID) và tương ứng là số tài khoản họ đã mở.-- Đếm số tài khoản đã mở ứng với mỗi khách hàng. Select Acc.Cust_Id ,Count(Acc.Account_Id) From Account Acc Group By Acc.Cust_Id;SQL SumSum là hàm dùng để tính tổng giá trị một cột trong câu SQL. (Chỉ dùng cho cột giá trị số).-- Cú pháp: SELECT SUM("column_name") FROM "table_name";Ví dụ:-- Tính tổng số tiền trong các tài khoản của khách hàng với Cust_ID = 1 Select Sum(Acc.Avail_Balance) From Account Acc Where Acc.Cust_Id = 1; -- Sử dụng với Group by. -- Tính tổng số tiền trong tài khoản ứng với mỗi khách hàng Select Acc.Cust_Id ,Sum(Acc.Avail_Balance) From Account Acc Group By Acc.Cust_Id;SQL AVGAVG là hàm tính trung bình trên cột.(Chỉ dùng cho cột giá trị số).-- Cú pháp: SELECT AVG("column_name") FROM "table_name";Ví dụ:-- Tính số tiền trung bình ứng với loại hình gửi tiết kiêm. Select Avg(Acc.Avail_Balance) From Account Acc Where Acc.Product_Cd = 'SAV'; -- Sử dụng với Group by. -- Một khách hàng có thể có 1 hoặc nhiều tài khoản. -- Tính số tiền trung bình mỗi tài khoản ứng với từng khách hàng -- (tại ngân hàng Branch_ID = 1) Select Acc.Cust_Id ,Avg(Acc.Avail_Balance) From Account Acc Where Acc.Open_Branch_Id = 1 Group By Acc.Cust_Id;SQL MINMin là hàm tìm giá trị nhỏ nhất trên cột.-- Cú pháp: SELECT MIN ("column_name") FROM "table_name";Ví dụ:-- Tìm số tiền gửi tiết kiệm nhỏ nhất. Select Min(Acc.Avail_Balance) From Account Acc Where Acc.Product_Cd = 'SAV'; -- Sử dụng với Group by. -- Một khách hàng có thể có 1 hoặc nhiều tài khoản. -- Mở tại các chi nhánh khác nhau. -- Tìm số tiền trong tài khoản nhỏ nhất ứng với từng chi nhánh Select Acc.Open_Branch_Id ,Min(Acc.Avail_Balance) From Account Acc Group By Acc.Open_Branch_Id;SQL MAXMax là hàm tìm giá trị lớn nhất trên cột. Cách sử dụng giống MIN, bạn có thể tham khảo các ví dụ tại MIN.-- Cú pháp: SELECT MAX("column_name") FROM "table_name";10. SQL Join
Đặt ra một tình huống bạn xem thông tin một nhân viên trong bảng EMPLOYEE. Bạn có thể thấy nhân viên biết ID phòng ban của nhân viên này. Nhưng đó là một con số vô nghĩa. Muốn biết tên phòng ban, bạn phải tra cứu sang bảng DEPARTMENT. Việc nối 2 bảng đó với nhau để có một thông tin đầy đủ được gọi là JOIN.Có 4 hình thức Join:- INNER JOIN (JOIN)
- LEFT OUTER JOIN (LEFT JOIN)
- RIGHT OUTER JOIN (RIGHT JOIN)
- FULL OUTER JOIN (OUTER JOIN)
- CROSS JOIN
11. Câu truy vấn con (Subquery)
Trong Oracle, một subquery là một truy vấn trong một truy vấn. Bạn có thể tạo các truy vấn con trong câu lệnh SQL của bạn. Những truy vấn con có thể nằm trong mệnh đề WHERE, mệnh đề FROM, hoặc mệnh đề SELECT.Subquery trong mệnh đề WhereKhá thường xuyên, các subquery sẽ được tìm thấy trong mệnh đề WHERE. Những truy vấn con còn được gọi là truy vấn con lồng nhau.Select Acc.Account_Id ,Acc.Open_Date ,Acc.Product_Cd ,Acc.Avail_Balance From Account Acc Where Acc.Cust_Id In (Select Cus.Cust_Id From Customer Cus Where Cus.Cust_Type_Cd = 'B')Subquery trong mệnh đề FromMột truy vấn phụ cũng có thể được tìm thấy trong mệnh đề FROM. Chúng được gọi là inline views.Select Cus.Cust_Id ,Cus.Address ,Cus.Fed_Id ,Acc2.Sum_Avail_Balance From Customer Cus , -- Câu Subquery định nghĩa 1 bảng ảo (inline view) (Select Acc.Cust_Id ,Sum(Acc.Avail_Balance) As Sum_Avail_Balance From Account Acc Group By Acc.Cust_Id) Acc2 Where Cus.Cust_Id = Acc2.Cust_Id;Subquery trong mệnh đề SelectMột truy vấn phụ cũng có thể được tìm thấy trong mệnh đề SELECT.Select Cus.Cust_Id ,Cus.Address ,Cus.Fed_Id ,(Select Sum(Acc.Avail_Balance) From Account Acc Where Acc.Cust_Id = Cus.Cust_Id) As Sum_Avail_Balance From Customer Cus;Bí quyết để đặt một truy vấn phụ trong mệnh đề select là subquery phải trả lại một giá trị duy nhất. Đây là lý do tại sao một các hàm tổng hợp như hàm SUM, COUNT, MIN, hoặc MAX thường được sử dụng trong subquery.Các hướng dẫn về cơ sở dữ liệu Oracle
- Cài đặt PL/SQL Developer trên Windows
- Cơ sở dữ liệu Oracle mẫu để học SQL
- Hướng dẫn học SQL cho người mới bắt đầu với Oracle
- Cài đặt cơ sở dữ liệu Oracle 11g trên Windows
- Cài đặt cơ sở dữ liệu Oracle 12c trên Windows
- Cài đặt Oracle Client trên Windows
- Tạo Oracle SCOTT Schema
- Cơ sở dữ liệu mẫu
- Cấu trúc database và tính năng đám mây trong Oracle 12c
- Import và Export cơ sở dữ liệu Oracle
- Các hàm xử lý chuỗi trong Oracle
- Phân tách một chuỗi ngăn cách bởi dấu phẩy và chuyển vào mệnh đề IN của câu lệnh Select trong Oracle
- Truy vấn phân cấp trong Oracle
- Hướng dẫn và ví dụ Oracle Database Link và Synonym
- Hướng dẫn lập trình Oracle PL/SQL
- Phân tích XML trong Oracle PL/SQL
- Kiểm soát chuẩn hệ thống database Oracle (Audit Standard)
- Kiểm soát bắt buộc và kiểm soát quản trị trong Oracle
- Tạo và quản lý Oracle Wallet
Các hướng dẫn về cơ sở dữ liệu Oracle
- Cài đặt PL/SQL Developer trên Windows
- Cơ sở dữ liệu Oracle mẫu để học SQL
- Hướng dẫn học SQL cho người mới bắt đầu với Oracle
- Cài đặt cơ sở dữ liệu Oracle 11g trên Windows
- Cài đặt cơ sở dữ liệu Oracle 12c trên Windows
- Cài đặt Oracle Client trên Windows
- Tạo Oracle SCOTT Schema
- Cơ sở dữ liệu mẫu
- Cấu trúc database và tính năng đám mây trong Oracle 12c
- Import và Export cơ sở dữ liệu Oracle
- Các hàm xử lý chuỗi trong Oracle
- Phân tách một chuỗi ngăn cách bởi dấu phẩy và chuyển vào mệnh đề IN của câu lệnh Select trong Oracle
- Truy vấn phân cấp trong Oracle
- Hướng dẫn và ví dụ Oracle Database Link và Synonym
- Hướng dẫn lập trình Oracle PL/SQL
- Phân tích XML trong Oracle PL/SQL
- Kiểm soát chuẩn hệ thống database Oracle (Audit Standard)
- Kiểm soát bắt buộc và kiểm soát quản trị trong Oracle
- Tạo và quản lý Oracle Wallet
Các bài viết mới nhất
- Xử lý lỗi 404 trong Flutter GetX
- Ví dụ đăng nhập và đăng xuất với Flutter Getx
- Hướng dẫn và ví dụ Flutter NumberTextInputFormatter
- Hướng dẫn và ví dụ Flutter multi_dropdown
- Hướng dẫn và ví dụ Flutter flutter_form_builder
- Hướng dẫn và ví dụ Flutter GetX obs Obx
- Hướng dẫn và ví dụ Flutter GetX GetBuilder
- Từ khoá part và part of trong Dart
- Hướng dẫn và ví dụ Flutter InkWell
- Bài thực hành Flutter SharedPreferences
- Hướng dẫn và ví dụ Flutter Radio
- Hướng dẫn và ví dụ Flutter Slider
- Hướng dẫn và ví dụ Flutter SkeletonLoader
- Chỉ định cổng cố định cho Flutter Web trên Android Studio
- Hướng dẫn và ví dụ Flutter SharedPreferences
- Tạo Module trong Flutter
- Flutter upload ảnh sử dụng http và ImagePicker
- Bài thực hành Dart http CRUD
- Hướng dẫn và ví dụ Flutter image_picker
- Flutter GridView với SliverGridDelegate tuỳ biến
- Các hướng dẫn về cơ sở dữ liệu Oracle
Từ khóa » Câu Lệnh Left Join Trong Oracle
-
LEFT JOIN Trong SQL
-
Left Join Trong SQL - Học SQL Online - Viettuts
-
Các Loại JOIN Trong Oracle
-
Left Join Trong SQL
-
Truy Vấn Nhiều Bảng Với JOIN Trong SQL
-
Câu Lệnh SQL Join: Các Loại Join Trong SQL - Viblo
-
Oracle LEFT JOIN By Practical Examples
-
LEFT JOIN Trong SQL
-
SQL Cơ Bản - Bài 5: JOIN
-
Inner Join Trong Oracle - Vi
-
Các Loại JOIN Trong Oracle - Oracle Căn Bản
-
SQL LEFT JOIN Keyword - W3Schools
-
SQL JOIN Keyword - W3Schools
-
Outer Join Trong Oracle - Vi