sql server 與 mysql 中常用的SQL語句區別
sql server 與 mysql 的區別
由於博主之前學過mysql,目前在學習SQL server,原來以為這兩個資料庫之間的sql語句應該不會有太大區別。但是學sql server(用的版本是2012) 學久之後,發現與mysql 還是有很多不同的地方,有些時候寫起來很不適應,所以就打算寫這篇部落格來記錄一下這兩個資料庫的sql語句的區別,以備方便將來查詢。(每隔一段時間會更新)
1. 首先說一下sql語句結束標誌
mysql以;
結束一條SQL語句;SQL server 以;
或go
或不寫結束都可以。不過建議寫sql server的時候以go
結束,因為sql server很多語句要以等一個語句結束後才能寫下一個語句,不然會報批處理錯誤
2. 查看錶結構數量等
mysql 語句
-- 檢視系統內所有資料庫
show databases;
-- 查詢資料庫內所有表
show tables;
-- 顯示錶結構
desc 表名;
sql server語句
-- 檢視系統內所有資料庫
SELECT name, database_id, create_date FROM sys.databases ;
-- 查詢資料庫內所有表
select * from sysobjects where xtype= 'U' ;
-- 顯示錶結構
sp_help/sp_columns 表名;
相比來說,mysql 的更為簡潔。
3、查詢前幾條記錄
查詢前10條記錄:
mysql 語句
select * from student limit 10;
sql server 語句
select top 10 * from student ;
4、獲取當前時間
MySQL寫法:now()
SQLServer寫法:getdate()
5、從資料庫定位到某張表
mysql寫法:庫名.表名
select password from Info.users where userName='boss'
Sqlserver寫法:庫名.dbo.表名 ;或者:庫名..表名 (注:中間使用兩個點)
select password from Info.dbo.users where userName='boss'
或者
select password from Info..users where userName='boss'
6、強制不使用快取查詢
查詢temp表
mysql寫法:
select SQL_NO_CACHE * from temp
參考:https://www.cnblogs.com/eyesfree/p/7232559.html
Sqlserver的沒有,它只快取sql的執行計劃,不會快取結果。
參考:https://www.cnblogs.com/jeffwongishandsome/p/3235177.html
https://codeday.me/bug/20190701/1344787.html
6、查詢一個數據庫所有的表 和表下的所有列資訊
MySQL寫法:
寫法1(查詢選定資料庫下所有的表):
select table_name tableName, engine, table_comment tableComment, create_time createTime from information_schema.tables where table_schema = (select database())
寫法2(查詢指定資料庫名下所有的表):
select table_name tableName, engine, table_comment tableComment, create_time createTime from information_schema.tables where table_schema = 'db_name'
其中的db_name就是要查詢的資料庫的名
查詢表下的所有列資訊:
select column_name columnName, data_type dataType, column_comment columnComment, column_key columnKey, extra from information_schema.columns
where table_name = '表名' and table_schema = '資料庫名' order by ordinal_position
參考:https://blog.csdn.net/huangbaokang/article/details/78049629
SQL Server寫法:
查詢資料庫中的所有表:
select name from sysobjects where xtype='u'
查詢指定表的所有列名
select name from syscolumns where id=(select max(id) from sysobjects where xtype='u' and name='表名')
參考:https://blog.csdn.net/ANXIN997483092/article/details/78468081
7.快速查詢一個表的行數
Mysql寫法:
SELECT TABLE_NAME, PARTITION_NAME, TABLE_ROWS, AVG_ROW_LENGTH, DATA_LENGTH FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_NAME='table_name_t' ;
其中table_name_t
是要查詢下表名.
這裡是通過 INFORMATION_SCHEMA
資料庫中的資訊來得到行數,這樣會快一點,但是可能會不太準確。
參考:https://blog.csdn.net/jiaxiaolei19871112/article/details/7161799
SqlServer 寫法:
select schema_name(t.schema_id) as [Schema], t.name as TableName,i.rows as [RowCount]
from sys.tables as t, sysindexes as i
where t.object_id = i.id and i.indid <=1
這種寫法可以列出所有表的行數,可以在該查詢的基礎之上去再去過濾器想要的表名
參考:https://www.cnblogs.com/kenyang/archive/2013/04/09/3011447.html