目次
1. 列の最大値
MySQL ユーザー変数をクリアして、クライアント側の一時変数に保存せずに結果を記録できます。
MySQL では、InnoDB テーブルは外部キーワード制約のチェックをサポートしています。
ホームページ データベース mysql チュートリアル MySQL 入門チュートリアル 7 - 一般的なデータベース クエリの例

MySQL 入門チュートリアル 7 - 一般的なデータベース クエリの例

Feb 23, 2017 am 11:44 AM
mysql データベースクエリ

ここでは、MySQL に関するいくつかの一般的な問題を解決する方法を学ぶためのいくつかの例を示します。

いくつかの例では、データベース テーブル「shop」は、特定の販売者 (ディーラー) の各商品 (商品番号) の価格を保存するために使用されます。各販売者が各品目に固定価格を持っていると仮定すると、(品目、販売者) がレコードの主キーになります。

コマンドラインツールmysqlを起動し、データベース

shell> mysql your-database-name
ログイン後にコピー

を選択します(ほとんどのMySQLでは、テストデータベースを使用できます)。

次のステートメントを使用してサンプル テーブルを作成できます:

mysql> CREATE TABLE shop (     -> article INT(4) UNSIGNED ZEROFILL DEFAULT '0000' NOT NULL,     -> dealer  CHAR(20)                 DEFAULT ''     NOT NULL,     -> price   DOUBLE(16,2)             DEFAULT '0.00' NOT NULL,     -> PRIMARY KEY(article, dealer)); mysql> INSERT INTO shop VALUES     -> (1,'A',3.45),(1,'B',3.99),(2,'A',10.99),(3,'B',1.45),     -> (3,'C',1.69),(3,'D',1.25),(4,'D',19.95);
ログイン後にコピー

ステートメントを実行すると、テーブルには次の内容が含まれます:

mysql> SELECT * FROM shop; +---------+--------+-------+
| article | dealer | price |
+---------+--------+-------+
|    0001 | A      |  3.45 |
|    0001 | B      |  3.99 |
|    0002 | A      | 10.99 |
|    0003 | B      |  1.45 |
|    0003 | C      |  1.69 |
|    0003 | D      |  1.25 |
|    0004 | D      | 19.95 |
+---------+--------+-------+
ログイン後にコピー

1. 列の最大値

"最大の項目番号は何ですか?"

2. 所有済み 特定の列の最大値を持つ行

タスク: 最も高価なアイテムの番号、販売者、および価格を見つけます。 これはサブクエリを使用すると簡単に実行できます:

SELECT MAX(article) AS article FROM shop;

+---------+
| article |
+---------+
|       4 |
+---------+
ログイン後にコピー

別の解決策は、すべての行を価格で降順に並べ替え、

MySQL固有の LIMIT 句を使用して最初の行のみを取得することです:

SELECT article, dealer, price
FROM   shop
WHERE  price=(SELECT MAX(price) FROM shop);
ログイン後にコピー

注: 複数の行がある場合items 最も高価なアイテム (例: それぞれの価格 19.95)、LIMIT ソリューションではそのうちの 1 つだけが表示されます。 3. 列の最大値: グループ別

タスク: 各アイテムの最大価格はいくらですか?

SELECT article, dealer, price
FROM shop
ORDER BY price DESC
LIMIT 1;
ログイン後にコピー
4. グループ間の特定のフィールドの最大値を持つ行

タスク: 各アイテムについて、最も高価なアイテムのディーラーを見つけます。

この問題は、次のようなサブクエリで解決できます:

SELECT article, MAX(price) AS price
FROM   shop
GROUP BY article

+---------+-------+
| article | price |
+---------+-------+
|    0001 |  3.99 |
|    0002 | 10.99 |
|    0003 |  1.69 |
|    0004 | 19.95 |
+---------+-------+
ログイン後にコピー

5. ユーザー変数の使用

MySQL ユーザー変数をクリアして、クライアント側の一時変数に保存せずに結果を記録できます。

たとえば、最高価格または最低価格のアイテムを見つける方法は次のとおりです:

SELECT article, dealer, price
FROM   shop s1
WHERE  price=(SELECT MAX(s2.price)
              FROM shop s2
              WHERE s1.article = s2.article);
ログイン後にコピー

6. 外部キーの使用

MySQL では、InnoDB テーブルは外部キーワード制約のチェックをサポートしています。

2 つのテーブルを結合する場合のみ、外部キーワードは必要ありません。 InnoDB タイプ以外のテーブルの場合、REFERENCES

tbl_name

(col_name) 句を使用して列を定義するときに外部キーワードを使用できます。この句は、そのことを思い出させるためのメモまたはコメントとしてのみ使用されます。現在定義中 この列は別のテーブルの列を指しています。 このステートメントを実行するときは、次のことを実装することが重要です: · MySQL は、定義しているテーブル内の行に対するアクションに応じて行を削除するなど、テーブル tbl_name

内のアクションを実行しません。この構文は ON DELETE または ON UPDATE 動作を引き起こしません (REFERENCES 句に ON DELETE 句または ON UPDATE 句を書いた場合、それは無視されます)。

· この構文は column

を作成しますが、インデックスやキーワードは作成されません。

· この構文を使用して InnoDB テーブルを定義すると、エラーが発生します。

次のように結合列として作成された列を使用できます:

mysql> SELECT @min_price:=MIN(price),@max_price:=MAX(price) FROM shop; mysql> SELECT * FROM shop WHERE price=@min_price OR price=@max_price; +---------+--------+-------+
| article | dealer | price |
+---------+--------+-------+
|    0003 | D      |  1.25 |
|    0004 | D      | 19.95 |
+---------+--------+-------+
ログイン後にコピー
CREATE TABLE person (
    id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
    name CHAR(60) NOT NULL,
    PRIMARY KEY (id)
);

CREATE TABLE shirt (
    id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
    style ENUM('t-shirt', 'polo', 'dress') NOT NULL,
    color ENUM('red', 'blue', 'orange', 'white', 'black') NOT NULL,
    owner SMALLINT UNSIGNED NOT NULL REFERENCES person(id),
    PRIMARY KEY (id)
);

INSERT INTO person VALUES (NULL, 'Antonio Paz');

SELECT @last := LAST_INSERT_ID();

INSERT INTO shirt VALUES
(NULL, 'polo', 'blue', @last),
(NULL, 'dress', 'white', @last),
(NULL, 't-shirt', 'blue', @last);

INSERT INTO person VALUES (NULL, 'Lilliana Angelovska');

SELECT @last := LAST_INSERT_ID();

INSERT INTO shirt VALUES
(NULL, 'dress', 'orange', @last),
(NULL, 'polo', 'red', @last),
(NULL, 'dress', 'blue', @last),
(NULL, 't-shirt', 'white', @last);

SELECT * FROM person;
+----+---------------------+
| id | name                |
+----+---------------------+
|  1 | Antonio Paz         |
|  2 | Lilliana Angelovska |
+----+---------------------+

SELECT * FROM shirt;
ログイン後にコピー

この方法で使用すると、REFERENCES 句は SHOW CREATE TABLE または DESCRIBE の出力に表示されません:

+----+---------+--------+-------+| id | style   | color  | owner |+----+---------+--------+-------+|  1 | polo    | blue   |     1 ||  2 | dress   | white  |     1 ||  3 | t-shirt | blue   |     1 ||  4 | dress   | orange |     2 ||  5 | polo    | red    |     2 ||  6 | dress   | blue   |     2 ||  7 | t-shirt | white  |     2 |+----+---------+--------+-------+
SELECT s.* FROM person p, shirt sWHERE p.name LIKE &#39;Lilliana%&#39;AND s.owner = p.idAND s.color <> &#39;white&#39;;
+----+-------+--------+-------+| id | style | color  | owner |+----+-------+--------+-------+|  4 | dress | orange |     2 ||  5 | polo  | red    |     2 ||  6 | dress | blue   |     2 |+----+-------+--------+-------+
ログイン後にコピー

列の定義で、この使用方法を押します。コメントまたは「ヒント」としての REFERENCES は、テーブル MyISAM および BerkeleyDB に対して機能します。

7. 2 つのキーに基づく検索

では、AND と同様に、単一のキーワードを使用して OR 句を最大限に活用できます。

より柔軟な例は、OR で結合された 2 つのキーワードを見つけることです:

SHOW CREATE TABLE shirt\G
*************************** 1. row ***************************
Table: shirt
Create Table: CREATE TABLE `shirt` (
`id` smallint(5) unsigned NOT NULL auto_increment,
`style` enum(&#39;t-shirt&#39;,&#39;polo&#39;,&#39;dress&#39;) NOT NULL,
`color` enum(&#39;red&#39;,&#39;blue&#39;,&#39;orange&#39;,&#39;white&#39;,&#39;black&#39;) NOT NULL,
`owner` smallint(5) unsigned NOT NULL,
PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
ログイン後にコピー

この状況は最適化されています。

この問題をより効果的に解決するために、UNION を使用して 2 つの別々の SELECT ステートメントの出力を結合することもできます。

各 SELECT は 1 つのキーワードのみを検索し、最適化できます:

SELECT field1_index, field2_index FROM test_table
WHERE field1_index = &#39;1&#39; OR  field2_index = &#39;1&#39;
ログイン後にコピー

8. 日数に基づいて訪問数を計算する

次の例は、ビット配列関数を使用して、ユーザーが各月に訪問した日数を計算する方法を示しています。ウェブページ。

SELECT field1_index, field2_index
    FROM test_table WHERE field1_index = &#39;1&#39;
UNION
SELECT field1_index, field2_index
    FROM test_table WHERE field2_index = &#39;1&#39;;
ログイン後にコピー

このテーブルの例には、ユーザーの Web ページへの訪問を表す年、月、日の値が含まれています。次のクエリを使用して、1 か月あたりの訪問日数を決定できます:

CREATE TABLE t1 (year YEAR(4), month INT(2) UNSIGNED ZEROFILL,
             day INT(2) UNSIGNED ZEROFILL);
INSERT INTO t1 VALUES(2000,1,1),(2000,1,20),(2000,1,30),(2000,2,2),
            (2000,2,23),(2000,2,23);
ログイン後にコピー

は次の結果を返します:

SELECT year,month,BIT_COUNT(BIT_OR(1<<day)) AS days FROM t1
       GROUP BY year,month;
ログイン後にコピー

このクエリは、テーブル内の年/月ごとに結合された個別の日数をカウントし、重複したクエリを自動的に削除できます。

9. AUTO_INCREMENT

を使用すると、AUTO_INCREMENT 属性を通じて新しい行の一意の識別子を生成できます:

+------+-------+------+
| year | month | days |
+------+-------+------+
| 2000 |    01 |    3 |
| 2000 |    02 |    2 |
+------+-------+------+
ログイン後にコピー

は以下を返します:

CREATE TABLE animals (
     id MEDIUMINT NOT NULL AUTO_INCREMENT,
     name CHAR(30) NOT NULL,
     PRIMARY KEY (id)
 );

INSERT INTO animals (name) VALUES
    (&#39;dog&#39;),(&#39;cat&#39;),(&#39;penguin&#39;),
    (&#39;lax&#39;),(&#39;whale&#39;),(&#39;ostrich&#39;);

SELECT * FROM animals;
ログイン後にコピー

LAST_INSERT_ID() SQL 関数または mysql_insert_id() C API 関数を使用してクエリを実行できます。最新の AUTO_INCREMENT 値。これらの関数は接続固有であるため、その戻り値は挿入関数を実行する他の接続の影響を受けません。

注:

複数行の挿入の場合、LAST_INSERT_ID() と mysql_insert_id() は実際には、挿入された最初の行から AUTO_INCREMENT キーワードを返します。レプリケーション設定では、この機能を使用すると、複数行の挿入を他のサーバーに正しくレプリケートできます。

MyISAM テーブルと BDB テーブルの場合、2 番目の列に AUTO_INCREMENT と複数列インデックスを指定できます。このとき、AUTO_INCREMENTカラムで生成される値の計算方法は、MAX(auto_increment_column

) + 1 WHERE prefix=

given-prefixとなります。データを並べ替えたグループに入れる場合は、この方法を使用します。

+----+---------+
| id | name    |
+----+---------+
|  1 | dog     |
|  2 | cat     |
|  3 | penguin |
|  4 | lax     |
|  5 | whale   |
|  6 | ostrich |
+----+---------+
ログイン後にコピー
が返されます:
+--------+----+---------+
| grp    | id | name    |
+--------+----+---------+
| fish   |  1 | lax     |
| mammal |  1 | dog     |
| mammal |  2 | cat     |
| mammal |  3 | whale   |
| bird   |  1 | penguin |
| bird   |  2 | ostrich |
+--------+----+---------+
ログイン後にコピー

请注意在这种情况下(AUTO_INCREMENT列是多列索引的一部分),如果你在任何组中删除有最大AUTO_INCREMENT值的行,将会重新用到AUTO_INCREMENT值。对于MyISAM表也如此,对于该表一般不重复使用AUTO_INCREMENT值。

如果AUTO_INCREMENT列是多索引的一部分,MySQL将使用该索引生成以AUTO_INCREMENT列开始的序列值。。例如,如果animals表含有索引PRIMARY KEY (grp, id)和INDEX(id),MySQL生成序列值时将忽略PRIMARY KEY。结果是,该表包含一个单个的序列,而不是符合grp值的序列。

要想以AUTO_INCREMENT值开始而不是1,你可以通过CREATE TABLE或ALTER TABLE来设置该值,如下所示:

mysql> ALTER TABLE tbl AUTO_INCREMENT = 100;
ログイン後にコピー

 以上就是MySQL入门教程7 —— 常用数据库查询的示例的内容,更多相关内容请关注PHP中文网(www.php.cn)! 




このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

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

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

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構文、データ型、およびアクセス許可、および最適化の提案には、インデックスの使用、最適化されたクエリ、およびテーブルの分割が含まれます。

MySQLの場所:データベースとプログラミング MySQLの場所:データベースとプログラミング Apr 13, 2025 am 12:18 AM

データベースとプログラミングにおけるMySQLの位置は非常に重要です。これは、さまざまなアプリケーションシナリオで広く使用されているオープンソースのリレーショナルデータベース管理システムです。 1)MySQLは、効率的なデータストレージ、組織、および検索機能を提供し、Web、モバイル、およびエンタープライズレベルのシステムをサポートします。 2)クライアントサーバーアーキテクチャを使用し、複数のストレージエンジンとインデックスの最適化をサポートします。 3)基本的な使用には、テーブルの作成とデータの挿入が含まれ、高度な使用法にはマルチテーブル結合と複雑なクエリが含まれます。 4)SQL構文エラーやパフォーマンスの問題などのよくある質問は、説明コマンドとスロークエリログを介してデバッグできます。 5)パフォーマンス最適化方法には、インデックスの合理的な使用、最適化されたクエリ、およびキャッシュの使用が含まれます。ベストプラクティスには、トランザクションと準備された星の使用が含まれます

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

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

Apacheのデータベースに接続する方法 Apacheのデータベースに接続する方法 Apr 13, 2025 pm 01:03 PM

Apacheはデータベースに接続するには、次の手順が必要です。データベースドライバーをインストールします。 web.xmlファイルを構成して、接続プールを作成します。 JDBCデータソースを作成し、接続設定を指定します。 JDBC APIを使用して、接続の取得、ステートメントの作成、バインディングパラメーター、クエリまたは更新の実行、結果の処理など、Javaコードのデータベースにアクセスします。

DockerによるMySQLを開始する方法 DockerによるMySQLを開始する方法 Apr 15, 2025 pm 12:09 PM

DockerでMySQLを起動するプロセスは、次の手順で構成されています。MySQLイメージをプルしてコンテナを作成および起動し、ルートユーザーパスワードを設定し、ポート検証接続をマップしてデータベースを作成し、ユーザーはすべての権限をデータベースに付与します。

Centosはmysqlをインストールします Centosはmysqlをインストールします Apr 14, 2025 pm 08:09 PM

CentOSにMySQLをインストールするには、次の手順が含まれます。適切なMySQL Yumソースの追加。 yumを実行して、mysql-serverコマンドをインストールして、mysqlサーバーをインストールします。ルートユーザーパスワードの設定など、MySQL_SECURE_INSTALLATIONコマンドを使用して、セキュリティ設定を作成します。必要に応じてMySQL構成ファイルをカスタマイズします。 MySQLパラメーターを調整し、パフォーマンスのためにデータベースを最適化します。

MySQLの役割:Webアプリケーションのデータベース MySQLの役割:Webアプリケーションのデータベース Apr 17, 2025 am 12:23 AM

WebアプリケーションにおけるMySQLの主な役割は、データを保存および管理することです。 1.MYSQLは、ユーザー情報、製品カタログ、トランザクションレコード、その他のデータを効率的に処理します。 2。SQLクエリを介して、開発者はデータベースから情報を抽出して動的なコンテンツを生成できます。 3.MYSQLは、クライアントサーバーモデルに基づいて機能し、許容可能なクエリ速度を確保します。

See all articles