关于MySql的SQL语言MySQL入门教程.docx
- 文档编号:24803124
- 上传时间:2023-06-01
- 格式:DOCX
- 页数:12
- 大小:20.47KB
关于MySql的SQL语言MySQL入门教程.docx
《关于MySql的SQL语言MySQL入门教程.docx》由会员分享,可在线阅读,更多相关《关于MySql的SQL语言MySQL入门教程.docx(12页珍藏版)》请在冰豆网上搜索。
关于MySql的SQL语言MySQL入门教程
关于MySql的SQL语言
目前常用的数据库有Oracle公司的Oracle,Microsoft公司的SQLServer,IBM公司的DB2和MySql公司的MySql,而免费的数据库目前只有MySql,当然盗版的不算。
SQL(StructuredQueryLanguage)结构化查询语言是目前一个国际上标准的数据库专用语言。
不过不同的数据库所使用的SQL语句都会稍有一些不同,但基本的标准还是会遵循SQL,例如:
用与SQLServer的叫做T-SQL,用于Oracle的叫做PL-SQL,它们都是SQL的子类,或者说是派生类。
用于MySql的我还不知道它叫做什么SQL,不过个人觉得它反而最接近标准的SQL语言,不过,从另一方面来说,它对SQL所做的扩展最少。
就我现在的理解SQL语言就是用来使用数据库和操作数据用的,不包括操作数据库,那些操作数据库的代码应该叫做命令,如:
启动,关闭数据库,设置字符集,设置访问连接用户数等,这些不属于SQL语言,不同的数据库都有自己的命令,这些命令是生产企业制定的。
下面,我大概来说一下SQL所做的事情创建数据库,创建表,插入、修改、删除数据,
查询数据(最主要的是这个功能,方便数据的储存和查询是人们发明数据库的理由)。
当然,我下面介绍的SQL都是用于MySql的。
SQL基础知识
一、数据类型
INT[常用]整数BIGIN大整数FLOAT(单精密)浮点数字DOUBLE[常用](双精密)浮点数字
NUMERIC(M,D)[常用]未压缩(unpack)的浮点数字,“未压缩”意味着数字作为一个字符串被存储,值的每一位使用一个字符。
例:
NUMERIC(16,2)表示这个浮点数字的储存空间为16个字节,精度为2(即小数点后保留2位数字)。
DATE[常用]日期DATETIME[常用]日期和时间组合CHAR(M)一个定长字符串
TIMESTAMP(M)[常用]时间戳记。
以YYYYMMDDHHMMSS、YYMMDDHHMMSS、YYYYMMDD或YYMMDD格式来显示TIMESTAMP值,例:
TIMESTAMP(14)格式为YYYYMMDDHHMMSS、TIMESTAMP(8)格式为YYYYMMDD
VARCHAR(M)[常用]可变长度的字符串BLOB大对象存储类型
TEXT[常用]大文本存储类型,最大长度为65535(2^16-1)个字符
我觉得用的多的类型用[常用]标记了一下,相关时间的那几个各有各的优点,就看你的需要了。
二、变量
declare@iAgeint--声明变量
set@iAge=12--给变量附值
print@iAge--打印变量
select@iAge:
=’iage’fromemployewherename=’Bill’;将查询到字段给变量附值
注意:
这里,select语句中我们不得不使用:
=句法,因为=是为比较保留的
三、逻辑控制
--IF条件判断
declare@iint
set@i=12
if(@i>10)
begin
print'Dadadada!
'
print'Dadadada!
'
end
else
begin
print'XiaoXiao!
'
print'XiaoXiao!
'
end
--While循环控制
declare@iint;
set@i=12;
print@i
return;
while(@i<18)
begin
print@i;
set@i=@i+1;
if@i<17
continue;
if@i>15
break;
end;
--CASE分支判断
selectau_lname,state,'犹他州'fromauthorswherestate='UT'
selectau_lname,state,'密西西比州'fromauthorswherestate='MI'
selectau_lname,state,'肯塔基州'fromauthorswherestate='KS'
selectau_lname,state,
casestate
when'UT'then'犹他州'
when'MI'then'密西西比州'
when'KS'then'肯塔基州'
when'CA'then'加利福利亚'
elsestate
end
fromauthors
四、函数
这部分的内容很多,我也不是很熟这里就我所知道的列一点:
--获取给定字符串的长度
printlength('abcdef')
--大小写转换
printlower('ABCDEF')
printupper('abcdef')
--去空格
printltrim('abcddfddf')
printrtrim('abcddfddf')
--求绝对值
printabs(-12)
--幂
--3的2次方
printpower(3,2)
--随机数
--0-1000之间的随机数
printrand()*1000
--获取圆周率
printpi()
--获取系统时间
printnow()
--获取指定时间之间相隔多少年
printdatediff(year,'2005-01-01','2008-01-01')
--字符串合并
print'abc'+'def'
print'abc'+'456'
--获取指定时间的特定部分
printdatepart(year,now())
--获取字符串中的一段
printSUBSTRING(‘abcdef’,1,3)
--获取纪录个数
selectcount(*)fromemploye;
--获取指定工资的和
selectsum(salary)fromemploye;
--获取年龄大于30岁员工的最高工资
selectmax(salary)fromemployewhereiage>30;
等等
五、注释
#单行注释--单行注视/*内容*/多行注释
SQL常规应用
一、创建数据库
用给定的名字创建一个数据库
CREATEDATABASEdb_name
删除数据库中给定名字的数据库(慎重使用)
DROPDATABASE[IFEXISTS]db_name
调出要用的数据库
USEdb_name
下面是一个完整的创建例子,同时创建了一个数据库log文件
--指定数据库名称
--(注:
如果数据库名中包含空格可以使用[]将其标示)
createdatabase[SuperWC]
--关于数据文件的定义
on
(
name=Super_WC_Data,--逻辑名
filename='C:
\',--物理路径以及物理名
size=2MB,--初始大小
maxsize=4MB,--最大限制
filegrowth=1MB--增长大小
)
--关于日志文件的定义
logon
(
name=Super_WC_Log,
filename='C:
\',
size=3MB,
maxsize=7MB,
filegrowth=20%--增长比例
)
二、创建表
droptableifexistsauto_incr_test;--先把以前数据库中有可能存在的表删除
createtableauto_incr_test(
idintnotnullauto_increment,--这里的notnull代表这一列的值不能为空默认是null
namechar(40),
timestamptimestamp,
primarykey(id)--创建主键
foreignkey(name)referencesstudents(no),--创建外键
)
/*上面出现的auto_increment代表了id这个列是一个自动增长列*/
要删除这个表就用droptableauto_incr_test;就可以了.
下面是包含约束的情况(设置约束可以增强数据库的完整性,但需要事先精确的设计,因为改动起来实在是太麻烦了):
createtablestudents
(
nochar(4)notnullauto_incrementprimarykey,
namenvarchar(8)notnull,
birthdaydatetimecheck(datediff(year,birthday,now())>=18),
ageasdatediff(year,birthday,now()),
sexnchar
(1)notnulldefault('女')check(sex='女'orsex='男'),
phonechar(11)check((phoneisnull)or(length(phone)=11)),
addressnvarchar(24)
)
注意:
表创建后修改起来比较麻烦,如果不是一定要修改的话可以删了再创建,尽量设计时就把握好需求,设计完美一点。
三、数据操作(添、删、改、查)←传说中著名的添删改查
添加操作(insert)的语法格式:
Insert[into]数据表(字段)values(数据)--[into]可以省略
例:
INSERTtbl_name(col1,col2)VALUES(15,’abc’);
修改操作(update)的语法格式:
Update数据表set字段=新值where条件
例:
UPDATEtbl_nameSETcol2= ’BBB’WHEREcol2=’abc’;
删除操作(delete)的语法格式:
Delete[from]数据表where条件--[]内的可写可不写,最好是写,不过懒人都不写
例:
DELETEtbl_name WHEREcol2=’abc’ ;
查询操作(select)的语法格式:
select字段from数据表where条件orderby字段desc/asc
/*这里的orderby是用来指定排序依赖列,desc是指以降序排列(默认的是asc升序)*/
例:
SELECTcol1,col2FROMtbl_name WHEREcol2=’abc’ORDERBYcol1DESC;
注意:
方便数据的储存和查询是人们发明数据库的理由,所以查询操作是SQL中的精髓之一,我上面的格式只是列出了较常用的格式,但只要是程序功能要求稍微复杂点的就要用到许多查询语句的高级特性了,我会在后面介绍我所能了解的。
SQL高级应用
一、高级查询
1.高级查询(就是把SQL定义的SELECT语句的语法都用到了的)
SELECT[STRAIGHT_JOIN][SQL_SMALL_RESULT][SQL_BIG_RESULT][HIGH_PRIORITY]
[DISTINCT|DISTINCTROW|ALL]
select_expression,...
[INTO{OUTFILE|DUMPFILE}'file_name'export_options]
[FROMtable_references
[WHEREwhere_definition]
[GROUPBYcol_name,...]
[HAVINGwhere_definition]
[ORDERBY{unsigned_integer|col_name|formula}[ASC|DESC],...]
[LIMIT[offset,]rows]
[PROCEDUREprocedure_name]]
GROUPBY用于分组查询
HAVING用于聚合函数的查询条件
LIMIT用于限制SELECT语句返回的行数
2.多表查询(又叫联合查询)
查找与多个表相关的数据,例:
Selectname,iage,cityfromstudentsainnerjoinaddressbwhere=andname=’Bill’;
3.子查询(很多内容,我不能尽举)
有两种类型的子查询:
“嵌套”子查询和“相关”子查询。
例:
--子查询
--根据作者的名查找其编写的书籍
--先通过子查询获取作者编号
--然后,将其作为查询条件,找出相应的书籍编号
--最后,在利用所得到的书籍编号来得到书籍信息
selectau_id,title_idfromtitleauthor
whereau_id=
(selectau_idfromauthorswhereau_lname='Green')
select*fromtitles
wheretitle_idin
(
selecttitle_idfromtitleauthor
whereau_id=
(selectau_idfromauthorswhereau_lname='Green')
)
二、视图
CREATE[ORREPLACE][ALGORITHM={UNDEFINED|MERGE|TEMPTABLE}]
VIEWview_name[(column_list)]
ASselect_statement
[WITH[CASCADED|LOCAL]CHECKOPTION]
例:
CREATEVIEWvASSELECTqty,price,qty*priceASvalueFROMt;
三、存储过程
CREATEPROCEDUREsp_name([proc_parameter[,...]])
[characteristic...]routine_body
例:
createprocedureproGetJobsByPage
@CurrentPageSizeint,
@PageSizeint,
@CurrentPageint
as
Declare@strSqlnvarchar(400)
set@strSql='select*from
(selecttop'+convert(nvarchar(4),@CurrentPageSize)+'*
from(selecttop'+convert(nvarchar(4),(@PageSize*@CurrentPage))+'*fromjobs)astt
orderbyjob_iddesc)asstt
orderbyjob_id'
execsp_executesql@strSql
四、触发器
CREATETRIGGERtrigger_nametrigger_timetrigger_event
ONtbl_nameFOREACHROWtrigger_stmt
例:
--创建插入触发器
createtriggeremp_marins
onemp_mgr
forinsert
as
declare@echar(30),@mchar(30)
declarecur_mgrcursorfor
select
fromemp_mgr,inserted
where=
opencur_mgr
fetchnextfromcur_mgrinto@e
while@@fetch_status=0
begin
updateemp_mgr
set=+1
where=@e
fetchnextfromcur_mgrinto@e
end
closecur_mgr
deallocatecur_mgr
五、索引(很有用,可以提高查询语句的执行效率)
CREATE[UNIQUE|FULLTEXT|SPATIAL]INDEXindex_name
[USINGindex_type]
ONtbl_name(index_col_name,...)
例:
此处展示的语句用于创建一个索引,索引使用列name。
CREATEINDEXpart_of_nameONcustomer(name);
OK,先些这些啦,累死了,呵呵…
(如有错误,请大家不吝赐教…)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 关于 MySql SQL 语言 入门教程