1. テーブルの準備
クエリ操作のSQL デモは、次の 4 つのテーブルに基づいて行われます。まず、これら 4 つのデータ テーブルを作成し、データを追加します。
1. 最初のテーブルは部門テーブルで、部門番号 (deptno)、部門名 (dname)、部門の場所 (loc) の 3 つのフィールドを含む名前です。
create table DEPT(
DEPTNO int(2) not null,
DNAME VARCHAR(14),
LOC VARCHAR(13)
);
部門番号フィールド (deptno) に主キー制約を追加します。
alter table DEPT
add constraint PK_DEPT primary key (DEPTNO);
部門テーブル (dept) にデータを挿入します。
insert into DEPT (DEPTNO, DNAME, LOC)
values (10, 'ACCOUNTING', 'NEW YORK');
insert into DEPT (DEPTNO, DNAME, LOC)
values (20, 'RESEARCH', 'DALLAS');
insert into DEPT (DEPTNO, DNAME, LOC)
values (30, 'SALES', 'CHICAGO');
insert into DEPT (DEPTNO, DNAME, LOC)
values (40, 'OPERATIONS', 'BOSTON');
2. 2 番目のテーブルは従業員テーブル(emp) で、従業員番号 (empno)、従業員名 (ename)、役職 (job)、直属のリーダー (mgr)、入社日 (hiredate) の 8 つのフィールドが含まれています。給与 (sal)、補助金 (comm)、部門番号 (deptno):
create table EMP
(
EMPNO int(4) primary key,
ENAME VARCHAR(10),
JOB VARCHAR(9),
MGR int(4),
HIREDATE DATE,
SAL double(7,2),
COMM double(7,2),
DEPTNO int(2)
);
従業員テーブル emp のフィールド deptno に外部キー制約を追加します。これは、部門テーブル (dept) のフィールド部門番号 (deptno) に関連付けられています。
alter table EMP
add constraint FK_DEPTNO foreign key (DEPTNO)
references DEPT (DEPTNO);
従業員テーブル (emp) にデータを挿入します。
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7369, 'SMITH', 'CLERK', 7902, '1980-12-17', 800, null, 20);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7499, 'ALLEN', 'SALESMAN', 7698, '1981-02-20', 1600, 300, 30);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7521, 'WARD', 'SALESMAN', 7698, '1981-02-22', 1250, 500, 30);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7566, 'JONES', 'MANAGER', 7839, '1981-04-02', 2975, null, 20);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7654, 'MARTIN', 'SALESMAN', 7698, '1981-09-28', 1250, 1400, 30);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7698, 'BLAKE', 'MANAGER', 7839, '1981-05-01', 2850, null, 30);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7782, 'CLARK', 'MANAGER', 7839, '1981-06-09', 2450, null, 10);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7788, 'SCOTT', 'ANALYST', 7566, '1987-04-19', 3000, null, 20);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7839, 'KING', 'PRESIDENT', null, '1981-11-17', 5000, null, 10);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7844, 'TURNER', 'SALESMAN', 7698, '1981-09-08', 1500, 0, 30);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7876, 'ADAMS', 'CLERK', 7788, '1987-05-23', 1100, null, 20);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7900, 'JAMES', 'CLERK', 7698, '1981-12-03', 950, null, 30);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7902, 'FORD', 'ANALYST', 7566, '1981-12-03', 3000, null, 20);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7934, 'MILLER', 'CLERK', 7782, '1982-01-23', 1300, null, 10);
3. 3 番目のテーブルは給与等級テーブルで、給与等級 (グレード)、最低給与 (Losal)、および最高給与 (Hisal) の 3 つのフィールドが含まれています。
create table SALGRADE
(
GRADE int primary key,
LOSAL double(7,2),
HISAL double(7,2)
);
給与等級テーブル (salgrade) にデータを挿入します。
insert into SALGRADE (GRADE, LOSAL, HISAL)
values (1, 700, 1200);
insert into SALGRADE (GRADE, LOSAL, HISAL)
values (2, 1201, 1400);
insert into SALGRADE (GRADE, LOSAL, HISAL)
values (3, 1401, 2000);
insert into SALGRADE (GRADE, LOSAL, HISAL)
values (4, 2001, 3000);
insert into SALGRADE (GRADE, LOSAL, HISAL)
values (5, 3001, 9999);
4. 4 番目のテーブルはボーナス テーブルで、従業員名 (ename)、従業員の仕事 (job)、給与 (sal)、通信の 4 つのフィールドが含まれています。
create table BONUS
(
ENAME VARCHAR(10),
JOB VARCHAR(9),
SAL double(7,2),
COMM double(7,2)
);
2 つの単一テーブル クエリ
データベース操作において、単一テーブル クエリとは、1 つのテーブル内のデータをクエリすることです。
1. 単純な単一テーブルのクエリ
従業員テーブルの emp テーブルをクエリします。* はすべてのデータを表します
select * from emp;
いくつかの列を表示します。
select empno,ename,sal from emp;
部分的な行を表示: where 句
select * from emp where sal > 2000;
いくつかの列といくつかの行を表示します。
select empno,ename,job,mgr from emp where sal > 2000;
2. クエリのフィールドのエイリアス
クエリ対象のフィールドのエイリアスとしてキーワードを省略できます。また、エイリアスに付いている一重引用符と二重引用符も省略できます。
select empno 员工编号,ename 姓名,sal 工资 from emp;
クエリされたフィールドにエイリアスを付ける場合は、キーワードを使用します。エイリアスには一重引用符または二重引用符を使用することもできます。両者に違いはありません。
select empno as 员工编号,ename as 姓名,sal as 工资 from emp;
select empno as '员工编号',ename as "姓名",sal as 工资 from emp;
別名に特殊記号が含まれる場合は、以下のように一重引用符または二重引用符を省略できません。従業員番号の間にはスペースが入ります(スペースは特殊記号です)
select empno as 员工 编号,ename as "姓 名",sal as 工资 from emp;
エイリアスの従業員番号が一重引用符と二重引用符を使用していない場合は、1064 エラーが返されます。
-- > 1064 - SQL 構文にエラーがあります。MySQL サーバーのバージョンに対応するマニュアルで、1 行目の「编号,ename as "姓名",sal as 工资 from emp」付近で使用する正しい構文を確認してください。
3. フィールドのクエリ時に算術演算子を使用できる
select empno,ename,sal,sal+1000 as '涨薪后',deptno from emp where sal < 2500;
select empno,ename,sal,comm,sal+comm from emp;
4. 重複排除操作 クエリ
されたデータを重複排除するには、キーワードdistinctを使用する必要があります。
select distinct job from emp;
キーワードuniqueの後に複数の列が含まれている場合は、単一の列ではなく、後続のすべての列を重複排除することを意味します。
select distinct job,deptno from emp;
5. 仕分け
クエリされたデータを並べ替えるには、キーワード order by を使用する必要があります。
デフォルトでは昇順にソートされています
select * from emp order by sal;
asc は昇順を示します。デフォルトでは省略できます。
select * from emp order by sal asc;
desは降順を意味します
select * from emp order by sal desc;
sal(給与)の場合は昇順、deptno(部署名)の場合は降順
select * from emp order by sal asc ,deptno desc;