志在指尖
用双手敲打未来

sql语句(SQL基础语句汇总)

sql语句
SQL是用于访问和处理数据库的标准的计算机语言。
什么是SQL?
SQL指结构化查询语言
SQL使我们有能力访问数据库
SQL是一种ANSI的标准计算机语言
编者注:ANSI,美国国家标准化组织
复制代码
#显示数据库
showdatabases;
#判断是否存在数据库test_mysql,有的话先删除
dropdatabaseifexiststest_mysql;
#创建数据库
createdatabasetest_mysql;
#删除数据库
dropdatabasetest_mysql;
#使用该数据库
usetest_mysql;
#显示数据库中的表
showtables;
#先判断表是否存在,存在先删除
droptableifexistsstudent;
#创建表
createtablestudent(
idintauto_incrementprimarykey,
namevarchar(50),
sexvarchar(20),
datevarchar(50),
)defaultcharset=utf8;
#删除表
droptablestudent;
#查看表的结构
describestudent;#可以简写为descstudent;
#插入数据
insertintostudentvalues(null,’test’,’2018-10-2′);
#查询表中的数据
select*fromstudent;
selectid,namefromstudent;
#修改某一条数据
updatestudentsetname=’jack’whereid=4;
#删除数据
deletefromstudentwhereid=8;
#and且
select*fromstudentwheredate>’2018-1-2’anddate<‘2018-12-1’;
#or或
select*fromstudentwheredate<‘2018-11-2’ordate>’2018-12-1′;
#between
select*fromstudentwheredatebetween’2018-1-2’and’2018-12-1′;
#in查询制定集合内的数据
select*fromstudentwhereidin(1,3,5);
#排序asc升序desc降序
select*fromstudentorderbyidasc;
#分组查询#聚合函数
selectmax(id),name,sexfromstudentgroupbysex;
selectmin(date)fromstudent;
selectavg(id)as’Avg’fromstudent;
selectcount(*)fromstudent;#统计表中总数
selectcount(sex)fromstudent;#统计表中性别总数若有一条数据中sex为空的话,就不予以统计~
selectsum(id)fromstudent;
#查询第i条以后到第j条的数据(不包括第i条)
select*fromstudentlimit2,5;#显示3-5条数据
#修改数据
updatestudentsetname=’test’whereid=2;
updatestudentsetname=’花花’,sex=’女’whereid=2
deletefromstudentwhereid=2;
#修改表的名字
#格式:altertabletbl_namerenametonew_name
altertablestudentrenametotest_1;
#向表中增加一个字段(列)
#格式:altertabletablenameaddcolumnnametype;/altertabletablenameadd(columnnametype);
altertablestudentaddagevarchar(20)setdefault’1′;#setdefault设置默认值
#修改表中某个字段的名字
altertabletablenamechangecolumnnamenewcolumnnametype;#修改一个表的字段名
altertablestudentchangenametest_namevarchar(50);
#去掉表中字段age的默认值
altertablestudentalteragedropdefault;
#去掉表中字段age
altertablestudentdropcolumnage;
#删除表中主键
altertablestudentdropprimarykey;
#表中增加主键
#altertableaddprimarykey(column1,column2,….,column)
altertablestudentaddprimarykey(student_id);
#用文本方式将数据装入数据库表中(例如D:/mysql.txt)
loaddatalocalinfile”D:/mysql.txt”intotableMYTABLE;
#导入.sql文件命令(例如D:/mysql.sql)
sourced:/mysql.sql;#或者/.d:/mysql.sql;
SQL基础语句汇总
本节会涉及到SQL的基本句法,SQL的执行顺序,SQL之间的组合,动态SQL语句四个方面。这四个方面之间没有前后顺序之分,是相辅相成,其内在还是有很多联系的。
一.四种基本的SQL语句
1.查询
select*fromtable
2.更新
updatetablesetfield=value
3.插入
insert[into]table(field)values(value)
4.删除
delete[from]table
二.语句的执行顺序
1.语法分析
分析语句中语法是否符合规范,衡量语句中各表达式的意义。
2.语义分析
检查语句中涉及的所有数据库对象是否存在,且用户有相应的权限。
3.选择优化器
不同的数据库有不同的算法(这个涉及到数据结构),数据库会根据自己的理解(数据库本身)为SQL语句选择不同的优化器,不同的优化器会选择不同的“执行计划”
4.运行“执行计划”
根据“执行计划”执行SQL语句。
以上所述是数据执行时的大体路线。
5.select语句的执行顺序
借用ItZikBen-Gan、LuborKollar、DejanSarka所著的《SqlServer2005技术内幕:T-SQL查询》的一段话足以说明:
(8)select(9)distinct(11)<top_specification><select_list>
(1)from<left_table>
(3)<join_type>join<right_table>
(2)on<join_condition>
(4)where<where_condition>
(5)groupby<group_by_list>
(6)with{cube|rollup}
(7)having(having_condition)
(10)orderby<order_by_condition>
从这个顺序可以看出,所有的查询语句都是从from开始执行的。在执行过程中,每个步骤都会为下一个步骤生成一个虚拟表,这个虚拟表将作为下一个执行步骤的基础。
第一步:from
首先对from子句中的前两个表执行一个笛卡尔乘积,此时生成虚拟表vt1.
第二步:on
接下来便是应用on筛选器,on中的逻辑表达式将应用到vt1中的各个行,筛选出满足on逻辑表达式的行,生成虚拟表vt2.
第三步:join
如果是outerjoin那么这一步就将添加外部行,leftouterjion就把左表在第二步中过滤的添加进来,如果是rightouterjoin那么就将右表在第二步中过滤掉的行添加进来,这样生成虚拟表vt3.
第四步:多表
如果from子句中的表数目多余两个表,那么就将vt3和第三个表连接从而计算笛卡尔乘积,生成虚拟表,该过程就是一个重复1-3的步骤,最终得到一个新的虚拟表vt3.
第五步:where
应用where筛选器,对上一步生产的虚拟表引用where筛选器,生成虚拟表vt4,在这有个比较重要的细节不得不说一下,对于包含outerjoin子句的查询,就有一个让人感到困惑的问题,到底在on筛选器还是用where筛选器指定逻辑表达式呢?on和where的最大区别在于,如果在on应用逻辑表达式那么在第三步outerjoin中还可以把移除的行再次添加回来,而where的移除的最终的。
第六步:groupby
分组,生成虚拟表vt4
第七步:having
对vt4应用having筛选器,生成虚拟表vt5
第八步:select
处理select列表,生成虚拟表vt6
第九步:distinct
将vt6中重复的行去掉,生成虚拟表vt7
第十步:orderby
将vt7中的行按orderby子句中的列列表排序,生成一个游标vc8
第十一步:top
从vc8的开始处选择指定数量或比例的行,生成虚拟表vt9,并返回给调用者
三.SQL语句扩展
1.select
1.1选择性插入语句
1.1.1Insertintotable1(field1)Selectfield2fromtable2
要求table1必须存在。
1.1.2selectfield1intotable1fromtable2
要求table1不存在,在运行时会自动创建表名为table1,字段名为field1的一个表。
1.2打开其它数据源
/*OracleSvr为链接服务器名,本示例假定已经创建了一个名为ORCLDB的Oracle数据库别名。*/
EXECsp_addlinkedserver’OracleSvr’,–链接服务器名OracleSvr,sysname类型
‘MSDAORA’,–provider_name数据源提供程序,此处为oracle
‘ORCLDB’–数据源名称
GO
Select*fromOPENQUERY(OracleSvr,’SELECTname,idFROMjoe.titles’)
如果有多个sqlserver实例:
SELECT*FROM[servername\instancename.]pubs.dbo.authors.
注意:一个对象的完整名称包括四个标识符:服务器名称、数据库名称、所有者名称和对象名称。其格式如下:
[[[server.][database].][owner_name].]object_name
中间的名称可以省略,但是.不可以省略。如:server…object_name
2.update
2.1多表更新
Updatetable1settable1.field1=table2.field2from
table1,table2/*猜测下连接方式全联接FULL[OUTER]JOIN*/
wheretable1.field3=table2.filed3
知识:SQLServer的update语句中from后可跟多个表,Oracle则不支持该用法
Oracle中:Updatetable1settable1.field1=
(selecttable2.field2fromtable2where.field3=table2.filed3)
3.insert
3.1插入语句的规范问题
在sqlserver2000,sqlserver2005中
标准语句:insertintotable(field)values(value)
提示:在access中不正确,原因sql语句不规范,因此在书写sql语句的过程中一定要按正规的语法来写。
4.delete
4.1标准删除
标准语句:deletefromtablewherecondition
提示:同insert
4.2其它删除
4.2.1truncate
语法:truncatetabletable_name
删除表中所有行,不记录单个行删除操作,不记录日志,,所有速度比Delete快。
4.2.2drop
语句:Droptabletable_name
删除表及相关,有fk约束的不能删,先去年fk;系统表不能使用。
5.orderby
功能:排序
技巧:orderbynewid()随机排序
四.动态SQL语句
4.1基本原则
4.1.1预编译问题
在EXECUTE执行之前,数据库不会编译EXECUTE语句内的语句,动态SQL语句就是放到存储过程中,它也不会预先编译。
4.1.2什么时候使用动态SQL语句
字段名,表名,数据库名作为变量时,必须用动态SQl语句
4.2.exec[ute]
4.2.1语法
exec(‘select*fromtable_namewherename=’’’+@name+’’’’)–括号不能少
4.2.2传递参数
–假设存储过程test_sp中需要一个参数:类型nvarchar(50)名称@parm
Declare@parmsnvarchar(50)
Set@parms=’测试变量’
Exectest_sp[@parm=]@parms–方括号内的可以省略
如果是批处理中的第一句,则可以省略Exec
4.2.3输出参数
declare@numint,@fieldint,
@sqlsnvarchar(4000)
Set@field=1
set@sqls=’select@a=count(*)fromtable_namewherefield=@field’
execsp_executesql@sqls,N’@aintoutput,@fieldint’,@numoutput,@field
select@num
4.3.sp_executesql
语法:exec[ute]sp_executesqlN’select*fromtable_namewherefield=@field’,N’@fieldint’,@field=1
使用sp_exexutesql比使用exec更有效率.
结束语
以上是SQL中常用的语句,及其执行时的顺序。不管是SQLServer系列,mysql,access,Oracle系列这些都基本相同。如果要在数据库方面做高深的研究,则多看一下其自带的帮助,多练习,多看一些数据库原理方面的书。

未经允许不得转载:IT技术网站 » sql语句(SQL基础语句汇总)
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

志在指尖 用双手敲打未来

登录/注册IT技术大全

热门IT技术

C#基础入门   SQL server数据库   系统SEO学习教程   WordPress小技巧   WordPress插件   脚本与源码下载