SQLServerとMySQLの違いの要約(1)


1.TOP句
  • SQLServerでTOP文で返すレコード数を規定する
  • .
    select top number|percent column_names from table
    
    //  
    select top * from [table1]
    
  • MySQLでLIMIT文を使用してこの機能を実現する
  • select column_names from table_name limit number
    
    //  
    select * from [table1] limit 1
    

    2.FULL OUTER JOINキーワード
  • MySQLではFULL OUTER JOINキーワード
  • はサポートされていません
  • SQLServerでFULL OUTER JOINキーワード
  • を使用可能
    select column_names from table1
    full outer join table2
    on table1.column_name = table2.column)name
    
    //  
    SELECT Websites.name, access_log.count, access_log.date
    FROM Websites
    FULL OUTER JOIN access_log
    ON Websites.id=access_log.site_id
    ORDER BY access_log.count DESC;
    

    3.SELECT INTO文
  • SQLServer SELECT INTO文により、あるテーブルから別の新しいテーブルへの情報のコピー
  • を実現する
    select column_names into newtable [IN externaldb] from table1
    
    //  
    select * into WebsitesBackup2016 from Websites
    
    
  • MySQLはSELECT INTO文をサポートしていませんが、INSERT INTOをサポートしています...SELECT文は、1つのテーブルから別の既存のテーブルへのデータのコピー
  • を実現する.
    insert into table2 (colunm_names) 
    select colunm_names from table1
    
    //  
    INSERT INTO Websites (name, country)
    SELECT app_name, country FROM apps
    WHERE id=1;
    

    4.UNIQUE制約
  • MySQLとSQLServerでは、UNIQUE制約の作成と取り消しに使用する文は異なりますが、ALTER TABLEでは同じ
  • の構文です.
  • 新規UNIQUE制約
  • // MySQL
    CREATE TABLE Persons
    (
    P_Id int NOT NULL,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Address varchar(255),
    City varchar(255),
    UNIQUE (P_Id)
    )
    
    //SQLserver
    CREATE TABLE Persons
    (
    P_Id int NOT NULL UNIQUE,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Address varchar(255),
    City varchar(255)
    )
    
    //  :    UNIQUE  ,         
    //MySQL & SQLServer
    CREATE TABLE Persons
    (
    P_Id int NOT NULL,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Address varchar(255),
    City varchar(255),
    CONSTRAINT uc_PersonID UNIQUE (P_Id,LastName)
    )
    
  • UNIQUE制約を取り消す
  • //MySQL
    ALTER TABLE Persons
    DROP INDEX uc_PersonID
    
    //SQLServer
    ALTER TABLE Persons
    DROP CONSTRAINT uc_PersonID
    

    5.PRIMARY KEY制約
  • MySQLとSQLServerでは、PRIMARY KEY制約の作成と取り消しに使用する文が
  • と異なります.
  • PRIMARY KEY制約
  • を作成する
    //MySQL
    CREATE TABLE Persons
    (
    P_Id int NOT NULL,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Address varchar(255),
    City varchar(255),
    PRIMARY KEY (P_Id)
    )
    
    //SQLServer
    CREATE TABLE Persons
    (
    P_Id int NOT NULL PRIMARY KEY,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Address varchar(255),
    City varchar(255)
    )
    
    //  :    PRIMARY KEY SQLServer MySQL    
    CREATE TABLE Persons
    (
    P_Id int NOT NULL,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Address varchar(255),
    City varchar(255),
    CONSTRAINT pk_PersonID PRIMARY KEY (P_Id,LastName)
    )
    
  • PRIMARY KEY制約を取り消す
  • //MySQL
    ALTER TABLE Persons
    DROP PRIMARY KEY
    
    //SQLServer
    ALTER TABLE Persons
    DROP CONSTRAINT pk_PersonID
    

    6.FOREGN KEY制約
  • MySQLとSQLServerでは、FOREGN KEY制約の作成と取り消しに使用される文が
  • と異なります.
  • FOREGN KEY
  • を作成する
    //MySQL
    CREATE TABLE Orders
    (
    O_Id int NOT NULL,
    OrderNo int NOT NULL,
    P_Id int,
    PRIMARY KEY (O_Id),
    FOREIGN KEY (P_Id) REFERENCES Persons(P_Id)
    )
    
    //SQLServer
    CREATE TABLE Orders
    (
    O_Id int NOT NULL PRIMARY KEY,
    OrderNo int NOT NULL,
    P_Id int FOREIGN KEY REFERENCES Persons(P_Id)
    )
    
    //  :    FOREIGN KEY          
    CREATE TABLE Orders
    (
    O_Id int NOT NULL,
    OrderNo int NOT NULL,
    P_Id int,
    PRIMARY KEY (O_Id),
    CONSTRAINT fk_PerOrders FOREIGN KEY (P_Id)
    REFERENCES Persons(P_Id)
    )
    
  • FOREGN
  • を取り消す
    //MySQL
    ALTER TABLE Orders
    DROP FOREIGN KEY fk_PerOrders
    
    //SQLServer
    ALTER TABLE Orders
    DROP CONSTRAINT fk_PerOrders
    

    7.CHECK制約
  • MySQLとSQLServerは、CHECK制約の作成と取り消しに使用する文が異なる
  • CKECK制約
  • を作成する.
    //MySQL
    CREATE TABLE Persons
    (
    P_Id int NOT NULL,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Address varchar(255),
    City varchar(255),
    CHECK (P_Id>0)
    )
    
    //SQLServer
    CREATE TABLE Persons
    (
    P_Id int NOT NULL CHECK (P_Id>0),
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Address varchar(255),
    City varchar(255)
    )
    
    //  :    CKECK       CHECK  ,       
    CREATE TABLE Persons
    (
    P_Id int NOT NULL,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Address varchar(255),
    City varchar(255),
    CONSTRAINT chk_Person CHECK (P_Id>0 AND City='Sandnes')
    )
    
  • CHECK制約を取り消す
  • //MySQL
    ALTER TABLE Persons
    DROP CHECK chk_Person
    
    //SQLServer
    ALTER TABLE Persons
    DROP CONSTRAINT chk_Person
    

    8.DEFAULT制約
  • SQLServerとMySQLは、ALTER TABLEとDEFAULT制約の取り消し時に文が異なる
  • ALTERTABLE時のDEFAULT制約
  • //MySQL
    ALTER TABLE Persons
    ALTER City SET DEFAULT 'SANDNES'
    
    //SQLServer
    ALTER TABLE Persons
    ADD CONSTRAINT ab_c DEFAULT 'SANDNES' for City
    
  • DEFAULT制約を取り消す
  • //MySQL
    ALTER TABLE Persons
    ALTER City DROP DEFAULT
    
    //SQLServer
    ALTER TABLE Persons
    ALTER COLUMN City DROP DEFAULT
    

    9.INDEXの取り消し
  • SQLServerとMySQLでインデックス操作を取り消すときに使用される文が異なる
  • //SQLServer
    DROP INDEX table_name.index_name
    
    //MySQL
    ALTER TABLE table_name DROP INDEX index_name
    

    10.ALTER TABLE文
  • ALTER TABLEでテーブル内のカラムのデータ型を変更した場合、SQLServerとMySQL文が異なる
  • //SQLServer
    ALTER TABLE table_name
    ALTER COLUMN column_name datatype
    
    //MySQL
    ALTER TABLE table_name
    MODIFY COLUMN column_name datatype
    

    11.IDENTITYキーワード
  • SQLServer IDENTITYキーワードを使用してauto-incrementタスク
  • を実現
    //        auto-increment  
    //       ,IDENTITY       1,        1
    //  :    "ID"    10       5,   identity    IDENTITY(10,5)
    CREATE TABLE Persons
    (
    ID int IDENTITY(1,1) PRIMARY KEY,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Address varchar(255),
    City varchar(255)
    )
    
  • MySQL AUTO INCERMENTフィールドを使用してauto-incerment
  • を実現
    //        auto-increment  
    CREATE TABLE Persons
    (
    ID int NOT NULL AUTO_INCREMENT,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Address varchar(255),
    City varchar(255),
    PRIMARY KEY (ID)
    )
    
    //  AUTO_INCREMENT          
    ALTER TABLE Persons AUTO_INCREMENT=100
    

    12.DATE関数
  • MySQL DATE関数
  • 関数#カンスウ#
    説明
    NOW()
    現在の日付と時刻を返します.
    CURDATE()
    現在の日付を返す
    CURTIME()
    現在の時刻を返す
    DATE()
    日付または日付/時刻式の日付部分の抽出
    EXTRACT()
    日付/時刻の個別のセクションを返します.
    DATE_ADD()
    指定した間隔を日付に追加
    DATE_SUB()
    日付から指定した間隔を減算
    DATEDIFF()
    2つの日付の間の日数を返します.
    DATE_FORMATE()
    時間/日付を別の形式で表示
  • SQLServer DATE関数
  • 関数#カンスウ#
    説明
    DFETDATE()
    現在の日付と時刻を返します.
    DATEPART
    日付/時刻の個別のセクションを返します.
    DATEADD()
    指定した間隔を日付に追加または減算
    DATEDIFF()
    2つの日付の間の時間を返します.
    CONVERT()
    日付/時刻を別の形式で表示
    13.ISNULL関数
  • SQLServerのISNULL関数は、NULL値
  • をどのように処理するかを規定するために使用される.
    //  
    SELECT ProductName,UnitPrice*(UnitsInStock+ISNULL(UnitsOnOrder,0))
    FROM Products
    
  • MySQLではIFNULL関数またはCOALESCE関数を使用して、同じ効果を達成しています.
    //  
    SELECT ProductName,UnitPrice*(UnitsInStock+IFNULL(UnitsOnOrder,0))
    FROM Products
    
    SELECT ProductName,UnitPrice*(UnitsInStock+COALESCE(UnitsOnOrder,0))
    FROM Products
    

    14.データ型
  • MySQLとSQLServerのデータ型には一定の違いがあります.ここには詳しくは記載されていません.関連するWebサイトやマニュアルを参照して
  • を参照してください.
    PS:MySQLとSQLServerは個別関数の使用にも一定の違いがあり、次のブログでまとめます