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