文章目录
前言
大家好,我是ice三分颜色。个人主页:ice三分颜色的博客
本文讲了有关单表查询的一些知识和例子。
走过路过的小伙伴们点个赞和关注再走吧,欢迎评论区交流,努力什么时候开始都不算晚,那不如就从这篇文章开始!
大家一起成长呀!笔芯
5.1单表查询
单表查询是指对一个表的数据进行查询。
例:先准备表及基础数据
一定要有这个表,不然创建下面雇员表的时候会报错。
--雇员表
CREATE TABLE IF NOT EXISTS employee (
empno iNT(4) NOT NULL AUTO_INCREMENT,
ename CHAR(8) NOT NULL COMMENT '员工姓名',
job VARCHAR(20) NOT NULL COMMENT '职位',
mgr INT(4)COMMENT '经理',
hiredate DATE NOT NULL COMMENT'雇佣日期',
sal FLOAT(7,2) NOT NULL COMMENT'工资',
comm VARCHAR(20) COMMENT '备注',
deptno iNT(2) NOT NULL COMMENT '部门编号',
CONSTRAINT pk_emp PRIMARY KEY(empno),
CONSTRAINT fk_emp_dept FOREIGN KEY (deptno)REFERENCES department(deptno)
);
INSERT INTO employee VALUES
(7369,'SMITH','CLERK',7902,'2008-12-17',800,NULL,20),
(7521,'WARD','SALESMAN',7698,'2008-04-22',1250,500,30),
(7566,'JONES','MANAGER',7839,'2008-03-02',2975,NULL,20),
(7654,'MARTIN','SALESMAN',7698,'2008-09-28',1250,1400,30),
(7698,'BLAKE','MANAGER',7839,'2008-05-01',2850,NULL,30),
(7839,'KING' ,'PRESIDENT',NULL,'2008-01-17',5000,NULL,10),
(7844,'TURNER' ,'SALESMAN',7698,'2008-09-08',1500,0,30),
(7876,'ADAMS','CLERK',7788,'2009-03-23',1100,NULL,20),
(7900,'JAMES','CLERK',7698,'2008-12-03' ,950,NULL,30),
(7902,'FORD' ,'ANALYST',7566,'2008-12-03',3000,NULL,20);
OK!准备好数据开始查询
查询中选择特定的列
查询employee表中所有员工的所有信息(*指示查询数据表的所有列)
SELECT *FROM employee;
查询员工的编号、姓名、月薪。查询部分列(列与列之间以逗号隔开,列的排列次序决定了列的显示次序。)
SELECT empno, ename, sal FROM employee;
查询中使用算数表达式
使用算数表达式计算为每位员工月薪增加500元
SELECT empno, ename, sal,500+sal FROM employee;
使用算数表达式计算月薪增加500元后的年薪
SELECT empno, ename,(500+sal)*12 FROM employee;
查询中使用列的别名
在列名和别名之间使用AS或空格,别名可以使用引号,也可以不用。如果别名中包含了特殊字符,则需要使用引号。
列的别名(可以给列起自己想起的名字)
SELECT empno AS'员工编号',ename 'Employee Name',(500+sal)*12 年薪 FROM employee;
查询中使用DISTINCT运算符
DISTINCT运算符用于去除指定列数据重复的记录
SELECT DISTINCT job FROM employee;
限定查询
限定查询是指在数据查询时设置一系列的过滤条件,只有满足指定条件的数据才进行显示。
WHERE用来构成一个限制检索表中行数据的条件表达式;
后跟进行数据筛选的条件表达式,在条件表达式中可以使用关系运算符、逻辑运算符、BETWEEN...AND范围查询操作符、IN (NOT IN)列表范围查询操作符、NULL值判断操作符、LIKE模糊查询操作符等。
查询SALES部门(部门编号为30)的所有员工的姓名、月薪及年薪(假设该部门年终奖金为10000/人)
SELECT ename,sal,12*sal+10000 AS 年薪 FROM employee WHERE deptno=30;
查询工资在1500到2900之间的员工名单
SELECT empno,ename,sal FROM employee WHERE sal >= 1500 AND sal<=2900;
BETWEEN...AND****操作符
主要用于针对一个指定的数据范围进行查询。指定范围的数据可以是数字、字符串或者是日期型数据。
查询工资在1500到2900之间的员工名单
SELECT empno,ename,sal FROM employee WHERE sal BETWEEN 1500 AND 2900;
查询在1981年1月1日和1981年12月31日之间加入公司的员工
SELECT empno,ename,hiredate FROM employee WHERE hiredate BETWEEN '2008-12-01'AND '2008-12-31';
指定范围之外的数据使用NOT BETWEEN...AND操作符
查询不是在1981年1月1日与1981年12月31日之间加入公司的员工
SELECT empno,ename,hiredate FROM employee
WHERE hiredate NOT BETWEEN '2008-12-01'AND '2008-12-31';
比较运算符:IN、NOT IN
IN用来测试某些值是否在列表中出现。NOT IN用来测试某些值是否不在列表中出现
查询职位为销售、文员或经理的人员。
SELECT empno,ename,job FROM employee
WHERE job IN('SALESMAN','CLERK' ,'MANAGER');
NULL
在SQL中是一个特殊的值,称为空值。它既不是0,也不是空格。它的值是没有定义的、未知的、不确定的。判断是否为NULL使用IS关键字,不能使用“=”。
查询有奖金的员工信息(COMM列值不为NULL)
SELECT empno,ename,job,sal,comm FROM employee WHERE comm IS NOT NULL;
LIKE****模糊查询
模糊查询用于对所查询的数据记忆不是很清楚的时候。模糊查询使用LIKE操作符。(这个之前有讲过)LIKE后跟匹配条件,用引号括起来,由关键字和通配符组成。NOT LIKE表示不满足模糊查询。
注意: LIKE子句中有以下两个通配符:%:可以匹配任意类型和长度(0个或多个)的字符。_:匹配单个任意字符。常用来限制表达式的字符长度。
查询姓名以J开头、姓名最后两个字符为E和一个任意字符的员工信息
SELECT empno,ename,job FROM employee WHERE ename LIKE 'J%E_';
限定查询操作符的优先级
按由高到低依次为:
算术运算符>连接运算符>比较运算符>IS NULL、IS NOT NULL>LIKE、NOT LIKE、IN、NOT IN>BETWEEN、NOT BETWEEN>NOT>AND>OR
ORDER BY****排序
在执行查询操作时,默认情况下会按照行数据插入的先后顺序来显示行数据。在实际应用中经常需要对数据进行排序,以显示更直观的数据。排序是使用ORDER BY子句。WHERE表示条件。
注:ASC代表升序,为默认值,可以省略;DESC代表降序。
查询销售部门(编号30)员工的工资及奖金信息,工资以降序排序
SELECT ename,job,sal,comm FROM employee WHERE deptno=30 ORDER BY sal DESC;
limit****限制查询
用来限制查询结果记录的数量。Limit后跟一个数值,是初始记录索引值省略,只显示共有多少条记录。跟两个数值,第一个数值是初始记录索引值,第二个是共多少条记录。
查询部门20的员工工资最高的三个人的信息。
SELECT * FROM employee WHERE deptno=20 ORDER BY sal DESC LIMIT 3;
查询部门20中工资最高的第2名和第3名的员工信息
SELECT * FROM employee WHERE deptno=20 ORDER BY sal DESC LIMIT 1,2;
GROUPBY****查询
GROUP BY子句可以将查询结果按属性列或属性列组合在行的方向上进行分组,每组在属性列或属性列组合上具有相同的聚合值。
注意:GROUP BY子句通常配合聚合函数做查询统计操作,单独使用GROUP BY关键字,查询结果只显示每组的一条记录,通常无实际意义。
出现在查询的SELECT列表中的每一列都必须同时出现在GROUP BY子句中。
SELECT deptno, count(*)FROM employee GROUP BY deptno;
版权归原作者 ice三分颜色 所有, 如有侵权,请联系我们删除。