Concepts
- Primary Key vs Foreign Key
- Scale
- Schema
- Records/Rows
- Fields/Columns
- Using Alias to shorten SQL syntax
SELECT RTrim(name) + ' ( ' + RTrim(country) + ')' AS title FROM Students ORDER BY name; SELECT name, contact FROM customers AS c, orders AS o, orderitems AS oi WHERE c.cust_id = o.cust_id AND oi.order_num = o.order_num AND prod_id = 'THISID';
Using JOIN
// to retrieve all order from the customer who ordered
// '123'
SELECT id, name
FROM orderlist
WHERE id = (SELECT id
FROM orderlist
WHERE id = '123');
// Using JOIN for the same query
SELECT p1.id, p1.name
FROM orderlist AS p1, orderlist AS p2
WHERE p1.id = p2.id
AND p2.id = '123';
// Standard Join/Inner Join vs Outer Join
// Natural Joins eliminate repeated columns from the inner join
SELECT c.*, o.order_num, o.order_date, oi.prod_id,
oi.quantity, OI.item_price
FROM customers AS c, orders AS o, orderitems as oi
WHERE c.cust_id = o.cust_id
AND oi.order_num = o.order_num
AND prod_id = 'FB';
// Use outer Join to include rows that have no related rows
// INNER JOIN example
SELECT customers.cust_id, orders.order_num
FROM customers INNER JOIN orders
ON customers.cust_id = orders.cust_id
// OUTER JOIN
// must use RIGHT or LEFT keyword to specify
// which table to include all rows
SELECT customers.cust_id, orders.order_num
FROM customers LEFT OUTER JOIN orders
ON customers.cust_id = orders.cust_id;
SELECT customers.cust_id, orders.order_num
FROM customers LEFT OUTER JOIN orders
ON orders.cust_id = customers.cust_id;
// Simplified OUTER JOIN
SELECT customers.cust_id, orders.order_num
FROM customers, orders
WHERE customers.cust_id *= orders.cust_id;
// Using JOIN with Aggregate Functions
SELECT customers.cust_name,
customers.cust_id,
Count(orders.order_num) AS num_order
FROM customers LEFT INNER JOIN orders
ON customers.cust_id = orders.cust_id
GROUP BY customers.cust_name,
customers.cust_id;
SELECT customers.cust_name,
customers.cust_id,
Count(orders.order_num) AS num_order
FROM customers LEFT OUTER JOIN orders
ON customers.cust_id = orders.cust_id
GROUP BY customers.cust_name,
customers.cust_id;
SubQuery and Combined Queries Using UNION
SELECT vend_id, prod_id, prod_price FROM products WHERE prod_price >= 5 OR vend_id IN (1001,1002); SELECT vend_id, prod_id, prod_price FROM products WHERE prod_price >= 5 // without UNION ALL, SQL eliminate duplicate rows UNION SELECT vend_id, prod_id, prod_price FROM products WHERE vend_id IN (1001,1002); // ORDER BY vend_id, prod_price;
Full-Text Searching
EXEC sp_fulltext_database 'enable';
CREATE FULLTEXT CATALOG catalog_my;
CREATE FULLTEXT INDEX ON productnotes (note_text)
KEY INDEX key_productnotes
ON catalog_my;
// KEY INDEX is used to provide the name of the table's primary key.
ALTER FULLTEXT CATALOG catalog_my REBUILD;
SELECT * FROM sys.fulltext_catalogs;
// FulltextCatalogProperty() function
// accepts a catalog name and the property to be checked
// IndexSize
// PopulateStatus
// FREETEX - simple search, matching by meaning or exact text match
// CONTAINS - search for phrases, synonyms
SELECT note_id, note_text
FROM notes
WHERE note_text LIKE '%bird food%';
SELECT note_id, note_text
FROM notes
WHERE FREETEXT(note_text, 'bird food'); // look for anything that
// could mean bird food
// WHERE CONTAINS (note_text, '"iron*"'); // match anything with iron
// WHERE CONTAINS (note_text, 'bird food');
// CONTAINS is functionally identical to LIKE note_text = '%match%'
// CONTAINS search typically is quicker, especially as table size
// increases.
// More CONTAIN examples
WHERE CONTAINS (note_text, 'safe AND sound');
WHERE CONTAINS (note_text, 'bird AND NOT food');
WHERE CONTAINS (note_text, 'grass NEAR cheese');
// look for any words that share the same stem as 'vary', such as 'varies'
WHERE CONTAINS (note_text, 'FORMSOF (INFLECTIONAL, vary)');
// Ranking
// The following query use FREETEXTTABLE function to return a table that
// contain words meaning bird and food and gives the table an alias
// of 'f'
SELECT f.rank, note_id, note_text
FROM notes,
FREETEXTTABLE (notes, note_text, 'bird food') f
WHERE notes.note_id = f.[key]
ORDER BY rank DESC;
No comments:
Post a Comment