* Intro to Sql - Sql Examples *

* Intro to Sql - Sql Examples *

<p>/* INTRO TO SQL - SQL EXAMPLES */ CUS_AREACODE CHAR(3) DEFAULT '615' NOT NULL /* SQL-TEXT-1.TXT */ CHECK(CUS_AREACODE IN ('615','713','931')), /* Most commands here are for MS SQL Server or MS ACCESS CUS_PHONE CHAR(8) NOT NULL, where indicated. */ CUS_BALANCE NUMERIC(9,2) DEFAULT 0.00, CONSTRAINT CUS_UI1 UNIQUE(CUS_LNAME,CUS_FNAME)) /* ======CHANGING YOUR PASSWORD */ EXEC SP_PASSWORD NULL, 'abc', 'userid' CREATE TABLE INVOICE ( INV_NUMBER INTEGER PRIMARY KEY, -======CREATING TABLE STRUCTURES CUS_CODE INTEGER NOT NULL REFERENCES CUSTOMER(CUS_CODE), CREATE TABLE VENDOR ( INV_DATE DATETIME DEFAULT CURRENT_TIMESTAMP NOT V_CODE INTEGER NOT NULL UNIQUE, NULL, V_NAME VARCHAR(35) NOT NULL, CONSTRAINT INV_CK1 CHECK (INV_DATE > '01-01-2008')) V_CONTACT VARCHAR(15) NOT NULL, V_AREACODE CHAR(3) NOT NULL, V_PHONE CHAR(8) NOT NULL, CREATE TABLE LINE ( V_STATE CHAR(2) NOT NULL, INV_NUMBER INTEGER NOT NULL, V_ORDER CHAR(1) NOT NULL, LINE_NUMBER NUMERIC(2,0) NOT NULL, PRIMARY KEY (V_CODE)) P_CODE VARCHAR(10) NOT NULL, LINE_UNITS NUMERIC(9,2) DEFAULT 0.00 NOT NULL, LINE_PRICE NUMERIC(9,2) DEFAULT 0.00 NOT NULL, CREATE TABLE PRODUCT ( PRIMARY KEY (INV_NUMBER,LINE_NUMBER), P_CODE VARCHAR(10) NOT NULL UNIQUE, FOREIGN KEY (INV_NUMBER) P_DESCRIPT VARCHAR(35) NOT NULL, REFERENCES INVOICE ON DELETE CASCADE, P_INDATE DATETIME NOT NULL, FOREIGN KEY (P_CODE) REFERENCES PRODUCT(P_CODE), P_QOH SMALLINT NOT NULL, CONSTRAINT LINE_UI1 UNIQUE(INV_NUMBER, P_CODE)) P_MIN SMALLINT NOT NULL, P_PRICE NUMERIC(8,2) NOT NULL, P_DISCOUNT NUMERIC(4,2) NOT NULL, --======INDEXES V_CODE INTEGER, PRIMARY KEY (P_CODE), -- Q: Create index on P_INDATE FOREIGN KEY (V_CODE) REFERENCES VENDOR) CREATE INDEX P_INDATEX ON PRODUCT(P_INDATE)</p><p>-- Checking table structure in SQL Server SP_HELP VENDOR -- Q: Create composite index on V_CODE and P_CODE SP_HELP PRODUCT CREATE INDEX VENPRODX ON PRODUCT(V_CODE,P_CODE)</p><p>-======CONSTRAINTS, CHECKS and DEFAULTS -- Q: Create index on P_PRICE descendent order CREATE TABLE CUSTOMER( CREATE INDEX PROD_PRICEX ON PRODUCT(P_PRICE DESC) CUS_CODE INTEGER PRIMARY KEY, CUS_LNAME VARCHAR(15) NOT NULL, -- Q: Delete the PROD_PRICEX index CUS_FNAME VARCHAR(15) NOT NULL, DROP INDEX PRODUCT.PROD_PRICEX CUS_INITIAL CHAR(1), 1 --======DATA ENTRY P_PRICE, P_DISCOUNT, V_CODE FROM PRODUCT BEGIN TRANSACTION --======UPDATE TABLE ROWS INSERT INTO VENDOR VALUES (21225,'Bryson, Inc.','Smithson','615','223-3234','TN','Y') UPDATE PRODUCT SET P_INDATE = '01-18-2008' SELECT * FROM VENDOR WHERE P_CODE = '13-Q2/P2'</p><p>INSERT INTO VENDOR SELECT * FROM PRODUCT VALUES (21226,'Superloo, Inc.','Flushing','904','215-8995','FL','N')</p><p>SELECT * FROM VENDOR UPDATE PRODUCT SET P_INDATE = '01-18-2008', INSERT INTO PRODUCT P_PRICE = 16.99, VALUES ('11QER/31','Power painter, 15 psi., 3-nozzle','11-03- P_MIN = 10 07',8,5,109.99,0.00,21225) WHERE P_CODE = '13-Q2/P2'</p><p>INSERT INTO PRODUCT VALUES ('13-Q2/P2','7.25-in. pwr. Saw blade', '12-13- SELECT * FROM PRODUCT 07',32,15,14.99, 0.05,21225) --======ROLLBACK SELECT * FROM PRODUCT BEGIN TRANSACTION ROLLBACK -- Insert with null attribute</p><p>INSERT INTO PRODUCT VALUES ('BRT-345','Titanium drill bit', '10- SELECT * FROM PRODUCT 18-07', 75, 10, 4.50, 0.06, NULL) --======DELETE TABLE ROWS -- Insert with optional attributes BEGIN TRANSACTION INSERT INTO PRODUCT (P_CODE, P_DESCRIPT) VALUES ('BRT-345','Titanium drill bit') DELETE FROM PRODUCT WHERE P_CODE = '13-Q2/P2' --======COMMIT DELETE FROM PRODUCT COMMIT WHERE P_MIN = 5</p><p>--======LISTING TABLE CONTENTS - SELECT QUERIES -- NOTE: use rollback to restore table rows</p><p>SELECT * FROM PRODUCT ROLLBACK</p><p>SELECT P_CODE, P_DESCRIPT, P_INDATE, P_QOH, P_MIN, -======INSERTING ROWS WITH SELECT SUBQUERY 2 -- Using comparison operators on dates /* Run script to create P and V tables (CREATE_P_V.SQL) */ /* Use: isql or osql from the command-line */ SELECT P_DESCRIPT, P_QOH, P_MIN, P_PRICE, P_INDATE FROM PRODUCT DELETE FROM PRODUCT WHERE P_INDATE >= '01-20-2008'</p><p>DELETE FROM VENDOR -- Using computed columns and aliases </p><p>INSERT INTO VENDOR SELECT * FROM V SELECT P_DESCRIPT, P_QOH, P_PRICE, P_QOH*P_PRICE FROM PRODUCT INSERT INTO PRODUCT SELECT * FROM P SELECT P_DESCRIPT, P_QOH, P_PRICE, SELECT * FROM VENDOR P_QOH*P_PRICE AS TOTVALUE FROM PRODUCT SELECT * FROM PRODUCT</p><p>-======CREATE ALL DATABASE TABLES /* Use: run the CH07DBINIT.sql file */ SELECT P_CODE, P_INDATE, CURRENT_TIMESTAMP - 90 AS CUTDATE --======SELECT WITH WHERE CLAUSE FROM PRODUCT WHERE P_INDATE <= CURRENT_TIMESTAMP - 90 SELECT P_DESCRIPT, P_INDATE, P_PRICE, V_CODE FROM PRODUCT WHERE V_CODE = 21344 SELECT P_CODE, P_INDATE, P_INDATE + 90 AS EXPDATE FROM PRODUCT -- Other comparison operators >, >=, <, <=, <> -- Logical operators AND, OR, NOT SELECT P_DESCRIPT, P_INDATE, P_PRICE, V_CODE FROM PRODUCT WHERE V_CODE < > 21344 SELECT P_DESCRIPT, P_INDATE, P_PRICE, V_CODE FROM PRODUCT -- Access user <> w/o spaces WHERE V_CODE = 21344 OR V_CODE = 24288</p><p>SELECT P_DESCRIPT, P_QOH, P_MIN, P_PRICE FROM PRODUCT SELECT P_DESCRIPT, P_INDATE, P_PRICE, V_CODE WHERE P_PRICE <= 10 FROM PRODUCT WHERE P_PRICE < 50 AND P_INDATE > '01-15-2008' -- Using comparison operators in character attributes</p><p>SELECT P_CODE, P_DESCRIPT, P_QOH, P_MIN, P_PRICE SELECT P_DESCRIPT, P_INDATE, P_PRICE, V_CODE FROM PRODUCT FROM PRODUCT WHERE P_CODE < '1558-QW1' WHERE (P_PRICE < 50 AND P_INDATE > '01-15-2008') OR V_CODE = 24288 3 SELECT * FROM PRODUCT SELECT * WHERE NOT (V_CODE = 21344) FROM PRODUCT WHERE V_CODE IN (21344, 24288) -- Special operators : BETWEEN, IS NULL, LIKE, IN, EXITS</p><p>SELECT * -- EXISTS FROM PRODUCT /* Returns true if the inner query returns at least 1 row, WHERE P_PRICE BETWEEN 50.00 AND 100.00 otherwise it returns false */</p><p>/* Q: List all vendors but only if there are products to order SELECT P_CODE, P_DESCRIPT (P_QOH <= P_MIN) */ FROM PRODUCT WHERE P_INDATE IS NULL SELECT * FROM VENDOR WHERE EXISTS (SELECT * FROM PRODUCT SELECT P_CODE, P_DESCRIPT WHERE P_QOH <= P_MIN) FROM PRODUCT WHERE V_CODE IS NULL -- Q: List all vendors but only if there are products with the qty on hand less than double the min qty -- Note: MS Access and SQL Server are case insensitive -- Note: MS Access uses * and %, SQL Server uses % and _ SELECT * FROM VENDOR WHERE EXISTS (SELECT * FROM PRODUCT SELECT V_NAME, V_CONTACT, V_AREACODE, V_PHONE WHERE P_QOH < P_MIN*2) FROM VENDOR WHERE V_CONTACT LIKE 'Smith%' -- Q: List the products that are supplied by a vendor -- or use this version if case sensitive SELECT * FROM PRODUCT SELECT V_NAME, V_CONTACT, V_AREACODE, V_PHONE WHERE V_CODE IS NOT NULL FROM VENDOR WHERE UPPER(V_CONTACT) LIKE 'SMITH%' -- Q: List the v_code of vendors that provide products</p><p>SELECT V_NAME, V_CONTACT, V_AREACODE, V_PHONE SELECT V_CODE FROM PRODUCT -- includes duplicates and Nulls FROM VENDOR WHERE V_CONTACT NOT LIKE 'Smith%' SELECT DISTINCT V_CODE FROM PRODUCT -- includes Nulls</p><p>SELECT * FROM VENDOR -- Q: List the V_CODE and V_NAME of vendors that provide WHERE V_CONTACT LIKE 'Johns_n' products 4 SELECT V_CODE, V_NAME -- DROPING A COLUMN FROM TABLE FROM VENDOR WHERE V_CODE IN (SELECT DISTINCT V_CODE FROM PRODUCT) ALTER TABLE VENDOR DROP COLUMN V_ORDER</p><p>/* Three value logic (NULL) problem – -- UPDATE COMMANDS Null values in FK cause problems */ /* Q: List the V_CODE and V_NAME of vendors that do not UPDATE PRODUCT provide products */ SET P_SALECODE = '2' WHERE P_CODE = '1546-QQ2' SELECT V_CODE, V_NAME FROM VENDOR UPDATE PRODUCT WHERE V_CODE NOT IN SET P_SALECODE = '1' (SELECT DISTINCT V_CODE FROM PRODUCT) WHERE P_CODE IN ('2232/QWE', '2232/QTY') -- will list no rows! UPDATE PRODUCT -- Correct answer SET P_SALECODE = '2' WHERE P_INDATE < '12-25-2007' SELECT V_CODE, V_NAME FROM VENDOR UPDATE PRODUCT WHERE V_CODE NOT IN (SELECT DISTINCT V_CODE FROM SET P_SALECODE = '1' PRODUCT WHERE V_CODE IS NOT NULL) WHERE P_INDATE >= '01-16-2008' AND P_INDATE < '02-10-2008'</p><p>--======ADVANCED DATA MGMT UPDATE PRODUCT SET P_QOH = P_QOH + 20, P_PRICE = P_QOH*10 /* ALTER DATA TYPE */ WHERE P_CODE = '2232/QWE' /* Will not run unless column is empty – only increasing size will work */ UPDATE PRODUCT SET P_PRICE = P_PRICE*1.10 -- Q: Change the V_CODE data type to CHAR WHERE P_PRICE < 50.00 ALTER TABLE PRODUCT ALTER COLUMN V_CODE VARCHAR(5) /* COPYING PARTS OF TABLES */ /* Q: Create a PART table with only using the code, description -- Q: Increase the width of P_PRICE column to nine digits and price columns of PRODUCT */ ALTER TABLE PRODUCT ALTER COLUMN P_PRICE NUMERIC(9,2) CREATE TABLE PART ( PART_CODE CHAR(8) NOT NULL UNIQUE, -- ADD A COLUMN TO TABLE PART_DESCRIPT CHAR(35), PART_PRICE DECIMAL(8,2), ALTER TABLE PRODUCT PRIMARY KEY (PART_CODE)) ADD P_SALECODE CHAR(1) 5 INSERT INTO PART (PART_CODE, PART_DESCRIPT, PART_PRICE) SELECT P_CODE, P_DESCRIPT, P_PRICE FROM PRODUCT</p><p>SELECT P_CODE, P_DESCRIPT, P_PRICE INTO PART FROM PRODUCT</p><p>-- ADDING PK AND FK WITH THE ALTER TABLE COMMAND</p><p>ALTER TABLE PART ADD PRIMARY KEY(PART_CODE)</p><p>ALTER TABLE PRODUCT ADD PRIMARY KEY(P_CODE)</p><p>ALTER TABLE PRODUCT ADD FOREIGN KEY(V_CODE) REFERENCES VENDOR</p><p>------OR</p><p>ALTER TABLE PRODUCT ADD PRIMARY KEY(P_CODE), FOREIGN KEY (V_CODE) REFERENCES VENDOR</p><p>-- DROPING A TABLE </p><p>DROP TABLE PART /*======END PART I */</p><p>6 /* INTRO TO SQL - SQL EXAMPLES */ /* SQL-TEXT-2.TXT */ --== COUNT /* ======PART II ADVANCED QUERIES */ -- Q: How many vendors provide products?</p><p>--== SELECT WITH ORDER BY -- COUNT(column) counts the not null values in column SELECT COUNT(DISTINCT V_CODE) FROM PRODUCT SELECT P_CODE, P_DESCRIPT, P_INDATE, P_PRICE FROM PRODUCT ORDER BY P_PRICE -- COUNT(*) counts the number of rows returned SELECT COUNT(*) FROM (SELECT DISTINCT V_CODE FROM PRODUCT) SELECT P_CODE, P_DESCRIPT, P_INDATE, P_PRICE FROM PRODUCT ORDER BY P_PRICE DESC SELECT COUNT(*) FROM (SELECT DISTINCT V_CODE FROM PRODUCT WHERE V_CODE IS NOT NULL)</p><p>SELECT EMP_LNAME, EMP_FNAME, EMP_INITIAL, EMP_AREACODE, EMP_PHONE -- Q: How many vendors (unique vendors) have products with FROM EMPLOYEE price < 10? ORDER BY EMP_LNAME, EMP_FNAME, EMP_INITIAL SELECT COUNT(DISTINCT V_CODE) FROM PRODUCT WHERE P_PRICE <= 10.00 SELECT P_DESCRIPT, V_CODE, P_INDATE, P_PRICE FROM PRODUCT WHERE P_INDATE < '01-21-2008' -- Q: How many products with price < 10? AND P_PRICE <= 50.00 SELECT COUNT(*) FROM PRODUCT ORDER BY V_CODE, P_PRICE DESC WHERE P_PRICE <= 10.00</p><p>--== LISTING UNIQUE VALUES (ROWS!) --== MAX AND MIN</p><p>SELECT DISTINCT V_CODE FROM PRODUCT SELECT MAX(P_PRICE) FROM PRODUCT</p><p>SELECT DISTINCT V_STATE FROM VENDOR SELECT MIN(P_PRICE) FROM PRODUCT</p><p>-- Q: What product(s) have a price equal to the maximum product --== UNIQUE ROWS (VALUES COMBINATIONS) price? SELECT P_CODE, P_DESCRIPT, P_PRICE SELECT DISTINCT V_STATE, V_NAME FROM VENDOR FROM PRODUCT WHERE P_PRICE = (SELECT MAX(P_PRICE) FROM PRODUCT) SELECT DISTINCT V_STATE, V_AREACODE FROM VENDOR</p><p>- Q: What product(s) have the highest inventory value? --== AGGREGATE FUNCTIONS: COUNT, MIN, MAX, SUM AND AVG SELECT * 7 FROM PRODUCT -- GROUP BY must be used with aggregation functions WHERE P_QOH * P_PRICE = SELECT V_CODE, P_CODE, P_DESCRIPT,P_PRICE (SELECT MAX(P_QOH * P_PRICE) FROM PRODUCT) FROM PRODUCT GROUP BY V_CODE</p><p>--== SUM -- Q: How much is the total customer balance? -- How many products each vendor provides? SELECT SUM(CUS_BALANCE) AS TOTBALANCE SELECT V_CODE, COUNT(DISTINCT P_CODE) FROM CUSTOMER FROM PRODUCT GROUP BY V_CODE</p><p>-- Q: How much is the total value of our product inventory? SELECT SUM(P_QOH*P_PRICE) AS TOTVALUE --== GROUP BY WITH HAVING CLAUSE FROM PRODUCT --Q: List the number of products by vendor with the average price, include only the rows with price below 10.00. SELECT V_CODE, COUNT(DISTINCT P_CODE), AVG(P_PRICE) --== AVG FROM PRODUCT -- Q: What is the average product price? GROUP BY V_CODE SELECT AVG(P_PRICE) FROM PRODUCT;</p><p>SELECT V_CODE, COUNT(DISTINCT P_CODE), AVG(P_PRICE) -- Q: What products have a price that exceeds the average product FROM PRODUCT price? GROUP BY V_CODE SELECT P_CODE, P_DESCRIPT, P_QOH, P_PRICE, V_CODE HAVING AVG(P_PRICE) < 10 FROM PRODUCT WHERE P_PRICE > (SELECT AVG(P_PRICE) FROM PRODUCT) /* Q: The following SQL command will: */ ORDER BY P_PRICE DESC /* 1 - Aggregate the total cost of products group by vendor */ /* 2 - Select only the rows having a total cost greater than 50 */ /* 3 - List the results in descending order by total cost */ --== GROUP BY -- Q: What is the minimum price for each sale code? SELECT V_CODE, SUM(P_QOH * P_PRICE) AS TOTCOST SELECT P_SALECODE, MIN(P_PRICE) FROM PRODUCT FROM PRODUCT GROUP BY V_CODE GROUP BY P_SALECODE HAVING (SUM(P_QOH * P_PRICE)>500) ORDER BY SUM(P_QOH * P_PRICE) DESC</p><p>-- Q: What is the average price for each sale code? SELECT P_SALECODE, AVG(P_PRICE) --======VIEW FROM PRODUCT -- Q: Create a view to list all products with price greater than 50? GROUP BY P_SALECODE CREATE VIEW PRICEGT50 AS SELECT P_DESCRIPT, P_QOH, P_PRICE FROM PRODUCT -- The following will generate an error WHERE P_PRICE > (50.00) 8 WHERE PRODUCT.V_CODE = VENDOR.V_CODE ORDER BY P_PRICE SELECT * FROM PRICEGT50;</p><p>-- Q: List products with vendor data for products purchased after -- Q: Create a view to list all products to order, that is the quantity SELECT P_DESCRIPT, P_PRICE, V_NAME, V_CONTACT, on hand is less that the minimum qty plus 10. V_AREACODE, V_PHONE CREATE VIEW PROD_TO_ORDER AS FROM PRODUCT, VENDOR SELECT P_CODE, P_DESCRIPT, P_QOH, P_PRICE WHERE PRODUCT.V_CODE = VENDOR.V_CODE FROM PRODUCT AND P_INDATE > '01-15-2008' WHERE P_QOH < (P_MIN +10)</p><p>SELECT * FROM PROD_TO_ORDER</p><p>-- Q: Create a view to show the total product cost and quantity on -- Q: List all invoice data for customer number 10014 hand statistics grouped by vendor. CREATE VIEW PROD_STATS AS SELECT CUS_LNAME, INVOICE.INV_NUMBER, INV_DATE, SELECT V_CODE, P_DESCRIPT SUM(P_QOH * P_PRICE) AS TOTCOST, FROM CUSTOMER, INVOICE, LINE, PRODUCT MAX(P_QOH) AS MAXQTY, WHERE CUSTOMER.CUS_CODE = INVOICE.CUS_CODE MIN(P_QOH) AS MINQTY, AND INVOICE.INV_NUMBER = LINE.INV_NUMBER AVG(P_QOH) AS AVGQTY AND LINE.P_CODE = PRODUCT.P_CODE FROM PRODUCT AND CUSTOMER.CUS_CODE = 10014 GROUP BY V_CODE; ORDER BY INVOICE.INV_NUMBER</p><p>SELECT * FROM PROD_STATS --== USING ALIAS SELECT P_DESCRIPT, P_PRICE, V_NAME, V_CONTACT, --======JOINS V_AREACODE, V_PHONE -- Q: List the product description, price, vendor code, name, FROM PRODUCT P, VENDOR V contact, area code and phone for each product WHERE P.V_CODE = V.V_CODE SELECT P_DESCRIPT, P_PRICE, VENDOR.V_CODE, V_NAME, ORDER BY P_PRICE V_CONTACT, V_AREACODE, V_PHONE FROM PRODUCT, VENDOR WHERE PRODUCT.V_CODE = VENDOR.V_CODE /*== RECURSIVE QUERIES */ /* List all employees with their manager's name */ /* Using EMP table */ -- Q: Ordered by P_PRICE SELECT P_DESCRIPT, P_PRICE, VENDOR.V_CODE, V_NAME, SELECT E.EMP_MGR, M.EMP_LNAME,E.EMP_NUM, V_CONTACT, V_AREACODE, V_PHONE E.EMP_LNAME FROM PRODUCT, VENDOR FROM EMP E, EMP M 9 WHERE E.EMP_MGR=M.EMP_NUM ORDER BY E.EMP_MGR</p><p>/*== OUTER JOIN */ /* LEFT */ /* List all vendor rows (including the ones that have no matching products) and all matching product rows */</p><p>SELECT P_CODE, VENDOR.V_CODE, V_NAME FROM VENDOR LEFT JOIN PRODUCT ON VENDOR.V_CODE = PRODUCT.V_CODE</p><p>/* RIGHT */ /* List all product rows (including the ones that have no matching vendors) and all matching vendor rows*/</p><p>SELECT PRODUCT.P_CODE, VENDOR.V_CODE, V_NAME FROM VENDOR RIGHT JOIN PRODUCT ON VENDOR.V_CODE = PRODUCT.V_CODE</p><p>/*======END SQL-TEXT-2.TXT */</p><p>10</p>

View Full Text

Details

  • File Type
    pdf
  • Upload Time
    -
  • Content Languages
    English
  • Upload User
    Anonymous/Not logged-in
  • File Pages
    10 Page
  • File Size
    -

Download

Channel Download Status
Express Download Enable

Copyright

We respect the copyrights and intellectual property rights of all users. All uploaded documents are either original works of the uploader or authorized works of the rightful owners.

  • Not to be reproduced or distributed without explicit permission.
  • Not used for commercial purposes outside of approved use cases.
  • Not used to infringe on the rights of the original creators.
  • If you believe any content infringes your copyright, please contact us immediately.

Support

For help with questions, suggestions, or problems, please contact us