MYSQL的查询语句

-- 查询所有学生
SELECT * FROM student

-- 查询指定字段
SELECT `StudentNo`,`StudentName` FROM student

-- 起别名
SELECT `StudentNo` AS 学号, `StudentName` AS 学生姓名 FROM student

-- 函数
SELECT CONCAT('姓名:',`StudentName`) AS 新名字 FROM student

-- 去重 distinct
-- 查看一下有哪些同学参加了考试
SELECT DISTINCT `StudentNo` FROM result  -- 发现重复数据,去重

-- 学员考试成绩+1分查看
SELECT `StudentNo`,`StudentResult`+1 AS '提分后' FROM result


-- where
-- 查询考试成绩在95~100分之间
SELECT `StudentNo`,`StudentResult` FROM result 
WHERE `StudentResult`>=95 AND `StudentResult`<=100

SELECT `StudentNo`,`StudentResult` FROM result
WHERE `StudentResult` BETWEEN 95 AND 100

-- 模糊查询

-- 查询姓张的学生
SELECT `StudentNo`,`StudentName` FROM `student`
WHERE `StudentName` LIKE '张%'

-- 查询姓张的学生,而且名字只有两个字
SELECT `StudentNo`,`StudentName` FROM `student`
WHERE `StudentName` LIKE '张_'

-- 查询学号在1000,1002,1003之内的学生
SELECT `StudentNo`,`StudentName` FROM `student`
WHERE `StudentNo` IN (1000,1002,1003)

-- 查询邮箱不为空的学生信息
SELECT `StudentNo`,`StudentName`,`Email` FROM `student`
WHERE `Email` IS NOT NULL


-- 连表查询
-- inner join:如果表中至少有一个匹配,就返回行
-- left join:会从左表中返回所有值,即使右表中没有匹配
-- right join:会从右表中返回所有的值,即使左表中没有匹配

-- 查询参加了考试的同学(学号,姓名,科目编号,分数)
/*
分析:1.要查询哪些字段
      2.这些字段来自于哪个表
      3.确定交叉点   即两个表哪个字段相同
*/
SELECT s.`StudentNo`,`StudentName`,`SubjectNo`,`StudentResult`
FROM `student` s
LEFT JOIN `result` r
ON s.StudentNo=r.StudentNo    -- 这样成绩为空的学生也会被查询出来,因为用左连接

SELECT s.`StudentNo`,`StudentName`,`SubjectNo`,`StudentResult`
FROM `student` s
RIGHT JOIN `result` r
ON s.StudentNo=r.StudentNo

-- 查询了参加考试的同学信息:学号,学生姓名,科目名,分数
-- 分析:有三个表  ,因为是查参加考试的,用右连接
SELECT s.`StudentNo`,`StudentName`,`SubjectName`,`StudentResult`
FROM `student` s
RIGHT JOIN `result` r
ON s.`StudentNo`=r.`StudentNo`
INNER JOIN `subject` sub
ON r.`SubjectNo`=sub.`SubjectNo`


-- 查询参加 数据结构-1 考试的同学信息 : 学号,学生姓名,科目名,分数
SELECT s.`StudentNo`,`StudentName`,`SubjectName`,`StudentResult`
FROM `student` s
INNER JOIN `result` r
ON s.`StudentNo`=r.`StudentNo`
INNER JOIN `subject` sub
ON sub.`SubjectNo`=r.`SubjectNo`  
WHERE `SubjectName`='数据结构-1'


-- 排序和分页
-- 排序:order by 字段 排序方式         (升序:ASC   降序:DESC)
-- 分页:limit 0,5     0:起始页  5:页面大小
SELECT s.`StudentNo`,`StudentName`,`SubjectName`,`StudentResult`
FROM `student` s
INNER JOIN `result` r
ON s.`StudentNo`=r.`StudentNo`
INNER JOIN `subject` sub
ON sub.`SubjectNo`=r.`SubjectNo`  
WHERE `SubjectName`='数据结构-1'
ORDER BY `StudentResult` ASC
LIMIT 0,5


-- 练习:查询Java第一学年 课程成绩排名前十的学生 , 并且分数要大于80的学生信息(学号,姓名,课程名称,分数)
SELECT s.`StudentNo`,`StudentName`,`SubjectName`,`StudentResult`
FROM `student` s
INNER JOIN `result` r
ON s.`StudentNo`=r.`StudentNo`
INNER JOIN `subject` sub
ON sub.`SubjectNo`=r.`SubjectNo`
WHERE `SubjectName`='Java第一学年' AND `StudentResult`>=80
ORDER BY `StudentResult` DESC
LIMIT 0,10

-- 嵌套查询
-- 查询课程为 高等数学-2 且分数不小于80的同学的学号和姓名
-- 方式1:连接查询
-- 分析:有高度数学-2  需要`subject`表  有80分需要`result`表,有学生的基本信息,需要`student`表
SELECT s.`StudentNo`,`StudentName`
FROM `student` s
INNER JOIN `result` r
ON s.`StudentNo`=r.`StudentNo`
INNER JOIN `subject` sub
ON sub.`SubjectNo`=r.`SubjectNo`
WHERE `SubjectName`='高度数学-2' AND `StudentResult`>=80

-- 方式2:嵌套查询
SELECT `StudentNo`,`StudentName` FROM `student` WHERE `StudentNo` IN(
   SELECT `StudentNo` FROM `result` WHERE `StudentResult`>=80 AND `SubjectNo`=(
       SELECT `SubjectNo` FROM `subject` WHERE `SubjectName`='高度数学-2'   
   )
)

SELECT NOW()  -- 获取当前时间

-- 聚合函数
SELECT COUNT(`StudentName`) FROM `student`     -- 会过滤null值的行
SELECT SUM(`StudentResult`) FROM `result`
SELECT AVG(`StudentResult`) FROM `result`
SELECT MAX(`StudentResult`) FROM `result`
SELECT MIN(`StudentResult`) FROM `result`

-- 查询不同课程的平均分,最高分,最低分,平均分大于80
SELECT `SubjectName`, AVG(`StudentResult`) AS 平均分, MAX(`StudentResult`) AS 最高分 ,MIN(`StudentResult`) AS 最低分
FROM `result` r
INNER JOIN `subject` s
ON r.`SubjectNo`=s.`SubjectNo`
GROUP BY r.`StudentNo`   -- 通过什么字段来分组
HAVING 平均分>80

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值