【MySQL】select条件查询、orderby排序、groupby分组查询以及单⾏处理。
。。
⽂章⽬录
⼀、select 基本语法
select 语句⽤于从数据库中选取数据。结果被存储在⼀个结果表中,称为结果集。
select查询语句中出现引号和分号都是英⽂符号,查询语句的结束标志是分号。
以dept表(部门表)为例演⽰:
说明:deptno(部门号)、dname(部门名)、loc(地点)
+--------+------------+----------+
| DEPTNO | DNAME | LOC |
+--------+------------+----------+
|10| ACCOUNTING | NEW YORK |
|20| RESEARCH | DALLAS |
|30| SALES | CHICAGO |
|40| OPERATIONS | BOSTON |
+--------+------------+----------+
1.查询单列数据:select 列名 from 表名;
select deptno from dept;
2.查询多列数据:select 列名1,列名2... from 表名;
select deptno,dname from dept;
3.查询所有数据:select 列名1,列名2... from 表名;(列出所有列名)
或 select * from dept;
select deptno,dname,loc from dept;
select*from dept;
4.给查询的列起别名:select 列名1 as 别名1,列名2 as 别名2... from 表名;
select deptno as id,dname as name from dept;
若写成:select 列名1,列名2... as 别名1 from 表名;(就近将select语句中的最后的⼀个列名改为别名)
select deptno,dname as id from dept;
(起别名时as可以省略,若别名中含有空格或中⽂,则使⽤单引号将别名括起来,起别名不会改变原本的表的列名)
select deptno as'd id'from dept;
select deptno as'编号'from dept;
5.列名参数数学运算:(查询员⼯的年薪)
select ename,sal*12as year_salary from emp;
⼆、select 条件查询
以emp表(员⼯表)为例演⽰:
说明:
empno(员⼯编号)、ename(员⼯姓名)、job(⼯作)、mgr(上级领导编号)、hiredate(⼊职⽇期)、sal(⽉薪)、comm(津贴)、deptno(所在部门编号)
+-------+--------+-----------+------+------------+---------+---------+--------+
| 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| MARTIN | 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|
+-------+--------+-----------+------+------------+---------+---------+--------+
语法格式:select 列名1,列名2... from 表名 where 条件;
1.= 等于:
例1:查询⼯资是800的员⼯姓名
select ename from emp where sal =800;
例2:查询⼯作是SALESMAN的员⼯⼯资
select sal from emp where job='SALESMAN';
2.<> 不等于:
例1:查询部门号不是20的员⼯⼯资
select sal from emp where deptno<>20;
例2:查询⼯作不是SALESMAN的员⼯⼯资
select sal from emp where job<>'SALESMAN';
3.< ⼩于:
例:查询⼯资低于1000的员⼯姓名和⼯作
select ename,job from emp where sal<1000;
4.> ⼤于:
例:查询⼯资⼤于1000的员⼯姓名和⼯作
select ename,job from emp where sal>1000;
5.>= ⼤于等于:
例:查询⼯资⼤于等于1000的员⼯姓名和⼯作
select ename,job from emp where sal>=1000;
6.between a and b 两者之间:(闭区间,要求a<b)
例1:查询⼯资在1000~1500之间的员⼯姓名和⼯作
select ename,job from emp where sal between1000and1500;
例2:查询⼯资在1000~1500之间的员⼯姓名和⼯作
select ename,job from emp where sal>=1000and sal<=1500;
7.null 为null(is not null 不为null):
例:查询津贴为null的员⼯姓名和⼯作
select ename,job from emp where comm is null;
8.and 并且:
例:查询⼯作是manager并且⼯资⼤于2500的员⼯信息
select*from emp where job='manager'and sal>2500;
< 或者:
例1:查询⼯作是manager或者president的员⼯信息
select*from emp where job='manager'or job='president';
例2:查询⼯资⼤于2000,并且部门号是10或20的员⼯信息
select*from emp where sal>2000and(deptno=10or deptno=20);
10.in 包含,相当于多个or:
例:查询⼯资是800和5000的员⼯信息
select*from emp where sal in(800,5000);
< in 不包含:
例:查询⼯资不是800和5000的员⼯信息
select*from emp where sal not in(800,5000);
12.like 模糊查询:
① %匹配任意个字符:
例1:查询员⼯名中含有o的员⼯信息
select*from emp where ename like'%o%';
例2:查询员⼯名以r结尾的员⼯信息
select*from emp where ename like'%r';
例3:查询员⼯名中含有_的员⼯信息(_有特殊含义,必须使⽤\进⾏转译)
select*from emp where ename like'%\_%';
② _匹配⼀个字符:
例1:查询员⼯名中第⼆个字母是a的员⼯信息
select*from emp where ename like'_a%';
例2:查询ename第⼆个字母是a的员⼯信息
select*from emp where substr(ename,2,1)='a';
注意:在sql中%和_有特殊的含义,若想使⽤这两个符号,必须在符号前⾯使⽤\进⾏转译。
三、order by排序
order by 列名:⽤于为指定的列排序,默认是升序(asc),指定为降序:order by 字段名 desc,也可以指定为升序:order by 字段名desc。
1.asc 升序:(默认)
例1:查询员⼯信息,将查询到的员⼯信息按照⼯资升序输出
select*from emp order by sal asc;
例2:查询员⼯信息,将查询到的员⼯信息按照⼯资升序输出
select*from emp order by sal;
2.desc 降序:
例:查询员⼯信息,将查询到的员⼯信息按照⼯资降序输出
select*from emp order by sal desc;
进阶:多个字段排序(⼆级排序)
例:查询所有原的员⼯姓名、⼯资,按照⼯资升序,当⼯资相同时按照姓名升序输出。
select ename,sal from emp order by sal asc,ename asc;
按照select查询列的字段位置排序:(了解:不建议使⽤,健壮性太弱)
例:查询员⼯姓名和⼯资,结果按照⼯资进⾏排序(默认升序)
select ename,sal from emp order by2;
综合实例:
例: 查询⼯资在1500到2500之间的员⼯的姓名和⼯资,按⼯资的升序输出,当⼯资相同时按照姓名升序。
select ename,sal from emp where sal between1500and2500order by sal asc,ename asc;
//执⾏顺序:from--->where--->select--->order by
四、数据处理函数(单⾏处理函数)
单⾏处理函数:⼀个输⼊对应⼀个输出(如lower、upper…)
多⾏处理函数:多个输⼊对应⼀个输出(如sum、count…)
1.lower 转⼩写:
例:查询员⼯的姓名,将查询到的姓名转为⼩写输出
select lower(ename)as ename from emp;
2.upper 转⼤写:
例:查询员⼯的姓名,将查询到的姓名转为⼤写输出
select upper (ename)as ename from emp;
3.substr 取⼦串:(str(被截取的字符串,起始下标,截取的长度))
例1:查询员⼯姓名的前两个字母
select substr(ename,1,2)from emp;
例2:查询员⼯姓名第⼆个字母是a的员⼯信息
select*from emp where substr(ename,2,1)='a';
扩展:⾸字母⼤写:
例:查询学⽣姓名,将查询到的员⼯姓名的⾸字母转为⼤写输出
select concat(upper(substr(name ,1,1.)), substr(name ,2, length (nane)-1))as result from t_student;
4.length(字段名) 取长度:
例:查询并输出员⼯姓名中各个名字的长度
7.rand() 随机数:
groupby分组例:输出与部门表同等⾏的随机数(0-1范围内)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论