# 创建时添加 CREATE TABLE Persons ( P_Id int NOT NULL, LastName varchar(255) NOT NULL, FirstName varchar(255), Address varchar(255), City varchar(255) DEFAULT 'Sandnes' ); # 默认时间 CREATE TABLE Orders ( O_Id int NOT NULL, OrderNo int NOT NULL, P_Id int, OrderDate date DEFAULT GETDATE() ); # 向已创建表添加单个约束 ALTER TABLE Persons ALTER City SET DEFAULT 'SANDNES' # 删除约束 ALTER TABLE Persons ALTER City DROP DEFAULT
# 添加允许重复值的索引 CREATE INDEX index_name ON table_name (column_names) # 添加不允许重复值的索引 CREATE UNIQUE INDEX index_name ON table_name (column_names) # 删除索引 ALTER TABLE table_name DROP INDEX index_name
关键字:auto increment 在新记录插入表中时生成一个唯一的数字
可以用于在每次插入新记录时,自动地创建主键字段的值。
1 2 3 4 5 6 7 8 9 10 11 12
CREATE TABLE Persons ( ID int NOT NULL AUTO_INCREMENT, LastName varchar(255) NOT NULL, FirstName varchar(255), Address varchar(255), City varchar(255), PRIMARY KEY (ID) ) # 默认地,AUTO_INCREMENT 的开始值是1,每条新记录递增1。 # 要让 AUTO_INCREMENT 序列以其他的值起始,请使用下面的 SQL 语法: ALTER TABLE Persons AUTO_INCREMENT=100
函数:Date 时间
SQL Date 数据类型 MySQL 使用下列数据类型在数据库中存储日期或日期/时间值: DATE - 格式:YYYY-MM-DD DATETIME - 格式:YYYY-MM-DD HH:MM:SS TIMESTAMP - 格式:YYYY-MM-DD HH:MM:SS YEAR - 格式:YYYY 或 YY
SELECT EXTRACT(YEAR FROM OrderDate) AS OrderYear, EXTRACT(MONTH FROM OrderDate) AS OrderMonth, EXTRACT(DAY FROM OrderDate) AS OrderDay FROM Orders WHERE OrderId=1
在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与聚合函数一起使用 HAVING 子句可以让我们筛选分组后的各组数据
1 2 3 4 5 6 7 8 9 10 11 12
SELECT column_name, aggregate_function(column_name) FROM table_name WHERE column_name operator value GROUP BY column_name HAVING aggregate_function(column_name) operator value; # 实例 SELECT Websites.name, SUM(access_log.count) AS nums FROM Websites INNER JOIN access_log ON Websites.id=access_log.site_id WHERE Websites.alexa < 200 GROUP BY Websites.name HAVING SUM(access_log.count) > 200;
SELECT column_name(s) FROM table_name WHERE EXISTS (SELECT column_name FROM table_name WHERE condition);
关键字:rank 排名
sql 四大排名函数: ROW_NUMBER、RANK、DENSE_RANK、NTILE
ROW_NUMBER
1 2 3 4
# ROW_NUMBER()函数作用就是将select查询到的数据进行排序,每一条数据加一个序号 # ROW_NUMBER()不存在相同的序号,当存在相同数据时,ROW_NUMBER()会依次进行排序,他们序号不相同 select ROW_NUMBER() over (order by column_name desc/asc) from table_name
RANK
1 2 3 4
# RANK()存在相同的序号,当存在相同数据时,他们序号是一样的 # RANK()是跳跃的排名 select RANK() over (order by column_name desc/asc) from table_name
DENSE_RANK
1 2 3 4
# DENSE_RANK()存在相同的序号,当存在相同数据时,他们序号是一样的 # DENSE_RANK()是连续的排名 select DENSE_RANK() over (order by column_name desc/asc) from table_name
NTILE
1 2 3 4
# NTILE()函数是将有序分区中的行分发到指定数目的组中,各个组有编号,编号从1开始 # number是分区的个数 select NTILE(number) over (order by column_name desc/asc) from table_name