ホームページ >データベース >mysql チュートリアル >MySQL の最も基本的な SQL 構文/ステートメント
DDL—データ定義言語 (作成、変更、削除、宣言)
DML—データ操作言語 (選択、削除、更新、挿入)
DCL—データ制御言語 (GRANT、REVOKE、COMMIT、ROLLBACK)
まず簡単に説明します基本的なステートメントの紹介:
1. 説明: データベースを作成します
DATABASE データベース名を作成します
2. 説明: データベースを削除します
データベース dbname を削除します
3. SQL サーバーをバックアップします
--- バックアップ データ用のデバイスを作成します
USE master
EXEC sp_addumpdevice 'disk', 'testBack', 'c:mssql7backupMyNwind_1.dat'
--- バックアップを開始
BACKUP DATABASE pubs TO testBack
4. 説明: 新しいテーブルを作成します
create table tabname(col1 type1) [not null ] [primary key],col2 type2 [not null],..)
既存のテーブルに基づいて新しいテーブルを作成します:
A: tab_old のようなテーブル tab_new を作成します (古いテーブルを使用して新しいテーブルを作成します)
B: tab_old 定義のみから table tab_new を作成し、col1,col2… を選択します
5. 説明: 新しいテーブルを削除します
テーブル tabname を削除します
6. 説明: 列を追加します
table tabname を変更して列の列の型を追加します
注:列は追加されますが、削除することはできません。 DB2 では、列の追加後にデータ型を変更することはできません。変更できるのは、varchar 型
の長さを増やすことだけです。
7. 手順: 主キーを追加: テーブルのタブ名を変更して主キーを追加 (列)
手順: 主キーを削除: テーブルのタブ名を変更して主キーを削除 (列)
8. 手順: インデックスを作成: [一意の] インデックス IDxname を作成タブ名 (col….)
インデックスの削除: インデックス idxname を削除します
注: インデックスを変更したい場合は、削除して再構築する必要があります。
9. 手順: ビューを作成します: select ステートメントとしてビュー viewname を作成します
ビューを削除します: ビュー viewname を削除します
10. 手順: いくつかの簡単な基本 SQL ステートメント
Select: select * from table1 where range
Insert: insert into table1(field1,field2) value(value1,value2)
削除: table1 where range から削除
Update: table1 を更新 set field1=value1 where range
Search: select * from table1 where field1 like '%value1%' ---like構文は非常に絶妙です。情報を確認してください。
Sort: select * from table1 order by field1,field2 [desc]
Total count: select count as totalcount from table1
Sum: select sum(field1) as sumvalue from table1
Average: select avg (field1) as avgvalue from table1
最大: table1 の maxvalue として max(field1) を選択
最小: table1 の minvalue として min(field1) を選択
11 説明: いくつかの高度なクエリ演算子
A: UNION 演算子
UNION 演算子は、他の 2 つの結果テーブル (TABLE1 と TABLE2 など) を結合し、テーブル内の重複行を削除することによって結果テーブルを導出します。 ALL を UNION とともに使用する (つまり、UNION ALL) 場合、重複行は削除されません。どちらの場合も、派生テーブルの各行は TABLE1 または TABLE2 から取得されます。
B: EXCEPT 演算子
EXCEPT 演算子は、TABLE1 にはあるが TABLE2 には含まれていないすべての行を含め、重複する行をすべて削除することによって
結果テーブルを導出します。 ALL を EXCEPT (EXCEPT ALL) とともに使用すると、重複行は削除されません。
C: INTERSECT 演算子
INTERSECT 演算子は、TABLE1 と TABLE2 の両方に存在する行のみを含め、重複する行を削除することによって、結果の
テーブルを導出します。 ALL を INTERSECT (INTERSECT ALL) とともに使用すると、重複行は削除されません。
注: 演算子を使用したいくつかのクエリ結果行は一貫している必要があります。
12. 説明: 外部結合を使用します
A. 左外部結合:
左外部結合 (左結合): 結果セットには、結合テーブルの一致する行と左結合テーブルのすべての行が含まれます。
sql: LEFT OUT JOIN b ON a.a = b.c から a.a、a.b、a.c、b.c、b.d、b.f を選択します。
B: 右外部結合:
右外部結合 (右結合): 結果セットには、結合テーブルの行 (右側の結合テーブルのすべての行を含む)。
C: 完全外部結合:
完全外部結合: シンボリック接続テーブルの一致する行だけでなく、結合された 2 つのテーブル内のすべてのレコードも含まれます。
13. 説明: テーブルをコピーします (構造のみをコピーします、ソース テーブル名: a、新しいテーブル名: b) (アクセス可能)
方法 1: select * into b from a where 1<>1
方法 2 : select top 0 * into b from a
14. 説明: Copy table (コピーデータ、ソーステーブル名: a ターゲットテーブル名: b) (アクセス可能)
insert into b(a, b, c) select d, e,f from b;
15. 説明: データベース間でテーブルをコピーします (特定のデータに絶対パスを使用します) (アクセス可能)
insert into b(a, b, c) select d,e,f from bデータベース 'where 条件
例: ..from b in '"&Server.MapPath(".")&"data.mdb" &"' where..
16. 説明: サブクエリ (テーブル名 1: a テーブル名 2: b)
select a,b,c from a where a IN (select d from b) または: select a,b,c from a where a IN
( 1,2,3)
17. 説明: 記事、投稿者、最終返信時刻を表示します
select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from
table where table .title=a.title) b
18. 説明: 外部結合クエリ (テーブル名 1: a テーブル名 2: b)
select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c
19. 説明: オンライン ビュー クエリ (テーブル名 1: a)
select * from (Select a,b,c FROM a) T where t.a > 1; の使用法。クエリデータ範囲を制限する間に境界値が含まれる場合は境界値が含まれますが、間には含まれません
select * from table1 where time1 と time2 の間の時間
select a,b,c, from table1 where a が値 1 と値 2 の間にない場合
21説明:
select * from table1 where a [not] in ('value 1', 'value 2', 'value 4', 'value 6') での使用方法
22.セカンダリテーブルにないテーブルのメイン情報
delete from table1 where not存在 ( select * from table2 where
table1.field1=table2.field1 )
23. 説明: 4 つのテーブルの結合クエリ問題:
select * a.a=b.b の左内部結合 b から a.a=c.c の右内部結合
d a.a=d.d から .....
24. 説明: 5 分前にリマインダーをスケジュールする
sql: select * fromスケジュール where datediff(' minutes', f start time, getdate())>5
25. 説明: データベースのページングを完了する 1 つの SQL ステートメント
上位 10 を選択 b.* from (上位 20 の主キー フィールドを選択、並べ替え)テーブル名による並べ替えフィールド
desc) a、テーブル名 b ここで、b. 主キー フィールド = a. 並べ替えフィールド
26. 上位 10 レコード
table1 を選択します。 where range
27. 説明: 同じ b 値を持つデータの各グループで最大の a を持つレコードの情報をすべて選択します (フォーラムの月間ランキング、月間売れ筋商品分析、主題別ランキングでも同様の使用が可能です)スコアなど)
select a,b,c from tablename ta where a=(select max(a) from tablename tb where
tb.b=ta.b)
28. 説明: TableA にすべてを含めますが、 TableB と TableC の行を削除し、重複する行をすべて削除して、
結果テーブル
(select a from tableB) 以外 (select a from tableC) を導出します
説明: ランダムに 10 個を取り出します。データの
select top 10 * from tablename order by newid()
30. 説明: ランダムにレコードを選択します
select newid()
31. 説明: ID が含まれていない tablename から削除します (select max(id) ) from tablename group by
col1,col2,...)
32. 説明: データベース内のすべてのテーブル名をリストします
select name from sysobjects where type='U'
33. syscolumns からのテーブル名 where id=object_id('TableName')
34. 説明: type、vender、および pcs フィールドをリストし、type フィールドごとに並べます。Case は、
select の場合と同様に、複数の選択を簡単に実装できます。
タイプを選択,sum(ケースベンダーが'A'の場合、pcs else 0エンド),sum(ケースベンダーが'C'の場合
その後、pcs else 0エンド),sum(ケースベンダーが'B'の場合、pcs else 0エンド) FROMテーブル名
タイプごとにグループ化
表示結果:
タイプ ベンダー pcs
コンピューター A 1
コンピューター A 1
CD B 2
CD A 2
モバイル B 3
モバイル C 3
35 説明: テーブル table1 を初期化します
TRUNCATE TABLE table1
36. 説明: 10 から 15 までのレコードを選択します
select top 5 * from (select top 15 * from table order by id asc) table_alias order by
id desc
データベースレコードをランダムに選択する方法 (Randomize 関数を使用します) SQL ステートメントによって実装されます)
データベースに保存されたデータの場合、乱数機能は上記の効果を与えることができますが、遅すぎる可能性があります。 ASP に「乱数を見つけて」それを印刷するように
依頼することはできません。実際、一般的な解決策は、次のようなループを設定することです:
Randomize
RNumber = Int(Rnd*499) +1
While Not objRec.EOF
If objRec("ID") = RNumber THEN
... ここにありますスクリプトを実行するには…
end if
objRec.MoveNext
Wend
これはわかりやすいですね。まず、1 ~ 500 の範囲の乱数を取り出します (データベース内のレコードの総数が 500 であると仮定します)。次に、各レコードを繰り返し処理して ID の値をテストし、それが RNumber と一致するかどうかを確認します。条件が満たされた場合、
によって実行されますTHEN キーワードで始まるコードのブロック。 RNumber が 495 の場合、データベースを循環するのに長い時間がかかります。 500 という数字は大きいように思えるかもしれませんが、通常、単一のデータベース内に数千のレコードが含まれる、より堅牢なエンタープライズ ソリューションと比較すると、それでも小さいデータベースです。彼はもう死んでいませんか?
SQL を使用すると、以下に示すように、正確なレコードをすばやく見つけて、そのレコードのみを含むレコードセットを開くことができます
:
Randomize
RNumber = Int(Rnd*499) + 1
sql = "Select * FROM Customers Where ID = " & RNumber
set objRec = ObjConn.Execute(SQL)
Response.WriteRNumber & " = " & objRec("ID") & " " & objRec("c_email")
RNumber とID が一致するかどうかを確認するだけです。上記のコードの動作に満足している限り、必要に応じて「ランダム」レコードを操作できます。 Recordset には他のコンテンツが含まれていないため、必要なレコードをすぐに見つけることができ、処理時間が大幅に短縮されます。
もう一度乱数について話しましょう
Random 関数から最後の一滴まで絞り出すことを決意したので、一度に複数のランダム レコードを取り出したり、
特定のランダム範囲内のレコードを使用したりすることができます。上記の標準的な Random の例を拡張することで、SQL を使用して上記 2 つの状況に対処できます
。
ランダムに選択されたいくつかのレコードを取り出して同じレコードセットに保存するには、3 つの乱数を保存し、
データベースにクエリを実行してこれらの数値に一致するレコードを取得します。
sql = "Select * FROM Customers Where ID = " & RNumber & " or ID = " & RNumber2 & " or
ID = " & RNumber3
10 個のレコード (おそらくページが読み込まれるたびに 10 個のリンクのリスト) を選択したい場合は、BETWEEN または
Mathematics を使用できます。式は最初のレコードと適切な数の増分レコードを選択します。この操作はいくつかの方法で実行できますが、
Select ステートメントは 1 つの可能性のみを示します (ここでの ID は自動的に生成された番号です):
sql = "Select * FROM Customers Where ID BETWEEN " & RNumber & " AND " & RNumber & "+
9"
注: 上記のコードの実行目的は、データベース内に 9 つの同時レコードがあるかどうかを確認することではありません。
ランダムに複数のレコードを読み取り、テスト済み
アクセス構文: 上位 10 件を選択 * テーブル名から orDER BY Rnd(id)
SQL サーバー: 上位 n を選択 * テーブル名順から newid()
mysqlelect * テーブル名順から Rand () 制限 n
左結合構文にアクセスします (最近の開発では左結合の使用が必要です。Access のヘルプには何もありません。インターネット上に Access の SQL 説明はありません。
自分でテストして、将来の参照のために今すぐ書き留めてください)
構文 select table1 .fd1,table1,fd2,table2.fd2 From table1 left join table2 on
table1.fd1,table2.fd1 where...
SQL ステートメントを使用して長すぎる文字列表示を置き換えます...
構文:
SQLデータベース: len(field)>10 の場合を選択し、left(field,10)+'...' それ以外の場合、テーブル名から
news_name,news_id としてフィールドが終了します
データベースにアクセス: iif(len(field)>2,を選択します) left( field,2)+'...',field) FROM tablename;
Conn.Execute の説明
Execute メソッド
このメソッドは SQL ステートメントを実行するために使用されます。 SQL文実行後にレコードセットを返すかどうかにより、このメソッドの使用形式は以下の2種類に分かれます:
(1)。 SQLクエリ文を実行すると、クエリで取得したレコードセットが返されます。使い方は、
Set オブジェクト変数名 = connection object.Execute("SQL Query Language")
Execute メソッドが呼び出された後、レコード セット オブジェクトが自動的に作成され、クエリ結果がレコード オブジェクトに格納されます。 Set
メソッドを使用すると、レコード セット オブジェクトが自動的に作成され、レコードセットは指定されたオブジェクトに割り当てられ、後でオブジェクト変数がレコードセット オブジェクトを表します。
(2)。 SQL の操作言語を実行すると、レコードセットは返されません。この時の使い方は、
接続オブジェクト.「SQL操作文」を実行 [, RecordAffected][, Option]
?RecordAffectedはSQL文実行後、ここに変数を入れることができます。この変数に自動的に保存されます。この変数にアクセスすると、SQL ステートメントが操作したレコードの数を知ることができます。
?オプションはオプションです。通常、このパラメータの値は adCMDText で、Execute
メソッドの後の最初の文字をコマンド テキストとして解釈する必要があることを ADO に指示するために使用されます。このパラメータを指定することで実行を効率化できます。
*BeginTrans、RollbackTrans、CommitTrans メソッド
これら 3 つのメソッドは、トランザクション処理のために接続オブジェクトによって提供されるメソッドです。 BeginTrans は何かを開始するために使用されます
RollbackTrans はトランザクションをロールバックするために使用され、CommitTrans はすべてのトランザクション処理結果を送信する、つまりトランザクションの処理を確認するために使用されます。
トランザクション処理は、一連の操作を全体として処理できます。すべてのステートメントが正常に実行された場合にのみ、トランザクション処理は成功したと見なされます。以前の状態。
BeginTrans と CommitTrans は、トランザクションの開始と終了をマークするために使用されます。この 2 つのステートメントは、トランザクション
として処理されるステートメントです。トランザクション処理が成功したかどうかは、オブジェクトの Error コレクションを接続することで判断できます。Error コレクションのメンバー数が 0 でない場合は、エラーが発生し、トランザクション処理が失敗したことを意味します。 Error コレクション内の各 Error オブジェクトは、エラー メッセージを表します。
37.
テーブルの内容によるグループに関する SQL ステートメントのインタビューの質問:
2005-05-09 勝利
2005-05-09 勝利
2005-05-09 否定
2005-05-09 否定
2005-05 - 10 勝ち
2005-05-10 負け
2005-05-10 負け
次の結果を生成したい場合、SQL ステートメントをどのように記述すればよいですか?
勝ちまたは負け
2005-05-09 2 2
2005- 05-10 1 2
答え : コードは次のとおりです:
テーブル #tmp(rq varchar(10),shengfu nchar(1)) を作成します
#tmp 値に挿入します('2005-05-09','win' )
#tmp 値に挿入('2005 -05-09','win')
#tmp 値('2005-05-09','negative') に挿入
#tmp 値('2005-05)に挿入-09','negative')
#tmp 値に挿入('2005-05-10','win')
#tmp 値('2005-05-10','negative') に挿入
# に挿入tmp value('2005-05-10' ,'negative')
1)select rq, sum(case when shengfu='win' then 1 else 0 end)'win',sum(case when shengfu='
negative' then 1 else 0 end)'negative' from #tmp group by rq
2) select N.rq,N.win,M.negative from (
select rq,win=count(*) from #tmp where shengfu='win 'group by rq)N 内部結合
( select rq,negative=count(*) from #tmp where shengfu='negative'group by rq)M on N.rq=M.rq
3)select a.col001,a .a1 勝ち、b.b1 は
から負けます (selectcol001,count(col001) a1 from temp1 wherecol002='win' group bycol001) a,
(selectcol001,count(col001) b1 from temp1 wherecol002='negative ' group bycol001) b
where a.col001=b.col001
38. インタビューで遭遇した SQL ステートメントのクエリの質問について質問します
テーブルには 3 つの列 A B C を使用して実装します。列 B より大きい場合は列 A を選択し、それ以外の場合は列 B を選択します。 列 B が列 C より大きい場合は列 B を選択します
それ以外の場合は列 C を選択します。
例は以下の通りです:
select(case when a>b then a else b end)、
(case when b>c then b esle c end)
from table_name
39 日付判定用のSQL文?
日付 (SendTime フィールド) が当日である tb_send テーブル内のすべてのレコードを取り出してください (SendTime フィールドは日時を含む datetime 型です)
例は次のとおりです:
select * from tb where datediff(dd ,SendTime,getdate() )=0
40: 中国語、数学、英語の 3 つのフィールドがあるテーブルがあります。中国語で 70 点、数学で 80 点、英語で 58 点を示すレコードが 3 つあります。SQL ステートメントを使用してこれら 3 つのレコードをクエリし、次の条件に従って表示します (アイデアを書き留めてください)。 80 以上 60 以上のスコアは合格を示し、60 未満のスコアは不合格を示します。
表示形式:
中国語 数学 英語
合格 優秀 不合格
例は以下の通り:
select
(case when Chinese>=80 then 'Excellent'
when Chinese>=60 then 'Pass'
else 'Fail') as Chinese 、
(数学>=80の場合「優秀」
数学>=60の場合「合格」
それ以外は「不合格」)を数学として、
(英語>=80の場合「優秀」
英語>=60の場合) then 'pass'
else 'fail') を英語として、
テーブル
41 から、SQL を使用して、2 つのフィールド ID と
IDValue を含むユーザー一時テーブルとシステム一時テーブルを作成してください。どちらのタイプも int です。 、この 2 つの違いを説明してください。
ユーザー一時テーブル: create table #xx(ID int, IDValues int)
システム一時テーブル: create table ##xx(ID int, IDValues int )
違い:
ユーザー一時テーブルは、テーブルを作成したユーザーのセッションにのみ表示され、他のプロセスには表示されません。
この一時テーブルは、それを作成したプロセスが消滅すると自動的に削除されます。
グローバル一時テーブルは、全体に表示されます。 SQL Server すべてのインスタンスが表示されますが、アクセスしているすべてのセッションが消えると、自動的に削除されます。
42. sqlserver2000 は、ストレージ メディアによってのみ制限されます。このメソッドは、この無制限の容量メカニズムを実装します。
すべてのデータはデータ ファイル (*.dbf) に保存されるため、ファイルが十分に大きい限り、SQL Server のストレージ容量を拡張できます。
SQL Server 2000 データベースには 3 種類のファイルがあります。
メイン データ ファイル。
メイン データ ファイルはデータベースの開始点であり、データベース内のファイルの他の部分を指します。すべてのデータベースにはメイン データ ファイル
があります。プライマリ データ ファイルの推奨ファイル拡張子は .mdf です。
セカンダリ データ ファイル
セカンダリ データ ファイルには、プライマリ データ ファイルを除くすべてのデータ ファイルが含まれます。データベースによってはセカンダリ データ ファイルが存在しない場合もあれば、複数のセカンダリ データ ファイルがあるデータベースもあります。セカンダリ データ ファイルの推奨ファイル拡張子は .ndf です。
ログ ファイル
ログ ファイルには、データベースの復元に必要なすべてのログ情報が含まれています。各データベースには少なくとも 1 つのログ ファイルが必要ですが、複数存在することもできます。ログ ファイルの推奨ファイル拡張子は .ldf です。
43. SQL ステートメントを使用して、テーブル 1 とテーブル 2 からテーブル 3 にリストされている形式でデータを抽出します。提供されるデータと結果は、要求するための形式としてのみ使用されます。あなたのアドバイス。
ストアドプロシージャを使用することもできます。
table1
月 月 部署 部署 実績 yj
1月 01 10
1月 02 10
1月 03 5
2月 02 8
2月 04 9
3月 03 8
table2
部署 部署名 dname
-- ------ ----------------------------
01 国内事業部 1
02 国内事業部 2
03 国内事業部 3
04 国際事業部部門
table3 (結果)
部門 dep 1 月 2 月 3 月
-------------------------------- ----- -
01 10 null null
02 10 8 null
03 null 5 8
04 null null 9
--------------------------- ----- -------------
1)
a.部門名 dname、b.パフォーマンス yj として「1 月」、c.パフォーマンス yj として「2 月」、d.パフォーマンス yj として「3 月」を選択します。
table1 a、table2 b、table2 c、table2 d から
ここで、a.Department dep = b.Department dep および b.month mon = '1 月' および
a.Department dep = c.Department dep および c.Month mon = '2月'と
a.Department dep = d.Department depとd.Month mon = 'March'と
2)
select a.dep,
sum(case when b.mon=1 then b.yj else 0 end ) '1 月'、
sum(b.mon=2 の場合 b.yj else 0 end) を '2 月'、
sum(case when b.mon=3 then b.yj else 0 end) を '3 月',
sum(case when b.mon=4 then b.yj else 0 end) as 'April',
sum(case when b.mon= 5 then b.yj else 0 end) as 'May',
sum (b.mon=6 の場合、b.yj else 0 終了) as ' June'、
sum(b.mon=7 の場合、b.yj else 0 終了) as ' July'、
sum(b の場合.mon=8 then b.yj else 0 end) as '8月',
sum(case when b.mon=9 then b. yj else 0 end) as ' September',
sum(case when b.mon=10 then b.yj else 0 end) as '10月',
sum(case when b.mon=11 then b.yj else 0 end) as '11月',
sum(case when b.mon=12 then b.yj else 0 end) as ' December',
from table2 a left join table1 b on a.dep=b. dep
44. Huawei からのインタビューの質問
テーブル内の ID には複数のレコードがあります。 IDを取得し、レコード数を表示します。
-------------------------------------------------
select id, Count(*) from id by count(*)>1
select*from(select count(ID) as count from table group by ID)T where T.count>1
MySQL の最も基本的な SQL 構文/ステートメントに関連するその他の記事については、PHP 中国語 Web サイトに注目してください。