关于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)格式为YYYYMMDDVARCHAR(M)[常用]可变长度的字符串BLOB大对象存储类型TEXT[常用]大文本存储类型,最大长度为65535(2^16-1)个字符我觉得用的多的类型用[常用]标记了一下,相关时间的那几个各有各的优点,就看你的需要了。二、变量declare@iAgeint--声明变量set@iAge=12--给变量附值print@iAge--打印变量select@iAge:=’iage’fromemployewherename=’Bill’;将查询到字段给变量附值注意:这里,select语句中我们不得不使用:=句法,因为=是为比较保留的三、逻辑控制--IF条件判断declare@iintset@i=12if(@i10)beginprint'Dadadada!'print'Dadadada!'endelsebeginprint'XiaoXiao!'print'XiaoXiao!'end--While循环控制declare@iint;set@i=12;print@ireturn;while(@i18)beginprint@i;set@i=@i+1;if@i17continue;if@i15break;end;--CASE分支判断selectau_lname,state,'犹他州'fromauthorswherestate='UT'selectau_lname,state,'密西西比州'fromauthorswherestate='MI'selectau_lname,state,'肯塔基州'fromauthorswherestate='KS'selectau_lname,state,casestatewhen'UT'then'犹他州'when'MI'then'密西西比州'when'KS'then'肯塔基州'when'CA'then'加利福利亚'elsestateendfromauthors四、函数这部分的内容很多,我也不是很熟这里就我所知道的列一点:--获取给定字符串的长度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)fromemployewhereiage30;等等五、注释#单行注释--单行注视/*内容*/多行注释SQL常规应用一、创建数据库用给定的名字创建一个数据库CREATEDATABASEdb_name删除数据库中给定名字的数据库(慎重使用)DROPDATABASE[IFEXISTS]db_name调出要用的数据库USEdb_name下面是一个完整的创建例子,同时创建了一个数据库log文件--指定数据库名称--(注:如果数据库名中包含空格可以使用[]将其标示)createdatabase[SuperWC]--关于数据文件的定义on(name=Super_WC_Data,--逻辑名filename='C:\Super_WC_Data.MDF',--物理路径以及物理名size=2MB,--初始大小maxsize=4MB,--最大限制filegrowth=1MB--增长大小)--关于日志文件的定义logon(name=Super_WC_Log,filename='C:\Super_WC_Log.LDF',size=3MB,maxsize=7MB,filegrowth=20%--增长比例)二、创建表droptableifexistsauto_incr_test;--先把以前数据库中有可能存在的表删除createtableauto_incr_test(idintnotnullauto_increment,--这里的notnull代表这一列的值不能为空默认是nullnamechar(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_nameWHEREcol2=’abc’;查询操作(select)的语法格式:select字段from数据表where条件orderby字段desc/asc/*这里的orderby是用来指定排序依赖列,desc是指以降序排列(默认的是asc升序)*/例:SELECTcol1,col2FROMtbl_nameWHEREcol2=’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,cityfromstudentsainnerjoinaddressbwherea.addressid=b.idandname=’Bill’;3.子查询(很多内容,我不能尽举)有两种类型的子查询:“嵌套”子查询和“相关”子查询。例:--子查询--根据作者的名查找其编写的书籍--先通过子查询获取作者编号--然后,将其作为查询条件,找出相应的书籍编号--最后,在利用所得到的书籍编号来得到书籍信息selectau_id,title_idfromtitleauthorwhereau_id=(selectau_idfromauthorswhereau_lname='Green')select*fromtitleswheretitle_idin(selecttitle_idfromtitleauthorwhereau_id=(selectau_idfromauthorswhereau_lname='Green'))二、视图CREATE[O