MySQL Notes

本文介绍了如何使用MySQL创建数据库、创建表格,包括不同数据类型的使用,以及插入、更新、删除操作、表约束、表结构修改、SQL查询(包括聚合函数、GROUP BY和JOIN)、处理NULL值和默认值,以及基本的集操作。
摘要由CSDN通过智能技术生成
--Create a database
	CREATE SCHEMA name;
	CREATE DATABASE name;

--Creating tables
	CREATE TABLE [IF NOT EXISTS] name (
	col-name datatype [col-options],
	:
	col-name datatype [col-options],
	[constraint-1],
	:
	[constraint-n]
	);
		example:
		CREATE TABLE `staff` (
		`name` VARCHAR(12),
		`is_sick` TINYINT(1),
		`staff_id` INT(11),
		`salary` DECIMAL(5,2)
		);
--Contents between [] are optional

--Numerical Data Types (Integers)
	SMALLINT[(M)] [UNSIGNED] [ZEROFILL]
	--Use 2 Bytes of memory, signed range: -32768 to 32767
	MEDIUMINT[(M)] [UNSIGNED] [ZEROFILL]
	--Use 3 Bytes of memory.
	INT[(M)] [UNSIGNED] [ZEROFILL]
	--Same as INTEGER[(M)] [UNSIGNED] [ZEROFILL]
	--Use 4 Bytes of memory.
	BIGINT[(M)] [UNSIGNED] [ZEROFILL]
	--Use 8 Bytes of memory.

-- Numerical Data Types (Fixed Point)
	DEC[(M[,D])] [UNSIGNED] [ZEROFILL]
	NUMERIC[(M[,D])] [UNSIGNED] [ZEROFILL]
	FIXED[(M[,D])] [UNSIGNED] [ZEROFILL]

--Numerical Data Types (Float)
	Float(p)  --IEEE754
	DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL]
	FLOAT[(M,D)] [UNSIGNED] [ZEROFILL]

--String Types
	CHAR[(M)]
		--A fixed-length (M is the length, 0 ~ 255) string that is always rightpadded with spaces 
		  --to the specified length when stored.
		--if you store 'A' to CHAR(5), it will actually be 'A ' inside the memory. But when you 
		  --retrieve the value, the trailing spaces will
		--be removed automatically (this behaviour can be turned on or off).
	VARCHAR(M)
		--A variable-length string.
		--The range of M is 0 to 65,535.
	--CHAR is faster, but occupies more memory
	--VARCHAR is slower, but occupies less memory
			--Example
			CREATE TABLE `staff` (
			`first_name` VARCHAR(12),
			`last_name` CHAR(12)
			);
			insert into `staff` values ('Daryl', 'Sarah');

	
-- Date and Time
		--Example 
		CREATE TABLE `staff` (
		`first_name` VARCHAR(12),
		`last_name` CHAR(12),
		`recruit_date` DATE,
		`last_login` DATETIME
		);	


--Column options
		NOT NULL:
	--values of this column cannot be null.
		UNIQUE:
	--each value must be unique (candidate key on a single attribute)
		DEFAULT
	--Default value for this column if not specified by the user.
	AUTO_INCREMENT = baseValue
		--Must be applied to a key column (primary key, unique key) a value (usually max(col) + 1)
		  --is automatically inserted when data is added.		
		--You can also manually provide values to override this behaviour.			
		--Example
			CREATE TABLE Persons (
			id INT UNIQUE NOT NULL AUTO_INCREMENT,
			lastname VARCHAR(255) NOT NULL,
			firstname VARCHAR(255),
			age INT DEFAULT 12,
			city VARCHAR(255)
			) AUTO_INCREMENT = 5;

		
--Tuple Manipulation(INSERT, UPDATE, DELETE)
	--INSERT
		INSERT INTO tablename (col1, col2, ⋯)
		VALUES (val1, val2, ⋯),
		:
		(val1,val2,val3);
		--Example
		INSERT INTO `Employee`
		(`ID`, `Name`, `Salary`)
		VALUES (2, 'Mary', 26000);
		
		INSERT INTO Employee
		(Name, ID)
		VALUES ('Mary', 2);
	
		INSERT INTO Employee
		VALUES (2, 'Mary', 26000),
		(3, 'Max', 19000);		
	--UPDATE
		UPDATE table-name
		SET col1 = val1 [,col2 = val2⋯]
		[WHERE condition]
		--Example 
		UPDATE Employee
		SET
		Salary = 15000,
		Name = ‘Jane’
		WHERE ID = 4;
	
		UPDATE Employee
		SET Salary =
		Salary * 1.05;
	--DELETE
		DELETE FROM
		table-name
		[WHERE condition]
	--If no condition is given then ALL rows are deleted.
		--Example
		DELETE FROM
		Employee WHERE
		Salary > 20000;
	
		DELETE FROM
		Employee;

--Table Constraints
	--syntax OF CONSTRAINTS 
		CONSTRAINT name TYPE details;
	--MySQL provides following constraint types
		PRIMARY KEY	--PRIMARY KEY also automatically adds UNIQUE and NOT NULL to the relevant 
					  --column definition					
		UNIQUE
		FOREIGN KEY
		INDEX
	
	--Syntax of Foreign Key
		CONSTRAINT name
		FOREIGN KEY
		(col1, col2, ...)
		REFERENCES
		table-name
		(col1, col2, ...)
		[ON UPDATE ref_opt
		ON DELETE ref_opt]
			--Example 
		 	CREATE TABLE staff (
			staffNo CHAR(6) PRIMARY KEY,
			fName VARCHAR(20),
			branchNo CHAR(4),
			CONSTRAINT FK_staff_branchNo FOREIGN KEY
			(branchNo)
			REFERENCES
			branch (branchNo)
			);
					--Binary Keyword
		
--Altering Tables
	--Add column:
	ALTER TABLE table_name
		ADD column_name datatype [options like UNIQUE ⋯];
	--Drop column
	ALTER TABLE table_name DROP COLUMN column_name;
	--Modify column name and definition
	ALTER TABLE table_name
		CHANGE COLUMN
		col_name new_col_name datatype [col_options];
	--Modify column definition only
	ALTER TABLE table_name
		MODIFY COLUMN
		column_name datatype [col_options];
			--Examples
			ALTER TABLE staff ADD `lName` VARCHAR(20) NOT NULL;
			ALTER TABLE staff DROP COLUMN `lName`;
			ALTER TABLE staff CHANGE COLUMN `fName`
			`first_name` VARCHAR(20) NOT NULL;
			ALTER TABLE staff MODIFY COLUMN
			`first_name` VARCHAR(40) NOT NULL;
		
	--Adding Constraints
	ALTER TABLE table-name
		ADD CONSTRAINT name definition;
			--Examples 
			ALTER TABLE branch
			ADD CONSTRAINT ck_branch UNIQUE (street);
			ALTER TABLE staff ADD CONSTRAINT fk_staff_staff
			FOREIGN KEY (branchNo) REFERENCES branch (branchNo);

	--Removing Constraints
		--To remove a constraint
		ALTER TABLE table-name
		DROP INDEX name | DROP FOREIGN KEY name | DROP PRIMARY KEY
			--Example
			ALTER TABLE staff DROP PRIMARY KEY;
			ALTER TABLE staff DROP FOREIGN KEY fk_staff_staff;
			ALTER TABLE branch DROP INDEX ck_branch;
	--Deleting Tables
		DROP TABLE [IF EXISTS] table-name1, table-name2⋯;
	
	
--SQL Select
	--To filter columns of a table 
		SELECT col1[,col2⋯] FROM table-name;
	--DISTINCT and ALL
		Using DISTINCT after the SELECT keyword removes duplicates 
		Using ALL retains duplicates.
	--Expressions in SELECT
		SELECT a, b, a+b AS sum
		FROM dup_test;
		--You can put simple expressions in Select statements;
	--Where 
		SELECT * FROM table-name
		WHERE predicate;
			    SELECT * FROM grade
				WHERE mark < 60;
			--Asterisk (*) meansgettingall columns of that table.
	--Word Search
		--LIKE
			--The ‘%’ character can represent any number of characters, including none
			--The following example will return “Cryptography Engineering” and “Cryptonomicon”
			  --but not “Applied Cryptography”
			bookNameLIKE'crypt%'
			--The ‘_’ character represents exactly one character
			--The following example will return “Clouds” but not “Cloud” or “cloud computing”
			bookNameLIKE'cloud_'
		    --Dealing with Date and Time(comparable);
			
	--Select and Cartesian Product
		--Cartesian product of two tables can be obtained by using:
			SELECT *FROM Table1, Table2;
		--This can be resolved by referencing columns with the table name:
			TableName.ColumnName
				--Example:
						SELECT
						First, Last, Mark
						FROM Student, Grade
						WHERE
						(Student.ID = Grade.ID)
						AND(Mark >= 40);
						----------------
						SELECT ... FROM Student, Grade WHERE
						(Student.ID = Grade.ID)AND ...
	--Select from Multiple Tables
		SELECT * FROM
		Student, Grade, Course
		WHERE
		Student.ID = Grade.ID AND
		Course.Code= Grade.Code	
	--Aliases
		--Column alias
		SELECT column[AS] new-col-name
		--Table alias
		SELECT *FROM table[AS] new-table-name
		--You cannot use a column alias in a WHERE clause:	
		--Example
			SELECT
			E.ID AS empID,
			E.Name, W.Department FROM
			Employee E,
			WorksInW
			WHERE
			E.ID = W.ID;
		
	--Subqueries		
		SELECT Name FROM Employee
		WHERE Dept =
		(SELECT Dept FROM Employee
		WHERE Name = 'Andy')
		---
		--Options for handling sets
		--IN: checks to see if a value is in a set
			SELECT columns FROM tables
				WHERE col IN set;
			--Example
			SELECT id FROM student
			WHERE id IN('S103', 'S104');
		--EXISTS: checks to see if a set is empty
				SELECT columns
				FROM tables
				WHERE EXISTS set;
				--Example
				SELECT * FROM
				Employee AS E1
				WHERE EXISTS
				(SELECT * FROM Employee AS E2
				WHERE E1.Name = E2.Manager);		
		--ALL/ANY: checks to see if a relationship holds for every/one member of a set
		--NOT: can be used with any of the above 4
	
--Joins
	--Joins
		--CROSS JOIN: returns all pairs of rows from A and B, the same as Cartesian product.
		
		--INNER JOIN: returns pairs of rows satisfying a condition.
		
		--NATURAL JOIN: returns pairs of rows with common VALUES in identically named columns.
		
		--OUTER JOIN: returns pairs of rows satisfying a CONDITION (as INNER JOIN), BUT ALSO 
		  --handles NULLs.		
		
		--INNER JOIN
			--INNER JOIN specifies a condition that pairs if rows must satisfy.
			SELECT * FROM A INNER JOIN B
				ON condition
				--Example
				SELECT * FROM
				Student INNER JOIN Enrollment
				USING (ID)
		--OUTER JOIN
			SELECT cols FROM
			table1 type OUTER JOIN table2
			ON condition;
			--Where type is one of LEFT, RIGHT or FULL. (L4 p13)
		--ORDER BY
			SELECT columns FROM tables
			WHERE condition
			ORDER BY cols [ASC | DESC]  (DESC down|ASC arise)

			--SQL SELECT OVERVIEW 
			SELECT
			[DISTINCT | ALL] column-list
			FROM table-names
			[WHERE condition]
			[GROUP BY column-list]
			[HAVING condition]
			[ORDER BY column-list] ([]optional)

--Aggregate Functions(聚集函数)
	--You can also use aggregate functions to compute summaries of data in a table.
		COUNT: --The number OF rows
		SUM: -- The sum of the entries in the column.
		AVG: -- The average entry in a column.
		MIN, MAX: -- The minimum/maximum entries in a column.
		--Most aggregate functions (except COUNt(*))work on a-single column of numerical data.
		
		COUNT
		SELECT 
			COUNT(*) AS COUNT
			FROM Grades;
		
		SELECT 
			COUNT(Code) AS COUNT
			FROM Grades;
		
		SELECT
			COUNT(DISTINCT Code)
				AS COUNT
			FROM Grades;
		
		SUM, MIN.MAX AND AVG
		SELECT
			SUM(Mark) AS Total
			FROM Grades;
		
		SELECT
			MAX(Mark) AS Best
			FROM Grades;
		
		SELECT
			AVG(Mark) AS Mean
			FROM Grades;
		
		Combining Aggregate Funcitons
		SELECT 
			MAX(Mark) - MIN(Mark)
				AS Range_of_Marks
			FROM Grades;
-- GROUP BY and HAVING (Used with aggregate functions)
	--GROUP BY
	--Sometimes we want to apply aggregare functions to groups of rows
		SELECT column_set1 FROM tables
			WHERE predicate 
			GROUP BY column_set2

		SELECT Name,
			AVG(Mark) AS Average
			FROM Grades
			GROUP BY Name;
	--HAVING
	SELECT Name, 
		AVG(Mark) AS Average
		FROM Grades
		GROUP BY Name
		HAVING 
			AVG(Mark) >= 40;
	-- WHERE and HAVING
		--WHERE refers to the rows of tables, so cannot make use of aggregate functions.
		--HAVING refers to the group of rows, and so cannot use columns or aggregate functions 
		  --that does
		 --not exist after the step of column selection
		-- Think of a query being processed as follows:
			--1. Tables are joined
			--2. WHERE clauses
			--3. GROUP BY clauses and aggregates
			--4. Column selection
			--5. HAVING clauses
			--6. ORDER BY
-- SQL SELECT OVERVIEW
	SELECT 
		[DISTINCT | ALL] column-list
		FROM table-names
			[WHERE condition]
			[GROUP BY column-list]
			[HAVING condition]
			[ORDER BY column-list]
									([] optional,| or)

--SET OPERATIONS (UNION, INTERSECT, EXCEPT)
	-- UNION, INTERSECT and EXCEPT
		--These treat the tables as sets and are the usual set operators of 
		  --union intersection and difference
		--Only UNION is supported in MySQL. The other two can be simulated with subqueries.
	--UNION: Example
		--1. The average for each student:
			SELECT Name, AVG(Mark) AS Average
				FROM Grades
				GROUP BY Name;
		--2. The average overall:
			SELECT `Total` AS Name,
				AVG(Mark) AS Average
			FROM Grades;
		--UNION
			SELECT Name,
				AVG(Mark) AS Average
				FROM Grades
				GROUP BY Name
			UNION
			SELECT 
				`Total` AS Name,
				AVG(Mark) AS Average
				FROM Grades;


--Missing Information (Dealing with nulls in SQL; Making use of default values)
	--Case 1: We know that there is a value, but dont know what it is.
	
	--Case 2: There is no value at all that makes any sense.
	
	--Two main methods:
		--1. NULLs can be used as markers to show that information is missing.
		--2. A default value can be used to represent the missing value.
	
	--NULL
		--NULL Represents a state for an attribute that is currently unknown or is not applicable 
		  --for this tuple
			--NULLs are a way to deal with incomplete or exceptional data.
			--NULL is a placeholder for missing or unknown value of an attribute.
			  --(IF IS NOT IFSELF A VALUE)
			--E.g. A new staff is just added, but hasnt been decided which branch he belongs to.
		
		--Codd proposed to distinguish two types of NULLs:
			-- A-marks: data Applicable but not known(for example, someone's age)
			-- I-marks: data is Inapplicable
			  --(telephone number for someone who doesnot have a telephone)
		
		--Problems with NULLs
			--Problems extending relational algebra operations to NULLs:
				--Selection operation: if we check tuples for "Mark > 40" and for some tuple
				 --Mark is NULL, do we include it ?
			--Comparing tuples in two relations: are two tuples(with NULLs) and the same or not?

		--Additional problems for SQL:
			--NULLs treated as duplicates?
			--Inclusion of NULLs in count, sum, average? If yes, how?
			--Arithmetic operations behaviors with argument NULL?
		
		--SQL NULLs in Conditions
			--WHERE clause of SQL SELECT uses three-valued logic: only tuples where the 
			  --condition evaluates to true are returned.
		
		--SQL NULLs in Arithmetic
			--Arithmetic operations applied to NULLs result in NULLS.
		
		--SQL NULLs in Aggregation
			-->>>>>>>
		
		--SQL NULLs in GROUP BY
			--NULLs are treated as equivalents in GROUP BY clauses.
	
	--Default Values: Example
		--Default values are
			--"Unknown" for name
			--"-1" for Weight and quantity
		-- -1 is used for Wgt and Qty as it is not sensible 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值