Placeholder Image

字幕表 動画を再生する

AI 自動生成字幕
  • (casual music)

    (カジュアルミュージック)

  • - [Emma] Now we're going to look at functions.

    - Emma】今度は関数を見てみましょう。

  • You may be familiar with functions already

    すでにご存知の方もいらっしゃるかもしれませんが

  • from Visual Basic or JavaScript,

    をVisual BasicまたはJavaScriptから起動します。

  • but if you've never used a programming language,

    が、プログラミング言語を使ったことがない人は

  • you've probably used a function in Excel.

    は、Excelで関数を使ったことがあるのではないでしょうか。

  • So if you've typed in something like =SUM

    つまり、=SUMのような入力をしてしまった場合

  • and then you've given a range of cells and you've hit Enter,

    で、セルの範囲を指定して、Enterキーを押す。

  • you've been using a function.

    は、関数を使っていたんですね。

  • And Excel will go off and count up

    そして、Excelがカウントアップしていきます。

  • all the values in the range of cells

    セル範囲内のすべての値

  • and return you a value.

    を作成し、値を返します。

  • That's what functions do typically.

    それが一般的な機能です。

  • You give them an input and they calculate

    入力を与えると、計算する

  • some sort of output along rules that you specify

    指定されたルールに沿った何らかの出力

  • and return you with usually a number or a text or date.

    で、通常は数字かテキストか日付を返します。

  • So what they don't do is they don't run off and edit data.

    そのため、データを編集することはありません。

  • They don't delete rows of data.

    データ列を削除することはない。

  • You give them an input and they calculate an output for you.

    インプットを与えると、アウトプットを計算してくれるのです。

  • You can see from the breadcrumb bar that we are

    パンくずバーを見ると、次のことがわかります。

  • at the top level of the sakila database,

    を、sakilaデータベースのトップレベルに置く。

  • and we have Functions, Procedures, Tables, and Views.

    で、Functions、Procedures、Tables、Viewsがあります。

  • And this time we're looking at functions,

    そして今回は、関数についてです。

  • and the sakila database

    とサキラデータベース

  • has three for us already defined.

    は、すでに3つ定義されています。

  • We're going to look at inventory_held_by_customer.

    inventory_held_by_customer を見ていきます。

  • So I've just clicked on it there.

    そこで、今、クリックしました。

  • And if we scroll down, there's a definition.

    そして、下にスクロールすると、定義があります。

  • Now we could have returned this definition programmatically

    さて、この定義をプログラムで返すことができました。

  • in my SQL by saying show create function

    私のSQLでは、show create function と言っています。

  • and then using the function name.

    というように、関数名を使って

  • But this is just as easy to do.

    でも、これなら簡単にできますよね。

  • And just a reminder that what follows

    そして、以下は念のため。

  • is specific to MySQL.

    は、MySQL に固有のものです。

  • So I've just copied that and pasted it into Atom

    そこで、それをコピーしてAtomに貼り付けたところ

  • so that we can look at it a bit more easily.

    を、もう少し見やすくするためです。

  • So first of all, we have log in data, root @ local host,

    ということで、まずはログインデータ、[email protected]ローカルホストを用意。

  • which we can largely ignore,

    というのは、ほとんど無視できるものです。

  • and then we have FUNCTION and the function name

    で、FUNCTIONと関数名である

  • inventory_held_by_customer.

    inventory_held_by_customer.

  • After inventory_held_by_customer, we have brackets

    inventory_held_by_customerの後に、括弧があります。

  • p_inventory_id INT, and INT means integer.

    p_inventory_id INT、INTは整数を意味します。

  • p_inventory_id is a variable name,

    p_inventory_id は変数名です。

  • so what does it mean to have that in brackets

    ということで、括弧内にあるのはどういうことかというと

  • after the name of the function?

    の後に、関数名?

  • When we use this function in SQL,

    この関数をSQLで使用する場合

  • we're going to use it much like this

    このように使用します。

  • SELECT inventory_held_by_customer.

    SELECT inventory_held_by_customer.

  • And then we're going to supply a number in the brackets

    そして、括弧の中に数字を供給します。

  • and that's the p_inventory_id,

    で、これがp_inventory_idになります。

  • and the number needs to be an integer.

    で、その数値は整数である必要があります。

  • And then this line says RETURNS int.

    そして、この行にはRETURNS intと書かれています。

  • So this function is expecting an integer as an input,

    つまり、この関数は入力として整数を想定しているのです。

  • and it's going to give us an integer as an output as well.

    で、同様に出力として整数が得られます。

  • That's the whole purpose.

    それが全ての目的です。

  • So let's get rid of that.

    だから、それを解消しよう。

  • You can see that we have BEGIN and END declarations

    BEGINとENDの宣言があるのがわかると思います。

  • to this function,

    をこの機能に追加します。

  • and after that, we have a variable declaration,

    で、その後に変数宣言があります。

  • and then an EXIT HANDLER at the top.

    で、その上部にEXIT HANDLERがあります。

  • Now this might look a bit odd because we're declaring

    と宣言しているため、少し変に見えるかもしれません。

  • a variable using the DECLARE statement.

    DECLARE ステートメントを使用して、変数を作成します。

  • And we've just seen that we can use the SET statement

    そして、SET文が使えることを確認しました。

  • with an @ sign to declare a variable like so.

    のように@記号を付けて変数を宣言します。

  • So why are these two things different?

    では、なぜこの2つが違うのでしょうか?

  • They're both variables in my SQL,

    私のSQLではどちらも変数になっています。

  • but they're different kinds.

    が、種類が違うんです。

  • Where you see the SET keyword followed by the @ sign,

    SETキーワードの後に@記号が表示されているところ。

  • you're using a user defined variable.

    は、ユーザー定義変数を使用しています。

  • And these are sorts of

    そして、これらは、ある種の

  • longer lasting variables, if you like,

    より長持ちする変数、お好みで。

  • and let me tell you a bit more about that.

    と、もう少し詳しくお話させてください。

  • If you tried to reference v_customer_id

    v_customer_idを参照しようとした場合

  • after the END keyword,

    ENDキーワードの後に

  • MySQL wouldn't know what you were talking about.

    MySQLは、あなたが何を言っているのかわからないでしょう。

  • Where you have a variable name

    変数名を持っているところ

  • and the DECLARE keyword with no @ sign,

    と、@記号のないDECLAREキーワードがあります。

  • you're using a local variable.

    は、ローカル変数を使用しています。

  • And these cease to exist after the END keyword.

    そして、これらはENDキーワードの後に存在しなくなる。

  • If instead we wanted to make reference down here

    その代わりに、この下を参照するようにしたい場合

  • to the user defined keyword, that would be fine.

    をユーザー定義のキーワードに変換すれば問題ないでしょう。

  • They're longer-lasting.

    長持ちするんです。

  • They exist outside of the BEGIN and the END declarations.

    BEGINとENDの宣言の外側に存在する。

  • But in a function like this,

    しかし、このような機能では

  • it's nice and tidy to have those variables

    を持つことは、とても良いことです。

  • disappear after the END statement.

    はEND文の後に消えます。

  • So we don't need to use these sort of

    そのため、このような種類のものを使う必要はありません。

  • larger user defined ones.

    より大きなユーザー定義のもの。

  • We can use local variables.

    ローカル変数を使うことができる

  • In our second declaration statement, it says

    2つ目の宣言文には、こう書かれています。

  • DECLARE EXIT HANDLER FOR NOT FOUND RETURN NULL;

    not found return null の終了ハンドラを宣言します。

  • which looks like really bad grammar.

    というのは、本当に悪い文法のように見えます。

  • And what it's saying is if the query finds no rows at all,

    そして、クエリが行をまったく検出しない場合、何を言っているのでしょう。

  • then return a NULL.

    の場合、NULLを返します。

  • So show on screen the word NULL.

    そこで、NULLという言葉を画面に表示する。

  • After that, we have what looks like

    その後、次のようなものがあります。

  • a regular SELECT statement,

    は、通常のSELECT文です。

  • except that this one has an INTO keyword.

    ただし、これにはINTOキーワードがあります。

  • And what it's saying is select the customer ID

    そして、その内容は、顧客IDを選択することです。

  • and pop it into a variable called v_customer_id.

    を作成し、v_customer_idという変数にpopします。

  • v_customer_id is what is going to be returned

    v_customer_id が返される内容です。

  • as in shown on screen,

    画面に表示されているように

  • and you can see that further down

    と、さらにその下を見ることができます。

  • the query next to the END declaration

    END宣言の次のクエリ

  • it says RETURN v_customer_id.

    RETURN v_customer_id と書かれています。

  • So that is what we're going to see on screen.

    それが、スクリーンに映し出されるわけです。

  • So what's this SELECT statement doing?

    では、このSELECT文は何をしているのでしょうか?

  • It says select the customer ID from the rental table

    レンタルテーブルから顧客IDを選択すると表示される

  • where the return date is NULL,

    ここで、戻り値はNULLである。

  • that is to say the DVD is still on loan,

    というのは、DVDはまだ貸出中なのです。

  • and then the inventory_id matches

    で、inventory_id が一致します。

  • the number that's been given in the parameters.

    は、パラメータで指定された番号です。

  • So let's run this and make a bit more sense

    では、これを実行し、もう少し意味を持たせてみましょう

  • of what's going on.

    何が起こっているのかの

  • Now I haven't just made that number up.

    今、私はこの数字を作り出したわけではありません。

  • I've had a look through the tables to try and work out

    表に目を通し、試行錯誤しています。

  • a sensible inventory_id to use.

    使用するための適切な inventory_id です。

  • So SELECT inventory_held_by_customer 2047 returns 155.

    つまり、SELECT inventory_held_by_customer 2047は155を返します。

  • So have a quick look back at our query.

    それでは、今回のクエリを簡単に振り返ってみてください。

  • We have supplied an inventory_id,

    inventory_idを供給しています。

  • that is to say a piece of stock or DVD

    つまり、株やDVDの

  • with the number 2047 in the database.

    を2047という番号でデータベースに登録しました。

  • And this query is returning us the customer ID

    そして、このクエリは、顧客IDを返しています。

  • of the person who still has that on loan.

    それをまだ借りている人の。

  • What if we tried a different number?

    違う番号を試したらどうだろう?

  • And again, here's one I prepared earlier.

    そしてまた、先ほど用意したのがこちらです。

  • We can try 367.

    367を試すことができる。

  • You can see we returned a NULL.

    NULLを返しているのがわかると思います。

  • So now that could be a couple of different things.

    だから今、それは2つの異なるものである可能性があります。

  • It may be that there's no customer

    お客さまがいないのかもしれません

  • has ever hired at DVD 367,

    は、これまでDVD367で採用してきました。

  • or it may be no customer has it currently on loan.

    あるいは、現在貸出中のお客様がいらっしゃらないのかもしれません。

  • Let's have a quick look at what's going on.

    早速、見てみましょう。

  • Select everything from the rental table

    レンタル表から全てを選択

  • where the inventory_id is 367,

    ここで、inventory_idは367です。

  • and we get five rows.

    で、5行になります。

  • So this DVD has been rented before,

    このDVDは以前にもレンタルされたことがあるんですね。

  • but if we look, the return date is filled in in every case,

    が、見てみると、帰国日がことごとく記入されている。

  • which means all of those DVDs have been returned.

    ということは、そのDVDはすべて返却されたことになります。

  • There's no outstanding item.

    未処理項目はありません。

  • And that's why we got the NULL when we ran our function.

    そのため、関数を実行したときにNULLが表示されたのです。

  • Our DECLARE EXIT HANDLER came into play.

    私たちのDECLARE EXIT HANDLERが登場したのです。

  • Now on its own, this function is a little bit unhelpful.

    さて、この機能単体では、少々役に立ちません。

  • Knowing that customer 155 has a movie that's still on loan

    155のお客様が、まだ貸出中の映画があることを知り

  • is not really human readable.

    は、人間が読めるようなものではありません。

  • But functions can be useful as part of a query,

    しかし、関数はクエリの一部として有用である。

  • and that's really how they're used.

    と、本当にそういう使い方をしているんです。

  • So let's say you're chasing up on an item of stock

    つまり、ある在庫品を追いかけるとします。

  • and you want the email address for the customer

    で、顧客の電子メールアドレスが必要な場合

  • who still has a movie on loan.

    まだ映画を借りている人

  • Then we could say

    そうすれば、次のように言うことができます。

  • SELECT email from the customer table

    customerテーブルからemailをSELECT

  • WHERE

    WHERE

  • inventory_held_by_customer

    顧客別保有在庫

  • 2047

    2047

  • is customer_id

    はcustomer_id

  • AND

    アンド

  • inventory_held_by_customer

    顧客別保有在庫

  • 2047

    2047

  • IS NOT NULL.

    IS NOT NULL

  • So this time we're using our function in a query

    そこで今回は、この関数をクエリで使ってみます。

  • to get the email address of anybody who still has

    をまだ持っている人のメールアドレスを教えてください。

  • an item of stock on loan,

    貸し出し中の商品

  • and we know that that was customer 155.

    と、それがお客様155人分であることは分かっています。

  • And there we have the email

    そして、そこにあるのは、メール

  • of the offending customer as it were.

    いわば、違反したお客さまの

  • This tells us two things at once then.

    このことは、同時に2つのことを物語っている。

  • The customer does indeed have the movie

    お客様は確かにムービーをお持ちです

  • still in her possession,

    がまだ手元にある。

  • and there's the email address to contact her.

    と、連絡先のメールアドレスがあります。

  • Using a function here is a substitute really

    ここで関数を使用すると、本当に代用品

  • for a subquery or joining tables together.

    サブクエリやテーブルの結合に使用されます。