SQL SELECT TOP 子句
在 Microsoft SQL Server 中还可以使用百分比作为参数。
下面的 SQL 语句从 websites 表中选取前面百分之 50 的记录:
SELECT TOP 50 PERCENT * FROM Websites;
变相返回后 N 行:
–前5行
select top 5 * from table
–后5行
select top 5 * from table order by id desc --desc 表示降序排列 asc 表示升序
SQL IN 操作符
IN 操作符允许您在 WHERE 子句中规定多个值。
下面的 SQL 语句选取 name 为 “Google” 或 “菜鸟教程” 的所有网站:
SELECT * FROM Websites WHERE name IN ('Google','菜鸟教程');
in 与 = 的转换
select * from Websites where name in ('Google','菜鸟教程');
可以转换成 = 的表达:
select * from Websites where name='Google' or name='菜鸟教程';
SQL BETWEEN 操作符
下面的 SQL 语句选取 alexa 介于 1 和 20 之间但 country 不为 USA 和 IND 的所有网站:
实例
SELECT * FROM Websites
WHERE (alexa BETWEEN 1 AND 20)
AND country NOT IN ('USA', 'IND');
SQL INNER JOIN 关键字
INNER JOIN 与 JOIN 是相同的。
1. A inner join B 取交集。
2. A left join B 取 A 全部,B 没有对应的值为 null。
3. A right join B 取 B 全部 A 没有对应的值为 null。
4. A full outer join B 取并集,彼此没有对应的值为 null。
对应条件在 on 后面填写。
SQL UNION 操作符
请注意,UNION 内部的每个 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每个 SELECT 语句中的列的顺序必须相同。
默认地,UNION 操作符选取不同的值。如果允许重复的值,请使用 UNION ALL。
使用UNION命令时需要注意,只能在最后使用一个ORDER BY命令,是将两个查询结果合在一起之后,再进行排序!绝对不能写两个ORDER BY命令。
另外,在使用ORDER BY排序时,注意两个结果的别名保持一致,使用别名排序很方便。当然也可以使用列数。
ORDER BY 除了可以对指定的字段进行排序,还可以使用函数进行排序:
order by abs(a);
SQL INSERT INTO SELECT 语句
INSERT INTO SELECT 语句从一个表复制数据,然后把数据插入到一个已存在的表中。目标表中任何已存在的行都不会受影响。
select into from 和 insert into select 都是用来复制表
两者的主要区别为: select into from 要求目标表不存在,因为在插入时会自动创建;insert into select from 要求目标表存在。
- 复制表结构及其数据:
create table table_name_new as select * from table_name_old
- 只复制表结构:
create table table_name_new as select * from table_name_old where 1=2;
或者:
create table table_name_new like table_name_old
- 只复制表数据:
如果两个表结构一样:
insert into table_name_new select * from table_name_old
如果两个表结构不一样:
insert into table_name_new(column1,column2...) select column1,column2... from table_name_old
SQL 约束(Constraints)
约束可以在创建表时规定(通过 CREATE TABLE 语句),或者在表创建之后规定(通过 ALTER TABLE 语句)。
在 SQL 中,我们有如下约束:
• NOT NULL - 指示某列不能存储 NULL 值。
• UNIQUE - 保证某列的每行必须有唯一的值。
• PRIMARY KEY - NOT NULL 和 UNIQUE 的结合。确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速地找到表中的一个特定的记录。
• FOREIGN KEY - 保证一个表中的数据匹配另一个表中的值的参照完整性。
• CHECK - 保证列中的值符合指定的条件。
• DEFAULT - 规定没有给列赋值时的默认值。
SQL PRIMARY KEY 约束
主键必须包含唯一的值。
主键列不能包含 NULL 值。
每个表都应该有一个主键,并且每个表只能有一个主键。
SQL CHECK 约束
SQL ALTER TABLE 语句
SQL AUTO INCREMENT 字段
我们通常希望在每次插入新记录时,自动地创建主键字段的值。
我们可以在表中创建一个 auto-increment 字段。
SQL Date 函数
提示:如果您希望使查询简单且更易维护,那么请不要在日期中使用时间部分!
SQL NULL 值
无法比较 NULL 和 0;它们是不等价的。
无法使用比较运算符来测试 NULL 值,比如 =、< 或 <>。
必须使用 IS NULL 和 IS NOT NULL 操作符。
NULL 表示的是什么都没有,它与空字符串、0 这些是不等价的,是不能用于比较的!
SQL 函数
SQL COUNT() 函数
SQL MID() 函数
SQL LEN() 函数
SQL FORMAT() 函数
SQL中PERSISTED关键字
指定 SQL Server 数据库引擎将在表中物理存储计算值,而且,当计算列依赖的任何其他列发生更新时对这些计算值进行更新。将计算列标记为 PERSISTED,可允许您对具有确定性、但不精确的计算列创建索引。有关详细信息,请参阅为计算列创建索引。用作已分区表的分区依据列的所有计算列都必须显式标记为 PERSISTED。指定 PERSISTED 时,computed_column_expression
必须具有确定性。