用于访问和处理数据库的标准的计算机语言,结构性查询语言( Structured Query Language), 可以访问和处理数据库,一种 ANSI(American National Standards Institute 美国国家标准化组织)标准的计算机语言。
- 面向数据库执行查询
- 可从数据库取回数据
- 可在数据库中插入新的记录
- 可更新数据库中的数据
- 可从数据库删除记录
- 可创建新数据库
- 可在数据库中创建新表
- 可在数据库中创建存储过程
- 可在数据库中创建视图
- 可以设置表、存储过程和视图的权限
数据类型
- Text 用于文本或文本与数字的组合。最多 255 个字符。
- Memo 用于更大数量的文本。最多存储 65,536 个字符。注释:无法对 memo 字段进行排序。不过它们是可搜索的。
- Byte 允许 0 到 255 的数字。 1 字节
- Integer 允许介于 -32,768 到 32,767 之间的数字。 2 字节
- Long 允许介于 -2,147,483,648 与 2,147,483,647 之间的全部数字 4 字节
- Single 单精度浮点。处理大多数小数。 4 字节
- Double 双精度浮点。处理大多数小数。 8 字节
- Currency用于货币。支持 15 位的元,外加 4 位小数。提示:您可以选择使用哪个国家的货币。8 字节
- AutoNumber AutoNumber 字段自动为每条记录分配数字,通常从 1 开始。 4 字节
- Date/Time 用于日期和时间 8 字节
- Ole Object 可以存储图片、音频、视频或其他 BLOBs (Binary Large OBjects) 最多 1GB
- Hyperlink 包含指向其他文件的链接,包括网页。
- Lookup Wizard 允许你创建一个可从下列列表中进行选择的选项列表。 4 字节
MySQL 数据类型
在 MySQL 中,有三种主要的类型:文本、数字和日期/时间类型。
- Text 类型:
CHAR(size) 保存固定长度的字符串(可包含字母、数字以及特殊字符)。在括号中指定字符串的长度。最多 255 个字符。
VARCHAR(size)保存可变长度的字符串(可包含字母、数字以及特殊字符)。在括号中指定字符串的最大长度。最多 255 个字符。注释:如果值的长度大于 255,则被转换为 TEXT 类型。
TINYTEXT 存放最大长度为 255 个字符的字符串。
TEXT 存放最大长度为 65,535 个字符的字符串。
BLOB 用于 BLOBs (Binary Large OBjects)。存放最多 65,535 字节的数据。
MEDIUMTEXT 存放最大长度为 16,777,215 个字符的字符串。
MEDIUMBLOB 用于 BLOBs (Binary Large OBjects)。存放最多 16,777,215 字节的数据。
LONGTEXT 存放最大长度为 4,294,967,295 个字符的字符串。
LONGBLOB 用于 BLOBs (Binary Large OBjects)。存放最多 4,294,967,295 字节的数据。
ENUM(x,y,z,etc.)允许你输入可能值的列表。可以在 ENUM 列表中列出最大 65535 个值。如果列表中不存在插入的值,则插入空值。注释:这些值是按照你输入的顺序存储的。可以按照此格式输入可能的值:ENUM('X','Y','Z')
SET 与 ENUM 类似,SET 最多只能包含 64 个列表项,不过 SET 可存储一个以上的值。
- Number 类型:
TINYINT(size) -128 到 127 常规。0 到 255 无符号*。在括号中规定最大位数。
SMALLINT(size) -32768 到 32767 常规。0 到 65535 无符号*。在括号中规定最大位数。
MEDIUMINT(size) -8388608 到 8388607 普通。0 to 16777215 无符号*。在括号中规定最大位数。
INT(size) -2147483648 到 2147483647 常规。0 到 4294967295 无符号*。在括号中规定最大位数。
BIGINT(size) -9223372036854775808 到 9223372036854775807 常规。0 到 18446744073709551615 无符号*。在括号中规定最大位数。
FLOAT(size,d) 带有浮动小数点的小数字。在括号中规定最大位数。在 d 参数中规定小数点右侧的最大位数。
DOUBLE(size,d) 带有浮动小数点的大数字。在括号中规定最大位数。在 d 参数中规定小数点右侧的最大位数。
DECIMAL(size,d) 作为字符串存储的 DOUBLE 类型,允许固定的小数点。
* 这些整数类型拥有额外的选项 UNSIGNED。通常,整数可以是负数或正数。如果添加 UNSIGNED 属性,那么范围将从 0 开始,而不是某个负数。
- Date 类型:
DATE()日期。格式:YYYY-MM-DD
注释:支持的范围是从 '1000-01-01' 到 '9999-12-31'
DATETIME()
*日期和时间的组合。格式:YYYY-MM-DD HH:MM:SS
注释:支持的范围是从 '1000-01-01 00:00:00' 到 '9999-12-31 23:59:59'
TIMESTAMP()
*时间戳。TIMESTAMP 值使用 Unix 纪元('1970-01-01 00:00:00' UTC) 至今的描述来存储。格式:YYYY-MM-DD HH:MM:SS
注释:支持的范围是从 '1970-01-01 00:00:01' UTC 到 '2038-01-09 03:14:07' UTC
TIME() 时间。格式:HH:MM:SS 注释:支持的范围是从 '-838:59:59' 到 '838:59:59'
YEAR()
2 位或 4 位格式的年。
注释:4 位格式所允许的值:1901 到 2155。2 位格式所允许的值:70 到 69,表示从 1970 到 2069。
SQL索引
- SELECT - 从数据库中提取数据
- UPDATE - 更新数据库中的数据
- DELETE - 从数据库中删除数据
- INSERT INTO - 向数据库中插入新数据
- CREATE DATABASE - 创建新数据库
- ALTER DATABASE - 修改数据库
- CREATE TABLE - 创建新表
- ALTER TABLE - 变更(改变)数据库表
- DROP TABLE - 删除表
- CREATE INDEX - 创建索引(搜索键)
- DROP INDEX - 删除索引
常见查询
SELECT * FROM TABLE;
SELECT id,name FROM TABLE;
SELECT DISTINCT id FROM TABLE;
SELECT * FROM TABLE WHERE id=''/'' ''/ ;
SELECT * FROM TABLE
WHERE id=1
AND name='LI'
SELECT * FROM TABLE
ORDER BY id (ASC/DESC);
INSERT INTO TABLE (name, url, alexa, country)
VALUES ('百度','https://www.baidu.com/','4','CN');
UPDATE TABLE
SET id='5', country='CN'
WHERE name='kaya';
DELETE FROM TABLE
WHERE name='kaya' AND country='CN';
DELETE FROM TABLE;
DELETE * FROM TABLE;
清空表,不改变属性
- drop > truncate > delete
- drop删除表的数据,释放空间;
- truncate删除表的数据,释放空间,不改变表格定义,不改变结构;
- delete*from删除表的数据,保留定义,不释放空间。
SELECT id FROM TABLE
LIMIT 2
——选取结果前2条
SELECT TOP 2 * FROM TABLE
SELECT TOP 50 PERCENT * FROM TABLE
SELECT * FROM TABLE
WHERE id LIKE '[_m%]'
——通配符
SELECT * FROM TABLE
WHERE id IN(1,2)
SELECT po.OrderID, p.LastName, p.FirstName
FROM Persons AS p, Product_Orders AS po
WHERE p.LastName='Adams' AND p.FirstName='John'
主键(Primary Key)是一个列,在这个列中的每一行的值都是唯一的。在表中,每个主键的值都是唯一的。
JOIN: 如果表中有至少一个匹配,则返回行
LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行
RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行
FULL JOIN: 只要其中一个表中存在匹配,就返回行
SELECT s.name,c.name
FROM r_class_student r
JOIN e_student s ON r.s_id=s.id
JOIN e_class c ON r.c_id=c.id
ORDER BY c.name DESC;
SELECT s.name FROM e_student s
UNION/*默认选择不同的值 有同名应该选择UNION ALL*/
SELECT t.name FROM e_teacher t;
- NOT NULL 约束强制列不接受 NULL 值。
- NOT NULL 约束强制字段始终包含值。这意味着,如果不向字段添加值,就无法插入新记录或者更新记录
- UNIQUE 约束唯一标识数据库表中的每条记录。
- UNIQUE 和 PRIMARY KEY 约束均为列或列集合提供了唯一性的保证。
- PRIMARY KEY 拥有自动定义的 UNIQUE 约束。
- 请注意,每个表可以有多个 UNIQUE 约束,但是每个表只能有一个 PRIMARY KEY 约束
- PRIMARY KEY 约束唯一标识数据库表中的每条记录。
- 主键必须包含唯一的值。
- 主键列不能包含 NULL 值。
- 每个表都应该有一个主键,并且每个表只能有一个主键。
- 一个表中的 FOREIGN KEY 指向另一个表中的 PRIMARY KEY。
CREATE TABLE Persons(
Id_P INT NOT NULL,
LastName VARCHAR(255) NOT NULL,
FirstName VARCHAR(255),
Address VARCHAR(255),
City VARCHAR(255),
CHECK (Id_P>0)
)
DEFAULT 约束用于向列中插入默认值。
如果没有规定其他的值,那么会将默认值添加到所有的新记录。
CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
City varchar(255) DEFAULT 'Sandnes'
)
CREATE TABLE Orders
(
Id_O int NOT NULL,
OrderNo int NOT NULL,
Id_P int,
OrderDate date DEFAULT GETDATE()
)
ALTER TABLE person
ADD kaya INT
ALTER TABLE person
DROP COLUMN city
SQL函数
- 函数的基本类型是:Aggregate 函数/Scalar 函数
- 求平均值——SELECT AVG(id) FROM e_class
- 返回匹配指定条件的行数——SELECT COUNT(*/id/DISTINCT id) FROM e_class
- 返回指定的字段中第一个记录的值——SELECT FIRST(id) AS id FROM e_class
- 返回指定的字段中最后一个记录的值——LAST同上
- MAX 函数返回一列中的最大值。NULL 值不包括在计算中——同上
- MIN 函数返回一列中的最小值。NULL 值不包括在计算中——同上
- SUM 函数返回数值列的总数(总额)——SELECT SUM(id) FROM e_class
- GROUP BY 语句用于结合合计函数,根据一个或多个列对结果集进行分组——
SELECT id, aggregate_function(id)
FROM e_class
WHERE id operator value
GROUP BY name
例如
SELECT Customer,SUM(OrderPrice) FROM Orders
GROUP BY Customer