SQL server与MySQL语法的区别
SQL server与MySQ虽然同样是基于SQL语法的,但它们之间的差异也是不可忽略的。
本博文缘由:
在学习《数据库系统概论》里面使用的为SQLsever语法,与最先接触的MySQL部分语法有些许不同。
下面是我在做数据库习题与到的一些差异。
1、limit语句
mysql中
SELECT age
FROM person
ORDER BY age ASC
LIMIT 3
SQL server中
SELECT TOP 3 WITH TIES *
FROM person
ORDER BY age ASC
#应用
-- 从 "Persons" 表中选取 50% 的记录
SELECT TOP 50 PERCENT * FROM Persons
2、DATEDIFF() 函数
mysql中
#DATEDIFF() 函数返回两个日期之间的天数
-- DATEDIFF(date1,date2)
SELECT DATEDIFF('2008-12-30','2008-12-29') AS DiffDate
SQL 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) 返回日期/时间的单独✨datepart
3、CONVERT(data_type(length),data_to_be_converted,style) 用不同的格式🎉style显示日期/时间
4、DATEDIFF(datepart,startdate,enddate) 返回两个日期之间的时间
5、DATEADD() 在日期中添加或减去指定的时间间隔
4、百分比约束💖
例: 查询课程表中的前30%的记录。
SQL sever中
SELECT TOP 30 PERCENT *
FROM C;
mysql中
#方式一
/*
1、利用 变量rownum创建一个空表
2、利用 @rownum:=@rownum+1读取行数
*/
SELECT C.*
FROM (SELECT @rownum:=0) AS r inner join C
ON (@rownum:=@rownum+1)<=(
select round(count(*)*0.3)
from C
);
#方式二
-- 先计算
SELECT ROUND(COUNT(*)*0.3) FROM C
-- 后带入
SELECT *
FROM C
LIMIT 0,上面的计算结果;
5、like语句
例:查询所有张,王,李,赵姓的教师信息
SQL server中
SELECT *
FROM T
WHERE name LIKE ('[张王李赵]%');
mysql中
#方式一
SELECT *
FROM T
WHERE LEFT(name,1) IN('张','王','李','赵');
#方式二
SELECT *
FROM T
WHERE `name` LIKE '李%' OR `name` LIKE '张%' OR `name` LIKE '王%' OR`name` LIKE '赵%';
拓展:外键约束
mysql中
/*
* 外键字段必须与对应表的主键字段类型、长度、字符集、引擎一致
* 外键字段本身要求是一个索引(创建外键会自动生成一个索引)
*/
#创建专业表和学生表,学生表中的专业id指向专业表id
-- [constraint`外键名`] foreign key(当前表字段名) references 外部表(主键字段)
create table t_1(
id int primary key auto_increment,
name varchar(50) not null unique
)charset utf8;
create table t_49(
id int primary key auto_increment,
name varchar(50) not null,
c_id int,
foreign key(c_id) references t_47(id)
/*
外键可以不指定名字,系统会自动生成
constraint `c_id` foreign key(c_id) references t_47(id)
*/
)charset utf8;
SQL server中
foreign key(Cid) references C(Cid) on update cascade on delete cascade