当前位置:网站首页>【sql语句基础】——查(select)(单表查询)

【sql语句基础】——查(select)(单表查询)

2022-06-12 18:16:00 InfoQ


查(select)

单表查询

基本语法

select [distinct] * | {column1,column2,column3...}
 from table_name;

student表

null

emp表

empno为员工号、ename为员工名、job为工作、mgr为直属领导编号、hiredate为入职时间、sal为薪水、comm为补贴、deptno为部门号
null

代码样例

-- 查询所有学生信息
SELECT * FROM student;
-- 查询所有学生姓名和英语成绩
SELECT `name`,`english` FROM student;
-- 统计总分别名score
SELECT `name` ,(chinese+english+math) AS score FROM student;

select注意事项

  • select指定查询那些列的数据。
  • column指定列名。
  • *代表查询所有列。
  • from指定查询哪些表。
  • distinct可选,指显示结果时,是否去掉重复数据。

where子句

比较运算符
  • 大于等于小于不等于
  • between...and->显示在某一区间的值
  • in(set)->显示在某一区间的值,例如in(100,200)
  • 通配符:like `张%(0-多)``/not like ''【%代表多个字符,_代表单个字符】
  • is null ->判断是否为空

逻辑运算符
  • and->判断条件同时成立
  • or—> 多个条件任一成立
  • not—> 不成立,例如:where not(salary>100)

SELECT * FROM student
 WHERE `name` = '赵云';
-- 查询总分大于200并且数学小于语文,姓韩的同学
SELECT * FROM student
 WHERE (chinese+english+math) > 200 AND
 math < chinese AND
 `name` LIKE '赵%';
-- english 在80-90之间
SELECT * FROM student
 WHERE english BETWEEN 80 AND 90;

排序order by子句

升序:asc 降序:desc

-- 数学成绩升序
SELECT * FROM student
 ORDER BY math;
-- 总分降序
SELECT `name`,(chinese+math+english) AS score FROM student
 ORDER BY score DESC;
-- 李姓成绩排序
SELECT * FROM student
 WHERE `name` LIKE '张%'
 ORDER BY math;
-- 先部门号排序,后工资降序
SELECT * FROM emp
 ORDER BY deptno ,sal DESC;

合计/统计函数-count

细节:count(*)查询满足条件的记录的行数;count(列)统计满足条件的列,但是会排除null。

-- 统计所以总分大于250
SELECT COUNT(*) AS s FROM student
 WHERE (math+chinese+english)>250;

求和sum

-- 语文平均分
SELECT SUM(chinese)/COUNT(*) FROM student;

平均值avg

SELECT AVG(math+chinese+english) FROM student;

最大值最小值max和min

select max(math) from student;

分组group by

-- 每种岗位的雇员总数、平均工资
SELECT AVG(sal),COUNT(*),job
 FROM emp
 GROUP BY job;
-- 显示雇员总数以及获得补助的雇员总数
SELECT COUNT(*),COUNT(comm=300)
 FROM emp;
-- 显示管理人数(去重)
SELECT COUNT(DISTINCT mgr)
 FROM emp;

过滤having

-- GROUP by用于对查询的结果分组统计
-- 如何显示每个部门的平均工资和最高工资
SELECT AVG(sal), MAX(sal) , deptno 
 FROM emp GROUP BY deptno; 
-- 使用数学方法,对小数点进行处理
SELECT FORMAT(AVG(sal),2), MAX(sal) , deptno 
 FROM emp GROUP BY deptno; 
-- 显示每个部门的每种岗位的平均工资和最低工资
SELECT AVG(sal), MIN(sal) , deptno, job 
 FROM emp GROUP BY deptno, job; 
-- ?显示平均工资低于2000的部门号和它的平均工资 // 别名
SELECT AVG(sal), deptno 
 FROM emp GROUP BY deptno
 HAVING AVG(sal) < 2000;

分页查询limit

基本语法:select ...limit start,rows此处的
start类似于数组的下标记发
,即0代表第一行,1代表第二行......
rows 代表所取的行的数量
,1代表取一行,5代表取五行......(表示
从start+1行开始取取出rows行
,start从0计算)

SELECT *FROM emp
 ORDER BY empno
 LIMIT 0,3 --查询前三行

原网站

版权声明
本文为[InfoQ]所创,转载请带上原文链接,感谢
https://xie.infoq.cn/article/2a3c269175940f8a581d5bde8