STUDY MEMO

学習のメモ書き

<SQL> データ加工

重複データを省く

特定のカラムの重複を省くとき、以下の構文を使用する。

SELECT DISTINCT (カラム名)
FROM テーブル名;


<例>
f:id:kabacho23:20200905012112p:plain:w400

SELECT DISTINCT(name) 
FROM account;


結果

f:id:kabacho23:20200905012024p:plain:w100


四則演算によるカラムデータの再計算

消費税など、既存のカラム値に数値に変更を加えたい場合はこの方法を使用する。

SELECT カラム名 四則演算(+-*/) 数値
FROM テーブル名;


<例>税込み価格の算出
f:id:kabacho23:20200905012112p:plain:w400

SELECT name, price, price*1.10
FROM account;


結果

f:id:kabacho23:20200905013632p:plain:w250


集計関数

SUM関数:

WHEREで検索したデータを集計。
<例>ランチ金額の合計

SELECT SUM(price),name
FROM account
WHERE name = "ランチ";


結果

f:id:kabacho23:20200905025419p:plain:w200

AVG関数:

WHEREで検索したデータの平均を算出。
<例>ランチ金額の平均

SELECT AVG(price),name
FROM account
WHERE name = "ランチ";l


結果

f:id:kabacho23:20200905030543p:plain:w200

COUNT関数:

WHEREで検索したデータの数を集計。
nullはカウントされないので、nullをカウントしたいときは
SELECT COUNT(*)
にする。

<例>ランチの回数

SELECT COUNT(name),name
FROM account
WHERE name = "ランチ";


結果

f:id:kabacho23:20200905031130p:plain:w200

MAX,MIN関数:

MAXは最大値、MINは最小値を取得。

<例>

SELECT name,max(price) 
FROM account
WHERE name = "ランチ";


結果

Image from Gyazo

データのグループ化

GROUP BYを用いるとデータをグループ化することができる。
指定したカラムで、完全に同一のデータを持つレコード同士が同じグループになる。
SELECTのカラム名(GROUP BYのカラム名)は、複数選択可能。

SELECT 集計関数,カラム名 
FROM テーブル名
GROUP BY カラム名(SELECTと同じ);


<例>合計金額と同じカラム名をグループ化
Image from Gyazo

SELECT COUNT(name),SUM(price), name
FROM account
GROUP BY name;


結果

Image from Gyazo

WHEREとの併用

WHEREをGROUP BYと併用すると以下の順で実行される。

・検索 WHERE
WHEREでカラムの値が一致するデータが検索される

・グループ化 GROUP BY
指定されたカラムでグループ化する

・関数 COUNTなどの関数
グループ化されたデータを関数で処理

<例>交通費の使用途ごとに合計金額を出力する。
Image from Gyazo

SELECT SUM(price),name
FROM account
WHERE category = "交通費"
GROUP BY name;


結果

Image from Gyazo

HAVINGとの併用

グループ化したデータからさらに絞り込んで検索する構文。

・検索 WHERE
WHEREでカラムの値が一致するデータが検索される

・グループ化 GROUP BY
指定されたカラムでグループ化する

・関数 COUNTなどの関数
グループ化されたデータを関数で処理

・HAVING
指定した条件のデータを検索。

<例>

SELECT SUM(price),name
FROM account
WHERE category = "交通費"
GROUP BY name
HAVING SUM(price)>1000;


結果

Image from Gyazo

<基本情報試験範囲> 進数と基数変換

2020年10月18日(日)が試験日。
IT未経験者だと200時間くらいの勉強が必要とのこと。受けるからには頑張る。
キタミ式と合格教本を使用。使い方としてはキタミ式を先に読んでメモしていき、
一周したところで教本に切り替えて記憶に残ってない部分を潰していく予定。
キタミ式は20章あるので、今月25日までには読み終わるのが目標。

進数


2進数:0~1
8進数:0~7
16進数:0~9、A~F

2進数の1桁は1ビット。

8進数は2進数の範囲だと0~111が範囲になるため、1桁で3ビット表すことができることがわかる。
同様に、16進数は2進数の範囲だと0~1111が範囲になるため、1桁で4ビット表すことができることがわかる。

現在のコンピュータは32bitや64bitなどの4の倍数になるbit数を使用しているため、16進数が主流。


基数変換

基数:基本となる数。n進数のnの数字のことを指す。
桁の重み:進数を表すnの(n-1)乗の"(n-1)乗の部分。指数。

基数変換:別の基数に変換すること。10進数→2進数など。


<例>
2進数"1101.011"を10進数に変換
Image from Gyazo
<例>
10進数"13.375"を2進数に変換
Image from Gyazo
<例>
2進数"1101.01"を8進数に変換
Image from Gyazo
<例>
2進数"1101.01"を16進数に変換
8進数と同様に考える。16進数は4ビットなので4つずつに区切る。
13.4になり、16進数なので13はD。
そのため、D.4。

<SQL> 基礎

SQLはデータベース言語のこと。
f:id:kabacho23:20200904220029p:plain:w400
データベースはテーブルで管理されている。
テーブルは以下の構造で作成されている。

f:id:kabacho23:20200904223731p:plain

基本のSQL

基本的には以下の構文になる。

SELECT カラム名
FROM テーブル名
WHERE カラム名 = ○○;
//(WHERE NOT カラム名 = ○○)
//(WHERE カラム名 IS NULL;)
//(WHERE カラム名 IS NOT NULL;)
//(WHERE カラム名 IN ('', '', ... ;)


SELECT:
どのカラムデータを取得するかを選択。
全てのカラムを取得するときは*(アスタリスク)、
任意の複数のカラムを取得するときはカラム名の間に,(カンマ)を入れる。

FROM:
どのテーブルからデータを取得するかを選択。

WHERE:
カラム名が○○であるレコードを取得。
比較演算子(<=等)を入れて条件に当てはまるレコードを探すこともできる。

NOT:
カラム名が○○でないレコードを取得。

IS NULL:
WHERE文で使用すると、空欄のレコードを検索。

IS NOT NULL:
WHERE文で使用すると、空欄ではないレコードを検索。

IN:
値のリストに含まれているレコードを検索

LIKE演算子

ある文字列を含むデータを取得したいときにWHERE文と共に使用する。

SELECT カラム名
FROM テーブル名
WHERE カラム名 LIKE 文字列;


LIKE演算子では%をワイルドカード(どんな文字列にも一致するという意味の記号)として扱う。 そのため、likeのあとの文字列を%で囲むとその文字列を含む文字列を検索できる。
%を前につけると、その文字列で終わる文字列、
後につけるとその文字列で始まる文字列を検索できる。

<例>

SELECT *
FROM foods
WHERE name LIKE  "%マ%";


結果

f:id:kabacho23:20200904224516p:plain

AND演算子、OR演算子

AND演算子は、WHERE文の中で使用することで複数の条件に一致する情報を取得。
AND演算子は、WHERE文の中で使用することで一つでも一致する情報を取得。

ORDER BYを使用した降順、昇順の並び替え

ORDER BYを使用することでデータの並び替えができる。
降順

ORDER BY 並び替えるカラム DESC;


昇順

ORDER BY 並び替えるカラム ASC;



LIMIT

最大で何件取得するかを設定できる。

SELECT *
FROM テーブル名
WHERE 条件
LIMIT 表示件数;

< git > 共同開発

共同開発の流れは、
コードを記載、変更する

共有する準備

共有

共有はリモートという共有ファイルの置き場を使う。
リモートはgitHubなどのサーバーがある。

作成者→(アップロード(push))→リモートサーバー→(ダウンロード(pull))→共有メンバー

リモートを登録するときは
git remote add リモート名 URL

init

git init gitを使用するとき入力する。

add

git add ファイル名
で共有するファイルを選択する。

commit -m

git commit -m "コミットメッセージ"
で、記録(コミット)するファイルにコメント(コミットメッセージ)をつける。

pushとpull

git push リモート名 master
リモートにファイルをアップロードすることをpushという。

git pull リモート名 master
リモートからファイルをダウンロードすることをpullという。

statusとdiff

git status
statusは、変更してpushされていないファイルのファイル名を赤色、
pushされたファイル名を緑色で表示する。
modified: ファイル名

git diff
変更の内容を表示する。
変更前の記述は赤色表示で、左端に-と書かれており、
変更後の記述は緑色表示で、左端に+と書かれている。

logとlog -p

git log
コミットメッセージを確認できる。

git log -p
コミットされたものの変更内容が見れる。
Qで終了できる。

<javascript ES6> 配列で使用できるメソッドについて

pushメソッド

pushメソッドは、配列の最後に要素を加えるためのメソッド。

配列名.push("追加したい要素");


<例>

const foods = ["卵","アボガド","トマト"];

foods.push("きゅうり");
console.log(foods);


結果 ↓
f:id:kabacho23:20200903233300p:plain:w300

forEachメソッド

forEachメソッドは、配列の要素を順に取り出して繰り返し処理を行うメソッド。

配列名.forEach((アロー関数の引数名) => {
・・・処理
});


引数(ここでいうとforEach()の中身)に入っている関数はコールバック関数と呼ばれる。
また、forEachメソッドにはアロー関数も含まれており、配列の要素が順にアロー関数の引数に入るようになっている。

<例>

const foods = ["卵","アボガド","トマト"]; 

foods.forEach((food) => {
  console.log(food);  
});


結果 ↓
f:id:kabacho23:20200904064401p:plain:w80

findメソッド

コールバック関数内の処理部分にreturn 条件;を記載し、それに一致した最初の要素を配列から取り出すメソッド。

<例>

const foods = [
  {id: 1, name: "卵", price: 20},
  {id: 2, name: "アボガド", price: 100},
  {id: 3, name: "トマト", price: 80},
];

const foundFoods = foods.find((food) => {
  return food.id === 3;
});

console.log(foundFoods);


結果 ↓
f:id:kabacho23:20200904152656p:plain:w250



filterメソッド

コールバック関数内の処理部分にreturn 条件;を記載し、それに一致した要素を配列から取り出すメソッド。
find関数との相違点は一致する要素を全て取り出す点。

<例>

const foods = [
  {id:1,name:"卵",price:20},
  {id:2,name:"アボガド",price:100},
  {id:3,name:"トマト",price:80}
];

const UnderHundredPrice = foods.filter((food) => {
  return food.price < 100;
});

console.log(UnderHundredPrice);


結果 ↓
f:id:kabacho23:20200904154141p:plain:w250



mapメソッド


配列内の全ての要素に、コールバック関数内の戻り値で記載された処理を行い、新しい配列を作るメソッド。
<例>

const foods = [
  {from: "島根産", name: "卵"},
    {from: "メキシコ産", name: "アボカド"},
    {from: "熊本産", name: "トマト"},
];

const salesNames = foods.map((food) => {
  return food.from + food.name;  
}
);

console.log(salesNames);


結果 ↓
f:id:kabacho23:20200904155641p:plain:w400

<javascript ES6> this.変数名について

this.プロパティ名 = 値;
コンストラクタ内での使用する場合、インスタンスにプロパティと値を追加できる。 ・・・①

this.プトパティ名 メソッド内で使用すると、インスタンスの引数を入れることができる。 ・・・②

<例>

class Food{
 constructor(name,price){
  this.name = name; //constructor内のname(this.name)にインスタンスの引数で取得した値を代入①
  this.price = price;
 }

 shopGreeting(){
  console.log("いらっしゃいませ。");
 }
 info(){
  this.shopGreeting(); //同クラス内のメソッドを呼び出し
  console.log(`こちらは${this.name}です。`); //インスタンスの値を呼び出し②
  console.log(`${this.price}円です。`);
 }
}

const food = new Food("卵",20);
food.info();

<javascript ES6> ファイル間の関連付け

export(出力)について

 

クラス定義のあとで、下記の記載をするとそのクラスを他のファイルへ出力できるように設定できる。

 

class クラス名{

  ・・・

}

export default クラス名;

 

クラス名の部分を変数名や定数名で記載すれば、それらもexport可能。

 

 

 

import(読み込み)について

 

ファイルの冒頭で以下の記載をすることで、exportされている他クラスを読み込むことができる。

 

import クラス名 from "ファイル名";

 

 

 

 

デフォルトエクスポート

export default(デフォルトエクスポート)は、他ファイルにimportされるとexportされた情報が自動的にimportされるため、export時とimport時の名称が違っても問題ない。

exportした値やクラスが自動的にimportされてしまうため、1つのファイルにつき1つの値にしか使用できない。

もし2つ以上の情報をexport defaultで扱おうとすると以下のエラーが発生する。

 

SyntaxError: src/ファイル名: Only one default export allowed per module.

 

名前付きエクスポートとインポート

名前付きの場合{}で定数等の値を囲む。

 

export {定数等};

 

import {定数等} from "ファイル名";

 

複数の定数やクラスを指定するには、{}をカンマで区切る。

 

 

 

 

 

 

 

 

 

 

 

 

<javascript ES6> コンストラクタ

 コンストラクタは、javaと異なり、クラス名で表記せず、

constructor(){}で表記する。

 

コンストラクタの中で、生成されたインスタンスにプロパティと値を追加する時は下記のようにthisを使用する。

 

this.プロパティ = 値

 

例:

class Food{
 constructor(){
  this.name = "卵"; //プロパティと値を追加
  this.price = 20;
 }
}

 

const food = new Food(); //インスタンスの生成

console.log(`種類: ${food.name}`);
console.log(`金額: ${food.price}`);

 

結果

f:id:kabacho23:20200902215452p:plain
 

 

インスタンスごとに値を変えたい場合、constructor()の中に引数名を入れ、

インスタンス生成のnew クラス名()の中に引数に入れたい値を入れる。

 

例:

class Food {
 constructor(name,price) {
  this.name = name; //コンストラクタのnameに引数nameを代入
  this.price = price;
 }
}


const food = new Foodl("卵",20);

console.log(`名前: ${food.name}`);
console.log(`金額: ${food.price}`);

 

 

結果

f:id:kabacho23:20200902223153p:plain

 

 

イメージは下図のような感じ。

f:id:kabacho23:20200902223105p:plain

<javascript ES6> オブジェクトについて

値の更新

 

更新は以下のような式で行う。

 

定数名.プロパティ名 = 更新する値;

 

 

例:

const food = {name:"卵",price:20};
food.price = 40;
console.log(food.price);

 

 

 

 

 

配列での使用

 

配列にオブジェクトを組み込むことができる。

 

例:

const foods = [
 {name:"卵",price:20},
 {name:"りんご",price:120},
 {name:"アボカド",price:100},
]; //配列foodsをオブジェクトを組み込んで定義

for(let i = 0; i<foods.length;i++){
 console.log("******************************"); //仕切り

 const food = foods[i]; //定数foodを定義
 console.log(`商品は${food.name}です`);
 console.log(`${food.price}円です`);
}

 

出力される情報がない時(例だとpriceの入れ忘れなど)は、undefinedが表示されるので、ifを用いて分岐させること。

 

 

オブジェクトの中でのオブジェクト使用

 

オブジェクトの中でオブジェクトを使用することも可能。

 

例:

const food = {
 name:"卵",
 nutrients:{
  calories:90.6,
  totalCarbohydrate:7.38
 },
};

console.log(`${food.name}のカロリーは${food.nutrients.calories}g、炭水化物量は${food.nutrients.totalCarbohydrate}gです。`);

 

 

オブジェクトの中での配列使用

 

配列の中でオブジェクトを使用できるように、

オブジェクトの中で配列を使用することもできる。

 

例:

const food = {
 name:"卵",
 nutrients:{
  calories:90.6,
  totalCarbohydrate:7.38
 },
 cookingMenu:["スクランブルエッグ","茹で卵","オムレツ"]
};

 

console.log(`${food.name}のカロリーは${food.nutrients.calories}g、炭水化物量は${food.nutrients.totalCarbohydrate}gです。`);
console.log("*************************************************");


for(let i = 0;i<food.cookingMenu.length;i++){
 console.log(food.cookingMenu[i]);
}

 

<javascript ES6> 関数、アロー関数、引数、戻り値、オブジェクトへの組み込み

 

関数とアロー関数

 

関数の定義は以下のコードで行う。

 

const 定数名 = function(){

 処理

};

定数名();

 

アロー関数はES6から導入された書き方で、

function()について、

() =>という記載で省略できる。

上記の定義に当てはめると下記のようになる。

 

const 定数名 = () => {

 //処理

};

定数名();

 

定義名を定義名()と書くことで、関数内の処理を実行できる(=関数の呼び出し)。

 

例:

const hello = function(){
 console.log("hello world");
}

hello();

 

関数と引数

引数を受け取る関数は以下のように書く。

 

 

const 定数名 = (引数名) => {

 //処理

};

定数名(値);  //値が引数に代入される

 

例:

const hello = (country) => {

 console.log("hello");

 console.log(`私は${country}出身です`);

};

hello("アメリカ");

hello("イギリス");

 

関数と戻り値

戻り値とは、呼び出しもとで受け取る処理結果(=関数が戻り値を返す)のこと。

以下のイメージ。

 

f:id:kabacho23:20200901205120p:plain

 

const 定数名 = () => {

 return 値;

}

 

return記載後の関数内の処理は実行されないので注意。

 

例:

const check = (number) => {
 return number % 2 === 0;
};

 

if (check(223)) {
 console.log("2の倍数です");
} else {
 console.log("2の倍数ではありません");
}

 

例:最大値を出力

const number1 = 103;
const number2 = 72;
const number3 = 189;


const getMax = (a,b,c)=>{
 let max = a;
 if(max <= b){
  max = b;
 } else if(c>=max) {
  max = c;
 }
 return max;
}


console.log(`最大値は${getMax(number1,number2,number3)}です`);

 

 

関数を使用したオブジェクト

 

オブジェクトは配列と同じく、複数のデータをまとめて管理することができる。

 

配列:[値1,値2,値3]

オブジェクト:{プロパティ1:値1,プロパティ2:値2}

 

 

関数はオブジェクトの値の部分に入れて使用することができる。

 

const 定数名 = {

 プロパティ名:() => {

  //処理

 }

};

定数名.プロパティ名(); //関数の呼び出し

 

 

例:

const food = {
 name:"卵",
 price:20,
  shop:() => {
   console.log("いらっしゃいませ");
   console.log(`${food.name}は1つ${food.price}円です。`);
  }

};
food.shop();

<javascript ES6> 配列.length

配列変数.lengthで、配列の要素数を取得できる。

今回はhtml内にjsを埋め込んだ形の例。

(htmlでwebページに反映させるため、console.log()ではなく、document.write()を使用)

 

例:

<!DOCTYPE html>
<html lang="ja">
 <head>
  <meta charset="UTF-8">
  <title>Document</title>
 </head>
 <body>

  <script>
   const animals = ["dog","cat","rabbit"]

   for(let i = 0; animals.length>i;i++){

    document.write(animals[i]+ " ");
   }
  </script>


 </body>
</html>

 

 

→結果

forでanimals配列の配列数は3であるので、3回繰り返されて以下のようになる。

f:id:kabacho23:20200901005212p:plain

 

<javascript ES6> 繰り返しfor内での宣言について

javascriptの変数定義はlet、定数定義はconstで行われる。

javaに染まりすぎてletとかconstとか忘れてしまうのでリマインド 。

 

事前に変数定義をしていない場合、以下のような式になる。

 

for( let 変数名 = 変数;条件式;変数の更新 ){
  console.log(変数名);
}