『基礎からのMySQL』 西沢夢路著 (ソフトバンククリエイティブ)
から得たぜひ覚えたい個所を列挙した。 Part2
(p164) UPDATEコマンド
テーブルの特定のカラムを指定した値に変更する。書式は、
update テーブル名 set カラム名 = 設定する値 ; で、
一瞬にしてカラムの値が変更される。通常
where句 と共に使用される為、全レコードの特定カラムを
一気に変更することは少ないらしい。
テキストでは、 tb という既存のテーブルに、
①新しく 「bikou」 というカラムを追加して、
そのカラムに②「特記なし」という文字列を設定している。
① alter table tb add bikou varchar(100) ;
② update tb set bikou = '特記なし' ;
(p167) 条件に一致したレコードだけを修正
書式は、
update テーブル名 set カラム名 = 設定する値 where 条件 ;
テキストでは、 tb テーブルの uria が 100 以上のレコードの
bikou に 「優秀」 という文字列を設定している。
update tb set bikou = '優秀' whrer uria >= 100 ;
(p169) 売上下位3件の bikou フィールドに 「ガンバレ!」を設定
uria フィールドの値で、下位3件を抽出はどうする?
① uria フィールドを 「order by」で並べ替える。
ここでは小さい値から大きい値へ並べ替えられる(内部的に)。
② limit3 で最初の3件を抽出する(下位3件)。
update tb set bikou = 'ガンバレ!' order by uria limit 3 ;
(p171) 特定のフィールドを削除する。
テキストでは、tb テーブルの bikou フィールドを削除している。
書式は、 alter table テーブル名 drop フィールド名 ;
alter table tb drop bikou ; というコマンドを発行している。
(p171) 条件に一致したレコードをコピーする。
①条件に一致したレコードを抽出し、新しくテーブルを作成。
create table tb_A101 select * from tb
where bang like 'A101' ;
②条件に一致したレコードを抽出し、既存のテーブルに追加。
insert into 既存テーブル名 select * from tb
where bang like 'A101' ;
(p173) レコードを順番に並べてコピーする。
テキストでは、
① tb テーブルのレコードを uria フィールドの値を基準にして
降順に並べ替え(order by uria desc)、
②上位4件を抽出している(limit 4)。
③さらに、最上位のレコードを省いて、その代わりに
uria フィールドが 5番目に大きい レコードを上位4件に
加えている(offset 1 … 最上位レコードを1つ下のレコード
とする)。
④手順③までで抽出したレコードを新しいテーブルとして作成。
create table tb_2to5 select * from tb
order by uria desc limit 4 offset 1 ;
(p175) 全レコードを削除する(テーブルは残す)。
「削除」 といえば DELETE! と閃いた次の瞬間、DROP でも
良いのかなぁ? と 少し ”もやもや” している事に気付く。
テキストにも書いてある通り、DROP はテーブルを削除し、
DELETE は レコード全部を消去しても、空のテーブルは残る。
※updateコマンドよりも慎重に発行する事が求められる。
さて、特定のレコードを削除する場合の書式は、
delete from テーブル名 where 条件 ; で、
テキストでは、
delete from tb1k where tosi < 30 ; を発行している。
(tb1 と全く同じ tb1k というテーブルをあらかじめ作成しておく)
結果は、tb1kテーブル にレコードは 2件が残る。
(tosi が 30 未満のレコードは削除される)
(p177) テーブルをソートしてから、特定のレコードを削除する。
テキストでは、テーブル tb 同一内容のテーブル tb_copy が存在している事を前提にしているので、あらかじめ作成しておく。
以下の手順①,②で作成される 【仮想テーブル】 の内容を、
【実テーブル】である tb_copy から削除する。
① テーブル tb_copy の uria フィールドの値を基準に降順に
ソートする。
② limit 4 で 上位4件のレコードを抽出する。
結果は、6件のレコードだけが tb_copy に残る。
(p179) 期間でレコードを抽出する。
ここでは、【 now() - interval 5 year 】で、
現在より5年前を表している。
now() 関数を使わずに interval の使い方を試すことにした。
条件を 【 '2012' - interval 5 year】 としたら、エラーにはならず、Mysql は 「 Empty ○○○ 」 と返してくる。文法は正しいものと
思い、いろいろ試すも思うような結果が得られない。
結局 '2012' を 'current_timestamp' とする事で、期待通りの
結果が得られた。
それから、「~ interval 5 years 」 とするとこれはエラーに
なってしまう。英語に精通している小生としては(うそ)。
違和感を覚える。
MySQL ぜひ覚えたい 関数 式 句 などの覚書(Part1)へ
MySQL ぜひ覚えたい 関数 式 句 などの覚書(Part3)へ
情報処理再チャレンジブログ ホーム へ
から得たぜひ覚えたい個所を列挙した。 Part2
(p164) UPDATEコマンド
テーブルの特定のカラムを指定した値に変更する。書式は、
update テーブル名 set カラム名 = 設定する値 ; で、
一瞬にしてカラムの値が変更される。通常
where句 と共に使用される為、全レコードの特定カラムを
一気に変更することは少ないらしい。
テキストでは、 tb という既存のテーブルに、
①新しく 「bikou」 というカラムを追加して、
そのカラムに②「特記なし」という文字列を設定している。
① alter table tb add bikou varchar(100) ;
② update tb set bikou = '特記なし' ;
(p167) 条件に一致したレコードだけを修正
書式は、
update テーブル名 set カラム名 = 設定する値 where 条件 ;
テキストでは、 tb テーブルの uria が 100 以上のレコードの
bikou に 「優秀」 という文字列を設定している。
update tb set bikou = '優秀' whrer uria >= 100 ;
(p169) 売上下位3件の bikou フィールドに 「ガンバレ!」を設定
uria フィールドの値で、下位3件を抽出はどうする?
① uria フィールドを 「order by」で並べ替える。
ここでは小さい値から大きい値へ並べ替えられる(内部的に)。
② limit3 で最初の3件を抽出する(下位3件)。
update tb set bikou = 'ガンバレ!' order by uria limit 3 ;
小生の感覚では、where句 で抽出したくなり、当該コマンドは
しっくりこない。経験を積むことで自然と理解が深まり、違和感が
解消されることを期待し先に進む事とする。
(p171) 特定のフィールドを削除する。
テキストでは、tb テーブルの bikou フィールドを削除している。
書式は、 alter table テーブル名 drop フィールド名 ;
alter table tb drop bikou ; というコマンドを発行している。
(p171) 条件に一致したレコードをコピーする。
①条件に一致したレコードを抽出し、新しくテーブルを作成。
create table tb_A101 select * from tb
where bang like 'A101' ;
②条件に一致したレコードを抽出し、既存のテーブルに追加。
insert into 既存テーブル名 select * from tb
where bang like 'A101' ;
(p173) レコードを順番に並べてコピーする。
テキストでは、
① tb テーブルのレコードを uria フィールドの値を基準にして
降順に並べ替え(order by uria desc)、
②上位4件を抽出している(limit 4)。
③さらに、最上位のレコードを省いて、その代わりに
uria フィールドが 5番目に大きい レコードを上位4件に
加えている(offset 1 … 最上位レコードを1つ下のレコード
とする)。
④手順③までで抽出したレコードを新しいテーブルとして作成。
create table tb_2to5 select * from tb
order by uria desc limit 4 offset 1 ;
(p175) 全レコードを削除する(テーブルは残す)。
「削除」 といえば DELETE! と閃いた次の瞬間、DROP でも
良いのかなぁ? と 少し ”もやもや” している事に気付く。
テキストにも書いてある通り、DROP はテーブルを削除し、
DELETE は レコード全部を消去しても、空のテーブルは残る。
※updateコマンドよりも慎重に発行する事が求められる。
さて、特定のレコードを削除する場合の書式は、
delete from テーブル名 where 条件 ; で、
テキストでは、
delete from tb1k where tosi < 30 ; を発行している。
(tb1 と全く同じ tb1k というテーブルをあらかじめ作成しておく)
結果は、tb1kテーブル にレコードは 2件が残る。
(tosi が 30 未満のレコードは削除される)
(p177) テーブルをソートしてから、特定のレコードを削除する。
テキストでは、テーブル tb 同一内容のテーブル tb_copy が存在している事を前提にしているので、あらかじめ作成しておく。
以下の手順①,②で作成される 【仮想テーブル】 の内容を、
【実テーブル】である tb_copy から削除する。
① テーブル tb_copy の uria フィールドの値を基準に降順に
ソートする。
② limit 4 で 上位4件のレコードを抽出する。
結果は、6件のレコードだけが tb_copy に残る。
(p179) 期間でレコードを抽出する。
ここでは、【 now() - interval 5 year 】で、
現在より5年前を表している。
now() 関数を使わずに interval の使い方を試すことにした。
条件を 【 '2012' - interval 5 year】 としたら、エラーにはならず、Mysql は 「 Empty ○○○ 」 と返してくる。文法は正しいものと
思い、いろいろ試すも思うような結果が得られない。
結局 '2012' を 'current_timestamp' とする事で、期待通りの
結果が得られた。
それから、「~ interval 5 years 」 とするとこれはエラーに
なってしまう。英語に精通している小生としては(うそ)。
違和感を覚える。
MySQL ぜひ覚えたい 関数 式 句 などの覚書(Part1)へ
MySQL ぜひ覚えたい 関数 式 句 などの覚書(Part3)へ
情報処理再チャレンジブログ ホーム へ
0 件のコメント:
コメントを投稿