DQL语句:
数据查询语言,用来查询记录(数据);主要是对表记录的查询。(重点)
一:基本查询
1,查看所有列:select * from 表名;
(其中“*”表示所有列)
2,查询指定字段信息:
Select 列1,列2…from 表名;
(只查询name列和age列的信息)
3,数量类型的列可以做加、减、乘、除计算:
将stu表中的age列字段数值加3:select name,age+3 from stu;
4,表中的字符串课做连续运算:
求stu表中age字段记录数:
5,给列起别名:select 列名 as 别名 from 表名:
将name列命名为“姓名”:select name as 姓名,age from stu;
(其中as可以省略)
二:条件控制
- 条件查询:
查询语句可以通过where字句来控制记录:
例:查询年龄大于25岁的人的信息:
Select * froms stu where age>25;
2,模糊查询:当我们想查询姓张的人数时,只需要查这个姓氏就可以,就可以使用模糊查询(模糊查询使用运算符:like,其中“_”表示匹配任意一个字符;“%”表示匹配多个字符)
例1:查询姓张的,并且名字是两个字的人的信息:
Select * from stu where name like ’张_’;
例2:查询表中名字带有“某”字的人的信息:
Select * from stu where name like ‘%某%’;
3,排序查询:排序查询需要用到关键字:order by ,然后末尾加关键字asc表示升序排序,desc表示降序排序(默认情况下是升序排序)
将表中信息按年龄升序排序:
Select * from stu order by age desc;
4,使用多列作为排序条件:
将表中信息按年龄升序排序,若年龄相同,则按照id降序排序:
Select * from stu order by age asc,id desc;
5,聚合函数:聚合函数用来做某列的纵向运算
5.1,count函数:
计算表中所有列不为空的行数select count(*) from stu;
计算age列不为空的行数:
Select count(age) from stu;
5.2,max(min)函数:查询最大年龄
Select max(age) from stu;
5.3,sum函数:计算左右人的年龄总和
Select sum(age) from stu;
5.4,avg函数:计算所有人的平均年龄
Select avg(age) from stu;
6,分组查询:分组查询是把记录使用某一列进行分许,然后查询组信息
例1:查看所有性别的记录数
Select sex,count(*) from stu group by sex;
例2:根据性别分组,查询该性别中的最大年龄的人的姓名,年龄等信息:
Select sex,max(age) from stu group by age;
例3:组条件:
以class(学科)分组,查询每组的记录数,条件为记录数大于等于3
Select class,count(*) from stu group by class having count(*)>=3;
一些案例题:
1,查询出部门编号为30的所有员工
select * from emp where deptno=30;
2,查询所有销售员的姓名、编号和部门编号
select ename,empno,deptno from emp where job='销售员';
3,查询奖金高于工资的员工
select ename from emp where comm > sal;
4,查询奖金高于工资60%的员工
select ename from emp where comm > sal*0.6;
5,查询部门编号为10中所有经理,和部门编号为20中所有销售员的详细资料
select * from emp where (deptno = 10 and job='经理') or (deptno=20 and job='销售员');
6,查询部门编号为10中所有经理,部门编号为20中所有销售员,还有既不是经理又不是销售员但其工资大于或等于20000的所有员工资料
select * from emp where (deptno = 10 and job='经理') or (deptno=20 and job='销售员')or (job not in ('经理','销售员') and sal>20000);
7,查询无奖金或奖金低于1000的员工
select * from emp where comm is null or comm<1000;
8,查询名字由三个字组成的员工
select * from emp where ename like '___';
9,查询2000年入职的员工
select * from emp where hiredate like '2000-%';
10,查询所有员工详细信息,用编号升序排序
select * from emp order by empno asc;
11,查询所有员工详细信息,用工资降序排序,如果工资相同使用入职日期升序排序
select * from emp order by sal desc,hiredate asc;
12,查询每个部门的平均工资
select deptno,avg(*) 平均工资 from emp group by deptno;
13,查询每个部门的雇员数量
select deptno,count(*) 数量 from emp group by deptno;
14,查询每种工作的最高工资、最低工资、人数
select job,max(*) 最高工资,min(*) 最低工资,count(*) 人数 from emp group by job;