データベースoracleとmysqlの構文の違いは何ですか
違い: 1. MySQL には Number 型がありませんが、Oracle にはあります; 2. MySQL の Date 型は日付のみを表し、Oracle の Date 型は日付と時刻を表します; 3. 長さを取得するには文字列の場合、Oracle は length() を使用し、MySQL は char_length() を使用します。
このチュートリアルの動作環境: Windows7 システム、mysql8 バージョン、Dell G3 コンピューター。
最近、プロジェクトを移行し、データベースを Oracle から MySQL に変更する必要があります。両者の構文は一部異なるため、Oracle では使用できて MySQL では使用できない関数/型を、MySQL で使用できる関数/型に変更する必要があります。
1. データ型
1. 数値型
には数値型がありません。 MySQL には int/Decimal 型があり、Oracle の Number(5,1) は MySQL の decimal(5,1) に対応し、Number(5) は int(5) に対応します。
MySQL には多くの数値型があり、tinyint、smallint、mediumint、bigint およびその他の型を含む、より詳細なカテゴリに分類されます
2. Varchar2(n) 型
MySQL の Oracle Varchar2(n) 型に対応する代替型は、varchar(n) 型です。
3. 日付型
MySQL の日付と時刻の型には、Date、Time、Datetime などの型が含まれます。MySQL の Date 型は、日付 (年) のみを表します。 -month-day )、Time 型は時刻 (時:分:秒) のみを表しますが、Datetime 型は日付と時刻 (年-月-日 時:分:秒) を表します。Oracle の Date 型は、 MySQL の日時型。
2. 関数
1. length(str) 関数
Oracle での長さ ( str) は文字列の長さを取得する関数で、MySQL での対応する関数は char_length(str) です。
2. sys_guid() 関数
Oracle は sys_guid() 関数を使用してランダム シーケンスを生成でき、MySQL は UUID() を通じてランダム シーケンスを生成できます。
3. 時刻フォーマット関数
時刻を文字列時刻に変換します。 MySQL date_format(NOW(),'%Y-%m-%d') Oracle の to_char に対応します。 (sysdate, 'YYYY-MM-DD');
文字列時刻を時刻型に変換する MySQL str_to_date('2019-01-01','%Y-% m-%d') は to_date( '2019-01-01', 'YYYY-MM-DD');時、分、秒の関数変換を含む Oracle の
: DATE_FORMAT(NOW(),'% Y-%m-%d %H:%i:%s')、str_to_date('2019-01-01','%Y-%m-%d %H:%i:%s')。
4. 条件関数 (nvl(), nvl2(), decode())
nvl(tab.columnName, 0): tab の値の場合。 columnName が空の場合、戻り値は 0 になり、それ以外の場合は tab.columnName になります。対応する MySQL 関数は ifnull(tab.columnName, 0) です。
nvl2(expr1,expr2,expr3): expr1 が null でない場合は expr2 を返し、それ以外の場合は expr3 を返します。対応する MySQL 関数は if(expr1,expr2,expr3) です。
DECODE(value, val1, val2, val3): value が val1 と等しい場合は val2 を返し、それ以外の場合は val3 を返します。MySQL は IF 関数で表すことができます: if (value=val1, val2, val3) ;
DECODE(value, if1, val1, if2,val2,...,ifn, valn, val): value が if1 と等しい場合は val1 を返し、value が if2 と等しい場合は value2 を返します。 .. value が ifn に等しい場合は valn を返し、それ以外の場合は val を返します。MySQL は、case when then else end;l、つまり、case when value=if1 then val1 when value=if2 then val2 を通じてこの種の判断を判断できます。 ,,when value=ifn then valn else val end;
5. trunc() function
TRUNC(12.123): 整数 (12) を返します; MySQL に対応function: truncate(12.123, 0) ;
TRUNC(12.123, 2): 戻り値は 2 を 10 進数として保持します (12.12); MySQL 対応関数: truncate(12.123, 2);
TRUNC(SYSDATE): 戻り値は (2019-07-26 00:00:00); MySQL は Cast(now() as datetime) に対応します: 戻り値は (2019-07-26 14:11:38) );
MySQL キャスト関数の構文は次のとおりです: CAST (xxx AS タイプ) (使用可能なタイプは次のとおりです: バイナリ、バイナリ接頭辞の効果: BINARY; 文字タイプ、パラメータ: CHAR(); 日付: DATE; 時刻: TIME; 日付と時刻の型: DATETIME; 浮動小数点数: DECIMAL; 整数: SIGNED; 符号なし整数: UNSIGNED)
6.to_char() to_number()
to_char(123): 数値を Convert 123 to string 123; MySQL の対応する関数は CAST(123 AS CHAR(3));
to_number('123'): を変換します。文字列番号 123 を数値型に変換します。MySQL の対応する関数は Cast('123' as SIGNED);
7.sysdate 現在の時刻
sysdate: 現在の日付と時刻を返します。MySQL の対応する関数は now();
3. その他
##1 . 引用符
MySQL は二重引用符と一重引用符を認識できますが、Oracle は一重引用符のみを認識します。
2. 文字列の連結 ||
Oracle は '||' を使用して文字列を接続できますが、MySQL は '||' 接続をサポートしません。MySQL では ' ||' で文字列を連結します。 concat() 関数は文字列を連結します。
Oracle の a.studentname||'['||a.studentno||']' は、MySQL の concat(a.studentname, '[', a.studentno, ']')
3. ROWNUM
Oracle は rownum を通じて最初の n レコードを取得でき、MySQL はlimit を通じて最初の n レコードを取得できますが、この 2 つの書き込み方法は少し異なります。 Oracle では、Rownum は where 条件の一部として使用されますが、MySQL では、limit は where 条件の一部ではありません。
-- rownum语法如下: SELECT * FROM XJ_STUDENT WHERE ROWNUM = 1; -- 查询第一条数据 SELECT * FROM XJ_STUDENT WHERE ROWNUM <= 10; -- 获取前10条数据 -- 但rownum不支持查询后几条或第n(n>1)条数据,例如以下sql是不支持的 SELECT * FROM XJ_STUDENT WHERE ROWNUM > 2; SELECT * FROM XJ_STUDENT WHERE ROWNUM = 3; -- limit 语法如下: SELECT * from fw_department limit 3; -- 查询前3条数据 SELECT * from fw_department limit 2, 4; -- 从第2(序号从0开始)条开始,查4条记录
4. Null データの並べ替え (null が最初、null が最後)
-- null值排在最前 SELECT * FROM FW_DEPARTMENT A ORDER BY A.REMARK DESC NULLS FIRST -- null值排在最后 SELECT * FROM FW_DEPARTMENT A ORDER BY A.REMARK DESC NULLS LAST -- MySQL 可通过IF和ISNULL函数达到相同的效果 -- null值排在最后 select * from FW_DEPARTMENT A order by IF(ISNULL(A.REMARK),1,0),A.REMARK desc -- null值排在最前 select * from FW_DEPARTMENT A order by IF(ISNULL(A.REMARK),0,1),A.REMARK desc
5. テーブル (左/右) の関連付け ( )
Oracle の左結合と右結合は () を使用して実装できますが、MySQL では左結合、右結合およびその他のキーワードのみを使用できます。
-- Oracle 左关联 select * from taba, tabb where taba.id = tabb.id(+); -- Oracle 右关联 select * from taba, tabb where taba.id(+) = tabb.id; -- MySQL 左关联 select * from taba left join tabb on taba.id=tabb.id; -- MySQL 右关联 select * from taba right join tabb on taba.id=tabb.id;
6. 削除構文
MySQL の削除構文は Oracle ほどランダムではありません。たとえば、次の SQL は Oracle では実行できますが、Oracle では実行できません。 MySQL。
-- Oracle 可执行,但MySQL中不能执行 DELETE FROM FW_DEPARTMENT A WHERE A.DEPID = '111'; DELETE FW_DEPARTMENT WHERE DEPID = '111'; -- MySQL中删除语句格式如下: DELETE FROM FW_DEPARTMENT WHERE DEPID = '111';
7. 再帰クエリ (事前接続で開始)
MySQL はこの種の再帰クエリ (事前接続で開始) をサポートしていませんが、サポートすることはできます。自動的に実行される 実装する関数を定義します。
-- Oracle 递归查询 查询部门ID为‘1111’的所有子部门(包含自身) SELECT * FROM FW_DEPARTMENT START WITH DEPID='1111' CONNECT BY PRIOR DEPID = PARENTDEPID; -- Oracle 递归查询 查询部门ID为‘1111’的所有父部门(包含自身) SELECT * FROM FW_DEPARTMENT START WITH DEPID='1111' CONNECT BY PRIOR PARENTDEPID = DEPID; -- MySQL 先创建fun_getDepIDList函数,用于查询部门ID字符串 CREATE FUNCTION fun_getDepIDList(rootId VARCHAR(32)) RETURNS VARCHAR(6000) BEGIN DECLARE pTemp VARCHAR(6000); DECLARE cTemp VARCHAR(6000); SET pTemp='$'; SET cTemp=rootId; WHILE cTemp is not null DO set pTemp=CONCAT(pTemp,',',cTemp); SELECT GROUP_CONCAT(depid) INTO cTemp from fw_department WHERE FIND_IN_SET(PARENTDEPID,cTemp)>0; END WHILE; RETURN pTemp; END; -- 查询部门ID为‘1111’的所有子部门(包含自己) select * from fw_department where FIND_IN_SET(DEPID, fun_getDepIDList('1111')); -- 查询部门ID为‘1111’的所有父部门(包含自己) select * from fw_department where FIND_IN_SET('1111', fun_getDepIDList(DEPID));
8. merge into
MySQL は (merge into) をサポートしていませんが、提供されている replace into と重複キー更新で同様の機能を実現できます。
-- Oracle merge into (有则修改,无则新增) MERGE INTO TMPDEPTAB A USING (SELECT '1111' DEPID, '哈哈' DEPNAME FROM DUAL) B ON (A.DEPID = B.DEPID) WHEN MATCHED THEN UPDATE SET A.DEPNAME = B.DEPNAME WHEN NOT MATCHED THEN INSERT(DEPID, DEPNAME) VALUES(B.DEPID, B.DEPNAME); -- MySQL replace into (特点:1、先删后增; 2、插入/更新的表必须有主键或唯一索引; -- 3、未修改/新增的数据项,如果必填,则必须有默认值) -- 1、由于是先删后增,所以需要满足以下2个条件之一: -- 1.要么必填项有默认值; -- 2.要么插入/更新时为没有默认值的必填项赋值, 否则新增时会报错。 -- 2、表中需要有主键或唯一索引,否则下面语句如果执行多次,表中会出现重复数据。 replace into fw_department(DEPID,PARENTDEPID,DEPNO,DEPNAME) values('1111111', '1234','123', '哈哈'); -- MySQL on duplicate key update (特点:1、插入/更新的表必须有主键或唯一索引; -- 2、未修改/新增的数据项,如果必填,则必须有默认值) insert into fw_department(depid,parentdepid,depno,depname) select '1111111' depid, '123' parentdepid, 'e12' depno, '哈哈哈哈' depname from fw_department on duplicate key update parentdepid = values(parentdepid), depno=values(depno), depname=values(depname);
9. with
Oracle では with を使用して一時テーブルを作成できますが、MySQL では with をサポートしていません。対応する一時テーブルについて、MySQL は with を使用できます。括弧を使用して処理しますが、構築される一時テーブルには一時テーブル名を設定する必要があります。
-- Oracle with使用 WITH TMPTAB AS ( SELECT A.DEPID FROM FW_DEPARTMENT A ) SELECT DEPID FROM TMPTAB -- MySQL 构建临时表使用(此处必须给括号中的临时表设置表名) select b.depid from ( select depid from fw_department ) b
[関連する推奨事項: mysql ビデオ チュートリアル ]
以上がデータベースoracleとmysqlの構文の違いは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









MySQLはオープンソースのリレーショナルデータベース管理システムであり、主にデータを迅速かつ確実に保存および取得するために使用されます。その実用的な原則には、クライアントリクエスト、クエリ解像度、クエリの実行、返品結果が含まれます。使用法の例には、テーブルの作成、データの挿入とクエリ、および参加操作などの高度な機能が含まれます。一般的なエラーには、SQL構文、データ型、およびアクセス許可、および最適化の提案には、インデックスの使用、最適化されたクエリ、およびテーブルの分割が含まれます。

MySQLは、そのパフォーマンス、信頼性、使いやすさ、コミュニティサポートに選択されています。 1.MYSQLは、複数のデータ型と高度なクエリ操作をサポートし、効率的なデータストレージおよび検索機能を提供します。 2.クライアントサーバーアーキテクチャと複数のストレージエンジンを採用して、トランザクションとクエリの最適化をサポートします。 3.使いやすく、さまざまなオペレーティングシステムとプログラミング言語をサポートしています。 4.強力なコミュニティサポートを提供し、豊富なリソースとソリューションを提供します。

データベースとプログラミングにおけるMySQLの位置は非常に重要です。これは、さまざまなアプリケーションシナリオで広く使用されているオープンソースのリレーショナルデータベース管理システムです。 1)MySQLは、効率的なデータストレージ、組織、および検索機能を提供し、Web、モバイル、およびエンタープライズレベルのシステムをサポートします。 2)クライアントサーバーアーキテクチャを使用し、複数のストレージエンジンとインデックスの最適化をサポートします。 3)基本的な使用には、テーブルの作成とデータの挿入が含まれ、高度な使用法にはマルチテーブル結合と複雑なクエリが含まれます。 4)SQL構文エラーやパフォーマンスの問題などのよくある質問は、説明コマンドとスロークエリログを介してデバッグできます。 5)パフォーマンス最適化方法には、インデックスの合理的な使用、最適化されたクエリ、およびキャッシュの使用が含まれます。ベストプラクティスには、トランザクションと準備された星の使用が含まれます

SQLステートメントは、Oracleの動的SQLを使用して、ランタイム入力に基づいて作成および実行できます。手順には、次のものが含まれます。動的に生成されたSQLステートメントを保存するための空の文字列変数を準備します。 executeを即座に使用するか、ステートメントを準備して、動的なSQLステートメントをコンパイルおよび実行します。バインド変数を使用して、ユーザー入力またはその他の動的値を動的SQLに渡します。実行するか、実行するか、動的SQLステートメントを実行します。

Oracleでは、forループループは動的にカーソルを作成できます。手順は次のとおりです。1。カーソルタイプを定義します。 2。ループを作成します。 3.カーソルを動的に作成します。 4。カーソルを実行します。 5。カーソルを閉じます。例:カーソルをサイクルごとに作成して、上位10人の従業員の名前と給与を表示できます。

Apacheはデータベースに接続するには、次の手順が必要です。データベースドライバーをインストールします。 web.xmlファイルを構成して、接続プールを作成します。 JDBCデータソースを作成し、接続設定を指定します。 JDBC APIを使用して、接続の取得、ステートメントの作成、バインディングパラメーター、クエリまたは更新の実行、結果の処理など、Javaコードのデータベースにアクセスします。

Oracleのトリガーは、特定のイベント(挿入、更新、または削除)後に操作を自動的に実行するために使用されるストアドプロシージャです。これらは、データ検証、監査、データメンテナンスなど、さまざまなシナリオで使用されています。トリガーを作成するときは、トリガー名、アソシエーションテーブル、トリガーイベント、トリガー時間を指定する必要があります。トリガーには2種類のタイプがあります。操作前にトリガーが起動され、後のトリガーが操作後に起動されます。たとえば、挿入前のトリガーは、挿入された行の年齢列が負でないことを保証します。

Oracle Indexは、テーブル内のデータにポインターを保存することにより、データアクセスを加速し、クエリパフォーマンスを向上させる特別なデータ構造です。 Oracleは、Bツリーインデックス、ビットマップインデックス、関数インデックス、ハッシュインデックスなど、さまざまなインデックスタイプを提供します。インデックスは、特定の列の頻繁なフィルタリングまたは大きなテーブルへのアクセスを必要とするデータクエリに特に適していますが、インデックスの作成と維持には追加のスペースとオーバーヘッドが必要であり、大量のインデックスはクエリ効率を低下させる場合があります。
