数据库sql语句select的使用,理解

1. sql语句的书写顺序

 SELECT  DISTINCT<Select_list>
 FROM <left_table>   <join_type>JOIN<right_table>  ON<join_condition>
 WHERE<where_condition>
 GROUP BY<group_by_list>  WITH {CUBE|ROLLUP}  HAVING<having_condtion>
 ORDER BY<order_by_list>
 LIMIT<limit_number>

2. sql语句的执行顺序

(1) FROM <left_table> 
(2) ON<join_condition>   (3) <join_type>JOIN<right_table>
(4) WHERE<where_condition>
(5) GROUP BY<group_by_list>  (6) WITH {CUBE|ROLLUP} (7) HAVING<having_condtion>
(8) SELECT (9)DISTINCT<Select_list>
(10) ORDER BY<order_by_list>
(11) LIMIT<limit_number>

关键词 distinct用于返回唯一不同的值。

on跟在join后面作为各种连接(例如:内连接,左外连接)的连接条件

3.聚合函数:

作用于一组数据,并对一组数据返回一个值

注意:

-- 这样写是错误的   学生学号有很多个,统计的学生个数count只有一个  ----其他聚合函数类似
SELECT stu.sno,COUNT(stu.sno) count
FROM student stu
- AVG 返回满足where条件的一列平均值 ,,也可以与group by配合使用

例子:

求SCORE成绩表中编号为1的所有学生平均成绩

SELECT AVG(score) AS 平均分
FROM score 
WHERE subid = 1
- COUNT 返回某一列行的总数,,也可以与group by配合使用

例子:

统计参加了科目编号为1考试的学生编号

SELECT COUNT(*) 考试人数
FROM score
WHERE subid = 1
- MAX/MIN 返回满足where条件的一列的最大/最小值,,也可以与group by配合使用
  • 例子:

求SCORE 成绩表中科目编号为2 的学生最高成绩和最低成绩

SELECT MAX(score),MIN(score)
FROM score
WHERE subid = 2
- SUM返回满足where条件的行的和,,也可以与group by配合使用
  • 例子:

求SCORE成绩表中所有学生成绩的总和

SELECT SUM(score)
FROM score

4.where的使用:

1. where后面写的是数据库字段名,不能使用别名,聚合函数

2. 联表查询时,where提供连接条件 一个表的外键连接另一个表的主键

3.where后面使用比较运算符

操作符含义
=等于(不是 ==)
>大于
>=大于,等于
<小于
<=小于,等于
<> 或 !=不等于

4. 其他操作符

  • between — and — 再两个之间 (包含边界)
  • not between — and — 不在两个值之间

例子:
查询在1995-07-13到1995-07-15之间出生的学生信息

select * from student 
where birthday  BETWEEN '1995-07-13'  AND  '1995-07-15'
  • IN(set) 等于值列表中的一个
  • NOT IN(元素1,元素2,—,元素n)

例子:

查询班级编号是1或者是2的学员信息

SELECT * FROM student 
WHERE cid IN(1,2)

查询班级编号不是1或者是2的学员信息

SELECT * FROM student WHERE cid NOT  IN(1,2)
  • LIKE 模糊查询

    % 代表任意个字符

    _ 代表一个字符

例子:

查询姓张的学员信息

SELECT * FROM student
WHERE name LIKE '张%'
  • is NULL 空值
  • NOT is NULL

5.逻辑运算

操作符含义
AND逻辑并
OR逻辑或
NOT逻辑否

5. group by

group by 可以对一张表自定义的分成若干组,这样就可以分组统计数据
在这里插入图片描述

例子:

统计出各学科平均成绩

SELECT subid,AVG(score)
FROM score
GROUP BY subid

6.having

where和having的区别

1.因为where后面只能写数据库原始的字段名,不能写别名,聚合函数

2.having后面不能写数据库原始的字段名,只能写别名,聚合函数

3.where针对表中的列发挥作用,查询数据。。having针对查询结果的列发挥作用,筛选数据。

4.where在group by 之前,,having在group by之后


例子: 这个例子不是很规范知识说明

  1. 查询出所有成绩加5分后,成绩还是小于60分的学生学号
-- 错误的         WHERE后面不能写别名
SELECT cs.sno,cs.cj+5 AS jw
FROM cs
WHERE jw  < 80
-- 正确的
SELECT cs.sno,cs.cj+5 AS jw
FROM cs 
HAVING jw  < 80                
-- 当然这样写似乎更好   只有学号不带分数
SELECT cs.sno
FROM cs
WHERE cs.cj+5 < 80
-- 错误的            HAVING后面不能写数据库原始的字段名
SELECT cs.sno
FROM cs
HAVING cs.cj+5 < 80
  1. 查询出课程3成绩加5分后,成绩还是小于60分的学生学号
-- 不太恰当  携带成绩
SELECT cs.sno,cs.cj+5 AS jw
FROM cs
WHERE cs.cno = 4
HAVING jw < 85

-- 错误的            WHERE后面不能写别名
SELECT cs.sno,cs.cj+5 AS jw
FROM cs      
WHERE cs.cno = 4 AND jw < 85

-- 错误的             HAVING后面不能写数据库原始的字段名
SELECT cs.sno,cs.cj+5 AS jw
FROM cs           
HAVING jw < 85 AND cs.cno = 4

--   这样似乎好点    只查询出学号
SELECT cs.sno
FROM cs
WHERE cs.cno = 4 AND cs.cj+5 < 85
  1. 获取平均成绩大于等于70的各科目的平均成绩
SELECT subid,AVG(score)
FROM score
GROUP BY subid HAVING AVG(score) >= 70

7. order by

Order by 指定排序的列,排序的列即可是表中的列名,也可以是select 语句后指定的列名。
Asc 升序、Desc 降序,默认升序
ORDER BY 不能用在子查询中

例子:

查询学生信息并按照班级编号升序

SELECT * FROM student
ORDER BY cid 

8.limit

例子:

查询年龄最大的五名学生的信息

SELECT * FROM student
ORDER BY birthday
LIMIT 0, 5

查询学生表中第十名后面所有学生的信息

SELECT * FROM student
LIMIT 9, -1

待完成:联表

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值