字幕表 動画を再生する 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, ということで、まずはログインデータ、root@ローカルホストを用意。 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. サブクエリやテーブルの結合に使用されます。 It can be a lot quicker. もっと早くてもいいんです。 And for common queries, this is a way of storing them また、一般的なクエリについては、このような保存方法があります。 so that you and other people can use them easily. 自分も他の人も簡単に使えるように。 (casual music) (カジュアルミュージック)
A2 初級 日本語 id 関数 変数 キーワード 顧客 定義 SQLチュートリアル - 関数の使用 (SQL Tutorial - Using functions) 15 0 Summer に公開 2022 年 11 月 16 日 シェア シェア 保存 報告 動画の中の単語