首 页 行业资讯 新车 试驾评测 养车用车 车型库

MySQL中常见的连接查询方式有哪些?

发布网友 发布时间:2022-04-21 17:20

我来回答

3个回答

懂视网 时间:2022-04-07 19:27

mysql语句查询技巧:

技巧1 比较运算符能用 “=”就不用“<>”

  “=”增加了索引的使用几率。

技巧2 明知只有一条查询结果,那请使用 “LIMIT 1”

  “LIMIT 1”可以避免全表扫描,找到对应结果就不会再继续扫描了。

技巧3 为列选择合适的数据类型

  能用TINYINT就不用SMALLINT,能用SMALLINT就不用INT,道理你懂的,磁盘和内存消耗越小越好嘛。

技巧4 将大的DELETE,UPDATE or INSERT 查询变成多个小查询

  能写一个几十行、几百行的SQL语句是不是显得逼格很高?然而,为了达到更好的性能以及更好的数据控制,你可以将他们变成多个小查询。

技巧5 使用UNION ALL 代替 UNION,如果结果集允许重复的话

  因为 UNION ALL 不去重,效率高于 UNION。

技巧6 为获得相同结果集的多次执行,请保持SQL语句前后一致

  这样做的目的是为了充分利用查询缓冲。

技巧7 尽量避免使用 “SELECT *”

  如果不查询表中所有的列,尽量避免使用 SELECT *,因为它会进行全表扫描,不能有效利用索引,增大了数据库服务器的负担,以及它与应用程序客户端之间的网络IO开销。

技巧8 WHERE 子句里面的列尽量被索引

  只是“尽量”哦,并不是说所有的列。因地制宜,根据实际情况进行调整,因为有时索引太多也会降低性能。

技巧9 JOIN 子句里面的列尽量被索引

  同样只是“尽量”哦,并不是说所有的列。

技巧10 ORDER BY 的列尽量被索引

  ORDER BY的列如果被索引,性能也会更好。

技巧11 使用 LIMIT 实现分页逻辑

  不仅提高了性能,同时减少了不必要的数据库和应用间的网络传输。

技巧12 使用 EXPLAIN 关键字去查看执行计划

  EXPLAIN 可以检查索引使用情况以及扫描的行。

技巧13 MySQL数字的取整、四舍五入、保留n位小数

更多相关免费学习推荐:mysql教程(视频)

热心网友 时间:2022-04-07 16:35

MySQL中常见的连接查询有:等值连接,使用=连接两列数据,所有能够匹配的结果都会被显示出来;内连接,关键字INNER JOIN ON,连接效果等同于等值连接;左连接,关键字LEFT JOIN ON,关键字左侧的表的所有数据均显示,关键字右侧的表匹配内容显示,无对应内容使用NULL填充;右连接,关键字RIGHT JOIN ON,关键字右侧的表的所有数据均显示,关键字左侧的表匹配内容显示,无对应内容使用NULL填充;一般情况下,左连接和右连接可以实现相同的连接效果。如果对这部分内容感兴趣,可以从黑马程序员获取测试相关课程了解一下。

热心网友 时间:2022-04-07 17:53

-mysql数据库的十种查询方式

-- (1)查询时起别名
SELECT id AS '编号',NAME AS '姓名',age AS '年龄'
FROM student;

-- (2)查询时添加常量列
SELECT id AS '编号',NAME AS '姓名',age AS '年龄',
'软件工程' AS '班级' FROM student;

-- (3)查询时合并列
-- 注意:只能合并数值列
SELECT id,NAME,age,math,english,
(math+english) AS '总成绩' FROM student;

-- (4)查询时去除重复
SELECT DISTINCT(address) FROM student;
-- 另一种方式
SELECT DISTINCT address FROM student;

-- (5)条件查询
-- 1.逻辑条件(and与 or或)
-- 1.1查询id=1且age=18的学生信息
SELECT * FROM student WHERE id=1 AND age=18;
-- 1.2查询age=18或age=20的学生
SELECT * FROM student WHERE age=18 OR age=20;
-- 1.3查询(id=1且age=18)或者(age=20)的学生
SELECT * FROM student WHERE id=1 AND age=18 OR age = 20;

-- 2.比较条件(> < >= <= = <>(不等于))
-- 2.1查询年龄>=19的学生
SELECT * FROM student WHERE age >= 19;
-- 2.2查询年龄大于等于18且id不为2的学生
SELECT * FROM student WHERE age>=18 AND id<>2;
-- 2.3查询id大于1或者age小于等于19的学生
SELECT * FROM student WHERE id> 1 OR age <=19;
-- 2.4查询姓名不为''空字符串的学生
-- 注意:<>''将空字符串和null都去除了
SELECT * FROM student WHERE NAME <> '';

-- 3.判空条件(is not null不为空,is null为空)
-- 3.1查询姓名为null的学生
SELECT * FROM student WHERE NAME IS NULL;
-- 3.2查询姓名不为null的学生
-- 注意:''空字符串和null是不同的
SELECT * FROM student WHERE NAME IS NOT NULL;

-- 4.模糊查询(like)
-- %表示占位符或统配符,代表任意字符串或什么都不写
-- _表示占位符,代表任意单个字符
-- 4.1查询姓张的学生
SELECT * FROM student WHERE NAME LIKE '张%';
-- 4.2查询姓名中包含'三'的学生
SELECT * FROM student WHERE NAME LIKE '%三%';
-- 4.3查询名字中包含三的学生,且名字为3个字
SELECT * FROM student WHERE NAME LIKE '_三_';

-- (6)聚合函数
-- max()最大值 min()最小值 AVG()平均值
-- round()保留几位小数 count()统计记录数
-- 1.求出数学成绩的最高分
SELECT MAX(math) FROM student;
-- 2.查询数学成绩最高分的学生信息
-- 使用子查询(in),表示在某个范围
SELECT * FROM student WHERE math IN
(SELECT MAX(math) FROM student);
-- 3.求出英语成绩的最低分
SELECT MIN(english) FROM student;
-- 4.求数学成绩的平均成绩
SELECT AVG(math) FROM student;
-- 5.保留2位小数(四舍五入)
SELECT ROUND(math,2) FROM student;
-- 6.统计姓名字段有多少条记录
-- 注意:不包含null数据
SELECT COUNT(NAME) FROM student;
-- 7.查询student里共有多少条记录(数据)
-- *通配符,表示查询所有字段
SELECT COUNT(*) FROM student;

-- (7)查询后排序(order by)
-- 注意:order by必须写在where条件的后面
-- asc升序:按照字典序a-z从小到大排序
-- desc降序:按照字典序从大到小排序
-- 1.对英语成绩降序排序
SELECT * FROM student ORDER BY english DESC;
-- 2.对英语成绩降序排序,对数学成绩升序排序
-- 注意:先按照英语成绩降序排序,
-- 当英语成绩相同时按数学成绩升序排序
SELECT * FROM student ORDER BY english DESC,math ASC;
-- 3.对数学成绩进行排序
-- 没有写排序方式,默认按升序排序
-- 默认升序可以省略不写
SELECT *FROM student ORDER BY english,math;

-- (8)分页查询(limit m,n)
-- limit m,n m表示从哪个下标开始,选取n条数据
-- 这里n表示每页显示的条数
-- 对student表里的6条数据分页,每页显示2条,共3页
-- 第一页: 0~1
SELECT * FROM student LIMIT 0,2;
-- limit (1-1)*2,2 limit 0,2
-- 第二页: 2~3
SELECT * FROM student LIMIT 2,2;
-- limit (2-1)*2,2 limit 2,2
-- 第三页: 4~5
SELECT * FROM student LIMIT 4,2;
-- limit (3-1)*2,2 limit 4,2
-- 需求:假如表里有1000条数据,每页显示20条
-- 请问第34页显示的那些数据?
-- 推理分页公式:limit (第几页-1)*n,n
-- limit (34-1)*20,20

-- (9)分组查询(group by)
-- 1.需求:查询每个地区的学生有多少人
-- 显示结果:地区 人数
SELECT address AS '地区',COUNT(*) AS '人数'
FROM student GROUP BY address;

-- (10)分组查询后筛选(having)
-- 2.需求:查询地区人数>=2人的地区
SELECT address AS '地区',COUNT(*) AS '人数'
FROM student GROUP BY address HAVING COUNT(*)>2;

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com