Upload
phungthu
View
240
Download
1
Embed Size (px)
Citation preview
Structured Query Language
SQLเรยบเรยงโดย อ.เรวด พพฒนสงเนน
SQL ภาษา SQL ยอมาจากค าวา Structured Query Language อานออกเสยง
อยางยอวา เอสควแอล , ซเคลว , ซควล
เปนภาษาทใชในการด าเนนการกบขอมลในฐานขอมลเชงสมพนธ (Relational Database)
ภาษา SQL ถกก าหนดมาตรฐานโดย ANSI (American National Standard Institute) และ ISO (International Standard Organization)
มพนฐานทผสมผสานกนระหวาง Relational Algebra และ Relation Calculus
ภาษา SQL จะพบในระบบจดการฐานขอมลเชงสมพนธ(Relational Database Management System: RDBMS) ทไดรบความนยมในปจจบน เชน MS Access , MS SQL Server , Oracle , MySQL , DB2 เปนตน
เรยบเรยงโดย อ.เรวด พพฒนสงเนน
History of SQL จากเอกสารของ ดร.เอดการ เอฟ. คอดด(Dr. Edgar Frank Codd) แถลง
ตอสาธารณชนในเดอน มถนายน ค.ศ. 1970 ใน นตยสารของเอซเอม (Association for Computing Machinery:ACM) แบบจ าลองของคอดดทวางเอาไว ไดกลายเปนผลงานทยอมรบทวโลกส าหรบระบบการจดการฐานขอมลในปจจบน
ในชวงป ค.ศ. 1970 ณ ศนยพฒนาคอมพวเตอรซานโฮเซของไอบเอม ไดวจยและพฒนาระบบฐานขอมลทเรยกวา ซสเตม อาร ( "System R") ขนตามแบบจ าลองของคอดด และก าหนดภาษาชอวาภาษาสอบถามเชงโครงสรางภาษาองกฤษ หรอ ซเควล (Structured English QUEry Language:SEQUEL) ขนเพอจดการกบขอมล
เรยบเรยงโดย อ.เรวด พพฒนสงเนน
History of SQL ภาษา SQL พฒนาโดย โดนลด ด. แซมเบอรลน (Donald D.
Chamberlin) และ เรยมอนด เอฟ. บอยซ (Raymond F. Boyce) จาก IBM
ภายหลงถกเปลยนชอมาเปนเอสควแอล(S-Q-L : Structured Query Language) เนองจากชอซเควล (SEQUEL) ซ ากบชอเครองหมายการคาของบรษทผลตเครองบนฮอกเกอร-ซดเดลย (Hawker-Siddeley) ของ สหราชอาณาจกร
เรยบเรยงโดย อ.เรวด พพฒนสงเนน
RDBMS ทใช SQLซอฟตแวรกรรมสทธ
4th Dimension
Dataphor
Daffodil database
DB2
FileMaker Pro
Informix
InterBase
Matisse
Microsoft Access
Microsoft SQL Server
Microsoft Visual FoxPro
Mimer SQL
Netezza
ซอฟตแวรกรรมสทธ
NonStop SQL
Oracle
Progress 4GL
Sand Analytic Server (ชอเดมวา Nucleus)
SmallSQL
Sybase ASA (ชอเดมวา WatcomSQL)
Sybase
Sybase IQ
Teradata
ThinkSQL
VistaDB
ซอฟตแวรเปด
Cloudscape
Firebird
H2
HSQLDB
Ingres
MaxDB
MonetDB
MySQL
PostgreSQL
SQLite
tdbengine
เรยบเรยงโดย อ.เรวด พพฒนสงเนน
SQL สามารถท าอะไร ? สงทภาษา SQL ท า ไดแกสราง/ลบฐานขอมล
สราง/ลบ/แกไข ตารางส าหรบจดเกบขอมล
สราง/ลบ/แกไข วว(View) ในฐานขอมล
สราง/ลบ/แกไข stored procedure ในฐานขอมล
เพม/ลบ/แกไข รายการขอมลในตารางขอมล
สบคนขอมลจากฐานขอมลตามเงอนไขทตองการ
ก าหนดสทธในการใชงานขอมลในตารางขอมล ,วว และ stored procedure
เรยบเรยงโดย อ.เรวด พพฒนสงเนน
กลมค าสงของ SQLแบงเปน 3 กลม ไดแก ภาษาการนยามขอมล
(Data Definition Language : DDL) ภาษาปฏบตการของขอมล
(Data Manipulation Language : DML) ภาษาควบคมขอมล
(Data Control Language : DCL)
เรยบเรยงโดย อ.เรวด พพฒนสงเนน
กลมค าสง DML เปนค าสงทใชในการจดการขอมลในตารางขอมล
ค าสงทอยในกลม DML INSERT INTO : เพมรายการขอมลใหมในตาราง
UPDATE : แกไขรายการขอมลในตาราง
DELETE : ลบรายการขอมลในตาราง
SELECT : เรยกดหรอสบคนขอมลจากตาราง
เรยบเรยงโดย อ.เรวด พพฒนสงเนน
กลมค าสง DDL เปนค าสงทใชในการก าหนดโครงสรางของฐานขอมล
ค าสงทอยในกลม DDL CREATE DATABASE : สรางฐานขอมลใหม
DROP DATABASE : ลบฐานขอมล
CREATE TABLE : สรางตารางขอมลใหมในฐานขอมล
DROP TABLE : ลบตารางขอมลในฐานขอมล
ALTER TABLE : แกไขโครงสรางตารางขอมล
CREATE INDEX : สรางดชนในตาราง
DROP INDEX : ลบดชนในตาราง
CREATE VIEW : สรางวว
DROP VIEW : ลบวว
เรยบเรยงโดย อ.เรวด พพฒนสงเนน
กลมค าสง DCL เปนค าสงทใชในการก าหนดสทธการใชงาน
ฐานขอมลใหแกผใช
ค าสงทอยในกลม DCL GRANT : ก าหนดสทธในการใชงานวตถตาง ๆ ใน
ฐานขอมลใหแกผใช
REVOKE : ยกเลกสทธในการใชงานวตถตาง ๆ ในฐานขอมลจากผใช
เรยบเรยงโดย อ.เรวด พพฒนสงเนน
DATA DEFINITION LANGUAGE
DDL
เรยบเรยงโดย อ.เรวด พพฒนสงเนน
CREATE DATABASEค าสง CREATE DATABASE ใชส าหรบสรางฐานขอมลใหม
ในระบบจดการฐานขอมล
รปแบบค าสง
CREATE DATABASE <database_name>;
ตวอยาง
ตองการสรางฐานขอมลชอ University
CREATE DATABASE University;
เรยบเรยงโดย อ.เรวด พพฒนสงเนน
DROP DATABASEค าสง DROP DATABASE ใชส าหรบลบฐานขอมลทมอยออก
จากระบบจดการฐานขอมล
รปแบบค าสง
DROP DATABASE <database_name>;
ตวอยาง
ตองการลบฐานขอมลชอ University
DROP DATABASE University;
เรยบเรยงโดย อ.เรวด พพฒนสงเนน
CREATE TABLEค าสง CREATE TABLE ใชส าหรบสรางและก าหนด
โครงสรางตารางเพอใชจดเกบขอมลในฐานขอมล
รปแบบค าสงCREATE TABLE table_name( column_name1 data_type ,
column_name2 data_type ,column_name3 data_type ,....
)
*** Data type (ชนดขอมล) ทก าหนดในค าสงขนอยกบระบบจดการฐานขอมลทเลอกใช เชน MS Access , MySQL , Oracle MS SQL Server เปนตน
เรยบเรยงโดย อ.เรวด พพฒนสงเนน
CREATE TABLE (ตอ)ชนดขอมลของ MS Access มดงนData type Description Storage
Text ใชส าหรบเกบขอความหรอทงขอความและตวเลข ก าหนดคาไดสงสด 255 ตวอกษร
Memo ใชส าหรบเกบขอความจ านวนมาก สามารถเกบไดมากถง 65,536 ตวอกษรNote: ไมสามารถเรยงล าดบขอมลชนด memo ได
Byte ใชส าหรบเกบตวเลข ตงแต 0 ถง 255 1 byteInteger ใชส าหรบเกบตวเลข ตงแต -32,768 ถง 32,767 2 bytesLong ใชส าหรบเกบตวเลข ตงแต -2,147,483,648 ถง 2,147,483,647 4 bytes
Single ใชส าหรบเกบตวเลขแบบทศนยม 4 bytesDouble ใชส าหรบเกบตวเลขแบบทศนยม 8 bytesCurrency ใชส าหรบเกบขอมลตวเลขทางการเงน จ านวน15 หลก มต าแหนงทศนยม 4 ต าแหนง และม
สญลกษณหนวยการเงน เชน $ , ฿ เปนตนTip: สามารถเลอกสญลกษณทางการเงนแตละประเทศได
8 bytes
AutoNumber ตวเลขทเพมคาใหอตโนมตทละ 1 4 bytes
Date/Time ใชส าหรบขอมลประเภท วนและเวลา 8 bytesYes/No ใชส าหรบขอมลทางตรรกะ เชน Yes/No , True / False หรอ
Note: ไมยอมใหขอมลชนดนเปนคาวาง ตองก าหนดคาเสมอ1 bit
Ole Object ใชส าหรบเกบขอมลประเภท รปภาพ , ไฟลเสยง , วดโอ หรอ วตถชนดไบนาร (BLOB : Binary Large OBjects)
up to 1GB
Hyperlink สามารถลงกไปยงไฟลหรอเวบไซตได Lookup Wizard
สามารถเลอกรายการขอมลไดจาก Drop down list ทก าหนดไวได 4 bytes
เรยบเรยงโดย อ.เรวด พพฒนสงเนน
CREATE TABLE (ตอ)ชนดขอมลของ MS SQL Server มดงน
Character strings:
Data type Description Storagechar(n) Fixed-length character string. Maximum 8,000 characters nvarchar(n) Variable-length character string. Maximum 8,000 charactersvarchar(max) Variable-length character string. Maximum 1,073,741,824 characters
text Variable-length character string. Maximum 2GB of text data
Unicode strings:Data type Description Storagenchar(n) Fixed-length Unicode data. Maximum 4,000 charactersnvarchar(n) Variable-length Unicode data. Maximum 4,000 charactersnvarchar(max) Variable-length Unicode data. Maximum 536,870,912 characters
ntext Variable-length Unicode data. Maximum 2GB of text data
เรยบเรยงโดย อ.เรวด พพฒนสงเนน
CREATE TABLE (ตอ)ชนดขอมลของ MS SQL Server มดงน
:
Binary types:Data type Description Storagebit Allows 0, 1, or NULLbinary(n) Fixed-length binary data. Maximum 8,000 bytesvarbinary(n) Variable-length binary data. Maximum 8,000 bytesvarbinary(max) Variable-length binary data. Maximum 2GBimage Variable-length binary data. Maximum 2GB
Number types:Data type Description Storagetinyint Allows whole numbers from 0 to 255 1 bytesmallint Allows whole numbers between -32,768 and 32,767 2 bytesint Allows whole numbers between -2,147,483,648 and 2,147,483,647 4 bytesbigint Allows whole numbers between -9,223,372,036,854,775,808 and
9,223,372,036,854,775,807 8 bytes
เรยบเรยงโดย อ.เรวด พพฒนสงเนน
CREATE TABLE (ตอ)ชนดขอมลของ MS SQL Server มดงน
Number types:Data type Description Storagedecimal(p,s) Fixed precision and scale numbers. Allows numbers from -10^38 +1 to 10^38
–1.The p parameter indicates the maximum total number of digits that can be stored (both to the left and to the right of the decimal point). p must be a value from 1 to 38. Default is 18.The s parameter indicates the maximum number of digits stored to the right of the decimal point. s must be a value from 0 to p. Default value is 0
5-17 bytes
numeric(p,s) Fixed precision and scale numbers. Allows numbers from -10^38 +1 to 10^38 –1.The p parameter indicates the maximum total number of digits that can be stored (both to the left and to the right of the decimal point). p must be a value from 1 to 38. Default is 18.The s parameter indicates the maximum number of digits stored to the right of the decimal point. s must be a value from 0 to p. Default value is 0
5-17 bytes
เรยบเรยงโดย อ.เรวด พพฒนสงเนน
CREATE TABLE (ตอ)ชนดขอมลของ MS SQL Server มดงน
Number types:Data type Description Storagesmallmoney Monetary data from -214,748.3648 to 214,748.3647 4 bytesmoney Monetary data from -922,337,203,685,477.5808 to
922,337,203,685,477.58078 bytes
float(n) Floating precision number data from -1.79E + 308 to 1.79E + 308.The n parameter indicates whether the field should hold 4 or 8 bytes. float(24) holds a 4-byte field and float(53) holds an 8-byte field. Default value of n is 53.
4 or 8 bytes
real Floating precision number data from -3.40E + 38 to 3.40E + 38 4 bytes
เรยบเรยงโดย อ.เรวด พพฒนสงเนน
CREATE TABLE (ตอ)ชนดขอมลของ MS SQL Server มดงน
Date types:Data type Description Storagedatetime From January 1, 1753 to December 31, 9999 with an accuracy of 3.33
milliseconds8 bytes
datetime2 From January 1, 0001 to December 31, 9999 with an accuracy of 100 nanoseconds
6-8 bytes
smalldatetime From January 1, 1900 to June 6, 2079 with an accuracy of 1 minute 4 bytes
date Store a date only. From January 1, 0001 to December 31, 9999 3 bytes
time Store a time only to an accuracy of 100 nanoseconds 3-5 bytes
datetimeoffset The same as datetime2 with the addition of a time zone offset 8-10 bytes
timestamp Stores a unique number that gets updated every time a row gets created or modified. The timestamp value is based upon an internal clock and does not correspond to real time. Each table may have only one timestamp variable
เรยบเรยงโดย อ.เรวด พพฒนสงเนน
CREATE TABLE (ตอ)ชนดขอมลของ MS SQL Server มดงน
Other data types:Data type Descriptionsql_variant Stores up to 8,000 bytes of data of various data types, except text, ntext, and
timestampuniqueidentifier Stores a globally unique identifier (GUID)xml Stores XML formatted data. Maximum 2GBcursor Stores a reference to a cursor used for database operationstable Stores a result-set for later processing
เรยบเรยงโดย อ.เรวด พพฒนสงเนน
CREATE TABLE (ตอ)
ตวอยาง
CREATE TABLE Persons(
P_Id Number,FirstName Text(25),LastName Text(35), Addr Text(100),City Text(40)
);
CREATE TABLE Persons(
P_Id int,FirstName nVarchar(25),LastName nVarchar(35), Addr nVarchar(100),City nVarchar(40)
);
MS Access MS SQL Server
เรยบเรยงโดย อ.เรวด พพฒนสงเนน
CREATE TABLE : CONSTRAINTS Constraints ใชเพอจ ากดชนดและลกษณะของขอมลทจะปอนเขาในตาราง
สามารถก าหนด Constraints ในขณะทสรางตารางใหม(ดวยค าสง CREATE TABLE) หรอก าหนดทหลงการสรางตาราง(ดวยค าสง ALTER TABLE)
Constraints ไดแก NOT NULL
UNIQUE
PRIMARY KEY
FOREIGN KEY
CHECK
DEFAULT
เรยบเรยงโดย อ.เรวด พพฒนสงเนน
CONSTRAINTS : NOT NULL NOT NULL ใชก าหนดใหขอมลในคอลมนไมใหปอนคาวาง (Null value)
หากก าหนดใหคอลมนใดเปน NOT NULL หมายความวาจะไมสามารถเพมรายการขอมล(insert) หรอ แกไข(update) ไดหากปอนคาวางในคอลมนนน ๆ
ตวอยาง
CREATE TABLE Persons(
P_Id Int NOT NULL ,FirstName nVarchar(25) NOT NULL ,LastName nVarchar (35), Addr nVarchar (100),City nVarchar (40)
);
คอลมน p_id และ FirstName หามเปนคา
วาง หากมการเพมรายการขอมลใหมหรอแกไขขอมล
ตองปอนขอมลนเสมอ
เรยบเรยงโดย อ.เรวด พพฒนสงเนน
CONSTRAINTS : UNIQUE UNIQUE ใชก าหนดใหขอมลในคอลมนมคาเปนเอกลกษณ(มคาไมซ ากน)
คยหลกของตารางขอมลจะถกก าหนดใหเปน UNIQUE โดยอตโนมต
สามารถก าหนด UNIQUE ใหกบคอลมนตาง ๆ ในตารางไดหลายคอลมน
ตวอยาง ก าหนดใหคอลมน P_Id เปน UNIQUE (มคาไมซ า) ก าหนดตอนสรางตาราง
CREATE TABLE Persons(
P_Id Int NOT NULL UNIQUE,FirstName nVarchar(25) NOT NULL ,LastName nVarchar (35), Addr nVarchar (100),City nVarchar (40)
);
คอลมน P_Id หามเปนคาวาง และเปนเอกลกษณ หากมการเพมรายการขอมลใหมหรอแกไขขอมลตองปอนขอมลนและหามปอนคาซ ากนเสมอ
เรยบเรยงโดย อ.เรวด พพฒนสงเนน
CONSTRAINTS : PRIMARY KEY PRIMARY KEY คอคอลมนทมคาเปนเอกลกษณ เพอใชในการระบรายการ
ขอมลแตละรายการในตาราง
PRIMARY KEY ตองหามเปนคาวาง (NOT NULL)
PRIMARY KEY ตองมคาเปนเอกลกษณ (UNIQUE)
ทกตารางตองม PRIMARY KEY และมตารางละหนง PRIMARY KEY เทานน
เรยบเรยงโดย อ.เรวด พพฒนสงเนน
CONSTRAINTS : PRIMARY KEY ตวอยาง ก าหนดใหคอลมน P_Id เปน PRIMARY KEY (ก าหนดตอน
สรางตาราง)
CREATE TABLE Persons(
P_Id Int NOT NULL UNIQUE,FirstName nVarchar(25) NOT NULL ,LastName nVarchar (35), Addr nVarchar (100),City nVarchar (40) ,CONSTRAINT PK_Persons PRIMARY KEY(P_Id)
);
*** ถาไมก าหนด CONSTRAINT name ระบบจะก าหนดใหอตโนมต
เรยบเรยงโดย อ.เรวด พพฒนสงเนน
CONSTRAINTS : PRIMARY KEY กรณมแอททรบวตทเปนคยหลกมากกวา 1 แอททรบวต ตวอยาง ก าหนดใหคอลมน P_Id และคอลมน FirstName เปน
PRIMARY KEY (ก าหนดตอนสรางตาราง)CREATE TABLE Persons(
P_Id Int NOT NULL UNIQUE,FirstName nVarchar(25) NOT NULL ,LastName nVarchar (35), Addr nVarchar (100),City nVarchar (40) ,PRIMARY KEY(P_Id , FirstName)
);
เรยบเรยงโดย อ.เรวด พพฒนสงเนน
CONSTRAINTS : FOREIGN KEY FOREIGN KEY คอคอลมนทใชเชอมโยงขอมลระหวางตาราง
FOREIGN KEY จะเชอมโยงไปยง PRIMARY KEY ของอกตาราง
ตาราง Student มคอลมน fac_id เปน Foreign key เชอมโยงไปยง Primary key ของตาราง Faculty
การปอนขอมลในคอลมน fac_id ของ Student ตองสอดคลองกบคาใน fac_id ของ Faculty
เรยบเรยงโดย อ.เรวด พพฒนสงเนน
CREATE TABLE (ตอ)Relation name
Attribute name
Description Data type Size Allow null
Key References
Faculty Fac_id รหสคณะวชา nChar 3 No PK
Fac_name ชอคณะวชา nVarchar 30 Yes
Fac_phone เบอรโทรศพท nVarchar 10 Yes
CREATE TABLE Faculty( Fac_id nChar(3) NOT NULL UNIQUE ,
Fac_name nVarchar(30) ,Fac_phone nVarchar(10),PRIMARY KEY(Fac_id)
);
เรยบเรยงโดย อ.เรวด พพฒนสงเนน
CREATE TABLE (ตอ)Relation name
Attribute name
Description Data type Size Allow null
Key References
Students Std_id รหสนกศกษา nChar 11 No PK
Std_Fname ชอนกศกษา nVarchar 25 No
Std_Lname นามสกล nVarchar 30 No
Std_Address ทอย nVarchar 50 Yes
Std_major สาขาวชา nVarchar 20 Yes
Std_gpa เกรดเฉลยสะสม float Yes
Fac_id รหสคณะทนกศกษาสงกด
nChar 3 Yes FK Faculty(Fac_id)
เรยบเรยงโดย อ.เรวด พพฒนสงเนน
CREATE TABLE (ตอ)CREATE TABLE Students( Std_id nChar(11) NOT NULL UNIQUE ,
Std_Fname nVarchar(25) NOT NULL ,Std_Lname nVarchar (35) NOT NULL ,Std_address nVarchar (50),Std_major nVarchar (20),Std_gpa float,Fac_id nChar(3),Constraint PK_Student PRIMARY KEY(Std_id) ,Constraint FK_Students_Faculty FOREIGN KEY(Fac_id) REFERENCES
Faculty(Fac_id));
เรยบเรยงโดย อ.เรวด พพฒนสงเนน
CONSTRAINTS : CHECK CHECK ใชก าหนดขอบเขตคาของขอมลทปอนไดในตาราง
ตวอยาง ก าหนดใหคาในคอลมน Std_gpa ของ ตาราง Students หามมคาต ากวา 0
CREATE TABLE Students( Std_id nChar(11) NOT NULL UNIQUE ,
Std_Fname nVarchar(25) NOT NULL ,Std_Lname nVarchar (35) NOT NULL ,Std_address nVarchar (50),Std_major nVarchar (20),Std_gpa float CHECK(Std_gpa > 0) ,Fac_id nChar(3),
CONSTRAINT PK_Students PRIMARY KEY(Std_id) ,CONSTRAINT FK_Students_Faculty FOREIGN KEY(Fac_id) REFERENCES
Faculty(Fac_id));
เรยบเรยงโดย อ.เรวด พพฒนสงเนน
CONSTRAINTS : DEFAULT DEFAULT ใชก าหนดคาเรมตนของขอมลทปอนไดในตาราง
ตวอยาง ก าหนดใหคาในคอลมน Std_major ของ ตาราง Students มคาเรมตน IT (ในกรณทไมปอนขอมลในแอททรบวตนจะก าหนดคาเปน IT อตโนมต)
CREATE TABLE Students( Std_id nChar(11) NOT NULL UNIQUE ,
Std_Fname nVarchar(25) NOT NULL ,Std_Lname nVarchar (35) NOT NULL ,Std_address nVarchar (50),Std_major nVarchar (20) DEFAULT(‘IT’),Std_gpa float CHECK(Std_gpa > 0) ,Fac_id nChar(3),CONSTRAINT PK_Students PRIMARY KEY(Std_id) ,CONSTRAINT FK_Students_Faculty FOREIGN KEY(Fac_id) REFERENCES
Faculty(Fac_id));
เรยบเรยงโดย อ.เรวด พพฒนสงเนน
DROP TABLEค าสง DROP TABLE ใชส าหรบลบตารางขอมลออกจาก
ฐานขอมล
รปแบบค าสง
DROP TABLE <table_name>;
ตวอยาง
ตองการลบตารางขอมลชอ Students
DROP TABLE Students;
เรยบเรยงโดย อ.เรวด พพฒนสงเนน
ALTER TABLEค าสง ALTER TABLE ใชส าหรบแกไขโครงสรางของ
ตารางขอมล ซงการแกไขโครงสรางไดแก Add : เพมคอลมน
Modify : แกไขคอลมน
Drop : ลบคอลมน
รปแบบค าสง
ALTER TABLE <table_name>
ADD / MODIFY / DROP <เงอนไขคอลมน>;
เรยบเรยงโดย อ.เรวด พพฒนสงเนน
ALTER TABLE (ตอ)
ตวอยาง (เพมคอลมน)
เพมคอลมนในตาราง Students ชอ Std_email ชนดขอมล Varchar ขนาด 50 ตวอกษร
ALTER TABLE Students
ADD Std_email Varchar(50);
เรยบเรยงโดย อ.เรวด พพฒนสงเนน
ALTER TABLE (ตอ)
ตวอยาง (แกไขคอลมน)
แกไขคอลมนชอ Std_email ในตาราง Students โดย แกไขขนาดเขตขอมลจาก Varchar(50) เปน Vrachar(60)
ALTER TABLE StudentsMODIFY Std_email Varchar(60) ;
ANSI Syntax
เรยบเรยงโดย อ.เรวด พพฒนสงเนน
ALTER TABLE (ตอ)
ตวอยาง (แกไขคอลมน) ตอ
แกไขคอลมนชอ Std_email ในตาราง Students โดย แกไขขนาดเขตขอมลจาก Varchar(50) เปน Vrachar(60)
*** MS SQL Server ใช ALTER COLUMN แทน Modify
ALTER TABLE StudentsALTER COLUMN Std_email Varchar(60) ;
MS SQL Server Syntax
เรยบเรยงโดย อ.เรวด พพฒนสงเนน
ALTER TABLE (ตอ)
ตวอยาง (ลบคอลมน)
ลบคอลมนชอ Std_email ออกจากตาราง Students
ALTER TABLE StudentsDROP Std_email ;
ANSI Syntax
ALTER TABLE StudentsDROP COLUMN Std_emai ;
MS SQL Server Syntax
เรยบเรยงโดย อ.เรวด พพฒนสงเนน
ALTER TABLE (ตอ)
การเพม Constraint ใหกบตารางในกรณทตอนสรางตารางขอมลดวยค าสง CREATE TABLE
อาจจะไมไดก าหนด Constraint บางอยางลงไป สามารถมาก าหนด Constraint เพมใหกบตารางได ดวยค าสง ALTER TABLE
หรอในกรณทตองการยกเลก Constraint บางอยางกสามารถแกไขไดดวยค าสง ALTER TABLE เชนกน
เรยบเรยงโดย อ.เรวด พพฒนสงเนน
ALTER TABLE (ตอ)
ตวอยาง (เพม Primary key Constraint)
ในกรณทตอนสรางตารางไมไดก าหนดคยหลกใหกบตารางสามารถก าหนดทหลงไดดงน
วธท 1 แกไขดวยค าสง Alter table และ Add Primary key เลย โดยระบบจะสราง Constraint name ใหอตโนมต
ALTER TABLE Students
ADD Primary Key(Std_id) ;
เรยบเรยงโดย อ.เรวด พพฒนสงเนน
ALTER TABLE (ตอ)
วธท 2 ก าหนด Constraint name เอง
ALTER TABLE Students
ADD Constraint PK_Student Primary Key(Std_id) ;
เรยบเรยงโดย อ.เรวด พพฒนสงเนน
ALTER TABLE (ตอ)
ตวอยาง (เพม Foreign Key Constraint)
ในกรณทตอนสรางตารางไมไดก าหนดคยนอกใหกบตารางสามารถก าหนดทหลงไดดงน
ALTER TABLE Students
ADD Constraint FK_Student_Faculty Foreign Key(Fac_id) References Faculty(Fac_id) ;
เรยบเรยงโดย อ.เรวด พพฒนสงเนน
ALTER TABLE (ตอ)
ตวอยาง (ลบ Constraint)
ในกรณทตองการลบ Constraint ออกจากตาราง สามารถก าหนดไดดวยค าสง Alter Table ดงน
- ตองการลบ Foreign key ทใชเชอมโยงระหวางตาราง Students และ Faculty ออก โดย Foreign key ก าหนดภายใต Constraint ชอ FK_Student_Faculty ท าไดดงน
ALTER TABLE Students
DROP FK_Student_Faculty ;
เรยบเรยงโดย อ.เรวด พพฒนสงเนน
CREATE INDEX ค าสง CREATE INDEX ใชส าหรบสรางอนเดกซใหกบ
ตารางขอมล
การก าหนดอนเดกซ คอ การก าหนดหนาทใหคอลมนใด ๆ ในตาราง ชวยในการคนหาขอมลไดรวดเรวและมประสทธภาพขน
ผใชจะมองไมเหนอนเดกซ แตอนเดกซจะชวยใหคนหาหรอเขาถงขอมลไดเรวขน
เรยบเรยงโดย อ.เรวด พพฒนสงเนน
CREATE INDEX (ตอ)รปแบบค าสง
CREATE INDEX <index_name>
ON <table_name>(<column_name>);
ตวอยาง สรางอนเดกซชอ stdName_index บนตาราง Students โดยใชคอลมน Std_Fname เปนดชน
CREATE INDEX stdName_index
ON Students(Std_Fname) ;
เรยบเรยงโดย อ.เรวด พพฒนสงเนน
DROP INDEXค าสง DROP INDEX ใชส าหรบลบอนเดกซออกจากตารางขอมล
รปแบบค าสง
DROP INDEX <index_name> ;
ตวอยาง ลบอนเดกซชอ stdName_index
DROP INDEX stdName_index ;
เรยบเรยงโดย อ.เรวด พพฒนสงเนน
DATA MANIPULATION LANGUAGE
DML
เรยบเรยงโดย อ.เรวด พพฒนสงเนน
INSERT INTOค าสง INSERT INTO ใชส าหรบเพมรายการขอมลใหมเขาในตารางขอมล
รปแบบค าสง
แบบท 1 เพมขอมลโดยไมระบชอแอททรบวต (ตองเพมขอมลทกแอททรบวต โดยตองเรยงล าดบแอททรบวตใหถกล าดบ)
INSERT INTO <table_name>
VALUES(value1 , value2 , value3 ,….) ;
เรยบเรยงโดย อ.เรวด พพฒนสงเนน
INSERT INTO (ตอ)รปแบบค าสง
แบบท 2 เพมขอมลโดยระบชอแอททรบวต (สามารถเพมขอมลบางแอททรบวตได โดยเพมตามแอททรบวตทระบในค าสง)
INSERT INTO <table_name> (column1,column2 ,column3 ,…)
VALUES(value1 , value2 , value3 ,….) ;
เรยบเรยงโดย อ.เรวด พพฒนสงเนน
INSERT INTO (ตอ)ตวอยาง เพมขอมลใหมเขาไปในตาราง Students ดงน
แบบท 1 ไมระบชอแอททรบวตINSERT INTO Students
VALUES(‘1234567801’ , ‘Bob’, ‘Norbert’ , ‘USA’ , ‘IT’ , 3 , ‘Sc’);
แบบท 2 ระบชอแอททรบวตINSERT INTO Students(std_id ,std_fname, std_lname , std_gpa)
VALUES(‘1234567821’ , ‘Wiliam’, ‘Pilgrim’ , 2.5);
std_id std_fname std_lname std_address std_major std_gpa fac_id
1234567801 Bob Norbert USA IT 3Sc
1234567821 Wiliam Pilgrim 2.5
เรยบเรยงโดย อ.เรวด พพฒนสงเนน
INSERT INTO (ตอ)ค าสง INSERT INTO หนงชดสามารถเพมขอมลไดทละ 1
รายการ
ส าหรบการเพมขอมลชนดตวอกษรจะอยภายใตเครองหมาย “” (double quote) หรอ ‘’ (single quote)
สวนขอมลทเปนตวเลข ไมตองใส “” หรอ ‘’
การเพมขอมลโดยไมระบชอแอททรบวต จะตองก าหนดล าดบของขอมลใหตรงกบโครงสรางของตาราง เพราะอาจมผลตอชนดขอมลของแตละแอททรบวต
เรยบเรยงโดย อ.เรวด พพฒนสงเนน
UPDATEค าสง UPDATE ใชส าหรบแกไขรายการขอมลทมอยแลวในตารางขอมลใหมคาเปนคาใหม
รปแบบค าสงUPDATE <table_name>
SET column_name1 = value , column_name2 = value, …
[WHERE เงอนไขในกรณตองการแกไขบางแถว]
เรยบเรยงโดย อ.เรวด พพฒนสงเนน
UPDATE (ตอ)ตวอยาง แกไขรายการขอมลตอไปน
UPDATE Students
SET std_fname = ‘Tomas’ , std_major = ‘FIN’ , fac_id=‘Msc’
WHERE std_id = ‘1234567821’
std_id std_fname std_lname std_address std_major std_gpa fac_id
1234567801 Bob Norbert USA IT 3Sc
1234567821 Wiliam Pilgrim AUS CS 2.5Sc
1234567822 Luke Brazzi USA PHY 3.5Sc
std_id std_fname std_lname std_address std_major std_gpa fac_id
1234567801 Bob Norbert USA IT 3Sc
1234567821 Tomas Pilgrim AUS FIN 2.5MSc
1234567822 Luke Brazzi USA PHY 3.5Sc
ผลลพธ
เรยบเรยงโดย อ.เรวด พพฒนสงเนน
UPDATE (ตอ)ตวอยาง แกไขขอมลหมเรยนทเปดสอนในป 2010 เทอม WINTER ใหเปน
เทอม SPRINGUPDATE Offering
SET OffTerm = ‘SPRING’
WHERE OffYear = 2010 AND OffTerm = ‘WINTER’ ;offering
offerno courseno offterm offyear offroom offtime ins_id offday
1111 IS010 SUMMER 2010 532 10:30:00 AM 87654 MW
1234 IS010 FALL 2009 532 10:30:00 AM 65432 MW
2222 IS320 SUMMER 2009 931 1:00:00 PM 87654 TTH
3333 IS330 SPRING 2010 522 8:30:00 AM 65432 MW
4321 IS330 FALL 2009 522 10:00:00 AM 65432 TTH
4444 IS330 WINTER 2010 532 10:00:00 AM 54321 TTH
5555 EC220 WINTER 2009 523 8:30:00 AM 98765 MW
5678 FIN01 WINTER 2010 532 10:30:00 AM 76543 MW
5679 FIN01 SPRING 2010 931 3:30:00 PM 45678 TTH
6666 IS233 WINTER 2010 1601 10:30:00 AM 65432 TTH
7777 ED330 SPRING 2010 539 1:00:00 PM 98765 MW
8888 IS010 SUMMER 2010 333 1:00:00 PM 45678 MW
9876 IS320 SPRING 2010 324 1:00:00 PM 45678 TTH
offering
offerno courseno offterm offyear offroom offtime ins_id offday
1111 IS010 SUMMER 2010 532 10:30:00 AM 87654 MW
1234 IS010 FALL 2009 532 10:30:00 AM 65432 MW
2222 IS320 SUMMER 2009 931 1:00:00 PM 87654 TTH
3333 IS330 SPRING 2010 522 8:30:00 AM 65432 MW
4321 IS330 FALL 2009 522 10:00:00 AM 65432 TTH
4444 IS330 SPRING 2010 532 10:00:00 AM 54321 TTH
5555 EC220 WINTER 2009 523 8:30:00 AM 98765 MW
5678 FIN01 SPRING 2010 532 10:30:00 AM 76543 MW
5679 FIN01 SPRING 2010 931 3:30:00 PM 45678 TTH
6666 IS233 SPRING 2010 1601 10:30:00 AM 65432 TTH
7777 ED330 SPRING 2010 539 1:00:00 PM 98765 MW
8888 IS010 SUMMER 2010 333 1:00:00 PM 45678 MW
9876 IS320 SPRING 2010 324 1:00:00 PM 45678 TTH
เรยบเรยงโดย อ.เรวด พพฒนสงเนน
UPDATE (ตอ)ตวอยาง ปรบเงนเดอนใหอาจารยทมต าแหนงศาสตราจารย(PROF) เพมอก
คนละ 10%UPDATE Instructor
SET ins_salary = ins_salary + (ins_salary*0.10)
WHERE ins_rank = ‘PROF’;
instructor
ins_fname ins_lname fac_id ins_rank ins_salary ins_hiredate
Julia Mills Ed ASSC 37000 1/4/1997
Victoria Emmanuel Msc PROF 40000 10/3/1996
Leonard Fibon Sc ASSC 35000 1/4/1993
Nicky Macon En PROF 45000 1/4/1995
Cristopher Colan Sc ASST 30000 1/4/1994
Leonard Vince Msc ASST 25000 1/4/1995
instructor
ins_fname ins_lname fac_id ins_rank ins_salary ins_hiredate
Julia Mills Ed ASSC 37000 1/4/1997
Victoria Emmanuel Msc PROF 44000 10/3/1996
Leonard Fibon Sc ASSC 35000 1/4/1993
Nicky Macon En PROF 49500 1/4/1995
Cristopher Colan Sc ASST 30000 1/4/1994
Leonard Vince Msc ASST 25000 1/4/1995
เรยบเรยงโดย อ.เรวด พพฒนสงเนน
UPDATE (ตอ)ขอควรระวง ส าหรบการใชค าสง UPDATE
หากตองการแกไขขอมลบางรายการในตารางขอมลตองระบเงอนไขของรายการทตองการแกไขในประโยค WHERE
เพราะหากไมระบเงอนไขในประโยค WHERE จะหมายถงแกไขขอมลทกรายการตามทระบในประโยค SET
เชน UPDATE Students
SET std_address = ‘USA’ , std_major = ‘IT’ ;
*** จะท าใหทกรายการในแอททรบวต std_address มคาเปน USA และ std_major มคาเปน IT
เรยบเรยงโดย อ.เรวด พพฒนสงเนน
UPDATE (ตอ)ขอควรระวงUPDATE Students
SET std_address = ‘USA’ , std_major = ‘IT’ ;
student
std_id std_fname std_lnamestd_address
std_major
std_gpa
fac_id
1234567801 Bob Norbert USA IT 3 Sc
1234567821 Wiliam Pilgrim AUS CS 2.5 Sc
1234567822 Luke Brazzi USA PHY 3.5 Sc
1234567840 Homer Wells AUS CS 2.5 Sc
2345678910 Candy Kendall NZ FIN 2.75 Msc
2345678920 Roberto Morales AUS FIN 3.25 Msc
2345789015 Tess Dodge CAN ECON 3.75 Msc
4567890122 Joe Estrada CAN Art 3.25 En
4567890133 Cristopher Colan USA MUS 2.75 En
5678901235 Wally Kendall NZ GSc 3.5 Ed
5678901240 Mariah Dodge CAN Gsc 2.5 Ed
student
std_id std_fname std_lnamestd_address
std_major
std_gpa
fac_id
1234567801 Bob Norbert USA IT 3 Sc
1234567821 Wiliam Pilgrim USA IT 2.5 Sc
1234567822 Luke Brazzi USA IT 3.5 Sc
1234567840 Homer Wells USA IT 2.5 Sc
2345678910 Candy Kendall USA IT 2.75 Msc
2345678920 Roberto Morales USA IT 3.25 Msc
2345789015 Tess Dodge USA IT 3.75 Msc
4567890122 Joe Estrada USA IT 3.25 En
4567890133 Cristopher Colan USA IT 2.75 En
5678901235 Wally Kendall USA IT 3.5 Ed
5678901240 Mariah Dodge USA IT 2.5 Ed
เรยบเรยงโดย อ.เรวด พพฒนสงเนน
DELETE FROMค าสง DELETE FROM ใชส าหรบลบรายการขอมลออกจาก
ตารางขอมล
รปแบบค าสงDELETE FROM <table_name>
[WHERE เงอนไขในกรณตองการลบบางแถว]
ขอควรระวง
- หากไมระบเงอนไขในการเลอกแถวขอมลทจะลบในประโยค WHERE จะหมายถง ลบแถวขอมลทกรายการ
เรยบเรยงโดย อ.เรวด พพฒนสงเนน
DELETE FROM (ตอ)ตวอยาง ลบขอมลการลงทะเบยนในหมเรยนรหส 1234DELETE FROM Enrollment
WHERE offerNo = 1234 ;
ตวอยาง ลบขอมลหมเรยนทเปดสอนในป 2010 เทอม SPRING
DELETE FROM Offering
WHERE offYear = 2010 AND offTerm = ‘SPRING’ ;
เรยบเรยงโดย อ.เรวด พพฒนสงเนน
QUERY Query หมายถง การสบคนขอมลในตารางขอมล ตามเงอนไขท
ก าหนด ดวยค าสง SELECT
รปแบบค าสง
SELECT <ชอคอลมนทตองการใหแสดง, … , … หรอ * เพอแสดงทกคอลมน >
FROM <ชอตารางทตองการสบคนขอมล, … , …>
[WHERE เงอนไขในการแสดงรายการขอมล]
[GROUP BY ชอคอลมนทใชในการจดกลมขอมล , … , …]
[HAVING เงอนไขในการจดกลมขอมลเพอแสดงผล]
[ORDER BY ชอคอลมนทใชในการเรยงล าดบขอมล (ASC || DESC)]
เรยบเรยงโดย อ.เรวด พพฒนสงเนน
QUERY (สบคนขอมลทกแถว-ทกคอลมน) ตวอยาง 1 จงแสดงขอมลนกศกษาจากตาราง Students ทก
รายการSELECT *
FROM Students ;
--จะไดผลลพธคอขอมลในตาราง Students ทกแถว ทกคอลมน--std_id std_fname std_lname std_address std_major std_gpa fac_id
1234567801 Bob Norbert USA IT 3 Sc
1234567821 Wiliam Pilgrim AUS CS 2.5 Sc
1234567822 Luke Brazzi USA PHY 3.5 Sc
1234567840 Homer Wells AUS CS 2.5 Sc
2345678910 Candy Kendall NZ FIN 2.75 Msc
2345678920 Roberto Morales AUS FIN 3.25 Msc
2345789015 Tess Dodge CAN ECON 3.75 Msc
4567890122 Joe Estrada CAN Art 3.25 En
4567890133 Cristopher Colan USA MUS 2.75 En
5678901235 Wally Kendall NZ GSc 3.5 Ed
5678901240 Mariah Dodge CAN Gsc 2.5 Ed
เครองหมาย * หมายถง แสดงทกคอลมน
หลงประโยค FROM ไมม WHERE หมายถงแสดงทกแถว
เรยบเรยงโดย อ.เรวด พพฒนสงเนน
QUERY (แสดงขอมลทกแถว-บางคอลมน) ตวอยาง 2 จงแสดงขอมลรหสนกศกษา , ชอ , นามสกล และ
สาขาวชา ของทกคนSELECT std_id , std_fname , std_lname , std_major
FROM Students ;
ผลลพธstd_id std_fname std_lname std_major
1234567801 Bob Norbert IT
1234567821 Wiliam Pilgrim CS
1234567822 Luke Brazzi PHY
1234567840 Homer Wells CS
2345678910 Candy Kendall FIN
2345678920 Roberto Morales FIN
2345789015 Tess Dodge ECON
4567890122 Joe Estrada Art
4567890133 Cristopher Colan MUS
5678901235 Wally Kendall GSc
5678901240 Mariah Dodge Gsc
เรยบเรยงโดย อ.เรวด พพฒนสงเนน
QUERY (แสดงขอมลบางแถว-ทกคอลมน) ตวอยาง 3 จงแสดงขอมลนกศกษา ทสงกดคณะรหส Sc
SELECT *
FROM Students
WHERE Fac_id = ‘Sc’ ;
ผลลพธstd_id std_fname std_lname std_address std_major std_gpa fac_id
1234567801 Bob Norbert USA IT 3Sc
1234567821 Wiliam Pilgrim AUS CS 2.5Sc
1234567822 Luke Brazzi USA PHY 3.5Sc
1234567840 Homer Wells AUS CS 2.5Sc
เรยบเรยงโดย อ.เรวด พพฒนสงเนน
QUERY (แสดงขอมลบางแถว-บางคอลมน) ตวอยาง 4 จงแสดงขอมลรหสนกศกษา , ชอ , นามสกล และเกรด
เฉลย เฉพาะนกศกษาทมเกรดเฉลยมากกวาหรอเทากบ 3.0SELECT std_id , std_fname , std_lname
FROM Students
WHERE std_gpa >= 3.0 ;
ผลลพธstd_id std_fname std_lname std_gpa
1234567801 Bob Norbert 3
1234567822 Luke Brazzi 3.5
2345678920 Roberto Morales 3.25
2345789015 Tess Dodge 3.75
4567890122 Joe Estrada 3.25
5678901235 Wally Kendall 3.5
เรยบเรยงโดย อ.เรวด พพฒนสงเนน
QUERY (SELECT DISTINCT) ค าสง SELECT DISTINCT ใชส าหรบขจดรายการขอมลทซ ากน
โดยจะแสดงแถวขอมลทซ ากนเพยงรายการเดยว
ตวอยาง 5 จงแสดงวามขอมลต าแหนงวชาใดบางทอาจารยไดรบ
SELECT ins_rankFROM Instructor;
ins_rank
ASSC
PROF
ASSC
PROF
ASST
ASST
SELECT DISTINCT ins_rankFROM Instructor;
ins_rank
ASSC
PROF
ASST
เรยบเรยงโดย อ.เรวด พพฒนสงเนน
QUERY (ประโยค WHERE) ประโยค WHERE ใชในการกรองแถวขอมลในการแสดงผลทสอดคลองกบ
เงอนไขทก าหนด
รปแบบSELECT <column_name ,… | *>
FROM <table_name ,..>
WHERE column_name operator value
โดย Column_name คอ แอททรบวตทใชเปนเงอนไข
Operator คอ ตวด าเนนการตาง ๆ เชน = , <> , > , < , >= , <= , LIKE , BETWEEN , IN
Value คอ คาทน ามาใชเปรยบเทยบ
เรยบเรยงโดย อ.เรวด พพฒนสงเนน
QUERY (ประโยค WHERE) ตอ ตวด าเนนการเปรยบเทยบ ไดแก= , <> (บางทใช != ) , > , >= , < , <= ,
ตวด าเนนการทางตรรกะ ไดแกAND , OR , NOT
ล าดบการประมวลผลจากกอน ไป หลง ไดแก NOT --> AND --> OR
เรยบเรยงโดย อ.เรวด พพฒนสงเนน
QUERY (Operator AND) ตวด าเนนการ AND ทใชเชอมเงอนไข ตองใหผลลพธทเปนจรงทกเงอนไข
จงจะแสดงรายการขอมลนน
ตวอยาง 5 จงแสดงขอมลนกศกษาทอยประเทศแคนาดา(CAN) และ ไดเกรดเฉลยมากกวา 3.00
SELECT *
FROM Students
WHERE std_address = ‘CAN’ AND std_gpa > 3.0 ;std_id std_fname std_lname std_address std_major std_gpa fac_id
2345789015 Tess Dodge CAN ECON 3.75 Msc
4567890122 Joe Estrada CAN Art 3.25 En
เรยบเรยงโดย อ.เรวด พพฒนสงเนน
QUERY (Operator AND) ตวอยาง 6 จงแสดงขอมลรหสนกศกษา ชอ นามสกล และเกรดเฉลย ของ
นกศกษาทไดเกรดตงแต 3.0 ถง 3.5
SELECT std_id , std_fname , std_lname , std_gpa
FROM Students
WHERE std_gpa >= 3.0 AND std_gpa <= 3.5 ;
** ตวด าเนนการ AND ทใชเชอมเงอนไข ตองใหผลลพธทเปนจรงทกเงอนไขจงจะแสดงรายการขอมลนน**
std_id std_fname std_lname std_gpa
1234567801 Bob Norbert 3.0
1234567822 Luke Brazzi 3.5
2345678920 Roberto Morales 3.25
2345789015 Tess Dodge 3.75
4567890122 Joe Estrada 3.25
5678901235 Wally Kendall 3.5
เรยบเรยงโดย อ.เรวด พพฒนสงเนน
QUERY (Operator OR) ตวด าเนนการ OR ทใชเชอมเงอนไข จะแสดงรายการขอมลทสอดคลองเมอ
เงอนไขใดเงอนไขหนงเปนจรง หรอทกเงอนไขเปนจรง ถาเงอนไขเปนเทจทกกรณจะไมแสดงขอมล
ตวอยาง 7 จงแสดงขอมลนกศกษา ทสงกดคณะรหส Sc หรอ นกศกษาทอยประเทศ USA
SELECT *
FROM Students
WHERE fac_id = ‘Sc’ OR std_address = ‘USA’ ;std_id std_fname std_lname std_address std_major std_gpa fac_id
1234567801 Bob Norbert USA IT 3 Sc
1234567821 Wiliam Pilgrim AUS CS 2.5 Sc
1234567822 Luke Brazzi USA PHY 3.5 Sc
1234567840 Homer Wells AUS CS 2.5 Sc
4567890133 Cristopher Colan USA MUS 2.75 En
เรยบเรยงโดย อ.เรวด พพฒนสงเนน
QUERY (Operator OR) ตวอยาง 8 จงแสดงขอมลนกศกษา ทสงกดคณะรหส Sc หรอ EdSELECT *
FROM Students
WHERE fac_id = ‘Sc’ OR fac_id = ‘Ed’ ;
std_id std_fname std_lname std_address std_major std_gpa fac_id
1234567801 Bob Norbert USA IT 3 Sc
1234567821 Wiliam Pilgrim AUS CS 2.5 Sc
1234567822 Luke Brazzi USA PHY 3.5 Sc
1234567840 Homer Wells AUS CS 2.5 Sc
5678901235 Wally Kendall NZ GSc 3.5 Ed
5678901240 Mariah Dodge CAN Gsc 2.5 Ed
เรยบเรยงโดย อ.เรวด พพฒนสงเนน
QUERY (Operator NOT) ตวด าเนนการ NOT ใชกลบคาใหเปนคาตรงขาม เชน จรงกลบคาเปน เทจ
หรอ เทจกลบคาเปนจรง
ตวอยาง 9 จงแสดงขอมลนกศกษา ทไมสงกดคณะรหส ScSELECT *
FROM Students
WHERE NOT(fac_id = ‘Sc’) ;
std_id std_fname std_lname std_address std_major std_gpa fac_id
2345678910 Candy Kendall NZ FIN 2.75 Msc
2345678920 Roberto Morales AUS FIN 3.25 Msc
2345789015 Tess Dodge CAN ECON 3.75 Msc
4567890122 Joe Estrada CAN Art 3.25 En
4567890133 Cristopher Colan USA MUS 2.75 En
5678901235 Wally Kendall NZ GSc 3.5 Ed
5678901240 Mariah Dodge CAN Gsc 2.5 Ed
เรยบเรยงโดย อ.เรวด พพฒนสงเนน
QUERY (Operator NOT) ตวด าเนนการ NOT ใชกลบคาใหเปนคาตรงขาม เชน จรงกลบคาเปน เทจ
หรอ เทจกลบคาเปนจรง
ตวอยาง 9 จงแสดงขอมลนกศกษา ทไมสงกดคณะรหส ScSELECT *
FROM Students
WHERE NOT(fac_id = ‘Sc’) ;
std_id std_fname std_lname std_address std_major std_gpa fac_id
2345678910 Candy Kendall NZ FIN 2.75 Msc
2345678920 Roberto Morales AUS FIN 3.25 Msc
2345789015 Tess Dodge CAN ECON 3.75 Msc
4567890122 Joe Estrada CAN Art 3.25 En
4567890133 Cristopher Colan USA MUS 2.75 En
5678901235 Wally Kendall NZ GSc 3.5 Ed
5678901240 Mariah Dodge CAN Gsc 2.5 Ed
เรยบเรยงโดย อ.เรวด พพฒนสงเนน
QUERY (Operator BETWEEN …AND…) ตวด าเนนการ BETWEEN … AND … ใชส าหรบกรองขอมลทชวงขอมล
ระหวางคาสองคา เชน ราคาตงแต 100 จนถง 500 , วนทสงซอตงแต 01/01/2010 ถง 30/06/2010
รปแบบค าสงSELECT <column_name ,… | *>
FROM <table_name ,..>
WHERE column_name BETWEEN ชวงขอมลเรมตน AND ชวงขอมลสดทาย ;
*** ตวด าเนนการ BETWEEN … AND … ใชเปรยบเทยบขอมลทเปน ตวเลข , ขอความ และ วน/เวลา ***
เรยบเรยงโดย อ.เรวด พพฒนสงเนน
QUERY (Operator BETWEEN …AND…) ตวอยาง 10 จงแสดงขอมลนกศกษา ทไดเกรดตงแต 3.0 ถง 3.5SELECT *
FROM Students
WHERE std_gpa BETWEEN 3.0 AND 3.5;std_id std_fname std_lname std_gpa
1234567801 Bob Norbert 3.0
1234567822 Luke Brazzi 3.5
2345678920 Roberto Morales 3.25
2345789015 Tess Dodge 3.75
4567890122 Joe Estrada 3.25
5678901235 Wally Kendall 3.5
*** ขอสงเกต ค าสง BETWEEN … AND … เหมอนกบ การใชตวด าเนนการ AND ทเปรยบเทยบคาในคอลมนเดยวกน แบบชวง เชน WHERE std_gpa >= 3.0 AND std_gpa <= 3.5
เรยบเรยงโดย อ.เรวด พพฒนสงเนน
QUERY (Operator IN ) ตวด าเนนการ IN ใชส าหรบกรองขอมลแบบหลายคาตามรายการทระบใน
ตวด าเนนการ IN
รปแบบค าสงSELECT <column_name ,… | *>
FROM <table_name ,..>
WHERE column_name IN (value1 , value2) ;
เรยบเรยงโดย อ.เรวด พพฒนสงเนน
QUERY (Operator IN) ตวอยาง 11 จงแสดงขอมลนกศกษา ทอยในประเทศ อเมรกา(USA) หรอ
แคนาดา (CAN)SELECT *
FROM Students
WHERE std_address IN (‘USA’ , ‘CAN’) ;
*** ขอสงเกต ค าสง IN เหมอนกบ การใชตวด าเนนการ OR ทเปรยบเทยบคาในคอลมนเดยวกน เชน WHERE std_address = ‘USA’ OR std_address = ‘CAN’
std_id std_fname std_lname std_address std_major std_gpa fac_id
1234567801 Bob Norbert USA IT 3 Sc
1234567822 Luke Brazzi USA PHY 3.5 Sc
2345789015 Tess Dodge CAN ECON 3.75 Msc
4567890122 Joe Estrada CAN Art 3.25 En
4567890133 Cristopher Colan USA MUS 2.75 En
5678901240 Mariah Dodge CAN Gsc 2.5 Ed
เรยบเรยงโดย อ.เรวด พพฒนสงเนน
QUERY (Operator LIKE ) ตวด าเนนการ LIKE ใชส าหรบกรองขอมลทมขอความตามรปแบบทก าหนด
รปแบบค าสงSELECT <column_name ,… | *>
FROM <table_name ,..>
WHERE column_name LIKE รปแบบทคนหา ;
โดย รปแบบทคนหาจะมสญลกษณทเกยวของ ดงนWildcard Description% แทนตวอกษรใด ๆ ตงแต ศนย ตวอกษรขนไป_ แทนตวอกษรใด ๆ หนงตวอกษร[charlist] แทนตวอกษรใดทอยในรายการทก าหนด[^charlist]or[!charlist]
แทนตวอกษรใด ๆ ทไมอยในรายการทก าหนด
เรยบเรยงโดย อ.เรวด พพฒนสงเนน
QUERY (Operator LIKE ) ตวอยาง12 จงแสดงขอมลนกศกษาทมชอขนตนดวย ตวอกษร C
SELECT *
FROM Students
WHERE std_fname LIKE ‘C%’;std_id std_fname std_lname std_address std_major std_gpa fac_id
2345678910 Candy Kendall NZ FIN 2.75 Msc
4567890133 Cristopher Colan USA MUS 2.75 En
•ตวอยาง13 จงแสดงขอมลนกศกษาทมชอยาว 5 ตวอกษรSELECT *FROM StudentsWHERE std_fname LIKE ‘_ _ _ _ _’;
std_id std_fname std_lname std_address std_major std_gpa fac_id
1234567840 Homer Wells AUS CS 2.5 Sc
2345678910 Candy Kendall NZ FIN 2.75 Msc
5678901235 Wally Kendall NZ GSc 3.5 Ed
เรยบเรยงโดย อ.เรวด พพฒนสงเนน
QUERY (Operator LIKE ) ตวอยาง14 จงแสดงขอมลนกศกษาทภายในชอมอกษร er อยภายในชอ
SELECT *
FROM Students
WHERE std_fname LIKE ‘%er%’;
•ตวอยาง15 จงแสดงขอมลชอ , นามสกลของนกศกษาทมชอยาว 5 ตวอกษร โดยขนตนดวยอกษรใด ๆ กไดแตลงทายชอดวยอกษร y หรอนกศกษาทมชอลงทายดวย er
SELECT std_fname , std_lnameFROM StudentsWHERE std_fname LIKE ‘_ _ _ _ y’ OR std_fname LIKE ‘%er’;
std_id std_fname std_lname std_address std_major std_gpa fac_id
1234567840 Homer Wells AUS CS 2.5 Sc
2345678920 Roberto Morales AUS FIN 3.25 Msc
4567890133 Cristopher Colan USA MUS 2.75 En
std_fname std_lname
Homer Wells
Candy Kendall
Cristopher Colan
Wally Kendall
เรยบเรยงโดย อ.เรวด พพฒนสงเนน
QUERY (Operator LIKE ) ตวอยาง16 จงแสดงขอมลชอ , นามสกลของนกศกษาทภายในนามสกลม
รปแบบ M_r_les
SELECT *
FROM Students
WHERE std_lname LIKE ‘M_r_les’;
•ตวอยาง17 จงแสดงขอมลชอ , นามสกลของนกศกษาทมชอขนตนดวยตวอกษรB หรอ C หรอ H
SELECT std_fname , std_lnameFROM StudentsWHERE std_fname LIKE ‘[BCH]%’ ;
std_fname std_lname
Roberto Morales
std_fname std_lname
Bob Norbert
Homer Wells
Candy Kendall
Cristopher Colan
เรยบเรยงโดย อ.เรวด พพฒนสงเนน
QUERY (Operator TOP ) ตวด าเนนการ TOP ใชในการก าหนดจ านวนรายการทตองการแสดง
ตวอยาง18 จงแสดงขอมลนกศกษา 3 รายการแรก
SELECT TOP 3 *
FROM Students ;
std_id std_fname std_lname std_address std_major std_gpa fac_id
1234567801 Bob Norbert USA IT 3Sc
1234567821 Wiliam Pilgrim AUS CS 2.5Sc
1234567822 Luke Brazzi USA PHY 3.5Sc
เรยบเรยงโดย อ.เรวด พพฒนสงเนน
QUERY (Alias) ในการแสดงขอมลทไดจากสบคนสามารถก าหนดชอนามแฝงใหกบคอลมน
หรอ ตาราง ดวยค าสง AS
รปแบบ ก าหนดนามแฝงใหกบแอททรบวต
SELECT <column_name|function> AS Alias
FROM table_name AS Alias ;
ตวอยาง19 ก าหนดนามแฝงใหกบแอททรบวต ชอ และ นามสกล
SELECT std_fname AS ชอ , std_lname AS นามสกล
FROM Students
WHERE std_address = ‘USA’ ;ชอ นามสกล
Bob Norbert
Luke Brazzi
Cristopher Colan
เรยบเรยงโดย อ.เรวด พพฒนสงเนน
QUERY (Alias) ตวอยาง20 ก าหนดนามแฝงใหกบตาราง Students และ Enrollment ใน
การแสดงชอนามสกลของนกศกษาทลงทะเบยนเรยนในหมเรยนรหส 1234
SELECT std_fname AS ชอ , std_lname AS นามสกล
FROM Students AS Std INNER JOIN Enrollment AS En
ON Std.std_id = En.std_id
WHERE offerNo= 1234;ชอ นามสกล
Bob Norbert
Wiliam Pilgrim
Luke Brazzi
Homer Wells
Candy Kendall
Roberto Morales
เรยบเรยงโดย อ.เรวด พพฒนสงเนน
QUERY (ORDER BY) ค าสง ORDER BY ใชส าหรบจดเรยงผลลพธจากการสบคนขอมล
รปแบบ
SELECT <column_name|function>
FROM table_name
[WHERE] condition
ORDER BY column_name [ASC | DESC] ;
โดย
ASC(Ascending) เปนการจดเรยงขอมลจากนอยไปหามาก
DESC (Descending) เปนการจดเรยงขอมลจากมากไปหานอย
*** หากมค าสง ORDER BY แตไมก าหนดชนดการจดเรยงหลง column name จะถอวาเปนการเรยงแบบ ASC
เรยบเรยงโดย อ.เรวด พพฒนสงเนน
QUERY (ORDER BY) ตวอยาง21 จงแสดงขอมลนกศกษาจดเรยงขอมลจากเกรดเฉลยจากมากไปหา
นอย
SELECT *
FROM Students
ORDER BY std_gpa DESC;std_id std_fname std_lname std_address std_major std_gpa fac_id
2345789015 Tess Dodge CAN ECON 3.75 Msc
5678901235 Wally Kendall NZ GSc 3.5 Ed
1234567822 Luke Brazzi USA PHY 3.5 Sc
4567890122 Joe Estrada CAN Art 3.25 En
2345678920 Roberto Morales AUS FIN 3.25 Msc
1234567801 Bob Norbert USA IT 3 Sc
4567890133 Cristopher Colan USA MUS 2.75 En
2345678910 Candy Kendall NZ FIN 2.75 Msc
5678901240 Mariah Dodge CAN Gsc 2.5 Ed
1234567840 Homer Wells AUS CS 2.5 Sc
1234567821 Wiliam Pilgrim AUS CS 2.5 Sc
เรยบเรยงโดย อ.เรวด พพฒนสงเนน
QUERY (ORDER BY)
ตวอยาง22 จงแสดงขอมลชอ , นามสกลของนกศกษาจดเรยงขอมลจากชอจาก A - Z
SELECT std_fname , std_lname
FROM Students
ORDER BY std_fname ASC;
std_fname std_lname
Bob Norbert
Candy Kendall
Cristopher Colan
Homer Wells
Joe Estrada
Luke Brazzi
Mariah Dodge
Roberto Morales
Tess Dodge
Wally Kendall
Wiliam Pilgrim
เรยบเรยงโดย อ.เรวด พพฒนสงเนน
QUERY (ORDER BY)
ตวอยาง23 จงแสดงขอมลการลงทะเบยนเรยนของนกศกษา จดเรยงตามรหสหมเรยน จากนอยไปหามาก และ เกรดจากมากไปหานอย
SELECT *
FROM Enrollment
ORDER BY OfferNo ASC , EnrGrade DESC;
offerno std_id enrgrade
1234 2345678910 3.8
1234 1234567821 3.5
1234 2345678920 3.4
1234 1234567801 3.3
1234 1234567822 3.2
1234 1234567840 3.1
4321 4567890133 3.5
4321 1234567801 3.5
4321 2345789015 3.4
4321 5678901240 3.2
4321 4567890122 3.1
4321 5678901235 3.1
5555 1234567801 3.2
5555 1234567821 2.7
5678 1234567840 3.4
5678 1234567822 3.3
5678 1234567801 3.2
5678 1234567821 2.8
5678 2345678910 2.6
5679 4567890133 3.8
5679 1234567821 3.7
5679 2345678920 3.3
5679 4567890122 3.1
5679 2345789015 2.9
5679 1234567801 2
6666 2345678910 3.6
6666 1234567821 3.1
7777 2345789015 3.7
7777 5678901235 3.4
7777 4567890122 3.4
9876 4567890122 4
9876 1234567801 3.5
9876 1234567840 3.4
9876 2345678920 3.3
9876 1234567821 3.2
9876 1234567822 3.2
9876 2345678910 2.6
เรยบเรยงโดย อ.เรวด พพฒนสงเนน
ฟงกชนของภาษา SQLภาษา SQL ตามมาตรฐาน ISO นยามฟงกชนการรวม(Aggregate function)
ไว 5 ฟงกชน ดงน
COUNT : จ านวนขอมลของคอลมนทระบ
MAX : คาขอมลทสงสดของคอลมนทก าหนด
MIN : คาขอมลทต าสดของคอลมนทก าหนด
SUM : คาผลรวมของคอลมนทก าหนด
AVG : คาเฉลยของคอลมนทก าหนด
เรยบเรยงโดย อ.เรวด พพฒนสงเนน
ฟงกชน COUNT ฟงกชน COUNT ใชในการแสดงจ านวนรายการขอมลทสอดคลองกบเงอนไข
รปแบบท 1
SELECT COUNT (Column_name)
FROM table_name ;
**COUNT(Column_name) จะแสดงจ านวนรายการขอมลในคอลมนทระบ ยกเวนขอมลทเปนคาวาง(Null value) จะไมถกนบรวมดวย
รปแบบท 2
SELECT COUNT (*)
FROM table_name ;
**COUNT(*) จะแสดงจ านวนรายการขอมลทงหมดทสอดคลองกบเงอนไข
เรยบเรยงโดย อ.เรวด พพฒนสงเนน
ฟงกชน COUNT ตวอยาง24 จงแสดงจ านวนนกศกษาทงหมด
SELECT COUNT(*) AS All_students
FROM Students ;
ตวอยาง25 จงแสดงจ านวนนกศกษาทสงกดคณะ Sc
SELECT COUNT(*) AS Science_students
FROM Students ;
All_Students
11
Science_Students
4
เรยบเรยงโดย อ.เรวด พพฒนสงเนน
ฟงกชน MAX ฟงกชน MAX ใชในการหาคาสงสดของคอลมนทก าหนด
รปแบบ
SELECT MAX(Column_name)
FROM table_name ;
ตวอยาง26 จงแสดงขอมลคาเงนเดอนทสงสดของอาจารย
SELECT MAX(Ins_salary) AS MAX_of_Salary
FROM Instructor ;MAX_of_Salary
45000
เรยบเรยงโดย อ.เรวด พพฒนสงเนน
ฟงกชน MIN ฟงกชน MIN ใชในการหาคาต าสดของคอลมนทก าหนด
รปแบบ
SELECT MIN(Column_name)
FROM table_name ;
ตวอยาง27 จงแสดงขอมลคาเงนเดอนทนอยทสดของอาจารย
SELECT MIN(Ins_salary) AS MIN_of_Salary
FROM Instructor ;MIN_of_Salary
25000
เรยบเรยงโดย อ.เรวด พพฒนสงเนน
ฟงกชน SUM ฟงกชน SUM ใชในการหาคาผลรวมของคอลมนทเปนตวเลข
รปแบบ
SELECT SUM(Column_name)
FROM table_name ;
ตวอยาง28 จงแสดงขอมลเงนเดอนรวมของอาจารยทกคน
SELECT SUM(Ins_salary) AS Sum_of_Salary
FROM Instructor ;Sum_of_Salary
212000
เรยบเรยงโดย อ.เรวด พพฒนสงเนน
ฟงกชน AVG ฟงกชน AVG ใชในการหาคาเฉลยของคอลมนทเปนตวเลข
รปแบบ
SELECT AVG (Column_name)
FROM table_name ;
ตวอยาง29 จงแสดงขอมลคาเฉลยเงนเดอนของอาจารยทกคน
SELECT AVG (Ins_salary) AS Average_of_Salary
FROM Instructor ;Average_of_Salary
35333.3333333333
เรยบเรยงโดย อ.เรวด พพฒนสงเนน
QUERY (GROUP BY) ค าสง GROUP BY ใชส าหรบจดกลมขอมลตามคอลมนทก าหนด
สวนใหญจะใชค าสง GROUP BY รวมกบการใชฟงกชนการรวม(aggregate function) เชน ตองการแสดงขอมลจากหลาย ๆ คอลมน และมคอลมนทใชฟงกชนการรวมอยภายในค าสง SELECT จะตองจดกลมขอมลตามคอลมนตาง ๆ ทงหมด ยกเวนคอลมนทใชฟงกชนการรวม
รปแบบ
SELECT column_1 , column_2 , aggregate_function(column_3)
FROM table_name
[WHERE] condition
GROUP BY column_1 , column_2;
เรยบเรยงโดย อ.เรวด พพฒนสงเนน
QUERY (GROUP BY) ตวอยาง30 จงแสดงรหสคณะและจ านวนนกศกษาทสงกดในแตละคณะ
จดเรยงขอมลตามจ านวนนกศกษาจากมากไปหานอย
SELECT fac_id , COUNT(*) AS Num_of_students
FROM Students
GROUP BY fac_id
ORDER BY COUNT(*) DESC;fac_id Count_Of_students
Sc 4
Msc 3
En 2
Ed 2
ในค าสง GROUP BY จะตองระบคอลมนปกตทกคอลมน ยกเวน คอลมนทมการใชฟงกชนการรวม
เรยบเรยงโดย อ.เรวด พพฒนสงเนน
QUERY (GROUP BY) ตวอยาง31 จงแสดงรหสหมเรยน , จ านวนนกศกษาทลงทะเบยนเรยนในแต
ละหมเรยน , เกรดทสงสดในแตละหมเรยน , เกรดทต าสดในแตละหมเรยน จดเรยงขอมลตามจ านวนนกศกษาทลงทะเบยนเรยนจากมากไปหานอย
SELECT offerNo , COUNT(std_id) AS Num_of_students , MAX(Enrgrade) AS Max_grade , MIN(Enrgrade) AS Min_grade
FROM Enrollment
GROUP BY offerNo
ORDER BY COUNT(std_id) DESC ;
offerno Num_of_student Max_grade Min_grade
9876 7 4 2.6
5679 6 3.8 2
4321 6 3.5 3.1
1234 6 3.8 3.1
5678 5 3.4 2.6
7777 3 3.7 3.4
6666 2 3.6 3.1
5555 2 3.2 2.7
เรยบเรยงโดย อ.เรวด พพฒนสงเนน
QUERY (GROUP BY) ตวอยาง32 จงแสดงขอมลปการศกษาและเทอม และจ านวนรายวชาทเปด
สอนในแตละปและเทอม
SELECT OffYear , OffTerm , COUNT(*) AS Num_of_Courses
FROM Offering
GROUP BY OffYear , OffTerm ;
offYear offTerm Num_of_Courses
2003 FALL 2
2003 SUMMER 1
2004 SPRING 4
2004 SUMMER 2
2004 WINTER 4
เรยบเรยงโดย อ.เรวด พพฒนสงเนน
QUERY (HAVING) ค าสง HAVING ใชรวมกบค าสง GROUP BY เพอจ ากดการแสดงผล
ส าหรบขอมลทจดกลมแลวตามเงอนไขทก าหนดไวในค าสง HAVING
รปแบบ
SELECT column_1 , column_2 , aggregate_function(column_3)
FROM table_name
[WHERE] condition
GROUP BY column_1 , column_2
HAVING aggregate_function(column_3) operator value;
***โดย
operator เชน = , <> , > , >= , < , <= , BETWEEN..AND…, IN เปนตน
value คอ คาทใชเปรยบเทยบ
เรยบเรยงโดย อ.เรวด พพฒนสงเนน
QUERY (HAVING) ตวอยาง33 จงแสดงขอมลปการศกษาและเทอม และจ านวนรายวชาทเปด
สอนในแตละปและเทอม (จากตวอยางท 32) แตแสดงเฉพาะเทอมและปทเปดสอนรายวชามากกวา 2 รายวชา
SELECT OffYear , OffTerm , COUNT(*) AS Num_of_Courses
FROM Offering
GROUP BY OffYear , OffTerm
HAVING COUNT(*) > 2 ;offYear offTerm Num_of_Courses
2004 SPRING 4
2004 WINTER 4
เรยบเรยงโดย อ.เรวด พพฒนสงเนน
QUERY (GROUP BY) ตวอยาง34 จงแสดงรหสหมเรยน , จ านวนนกศกษาทลงทะเบยนเรยนในแต
ละหมเรยนทไดเกรดตงแต 3.0 ขนไป แสดงเฉพาะหมเรยนทมจ านวนผไดเกรดตงแต 3.0 ขนไปจ านวน 5 คนขนไป
SELECT offerNo , COUNT(std_id) AS Num_of_students
FROM Enrollment
WHERE Enrgrade >= 3.0
GROUP BY offerNo
ORDER BY COUNT(std_id) >= 5 ;
offerno Num_of_Students
1234 6
4321 6
9876 6
เรยบเรยงโดย อ.เรวด พพฒนสงเนน
SubQuery หรอ Nested Query Subquery หรอ Nested Query คอการเขยนค าสง SELECT ซอนกน
โดยการน าผลลพธของค าสง SELECT หนงไปใชเปน เงอนไขของอกค าสง SELECT เรยกอกอยางหนงคอ การเขยนค าสง SELECT ซอน SELECT
มกจะใช SubQuery กบการคนหาขอมลทซบซอน
รปแบบ
SELECT column_1 , …., column_n
FROM table_name
WHERE column m operator ( SELECT column_m)
FROM table_name
[WHERE condition] )
เรยบเรยงโดย อ.เรวด พพฒนสงเนน
Main query
Subquery
SubQuery หรอ Nested Query ตวอยางการหาคาทเทากบคาทก าหนด
ตวอยาง35 จงแสดงชอ , นามสกลของนกศกษา ทสงกดคณะ Science
SELECT Std_fname , Std_lname
FROM Students
WHERE Fac_id = ( SELECT Fac_id
FROM Faculty
WHERE fac_name = ‘Science’ );
Std_fname Std_lname
Bob Norbert
Wiliam Pilgrim
Luke Brazzi
Homer Wells
เรยบเรยงโดย อ.เรวด พพฒนสงเนน
SubQuery หรอ Nested Query การหาคาทตรงกบคาใดคาหนงตามรายการทก าหนด (ใช IN)
ตวอยาง36 จงแสดงชอ , นามสกลทลงทะเบยนเรยนในหมเรยน รหส 1234
SELECT Std_fname , Std_lname
FROM Students
WHERE Std_id IN ( SELECT Std_id
FROM Enrollment
WHERE OfferNo = 1234 );
Std_fname Std_lname
Bob Norbert
Wiliam Pilgrim
Luke Brazzi
Homer Wells
Candy Kendall
Roberto Morales
เรยบเรยงโดย อ.เรวด พพฒนสงเนน
SubQuery หรอ Nested Query การใช Subquery รวมกบ Aggregate function
ตวอยาง36 จงแสดงชอ , นามสกลของอาจารย และเงนเดอนของอาจารยทมเงนเดอนสงทสด
SELECT Ins_fName , Ins_lname
FROM Instuctor
WHERE Ins_Salary = ( SELECT MAX(Ins_salary FROM Instructor );
Ins_fname Ins_lname Ins_salary
Nicky Macon 45000
เรยบเรยงโดย อ.เรวด พพฒนสงเนน
SubQuery หรอ Nested Query ขอจ ากดของการใชงาน SubQuery ไมสามารถใชค าสง ORDER BY ใน SubQuery ได เพราะผลลพธใน
SubQuery ถกน าไปใชเปรยบเทยบทงหมดอยแลวจงไมมความจ าเปนทจะตองเรยงล าดบ
ไมสามารถใชคยเวรด INTO ได
คอลมนทมชนดขอมลเปนแบบ ntext, text, และ image ไมสามารถเลอกขนมาได
การใชงาน SUBQUERY รวมกบโอเปอเรเตอรทใชเปรยบเทยบเชน =, >, < จะไมสามารถใชค าสง GROUP BY และ HAVING ไดเวนแตจะมคยเวรด ANY, ALL, SOME
เรยบเรยงโดย อ.เรวด พพฒนสงเนน
การสบคนขอมลจากหลายตาราง ในบางครงการสบคนขอมลทตองการในฐานขอมล ขอมลทตองการคนหา
อาจจะไมไดอยในตารางเดยวกน เชน ตองการแสดงขอมลชอ-นามสกลของนกศกษาและเกรดทไดรบของนกศกษาทลงทะเบยนเรยนในหมเรยน 1234 ซงขอมลชอและนามสกลของนกศกษามาจากตาราง Students สวนเกรดทไดรบมาจากตาราง Enrollment และเงอนไขรหสหมเรยน 1234 กเปนขอมลทอยในตาราง Enrollment ดงนนจะเหนวาขอมลทตองการใหแสดงดวยกนอยกนคนละตาราง ดงนนจะตองเขยนค าสง SELECT ทดงขอมลจากหลายตารางมาแสดงรวมกน
การดงขอมลจากหลายตารางจะใชตวด าเนนการ JOIN ในการรวมขอมลจากหลายๆ ตารางเชาดวยกน
การสบคนขอมลจากหลายตาราง จากหวขอ SubQuery จะเหนวาสามารถดงขอมลไดจากหลาย
ตารางเชนเดยวกน แตความแตกตางระหวาง SubQuery และการดงขอมลจากหลายตารางดวยการ Join คอ ถาคอลมนทเปนผลลพธทตองการมาจากหลาย ๆ ตารางควรจะใช JOIN
ในการใชตวด าเนนการ JOIN จะมผลท าใหทค าสง FROM จะมการระบชอตารางแหลงขอมลมากกวา 1 ตาราง
การสบคนขอมลจากหลายตาราง การเชอมโยงขอมลหลายๆ ตาราง เขาดวยกนนน แตละตารางควร
จะตองมความสมพนธกน (ม Foreign key เชอมโยงกนกบ Primary key ของอกตาราง)
รปแบบการเชอมโยงตาราง ม 2 รปแบบ ไดแกการเชอมโยงแบบตวด าเนนการ PRODUCT
การเชอโยงโดยใชตวด าเนนการ JOIN
การสบคนขอมลจากหลายตาราง การเชอมโยงแบบตวด าเนนการ PRODUCT
รปแบบ
SELECT column_name , … หรอ *
FROM table_name1 , table_name2
WHERE table_name1.foreign_key = table_name2.primary_key ;
***หมายเหต - สมมตให foreign key อยท table_name1 เชอมโยงไปยง primary ของ table_name2
- ในค าสง WHERE ควรจะตองเชอมโยงขอมลโดยใช foreign key เชอมกบprimary key เสมอ ไมเชนนนแลวผลลพธทไดจะเหมอนกบการใชตวด าเนนการ Cartesian Product ***
การสบคนขอมลจากหลายตาราง การเชอมโยงแบบตวด าเนนการ PRODUCT ตวอยางท37 จงแสดงชอ , นามสกล รหสหมเรยน และเกรดทไดรบเฉพาะคนทได
เกรดตงแต 3.5 ขนไป
SELECT std_fname , std_lname ,
offerNo , enrgrade
FROM Students , Enrollment
WHERE Enrollment.std_id = Students.std_id
AND enrgrade >= 3.5;
FKPK
การสบคนขอมลจากหลายตาราง การเชอมโยงแบบตวด าเนนการ PRODUCT ตวอยางท37 จงแสดงชอ , นามสกล รหสหมเรยน และเกรดทไดรบเฉพาะคนทได
เกรดตงแต 3.5 ขนไป
ผลลพธstd_fname std_lname offerno enrgrade
Wiliam Pilgrim 1234 3.5
Candy Kendall 1234 3.8
Bob Norbert 4321 3.5
Cristopher Colan 4321 3.5
Wiliam Pilgrim 5679 3.7
Cristopher Colan 5679 3.8
Candy Kendall 6666 3.6
Tess Dodge 7777 3.7
Bob Norbert 9876 3.5
Joe Estrada 9876 4
การสบคนขอมลจากหลายตาราง การเชอมโยงแบบตวด าเนนการ PRODUCT ตวอยางท38 จงแสดงรหสนกศกษา , ชอ , นามสกล และชอคณะทแตละคนสงกด
SELECT std_id , std_fname , std_lname , fac_name
FROM Students AS S, Faculty AS F
WHERE S.fac_id = F.fac_id ;
FK
PK
std_id std_fname std_lname fac_name
5678901235 Wally Kendall Education
5678901240 Mariah Dodge Education
4567890122 Joe Estrada Engineering
4567890133 Cristopher Colan Engineering
2345678910 Candy Kendall Management Science
2345678920 Roberto Morales Management Science
2345789015 Tess Dodge Management Science
1234567801 Bob Norbert Science
1234567821 Wiliam Pilgrim Science
1234567822 Luke Brazzi Science
1234567840 Homer Wells Science
การสบคนขอมลจากหลายตาราง การเชอมโยงแบบตวด าเนนการ PRODUCT ตวอยางท39 จงแสดงรหสหมเรยน , รหสวชา , ชอวชา , รหสผสอน , ชอ , นามสกล
ทเปดสอนใน ป 2010 เทอม WINTER
SELECT offerNo , O.courseNo , courseName , O.ins_id , ins_fname , ins_lname
FROM Offering AS O, Course AS C , Instructor AS Ins
WHERE (O.courseNo = C.courseNo ) AND (O.ins_id = Ins.ins_id )
AND (OffYear = 2010) AND (OffTerm = ‘WINTER’) ;
การสบคนขอมลจากหลายตาราง การเชอมโยงแบบตวด าเนนการ PRODUCT ตวอยางท39 จงแสดงรหสหมเรยน , รหสวชา , ชอวชา , รหสผสอน , ชอ , นามสกล
ทเปดสอนใน ป 2010 เทอม WINTER
SELECT offerNo , O.courseNo , courseName , O.ins_id , ins_fname , ins_lname
FROM Offering AS O, Course AS C , Instructor AS Ins
WHERE (O.courseNo = C.courseNo ) AND (O.ins_id = Ins.ins_id )
AND (OffYear = 2010) AND (OffTerm = ‘WINTER’) ;
offerno courseno coursename ins_id ins_fname ins_lname
4444 IS330 Database System 54321 Victoria Emmanuel
5555 EC220 Micro Economics 98765 Leonard Vince
5678 FIN01 Fundamental of Finance 76543 Nicky Macon
6666 IS233 Business Data Comunication 65432 Leonard Fibon
การสบคนขอมลจากหลายตาราง การเชอมโยงแบบตวด าเนนการ PRODUCT ตวอยางท40 จงแสดงรหสหมเรยน , รหสวชา , วนทเรยน , หองเรยน , เวลาเรยน ,
ชอและนามสกลผสอน เฉพาะรายวชาท Bob Norbert ลงทะเบยน ในปการศกษา 2010 เทอม WINTER
แหลงขอมล
การสบคนขอมลจากหลายตาราง การเชอมโยงแบบตวด าเนนการ PRODUCT ตวอยางท40 (ตอ)
SELECT O.offerNo , courseNo , offDay , offRoom , offTime , ins_fname , ins_lname
FROM Offering AS O, Enrollment AS En , Instructor AS Ins , Students AS S
WHERE (S.std_id = En.std_id ) AND (En.offerNo = O.offerNo ) AND (O.ins_id = Ins.ins_id )
AND (std_fname = ‘Bob’) AND (std_lname = ‘Norbert’)
AND (offYear = 2010) AND (offTerm = ‘WINTER’) ;
offerno courseno offday offroom offtime ins_fname ins_lname
5555 EC220 MW 523 8:30:00 Leonard Vince
5678 FIN01 MW 532 10:30:00 Nicky Macon
การสบคนขอมลจากหลายตาราง การเชอมโยงแบบตวด าเนนการ PRODUCT ตวอยางท41 จากตวอยางท 40 ตองการเพมชอวชา และจ านวนหนวยกตของวชา
Bob Norbert ลงทะเบยน ในปการศกษา 2010 เทอม WINTER
แหลงขอมล
การสบคนขอมลจากหลายตาราง การเชอมโยงแบบตวด าเนนการ PRODUCT ตวอยางท41 (ตอ)
SELECT O.offerNo , courseNo , courseName , credit , offDay , offRoom ,
offTime , ins_fname , ins_lname
FROM Offering AS O, Enrollment AS En , Instructor AS Ins ,
Students AS S , Courses AS C
WHERE (S.std_id = En.std_id ) AND (En.offerNo = O.offerNo )
AND (O.ins_id = Ins.ins_id ) AND (O.courseNo = C.courseNo )
AND (std_fname = ‘Bob’) AND (std_lname = ‘Norbert’)
AND (offYear = 2010) AND (offTerm = ‘WINTER’) ;
การสบคนขอมลจากหลายตาราง การเชอมโยงแบบตวด าเนนการ PRODUCT ตวอยางท41 (ตอ)
SELECT O.offerNo , courseNo , courseName , credit , offDay , offRoom ,
offTime , ins_fname , ins_lname
FROM Offering AS O, Enrollment AS En , Instructor AS Ins ,
Students AS S , Courses AS C
WHERE (S.std_id = En.std_id ) AND (En.offerNo = O.offerNo )
AND (O.ins_id = Ins.ins_id ) AND (O.courseNo = C.courseNo )
AND (std_fname = ‘Bob’) AND (std_lname = ‘Norbert’)
AND (offYear = 2010) AND (offTerm = ‘WINTER’) ;
offerno courseno coursename credit offday offroom offtime ins_fname ins_lname
5555 EC220 Micro Economics 3 MW 523 8:30:00 Leonard Vince
5678 FIN01 Fundamental of Finance 3 MW 532 10:30:00 Nicky Macon
การสบคนขอมลจากหลายตาราง การเชอมโยงโดยใชตวด าเนนการ JOIN
รปแบบ
SELECT column_name , … หรอ *
FROM table_name1 operator_JOIN table_name2 ON table_name1.foreign_key =
table_name2.primary_key ;
***หมายเหต - สมมตให foreign key อยท table_name1 เชอมโยงไปยง primary ของ table_name2***
การสบคนขอมลจากหลายตาราง การเชอมโยงโดยใชตวด าเนนการ JOIN
ตวด าเนนการ JOIN INNER JOIN สงคาแถวกลบเมอมอยางนอยหนงแถวทตรงกบตารางทงสอง
LEFT JOIN สงคากลบทกแถวของตารางทางดานซายของตวด าเนนการ JOIN แมวาจะไมตรงกบคาในตารางทางดานขวาของตวด าเนนการ
RIGHT JOIN สงคากลบทกแถวของตารางทางดานขวาของตวด าเนนการ JOIN แมวาจะไมตรงกบคาในตารางทางดานซายของตวด าเนนการ
FULL JOIN สงคาแถวกลบเมอมแถวทตรงกบตารางใดตารางหนง
การสบคนขอมลจากหลายตาราง การเชอมโยงโดยใชตวด าเนนการ JOIN ตวอยางท42 จากตวอยางท 37จงแสดงชอ , นามสกล รหสหมเรยน และเกรดท
ไดรบเฉพาะคนทไดเกรดตงแต 3.5 ขนไป
SELECT std_fname , std_lname ,
offerNo , enrgrade
FROM Students INNER JOIN Enrollment ON
Enrollment.std_id = Students.std_id
WHERE enrgrade >= 3.5;
FKPK
การสบคนขอมลจากหลายตาราง การเชอมโยงโดยใชตวด าเนนการ JOIN ตวอยางท43 จากตวอยางท 38 จงแสดงรหสนกศกษา , ชอ , นามสกล และชอคณะ
ทแตละคนสงกด
SELECT std_id , std_fname , std_lname , fac_name
FROM Students AS S INNER JOIN Faculty AS F
ON S.fac_id = F.fac_id ;
FK
PK
std_id std_fname std_lname fac_name
5678901235 Wally Kendall Education
5678901240 Mariah Dodge Education
4567890122 Joe Estrada Engineering
4567890133 Cristopher Colan Engineering
2345678910 Candy Kendall Management Science
2345678920 Roberto Morales Management Science
2345789015 Tess Dodge Management Science
1234567801 Bob Norbert Science
1234567821 Wiliam Pilgrim Science
1234567822 Luke Brazzi Science
1234567840 Homer Wells Science
การสบคนขอมลจากหลายตาราง การเชอมโยงโดยใชตวด าเนนการ JOIN ตวอยางท44 (จากตวอยางท39) จงแสดงรหสหมเรยน , รหสวชา , ชอวชา , รหส
ผสอน , ชอ , นามสกล ทเปดสอนใน ป 2010 เทอม WINTER
SELECT offerNo , O.courseNo , courseName , O.ins_id , ins_fname , ins_lname
FROM Offering AS O INNER JOIN Course AS C ON (O.courseNo = C.courseNo ) INNER JOIN Instructor AS Ins ON (O.ins_id = Ins.ins_id )
WHERE (OffYear = 2010) AND (OffTerm = ‘WINTER’) ;
การสบคนขอมลจากหลายตาราง การเชอมโยงโดยใชตวด าเนนการ JOIN ตวอยางท44 จงแสดงรหสหมเรยน , รหสวชา , ชอวชา , รหสผสอน , ชอ , นามสกล
ทเปดสอนใน ป 2010 เทอม WINTER
SELECT offerNo , O.courseNo , courseName , O.ins_id , ins_fname , ins_lname
FROM Offering AS O INNER JOIN Course AS C ON (O.courseNo = C.courseNo ) INNER JOIN Instructor AS Ins ON (O.ins_id = Ins.ins_id )
WHERE (OffYear = 2010) AND (OffTerm = ‘WINTER’) ;
offerno courseno coursename ins_id ins_fname ins_lname
4444 IS330 Database System 54321 Victoria Emmanuel
5555 EC220 Micro Economics 98765 Leonard Vince
5678 FIN01 Fundamental of Finance 76543 Nicky Macon
6666 IS233 Business Data Comunication 65432 Leonard Fibon
การสบคนขอมลจากหลายตาราง การเชอมโยงโดยใชตวด าเนนการ JOIN ตวอยางท45 (จากตวอยางท 40) จงแสดงรหสหมเรยน , รหสวชา , วนทเรยน ,
หองเรยน , เวลาเรยน , ชอและนามสกลผสอน เฉพาะรายวชาท Bob Norbert ลงทะเบยน ในปการศกษา 2010 เทอม WINTER
แหลงขอมล
การสบคนขอมลจากหลายตาราง การเชอมโยงโดยใชตวด าเนนการ JOIN ตวอยางท45 (ตอ)
SELECT O.offerNo , courseNo , offDay , offRoom , offTime , ins_fname , ins_lname
FROM Offering AS O INNER JOIN Enrollment AS En ON (S.std_id = En.std_id )
INNER JOIN Instructor AS Ins ON (En.offerNo = O.offerNo )
INNER JOIN Students AS S ON (O.ins_id = Ins.ins_id )
WHERE (std_fname = ‘Bob’) AND (std_lname = ‘Norbert’)
AND (offYear = 2010) AND (offTerm = ‘WINTER’) ;offerno courseno offday offroom offtime ins_fname ins_lname
5555 EC220 MW 523 8:30:00 Leonard Vince
5678 FIN01 MW 532 10:30:00 Nicky Macon
การสบคนขอมลจากหลายตาราง การเชอมโยงโดยใชตวด าเนนการ JOIN ตวอยางท46 จากตวอยางท 45 ตองการเพมชอวชา และจ านวนหนวยกตของวชา
Bob Norbert ลงทะเบยน ในปการศกษา 2010 เทอม WINTER
แหลงขอมล
การสบคนขอมลจากหลายตาราง การเชอมโยงโดยใชตวด าเนนการ JOIN ตวอยางท46 (ตอ)
SELECT O.offerNo , courseNo , courseName , credit , offDay , offRoom ,
offTime , ins_fname , ins_lname
FROM Offering AS O INNER JOIN Enrollment AS En ON (S.std_id = En.std_id )
INNER JOIN Instructor AS Ins ON (En.offerNo = O.offerNo )
INNER JOIN Students AS S ON (O.ins_id = Ins.ins_id )
INNER JOIN Courses AS C ON (O.courseNo = C.courseNo )
WHERE (std_fname = ‘Bob’) AND (std_lname = ‘Norbert’)
AND (offYear = 2010) AND (offTerm = ‘WINTER’) ;
การสบคนขอมลจากหลายตาราง การเชอมโยงโดยใชตวด าเนนการ JOIN ตวอยางท46 (ตอ)
SELECT O.offerNo , courseNo , courseName , credit , offDay , offRoom ,
offTime , ins_fname , ins_lname
FROM Offering AS O INNER JOIN Enrollment AS En ON (S.std_id = En.std_id )
INNER JOIN Instructor AS Ins ON (En.offerNo = O.offerNo )
INNER JOIN Students AS S ON (O.ins_id = Ins.ins_id )
INNER JOIN Courses AS C ON (O.courseNo = C.courseNo )
WHERE (std_fname = ‘Bob’) AND (std_lname = ‘Norbert’)
AND (offYear = 2010) AND (offTerm = ‘WINTER’) ;
offerno courseno coursename credit offday offroom offtime ins_fname ins_lname
5555 EC220 Micro Economics 3 MW 523 8:30:00 Leonard Vince
5678 FIN01 Fundamental of Finance 3 MW 532 10:30:00 Nicky Macon