本文共 6290 字,大约阅读时间需要 20 分钟。
语法格式: Select语句后面跟的是字段名称,select是关键字,select和字段名称之间采用空格隔开,from表示将要查询的表,它和字段之间采用空格隔开
select 字段名1,字段名2,字段名3,… from 表名; 提示: 1、任何一条sql语句以“;”结尾。 2、sql语句不区分大小写。 举例:mysql> select ename,sal from emp;
±-------±--------+ | ename | sal | ±-------±--------+ | SMITH | 800.00 | | ALLEN | 1600.00 | | WARD | 1250.00 | | JONES | 2975.00 | | MARTIN | 1250.00 | | BLAKE | 2850.00 | | CLARK | 2450.00 | | SCOTT | 3000.00 | | KING | 5000.00 | | TURNER | 1500.00 | | ADAMS | 1100.00 | | JAMES | 950.00 | | FORD | 3000.00 | | MILLER | 1300.00 | ±-------±--------+ 14 rows in set (0.00 sec)select ename,sal * 12 from emp; +--------+----------+ | ename | sal * 12 | +--------+----------+ | SMITH | 9600.00 | | ALLEN | 19200.00 | | WARD | 15000.00 | | JONES | 35700.00 | | MARTIN | 15000.00 | | BLAKE | 34200.00 | | CLARK | 29400.00 | | SCOTT | 36000.00 | | KING | 60000.00 | | TURNER | 18000.00 | | ADAMS | 13200.00 | | JAMES | 11400.00 | | FORD | 36000.00 | | MILLER | 15600.00 | +--------+----------+ 给查询结果的列重命名? select ename,sal * 12 as yearsal from emp;别名中有中文? select ename,sal * 12 as 年薪 from emp; // 错误 select ename,sal * 12 as '年薪' from emp; +--------+----------+ | ename | 年薪 | +--------+----------+ | SMITH | 9600.00 | | ALLEN | 19200.00 | | WARD | 15000.00 | | JONES | 35700.00 | | MARTIN | 15000.00 | | BLAKE | 34200.00 | | CLARK | 29400.00 | | SCOTT | 36000.00 | | KING | 60000.00 | | TURNER | 18000.00 | | ADAMS | 13200.00 | | JAMES | 11400.00 | | FORD | 36000.00 | | MILLER | 15600.00 | +--------+----------+ 注意:标准sql语句中要求字符串使用单引号括起来。虽然mysql支持双引号,尽量别用。as关键字可以省略 mysql> select empno,ename,sal * 12 yearsal from emp; +-------+--------+----------+ | empno | ename | yearsal | +-------+--------+----------+ | 7369 | SMITH | 9600.00 | | 7499 | ALLEN | 19200.00 | | 7521 | WARD | 15000.00 | | 7566 | JONES | 35700.00 | | 7654 | MARTIN | 15000.00 | | 7698 | BLAKE | 34200.00 | | 7782 | CLARK | 29400.00 | | 7788 | SCOTT | 36000.00 | | 7839 | KING | 60000.00 | | 7844 | TURNER | 18000.00 | | 7876 | ADAMS | 13200.00 | | 7900 | JAMES | 11400.00 | | 7902 | FORD | 36000.00 | | 7934 | MILLER | 15600.00 | +-------+--------+----------+
select * from emp; // 实际开发中不建议使用*,效率较低。
**原因:**采用select * from emp,虽然简单,但是*号不是很明确,建议查询全部字段将相关字段写到select语句的后面,在以后java连接数据库的时候,是需要在java程序中编写SQL语句的,这个时候编写的SQL语句不建议使用select * 这种形式,建议写明字段,这样可读性强.
select 3 字段,字段... from 1 表名 where 2 条件;
执行顺序:先from,然后where,最后select
举例:
查询SMITH的工资? mysql> select ename,sal from emp where ename = ‘SMITH’;// 字符串使用单引号括起来。 ±------±-------+ | ename | sal | ±------±-------+ | SMITH | 800.00 | ±------±-------+ 1 row in set (0.00 sec) 注意:mysql里不区分大小写 找出工资高于3000的员工?select ename,sal from emp where sal > 3000;select ename,sal from emp where sal >= 3000;
找出工资不等于3000的?
select ename,sal from emp where sal <> 3000;select ename,sal from emp where sal != 3000;
找出工资在1100和3000之间的员工,包括1100和3000?
select ename,sal from emp where sal >= 1100 and sal <= 3000;select ename,sal from emp where sal between 1100 and 3000; // between...and...是闭区间 [1100 ~ 3000]select ename,sal from emp where sal between 3000 and 1100; // 查询不到任何数据
select ename from emp where ename between 'A' and 'C'; // 左闭右开
+-------+ | ename | +-------+ | ALLEN | | BLAKE | | ADAMS | +-------+
在数据库当中NULL不是一个值,代表什么也没有,为空。空不是一个值,不能用等号衡量。必须使用 is null或者is not null
举例: 找出哪些人津贴为NULL?select ename,sal,comm from emp where comm is null;
找出哪些人津贴不为NULL?
select ename,sal,comm from emp where comm is not null;
找出哪些人没有津贴?
select ename,sal,comm from emp where comm is null or comm = 0;
找出工作岗位为“clerk‘并且工资大于1000的员工
mysql> select ename,job,sal from emp where job = 'clerk' and sal > 1000;
找出工作岗位是MANAGER和SALESMAN的员工?
select ename,job from emp where job = 'MANAGER' or job = 'SALESMAN';
and和or联合起来用:找出薪资大于1000的并且部门编号是20或30部门的员工。
select ename,sal,deptno from emp where sal > 1000 and deptno = 20 or deptno = 30; // 错误的 select ename,sal,deptno from emp where sal > 1000 and (deptno = 20 or deptno = 30); // 正确的。 注意:当运算符的优先级不确定的时候加小括号。找出工作岗位是MANAGER和SALESMAN的员工?
select ename,job from emp where job = 'SALESMAN' or job = 'MANAGER';select ename,job from emp where job in('SALESMAN', 'MANAGER');select ename,sal,job from emp where sal in (800,5000);// in
后面的值不是区间,是具体的值。
not in: 不在这几个值当中。select ename,job from emp where sal not in(800, 5000);
Like可以实现模糊查询,like支持%和下划线匹配(在模糊查询当中,必须掌握两个特殊的符号,一个是%,一个是_)
%代表任意多个字符,_代表任意1个字符。 查询姓名以M开头所有的员工mysql> select ename from emp where ename like 'M%';
查询姓名以N结尾的所的员工
mysql> select ename from emp where ename like '%N';
查询姓名中包含O的所的员工
mysql> select ename from emp where ename like '%O%';
查询姓名中第二个字符为A的所员工
mysql> select ename from emp where ename like '_A%';
找出名字中有下划线的?
select name from t_user where name like '%\_%';
\:转义字符
注意:Like 中的表达式必须放到单引号中|双引号中排序采用order by子句 ,order by后面跟上排序字段,排序字段可以放多个,多个采用逗号间隔,order by默认采用升序asc,如果存在where子句那么order by必须放到where语句的后面
select 字段 3from 表名 1where 条件 2order by .... 4order by是最后执行的。
举例:
按照工资升序,找出员工名和薪资? mysql> select ename,sal from emp order by sal; 取得job为MANAGER的员工,照薪水由小到大排序(系统默认由小到大) mysql> select ename,sal,job from emp where job = ‘manager’ order by sal;注意:默认是升序。怎么指定升序或者降序呢?
asc表示升序,desc表示降序。select ename , sal from emp order by sal; // 升序select ename , sal from emp order by sal asc; // 升序select ename , sal from emp order by sal desc; // 降序。
按照工资的降序排列,当工资相同的时候再按照名字的升序排列。
select ename,sal from emp order by sal desc;select ename,sal from emp order by sal desc , ename asc;
注意:越靠前的字段越能起到主导作用。只有当前面的字段无法完成排序的时候,才会启用后面的字段
如果采用多个字段排序,如果根据第一个字段排序重复了,会根据第二个字段排序 找出工作岗位是SALESMAN的员工,并且要求按照薪资的降序排列。mysql> select ename,job,sal from emp where job = 'salesman' order by sal desc;
按照薪水升序
mysql> select * from emp order by 6;
±------±-------±----------±-----±-----------±--------±--------±-------+
| EMPNO | ENAME | JOB | MGR | HIREDATE | SAL | COMM | DEPTNO | ±------±-------±----------±-----±-----------±--------±--------±-------+注意:不建议使用此种方式,采用数字含义不明确,程序不健壮
转载地址:http://zxuki.baihongyu.com/