sql server学习笔记

  • Post author:
  • Post category:其他


2016/1/25 10:03:24


1.select top

SELECT TOP 子句用于规定要返回的记录的数目。

注释:并非所有的数据库系统都支持 SELECT TOP 子句。

SQL Server / MS Access 语法

SELECT TOP number|percent column_name(s)
FROM table_name;

2.like

LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式。

SELECT column_name(s)
FROM table_name
WHERE column_name LIKE pattern;

3.通配符

通配符可用于替代字符串中的任何其他字符。

SQL 通配符

在 SQL 中,通配符与 SQL LIKE 操作符一起使用。

SQL 通配符用于搜索表中的数据。

在 SQL 中,可使用一下通配符:

通配符 描述
% 替代 0 个或多个字符
_ 替代一个字符
[charlist] 字符列中的任何单一字符
[^charlist]or[!charlist] 不在字符列中的任何单一字符

使用 SQL [charlist] 通配符

下面的 SQL 语句选取 City 以 “b”、”s” 或 “p” 开始的所有客户:

实例

SELECT * FROM Customers
WHERE City LIKE '[bsp]%';

下面的 SQL 语句选取 City 不以 “b”、”s” 或 “p” 开始的所有客户:

实例

SELECT * FROM Customers
WHERE City LIKE '[!bsp]%';

4.in

IN 操作符允许您在 WHERE 子句中规定多个值。

SQL IN 语法

SELECT column_name(s)
FROM table_name
WHERE column_name IN (value1,value2,...);

5.between

BETWEEN 操作符用于选取介于两个值之间的数据范围内的值。

BETWEEN 操作符选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。

SQL BETWEEN 语法

SELECT column_name(s)
FROM table_name
WHERE column_name BETWEEN value1 AND value2;

6.Aliases别名

通过使用 SQL,可以为表名称或列名称指定别名(Alias)。

列的 SQL Alias 语法

SELECT column_name AS alias_name
FROM table_name;

表的 SQL Alias 语法

SELECT column_name(s)
FROM table_name AS alias_name;

7.Joins连接

SQL join 用于把来自两个或多个表的行结合起来。

SQL JOIN 子句用于把来自两个或多个表的行结合起来,基于这些表之间的共同字段。

最常见的 JOIN 类型:SQL INNER JOIN(简单的 JOIN)。 SQL INNER JOIN 从多个表中返回满足 JOIN 条件的所有行。

实例

SELECT Orders.OrderID, Customers.CustomerName, Orders.OrderDate
FROM Orders
INNER JOIN Customers
ON Orders.CustomerID=Customers.CustomerID;

不同的 SQL JOIN(内连接/左外联接/右外连接/全连接)

  • INNER JOIN:如果表中有至少一个匹配,则返回行
  • LEFT JOIN:即使右表中没有匹配,也从左表返回所有的行
  • RIGHT JOIN:即使左表中没有匹配,也从右表返回所有的行
  • FULL JOIN:只要其中一个表中存在匹配,则返回行

8.UNION

SQL UNION 操作符合并两个或多个 SELECT 语句的结果。

SQL UNION 操作符

UNION 操作符用于合并两个或多个 SELECT 语句的结果集。

请注意,UNION 内部的每个 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每个 SELECT 语句中的列的顺序必须相同。

SQL UNION 语法
SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;

注释:默认地,UNION 操作符选取不同的值。如果允许重复的值,请使用 UNION ALL。

SQL UNION ALL 语法
SELECT column_name(s) FROM table1
UNION ALL
SELECT column_name(s) FROM table2;

9.SELECT INTO

通过 SQL,您可以从一个表复制信息到另一个表。

SELECT INTO 语句从一个表复制数据,然后把数据插入到另一个新表中。

SQL SELECT INTO 语法

SELECT *
INTO newtable [IN externaldb]
FROM table1;

使用 IN 子句来复制表到另一个数据库中:

SELECT *
INTO CustomersBackup2013 IN 'Backup.mdb'
FROM Customers;

10.INSERT INTO SELECT

通过 SQL,您可以从一个表复制信息到另一个表。

INSERT INTO SELECT 语句从一个表复制数据,然后把数据插入到一个已存在的表中。


SQL INSERT INTO SELECT 语法

INSERT INTO table2
SELECT * FROM table1;

11.create创建数据库和表


创建数据库

CREATE DATABASE dbname;


创建表

CREATE TABLE table_name
(
column_name1 data_type(size),
column_name2 data_type(size),
column_name3 data_type(size),
....
);

12.约束(Constraints)

在 SQL 中,有如下约束:

  • NOT NULL – 指示某列不能存储 NULL 值。
  • UNIQUE – 保证某列的每行必须有唯一的值。
  • PRIMARY KEY – NOT NULL 和 UNIQUE 的结合。确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速地找到表中的一个特定的记录。
  • FOREIGN KEY – 保证一个表中的数据匹配另一个表中的值的参照完整性。
  • CHECK – 保证列中的值符合指定的条件。
  • DEFAULT – 规定没有给列赋值时的默认值。

13.CREATE INDEX

CREATE INDEX 语句用于在表中创建索引。

在不读取整个表的情况下,索引使数据库应用程序可以更快地查找数据。


索引

您可以在表中创建索引,以便更加快速高效地查询数据。

用户无法看到索引,它们只能被用来加速搜索/查询。

注释:更新一个包含索引的表需要比更新一个没有索引的表花费更多的时间,这是由于索引本身也需要更新。因此,理想的做法是仅仅在常常被搜索的列(以及表)上面创建索引。

SQL CREATE INDEX 语法

在表上创建一个简单的索引。允许使用重复的值:

CREATE INDEX index_name
ON table_name (column_name)
SQL CREATE UNIQUE INDEX 语法

在表上创建一个唯一的索引。不允许使用重复的值:唯一的索引意味着两个行不能拥有相同的索引值。

Creates a unique index on a table. Duplicate values are not allowed:
CREATE UNIQUE INDEX index_name
ON table_name (column_name)

注释:用于创建索引的语法在不同的数据库中不一样。因此,检查您的数据库中创建索引的语法。

14.DROP

通过使用 DROP 语句,可以轻松地删除索引、表和数据库。

用于 MS SQL Server 的 DROP INDEX 语法:

DROP INDEX table_name.index_name

15.ALTER TABLE

ALTER TABLE 语句

ALTER TABLE 语句用于在已有的表中添加、删除或修改列。

SQL ALTER TABLE 语法

如需在表中添加列,请使用下面的语法:

ALTER TABLE table_name
ADD column_name datatype

如需删除表中的列,请使用下面的语法(请注意,某些数据库系统不允许这种在数据库表中删除列的方式):

ALTER TABLE table_name
DROP COLUMN column_name

要改变表中列的数据类型,请使用下面的语法:

SQL Server / MS Access:

ALTER TABLE table_name
ALTER COLUMN column_name datatype

16.AUTO INCREMENT

Auto-increment 会在新记录插入表中时生成一个唯一的数字。

AUTO INCREMENT 字段

我们通常希望在每次插入新记录时,自动地创建主键字段的值。

我们可以在表中创建一个 auto-increment 字段。

用于 SQL Server 的语法

下面的 SQL 语句把 “Persons” 表中的 “ID” 列定义为 auto-increment 主键字段:

CREATE TABLE Persons
(
ID int IDENTITY(1,1) PRIMARY KEY,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)

MS SQL Server 使用 IDENTITY 关键字来执行 auto-increment 任务。

在上面的实例中,IDENTITY 的开始值是 1,每条新记录递增 1。

提示:要规定 “ID” 列以 10 起始且递增 5,请把 identity 改为 IDENTITY(10,5)。

要在 “Persons” 表中插入新记录,我们不必为 “ID” 列规定值(会自动添加一个唯一的值):

INSERT INTO Persons (FirstName,LastName)
VALUES ('Lars','Monsen')

上面的 SQL 语句会在 “Persons” 表中插入一条新记录。”ID” 列会被赋予一个唯一的值。”FirstName” 列会被设置为 “Lars”,”LastName” 列会被设置为 “Monsen”。

17.Views视图

视图是可视化的表。几乎都不用了,可以借助软件的可视化效果看到结果

SQL CREATE VIEW 语句

在 SQL 中,视图是基于 SQL 语句的结果集的可视化的表。

视图包含行和列,就像一个真实的表。视图中的字段就是来自一个或多个数据库中的真实的表中的字段。

您可以向视图添加 SQL 函数、WHERE 以及 JOIN 语句,也可以呈现数据,就像这些数据来自于某个单一的表一样。

18.SQL日期


SQL 日期(Dates)

当我们处理日期时,最难的任务恐怕是确保所插入的日期的格式,与数据库中日期列的格式相匹配。

只要您的数据包含的只是日期部分,运行查询就不会出问题。但是,如果涉及时间部分,情况就有点复杂了。

MySQL Date 函数

函数 描述
GETDATE() 返回当前的日期和时间
DATEPART() 返回日期/时间的单独部分
DATEADD() 在日期中添加或减去指定的时间间隔
DATEDIFF() 返回两个日期之间的时间
CONVERT() 用不同的格式显示日期/时间

SQL Server 使用下列数据类型在数据库中存储日期或日期/时间值:

  • DATE – 格式:YYYY-MM-DD
  • DATETIME – 格式:YYYY-MM-DD HH:MM:SS
  • SMALLDATETIME – 格式:YYYY-MM-DD HH:MM:SS
  • TIMESTAMP – 格式:唯一的数字

19.NULL

NULL 值代表遗漏的未知数据。

默认地,表的列可以存放 NULL 值。

IS NULL 和 IS NOT NULL 操作符才可以匹配NULL值

NULL函数:


SQL Server / MS Access

ISNULL() 如果列值是NULL则返回0,这样的NULL参与计算不会造成数据错误

20.SQL Server数据类型

21.聚合函数和分级函数

SQL Aggregate 函数

  • AVG() – 返回平均值
  • COUNT() – 返回行数
  • FIRST() – 返回第一个记录的值
  • LAST() – 返回最后一个记录的值
  • MAX() – 返回最大值
  • MIN() – 返回最小值
  • SUM() – 返回总和

SQL Scalar 函数

  • UCASE() – 将某个字段转换为大写
  • LCASE() – 将某个字段转换为小写
  • MID() – 从某个文本字段提取字符
  • LEN() – 返回某个文本字段的长度
  • ROUND() – 对某个数值字段进行指定小数位数的四舍五入
  • NOW() – 返回当前的系统日期和时间
  • FORMAT() – 格式化某个字段的显示方式

22.分组和结果筛选

  • GROUP BY 语句用于结合 Aggregate 函数,根据一个或多个列对结果集进行分组。
  • 在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与 Aggregate 函数一起使用。



版权声明:本文为kang82651204原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。