初始SQLServer
创建数据库
- create database 数据库名
创建表
-
选择数据库
- USE MyDb;
-
创建表
CREATE TABLE t_user ( id INT, username VARCHAR(32), password VARCHAR(32), phone VARCHAR(11) )
使用主键约束
方式一:在定义列的同时指定主键
CREATE TABLE t_user
(
id INT primary key,
username VARCHAR(32),
password VARCHAR(32),
phone VARCHAR(11)
)
方式二:在定义完所有列之后,指定主键
CREATE TABLE t_user
(
id INT,
username VARCHAR(32),
password VARCHAR(32),
phone VARCHAR(11),
primary key(id)
)
多字段联合主键
CREATE TABLE t_emp2
(
name VARCHAR(32),
deptId INT,
salary FLOAT,
PRIMARY KEY(name,deptId)
)
外键约束
-
constraint 外键名 foreign key 字段名 references 主表名(主键名) ,在以后,我们统一将外部关键字叫做外键,外键就是另一张表中的主键。
CREATE TABLE t_dept ( deptId INT PRIMARY KEY, name VARCHAR(22), location VARCHAR(50) ); CREATE TABLE t_emp ( id INT PRIMARY KEY, name VARCHAR(22), deptId INT, CONSTRAINT fk_emp_dept1 FOREIGN KEY(deptId) REFERENCES t_dept(deptId) );
添加常用约束
唯一约束
-
怎么添加唯一约束;唯一约束可以确保一列或者几列不出现重复值。使用关键词 UNIQUE
CREATE TABLE t_dept( id INT PRIMARY KEY, name VARCHAR(22) UNIQUE, location VARCHAR(50) )
非空约束
-
怎么添加非空约束; 关键词: NOT NULL 。
CREATE TABLE t_dept( id INT PRIMARY KEY, name VARCHAR(22) NOT NULL, location VARCHAR(50) )
默认约束
-
怎么添加默认约束;默认约束:即给字段一个默认值。关键词: DEFAULT 。
CREATE TABLE t_emp( id INT PRIMARY KEY, name VARCHAR(22), sex VARCHAR(2) DEFAULT '男' )
值自动增加
-
怎么设置字段的值自动增加。在数据库应用中,经常需要在每次插入新纪录时,系统自动生成字段的主键值,关键词:IDENTITY(1,1) 表示自动增长,初始值为 1 ,增量为 1
CREATE TABLE t_tmp ( id int PRIMARY KEY IDENTITY(1,1), name VARCHAR(32) )
数据的插入,删除,更改
插入
插入完整内容的行
INSERT INTO 表名 VALUES ('1000000006','Toy Land','New York',NULL)
插入选定内容的行
INSERT INTO 表名(cust_id,cust_name,cust_city) VALUES ('1000000006','Toy Land','New York')
删除
删除表中的指定行
DELETE FROM 表名 WHERE cust_id=1000000006
删除表中的所有行
DELETE FROM 表名
更改
更新表中的指定行
UPDATE 表名 SET cust_email = 'max@yahoo.com' WHERE cust_id = '1000000005'
数据查询
基本SELECT语句
检索数据表中一个字段的内容
- SELECT 字段名 FROM 表名
检索数据表中多个字段的内容
- SELECT 字段名1, 字段名2, 字段名3 FROM 表名
检索数据表中所有字段的内容
-
如果你仅仅是想要第一行的数据或者前几行的数据
-
SELECT * FROM 表名
带限制条件的查询
限制条件
-
你想知道这一批的书打6折后都是多少钱?你想知道字段 A 和字段 B 加起来是多少?
-
SELECT TOP 行数 字段名 FROM 表名
表达式查询
- SELECT 包含字段名的表达式 AS 新字段名 FROM 表名
使用Where语句进行检索
检索单范围数据
表 Customers 中找到消费大于 1000 的人
SELECT cust_name, cost FROM Customers WHERE cost > 1000
检索双范围数据
表 Customers 中找到消费在 1000~3000 之间的人
SELECT cust_name, cost FROM Customers WHERE cost BETWEEN 1000 AND 3000
检索不匹配某条件的语句
表 Customers 中找到消费者不在 New York 的人
SELECT cust_name, cust_city FROM Customers WHERE cust_city <> 'New York'
通配符的使用
通配符%的使用模糊匹配数据内容的后半部分
模式匹配是大小写敏感的,% 能匹配多个字符
SELECT 字段名 FROM 表名 WHERE 字段名 LIKE '数据%';
通配符%的使用模糊匹配数据内容的任意部分
SELECT * FROM Customers WHERE cust_email LIKE '%yahoo%'
通配符下划线 _ , 只能匹配一个字符!
SELECT 字段名 FROM 表名 WHERE 字段名 LIKE '数据和_的组合'
使用通配符[]模糊匹配数据内容
- SELECT 字段名 FROM 表名 WHERE 字段名 LIKE '[数据]'
表 Customers 中,检索到所有 cust_name 以 a 和 t 开头的消费者的所有数据
SELECT * FROM Customers WHERE cust_name LIKE '[at]%'
使用通配符[]和^模糊匹配取反的数据内容
- 对检索内容进行“取反”。使用符号 ^ 后,我们可以成功的检索到 [] 中没出现的字符
SELECT 字段名 FROM 表名 WHERE 字段名 LIKE '[^数据]'
表 Customers 中,检索到所有 cust_name 不是以 a 和 t 开头的消费者的所有数据
SELECT * FROM Customers WHERE cust_name LIKE '[^at]%'
聚合函数在查询中的使用
多表连接查询
Where取公共部分(和内连接等同连接效果图相同)
SELECT *
FROM student, class
WHERE student.class_id = class.class_id
内连接
等同连接
- 若要连接表 t1 和表 t2 ,比较条件为
t1.a = t2.a
,那么数据库会用 t1 中 a 列的所有元素逐个和 t2 中的 a 列进行比较,如果相等,则输出该行。
不等值连接
自然连接
外连接
左连接
右连接
全连接
关于笛卡尔积
- 上述为笛卡尔积的影响,下为解决办法