MySQL における一般的な高度な SQL ステートメント

MySQL における一般的な高度な SQL ステートメント

MySQL 高度な SQL ステートメント

kgc を使用します。
テーブルlocation(Region char(20),store_name char(20))を作成します。
場所の値に挿入します(「East」、「Boston」)。
場所の値に挿入します(「East」、「New York」)。
場所の値に挿入します(「西」、「ロサンゼルス」)。
場所の値に挿入します( 'west'、 'Houston'); 

ここに画像の説明を挿入

Store_Infoテーブルを作成します(Store_Name char(20),sales int(10),Date char(10));
Store_Info に値('ロサンゼルス'、'1500'、'2020-12-05')を挿入します。
Store_Info に値('Houston'、'250'、'2020-12-07')を挿入します。
Store_Info に値('ロサンゼルス'、'300'、'2020-12-08')を挿入します。
Store_Info に値('Boston'、'700'、'2020-12-08')を挿入します。 

ここに画像の説明を挿入

選択

---- SELECT ---- テーブル内の 1 つ以上のフィールドのすべてのデータを表示します。構文: SELECT "フィールド" FROM "テーブル名";
Store_Info から Store_Name を選択します。 

ここに画像の説明を挿入

明確な

---- DISTINCT ---- 重複データを表示しません 構文: SELECT DISTINCT "フィールド" FROM "テーブル名";
Store_Info から Store_Name を DISTINCT で選択します。 

ここに画像の説明を挿入

どこ

---- WHERE ---- 条件付きクエリ構文: SELECT "フィールド" FROM "テーブル名" WHERE "条件";
Store_Info から Store_Name を選択し、Sales > 1000 を指定します。 

ここに画像の説明を挿入

または

---- AND OR ---- AND または構文: SELECT "フィールド" FROM "テーブル名" WHERE "条件 1" {[ANDIOR] "条件 2"}+;
Store_Info から Store_Name を選択します。WHERE Sales > 1000 OR (Sales < 500 AND Sales > 200); 

ここに画像の説明を挿入

---- IN ---- 既知の値のデータを表示します。構文: SELECT "フィールド" FROM "テーブル名" WHERE "フィールド" IN ('value1','value2', ...);
SELECT * FROM Store_Info WHERE Store_Name IN ('ロサンゼルス','ヒューストン'); 

ここに画像の説明を挿入

---- BETWEEN ---- 2 つの値の範囲内のデータを表示します。構文: SELECT "field" FROM "table name" WHERE "field" BETWEEN 'value 1' AND 'value 2';
Store_Info から * を選択し、日付が '2020-12-06' かつ '2020-12-10' であることを確認します。 

ここに画像の説明を挿入

ワイルドカード

---- ワイルドカード ---- ワイルドカードは通常、次のような場合に使用されます。 %: パーセント記号は、0 個以上の文字を表します。 _: アンダースコアは、1 つの文字を表します。 'A_Z': 'A' で始まり、任意の値の別の文字があり、'Z' で終わるすべての文字列。たとえば、「A.BZ」と「A.22」はどちらもこのパターンに一致しますが、「AKK2」は一致しません (A と Z の間には 1 文字ではなく 2 文字あるため)。
「ABC%」: 「ABC」で始まるすべての文字列。たとえば、「ABCD」と「ABCABC」はどちらもこのパターンに一致します。
'%XYZ': 'XYZ' で終わるすべての文字列。たとえば、「WXYZ」と「ZZXYZ」はどちらもこのパターンに一致します。
'%AN%': パターン 'AN' を含むすべての文字列。たとえば、「LOS ANGELES」と「SAN FRANCISCO」はどちらもこのパターンに当てはまります。
'_AN%': 2 番目の文字が 'A' で、3 番目の文字が 'N' であるすべての文字列。たとえば、「SAMN FRANCITSCO」はこのパターンに適合しますが、「LOS ANGELES」は適合しません。
---- LIKE ---- パターンを一致させて必要なデータを検索します。構文: SELECT "field" FROM "table name" WHERE "field" LIKE {pattern};
SELECT * FROM Store_Info WHERE Store_Name like '%os%';
---- ORDER BY ---- キーワードで並べ替え 構文: SELECT "フィールド" FROM "テーブル名" [WHERE "条件"] ORDER BY "フィールド" [ASC, DESC];
#ASC は昇順でソートされ、デフォルトのソート方法です。
#DESC は降順で並べ替えます。
SELECT Store_Name,Sales,Date FROM Store_Info ORDER BY Sales DESC; 

ここに画像の説明を挿入

関数 数学関数

abs(x) # x の絶対値を返します rand() # 0 から 1 までの乱数を返します mod(x,y) # x を y で割った余りを返します power(x,y) # x の y 乗を返します round(x) # x に最も近い整数を返します round(x,y) # x を小数点以下 y 桁に丸めます sqrt(x) # x の平方根を返します truncate(x,y) # 小数点以下 y 桁に切り捨てられた数 x の値を返します ceil(×) # x 以上の最小の整数を返します floor(x) # x 以下の最大の整数を返します greatest(x1,x2...) # セット内の最大値を返します least(x1,x2...) # セット内の最小値を返します SELECT abs(-1),rand(),mod(5,3),power(2,3),round(1.89);
SELECT round(1.8937,3)、truncate(1.235,2)、ceil(5.2)、floor(2.1)、least(1.89,3,6.1,2.1); 

ここに画像の説明を挿入

集計関数

集計関数:
avg() #指定された列の平均値を返します count() #指定された列のNULL以外の値の数を返します min() #指定された列の最小値を返します max() #指定された列の最大値を返します sum(x) #指定された列のすべての値の合計を返します SELECT avg(Sales) FROM Store_Info;

Store_Info から count(store_Name) を選択します。
SELECT count(DISTINCT store_Name) FROM Store_Info;

Store_Info から max(Sales) を選択します。
Store_Info から min(sales) を選択します。

Store_Info から sum(sales) を選択します。

SELECT count(DISTINCT store_Name) FROM Store_Info;
Store_Infoからcount(*)を選択します。
#count(*) にはすべての列の行数が含まれます。結果をカウントする際、NULL 列の値は無視されません。
#count(列名)には列名の行数のみが含まれます。結果をカウントする際、NULL列値を持つ行は無視されます。 

ここに画像の説明を挿入

文字列関数

文字列関数:
trim() #指定されたフォーマットなしで値を返します concat(x,y) #指定されたパラメータxとyを文字列に連結します substr(x,y) #文字列xのy番目の位置から始まる文字列を取得します。これはsubstring()関数と同じ効果があります substr(x,y,z) #文字列xのy番目の位置から始まる長さzの文字列を取得します length(x) #文字列xの長さを返します replace(x,y,z) #文字列xの文字列yを文字列zに置き換えます
upper(x) #文字列 x のすべての文字を大文字に変更します。 lower(x) #文字列 x のすべての文字を小文字に変更します。 left(x,y) #文字列 x の最初の y 文字を返します。 right(x,y) #文字列 x の最後の y 文字を返します。 repeat(x,y) #文字列 x を y 回繰り返します。 space(x) #x 個のスペースを返します。 strcmp (x,y) #x と y を比較します。返される値は -1、0、1 のいずれかになります。
reverse(x) #文字列xを逆にする SELECT concat(Region,Store_Name) FROM location WHERE Store_Name = 'Boston';

#sql_mode がオンで、PIPES_AS_CONCAT がオンの場合、「||」は OR 演算子ではなく文字列連結演算子とみなされます。これは、文字列連結関数 concat に似ています。これは、Oracle データベースで使用される方法と同じです。SELECT Region || ' ' || Store_Name FROM location WHERE Store_Name = 'Boston';

SELECT substr(Store_Name,3) FROM location WHERE Store_Name = 'Los Angeles';
SELECT substr(Store_Name,2,4) FROM location WHERE Store_Name = 'New York';

SELECT TRIM ([ [位置] [削除する文字列] FROM ] 文字列);
#[位置]: 値は、LEADING (開始)、TRAILING (後続)、BOTH (開始と後続) のいずれかになります。
#[削除する文字列]: 文字列の先頭、末尾、またはその両方から削除する文字列。デフォルトはスペースです SELECT TRIM(LEADING 'Ne' FROM 'New York');

SELECT Region,length(Store_Name) FROM location;

SELECT REPLACE(Region,'ast','astern')FROM location; 

ここに画像の説明を挿入
ここに画像の説明を挿入

---- GROUP BY ---- 通常は集計関数と組み合わせて、GROUP BY に続く列のクエリ結果を要約してグループ化します。GROUP BY には原則があり、SELECT に続くすべての列のうち、集計関数を使用しない列は GROUP BY の後に表示される必要があります。

構文: SELECT "列 1", SUM ("列 2") FROM "テーブル名" GROUP BY "列 1";
SELECT Store_Name,SUM(Sales) FROM Store_Info GROUP BY Store_Name ORDER BY sales desc;

---- HAVING ---- は、GROUP BY ステートメントによって返されるレコード セットをフィルター処理するために使用され、通常は GROUP BY ステートメントと組み合わせて使用​​されます。HAVING ステートメントの存在により、WHERE キーワードを集計関数と組み合わせて使用​​できないという欠点が補われます。関数列のみが SELECT される場合、GROUP BY 句は必要ありません。

構文: SELECT "列 1", SUM ("列 2") FROM "テーブル名" GROUP BY "列 1" HAVING (関数条件);
SELECT Store_Name,SUM(Sales) FROM Store_Info GROUP BY Store_Name HAVING SUM (Sales) > 1500;

---- エイリアス ---- フィールドエイリアス テーブルエイリアス 構文: SELECT "テーブルエイリアス"."フィールド1" [AS] "フィールドエイリアス" FROM "テーブル名" [AS] "テーブルエイリアス"
SELECT A.Store_Name Store,SUM(A.Sales) "Total Sales" FROM Store_Info A GROUP BY A.Store_Name;

---- サブクエリ ---- テーブルを接続し、WHERE 句または HAVING 句に別の SQL ステートメントを挿入します。構文: SELECT "column1" FROM "table1" WHERE "column2" [比較演算子] #外部クエリ (SELECT "column1" FROM "table2" WHERE "条件"); #内部クエリは、=、>、<、>=、<= などの記号演算子にすることができます。また、LIKE、IN、BETWEEN などのリテラル演算子にすることもできます。
SELECT SUM(Sales) FROM Store_Info WHERE Store_Name IN
(Store_Name FROM location WHERE Region = 'west' を選択)

SELECT SUM(A.Sales) FROM Store_Info A WHERE A.Store_Name IN
(場所 B から Store_Name を選択、B.Store_Name = A.Store_Name) 

ここに画像の説明を挿入

存在する

---- EXISTS ---- は、ブール値が true であるかどうかと同様に、内部クエリが結果を生成するかどうかをテストするために使用されます。結果が生成された場合、システムは外部クエリの SQL ステートメントを実行します。そうでない場合、SQL ステートメント全体で結果は生成されません。
構文: SELECT "フィールド 1" FROM "テーブル 1" WHERE EXISTS (SELECT * FROM "テーブル 2" WHERE "条件");
SELECT SUM(Sales) FROM Store_Info WHERE EXISTS (SELECT * FROM location WHERE Region = 'West'); 

ここに画像の説明を挿入

接続クエリ

ロケーションテーブル

ここに画像の説明を挿入

Store_Info を更新し、store_name を 'washington' に設定し、sales を 300 に設定します。

Store_Info テーブル

ここに画像の説明を挿入

内部結合: 2 つのテーブルで結合フィールドが等しい行のみを返します。左結合: 左テーブルのすべてのレコードと、右テーブルで結合フィールドが等しいレコードを返します。右結合: 右テーブルのすべてのレコードと、左テーブルで結合フィールドが等しいレコードを返します。SELECT * FROM location A INNER JOIN Store_Info B on A.Store_Name = B.store_Name;

SELECT * FROM location A RIGHT JOIN Store_Info B on A.Store_Name = B.Store_Name ;

SELECT * FROM location A,store_Info B WHERE A.Store_Name = B.Store_Name;

SELECT A.Region REGION,SUM(B.Sales) SALES FROM location A,Store_Info B
WHERE A.Store_Name = B.Store_Name GROUP BY REGION; 

ここに画像の説明を挿入

ビューを作成

---- CREATE VIEW ---- ビューは仮想テーブルまたは保存されたクエリと考えることができます。
ビューとテーブルの違いは、テーブルは実際にデータを格納するのに対し、ビューはテーブルの上に構築された構造であり、実際にはデータ自体は格納されないことです。
ユーザーがデータベースを終了したり、データベースから切断したりすると、一時テーブルは自動的に消えますが、ビューは消えません。
ビューにはデータは含まれず、その定義のみが格納されます。一般的に、ビューの目的は複雑なクエリを簡素化することです。例えば、複数のテーブルに対して結合クエリを実行し、さらに統計やソートなどの操作も実行したい場合、SQT ステートメントを記述するのは非常に面倒です。ビューを使用して複数のテーブルを結合し、ビューに対してクエリを実行すると、テーブルに対してクエリを実行するのと同じになるため、非常に便利です。

構文: CREATE VIEW "ビュー テーブル名" AS "SELECT ステートメント";
CREATE VIEW V_REGION_SALES AS SELECT A.Region REGION, SUM(B.Sales) SALES FROM location A
Store_Info B を A.Store_Name = B.Store_Name に内部結合し、REGION でグループ化します。

V_REGION_SALES から * を選択します。
ビュー V_REGION_SALES を削除します。 

ここに画像の説明を挿入

連合

---- UNION ---- ユニオンは、2 つの SQL ステートメントの結果をマージします。2 つの SQL ステートメントによって生成されるフィールドは、同じデータ型 UNION である必要があります。生成されるデータ値は重複せず、フィールドの順序でソートされます。構文: [SELECT ステートメント 1] UNION [SELECT ステートメント 2];

UNION ALL: 重複の有無に関係なく、結果を生成するすべてのデータ値を一覧表示します。構文: [SELECT ステートメント 1] UNION ALL [SELECT ステートメント 2];

SELECT Store_Name FROM location UNION SELECT Store_Name FROM Store_Info;

SELECT Store_Name FROM location UNION ALL SELECT Store_Name FROM Store_Info; 

ここに画像の説明を挿入

交差点の値

----- 交差値 ---- 2 つの SQL ステートメントの結果の交差を取得します。 SELECT A.Store_Name FROM location A INNER JOIN Store_Info B ON A.Store_Name = B.Store_Name;
SELECT A.Store_Name FROM location A INNER JOIN Store_Info B USING(Store_Name);

#2つのベーステーブルのうちの1つに指定された行がなく、もう1つのテーブルに重複した行があり、実際に交差がある場合は、SELECT A.Store_Name FROMを使用します。
(SELECT Store_Name FROM location UNION ALL SELECT Store_Name FROM store_Info) A
GROUP BY A.Store_Name HAVING COUNT(*) > 1;

#重複のない 2 つの SQL ステートメントの結果の共通部分を取得します SELECT A.Store_Name FRONM (SELECT B.Store_Name FROM location B INNER JOIN Store_Info C ON B.Store_Name = C.store_Name) A
GROUP BY A.Store_Name;

SELECT DISTINCT A.Store_Name FROM location A INNER JOIN Store_Info B USING(Store_Name);

SELECT DISTIMCT Store_Name FROM location WHERE (Store_Name) IN (SELECT Store_Name FROM Store_Info);

SELECT DISTINCT A.Store_Name FROM location A LEFT JOIN Store_Info B USING(Store_Name) WHERE B.Store_Name IS NOT NULL; 

ここに画像の説明を挿入

交差値なし

---- 交差値なし ---- 最初の SQL ステートメントの結果を表示します。2 番目の SQL ステートメントの結果との交差はなく、重複もありません。 SELECT DISTINCT Store_Name FROM location WHERE (Store_Name) NOT IN (SELECT Store_Name FROM Store_Info);

SELECT DISTINCT A.Store_Name FROM location A LEFT JOIN Store_Info B USING(Store_Name) WHERE B.Store_Name IS NULL; 

ここに画像の説明を挿入

場合

---- CASE ---- は、SQL で IF-THEN-ELSE ロジックに使用されるキーワード構文です。
SELECT CASE ("フィールド名")
  WHEN "条件 1" THEN "結果 1"
  WHEN "条件 2" THEN "結果 2"
  ...
  [ELSE "結果 N"]
  終わり
FROM "テーブル名";

#「条件」は値または数式にすることができます。 ELSE 句は必須ではありません。

SELECT store_Name, CASE Store_Name
  ロサンゼルスの場合の売上 * 2
  「ボストン」の場合、売上 * 1.5
  ELSEセールス
  終わり
「新規販売」、日付
Store_Info から;

#「New Sales」は、CASE のその列に使用されるフィールド名です。

テーブルTotal_Salesを作成します(名前char(10),売上int(5));
Total_Sales VALUES ('zhangsan',10) に INSERT します。
Total_Sales VALUES ('lisi',15) に INSERT します。
Total_Sales VALUES ('wangwu',20) に INSERT します。
Total_Sales VALUES ('zhaoliu',40) に INSERT します。
Total_Sales VALUES ('sunqi',50) に挿入します。
Total_Sales VALUES ('zhouba',20) に INSERT します。
Total_Sales VALUES ('wujiu',30) に INSERT します。 

ここに画像の説明を挿入
ここに画像の説明を挿入

1. ランキングを計算する

----ランキングを計算する----テーブルを自己結合し、結果を順番にリストし、各行の前の行数(行自体を含む)を計算します。SELECT A1.Name、A1.sales、COUNT(A2.sales) Rank FROM Total_sales A1、Total_sales A2
A1.sales < A2.sales 0R (A1.sales = A2.sales AND A1.Name = A2.Name) の場合
GROUP BY A1.Name、A1.sales ORDER BY A1.sales DESC;

例えば:
A1.Name、A1.sales、count(A2.sales) から rank を選択し、Total_Sales A1、Total_Sales A2 で、A1.sales < A2.sales または (A1.sales=A2.sales かつ A1.Name=A2.Name) で group by A1.Name を選択し、order by A1.sales desc;

説明する:
A1の売上フィールド値がA2の売上フィールド値より小さい場合、または2つのテーブルの売上フィールド値が等しく、名前フィールド値が等しい場合、
テーブル A1 と A2 から、A1 の名前フィールド値、A1 の売上フィールド値、および A2 の売上フィールドの null 以外の値を照会します。rank はエイリアスであり、A1 の名前フィールドをグループ化します。A1 の売上フィールドを降順で並べ替えます。 

ここに画像の説明を挿入

2. 中央値を計算する

---- 中央値を計算する ----
SELECT Sales Middle FROM (SELECT A1.Name,A1.Sales,COUNT(A2.Sales) Rank FROM Total_Sales A1,Total_Sales A2
A1.Sales < A2.Sales 0R (A1.Sales = A2.Sales AND A1.Name >= A2.Name) の場合
GROUP BY A1.Name、A1.Sales ORDER BY A1.Sales DESC) A3
WHERE A3.Rank = (SELECT (COUNT(*)+1) DIV 2 FROM Total_Sales);

例えば:
select * from (select A1.Name,A1.sales,count(A2.sales) rank from Total_Sales A1,Total_Sales A2 where A1.sales < A2.sales OR (A1.sales=A2.sales and A1.Name=A2.Name) group by A1.Name order by A1.sales desc) A3 where A3.rank = (select (count(*)+1) DIV 2 from Total_Sales);

select sales mid from (select A1.Name,A1.sales,count(A2.sales) rank from Total_Sales A1,Total_Sales A2 where A1.sales < A2.sales OR (A1.sales=A2.sales and A1.Name=A2.Name) group by A1.Name order by A1.sales desc) A3 where A3.rank = (select (count(*)+1) DIV 2 from Total_Sales);


#各派生テーブルには独自のエイリアスが必要です。エイリアス A3 にはエイリアスが必要です #DIV は MySQL で商を計算する方法です

ここに画像の説明を挿入

3. 累計を計算する

---- 累計を計算します ---- テーブルを自己結合し、結果を順番にリストし、各行の前に合計を計算します (行自体も含む) SELECT A1.Name, A1.Sales, SUM(A2.Sales) Sum_Total FROM Total_Sales A1, Total_Sales A2
A1.Sales < A2.Sales または (A1.Sales=A2.Sales AND A1.Name = A2.Name)
GROUP BY A1.Name、A1.Sales ORDER BY A1.Sales DESC;

例えば:
select A1.*,sum(A2.sales) sum_soales from Total_Sales A1,Total_Sales A2 where A1.sales < A2.sales or(A1.sales=A2.sales and A1.Name=A2.Name) group by A1.Name order by A1.sales desc; 

ここに画像の説明を挿入

4. 合計パーセンテージを計算する

例えば:
A1.*、A1.sales/(Total_Sales から sum(sales) を選択) z_sum from Total_Sales A1、Total_Sales A2 where A1.sales < A2.sales または (A1.sales=A2.sales かつ A1.Name=A2.Name) A1.Name でグループ化;

#select sum(sales) from Total_Sales は、フィールド値の合計を計算し、各行を合計で割って、各行の合計のパーセンテージを計算します。 

ここに画像の説明を挿入

5. 累計パーセンテージを計算する

例えば:
select A1.Name,A1.sales,sum(A2.sales),sum(A2.sales)/(select sum(sales) from Total_Sales) Z from Total_Sales A1,Total_Sales A2 where A1.sales < A2.sales or (A1.sales=A2.sales and A1.Name=A2.Name) group by A1.Name order by A1.sales desc;

select A1.Name,A1.sales,sum(A2.sales),TRUNCATE(sum(A2.sales)/(select sum(sales) from Total_Sales),2) ||'%' Z from Total_Sales A1,Total_Sales A2 where A1.sales < A2.sales or (A1.sales=A2.sales and A1.Name=A2.Name) group by A1.Name order by A1.sales desc; 

ここに画像の説明を挿入

6. nullと値なし(' ')の違い

1. 値なしの長さは0で、スペースを占有しません。一方、null値の長さはnullで、スペースを占有します。
2. IS NULL または IS NOT NULL は、フィールドが NULL か NULL でないかを判断するために使用されます。値がないかどうかを判断することはできません。
3. 値が存在しないという判定を処理するには、「=」または「<>」を使用します。 <>は等しくないことを表す
4. count() で指定フィールドの行数をカウントする場合、NULL 値は自動的に無視され、計算のためにレコードに null 値が自動的に追加されます。
例えば:
テーブルSITE(site varchar(20))を作成します。
SITE に値 ('nanjing') を挿入します。
SITE に値 ('beijing') を挿入します。
SITE 値に挿入します('');
SITE に値 ('taijin') を挿入します。
SITE に値を挿入します();
SITE 値に挿入します('');
SITEから*を選択します。 

ここに画像の説明を挿入

SITEから長さ(サイト)を選択します。
site が NULL の場合、SITE から * を選択します。
site が NULL でない場合に SITE から * を選択します。
SITE から * を選択します (site = '')。
SITE から * を選択します (site <> ''); 

ここに画像の説明を挿入

7. 正規表現(シェル部分と同じ)

マッチングパターン 説明 例 ^ テキストの先頭文字に一致します '^bd' bd で始まる文字列に一致します $ テキストの末尾文字に一致します 'qn$' qn で終わる文字列に一致します。任意の 1 文字に一致します 'st' s と t の間に 1 文字ある任意の文字列に一致します * 先行する文字の 0 個以上に一致します 'fo*t' t の後に任意の数の o が続く文字列に一致します
+ は、直前の文字の 1 回以上の繰り返しに一致します。 'hom+' は、ho で始まり、その後に少なくとも 1 つの m が続く文字列に一致します。文字列は、指定された文字列を含む文字列に一致します。 'clo' は、clo を含む文字列に一致します。p1|p2 は、p1 または p2 に一致します。 'bg|fg' は、bg または fg に一致します。
[...] は文字セット '[abc]' 内の任意の文字に一致します。a または b または c に一致します。
[^...] は括弧内以外の任意の文字に一致します。 '[^ab]' は a または b を含まない文字列に一致します。 {n} は前の文字列に n 回一致します。 'g{2}' は 2 つの g を含む文字列に一致します。 {n,m} は前の文字列に少なくとも n 回、最大で m 回一致します。 'f{1,3}' は f に少なくとも 1 回、最大で 3 回一致します。

構文: SELECT フィールド FROM テーブル名 WHERE フィールド REGEXP 一致パターン

例えば:
Total_Salesから*を選択します。名前の正規表現は '^[n]'です。
Total_Salesから*を選択します。名前の正規表現は '[n]'です。
Total_Sales から * を選択します (名前の正規表現は 'Ho|Bo')。 

ここに画像の説明を挿入

8. ストアド プロシージャ (シェル関数に類似、コードの再利用) ストアド プロシージャは、特定の機能を実行するための一連の SQL ステートメントです。

ストアド プロシージャを使用する場合、一般的なタスクや複雑なタスクは、SQL ステートメントを使用して事前に記述され、指定された名前で保存されます。このプロセスはコンパイルされ、最適化されてデータベース サーバーに保存されます。ストアド プロシージャが必要なときは、それを呼び出すだけで済みます。ストアド プロシージャは、従来の SQL よりも実行が高速で効率的です。
ストアドプロシージャの利点
1. 一度実行した後、生成されたバイナリコードは実行効率を向上させるためにバッファ内に常駐します。
2. 柔軟性の高いSQL文と制御文の集合
3. サーバー側に保存し、クライアントが呼び出したときのネットワーク負荷を軽減する
4. クライアントの呼び出しに影響を与えることなく、いつでも繰り返し呼び出し、変更することができます。
5. すべてのデータベース操作を完了でき、データベースの情報アクセス権も制御できます
文法:
DELIMITER !! #ステートメントの終了シンボルをセミコロンから変更します。一時的に問題を防ぐために、これをカスタマイズできます。CREATE PROCEDURE XXX() #ストアド プロシージャを作成し、プロシージャ名をカスタマイズします。() にはパラメーターを含めることができます。BEGIN #プロシージャ本体はキーワード BEGIN で始まります。select * from xxx; #プロシージャ本体のステートメント END!! #プロシージャ本体はキーワード END で終わります。DELIMITER ; #ステートメントの終了シンボルをセミコロンに戻します。call XXX; #ストアド プロシージャを呼び出す====ストアド プロシージャを表示する====
show create procedure [データベース.]ストアド プロシージャ名; #ストアド プロシージャの詳細情報を表示します show create procedure XXX;
プロシージャのステータスを表示 ['%XXX%' など] \G
例えば:
区切り文字!!
プロシージャ KIND1() の作成
始める
	Total_Salesから*を選択します。
終わり!!

区切り文字 ;
KIND1を呼び出します。

作成手順を表示 KIND1\G
'%KIND1%' のような手順ステータスを表示します\G 

ここに画像の説明を挿入

ストアド プロシージャのパラメーター:
IN 入力パラメータ。呼び出し元がプロシージャに値を渡すことを示します (渡される値はリテラルまたは変数です)
OUT出力パラメータ:プロシージャが呼び出し元に値を渡すことを示します(複数の値を返すことができ、出力値は変数のみになります)
例えば:
区切り文字!!
CREATE PROCEDURE KIND2(IN people char(20))
始める
	Name=people の場合、Total_Sales から * を選択します。                                                    
終わり!!         

区切り文字 ;
KIND2('lisi') を呼び出します。 

ここに画像の説明を挿入

8.1. ストアドプロシージャ内の条件文

例えば:
区切り文字!!
CREATE PROCEDURE KIND7(IN num int(10))
始める
var int を宣言します。
var=num*2 を設定します。
var>=10の場合
	Total_Salesを更新し、sales=sales+1を設定します。
それ以外 
	Total_Salesを更新し、sales=sales-1を設定します。
終了の場合;
終わり!!
区切り文字 ;

コールカインド7(5);
コールカインド7(4) 

ここに画像の説明を挿入
ここに画像の説明を挿入

8.2. whileループ文

例えば:
テーブル akg(id int) を作成します。

区切り文字!!
プロシージャ KIND6() の作成
始める
var int を宣言します。
var=0 を設定します。
var<5の間
	akg values(var)に挿入します。
	var=var+1 を設定します。
終了しながら;
終わり!!

区切り文字 ;
KIND6を呼び出す;
akg から * を選択します。 

ここに画像の説明を挿入

これで、MySQL の高度な SQL ステートメントに関するこの記事は終了です。MySQL の高度な SQL ステートメントに関する関連情報をさらに知りたい場合は、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • MySQL の最適化: 高品質の SQL 文を書く方法
  • MySQL 高度な SQL ステートメントの概要

<<:  HTMLバージョン宣言DOCTYPEタグ

>>:  js、css、htmlはブラウザのさまざまなバージョンを決定します

推薦する

この記事は、Dockerにおけるcgroupの具体的な使用法を徹底的に理解するのに役立ちます。

目次cgroupとはcgroupの構成cgroupが提供する機能cgroup 内の CPU を制限す...

MySQL でスロークエリを有効にする方法の例

序文スロー クエリ ログは、MySQL で非常に重要な機能です。MySQL のスロー クエリ ログ機...

VMware Workstation のインストール (Linux カーネル) Kylin グラフィック チュートリアル

この記事では、VMware WorkstationにKylinをインストールする方法を参考までに紹介...

MySQL 5.7.18 のインストール中に MySQL サービスの起動に失敗する問題の解決策

MySQL は非常に強力なリレーショナル データベースです。しかし、初心者の中には、インストールや設...

GolangでMySQLデータベースを操作するための実装コード

序文Golang は、SQL データベースにアクセスするための database/sql パッケージ...

Ubuntu 16.04 カーネルのアップグレード手順

1. 環境仮想マシン上で実行されているUbuntu 16.04では、コマンドuname -rを使用し...

mysql 実行プラン ID が空である (UNION キーワード) の詳細な説明

導入作業プロセス中に、遅いクエリが調整されることがあります。 MySQL SQL ステートメントのチ...

Centos7 で yum を使用して Mysql5.7.19 をインストールする詳細な手順

Centos7 の yum ソースには、mysql の代わりに mariaDB が使用されているため...

Ubuntu 16.04 64 ビット版の VMware Tools のインストールと構成のグラフィック チュートリアル

この記事では、VMware Toolsのインストールと構成に関するグラフィックチュートリアルを参考と...

HTMLエリアタグの詳しい説明

<area> タグは、イメージ マップ内の領域を定義します (注: イメージ マップはク...

Zabbix を使用して Oracle データベースを監視する方法の詳細な説明

1. 概要Zabbix は非常に強力で、最も広く使用されているオープンソースの監視ソフトウェアです。...

CSS3を使用してプログレスバー効果を実現し、動的にパーセンテージを追加する

プロジェクト中、プログレスバーを実装するために js の requestAnimationFrame...

仮想マシン VMware に Kali Linux をインストールする最新の超詳細なグラフィック チュートリアル

目次1. システムイメージファイルをダウンロードする2. 新しい仮想マシンを作成する3. Kali ...

Idea の起動速度を改善し、Tomcat ログの文字化けを解決する方法

目次序文アイデアの起動速度Tomcat ログが文字化けしている序文Idea を再インストールしたので...

jQueryフレームワークは、要素の表示と非表示の3つのアニメーションメソッドを実装しています。

目次1. デフォルトで表示と非表示を切り替える2. スライドして表示と非表示を切り替える3. フェー...