http://www.w3school.com.cn/sql/
1、limit x,y 或 limit z :选取从x开始的y条数据 或 选取最开始的 z条数据
select * from product limit 0,10 select * from product limit 10
2、like '%N%' : 模糊查询 查找出含有 ‘N’ 的数据
select * from product where product_name like '%饼%'
3、in ('x','y') : 查询指定字段为x或者y的数据
select * from product where warehouse in ('二院店','农夫店')
4、between 'x' and 'y' :查询指定字段间于x,y之间的值 (这些值可以是数值、文本或者日期)
select * from storage where last_time between '1460937599' and '1460937601' /*在此范围的*/
select * from storage where last_time not between '1460937599' and '1460937601' /*不在此范围的*/
5、as : 组合查询 设置别名
select s.bar_code as bar_code,s.warehouse,s.num as stock,s.last_time,p.supplier from storage as s,product as p where s.bar_code = p.bar_code
6、join :
- INNER JOIN,JOIN: 如果表中有至少一个匹配,则返回行
- LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行
- RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行
- FULL JOIN: 只要其中一个表中存在匹配,就返回行
inner join:
select s.bar_code as bar_code,s.warehouse,s.num as stock,s.last_time,p.supplier from storage as s inner join product as p on (s.bar_code = p.bar_code)
left join:
select s.bar_code as bar_code,s.warehouse,s.num as stock,s.last_time,p.supplier from storage as s left join product as p on (s.bar_code = p.bar_code)
right join :
select s.bar_code as bar_code,s.warehouse,s.num as stock,s.last_time,p.supplier from storage as s right join product as p on (s.bar_code = p.bar_code)
full join : MySQL 不支持 可以用 LEFT JOIN + UNION + RIGHT JOIN 来实现
select s.bar_code as bar_code,s.warehouse,s.num as stock,s.last_time,p.supplier from storage as s left join product as p on(s.bar_code = p.bar_code) union all select s.bar_code as bar_code,s.warehouse,s.num as stock,s.last_time,p.supplier from storage as s right join product as p on(s.bar_code = p.bar_code)
7、union : UNION 操作符用于合并两个或多个 SELECT 语句的结果集。UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。例子如 上面的full join
注释:默认地,UNION 操作符选取不同的值。如果允许重复的值,请使用 UNION ALL。
8、select into : 用于创建备份表
select s.bar_code as bar_code,s.warehouse,s.num as stock,s.last_time,p.supplier into storage_product_backup from storage as s inner join product as p where s.bar_code = p.bar_code /*未测试*/
9、create database : 如果没有则创建新的数据库
create database if not exists database_name
10、create table : 如果没有则创建新的表
create table if not exists Persons ( Id_P int, LastName varchar(255), FirstName varchar(255), Address varchar(255), City varchar(255) )
SQL约束
- NOT NULL
- UNIQUE
- PRIMARY KEY
- FOREIGN KEY
- CHECK
- DEFAULT
NOT NULL :不为空
UNIQUE 和 PRIMARY KEY:UNIQUE 约束唯一标识数据库表中的每条记录。UNIQUE 和 PRIMARY KEY 约束均为列或列集合提供了唯一性的保证。PRIMARY KEY 拥有自动定义的 UNIQUE 约束。请注意,每个表可以有多个 UNIQUE 约束,但是每个表只能有一个 PRIMARY KEY 约束。
CREATE TABLE Persons ( Id_P int NOT NULL, LastName varchar(255) NOT NULL, FirstName varchar(255), Address varchar(255), City varchar(255), UNIQUE (Id_P) )
如果需要命名 UNIQUE 约束,以及为多个列定义 UNIQUE 约束,请使用下面的 SQL 语法:
ALTER TABLE Persons ADD CONSTRAINT uc_PersonID UNIQUE (Id_P,LastName)
对已存在的表添加约束 ADD UNIQUE
ALTER TABLE Persons
ADD UNIQUE (Id_P)
撤销 UNIQUE 约束
ALTER TABLE Persons DROP INDEX uc_PersonID
PRIMARY KEY : 主键 等价于 唯一 (UNIQUE) 且 非空 (NOT NULL)
FOREIGN KEY :外键 一张表的外键关联另外一张表的主键。如果想要在MySQL中根据参照完整性来建立表并且希望在此基础上保持良好的性能,最好选择表结构为innoDB类型。
外键的应用实例:http://www.cppblog.com/wolf/articles/69089.html
CHECK : 条件约束
DEFAULT : 默认值
11、Create Index :创建索引
CREATE INDEX PersonIndex ON Person (LastName, FirstName)
Drop Index : 删除索引
12、Alter Table :语句用于在已有的表中添加、修改或删除列。
13、AUTO INCREMENT :每次插入新记录时,自动地创建主键字段的值。 可以设置起始值(例:100)
CREATE TABLE Persons ( P_Id int NOT NULL AUTO_INCREMENT=100, LastName varchar(255) NOT NULL, FirstName varchar(255), Address varchar(255), City varchar(255), PRIMARY KEY (P_Id) )
14、View : 视图
/*创建视图*/ CREATE VIEW view_name AS SELECT column_name(s) FROM table_name WHERE condition /*更新视图*/ SQL CREATE OR REPLACE VIEW Syntax CREATE OR REPLACE VIEW view_name AS SELECT column_name(s) FROM table_name WHERE condition /*删除视图*/ SQL DROP VIEW Syntax DROP VIEW view_name
15、SQL 日期:date
下面的表格列出了 MySQL 中最重要的内建日期函数:
函数 | 描述 |
---|---|
NOW() | 返回当前的日期和时间 |
CURDATE() | 返回当前的日期 |
CURTIME() | 返回当前的时间 |
DATE() | 提取日期或日期/时间表达式的日期部分 |
EXTRACT() | 返回日期/时间按的单独部分 |
DATE_ADD() | 给日期添加指定的时间间隔 |
DATE_SUB() | 从日期减去指定的时间间隔 |
DATEDIFF() | 返回两个日期之间的天数 |
DATE_FORMAT() | 用不同的格式显示日期/时间 |
MySQL 使用下列数据类型在数据库中存储日期或日期/时间值:
- DATE - 格式 YYYY-MM-DD
- DATETIME - 格式: YYYY-MM-DD HH:MM:SS
- TIMESTAMP - 格式: YYYY-MM-DD HH:MM:SS
- YEAR - 格式 YYYY 或 YY
16、NULLS:IS NULL 和 IS NOT NULL 用于判断数据表字段NULL值
SELECT LastName,FirstName,Address FROM Persons WHERE Address IS (NOT) NULL
17、IFNULL() COALESCE(): 判断NULL并取值 如果是NULL则取指定值
/*我们可以使用 IFNULL() 函数,就像这样:*/ SELECT ProductName,UnitPrice*(UnitsInStock+IFNULL(UnitsOnOrder,0)) FROM Products /*或者我们可以使用 COALESCE() 函数,就像这样:*/ SELECT ProductName,UnitPrice*(UnitsInStock+COALESCE(UnitsOnOrder,0)) FROM Products
18、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。 |
* 即便 DATETIME 和 TIMESTAMP 返回相同的格式,它们的工作方式很不同。在 INSERT 或 UPDATE 查询中,TIMESTAMP 自动把自身设置为当前的日期和时间。TIMESTAMP 也接受不同的格式,比如 YYYYMMDDHHMMSS、YYMMDDHHMMSS、YYYYMMDD 或 YYMMDD。
19、函数
AVG() : 返回数值列的平均值。NULL 值不包括在计算中。
SELECT AVG(OrderPrice) AS OrderAverage FROM Orders SELECT Customer FROM Orders WHERE OrderPrice>(SELECT AVG(OrderPrice) FROM Orders)
COUNT() : 返回指定列的值的数目(NULL 不计入)
FIRST() : 返回指定的字段中第一个记录的值。提示:可使用 ORDER BY 语句对记录进行排序。
LAST() :返回指定的字段中最后一个记录的值。提示:可使用 ORDER BY 语句对记录进行排序。
MAX() :返回一列中的最大值。NULL 值不包括在计算中。
MIN() :返回一列中的最小值。NULL 值不包括在计算中。
SUM() :返回数值列的总数(总额)
GROUP BY() :用于结合合计函数,根据一个或多个列对结果集进行分组。消除完全相同的结果行。
HAVING :在使用GROUP BY()时,由于不能与WHERE一起使用,因此使用HAVING替代WHERE。
UCASE() : 把字段的值转换为大写。
LCASE() : 把字段的值转换为小写。
MID() : 用于从文本字段中提取字符,类似截取字符串
SELECT MID(column_name,start[,length]) FROM table_name
参数 | 描述 |
---|---|
column_name | 必需。要提取字符的字段。 |
start | 必需。规定开始位置(起始值是 1)。 |
length |
可选。要返回的字符数。如果省略,则 MID() 函数返回剩余文本。 |
LEN() : 返回文本字段中值的长度
NOW() : 返回当前的日期和时间。
FORMAT() : 用于对字段的显示进行格式化。
SELECT ProductName, UnitPrice, FORMAT(Now(),'YYYY-MM-DD') as PerDate FROM Products
SELECT FORMAT(column_name,format) FROM table_name
参数 | 描述 |
---|---|
column_name | 必需。要格式化的字段。 |
format | 必需。规定格式。 |
ROUND() : 用于把数值字段舍入为指定的小数位数。
SELECT ROUND(column_name,decimals) FROM table_name
参数 | 描述 |
---|---|
column_name | 必需。要舍入的字段。 |
decimals | 必需。规定要返回的小数位数。 |