Vous êtes sur la page 1sur 71

Chapter - 5

Structured Query Language SQL

Overview of SQL
          It is a 4 GL Oracle9i in specific DML DDL Triggers and integrity constraints Embedded and Dynamic SQL ClientClient-Server Execution and remote database access Transaction management Security OODBMS features, Data mining, spatial data, and XML data management

Basic SQL Commands


Statement SELECT INSERT UPDATE DELETE CREATE ALTER DROP RENAME COMMIT ROLLBACK SAVEPOINT GRANT REVOKE Description Data retrieval statement. Data Manipulation Language (DML). Add rows, change data, and delete few rows. Create new tables/views, remove tables/ views, and change the schema. Modified values of database are permanently written into disk, rollback the changes made. Access control can be assigned or changed.

Basic data types in Oracle


Data type CHAR (size) VARCHAR2(size DATE BLOB CLOB BFILE LONG LONG RAW NUMBER(size) NUMBER(size,d) DECIMAL FLOAT INTEGER SMALLINT Description Fixed length character. Max = 2000. Variable length character string. Max = 4000. Date. Vaild range is from Jan 1, 4712 B.C. to Dec 31, 4712 A.D. Binary large object. Max = 4GB. Character large object. Max = 4GB. Pointer to binary OS file. Character data of variable size. Max = 2GB. Raw binary data. Rest is same as LONG. Numbers. Max. size = 40 digits. Numbers. Range = 1.0E-130 to 9.9E125. Same as NUMBER. size/d can't be specified. Same as NUMBER. Same as NUMBER. size/d can't be specified. Same as NUMBER.

Example tables
Employee
SSN 1111 2222 3333 4444 5555 Name Deepak Nandagopal Pooja Prasad Reena BDate 5-Jan-62 10-Dec-60 22-Jan-65 11-Jan-57 15-Jan-85 Salary 22000 30000 18000 32000 8000 MgrSSN 4444 4444 2222 Null 4444 DNo 1 3 2 3 3

Department
DNo 1 2 3 DName Admin Research Accounts Loc Chennai Bangalore Bangalore

DDL
CREATE TABLE Department( DNo number(3) not null, DName varchar2(10) not null, Loc varchar2(15), primary key (DNo)); CREATE TABLE Employee( SSN number(4) not null, Name varchar2(20) not null, BDate date, Salary number(10,2), MgrSSN number(4), DNo number(2) not null, primary key (SSN), foreign key (MgrSSN) references Employee(SSN), foreign key (DNo) references Department(DNo));

Data Retrieval Statement (SELECT)


 Syntax
SELECT *|{[DISTINCT] column | expression} FROM table(s);

The basic SELECT statement must include the following: - A SELECT clause. - A FROM clause.

 Example-1 ExampleSELECT * FROM Employee; The * indicates that it should retrieve all the columns from Employee table. The output of this query is shown below:  Output-1 OutputSSN NAME BDATE SALARY MGRSSN DNO ---- -------------------- --------- --------- --------- --------4444 Prasad 11-JAN-57 32000 3 5555 Reena 15-JAN-85 8000 4444 3 1111 Deepak 05-JAN-62 22000 4444 1 2222 Nandagopal 10-DEC-60 30000 4444 3 3333 Pooja 22-JAN-65 18000 2222 2

 Example-2 ExampleSELECT * FROM Employee ORDER BY SSN;  Output-2 OutputSSN NAME BDATE SALARY MGRSSN DNO ----- -------------------- --------- --------- --------- --------------------------------1111 Deepak 05-JAN05-JAN-62 22000 4444 1 2222 Nandagopal 10-DEC10-DEC-60 30000 4444 3 3333 Pooja 22-JAN22-JAN-65 18000 2222 2 4444 Prasad 11-JAN11-JAN-57 32000 3 5555 Reena 15-JAN15-JAN-85 8000 4444

 Using arithmetic operators


SELECT Name, Salary, Salary * 12 FROM Employee;

 Using aliases An alias when used for a column: Renames a column heading It is useful in arithmetic calculations. AS keyword can optionally be used between column name and alias name.  Example-3 ExampleSELECT FROM OR SELECT FROM Name, Salary, Salary * 12 AS YRLY_SALARY Employee; Name, Salary, Salary * 12 "YRLY_SALARY" Employee;

ExampleExample-4

DESCRIBE Employee;
OR

DESC Employee;
OutputOutput-4

Name ------------------------------SSN NAME BDATE SALARY MGRSSN DNO

Null? -------NOT NULL NOT NULL

Type ---NUMBER(4) VARCHAR2(20) DATE NUMBER(10,2) NUMBER(4) NOT NULL NUMBER(2)

Select Statement with Where


 Example-5 ExampleSELECT Name, Salary FROM Employee WHERE Salary > 25000;  Example-6 ExampleSELECT DName, Loc FROM Department WHERE Loc = 'Bangalore';  Example-7 ExampleSELECT Name, BDate FROM Employee WHERE BDate = '11-Jan-57'; '11-Jan-

 Example-8 ExampleSELECT Name, BDate FROM Employee WHERE Salary BETWEEN 25000 AND 30000;  Example-9 ExampleSELECT SSN, Name FROM Employee WHERE DNo IN (1, 2);  Example-10 ExampleSELECT Name FROM Employee WHERE Name LIKE 'P%';  Example-11 ExampleSELECT Name, DNo FROM Employee WHERE BDate LIKE '__-JAN-__'; '__-JAN-

 Example-12 ExampleSELECT Name FROM Employee WHERE MgrSSN IS NULL;  Example-13 ExampleSELECT Name, Salary, DNo FROM Employee WHERE Salary > 30000 AND DNo = 3;  Example-14 ExampleSELECT Name, Salary FROM Employee WHERE Name LIKE 'P%' OR Salary <= 20000;  Example-15 ExampleSELECT Name, Salary, DNo FROM Employee ORDER BY DNo DESC, Name;

SQL Functions
                       ROUND(column | expr, n) TRUNC(column | expr, n) MOD(m, n) ABS(n) CEIL(n) FLOOR(n) EXP(n) POWER(n, m) SQRT(n) SIGN(n) LN(n) LOG(n) SIN(n) COS(n) TAN(n) ASIN(n) ACOS(n) ATAN(n) SINH(n) COSH(n) TANH(n) NVL(n, m) VSIZE(n) Rounds to n decimal places. If n is negative, numbers to the left are rounded. Truncates to n decimal places. Returns the remainder of m/n. Absolute value of n. Smallest integer larger than n. Largest integer smaller than n. en nm Square root of n. 1 if n is positive, -1 if negative, 0 if zero. Natural log of n (lg n) log10 n Sine of n. Cosine of n. Tangent of n. Arc sine of n (in radians). Arc cosine of n (in radians). Arc tangent of n (in radians). Hyperbolic sine value of n. Hyperbolic cosine value of n. Hyperbolic tan value of n. Null Value Substitute m for n if n = null. Storage size of n.

Working with Dates


Century Year Month Day Hour Minute Second 19 99 07 23 4 10 53

SELECT SYSDATE FROM DUAL;

 Example-16 (MONTHS_BETWEEN) ExampleSELECT MONTHS_BETWEEN(SYSDATE, '09-JAN-1983') '09-JAN"Experience" FROM DUAL;  Output-16 OutputExperience --------------247.73471  Example-17 (GREATEST & LEAST) ExampleThe function GREATEST finds the earliest date and LEAST finds the oldest date in the list. SELECT GREATEST('10-JAN-93', '10-JAN-98'), GREATEST('10-JAN'10-JANLEAST('10-JANLEAST('10-JAN-93', '10-JAN-98') '10-JANFROM DUAL;  Output-17 OutputGREATEST( LEAST('10 --------- --------10-JAN- 10-JAN10-JAN-98 10-JAN-93

Conversion Functions
 VARCHAR2 or CHAR is converted to NUMBER

 VARCHAR2 or CHAR is converted to DATE  NUMBER is converted to VARCHAR2  DATE is converted to VARCHAR2

Use of TO_CHAR
 TO_CHAR function converts a date format to a character string  Example-18 ExampleSELECT Name, Bdate, TO_CHAR(BDate, 'DD/MM/YY') AS "Formatted" FROM Employee WHERE SSN = 2222;  Example-19 ExampleSELECT FROM WHERE Name, Bdate, TO_CHAR(BDate, 'Month, ddth, YYYY') AS "Formatted" Employee Name = 'Pooja';

 Output-19 OutputNAME BDATE Formatted -------------------- --------- --------------------Pooja 22-JAN22-JAN-65 January , 22nd, 1965

 Example-20 ExampleSELECT Name, Bdate, TO_CHAR(BDate, 'fmMonth, fmddth, YYYY') AS


"Formatted"

FROM Employee;  Output Prasad 11-JAN-57 January, 11th, 1957 11-JAN Example-21 ExampleSELECT Name, Bdate, TO_CHAR(BDate, 'fmMonth, fmddth, YYYY
"at" HH:MI P.M.')AS "Formatted"

FROM Employee WHERE SSN = 2222;  Output


Nandagopal 10-DEC-60 December, 10th, 1960 at 12:00 A.M. 10-DECNote: fm suppresses unnecessary blanks Use HH12 for 12 hrs clock and HH24 for 24 hrs clock

Use of TO_DATE
 TO_DATE function is to convert any character literal string into a valid date format.  Example-22 Example SELECT TO_DATE('1-Sep-2003', 'DD/MM/YYYY') TO_DATE('1-SepFROM DUAL;  Output-22 OutputTO_DATE(' --------01-SEP01-SEP-03

 Example-23 ExampleSELECT TO_DATE('08/30/2003', 'DD/MM/YYYY') FROM DUAL;  Output-23 OutputERROR at line 1: ORAORA-01843: not a valid month

Character Functions
Program SELECT LOWER('Bangalore') FROM DUAL; SELECT UPPER('Bangalore') FROM DUAL; SELECT INITCAP('bangalore institute of technology') FROM DUAL; SELECT CONCAT('Database ', 'Management') FROM DUAL; SELECT SUBSTR('Database', 5, 4) FROM DUAL; SELECT LENGTH('Database') FROM DUAL; SELECT FROM SELECT FROM INSTR('Database', 'b') DUAL; INSTR('Database', 'x') DUAL; Output bangalore BANGALORE Bangalore Institute Of Technology

Database Management

base 8

5 0

SELECT LPAD(Salary, 8, '*') FROM Employee WHERE SSN = 1111; SELECT FROM WHERE SELECT RPAD(Salary, 8, '*') Employee SSN = 1111; LTRIM(' Database', ' ')

***22000

22000***

Database

Aggregate Functions
       COUNT AVG MAX MIN STDDEV SUM VARIANCE

 Example-24 ExampleSELECT COUNT(*) AS "No. of Employees" FROM Employee;

 Example-25 ExampleSELECT SUM(Salary) AS Total FROM Employee;

 Example-26 ExampleSELECT Name, MAX(Salary), MIN(Salary) Name, FROM Employee;

GROUP BY Clause
    The rules to be followed while using GROUP BY clause are given below: You can't have non-group function or column in SELECT clause. Group functions ignore nulls. By default the result of GROUP BY clause sort the data in ascending order. Example:
SELECT DNo, SUM(Salary), COUNT(*), AVG(Salary) FROM Employee GROUP BY DNo;

 Example-27 ExampleSELECT DNo, SUM(Salary), COUNT(*), AVG(Salary) FROM Employee GROUP BY DNo, MgrSSN;  HAVING clause
SELECT FROM GROUP BY HAVING DNo, AVG(Salary) Employee DNo DNo = 3;

The order of evaluation when all the clauses are specified is given below: 1. First all rows matching the WHERE conditions are retrieved. 2. These rows are grouped using the column(s) in GROUP BY clause. 3. Finally, groups matching the HAVING clause condition are retained. SELECT DNo, AVG(Salary) FROM Employee WHERE BDate LIKE '__-JAN-__' '__-JANGROUP BY DNo HAVING MAX(Salary) > 10000;

MULTITABLE QUERIES
 Simple Equi-Joins : guidelines Equi Table names in the FROM clause is separated with commas. Use appropriate joining condition. This means that the foreign key of table1 will be made equal to the primary key of table2. When the attributes or columns have the same names, tag them with table names using dot notation. Without proper joining condition or attributes the SQL will display the Cartesian product of the tables in the FROM clause.

 Example-28: Display the employee names and Examplethe department names for which they work. work. SELECT Name, DName FROM Employee, Department WHERE Employee.DNo = Department.DNo;  Example-29 : Display only employees working Examplefor Accounts department. SELECT Name, Salary, DName FROM Employee, Department WHERE (Employee.DNo = Department.DNo) AND (DName = 'Accounts');

SelfSelf-Join and Table Aliases


 Example-30 : Find the employee who earns Examplemore than Nandagopal. SELECT e1.Name, e1.Salary FROM Employee e1, Employee e2 WHERE (e1.Salary > e2.Salary) AND (e2.Name = 'Nandagopal');

Right-Outer Join Right Example-31 : ExampleSELECT Name, DName FROM Employee E, Department D WHERE E.Name = D.DName(+);  Output-31 OutputNAME DNAME -------------------- ---------Deepak Nandagopal Pooja Prasad Reena

LeftLeft-Outer Join
 Example-32 ExampleSELECT Name, DName FROM Employee E, Department D WHERE E.Name(+) = D.DName;  Output-32 OutputNAME DNAME -------------------- ---------Accounts Admin Research

NESTED QUERIES or SUB QUERIES


SELECT <column(s)> FROM table WHERE <condn operator> (SELECT <column> FROM table);  Outer query uses the result of the inner query.  If the inner query returns only one row it is called as single row sub queries. queries.  Alternatively if the inner query returns a set of rows (more than one row) it is classified as multiple-row sub multiplequeries. queries.  The comparison condition may be a single row operator like >, =, >=, <, <=, <>) or multiple row operators like IN, ANY, ALL.

Single-Row Nested Queries Single Display the names of the employees working for Accounts department. SELECT Name FROM Employee WHERE DNo = (SELECT DNO FROM Department WHERE DName = 'Accounts');  Display names of employees whose salary is greater than the employee SSN=1111. SELECT Name FROM Employee WHERE Salary > (SELECT Salary FROM Employee WHERE Name = 1111);

 Example-33 Example Display all the employees drawing more than or equal to the average salary of department number 3. SELECT Name, Salary FROM Employee WHERE Salary >= (SELECT AVG(Salary) FROM Employee GROUP BY DNO HAVING DNo = 3);

Multiple-Row Nested Queries Multiple IN: Equal to any member in the list. IN:  ANY: Compare value to each value ANY: returned by the subquery.  ALL: Compare value to all the values ALL: returned by the subquery.

 Display the name of the highest paid employee.


SELECT Name, Salary FROM Employee WHERE Salary = (SELECT MAX(Salary) FROM Employee); SELECT Name, Salary FROM Employee WHERE Salary IN (SELECT MAX(Salary) FROM Employee); Both '=' and 'IN' works, because the inner query produces a single tuple.

 Find the Name and Salary of people who draw in the range Rs. 20,000 to Rs. 40,000. Select Name, Salary from Employee where Salary = (Select Salary from Employee where Salary between 20000 and 40000);
 Error: ORA-01427: single-row subquery returns more than one row ORAsingle-

 Correct Query:

Select Name, Salary from Employee where Salary IN (Select Salary from Employee where Salary between 20000 and 40000);

ANY and ALL


Operator Meaning Example Less than the e < ANY (5,3,8): e is less than any <ANY maximum. single item in the list (5,3,8). Even 7 qualifies, because 7 < 8. More than >ANY e > ANY (5,3,8): e is less than any the minimum. single item in the list (5,3,8). Even 4 qualifies, because 4 > 3. Same as IN. e = ANY(5,3,8). All values in the =ANY list qualify. Less than the e < ALL (5,3,8): Anything below 3 <ALL maximum. qualifies. More than >ALL e > ALL (5,3,8): Anything greater the minimum. than 8 qualifies. Not equal to e != (5,3,8): Anything other than !=ALL anything. 5,3, and 8 qualifies.

 Example-34: ExampleSELECT Name, Salary FROM Employee WHERE Salary < ANY (SELECT FROM WHERE  Example-35: ExampleSELECT Name, Salary FROM Employee WHERE Salary > ANY (SELECT FROM WHERE

Salary Employee DNo = 3);

Salary Employee DNo = 3);

 Example-35: ExampleSELECT Name, Salary FROM Employee WHERE Salary < ALL (SELECT Salary FROM Employee WHERE DNo = 3);  Example-36: ExampleSELECT Name, Salary FROM Employee WHERE Salary > ALL (SELECT Salary FROM Employee WHERE DNo = 3);  >ALL means greater than the greatest and <ALL means less than the lowest value.

CREATING and ALTERING DATABASE OBJECTS


 Table: A tabular structure that stores data. Table:  View: A tabular structure similar to a table View: but it is a collection of one or more tables.  Sequence: Automatically generates a Sequence: sequence of numbers.  Index: Provides an efficient access Index: structure.

CREATE TABLE Employee( SSN Number(4) not null, Name Varchar2(20) not null, BDate Date, Salary Number(10,2), MgrSSN Number(4), DNo Number(2) not null, Primary Key (SSN), Foreign Key (MgrSSN) references Employee(SSN), Foreign Key (DNo) references Department(DNo));

 Names of the tables/views SELECT * FROM TAB;  Schema details of a table DESC Employee; Name Null? Type ------------------------------- -------- ---SSN NOT NULL NUMBER(4) NAME NOT NULL VARCHAR2(20) BDATE DATE SALARY NUMBER(10,2) MGRSSN NUMBER(4) DNO NOT NULL NUMBER(2)

 ON DELETE constraint CREATE TABLE Department( DNo Number(3) not null, DName Varchar2(10) not null, Loc Varchar2(15), Primary Key (DNo), Manager Number(4) references
Employee(SSN) ON DELETE CASCADE);

 Creating tables with a Subquery CREATE TABLE Emp AS SELECT SSN, Name, Salary FROM Employee;

ALTER TABLE Statement


ALTER TABLE Employee ADD Phone Number(7) not null;
(Note: to add not null constraint, the column must be empty)

ALTER TABLE Employee MODIFY Phone Varchar2(10);


(Note: to modify data type, the column must be empty)

ALTER TABLE Employee DROP COLUMN Phone;

Disabling and Enabling Constraints


CREATE TABLE Employee( Salary Number(10,2) CONSTRAINT Ch_Sal CHECK (Salary > 0)); ALTER TABLE Employee DISABLE CONSTRAINT Ch_Sal; ALTER TABLE Employee ENABLE CONSTRAINT Ch_Sal;

CREATE VIEW Statement


    The advantages of using views are: It restricts data access. Reduces joining of more tables often. Many users can access a particular view with proper privileges. Example
CREATE VIEW AS SELECT FROM WHERE View created. Emp_Dept SSN, Name, DName, Salary Employee E, Department D E.DNo = D.DNo;

Restrictions on Views
There are few restrictions on views:  You can not insert new rows nor update the view table.
(Error Message: ORA-01776: cannot modify more than one base table ORAthrough a join view)

 You can not alter the constraints or data types of the columns.  If any changes are made to the base table(s), view table will get updated automatically.

CREATE SEQUENCE Statement


 How to use a Sequence?
Step-1: StepCREATE SEQUENCE Dept_Seq START WITH 10; Step-2: StepINSERT INTO Department values(Dept_Seq.NEXTVAL, 'Sales', 'Belgaum');

 Dropping a sequence DROP SEQUENCE Dept_Seq;  Creating an index for Employee table on Name CREATE INDEX IDXSSN ON Employee (Name);  Dropping an index DROP INDEX IDXSSN;

Rights
 SQL Server 2000 GRANT { ALL | statement [ ,...n ] } TO security_account [ ,...n ]  Object permissions:

GRANT { ALL [ PRIVILEGES ] | permission [ ,...n ] } { [ ( column [ ,...n ] ) ] ON { table | view } | ON { table | view } [ ( column [ ,...n ] ) ] | ON { stored_procedure | extended_procedure } | ON { user_defined_function } } TO security_account [ ,...n ] [ WITH GRANT OPTION ] [ AS { group | role } ]

Rights (Contd)
 Oracle 9i: GRANT {objectprivileges | ALL} [(columnname), {objectprivileges(columnname)] ON objectname TO {username | rolename | PUBLIC} [WITH GRANT OPTION] where, objectprivileges: INSERT or UPDATE objectname : table/view/sequence

Example: GRANT UPDATE (ssn) ON employee TO bit;

Creating Users
1) CONNECT SYSTEM/MANAGER; 2) CREATE USER Guest IDENTIFIED BY bit; 3) GRANT CONNECT, RESOURCE TO Guest;
4) REVOKE Select ON Employee FROM Guest;

Commit, Rollback, etc.

Examples
 Objective 1
Create a user account called sng with password apple. create user sng identified by apple; Format for Grant command grant {system privilege} to user [with admin options] system privilege: select/delete/insert/update and instead of user you can specify public as well. Format for Revoke command: revoke {system privilege} from user [with admin options] Revoking does not delete a user from Oracle or remove any tables created by him. It simply prohibits him from accessing the database.

Examples (contd)
 Objective 2 Create another user deepak identified by rock. create user deepak identified by rock; At this point of time you must provide grant permission for connect and resource. Therefore execute the following commands: grant connect, resource to sng; grant connect, resource to deepak; connect sng/apple;

Examples (contd)
 Objective 3 This objective shows how to grant permission to all. This can be done by using the keyword public. For example, grant select on EMPLOYEE to public; This statement grants access to Employee table to all and the following command removes this privilege from all. revoke select on EMPLOYEE from public;  Provide select permission to deepak for the table EMPLOYEE,assuming that this table is owned by sng. grant select on EMPLOYEE to deepak;

 Objective 5
Display the contents of EMPLOYEE table. connect deepak/rock; // deepak gets connected select * from sng.EMPLOYEE; Unless a synonym is used, the table name must be preceded by the username of the owner of the table. Otherwise you will get an error. The user deepak can create a view to access the EMPLOYEE table. create view EMPLOYEE as select * from sng.EMPLOYEE;  Creating a synonym. create synonym EMPLOYEE for sng.EMPLOYEE; If the table/view is not owned by a particular user, then he can not pass the granting of that table/view to other users. ERROR: grant select on sng.EMPLOYEE to reena;

Here, reena is some other user.

DML Statements
 INSERT Statement INSERT INTO Employee VALUES (1111, 'Deeapk', ''5-Jan-62', 22000, 4444, 1); 5 Jan-62',  Inserting through Keyboard INSERT INTO Employee
VALUES (&SSN, &Name, &BDate, &Salary, &MgrSSN, &DNo);

 Inserting dates INSERT INTO Employee VALUES (6666, 'John', TO_DATE('5-Jan-2003 3:40', TO_DATE('5-Jan'DD-MM'DD-MM-YYYY HH24:SS'), 22000, 4444, 1);

 Inserting rows from an existing table INSERT INTO EMP2 SELECT * FROM Employee;  DELETE Statement DELETE Employee WHERE SSN = 1111;  UPDATE Statement UPDATE Employee SET DNo = 1 WHERE Name = 'Nandagopal';  To hike the salary of all employees by 10%. UPDATE Employee SET Salary = Salary * 1.05;

ADDITIONAL EXAMPLES
 Company Database Example Employee( Employee(SSN Char(9), Name Varchar2(20), Bdate Date, Address Varchar2(30), Sex Char(1),Salary Number(10,2), SuperSSN Char(9), DNo Number(2)); Department( Department(Dnumber Number(2), DName Varchar2(10), MgrSSN Char(9), MgrStartDate Date); Project( Project(PNumber Number(2), PName Varchar(10), Plocation Varchar2(15), Dnum Number(2)); Dependent( Dependent(ESSN Char(9), Dependent_Name Varchar2(15), Sex Char, Bdate Date, Relationship Varchar2(10)); Dept_Locations( Dept_Locations(DNumber Number(2), Dlocation Varchar2(15)); Works_On( Works_On(ESSN Char(9), PNo Number(2), Hours Number(3,1));

 Example-1: Find all employees who were born during 1980. Example-

SELECT Name FROM EMPLOYEE WHERE BDate LIKE '__-___-80'; '__-___ Example-2: Calculate the wages earned by each employee, Exampleassuming the remuneration for each hour is Rs. 250.00.

SELECT Essn, Sum(Hours),Sum(Hours) * 250 FROM Works_On GROUP BY Essn;


 Example-3: Retrieve the department number, number of employees Examplein each department and their average salary.

SELECT DNo, Count(*), Avg(Salary) FROM Employee, Department WHERE DNo = DNumber GROUP BY DNo;

ExampleExample-4: For each project, retrieve the project number, the project name, and the number of employees who work on that project. SELECT PNumber, PName, Count(*) FROM Project, Works_On WHERE PNumber = PNo GROUP BY PNumber, PName; ExampleExample-5: For each project on which more than 3 employees work, retrieve the project number, the project name, and the number of employees who work on that project. project. SELECT PNumber, PName, Count(*) FROM Project, Works_On WHERE PNumber = PNo GROUP BY PNumber, PName HAVING Count(*) > 3; ExampleExample-6: Print the number of employees whose salaries exceed more than Rs. 25,000/- in each department. Display the department name also. 25,000/SELECT DName, Count(*) FROM Department, Employee WHERE DNumber = DNo AND Salary > 25000 GROUP BY DName;

STUDENT Database Example


Student( Student(Student_id char(10), SName varchar2(10), Major varchar2(5), GPA number(3,1)) Faculty( Faculty(Faculty_id char(4), FName char(4), Dept varchar2(5), Desig varchar2(5), Salary number(10,2)) Course( Course(Course_id char(5), CName varchar2(10), Faculty_id char(4)) Enrol( Enrol(Course_id char(5), Student_id char(10), Grade char(1))

 Example-1: List the names of all students enrolled for the course Example'IS6T1'. SELECT SName FROM Student WHERE Student_id In( SELECT Student_id FROM Enrol WHERE Course_id = 'IS6T1');  Example-2: List the names of students enrolled for the course 'IS6T1' Exampleand have received 'A' grade. SELECT SName FROM Student WHERE Student_id In( SELECT Student_id FROM Enrol WHERE Course_id = 'IS6T1' AND Grade = 'A');  Example-3: List all the departments having an average salary of Exampleabove Rs. 10000. SELECT Dept FROM Faculty GROUP BY Dept HAVING AVG(Salary) > 10000;

 Example-5: List the names of all faculty Examplemembers beginning with 'P' and ending with letter 'A'.
SELECT FROM WHERE FName Faculty
SUBSTR(FName,1,1) LIKE 'P' AND SUBSTR(FName,-2,1) LIKE 'A'; SUBSTR(FName,-

More Examples
 Book Dealer Database
AUTHOR (Authorid : Int, Name : String, City : String, Country : String) PUBLISHER (Publisherid : Int, Name : String, City : String, Country : String) CATALOG (Bookid : Int, Title : String, Authorid : Int, Publisherid : Int, Categoryid : Int, ear : Int, Price : Int) CATEGORY (Categorid : Int, Description : String) ORDER_DETAILS (OrderNo : Int, Bookid : Int, Quantity : Int)

Queries
 Give the details of the authors who have 2 or more books in the catalog and the price of the books is greater than the average price of the books in the catalog and the year of publication is after 2000. Query
select C.Authorid, A.AName from Catalog C, Author A where A.Authorid = C.Authorid and C.Year > 2000 and C.Price > (Select Avg(Price) from Catalog) group by C.Authorid, A.AName having count(C.Authorid) >= 2;

Find the number of the book which has maximum sales.


Create View SalesDetails as ( Select OD.Bookid as Book#, C.Price as Cost, Sum(OD.Quantity) as Qty, Sum(OD.Quantity * C.Price) as Sales from Order_Details OD, Catalog C, Author A where OD.Bookid = C.Bookid and C.Authorid = A.Authorid group by OD.Bookid, C.Price); select A.Authorid, A.AName,S.book#, S.Sales from Author A, catalog C, Salesdetails S where A.Authorid = C.Authorid and S.Book# = C.Bookid and sales = (select Max(Sales) from salesdetails);

 Student Enrollment Database


STUDENT (RegNo : String, Name : String, Major : String, BDate : date) COURSE (Course# : Int, CName : String, Dept : String) ENROLL (RegNo : String, Course# : Int, Sem : Int, Marks : Int) BOOK_ADOPTION (Course# : Int, Sem : Int, ISBN : Int) TEXT (ISBN : Int, BookTitle : String, Publisher : String, Author : String)

Produce a list of text books (include Course#, ISBN, BookTitle) in the alphabetical order for courses offered by the 'CS' department that use more than two books Select C.Course#, T.ISBN, T.BookTitle from Course C,Book_Adoption BA, Text T where C.Course# = BA.Course# and BA.ISBN = T.ISBN and C.Dept = 'CSE' group by C.Course#, T.ISBN, T.BookTitle order by T.BookTitle;

End of Chapter 5

Vous aimerez peut-être aussi