ภาษา SQL

Download Report

Transcript ภาษา SQL

ภาษา SQL
ย่อมาจาก Structured Query Language เป็ นภาษาที่ใช้สาหรับการ
จัดการ และการดึงข้อมูลจากฐานข้อมูล ซึ่งฐานข้อมูลที่จะใช้งานภาษา
SQL ได้ตอ้ งเป็ นฐานข้อมูลเชิงสัมพันธ์ (Relational Database) ซึ่งมี
มุมมองของข้อมูลในรู ปแบบตารางที่สัมพันธ์กนั
1
การแบ่ งกลุ่ม SQL แบ่ งได้ เป็ น 3 กลุ่ม
1.
Data Manipulation Language (DML) เป็ นกลุ่มคาสั่ งทีใ่ ช้ สาหรับการเข้ าถึง
และแก้ ไข ลบ ข้ อมูล เช่ น select insert delete และ update เป็ นต้ น
2.
Data Definition Language (DDL) เป็ นกลุ่มคาสั่ งทีใ่ ช้ สาหรับกาหนด
ออบเจ็กต์ ฐานข้ อมูล เช่ น create drop และ alter เป็ นต้ น
3.
Data Control Language (DCL) เป็ นกลุ่มคาสั่ งทีใ่ ช้ ควบคุมความปลอดภัย
ข้ อมูล เช่ น grant และ revoke
2
create user
create user username identified by password;
grant connect to username; //ให้สิทธิในการ connect
grant resource to username; //ให้สิทธิในการสร้าง object ต่างๆ
//เช่น table view เป็ นต้น
3
Create
Create table <table name>
( <column name1> <data type> [constraint],
<column name2> <data type> [constraint],
…,
<column nameN> <data type> [constraint]);
table name คือชื่อตารางที่เราสร้างขึ้นใหม่
column name คือชื่อ column หรื อ attribute
data type คือชนิดข้อมูลในตามที่ฐานข้อมูลรองรับ
constraint คือเงื่อนไขข้อบังคับที่อยูภ่ ายในระบบฐานข้อมูล
4
Table name
ต้องเป็ นชื่อที่เป็ นคานาม สร้างมาจาก Entity ใน ER diagram
เช่นต้องการสร้างตารางไว้จดั เก็บข้อมูลนักเรี ยนอาจจะใช้ชื่อว่า Students,
TbStudent และ TableStudent เป็ นต้น
Column name
ต้องเป็ นชื่อที่เป็ นคานาม มีความหมายเป็ นคุณสมบัติอย่างใดอย่างหนึ่ง
และจะต้องคุณสมบัติที่มีในตารางที่ตอ้ งการจัดเก็บด้วย
เช่นในตารางนักเรี ยน จะต้องมี colume ที่ตอ้ งเก็บคุณสมบัติ รหัส
นักเรี ยนด้วย โดยอาจจะใช้ชื่อว่า student_id
5
Data type
เป็ นชนิดข้อมูลที่ตอ้ งจัดเก็บตามคุณสมบัติ โดย oracle นั้นที่สาคัญมีดงั นี้
1. number(x)
เป็ นชนิดที่เป็ นตัวเลขตามขนาดที่ตอ้ งการจัดเก็บ เช่น
number(10) ในที่น้ ี x = จานวนเต็ม หรื อ x=จานวนเต็ม,จานวนทศนิยม
เช่น number(10,2) หมายถึงเป็ นจานวนจริ งที่มีค่ามากที่สุดได้เป็ น
99999999.99 (มีตวั เลขได้มากที่สุด 10 ตัวรวมจานวนทศนิยมด้วย)
2. Date เป็ นชนิดวันที่และเวลา
3. Char(N) เป็ นชนิดที่ใช้เก็บจานวนอักขระใดๆได้ตามขนาด N
4. Varchar(N) หรื อ Varchar2(N) เป็ นชนิดที่ใช้เก็บจานวนอักขระใดๆได้ตาม
ขนาด N
5. Blob เป็ นชนิดเก็บ object เช่นรู ปภาพแต่ส่วนมาการเก็บรู ปภาพนั้นจะใช้
varchar คือเป็ นการเก็บ path directory แทน
6
Integrity constraint
เป็ นเงื่อนในการบังคับกับ column ในตาราง
1. Primary key เงื่อนไขบังคับให้ column นั้นเป็ นคียห์ ลัก Not null
2. Foreign key (คียน์ อก) เงื่อนไขบังคับกับความถูกต้องและความสาคัญ
กับการอ้างอิงกับ column อื่นซึ่งอาจจะอยูใ่ นตารางเดียวกันก็ได้
3. Unique เงื่อนไขคล้ายกับคียห์ ลักแต่สามารถเก็บค่า Null ได้
4. Not null เงื่อนไขบังคับให้ column นั้นต้องไม่มีค่าว่าง
5. Check (Condition) เงื่อนไขบังคับให้ column นั้นมีขอ้ มูลตาม
condition ที่กาหนด
7
Primary key
[constraint <constraint name>] primary key
Foreign key
constraint <constraint name> references <table name> <column
name1,…,columnN> [?]
? มีท้งั หมด 4 แบบ คือ
ON DELETE CASCADE คือเมื่อเราลบเรคอร์ ดในตารางหลักก็จะลบเรคอร์ ดในตารางลูกไปด้ วย
ON DELETE SET NULL คือเมื่อเราลบเรคอร์ ดในตารางหลักก็จะกาหนดค่า column ที่เป็ นของตารางลูกให้ เป็ นค่า null
ด้ วย แสดงว่า column ในตารางลูกนั้นจะต้ องไม่ เป็ น Not null
ON DELETE DEFAULT คือเมื่อเราลบเรคอร์ ดในตารางหลักก็จะกาหนดค่า column ที่เป็ นของตารางลูกให้ เป็ นค่าที่เซต
default ไว้ แสดงว่า column ในตารางลูกนั้นจะต้ องกาหนด default ไว้
ON Action ถ้ าใส่ ไว้หรือไม่ ได้ ใส่ ไว้ ก็จะหมายถึงเราไม่ สามารถลบเรคอร์ ดในตารางแม่ ได้ เลยจะลบได้ กต็ ่ อเมื่อในตารางลูก
นั้นถูกลบไปก่อน
8
Not null
constraint <constraint name>] not null
Unique
constraint <constraint name> unique
Check
constraint <constraint name> check (condition)
9
Employees
Column name
descript
Data type
constraint
Emp_id
รหัสพนักงาน
Varchar(5)
Primary key
firstname
ชื่อพนักงาน
Varchar(20)
Not null
lastname
นามสกุลพนักงาน
Varchar(20)
Not null
salary
เงินเดือน
Number(8,2)
Check (salary>3000)
default
Products
Column name
descript
Data type
constraint
Product_id
รหัสสิ นค้า
Char(5)
Primary key
Product_name
ชิ่อรายการสิ นค้า
Varchar(20)
Not null
Product_unit
หน่วยนับ
Varchar(10)
Not null
qty
จานวนคงเหลือ
Number(5)
Check >=0
default
0
10
Sale_Header
Column name
descript
Data type
constraint
Sale_no
เลขที่ขาย
Number(10)
Primary key
Sale_date
วันที่ขาย
Date
Not null
Emp_id
รหัสพนักงาน
Varchar(5)
Foreign key
(Employees) on delete
cascade , Not null
Sale_status
สถานะการขาย
Char(1)
default
‘0’
หมายเหตุ Sale_status 0 = ค้ างจ่ าย , 1 = จ่ ายแล้ว และ 2 = ยกเลิกการขาย
Sale_Detail
Column name
descript
Data type
constraint
Sale_no
เลขที่ขาย
Number(10)
Primary key
Product_id
รหัสสิ นค้า
Char(5)
Primary key ,Foreign key
(Products) on delete
cascade , Not null
sale_num
จานวนที่ขาย
Number(3)
Check > 0
default
11
Create table employees(
Emp_id varchar(5) constraint employees_emp_id_pk primary key,
Firstname varchar(20) constraint employees_firstname_nn not null,
lastname varchar(20) constraint employees_lastname_nn not null,
Salary number(8,2) constraint employees_salary_ch check (salary>3000)
);
Create table Products(
Product_id char(5) constraint products_product_id_pk primary key,
Product_name varchar(20) constraint products_product_name_nn not null,
unit varchar(10) constraint products_unit_nn not null,
Qty number(5) default 0 constraint products_qty_cc (qty>=0),
);
12
Create table sale_header(
Sale_no number(10) constraint sale_header_sale_no_pk primary key,
Sale_date date constraint sale_header_sale_date_nn not null,
Emp_id varchar(5) constraint sale_header_emp_id_nn not null,
Sale_status char(1) default ‘0’,
constraint sale_header_emp_id_fk foreign key (emp_id) references employees(emp_id) ON
DELETE CASCADE
);
Create table sale_detail(
Sale_no number(10) ,
Product_id char(5) constraint sale_detail_product_id_fk references Products(product_id) ON
DELETE CASCADE,
Sale_num number(3) sale_detail_sale_num_cc (sale_num>0),
Constraint sale_detail_sale_no_product_id_pk primary key(sale_no,product_id)
);
13
Customers
Column name
descript
Data type
constraint
cust_id
รหัสลูกค้า
Varchar(5)
Primary key
firstname
ชื่อพนักงาน
Varchar(20)
Not null
lastname
นามสกุลพนักงาน
Varchar(20)
Not null
address
ที่อยู่
Number(8,2)
default
สร้ างตาราง customers
14
Alter เพือ่ เปลีย่ นแปลงโครงสร้ าง (แก้ ไข)
เปลีย่ น column
firstname ให้ มี
Alter table <table name>
รองรับอักขระได้ มาก
Modify (<comlome name> <data type> [constraint]); ทีส่ ุ ด 25 อักขระ
Alter เพือ่ เปลีย่ นแปลงโครงสร้ าง (เพิม่ )
Alter table <table name>
add (<comlome name> <data type> [constraint]);
Alter เพือ่ เปลีย่ นแปลงโครงสร้ าง (ลบ)
Alter table <table name>
drop constraint <constraint name>;
Alter table <table name>
drop column <column name>;
เพิม่ column
birthdate มี data
type เป็ น date และมี
เงือ่ นไขห้ ามมีค่าว่ าง
ลบเงื่อนไข ห้ ามมีค่า
ว่ างของ column
birthdate
15
drop (การลบตาราง)
Drop table <table name>;
ให้ ลบตาราง customers
Select (การค้ นหาการสอบถาม)
Select [distinct] <*/column name1,…,colomn nameN>
from <table name1,…table nameN>
[where (condition)]
[Group by <column name1,…,column nameN>
[having (condition)]
[Order by <column name1,…,column nameN> [asc] / [desc]];
Select * from <table name>
16
Insert (การเพิม่ ข้ อมูล)
Insert into <table name>[(coloumn1,…,comlomnN)]
Values(values for column1,…values for columnN);
จงเพิม่ ข้ อมูลดังต่ อไปนี้
รหัสพนักงาน
S0001
B0001
S0002
S0003
B0002
ชื่อจริง
Sommay
Vichai
Chumsak
Chidchai
Peter
นามสกุล
Jaidee
Tasri
Meesook
Promma
Preedee
เงินเดือน
12,000
13,000
12,050
12,500
14,100
17
Insert (การเพิม่ ข้ อมูล) (ต่ อ)
รหัสสิ นค้ า
M0001
M0002
C0001
H0001
K0001
R0001
M0003
CD001
H0002
CPU01
รายการสิ นค้ า
Monitor
Mouse
Camera
Handy drive
Key broad
Ram
Modem
CD ROM
Hard Disk
CPU ASUS 01
หน่ วยนับ
ชุด
ตัว
ตัว
ตัว
ตัว
ขา
อัน
ตัว
ตัว
ตัว
จานวนคงเหลือ
32
150
25
50
38
45
30
70
56
18
18
Insert (การเพิม่ ข้ อมูล) (ต่ อ)
เลขทีใ่ บขาย
1
2
3
4
5
6
7
8
9
10
วันทีข่ าย
20 ม.ค. 2549
02 ก.พ. 2549
20 มี.ค. 2549
25 มี.ค. 2549
25 มี.ค. 2549
10 เม.ย. 2549
22 เม.ย. 2549
05 พ.ค. 2549
10 พ.ค. 2549
20 พ.ค. 2549
รหัสพนักงานทีข่ าย
S0001
S0001
S0002
B0001
S0002
B0001
S0001
S0003
S0001
S0002
สถานะใบขาย
1
1
2
1
1
1
2
1
1
0
19
Insert (การเพิม่ ข้ อมูล) (ต่ อ)
เลขทีใ่ บขาย
1
1
1
2
2
3
4
4
4
4
รหัสสิ นค้ า
M0001
H0001
M0003
M0002
H0002
CD001
CD001
CPU01
M0003
M0001
จานวนที่ขาย
1
1
1
1
1
2
3
1
2
1
20
Insert (การเพิม่ ข้ อมูล) (ต่ อ)
เลขทีใ่ บขาย
4
5
5
6
6
7
7
8
9
10
รหัสสิ นค้ า
C0001
R0001
C0001
M0001
M0002
CD001
H0002
CPU01
C0001
CD001
จานวนที่ขาย
15
2
10
1
12
1
3
2
3
5
21
รหัสสิ นค้ า
ให้ ทาการเพิม่ คุณสมบัติ ชื่อ cost
โดยมี data type
เป็ น number(7,2)
ให้ set ค่ าเริ่มต้ นเป็ น 0 โดยมีเงือ่ นไข
ห้ ามเป็ นค่ าว่ าง
และต้ องมีค่าไม่ ต่ากว่ า 0 ลงใน
ตาราง products
แล้ วทาการแก้ ไขข้ อมูล ตามตารางต่ อไปนี้
M0001
M0002
C0001
H0001
K0001
R0001
M0003
CD001
H0002
CPU01
ราคา/หน่ วย
5,000
350
2,000
600
300
550
1,700
785
2,540
4,800
22
Update (การแก้ ไขข้ อมูล)
Update <table name> set column1=values1,…,columnN=valueN
[where (condition)];
1. ให้ เปลีย่ นราคาของสิ นค้ าทีม่ รี หัส M001 เป็ น 4,500
2. ให้ เปลีย่ นราคาของสิ นค้ าทีม่ รี หัส M001 และ K0001 เป็ น 320
3. ให้ แก้ ไขเงินเดือนของพนักงานที่มรี หัส S0001 เป็ น 13,500
4. ให้ เพิม่ เงินเดือนอีก 10 เปอร์ เซนต์ ของพนักงานที่มเี งินเดือนต่าว่ า 13,000
5. ให้ ยกเลิกใบขายเลขที่ 6
6. ให้ แก้ ไขจานวนสิ นค้ าทีข่ ายเป็ น 3 ในเลขทีใ่ บขายที่ 5 ของรหัสสิ นค้ า R0001
7. ให้ แก้ ไขวันทีข่ ายเป็ น 24 มี.ค. 2549 ของเลขที่ใบขายเลขที่ 4
23
Delete (การลบข้ อมูล)
Delete from <table name>
[where (condition)];
1. ให้ ลบข้ อมูลรายละเอียดการขายของใบขายเลขที่ 4 ทีข่ ายสิ นค้ ารหัส C0001
2. ให้ ทาการลบข้ อมูลสิ นค้ ารหัส H0001
3. ให้ ทาการลบข้ อมูลการขายเลขที่ 1
24
Select (การค้ นหาการสอบถาม)
Select [distinct] <*/column name1,…,colomn nameN>
from <table name1,…table nameN>
[where (condition)]
[Group by <column name1,…,column nameN>
[having (condition)]
[Order by <column name1,…,column nameN> [asc] / [desc]];
Condition (เงื่อนไข)
Where/having (column name operator value)
operator ได้ แก่ = , < , > , <= , => , <>
25
Sub Query
• คือ การ คิวรี ประกอบด้วย คิวรี หลัก กับ คิวรี ย่อย โดยคิวรี หลักจะใช้
ผลลัพธ์ของ คิวรี ยอ่ ยไปเป็ นเงื่อนไขในการกลัน่ กรองข้อมูล
• หลักการทางาน ต้องหาคิวรี ยอ่ ยก่อนแล้วจึงนาไปใช้งานกับคิวรี หลัก
• ซึ่ง Where จะทางานในคิวรี หลัก ส่ วนHaving จะทางานในคิว
รี ยอ่ ย
26
ให้ ใช้ operator ทาการค้ นหาหรือเรียกดู ตามคาสั่ งต่ อไปนี้
•
•
•
•
•
•
•
•
ต้องการดูขอ้ มูลทั้งหมดของพนักงานที่มีรหัส S0003
ต้องการดูขอ้ มูลเงินเดือนพนักงานที่ชื่อ Vichai
ต้องการดูขอ้ มูล นามสกุล ชื่อ และเงินเดือน ของพนักงานรหัส B0001
ต้องการดูขอ้ มูลรหัสพนักงาน ชื่อและนามสกุล ของพนักงานทีม่ ี
เงินเดือนมากกว่า 13,000
ต้องการดูขอ้ มูลรหัสพนักงาน ชื่อและนามสกุล ของพนักงานทีม่ ี
เงินเดือนน้อยกว่าหรื อเท่ากับ 13,000
ต้องการดูขอ้ มูลทั้งหมดสิ นค้าที่มีราคาตั้งแต่ 1,000 ขึ้นไป
ต้องการดูขอ้ มูลรายละเอียดการขายที่มีเลขที่ใบขายไม่เกิน 7
ต้องการเรี ยกดูขอ้ มูลใบขายที่ไม่ได้ขายโดยพนักงานรหัส S0001
27
Condition (เงื่อนไข) (ต่ อ)
การใช้ AND , OR NOT , between , like , in , is
Where (<column name> [NOT] between <low value> and <high value>)
จงค้ นหาข้ อมูลใบขายสิ นค้ าตั้งแต่ วันที่ 10 ม.ค. 2549 ถึง 20 เม.ย. 2549
จงค้ นหาข้ อมูลพนักงานที่ประกอบด้ วย ชื่อ ทีม่ เี งินเดือนไม่ เกิน 13,000
Where (<column name> [NOT] in (con1,…,conN))
จงค้ นหาข้ อมูลใบขายทีไ่ ม่ ได้ ถูกยกเลิก
จงค้ นหาข้ อมูลสิ นค้ าทีม่ หี น่ วยเป็ น ชุ ด และ ตัว
28
Condition (เงื่อนไข) (ต่ อ)
Where (<condition1 AND/OR condition2,…, AND/OR conditionN>)
จงค้ นหาข้ อมูลรายละเอียดการขายของใบขายเลขที่ 7
จงค้ นหาข้ อมูลรายการสิ นค้ าทีข่ าย ราคา จานวนทีข่ าย และผลคูณราคากับจานวนที่
ขาย ของใบขายเลขที่ 3 โดยเรียงตามรายการสิ นค้ าและจานวนทีข่ ายจากน้ อยไปมาก
Where (<column name> [NOT] like pattern [ESCAPE])
Pattern คือ อักขระตั้งแต่ 1 ตัวขึน้ ไปรวมถึง % และ _ ด้ วย
Escape คือ ใช้ เมือ่ ต้ องการกันอักขระพิเศษออกไป เช่ น \ , @ , $
29
like (ต่ อ)
% ใช้ เมือ่ ต้ องการค้ นหาอักขระใดๆก็ได้
เช่ น select * from tbSutents where std_name like ‘A%’;
select * from tbSutents where std_name like ‘%A’;
select * from tbSutents where std_name like ‘A%’;
จงค้ นหาข้ อมูลสิ นค้ าทีข่ นึ้ ต้ นด้ วยตัว H โดยเรียงรหัสสิ นค้ าจากมากไปหาน้ อย
จงค้ นหาข้ อมูลสิ นค้ าทีม่ อี กั ษรตัว O อยู่ส่วนใดส่ วนหนึ่งของชื่อสิ นค้ า
_ ใช้ เมือ่ ต้ องการค้ นหาอักขระใดๆก็ได้ แต่ ต้องมีจานวนเท่ ากับ _
เช่ น select * from tbSutents where std_name like ‘A_’;
จงค้ นหาข้ อมูลชื่อ นามสกุลของพนักงานทีเ่ ป็ นพนักงานขาย (มี ตัวS อยู่
ข้ างหน้ าของรหัสพนักงาน)
จงค้ นหาข้ อมูลของพนักงานทีม่ ชี ื่อทั้งหมด 6 ตัวอักษรและขึน้ ต้ นด้ วยตัว V
30
Where (<column name> [NOT] is NULL)
จงสร้ างตารางชื่อ students โดยมีโครงสร้ างดังต่ อไปนี้
Column name
descript
Data type
std_id
รหัสนิสิต
Number(10)
std_name
ชื่อ นามสกุลนิสิต
Varchar(20)
nickname
ชื่อเล่น
Varchar(10)
รหัสนิสิต
ชื่อ นามสกุลนิสิต
ชิ่อเล่น
4900000001 Satid Mormorsor Sa
4900000002 Soochai Sorsri
4900000003 Vimon Deena
Poo
constraint
default
Primary key
จงค้ นหาข้ อมูลนิสิตทีไ่ ม่ มีชื่อเล่น
จงค้ นหาข้ อมูลนิสิตทีม่ ชี ื่อเล่น
31
Aggregate Function
SUM , MIN , MAX , AVG , COUNT
Select [distinct] [<colomn name1>,…, <column nameN>],
[SUM(<column name>)/ MIN(<column name>)/
MAX(<column name>)/ AVG(<column name>)/
COUNT(<column name>)]
From <table name> [Where <condition>]
[Group by <colomn name1>,…, <column nameN> ]
[Having <condition1…>]
[Order by <column name> [ASC] / [DESC]];
32
Aggregate Function (ต่ อ)
จงค้ นหาข้ อมูลเงินเดือนพนักงานทีส่ ู งทีส่ ุ ด
จงค้ นหาข้ อมูลเงินเดือนพนักงานที่ตา่ ทีส่ ุ ด
จงค้ นหาชื่อพนักงานทีม่ ีเงินเดือนพนักงานที่ตา่ ทีส่ ุ ด
จงค้ นหารายการสิ นค้ าที่มีจานวนต่ากว่ าผลรวมของราคาสิ นค้ าทั้งหมดหารด้ วย10
ต้ องการดูข้อมูลรายการสิ นค้ าทีม่ รี าคาต่าทีส่ ุ ด
จงค้ นหาข้ อมูลจานวนสิ นค้ ารวมกันทั้งหมด
ต้ องการดูราคาของสิ นค้ าที่ตา่ ทีส่ ุ ด ทีส่ ู งทีส่ ุ ด และค่ าเฉลีย่ ของราคาทั้งหมดโดยมี
หัวคอลัมน์ min cost max cost average cost
จงค้ นหาข้ อมูลรายชื่อพนักงานทีม่ เี งินเดือนมากกว่ าเงินเฉลีย่ ของพนักงานทั้งหมด
จงค้ นหาเลขทีใ่ บขาย และจานวนรายการสิ นค้ าทีถ่ ูกขายในแต่ ละใบขาย
33
Aggregate Function (ต่ อ)
Distinct นั้นจะลดระเบียนทีซ่ ้ากันออก จะมีผลกับ SUM,AVG และ COUNT
จงค้ นหารายละเอียดสิ นค้ า ประกอบด้ วยชื่อสิ นค้ า ยอดรวมจานวนที่ขาย ยอด
เฉลีย่ จานวนที่ขาย และจานวนเร็คคอร์ ดของสิ นค้ าที่ขาย โดยแบ่ งตามชื่อ
รายการสิ นค้ า และให้ กาจัดระเบียนที่ซ้ากัน
SQL ขั้นสู ง
Select ….
From…
Subquery
Where | Having … ( Select [Distinct] <column name…>
From <table…>
[Where <condition…>]
[Group by <column
name…> ] [Having <condition…>]
);
34
Query ในประโยค where
Select…
From <table_name>
Where comlumn_name <operator> ( select comlumn_name
From <table_name>
[Where | Having <condition>]
);
จงค้ นหาชื่อและนามสกุลของพนักงานขายทีเ่ คยขายสิ นค้ าในใบขายเลขที่ 2 , 5 และ 8
จงค้ นหาชื่อและนามสกุลของพนักงานขายทีไ่ ม่ เคยขายสิ นค้ าเลย
จงค้ นหานามสกุลและชื่อจริงของพนักงานทีม่ เี งินเดือนไม่ ต่ากว่ าราคาสิ นค้ ารวมกัน
ทั้งหมด
35
Query โดยใช้ keyword IN
Select…
From <table_name>
Where comlumn_name [not] in ( select comlumn_name
From <table_name>
[Where | Having <condition>]
);
จงค้ นหาชื่อและนามสกุลของพนักงานขายทีไ่ ม่ เคยขายสิ นค้ าเลย
จงค้ นหารายการสิ นค้ าทีไ่ ม่ เคยถูกขายเลย
จงค้ นหารายการสิ นค้ าทีเ่ คยถูกขายไปมากกว่ า 1 ครั้ง
จงค้ นหาข้ อมูลของพนักงานขายทีเ่ คยขายสิ นค้ าและมีเงินเดือนไม่ ต่ากว่ า 12500
36
รู้ จกั กับ Correlate Subquery
Select
Select…
From <table_name> tb1
Where comlumn_name [not] in ( select comlumn_name
From <table_name> tb2
Where (tb1.column_name1 <operator>
tb2.column_name1) );
คาสั่ ง select ของตารางด้ านนอกกับคาสั่ ง select ของตารางด้ านใน จะต้ องมี column_name
เหมือนกันมาเปรียบเทียบกัน
จงค้ นหารายการสิ นค้ าทีถ่ ูกขายไปในใบขายเลขที่ 2
จงค้ นหาข้ อมูลพนักงานทีไ่ ม่ ได้ ขายสิ นค้ าของใบขายเลขที่ 2
37
การใช้ keyword EXISTS
Select
Select…
From <table_name>
Where [NOT] EXISTS ( select * From <table_name>
[Where | Having <condition>]
);
จงค้ นหาใบขายสิ นค้ าที่ขายสิ นค้ ารหัสสิ นค้ า S0001 หรือ C0001
จงค้ นหาข้ อมูลสิ นค้ าทีเ่ คยถูกขายไปไม่ ต่ากว่ า 3 หน่ วย
จงค้ นหาข้ อมูลพนักงานทีไ่ ม่ เคยขายสิ นค้ าเลย
38
การใช้ keyword ANY และ ALL
Select
Select…
From <table_name>
Where comlumn_name operator [ANY/ALL] ( select comlumn_name
From <table_name>
[Where | Having <condition>]
);
จงค้ นหาข้ อมูลพนักงานทีม่ เี งินเดือนสู งกว่ าหรือเท่ ากับเงินเดือนทีส่ ู งสุ ดของ
พนักงาน
จงค้ นหาข้ อมูลพนักงานทีม่ เี งินเดือนสู งกว่ าเงินเดือนที่ตา่ สุ ดของพนักงาน
39
การ Query หลายๆ ตาราง Inner join
Select [distinct]<*/column_names> FROM <table_name1 [t1] , … ,
table_nameN tN>
WHERE <t1.same_column = t2.same_column and (other conditions)>
Select ...
FROM table_name1 t1 INNER JOIN table_name2 t2
ON t1.column_name = t2.column_name
[Order by column_name [asc/desc] ]
จงค้ นหารหัสสิ นค้ า รายการสิ นค้ า จานวนทีข่ ายไป ราคาขาย และจานวนเงินที่ขาย
ของใบขายทั้งหมด
จงค้ นหาชื่อจริง และเงินเดือนพนักงาน ในใบขายที่ชาระเงินเรียบร้ อยแล้ ว
40
การ Query หลายๆ ตาราง
Left Outer join
Select ...
FROM table_name1 t1 LEFT OUTER JOIN table_name2 t2
ON t1.column_name = t2.column_name
[Order by column_name [asc/desc] ]
จงค้ นหาจานวนขายและรายการสิ นค้ าที่ขายไป
จงค้ นหาวันที่ขายพร้ อมชื่อพนักงานทีข่ าย
41
การ Query หลายๆ ตาราง
Right outer join
Select ...
FROM table_name1 t1 RIGHT OUTER JOIN table_name2 t2
ON t1.column_name = t2.column_name
[Order by column_name [asc/desc] ]
จงค้ นหาเลขทีใ่ บขายและชื่อจริงของพนักงานขาย
จงค้ นหาจานวนทีข่ ายพร้ อมรายการสิ นค้ าทีข่ าย โดยเรียงข้ อมูลตามรายการสิ นค้ า
จากมากไปน้ อย
42
การ Query หลายๆ ตาราง
Full outer join
Select ...
FROM table_name1 t1 FULL OUTER JOIN table_name2 t2
ON t1.column_name = t2.column_name
[Order by column_name [asc/desc] ]
จงค้ นหาเลขทีใ่ บขายและรายการสิ นค้ าที่ขายไป
จงค้ นหาเลขทีใ่ บขายพร้ อมนามสกุลพนักงานขายทีข่ าย โดยเรียงข้ อมูลตามนามสกุล
พนักงานขายจากน้ อยไปมาก
43
UNION , INTERSECT and MINUS
Select <column1,…,columnN>
FROM table_name1
UNION [ALL] | INTERSECT | MINUS
Select <column… ทีเ่ ป็ นชนิดเดียวกันกับ column1,…,columnN
ของ table_name1ตามลาดับ>
FROM table_name2
ต้ องการดูรหัสของพนักงานทีไ่ ม่ เคยขายสิ นค้ า
ต้ องการดูรหัสของพนักงานในข้ อมูลพนักงานรวมกับรหัสพนักงานในใบขาย
ต้ องการดูรหัสสิ นค้ าทีเ่ คยขายไปทั้งหมด
44
การสร้ าง VIEW
Create [or replace] VIEW <view_name> AS
SELECT …
FROM …
[WHERE | HAVING ….]
[GROUP BY …]
Drop VIEW <view_name>
ต้ องการดูข้อมูลของพนักงานทีข่ ายสิ นค้ าบ่ อยทีส่ ุ ด
ต้ องการดูข้อมูลของสิ นค้ าทีท่ ายอดขายได้ สูงทีส่ ุ ด
45