データベースの続き
4484 ワード
本文は基礎知識の学習過程の中のノートと総括で、後での温習と参考に供しますマルチテーブルクエリー: デカルト積:2つの集合A,Bがある.この2つの集合のすべての構成状況を取ります. マルチテーブルクエリの分類: 内の接続クエリー: 暗黙的な内部接続:where条件を使用して不要なデータを除去 従業員テーブルの名前、性別を照会します.部門表の名称 明示的な内部接続: 構文:selectフィールドリストfromテーブル名1[inner]joinテーブル名2 on条件 SELECT * FROM emp JOIN dept ON emp.`dept_id` = dept.`id`;
外部接続クエリー: 左外部接続: 構文:selectフィールドリストfrom表1 left[outer]join表2 on条件; は、左のテーブルのすべてのデータとその交差部分をクエリーします. すべての従業員情報を照会し、従業員に部門がある場合は部門名を照会し、部門がない場合は部門名を表示しない SELECT t1.*,t2.`name` FROM emp t1 LEFT JOIN dept t2 ON t1.`dept_id` = t2.`id`;
右外接続同理 サブクエリ: コンセプト:ネストされたクエリをサブクエリと呼びます. サブクエリの違い: サブクエリの結果は、1行1列です.(クエリに使用可能な演算子) 従業員の賃金が平均賃金より小さい人を調べる SELECT * FROM emp WHERE emp.salary < (SELECT AVG(salary) FROM emp);
サブクエリの結果は、複数行の単一列:(演算子in) 「財務部」と「市場部」のすべての従業員情報を照会 SELECT * FROM emp WHERE dept_id IN(SELECT id FROM dept WHERE NAME='財務部'OR NAME='市場部');
サブクエリの結果は複数行の複数列です.(サブクエリは仮想テーブルとしてクエリに参加できます) 従業員の入社日が2016-11-11日以降の従業員情報と部門情報の照会 SELECT * FROM dept t1 ,(SELECT * FROM emp WHERE emp.`join_date` > '2016-11-11') t2 WHERE t1.id = t2.dept_id;
マルチテーブル・クエリー・ケース: トランザクション コンセプト:複数のステップを含むビジネス・オペレーションがトランザクションによって管理される場合、これらのオペレーションは同時に成功するか、同時に失敗するかのいずれかです. 操作: オープントランザクション:start transaction; ロールバック:rollback; 提出:commit;
トランザクションのコミットの2つの方法: 自動コミット: mysqlは自動提出の です DML(追加削除)文は、トランザクションを自動的にコミットします.
手動コミット: Oracleデータベースのデフォルトは、手動でトランザクションをコミットする です.トランザクションを開始してから にコミットする必要があります.
トランザクションのデフォルトのコミット方法を変更します. トランザクションのデフォルトコミットを表示する方法:SELECT@@autocommit;1は自動コミット0は手動コミット を表します.デフォルトコミット方式の変更:set@@autocommit=0;
トランザクションの4つの特徴: 原子性:分割不可能な最小操作単位であり、同時に成功するか、同時に失敗するか. 永続性:トランザクションがコミットまたはロールバックされると、データベースはデータを永続的に保存します. 独立性:複数のトランザクション間.互いに独立する. 一貫性:トランザクションの前後で、データの合計は に変わりません.
DCL:ユーザー認可の管理 管理ユーザ ユーザーの追加: 構文:CREATE USER'ユーザー名'@'ホスト名'IDENTIFIED BY'パスワード';
ユーザーの削除: 構文:DROP USER'ユーザー名'@'ホスト名';
ユーザーパスワードの変更: UPDATE USER SET PASWORD=PASWORD('新パスワード')WHERE USER='ユーザー名'; SET PASSWORD FOR'ユーザー名'@'ホスト名'=PASSWORD('新しいパスワード');
ユーザーの問い合わせ: mysqlデータベースへの切り替え USE myql;
クエリーuserテーブル SELECT * FROM USER;
ワイルドカード:%は、任意のホストでユーザ登録データベース を使用できることを示す.
授権管理: クエリー権限:、 SHOW GRANTS FOR'ユーザー名'@'ホスト名'; SHOW GRANTS FOR 'lisi'@'%';
権限付与: grant権限リストonデータベース名.表名to'ユーザー名'@'ホスト名';
権限の取り消し: revoke権限リストonデータベース名.表名from'ユーザー名'@'ホスト名'; REVOKE UPDATE ON db3.`account` FROM 'lisi'@'%';
--
CREATE TABLE dept(
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(20)
);
INSERT INTO dept (NAME) VALUES (' '),(' '),(' ');
--
CREATE TABLE emp (
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(10),
gender CHAR(1), --
salary DOUBLE, --
join_date DATE, --
dept_id INT,
FOREIGN KEY (dept_id) REFERENCES dept(id) -- , ( )
);
INSERT INTO emp(NAME,gender,salary,join_date,dept_id) VALUES(' ',' ',7200,'2015-02-24',1);
INSERT INTO emp(NAME,gender,salary,join_date,dept_id) VALUES(' ',' ',3600,'2019-12-02',2);
INSERT INTO emp(NAME,gender,salary,join_date,dept_id) VALUES(' ',' ',9000,'2008-08-08',2);
INSERT INTO emp(NAME,gender,salary,join_date,dept_id) VALUES(' ',' ',5000,'2015-10-07',3);
INSERT INTO emp(NAME,gender,salary,join_date,dept_id) VALUES(' ',' ',4500,'2018-03-14',1);
SELECT
t1.name, --
t1.gender,--
t2.name --
FROM
emp t1,
dept t2
WHERE
t1.`dept_id` = t2.`id`;