4.SQL查询数据***
4.1 SQL:数据库查询语言
- 所有的查询操作都用它select
- 简单复杂的查询都能做
- 数据库中最核心的语言
- 使用频率最高
4.2 指定查询字段
-- SELECT * FROM TABLENAME
SELECT * FROM student
-- 指定字段查询
-- SELECT 字段列,字段列,字段列 FROM TABLENAME
-- 别名查询--字段、表
-- SELECT 字段列 as 别名1,字段列 as 别名2 FROM TABLENAME
SELECT studentname as 姓名,sex as 性别 FROM student
-- 拼接
SELECT CONCAT('学名:',studentname) as 姓名 FROM student
- 去重:DISTINCT字段列 去除SELECT查询出来重复的数据只显示一条
SELECT DISTINCT studentno FROM student
SELECT VERSION() -- 函数
SELECT 20-2 as calc -- 计算结果
SELECT @@auto_increment_increment -- 查询自增步长(变量)
- 数据库中的表达式:文本值,列,null,函数,计算表达式,系统变量…
SELECT 表达式 FROM TABLENAME
4.3 where条件子句
- 作用检索数据中的符合条件的值
- 搜索条件是有一个或多个表达式组成,结果为boolean
运算符 | 语法 | 描述 |
---|---|---|
and && | a and b a&&b | 短路与 |
or || | a or b a||b | 短路或 |
Not ! | not a !a | 短路非 |
- 尽量使用英文字母
-- != NOT
SELECT * FROM student WHERE not studentno=1000
SELECT * FROM student WHERE studentno !=1000
-- 区间查询
SELECT * FROM result WHERE studentresult BETWEEN 75 and 85
4.4 模糊查询
- 本质:比较运算符,结果为boolean
运算符 | 语法 | 描述 |
---|---|---|
is null | 操作符为null,结果为真 | |
is not null | 操作符不为null,结果为真 | |
between | a between b and c | 若a在b和c之间,结果为真 |
like | a like b | sql匹配,a匹配b,结果为真 |
in(具体的值) | a in(a,b,c) | 若a在此列表某个值中,结果为真 |
-- %代表0到任意个字符,_代表一个字符
SELECT * FROM student WHERE studentname LIKE '赵%'
SELECT * FROM student WHERE studentname LIKE '赵_'
-- 匹配两个字符
SELECT * FROM student WHERE studentname LIKE '赵__'
4.5 联表查询
-
跨数据库查询在业务层面
-
数据库来源:本地数据库和云数据库
-
图片:文件存储数据库MogDB(非关系的)/视频:hdfs、ali-oss存储,评论-redis热点数据库
-
7 中join理论
-
mysql中没有full outer join操作,所以有2图
-
6为 左连接 union 右连接
-
7 为 左外连接 union 右外连接
-
字段、表别名中的as 可省略
-
ON 条件是生成临时表时使用的条件,它不管ON中的条件是否为真,都会返回左表中的记录
-
on确定连接(连接查询-等值判断) where确定筛选(等值查询),where筛选是建立表之后进行的操作,
-
假设存在多张表,先查询两张表后在增加
SELECT s.studentno,s.studentname,r.subjectno,r.studentresult,sub.subjectname FROM student as s
RIGHT join result r
on s.studentno = r.studentno
JOIN subject sub
on r.subjectno = sub.subjectno
WHERE s.studentno is not null
操作 | 描述 |
---|---|
join | 在笛卡尔积进行筛选 |
left join | 会从左表返回所有的值,即使右边表没有匹配 |
right join | 会从右表返回所有的值,即使左边表没有匹配 |
inner join | 在笛卡尔积中取交集(不取多余的记录也不取null记录) |
-- join 并集 where / on s.studentno = r.studentno 都行
-- RIGHT join 左右连接 只能用 on s.studentno = r.studentno
SELECT s.studentno,s.studentname,r.subjectno,r.studentresult FROM student as s
join result r
WHERE s.studentno = r.studentno
SELECT s.studentno,s.studentname,r.subjectno,r.studentresult FROM student as s
RIGHT join result r
on s.studentno = r.studentno
4.6 自连接查询
- 自己表和自己表连接。核心:一张表拆成2张一样的表
SELECT f.categoryname 一级目录,s.categoryname 二级目录 FROM category f,category s
WHERE f.`categoryid`=s.`pid`
4.7 分页和排序
-
关键字顺序不能乱
-
升序asc,降序desc
-
分页:缓解数据库压力,给人体验好。瀑布流:不断的下拉刷新(图片用瀑布流、博客,文本用分页)
-
limit 起始值,页面大小
-
起始下标=起始下标+pagesize*(n-1)起始值1、2是第一第二元素的位置。页数n
-
总页数:total/pagesize
4.8 子查询
-
上面的where的条件是固定的,若条件是计算出来的呢?
-
本质:在where的条件中嵌套一个查询语句
-
子查询:由里及外进行查询,效率高于联表查询
MySql函数见本专栏下一篇
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/123965.html