SQL の基礎 | SELECT ステートメント |データベース管理

WBOY
リリース: 2024-08-26 12:41:36
オリジナル
730 人が閲覧しました

導入

SQL Fundamentals | SELECT Statement | Database Management

SQL で最もよく使用されるステートメントの 1 つである SELECT ステートメントは、テーブル内のデータを選択するために使用されます。このラボでは、SELECT とそれを実際の実践に適用する方法を学びます。

学習目標

  • SELECT 基本構文
  • 数学記号の条件
  • およびまたは内
  • ワイルドカード
  • 並べ替え
  • SQL 組み込み関数と計算
  • サブクエリと結合クエリ

準備

始める前に、関連するデータテーブルをダウンロードし、mysql_labex という名前のデータベースを作成します (3 つのテーブル: 部門、従業員、プロジェクト)。

MySQL サービスを開始し、root としてログインします。

cd ~/project
sudo service mysql start
mysql -u root
ログイン後にコピー

create-database.sql と insert-data.sql の 2 つのファイルがあり、~/project/.

にあります。

ファイルにデータをロードします。データベースを構築するには、MySQL コンソールに次のコマンドを入力する必要があります:

source ~/project/create-database.sql
source ~/project/insert-data.sql
ログイン後にコピー

データベース操作ステートメントで最も頻繁に使用され、最も重要であると考えられているのは SELECT クエリです。これまでのラボでは、SELECT * FROM table_name; を使用しました。ステートメントをさまざまな場所に配置して、テーブル内のすべてを確認します。 SELECT は、さまざまな機能を包含するさまざまな制約のキーワードとともに使用できます。このラボでは、これらの用途について詳しく紹介します。

基本的な SELECT ステートメント

SELECT ステートメントの基本形式:

SELECT row name  FROM table name WHERE constraint;
ログイン後にコピー

テーブルのすべての内容をクエリする場合は、アスタリスク * を付けて 列の名前をクエリします。これは、テーブル内のすべての列がクエリされることを表します。ほとんどの場合、従業員テーブルの名前と年齢を確認するなど、テーブルの指定された列を確認するだけで十分です。

USE mysql_labex;
SELECT name,age FROM employee;
ログイン後にコピー
MariaDB [mysql_labex]> SELECT name,age FROM employee;
+------+------+
| name | age  |
+------+------+
| Tom  |   26 |
| Jack |   24 |
| Rose |   22 |
| Jim  |   35 |
| Mary |   21 |
| Alex |   26 |
| Ken  |   27 |
| Rick |   24 |
| Joe  |   31 |
| Mike |   23 |
| Jobs | NULL |
| Tony | NULL |
+------+------+
12 rows in set (0.000 sec)
ログイン後にコピー

数学記号の条件

SELECT ステートメントには多くの場合、より正確なクエリを実現するために使用される WHERE 制約があります。 WHERE 制約には数学的表記 (=、<、>、>=、<=) を使用できます。名前と年齢をクエリしただけなので、少し変更を加えてみましょう:

SELECT name,age FROM employee WHERE age>25;




</p>
<p>25 歳以上の結果をフィルタリングします:<br>
</p>

<pre class="brush:php;toolbar:false">MariaDB [mysql_labex]> SELECT name,age FROM employee WHERE age>25;
+------+------+
| name | age  |
+------+------+
| Tom  |   26 |
| Jim  |   35 |
| Alex |   26 |
| Ken  |   27 |
| Joe  |   31 |
+------+------+
5 rows in set (0.000 sec)
ログイン後にコピー

または、Mary という名前の従業員の名前、年齢、電話番号を見つけます。

SELECT name,age,phone FROM employee WHERE name='Mary';
ログイン後にコピー

結果:

MariaDB [mysql_labex]> SELECT name,age,phone FROM employee WHERE name='Mary';
+------+------+--------+
| name | age  | phone  |
+------+------+--------+
| Mary |   21 | 100101 |
+------+------+--------+
1 row in set (0.000 sec)
ログイン後にコピー

「および」と「または」

WHERE の後に複数の制約を指定でき、これらの条件の論理関係に基づいて、ORAND を使用して接続できます。

フィルター - 年齢が 25 歳未満、または年齢が 30 歳以上

SELECT name,age FROM employee WHERE age<25 OR age>30;
ログイン後にコピー
MariaDB [mysql_labex]> SELECT name,age FROM employee WHERE age<25 OR age>30;
+------+------+
| name | age  |
+------+------+
| Jack |   24 |
| Rose |   22 |
| Jim  |   35 |
| Mary |   21 |
| Rick |   24 |
| Joe  |   31 |
| Mike |   23 |
+------+------+
7 rows in set (0.000 sec)
ログイン後にコピー

フィルター - 年齢が 25 歳以上、30 歳未満

SELECT name,age FROM employee WHERE age>25 AND age<30;
ログイン後にコピー

25 歳と 30 歳を含める必要がある場合は、age BETWEEN 25 AND 30 を使用します。

MariaDB [mysql_labex]> SELECT name,age FROM employee WHERE age>25 AND age<30;
+------+------+
| name | age  |
+------+------+
| Tom  |   26 |
| Alex |   26 |
| Ken  |   27 |
+------+------+
3 rows in set (0.000 sec)

MariaDB [mysql_labex]> SELECT name,age FROM employee WHERE age BETWEEN 25 AND 30;
+------+------+
| name | age  |
+------+------+
| Tom  |   26 |
| Alex |   26 |
| Ken  |   27 |
+------+------+
3 rows in set (0.000 sec)
ログイン後にコピー

入っている、入っていない

キーワード INNOT IN は、特定の範囲の結果をフィルターするために使用されます。たとえば、dpt3 または dpt4:
内のユーザーを検索したいとします。

SELECT name,age,phone,in_dpt FROM employee WHERE in_dpt IN ('dpt3','dpt4');
ログイン後にコピー

次のコマンドのように、NOT IN の場合、dpt1 にも dpt3 にもいないユーザーが取得されます:

SELECT name,age,phone,in_dpt FROM employee WHERE in_dpt NOT IN ('dpt1','dpt3');
ログイン後にコピー
MariaDB [mysql_labex]> SELECT name,age,phone,in_dpt FROM employee WHERE in_dpt IN ('dpt3','dpt4');
+------+------+--------+--------+
| name | age  | phone  | in_dpt |
+------+------+--------+--------+
| Tom  |   26 | 119119 | dpt4   |
| Rose |   22 | 114114 | dpt3   |
| Rick |   24 | 987654 | dpt3   |
| Mike |   23 | 110110 | dpt4   |
| Tony | NULL | 102938 | dpt3   |
+------+------+--------+--------+
5 rows in set (0.000 sec)

MariaDB [mysql_labex]> SELECT name,age,phone,in_dpt FROM employee WHERE in_dpt NOT IN ('dpt1','dpt3');
+------+------+--------+--------+
| name | age  | phone  | in_dpt |
+------+------+--------+--------+
| Tom  |   26 | 119119 | dpt4   |
| Jack |   24 | 120120 | dpt2   |
| Mary |   21 | 100101 | dpt2   |
| Joe  |   31 | 110129 | dpt2   |
| Mike |   23 | 110110 | dpt4   |
| Jobs | NULL |  19283 | dpt2   |
+------+------+--------+--------+
6 rows in set (0.000 sec)
ログイン後にコピー

ワイルドカード

キーワード LIKE は、SQL ステートメントでワイルドカードとともに使用され、ワイルドカードは不明な文字を表します。 SQL のワイルドカードは _ と % です。 _ は不特定の文字を表し、% は不定の不特定の文字を表します。

たとえば、電話番号の最初の 4 桁が 1101 であることだけを覚えていて、最後の 2 桁を忘れている場合は、それらを 2 つの _ ワイルドカードで置き換えることができます。

SELECT name,age,phone FROM employee WHERE phone LIKE '1101__';
ログイン後にコピー

そしてここには 1101 で始まる電話番号があります:

MariaDB [mysql_labex]> SELECT name,age,phone FROM employee WHERE phone LIKE '1101__';
+------+------+--------+
| name | age  | phone  |
+------+------+--------+
| Joe  |   31 | 110129 |
| Mike |   23 | 110110 |
+------+------+--------+
2 rows in set (0.000 sec)
ログイン後にコピー

名前の最初の文字しか覚えておらず、名前の長さがわからない場合など、別のケースでは、不定文字の代わりに % ワイルドカードを使用します。

SELECT name,age,phone FROM employee WHERE name LIKE 'J%';
ログイン後にコピー

ここには J で始まる名前があります:

MariaDB [mysql_labex]> SELECT name,age,phone FROM employee WHERE name LIKE 'J%';
+------+------+--------+
| name | age  | phone  |
+------+------+--------+
| Jack |   24 | 120120 |
| Jim  |   35 | 100861 |
| Joe  |   31 | 110129 |
| Jobs | NULL |  19283 |
+------+------+--------+
4 rows in set (0.000 sec)
ログイン後にコピー

結果を並べ替える

クエリ結果をより整理して理解しやすくするために、特定のルールに従って結果を並べ替える必要がある場合があります。 ORDER BY が便利です。デフォルトでは、ORDER BY昇順 配列になっており、ASCDESC を使用すると、昇順と降順で結果を取得することもできます。注文します。

たとえば、SQL ステートメントで給与を降順に並べ替えます。

SELECT name,age,salary,phone FROM employee ORDER BY salary DESC;
ログイン後にコピー
MariaDB [mysql_labex]> SELECT name,age,salary,phone FROM employee ORDER BY salary DESC;
+------+------+--------+--------+
| name | age  | salary | phone  |
+------+------+--------+--------+
| Jobs | NULL |   3600 |  19283 |
| Joe  |   31 |   3600 | 110129 |
| Ken  |   27 |   3500 | 654321 |
| Rick |   24 |   3500 | 987654 |
| Mike |   23 |   3400 | 110110 |
| Tony | NULL |   3400 | 102938 |
| Alex |   26 |   3000 | 123456 |
| Mary |   21 |   3000 | 100101 |
| Jim  |   35 |   3000 | 100861 |
| Rose |   22 |   2800 | 114114 |
| Jack |   24 |   2500 | 120120 |
| Tom  |   26 |   2500 | 119119 |
+------+------+--------+--------+
12 rows in set (0.000 sec)
ログイン後にコピー

SQL 組み込み関数と計算

SQL を使用すると、テーブル内のデータを計算できます。これに関して、SQL には SELECT の結果を処理する 5 つの組み込み関数があります。

Function: COUNT SUM AVG MAX MIN
For: count numbers sum up average maximum value minimum value

The COUNT function can be used for any data type (because it is only a count), while SUM and AVG functions can only calculate numeric data types. MAX and MIN can be used for numeric, string, or datetime data types.

For example, when we want to calculate the maximum and minimum value of salary, we use a statement like this:

SELECT MAX(salary) AS max_salary,MIN(salary) FROM employee;
ログイン後にコピー

You may have noticed a tiny detail. Use AS keyword can rename value. E.g. Max value is renamed into max_salary:

MariaDB [mysql_labex]> SELECT MAX(salary) AS max_salary,MIN(salary) FROM employee;
+------------+-------------+
| max_salary | MIN(salary) |
+------------+-------------+
|       3600 |        2500 |
+------------+-------------+
1 row in set (0.000 sec)
ログイン後にコピー

Subqueries

The SELECT statements discussed above all involve data in only one table, but sometimes you have to process multiple tables to get the information you need. For example, you want to know a few projects done by the department where the employee named "Tom" is located. Employee information is stored in the employee table, but the project information is stored in the project table.

We can use subqueries to deal with such situations:

SELECT of_dpt,COUNT(proj_name) AS count_project FROM project
WHERE of_dpt IN
(SELECT in_dpt FROM employee WHERE name='Tom');
ログイン後にコピー
MariaDB [mysql_labex]> SELECT of_dpt,COUNT(proj_name) AS count_project FROM project
    -> WHERE of_dpt IN
    -> (SELECT in_dpt FROM employee WHERE name='Tom');
+--------+---------------+
| of_dpt | count_project |
+--------+---------------+
| dpt4   |             2 |
+--------+---------------+
1 row in set (0.000 sec)
ログイン後にコピー

Subqueries can also be extended to three, four or more layers.

Join

When dealing with multiple tables, the subquery is only useful when the results are from the same table. However, if you need to display data in two or more tables, you must use the join operation.

The basic idea is to connect two or more tables as a new table to operate, as follows:

SELECT id,name,people_num
FROM employee,department
WHERE employee.in_dpt = department.dpt_name
ORDER BY id;
ログイン後にコピー

This result is the number of employees in each department, where employee id and name from the employee table, people_num from the department table:

MariaDB [mysql_labex]> SELECT id,name,people_num
    -> FROM employee,department
    -> WHERE employee.in_dpt = department.dpt_name
    -> ORDER BY id;
+----+------+------------+
| id | name | people_num |
+----+------+------------+
|  1 | Tom  |         15 |
|  2 | Jack |         12 |
|  3 | Rose |         10 |
|  4 | Jim  |         11 |
|  5 | Mary |         12 |
|  6 | Alex |         11 |
|  7 | Ken  |         11 |
|  8 | Rick |         10 |
|  9 | Joe  |         12 |
| 10 | Mike |         15 |
| 11 | Jobs |         12 |
| 12 | Tony |         10 |
+----+------+------------+
12 rows in set (0.000 sec)
ログイン後にコピー

Another connection statement format is to use the JOIN ON syntax. The statement is the same as:

SELECT id,name,people_num
FROM employee JOIN department
ON employee.in_dpt = department.dpt_name
ORDER BY id;
ログイン後にコピー

Result is the same.

Summary

In this lab we learned the basic use of SELECT statement:

  • Basic syntax
  • Mathmatical symbol conditions
  • AND OR IN
  • Wildcards
  • Sort
  • SQL built-in functions and calculations
  • Sunqueries and connection queries

? Practice Now: SQL's SELECT Statement


Want to Learn More?

  • ? Learn the latest MySQL Skill Trees
  • ? Read More MySQL Tutorials
  • ? Join our Discord or tweet us @WeAreLabEx

以上がSQL の基礎 | SELECT ステートメント |データベース管理の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート