MSSQL-MYSQL语法差异

合集下载

mysql分析(二)mysql语法分析

mysql分析(二)mysql语法分析

/* Symbols are broken into separated arrays to allow field names with same name as functions. These are kept sorted for human lookup (the symbols are hashed).
| verb_clause { Lex_input_stream *lip = YYLIP;
if ((YYTHD->client_capabilities & CLIENT_MULTI_QUERIES) && lip->multi_statements && ! lip->eof())
{ /* We found a well formed query, and multi queries are allowed: - force the parser to stop after the ';'
lex->many_values.push_back(lex->insert_list)) MYSQL_YYABORT; } ident_eq_list ;
fields: fields ',' insert_ident { Lex->field_list.push_back($3); }
| insert_ident { Lex->field_list.push_back($1); } ;
四、查询指令开始
query: END_OF_INPUT { THD *thd= YYTHD; if (!thd->bootstrap && (!(thd->lex->select_lex.options & OPTION_FOUND_COMMENT))) { my_message(ER_EMPTY_QUERY, ER(ER_EMPTY_QUERY), MYF(0)); MYSQL_YYABORT; } thd->lex->sql_command= SQLCOM_EMPTY_QUERY; YYLIP->found_semicolon= NULL; }

SQLserver与MySQL语法的区别

SQLserver与MySQL语法的区别

SQLserver与MySQL语法的区别 SQL server与MySQ虽然同样是基于SQL语法的,但它们之间的差异也是不可忽略的。

本博⽂缘由: 在学习《数据库系统概论》⾥⾯使⽤的为SQLsever语法,与最先接触的MySQL部分语法有些许不同。

下⾯是我在做数据库习题与到的⼀些差异。

1、limit语句mysql中SELECT ageFROM personORDER BY age ASCLIMIT 3SQL server中SELECT TOP 3 WITH TIES *FROM personORDER BY age ASC#应⽤-- 从 "Persons" 表中选取 50% 的记录SELECT TOP 50 PERCENT * FROM Persons2、DATEDIFF() 函数mysql中#DATEDIFF() 函数返回两个⽇期之间的天数-- DATEDIFF(date1,date2)SELECT DATEDIFF('2008-12-30','2008-12-29') AS DiffDateSQL server中#DATEDIFF() 函数返回两个⽇期之间的时间-- DATEDIFF(datepart,startdate,enddate)SELECT DATEDIFF(day,'2008-12-29','2008-12-30') AS DiffDate/*注意:SQL server中的DATEDIFF() 函数等效于mysql中的 TIMESTAMPDIFF() 函数*/-- TIMESTAMPDIFF(unit,begin,end);3、DATE函数mysql中1、NOW() 返回当前的⽇期和时间-- CURDATE() 返回当前的⽇期-- CURTIME() 返回当前的时间2、DATE() 提取⽇期或⽇期/时间表达式的⽇期部分-- EXTRACT(unit FROM date) 返回⽇期/时间按的单独 unit部分3、DATE_FORMAT(date,format) ⽤不同的格式 format显⽰⽇期/时间4、DATEDIFF(date1,date2) 返回两个⽇期之间的天数-- TIMESTAMPDIFF(unit,begin,end); 相当于SQL sever中的DATEDIFF() 函数5、DATE_ADD() 给⽇期添加指定的时间间隔DATE_SUB() 从⽇期减去指定的时间间隔SQL sever中1、GETDATE() 返回当前⽇期和时间2、DATEPART(datepart,date) 返回⽇期/时间的单独 datepart3、CONVERT(data_type(length),data_to_be_converted,style) ⽤不同的格式 style显⽰⽇期/时间4、DATEDIFF(datepart,startdate,enddate) 返回两个⽇期之间的时间5、DATEADD() 在⽇期中添加或减去指定的时间间隔4、百分⽐约束例:查询课程表中的前30%的记录。

mysql和sqlite语法

mysql和sqlite语法

mysql和sqlite语法MySQL和SQLite是两种常见的关系型数据库管理系统(RDBMS),它们都具有自己的语法和特点。

本文将详细介绍MySQL和SQLite的语法与用法,并对它们的异同进行比较。

一、MySQL语法 MySQL是一种开源的关系型数据库管理系统,它的语法相对较为复杂。

MySQL的语法由不同的命令组成,常见的命令包括创建数据库、创建表、插入数据、查询数据、更新数据和删除数据。

以下是MySQL的一些常用语法及用法:1. 创建数据库使用CREATE DATABASE命令可以创建一个新的数据库。

例如,创建名为“mydb”的数据库:``` CREATE DATABASE mydb; ```2. 创建表使用CREATE TABLE命令可以创建一个新的表。

例如,创建名为“users”的表,包含id、name和age 字段: ``` CREATE TABLE users ( id INT PRIMARY KEY, name VARCHAR(50), age INT ); ```3. 插入数据使用INSERT INTO命令可以向表中插入新的数据。

例如,向“users”表中插入一条数据: ``` INSERT INTO users (id, name, age) VALUES (1,'John', 25); ```4. 查询数据使用SELECT命令可以从表中查询数据。

例如,查询“users”表中的所有数据: ``` SELECT * FROM users; ```5. 更新数据使用UPDATE命令可以更新表中的数据。

例如,将“users”表中id为1的记录的age字段更新为30: ``` UPDATE users SET age = 30 WHERE id = 1;```6. 删除数据使用DELETE命令可以从表中删除数据。

例如,删除“users”表中id为1的记录: ``` DELETE FROM users WHERE id = 1; ```二、SQLite语法 SQLite是一种轻量级的关系型数据库管理系统,它的语法相对简单。

mysql_difference函数算法_概述及解释说明

mysql_difference函数算法_概述及解释说明

mysql difference函数算法概述及解释说明1. 引言1.1 概述:本篇文章旨在介绍和解释mysql中的Difference函数算法。

Difference函数是一种常用的数据库函数,用于比较两个文本或字符型字段之间的差异性,并返回差异性的度量值。

通过对Difference函数的概述及解释,读者将能够深入了解该函数的背景、作用和基本原理,从而更好地应用于实际项目中。

1.2 文章结构:本文将分为五个部分来进行说明。

首先,在引言部分我们将简要介绍本文的目标、内容和结构,以帮助读者理解全文。

接下来,第二部分将详细阐述Difference 函数算法的概述,并介绍其背后的原理和基本特点。

第三部分将重点关注Difference函数的使用方法,包括语法和参数解释,并通过实际应用示例进行展示。

第四部分则提供了一些使用Difference函数时需要注意的事项和常见问题解答,包括如何处理NULL值以及性能优化建议等。

最后,在第五部分我们将总结Difference函数的优势与不足,并展望其未来发展并提出建议。

1.3 目的:撰写这篇长文有以下几个目的:- 介绍mysql中Difference函数算法,帮助读者了解该函数的概述和基本原理;- 提供Difference函数的使用方法和参数解释,并通过实际示例进行说明;- 分享使用Difference函数时需要注意的事项和常见问题解答,以及性能优化建议;- 总结Difference函数的优势与不足,并展望其未来发展并提出建议。

通过阅读本文,读者将能够全面掌握mysql中Difference函数算法的相关知识,并且在实际应用中能够灵活运用该函数解决问题。

同时,本文也为读者提供了进一步学习和探索这一领域的参考信息,以满足各自需求。

2. Difference函数算法概述2.1 Difference函数简介Difference函数是MySQL数据库中的一个内置函数,用于计算两个字符串之间的差异度。

mysql 查询语法

mysql 查询语法

mysql 查询语法一、概述MySQL是一个开源的关系型数据库管理系统,广泛应用于Web应用程序的开发中。

在MySQL中,查询语句是最常用的操作之一,本文将对MySQL查询语法进行详细介绍。

二、基本语法MySQL查询语句通常由SELECT、FROM、WHERE、GROUP BY、HAVING和ORDER BY等关键字组成。

其中,SELECT和FROM是必须的关键字,其他关键字可以根据需要选择使用。

1. SELECTSELECT关键字用于指定要查询哪些列。

可以使用*来表示所有列,也可以指定具体的列名。

2. FROMFROM关键字用于指定要从哪个表中查询数据。

3. WHEREWHERE关键字用于指定查询条件。

可以使用比较运算符(如=、>、<等)和逻辑运算符(如AND、OR等)来组合多个条件。

4. GROUP BYGROUP BY关键字用于将结果按照某些列进行分组,并对每个分组计算聚合函数(如SUM、AVG等)。

5. HAVINGHAVING关键字与GROUP BY一起使用,用于筛选聚合函数计算结果满足某些条件的分组。

6. ORDER BYORDER BY关键字用于将结果按照某些列进行排序。

默认情况下按照升序排序,可以使用DESC关键字来改变排序方向。

三、示例1. 查询所有列SELECT * FROM table_name;2. 查询指定列SELECT column1, column2 FROM table_name;3. 查询符合条件的数据SELECT * FROM table_name WHERE column1 > 10 ANDcolumn2 = 'abc';4. 分组计算聚合函数SELECT column1, SUM(column2) FROM table_name GROUP BY column1;5. 筛选分组结果SELECT column1, SUM(column2) FROM table_name GROUP BY column1 HAVING SUM(column2) > 100;6. 按照某些列排序SELECT * FROM table_name ORDER BY column1 DESC, column2 ASC;四、高级语法1. JOINJOIN关键字用于将两个或多个表中的数据进行关联查询。

SQLServer与MySql区别(关键字和语法)

SQLServer与MySql区别(关键字和语法)

SQL Server 和MySql 语法和关键字的区别——用于SQLServer到MySql的转换(1)mysql的ifnull()函数对应sql的isnull()函数;(2)mysql的存储过程中变量的定义去掉@;(3)mysql的每句结束要用";"(4)SQLServer存储过程的AS在MySql中需要用begin .....end替换(5)字符串连接用concat()函数;如SQLServer: Temp=’select * from ’+’tablename’+…+…MySql:Temp=concat(’select * from’, ’tablecname’,…,…)(6)mysql的uuid()对应sql的GUID();(7)MySql的out对应SQLServer的output,且mysql 的out要放在变量的前面,SQLServer的output放在变量后面MySql out,in,inout的区别——MySQL 存储过程“in”参数:跟C 语言的函数参数的值传递类似,MySQL 存储过程内部可能会修改此参数,但对in 类型参数的修改,对调用者(caller)来说是不可见的(not visible)。

MySQL 存储过程“out”参数:从存储过程内部传值给调用者。

在存储过程内部,该参数初始值为null,无论调用者是否给存储过程参数设置值。

MySQL 存储过程inout 参数跟out 类似,都可以从存储过程内部传值给调用者。

不同的是:调用者还可以通过inout 参数传递值给存储过程。

(8)MySQL的if语句为if (条件) thenend if;或者If (条件) thenElseEnd if或者If(条件)thenElseif (注意不能写成Else if )Elseif…End if(9)Mysql的Execute对应SqlServer的exec;(注意:必须像下面这样调用)Set @cnt=’select * from 表名’;Prepare str from @cnt;Execute str;(10)MySql存储过程调用其他存储过程用callCall函数名(即SQLServer的存储过程名)(’参数1’,’参数2’,……)(11) mysql的日期○1获得当前日期函数:curdate(),current_date()○2获得当前时间函数:curtime();○3获得当前日期+时间:now();○4MySQL dayof... 函数:dayofweek(), dayofmonth(), dayofyear()分别返回日期参数,在一周、一月、一年中的位置。

sql跨数据库select表语法

sql跨数据库select表语法

sql跨数据库select表语法SQL(Structured Query Language)是用于管理关系数据库系统的一种标准化语言。

在SQL中,可以使用SELECT语句来查询数据库中的数据。

而跨数据库查询是指在不同的数据库中执行SELECT 语句来获取数据。

跨数据库查询通常用于需要在多个数据库之间进行数据交互和整合的场景。

例如,在一个企业中,不同的部门可能使用不同的数据库系统来存储和管理数据。

而当需要进行全局数据分析或者数据共享时,就需要通过跨数据库查询来获取所需的数据。

在进行跨数据库查询时,需要考虑不同数据库的语法差异和数据类型转换。

下面将介绍一些常见的跨数据库查询表语法。

1. MySQL:MySQL是一种常用的关系型数据库管理系统。

在MySQL中,跨数据库查询可以通过在SELECT语句中使用完全限定的表名来实现。

例如,要查询另一个数据库中的表,可以使用以下语法:```SELECT * FROM database_name.table_name;```其中,database_name是要查询的数据库名称,table_name是要查询的表名称。

2. Oracle:Oracle是一种广泛使用的商业关系型数据库管理系统。

在Oracle中,可以使用数据库链接(database link)来进行跨数据库查询。

首先需要在目标数据库中创建一个数据库链接,然后在查询语句中使用该链接来引用外部数据库中的表。

以下是一个示例:```SELECT * FROM table_name@database_link_name;```其中,table_name是要查询的表名称,database_link_name是目标数据库中创建的数据库链接名称。

3. SQL Server:SQL Server是微软开发的关系型数据库管理系统。

在SQL Server中,可以使用三部分名称(three-part name)来进行跨数据库查询。

MySQL与MsSQL的区别

MySQL与MsSQL的区别

MySQL与MsSQL的区别⼚商和操作系统MsSQL是微软的SQL Server只能⽤在Windows操作系统上,MySQL是MySQL AB公司开发⽀持多平台MySQL⽀持的数据量较⼩,适合于⼩中型⽹站MySQL⽐较轻量,重在Windows系统的安装就可以看出来,mysql的⽂件⼤⼩只有⼀百多M,MsSQL更消耗CPU和内存的资源数据类型mysql⽀持enum,和set类型,sql server不⽀持mysql不⽀持nchar,nvarchar,ntext类型它表⽰存储的是Unicode数据类型的字符。

我们知道字符中,英⽂字符只需要⼀个字节存储就⾜够了,但汉字众多,需要两个字节存储,英⽂与汉字同时存在时容易造成混乱,Unicode字符集就是为了解决字符集这种不兼容的问题⽽产⽣的,它所有的字符都⽤两个字节表⽰,即英⽂字符也是⽤两个字节表⽰。

带来⽅便的同时会在存储英⽂的时候造成数量上的损耗如果含有中⽂字符,⽤nchar/nvarchar,如果纯英⽂和数字,⽤char/varchar,在mysql中char,varchar被默认为了nchar,nvarcharmssql⽀持货币数据类型(money、smallmoney),mysql不⽀持money与smallmoney都是保留四位⼩数,只是存储的位数不⼀样mysql的递增语句是AUTO_INCREMENT,⽽mssql是identity(1,1)create table tb(id int identity(1,1) primary key )mysql⽀持⽆符号型的整数,那么⽐不⽀持⽆符号型的mssql就能多出⼀倍的最⼤数存储识别符MySQL的识别符是`MsSQL的识别符是[]SELECT `PASSWORD`FROM login时间MsSQL⽀持getdate()⽅法获取当前时间⽇期SELECT getdate()MySQL⾥⾯可以分⽇期类型和时间类型,获取当前⽇期是cur_date(),当前完整时间是 now()函数SELECT NOW(),CURDATE(),CURTIME()NOW() CURDATE() CURTIME()------------------- ---------- -----------2020-11-1416:59:102020-11-1416:59:10存储引擎mysql在创建表时要为每个表指定⼀个存储引擎类型,⽽mssql只⽀持⼀种存储引擎MySQL⽀持的语句MySQL⽀持replace into语句⾸先尝试插⼊数据到表中,如果发现表中已经有此⾏数据(根据主键或者唯⼀索引判断)则先删除此⾏数据,然后插⼊新的数据。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

• MYSQL
date_add(date,interval expression type) 增加一小时 date_add(Now(),interval 1 hour) 增加一天 date_add(Now(),interval 1 day) 增加一年 date_add(Now(),interval 1 year) 更多interval参数去网上搜索
函数差异
• MSSQL
datepart(interval,date) datename(interval,date) interval参数值
yy yyyy m mm dy y qq q wk ww dw w d hh h mi n ss s mcs 取得年份 月数 一年中的第几天 一年中的第几季度 一年中的第几周 一周中的第几天 日 时 分 秒 微秒
MSSQL与MYSQL
• 查询差异 • 数据更新差异 • 常用函数差异
查询差异-取指定记录数
• MSSQL 使用TOP命令:
select top 10 * from A
• MYSQL 使用limit命令:
select * from A limit 10; //查询前10条
select * from A limit 3,3; //查第3至6条 select * from A limit 4,10; //查询第4至14条
函数差异--• MSSQL
select substring(string,start) select substring(string,start,length)
截取字符串
• MYSQL
select substr(string,start) select substr(string,start,length) select substring_index('abc:efg: hij',':',2) 截取字符串第二个冒号之前的字符 串 如果count为正数,取左边值 如果count为负数,取右边值
---插入数据
• MYSQL
insert into A(A1,A2)values ('aa1','aa2'),('bb1','bb2')
函数差异
• MSSQL
取当月第一天的时间: select dateadd(dd,day(getdate())+1,getdate()) 取当月最后一天的时间: select dateadd(dd,day(dateadd(m,1,getdate())) ,dateadd(m,1,getdate()))
---日期指定内容
• MYSQL
dayofyear(date) 一年中的第几天 dayofmonth(date) 一月中的第几天 dayofweek(date) 一星期中的第几天 weekofyear(date) 一年中的第几周 dayname(date) 星期几(英文结果) monthname(date) 月份 year(date) 年份 weekday(date) 星期几(数字结果) week(date) 一年中的第几周 hour(time) 小时 minute(time) 分钟 second(time) 秒数
• MYSQL

A2 b b2 yy
A3 b b3 zz
在表A中存在,但在表B中不存在的结果
查询差异---并操作
共同点:使用Union查询
函数差异-字符串长度
• MSSQL
select Len('abcdefg') 长度为7 select len('Game游戏&h('abcdefg') 长度为7 select length('Game游戏') 长度为8 一个中文字符长度为2 select char_length('Game游戏') 长度为6 一个中文字符为1
---月的最后一天
• MYSQL
last_day(date)
函数差异
• MSSQL
convert(datetype,date,style) 如: convert(varchar(12),getdate(),120) convert(varchar(8),getdate(),112)
---日期转换函数
函数差异
• MSSQL
去左边空格 select LTrim(' abc') 去右边空格 select RTrim('abc ')
---去除空格或字符
• MYSQL
去左边空格 select LTrim(' abc') 去右边空格 select RTrim('abc ') 去左右两边空格 select Trim(' abc ') 去左边字符 select LTrim(' .abc','.') 去右边字符 select RTrim('abc. ','.')
函数差异
• MSSQL
ISNULL(expr1,expr2) 如果expr1为空,则返回expr2
---空值的判断
• MYSQL
IFNULL(expr1,expr2) 如果expr1为空,则返回expr2
ISNULL(expr1) 如果为空,则返回0 如果不为空,则返回1
函数差异
• MSSQL
datediff(d,starttime,endtime)
• MYSQL
date_format(date,fmt) 如: date_format(Now(),'%y%m%d') 更多fmt参数去网上搜索 例如: mysql> select date_format(now(),'%Y-%m-%d
%h:%m:%s');
更多style参数去网上搜索
+----------------------------------------+ | date_format(now(),'%Y-%m-%d %h:%m:%s') | +----------------------------------------+ | 2016-01-20 03:01:42 | +----------------------------------------+ 1 row in set (0.00 sec)
A1 a a1 xx A2 a a2 yy A3 a a3 zz A1 b b1 xx
• MYSQL

A2 b b2 yy
A3 b b3 zz
xx
yy
zz
查询差异-差操作
• MSSQL
select A1,A2,A3 from A MINUS select B1,B2,B3 from B
A1 a a1 xx A2 a a2 yy A3 a a3 zz a a1 a a2 A1 b b1 xx a a3
---插入数据
• MYSQL
insert into A(A1,A2)values ('aa1','aa2'),('bb1','bb2')
更新差异
• MSSQL
insert into A (A1,A2)values('aa1','aa2') insert into A (A1,A2)values('bb1','bb2')
查询差异-使用别名分组
• MSSQL
select A1 as Lvl from A group by A1
• MYSQL
select A1 as Lvl from A group by Lvl;
查询差异-交操作
• MSSQL
select A1,A2,A3 from A intersect select B1,B2,B3 from B
• MSSQL
当前时间: select getdate()
---取得时间
• MYSQL 当前时间(YYYY-MM-DD HH:MM:SS): select now(),sysdate(); 当前日期(YYYY-MM-DD): select current_date() 当前时间(HH:MM:SS) select current_time()
---月份的差异
• MYSQL
TIMESTAMPDIFF(SECOND,starttime,endtim e) 求月份差异 months_between(system,add_month(syste m,-1))
更新差异
• MSSQL
insert into A (A1,A2)values('aa1','aa2') insert into A (A1,A2)values('bb1','bb2')
函数差异
• MSSQL
dateadd(datepart,number,date) 增加一小时 dateadd(HH,1,getdate()) 增加一天 dateadd(DD,1,getdate()) 增加一年 dateadd(YY,1,getdate()) 更多datepart参数去网上搜索
---日期时间加减运算
---取指定字符位置
• MYSQL
返回子串substring在指定字符串 string中第一次出现的位置 instr(string,substring) position(substring in string) instr('sql','microsoft sql server') 结果:11
相关文档
最新文档