文章目录
- 1、SQLServer--初体验
- 1-1 创建数据库
- 1-2 创建表
- 1-3 主键约束
- 1-4 外键约束
- 1-5 添加常用约束
- 2、SQLServer--数据的插入、更新与删除
- 2-1 数据的插入
- 2-2 数据的删除
- 2-3 数据的更改
- 3、SQLServer--基础数据查询
- 3-1 基本SELECT查询
- 3-2 带限制条件的查询和表达式查询
- 3-3 使用WHERE语句进行检索
- 3-4 通配符[]的使用
- 3-5 通配符_的使用
- 3-6 通配符%的使用
1、SQLServer–初体验
1-1 创建数据库
- 命令方式创建数据库使用以下语法,创建前要确保用户具有创建数据库的权限。
语法:
create database 数据库名
go
执行结果:
查询结果:
1-2 创建表
- 我们知道数据库就是存储数据的地方,数据库中的数据是存放在数据库中的一张一张表。你可以想象数据库就是一个文件夹,而表就是一个 excel 表格,其实他们本来就挺像。
语法:
CREATE TABLE 表名
(
字段名,数据类型,
字段名,数据类型,
.....
)
执行结果:
查询结果:
1-3 主键约束
- 相关知识:
主键,是表中一列或者多列的组合;
主键约束( Primary Key Constraint )要求:主键列的数据唯一,并且不允许为空
。主键能够唯一的标识表中的每一条记录,可以结合外键,来定义与不同数据表之间的关系。
怎么理解主键呢?我们知道数据库中的表可以存放很多数据,如果把表中的每一条数据比作一个人的话,那么表的主键就可以看做是人的身份证。添加主键约束:
有两种方式可以添加主键约束:
1.在定义列的同时指定主键:
2.在定义完字段之后,再指定主键:
- 多字段联合主键:
在开发中,还有一种情况很常见,就是将几个字段联合在一起作为主键,那这个在代码中怎么实现呢?
举个例子,我们将员工的名字和部门 ID 联合起来作为主键:
CREATE TABLE t_emp2
(
name VARCHAR(32),
deptId INT,
salary FLOAT,
PRIMARY KEY(name,deptId)
)
- 如果我们创建表的时候,发现字段类型设置错了想修改,应该怎么做呢?
ALTER TABLE 表名 ALTER COLUMN 列名 被更改后的数据类型
1-4 外键约束
- 外部关键字
在以后,我们统一将外部关键字叫做外键,外键就是另一张表中的主键。
- 外键有什么用啊?
外键的主要作用就是保持数据的一致性,完整性。
- 怎么保证的呢?
如图有两张表,classId 是 T_Student 的外键,同时是 T_class 表的主键。如果我们要删除 T_class 表中 classId 为 1 的字段,程序是会报错的。因为 T_Student 表中有数据和 classId 为 1 的字段关联了,是不能删除的,这样子就保证了数据的一致性和完整性。
- 那怎么才能删除呢?
需要先删除 T_Student 表中 classId 为 1 的两个字段。
- 如何给表添加外部关键字
constraint 外键名 foreign key 字段名 references 主表名(主键名)
- 实例:
方式1:
方式2:
- 注意:
在定义字段的时候,也可以定义外部关键字,格式:
foreign key references 关联的表名(字段名) ,这种方式比较简洁,不过这种方式不能指定外键名,即外键名是随机的
。
1-5 添加常用约束
在数据库的使用过程中,我们经常要限制字段的取值。比如,有些字我们不能让它为空,我们就需要添加非空约束。
怎么添加唯一约束:
唯一约束( Unique Constraint )要求该列唯一,允许为空,但是只能有一个空值。唯一约束可以确保一列或者几列不出现重复值。
实例:
定义部门表的部门名称唯一,使用关键词 UNIQUE ,SQL 语句如下:
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 '男'
)
注意:如果是添加字符串型,认值要使用单引号;如果是整型,则不需要加任何符号
2、SQLServer–数据的插入、更新与删除
- 数据操作语句( DML , Data Manipulation Language )是使用户能够查询数据库及操作已有数据的计算机语言,在 SQL 语言中占据着非常重要的地位。
- 其中包括:数据插入( INSERT )、数据删除( DELETE )和数据更改( UPDATE)操作。
2-1 数据的插入
- 1、插入完整内容的行
向表中插入数据最简单的方法,就是使用 INSERT 语句。 INSERT 语句需要你声明要插入内容的表名和内容。
为了保证插入数据的正确性,我们采用以下的语法格式:
/*假设我们现在要建立一张名为 Customers 的空表,插入选定内容的行*/
INSERT INTO Customers(
cust_id,
cust_name,
cust_city
)
VALUES (
'1000000006',
'Toy Land',
'New York'
)
- 2、插入选定内容的行
把字段(column)名写入插入语句是个好办法!用这个方法,我们还能忽略某些字段,只插入我们最关心的数据。
-----比如,我们忽略 cust_email ,为表 Customers 插入内容。
INSERT INTO Customers(
cust_id,
cust_name,
cust_city
)
VALUES (
'1000000006',
'Toy Land',
'New York'
)
- 3、简化插入语句:
INSERT INTO 后面只跟了一个表名,这就意味着,我们插入内容的时候必须是依序全内容插入,即使内容为空,也必须用空值 NULL 来填补。
create database school
go
use school
go
create table teacher
(
ID int not null,
Name varchar(20) not null,
sex char(2) not null,
Phone varchar(20) null
)
go
SET NOCOUNT ON
insert into teacher values
(
1,
'Lucy',
'F',
null
)
go
2-2 数据的删除
使用 DELETE 语句可以从表中删除数据。 DELETE 的两种用法如下所示:
- 删除表中的指定行;
- 删除表中的所有行。
删除表中的指定行:
delete from 后面需要你指定删除内容所在的表, where语句是过滤语句,它用来帮你寻找哪条内容是你想要删除的。在下面的例子中,只有消费者 1000000006 的内容才会被删除。
DELETE FROM Customers WHERE cust_id=1000000006
目前原始表有两条内容:
运行后我们成功地删除了 Toy Land 的数据。
删除表中的所有行:
如果需要删除表中所有的行,只需要省略 WHERE 语句即可。
DELETE FROM Customers
实例:
create database website
go
use website
go
create table shopping
(
ID int IDENTITY(1,1) not null,
Name varchar(20) not null,
address varchar(30) not null
)
go
SET NOCOUNT ON
insert into shopping (Name, address) values ('eBay', 'www.ebay.com')
go
SET NOCOUNT ON
insert into shopping (Name, address)
values ('amazon', 'www.amazon.com')
go
SET NOCOUNT ON
delete from shopping where Name='ebay'
go
如果我们使用语句:
create TABLE shopping ( ID int IDENTITY(1,1) not null )
会使字段 ID 的数字自增。在这个例题里面不需要给字段 ID 赋值,因为它自己会自增!
2-3 数据的更改
只要记住 UPDATE 语句三要素,就能轻松掌握。它们分别是:
- 需要更新的表(table)名;
- 需要更新的字段(column)名和它的新内容(row);
- 决定更新哪一条内容(row)的过滤条件。、
更新表中的指定行:
消费者 1000000005 之前没有在记录里留下他的 email ,如下图所示:
但是,现在他有了一个新邮箱,所以需要更新数据库里的数据,更新代码如下所示:
UPDATE Customers
SET cust_email = 'max@yahoo.com'
WHERE cust_id = '1000000005'
3、SQLServer–基础数据查询
对使用者来说,数据查询绝对是数据库里最重要的功能。SQLServer 的数据查询通过 T-SQL 语言实现,其最基本的语句是 SELECT 语句,它的功能非常强大。
3-1 基本SELECT查询
检索数据表中一个字段的内容:
语法规则为:
SELECT 字段名 FROM 表名
实例:
我们想从表 Customers 中得到 cust_name 字段所有的内容,即所有人的姓名。表 Customers 的内容如下图所示:
代码:
SELECT cust_name FROM Customers
输出:
检索数据表中多个字段的内容:
语法规则为:
SELECT 字段名1, 字段名2, 字段名3 FROM 表名
实例:
我们想从表 Customers 中得到 cust_id 和 cust_name 字段所有的内容。
输入:SELECT cust_id, cust_name FROM Customers
输出:
检索数据表中所有字段的内容:
语法规则为:
SELECT * FROM 表名
实例:
我们想从表 Customers 中得到所有字段的内容。
输入:SELECT * FROM Customers
输出:
3-2 带限制条件的查询和表达式查询
带限制条件查询:
SELECT 语句可以帮你返回所有匹配的内容,甚至整张表的内容。但是如果你仅仅是想要第一行的数据或者前几行的数据怎么办呢?在 SQL Server 中:
语法规则为:
SELECT TOP 行数 字段名 FROM 表名
举例:
我们想从表 Customers 中得到 cust_name 字段的前 3 行内容。表 Customers 的内容如下图所示:
输入:
SELECT TOP 3 cust_name FROM Customers
输出:
带表达式查询:
有时候,你并不想知道某个字段的内容,而是想知道经过处理后的内容。我们可以使用表达式查询来达到此目的。
语法规则为:
SELECT 包含字段名的表达式 AS 新字段名 FROM 表名
举例:
我们想从把表 Customers 中每位消费者的 cust_id 都 +1 。表 Customers 的内容与上例的相同。
输入:SELECT cust_id, cust_id+1 as new_cust_id FROM Customers
输出:
3-3 使用WHERE语句进行检索
在实际情况中,我们不仅需要对某字段的全部数据进行检索,更多的是需要对符合我们需求的数据进行检索。SQL 语言的发明者当然想到了这些,为我们提供了更多的方法来检索你想要的数据。
WHERE 语句就是这样一种存在,只要把你的需求正确地放在 WHERE 后边,它就能帮你检索到你想要的内容。
下表为与 WHERE 语句搭配的操作符列表:
使用WHERE语句检索单范围数据:
举个例子来看看,检索单范围数据是怎么实现的:
我们想从表 Customers 中找到消费大于 1000 的人。表 Customers 的内容如下图所示:
输入:
SELECT cust_name, cost FROM Customers WHERE cost > 1000
输出:
使用WHERE语句检索双范围数据:
还有一种情况,就是你心目中有一个理想的区间范围。这时候,你就需要划定一个范围,SQL 很贴心的为大家提供了自然语言关键字,用来划定数字的范围。
语法规则为:
WHERE 字段名 BETWEEN 数字1 AND 数字2
举个例子:
我们想从表 Customers 中找到消费在 1000~3000 之间的人。表 Customers 的内容和上例相同。
输入:SELECT cust_name, cost FROM Customers WHERE cost BETWEEN 1000 AND 3000
输出:
使用WHERE语句检索不匹配某条件的语句:
SQL 语句为你提供了选择不想要什么的机会。
举例:
我们想从表 Customers 中找到消费者不在 New York 的人。表 Customers 的内容和上例相同。
输入:SELECT cust_name, cust_city FROM Customers WHERE cust_city <> 'New York'
输出:注意,在 SQL Server 中,不等于只能用 <> 符号,不能使用 != 符号。
3-4 通配符[]的使用
[] 用于将一组字符囊括在内,这一组字符之间是或的关系,而通配符 [] 出现的位置也严格匹配于括号中出现的字符在整个字符串中的位置。
语法规则为:
SELECT 字段名
FROM 表名
WHERE 字段名 LIKE '[数据]'
举个例子:
我们想从表 Customers 中,检索到所有 cust_name 以 a 和 t 开头的消费者的所有数据。表 Customers 的内容如下图所示:
输入:
SELECT * FROM Customers WHERE cust_name LIKE '[at]%'
输出:
分析:
我们在语法中加入了通配符 % 。因为通配符 [] 中出现的只能是有或关系的单字符 。所以除非你想检索的是单字符,否则不加 % 的话,你将检索不到任何内容。
注意,通配符中的字符大小写不敏感 !
使用通配符[]和^模糊匹配取反的数据内容:
我们还可以对检索内容进行“取反”。使用符号 ^ 后,我们可以成功的检索到 [] 中没出现的字符。
语法规则为:
SELECT 字段名
FROM 表名
WHERE 字段名 LIKE '[^数据]'
举个例子:
我们想从表 Customers 中,检索到所有 cust_name 不是以 a 和 t 开头的消费者的所有数据。表 Customers 的内容如下图所示:
输入:
SELECT * FROM Customers WHERE cust_name LIKE '[^at]%'
输出:
分析:
当然,你也可以使用 NOT 操作符来得到相同的结果。相比来说,^ 唯一的好处就是简化了 WHERE 语句的语法。
注意:
- 不要过分使用通配符。如果其他操作符能达到相同的目的,应该使用其他操作符。
- 在确实需要使用通配符时,除非绝对有必要,否则不要把他们用在搜索模式的开始处。把通配符置于搜索模式的开始处,搜索起来是最慢的。
- 仔细注意通配符的位置。如果放错地方,可能不会返回想要的数据。
3-5 通配符_的使用
使用通配符_模糊匹配数据内容:
另一个很实用的通配符是下划线 _ ,它的使用规则与 % 类似,唯一与 % 不同的是:% 能匹配多个字符,而 _ 只能匹配一个字符!
语法规则为:
SELECT 字段名
FROM 表名
WHERE 字段名 LIKE '数据和_的组合'
举个例子:
我们想从表 Customers 中检索到 cust_id 尾数只有个位数的消费者的所有数据。表 Customers 的内容如下图所示。大家可以看到,我们只有一个 cust_id 尾数为两位数的消费者 Sol Pozo ,该如何撇开它呢?
输入:
SELECT * FROM Customers WHERE cust_id LIKE '100000000_'
输出:
3-6 通配符%的使用
使用通配符%模糊匹配数据内容的后半部分:
在所有通配符中,最常用的通配符要数 % 了。使用了 % 就意味着,你能从现有的数据中匹配到任意个数的字符(注意,可以是不止一个字符哟)。
语法规则为:
SELECT 字段名
FROM 表名
WHERE 字段名 LIKE '数据%';
举个例子:
我们想从表 Customers 中检索到所有叫 Alice 的消费者的所有数据。表 Customers 的内容如下图所示。大家可以看到,我们有 Alice Nicholas 和 Alice Edwards 两个都叫 Alice 的人,该如何做才能同时匹配到他们两个呢?
输入:
SELECT * FROM Customers WHERE cust_name LIKE 'Alice%'
输出:
Tips:
注意,模式匹配是大小写敏感的!如果你检索的是 alice% ,那就什么都检索不到了!
使用通配符%模糊匹配数据内容的任意部分:
如果,你想检索的内容既不在字符串的头部,也不在字符串的尾部,而是在它们的中间,你该如何检索呢?
前后都匹配%