Cover | Table of Contents | Colophon
SELECT <one or more things> FROM <one or more places> WHERE <zero, one, or more conditions apply>
SELECT cust_nbr, name, region_id
FROM customer;
CUST_NBR NAME REGION_ID
---------- ------------------------------ ----------
1 Cooper Industries 5
2 Emblazon Corp. 5
3 Ditech Corp. 5
4 Flowtech Inc. 5
5 Gentech Industries 5
6 Spartan Industries 6
7 Wallace Labs 6
8 Zantech Inc. 6
9 Cardinal Technologies 6
10 Flowrite Corp. 6
11 Glaven Technologies 7
12 Johnson Labs 7
13 Kimball Corp. 7
14 Madden Industries 7
15 Turntech Inc. 7
16 Paulson Labs 8
17 Evans Supply Corp. 8
18 Spalding Medical Inc. 8
19 Kendall-Taylor Corp. 8
20 Malden Labs 8
21 Crimson Medical Inc. 9
22 Nichols Industries 9
23 Owens-Baxter Corp. 9
24 Jackson Medical Inc. 9
25 Worcester Technologies 9
26 Alpha Technologies 10
27 Phillips Labs 10
28 Jaztech Corp. 10
29 Madden-Taylor Inc. 10
30 Wallace Industries 10SELECT part_nbr, name, supplier_id, status, inventory_qty FROM part;
DELETE FROM part;
INSERT INTO part (part_nbr, name, supplier_id, status, inventory_qty)
VALUES ('XY5-1002', 'Wonder Widget', 1, 'IN-STOCK', 1);
/* 9,999 more INSERTs on the wall, 9,999 more INSERTS... */
SELECT p.part_nbr, p.name, p.supplier_id, p.status, p.inventory_qty, s.supplier_id, s.name FROM part p, supplier s;
SELECT part_nbr, name, supplier_id, status, inventory_qty FROM part;
DELETE FROM part;
INSERT INTO part (part_nbr, name, supplier_id, status, inventory_qty)
VALUES ('XY5-1002', 'Wonder Widget', 1, 'IN-STOCK', 1);
/* 9,999 more INSERTs on the wall, 9,999 more INSERTS... */
SELECT p.part_nbr, p.name, p.supplier_id, p.status, p.inventory_qty, s.supplier_id, s.name FROM part p, supplier s;
SELECT p.part_nbr, p.name, p.supplier_id, p.status, p.inventory_qty, s.supplier_id, s.name FROM part p, supplier s WHERE s.supplier_id = p.supplier_id AND s.name = 'Acme Industries';
SELECT p.part_nbr, p.name, p.supplier_id, p.status, p.inventory_qty, s.supplier_id, s.name FROM part p, supplier s WHERE s.supplier_id = p.supplier_id AND s.name = 'Acme Industries';
|
Intermediate result
|
Final result
|
|---|---|
|
WHERE TRUE AND TRUE
|
TRUE
|
|
WHERE FALSE AND FALSE
|
FALSE
|
|
WHERE FALSE AND TRUE
|
FALSE
|
|
WHERE TRUE AND FALSE
|
FALSE
|
s.supplier_id = p.supplier_id s.name = 'Acme Industries' supplier_id = (SELECT supplier_id FROM supplier WHERE name = 'Acme Industries')
SELECT E.LNAME, D.NAME
FROM EMPLOYEE E, DEPARTMENT D
WHERE E.DEPT_ID = D.DEPT_ID;
LNAME NAME
---------- --------------
SMITH RESEARCH
ALLEN SALES
WARD SALES
JONES RESEARCH
MARTIN SALES
BLAKE SALES
CLARK ACCOUNTING
SCOTT RESEARCH
KING ACCOUNTING
TURNER SALES
ADAMS RESEARCH
JAMES SALES
FORD RESEARCH
MILLER ACCOUNTING
14 rows selected.
SELECT E.LNAME, D.NAME
FROM EMPLOYEE E, DEPARTMENT D
WHERE E.DEPT_ID = D.DEPT_ID;
LNAME NAME
---------- --------------
SMITH RESEARCH
ALLEN SALES
WARD SALES
JONES RESEARCH
MARTIN SALES
BLAKE SALES
CLARK ACCOUNTING
SCOTT RESEARCH
KING ACCOUNTING
TURNER SALES
ADAMS RESEARCH
JAMES SALES
FORD RESEARCH
MILLER ACCOUNTING
14 rows selected.
SELECT * FROM SUPPLIER;
SUPPLIER_ID NAME
----------- ------------------------------
101 Pacific Disks, Inc.
102 Silicon Valley MicroChips
103 Blue River Electronics
SELECT * FROM PART;
PART_NBR NAME SUPPLIER_ID STATUS INVENTORY_QTY UNIT_COST RESUPPLY_DATE
-------- ------------------ ----------- ------ ------------- --------- -------------
HD211 20 GB Hard Disk 101 ACTIVE 5 2000 12-DEC-00
P3000 3000 MHz Processor 102 ACTIVE 12 600 03-NOV-00
SELECT S.SUPPLIER_ID, S.NAME SUPPLIER_NAME, P.PART_NBR, P.NAME PART_NAME
FROM SUPPLIER S, PART P
WHERE S.SUPPLIER_ID = P.SUPPLIER_ID;
SUPPLIER_ID SUPPLIER_NAME PART_NBR PART_NAME
----------- ------------------------------ ---------- -------------------
101 Pacific Disks, Inc. HD211 20 GB Hard Disk
102 Silicon Valley MicroChips P3000 3000 MHz Processor
CREATE TABLE EMPLOYEE ( EMP_ID NUMBER (4) NOT NULL PRIMARY KEY, FNAME VARCHAR2 (15), LNAME VARCHAR2 (15), DEPT_ID NUMBER (2), MANAGER_EMP_ID NUMBER (4) REFERENCES EMPLOYEE(EMP_ID), SALARY NUMBER (7,2), HIRE_DATE DATE, JOB_ID NUMBER (3));
SELECT E.LNAME EMPLOYEE, M.NAME MANAGER
FROM EMPLOYEE E, EMPLOYEE M
WHERE E.MANAGER_EMP_ID = M.EMP_ID;
EMPLOYEE MANAGER
---------- ----------
SMITH FORD
ALLEN BLAKE
WARD BLAKE
JONES KING
MARTIN BLAKE
BLAKE KING
CLARK KING
SCOTT JONES
TURNER BLAKE
ADAMS SCOTT
JAMES BLAKE
FORD JONES
MILLER CLARK
13 rows selected.
SELECT supplier_id, name
FROM supplier s
WHERE EXISTS (SELECT *
FROM part p
WHERE p.inventory_qty < 10
AND p.supplier_id = s.supplier_id);
SELECT s.supplier_id, s.name FROM supplier s, part p WHERE p.supplier_id = s.supplier_id AND p.inventory_qty < 10;
DESC EMPLOYEE
Name Null? Type
------------------------------- -------- ----
EMP_ID NOT NULL NUMBER(4)
LNAME VARCHAR2(15)
FNAME VARCHAR2(15)
DEPT_ID NUMBER(2)
MANAGER_EMP_ID NUMBER(4)
SALARY NUMBER(7,2)
HIRE_DATE DATE
JOB_ID NUMBER(3)
SELECT L.LOCATION_ID, D.NAME, L.REGIONAL_GROUP FROM DEPARTMENT D, LOCATION L WHERE D.LOCATION_ID = L.LOCATION_ID;
FROM DEPARTMENT D INNER JOIN LOCATION L
ON D.LOCATION_ID = L.LOCATION_ID;
SELECT L.LOCATION_ID, D.NAME, L.REGIONAL_GROUP FROM DEPARTMENT D INNER JOIN LOCATION L ON D.LOCATION_ID = L.LOCATION_ID;
aggregate_function([DISTINCT | ALL] expression)
aggregate_function([DISTINCT | ALL] expression)
SELECT MAX(SALARY) FROM EMPLOYEE;
MAX(SALARY)
-----------
5000
DESC CUST_ORDER
Name Null? Type
-------------------------------- -------- --------------
ORDER_NBR NOT NULL NUMBER(7)
CUST_NBR NOT NULL NUMBER(5)
SALES_EMP_ID NOT NULL NUMBER(5)
SALE_PRICE NUMBER(9,2)
ORDER_DT NOT NULL DATE
EXPECTED_SHIP_DT NOT NULL DATE
CANCELLED_DT DATE
SHIP_DT DATE
STATUS VARCHAR2(20)
SELECT CUST_NBR, COUNT(ORDER_NBR)
FROM CUST_ORDER
GROUP BY CUST_NBR;
CUST_NBR COUNT(ORDER_NBR)
---------- ----------------
201 2
231 6
244 2
255 6
264 2
288 2
6 rows selected.
SELECT CUST_NBR, SALES_EMP_ID, COUNT(ORDER_NBR)
FROM CUST_ORDER;
SELECT CUST_NBR, SALES_EMP_ID, COUNT(ORDER_NBR)
*
ERROR at line 1:
ORA-00937: not a single-group group function
SELECT CUST_NBR, SALES_EMP_ID, COUNT(ORDER_NBR)
FROM CUST_ORDER
GROUP BY CUST_NBR;
SELECT CUST_NBR, SALES_EMP_ID, COUNT(ORDER_NBR)
*
ERROR at line 1:
ORA-00979: not a GROUP BY expression
SELECT CUST_NBR, COUNT(ORDER_NBR)
FROM CUST_ORDER
GROUP BY CUST_NBR
HAVING CUST_NBR < 260;
CUST_NBR COUNT(ORDER_NBR)
---------- ----------------
201 2
231 6
244 2
255 6
SELECT CUST_NBR, COUNT(ORDER_NBR) FROM CUST_ORDER WHERE CUST_NBR < 260;
SELECT CUST_NBR, COUNT(ORDER_NBR)
FROM CUST_ORDER
GROUP BY CUST_NBR
HAVING COUNT(ORDER_NBR) > 2;
CUST_NBR COUNT(ORDER_NBR)
---------- ----------------
231 6
255 6
SELECT * FROM customer WHERE cust_nbr = (SELECT 123 FROM dual);
SELECT * FROM customer WHERE cust_nbr = 123;
SELECT * FROM customer WHERE cust_nbr = (SELECT 123 FROM dual);
SELECT * FROM customer WHERE cust_nbr = 123;
SELECT lname
FROM employee
WHERE salary > (SELECT AVG(salary)
FROM EMPLOYEE);
LNAME
--------------------
Brown
Smith
Blake
Isaacs
Jacobs
King
Fox
Anderson
Nichols
Iverson
Peters
Russell
SELECT p.part_nbr, p.name
FROM supplier s, part p
WHERE s.name = 'Acme Industries'
AND s.supplier_id = p.supplier_id
AND 10 <=
(SELECT COUNT(*)
FROM cust_order co, line_item li
WHERE li.part_nbr = p.part_nbr
AND li.order_nbr = co.order_nbr
AND co.order_dt >= TO_DATE('01-DEC-2001','DD-MON-YYYY'));
SELECT p.part_nbr, p.name, p.unit_cost
FROM part p
WHERE EXISTS
(SELECT 1 FROM line_item li, cust_order co
WHERE li.part_nbr = p.part_nbr
AND li.order_nbr = co.order_nbr
AND co.ship_dt >= TO_DATE('01-JAN-2002','DD-MON-YYYY'));