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

目录

  • 查(select)
    • 单表查询
      • 基本语法
      • 代码样例
      • select注意事项
    • where子句
    • 排序order by子句
    • 合计/统计函数-count
      • 求和sum
      • 平均值avg
      • 最大值最小值max和min
    • 分组group by
      • 过滤having
    • 分页查询limit

查(select)

单表查询

基本语法

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

student表
【sql语句基础】——查(select)(单表查询)_第1张图片
emp表

empno为员工号、ename为员工名、job为工作、mgr为直属领导编号、hiredate为入职时间、sal为薪水、comm为补贴、deptno为部门号
【sql语句基础】——查(select)(单表查询)_第2张图片

代码样例

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

select注意事项

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

where子句

比较运算符

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

逻辑运算符

  1. and->判断条件同时成立
  2. or—> 多个条件任一成立
  3. 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  --查询前三行

你可能感兴趣的:(数据库,sql,数据库,database)