You are on page 1of 3

HMP 669: Db Mgmt & Internet Apps in HC, Kai Zheng

Oracle 10g Cheat Sheet


1
1.1

ER Model
Logical Model
IsPCPOf
0..* 0..1

gender CHAR(1) NOT NULL CHECK (gender = F OR gender = M), dob DATE NOT NULL, ssn CHAR(11) UNIQUE );

3.1
Physician physicianId {PK} nameFirst nameLast

Common Data Types


Numeric (e.g. 999.99) Variable length string Fixed length string Date/time Max. size 38 digits Max. size 4000 Max. size 2000 -47129999

Patient patientId {PK} pcpId {FK} nameFirst nameLast


1..1 1..1

Has
0..*

Appointment AssignedTo appointmentId {PK} patientId {FK} physicianId {FK} appointmentDateTime reasonForVisit

AssignedTo
0..* 1..1

NUMBER (5,2) VARCHAR2(50) CHAR(5) DATE

4
4.1

Work with Existing Tables


Modify Tables

Has
0..3

PatientPhoneNumber uniqueId {PK} patientId {FK} phoneNumber phoneType

ALTER TABLE physician DROP COLUMN salary; ALTER TABLE physician ADD salary NUMBER(8,2); ALTER TABLE physician MODIFY salary NUMBER(10,2); DROP TABLE patient; DROP TABLE patient CASCADE CONSTRAINTS; -- remove even if referenced by other tables PURGE RECYCLEBIN;

2
2.1 2.2 2.3 2.4

Work with Oracle via SQL*Plus


Connect using Instant Client Change Password Load Script from File Record Sessions

sqlplus username/password@server/database ALTER USER kzheng IDENTIFIED BY hmp669; START h:\script.sql SPOOL h:\log.txt ... SPOOL OFF

4.2

Modify Constraints

ALTER TABLE patient DISABLE CONSTRAINT pat_phy_fk; ALTER TABLE patient ENABLE CONSTRAINT pat_phy_fk; ALTER TABLE patient DROP CONSTRAINT pat_phy_fk; SET CONSTRAINTS ALL DEFERRED; SET CONSTRAINTS ALL IMMEDIATE; ALTER TABLE patient ADD CONSTRAINT pat_phy_fk FOREIGN KEY (pcp_id) REFERENCES physician(physician_id) ON DELETE CASCADE;

2.5

Miscellaneous

DESC patient; -- describe table structure SELECT table_name FROM user_tables; -- list of all tables SELECT constraint_name, constraint_type, table_name FROM user_constraints; -- list of all constraints

Insert and Update Records

Create Tables and Constraints

INSERT INTO physician VALUES (S01,Robert,Jones, M,98191.77); INSERT INTO physician (salary, name_first, name_last, gender, physician_id) VALUES (83351.28, Mary,Jones, F,P02); INSERT INTO patient VALUES (389029113,NULL,John,Smith, M,12-MAY-1983,419-29-4892); -- DD-MON-YYYY is the default date format INSERT INTO patient VALUES (389029114,S01,Rebecca,Lee, F,TO_DATE(04/01/1981,mm/dd/yyyy), 148-23-7326); COMMIT; /* make uncommitted changes permanent, only apply in record manipulation*/

CREATE TABLE physician ( physician_id VARCHAR2(10) PRIMARY KEY, name_first VARCHAR2(20) NOT NULL, name_last VARCHAR2(20) NOT NULL, gender CHAR(1) NOT NULL CHECK (gender IN(F,M)), salary NUMBER(7,2) ); CREATE TABLE patient ( patient_id VARCHAR2(10) PRIMARY KEY, pcp_id VARCHAR2(10) CONSTRAINT pat_phy_fk REFERENCES physician(physician_id) ON DELETE CASCADE, name_first VARCHAR2(20) NOT NULL, name_last VARCHAR2(20) NOT NULL,

8.4
UPDATE physician SET salary = salary*1.2 WHERE physician_id = S01; ROLLBACK; -- undo uncommitted changes

Common String Functions


Capitalize the rst letter

INITCAP() LENGTH() UPPER() LOWER() SUBSTR() TRIM() Example:

e.g. SUBSTR(zip,1,5) Remove leading and trailing spaces

5.1

Delete Records
SELECT LENGTH(TRIM( count me )) FROM dual; -- 8

DELETE patient WHERE patient_id = 389029113; DELETE physician;

8.5

Common Conversion Functions

Work with Views

TO_NUMBER() TO_CHAR(input,format) TO_DATE(input,format)

CREATE OR REPLACE VIEW rich_physician AS SELECT * FROM physician WHERE salary > 100000; SELECT * FROM rich_physician; DROP VIEW rich_physician;

8.6

Common Date Format


e.g. e.g. e.g. e.g. e.g. e.g. 01-JAN-2007 01/01/2007 SUNDAY, JANUARY 04TH SUN, January 04th 01:30:23 PM 13:30

Work with Sequences

DD-MON-YYYY (default) MM/DD/YYYY DAY, MONTH DDTH DY, Month DDth HH:MI:SS AM HH24:MI Example:

CREATE SEQUENCE seq_appt_id START WITH 1000000000 MAXVALUE 9999999999 INCREMENT BY 1; INSERT INTO appointment VALUES (seq_appt_id.NEXTVAL, ...); DROP SEQUENCE seq_appt_id;

SELECT TO_CHAR(sysdate,MM/DD/YYYY HH:MI:SS A.M.) FROM dual; -- 03/05/2007 01:31:17 A.M.

Query a Single Table

-- how many female patients have PCP? SELECT COUNT(*) FROM patient WHERE gender = F AND pcp_id IS NOT NULL; -- average physician salary, rounded to 1 decimal SELECT ROUND(AVG(salary),1) FROM physician; -- full name of those born in April -- || is used to concatenate strings SELECT name_last || , || name_first FROM patient WHERE TO_CHAR(dob,MON) = APR; -- dob ordered by last name then by first name SELECT TO_CHAR(dob,DD/MON/YYYY) FROM patient ORDER BY name_last, name_first; /*number of distinct patient last names of those born after 1979*/ SELECT COUNT(DISTINCT name_last) FROM patient WHERE dob >= 01-JAN-1980;

8
8.1

Data Manipulation
Comparison Operators
Not equal to

=, >, <, >=, <= <> IS NULL IS NOT NULL LIKE

Pattern match in strings

8.2

Basic Arithmetic Operators

+, -, *, /

8.3

Common Number Functions


# of matched records Average

COUNT() SUM() AVG() MAX() MIN() ABS() ROUND(a,b) POWER(a,b) Example:

Absolute e.g. ROUND(129.29,1) = 129.3 e.g. POWER(5,2) = 25

9.1

Pattern Match in Strings (LIKE)

-- last name contains mm SELECT name_last FROM patient WHERE name_last LIKE %mm%; -- last name contains mm, Mm, mM, or MM SELECT name_last FROM patient WHERE UPPER(name_last) LIKE %MM%;

SELECT ABS(ROUND(-1.237,2)) FROM dual; -- 1.24

-- first name starts with A SELECT name_first FROM patient WHERE name_first LIKE A%; -- first name ends with a SELECT name_first FROM patient WHERE name_first LIKE %a; /*first name contains two is separated by exactly one letter*/ SELECT name_first FROM patient WHERE name_first LIKE %i_i%;

FROM appointment GROUP BY patient_id ) );

9.2

GROUPING

-- average physician salary by gender SELECT gender, AVG(salary) FROM physician GROUP BY gender; -- which gender groups average salary is over 90k? SELECT gender, AVG(salary) FROM physician GROUP BY gender HAVING AVG(salary) > 90000;

10

Query from Multiple Tables

-- patient last name and their PCP last name SELECT patient.name_last, physician.name_last FROM patient, physician WHERE pcp_id = physician_id; -- include patients who dont have PCP (outer join) -- alias may be used to speed up coding SELECT p1.name_last, p2.name_last FROM patient p1, physician p2 WHERE pcp_id = physician_id(+); -- include physicians who are not PCP of any patients SELECT p1.name_last, p2.name_last FROM patient p1, physician p2 WHERE pcp_id(+) = physician_id; -- patient last name(s) with more than 1 appointment SELECT name_last FROM patient WHERE patient_id IN ( SELECT patient_id FROM appointment GROUP BY patient_id HAVING COUNT(*) >= 1 ); -- patient last name(s) who visited most often SELECT name_last FROM patient WHERE patient_id IN ( SELECT patient_id FROM appointment GROUP BY patient_id HAVING COUNT(*) = ( SELECT MAX(COUNT(*))

You might also like