Mysql
Mysql
Assignment –1
Create the following tables with the given structures and insert sample data as
specified: -
A) SALESPEOPLE
Snum number(4)
Sname varchar2(10)
city varchar2(10)
Comm number(3,2)
Answer:
CREATE TABLE salespeople ( snum number(4), sname varchar2(10), city varchar2(10),
comm number(3,2) );
B) CUSTOMERS
Cnum number(4)
Cname varchar2(10)
City varchar2(10)
Rating number(4)
Snum number(4)
Answer:
CREATE TABLE customers ( cnum number(4), cname varchar2(10), city varchar2(10),
rating number(4), snum number(4) );
C) ORDERS
Onum number(4)
Amt number(7,2)
Odate date
Cnum number(4)
Snum number(4)
Answer:
CREATE TABLE orders ( onum number(4), amt number(7,2), odate date, cnum number(4),
snum number(4) );
SALES PEOPLE
ORDERS
INSERT INTO customers
VALUES(&cnum,’&cname’,’&city’,&rating,&snum);
Assignment –2
Assignment –3
##Overview of SQL.
Ans :- Yes.
ASSIGNMENT-4
#Retrieving Information from Tables.
1)Write a select command that produces the order number, amount, and date for all
rows in the Orders table.
SELECT onum,
amt,
odate
FROM orders;
UM AMT ODATE
10 rows selected.
2) Write a query that produces all rows from the Customers table for which the
salesperson’s number is 1001.
SELECT *
FROM customers
WHERE snum=1001;
3) Write a query that displays the Salespeople table with the columns in the
following order: city, sname, snum, comm.
SELECT city,
sname,
snum,
comm.
FROM salespeople;
4) Write a select command that produces the rating followed by the name of each
customer in San Jose.
SELECT rating||' '||cname "employee rating"
FROM customers
WHERE city='sanjose';
employee rating
300 cisneros
5) Write a query that will produce the snum values of all salespeople (suppress the
duplicates) with orders in the Orders table.
SELECT DISTINCT snum,
onum
FROM salespeople
ORDER BY snum;
SNUM ONUM
1002 3007
1002 3010
1001 3011
1004 3002
1002 3005
1007 3006
1003 3009
1001 3008
1007 3001
1001 3003
10 rows selected.
Assignment –5
1) Write a query that will give you all orders for more than Rs. 1,000.
SELECT *
FROM orders
WHERE amt>1000;
7 rows selected.
2) Write a query that will give you the names and cities of all salespeople in
London
with a commission above .10.
SELECT sname,
city
FROM salespeople
WHERE city='London'
AND comm >.10;
SNAME CITY
peel London
Motika London
3) Write a query on the Customers table whose output will exclude all customers
with a rating <= 100, unless they are located in Rome.
SELECT *
FROM customers
WHERE rating>100
OR city='rome';
SELECT *
FROM Orders
WHERE (amt < 1000
OR NOT (odate = ‘03-OCT-1990’
AND cnum > 2003));
Display all tauple from order except date is 03-oct 1990 with cnum >2003 or orders
where amt is less then 1000 or
Display all order having amount less then 1000 or having order except on 03-oct-
1990
with cnum>2003.
12
OR comm <.14);
Assignment –6
1) Write two different queries that would produce all orders taken on October 3rd
or
4th, 1990.
SELECT *
FROM orders
WHERE odate='03-oct-1990'
OR odate='04-oct-1990';
7 rows selected.
SET feedback OFF; --feed back disable
SELECT *
FROM orders
WHERE odate BETWEEN '03-oct-1990' AND '04-oct-1990';
2) Write a query that selects all of the customers serviced by Peel or Motika.
(Hint: the snum field relates the two tables to one another).
SELECT *
FROM customers
WHERE snum IN
(SELECT snum
FROM salespeople
WHERE sname='Peel'
OR sname='Motika');
3) Write a query that will produce all the customers whose names begin with a
letter
from ‘A’ to ‘G’.
SELECT *
FROM customers
WHERE cname LIKE 'a%'
OR cname LIKE 'b%'
OR cname LIKE 'C%'
OR cname LIKE 'D%'
OR cname LIKE 'E%'
OR cname LIKE 'F%'
OR cname LIKE 'G%' ;
4 rows selected.
Second approach
SELECT *
FROM customers
WHERE substr(cname,1,1) BETWEEN 'A' AND 'G';
4) Write a query that selects all customers whose names begin with the letter ‘C’.
SELECT *
FROM customers
WHERE cname LIKE 'C%';
2 rows selected.
5) Write a query that selects all orders except those with zeroes or NULLs in the
amt
field.
SELECT *
FROM orders
WHERE amt IS NOT NULL;
10 rows selected.
Assignment –7
TOTAL_ORDER
5
1 row selected.
2) Write a query that counts the number of different non-NULL city values in the
Customers table.
EMPTY_CITY
MIN(AMT) CNUM
767.19 2001
4723 2006
1900.1 2007
5160.45 2003
75.75 2004
18.69 2008
1713.23 2002
7 rows selected.
4) Write a query that selects the first customer, in alphabetical order, whose name
begins with G.
SELECT *
FROM customers
WHERE cname LIKE 'G%'
ORDER BY cname;
2 rows selected.
highest rating
300
1 row selected.
6) Write a query that counts the number of salespeople registering orders for each
day. (If a salesperson has more than one order on a given day, he or she should be
counted only once.).
SELECT count(odate)||' SALES PERSON REGISTREDDON' "TOTAL",
odate
FROM orders
GROUP BY odate;
TOTAL ODATE
Assignment –8
1) Assume each salesperson has a 12% commission. Write a query on the orders
table that will produce the order number, the salesperson number, and the amount
of the salesperson’s commission for that order.
SELECT onum,
snum,
amt,
(amt*12)/100 commision
FROM orders;
10 rows selected.
2) Write a query on the Customers table that will find the highest rating in each
city.
Put the output in this form:
10 rows selected.
3) Write a query that lists customers in descending order of rating. Output the
rating
field first, followed by the customer’s name and number.
SELECT rating,
cname,
snum
FROM customers
ORDER BY rating DESC;
4) Write a query that totals the orders for each day and places the results in
descending order.
SELECT count(odate) "TOTAL ORDERS",
odate
FROM orders
GROUP BY odate
ORDER BY "TOTAL ORDERS";
1 05-OCT-90
2 06-OCT-90
2 04-OCT-90
5 03-OCT-90
Assignment – 9
1) Write a query that lists each order number followed by the name of the customer
who made the order.
SELECT onum,
cname
FROM orders o,
customers c
WHERE c.cnum=o.cnum ;
ONUM CNAME
3001 cisneros
3003 hoffman
3002 pereira
3006 cisneros
3009 giovanni
3007 grass
3008 clemens
3010 grass
3011 clemens
9 rows selected.
2) Write a query that gives the names of both the salesperson and the customer for
each order along with the order number.
SELECT sname,
cname,
onum
FROM orders o,
customers c,
salespeople s
WHERE o.snum=c.snum
AND o.snum=s.snum;
13 rows selected.
OLD STYLE:
SELECT cname,
s.snum,
comm*100 "RATE OF COMM."
FROM customers c,
salespeople s
WHERE c.snum=s.snum
AND comm>.12 ;
grass 1002 13
cisneros 1007 15
liu 1002 13
NEW STYLE:
SELECT cname,
snum,
comm*100 "RATE OF COMM."
FROM customers
JOIN salespeople USING (snum)
WHERE comm>.12;
CNAME SNUM RATE OF COMM.
grass 1002 13
cisneros 1007 15
liu 1002 13
4) Write a query that calculates the amount of the salesperson’s commission on each
order by a customer with a rating above 100.
SELECT amt,
comm
FROM salespeople
JOIN customers using(snum)
JOIN orders using(snum)
WHERE rating>100;
AMT COMM
18.69 .15
5160.45 .13
5160.45 .13
1098.16 .15
1713.23 .1
75.75 .13
75.75 .13
1309.95 .13
1309.95 .13
9 rows selected.
Assignment – 10
1) Write a query that produces all pairs of salespeople who are living in the same
city.
Exclude combinations of salespeople with themselves as well as duplicate rows with
the order reversed.
SELECT m.sname,
n.sname,
m.city
FROM salespeople m,
salespeople n
WHERE m.city=n.city
AND m.sname<n.sname;
2) Write a query that produces the names and cities of all customers with the same
rating
as Hoffman.
SELECT cname,
city
FROM customers
WHERE rating =
(SELECT rating
FROM customers
WHERE cname='hoffman');
CNAME CITY
hoffman london
clemens london
pereira rome
Assignment – 11
##SubQueries.
1) Write a query that uses a subquery to obtain all orders for the customer named
Cisneros. Assume you do not know his customer number (cnum).
SELECT onum "ALL ORDERS",
cnum
FROM orders
WHERE cnum=
(SELECT cnum
FROM customers
WHERE cname='cisneros');
ALLORDERS CNUM
3001 2008
3006 2008
2) Write a query that produces the names and ratings of all customers who have
above-average orders.
SELECT cname,
rating
FROM customers
WHERE cnum IN
(SELECT cnum
FROM orders
WHERE amt >
(SELECT avg(amt)
FROM orders));
CNAME RATING
liu 200
clemens 100
3) Write a query that selects the total amount in orders for each salesperson for
whom this total is greater than the amount of the largest order in the table.
SELECT sum(amt)
FROM orders
GROUP BY snum
HAVING sum(amt)>
(SELECT max(amt)
FROM orders);
SUM(AMT) 15382.07
Assignment – 12
1) Write a query that selects all customers whose ratings are equal to or greater
than
ANY of Serres’.
SELECT *
FROM customers
WHERE rating >=ANY
( SELECT rating
FROM customers
WHERE snum IN
( SELECT snum
FROM salespeople
WHERE sname='serres' ) );
2) Write a query using ANY or ALL that will find all salespeople who have no
customers located in their city.
SELECT snum
FROM salespeople
WHERE (snum,
city) NOT IN
(SELECT snum,
city
FROM customers);
SNUM
1007
1004
1003
3) Write a query that selects all orders for amounts greater than any for the
customers in London.
SELECT *
FROM orders
WHERE amt> ANY
( SELECT amt
FROM orders
WHERE cnum IN
( SELECT cnum
FROM customers
WHERE city='london' ) );
7 rows selected.
7 rows selected.
Assignment – 13
1) Create a union of two queries that shows the names, cities, and ratings of all
customers. Those with rating of 200 or greater will also have the words “High
Rating”, while the others will have the words “Low Rating”.
SELECT cname,
city,
'HIGH RATING' RATING
FROM customers
WHERE rating>200
UNION
SELECT cname,
city,
'LOW RATING' RATING
FROM customers
WHERE rating <=200;
7 rows selected.
2) Write a command that produces the name and number of each salesperson and
each customer with more than one current order. Put the results in alphabetical
order.
SELECT sname,
snum,
cname
FROM salespeople
JOIN customers using(snum)
WHERE snum IN
(SELECT snum
FROM customers
GROUP BY snum
HAVING count(snum)>1)
ORDER BY sname,
cname;
3) Form a union of three queries. Have the first select the snums of all
salespeople in
San Jose; the second, the cnums of all customers in San Jose; and the third the
onums of all orders on October 3. Retain duplicates between the last two queries
but eliminate any redundancies between either of them and the first.
(Note: in the sample tables as given, there would be no such redundancy. This is
besides the point.)
SELECT snum
FROM salespeople
WHERE city='san jose'
UNION
SELECT DISTINCT snum
FROM orders
WHERE snum IN
(SELECT snum
FROM orders
WHERE odate LIKE '03-OCT-%');
SNUM
1001
1002
1004
1007
Assignment – 14
1) Write a command that puts the following values, in their given order, into the
salespeople table: city – San Jose, name – Blanco, comm – NULL, snum – 1100.
INSERT INTO salespeople (city,sname,comm,snum)
VALUES('San Jose',
'Blanco',
NULL,
1100);
2) Write a command that removes all orders from customer Clemens from the
Orders table.
SELECT *
FROM orders;
10 rows selected.
DELETE
FROM orders
WHERE cnum IN
(SELECT cnum
FROM customers
WHERE cname='Clemens');
SELECT *
FROM orders;
ONUM AMT ODATE CNUM SNUM
8 rows selected.
ROLLBACK TO savepoint a;
--Rollback complete.
SELECT *
FROM orders;
10 rows selected.
3) Write a command that increases the rating of all customers in Rome by 100.\
SELECT *
FROM customers;
7 rows selected.
savepoint a;
--Savepoint created.
UPDATE customers
SET rating=rating+100;
--7 rows updated.
SELECT *
FROM Customers;
7 rows selected.
ROLLBACK TO savepoint a;
--Rollback complete.
SELECT *
FROM customers;
7 rows selected.
4) Salesperson Serres has left the company. Assign her customers to Motika.
UPDATE customers
SET snum=
(SELECT snum
FROM salespeople
WHERE sname='serres')
WHERE snum =
(SELECT snum
FROM salespeople
WHERE sname='Motika');
Assignment – 15
1) Assume there is a table called Multicust, with all of the same column
definitions
as Salespeople. Write a command that inserts all salespeople with more than one
customer into this table.
CREATE TABLE Multicast AS
SELECT *
FROM salespeople
WHERE snum IN
(SELECT snum
FROM customers
GROUP BY snum
HAVING count(snum)>1);
SELECT *
FROM multicust;
SNUM SNAME CITY COMM
DELETE customers
WHERE cnum=ANY
(SELECT cnum
FROM orders
WHERE cnum NOT IN
(SELECT cnum
FROM customers));
UPDATE salespeople
SET comm=comm*1.20
WHERE snum IN
(SELECT snum
FROM orders
WHERE amt>300);
--5 rows updated.
SELECT *
FROM salespeople;
Assignment – 16
1) Write a command that will enable a user to pull orders grouped by date out of
the
Orders table quickly.
SQL>
CREATE INDEX d_order ON orders(odate);
--Index created.
2) If the Orders table has already been created, how can you force the onum field
to
be unique (assume all current values are unique)?
DESCRIBE orders;
ONUM NUMBER(4)
AMT NUMBER(7,2)
ODATE DATE
CNUM NUMBER(4)
SNUM NUMBER(4)
--Table altered.
DESCRIBE orders;
3) Create an index that would permit each salesperson to retrieve his or her orders
grouped by date quickly.'
CREATE INDEX I_DATE ON orders(odate);
4) Let us suppose that each salesperson is to have only one customer of a given
rating, and that this is currently the case. Enter a command that enforces it.
ALTER TABLE customers MODIFY rating PRIMARY KEY;
Assignment – 17
1) Create the Orders table so that all onum values as well as all combinations of
cnum and snum are different from one another, and so that NULL values are
excluded from the date field.
composit key:
CREATE TABLE orders1 ( onum number(4), cnum number(4), sname number(4), odate date
NOT NULL, CONSTRAINT p_k_1 PRIMARY key(onum,cnum,sname) );
--Table created.
2) Create the Salespeople table so that the default commission is 10% with no
NULLS permitted, snum is the primary key, and all names fall alphabetically
between A and M, inclusive (assume all names will be uppercase).
CREATE TABLE salespeople1 ( comm number(3) DEFAULT 10, snum number(4) PRIMARY KEY,
sname varchar2(10) check(substr(upper(sname),1,1) BETWEEN 'A' AND 'B') );
--Table created.
3) Create the Orders table, making sure that the onum is greater than the cnum, and
the cnum is greater that the snum. Allow no NULLS in any of these three fields.
CREATE TABLE orders12 ( onum number(4), amt number(7,2), odate date, cnum
number(4), snum number(4), CONSTRAINT on_cn_sn check(cnum>cnum
AND cnum>snum) );
--Table created.
Assignment – 18
1) Create a table called Cityorders. This will contain the same onum, amt and snum
fields as the Orders table, and the same cnum and city fields as the Customers
table, so that each customer’s order will be entered into this table along with his
or her city. Onum will be the primary key of Cityorders. All of the fields in
Cityorders will be constrained to match the Customers and Orders tables. Assume
the parent keys in these tables already have the proper constraints.
CREATE TABLE cityorders
SELECT onum,
amt,
snum,
cunu,
city
FROM orders
NATURAL JOIN customers;
DESC cityorders;
2) Redefine the Orders table as follows:- add a new column called prev,
which will identify, for each order, the onum of the previous order for that
current
customer.
Implement this with a foreign key referring to the Orders table itself.
The foreign key should refer as well to the cnum of the customer,
providing a definite enforced link between the current order and the one
referenced.
ALTER TABLE cityorders ADD
FOREIGN key(cnum) REFERENCES customers(cnum);
-- Table altered.
Remember :
To rename a column name: alter table cityorders rename column onum to nonum;
When join two table using natural join you can’t use alias in the where condithon.
Aggregate function generally allowed in where clause it can be used with having in.
To find out how many constraints are available you can check the user_constraint
dictionary by following query
SELECT CONSTRAINT_NAME
FROM user_constraints;
To delete a constraint you cannot delete from the user_dictionary you have to write
ALTER TABLE <TABLE_NAME>
DROP CONSTRAINT <CONSTRAINT_NAME>
Assignment – 19
##Views.
1) Create a view that shows all of the customers who have the highest ratings.
CREATE VIEW h_rated_cust AS
SELECT *
FROM customers
WHERE rating=
(SELECT max(rating)
FROM customers);
--View created.
SELECT *
FROM h_rated_cust;
--View created.
SELECT *
FROM tns_city;
LONDON 2
BARCELONA 1
SAN JOSE 1
SAN JOSE 1
NEWYORK 1
3) Create a view that shows the average and total orders for each salesperson after
his or her name. Assume all names are unique.
CREATE VIEW AV_TOT_SAL AS
SELECT sname,
avg(onum) AVERAGE,
count(onum) "TOTAL ORDERS"
FROM salespeople
JOIN orders using(snum)
GROUP BY sname;
--View created.
SELECT *
FROM AV_TOT_SAL;
Motika 3002 1
Axelrod 3009 1
Peel 3007.33333 3
Serres 3007.33333 3
Rifkin 3003.5 2
--View created.
SELECT *
FROM M_C;
SNAME CNAME
Peel Hoffman
Axelrod Giovanni
Serres Grass
Peel Clemens
Rifkin Cisneros
Serres Pereira
Serres Liu
7 rows selected.
HIERARCHICAL QUERY SOLUTION:-
SELECT deptno,
LTRIM(MAX(SYS_CONNECT_BY_PATH (ename, ',')),',') EMP_STRING
FROM
(SELECT empno,
ename,
deptno,
row_number() OVER (PARTITION BY deptno
ORDER BY rownum) rn
FROM EMP) CONNECT BY deptno =
PRIOR deptno
AND rn =
PRIOR rn+1
START WITH rn =1
GROUP BY deptno
ORDER BY deptno;
DEPTNO EMP_STRING
10 CLARK,KING,MILLER
20 SMITH,JONES,SCOTT,ADAMS,FORD
30 ALLEN,WARD,MARTIN,BLAKE,TURNER,JAMES
Assignment – 20
1
CREATE VIEW Dailyorders AS
SELECT DISTINCT cnum,
snum,
onum,
odate
FROM Orders;
ans: yes
2
CREATE VIEW Custotals AS
SELECT cname,
SUM (amt) Sum_Amt
FROM Orders,
Customers
WHERE Orders.cnum=Customers.cnum
GROUP BY cname;
Ans:
3
CREATE VIEW Thirdorders AS
SELECT *
FROM Dailyorders
WHERE odate=’03-OCT-1990’;
Ans:
not updatable due to distinct keyword in dailyorders;
4
CREATE VIEW Nullcities AS
SELECT snum,
sname,
city
FROM Salespeople
WHERE city IS NULL
OR sname BETWEEN ‘A’ AND ‘M’;
ans: yes
2) Create a view of the Salespeople table called Commissions. This view will
include only the snum and comm fields. Through this view, someone could enter
or change commissions, but only to values between .10 and .20.
CREATE VIEW commission AS
SELECT snum,
comm
FROM salespeople
WHERE comm BETWEEN .10 AND .20;
SELECT *
FROM commission;
SNUM COMM
1001 .12
1002 .13
1004 .11
1007 .15
1003 .1
SELECT *
FROM commission;
SNUM COMM
1001 .12
1002 .13
1004 .11
1007 .15
1003 .1
SELECT *
FROM salespeople;
3000 .4
1001 peel london .12
1002 serres san jose .13
1004 Motika london .11
1007 rifkin barcelona .15
1003 axelrod newyork .1
3) Some SQL implementations have a built-in constant representing the current date,
sometimes called “CURDATE” or “SYSDATE”. The word CURDATE can
therefore be used in a SQL statement, and be replaced by the current date when
the value is accessed by commands such as Select or Insert. We will use a view of
the Orders table called Entryorders to insert rows into the Orders table. Create
the
Orders table, so that CURDATE is automatically inserted for odate if no value is
given. Then create the Entryorders view so that no values can be given.
Note:
Suppose if you have a view named view1 on table t
And if you apply another view on this view named view2
And now if you make update on view 2 then it will be made on the table t;
But remember if you have used distinct keyword in base view then the identifier in
view2
will be virtual view and they will not allow to update.
Assignment - 21
--Grant succeeded
REVOKE
UPDATE ON customers
FROM Amit ;
--Revoke succeeded.
2) Give Manoj the right to give other users the right to query the Orders table.
GRANT
SELECT ON orders TO Manoj WITH GRANT OPTION;
--Grant succeeded.
GRANT
SELECT ON Manoj.orders TO Seema;
--Grant succeeded.
GRANT
UPDATE ON Manoj.orders TO Seema;
--insufficient privileges
4) Grant Abhijeet the right to insert or update the Customers table while keeping
her
possible rating values in the range of 100 to 500.
CREATE OR REPLACE VIEW range100 AS
SELECT *
FROM customers
WHERE rating BETWEEN 100 AND 500 WITH CHECK OPTION;
--View created.
GRANT
UPDATE ON range100 TO Ajita;
5) Allow Vikram to query the Customers table, but restrict his access to those
customers whose rating is the lowest.
CREATE OR REPLACE VIEW restrictmin AS
SELECT *
FROM customers
WHERE rating NOT IN
(SELECT min(rating)
FROM customers);
--View created.
GRANT
SELECT ON restrictmin TO Vikaram;
Assignment –22
1) Create a database space (tablespace) called “Myspace” and make it the default
tablespace for Parag’s tables.
CREATE tablespace Myspace datafile 'd:mytablespace' autoextend OFF;
2) You have been granted SELECT on Ajita’s Orders table. Enter a command so that
you will be able to refer to this table as “Orders” without using the name “Ajita”
as a prefix.
CREATE DATABASE link eu_db CONNECT TO Ajita Identified BY rksuthar USING 'orcl';
3) If there is a power failure, what will happen to all changes contained in the
current
transaction?
If transaction is not commited or completed it will be rollbacked to previous
savepoint.
Assignment –23
1) Query the catalog to produce, for each table with more than 4 columns, the
table’s
name, the owner, and the names and datatypes of the columns.
2) Query the catalog to find out how many synonyms exist for each table in the
database. Remember that the same synonym owned by 2 different users are in
effect 2 different synonyms.
3) Find out how many tables have indexes on more than 50% of their columns.
Assignment -24
## some extra queries
BEGIN
SELECT NULLABLE INTO l_nullable
FROM user_tab_columns
WHERE TABLE_NAME = 'PV_REPORT_DETAILS'
AND COLUMN_NAME = 'FEED_ID';
END IF;
END IF;
END;