MySQL-- 单表查询
MySQL-- 单表查询
数据准备
-- 创建部门表
create table dept(deptno int(2),dname varchar(14),loc varchar(13));
-- 添加主键
alter table dept add constraint pk_dept_deptno primary key(deptno);-- -------------------------------------------------------------------
-- 创建员工表
create table emp(
empno int(4) primary key,
ename varchar(10),
job varchar(9),
mgr int(4),
hairdate date,
sal double(7,2),
comm double(7,2),
deptno int(2)
);
-- 添加外键
alter table emp add constraint fk_emp_deptno foreign key(deptno) references dept(deptno);-- 创建工资等级表
create table salgrade(grade int primary key,losal double(7,2),hisal double(7,2)
);-- 创建津贴表
create table bonus(ename varchar(10),job varchar(9),sal double(7,2),comm double(7,2)
);insert into dept(deptno,dname,loc)values(10,"ACCOUNTING","NEW YORK");
insert into dept(deptno,dname,loc)values(20,"RESTARCH","DALLAS");
insert into dept(deptno,dname,loc)values(30,"SALES","CHICAGO");
insert into dept(deptno,dname,loc)values(40,"OPERATIONS","BOSTON");insert into emp(empno,ename,job,mgr,hairdate,sal,comm,deptno)values(7369,"SMITH","CLERK",7902,"1980-12-17",800,null,20);
insert into emp(empno,ename,job,mgr,hairdate,sal,comm,deptno)values(7499,"ALLEN","SALESMAN",7698,"1981-02-20",1600,300,30);
insert into emp(empno,ename,job,mgr,hairdate,sal,comm,deptno)values(7521,"WARD","SALESMAN",7698,"1981-02-22",1250,500,30);
insert into emp(empno,ename,job,mgr,hairdate,sal,comm,deptno)values(7566,"JONES","MANAGER",7839,"1981-04-02",2975,null,20);
insert into emp(empno,ename,job,mgr,hairdate,sal,comm,deptno)values(7654,"MANTIN","SALESMAN",7698,"1981-09-28",1250,1400,30);
insert into emp(empno,ename,job,mgr,hairdate,sal,comm,deptno)values(7698,"BLAKE","MANAGER",7839,"1981-05-01",2850,null,30);
insert into emp(empno,ename,job,mgr,hairdate,sal,comm,deptno)values(7782,"CLARK","MANAGER",7839,"1981-06-09",2450,null,10);
insert into emp(empno,ename,job,mgr,hairdate,sal,comm,deptno)values(7788,"SCOTT","ANALYST",7566,"1987-04-19",3000,null,20);
insert into emp(empno,ename,job,mgr,hairdate,sal,comm,deptno)values(7839,"KING","PRESIDENT",null,"1981-11-17",5000,null,10);
insert into emp(empno,ename,job,mgr,hairdate,sal,comm,deptno)values(7844,"TURNER","SALESMAN",7698,"1981-09-08",1500,0,30);
insert into emp(empno,ename,job,mgr,hairdate,sal,comm,deptno)values(7876,"ADAMS","CLERK",7788,"1987-05-23",1100,null,20);
insert into emp(empno,ename,job,mgr,hairdate,sal,comm,deptno)values(7900,"JAMES","CLERK",7698,"1981-12-03",950,null,30);
insert into emp(empno,ename,job,mgr,hairdate,sal,comm,deptno)values(7902,"FORD","ANALYST",7566,"1981-12-03",3000,null,20);
insert into emp(empno,ename,job,mgr,hairdate,sal,comm,deptno)values(7934,"MILLER","CLERK",7782,"1982-01-23",1300,null,10);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);-- ----------------------------------------------------------------------------------------------------------- 部门表 departmentselect *from dept;-- 员工表 Employee
-- job 岗位 mar manager 上级编号 hiredate 入职时间 firedate 离职时间 salary 薪水 comm 补助select *from emp;
desc emp-- deptno 作为外键,参考dept表的主键 deptno;
-- mhr 作为外键,参考当前表 empno 自关联;select *from salgrade-- 工资等级 graded
-- losal 下限 hisal 上限;select *from bonus;
最简单的查询语句
1.显示所有列
mysql> select *from emp;
+-------+--------+-----------+------+------------+---------+---------+--------+
| empno | ename | job | mgr | hiredate | sal | comm | deptno |
+-------+--------+-----------+------+------------+---------+---------+--------+
| 7369 | SMITH | CLERK | 7902 | 1980-12-17 | 800.00 | NULL | 20 |
| 7499 | ALLEN | SALESMAN | 7698 | 1981-02-20 | 1600.00 | 300.00 | 30 |
| 7521 | WARD | SALESMAN | 7698 | 1981-02-22 | 1250.00 | 500.00 | 30 |
| 7566 | JONES | MANAGER | 7839 | 1981-04-02 | 2975.00 | NULL | 20 |
| 7654 | MANTIN | SALESMAN | 7698 | 1981-09-28 | 1250.00 | 1400.00 | 30 |
| 7698 | BLAKE | MANAGER | 7839 | 1981-05-01 | 2850.00 | NULL | 30 |
| 7782 | CLARK | MANAGER | 7839 | 1981-06-09 | 2450.00 | NULL | 10 |
| 7788 | SCOTT | ANALYST | 7566 | 1987-04-19 | 3000.00 | NULL | 20 |
| 7839 | KING | PRESIDENT | NULL | 1981-11-17 | 5000.00 | NULL | 10 |
| 7844 | TURNER | SALESMAN | 7698 | 1981-09-08 | 1500.00 | 0.00 | 30 |
| 7876 | ADAMS | CLERK | 7788 | 1987-05-23 | 1100.00 | NULL | 20 |
| 7900 | JAMES | CLERK | 7698 | 1981-12-03 | 950.00 | NULL | 30 |
| 7902 | FORD | ANALYST | 7566 | 1981-12-03 | 3000.00 | NULL | 20 |
| 7934 | MILLER | CLERK | 7782 | 1982-01-23 | 1300.00 | NULL | 10 |
+-------+--------+-----------+------+------------+---------+---------+--------+
14 rows in set (0.00 sec)
2.显示部分列
mysql> select empno,ename,job,sal from emp; -- 注意不同字段要用“,”隔开
+-------+--------+-----------+---------+
| empno | ename | job | sal |
+-------+--------+-----------+---------+
| 7369 | SMITH | CLERK | 800.00 |
| 7499 | ALLEN | SALESMAN | 1600.00 |
| 7521 | WARD | SALESMAN | 1250.00 |
| 7566 | JONES | MANAGER | 2975.00 |
| 7654 | MANTIN | SALESMAN | 1250.00 |
| 7698 | BLAKE | MANAGER | 2850.00 |
| 7782 | CLARK | MANAGER | 2450.00 |
| 7788 | SCOTT | ANALYST | 3000.00 |
| 7839 | KING | PRESIDENT | 5000.00 |
| 7844 | TURNER | SALESMAN | 1500.00 |
| 7876 | ADAMS | CLERK | 1100.00 |
| 7900 | JAMES | CLERK | 950.00 |
| 7902 | FORD | ANALYST | 3000.00 |
| 7934 | MILLER | CLERK | 1300.00 |
+-------+--------+-----------+---------+
14 rows in set (0.00 sec)
3.算术运算
mysql> select empno,ename,job,sal,comm,sal+comm from emp;
+-------+--------+-----------+---------+---------+----------+
| empno | ename | job | sal | comm | sal+comm |
+-------+--------+-----------+---------+---------+----------+
| 7369 | SMITH | CLERK | 800.00 | NULL | NULL |
| 7499 | ALLEN | SALESMAN | 1600.00 | 300.00 | 1900.00 |
| 7521 | WARD | SALESMAN | 1250.00 | 500.00 | 1750.00 |
| 7566 | JONES | MANAGER | 2975.00 | NULL | NULL |
| 7654 | MANTIN | SALESMAN | 1250.00 | 1400.00 | 2650.00 |
| 7698 | BLAKE | MANAGER | 2850.00 | NULL | NULL |
| 7782 | CLARK | MANAGER | 2450.00 | NULL | NULL |
| 7788 | SCOTT | ANALYST | 3000.00 | NULL | NULL |
| 7839 | KING | PRESIDENT | 5000.00 | NULL | NULL |
| 7844 | TURNER | SALESMAN | 1500.00 | 0.00 | 1500.00 |
| 7876 | ADAMS | CLERK | 1100.00 | NULL | NULL |
| 7900 | JAMES | CLERK | 950.00 | NULL | NULL |
| 7902 | FORD | ANALYST | 3000.00 | NULL | NULL |
| 7934 | MILLER | CLERK | 1300.00 | NULL | NULL |
+-------+--------+-----------+---------+---------+----------+
14 rows in set (0.00 sec)-- 结果很显然,sal+comm 所得结果:如果comm为NULL 则sal+comm也为空,这显然不是我们想要的结果,解决方案会在后面提出
4.去重
mysql> select job from emp;
+-----------+
| job |
+-----------+
| CLERK |
| SALESMAN |
| SALESMAN |
| MANAGER |
| SALESMAN |
| MANAGER |
| MANAGER |
| ANALYST |
| PRESIDENT |
| SALESMAN |
| CLERK |
| CLERK |
| ANALYST |
| CLERK |
+-----------+
14 rows in set (0.00 sec)mysql> select distinct job from emp; -- distinct 去重
+-----------+
| job |
+-----------+
| CLERK |
| SALESMAN |
| MANAGER |
| ANALYST |
| PRESIDENT |
+-----------+
5 rows in set (0.00 sec)mysql> select distinct ename,job from emp; -- 对后面所有列去重
+--------+-----------+
| ename | job |
+--------+-----------+
| SMITH | CLERK |
| ALLEN | SALESMAN |
| WARD | SALESMAN |
| JONES | MANAGER |
| MANTIN | SALESMAN |
| BLAKE | MANAGER |
| CLARK | MANAGER |
| SCOTT | ANALYST |
| KING | PRESIDENT |
| TURNER | SALESMAN |
| ADAMS | CLERK |
| JAMES | CLERK |
| FORD | ANALYST |
| MILLER | CLERK |
+--------+-----------+
14 rows in set (0.00 sec)
5.排序
mysql> select *from emp order by sal asc; -- 升序排列,默认为升序,asc可省略
+-------+--------+-----------+------+------------+---------+---------+--------+
| empno | ename | job | mgr | hiredate | sal | comm | deptno |
+-------+--------+-----------+------+------------+---------+---------+--------+
| 7369 | SMITH | CLERK | 7902 | 1980-12-17 | 800.00 | NULL | 20 |
| 7900 | JAMES | CLERK | 7698 | 1981-12-03 | 950.00 | NULL | 30 |
| 7876 | ADAMS | CLERK | 7788 | 1987-05-23 | 1100.00 | NULL | 20 |
| 7521 | WARD | SALESMAN | 7698 | 1981-02-22 | 1250.00 | 500.00 | 30 |
| 7654 | MANTIN | SALESMAN | 7698 | 1981-09-28 | 1250.00 | 1400.00 | 30 |
| 7934 | MILLER | CLERK | 7782 | 1982-01-23 | 1300.00 | NULL | 10 |
| 7844 | TURNER | SALESMAN | 7698 | 1981-09-08 | 1500.00 | 0.00 | 30 |
| 7499 | ALLEN | SALESMAN | 7698 | 1981-02-20 | 1600.00 | 300.00 | 30 |
| 7782 | CLARK | MANAGER | 7839 | 1981-06-09 | 2450.00 | NULL | 10 |
| 7698 | BLAKE | MANAGER | 7839 | 1981-05-01 | 2850.00 | NULL | 30 |
| 7566 | JONES | MANAGER | 7839 | 1981-04-02 | 2975.00 | NULL | 20 |
| 7788 | SCOTT | ANALYST | 7566 | 1987-04-19 | 3000.00 | NULL | 20 |
| 7902 | FORD | ANALYST | 7566 | 1981-12-03 | 3000.00 | NULL | 20 |
| 7839 | KING | PRESIDENT | NULL | 1981-11-17 | 5000.00 | NULL | 10 |
+-------+--------+-----------+------+------------+---------+---------+--------+
14 rows in set (0.00 sec)mysql> select *from emp order by sal desc;-- 降序排列
+-------+--------+-----------+------+------------+---------+---------+--------+
| empno | ename | job | mgr | hiredate | sal | comm | deptno |
+-------+--------+-----------+------+------------+---------+---------+--------+
| 7839 | KING | PRESIDENT | NULL | 1981-11-17 | 5000.00 | NULL | 10 |
| 7788 | SCOTT | ANALYST | 7566 | 1987-04-19 | 3000.00 | NULL | 20 |
| 7902 | FORD | ANALYST | 7566 | 1981-12-03 | 3000.00 | NULL | 20 |
| 7566 | JONES | MANAGER | 7839 | 1981-04-02 | 2975.00 | NULL | 20 |
| 7698 | BLAKE | MANAGER | 7839 | 1981-05-01 | 2850.00 | NULL | 30 |
| 7782 | CLARK | MANAGER | 7839 | 1981-06-09 | 2450.00 | NULL | 10 |
| 7499 | ALLEN | SALESMAN | 7698 | 1981-02-20 | 1600.00 | 300.00 | 30 |
| 7844 | TURNER | SALESMAN | 7698 | 1981-09-08 | 1500.00 | 0.00 | 30 |
| 7934 | MILLER | CLERK | 7782 | 1982-01-23 | 1300.00 | NULL | 10 |
| 7521 | WARD | SALESMAN | 7698 | 1981-02-22 | 1250.00 | 500.00 | 30 |
| 7654 | MANTIN | SALESMAN | 7698 | 1981-09-28 | 1250.00 | 1400.00 | 30 |
| 7876 | ADAMS | CLERK | 7788 | 1987-05-23 | 1100.00 | NULL | 20 |
| 7900 | JAMES | CLERK | 7698 | 1981-12-03 | 950.00 | NULL | 30 |
| 7369 | SMITH | CLERK | 7902 | 1980-12-17 | 800.00 | NULL | 20 |
+-------+--------+-----------+------+------------+---------+---------+--------+
14 rows in set (0.00 sec)6.别名
mysql> select empno 编号,ename 姓名,job "职 位",sal 工资 from emp;-- “;;职 位”中间有空格,必须用“”;
+--------+--------+------------+---------+
| 编号 | 姓名 | 职 位 | 工资 |
+--------+--------+------------+---------+
| 7369 | SMITH | CLERK | 800.00 |
| 7499 | ALLEN | SALESMAN | 1600.00 |
| 7521 | WARD | SALESMAN | 1250.00 |
| 7566 | JONES | MANAGER | 2975.00 |
| 7654 | MANTIN | SALESMAN | 1250.00 |
| 7698 | BLAKE | MANAGER | 2850.00 |
| 7782 | CLARK | MANAGER | 2450.00 |
| 7788 | SCOTT | ANALYST | 3000.00 |
| 7839 | KING | PRESIDENT | 5000.00 |
| 7844 | TURNER | SALESMAN | 1500.00 |
| 7876 | ADAMS | CLERK | 1100.00 |
| 7900 | JAMES | CLERK | 950.00 |
| 7902 | FORD | ANALYST | 3000.00 |
| 7934 | MILLER | CLERK | 1300.00 |
+--------+--------+------------+---------+
14 rows in set (0.00 sec)mysql> select empno as 编号,ename as 姓名 from emp; as alias 别名,可以省略
+--------+--------+
| 编号 | 姓名 |
+--------+--------+
| 7369 | SMITH |
| 7499 | ALLEN |
| 7521 | WARD |
| 7566 | JONES |
| 7654 | MANTIN |
| 7698 | BLAKE |
| 7782 | CLARK |
| 7788 | SCOTT |
| 7839 | KING |
| 7844 | TURNER |
| 7876 | ADAMS |
| 7900 | JAMES |
| 7902 | FORD |
| 7934 | MILLER |
+--------+--------+
14 rows in set (0.00 sec)
where 子句
1.-- 最简单的条件 关系运算符
mysql> select empno,ename,sal from emp where sal<=2500;
+-------+--------+---------+
| empno | ename | sal |
+-------+--------+---------+
| 7369 | SMITH | 800.00 |
| 7499 | ALLEN | 1600.00 |
| 7521 | WARD | 1250.00 |
| 7654 | MANTIN | 1250.00 |
| 7782 | CLARK | 2450.00 |
| 7844 | TURNER | 1500.00 |
| 7876 | ADAMS | 1100.00 |
| 7900 | JAMES | 950.00 |
| 7934 | MILLER | 1300.00 |
+-------+--------+---------+
9 rows in set (0.00 sec)mysql> select empno,ename,job,sal from emp where job="CLERK";
+-------+--------+-------+---------+
| empno | ename | job | sal |
+-------+--------+-------+---------+
| 7369 | SMITH | CLERK | 800.00 |
| 7876 | ADAMS | CLERK | 1100.00 |
| 7900 | JAMES | CLERK | 950.00 |
| 7934 | MILLER | CLERK | 1300.00 |
+-------+--------+-------+---------+
4 rows in set (0.00 sec)mysql> select empno,ename,job,sal from emp where job!="CLERK";-- 不等于
+-------+--------+-----------+---------+
| empno | ename | job | sal |
+-------+--------+-----------+---------+
| 7499 | ALLEN | SALESMAN | 1600.00 |
| 7521 | WARD | SALESMAN | 1250.00 |
| 7566 | JONES | MANAGER | 2975.00 |
| 7654 | MANTIN | SALESMAN | 1250.00 |
| 7698 | BLAKE | MANAGER | 2850.00 |
| 7782 | CLARK | MANAGER | 2450.00 |
| 7788 | SCOTT | ANALYST | 3000.00 |
| 7839 | KING | PRESIDENT | 5000.00 |
| 7844 | TURNER | SALESMAN | 1500.00 |
| 7902 | FORD | ANALYST | 3000.00 |
+-------+--------+-----------+---------+
10 rows in set (0.00 sec)
mysql> select empno,ename,job,sal from emp where job<>"CLERK";-- 不等于
+-------+--------+-----------+---------+
| empno | ename | job | sal |
+-------+--------+-----------+---------+
| 7499 | ALLEN | SALESMAN | 1600.00 |
| 7521 | WARD | SALESMAN | 1250.00 |
| 7566 | JONES | MANAGER | 2975.00 |
| 7654 | MANTIN | SALESMAN | 1250.00 |
| 7698 | BLAKE | MANAGER | 2850.00 |
| 7782 | CLARK | MANAGER | 2450.00 |
| 7788 | SCOTT | ANALYST | 3000.00 |
| 7839 | KING | PRESIDENT | 5000.00 |
| 7844 | TURNER | SALESMAN | 1500.00 |
| 7902 | FORD | ANALYST | 3000.00 |
+-------+--------+-----------+---------+
10 rows in set (0.00 sec)
2.-- 逻辑运算符 and
mysql> select *from emp where sal>=1500&&sal<=3000;
+-------+--------+----------+------+------------+---------+--------+--------+
| empno | ename | job | mgr | hiredate | sal | comm | deptno |
+-------+--------+----------+------+------------+---------+--------+--------+
| 7499 | ALLEN | SALESMAN | 7698 | 1981-02-20 | 1600.00 | 300.00 | 30 |
| 7566 | JONES | MANAGER | 7839 | 1981-04-02 | 2975.00 | NULL | 20 |
| 7698 | BLAKE | MANAGER | 7839 | 1981-05-01 | 2850.00 | NULL | 30 |
| 7782 | CLARK | MANAGER | 7839 | 1981-06-09 | 2450.00 | NULL | 10 |
| 7788 | SCOTT | ANALYST | 7566 | 1987-04-19 | 3000.00 | NULL | 20 |
| 7844 | TURNER | SALESMAN | 7698 | 1981-09-08 | 1500.00 | 0.00 | 30 |
| 7902 | FORD | ANALYST | 7566 | 1981-12-03 | 3000.00 | NULL | 20 |
+-------+--------+----------+------+------------+---------+--------+--------+
7 rows in set, 1 warning (0.00 sec)mysql> select *from emp where sal>=1500 and sal<=3000;
+-------+--------+----------+------+------------+---------+--------+--------+
| empno | ename | job | mgr | hiredate | sal | comm | deptno |
+-------+--------+----------+------+------------+---------+--------+--------+
| 7499 | ALLEN | SALESMAN | 7698 | 1981-02-20 | 1600.00 | 300.00 | 30 |
| 7566 | JONES | MANAGER | 7839 | 1981-04-02 | 2975.00 | NULL | 20 |
| 7698 | BLAKE | MANAGER | 7839 | 1981-05-01 | 2850.00 | NULL | 30 |
| 7782 | CLARK | MANAGER | 7839 | 1981-06-09 | 2450.00 | NULL | 10 |
| 7788 | SCOTT | ANALYST | 7566 | 1987-04-19 | 3000.00 | NULL | 20 |
| 7844 | TURNER | SALESMAN | 7698 | 1981-09-08 | 1500.00 | 0.00 | 30 |
| 7902 | FORD | ANALYST | 7566 | 1981-12-03 | 3000.00 | NULL | 20 |
+-------+--------+----------+------+------------+---------+--------+--------+
7 rows in set (0.00 sec)
3.-- 逻辑运算符 or
mysql> select *from emp where job="CLERK" || job="SALESMAN";
+-------+--------+----------+------+------------+---------+---------+--------+
| empno | ename | job | mgr | hiredate | sal | comm | deptno |
+-------+--------+----------+------+------------+---------+---------+--------+
| 7369 | SMITH | CLERK | 7902 | 1980-12-17 | 800.00 | NULL | 20 |
| 7499 | ALLEN | SALESMAN | 7698 | 1981-02-20 | 1600.00 | 300.00 | 30 |
| 7521 | WARD | SALESMAN | 7698 | 1981-02-22 | 1250.00 | 500.00 | 30 |
| 7654 | MANTIN | SALESMAN | 7698 | 1981-09-28 | 1250.00 | 1400.00 | 30 |
| 7844 | TURNER | SALESMAN | 7698 | 1981-09-08 | 1500.00 | 0.00 | 30 |
| 7876 | ADAMS | CLERK | 7788 | 1987-05-23 | 1100.00 | NULL | 20 |
| 7900 | JAMES | CLERK | 7698 | 1981-12-03 | 950.00 | NULL | 30 |
| 7934 | MILLER | CLERK | 7782 | 1982-01-23 | 1300.00 | NULL | 10 |
+-------+--------+----------+------+------------+---------+---------+--------+
8 rows in set, 1 warning (0.00 sec)mysql> select *from emp where job="CLERK" or job="SALESMAN";
+-------+--------+----------+------+------------+---------+---------+--------+
| empno | ename | job | mgr | hiredate | sal | comm | deptno |
+-------+--------+----------+------+------------+---------+---------+--------+
| 7369 | SMITH | CLERK | 7902 | 1980-12-17 | 800.00 | NULL | 20 |
| 7499 | ALLEN | SALESMAN | 7698 | 1981-02-20 | 1600.00 | 300.00 | 30 |
| 7521 | WARD | SALESMAN | 7698 | 1981-02-22 | 1250.00 | 500.00 | 30 |
| 7654 | MANTIN | SALESMAN | 7698 | 1981-09-28 | 1250.00 | 1400.00 | 30 |
| 7844 | TURNER | SALESMAN | 7698 | 1981-09-08 | 1500.00 | 0.00 | 30 |
| 7876 | ADAMS | CLERK | 7788 | 1987-05-23 | 1100.00 | NULL | 20 |
| 7900 | JAMES | CLERK | 7698 | 1981-12-03 | 950.00 | NULL | 30 |
| 7934 | MILLER | CLERK | 7782 | 1982-01-23 | 1300.00 | NULL | 10 |
+-------+--------+----------+------+------------+---------+---------+--------+
8 rows in set (0.00 sec)
4.-- 模糊匹配 % _mysql> select *from emp where ename like "%A%"; --"%":任意多个字符,表示‘A’前面和后面可以有任意多个字符
+-------+--------+----------+------+------------+---------+---------+--------+
| empno | ename | job | mgr | hiredate | sal | comm | deptno |
+-------+--------+----------+------+------------+---------+---------+--------+
| 7499 | ALLEN | SALESMAN | 7698 | 1981-02-20 | 1600.00 | 300.00 | 30 |
| 7521 | WARD | SALESMAN | 7698 | 1981-02-22 | 1250.00 | 500.00 | 30 |
| 7654 | MANTIN | SALESMAN | 7698 | 1981-09-28 | 1250.00 | 1400.00 | 30 |
| 7698 | BLAKE | MANAGER | 7839 | 1981-05-01 | 2850.00 | NULL | 30 |
| 7782 | CLARK | MANAGER | 7839 | 1981-06-09 | 2450.00 | NULL | 10 |
| 7876 | ADAMS | CLERK | 7788 | 1987-05-23 | 1100.00 | NULL | 20 |
| 7900 | JAMES | CLERK | 7698 | 1981-12-03 | 950.00 | NULL | 30 |
+-------+--------+----------+------+------------+---------+---------+--------+
7 rows in set (0.00 sec)mysql> select *from emp where ename like "_A%"; --“—”:任意一个字符,表示‘A’前面可以有任意一个字符,后面可以有任意多个字符
+-------+--------+----------+------+------------+---------+---------+--------+
| empno | ename | job | mgr | hiredate | sal | comm | deptno |
+-------+--------+----------+------+------------+---------+---------+--------+
| 7521 | WARD | SALESMAN | 7698 | 1981-02-22 | 1250.00 | 500.00 | 30 |
| 7654 | MANTIN | SALESMAN | 7698 | 1981-09-28 | 1250.00 | 1400.00 | 30 |
| 7900 | JAMES | CLERK | 7698 | 1981-12-03 | 950.00 | NULL | 30 |
+-------+--------+----------+------+------------+---------+---------+--------+
3 rows in set (0.00 sec)5.-- 小括号 --运算优先级最高
mysql> select *from emp where job="MANAGER" or job="CLERK" and sal>=2500;
+-------+-------+---------+------+------------+---------+------+--------+
| empno | ename | job | mgr | hiredate | sal | comm | deptno |
+-------+-------+---------+------+------------+---------+------+--------+
| 7566 | JONES | MANAGER | 7839 | 1981-04-02 | 2975.00 | NULL | 20 |
| 7698 | BLAKE | MANAGER | 7839 | 1981-05-01 | 2850.00 | NULL | 30 |
| 7782 | CLARK | MANAGER | 7839 | 1981-06-09 | 2450.00 | NULL | 10 |
+-------+-------+---------+------+------------+---------+------+--------+
3 rows in set (0.00 sec)mysql> select *from emp where (job="MANAGER" or job="CLERK") and sal>=2500;
+-------+-------+---------+------+------------+---------+------+--------+
| empno | ename | job | mgr | hiredate | sal | comm | deptno |
+-------+-------+---------+------+------------+---------+------+--------+
| 7566 | JONES | MANAGER | 7839 | 1981-04-02 | 2975.00 | NULL | 20 |
| 7698 | BLAKE | MANAGER | 7839 | 1981-05-01 | 2850.00 | NULL | 30 |
+-------+-------+---------+------+------------+---------+------+--------+
2 rows in set (0.00 sec)
使用函数
-- 函数作用:提高select查询数据的能力
-- 函数不会修改数据库的数据-- 函数的分类-- 单行函数 -- 字符串函数
mysql> select empno,ename,lower(ename),upper(ename),job ,sal from emp order by sal desc;
+-------+--------+--------------+--------------+-----------+---------+
| empno | ename | lower(ename) | upper(ename) | job | sal |
+-------+--------+--------------+--------------+-----------+---------+
| 7839 | KING | king | KING | PRESIDENT | 5000.00 |
| 7788 | SCOTT | scott | SCOTT | ANALYST | 3000.00 |
| 7902 | FORD | ford | FORD | ANALYST | 3000.00 |
| 7566 | JONES | jones | JONES | MANAGER | 2975.00 |
| 7698 | BLAKE | blake | BLAKE | MANAGER | 2850.00 |
| 7782 | CLARK | clark | CLARK | MANAGER | 2450.00 |
| 7499 | ALLEN | allen | ALLEN | SALESMAN | 1600.00 |
| 7844 | TURNER | turner | TURNER | SALESMAN | 1500.00 |
| 7934 | MILLER | miller | MILLER | CLERK | 1300.00 |
| 7521 | WARD | ward | WARD | SALESMAN | 1250.00 |
| 7654 | MANTIN | mantin | MANTIN | SALESMAN | 1250.00 |
| 7876 | ADAMS | adams | ADAMS | CLERK | 1100.00 |
| 7900 | JAMES | james | JAMES | CLERK | 950.00 |
| 7369 | SMITH | smith | SMITH | CLERK | 800.00 |
+-------+--------+--------------+--------------+-----------+---------+
14 rows in set (0.00 sec)-- 数值函数
mysql> select abs(-5),ceil(5.4),floor(5.6),round(3.14) from dual;-- dual 虚拟表,不用创建表也可以使用,便于练习
+---------+-----------+------------+-------------+
| abs(-5) | ceil(5.4) | floor(5.6) | round(3.14) |
+---------+-----------+------------+-------------+
| 5 | 6 | 5 | 3 |
+---------+-----------+------------+-------------+
1 row in set (0.00 sec)mysql> select abs(-5),ceil(5.4),floor(5.6),round(3.14);-- 如果没有where子句,“from dual”可以省略
+---------+-----------+------------+-------------+
| abs(-5) | ceil(5.4) | floor(5.6) | round(3.14) |
+---------+-----------+------------+-------------+
| 5 | 6 | 5 | 3 |
+---------+-----------+------------+-------------+
1 row in set (0.00 sec)-- abs() 绝对值,ceil() 上限,floor() 下限,round() 四舍五入
-- 日期和时间函数
mysql> select curdate(),curtime(); -- 日期和时间分离
+------------+-----------+
| curdate() | curtime() |
+------------+-----------+
| 2021-09-25 | 09:55:54 |
+------------+-----------+
1 row in set (0.00 sec)mysql> select now(),sysdate(),sleep(2),now(),sysdate(); -- 日期和时间结合
+---------------------+---------------------+----------+---------------------+---------------------+
| now() | sysdate() | sleep(2) | now() | sysdate() |
+---------------------+---------------------+----------+---------------------+---------------------+
| 2021-09-25 09:56:40 | 2021-09-25 09:56:40 | 0 | 2021-09-25 09:56:40 | 2021-09-25 09:56:42 |
+---------------------+---------------------+----------+---------------------+---------------------+
1 row in set (2.02 sec)
-- sleep(n) 睡眠n秒,now() 的时间不会更新,sysdate() 的时间会更新 详情见上表
-- 流程函数-- if
mysql> select empno,ename,job,sal,if(sal>=2500,"高新","低薪")from emp order by sal;
+-------+--------+-----------+---------+---------------------------------+
| empno | ename | job | sal | if(sal>=2500,"高新","低薪") |
+-------+--------+-----------+---------+---------------------------------+
| 7369 | SMITH | CLERK | 800.00 | 低薪 |
| 7900 | JAMES | CLERK | 950.00 | 低薪 |
| 7876 | ADAMS | CLERK | 1100.00 | 低薪 |
| 7521 | WARD | SALESMAN | 1250.00 | 低薪 |
| 7654 | MANTIN | SALESMAN | 1250.00 | 低薪 |
| 7934 | MILLER | CLERK | 1300.00 | 低薪 |
| 7844 | TURNER | SALESMAN | 1500.00 | 低薪 |
| 7499 | ALLEN | SALESMAN | 1600.00 | 低薪 |
| 7782 | CLARK | MANAGER | 2450.00 | 低薪 |
| 7698 | BLAKE | MANAGER | 2850.00 | 高新 |
| 7566 | JONES | MANAGER | 2975.00 | 高新 |
| 7788 | SCOTT | ANALYST | 3000.00 | 高新 |
| 7902 | FORD | ANALYST | 3000.00 | 高新 |
| 7839 | KING | PRESIDENT | 5000.00 | 高新 |
+-------+--------+-----------+---------+---------------------------------+
14 rows in set (0.00 sec)
-- if(条件表达式,A,B) 如果表达式为true则A,否则B;mysql> select empno,ename,job,sal,comm,sal+ifnull(comm,0) 总工资 from emp;
+-------+--------+-----------+---------+---------+-----------+
| empno | ename | job | sal | comm | 总工资 |
+-------+--------+-----------+---------+---------+-----------+
| 7369 | SMITH | CLERK | 800.00 | NULL | 800.00 |
| 7499 | ALLEN | SALESMAN | 1600.00 | 300.00 | 1900.00 |
| 7521 | WARD | SALESMAN | 1250.00 | 500.00 | 1750.00 |
| 7566 | JONES | MANAGER | 2975.00 | NULL | 2975.00 |
| 7654 | MANTIN | SALESMAN | 1250.00 | 1400.00 | 2650.00 |
| 7698 | BLAKE | MANAGER | 2850.00 | NULL | 2850.00 |
| 7782 | CLARK | MANAGER | 2450.00 | NULL | 2450.00 |
| 7788 | SCOTT | ANALYST | 3000.00 | NULL | 3000.00 |
| 7839 | KING | PRESIDENT | 5000.00 | NULL | 5000.00 |
| 7844 | TURNER | SALESMAN | 1500.00 | 0.00 | 1500.00 |
| 7876 | ADAMS | CLERK | 1100.00 | NULL | 1100.00 |
| 7900 | JAMES | CLERK | 950.00 | NULL | 950.00 |
| 7902 | FORD | ANALYST | 3000.00 | NULL | 3000.00 |
| 7934 | MILLER | CLERK | 1300.00 | NULL | 1300.00 |
+-------+--------+-----------+---------+---------+-----------+
14 rows in set (0.00 sec)
-- ifnull(A,0) 如果A为null,则A值取0;填坑上文mysql> select nullif(1,1),nullif(1,2);
+-------------+-------------+
| nullif(1,1) | nullif(1,2) |
+-------------+-------------+
| NULL | 1 |
+-------------+-------------+
1 row in set (0.00 sec)nullif(A,B) 如果A和B相等返回NULL,否则返回A;
-- case-- case 等值判断 switch
mysql> select empno,ename,job,
case job when "CLERK" then "店员" when "SALESMAN" then "销售" when "MANAGER" then "经理 "else "其他"
end 岗位, -- 以case job开始,以end结束,end后面可以自定义列名;
sal from emp order by sal;
+-------+--------+-----------+---------+---------+
| empno | ename | job | 岗位 | sal |
+-------+--------+-----------+---------+---------+
| 7369 | SMITH | CLERK | 店员 | 800.00 |
| 7900 | JAMES | CLERK | 店员 | 950.00 |
| 7876 | ADAMS | CLERK | 店员 | 1100.00 |
| 7521 | WARD | SALESMAN | 销售 | 1250.00 |
| 7654 | MANTIN | SALESMAN | 销售 | 1250.00 |
| 7934 | MILLER | CLERK | 店员 | 1300.00 |
| 7844 | TURNER | SALESMAN | 销售 | 1500.00 |
| 7499 | ALLEN | SALESMAN | 销售 | 1600.00 |
| 7782 | CLARK | MANAGER | 经理 | 2450.00 |
| 7698 | BLAKE | MANAGER | 经理 | 2850.00 |
| 7566 | JONES | MANAGER | 经理 | 2975.00 |
| 7788 | SCOTT | ANALYST | 其他 | 3000.00 |
| 7902 | FORD | ANALYST | 其他 | 3000.00 |
| 7839 | KING | PRESIDENT | 其他 | 5000.00 |
+-------+--------+-----------+---------+---------+
14 rows in set (0.00 sec)-- case 区间判断 if_else if_elsemysql> select empno,ename,job,sal,case when sal<=1000 then "E" when sal<=2000 then "D"when sal<=3000 then "C" when sal<=4000 then "B"when sal<=5000 then "A"else "其他" end 工资等级 from emp order by sal;
+-------+--------+-----------+---------+--------------+
| empno | ename | job | sal | 工资等级 |
+-------+--------+-----------+---------+--------------+
| 7369 | SMITH | CLERK | 800.00 | E |
| 7900 | JAMES | CLERK | 950.00 | E |
| 7876 | ADAMS | CLERK | 1100.00 | D |
| 7521 | WARD | SALESMAN | 1250.00 | D |
| 7654 | MANTIN | SALESMAN | 1250.00 | D |
| 7934 | MILLER | CLERK | 1300.00 | D |
| 7844 | TURNER | SALESMAN | 1500.00 | D |
| 7499 | ALLEN | SALESMAN | 1600.00 | D |
| 7782 | CLARK | MANAGER | 2450.00 | C |
| 7698 | BLAKE | MANAGER | 2850.00 | C |
| 7566 | JONES | MANAGER | 2975.00 | C |
| 7788 | SCOTT | ANALYST | 3000.00 | C |
| 7902 | FORD | ANALYST | 3000.00 | C |
| 7839 | KING | PRESIDENT | 5000.00 | A |
+-------+--------+-----------+---------+--------------+
14 rows in set (0.00 sec)-- 多行函数
-- max(n),min(n),sum(n),count(n),avg(n)
-- 除了这五个多行函数,其余都是单行函数
-- 其中max(),nin(),count()中参数n可以为任意数据类型,sum(),avg() 中n应为数值类型
group by------having 子句
-- 利用 group by语句实现按照岗位计算平均工资
mysql> select job,avg(sal),count(1) from emp group by job order by avg(sal) desc;
+-----------+-------------+----------+
| job | avg(sal) | count(1) |
+-----------+-------------+----------+
| PRESIDENT | 5000.000000 | 1 |
| ANALYST | 3000.000000 | 2 |
| MANAGER | 2758.333333 | 3 |
| SALESMAN | 1400.000000 | 4 |
| CLERK | 1037.500000 | 4 |
+-----------+-------------+----------+
5 rows in set (0.00 sec)
-- 使用where子句去除 “MANGER”
mysql> select job,avg(sal),count(1) from emp where job!="MANAGER" group by job order by avg(sal) desc;
+-----------+-------------+----------+
| job | avg(sal) | count(1) |
+-----------+-------------+----------+
| PRESIDENT | 5000.000000 | 1 |
| ANALYST | 3000.000000 | 2 |
| SALESMAN | 1400.000000 | 4 |
| CLERK | 1037.500000 | 4 |
+-----------+-------------+----------+
4 rows in set (0.00 sec)
-- 使用having去除 “MANAGER”
mysql> select job,avg(sal),count(1) from emp group by job having job!="MANAGER" order by avg(sal) desc;
+-----------+-------------+----------+
| job | avg(sal) | count(1) |
+-----------+-------------+----------+
| PRESIDENT | 5000.000000 | 1 |
| ANALYST | 3000.000000 | 2 |
| SALESMAN | 1400.000000 | 4 |
| CLERK | 1037.500000 | 4 |
+-----------+-------------+----------+
4 rows in set (0.00 sec)
-- 顺序:先where再group by再having
mysql> select job,avg(sal),count(1) from emp where job!="MANAGER" group by job having avg(sal)>2000 order by avg(sal) desc;
+-----------+-------------+----------+
| job | avg(sal) | count(1) |
+-----------+-------------+----------+
| PRESIDENT | 5000.000000 | 1 |
| ANALYST | 3000.000000 | 2 |
+-----------+-------------+----------+
2 rows in set (0.00 sec)-- where 子句中不能出现多行函数
-- group by 子句中的字段可以再select子句中出现
select语法格式
select 书写顺序select column,group_function -- conlumn 纵队,此处表示“字段”from table -- 想要查询的表where conditiongroup by column group_by_exxpressionhaving condition group_conditionorder by column;select 语句执行顺序from--where--group by--having--select--order by;-- group by 之前的子句不可以使用多行函数,之后的语句可以使用多行函数
MySQL-- 单表查询相关推荐
- Mysql 单表查询where初识
Mysql 单表查询where初识 准备数据 -- 创建测试库 -- drop database if exists student_db; create database student_db ch ...
- 运维高级学习(三):MySQL单表查询作业
MySQL第三次作业 MySQL单表查询作业 素材如下: DROP TABLE IF EXISTS `course`; CREATE TABLE `course` ( `cs_id` int(11) ...
- MySQL单表查询基础卷(A)
MySQL单表查询基础卷(A) 第一章 数据准备 第二章 数据展示 第三章 题目说明 第四章 参考答案 第一章 数据准备 -- 创建数据库,指定字符集 utf8 CREATE DATABASE IF ...
- mysql 单表查询
一 单表查询的语法 SELECT 字段1,字段2... FROM 表名WHERE 条件GROUP BY fieldHAVING 筛选ORDER BY fieldLIMIT 限制条数 二 关键字的执行优 ...
- 0x06 MySQL 单表查询
一 单表查询语法 SELECT 字段1,字段2... FROM 表名WHERE 条件GROUP BY fieldHAVING 筛选ORDER BY fieldLIMIT 限制条数 二 关键字执行优先级 ...
- mysql单表查询详解
文章目录 一.单表查询 1.1 创建数据库 1.2 单表查询 1.2.1 查询所有字段 1.2.2 使用通配符*查询所有字段 1.2.3 查询指定字段 1.2.4 去重distinct的使用 1.2. ...
- mysql单表查询实例_MySQL简单查询详解-单表查询
MySQL简单查询详解-单表查询 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.查询的执行路径 一条SQL查询语句的执行过程大致如下图所示: 1>.客户端和服务端通过my ...
- Mysql单表查询和多表查询
单表查询 一 单表查询的语法 #查询数据的本质:mysql会到你本地的硬盘上找到对应的文件,然后打开文件,按照你的查询条件来找出你需要的数据.下面是完整的一个单表查询的语法select * from, ...
- MySQL单表查询练习题
数据准备:install.bat @ECHO OFF ::未配置环境变量下 cd C:\Program Files\MySQL\MySQL Server 5.7\bin\ SET dbhost=127 ...
- MySQL单表查询例题
一.单表查询 CREATE TABLE `worker` ( `部门号` int(11) NOT NULL, `职工号` int(11) NOT NULL, `工作时间` date NOT NU ...
最新文章
- 2020 Kaggle年度报告发布:美国公司最容易「人均百万」,90%数据科学家坚持终生学习...
- Kotlin极简教程:第10章 Kotlin与Java互操作
- Spring在bean配置文件中定义电子邮件模板
- 多线程编程: Compare And Swap (CAS)
- php accesscontrolalloworigin,设置Access-Control-Allow-Origin实现跨域访问
- 机器学习——统计学习方法——第1章 统计学习及监督学习概论
- 这个0day 影响启用 Sandbox 的多数 Windows 10 版本
- 调试系列2:bugreport实战篇
- 回来了,回来了,感触很深!
- C++:怎样把一个int转成4个字节?
- 2021-06-22Oracle常用函数
- opencv4nodejs安装
- Lvs之NAT、DR、TUN三种模式的应用配置案例
- 《蜗居》经典台词100句
- 物体识别基本原理及其Python实现
- ImageMagick中的convert命令转JEPG图像到PNG
- 云服务器怎么换ip云服务器,云服务器换ip难不难?云服务器换IP的步骤
- CPU四核八线程和四核四线程的区别
- USB2.0挂载FatFs文件系统
- Linux系统编程 复习笔记