คาบปฏิบัติการ ครั้งที่ 3 - sql (structured query language)

49
LOGO 1 คคคคคคคคคค คคค คคคคคคคค 3 คคคคคคค 421-343 คคคคคคคคคคคค คคคคคคคคคคคคคค คคคคคคคคคคคคคคคคคคคคคคคคค คคคคคคคคคคคคคค

Upload: know2pro

Post on 27-Sep-2015

20 views

Category:

Documents


1 download

DESCRIPTION

คาบปฏิบัติการ ครั้งที่ 3 - SQL (Structured Query Language)

TRANSCRIPT

  • * 3 421-343

  • * Query Query Language SQL IBM RDBMS SQL

  • * SQLDDL (Data Definition Language) CREATE TABLE, CREATE VIEW

    DML (Data Manipulation Language) SELECT, INSERT , UPDATE

    DCL (Data Control Language)

  • * (Data Dictionary)

    CUSTOMER PRODUCT

    IDcustomer (PK)Char (6)C_nameVarchar(40)C_addressVarchar(30)C_TelephoneVarchar(10)C_CreditlimnumberC_currbalnumber

    IDproduct(PK)Char (6)p_nameVarchar(20)p_unitpricenumber()P_onhandnumberP_orderptnumberP_orderqtynumber

  • * (Data Dictionary)

    EMPLOYEEORDER

    IDemployee (PK)Char (6)e_nameVarchar(40)e_salarynumber(8,2)e_addressVarchar(30)e_telephoneChar(10)

    IDorder(PK)Char (6)IDproductChar (6)productqtynumberdiscountnumber(%)IDcustomerChar (6)CustomerIDemployeeChar (6)employee

  • * (Create Table)

    CREATE TABLE ( [NOT NULL] [UNIQUE], ( [NOT NULL] [UNIQUE], [PRIMARY KEY (column_name,)][FOREIGN KEY (column_name) REFERENCES table_name]); SQL CREATE TABLE >>

  • * CREATE TABLE Customer(IDcustomer char(6) NOT NULL UNIQUE,C_name varchar(40) NOT NULL,C_address varchar(30),C_telephone char(10),C_credit number,C_currbal number,PRIMARY KEY (IDcustomer)); >>SQL >> IDcustomer PRIMARY KEY (IDcustomer) IDcustomer (NOT NULL) (UNIQUE) c_name (NOT NULL) >> customer (Create Table)

  • * >> (IDdepartment) employee SQL >> ALTER TABLE employee ADD IDdepartment char(6) ; (Alter Table) ALTER TABLE ALTER TABLE ADD ; >>

  • * >> (IDdepartment) employee SQL >> ALTER TABLE employee DROP Iddepartment ; (Alter Table) ALTER TABLE DROP ; >>

  • * (MODIFY) >> Iddeparment employee 6 5 SQL >> ALTER TABLE employee MODIFY (IDdepartment char(5)) ;ALTER TABLE MODIFY ; >>

  • * (Drop Table)DROP TABLE Order

    DROP TABLE ; >>DROP TABLE ORDER;SQL >> ORDER

    >>

  • * (INSERT)INSERT INTO VALUES ([, , ) ; >>INSERT INTO customerVALUES (101,Supaporn, Pattani,073658758, 150000 ,100000 ) ; SQL >> 101 Supaporn Pattani 073658758 150,000 . 100,000 .

    >>

  • * (INSERT) ()INSERT INTO VALUES ; >> INSERT INTO customer (IDcustomer , C_name) VALUES (150,Walaiporn) ; SQL >> 150 Walaiporn

    >>

  • * SQL >> CustomerInBangkok , customer Bangkok

    >> 1. CustomerInBangkok CREATE TABLE CustomerInBangkok (IDBangkok char(6) NOT NULL UNIQUE, B_name varchar(40) NOT NULL, B_telephone char(10) ); 2. CustomerInBangkok INSERT INTO CustomerInBangkok SELECT IDcustomer , C_name,C_telephoneFROM Customer WHERE address =Bangkok ;

  • * UPDATE employeeSET E_salary= 15000WHERE E_name=Piyanuch ; (Update)SQL >> Piyanuch 14,400 15,000 >> UPDATE SET = new_valueWHERE ; >>

  • * UPDATE customerSET C_credit = C_credit + 50000WHERE C_address =Bangkok ;SQL >> Bangkok 50,000 >> (Update)

  • *

    DELETE FROM employeeWHERE E_name = Walai ;

    SQL >> Walai >>DELETE WHERE ; >> (Delete)

  • * SELECT Idcustomer ,C_name,C_address, C_telephone,C_Credit, C_currlim,C_currbal FROM Customer ;

    SQL1 >> >>SELECT column_name, list of column_name, or * FROM table_name ,or list of table_name; >> (SELECT) SELECT * FROM Customer ;

    SQL2 >> ***

  • * SELECT C_name AS Customer_name, C_currbal AS Current Balance FROM customer;

    SQL >> Customer_name Current Balance >>SELECT column_name AS NEW HEADING; >> (SELECTAS) >>Customer_name Current Balance ----------------------------------------Sopha 1000000Silee 2000000

  • * SELECT DISTINCT address FROM customer ;

    SQL >> >>SELECT DISTINCT ColumnnameFROM Table_name; >> DISTINCT

  • * SELECT IDCustomer , C_name FROM customer ORDER BY C_name;

    SQL >>ORDER BY column_name [DESC] ; >> ORDER BYORDER BY column_name ; SELECT IDCustomer , C_name FROM customer ORDER BY C_name DESC;

    SQL

  • * SELECT C_address , C_name, C_creditlim FROM customer ORDER BY address, C_name;

    SQL >> >> addressC_name C_Creditlim----------------------------------AyuthayaWorachat5000000BangkokAnan1000000BangkokSilee6000000 >>

  • * (SELECT GROUP BY) SELECT address, AVG(credit_lim)FROM customer GROUP BY address;

    SQL >> >>SELECT column_name FROM GROP BY ; >>

  • * HAVING WHERE SELECT address, AVG(credit_lim)FROM customer GROUP BY addressHAVING AVG(credit_lim)>=300000 ;

    SQL >> 300,000 >>SELECT column_name FROM GROP BY HAVING ; >>addressAVG(credit_lim) Ayuthaya 800000 Bangkok 533333.33 Rayong 300000 >>

  • * HAVING WHERE SELECT address, AVG(credit_lim)FROM customer WHERE address IN (Bangkok , Rayong) GROUP BY addressHAVING AVG(credit_lim)>=300000 ;

    SQL >> 300,000 >>SELECT column_name FROM WHERE GROP BY HAVING ; >>addressAVG(credit_lim) Bangkok 533333.33 Rayong 300000 >>

  • * SQL >>Bangkok >>SELECT column_nameFROMtable_nameWHEREcondition ; >> SELECT *FROMcustomerWHEREaddress = Bangkok ;

  • *(Comparison Operators)

    =!=>=

  • *SQL >> Bangkok 500,000 >> SELECT *FROM customerWHERE (C_address = Bangkok) AND (C_creditlim> 500000) ; ORSQL >> Bangkok 500,000 SELECT *FROM customerWHERE (C_address = Bangkok) OR(C_creditlim> 500000) ; >>

  • *SQL 1 >> Bangkok, Rayong Ayuthaya >> SELECT * FROM customerWHERE (C_address = Bangkok) OR (C_address = Rayong) OR (C_address = Ayuthaya) ; INSQL 2 >> SELECT * FROM customerWHERE address IN (Bangkok, Rayong , Ayuthaya)

  • *SQL1 >> Bangkok >> SELECT *FROMcustomerWHEREC_address != Bangkok ; SQL2 >> SELECT *FROMcustomerWHERENOT C_address = Bangkok; NOT

  • * SELECT column_nameFROMtable_nameWHEREcolumn_name BETWEEN values1 AND values2 ; >> BETWEENAND*** (values1) values2*** SELECT column_nameFROMtable_nameWHEREcolumn_name NOT BETWEEN values1 AND values2 ; >>*** ***

  • *SQL1 >> 3,500 5,000 >> SELECT e_nameFROMemployeeWHERE(salary >= 3500)AND(salary > BETWEENAND SELECT e_nameFROMemployeeWHEREsalaryBETWEEN 3500 AND 5000 ;

  • * SQL LIKE _ LIKE

    /_ 1 % 0 ()

  • *SQL1 >> So >> SELECT C_nameFROMcustomerWHEREc_namelike So% ; LIKESQL1 >> Si 3 >> SELECT C_nameFROMcustomerWHEREc_namelike Si_ _ _ ; C_name ------------ SophaSomchai Somsak >>C_name ------------ Silee >>

  • *

    (Argument) (Returned values)ABS(m)m= m ABS(-3) = 3MOD(m,n)m= () n = () m n MOD(9,2) = 1POWER(m,n)m= () n = () m n(mn) POWER(4,2)=16ROUND(m,n)m= () n = / n n = 0 m / n n+1 5 5 ROUND(4.25,1) = 4.3ROUND (4.24,1) = 4.2TRUNC(m,n)m= n = n n = 0 m n

  • *SQL1 >> >> SELECT C_name, ABS(C_currbal C_creditlim) AS difference FROM customer ; ABS(m)C_namedifference ------------ ------------Sopha 200000Somchai200000 Somsak100000Amorn 47950 >>

  • *SQL1 >> 10 >> SELECT p_name, MOD(p_onhand,10) FROM Product ; MOD(m,n)p_name MOD(onhand,10) ------------ ------------Television0Radio5 Table2Chair0 >>

  • *SQL1 >> >> SELECT e_name, POWER(e_salary,2) FROM employee; e_name POWER(e_salary,2) ------------ ------------Piya12250000Pinyo24850225 Wilai 6708100 >> POWER(m,n)

  • *SQL1 >> 1 >> SELECT p_name, ROUND(P_unitprice,1), TRUNC(P_unitprice,1) FROM product ; >> ROUND(m,n) TRUNC(m,n)p_name ROUND(P_unitprice,10) TRUNC(p_unitprice,1) ------------ ---------------- ----------------Television10500 10500Radio 1595 1595 Table 650 650Chair 232.5 232.5 Ruler 1.8 1.7 Paper 62.3 62.2

  • * SELECT Function (column_name or *)FROMtable_name ; >>

    AVGSUM MINMAXCOUNT

  • *SQL1 >> >> SELECT AVG(salary) FROM employee ; >> AVG() , MAX()AVG(salary) ------------ 4971 SQL1 >> >> SELECT MAX(C_creditlim) FROM Customer ; >>MAX(C_creditlim) ------------ 900000

  • *SQL1 >> >> SELECT COUNT(*) AS TOTAL , COUNT(DISTINCT IDorder) AS ORDER FROM Order; COUNT, DISTINCT >>TOTAL ORDER ------------ ------------ 6 5 SQL1 >> >> SELECT COUNT(*) FROM customer ; >>count(*) ------------ 9

  • * (JOIN)= >>SQL >> SELECT DISTINCT IDorder, order.IDemployee, e_name FROM order,employee WHERE order.IDemployee= employee.IDemployee; >>IDorder IDemployee e_name A-001 10100 Piya A-059 1855 Sukchai

    . ..

    EmployeeIDemployeeE_nameE_salaryE_addressE_telephone

    OrderIDorderIDproduct*QtyDiscountIDcustomer *IDemployee *

  • * = A-001 >>SQL >> SELECT p_name, qty * unitprice AS total_amount FROM product , order WHERE IDorder= A-001 AND product.IDproduct =order. IDproduct ; >>p_name total_amount

    television 3150000 ..

    OrderIDorderIDproduct*QtyDiscountIDcustomer *IDemployee *

    productIDproduct p_nameunitpriceonhandreorder_ptreorder_qtytotal_amount= qty* uniprice

  • * Equi join = D-593 >>SQL >> SELECT p_name, qty FROM product , order WHERE product.IDproduct=order.Idproduct AND IDorder=D-593 ORDER BY qty DESC ; >>p_name qty Paper 150 Pencil 50 ..

    OrderIDorderIDproduct*QtyDiscountIDcustomer *IDemployee *

    productIDproduct p_nameunitpriceonhandreorder_ptreorder_qtytotal_amount= qty* uniprice

  • * Self join = >>SQL >> SELECT E1.e_name AS lowerpaid, E1.salary AS lowersalary, E2.e_name AS higherpaid, E2.salary AS highersalary FROM employee E1, employee E2WHERE E1.salary < E2.salary ORDER BY 1;

  • * Self join >>lowerpaid lowersalaryhigherpaidhighersalary Pinyo 4985Sompat 9800 Pinya 3500Pinyo 4985 Pinya 3500Sukchai 3980 Pinya 3980 Sombat 9800 Sukchai 3980Pinyo 4985 Sukchai 3980 Sombat 9800 Wilai 2590 Piya 3500 Wilai 2590Pinyo 4985 Wilai 2590Sombat 9800 Wilai 2590Sukchai 3980

    .. ..

  • * Outer join= >>SQL >> SELECT p_name, P.Idproduct , IDorder FROM product P, order O WHERE P.IDproduct = O.IDproduct(+);

    OrderIDorderIDproduct*QtyDiscountIDcustomer *IDemployee *

    productIDproduct p_nameunitpriceonhandreorder_ptreorder_qty

  • * Self join >>IDproduct p_name IDorder 10515 TelevisionA-001 10515 TelevisionC-523 20001 Radio B-191 20002 Table A-059 21011 Chair 35155 Pencil D-593 36710 Ruler 39001 Paper D-593

    .. .. order

    ****