(DQL: Data Query Language : 数据查询语言)
- 1.所有的查询操作都用他 select.
- 2.简单的查询,复杂的查询它都能做.
- 3.数据库中最核心的语言,最重要的语句.
- 4.使用频率最高的语句.
-- 查询某涨表的全部
SELECT * FROM student;
-- 查询指定字段
SELECT `name`, `id` FROM student;
-- 别名 给结果起一个名字 AS 也可以给表起别名
SELECT `name` AS 名字, `id` AS 学生id FROM student AS s;
-- 函数 CONCAT(a,b) 拼接
SELECT CONCAT('名字',name) AS 新名字 FROM student;
-- 去重
SELECT DISTINCT `studentName` FROM student;
-- 学生成绩+1分查看 (表达式)
SELECT `sutdentNo`, `studentResults` + 1 AS '提分后' FROM result;
-- 查询姓刘的学生 刘 后面不管几个字 或 %新新% 带新新两个字的
SELECT `studentNo`, `studentName` FROM student WHERE studentName LIKE '刘%';
-- 查询姓刘的学生,后面只有一个字的 一个下划线(_)代表一个字符 或 _新新_
SELECT `studentNo`, `studentName` FROM student WHERE studentName LIKE '刘_';
-- 查询在北京的学生 IN(具体的一个或者多个值)
SELECT `studentNo`, `studentName` FROM student WHERE `address` IN ('北京');
多表查询
/*思路
1.分析需求,都需要查询哪些字段,来自哪张表(连接查询)
2.确定使用哪种查询 7种
确定交叉点(这些表中,哪些数据是相同的) 必须有
*/
-- INNER JOIN
SELECT s.studentNo,studentName,studentResult FROM student AS s
INNER JOIN result AS r
WHERE s.studentNo = r.studentNo
↑ 如果表中至少有一个匹配,就返回行
-- RIGHT JOIN
SELECT s.studentNo,studentName,studentResult FROM student AS s
RIGHT JOIN result AS r
ON s.studentNo = r.studentNo
↑ 会返回右表中所有的值,即使左表中没有匹配
-- LEFT JOIN
SELECT s.studentNo,studentName,studentResult FROM student AS s
LEFT JOIN result AS r
ON s.studentNo = r.studentNo
↑ 会返回左表中所有的值,即使右表中没有匹配
JOIN (链接的表) ON (判断条件) 链接查询是一个越发,
WHERE等值查询,但是他俩的结果是一样的.
分页和排序
/* 排序和分页
排序 : 升序ASC 降序DESC
ORDER BY 根据哪个条件排序,怎么排
LIMIT 语法: LIMIT 起始值 页面的大小 (( n - 1) * pageSize, pageSize)
*/
SELECT s.studentNo,studentName,studentResult FROM student AS s
LEFT JOIN result AS r
ON s.studentNo = r.studentNo
ORDER BY studentResult DESC -- 排序
LIMIT 0,5
-- 子查询 由内向外
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 ABS(-8) -- 绝对值
SELECT CEILING(9.4) -- 向上取整
SELECT FLOOR(9.4) -- 想下取整
SELECT RAND() -- 返回一个0-1之间的随机数
SELECT SIGN() -- 判断一个数的符号 0-0 负数返回-1 整数返回1
-- 字符串
SELECT CHAR_LENGTH('司徒新新') -- 字符串长度
SELECT CONCAT('我','爱','你们') -- 拼接字符串
SELECT INSERT('新新爱变成',2,3,'超级热爱') -- 查询,从某个位置开始替换某个长度
SELECT LOWER('SituXinXin') -- 全部变成小写字母
SELECT UPPER('SituXinXin') -- 全部变成大写字母
SELECT INSTR('SituXinXin','t') -- 返回第一次出现的子串的索引
SELECT REPLACE('新新说躺着就能赚钱','躺着','努力') -- 替换出现的字符串
SELECT SUBSTR('新新说坚持就能赚钱',4,7) -- 返回指定的字符串(源字符串,截取的位置,截取的长度)
SELECT REVERSE("新新徒司") -- 反转
-- 时间和日期函数(记住)
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() -- 查询版本
聚合函数
-- 聚合函数
-- 都能够统计表中的数据
SELECT COUNT(studentName) FROM student; -- COUNT(指定列),会忽略所有的null值
SELECT COUNT(*) FROM student; -- COUNT(*),不会忽略所有的null值
SELECT COUNT(1) FROM student; -- COUNT(1),不会胡烈所有的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
SELECT subjectName, AVG(studentResult) AS 平均分, MAX(studentResult) FROM result r
INNER JOIN `subject` sub
ON r.subjectNo = sub.subjectNo
GROUP BY r.subjectNo
HAVING 平均分 > 80
-- 分组
SELECT subjectName, AVG(studentResult) AS 平均分, MAX(studentResult) FROM result r
INNER JOIN `subject` sub
ON r.subjectNo = sub.subjectNo
GROUP BY r.subjectNo
HAVING 平均分 > 80
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,'新新1','12345678'),(2,'新新2','12345678'),(3,'新新3','12345678'),(4,'新新4','12345678')
UPDATE testmd5 SET pwd = MD5(pwd) -- 加密
INSERT INTO testmd5 VALUES (5,'新新5',MD5('lxx548946')) -- 插入一条新的
SELECT * FROM testmd5 WHERE `name` = '新新5' AND pwd = MD5('lxx548946') -- 查询
网友评论