01.SQL语句书写规范
1,.在SQL Sever中,SQL语句不区分大小写(数据库名,表名,列名,关键字) ,SQL编译器都识别
2,对表进行操作的时候,一定要使先用use关键字切换到对应的数据库
3.自增列不可以赋值
02.新增数据注意事项
1.如果新增全部列,那么表名后可以不跟列名,但是要提供所有列的值,除非当前 列有默认值,那么也要给出default关键字。
2.如果只想给一张表中添加部分列,那么在表名后要跟上列名,并且需要保证除了你给出 的列的值之外,其他列都允许为空或者有默认值。
insert into goodPerson(stuName,stuAge) values('张晓玲',20)
03. 一次性向一张表中插入多条数据的解决方案 方案一:
insert into 目标表 select * from 原表
注意事项:如果目标中有自增列,那么不能使用*号
方案二:
select * into 目标表(不存在) from 原表
该方式只保留了数据和子自增列,但是主键等约束就都没有了
方案三:
insert into 目标表(存在) select '高一二班' union select '高一五班'
04.几个注意点
1.以后大家见到update语句,一定要跟where条件,打死也要跟。
2.在SQL Server中null代表不知道,所以如果where后的限定条件不能用=和null做对比,必须使用is null
05.讨论delete和truncate区别?
01.delete 后可以跟where条件,而truncate不行
02.delete删除数据的时候会记录日志,而truncate不会
03.delete删除表中所有数据库,id编号不会从1开始,而truncate会。
解析:因为truncate又称为“截断表”。编号从1开始。
--01.如果要进行数据表中数据的查询,那么必须先定位到该表所在的数据库 use Myschool --切换数据库 select StuId, StuName, StuAge, GradeId from Student --我只想要年龄小于岁的学员信息 select * from Student where StuAge<=22 --新增数据 insert into GoodPerson values ('微冷的雨',50,'中国某地区','未知','希望大家努力学习,将来薪资K') select * from goodperson insert into goodperson(stuName,stuAge,stuAddress,stuLike,stuWishes) values('张靓颖',20,default,'大家微笑的脸庞','开心就好') insert into goodPerson(stuName,stuAge) values('张晓玲',20) delete from goodperson where StuId=31 select * from goodPerson2 -- 一次性向一张表中写入多条数据方案一 insert into goodPerson2 select StuName, stuAge, stuAddress, stuLike, stuWishes from goodPerson delete from goodperson2 --方案二 select * into goodpersonbak from goodperson --方案三: select * from grade insert into grade select '高一二班' union select '高一五班' --更新高一三班位"无敌S1290" update grade set gradename='无敌S1290' where gradename='高一三班' --将"王龙彪" 改成"李小龙" --将年龄为岁的学员年龄改成 update goodpersonbak set stuname='李小龙',stuage=25 where stuname='微冷的雨' select * from goodpersonbak update goodpersonbak set stuname='微冷的鳄鱼',stuage=10000 where stuid=1007 select * from goodperson insert into goodperson(stuname,stuage,stulike) values('李小龙',20,'吃faN') select * from goodperson where stuwishes is null update grade set gradename='S1' select * from goodpersonbak
看到这些,我们是不是该看一些数据查询基础啦,
数据查询基础 是什么呢?看看就知道了!
01.关于*会引起全表扫描问题 use MessageBoard select * from Message
--内存中 --*号会引起全表扫描,所以在真正的开发中,不推荐使用。最好使用
--确切的列名。
02.查找留言人是“罗雨萌”的所有留言信息
select * from Message where msgAuthor='罗雨萌'
03常见问题:
--01.SQL语句不区分大小写
--02.字符串和日期类型都需要单引号
--03.起表名的时候,千万不要起得太好,例如不要使用User作为表名。
-- 如果表名和关键字重复了,我们可以通过[]取消转义。
select * from [User]
--04.千万注意新建查询窗口中的中文空格。
select * from Message
04.别名 --别名方案一
select msgAuthor as 留言人,msgContent as 留言内容 from Message select msgAuthor 留言人,msgContent 留言内容 from Message
--别名方案二
select 留言人=msgAuthor,留言内容=msgContent from Message
05.将多列合并成一列显示 select msgAuthor+'____'+msgContent as 留言人说的留言是一种留言留言 from Message
06.常量列 select *,'汉族'as 民族 from Message
07.常见事项说明 --通过Ctrl+R:可以显示和隐藏结果集窗口 --真正的安装顺序,先安装数据库,再装其他软件。 --换一个版本。,换安装包 --换系统 --来找我,我都解决不了,那么就是人品
08.关于top关键字 --限制只检索前几条数据
use MySchool select top 3 * from student where Gender='0'
--按主键 --获取Student表中的前20%的数据 --能大概推断表中总共的数据数
select top 20 percent * from student
--脚本语言:不需要编译器进行编译,就可以直接解析执行的代码 --编译语言: --从高版本向低版本附加,附加不上。
--比如说:
SQL Server 2008
SQL Server 2005
09.Order by相关 select * from Student
--默认按主键升序排序
select * from student order by Gender desc
--按照多列排序(先按年级,再按性别)
select * from student order by GradeId asc,Gender desc
--查询北京的男同学
select * from student where Address like '%北京%' and Gender='1'
--查询“李X龙”的信息
select * from student where StudentName like '李_龙'
10.通配符:
--%:任意长度的任意字符,(包含0个)
--:_:任意的单个字符,只能是一个 --查询考试成绩前五名的分数
select top 5 StudentNo,SubjectId,Studentresult from result order by Studentresult desc
--学号科目编号和分数(只要前3个人的)
--01.order by
--02.where后多个条件通过and连接,order by才用逗号
--03.=(完全匹配)和like(模糊查询)
接下来就是最后最繁琐的函数梳理,希望你们能更细致一点的去看:
11.字符串函数
--函数名称:CharIndex('str1','str2',index)//位置从开始
--参数含义:
--第一个参数:要查询的字符串
--第二个参数:在哪个字符串中搜索
--第三个参数:从str2的第几个字母开始搜索
--注意点:如果在str2中没有找到str1,那么返回
--案例:
select charindex('好好学','S1是S2的基础,所以大家好好学',1)
SELECT CHARINDEX('JBNS','My Jbns Course') select charindex('微冷的雨','好人啊微冷的雨',4) select charindex('妈妈说','我们要为国家争光,妈妈说,是人就要有理想',11)
--len():获取小括号中字符串的长度,空格也算一个字符长度
SELECT CHARINDEX('JBNS','My Jbns Course') select charindex('微冷的雨','好人啊微冷的雨',4) select charindex('妈妈说','我们要为国家争光,妈妈说,是人就要有理想',11)
--注意点:如果内容以多个空格结尾,那么结尾的多个空格,是不计算长度的
--例如:
select len('我们都是好孩子 ') SELECT LEN('SQL Server课程') select len('我是这个世界上最大的王,你信吗?')
--upper():将括号中出现的英文全部转换成大写
select len('我们都是好孩子 ') SELECT LEN('SQL Server课程') select len('我是这个世界上最大的王,你信吗?')
--LTrim():清除括号中内容左边的空格
(left:right) select ltrim(' 生活不是林黛玉, ' select rtrim(' 生活不是林黛玉, ')
--既想移除左边空格,也想移除右边空格
select rtrim(ltrim(' 生活不是林黛玉, ')) select ltrim(rtrim(' 你还好吧! '))
--思路灵活
select len(rtrim('今年奇怪了,北京没下雪,去去去 '))
--substring('字符串',截取的位置,截取的长度)
select substring('我是中国人,我爱自己伟大的祖国,真的',6,1)
--right():从字符串右边返回指定类型的字符
select left('大家今天好像都没有交日记本,我去',3) select right('大家今天好像都没有交日记本,我去',2)
--replace('str1','要替换的字符','目标字符'):
select replace('周杰伦,残疾人,虽然手不残疾,但是X残疾','残疾','好')
--stuff('字符串',删除的起始位置,删除的长度,'插入的字符串')
select stuff('我爱你中国,我爱你故乡',4,2,'北京') select stuff('我们都要有理想,为了理想我们熬夜,当然以牺牲身体为代价',6,2,'自信')
12.日期函数
--01.getdate():获取当前日期和时间 select getdate()
--1000ms是s
--02.dateadd(按年/月/日添加,增量,时间)
select dateadd(yy,100,'2014-8-6') select dateadd(year,-20,getdate())
--03.datediff(按年/月/日求差,小时间,大时间)
--高梓贺 select datediff(year,'1998-01-01',getdate())
--04.datename:获取某个日期是星期几 select datename(dw,'2014-08-06')
--05.datepart(mm,日期):获取指定日期对应的年/月/日部分 select datepart(yy,getdate())
--Year yy --Month mm --Day dd --push(推) pull(拉)
--通过该方式也可以获取当天是周几 select datepart(dw,getdate())
--13数学函数
--01.rand():产生一个到之间的随机数
select right(rand(),4) Select rand()
--如果产生四位数(-9999)
--02.abs:取绝对值 select abs(-10) select abs(10) --非负数
--03.ceiling:天花板,你要看天花板,抬头,向上取整 select ceiling(1.999991)
--04.floor:向下取整 select floor(1.999999)
select ceiling(1.000000000000001) select floor(2.999999999999999)
--05.power(5,2)求幂值
select power(4,4) select 1*2/3+5-56+100-5/100
--06.round:将一个数字四舍五入到指定精度 select round(42.564,1)
--07.sign:如果括号中写的是一个正数,返回,如果是负数,返回-1
--如果是返回 select sign(20)
select sign(0)
--08.sqrt()开平方 select sqrt(9)