MySQL in Short
NOTES:
- Remember to put a semicolon at the end of your SQL statements. The ; indicates that your SQL statment is complete and is ready to be interpreted.
- Strings must be in single quotes.
- The percent sign "%" can be used as a wild card to match any possible character that might appear before or after the characters specified.
ACTION
|
QUERY
|
Match any first names that start with 'Er' |
SELECT first, last, city
FROM empinfo
WHERE first LIKE 'Er%';
|
Match any last names that end in a 's' |
SELECT first, last
FROM empinfo
WHERE last LIKE '%s';
|
Select rows where the first name equals 'Eric' exactly |
SELECT *
FROM empinfo
WHERE first = 'Eric';
|
Select last name, city, age from table whose age is greater than 30. |
SELECT last, city, age
FROM empinfo
WHERE age > 30;
|
Select first name, last name, age whos elast name consists of “illia”. |
SELECT first, last, age
FROM empinfo
WHERE last LIKE '%illia%';
|
Display the first name, last name, and city for everyone that's not from Payson. |
SELECT first, last, age
FROM empinfo
WHERE city <> 'Payson';
|
This statement will return all of the unique ages in the employee_info table.
|
SELECT DISTINCT age
FROM employee_info;
|
This statement will return all of the ages in the employee_info table with duplicate data.
The ALL keyword is the default if nothing is specified.
|
SELECT ALL age
FROM employee_info;
OR
SELECT age FROM employee_info;
|
Using Aggregate functions with SELCT statement |
SELECT AVG(salary)
FROM employee;
//return the average salary for all employee whose title is equal to 'Programmer
SELECT AVG(salary)
FROM employee
WHERE title = 'Programmer’;
//return the number of rows in the employees table.
SELECT COUNT(*)
FROM employee;
//gives maximum price for an item in table
SELECT MAX(price)
FROM items_ordered;
SELECT AVG(price)
FROM items_ordered
WHERE order_date LIKE '%Dec%’;
SELECT MIN(price)
FROM items_ordered
WHERE item = 'Tent';
|
GROUP BY clause |
//display highest salary from each department
SELECT MAX(salary), dept
FROM employee
GROUP BY dept;
SELECT lastname, MAX(salary), dept
FROM employee
GROUP BY dept, lastname;
SELECT quantity, MAX(price)
FROM items_ordered
GROUP BY quantity;
SELECT state, COUNT(state)
FROM customers
GROUP BY state;
SELECT item, MAX(price), MIN(price)
FROM items_ordered
GROUP BY item;
//select the customerid, number of orders they made, and the sum of their orders.
SELECT customerid, COUNT(customerid), SUM(price)
FROM items_ordered
GROUP BY customerid;
|
HAVING clause |
//ONLY calculate & display the average if their salary is over 20000
SELECT dept, AVG(salary)
FROM employee
GROUP BY dept
HAVING AVG(salary) > 20000;
SELECT state, COUNT(state)
FROM customers
GROUP BY state
HAVING count(state) > 1;
SELECT item, MAX(price), MIN(price)
FROM items_ordered
GROUP BY item
HAVING MAX(price) > 190.00;
SELECT customerid, COUNT(customerid), SUM(price)
FROM items_ordered
GROUP BY customerid
HAVING COUNT(customerid) > 1;
|
ORDER BY clause |
SELECT employee_id, dept, name, age, salary
FROM employee_info
WHERE dept = 'Sales'
ORDER BY salary, age DESC;
SELECT lastname, firstname, city
FROM customers
ORDER BY lastname DESC;
SELECT item, price
FROM items_ordered
WHERE price > 10.00
ORDER BY price ASC;
|
Conditions & Boolean Operators |
SELECT employeeid, firstname, lastname, title, salary
FROM employee_info
WHERE (salary >= 45000.00) AND (title = ‘Programmer’);
SELECT customerid, order_date, item
FROM items_ordered
WHERE (item <> 'Snow shoes') AND (item <> 'Ear muffs’);
SELECT item, price
FROM items_ordered
WHERE (item LIKE 'S%') OR (item LIKE 'P%') OR (item LIKE 'F%’);
|
IN & BETWEEN
NOTE: You can also use NOT BETWEEN to exclude the values between your range.
NOTE: You can also use NOT IN to exclude the rows in your list.
|
SELECT employeeid, lastname, salary
FROM employee_info
WHERE lastname IN ('Hernandez', 'Jones', 'Roberts', 'Ruiz’);
SELECT employeeid, lastname, salary
FROM employee_info
WHERE lastname = 'Hernandez' OR lastname = 'Jones' OR lastname = 'Roberts'
OR lastname = 'Ruiz’;
SELECT employeeid, age, lastname, salary
FROM employee_info
WHERE age BETWEEN 30 AND 40;
SELECT employeeid, age, lastname, salary
FROM employee_info
WHERE age >= 30 AND age <= 40;
SELECT order_date, item, price
FROM items_ordered
WHERE price BETWEEN 10.00 AND 80.00;
SELECT firstname, city, state
FROM customers
WHERE state IN ('Arizona', 'Washington', 'Oklahoma', 'Colorado', 'Hawaii');
|
Mathematical Functions
|
SELECT ROUND(salary), firstname
FROM employee_info;
SELECT item, SUM(price)/SUM(quantity)
FROM items_ordered
GROUP BY item;
|
ALIAS
SQL aliases are used to give a table, or a column in a table, a temporary name.
Note: It requires double quotation marks or square brackets if the alias name contains spaces:
|
//columns
SELECT CustomerID AS ID, CustomerName AS Customer
FROM Customers;
SELECT CustomerName AS Customer, ContactName AS [Contact Person]
FROM Customers;
SELECT CustomerName, CONCAT(Address,', ',PostalCode,', ',City,', ',Country) AS Address
FROM Customers;
//tables
SELECT o.OrderID, o.OrderDate, c.CustomerName
FROM Customers AS c, Orders AS o
WHERE c.CustomerName="Around the Horn" AND c.CustomerID = o.CustomerID;
|
JOINS |
//This particular "Join" is known as an "Inner Join" or “Equijoin"
SELECT customer_info.firstname, customer_info.lastname, purchases.item
FROM customer_info, purchases
WHERE customer_info.customer_number = purchases.customer_number;
SELECT customer_info.firstname, customer_info.lastname, purchases.item
FROM customer_info INNER JOIN purchases
ON customer_info.customer_number = purchases.customer_number;
SELECT customers.customerid, customers.firstname, customers.lastname,
items_ordered.order_date, items_ordered.item, items_ordered.price
FROM customers, items_ordered
WHERE customers.customerid = items_ordered.customerid;
SELECT customers.customerid, customers.firstname, customers.state, items_ordered.item
FROM customers, items_ordered
WHERE customers.customerid = items_ordered.customerid
ORDER BY customers.state DESC;
SELECT Orders.OrderID, Customers.CustomerName, Orders.OrderDate
FROM Orders INNER JOIN Customers
ON Orders.CustomerID=Customers.CustomerID;
SELECT Orders.OrderID, Customers.CustomerName, Shippers.ShipperName
FROM
(
(Orders INNER JOIN Customers ON Orders.CustomerID = Customers.CustomerID)
INNER JOIN Shippers ON Orders.ShipperID = Shippers.ShipperID);
//left join
SELECT Customers.CustomerName, Orders.OrderID
FROM Customers LEFT JOIN Orders
ON Customers.CustomerID = Orders.CustomerID
ORDER BY Customers.CustomerName;
SELECT Orders.OrderID, Employees.LastName, Employees.FirstName
FROM Orders RIGHT JOIN Employees
ON Orders.EmployeeID = Employees.EmployeeID
ORDER BY Orders.OrderID;
SELECT Customers.CustomerName, Orders.OrderID
FROM Customers
FULL OUTER JOIN Orders ON Customers.CustomerID=Orders.CustomerID
ORDER BY Customers.CustomerName;
|
UNION
It is used to combine the result-set of two or more SELECT statements.
NOTE: To allow duplicate values, use UNION ALL
|
SELECT City FROM Customers
UNION
SELECT City FROM Suppliers
ORDER BY City;
SELECT City FROM Customers
UNION ALL
SELECT City FROM Suppliers
ORDER BY City;
SELECT 'Customer' AS Type, ContactName, City, Country
FROM Customers
UNION
SELECT 'Supplier', ContactName, City, Country
FROM Suppliers;
|
Create table employee |
CREATE TABLE employee
(
first VARCHAR(15),
last VARCHAR(20),
age NUMBER(3),
address VARCHAR(30),
city VARCHAR(20),
state VARCHAR(20)
);
|
Insert single record in to ‘employee’ table. |
INSERT INTO employee
(firstname, lastname,title, age, salary)
VALUES
('Jonie', 'Weber','Secretary', 28,19500.00);
|
Update values inrespective tables |
UPDATE phone_book
SET area_code = 623
WHERE prefix = 979;
UPDATE phone_book
SET last_name = 'Smith', prefix=555, suffix=9292
WHERE last_name = 'Jones’;
UPDATE employee
SET age = age+1
WHERE first_name='Mary’ AND last_name='Williams’;
UPDATE myemployees_ts0211
SET lastname='Weber-Williams'
WHERE firstname=‘Jonie' AND lastname= 'Weber’;
UPDATE myemployees_ts0211
SET age=age+1
WHERE firstname='Dirk' AND lastname='Smith’;
UPDATE myemployees_ts0211
SET title = 'Administrative Assistant'
WHERE title = 'Secretary’;
UPDATE myemployees_ts0211
SET salary = salary + 3500
WHERE salary < 30000;
UPDATE employees
SET salary = salary + 4500
WHERE salary > 33500;
|
Selete records from respective tables |
DELETE FROM employee
WHERE lastname = 'May’;
DELETE FROM employee
WHERE firstname = 'Mike' OR firstname = 'Eric’;
DELETE FROM myemployees_ts0211
WHERE salary > 70000;
|
Delete entire table from database | DROP TABLE myemployees_ts0211; |
Alter Table |
ALTER TABLE Persons
ADD DateOfBirth date;
ALTER TABLE Persons
ALTER COLUMN DateOfBirth year;
ALTER TABLE Persons
DROP COLUMN DateOfBirth;
|
Constraints
|
//NOT NULL
CREATE TABLE Persons
(
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255) NOT NULL,
Age int
);
//UNIQUE
CREATE TABLE Persons
(
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int,
UNIQUE (ID)
);
//UNIQUE constraint on multiple columns
CREATE TABLE Persons
(
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int,
CONSTRAINT UC_Person UNIQUE (ID,LastName)
);
|
Primary Key |
CREATE TABLE Persons
(
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int,
PRIMARY KEY (ID)
);
//PRIMARY KEY constraint on multiple columns
Here primary key is made up of TWO COLUMNS (ID + LastName)
CREATE TABLE Persons
(
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int,
CONSTRAINT PK_Person PRIMARY KEY (ID,LastName)
);
ALTER TABLE Persons
ADD PRIMARY KEY (ID);
ALTER TABLE Persons
ADD CONSTRAINT PK_Person PRIMARY KEY (ID,LastName);
ALTER TABLE Persons
DROP PRIMARY KEY;
|
Foriegn Key |
CREATE TABLE Orders
(
OrderID int NOT NULL,
OrderNumber int NOT NULL,
PersonID int,
PRIMARY KEY (OrderID),
FOREIGN KEY (PersonID) REFERENCES Persons(PersonID)
);
//defining a FOREIGN KEY constraint on multiple columns
CREATE TABLE Orders
(
OrderID int NOT NULL,
OrderNumber int NOT NULL,
PersonID int,
PRIMARY KEY (OrderID),
CONSTRAINT FK_PersonOrder FOREIGN KEY (PersonID)
REFERENCES Persons(PersonID)
);
ALTER TABLE Orders
ADD FOREIGN KEY (PersonID)
REFERENCES Persons(PersonID);
ALTER TABLE Orders
ADD CONSTRAINT FK_PersonOrder FOREIGN KEY (PersonID)
REFERENCES Persons(PersonID);
ALTER TABLE Orders
DROP FOREIGN KEY FK_PersonOrder;
|
CHECK
If you define a CHECK constraint on a single column it allows only certain values for this column.
If you define a CHECK constraint on a table it can limit the values in certain columns based on values in other columns in the row.
|
CREATE TABLE Persons
(
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int,
CHECK (Age>=18)
);
CREATE TABLE Persons
(
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int,
City varchar(255),
CONSTRAINT CHK_Person CHECK (Age>=18 AND City='Sandnes')
);
ALTER TABLE Persons
ADD CHECK (Age>=18);
ALTER TABLE Persons
ADD CONSTRAINT CHK_PersonAge CHECK (Age>=18 AND City='Sandnes’);
ALTER TABLE Persons
DROP CHECK CHK_PersonAge;
|
DEFAULT
|
CREATE TABLE Persons
(
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int,
City varchar(255) DEFAULT 'Sandnes'
);
CREATE TABLE Orders
(
ID int NOT NULL,
OrderNumber int NOT NULL,
OrderDate date DEFAULT GETDATE()
);
ALTER TABLE Persons
ALTER City SET DEFAULT 'Sandnes’;
ALTER TABLE Persons
ALTER City DROP DEFAULT;
|
INDEX
Indexes are used to retrieve data from the database very fast
Note: Updating a table with indexes takes more time than updating a table without (because the indexes also need an update). So, only create indexes on columns that will be frequently searched against.
|
CREATE INDEX idx_lastname
ON Persons (LastName);
CREATE INDEX idx_pname
ON Persons (LastName, FirstName);
DROP INDEX index_name ON table_name;
ALTER TABLE table_name
DROP INDEX index_name;
|
AUTO INCREMENT
|
CREATE TABLE Persons
(
ID int NOT NULL AUTO_INCREMENT,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int,
PRIMARY KEY (ID)
);
//To let the AUTO_INCREMENT sequence start with another value, use the following SQL statement
ALTER TABLE Persons AUTO_INCREMENT=100;
//we will NOT have to specify a value for the "ID" column (a unique value will be added automatically)
INSERT INTO Persons (FirstName,LastName)
VALUES ('Lars','Monsen’);
|
VIEWS
A view always shows up-to-date data!
|
CREATE VIEW [Current Product List] AS
SELECT ProductID, ProductName
FROM Products
WHERE Discontinued = No;
SELECT * FROM [Current Product List];
--------
CREATE VIEW [Products Above Average Price] AS
SELECT ProductName, UnitPrice
FROM Products
WHERE UnitPrice > (SELECT AVG(UnitPrice) FROM Products);
SELECT * FROM [Products Above Average Price];
CREATE VIEW [Category Sales For 1997] AS
SELECT DISTINCT CategoryName, Sum(ProductSales) AS CategorySales
FROM [Product Sales for 1997]
GROUP BY CategoryName;
SELECT * FROM [Category Sales For 1997];
SELECT * FROM [Category Sales For 1997]
WHERE CategoryName = 'Beverages’;
//Updating a View
CREATE OR REPLACE VIEW [Current Product List] AS
SELECT ProductID, ProductName, Category
FROM Products
WHERE Discontinued = No;
//Dropping a View
DROP VIEW view_name;
|
Comments
Post a Comment