MYSQL数据库——DQL操作—MYSQL函数

DQL操作语言

数据库中最核心最重要的语言

查询指定字段

  • 查询某表中的所有数据
SELECT * FROM student
  • 查询多个字段的数据
SELECT `StudentNo`, `StudentName` FROM student
  • 查询数据起别名
SELECT `StudentNo` AS 序号 ,`StudentName` AS 姓名 FROM student
  • 使用函数
SELECT CONCAT('姓名:', StudentName) FROM student
  • 去重 ———— 去掉所有重复数据 只显示一条
SELECT DISTINCT `StudentNo` FROM `result`
  • 数据库的列
SELECT VERSION() —————— 查询系统版本
SELECT 520*1314 AS 结果 —————— 计算结果
SELECT `StudentNo`,`StudentResult` AS 原成绩,`StudentResult`+1 AS 加分后 FROM `result`

where查询

  • 作用:检索数据中符合条件的值
  • 查询考试成绩在 95~100 分之间
SELECT studentNo,`StudentResult` FROM result 
WHERE StudentResult>=95 AND StudentResult<=100
  • – 除了科目号为1的学生之外的同学的成绩
SELECT studentNo,`StudentResult` FROM result 
WHERE `SubjectNo`!= 1;

模糊查询

like

  • 查询姓刘的学生 ———— LIKE ‘刘%’
SELECT `StudentNo`,`StudentName` FROM `student`
WHERE `StudentName` LIKE '刘%'
  • 查询姓刘的学生 名字后面只有一个字的 ———— LIKE ‘刘_’
SELECT `StudentNo`,`StudentName` FROM `student`
WHERE `StudentName` LIKE '刘_'
  • 查询姓刘的学生 名字后面只有两个字的 ———— LIKE ‘刘__’
SELECT `StudentNo`,`StudentName` FROM `student`
WHERE `StudentName` LIKE '刘__'
  • 查询名字中间有十字的学生 ———— LIKE ‘%十%’
SELECT `StudentNo`,`StudentName` FROM `student`
WHERE `StudentName` LIKE '%十%'

in

  • 查询 学号为1001,1002,1003的学生 ———— IN (1001,1002,1003)
SELECT `StudentNo`,`StudentName` FROM `student`
WHERE `StudentNo` IN (1001,1002,1003)
  • 查询地址在北京东城区和安徽的学生 ———— IN (‘北京东城区’,‘安徽’)
SELECT `StudentNo`,`StudentName` FROM `student`
WHERE `Address` IN ('北京东城区','安徽')

null

  • 查询地址为空的学生 ———— = ‘’
SELECT `StudentNo`,`StudentName` FROM `student`
WHERE `Address` = ''
  • 查询有出生日期的学生 ————— IS NOT NULL
SELECT `StudentNo`,`StudentName` FROM `student`
WHERE `BornDate` IS NOT NULL
  • 查询没有出生日期的学生 ————— IS NULL
SELECT `StudentNo`,`StudentName` FROM `student`
WHERE `BornDate` IS  NULL

联表查询

连接语句 解释
inner join 若表中有一个匹配 则连接成功
left join 查询左表中所有值 即使右表没有
right join 查询右表中所有值 即使右表没有
  • 查询参加考试的同学

inner join

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

right join

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

left join

SELECT s.`StudentNo`,`StudentName`,`SubjectNo`,`StudentResult`
FROM result r
LEFT JOIN student s
ON s.`StudentNo` = r.`StudentNo`
  • 查询缺考的学生
SELECT s.`StudentNo`,`StudentName`,`SubjectNo`,`StudentResult`
FROM result r
LEFT JOIN student s
ON s.`StudentNo` = r.`StudentNo`
WHERE `StudentResult` IS NULL
  • 查询了参加考试的学生的学号,学生姓名,科目名,分数
SELECT s.`StudentNo`,`StudentName`,`SubjectName`,`StudentResult`
FROM student s
INNER JOIN result r
ON s.`StudentNo` = r.`StudentNo`
INNER JOIN `subject` sub
ON r.`SubjectNo` = sub.`SubjectNo`
  • 查询学生的学号,学生的姓名,年级名称
SELECT `StudentNo`,`StudentName`,`GradeName`
FROM student s
INNER JOIN `grade` g
ON s.`GradeId` = g.`GradeID`
  • 查询 科目名称 和科目所属的年级名称
SELECT `SubjectName`,`GradeName`
FROM `subject` sub
INNER JOIN `grade` g
ON sub.`GradeId` = g.`GradeID`
  • 查询了参加 数据库结构-1 考试的学生的 学号 姓名 科目名和分数
SELECT s.`StudentNo`,`StudentName`,`SubjectName`,`StudentResult`
FROM student s
INNER JOIN `subject` sub
ON s.`GradeID` = sub.`GradeId`
INNER JOIN `result` r
ON sub.`SubjectNo` = r.`SubjectNo`
WHERE `SubjectName` = '数据库结构-1'

自连接查询

  • 查询父子信息
SELECT a.`categoryName` AS 父栏目 ,b.`categoryName` AS 子栏目
FROM `category` AS a, `category` AS b
WHERE a.`categoryid` = b.`pid`

排序和分页

  • 排序:Order by :根据什么进行排序

DESC——降序
ASC——升序

  • 分页: limit 起始值 页面的大小
SELECT s.`StudentNo`,`StudentName`,`SubjectName`,`StudentResult`
FROM student s
INNER JOIN `subject` sub
ON s.`GradeID` = sub.`GradeId`
INNER JOIN `result` r
ON sub.`SubjectNo` = r.`SubjectNo`
WHERE `SubjectName` = '数据库结构-1'
ORDER BY `StudentResult` ASC
LIMIT 0,10

子查询

  • 在where语句中嵌套一个查询语句 由里到外查询
  • 查询 数据库结构-1 的学生的考试成绩 学号,科目编号,成绩降序排列

方法一:联表查询

SELECT `StudentNo`,r.`SubjectNo`,`StudentResult` 
FROM `result` r 
INNER JOIN `subject` sub 
ON r.SubjectNo = sub.SubjectNo 
WHERE SubjectName = '数据库结构-1' 
ORDER BY StudentResult DESC

方法二:子查询

 SELECT `StudentNo`,`SubjectNo`,`StudentResult` 
 FROM `result` 
 WHERE SubjectNo = (      
 				SELECT SubjectNo FROM `subject`       
 				WHERE SubjectName = '数据库结构-1' )
ORDER BY StudentResult DESC
  • 查询课程为 高等数学-2 且分数不小于 80 的同学的学号和姓名

联表查询

SELECT s.`StudentNo`,`StudentName`
FROM student s
INNER JOIN `result` r
ON s.`StudentNo` = r.`StudentNo`
INNER JOIN `subject` sub
ON r.`SubjectNo` = sub.`SubjectNo`
WHERE `SubjectName` = '高等数学-2' AND `StudentResult`>=80

子查询

SELECT s.`StudentNo`,`StudentName`
FROM student s
INNER JOIN `result` r
ON s.`StudentNo` = r.`StudentNo`
WHERE `StudentResult`>=80 AND`SubjectNo` = (
		SELECT `SubjectNo` FROM `subject`
		WHERE `SubjectName`='高等数学-2'
)

分组和过滤

  • HAVING ———— 通过什么字段来分组
  • 查询所有课程的最高分 最低分和平均分 平均分>80
SELECT SubjectName, AVG(StudentResult) AS 平均分,MAX(StudentResult) AS 高 分,MIN(StudentResult) AS 低分 
FROM result r 
INNER JOIN `subject` sub 
ON r.`SubjectNo` = sub.`SubjectNo` 
GROUP BY r.SubjectNo --  平均分>80

MYSQL函数

常用函数

  • 数学运算
SELECT ABS(-8)  —————— 绝对值 
SELECT CEILING(9.4) —————— 向上取整 
SELECT FLOOR(9.4)  —————— 向下取整 
SELECT RAND() —————— 返回一个 0~1 之间的随机数 
SELECT SIGN(10)   —————— 判断一个数的符号   0-0   负数返回-1,正数返回 1
  • 字符串函数
SELECT CHAR_LENGTH('即使再小的帆也能远航') —————— 字符串长度 
SELECT CONCAT('我','爱','你们') —————— 拼接字符串 
SELECT INSERT('我爱编程helloworld',1,2,'超级热爱') —————— 查询从某个位置开始替换某个长度 
SELECT LOWER('KuangShen') —————— 小写字母 
SELECT UPPER('KuangShen') —————— 大写字母 
SELECT INSTR('kuangshen','h') —————— 返回第一次出现的子串的索引 
SELECT REPLACE('狂神说坚持就能成功','坚持','努力') ——————  替换出现的指定字符串 
SELECT SUBSTR('狂神说坚持就能成功',4,6) —————— 返回指定的子字符串 (源字符串,截取的位置,截 取的长度) 
SELECT REVERSE('清晨我上马') —————— 反转
  • – 查询姓 周的同学,名字 邹
SELECT REPLACE(studentname,'周','邹') FROM student 
WHERE studentname LIKE '周%'
  • 时间和日期函数
SELECT CURRENT_DATE() —————— 获取当前日期 
SELECT CURDATE() —————— 获取当前日期 
SELECT NOW() —————— 获取当前的时间 
SELECT LOCALTIME() —————— 本地时间 
SELECT SYSDATE() —————— 系统时间
SELECT YEAR(NOW()) —————— 年
SELECT MONTH(NOW())  —————— 月
SELECT DAY(NOW())  —————— 日
SELECT HOUR(NOW())  —————— 时
SELECT MINUTE(NOW())  —————— 分
SELECT SECOND(NOW()) —————— 秒
  • 系统
SELECT SYSTEM_USER() ——————查询系统用户
SELECT USER()  —————— 查询用户
SELECT VERSION() —————— 查询版本号

聚合函数

函数名称1 描述
Count( ) 计数
Sum( ) 求和
AVG( ) 平均值
Max( ) 最大值
Min( ) 最小值
SELECT COUNT(`StudentNo`) FROM student —————— 计数
SELECT SUM(`StudentResult`) AS 总和 FROM result 
SELECT AVG(`StudentResult`) AS 平均分 FROM result 
SELECT MAX(`StudentResult`) AS 高分 FROM result 
SELECT MIN(`StudentResult`) AS 低分 FROM result

查询格式

    1. select …
    1. rom…
    1. 联合查询(inner join —— on)
    1. where 条件
    1. Group by
    1. Having
    1. Order by (DESC 或者ASC)
    1. Limit()

你可能感兴趣的:(MYSQL数据库——DQL操作—MYSQL函数)