创建数据库
CREAT DATABASE book
ON PRIMARY
(NAME=book_data,
FILENAME='D:\book.mdf',
SIZE=55,
MAXSIZE=120,
FILEGROWTH=10%)
LOG ON
(NAME=book_log,
FILENAME='D:\book.ldf',
SIZE=12,
MAXSIZE=30,
FILEGROWTH=3)
查看数据库信息
sp_helpdb 'book'
打开切换数据库
USE book
扩充数据库容量
USE book
Go
ALTER DATABASE book
MODIFY FILE
(NAME='D:\book.mdf',
SIZE=60)
数据库缩减至最小容量
USE book
Go
DBCC SHRINKDATABASE('book')
查看数据库选项
EXEC sp_dboption 'book'
将数据库设为只读状态
EXEC sp_dboption 'book','read_only',True
数据库更名
EXEC sp_dboption 'book','single user','true'
EXEC sp_renamedb 'book','shu'
EXEC sp_dboption 'shu','single user','false'
删除数据库
DROP DATABASE book
创建用户自定义类型
USE book
GO
EXEC sp_addtype meetingday, smalldatetime, 'NOT NULL'
删除用户自定义类型
USE book
GO
EXEC sp_droptype 'meetingday'
创建表
USE book
GO
CREATE TABLE book1
(编号 CHAR(8) NOT NULL,
ISBN号 CHAR(13) NOT NULL,
书名 NVARCHAR(255),
定价 MONEY,
出版社 NVARCHAR(255),
出版日期 DATETIME)
在表中增加列(允许空)
USE book
GO
ALTER TABLE book1
ADD 作者 varchar NULL
删除列
USE book
GO
ALTER TABLE book1
DROP COLUMN 作者
修改列属性
USE book
GO
ALTER TABLE book1
ALTER COLUMN 定价 smallmoney
查看表结构
sp_help book1
查看数据
USE book
SELECT *
FROM book1
向表中插入数据
USE book
INSERT INTO book1
VALUES('01021001','7302112111','SQL数据库',35,'中山大学','03-12-2007')
修改表中的数据
USE book
UPDATE book1
SET 出版社='华南师大'
WHERE ISBN号='7302112111'
删除制定行的数据
USE book
DELETE
FROM book1
WHERE 定价=100
删除表中所有数据
USE book
DELETE
FROM book1
删除表
USE book
DROP TABLE book1
创建check约束
USE book
ALTER TABLE teacher
ADD
CONSTRAINT CK_teacher CHECK(性别='男' or 性别='女')
删除check约束
ALTER TABLE teacher
DROP CONSTRAINT CK_teacher
创建default约束
USE book
ALTER TABLE teacher
ADD CONSTRAINT DE_性别 DEFAULT '男' FOR 性别
删除default约束
ALTER TABLE teacher
DROP CONSTRAINT DE_性别
创建primary key约束
ALTER TABLE teacher
ADD CONSTRAINT PK_作者编号 PRIMARY KEY CLUSTERED(作者编号)
删除primary key约束
ALTER TABLE teacher
DROP CONSTRAINT PK_作者编号
创建foreign key约束
ALTER TABLE book1
ADD CONSTRAINT PK_编号 PRIMARY KEY CLUSTERED(编号)
ALTER TABLE bookin
ADD CONSTRAINT FK_编号 FOREIGN KEY (编号)
REFERENCE book1(编号)
创建默认值
USE book
GO
CREATE DEFAULT DF_定价
AS '100'
GO
绑定默认值
EXEC sp_bindefault 'MR_定价', 'book1.定价'
创建规则
USE book
GO
CREATE RULE RU_定价
AS @定价>=0 and @定价<=10000
GO
绑定规则
EXEC sp_bindrule 'RU_定价', 'book2.定价'
BETWEEN关键字
SELECT 书名
FROM book1
WHERE 定价 BETWEEN 1000 AND 2000
COMPUTE子句
计算总计或进行分组小计,
总计值或小计值作为附加的新行出现在查询结果中,
用在WHERE子句后。
SELECT 书名
FROM book1
WHERE 定价 BETWEEN 1000 AND 2000
COMPUTE AVG(定价)
COMPUTE BY子句
对BY后的列进行分组显示,并计算该列的分组小计。
必须按照ORDER BY中指定的列进行排序。
SELECT 书名
FROM book1
ORDER BY 出版社
COMPUTE AVG(定价) BY 出版社
GROUP BY子句
按照BY后制定的列分组,
写在WHERE子句后,
SELECT子句中包含聚合函数时,适合使用该子句。
SELECT 出版社
FROM book1
GROUP BY 出版社
HAVING子句
限定组或聚合函数的查询条件。
常用在GROUP BY子句之后,在结果集分组之后再进行判断。
①先分组再判断
SELECT 出版社, AVG(定价) AS '平均价格'
FROM book1
GROUP BY 出版社
HAVING 出版社='高教社
②先判断再分组
SELECT 出版社, AVG(定价) AS '平均价格'
FROM book1
GROUP BY 出版社
WHERE 出版社='高教社'
③在分组结果中判断
SELECT 出版社, AVG(定价) AS '平均价格'
FROM book1
GROUP BY 出版社
HAVING AVG(定价)>60
嵌套查询
SELECT 编号,书名,定价
FROM book1
WHERE 定价>(SELECT AVG(定价) FROM book1)
UNION运算符
SELECT 书名 FROM book1
UNION
SELECT 编号 FROM book2
SELECT 书名 FROM book1
UNION
SELECT 编号 FROM book2
ORDER BY 书名 DESC
多表查询
产生笛卡尔积的查询
SELECT *
FROM book1, teacher
内连接-相等连接
先计算笛卡尔积,然后消除不满条件的记录
SELECT *
FROM book2, teacher
WHERE book2.编号 = teacher.编号
SELECT *
FROM book2
INNER JOIN teacher
ON book2.编号 = teacher.编号
内连接-自然连接
SELECT book2.* , 作者姓名, 职称
FROM book2, teacher
WHERE book2.编号 = teacher.编号
SELECT book2.* , 作者姓名, 职称
FROM book2
INNER JOIN teacher
ON book2.编号 = teacher.编号
自连接
SELECT a.编号,a.书名,a.定价,a.出版日期
FROM book2 as a, book2 as b
WHERE a.出版社 = b.出版社 AND a.编号<> '01021002' AND b.编号 = '01021003'
左外连接
先计算两个表的自然连接,然后加上左表与右表不匹配的行,并用空值填充来自右表的列。
SELECT b.书名,b.出版社,b.ISBN号,t.作者姓名
FROM teacher as t
LEFT JOIN book1 as b
ON b.编号= t.编号
右外连接
SELECT b.书名,b.出版社,b.ISBN号,t.作者姓名
FROM teacher as t
RIGHT JOIN book1 as b
ON b.编号= t.编号
全外连接
完成左连接和右连接,包括左右表不满足条件的行。
SELECT b.书名,b.出版社,b.ISBN号,t.作者姓名
FROM teacher as t
FULL JOIN book1 as b
ON b.编号= t.编号
EXISTS子句
SELECT 书名,定价
FROM book1 as b
WHERE EXISTS(SELECT t.编号 FROM teacher as t WHERE t.编号 = b.编号)
创建索引
聚集、唯一、简单索引
CREATE UNIQUE CLUSTERED
INDEX IX_book1
ON book1(编号)