查询语句

简单了解数据库查询

简单查询

1.查询特定的列

例如:查询所有的员工的姓名和员工

select eid,ename from emp;

2.查询员工所有的列

#方法一:(常用)
select * from emp;
#方法二:
select eid,ename,.....from emp;

3.给列其别名

常用与单独查看某列,查看员工工资。。

#eg:查询出所有员工的编号和姓名,使用汉字别名
SELECT eid AS 编号,ename AS 姓名 from emp;

4.显示不同的记录(意思就是重复的只先显示一次)

select distinct deptld from emp;

5.查询是执行计算

select 1+2*3    --->   7
#eg:查询出员工的姓名和年薪
select ename,salary*12 from emp;

6.对结果集排序------order by

#order by 后面是按照排序列,from 后是表单
#eg:查询所有部门结果集按照编号升序排列
select * from dept order by did asc;  #asc-->ascendant 
#eg:查询所有部门结果集按照编号降序排列
select * from dept order by did desc; #desc-->descendant
#如果不加排序规则,默认是升序asc;若按照字符串排序,按Unicode码排序

7.条件查询-----where 后面加条件

条件运算符

< ,<=, >, >=,!=

is null/ is not null , in /not in , between/not between , is / not is

#eg:查询编号为5的员工的所有列
select * from emp where eid=5;
#eg:查询员工工资在5000~7000之间的有哪些?2种方法
1.select * from emp where salary>=5000 and salary <=7000;
2.select * from emp where between 5000 and 7000;
#between 使用就是说明数据 包括5000和7000
#eg:查询员工工资不在5000~7000之间的有哪些?2种方法
select * from emp where  not between 5000 and 7000; 
#eg:查询员工在20号部门或者在30号部门的有哪些?
select * from emp where deptId in(20,30);
#或者是
select * from emp where deptId=20 || deptId=30;
#eg:查询员工不在20号部门或者在30号部门的有哪些?
select * from emp where deptId  not in(20,30);
#day03作业:查询出工资在8000以上的男员工的姓名,性别,工资,部门;结果按照工资的降序排列;
select ename,sex,salary,deptId from emp where sex=1&&salary>8000  order by salary desc;

8.模糊条件查询

条件不清晰,只知道个大概去查询

#eg:查询员工表姓名列中有e字符的名字?
select * from emp where ename like '%e%';
% 匹配任意多个字符 >=0 _ 匹配任意1个字符 =1
以上两个匹配必须结合着LIKE关键字使用

9.分页查询

查询的结果集有太多的数据,一次显示不完,可以分页显示

需要有两个条件: 每页的数据量、当前的页码

SELECT * FROM emp LIMIT start,count;
#注意:start表示开始的值,count显示的数据量
#注意: start和count值必须是数值型,不能给数字加引号
#eg:每页显示5条数据
SELECT * FROM emp LIMIT 0,5;
SELECT * FROM emp LIMIT 5,5;
SELECT * FROM emp LIMIT 10,5;
#只写一个数值表示要查询数据的数量

复杂查询

1.聚合查询

count()表示查询的数量 sum()求和 avg()平均数 max()最大 min()最小

#eg:查询所有员工的总和?
select sum(salary) from emp;

2.分组查询-----group by

分组查询只能查询聚合函数和分组条件

因为查询显示别的数据没有价值

#查询出男女员工的数量,工资总和,平均工资
select count(sex),sum(salary),avg(salary),sex from emp group by sex; #sex--->分组条件

3.子查询

多个SQL语句的综合

#eg:查询研究部的员工有哪些
步骤一:查询出研究部的部门编号是多少?
select * from dept where dname='研究部';   ---> 10
步骤二:查询上一步结果的员工有哪些?
select * from emp where deptId=10;
#综合:
select * from emp where deptId(select * from dept where dname='研究部');#括号里边不能有分号;

year()获取日期中的年份

month()获取日期中的月份

day()获取日期中的日子

这三个不属于聚合函数

4.多表查询

eg:查询所有的员工姓名及其部门名称
select ename,dname from emp,dept ;#这种写法错误,产生笛卡尔积需添加特殊条件才能避免
#另一种写法
select ename,dname from emp,dept where deptId= did;
                                        外键     主键
#存在的问题:无法查询没有部门的员工,也无法查询没有员工的部门
#新增的多表查询方法
1.外连接----和上一种效果一样,只是语法变了
select ename,dname from emp inner join dept on deptId=did;
2.左外连接  ---显示左边所有内容,即使右边无对应(先写那个那个为左)
select ename,dname from emp left outer join dept on deptId=did;
3.右外连接  ---和左类似
select ename,dname from emp right outer join dept on deptId=did;
4.全连接---full join (mysql不支持)
#另一种办法
union all --》(不合并相同记录)   union --》合并相同记录
左外连 union all 右外连 #或者  左外连 union 右外连

补充知识:

项目中的日期时间

时间戳:距离计算机元年(1970-1-1)的毫秒数

1秒=1000毫秒

有日期时间要用bigint,方便之后操作数据方便

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值