ホームページ データベース mysql チュートリアル SQL也疯狂:MySQL绘制简单几何图形(2013-04-12)

SQL也疯狂:MySQL绘制简单几何图形(2013-04-12)

Jun 07, 2016 pm 02:57 PM
mysql sql ジオメトリ 単純 描く

用SQL SELECT 语句而非存储过程来画基本几何图形,以加深对 SELECT 语句的理解。因为 SELECT 语句隐含了一个或多个循环,看上去只是一个语句,其实包含了一个完整的程序所包含的顺序、分支、循环,因此不必用存储过程就能实现一般的程序的功能 需要有一个表

  • 用SQL SELECT 语句而非存储过程来画基本几何图形,以加深对 SELECT 语句的理解。因为 SELECT 语句隐含了一个或多个循环,看上去只是一个语句,其实包含了一个完整的程序所包含的顺序、分支、循环,因此不必用存储过程就能实现一般的程序的功能
  • 需要有一个表有 100 行以上的数据,数据是什么没关系,因为下面的语句已经避开使用数据库记录中的数据了。如果没有现成的就使用如下代码生成一个吧: 语句
    DELIMITER ;;
    
    DROP PROCEDURE IF EXISTS test_num;;
    
    CREATE PROCEDURE test_num(MAX_COUNT INTEGER)
    BEGIN
    	DECLARE i INTEGER;
    	SET i = 0;
    
    	DROP TABLE IF EXISTS number;
    	CREATE TABLE number(num INT(10), PRIMARY KEY (num));
    
    	WHILE i < MAX_COUNT DO
    		INSERT INTO number(num) VALUES (i);
    		SET i = i + 1;
    	END WHILE;
    END;;
    
    DELIMITER ;
    
    CALL test_num(100);
    
    ログイン後にコピー
  1. 画横线 语句
    SET @w := 24;  # 宽 <span>SELECT</span> repeat(<span>"*"</span>, @w) AS line;
    
    ログイン後にコピー
    结果
    +--------------------------+
    | line                     |
    +--------------------------+
    | ************************ |
    +--------------------------+
    
    ログイン後にコピー
  2. 画竖线 语句
    SET @h := 12;  # 高
    SET @y := 0;   # y 座标 <span>SELECT</span> <span>"*"</span> AS line <span>FROM</span> number <span>WHERE</span> @y < @h and @y := @y + 1;
    
    ログイン後にコピー
    结果
    +------+
    | line |
    +------+
    | *    |
    | *    |
    | *    |
    | *    |
    | *    |
    | *    |
    | *    |
    | *    |
    | *    |
    | *    |
    | *    |
    | *    |
    +------+
    
    ログイン後にコピー
  3. 画斜线 语句
    SET @h := 12;   # 高
    SET @y := 0;    # y 座标
    SET @rate := 2; # x y 座标比例(斜率倒数) <span>SELECT</span> lpad(<span>"*"</span>, @y * @rate, <span>" "</span>) AS line <span>FROM</span> number <span>WHERE</span> @y < @h and @y := @y + 1;
    
    ログイン後にコピー
    结果
    +--------------------------+
    | line                     |
    +--------------------------+
    |  *                       |
    |    *                     |
    |      *                   |
    |        *                 |
    |          *               |
    |            *             |
    |              *           |
    |                *         |
    |                  *       |
    |                    *     |
    |                      *   |
    |                        * |
    +--------------------------+
    
    ログイン後にコピー
  4. 画XX 语句
    SET @h := 12;           # 高
    SET @w := 24;           # 宽
    SET @y := 0;            # y 座标
    SET @rate := @w / @h;   # x y 座标比例(斜率倒数) <span> SELECT</span> X <span>FROM</span> ( <span> SELECT</span> concat(lpad(<span>"*"</span>, @y * @rate - 1, <span>" "</span>), repeat(<span>" "</span>, @w - 2 * @y * @rate - 2 + 1), IF(@w - 2 * @y * @rate - 2 + 1 <= 0, <span>"",  "</span>*")) AS X <span>FROM</span> number <span>WHERE</span> @y < @h / 2 and @y := @y + 1
    
        UNION ALL <span> SELECT</span> concat(lpad(<span>"*"</span>, @y * @rate - 1, <span>" "</span>), repeat(<span>" "</span>, @w - 2 * @y * @rate - 2 + 1), IF(@w - 2 * @y * @rate - 2 + 1 <= 0, <span>"",  "</span>*")) AS X <span>FROM</span> number <span>WHERE</span> @y < @h and (@y := @y - 1) > 0
    ) AS Temp;
    
    ログイン後にコピー
  5. 结果
    +-----------------------+
    | X                     |
    +-----------------------+
    | *                   * |
    |   *               *   |
    |     *           *     |
    |       *       *       |
    |         *   *         |
    |           *           |
    |         *   *         |
    |       *       *       |
    |     *           *     |
    |   *               *   |
    | *                   * |
    +-----------------------+
    
    ログイン後にコピー
  6. 画矩形 语句
    SET @x := 0;    # x 座标
    SET @rate := 2; # x y 轴长比例,调整显示效果
    SET @h := 12;   # 长
    SET @w := 12;   # 宽 <span> SELECT</span> rect <span>FROM</span> ( <span>SELECT</span> repeat(<span>"*"</span>, @w * @rate) AS rect 
    
        UNION ALL <span> SELECT</span> concat(<span>"*"</span>, repeat(<span>" "</span>, @w * @rate - 2), <span>"*"</span>) <span>FROM</span> number <span>WHERE</span> @x < @h and @x := @x + 1
    
        UNION ALL <span>SELECT</span> repeat(<span>"*"</span>, @w * @rate)
    ) AS Temp;
    
    ログイン後にコピー

  7. 结果
    +--------------------------+
    | rect                     |
    +--------------------------+
    | ************************ |
    | *                      * |
    | *                      * |
    | *                      * |
    | *                      * |
    | *                      * |
    | *                      * |
    | *                      * |
    | *                      * |
    | *                      * |
    | *                      * |
    | *                      * |
    | *                      * |
    | ************************ |
    +--------------------------+
    
    ログイン後にコピー
  8. 把XX用矩形框起来 语句
    SET @h := 12;           # 高
    SET @w := 24;           # 宽
    SET @y := 0;            # y 座标
    SET @rate := @w / @h;   # x y 座标比例(斜率倒数) <span> SELECT</span> rectXX <span>FROM</span> ( <span>SELECT</span> repeat(<span>"*"</span>, (@w - 2 * 2)) AS rectXX
    
        UNION ALL <span>SELECT</span> concat(<span>"*"</span>, lpad(<span>"*"</span>, @y * @rate - 1, <span>" "</span>), repeat(<span>" "</span>, (@w - 2 * 2) - 2 * @y * @rate - 2 + 1), IF((@w - 2 * 2) - 2 * @y * @rate - 2 + 1 <= 0, <span>"",  "</span>*<span>"), repeat("</span> <span>", @y * @rate - 1), "</span>*") <span>FROM</span> number <span>WHERE</span> @y < (@h - 2) / 2 and @y := @y + 1
    
        UNION ALL <span> SELECT</span> concat(<span>"*"</span>, lpad(<span>"*"</span>, @y * @rate - 1, <span>" "</span>), repeat(<span>" "</span>, (@w - 2 * 2) - 2 * @y * @rate - 2 + 1), IF((@w - 2 * 2) - 2 * @y * @rate - 2 + 1 <= 0, <span>"",  "</span>*<span>"), repeat("</span> <span>", @y * @rate - 1), "</span>*") <span>FROM</span> number <span>WHERE</span> @y < (@h - 2) and (@y := @y - 1) > 0
    
        UNION ALL <span>SELECT</span> repeat(<span>"*"</span>, (@w - 2 * 2)) AS rect
    ) AS Temp;
    
    ログイン後にコピー
  9. 结果
    +----------------------+
    | rectXX               |
    +----------------------+
    | ******************** |
    | **               * * |
    | *  *           *   * |
    | *    *       *     * |
    | *      *   *       * |
    | *        *         * |
    | *      *   *       * |
    | *    *       *     * |
    | *  *           *   * |
    | **               * * |
    | ******************** |
    +----------------------+
    
    ログイン後にコピー
  10. 画等腰三角形 语句
    SET @h := 10;       # 高
    SET @w := 10;       # 底
    SET @x := 0;        # x 座标
    SET @y := 0;        # y 座标
    SET @k := @w/@h/2;  # 1/2底高比例,即边的斜率的倒数
    SET @rate := 2;     # x y 轴比例,调整显示效果 <span>SELECT</span> concat(repeat(<span>" "</span>, @rate * (@w / 2 - (@y - 1) * @k) - 1), <span>"*"</span>, repeat(IF(@y = @h, <span>"*"</span>, <span>" "</span>), @rate * (2 * (@y - 1) * @k) - 1), IF(@y = 1, <span>"", "</span>*")) AS triangle <span>FROM</span> number <span> WHERE</span> (@y := @y + 1) AND @y <= @h;
    
    ログイン後にコピー
    结果
    +---------------------+
    | triangle            |
    +---------------------+
    |          *          |
    |         * *         |
    |        *   *        |
    |       *     *       |
    |      *       *      |
    |     *         *     |
    |    *           *    |
    |   *             *   |
    |  *               *  |
    | ******************* |
    +---------------------+
    
    ログイン後にコピー
  11. 画正弦曲线 语句
    SET @x := 0;        # x 座标
    SET @offset := 15;  # y 偏移
    SET @am := 15;      # 振幅
    SET @rate := 10;    # x y 轴比例(影响波长),调整显示效果
    SET @len := 30;     # 长度 <span> SELECT</span> lpad(<span>"*"</span>, round(@am * sin(@x * 3.14 / @rate) + @offset) + 1, ' ') AS 'sin' <span>FROM</span> number <span>WHERE</span> (@x := @x + 1) < @len;
    
    ログイン後にコピー
    结果
    +---------------------------------+
    | sin                             |
    +---------------------------------+
    |                     *           |
    |                         *       |
    |                            *    |
    |                              *  |
    |                               * |
    |                              *  |
    |                            *    |
    |                         *       |
    |                     *           |
    |                *                |
    |           *                     |
    |       *                         |
    |    *                            |
    |  *                              |
    | *                               |
    |  *                              |
    |    *                            |
    |       *                         |
    |           *                     |
    |                *                |
    |                     *           |
    |                         *       |
    |                            *    |
    |                              *  |
    |                               * |
    |                              *  |
    |                            *    |
    |                         *       |
    |                     *           |
    +---------------------------------+
    
    ログイン後にコピー
  12. 画圆 语句
    SET @r := 12;           # 半径
    SET @d := 2 * (@r + 1); # 图形范围,即直径(避免减到0,偏移 1)
    SET @x := 0;            # x 座标
    SET @y := @r + 1;       # y 座标
    SET @rate := 2;         # x y 轴长比例,调整显示效果 <span> SELECT</span> circle <span>FROM</span> ( <span>SELECT</span> @x := round(@rate * sqrt(pow(@r, 2) - pow(@y, 2))) + 1, concat(lpad(<span>"*"</span>, @d - @x, <span>" "</span>), lpad(<span>"*"</span>, 2 * @x, <span>" "</span>)) AS circle <span>FROM</span> number <span>WHERE</span> (@y := @y - 1) > 0 AND @y <= @r
        UNION ALL <span>SELECT</span> @x := round(@rate * sqrt(pow(@r, 2) - pow(@y, 2))) + 1, concat(lpad(<span>"*"</span>, @d - @x, <span>" "</span>), lpad(<span>"*"</span>, 2 * @x, <span>" "</span>)) AS circle <span>FROM</span> number <span>WHERE</span> (@y := @y + 1) > 0 AND @y <= @r
    ) AS Temp;
    
    ログイン後にコピー
    结果
    +-----------------------------------------------------+
    | circle                                              |
    +-----------------------------------------------------+
    |                         * *                         |
    |               *                     *               |
    |            *                           *            |
    |         *                                 *         |
    |       *                                     *       |
    |      *                                       *      |
    |    *                                           *    |
    |   *                                             *   |
    |  *                                               *  |
    |  *                                               *  |
    | *                                                 * |
    | *                                                 * |
    | *                                                 * |
    |  *                                               *  |
    |  *                                               *  |
    |   *                                             *   |
    |    *                                           *    |
    |      *                                       *      |
    |       *                                     *       |
    |         *                                 *         |
    |            *                           *            |
    |               *                     *               |
    |                         * *                         |
    +-----------------------------------------------------+
    
    ログイン後にコピー
  • UNION 后再用一个 SELECT 仅是包装一下,看起来像一个整体,不那么松散
  • 回头想想,上面用了 UNION 的都可以用 IF 来整合在一个语句里,不过会显得很臃肿
  • 亚丹
    seesea2517#gmail#com
    http://seesea.blog.chinaunix.net
    http://blog.csdn.net/nicenight
    http://my.oschina.net/seesea2517
<无>
x
ログイン後にコピー
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

MySQL:簡単な学習のためのシンプルな概念 MySQL:簡単な学習のためのシンプルな概念 Apr 10, 2025 am 09:29 AM

MySQLは、オープンソースのリレーショナルデータベース管理システムです。 1)データベースとテーブルの作成:createdatabaseおよびcreateTableコマンドを使用します。 2)基本操作:挿入、更新、削除、選択。 3)高度な操作:参加、サブクエリ、トランザクション処理。 4)デバッグスキル:構文、データ型、およびアクセス許可を確認します。 5)最適化の提案:インデックスを使用し、選択*を避け、トランザクションを使用します。

phpmyadminを開く方法 phpmyadminを開く方法 Apr 10, 2025 pm 10:51 PM

次の手順でphpmyadminを開くことができます。1。ウェブサイトコントロールパネルにログインします。 2。phpmyadminアイコンを見つけてクリックします。 3。MySQL資格情報を入力します。 4.「ログイン」をクリックします。

MySQL:世界で最も人気のあるデータベースの紹介 MySQL:世界で最も人気のあるデータベースの紹介 Apr 12, 2025 am 12:18 AM

MySQLはオープンソースのリレーショナルデータベース管理システムであり、主にデータを迅速かつ確実に保存および取得するために使用されます。その実用的な原則には、クライアントリクエスト、クエリ解像度、クエリの実行、返品結果が含まれます。使用法の例には、テーブルの作成、データの挿入とクエリ、および参加操作などの高度な機能が含まれます。一般的なエラーには、SQL構文、データ型、およびアクセス許可、および最適化の提案には、インデックスの使用、最適化されたクエリ、およびテーブルの分割が含まれます。

単一のスレッドレディスの使用方法 単一のスレッドレディスの使用方法 Apr 10, 2025 pm 07:12 PM

Redisは、単一のスレッドアーキテクチャを使用して、高性能、シンプルさ、一貫性を提供します。 I/Oマルチプレックス、イベントループ、ノンブロッキングI/O、共有メモリを使用して同時性を向上させますが、並行性の制限、単一の障害、および書き込み集約型のワークロードには適していません。

なぜMySQLを使用するのですか?利点と利点 なぜMySQLを使用するのですか?利点と利点 Apr 12, 2025 am 12:17 AM

MySQLは、そのパフォーマンス、信頼性、使いやすさ、コミュニティサポートに選択されています。 1.MYSQLは、複数のデータ型と高度なクエリ操作をサポートし、効率的なデータストレージおよび検索機能を提供します。 2.クライアントサーバーアーキテクチャと複数のストレージエンジンを採用して、トランザクションとクエリの最適化をサポートします。 3.使いやすく、さまざまなオペレーティングシステムとプログラミング言語をサポートしています。 4.強力なコミュニティサポートを提供し、豊富なリソースとソリューションを提供します。

MySQLおよびSQL:開発者にとって不可欠なスキル MySQLおよびSQL:開発者にとって不可欠なスキル Apr 10, 2025 am 09:30 AM

MySQLとSQLは、開発者にとって不可欠なスキルです。 1.MYSQLはオープンソースのリレーショナルデータベース管理システムであり、SQLはデータベースの管理と操作に使用される標準言語です。 2.MYSQLは、効率的なデータストレージと検索機能を介して複数のストレージエンジンをサポートし、SQLは簡単なステートメントを通じて複雑なデータ操作を完了します。 3.使用の例には、条件によるフィルタリングやソートなどの基本的なクエリと高度なクエリが含まれます。 4.一般的なエラーには、SQLステートメントをチェックして説明コマンドを使用することで最適化できる構文エラーとパフォーマンスの問題が含まれます。 5.パフォーマンス最適化手法には、インデックスの使用、フルテーブルスキャンの回避、参加操作の最適化、コードの読み取り可能性の向上が含まれます。

SQLが行を削除した後にデータを回復する方法 SQLが行を削除した後にデータを回復する方法 Apr 09, 2025 pm 12:21 PM

データベースから直接削除された行を直接回復することは、バックアップまたはトランザクションロールバックメカニズムがない限り、通常不可能です。キーポイント:トランザクションロールバック:トランザクションがデータの回復にコミットする前にロールバックを実行します。バックアップ:データベースの定期的なバックアップを使用して、データをすばやく復元できます。データベーススナップショット:データベースの読み取り専用コピーを作成し、データが誤って削除された後にデータを復元できます。削除ステートメントを使用して注意してください:誤って削除されないように条件を慎重に確認してください。 WHERE句を使用します:削除するデータを明示的に指定します。テスト環境を使用:削除操作を実行する前にテストします。

Amazon AthenaでAWS接着クローラーの使用方法 Amazon AthenaでAWS接着クローラーの使用方法 Apr 09, 2025 pm 03:09 PM

データの専門家として、さまざまなソースから大量のデータを処理する必要があります。これは、データ管理と分析に課題をもたらす可能性があります。幸いなことに、AWS GlueとAmazon Athenaの2つのAWSサービスが役立ちます。

See all articles