--插入整行数据
insert into [dbo].[person] values('Hasaki', 35, '1983-08-29', 'A', 'A', 'A') --插入部分列数据
insert into [dbo].[person] (name, age, birth) values('Hasaki', 35, '1983-08-29') --删除行记录
delete from person where name = 'John' --更新数据库
update person set study = 'A' where name = 'Amy' --去除重复行
select distinct name from [dbo].[person] --TOP 选择前n条记录
select top 1 * from [dbo].[person] --TOP 选择前百分n条记录
select top 50 percent * from [dbo].[person] --LIKE 通配符'_'匹配一个任意字符
select * from [dbo].[person] where name like 'T_m' --LIKE 通配符'%'匹配0个或多个任意字符
select * from [dbo].[person] where name like '%Tom' --LIKE 通配符'[]'匹配括号里任一字符
select * from [dbo].[person] where name like '[TJA]%' --LIKE 通配符'[^]'匹配不在括号里的任一字符
select * from [dbo].[person] where name like '[^TJA]%'
连接
连接操作是是通过笛卡尔积运算进行的。例如下面两个分别有三条记录的表student和course连接时,实际就是两两匹配,产生9条记录。
name | age |
Hasaki | 14 |
Noki | 16 |
Yummy | 15 |
course | name |
chinese | Hasaki |
english | Yummy |
math | Kilo |
笛卡尔积结果为:
name | age | name | course |
Hasaki | 14 | Hasaki | chinese |
Hasaki | 14 | Yummy | english |
Hasaki | 14 | Kilo | math |
Noki | 16 | Hasaki | chinese |
Noki | 16 | Yummy | english |
Noki | 16 | Kilo | math |
Yummy | 15 | Hasaki | chinese |
Yummy | 15 | Yummy | english |
Yummy | 15 | Kilo | math |
数据库的连接操作结果是笛卡尔积运算后经过筛选剩余的部分。
--内连接
select * from Course join person on person.name = course.name
提取 course.name 和 person.name 相等的记录,结果:
name | age | name | course |
Hasaki | 14 | Hasaki | chinese |
Yummy | 15 | Yummy | english |
--左连接
select * from course left join person on person.name = course.name
提取 course.name(左表) 和 person.name(右表) 相等的记录,而且对于左表的每一条记录,在结果数据集中最少出现一次。
对于左表中一条记录,如果在右表不存在匹配记录,那么结果集中右表部分的数据为NULL,结果:
name | course | name | age |
Hasaki | chinese | Hasaki | 14 |
Yummy | english | Yummy | 15 |
Kilo | math | NULL | NULL |
--右连接
select * from Course right join person on Course.pName = person.name
情况和左连接相反,结果:
name | course | name | age |
Hasaki | chinese | Hasaki | 14 |
Yummy | english | Yummy | 15 |
NULL | NULL | Noki | 16 |
--全连接
select * from Course full join person on Course.pName = person.name
提取 course.name(左表) 和 person.name(右表) 相等的记录,而且对于左表、右表的每一条记录,在结果数据集中最少出现一次。对于左表中一条记录,如果在右表不存在匹配记录,那么结果集中右表部分的数据为NULL。对于右表中一条记录,如果在左表不存在匹配记录,那么结果集中左表部分的数据为NULL。结果:
name | course | name | age |
Hasaki | chinese | Hasaki | 14 |
Yummy | english | Yummy | 15 |
NULL | NULL | Noki | 16 |
Kilo | math | NULL | NULL |