创建、删除表

  • 创建
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    CREATE TABLE [USER](
    id int not null,
    name varchar(20),
    age int,
    address varchar(50),
    phone varchar(11),
    primary key(id)
    );

    --验证表是否已经创建成功
    exec sp_columns CUSTOMERS
  • 删除
    1
    DROP TABLE [USER]

增删改查记录

  • 增加

    1
    2
    3
    4
    5
    6
    INSERT INTO Customer(id,name,age,cardId) VALUES(123,'测试',19,23)

    INSERT INTO Customer VALUES (7, 'Muffy', '男', 24, '18551032548', '', '', '', 100);

    INSERT INTO first_table
    select columns from second_table [where condition]
  • 删除

    1
    2
    DELETE FROM table_name 
    WHERE [condition];
  • 修改

    1
    2
    3
    UPDATE table_name 
    SET column1 = value1, column2 = value2...., columnN = valueN
    WHERE [condition];
  • 查询

    1
    2
    SELECT * FROM table_name;
    SELECT columns FROM table_name;

** where 条件过滤**

模糊查询

LIKE子句用于使用通配符运算符将值与类似值进行比较。 有两个通配符与LIKE运算符结合使用:

百分号(%)
下划线(_)

1
SELECT * FROM Customer WHERE name LIKE '%三'; 

排序方式

ORDER BY子句用于根据一个或多个列以升序或降序[ASC | DESC]对数据进行排序。 默认情况按升序排列。

1
SELECT * FROM Customer ORDER BY name DESC

分组

GROUP BY子句与SELECT语句协作使用,以将相同的数据分组。GROUP BY子句位于SELECT语句中的WHERE子句之后,位于ORDER BY子句之前。

去重复

DISTINCT关键字与SELECT语句一起使用,以消除所有重复记录并仅提取唯一记录。

1
SELECT DISTINCT age FROM Customer ORDER BY age 

连接表

Joins子句用于合并数据库中两个或多个表的记录。 JOIN是通过使用每个表共有的值来组合两个表的字段的手段。

1
2
3
4
5
6
SELECT ID, NAME, AGE, AMOUNT 
FROM CUSTOMERS, ORDERS
WHERE CUSTOMERS.ID = ORDERS.CUSTOMER_ID

SELECT A.ID, A.NAME, A.AGE, B.AMOUNT
FROM CUSTOMERS A inner join ORDERS B on A.ID = B.Customer_ID
  1. INNER JOIN -当两个表中都有匹配项时返回行。
  2. LEFT JOIN -返回左侧表中的所有行,即使右表中没有匹配项。
  3. RIGHT JOIN -返回右表中的所有行,即使左表中没有匹配项。
  4. FULL JOIN -在其中一个表中存在匹配项时返回行。
  5. SELF JOIN -这用于将表连接到自身,就像该表是两个表,临时重命名MS SQL Server语句中的至少一个表。
  6. CARTESIAN JOIN -返回两个或多个联接表中的记录集的笛卡尔乘积。

子查询、嵌套查询

子查询语句必须写在括号内。
子查询必须包括SELECT子句和FROM子句。
子查询可以使用WHERE,GROUP BY和HAVING子句。
子查询不能使用COMPUTE或FOR BROWSE子句。
只有在使用了TOP子句时,才能使用ORDER BY子句。
可以嵌套最多32个级别的子查询。

存储过程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
create procedure StuProc
@sname varchar(100),
@IsRight int output //传出参数
as
if exists (select S#,Sname,Sage,Ssex from student where sname=@sname)
set @IsRight =1
else
set @IsRight=0
go

declare @IsRight int
exec StuProc '赵雷' , @IsRight output
select @IsRight

--------------调用存储过程-----------------
EXECUTE Procedure_name '' --存储过程如果有参数,后面加参数格式为:@参数名=value,也可直接为参数值value

--------------删除存储过程-----------------
drop procedure procedure_name --在存储过程中能调用另外一个存储过程,而不能删除另外一个存储过程
  • 查看存储过程

    数据库 -> 可编程性 -> 存储过程

  • 存储过程的优点

    存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度,效率要比T-SQL语句高。
    当对数据库进行复杂操作时,可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。
    一个存储过程在程序在网络中交互时可以替代大堆的T-SQL语句,所以也能降低网络的通信量,提高通信速率。
    存储过程可以重复使用,可减少数据库开发人员的工作量。
    安全性高,可设定只有某些用户才具有对指定存储过程的使用权

详细实例全面解析SQL存储过程

事务

事务是将一个或多个执行命令发送到数据库。事务对于确保数据完整性和处理数据库错误是非常重要。

事务属性,通常由首字母缩写ACID简称

原子性 -确保工作单元内的所有操作成功完成; 否则,事务在故障点处中止,并且先前的操作被回滚到它们的原先状态。
一致性 -确保数据库在成功提交的事务后正确更改状态。
隔离性 -事务之间是独立运行互不相关的。
持久性 -事务一旦被执行,即使系统故障,其结果依然有效。

事务控制

COMMIT-提交事务。
ROLLBACK -回滚事务。
SAVEPOINT -创建事务的回滚节点。
SET TRANSACTION -设置事务名称。

1
2
3
Begin Tran 
DELETE FROM CUSTOMERS WHERE AGE = 25
COMMIT/ROLLBACK

索引

1
2
3
4
5
6
7
8
9
10
11
--单列索引
CREATE INDEX singlecolumnindex ON Customer (id)

--唯一索引
CREATE UNIQUE INDEX uniqueindex on Customer (name)

--复合索引
CREATE INDEX compositeindex on customers (name, id)

--删除索引
DROP INDEX tablename.index_name

什么时候避免索引?

  • 不应在小表上使用索引。
  • 经常进行大批量更新或插入操作的表不应设置索引。
  • 不应在可能含大量NULL值的列上使用索引。
  • 频繁操作的列不应设置索引。

函数

count()
max() min()
avg()
sum()
sqrt()
rand()
concat()

SQL语句大全
参考资料
快速指南