準備:テスト表の作成
データの操作を開始する前に、例として簡単な表を作成します。
CREATE TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100) NOT NULL,
email VARCHAR(100) UNIQUE NOT NULL,
age INT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
SELECT: データの読み取り
SELECTコマンドは、テーブルからデータを取得するために使用されます。これは、データベースを操作する際に最も一般的な操作です。
基本構文
SELECT column1, column2 FROM table_name;使用例
すべての列を選択:
SELECT * FROM users;特定の列の選択:
SELECT name, email FROM users;フィルタリングにWHEREを使用する
SELECT * FROM users WHERE age > 25;ORDER BYによる結果の並べ替え:
SELECT * FROM users ORDER BY name ASC;
SELECT * FROM users ORDER BY created_at DESC;結果数の制限:
SELECT * FROM users LIMIT 10;
SELECT * FROM users LIMIT 10 OFFSET 20; -- пагинацияテンプレート検索にLIKEを使用する
SELECT * FROM users WHERE email LIKE '%@gmail.com';
SELECT * FROM users WHERE name LIKE 'А%'; -- имена на букву А集計関数:
SELECT COUNT(*) FROM users;
SELECT AVG(age) FROM users;
SELECT MAX(age), MIN(age) FROM users;GROUP BYによるグループ化:
SELECT age, COUNT(*) as count
FROM users
GROUP BY age
HAVING COUNT(*) > 1;
挿入:データの追加
INSERT コマンドを使用すると、テーブルに新しいレコードを追加できます。
基本構文
INSERT INTO table_name (column1, column2) VALUES (value1, value2);使用例
1 つのレコードを挿入します。
INSERT INTO users (name, email, age)
VALUES ('Alexey', 'alexey@example.com', 28);複数のエントリを挿入します。
INSERT INTO users (name, email, age) VALUES
('Maria', 'maria@example.com', 25),
('Dmitry', 'dmitry@example.com', 32),
('Elena', 'elena@example.com', 29);すべての列を指定しない挿入:
INSERT INTO users (name, email)
VALUES ('Ivan', 'ivan@example.com');
-- age будет NULL, created_at заполнится автоматическиID を返す挿入:
-- MySQL
INSERT INTO users (name, email, age)
VALUES ('Olga', 'olga@example.com', 27);
SELECT LAST_INSERT_ID();
-- PostgreSQL
INSERT INTO users (name, email, age)
VALUES ('Olga', 'olga@example.com', 27)
RETURNING id;更新:データの更新
UPDATEコマンドは、テーブル内の既存のレコードを変更します。
基本構文
UPDATE table_name
SET column1 = value1, column2 = value2
WHERE condition;使用例
1つのレコードの更新:
UPDATE users
SET age = 29
WHERE id = 1;複数のフィールドの更新:
UPDATE users
SET name = 'Alexey Petrov', age = 30
WHERE id = 1;複数のエントリの更新:
UPDATE users
SET age = age + 1
WHERE age < 30;計算の使用:
UPDATE users
SET email = LOWER(email);複数の条件を持つ条件付き更新:
UPDATE users
SET age = 25
WHERE name = 'Maria' AND email LIKE '%@example.com';重要な警告
更新時に常にWHEREを使用してください!この条件がないと、テーブル内のすべてのレコードが更新されます。
-- ОПАСНО! Обновит все записи
UPDATE users SET age = 25;
-- ПРАВИЛЬНО! Обновит только нужные записи
UPDATE users SET age = 25 WHERE id = 1;DELETE: データの削除
DELETEコマンドは、テーブルからレコードを削除します。
基本構文
DELETE FROM table_name WHERE condition;使用例
1 つのレコードを削除します。
DELETE FROM users WHERE id = 1;条件による削除:
DELETE FROM users WHERE age < 18;複数の条件を持つ削除:
DELETE FROM users
WHERE created_at < '2024-01-01' AND age IS NULL;すべてのエントリを削除します(注意!):
DELETE FROM users; -- удалит все записи
TRUNCATE TABLE users; -- быстрее, но нельзя откатить в транзакции重要な警告
UPDATEと同様に、DELETEの際には常にWHEREを確認してください。
-- ОПАСНО! Удалит все записи
DELETE FROM users;
-- ПРАВИЛЬНО! Удалит только нужные записи
DELETE FROM users WHERE id = 1;トランザクション:データの安全な操作
INSERT、UPDATE、およびDELETE操作を実行する場合は、データの整合性を確保するためにトランザクションを使用することをお勧めします。
START TRANSACTION;
UPDATE users SET age = 30 WHERE id = 1;
UPDATE users SET age = 28 WHERE id = 2;
-- Если всё хорошо:
COMMIT;
-- Если нужно отменить изменения:
ROLLBACK;実用的なアドバイス
UPDATE/DELETEの前にSELECTを使用する
データを変更または削除する前に、同じ条件でSELECTを実行して、正しいレコードを操作していることを確認します。
-- Сначала проверяем
SELECT * FROM users WHERE age < 18;
-- Если всё верно, удаляем
DELETE FROM users WHERE age < 18;パフォーマンス指標
WHEREで頻繁に使用される列のインデックスを作成します。
CREATE INDEX idx_email ON users(email);
CREATE INDEX idx_age ON users(age);SELECT *を避ける
プロダクションコードでは、アスタリスクの代わりに特定の列を指定します。
-- Плохо
SELECT * FROM users;
-- Хорошо
SELECT id, name, email FROM users;制限を使用する
大きなテーブルを操作する場合は、返されるレコードの数を制限します。
SELECT * FROM users LIMIT 100;パラメータ化されたクエリ
コードからSQLを操作する場合は、常にパラメータ化されたクエリを使用して、SQLインジェクションから保護します。
JavaScript (Node.js)
const userId = 1;
const query = 'SELECT * FROM users WHERE id = ?';
db.query(query, [userId]);Python
user_id = 1
cursor.execute("SELECT * FROM users WHERE id = %s", (user_id,))PHP (PDO)
$userId = 1;
$stmt = $pdo->prepare("SELECT * FROM users WHERE id = ?");
$stmt->execute([$userId]);チームの統合:実例
ユーザーを管理するための小さなアプリケーションを作成しましょう。
-- Создание пользователя
INSERT INTO users (name, email, age)
VALUES ('Anna', 'anna@example.com', 26);
-- Получение ID нового пользователя
SET @user_id = LAST_INSERT_ID();
-- Чтение данных пользователя
SELECT * FROM users WHERE id = @user_id;
-- Обновление возраста
UPDATE users SET age = 27 WHERE id = @user_id;
-- Проверка обновления
SELECT name, age FROM users WHERE id = @user_id;
-- Удаление пользователя
DELETE FROM users WHERE id = @user_id;
-- Проверка удаления
SELECT COUNT(*) FROM users WHERE id = @user_id; -- должно вернуть 0結論
SELECT、INSERT、UPDATE、および DELETE コマンドは、SQL を使用するための基本です。これらの操作を習得すると、任意のリレーショナルデータベースのデータを効率的に管理できます。UPDATEとDELETEを操作する際には安全性を考慮し、コードでは常にパラメータ化されたクエリを使用し、重要な操作にはトランザクションを忘れないでください。
教育プラットフォームに参加する コディック —ここでは、Python、JavaScript、HTML、CSS、SQL、その他のプログラミング言語のインタラクティブなコースを見つけることができます。すべての資料は、実践的な例とステップバイステップの説明を使用して、初心者の開発者向けに特別に作成されています。
コディックにはアクティブな Telegramコミュニティ開発者がコミュニケーションを取り、経験を共有し、お互いに問題を解決するのを助け合う場所です。
参加する プログラミングの旅を始めましょう!
