--添加数据
--第一种方式
insert into 表名(列名1,列名2) values(值1,值2)
insert into Class(ClassName, ClassDesc) values('1班','史上最牛x的班级')
--添加数据显示的受影响的行数
--第二种方式
insert into 表名 values(值)
insert into Class values('2班','和之前班比逊色了一些')
--第三种方式,一次性插入多条数据
insert into Class values('3班','和之前班比逊色了一些')
insert into Class values('4班','和之前班比逊色了一些')
insert into Class values('5班','和之前班比逊色了一些')
insert into Class values('6班','和之前班比逊色了一些')
--第四种方式--一次插入多条数据
insert into Class(ClassName, ClassDesc)
select '7班','不知道什么样' union
select '8班','啥样啊1' union
select '9班','啥样啊2' union
select '10班','啥样啊3'
select 100+10 --结果返回两个数的和110
--删除
--第一种,数据没了,表还在,但是id接着删除前表的最大id继续加1
delete from class where classid=15
--返回的都是受影响的行数
--第二种,表没了,数据也没了
drop table class--轻易不要尝试
--第三种方式,表存在,数据没了,id从1开始
truncate table class
delete和truncate的区别:
(1)truncate语句非常高效。由于truncate操作采用按最小方式来记录日志,所以效率非常高,对于几百万条数据使用truncate删除只要几秒,而对于delete则可能需要几个小时。
(2)truncate会把表中的自动编号重置为默认值
(3)truncate不会触发delete触发器
--修改数据
select * from class
update 表名 set 列1=值1,列2=值2
update Class set ClassDesc='都是好厉害的'
--修改或者更新表中的数据返回的是受影响的行数
update Class set ClassDesc='都很厉害啊' where ClassId<>1
--把名字为李三的人 他的性别变成女 同时年龄变成12
update student set TSGender=0 ,TSAge=12 where TSName='李三'
--年龄大于25岁的所有的人年龄再加1
update student set TSAge=TSAge+1 where TSAge>25
--查询数据
select * from student --查询表中所有列的数据
select tsname,tsage,tsgender from student --查询特定列的数据
--给查询出的数据的列标题起别名
--第一种方式
select tsname as '姓名',tsage as '年龄' from student
--第二种方式
select tsname as 姓名,tsage as 年龄 from student
--第三种方式
select 名字=tsname,年龄=tsage from student
select 名字=tsname,年龄=tsage from student where TSGender=1
--查询所有的数据中的前10条数据,数据库中的数据是已无序的方式存储
select top 10 * from student
--查询年龄最小的5个学生的信息
select top 5 * from student order by TSAge
--从大到小排序 查询的是 年龄最大的百分之10的学生信息
select top 10 percent * from student order by TSAge desc --10%
select * from student
--去除重复
select distinct TSName from student
--聚合函数实际就是将多行数据合并为一行,其中NULL值不参与聚合函数的计算
--查询总共多少条的数据
select COUNT(*) from student
--查询的是最高的数学成绩
select MAX(TSMath) from TblScore
--数学成绩最高的这个人的英语成绩和数学成绩
select MAX(tsmath),TSEnglish from TblScore --错误写法
select top 1 tsenglish,TSMath from TblScore order by TSMath desc --正确写法
--成绩表中数学成绩最低的是多少
select MIN(TSEnglish) from TblScore
--总和
select SUM(tsenglish) from TblScore
--平均值
select AVG(tsenglish) from TblScore
--聚合函数可以联合使用
select
MAX(tsenglish) as 英语最高成绩,
MIN(tsenglish) as 最低成绩,
SUM(tsenglish) as 总和,
AVG(tsenglish) as 平均成绩
from TblScore
--区间查询
--between and
--第一种方式
select * from student where TSAge>=20 and TSAge<=30 and TSGender=1
--第二种方式
select * from student where TSGender=1 and TSAge between 19 and 29 --优先用between and,已经过内部优化了,查询速度快
--in
--第一种方式
select * from student where TClassId=1 or TClassId=2 or TClassId=3
--第二种方式
select * from student where TClassId in(1,2,3) --优先用in<span style="font-family: Arial, Helvetica, sans-serif;">,已经过内部优化了,查询速度快</span>
--模糊查询
--查询的是以张开头的所有的名字
select * from tblstudent where TSName like '张%' --%匹配任意多个字符
--查询的是以张开头的名字,只有两个字
select * from tblstudent where TSName like '张_' --_匹配一个字符
--查询的是以张开头的名字,三个字
--第一种方式
select * from TblStudent where tSName like '张%' and LEN(tSName)=3
--第二种方式
select * from tblstudent where TSName like '张__'
--第2个字符为字母
select * from TblStudent where tSName like '张[a-z]%'
select * from TblStudent where TSName like '%张%'
select * from TblStudent where TSName like '张[%]%' --第2个字符为%
select * from TblStudent where tSName like '张[0-9]_'
select * from TblStudent where tSName like '张[^0-9]_' --第2个字符不为数字
select * from TblScore where english = null
--空值查询
--错误写法select * from TblScore where TSEnglish = null
select * from TblScore where TSEnglish is null
--错误写法select * from TblScore where TSEnglish != null
select * from TblScore where TSEnglish is not null
--排序
--英语成绩高的按数学成绩排
select * from TblScore order by TSEnglish desc,TSMath desc
select * ,总成绩=(TSEnglish+TSMath)from TblScore order by (tsEnglish+tsMath) desc
--分组查询
--例1:请从学生表中查询出每个班的班级Id和班级人数
select tclassid as 班级的id,COUNT(*) as 班级的人数 from student group by TClassId
having COUNT(*)>3
--having 是在分组后再次进行筛选.......
--例2:请从学生表中查询出每个班的班级Id和班级中男同学的人数
select tclassid as 班级的id,COUNT(*) as 班级的人数 from student where TSGender=1 group by TClassId
--case end分组查询
select
数学成绩=
case
when TSEnglish>100 then '优'
when TSEnglish>90 then '良'
when TSEnglish>80 then '中'
when TSEnglish>70 then '及格'
when TSEnglish is NULL then '缺考'
else '不及格'
end
from TblScore
select (case when a>b then a else b end),(case when b>c then b else c end ) from t8
--把一个查询的结果放在另外一个查询中使用叫子查询
select * from (select * from student where TSGender=1) as t where TSAge>20
SQL语句执行顺序:
(1)From表
(2)Where条件
(3)Group by列
(4)Having筛选条件
(5)Select 5-1>选择列,5-2>distinct,5-3>top
(6)Order by列