MySQL-DML

3361 ワード

DML(データ操作文)
CREATE TABLE emp(ename VARCHAR(10), hiredate DATE, sal DECIMAL(10, 2), deptno INT(2));
CREATE TABLE dept(deptno INT(2), deptname VARCHAR(10));
一、挿入記録
1.フィールドの指定
INSERT INTO emp(ename, hiredate, sal, deptno) VALUES('zzx1', '2000-01-01', '2000', 1);

2.フィールドを指定しない
valuesの後ろの順序はフィールドの順序と一致する必要があります
INSERT INTO emp VALUES('zzx1', '2000-01-01', '2000', 1);

二、記録の更新
1.単一テーブルの更新
/*ename   hiredate    sal     deptno  
------  ----------  ------  --------
zzx1    2000-01-01  200.00         1*/
UPDATE emp SET sal=400 WHERE ename='zzx1';

2.マルチテーブル更新
UPDATE emp a, dept b
SET a.sal=a.sal*b.deptno, b.deptname=a.ename
WHERE a.deptno = b.deptno;

三、削除記録
DELETE FROM emp WHERE ename='zzx1';

四、照会記録
1.クエリー
#    
select * from emp;
#     
SELECT * FROM emp WHERE ename='zzx1';

2.クエリー指定フィールド
SELECT ename, sal FROM emp WHERE ename='zzx1';

3.再照会
#  deptno       
SELECT DISTINCT deptno FROM emp;

4.クエリーのソート
#     sal  
SELECT * FROM emp ORDER BY sal;

5.マルチフィールドソート
#  deptno   sal  
SELECT * FROM emp ORDER BY deptno, sal DESC;

6.問合せ数量制限
#        1   
SELECT * FROM emp LIMIT 1;

7.返される結果の開始インデックスと終了インデックスを指定します(0から)
#        1 , 2 
SELECT * FROM emp ORDER BY sal LIMIT 1,2;

8.重合
(1)統計総数
SELECT COUNT(*) FROM emp;

(2)各部門の総数を集計する
SELECT deptno, COUNT(1) FROM emp GROUP BY deptno;

(3)各部門の総数と全部の総数を統計する
SELECT deptno, COUNT(1) FROM emp GROUP BY deptno WITH ROLLUP;

(4)統計人数が1人より多い部門
select deptno, count(1) from emp group by deptno having count(1) > 1;

(5)全従業員の給与総額、最高および最低賃金を集計する
SELECT SUM(sal), MAX(sal), MIN(sal) FROM emp;

9.テーブル接続
  • 内接続:2つのテーブルで一致するレコード
  • のみを選択する.
  • 外部接続:2つのテーブルで一致するレコードのみを選択し、一致しないデータ
  • も含む.
    (1)内部接続
    SELECT ename, deptname FROM emp, dept WHERE emp.deptno=dept.deptno;
    

    (2)外部接続
  • 左接続:左のすべてのテーブルのレコード、さらに右のテーブルに一致しないレコードを含む
  • 右接続:右側のすべてのテーブルのレコード、さらに左のテーブルに一致しないレコードを含む
  • 左の接続
    SELECT ename, deptname FROM emp LEFT JOIN dept ON emp.deptno=dept.deptno;
    

    右接続
    SELECT ename, deptname FROM dept RIGHT JOIN emp ON dept.deptno=emp.deptno;
    

    10.サブクエリ
    クエリに入るときに必要な条件が別のSELECT文の結果である場合(キーワード:in,not in,=,!=,exists,not existsなど)
    SELECT * FROM emp WHERE deptno IN(SELECT deptno FROM dept);
    #            =  in
    SELECT * FROM emp WHERE deptno = (SELECT deptno FROM dept);
    
  • MySQL4.1以前はサブクエリがサポートされていなかったが、サブクエリを実装するためにテーブル接続が必要な機能
  • .
  • テーブル接続は、多くの場合、サブクエリ
  • を最適化するために使用される.
    11.連合
    2つのテーブルのデータを一定のクエリー条件でクエリーした後、結果をすべて並べて表示します.
  • ユニオンALL:結果セットを直接統合する
  • ユニオン:ユニオンALLの結果を一度DISTINCTし、重複する結果を除去する
  • UNION ALL
    SELECT deptno FROM emp
    UNION ALL
    SELECT deptno FROM dept;
    

    UNION
    SELECT deptno FROM emp
    UNION
    SELECT deptno FROM dept;