1. 程式人生 > 實用技巧 >sql server 與 mysql 中常用的SQL語句區別

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