Fork me on GitHub

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
posted @ 2021-11-21 12:39  Lencamo  阅读(946)  评论(0编辑  收藏  举报