SQL查询语句总结

SQL基本查询

SQL是一种结构化查询语言。用于用于存取数据以及查询、更新和管理关系数据库系统

一、SQL简单的查询语句

1.查看表结构

SQL>desc stu;

2.查询所有列

SQL>select * from stu;

3.查询指定列:

SQL>select stuno,stuname,job from stu;

SQL>select distinc stuname from stu; // 只显示结果不同的项

4.查询指定行

SQL>select * from stu where job=“clerk”

5.使用算术表达式

SQL>select stuname,sal*13+nvl(comm,0) from stu;

其中,6.nvl(comm,1)的意思是,如果comm中有值,则nvl(comm,1)=comm; comm中无值,则nvl(comm,1)=0。

SQL>select * from stu where hiredate>'01-1月-82';

6.使用like操作符(%,_)

%表示一个或多个字符,_表示一个字符,[charlist]表示字符列中任何单一字符的,[^charlist]或者[!charlist]不在字符列中的任何单一字符。

7.在where条件使用IN

SQL>select * from stu where job in ('CLERK','ANALYST');

8.查询字段内容为空/非空的语句。

SQL>select * from stu where job is/is not null;

9.使用逻辑操作符号

SQL>select * from stu where (sal>500  or job=”manage”) and stuname like ‘J%’

10.order by:将查询结果按字段的值进行排序

SQL>select * from stu order by stuno,sal desc;(按部门升序,并按薪资降序)

11.Between:在两个值之间,比如我从学生中查询年龄在18-20之间的学生信息

select stuno,stuname,age from stu where age between 18 and 20;

12.LIKE:作用是模糊查询,LIKE关键字与通配符一起使用

主要的通配符有:

 

13. 查询姓氏为张、李的学生信息。这个可以使用or关键字,但是使用通配符更简单高效

SQL>select stuno,stuname from stu where name like ‘[张李]%’

14.查询姓氏非张、李的学生信息。这个也可以用not like 来实现

SQL>select stuno,stuname from stu where name like ‘[^张李]%’

15.AND :AND在where句子中把两个或多个条件结合起来。表示和的意思,多个条件都成立。

Eg:查询年龄大于18且姓张的学生信息

SQL>select select stuno ,stuname from stu where age>18 And name like '张%'

16.OR:可在WHERE 子语句中把两个或多个条件结合起来。或关系,表示多个条件,只有一个符合即可。

Eg:查询年龄是18,19,20的学生信息

SQL>select stuno ,stuname from stu where age in (18,19,20);

17.as(Alias):可以为列名称和表名称指定别名

作用:我们可以查询的列,或者表指定需要的名字,如表名太长,用其简称,在连表查询中经常用到。

(1).将结果列改为需要的名称。

Select id as stuno ,stuname as name from stu;

(2).用表的别名,标识列的来源:

select s.stuno s.stuname as magorName from stu as s left join majors as m on s.majorId = m.id;

(3).在合计函数中,给合计结果命名:

select count(stuno)as stuCount from stu;

18.distinct:不同的  作用:查询时忽略重复值

select distinct city from stu;

19.max/min

(1).查询学生中最高的分数

select max(score) from stu;

(2).查询学生中最小年龄

select min(age) from stu;

20.sum:

(1).查询stuno为1001的学生的各科总成绩

SC即为学生的成绩表,字段:StudentID,CourseID,Score

select sum(score) as totalScore from sc where stuno = ‘1001’

 

21.AVG:AVG函数返回数值列的平均值:

(1).查询学生的平均年龄:

select avg(age) as ageAverage from stu;

(2).求课程ID为C001的平均成绩

select avg(sciore) from sc where CourseID =’C001’;

22.Count() 函数返回匹配指定条件的行数

(1).查询学生总数

select count(no) from stu;

(2).查询学生年龄分布的总数:

select count(distinct age) from stu;

(3).查询男女生分布各有多少人

select sex,count(stuno) from stu group by sex;

23.group by:语句用于结合合计函数,根据一个或多个列对结果集进行分组

(1).查询学生的城市分布情况

select city count(stuno) from stu group by city;

(2).删除学习信息中重复记录:

根据列进行分组,如果全部列相同才定义为重复,则就需要group by所有字段。否则可按指定字段进行处理。

Delete from stu where stuno not in(select max(stuno) from stu group by stuno,stuname,age ,sex ,majorID)

24.having:在SQL语句中增加having 子句的原因是:where 关键字无法与合计函数一起使用。

(1).查询平均成绩大于等于60的学生stuno及平均成绩

select stuno avg(score) from sc group by stuno having avg(score)>=60;

(2).还是用HAVING的SQL语句中,可以有普通的WHERE条件:

 

查询平均成绩大于等于60,且学生ID等于1的学生的ID及平均成绩。

SELECT StudentID,AVG(Score) FROM SC

WHERE StudentID='1'

GROUP BY StudentID

HAVING AVG(Score)>=60

(3).查询总成绩在600分以上(包括600)的学生ID

select stuno from sc group by stuno having sum(score)>=600;

25.TOP:TOP 子句用于规定要返回的记录的数目。对于大数据很有用的,在分页时也会常常用到。

(1).查询年龄最大的三名学生信息

select top 3 stuno ,stuname from stu order by age desc;

(2).还是上一道题,如果有相同年龄的如何处理呢?

select stuno ,stuname ,age from stu where age in(select top 3 age from stu );

26.Case语句:

计算条件列表,并返回多个可能的结果表达式之一。

CASE 表达式有两种格式:

*CASE 简单表达式,它通过将表达式与一组简单的表达式进行比较来确定结果。

*CASE 搜索表达式,它通过计算一组布尔表达式来确定结果。

1)查询学习信息,如果Sex为0则显示为男,如果为1显示为女,其他显示为其他。

select stuno,stuname,CASE sex when ‘0’ THEN ‘男’ WHEN ‘1’ THEN ‘女’ ELSE ‘其他’END AS Sex from stu;

2)查询学生信息,根据年龄统计是否成年,大于等于18为成年,小于18为未成年

select stuno,stuname,CASE WHEN Age>=18 THEN ‘成年’ ELSE ‘未成年’ END AS ‘是否成年’from stu;

3)统计成年未成年学生的个数

select sum(CASE WHEN Age >=18 THEN 1 ELSE 0 END) ANS ‘成年’,SUM(CASE WHEN Age <18 THEN 1 ELSE AS ‘未成年’ from stu);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值