前回に引き続きドットインストールで学んどことを復習がてらアウトプットしていきます。
データベースからの条件つきでデータ抽出
○ まず外部ファイルにテーブル作成&レコード作成を記述したファイルを用意します。
myapp.sql:
drop table if exists users; -- usersテーブルがすでにあれば消去
create table users (
id int unsigned primary key auto_increment,
name varchar(20),
score float
);
insert into users (name, score) values ('taguchi', 5.8);
insert into users (name, score) values ('fkoji', 8.2);
insert into users (name, score) values ('dotinstall', 6.1);
insert into users (name, score) values ('Tanaka', 4.2);
insert into users (name, score) values ('yamada', null);
insert into users (name, score) values ('tashiro', 7.9);
次に上記ファイルにデーベース操作のコマンドを書いていきます。
○ usersテーブルの全てのデータを取得
select * from users;
○ 抽出するカラムを指定
select id, name from users;
○ 条件付きで抽出 - where -
select * from users where score > 6; (scoreが6より大きいレコードを取得)
select * from users where score >= 3.0 and score <= 6.0; (scoreが6以下レ3以上のレコードを取得)
select * from users where score between 3 and 6; (指定条件の間は between で代用可能)
select * from users where name = 'taguchi' or name = 'fkoji'; (条件にした名前を含むレコードを取得)
select * from users where name in ('taguchi', 'fkoji'); (指定条件を含むは in で代用可能)
○ ワイルドカードを使用したデータ取得
select * from users where name like 't%'; (nameがtから始まるレコードを取得)
select * from users where name like '%t%' (nameにtを含むレコードを取得)
select * from users where name like binary 'T%' (binaryでより厳密に比較。nameが大文字のTで始まるレコードを取得)
select * from users where name like '______' (アンダーバーの数でnameが指定の文字数のレコード取得)
select * from users where name like '_a%' (名前の2文字目がaのレコードを取得)
○ データの並び替え
select * from users order by score; (scoreの昇順で並び替え)
select * from users order by score desc; (scoreの降順で並び替え)
select * from users limit 3; (limitで上から3つのレコードのみ取得)
select * from users order by score desc limit 3; (降順で上から3つのレコードのみ取得)
○ レコードの更新と削除
update users set score = 5.9 where id = 1; (idが1のレコードのscoreを5.9に更新)
update users set name = 'sasaki' , score = 5.9 where id = 1; (一度に複数のカラム更新も可能)
delete from users where score < 5; (scoreが5未満のレコードを削除)
○ 数値の計算
update users set score = score * 1.2; (scoreの値を1.2倍する)
select round(5.355); (四捨五入)
select round(5.355,1); (小数点1以下で四捨五入)
select floor(5.833); (切り捨て)
select ceil(5.238); (切り上げ)
elect rand(); (ランダムな値を返す)
select * from users order by rand() limit 1; (乱数で並び替え)
○ 文字列の演算
select length('Hello'); (文字列の長さ)
select substr('Hello',2); (2文字目から全て表示)
select substr('Hello',2,3); (2文字目から3文字を抽出)
select upper('hello'); (大文字に変換)
select lower('HELLO'); (小文字に変換)
select concat('Hello','World'); (文字の連結)
select length(name), name from users order by length(name); (名前の長さで並び替え)
select length(name) as len, name from users order by len; (asでカラム名置き換え)
今日はこの辺で