1、数据库操作
create database student_info -- 创建数据库 drop database student_info -- 删除数据库
2、表操作
-- 创建表 create table student( id int not null primary key, name varchar(20) not null, age int null, sex varchar(10) ) -- 删除表 drop table student -- 修改表,增加一个列 Alter table student add column address varchar(50)
3、sql语句
简单语句
插入(增):insert into student(id, name, address) values(1, 'Xiaohong', 16) 删除(删):delete from student where age<=6 更新(改):update student set name='Lily' where id=1 查询(查):select * from student
高级语法
模糊查询:select * from student where name like '%Xiao%' 排序:select * from student order by field1,field2 desc 总数:select count(*) as totalcount from student 函数:select sum(age) as sumAge, avg(age) as avgAge, max(age) as maxAge, min(age) as minAge from student 前几: select top 10 * from student order by age desc 去重: select distinct name from student 多个条件: select * from student where name like '%Xiao%' and age=16 or age=20 between: select * from student where age between 10 and 20 in: select * from student where name in ('Lily', 'Amy') 分组: select age, count(*) from student group by age 分组带条件: select age, count(*) from student group by age where age >10 having count(*)<5
4、表连接
JOIN: 如果表中有至少一个匹配,则返回行
LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行
RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行
FULL JOIN: 只要其中一个表中存在匹配,就返回行
create table course( cno int not null primary key, cname varchar(20) not null ) create table StudentCourse( sno int not null, cno int not null, score double ) -- 表连接, 查找所有学生的选课记录 select s.name as 学生姓名,sc.cno as 选修课号,sc.score as 成绩 from student s, StudentCourse sc where s.id=sc.sno -- 内连接, 查找所有成绩及格的选课记录 select s.name as 学生姓名,sc.cno as 选修课号,sc.score as 成绩 from student s inner join StudentCourse sc on s.id=sc.sno where sc.score>60 -- 左连接, 查找所有学生的选课记录 select s.id as 学号,sc.cno as 选修课号,sc.score as 成绩 from student s left join StudentCourse sc on s.id=sc.sno -- 嵌套查询, 查找王敏同学的选课记录 select * from StudentCourse where sno in ( select id from student where name='王敏' ) --查找每个学生大于自身平均分的科目 select cno from StudentCourse a where score> ( select avg(score) from StudentCourse b where a.sno=b.sno )
5、SQL 约束
约束用于限制加入表的数据的类型。可以在创建表时或表创建后规定约束。约束主要有以下几类:
- NOT NULL 强制列不能为 NULL 值
- UNIQUE 唯一标识数据库表中的每条记录, 每个表可以有多个 UNIQUE 约束,但是每个表只能有一个 PRIMARY KEY 约束。
- PRIMARY KEY 唯一标识数据库表中的每条记录,主键必须包含唯一的值,主键列不能包含 NULL 值。
- FOREIGN KEY 一个表中的 FOREIGN KEY 指向另一个表中的 PRIMARY KEY,如StuentCource 的sno指向Student的id
- CHECK 在特定的列中对值进行限制
- DEFAULT 设置默认值
create table student( id int not null, name varchar(20) not null, age int null DEFAULT 1, UNIQUE (name), PRIMARY KEY (id), CONSTRAINT chk_age check (age>0 AND age<200), CONSTRAINT uq_name unique(name) )
6、索引
您可以在表中创建索引,以便更加快速高效地查询数据。
-- 创建索引 create index idx_age on student(age asc) create unique index idx_name on student(name) -- 删除索引 drop index idx_name
7、视图
视图是基于 SQL 语句的结果集的可视化的表。
-- 删除视图 if exists (select * from dbo.sysobjects where id = object_id(N'dbo.young_student') and objectproperty(id, N'isview') = 1) drop view young_student -- 创建视图 create view young_student as select * from student where age<10