SQL day 13

-- 查询 Java程序设计-1 课程排名前十的学生,并且分数大于80的学生信息(学号,姓名,课程名称,分数)
SELECT s.studentno,studentname,subjectname,studentresult
FROM student AS s 
INNER JOIN result AS r 
ON s.studentno = r.studentno
INNER JOIN `subject` AS sub 
ON r.subjectno = sub.subjectno
WHERE subjectname = 'Java程序设计-1' AND studentresult > 80  -- WHERE 条件在order by 前面
ORDER BY studentresult DESC
LIMIT 0,10

子查询

本质:在where语句中嵌套一个子查询语句

-- 查询 数据库结构-1 的所有考试结果 (学号,科目编号,成绩),降序排列
-- 方式一
SELECT subjectno , r.subjectno , studentresult
FROM result AS r 
INNER JOIN `subject` AS sub 
ON r.studentno=sub.subjectno
WHERE subjectname = '数据库结构-1'
ORDER BY studentresult DESC 

-- 方式二 (子查询)由里到外
SELECT subjectno , r.subjectno , studentresult
FROM result
WHERE subjectno =(
        SELECT subjectno FROM `subject`
        WHERE subjectname ='数据库结构-1'
)        
ORDER BY studentresult DESC 

MySQL函数

常用函数

-- 数学运算
SELECT ABS(-3) -- 取绝对值
SELECT CEILING(9.4) -- 向上取整
SELECT FLOOR(9.4) -- 向下取整
SELECT RAND()-- 返回0到1的随机数
SELECT SIGN(-2) -- 判断一个属的符号

-- 字符串
SELECT CHAR_LENGTH('ssss') -- 返回字符串长度
SELECT CONCAT('s','f','g') -- 拼接字符串
SELECT INSERT ('hello',1,2,'cv') -- 插入替换  结果为cvllo
SELECT LOWER('HEloH') -- 转小写
SELECT UPPER(str)('HEloH') -- 转大写
SELECT INSTR('hello','e')-- 返回第一次出现字串的位置
SELECT REPLACE( 'hello','he','eh') -- 替换出现的指定字符串 结果为 ehllo
SELECT REVERSE('hello') -- 反转字符串

-- 时间和日期函数
SELECT CURRENT_DATE() -- 获取当前日期
SELECT NOW() -- 获取当前时间
SELECT LOCALTIME() -- 获取本地时间

聚合函数(常用)

函数名称描述
COUNT()计数
SUM()
AVG()
MAX()
MIN()
SELECT COUNT(studentname) FROM student -- count(字段)忽略null值
SELECT COUNT (*) FROM student -- 不会忽略null值
SELECT COUNT (1) FROM student -- 不会忽略null值

SELECT SUM(StudentResult) AS 总和 FROM result;
SELECT AVG(StudentResult) AS 平均分 FROM result;
SELECT MAX(StudentResult) AS 最高分 FROM result;
SELECT MIN(StudentResult) AS 最低分 FROM result;

-- 查询不同课程的平均分,最高分,最低分 且平均分大于80
SELECT subjectname,AVG(studentresult),MAX(studentresult),MIN(studentresult)
FROM result AS r 
INNER JOIN `subject` AS sub 
ON r.subjectno=sub.subjectno
GROUP BY r.subjectno -- (通过什么字段来分组
HAVING AVG(studentresult)>80 -- 过滤分组的条件 (不能用where)

数据库级别的MD5加密(拓展)

MD5 主要增强算法复杂度和不可逆性

MD5不可逆,具体的值的MD5是一样的

CREATE TABLE testmd5(
  id INT(4) NOT NULL ,
  name VARCHAR (20) NOT NULL ,
  pwd VARCHAR (50) NOT NULL,
  PRIMARY KEY (id)
)ENGINE =INNODB DEFAULT CHARSET = utf8

-- 明文密码
INSERT INTO testmd5 VALUES (1,'zhangsan','123456'),(2,'lisi','123456'),(3,'wangwu','123456')

-- 加密
UPDATE testmd5 SET pwd =MD5(pwd) WHERE id =1

-- 插入的时候加密
INSERT INTO tsetmd5 VALUES (4,'xiaoming',MD5('123456'))

SELECT总结

SELECT [ALL | DISTINCT]
{* | table.* | [table.field1[as alias1][,table.field2[as alias2]][,...]]}
FROM table_name [as table_alias]
  [left | right | inner join table_name2]  -- 联合查询
  [WHERE ...]  -- 指定结果需满足的条件
  [GROUP BY ...]  -- 指定结果按照哪几个字段来分组
  [HAVING]  -- 过滤分组的记录必须满足的次要条件
  [ORDER BY ...]  -- 指定查询记录按一个或多个条件排序
  [LIMIT {[offset,]row_count | row_countOFFSET offset}];
   -- 指定查询的记录从哪条至哪条

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值