SQL查询(一)

sql的查询

DQL 查询
分类
单表查询
  a.基础查询
    1.查询特定列
    2.查询所有列
  b.字段控制查询
    1.列起别名
    2.列拼接
    3.列计算
    4.去除重复列
    5.查询常量列
  c.条件查询
  d.模糊查询
  e.排序
  f.聚合函数
  e.分组
多表查询
 a.合并结果集
 b.连接查询
 c.子查询

sql基础查询

a.基础查询
1.查询t_student表中所有的学生的学号和姓名
/*
列 : 学号和姓名 1
表 : t_student 
条件 : 无 
*/

select s.sid, s.sname from t_student s;

2.查询所有列

 select s.*,s.sid,s.sname from t_student s;

b.字段控制查询
1.列起别名
查询出学生表中 sid 学生编号 sname 学生姓名 sid[学生编号] sname[姓名]

select s.sid 学生编号, s.sname 学生姓名, sid "[学生编号]" from t_student s;

注意:

1.这里的as是可以省略的
2.当别名中出现特殊符号的时候,不能省略
3.列拼接查询出 学生表中 sid,sname,[sid]sname

select sid, sname, '[' || sid || ']'|| sname 信息 from t_student

3.列计算
oracle也是提供了运算符的, 算数运算符 有 + - * / 没有 % ,oracle针对求余提供了函数 mod(x,y)

select sname, sage, sage + 100, mod(sage,5)  from t_student;

alter table t_student add salary number(7,2);

select sname, sage, salary*12 + 3000 全年工资  from t_student;


注意: null和任何数据进行运算结果还是为null
4.去除重复列distinct关键字

select distinct sage  from t_student;

5.常量列查询

select sname, '合格' 合格率  from t_student;


注意: 常量列不存在 null 值的情况

where子句(条件查询)

where子句是按照“条件表达式”指定的条件进行查询。

条件查询相关关键字

= 、!=、<> <= < >= >
between ... and not between ... and
in 、 not in
is null 、 is not null
and
or
not
1.查询学生表中 id 为 1的学生信息

select *  from t_student  where sid = 1

2.查询出学生表 班级编号为 null的学生信息

select *  from t_student  where classid is not null;

3.查询出学生表中年龄 不等于 20的学生的信息

select *  from t_student
-- where sage != 20;
-- where sage <> 20;
-- where sage not in (20);
where not sage = 20;

4.查询出年龄在20到25之间的学生 同时 学生编号 小于6的学生信息

select *  from t_student  where sage between 20 and 25 and sid < 6;

5.查询年龄小于 22,或者学生编号大于 4的学生信息

select *  from t_student  where sage < 22 or sid > 4;

模糊查询

1.查询出学生表中 所有 姓张的学生的信息

select *  from t_student where sname like '%张%';

-- %张 以张结尾 包含张的 %张%

like模糊查询模式匹配

其中关于条件,SQL提供了四种匹配模式:

  • % :表示任意0个或多个字符。可匹配任意类型和长度的字符,有些情况下若是中文,请使用两个百分号(%%)表示。
  • _ : 表示任意单个字符。匹配单个任意字符,它常用来限制表达式的字符长度语句:
  • [ ] :表示括号内所列字符中的一个(类似正则表达式)。指定一个字符、字符串或范围,要求所匹配对象为它们中的任一个。
  • [^ ] :表示不在括号所列之内的单个字符。其取值和 [] 相同,但它要求所匹配对象为指定字符以外的任一个字符。
  • 查询内容包含通配符时 由于通配符的缘故,导致我们查询特殊字符“%”、“_”、“[”的语句无法正常实现,而把特殊字符用“[ ]”括起便可正常查询。

 

group by子句(分组查询)

group by子句是按照“属性名”指定的字段进行分组。group by子句通常和count()、sum()等聚合函数一起使用。

聚合函数

mysql中五种常用的聚合函数:

  • max(列名):求最大值。
  • min(列名):求最小值。
  • sum(列名):求和。
  • avg(列名):求平均值。
  • count(列名):统计记录的条数。
select count(*) from t_student;
select count(sage) from t_student;
select count(classid) from t_student;
select count(sid) from t_student;
select count(1) from t_student;

count()函数的使用:

count(*): 统计的是各个字段的数量,然后计算统计结果的最大值,效率低
count(字段): 统计的是输入字段不为null的数量
count(sid): 统计主键的字段,肯定是记录的总字段,因为主键不能为null,这种方式不灵活,如果是另外一张表,那么主键名称不一样
count(1): 给出一个常量列,然后统计常量列的记录条数,常量列不可能为null,而且这种方法灵活,不会和主键关联,开发中使用

select sum(sage) 总和 from t_student; 
select avg(sage) 平均值 from t_student; 
select max(sage) 最大值 from t_student; 
select min(sage) 最小值 from t_student;

聚合函数一般用于分组使用,但是也可以在聚合函数之间使用

select sum(sage),avg(sage),max(sage),min(sage) from t_student;

关于group by子句和聚合函数联合使用的三条规则:

  1. 如果select 子句中使用了统计函数同时没有group by 子句,那么select子句中只能出现统计函数,不能出现其他任何字段。
  2. 如果在select子句中使用统计函数同时有group by子句,则在select子句中只能出现统计函数和分组的字段。
  3. 如果select子句中使用了嵌套的统计函数,则不管是否group by子句那么select子句不能出现统计函数之外任何字段。

having子句(筛选查询)

有group by才能having子句,只有满足“条件表达式”中指定的条件的才能够输出。having子句可以让我们筛选成组后的各种数据,where子句在聚合前先筛选记录,也就是说作用在group by和having子句前。而 having子句在聚合后对组记录进行筛选。

where 和 having 的区别?
where 只能够 放在 from 的后面,表示对查询的数据源进行过滤,这里的数据源可以是 一张表或者是一个结果集(子查询的结果集)
having 只能够 放在 group by 的后面, 对分组后的 数据 进行过滤

order by子句(排序查询)

按照“属性名”指定的字段进行排序。排序方式由“asc”和“desc”两个参数指出,默认是按照“asc”来排序,即升序。

 

转载于:https://www.cnblogs.com/lqhhome/p/10886701.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值