SQL

A collection of 5 posts
【SQL】3値論理(True/False/Unknown?)
IT

【SQL】3値論理(True/False/Unknown?)

SQLには、ture, false だけでなく、unknownを含む3つの真理値があります。 なぜ、unknownが含まれるかという理由については、リレーショナルデータベースにNULLが存在するからです。NULLは、そこに値がないことを意味する記号であり、値ではありません。 値ではないので、下記の条件式は比較ができず、すべてunknownとなります。 1 = NULL 1 <> NULL 1 > NULL 1 < NULL NULL = NULL ... 次に、true、false、unkownの力関係は下記のとおりです。 【ANDの場合】 false > unknown > true 【 ORの場合】 true > unknown > false したがって、真理表は下記のとおりになります。 ANDtureunknownfalse truetrueunknownfalse unknownunknownunknownfalse falsefalsefalsefalse
1 min read
【SQL】CASE式まとめ 01
IT

【SQL】CASE式まとめ 01

前提 * 「達人に学ぶSQL徹底指南書 第2版 ミック著 翔泳社」を自分用にまとめたものです。 * 使用するデータは、MySQL公式のemployeesのデータを使用しています。 【SQL】MySQL(MariaDB)を使ったSQL学習用のサンプルデータベースの準備 CASE式概要 * CASE式を使いこなせるかが、初級者と中級者の分かれ目 * CASE式はある列の値を別の値に読み替えているだけ * 他のSQLツール(集約関数等)と組み合わせることで威力を発揮する * やっかいなバグを防ぐために、ELSE句を必ず書く(ELSE句を省略するとELSE NULL扱いとなる) CASE式の演習 演習1:単純CASE式と検索CASE式 課題:employeesテーブルを使って下記のデータを表示してください。 * 表示データ * emp_no * first_name * last_name * gender Mは「Mail」、Fは「Femail」とCASE式を使って表示 解答:CASE
4 min read
【SQL】MySQL(MariaDB)を使ったSQL学習用のサンプルデータベースの準備
IT

【SQL】MySQL(MariaDB)を使ったSQL学習用のサンプルデータベースの準備

概要 SQLの学習に際して最初に困るのが、サンプルデータの準備ではないでしょうか。 ここでは、MySQLが公式で準備している「Employees」のサンプルデータベースの導入方法を取り上げます。 「Employees」は6つのテーブルからなり、合計約400万レコードにも及ぶ大きなサンプルです。 従業員、部署、部署所属履歴などを含み、実際の業務構造に近いデータを使って、大規模データの扱いや複雑なJOINの学習も行うことが可能です。 テーブル構造については、下記のサイトを参照してください。 https://www3.ntu.edu.sg/home/ehchua/programming/sql/SampleDatabases.html 導入手順 1. MariaDBの準備 $ sudo apt update $ sudo apt install mariadb-client mariadb-server -y 2. サンプルデータの入手 MySQL公式のGitHubからダウンロードします。 https://github.com/datacharme
2 min read
【セキュリティ】SQLインジェクションを通じてOSコマンドインジェクションをしてみる
IT

【セキュリティ】SQLインジェクションを通じてOSコマンドインジェクションをしてみる

前回の【セキュリティ】SQLインジェクションを実験してみるで作成したWebサイトを使って、OSコマンドインジェクションを試みたいと思います。 1. 脆弱性の設定 まずは、脆弱性を作ります。 DBの脆弱性の設定 DBのユーザーsectestにFILE権限を付与しておきます。 DBの管理者権限で下記を実行します。 MariaDB [(none)]> GRANT FILE ON . TO 'sectest'@'localhost'; Query OK, 0 rows affected (0.007 sec) MariaDB [(none)]> FLUSH PRIVILEGES; Query OK, 0 rows affected (0.001 sec) ディレクトリの脆弱性の設定 MariaDBからファイルの作成が可能な/var/www/html/
2 min read
【セキュリティ】SQLインジェクションを実験してみる
IT

【セキュリティ】SQLインジェクションを実験してみる

今回は、IPA(情報処理推進機構)の「安全なウェブサイトの作り方」のはじめに登場するSQLインジェクションについて、実際にWEBサイトを構築して実験してみたいと思います。 1. DBの作成 まずは、Webページからアクセス可能なデータベースsectestを作成します。 今回はMariaDBを使用しています。 MariaDB [(none)]> create database if not exists sectest; //DB sectestを作成 Query OK, 1 row affected (0.000 sec) MariaDB [(none)]> use sectest; //DB sectestを選択 Database changed MariaDB [sectest]> create table users ( -> id int
3 min read