1. Préparation des tables
La démonstration SQL de l'opération de requête sera basée sur les quatre tables suivantes. Nous créons d'abord ces quatre tables de données et y ajoutons des données.
1. La première table est une table départementale , nommée comme contenant trois champs : numéro de département (deptno), nom du département (dname), emplacement du département (loc)
create table DEPT(
DEPTNO int(2) not null,
DNAME VARCHAR(14),
LOC VARCHAR(13)
);
Ajoutez une contrainte de clé primaire pour le champ du numéro de service (deptno) :
alter table DEPT
add constraint PK_DEPT primary key (DEPTNO);
Insérer des données dans la table département (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. La deuxième table est la table des employés (emp), qui contient 8 champs, qui sont le numéro d'employé (empno), le nom de l'employé (ename), le poste (job), le leader direct (mgr) et la date d'entrée (hiredate), salaire (sal), subvention (comm), numéro de département (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)
);
Ajoutez une contrainte de clé étrangère au champ deptno de la table des employés emp, qui est associé au champ numéro de service (deptno) de la table des services (dept) :
alter table EMP
add constraint FK_DEPTNO foreign key (DEPTNO)
references DEPT (DEPTNO);
Insérez des données dans la table des employés (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. La troisième table est la table des échelons salariaux , qui contient 3 champs, à savoir : échelon salarial (grade), salaire minimum (losal) et salaire maximum (hisal) :
create table SALGRADE
(
GRADE int primary key,
LOSAL double(7,2),
HISAL double(7,2)
);
Insérez des données dans le tableau des échelons salariaux (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. La quatrième table est la table des primes , qui contient 4 champs, à savoir : nom de l'employé (ename), travail de l'employé (job), salaire (sal), comm
create table BONUS
(
ENAME VARCHAR(10),
JOB VARCHAR(9),
SAL double(7,2),
COMM double(7,2)
);
Requête à deux tables uniques
Dans les opérations de base de données, la requête à table unique consiste à interroger les données d'une table.
1. Requête simple sur une seule table
Interroger la table emp de la table des employés, * représente toutes les données
select * from emp;
Afficher quelques colonnes :
select empno,ename,sal from emp;
Afficher les lignes partielles : clause where
select * from emp where sal > 2000;
Afficher des colonnes, des lignes :
select empno,ename,job,mgr from emp where sal > 2000;
2. Aliaser le champ de la requête
Vous pouvez omettre le mot-clé pour alias le champ à interroger, et vous pouvez également omettre les guillemets simples et les guillemets doubles attachés à l'alias :
select empno 员工编号,ename 姓名,sal 工资 from emp;
Utilisez le mot clé as lors de la création d'un alias pour le champ interrogé. L'alias peut également comporter des guillemets simples ou des guillemets doubles. Il n'y a aucune différence entre les deux :
select empno as 员工编号,ename as 姓名,sal as 工资 from emp;
select empno as '员工编号',ename as "姓名",sal as 工资 from emp;
Lorsqu'il y a des symboles spéciaux dans l'alias, les guillemets simples ou les guillemets doubles ne peuvent pas être omis, comme suit, il y a un espace entre les numéros d'employés (les espaces sont des symboles spéciaux)
select empno as 员工 编号,ename as "姓 名",sal as 工资 from emp;
Si le numéro d'employé de l'alias n'utilise pas de guillemets simples ni de guillemets doubles, il renverra une erreur 1064 :
--> 1064 - Vous avez une erreur dans votre syntaxe SQL ; consultez le manuel correspondant à la version de votre serveur MySQL pour connaître la bonne syntaxe à utiliser près de '编号,ename as "姓 名",sal as 工资 from emp' à la ligne 1
3. Les opérateurs arithmétiques peuvent être utilisés lors de l'interrogation des champs
select empno,ename,sal,sal+1000 as '涨薪后',deptno from emp where sal < 2500;
select empno,ename,sal,comm,sal+comm from emp;
4. Opération de déduplication
Pour dédupliquer les données interrogées, vous devez utiliser le mot-clé distinct
select distinct job from emp;
Si plusieurs colonnes sont incluses après le mot-clé distinct , cela signifie qu'il faut dédupliquer toutes les colonnes suivantes, pas une seule colonne :
select distinct job,deptno from emp;
5. Tri
Pour trier les données interrogées, vous devez utiliser le mot-clé trier par
Par défaut, il est trié par ordre croissant
select * from emp order by sal;
asc indique l'ordre croissant, qui peut être omis par défaut
select * from emp order by sal asc;
desc veut dire descendant
select * from emp order by sal desc;
Dans le cas de sal (salaire) par ordre croissant, deptno (numéro de département) par ordre décroissant
select * from emp order by sal asc ,deptno desc;