Professional Documents
Culture Documents
Oracle Cheatsheet
Oracle Cheatsheet
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
Has
0..*
Appointment AssignedTo appointmentId {PK} patientId {FK} physicianId {FK} appointmentDateTime reasonForVisit
AssignedTo
0..* 1..1
4
4.1
Has
0..3
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
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 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
5.1
Delete Records
SELECT LENGTH(TRIM( count me )) FROM dual; -- 8
8.5
CREATE OR REPLACE VIEW rich_physician AS SELECT * FROM physician WHERE salary > 100000; SELECT * FROM rich_physician; DROP VIEW rich_physician;
8.6
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;
-- 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
8.2
+, -, *, /
8.3
9.1
-- 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%;
-- 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%;
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
-- 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(*))