查询的基本操作

单表查询
-- 
# 查询,#在mysql可以,orcale不行

-- 查询所有
select * from company_staff;-- 不建议使用 速度太慢,优化策略
SELECT id,name,age FROM company_staff;-- `name`,防止,建议使用 查所有建议用这个


-- 查询某字段
SELECT id from company_staff;

-- 起别名
select id as '用户id',`name` as '用户姓名' FROM company_staff;
select id '用户id' FROM company_staff;

-- 条件查询:where
select id,`name`,age FROM company_staff where id = 1;
SELECT id,`name`,age FROM company_staff where work ='门口保安';

-- 与:AND
SELECT `name`,date,`work` FROM company_staff WHERE id=1 and age = 20;

-- 或:OR
SELECT `name`,date,`work` FROM company_staff WHERE id=6 or age = 20;

-- 非、非空判断
SELECT `name`,date FROM company_staff WHERE work is not null; #建议用
SELECT id,name,date,age,sex FROM company_staff WHERE work  is null AND address is NULL;   -- 不建议用


-- 范围查询:比较用算符的运用
select id,`name`,age,`work`,address FROM company_staff where age > 19;
SELECT `id` , `name` ,`age`,`phone`,`address` FROM user_infor WHERE age<=20;
SELECT `id` , `name` ,`age`,`phone`,`address` FROM user_infor WHERE age<19 and age>19;
SELECT `id` , `name` ,`age`,`phone`,`address` FROM user_infor WHERE age<19 or age>19;
-- 以上写法不建议使用,sql优化策略不匹配
#查询2到19之间的数据,包括2和19
SELECT id, `name` ,age,address FROM company_staff WHERE age BETWEEN 2 and 19;
#in查询出来就是括号里面对应的值得结果,年龄为2,21,20的数据
SELECT id, `name` ,age,address FROM company_staff WHERE age in(2,21,20)or age IS NULL;




-- 模糊查询:like
like '王__',查询王某某
SELECT id, `name` ,age,address FROM company_staff WHERE`name` LIke '王__';
--  左模糊会使索引失效
SELECT id, `name` ,age,address FROM company_staff WHERE`name` LIke '%王%';
-- 字符串中有下划线需要查询时
-- 如果要搜索出真实包含下划线(_)的字符,需要对下划线(_)进行转义,默认使用反斜杠(\)进行转义。
SELECT xh from xs where xm like '%\_%';
-- 通过ESCAPE子句使用 $(任何字符) 作为转义符。
SELECT xh from xs where xm like '%$_%' escape '$';


-- 分页查询:limit
#数据量庞大,3:每页显示数据,1:起始页,下标为1的行开始每页显示几行
#分页查询:Limit公式:((当前页码)*每页展示行数(数量))
SELECT name,id,address,`work` FROM company_staff limit 0,2;
SELECT name,id,address,`work` FROM company_staff limit 2,2;
SELECT name,id,address,`work` FROM company_staff limit 4,2;
# 分页+排序的组合使用:ORDER BY(排序)
SELECT name,age,id,address,`work` FROM company_staff ORDER BY age limit 0,10;
# 正序(从小到大):Asc
SELECT name,age,id,address,`work` FROM company_staff ORDER BY age asc
limit 0,10;
# 倒序(从大到小):desc
SELECT name,age,id,address,`work` FROM company_staff ORDER BY age desc
limit 0,10;
聚合
#最大值
#成绩
select max(cj),cj.xh,xs.xm from xs join cj on xs.xh=cj.xh;
#最小值
SELECT min(cj),xs.xm from xs join cj on xs.xh=cj.xh;
#查询男生女生人数
select count(xh) from xs where xb='nan';
select count(xh) from xs where xb='nv';
子查询
#子查询
#作为条件,作为表(为表起名)
#查询id为1到6男生的信息,
select * from xs where xb in(SELECT xb from xs where xb=1);

查询语句的嵌套,子查询有括号,一般会和分组查询一起使用。

  1. 作为条件(用的多)
  2. 作为表(用的少)
多表查询
#关系:一对一,一对多,多对多
一对一:公民与身份证。
一对多:一个部门对多个员工。
多对多:一个用户对多个角色,一个角色对多个用户。

关系型数据库:以二维表的存储方式,表与表之间可以建立关系。
非关系型数据库:基于键值对。
#隐式内连接
#笛卡尔积及去除笛卡尔积:Where e.em_depid , d.id
#主表(数据字典表)和从表(普通表)
select e.em_name,e.em_age,e.em_money,d.dep_name from employee e,department d where e.em_depid=d.id;
#显示内连接,inner可以省略
select e.*,d.dep_name from employee e INNER join department d on e.em_depid = d.id; 
#主外键关联删除数据
delete from employee where id = 1;
delete from employee where em_depid = 2;
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值