SQL常用的增删改查语句视屏笔记.docx
- 文档编号:29567173
- 上传时间:2023-07-24
- 格式:DOCX
- 页数:30
- 大小:46.33KB
SQL常用的增删改查语句视屏笔记.docx
《SQL常用的增删改查语句视屏笔记.docx》由会员分享,可在线阅读,更多相关《SQL常用的增删改查语句视屏笔记.docx(30页珍藏版)》请在冰豆网上搜索。
SQL常用的增删改查语句视屏笔记
SQL:
结构化查询语言,是国际化标准组织采纳的标准数据库语言
作用:
数据库管理员可以用利用次语言操作数据库系统,即:
SQL是一种能够被数据库系统读懂的操作语言。
T—SQL是微软公司针对SQLServer这种关系数据库所定义的一种SQL语言,用户可以完成Server数据库中的所有操作。
SQL的分类:
(1):
数据定义语言,DDL
用来创建数据库和数据库中的各种对象
数据库中的对象包括:
表、视图、索引、存储过程、触发器
DDL常用的命令包括:
create、alter、drop
(2):
数据操纵语言,DML
可以完成对数据库中数据的查询、更新、删除、插入的功能
DML常用的命令包括:
select、update、delete、insert
(3)数据控制语言,DCL
DCL常用的命令包括:
grant、revoke、deny
(4)数据类型
1、数字数据类型
a、整型数据类型:
bigint、int、smallint、tinyint
b、浮点数据类型:
float、real
c、固定精度数据类型:
decimal、numeric
d、货币数据类型:
money、smallmoney
将数据格式转换成字符串方法:
STR(ID;---ID为数据类型,STR(ID为字符串
2、字符数据类型:
varchar、char、text、nchar、nvarchar、ntext
区别char和varchar数据类型:
char数据类型是存放固定长度的字符
Varchar数据类型是存放动态长度的字符
char(14,实际放入到数据库的字符长度为14个字符,如果实际存储的长度小于定义的长度,那么数据库会在次字符串后面加上3个空格
1、insert语句:
insert语句是属于SQL语言中的DML
作用:
为表插入数据
你向一个表中插入一条新记录,但有一个字段没有提供数据。
在这种情况下,有下面的四种可能:
1、如果该字段有一个缺省值(默认值),该值会被使用。
2、如果该字段可以接受空值,而且没有缺省值,则会被插入空值。
3、如果该字段不能接受空值,而且没有缺省值,就会出现错误。
你会收到错误信息:
Thecolumnintablemytablemaynotbenull.
4、如果该字段是一个标识字段,那么它会自动产生一个新值。
当你向一个有标识字段的表中插入新记录时,只要忽略该字段,标识字段会给自己赋一个新值。
使用INSERT语句可向文本型字段中插入数据。
但是,如果你需要输入很长的字符串,你应该使用WRITETEXT语句。
语法:
insertinto表名(列名1,列名2,…..values(值1,值2,….
注意:
(列名1,列名2,…..可以不写,这样的话,插入的values(值1,值2,….中的值必须包含表中的所有列,不然会报错。
把INSERT语句与SELECT语句结合起来,可以添加多个记录。
像这样:
代码:
INSERTmytable(first_column,second_column
SELECTanother_first,another_second
FROManothertableWHEREanother_first=’CopyMe!
’
这个语句从anothertable拷贝记录到mytable.只有表anothertable中字段another_first的值为’CopyMe!
’的记录才被拷贝。
2、update语句它也是属于SQL语句中的DML,可以修改表的数据,使用WHERE子句来选择更新特定的记录。
需要更新很长的字符串,应使用UPDATETEXT语句。
如果你不提供WHERE子句,表中的所有记录都将被更新。
语法:
update表名set列名1=值1,列名2=值2,……..[where条件….]
updatestudentsetsage=20wheresno=’s014’----修改一列
updatestudentsetsage=20,setssex=’女’wheresno=’s014’
----修改多列逗号隔开
3、delete语句也是属于SQL语句中的DML
作用:
可删除表中的一行或多行,在SQLSELECT语句中可以使用的任何条件都可以在DELECT语句的WHERE子句中使用。
删除应该表中的所有记录,应使用TRUNCATETABLE语句。
语法:
deletefrom表名[where条件….]
deletefromstudent----删除表student中所有数据
deletefromstudentwheresno=‘s014’----删除表student中编号是014的一行
deletefromstudentwheresno>=‘s013’--删除表student中编号大于等于013的行
4、建立索引
CreateINDEXindex_nameONtable_name(column_name
说明:
对某个表格建立索引后,数据库会对相应列进行自然排序,以增加查询时的速度。
4、基本查询技术:
数据库中提供一种可以将表中的数据查询出来的技术,称为select查询
select查询技术的基本语法格式
select[列名1,列名2,…..]|from表名1,表名2
[where条件]
[groupby分组的列名]
[having聚合函数比较操作]
[orderby排序的列名]
(1)查询语句中的“*”号代表将表中的列全部显示出来
select*fromstudent
(2)如果只想在查询中显示某一列用:
selectsnosnamesagefromstudent
注意:
“*”和列名只能够二选一,不能够同时出现
(3)在查询的时候可以为表或者列定义别名
A:
为列定义别名
selectsnoas学号,snameas姓名fromstudent
或:
select‘学号’=sno,‘姓名’=snamefromstudent
B:
为表定义别名
selectsnosnamesagessexfromstudenta
好处:
当出现多张表联系起来作查询的时候,如果多张表中含有相同的列名的时候,为表定义别名使得查询比较方便
例如:
想查询课程是由哪些老师就是讲授的。
从课程course表和老师teacher表中查找车tno列相同的数据
selectcname,tname,fromcoursea,teacherb
wherea.tno=b.tno
(4)distinct关键字
此关键字是为了去掉列中重复的值,对于所有重复的数据行在SELECT返回的结果集合中只保留一行。
selectdistinctsnofromsc
(5)orderby排序(默认升序
语法:
orderby列名[desc|asc]
desc:
代表降序排列
asc代表升序排列
select*fromstudentorderbysname
如果不写排序关键字,默认的是升序
select*fromstudentorderbysnamedesc
(6)where关键字使用
Where作为查询筛选结果的一个过程(非常重要
语法:
where条件1[or|and][条件2]…
条件1可以包括以下内容:
Where列名1列名2|数值
(7topn限制返回的行数
使用TOPn[PERCENT]选项限制返回的数据行数,TOPn说明返回n行,而TOPnPERCENT时,说明n是表示一百分数,指定返回的行数等于总行数的百分之几。
例如:
代码:
SELECTTOP2*FROM`testtable`
代码:
SELECTTOP20PERCENT*FROM`testtable`
条件表达式分类:
1、比较条件:
(>:
大于<:
小于>=:
大于等于=<:
小于等于<>:
不等于=:
登于)
例如:
找学生年龄大于23岁的同学信息
select*fromstudentwheresage>23
2、逻辑条件
(and:
与运算or:
或运算not:
非)
逻辑操作的用法:
Where条件1条件2
例如:
查找课程编号大于’c002’的课程由哪些老师讲授
sSelect*fromteacher,coursewhereteacher.tno=course.tnoando>‘c002’
例如:
查找选修了课程’c002’,或者成绩大于70的学生有哪些
selectsname,sage,cno,scorefromstudenta,scb
wherea.sno=b.snoand(cno=’c002’orscore>70
例如:
not关键字的使用:
select*fromscwherescorenotbetween70and80
3、in关键字
它是要求查询的结果在某几个值里面
select*fromscwherescorenotin(70,90,80
select*fromcoursewherecnoin(‘c001’,’c002’,’c005’
in还可以应用到子查询中
select*fromscwheresno
in(selectsnofromstudentwheresno>=‘s002’
4、like关键字
like是作为SQL模糊查询比较常用的一个技术,在like关键字使用中提出两个比较特殊的符号
%:
0个或多个任意字符
_:
任意一个字符
例如:
a、查找学生表中姓“陈”的同学
select*fromstudentwheresnamelike‘陈%’
b、查询学生表中名字是三个字的学生信息
select*fromstudentwheresnamelike‘___’----‘内三下杠’
思考题:
如果一个列中的内容含有下划线,要去用like来查找含有下划线的信息,该怎么做?
在SQL模糊查询中提供了一个escape(逃离、躲避、转移关键字,它作为转义符使用
select*fromstudentwheresnamelike‘%$_%’escape‘$’
“$”是定义的转移符号,那么在$符号后面的下划线不再是like中的特殊符号,而是一个普通字符
5、all关键字
6、any关键字
7、between…and关键字
5、聚合函数:
只能对表中的数字类型进行计算,其他类型报错
max、min、count、avg、sum
max函数使用:
selectmax(sagefromstudent----求学生表中最大的年龄
min函数使用:
selectmin(sagefromstudent-----求学生表中最小的年龄
count函数使用:
selectcount(*fromstudent
selectcount(snofromstudent
count(*:
可以计算包含null列的记录数
count(列名:
记录总记录数的时候,不去计算null值
avg函数的使用:
selectavg(sagefromstudent-----求学生表中的平均年龄
sum函数的使用:
selectsum(sagefromstudent-----求学生表中的年龄和
6、groupby子句,它是一个分组函数,可以对某一列相同的值进行分组并求出相应的结果。
语法:
Select列名1[,列名2….]from表名groupby列名1[,列名2…]
例如:
求学生表中男女生的总数
Selectssex,count(ssexfromstudentgroupbyssex
例如:
求不同老师总共讲授的课程的总数
A.两张表的查询teacher,course
B.对不同的老师进行一个分组
C.分组后求课程的总数
Selectt.tno,tname,count(cnofromteachert,coursec
wheret.tno=c.tnogroupbyt.tno,tname
groypby执行原理、注意事项:
a.先根据groupby后的列名进行分组
b.然后根据count(列名中的列名进行统计
c.groupby子句经常和聚合函数一起使用
d.在使用groupby的时候,如果查询的列没有包含在聚合函数中,那么该列一定要出现在groupby子句后面
7、having子句使用
having子句的作用非常重要,它是对聚合函数的值可以进行比较的操作。
Having必须放在groupby子句的后面。
例如:
查询讲两门课以上的老师信息
Selectt.tno,tname,count(cnofromteachert,coursec
Wheret.tno=c.tnogroupbyt.tno,t.namehavingcount(cno>=2
创建表的语法
creattable表名(
列名_1数据类型约束条件
列名_2数据类型约束条件
……………………
)
注意:
如果定义的表中有多个列,那么需要以英文逗号”,”隔开;
表名和列名不能是SQL语言中的关键字
Numeric(p,n
P代表数字类型的精度,插入数据的的最大长度。
整数位多了会报错
n代表小数点后面的位数。
小数后的位数长度超过n为会四舍五入
creattableA_2(
a_nonumeric(5,2//最大长度为5位,小数点后为两位,
insertintoA_2(a_novalues(789.298//789.30
insertintoA_2(a_novalues(7890.28//报错
插入日期类型
creattableA_3(
a_datedatatime
insertintoA_3values(‘2011-04-02’
查询表:
select*from表名
select*fromA_2
1、SQL链接查询
含义:
复杂的SQL查询是基于多张表以上的查询,就必须考虑多张表的连接查询
是关系数据库模型的主要特点,也是它区别于其它类型数据库管理系统的一个标志。
SQL链接查询的分类:
等值链接外连接交叉链接
等值链接:
两个SQL语句:
第一个:
selecttname,cnamefromteachert,coursecwheret.tno=c.tno
第二个:
selecttname,cnamefromteachertinnerjoincoursecont.tno=c.tno
查询学生所选的课程的分数,要求跟上学生的姓名:
selecta.sno,sname,o,cname,scorefromstudenta
scb,coursecwherea.sno=b.snoando=o
注意:
第二个SQL语句是SQL92/SQL99的写法,这种写法叫做连接查询中的内连接形式
外连接:
包括:
左外链接、右外连接、完全链接
外连接不只列出与连接条件相匹配的行,而是列出左表(左外连接时、右表(右外连接时或两个表(全外连接时中所有符合搜索条件的数据行。
使用外连接需要一些关键字:
leftouterjoinon(左外连接
rightouterjoinon(右外连接
fullouterjoinon(完全连接的写法
例子:
select*from表1leftouterjoin表2on表1.列名=表2.列名
creattableR(
avarchar(5
bvarchar(5
cvarchar(5
creattableS(
cvarchar(5
dvarchar(5
leftouterjoin的含义:
除了满足查询条件的结果显示出来,还需将leftouterjoin左侧表中没有匹配的数据显示出来
外连接实战应用:
1、查询所有同学的学号、姓名、选课数、总成绩
如果没有选课的学生信息,是否也要打印出来作为统计数据
selecta.sno,sname,count(cno,sum(score
fromstudentaleftouterjoinscc
ona.sno=c.snogroupbya.sno,sname
2、查询不同老师所教不同课程的平均分
selectt.tno,tname,o,avg(scorefromcoursec
leftouterjoinscono=ogroupbyo,t.tno,tname
rightouterjoin的含义:
除了满足查询条件的结果显示出来,还需将rightouterjoin右侧表中没有匹配的数据显示出来
1、查询所有同学的学号、姓名、选课数、总成绩
如果没有选课的学生信息,是否也要打印出来作为统计数据
selecta.sno,sname,count(cno,sum(scorefromscc
rightouterjoinstudenta
ona.sno=c.snogroupbya.sno,sname
2、查询不同老师所教不同课程的平均分
selectt.tno,tname,o,avg(scorefromsc
rightouterjoincoursecono=o
groupbyo,t.tno,tname
fullouterjoin的含义:
就是左外连接和有外链接结果的和
select*fromRfullouterjoinonSonR.c=S.c
连接操作中的ON(join_condition子句指出连接条件,它由被连接表中的列和比较运算符、逻辑运算符等构成。
无论哪种连接都不能对text、ntext和image数据类型列进行直接连接,但可以对这三种列进行间接连接。
例如:
代码:
SELECTp1.pub_id,p2.pub_id,p1.pr_info
FROMpub_infoASp1INNERJOINpub_infoASp2
ONDATALENGTH(p1.pr_info=DATALENGTH(p2.pr_info(一内连接
内连接查询操作列出与连接条件匹配的数据行,它使用比较运算符比较被连接列的列值。
SQL的子查询
1、where子查询
selectcno,scorefromscwherescore>(selectavg(scorefromsc
where子查询后面的条件允许写select语句,那么这个限制条件(“>”符号)后的查询称为子查询。
2、from子查询
结构:
select*from表名1,(select*from表名2
例如:
查询每个学生的课程、成绩、总平均分
selectcno,score,b.ccfromsc,(selectavg(scoreasccfromscb
wheresc.
虚表命名为b,查询出来的平均分命名为cc
在from关键字后面出现的查询句子,我们可以让他单独的作为一张虚表。
3、in子查询
它是要求查询的结果在某几个值里面
select*fromscwherescorenotin(70,90,80
select*fromcoursewherecnoin(‘c001’,’c002’,’c005’
in还可以应用到子查询中
select*fromscwheresno
AB
in(selectsnofromstudentwheresno>=‘s002’
4、any子查询
>any:
大于最小的
=any:
就是关键字in的作用
select*|列名1,列名,列名2.from表名where列名>any比较条件(子查询
select*|列名1,列名,列名2….from表名where列名
select*|列名1,列名,列名2….from表名where列名=any比较条件(子查询
例如:
查询学生成绩大于70,且出去里面最小的学号
selectdistincta.sno,snamefromstudenta,scb
wherea.sno=b.snoandb.sno>70
anda.sno>any(selectsnofromscwherescore>70
5、all子查询
语法格式:
select*|列名1,列名,列名2….from表名where列名>all比较条件(子查询
select*|列名1,列名,列名2….from表名where列名
select*|列名1,列名,列名2….from表名where列名=all比较条件(子查询
>all:
大于子查询结果中最大的数据
子查询结果中最小的数据
=all:
没有任何数据
Select*fromstudentwheresno>all(selectsnofromscwherescore>70
6、嵌套子查询
7、exists子查询
允许查找特定条件的行,exists后面总是跟一个子查询,只要只查询返回了行,exists的值就为true。
例:
查询返回在任何一次考试中分数低于40分得学生studentID和姓名
selectstudentID,namefromstudentswhereexists
(selectstudentIDfromstudentExameWheremark<40ande.studentID=s.studentID;
这里的基础是一个相关子查询返回分数低于40分得学生的studentID:
selectstudentIDfromstudentExameWheremark<40
对student表中的每一行只执行一次
ande.studentID=s.studentID
2.5
修改表:
修改表的时候一般有如下操作:
1、修改表中的数据类型
2、为表添加列
3、ABC
4、为表添加约束
5、删除表的约束
第一种:
为表添加列
altertable表名add列名
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- SQL 常用 增删 语句 笔记
![提示](https://static.bdocx.com/images/bang_tan.gif)