MYSQL研究ノート2のパンチ
2.1 MySQLの基本(2)-テーブル操作
#学習コンテンツ#
- MySQLテーブルのデータ型
- SQLステートメントでテーブルを作成する
ステートメントの説明
列のタイプ、サイズ、制約を
設定する主キーを設定する - SQLステートメントを使用してテーブルにデータを追加します
ステートメントの説明
複数の追加方法(列名を指定します。列名は指定しないでください) - SQLステートメントを使用してテーブルを削除します。
ステートメントは、
DELETE
DROP
TRUNCATEの
さまざまな方法の違いを説明しています - SQLステートメントを使用してテーブルを変更する
列名を
変更するテーブル内のデータを変更する
行
を削除する列を削除する
新しい列
新しい行
アイテム3
以下に示すようにコーステーブルを作成します。学生(学生)とクラス(コース)があります。
たとえば、テーブル:
±--------±----------- +
| student | class |
±--------±--------- -+
| A |数学|
| B |英語|
| C |数学|
| D |生物学|
| E |数学|
| F |コンピューター|
| G |数学|
| H |数学|
| I |数学|
| A |数学|
±--------±----------- +
5人以上の生徒がいるすべてのクラスをリストするSQLクエリを記述します。
出力する必要があります:
±-------- +
| class |
±-------- +
| Math |
±-------- +
注:
学生は繰り返し計算。
-テーブルを作成
CREATE TABLE courses
(student VARCHAR(255) NOT NULL,
class VARCHAR(255) NOT NULL);
-データを挿入
INSERT INTO courses VALUES ('A', 'Math');
INSERT INTO courses VALUES ('B', 'English');
INSERT INTO courses VALUES ('C', 'Biology');
INSERT INTO courses VALUES ('D', 'Math');
INSERT INTO courses VALUES ('E', 'Math');
INSERT INTO courses VALUES ('F', 'Computer');
INSERT INTO courses VALUES ('G', 'Math');
INSERT INTO courses VALUES ('H', 'Math');
INSERT INTO courses VALUES ('I', 'Math');
INSERT INTO courses VALUES ('A', 'Math');
-コード(5人以上の生徒がいるすべてのクラスをリストするSQLクエリを記述します)
SELECT class FROM courses
GROUP BY class
HAVING COUNT(DISTINCT student) >= 5;
-結果
プロジェクト4:賃金の交換(難易度:簡単)
以下に示すように、m = maleおよびf = femaleの値を持つ給与表を作成します。
例えば:
id | 名前 | セックス | 給料 |
---|---|---|---|
1 | あ | メートル | 2500 |
2 | B | f | 1500 |
3 | C | メートル | 5500 |
4 | D | f | 500 |
すべてのf値とm値を入れ替えます(たとえば、すべてのf値をmに、またはその逆に変更します)。更新クエリが必要であり、中間一時テーブルはありません。
作成したクエリステートメントを実行すると、次の表が表示されます。
id | 名前 | セックス | 給料 |
---|---|---|---|
1 | あ | f | 2500 |
2 | B | メートル | 1500 |
3 | C | f | 5500 |
4 | D | メートル | 500 |
-テーブルを作成
CREATE TABLE salary
(id INT PRIMARY KEY NOT NULL,
NAME VARCHAR ( 10 ) NOT NULL,
sex VARCHAR ( 10 ) NOT NULL,
salary INT NOT NULL
);
-データを挿入
INSERT INTO salary
VALUES
( 1, "A", "m", 2500 ),
( 2, "B", "f", 1500 ),
( 3, "C", "m", 5500 ),
( 4, "D", "f", 500 );
-コード(データの更新)
UPDATE salary
SET sex =
CASE
sex
WHEN 'm' THEN
'f' ELSE 'm' END;
-結果
2.2 MySQLの基本(3)-テーブル結合
#学習内容#MySQL
エイリアス
INNER JOIN
LEFT JOIN
CROSS JOIN
自己接続
UNION
上記の方法の違いと接続
アイテム5:2つのテーブルを組み合わせる(難易度:簡単)
データベースに表1と表2を作成し、3行のデータ(自分で作成)を挿入します
表1:個人
±------------±-------- +
|列名|タイプ|
±------------±-------- +
| PersonId | int |
| FirstName | varchar |
| LastName | varchar |
±-------- ----±-------- +
PersonIdは上記のテーブルの主キーです
表2:アドレス
±------------±-------- +
|列名|タイプ|
±------------±--- ----- + t
| AddressId | int |
| PersonId | int |
| City | varchar |
| State | varchar |
±------------±-------- +
AddressIdは、上記のテーブルの主キーです
条件を満たすSQLクエリを記述します。個人に住所情報があるかどうかに関係なく、上記の2つのテーブルに基づいて、個人の次の情報を提供する必要があります:FirstName、LastName、City、State
-テーブルを作成(人)
CREATE TABLE person(PersonId INT,
FirstName VARCHAR(10),
LastName VARCHAR(10));
-テーブル(アドレス)を作成する
CREATE TABLE address(AddressId INT,
PersionId INT,
City VARCHAR(255),
State VARCHAR(255));
-データを挿入(人と住所)
INSERT INTO person VALUES (1,'kobe','bryant'),
(2,'lebron','james'),
(3,'chris','paul');
INSERT INTO address VALUES(001,1,'Los Angeles','california'),
(002,2,'Cleveland Cavaliers','Ohio'),
(003,2,'Houston','Texas');
–コード(人物が住所情報を持っているかどうかに関係なく、上記の2つのテーブルに基づいて、人物の次の情報を提供する必要があります:FirstName、LastName、City、State)
SELECT FirstName, LastName, City, State FROM
person LEFT JOIN address ON person.PersonId=address.PersionId;
プロジェクト6:重複するメールボックスを削除する(難易度:簡単)
SQLクエリを記述して、電子メールテーブル内の重複する電子メールアドレスをすべて削除し、重複するメールボックス内のIDが最も小さいアドレスのみを保持します。
±—±-------- +
| Id | Email |
±—±-------- +
| 1 | [email protected] |
| 2 | [email protected] |
| 3 | [email protected] |
±—±-------- +
Idはこのテーブルの主キーです。
たとえば、クエリを実行した後、上記のPersonテーブルは次の行を返す必要があります:
±—±----------------- +
| Id | Email |
±—±- ---------------- +
| 1 | [email protected] |
| 2 | [email protected] |
±—±------------ ----- +
-テーブルを作成
CREATE TABLE email
( id INT PRIMARY KEY, Email VARCHAR ( 255 ) );
-データを挿入
INSERT INTO email ( id, Email )
VALUES( 1, '[email protected]' ),
( 2, '[email protected]' ),
( 3, '[email protected]' );
-コード(SQLクエリを記述して、電子メールテーブル内の重複するすべての電子メールアドレスを削除し、重複するメールボックスで最小のIDを持つアドレスのみを保持します)
DELETE FROM email
WHERE id NOT IN
( SELECT a.min_id FROM ( SELECT MIN( id ) AS min_id FROM email GROUP BY Email ) a );
-結果