创建表创建数据库
//使用系统数据
use
master
go
//判断数据库是否存在 如果存在就删除
if exists(select * from sys.databases where name='Student')
drop database Student
go
//创建数据
create database Student
go
//定位到Student数据库
use
Student
go
//判断表是否存在 如果存在就删除
if exists(select * from sys.objects where name='StuInfo')
drop table StuInfo
go
//创建表
create table StuInfo
(
// 字段名 数据类型 属性 约束
ID int not null primary key identity(1001,1),
Name varchar(20) not null,
Sex char(2) not null,
Age int not null
)
go
//查询整个表
select * from StuInfo
//添加数据
insert into StuInfo values('王某','男','18')
insert into StuInfo values('hehe','男','19')
insert into StuInfo values('徐某','男','20')
//修改数据
update StuInfo set Age=21 where ID='1001'
//删除数据
delete from StuInfo where ID='1002'
常用的约束
名称 | 关键字 |
---|---|
主键 | primary key |
外键 | references |
约束 | check(条件) |
唯一键 | unique |
标识列 | identity(1001,1) |
默认值 | identity |
—select语句
selecet查询数据语法格式
select <列名> from <表名> where <条件表达式>
—insert语句
insert语句用于向数据表中插入数据,语法格式
insert into <表名> (列名) values 值
向表中插入多行数据
insert into <表名>
select <内容> union
select <内容> union
select <内容>
//union 连接
—update语句
uqdate语句用于修改数据表中的记录,语句格式
update <表名> set <列名=更新值> where 条件表达式
可以在set子句后面更随多个列名以及更新值
<注意:>where 条件很重要,如果没有,就会将整个表此列全改为更新值。
—delete语句
delete 语句用于删除数据表中的数据,语法:
delete from <表名> where 条件表达式
<注意:>如果没有where条件 将会删除表中所有数据
—select…into…语句
select …into…语句用于把查询结果曾放到一个新表中(不存在的表,不可以反复执行)语法:
select 数据 into 新表 from 旧表 --*表是所有数据
—insert into…select…语句
insert into…select…语句可以完成一次出入入多行的功能。(表 必须存在)
insert into 表名(列名列表) select 数据 from 旧表
设置字段别名
三种语法方式:
select 原字段名 AS 字段别名,字段别名=原字段名,源字段名 字段别名 from 表名
综合案例
--指向系统数据库
USE MASTER
GO
--新建名为Students的数据库
IF EXISTS(SELECT * FROM SYSDATABASES WHERE NAME = 'Students')
DROP DATABASE Students
GO
CREATE DATABASE Students
GO
--指向Students数据库
USE Students
GO
--在当前数据库新建名为StuInfo的表
IF EXISTS(SELECT * FROM SYSOBJECTS WHERE NAME = 'StuInfo')
DROP TABLE StuInfo
GO
--创建表StudentInfo
CREATE TABLE StuInfo
(--字段名称 数据类型 属性 约束
Sno int NOT NULL primary key IDENTITY(1701,1), --设为主键约束 标识列,起始为1701
Sname nvarchar(4) NOT NULL,
Ssex nchar(1) NULL ,
Sage int NULL,
Sdept nvarchar(20) NULL, --院系
Math int NULL , --此处增加约束(0~100)
English int NULL
)
INSERT INTO StuInfo(Sname,Ssex,Sdept,Math,English)
SELECT '小红','女','电信系',null,75 UNION
SELECT '小白','男','电信系',75,72 UNION
SELECT '李洋','男','电信系',71,null UNION
SELECT '小黑','男','计算机系',28,75 UNION
SELECT '小强','男','计算机系',64,95 UNION
SELECT '小兰','女','计算机系',null,null UNION
SELECT '小明','男','计算机系',78,71 UNION
SELECT '小花','女','人文系',49,71 UNION
SELECT '小黄','女','人文系',58,85 UNION
SELECT '小绿','男','人文系',46,50 UNION
SELECT '小红红','女','软件系',46,null
--查看导入数据是否成功
SELECT * FROM StuInfo
GO
--(0)对查询结果筛选
--(0.1)使用WHERE子句
--例:查看女生信息
select * from StuInfo where Ssex='女'
go
--(0.2)范围运算符 BETWEEN AND NOT BETWEEN AND
--例:查询数学成绩在80 到90之间的学生信息
select * from StuInfo where Math between 80 and 90
go
--思考:将BETWEEN AND 换成> <运算符
select * from StuInfo where Math > 80 or Math < 90
go
--(0.3) 列表运算符 IN
--例:查询理工科学生信息
select * from StuInfo where Sdept in ('电信系','计算机系')
go
--(0.4)空值判断符
--例:查询未登英语成绩的学生信息
select * from StuInfo where English is null
go
--查询成绩只要为Null的
select * from StuInfo where English is null or Math is null
go
--(0.5) 逻辑运算符 AND OR NOT
--(0.6) 模式匹配符 LIKE NOT LIKE
--查询学生名字中带有'红'字的学生信息
select * from StuInfo where Sname like '%红%'
go
--(1)使用ORDER BY 排序 ASC DESC
--例:对全班数学成绩从大到小排序
select * from StuInfo ORDER BY Math desc
go
--对性别进行排序
select * from StuInfo ORDER BY Ssex desc
go
--女生的数学从小到大排序
select * from StuInfo where Ssex='女' ORDER BY Math asc
go
--(2)使用ORDER BY 对多列进行排序
--例:数学成绩相同时,按照英语成绩从高到低排
select * from StuInfo ORDER BY Math desc,English desc
go
--(3)与ORDER BY 与TOP关键字一起使用
--例:数学成绩排序之后,只显示前三名。即:查看全班前三名。
select top 3 * from StuInfo order by Math desc
go
--思考:查看全班末三名。
select top 3 * from StuInfo order by Math asc
go
--(4)SUM()函数计算字段累加和 只能用于数值字段
--例:求小白同学两门科目的总分
select SUM(Math+English) as 求和 from StuInfo where Sname='小白'
--思考:求每位同学两门科目的总分
select Sname,SUM(Math+English) as 求和 from StuInfo group by Sname
go
--(5)使用AVG函数计算字段的平均值
--例:求全班数学的平均分
select AVG(Math) as 平均值 from StuInfo
--(6)使用MAX 和MIN函数计算字段的最大值和最小值
--例:求数学的最高分和最低分
select MAX(Math) 数学最高分 from StuInfo
select MIN(Math) 数学最低分 from StuInfo --最小值没有null
--(7)使用COUN函数统计记录行数
--例:查询表中学生人数
select COUNT(*) from StuInfo
--思考:查询表中有几个院系.提示:利用COUNT 和 DISTINCT(过滤重复)
select COUNT(DISTINCT Sdept) from StuInfo
go
--(8) 使用GROUP BY对查询结果分组
--例:查询每个系有多少人。
select Sdept,COUNT(*) 人数 from StuInfo group by Sdept
go
--例:各个院系的数学平均分分别显示。
select Sdept,AVG(Math) 平均分 from StuInfo group by Sdept
go
--思考:查询女生人数和男生人数,并显示。GROUP BY COUNT
select Ssex,COUNT(*) from StuInfo group by Ssex
go
--(9)使用HAVING子句
--例:查询各个院系数学的平均分。找出及格的学院。
select Sdept,AVG(Math) from StuInfo group by Sdept HAVING AVG(Math)>60
go