1. 创建新数据库

create  database  newdb;

1) 新创建一个数据库:

CREATE DATABASE newdb ON (

NAME = newdb_dat,                          --逻辑名  

FILENAME = 'c: \newdb.mdf',           --存放位置  

SIZE = 5MB,                                       --初始大小  

MAXSIZE = 100MB,                           --最大存储空间  

FILEGROWTH = 5MB                         --增长大小

)LOG ON(

NAME = newdb_log,   

FILENAME = 'c: \newdb.ldf',  

SIZE = 10MB,  

MAXSIZE = 100MB, 

FILEGROWTH = 10MB
)GO

2) 创建一个新的表

--设定主键不为空, --值不为空  

create  table  newtable (

id int primary key not null,

name nvarchar(10) not null,   

birthday smalldatetime

)

2. 插入数据

#在表中插入一条记录

insert  into  table values ('001','张三','1980-9-8');

3. 修改数据

#把原来姓名为'李四'修改成了'张三'

update  table set  name = '张三' where  name = '李四';

#将所有学生的年龄都增加1岁

update  student  set  age = age+1;

4. 删除数据(

注意:DELETE和DROP TABLE之间有一个非常重要的区别。

DELETE删除一个表中的一部分或全部的内容;

而DROP TABLE则将表的内容和表的大纲全都一起删除。

这样,在执行了DELETE语句之后,表依然存在,但表内容为空;

但在执行DROP TABLE语句后,表将完全删除)

#删除学生表中所有性别为’女’的学员信息

delete  from  student where  sex = '女';

#删除学生表中学号为’002’的学员信息

delete  from student where  stid = ’002’;

5. 修改表

#在表中添加了age列

alter  table student add  age char(20) null;

#在表中删除了name列

drop column name;

#在表中修改了age列的数据类型为半字长整数

alter  column age smallint;

6. 修改列名
EXEC sp_rename '要修改的表名.[要修改的字段名]','修改后的字段名','COLUMN';

7. 删除表

#在数据库中删除了student表

drop table student; 


简单查询

1. 查询学生表中的所有数据,用‘*’代表

select * from student;

2. 查询学生表中的name列

select  name from student;

3. 查询学生表中的name列和stid列

#查询多列时,用’,’隔开

select stid, name from student;

4. 查询学生表中姓名为'张三'的学号

#查询条件使用Where子句实现

select  idFrom  studentWhere name ='张三';   

5. 从学生表中查询出前5列的学员信息

#top5代表前5行数据

select  TOP 5 * from  student;

6. 查询学生表中姓名不为'张三'的学号

#where name != '张三'

select  id from  student where name <> '张三';

7. 查询学生表中年龄大于24岁的学员姓名

select  name from  student where age > 24;

8. 查询学生表中年龄在22至24岁之间的学员姓名

select  name from  student where age >= 22 and age <= 24;

9. 查询学生表中学号为'001'和'008'的学员姓名

#where id in(001,008)

select name from student where id=001 or id=008 ; 

10. 查询学生表中年龄小于22岁,而大于24岁的学员姓名

#或 where age not between 22 and 24

select name from student where age < 22 or age > 24;  

11. 查询学生表中班级编号为’001’,而年龄大于24岁的学员姓名

select name from  student where classid =’001’ and age > 24;

12. 查询学生表中的所有的班级编号(不要重复)

#distinct关键字从select语句的结果中除去重复的行

select  distinct  classid from student;

13. NOT操作的优先级最高,AND其次,OR最低 比较以下两个语句的不同:

select * from student where  age > 22 and age < 24 or classid = '001' and sex = '男';

select * from student where ((age>22 and age<24) or  classid='001') and sex='男';

14. 查询不属于班级编号为'T01'的所有学员姓名

select  name from  student where not classid ='T01';

15. 查询学生表中班级编号为空的学员姓名

select  name from student where  classid  is  null;

16. 查询学生表中班级编号不为空的学员姓名

select  name from student where  classid  is  not  null;

17. 查询学生总人数

select  count(*) from  student;

18. 计算学员的平均年龄

select  avg(age) from  student;

19. 查询学员的最大年龄

select  max(age) from student;

20. 查询学生表中的所有数据,并以年龄降序排列

#asc为升序

select  * from  student order  by age desc;

21. 计算每个地址中不同城市的数目

select  address as 城市, count(address) from  student group  by address;

22. HAVING子句定义了用于行组的条件判断。HAVING子句对行组来说所具有的意义,与WHERE子句对于每一单独的行所具有的意义是相同的。

1) 计算每个班级中学员的最大年龄,并按班号从大到小排列,使用下面的语句:

SELECT classid, MAX(age) as 最大年龄 FROM student GROUP BY classid ORDER BY classid desc;

2) 要返回平均年龄在22到24之间的班级编号,使用下面的查询语句:

SELECT classid as 班号,AVG(age) as 平均年龄 FROM student GROUP BY classid
HAVING AVG(age) between 22 and 24;

23. LIKE操作符用于将列的值与某个特定的模式做比较。列的数据类型可以是任何字符或者日期型数据。通配符 %:any 代表零个或多个任意字符  _:single 代表某一个任意字符

1) 查询所有姓名以李开头的学员的姓名和编号

select  id,name from  student where name like '李%';

2) 查询所有姓名中第二个是'新'的学员的姓名和编号

select  id,name from  student where name like '_新%';

3) 查询所在地名称是以C到F的字符打头的所有部门的详细资料

select * from  department where address like '[C-F]%';

4) 查询姓名开头不是'李'开头的学员的姓名和编号

select  stid,name from  student where name not like '李%';

5) 查询姓(firstname)的打头字母不是J,K,L,M,N,O,并且名(lastname)的打头字母不是E或者Z的所有学生的编号和名字

select  stid,name from  student where  firstname like '[^J-O]%' and lastname like '[^EZ]%';

24. 子查询

查询班级名称为'T01'的学员姓名

select  name from  student where  classid in  (
 select  classid from  class where  name='T01'

)

25. 多表查询 1) 合并union

USE NORTHWIND
 SELECT ContactName,city,postalcode FROM customers UNION SELECT lastname + ' ' + firstname ,city,postalcode FROM employees;

2) 内联接

select  s.name,c.name from student as s inner join class as c on  s.classid=c.classid;

select  s.name,c.name from student as s,class as c where  s.classid=c.classid;

3) 外联接

a) 左外联接

select  s.name,c.name
from  student as s left join class as c on  s.classid=c.classid;

b) 右外联接

select  s.name,c.name
from  student as s right join class as c on  s.classid=c.classid;

c) 完全联接

select  s.name,c.name
from  stud
ent as s full join class as c on  s.classid=c.classid;

d) 交叉联接

select  s.name,c.name from  student as s cross join class as c;

或者

select s.name,c.name from student as s ,class as c;

4) 自联接查询学生表中的所有学生的上级领导姓名

Select  学生表.name as 学生姓名, 领导表.name as 领导姓名 from  student as 学生表 left join student as 领导表 on  学生表.leaderid=领导表.stid;