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